Archiwalia dla 11.2005

Będziesz miłował kod swój

Przynoszę wam tedy jedno i najważniejsze przykazanie:

Patrys jako Mroczny Mojżesz

Dbaj o kod, nigdy nie wiesz, kiedy będziesz musiał do niego wrócić. Praca programisty polega na rozwijaniu oprogramowania, a nie na jego ciągłym przepisywaniu od zera.

Pisząc program, stosuję ścisłe zasady jego tworzenia. Są miejsca, gdzie czytelniej wyglądają instrukcje warunkowe, są miejsca, gdzie czytelniejsze są przełączniki wyboru. Niektóre zasady są niezmienne. Nie uznaję więcej niż jednego pustego wiersza z rzędu. Nie uznaję operatorów, które nie są poprzedzone spacją i po których spacja nie występuje. Po przecinku wymagam spacji. Klamra otwierająca blok zawsze jest wyrównana do lewej względem wyrażenia warunkowego, do którego jest przypisana. Klamra zamykająca znajduje się na tym samym poziomie wcięcia. Ściśle formatuję nawet zapytania SQL:

$query =
"
	SELECT foo.a, foo.b, baz.c
	FROM foobar AS foo
	INNER JOIN bazorg AS baz
	USING (d)
	WHERE foo.a > 3
	AND baz.c = 'a'
";

Nie twierdzę, że moje zasady są jedynie słuszne. Są spójne i gwarantują mi, że kod jest czytelny do tego stopnia, że mogę szukać interesujących mnie miejsc, przelatując wzrokiem po kodzie podczas ciągłego przewijania. Ma to kolosalne znaczenie przy systemie CMS, gdzie poszczególne moduły liczy się w tysiącach linii.

Niestety, mojego kolegi żadną siłą nie daje się zmusić do dbania o kod. Nie mówię o ścisłym przestrzeganiu moich reguł. Chodzi o utrzymanie jakiegokolwiek standardu. Nic nie szkodzi - jako, że regularnie robię przegląd kodu, każdą okazję wykorzystuję do jego czyszczenia. Łamię długie linie, dodaję spacje po przecinkach i dookoła operatorów, zamieniam indentację ze spacji na tabulatory i usuwam białe znaki z końców wierszy.

Przyświeca mi zasada wyznawana też przez jednostki S.W.A.T. - clean as you go.

Usuwam też brzydkie hacki, które dobrze działają. Wolę przepisać je w poprawny sposób i móc szybko dojść, co dany kawałek kodu robi. Próba zrozumienia czegoś, co przypomina relikty obcej cywilizacji - zwłaszcza, kiedy klient wisi na telefonie i dopytuje o termin zamknięcia poprawek - z pewnością nie należy do przyjemnych.

Ktoś pewnie nazwie to stratą czasu, ale dla mnie to jedyna metoda wspólnej pracy nad większą bazą kodu. Jeśli programista sam nie szanuje swojego kodu, to znaczy, że lekceważąco traktuje swoją pracę. Jeśli ktoś nie lubi swojej pracy, to po co ją wykonywać? Oczywiście, są projekty, które się dziedziczy po script kiddies i tam często zdarza się pisać kod wiele pozostawiający do życzenia, byle wpasował się w otoczenie i nie sugerował, że nad projektem pracował ktoś rozsądny, ale to historia na inną okazję.

Being geeky

W piątek świętowaliśmy przenosiny firmy do nowej lokacji. Kilka piw i drinków w Liverpoolu. W drodze powrotnej do domu skradziono mi portfel. O 6 nad ranem zablokowałem karty bankowe i zacząłem szacować straty. Pieniędzmi się nie przejąłem, gorzej z dokumentami. Załatwienie wszystkiego i wyrobienie nowych dokumentów wymaga czasu i ponad 200 złotych nakładów finansowych. Na szczęście, portfel odnalazł się w niedzielę. Przypadkowy przechodzień znalazł go przy śmietniku na tyłach kina Helios.

Szczęściu nie było końca. Ucieszyłem się z zaoszczędzenia czasu i kłopotów, pozostało wyrobić nowe karty w banku. Z koniecznością wydania pieniędzy już się pogodziłem, dlatego z łatwością przyszło mi podjęcie innej decyzji. Dziś zamówiłem sobie nową klawiaturę - SpeedLink SL-6466:

SL-6466

Powinna przyjechać do poniedziałku. Już nie mogę się doczekać.

Praca oferowana

Tym wpisem mam nadzieję rozpocząć większy cykl notek - związanych z zatrudnieniem.

Sławomir Jasiński z zaprzyjaźnionej firmy GEX IT poszukuje pracowników:

Aktualnie poszukujemy osoby na stanowisko programista PHP.

Wymagania:

  • znajomość programowania obiektowego w PHP4, PHP5;
  • umiejętność tworzenia zapytań SQL;
  • umiejętność pracy w grupie;
  • chęć do pracy i punktualność;
  • mile widziana znajomość Smarty i ADOdb;
  • wiek i wykształcenie nie są istotne

Oferujemy:

  • zdobycie doświadczenia;
  • liczne ciekawe projekty;
  • miłą atmosferę pracy;
  • praca na pół / cały etat

Kontakt: przez email na adres <info at gexit pl>.

Oszukać pomocnika

Do tematu jakiś czas temu nawiązał już Riddle. Nowomodni webmasterzy dostrzegli w logo Valid XHTML wartość samą w sobie. Coś, jak odznaka sprawności harcerskiej, kolejna pozbawiona sensu plakietka do zapchania stopki na stronie. Nikt nie rozumie, czym jest XHTML i czym różni się od swojego starszego kuzyna.

Najważniesze, żeby strona się walidowała, mniejsza o to, czy walidacja dla samej walidacji ma jakąkolwiek wartość. Niewygodną treść wystarczy zepchnąć do zewnętrznych plików, a te nie podlegają już władzy wszechmocnego narzędzia W3C. Można spać spokojnie.

Dziś, za pośrednictwem pytania Andreasa z Web Graphics, trafiłem na inny wynalazek - FlashObject. Jak łatwo się domyślić, jest to kolejna uświęcona metoda zagnieżdżania niepoprawnego kodu w poprawnym dokumencie. Jak czytamy na stronie projektu, ma on na celu umożliwienie zagnieżdżenia obiektów Flash widocznych w starych i zepsutych wersjach Safari i Internet Explorera dla MacOS.

Główny problem polega na tym, że przeglądarki te wymagają niepoprawnego kodu, więc całość została zamknięta w niewielki skrypt JS i efektywnie ukryta przed walidatorem. Zgodzę się, że często wsparcie dla takich przeglądarek jest wskazane, ba, czasem wręcz nieodzowne. Jednak mówimy o starych przeglądarkach, które nie potrafią wykorzystać najmniejszego nawet kawałka nowych technologii. Nie wspierają też XHTML serwowanego jako application/xhtml+xml, jaki jest więc sens upierania się przy stosowaniu XHTML? Dużo prościej byłoby użyć typu dokumentu, który jest zaprojektowany dla wsparcia przestarzałych elementów i atrybutów. Używanie XHTML 1.0 Strict nie niesie ze sobą żadnych korzyści poza wymuszaniem stosowania brzydkich hacków, które mają naprawiać to, co zepsute jest gdzie indziej - w przeglądarce.

Na koniec podkreślę jeszcze raz, że walidator jest narzędziem dla osoby budującej witrynę, a nie dla odwiedzających. Oszukiwanie go to jak okłamywanie własnego doradcy i pomocnika, a wklejenie żółtego guziczka za wszelką cenę nie ma najmniejszego sensu, ale o tym szerzej w następnym numerze webesteem art & design magazine.

Strip #023: Alkohol szkodzi zdrowiu na terenie sklepu

Zainspirowany wczorajszą wizytą u kolegi, Shoo.

Tutaj w graficznych przeglądarkach wyświetla się komiks

Opera i popularność

Idąc śladem Riddle’a, który słusznie zauważył, że Operze daleko do popularności Firefoksa, postanowiłem na przekór wszystkim (jestem wszak użytkownikiem Firefoksa) popromować Operę. Dlaczego by nie? Wszak przeglądarka jest solidnie zbudowana i rozwija się bardzo dynamicznie. Jest tylko jeden problem, przystosowanie użytkowników do jej używania.

Opera jest jak limuzyna, oprócz siedzenia i pasów ma też barek, elektryczne szyby i odtwarzacz ze zmieniaczem na 60 kompaktów. Podobnie jak, zmarły już, Mozilla Suite, brakuje jej jedynie zlewu kuchennego (choć Mozilla się takowego dorobiła dwa lata temu). Nie jestem fanem kombajnów do wszystkiego, ale jeśli zignorować nieużywane komponenty, to pozostaje nadal lekką przeglądarką.

Główny problem z nią polega na tym, że domyślnie, zaraz po instalacji, jest paskudna. Od razu rzucają się w oczy wzięte żywcem z Windows XP niebieskie nagłówki zakładek. Dodatkowo, po kliknięciu w pasek adresu wyskakuje bez uprzedzenia dodatkowy zasobnik z narzędziami. Dziwi również kolejność pasków i umieszczenie zakładek pod samym paskiem menu. Jest to oczywiście poprawne z logicznego punktu widzenia, bo wszystkie przyciski poniżej odnoszą się do aktualnej zakładki, ale zupełnie sprzeczne z przyjętymi w programach komputerowych konwencjami.

Dlatego też uważam, że jedyne, co trzeba zrobić do szerszego rozpromowania Opery, to przejście z:

Free Image Hosting at www.ImageShack.us

Na układ nieco bardziej przyjazny dla użytkowników:

Free Image Hosting at www.ImageShack.us

Strip #022: Standardy i outsourcing

Strip kolejny, tym razem hostowany u pracodawcy, reszta powróci razem z domeną, o której pisałem przed chwilą.

Tutaj w graficznych przeglądarkach wyświetla się komiks

Historia pewnego pokoju

Jak zapewne większość z was zauważyła, domena room-303.com nie działa od ponad tygodnia. Zaczęło się niewinnie, chciałem przenieść dane na komercyjnego hosta, opłaconego w DreamHost (jeśli zamierzasz tam coś kupić, to wspomóż kolegów i podaj patrys jako WebID referującego). Problem w tym, że domena została zarejestrowana we wrocławskim Alfanecie. W czwartek zaczęły się problemy ze strefami DNS, tego samego dnia wysłałem zlecenie zmiany serwerów nazw na oferowane przez DreamHost.

Na odpowiedź czekałem i czekałem, w końcu we wtorek wysłałem ponaglenie z delikatną sugestią, że chyba już czas zmienić registrara na takiego, który pozwala mi zmieniać rekord mojej własnej domeny. Odpowiedź pojawiła się błyskawicznie, bo następnego dnia o czwartej nad ranem. Wszelkie modyfikacje zostały wprowadzone, mogłem przeczytać w otrzymanym od pracownika Alfanetu mailu. Po ośmiu godzinach jedyną widoczną zmianą była zmiana mojego adresu email w danych kontaktowych domeny na adres służbowy, o co wcale nie prosiłem.

Wczoraj zadzwoniłem z pytaniem o powód takiego stanu rzeczy. Dowiedziałem się, że Pan, który realizował zlecenie nie jest obecny i odezwie się do mnie, jak tylko pojawi się w biurze. Rozmówca zasugerował mi też, żebym się nie denerwował, bo zmiany w rekordach domen zabierają chwilę żeby się odświeżyć. Kiedy powiedziałem, że pracuję w tej samej branży, co oni i że nigdy nie czekałem na zmiany ponad dwie doby, Pan z drugiej strony słuchawki niemal krzyknął mi do ucha: dlaczego Pan chce na mnie wymusić przyznanie się do winy?!

Nie mam już siły, firma nie dość, że nie jest w stanie powiedzieć mi, co dzieje się z moją domeną (powinno działać), to nie odpisuje na maile i nie jest w stanie udzielić wyjaśnień przez telefon (ja widzę w systemie Pana ponaglenie, ale oryginalne zgłoszenie gdzieś się zapodziało). Serdecznie odradzam.

Frankenstein polskiego Internetu

Znany wszem i wobec, jedyny w swoim rodzaju serwis typu six degrees doczekał się kolejnych rewolucyjnych zmian.

O Grono.net, bo o nim mowa, krążą już dowcipy, że jest jedynym miejscem, gdzie trzeba się zalogować, żeby obejrzeć stronę z wewnętrznym błędem serwera. Dziś, przy kolejnej próbie logowania (serwis z nieznanych mi przyczyn nie umie wysłać treści otrzymanej wiadomości i podrzuca tylko link do skrzynki odbiorczej, co jest ogólnie świetnym pomysłem, kiedy sama strona działa lub nie - w zależności od okresu pylenia motyli w Australii) doznałem szoku.

Co prawda, właściciel Grona (jednodwuosobowa firma Brandlay, która przypadkiem mieści się w tym samym mieszkaniu, co inny znamienity koncern mediów elektronicznych - NEMO Labs) już dawno szukał pracowników do przygotowania redesignu (i negocjował nawet ze mną, z nbw i z Riddlem - co ciekawe, negocjował jednocześnie i za pomocą komunikatora, nie wpadł na to, że się znamy), jednak to, co zobaczyłem przeszło moje najśmnielsze oczekiwania. Komercjalizacja osiągnęła punkt kulminacyjny.

Skoro serwer i tak nie działa, a Grono służy mi głównie do otrzymywania powiadomień o urodzinach, to może wprowadzą jeszcze opłaty za oglądanie reklam? Wszystkie inne usługi można już tam znaleźć.

Siedemnastka!

Dziś od północy świętowaliśmy z ekipą moje urodziny. Jako, że zostało ich tylko kilka zaledwie minut, wypada się pochwalić, że właśnie stuknęło mi 17 lat. Z tej okazji zebrałem masę życzeń i upodliliśmy się z kolegami też nieco. Cóż, pozostaje liczyć, że piwo nadal będzie smakowało tak samo dobrze, rak płuc pozostanie w zdrowiu, a i niewiasty nie będą mniej skore do zabawy. Za rok huczna zabawa - wszak skończę 18 lat i okazja do imprezy zacna. Teraz trzeba jeszcze kupić jakąś flaszkę i pepsi na jutro do pracy, bo i kolegom z biura nie można pozostać dłużnym - swoich okazji pilnują dzielnie, a wino leje się niemal litrami.

Update: z okazji urodzin, żeby cofnąć nieco czas, dostało się mojej koziej brodzie, która zredukowała się niemal do zera. Trzeba sobie jakoś radzić z latami na karku. ;)