Katastrofy tam
Największe tamy na świecie i ich katastrofy
Tsunami
Największe tsunami w historii ludzkości
 
Rozmowa kwalifikacyjna w Google
Rozmowa kwalifikacyjna w Google

Szanowni Czytelnicy!

Po okresie przestoju (za który przepraszam) mam przyjemność przedstawić swoje najnowsze projekty. Jednocześnie dziękuję, że mimo braku aktualizacji praktycznie wszyscy subskrybujecie mój kanał RSS.

Dla niecierpliwych: Wydajny Komputer oraz Eclare.pl.

→ Czytaj dalej... (3 komentarze)

W dobie codziennej pracy przed monitorem musimy zwrócić szczególną uwagę na nasze zdrowie. Zagrożony jest zwłaszcza nasz wzrok.

W tym wpisie prezentuję porównanie programów przypominających o przerwach i ćwiczeniach podczas pracy przy komputerze.

Zapraszam do lektury!

Zapobieganie Repetitive Strain Injury - program Workrave

Ćwiczenia oferowane przez Workrave faktycznie pomagają!

→ Czytaj dalej... (3 komentarze)

Niniejszym prezentuję trzecią część kursu optymalizacji komputera. Dziś dowiemy się, jak wyraźne przyspieszyć system Windows XP.

Przypominam, że kurs skierowany jest dla osób niezbyt obytych z komputerem.

Serdecznie zapraszam do lektury!

Optymalizacja i przyspieszanie systemu Windows XP

→ Czytaj dalej... (10 komentarzy)

Brakuje Ci miejsca i nie masz już czego usuwać? Dobrze trafiłeś - w dalszej części artykułu zajmiemy się czyszczeniem dysku ze zbędnych danych.

Dzięki podanym zabiegom zyskamy nawet do kilku gigabajtów wolnego miejsca.

Przypominam, że kurs skierowany jest dla osób niezbyt obytych z komputerem.

Serdecznie zapraszam do lektury!

Czyszczenie dysku

→ Czytaj dalej... (46 komentarzy)

System Windows XP cechuje się wieloma nieprzemyślanymi rozwiązaniami - nawet świeżo po instalacji nie jest zoptymalizowany do sprawnej pracy. Ma to odbicie w jego mizernej funkcjonalności, powolnym działaniu i skłonności do zapychania dysku.

Z tego względu przygotowałem cykl trzech artykułów, których cel jest taki, by poproszony o przyspieszenie komputera obeznany użytkownik mógł skierować proszącego na tę stronę i wiedzieć, że dalsza pomoc nie będzie potrzebna. Innymi słowy, kurs kieruję do osób niezbyt biegle posługujących się komputerem.

Dzisiaj przedstawiam zagadnienie ulepszania systemu Windows XP i doprowadzania go do stanu używalności. Jest to równocześnie wstęp do kolejnych części - o zwalnianiu miejsca na dysku oraz wyraźnym przyspieszaniu systemu.

Serdecznie zapraszam do lektury.

Optymalizacja komputera - ulepszanie systemu Windows XP

→ Czytaj dalej... (12 komentarzy)

Poszedłszy za opiniami komentujących wpis Marcina na temat reklam na blogach, zdecydowałem się dać serwisowi blogvertising.pl drugą szansę.

Gdyby wszystko poszło jak należy, właśnie wklejałbym ich kod reklam (prawdopodobnie zamiast AdSense).

Skończyło się jednak na tym, że publikuję wpis na temat najgorszego i najbardziej irytującego błędu użyteczności.

Webmasterom nie tyle polecam, co proszę o dalszą lekturę.

Blogvertising a użyteczność

→ Czytaj dalej... (13 komentarzy)

Stało się i nie mogę tego przemilczeć.

Przy użyciu silnika Google Gears, Gmail zyskał chyba najbardziej oczekiwaną funkcjonalność - nareszcie jest dostępny bez Internetu!

Mimo, że jest to świetna wiadomość, natychmiast rodzą się pewne poważne problemy...

Gmail

→ Czytaj dalej... (28 komentarzy)

Planuję zakup mini-lodówki do pokoju, wielkości około 12 piw.

Ceneo.pl zawodzi, kieruję się więc ku http://mediamarkt.pl...

Strona http://mediamarkt.pl

→ Czytaj dalej... (16 komentarzy)

Wprowadzanie zmian w wyglądzie blogów jest rzeczą trudną - zwłaszcza, jeśli zmiany mają połączenie z istniejącymi notkami.

Często ciężko jest ustalić, czy efekt dla przykładowych danych będzie taki sam po umieszczeniu na serwerze.

Jest jednak pewien sprytny sposób, by wprowadzać zmiany na żywo, lecz bez wglądu czytelników.

→ Czytaj dalej... (10 komentarzy)

Dwa razy rozmowa kwalifikacyjna w Google wymykała się z moich rąk.

W końcu, z początkiem nowego roku odbyłem pierwszą rozmowę. W dwa dni później skontaktowano się ze mną w sprawie drugiej. Bilans został więc wyrównany.

Jak się okazało, więcej rozmów nie było potrzebnych.

Przed dalszą lekturą polecam przeczytanie poprzednich części: pierwszej, drugiej oraz trzeciej.

Logo Google

→ Czytaj dalej... (48 komentarzy)

W 2007 roku dwa razy otarłem się o rozmowę kwalifikacyjną z Google. Przed dalszą lekturą polecam zapoznanie się z pierwszą i drugą historią.

Rok kończyłem zawiedziony. Nie udało się, a było tak blisko. Miałem jednak silne postanowienie próbowania w kolejnym.

Próbować nie musiałem.

3 stycznia w mojej skrzynce czekał list zatytułowany "Hello from Google".

Rozmowa kwalifikacyjna w Google

→ Czytaj dalej... (59 komentarzy)

Po otrzymaniu odpowiedzi odmownej odnośnie rekrutacji do Google (przeczytaj najpierw), sprawa ucichła - niemal o niej zapomniałem.

Jedno tylko czasem mi przychodziło do głowy: niedorzeczna świadomość, że wysłałem dwie aplikacje - o staż i o pracę, a odpowiedź otrzymałem jedną.

Po dwóch miesiącach w końcu przyszła odpowiedź na drugi mail.

Moja aplikacja została wzięta pod uwagę przy tworzeniu krakowskiego oddziału Google.

Google logo

→ Czytaj dalej... (16 komentarzy)

W dwa miesiące przed rozmową kwalifikacyjną w IBM przechodziłem ulicą Krupniczą w Krakowie i zauważyłem w bramie znajome pastelowe kolorki... Moim oczom ukazała się siedziba Google!

To, co działo się później, wydawało się być snem informatyka...

Logo Google

→ Czytaj dalej... (9 komentarzy)

Rzecz działa się w lipcu zeszłego roku. Na moim wydziale (Fizyki, Astronomii i Informatyki Stosowanej UJ) pojawiły się plakaty z krzykliwymi hasłami typu "czy lubisz publicystykę?" lub "studiujesz filologię lub informatykę?". Jeśli odpowiedź na te pytania brzmiała "tak", czytelnik miał się stawić na spotkanie z ekipą IBM Polska na stanowisko Technical Writer w Krakowie. Co też zrobiłem.

→ Czytaj dalej... (23 komentarze)

Każdy informatyk po porannej (czyt. 11:00) pobudce najpierw otwiera pocztę (czyt. Gmaila). Tak też ja zrobiłem dzisiaj. Wpisuję hasło... Okazuje się złe! Kilka prób... Wciąż nic. Mimo, że hasło niedawno zmieniałem, byłem go pewien - na pocztę loguję się kilkanaście razy dziennie.

Błędne hasło!

→ Czytaj dalej... (16 komentarzy)

W ostatnich dniach zmodernizowałem swojego bloga, dodając funkcjonalności i ułatwiając nawigację oraz administrację. Wnet zauważyłem, że tych rzeczy brakuje na innych blogach. Nie przedłużając, pragnę więc przedstawić kilka praktycznych wskazówek i udoskonaleń dla właścicieli blogów, które powinny także podnieść PageRank wpisów.

→ Czytaj dalej... (21 komentarzy)

Pisząc kod do kolejnej notki natknąłem się na pewien problem. Mianowicie:

<a href="http://www.wykop.pl/dodaj?url=http://eldoras.com&title=test" alt="Dodaj do Wykop.pl">

Po kliknięciu takiego linka... No właśnie. Czy do zmiennej url zostanie przekazane: http://eldoras.com&title=test

czy może stworzona zostanie (pożądana) zmienna "title" o wartości "test"?

Ja obstawiam, że to drugie - zakładam, że algorytm czytający GET jest mało tolerancyjny i analizuje każde & jako oddzielenie jego własnych zmiennych. Jak jednak przekazać przy pomocy GET url, który posiada jakieś zmienne przekazywane również metodą GET?

Musimy zakodować zawartość zmiennej url, zamieniając znaki "&" (ampersand) na "%26".

Tak więc kod:

<a href="http://www.wykop.pl/dodaj?url=http://eldoras.com%26title=test" alt="Dodaj do Wykop.pl">

powinien przypisać zmiennej url wartość wraz z wkodowaną zmienną title. Dla mnie jest to nowość, bowiem dotychczas sądziłem, że takie tricki jak &amp; zamiast & w adresie url są zalecane tylko w celach walidacyjnych (pisząc to, musiałem w kodzie xHTML napisać &amp;amp;). Jak widać, zagadnienie jest poważniejsze.

Od 2 lutego, zgodnie z oficjalnym komunikatem, Netscape Navigator nie będzie już nawet uaktualniany. Oto krótka lekcja historii, będąca hołdem dla protoplasty Firefoxa.

Logo Netscape

Netscape Navigator powstał w 1994 roku, będąc następcą pierwszej przeglądarki graficznej - Mosaic (screenshot). Jako pierwsza przeglądarka, obsługiwała Jave, JavaScript i ramki. Jak informuje Wikipedia, swego czasu posiadała ok. 90% rynku przeglądarek.

Co zawdzięczamy firmie Netscape?

  • Stworzenie języka JavaScript
  • Stworzenie protokołu SSL
  • Stworzenie standardu RSS
  • Powstanie Mozilla Foundation i stworzenie Firefoxa na bazie Netscape Navigatora

Jakkolwiek w 2003 roku ogłoszono już koniec prac nad przeglądarką i skutkiem protestów użytkowników zostały one wznowione, tak nie ma podstaw by sądzić, iż tak się stanie i tym razem.

Na odchodnym, Netscape poleca swoim użytkownikom Firefoxa. Dla mających większy sentyment pozostaje także inny projekt, który ma swoje korzenie w Netscape: SeaMonkey.

Wypada powiedzieć: dziękujemy.

Jak tylko wyczytałem informację o znalezieniu błędu na home.pl, do głowy przyszło mi słowo: szantaż. Z radością więc dzisiaj przeczytałem, że home.pl nie dało za wygraną, wykryło lukę i pozwało serwis hack.pl. Może warto wspomnieć, kto jeszcze kilka tygodni temu padł ofiarą akcji antygorianowej? Ano właśnie... "profesjonaliści" z wyżej wymienionej redakcji.

Pierwsza rzecz, która mnie zbulwersowała, to sposób przedstawienia problemu przez hack.pl.

Wstępnie myśleliśmy tylko o napisaniu o błędzie na łamach HACK.pl, a także o udostępnieniu zacieniowanych dowodów, które jednak nie pozwoliłyby na wykorzystanie błędu.

Chcemy postąpić maksymalnie przyjaźnie wobec home.pl, z naszego punktu widzenia, dobrze byłoby gdyby na łamach HACK.pl pojawił się news dotyczący luki w home.pl, ale też rozumiemy Państwa sytuację.

Koszt informacji szacujemy wstępnie na 200,000 złotych, cena - oczywiście - podlega negocjacji. Być może bylibyśmy zainteresowani współpracą z Wami na zasadach partnerskich, czy też reklamą w home.pl.

To nie brzmi jak kulturalne zwrócenie uwagi na błąd. Brzmi jak marnie zatuszowane wyłudzenie. Przynajmniej dla mnie.

Zobaczmy, co faktycznie osiągnęli redaktorzy z hack.pl. W oświadczeniu zdecydowali się podać szczegóły luki (skoro pieniążki przepadły, przynajmniej popularność będzie). Dostali się oni do logów. Jako przykład podają:

XXXX.neoplus.adsl.tpnet.pl - - [02/Apr/2007:16:38:20 +0200]

"GET /sql/sql.php?db=*nazwa_konta*2&table=*nazwa_tabeli*&token=f330213d49aabe[...]&sql_query=SELECT+%2AFROM+%60*nazwa_tabeli*%60++ORDER+BY+%60*pole_w_tabeli*%60+ASC&zero_rows=Rekord+zosta%B3+skasowany&goto=tbl_properties_structure.php&message=Skasowane+rekordy%3A%26nbsp%3B1+%28Wykonanie+zapytania+trwa%B3o+0.0003+sekund%28y%29%29

HTTP/1.1" 200 7111 "[...]" "Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3"

Okay. Możemy z tego faktycznie wyczytać nazwy tabel i bazy danych. Ciekawe jednak, na co się one mogą przydać? Ano na to, że jak już sobie wyczarujemy dostęp do bazy danych, to nie musimy robić np. "SHOW TABLES", tylko możemy je sobie wyciągnąc z query-stringów, żeby dalej psuć serwis. Łebskie. Oczywiście, nikt przy zdrowych zmysłach nie przesyła loginu i hasła GETem, więc taki zarzut (rozważnie lub zapominalsko nie podany) odpada. Z takiego logu faktycznie możemy też odczytać nazwy plików i katalogów. Tyle, że jakieś 90% skryptów ma powszechnie znane adresy do panelów administracyjnych ("/admin" ?). Bo nie wierzę, że nazwa katalogu to jedyne zabezpieczenie jakiegokolwiek panelu sterowania w PHP. A jednak, z pomocą przychodzi strona MENu:

Dalej wyszukałem wszelkie wywołania plików w tym katalogu, i doszedłem do strony w której użytkownik dostawał potwierdzenie o poprawnym zalogowaniu. Po otworzeniu tej strony okazało się, że mam pełen dostęp do panelu administracyjnego.

Wow, udało wam się wejść do niezabezpieczonego panelu?! No shit!! Haxorz. Okay, ale jak w ogole doszło do tego wielkiego włamania?

Aby poznać trzy losowe cyfry wystarczyło napisać skrypt sprawdzający czy istnieje katalog od nazwa_uzytkownika.home.pl/stats100 aż do nazwa_uzytkownika.home.pl/stats999 na danym koncie. Skrypt taki wykonuje się 2 sekundy!

Whoa. To się nazywa znalezienie luki! Ja bym tak nie umiał. I jeszcze wykonanie 500 zapytań HTTP i uzyskanie wszystkich odpowiedzi w ciągu sekundy... cuda, no ale co to dla hackerów. Respekt.

W czasie pisania tego wpisu natknąłem się na podobną opinię na też niezbyt przeze mnie lubianym ihack.pl (witamy w gronie razem z hacking.pl).... Home.pl też do najwyższej półki hosting providerów nie należy, więc mi się to widzi jako kolejna mini wojna :) Do poczytania w święta w sam raz.

P.S. Panowie z hack.pl zapomnięli wspomnieć o pieniążkach w swoim oświadczeniu :(

Po ok. tygodniu pisania i testowania kodu, mogę wreszcie udostępnić wersję 0.9 aplikacji będącej chatem AJAXowym.

AJAX Chat w akcji

Features, czyli co mną kierowało:

  • Internauta może za pomocą kliknięcia rozwinąć lub schować chat - nie przeszkadza mu w przeglądaniu witryny, będąc domyślnie schowanym.
  • Internatura może sprawnie poruszać się po witrynie mając rozwinięty chat: nie jest to pop-up, lecz stanowi integralną część strony, będąc wraz z nią przesuwalnym suwakami. Sprawne poruszanie oznacza także, że przy przejściu do innej podstrony, chat zostanie automatycznie otwarty.
  • Chat jest estetyczny: nie zawiera żadnych grafik, jednak świetnie komponuje się z witrynami społecznościowymi - głównie forami, czy stronami hobbystycznymi. Adresy są automatycznie zamieniane na odnośniki. Przewijanie okna jest podobne do znanego z Gmaila: chat sprawdza, czy użytkownik nie czyta wcześniejszych wiadomości, zanim przesunie się, pokazując nową treść. Dodatkowo dodany jest przyjemny dla oka efekt znikania i pojawiania się chata.
  • Z punktu widzenia developera, stanowi w miarę kompaktowy skrypt: całość zajmuje 31KB (po usunięciu niektórych zbędnych części pakietu Script.Aculo.Us). Oparty jest na Prototype i MySQL, a kod jest na tyle przejrzysty, że zbędne są komentarze. Naturalnie, jest odporny na XSS i tego typu atrakcje.
  • Skrypt nie generuje dużego obciążenia: aktualizuje treść jedynie przy rozwiniętym oknie, z czasem ustawionym domyślnie na 2 sekundy. Pobiera generowany przy wysyłaniu wiadomości plik stały z odpowiednimi nagłówkami, które gwarantują korzystanie z cache przeglądarki w przypadku braku zmiany treści.
  • Działa bez zarzutu pod przeglądarkami: Firefox 1.5.0.4, IE 6.0, Opera 8.52. Pod innymi nie sprawdzałem, jednak powinien chodzić pod wszystkim, co jest obsługiwane przez script.aculo.us i prototype. Oczywiście trzeba być przygotowanym na błędną interpretację CSS - nie przykładałem do tego wielkiej wagi, ponieważ większość osób i tak stworzy własny szablon

Wszystko spakowałem haxorskim winrarem. Do pobrania: wersja 0.9. Licencja... naturalnie darmowa do zastosowań niekomercyjnych. W przypadku komercyjnych - jakaś symboliczna opłata ;) Wymagam jedynie, by zostawić w okienku chata odnośnik do http://ajax.eldoras.com. Demo działającego skryptu można obejrzeć na garfiku.

Instalacja:

  • Rozpakowujemy archiwum, modyfikujemy w pliku newmsg.php dane do połączenia z bazą danych (login, hasło, nazwa bazy). Całość wgrywamy na serwer.
  • Używamy db.sql do stworzenia tabel w bazie danych MySQL.
  • Do każdej strony, na której chcemy mieć chat, dołączamy w nagłówku 5 plików, jak widać w pliku sample_index.php (1 CSS i 4 skrypty, przy czym fixed.js to hack dla IE umożliwiający uzyskanie pozycji typu fixed). W treści strony (może być zaraz po znaczniku body) dodajemy diva "openchat" oraz includujemy chat.php (przykład w sample_index.php).
  • Opcjonalnie możemy zmodyfikować arkusz styli chat.css do naszych potrzeb. Nie zalecam zmiany identyfikatorów CSS - są do nich przypisane funkcje w JavaScript.

Wszelkie uwagi mile widziane, zmiany można nadsyłać na e-mail. Ufam, że będzie to coś, co rozejdzie się po necie i zostanie udoskonalone - mój wkład w open source community :)

Community jednak także mi trochę pomogło. Główne podziękowania należą się Patrysowi za cenne uwagi i praktyczną pomoc oraz Riddle'owi za uświadomienie mnie odnośnie zagadnień XHT cross-subdomain :)

Przeczytaj najpopularniejsze artykuły!

Katastrofy tam
Największe tamy na świecie i ich katastrofy
Tsunami
Największe tsunami w historii ludzkości
 
Rozmowa kwalifikacyjna w Google
Rozmowa kwalifikacyjna w Google
Pisanie artykułów za pieniądze
Jak zdalnie zrobić karierę redaktora?
Pozycjonowanie bloga
Jak udoskonalić i wypromować bloga?
Pierwsza rozmowa kwalifikacyjna: IBM
Pierwsza rozmowa kwalifikacyjna - IBM