Gdzie się podziały fora internetowe

Od kilku lat i upadku infojamy, a zwłaszcza ich forum przestałem się udzielać na forach internetowych. Owszem same fora internetowe nie upadły ale ich styl i przeznaczenie się zmieniło. Obecnie szukając rozwiązań wielu problemów Google cały czas linkuje do for jednak trafność odpowiedzi często pozostawia wiele do życzenia. Nie wynika to z mankamentu algorytmu Google ale profilu for i ich użytkowników. Dlaczego upadek, według mnie, wynika ze zmiany pokoleniowej i innych oczekiwań od obecnych użytkowników internetu? Czytaj więcej

Ksiażę black SEO. Z prawem na bakier.

Tytuł wpisu nawiązuje do określenia jakim na swoim blogu mianuje się jeden ze specjalistów SEO. We wpisie „Pozycjonowanie na pasożyta” na bazie studium własnego przypadku opisuje przykład nielegalnych metod pozycjonowania poprzez włamanie się na stronę i podpięcie innej treści. Na jedną z, opartych na Wordpresie, stron zapleczowych (http://transport-europa.net.pl zgadłem?)  prowadzonych przez tego specjalistę ktoś włamał się i postawił własny sklep. W paru zdaniach opisuje w jaki sposób zidentyfikował włamanie, jak znalazł niepożądane pliki oraz jak je usunął. Nic specjalnego żadnej wiedzy tajemnej. Dla mnie o wiele ciekawsze jest jak ktoś, kto uważa się za specjalistę, obsługuje wiele nawet dużych firm może przyznawać się, że kiedyś nie do końca działa zgodnie z licencjami (prawem?). Czytaj więcej

Telefon jako kamera USB

Dzisiejszy wpis będzie kolejnym z serii How-to. Tym razem szybki post jak podłączyć telefon jako kamerę USB do telefonu. Telefon opary na systemie Android (na innych również są podobne aplikacje) może nam służyć jako pełno prawna kamerka do Skype’a, rejestrowania filmów czy innych zastosowań jakie przyjdą nam do głowy. Jeżeli wykorzystamy połączenie WiFi może służyć jako idealna kamerka do monitoringu czy to dziecka czy posiadłości. PO zainstalowaniu odpowiedniego oprogramowania nie potrzebujemy karty sim dlatego idealnie nadaje się do zaadoptowania starego telefonu jako kamerki monitorującej. Czytaj więcej

Korwin-Mikke „wygrał” wybory do Parlamentu Europejskiego

25 maja odbyły się w wybory do Parlamentu Europejskiego. Po ogłoszeniu wyników zapanowało wielkie poruszenie w mediach, że Nowa Prawica, partia Janusza Korwin-Mikkiego przekroczyła 5-cio procentowy próg wyborczy i weszła do parlamentu. Wielkie debaty i przerażenie, że teraz tylko anarchia, gwałty i wolna amerykanka. Na pospolity lud padł blady strach. Debata skupiła się na 4, słownie czterech, europosłach Nowej Prawicy jakby to były wygrane wybory prezydenckie. Według mnie dyskutować powinniśmy o problemie jakim jest niska frekwencja oraz dlaczego będąc 6-stą reprezentacją tak mało mamy do powiedzenia. Skupmy się na całokształcie polskiej delegacji w Europie reprezentujmy Polskę nie poszczególne partię. (Nie nie łudzę się, że polityka jest dla ludzi ;] )

Nie głosowałam na Nową Prawicę, nie jestem zwolennikiem Nowej Prawicy ani samego Korwin-Mikkiego ale nie widzę powodu, dla którego ktoś miałby nie głosować jeżeli tak uważa. Specjaliści i socjolodzy debatują dlaczego takiej partii udało się przekroczyć próg. Ja ma na to prostą odpowiedź DEMOKRACJA. Dzisiaj 4.06 świętujemy „25 lat demokracji”, to właśnie ta demokracja pozwoliła wybrać wyborcom tego kogo chcą. I nie ważne czy jest to Bubel, Kononowicz czy Korwin-Mikke, chcieć to mieć. W większości mediów (jeśli nie we wszystkich mainstreamowych) wypowiedzi są w  tonie negatywnym. Wskazuje się młodych jako winnych. Winnych czego? Wolnego wyboru? Młodzi (18-25 lat) stanowili 43% jego elektoratu (do 40 roku życia stanowili prawie 75%) wybrali ofertę dla nich najbardziej odpowiednią. Zarzuca się młodym, że nie znają się na ekonomii i gospodarce, że postulaty Korwin-Mikkiego to tylko populizm. Człowiek wybiera to co dla nich najlepsze i młodzi uważają, że właśnie poglądy JKM są dla nich najbardziej odpowiednie. Większość partii zapomniała w ogóle o młodych. Opierają się na swoim twardym elektoracie, który głosuje na nich z przyzwyczajenia i niechęci do zmian. „Stare” partie nic konkretnego młodym nie zaoferowały. Nie zaoferowały miejsc pracy, mieszkań, możliwości godnego życia. Korwin-Mikke swoimi postulatami obiecuje to młodym. Obecnie rządzący nie zrobili nic w kierunku młodych, drepczą w miejscu i kłócą się o nieżyciowe, według młodych, sprawy. Cały czas obiecują próbują ale nic nie robią zrzucając winę na tych drugich. Może tak radykalna zmiana jaką zaoferowała Nowa Prawica jest wyjściem dla młodych. Jeżeli jej się nie uda młodzi nic nie stracą teraz nic nie mają, nie widzą przyszłości w tym kraju, głosując na nich mogą tylko wygrać. W podobny sposób Twój Ruch znalazł się w polskim Parlamencie. Wyszedł z czymś nowym (populistycznym?) dla młodych. Obecnie Palikot sam się pogubił chyba w ruchach politycznych, które firmuje. Zaczął zjadać swój własny ogon dlatego młodzi uciekli od niego do Nowej Prawicy.

Młodym należy coś zaoferować gdyż to Oni są przyszłością Narodu. Taki będziemy mieli naród jakie mamy młodzieży. Skoro poglądy JKM im pasują i na niego głosują trzeba z pokorą przyjąć taki wybór demokratycznych wyborów. Nie każdemu może to odpowiadać ale o to walczyli 25 lat temu.

Javascript i wysyłanie POST „w locie”

Dzisiaj podzielę się kolejnym skryptem jaki musiałem napisać w pracy. Wcześniej opisałem mały skrypt sprawdzający pozycję w wyszukiwarce Google. Funkcjonalność poprzedniego skryptu można (i my tak również robimy) uzyskać na wielu stronach SEO/SEM. Ten opisany tutaj musiał realizować pewne zadania na naszej stronie.

W jednym z naszych serwisów wrzucamy applet logowania do innego w innej domenie. Zazwyczaj nie było problemu wrzucaliśmy w jednym z widgetów iframe z adresem strony logowania i wszystko grało i huczało. W pewnym momencie dla kolejnego klienta iframe w FF pozostawał biały.  Myślę, błędny adres albo opcje widgetu źle ustawione. Sprawdzam wszystko OK. Porównuje kod z poprzednimi taki sam, sprawdzam na testowym panelu logowania działa. Nic to ticket do Service Desku niech się męczą co tam znowu nie działa we frameworku ale dalej grzebie samemu. Może FF coś spartolił otwieram więc stronę w IE dostaje komunikat, że ustawienia bezpieczeństwa nie pozwalają na wyświetlenie ramki. Oho to dało mi kierunek poszukiwań od razu w stronę Same-Origin Policy, a dokładniej X-Frame-Options. Uruchamiam LiveHTTP Headers sprawdzam nagłówki i zgadza się. Przy odwołaniu do panelu logowania (na innej domenie) dostaje odpowiedź DENY. Luzik szybki mail do Service Desku gdzie leży problem i jak go rozwiązać.

Wydawało mi się, że najłatwiej ustawić ALLOW-FROM i dodać naszą domenę. Dostaję odpowiedź, że nie da rady, zdziwienie, w końcu to nasza jest matczyną „główną” domeną. Nic to nie chcą, nie ma sprawy jedziemy szukać rozwiązania, w końcu za to mi płacą. Drugie najprostsze rozwiązanie to wklepać formant z logowaniem. Wstukałem, z CSSa nawet identycznie ostylowałem, a niech nie widzą różnicy. Sprawdzam wszystko ładnie wygląda ale dla pewności sprawdzam na innych przeglądarkach Opera i Chrome wyświetla idealnie na IE kaszana. Obrazek tła wyświetla się dwa razy, drugi w jakimś poronionym miejscu na stronie włążąc na inny widget O.o

Następnego dnia szkic strony miał być przedstawiony klientowi choćby z testowym logowaniem ale próbuję rozwiązać problem. Skoro IE źle wyświetla to w IE edytuje. Usuwam najpierw style. może coś sknociłem, ale nie dalej wywala. dodatkowo blokuje mi edycje strony (upss! po raz pierwszy). Wracam na FF usuwam zmiany, dalej źle wyświetla ale edycja działa (uff). Wywalam powoli kolejne elementy ale nic nie pomaga zawsze gdzieś coś nie pasuje. W pewnym momencie blokuje mi całkowicie edycje na każej przeglądarce (upss! fck). Lekka panika klient się wkurzy, importuje stronę na locala edytuje z palca exportuje działa (uff). Zostawiam wrzucam w IFRAMEa działające testowe logowanie i kolejny ticket do Service Desku, że niepoprawnie wyświetla formant w IE.  Po dwóch dniach znaleźli jakiś tam niedomknięty znacznik ale to nie to dalej be. Po prawie dwóch tygodniach technik , skądinąd bardzo sympatyczny gość, (cheers Matt) z rozbrajającą szczerością mówi:

"Zapomniałem, że framework jest w .NET a tam nie może być dwóch tagów FORM (jednocześnie "aktywnych"). Musisz to rozwiązać inaczej"

Zabawne, ha ha. Nie pozostało mi nic innego jak tylko napisać coś samemu. Kilka zapytań w Google’a i już wiedziałem na czym stoję. Najprościej (trzeci raz 🙂 ) było napisać w JS skrypt, który tworzył element FORM w pamięci przeglądarki, a następnie wstawiał tam elementy wpisane przez użytkownika, wszystko oczywiście transparentne dla niego. Naklikałęm coś takiego.


function open(verb, url)   {
   var form = document.createElement("form");
   form.action = url;
   form.method = verb;
   form.target = '_blank';
    var User = document.getElementById("Username1").value;
    var Pass = document.getElementById("Password1").value;

    var input1 = document.createElement("input");
       input1.name = 'Username';
       input1.value = User;
       form.appendChild(input1);

    var input2 = document.createElement("input");
       input2.name = 'Password';
       input2.value = Pass;
       form.appendChild(input2);

   form.style.display = 'none';
   document.body.appendChild(form);
   form.submit(); }

Co ten skrypt robi. Funkcja open tworzy nam element FORM z następującymi atrybutami:

  • action = ze zmienną url gdzie w wywołaniu funkcji podamy adres servera logowania,
  • method = ze zmienną verb gdzie podamy rodaj zapytania POST, można tutaj od razu wpisać POST lekko modyfikując wywołanie funkcji.
  • target = z parametrem _blank gdzie ma się otworzyć nowa strona.

Następnie tworzymy dwie zmienne User oraz Pass gdzie pobieramy dane logowania wpisane na naszej stronie w polach o ID Username1 oraz Password1. Następnie zmienną input1 tworzymy w naszym formularzu pole input z atrybutem name ustawionym na Username (atrybut ten powinien zgadzać się z nazwą parametru wysyłającego POSTem login użytkownika) oraz parametrem value gdzie podajemy wartość zmiennej User wcześniej pobraną z pola Username1 i podczepiamy do formy poprzez form.appendChild(input1).  Analogicznie tworzymy pole dla hasła używamy zmiennej input2 tworzymy w naszym formularzu pole input z atrybutem name ustawionym na Pass (atrybut ten powinien zgadzać się z nazwą parametru wysyłającego POSTem hasło użytkownika) oraz parametrem value gdzie podajemy wartość zmiennej Pass wcześniej pobraną z pola Password1 i podczepiamy do formy poprzez form.appendChild(input2). Na końcu ustawiamy aby formant był niewidoczny form.style.display = ‚none’; i do ciala naszego dokumentu dodajemy tak skonstruowany formant document.body.appendChild(form); i wysyłamy wszystkie dane  form.submit();

 

 function open(verb, url)
  {
  var form = document.createElement("form");
  form.action = url;
  form.method = verb;
  form.target = '_blank';
      var User = document.getElementById("Username1").value;
    var Pass = document.getElementById("Password1").value;
    var input1 = document.createElement("input");
      input1.name = 'Username';
      input1.value = User;
      form.appendChild(input1);
      
    var input2 = document.createElement("input");
      input2.name = 'Password';
      input2.value = Pass;
      form.appendChild(input2);

  form.style.display = 'none';
  document.body.appendChild(form);
  form.submit();
}

Oprócz tego tworzymy także funkcję która nam to wszystko ładnie wyśle podpięta pod przycisk submit wstawiony na stronie

function open_win()
{
    open('POST', 'SERVER');

}

Bardzo proste po prostu wywołujemy naszą fukcję z parametrem ‚POST’ przekazanego do zmiennej verb w wyżej opisanej funkcji open oraz parametrem ‚SERVER’ przekazywanym w zmiennej url funkcji open gdzie podajemy adres url serwera logowania z oryginalnej formatki.

Na koniec tworzymy nasz panel logowania w HTMLu pamiętając o ID pól Username1 oraz Password1 oraz wywołać funkcję wysyłającą po kliknięciu na button.

<div id="login" >
    
    <span class="label" >Username</span><br />
    <input name="Username" id="Username1" type="text" value=""><br />
    <span class="label" >Password</span><br />
    <input name="Password" id="Password1" type="Password" value=""><br />
    
<script>

    function open(verb, url)
  {
  var form = document.createElement("form");
  form.action = url;
  form.method = verb;
  form.target = '_blank';
      var User = document.getElementById("Username1").value;
    var Pass = document.getElementById("Password1").value;
    var input1 = document.createElement("input");
      input1.name = 'Username';
      input1.value = User;
      form.appendChild(input1);
      
    var input2 = document.createElement("input");
      input2.name = 'Password';
      input2.value = Pass;
      form.appendChild(input2);

  form.style.display = 'none';
  document.body.appendChild(form);
  form.submit();
}

function open_win()
{
    open('POST', 'SERVER');

}

    </script>
    <input type="button" value="Login" onclick="open_win()">
    </div>
    

Mam nadzieję, że czytelnie opisałem sposób wysłania argumentów POST przy użyciu skryptu JS.

Dwa oczywiste features w Google Analytics.

Dzisiaj trochę o Google Analitycs. W pracy sporo korzystam z tej usugi. Jako administrator strony jestem odpowiedzialny za raportowanie jej wyników. Jak wielu innych administarorów korzystamy między innymi z Google Analitycs. Narzędzie rewelacyjne, rzecywicie można wiele odczytać z zachowania użytkowników (dlatego na własnym komputerze, ceniąc prywatność, wycinam ruch do m.in. google analitycs w pliku hosts). Nie będe opisywał tutaj mozliwośći i opcji na ten temat zostału już wiele napisane np. Kurs Mariusza Gasiewskiego „Marketing w internecie”.
Czytaj więcej

Jak przestawić szafę nie zginając dywanu

Jakiś czas temu miałem w domu mały remont. Między innymi musiałem ułożyć wykładzinę. Problemem była duża narożna szafa. Każdy kto próbował przestawiać meble wie, że przesuwając je na dywanie dywan podwija się. Spowodowane jest to większym tarciem między dywanem i szafą niż między dywanem i podłogą. Bardzo nie chciałem jej rozkręcać i ponownie skręcać po wykonanej pracy. Nie za bardzo też miałam kogoś do pomocy, kto przeniósłby razem ze mną wspomnianą szafę. Musiałem wymyślić jakiś sposób prosty i skuteczny.

Pamiętam, że rozwiązanie tego problemu było jednym z zadań w Młodym Techniku w Klubie wynalazców prowadzonym przez mgr inż Jana Boratyńskiego. Opisywał on historię przestawienia dużej trzydrzwiowej szafy o parę centymetrów. Niestety nie posiadam tego numeru ale pamiętam kilka rozwiązań. Czytaj więcej

Skrypt sprawdzający pozycję w wyszukiwarce. SERP checking script

Po bardzo długiej przerwie wracam do bloga.

W mojej nowej pracy jednym z problemów jakimi się zajmuje jest monitorowanie pozycji kilku stron na wybrane słowa kluczowe. Z natury jestem „leniwy” dlatego starałem się ten proces jakoś zautomatyzować. Jest kilka stron (seomoz, sitemapdoc, whatsmyserp, nextserp, seoserp), które pozwalają na kontrolę pozycji (sam używałem 3 pierwszych) ale nie spełniały moich oczekiwań. Najczęściej aby móc sprawdzić kilka stron albo kilka słów kluczowych należy wykupić płatną wersje takiego serwisu (seomoz 99$ miesięcznie). Czasem po prostu uciążliwe jest wpisywanie za każdym razem inny adres albo po prosu są niedokładne.  Postanowiłem poszukać jakiegoś skryptu, który ułatwiłby mi sprawdzanie pozycji. Sądziłem, że znalezienie czegoś takiego będzie bardzo proste, w końcu samo zagadnienie jest popularne a napisanie czegoś takiego nie powinno być trudne. Niestety. Okazało się, ze nie mogę znaleźć nic co by mnie satysfakcjonowało. Dlatego cytując siebie „…a napisanie czegoś takiego nie powinno być trudne” wpadłem na pomysł aby samemu napisać taki skrypt. Z racji stanowiska/oprogramowania jakiego używam w rachubę wchodził w zasadzie tylko Visual Basic Script. Czytaj więcej

Nie można walczyć z wiatrakami

Dzisiaj szybki post będący przedrukiem artykułu z lokalnej prasy o moim wyjeździe do Niemiec w ramach projektu Leonardo da Vinci. Czytaj więcej

l:admin;p:admin

Krótki wpis o tym dlaczego cudzych skryptów ściągniętych z sieci należy używać z głową. U „konkurencji” zastosowano elektroniczną rejestrację uczniów. Gimnazjalista mógł wstępnie się zarejestrować później donosząc dokumenty. W tamtej szkole kształcą między innymi techników informatyków i omawianą aplikację pisali właśnie ci przyszli technicy pod opieką nauczyciela. Prawdopodobnie była to praca zaliczeniowa z jakiegoś przedmiotu (oblali?). Postanowiłem sprawdzić czy skrypt podatny jest na proste SQLi. Wstępnie okazał się odporny ale łatwo znaleźć panel logowania administratora. Już po pierwszej próbie wpisania domyślnego loginu i hasła uzyskałem dostęp do ichniej bazy danych.

Baza

Technik ekonomista wyciągnięty z bazy.

Następnie udało mi się znaleźć fragment skryptu, który  najprawdopodobniej został tutaj wykorzystany. Co pozwoli na dokładniejsze zbadanie aplikacji. Wnioski jakie można z tego wysnuć:

  1. Technik informatyk po tej szkole to żaden technik. Jedyne co potrafi to ściągnąć parę plików i wykorzystać samemu nic nie tworząc.
  2. W tym przypadku rejestracja elektroniczna nie sprawdza się, zainteresowanie aplikacją jest znikome.

W tego typu aplikacji poza udostępnieniem danych typu: Nazwisko, Imię, Data_ur, Adres, Gimnazjum, Kierunek, Tel.Kontaktowy, IP i możliwością ich usunięcia nic się nie uzyska. Cały czas uczniów przyjmuje się drogą manualną przyjmując papierowe podania takie aplikacje mogą tylko trochę ułatwić organizację danych. Póki nie będzie pełnej cyfryzacji dokumentacji szkolnej to żadne systemy nam nie pomogą. Nawet pisane przez profesjonalistów tak rozbudowane i również wadliwe jak tutaj

Pozdrawiam