Archiwalia dla 02.2006

Chcę!

Czy mam wygodne biurko? Biurko jak to biurko, cztery deski na krzyż. Do tego rozklekotany fotel na kółkach — syn doktora Frankensteina, bo zmontowany z resztek trzech martwych poprzedników. Kto mi ufunduje nowe miejsce do pracy?

Technorati Tags: , , ,

Śledzenie ko.mentarzy

Od tygodnia testuję nową zabawkę - co.mments. Jak łatwo domyślić się po nazwie, aplikacja powstała, by umożliwić wygodną syndykację komentarzy na blogach. Całość jest prosta do bólu, tak w konstrukcji, jak w działaniu.

System składa się z dwóch części - skryptozakładki, która dodaje bieżącą stronę do śledzonych i agregatora komentarzy, który pozwala zmiany od ostatniej wizyty obejrzeć w postaci strony WWW lub zasubskrybować jako kanał RSS.

Polecam.

Technorati Tags: , , , ,

Zanim napiszesz kolejną linijkę JavaScript

Nie próbuj nawet wykrywać przeglądarek. Zamiast tego wykrywaj obecność konkretnych funkcji. Dlaczego? Pełna lista przeglądarek byłaby kilkanaście razy dłuższa niż cały twój skrypt i przestanie być aktualna w przeciągu kilku dni. Jeśli obetniesz ją do kilku najpopularniejszych, to odcinasz się od tych, które działałyby poprawnie, ale nigdy o nich nie słyszałeś. Sieć polega na zgodności.

Poznaj drzewo DOM i naucz się z niego korzystać. document.write() porównać można do malowania kodu farbą z liści. Na ścianach jaskiń.

Zanim skopiujesz i wkleisz jakiś kawałek kodu w drugie miejsce w skrypcie, zastanów się dobrze, co robisz. Skoro wystarczy skopiowanie i wklejenie, to prawdopodobnie łamiesz właśnie zasadę wydzielania redundantnego kodu do osobnych funkcji. Tyczy się to każdego języka programowania.

Zanim napiszesz 20 linii kodu, które podłączą obsługę onclick do jednego jedynego elementu na stronie, zastanów się, czy nie uprawiasz właśnie sztuki dla sztuki. Pisząc proste onclick="return foo();" oszczędzisz sobie kłopotu z propagacją zdarzeń, a mi oszczędzisz kilobajta kodu do pobrania. Jeśli chcesz to zrobić dobrze, użyj biblioteki takiej jak Behaviour.

Upraszczaj kod — oszczędzisz sobie pracy i zwiększysz jego czytelność. Polecam biblioteki wrapujące istniejące funkcje i zapewniające komfort pracy w każdej przeglądarce. Sprawdź Prototype - jego używanie jest naprawdę proste.

Wyłączaj wspólny i często używany kod do zewnętrznych plików. Nie każ wszystkim pobierać go za każdym razem.

Technorati Tags: , , , ,

Dawid z Goliatem?

Zastanawiam się właśnie, czy jest realna współpraca pomiędzy dużymi i małymi? Żeby być precyzyjnym, chodzi mi dokładnie o agencje interaktywne.

Kilkuosobowe, małe firmy stanowią większość rynku (tak zwany długi ogon). Najczęściej zatrudniają zaledwie kilka osób i skupiają się na oferowaniu swoich usług klientom niewiele większym od siebie. Ich moc przerobowa i ryzyko zachwiania płynności finansowej nie pozwalają na zaangażowanie się w większe, kilku- czy kilkunastomiesięczne projekty dla dużych zleceniodawców. Z drugiej strony, w tak małym zespole każde stanowisko obsadzane jest ze szczególną ostrożnością — każdy pracownik musi idealnie pasować do mechanizmu i musi się doskonale orientować w co najmniej kilku dziedzinach. Pomijam firmy-krzaki, które utrzymują się z klepania stronek pod FrontPage.

Średnie i duże firmy z kolei dysponują dużymi zespołami. Są w stanie podjąć się bardziej ambitnych i lepiej płatnych zadań. Większe zasoby ludzkie nie gwarantują tak uniwersalnych predyspozycji poszczególnych pracowników, ale z drugiej strony pozwalają na większą dywersyfikację i inwestycje w kierunkach, na które nie stać mniejszych kolegów. Choćby badania użyteczności, czy analiza dostępności serwisów.

Mali nie są w stanie podjąć się wielkich zleceń, często też nie są w stanie dotrzeć do wszystkich klientów. Dużym nie opłaca się przyjmowanie mniejszych zleceń, bo większy zespół musi na siebie zarobić. Mają jednak większe możliwości, których brakuje mniejszym.

Czy jest zatem możliwa współpraca pomiędzy dużymi i małymi? Outsourcing pracowników (tak brakujących zasobów dla mniejszej firmy, jak i wszechstronnego MacGyvera do zadań specjalnych w drugą stronę), wymiana narzędzi (obie firmy muszą siłą rzeczy pracować nad produktami, które często zastosowanie znalazłyby również po drugiej stronie barykady), przekierowywanie klientów, którzy nie mieszczą się w targecie? Zastanawialiście się nad tym?

Technorati Tags: , , ,

Google Chat

Jeśli ktoś jeszcze nie zauważył, Google Mail został zintegrowany z Google Chat. Ten ostatni to nic innego, niż interfejs pomiędzy przeglądarką a serwerem Google Talk. Tak, można rozmawiać pomiędzy dwoma przeglądarkami (również zza firewalla) i pomiędzy przeglądarką a normalnym klientem Jabbera.

Technorati Tags: , , ,

Community 2.0

Ja się już przyzwyczaiłem do trolli w komentarzach, którzy w argumentacji stosują prawidła logiki dla informatyków:

argument przez wątpliwość
Chyba cię pojebało!
dowód przez indukcję autorytetu
To nieprawda, mój wujek napisał o tym książkę.
dowód akustyczny
Słyszałem, że mówisz bzdury.
argument multimedialny
Gdzieś czytałem coś zupełnie innego. Albo ktoś mi mówił.
dowód wprost
Bzdura.
dowód przez psychoanalizę
Wynika to z faktu, że nie znasz się na niczym innym.
dowód przez fallus micrus
Zajmuję się tym rok dłużej, mam fajniejszą furę i większego. Mylisz się.

Dyskusje takie zawsze wnoszą wiele ciekawych informacji do rozmowy i ogólnie są bardzo potrzebne, choćby dla odreagowania stresu na cudzym blogu. To co zobaczyłem dzisiaj mnie przeraziło: Riddle opisuje spór pomiędzy nim a Wassago.

Nie byłoby w tym nic komicznego, gdyby nie pewien drobny fakt. Spór toczy się o to, kto zupełnie nieodpłatnie wykona projekt graficzny dla darmowego serwisu. Jeśli dodać do tego argumentację przez patos (Panie Kowalski, Pan raczysz nie dostrzegać intratnego piękna, zawoalowanego krzykliwą powierzchownością materii), to zaczyna to przypominać spór dwóch cór Koryntu o to, która obsłuży klienta za darmo.

No proszę ja was, czy możliwość umieszczenia w CV zapisu wykonałem projekt serwisu społecznego, o którym nikt z was nie słyszał jest warta łapania się za mordy? Ja bym się na ich miejscu zastanowił dwa razy, a potem umówił na wspólne piwo. Współpraca jest lepsza niż walka, zwłaszcza, kiedy walczyć nie ma o co.

Technorati Tags: , , ,

Zatrudnimy programistę

Nasza agencja interaktywna, ICENTER, z siedzibą we Wrocławiu, poszukuje kandydatów do pracy na stanowisku programista PHP, MySQL. Interesują nas kandydaci specjalizujący się w tworzeniu aplikacji internetowych.

Na wstępie zaznaczam, że zdalna praca jest wykluczona, wchodzące w grę formy zatrudnienia to umowa o pracę lub umowa o dzieło.

Wymagania

  • swobodne posługiwanie się PHP (programowanie obiektowe);
  • doskonała znajomość MySQL;
  • sprawne posługiwanie się XHTML, CSS, mile widziana znajomość silnika szablonów Smarty;
  • własna inwencja przy realizowaniu zadań, terminowość

Co w zamian?

  • realizacja projektów dla znanych polskich i zagranicznych marek;
  • możliwość wdrażania własnych pomysłów;
  • praca w młodym, dynamicznym zespole, w przyjaznej atmosferze;
  • stałe, atrakcyjne wynagrodzenie,a dodatkowo udział w wypracowanym zysku

Kontakt

W przypadku spełnienia wszystkich wymagań, proszę skierować list motywacyjny i CV, zawierający:

  • dokładny przebieg dotychczasowej pracy zawodowej,
  • odnośniki do wykonanych aplikacji,
  • krótki opis funkcjonalny tych aplikacji,
  • dostęp do części administracyjnej (w miarę możliwości),
  • dostęp do źródła (w miarę możliwości),

na adres <praca at icenter pl>, podając PROGRAMISTA w tytule listu.

Rekrutacja trwa do końca lutego 2006.

W przypadku dużej ilości zgłoszeń możemy zostać zmuszeni do odpowiadania tylko na wybrane.

Dane kontaktowe

Internet Center Polska, ul. Piotra Skargi 7/4, 50-082 WROCŁAW

Telefon: (071) 344-82-52; 341-75-81 (czynny od poniedziałku do piątku w godzinach 9:00 - 16:00)

Technorati Tags: , , , ,

Dlaczego PHP jest do niczego?

Nie jest. Tytuł powinien brzmieć raczej:

  • Dlaczego, kiedy mówię, że programuję w C/C++, ludzie czują respekt?
  • Dlaczego, kiedy mówię, że programuję w Pythonie, podają mi rękę?
  • Dlaczego, kiedy mówię, że programuję w PHP, ludzie śmieją się do rozpuku?

To trochę jak z Polakami za granicą. Ludność autochtoniczna ocenia ich nie po tym, kim naprawdę są, ale po tych jednostkach, które widać najbardziej. Po kiepsko ubranych, niedomytych pijusach spod marketów. Podobnie jest z programistami PHP.

Język zaczął jako mało popularny silnik do osadzania prostych, krótkich skryptów wewnątrz kodu HTML. Nie oferował wiele — programowanie proceduralne, zmienne bez reguł typowania, wektory zwykłe i tablice mieszające. Z czasem nabrał popularności i zrobiło się o nim w sieci głośno. Pojawiały się kolejne tutoriale, pisane tak przez doświadczonych ludzi, jak przez laików. Język był tak prosty, że nawet dziecko było w stanie wykonać w nim proste operacje i podzielić się swoją pracą z innymi.

Z czasem platforma ewoluowała i zyskiwała na funkcjonalności. Zyskała sobie poklask wśród firm hostingowych ze względu na łatwość utrzymania — wystarczyło dodać jeden moduł do serwera WWW i wszystko zaczynało magicznie działać. Lawina nabrała masy i zaczęła napędzać się sama. Już kilka lat temu można było bez trudu znaleźć strony jedenasto-/dwunastolatków zafascynowanych PHP. Kolejne wydawnictwa prześcigały się w publikacji tomów opiewających wspaniałość języka. Pozycje książkowe były lepsze lub gorsze, z przewagą tych pierwszych. Powtórzyła się sytuacja z językiem HTML.

Od kiedy PHP uzyskało etykietkę języka dla wszystkich, język zaczął gwałtownie tracić w oczach środowiska profesjonalistów. Zaczął być kojarzony ze wspomnianymi dziećmi i niedzielnymi hakerami, którzy wdrożenie aplikacji rozpoczynali od lektury dwóch, wątpliwej jakości, tutoriali w sieci, a następnie tytułowali się ekspertami w dziedzinie webaplikacji. Tak jest do dziś — PHP kojarzone jest z proceduralnym kodem, brakiem separacji warstw logiki i prezentacji, brakiem dokumentacji projektowej, konstrukcjami składniowymi na miarę niesławnego Visual Basica i aplikacjami, które raz napisane, nie nadają się ani do powtórnego użycia ani późniejszej modyfikacji.

Co z językiem jest nie tak? Jest bardzo elastyczny, momentami za bardzo. Język C, jako język kompilowany do postaci binarnej, posiada bardzo rygorystyczną kontrolę zgodności typów. Ostrzega nawet przed konwersją typów, które są właściwie identyczne w reprezentacji binarnej, ale posiadają różne nazwy, stąd nawet rzutowanie wskaźników wymaga jawnej konwersji w kodzie. Python posiada bardzo rygorystyczną składnię — wymusza poprawne (i czytelne) formatowanie kodu źródłowego, bo jego wygląd decyduje o przepływie sterowania. Co ma PHP? Burdel na kółkach.

Najbardziej boli w codziennej pracy jedno z jego początkowych założeń — brak typowania zmiennych. Uniemożliwia to kontrolę poprawności kodu jeszcze przed jego uruchomieniem i skutkuje godzinami ślęczenia nad kilkunastoma tysiącami linii w celu wyłapania literówki lub tak zwanego efektu kofeinowego deficytu.

Boli też domyślna konfiguracja serwerów deweloperskich, gdzie poziom raportowania błędów jest dostosowany do maszyny produkcyjnej i spory procent programistów nie ma nawet pojęcia, że język oprócz błędów krytycznych potrafi też raportować ostrzeżenia i powiadomienia (a od wersji piątej także błędy naruszenia rygoru składni).

Jeszcze bardziej boli domyślne aktywowanie na serwerach opcji register_globals i magic_quotes_gpc. Pozwala pisać niechlujny kod, a dodatkowo uniemożliwia jego uruchomienie na poprawnie skonfigurowanych maszynach.

Boli brak narzędzi interaktywnych i wbudowanej obsługi testów jednostkowych, co pozwoliłoby błyskawicznie wyłapywać regresje w kodzie bez potrzeby pisania specjalnych interfejsów do uruchamiania poszczególnych elementów silnika.

Boli brak zunifikowanej struktury dostępu do systemów bazodanowych. Brakuje też podobnej struktury dostępu do danych pochodzących ze źródeł zewnętrznych.

Na szczęście, przynajmniej część z tych problemów zostanie lub została już zniwelowana. Od PHP 5.1 dostępny jest szkielet dostępu do danych potencjalnie niebezpiecznych — input_filter. Pojawił się też uniwersalny silnik dostępu do baz danych - PDO. W wersji szóstej całkowicie usunięte zostanie wsparcie dla magic_quotes i register_globals. Nic jednak nie naprawi ludzi, którzy budują to, jak język jest postrzegany. Jeśli ktoś nie chce się uczyć, to najlepsze zmiany nic nie dadzą. Tak jak nic nie dadzą narzędzia, z których nie chce korzystać.

Zanim zacznie się flejm — jestem programistą i utrzymuję się głównie z tworzenia aplikacji we wspomnianym wyżej języku. Znam jego mocne i słabe strony. Tekst wyraża moje i tylko moje zdanie na ten temat.

Technorati Tags: ,

RAD: CRUD

Kiedy starałem się o pracę w Internet Center Polska półtora roku temu, w ramach kwalifikacji zostałem posadzony przed komputerem i dostałem za zadanie napisanie w PHP panelu do zarządzania prostą, jednotabelową bazą danych. Dziś byłbym w stanie to zrobić w ciągu kilkunastu minut i całość zawrzeć w pięciu liniach kodu.

Od roku coraz większą popularnością cieszą się frameworki implementujące CRUD jako przezroczystą automatykę, rewolucję zaczął znany dziś wszystkim silnik Ruby on Rails. Cała idea polega na odseparowaniu właściwego kodu aplikacji (model, kontroler) od warstwy najniższego rzędu, odpowiadającej za przechowywanie danych (storage). Ta ostatnia jest obsługiwana automatycznie przez silnik, wystarczy zatem stworzyć odpowiednie tabele w bazie danych i zadeklarować wzajemnie relacje pomiędzy obiektami — sprowadza się to do dopisania właściwych słów kluczowych do klasy modelu.

Po krótkim prototypowaniu połączeń, silnik staje się zupełnie przezroczysty. Można wykonywać dowolne operacje na instancjach poszczególnych klas, a każda zmiana zostanie natychmiast odzwierciedlona w zawartości bazy danych. Odpada konieczność pisania zawiłych zapytań SQL, wzrasta też elastyczność kodu (staje się niezależny od struktury poszczególnych tabel — po dodaniu nowego pola, nie ma potrzeby modyfikacji kodu odpowiedzialnego za obsługę tabeli).

Oczywiście, Rails nie jest jedynym frameworkiem tego typu. W jego ślady poszli deweloperzy korzystający z innych języków programowania. Dziś szkielety podobnych lub identycznych rozwiązań dostępne są dla większości z popularnych języków. Najczęściej stosowany w aplikacjach małego i średniego kalibru, PHP, ma ich nawet kilka. Szczególnie interesujący jest jednak jeden z pierwszych, dostępny od zeszłego roku CakePHP — tutaj nawet słowa kluczowe (w PHP reprezentowane przez zmienne) są żywcem zaczerpnięte z pierwowzoru.

Kiedy warto stosować CRUD? Odpowiedź jest prosta — kiedy tylko się da. Oczywiście, nikt nie zbuduje w ten sposób wydajnego systemu bankowego, ale większość tworzonych aplikacji to rozwiązania z niższej półki — aplikacje ekstra-/intranetowe, systemy CMS i dynamiczne witryny internetowe. Biorąc pod uwagę, że proces tworzenia oprogramowania ulega kilkunastokrotnemu skróceniu i staje się bardziej odporny na błędy, korzyści są nie do odrzucenia.

Technorati Tags: , , , , , ,

Hemingway Blue

Patrząc na blog da.killi i czytając notkę o alternatywnym intefejsie dla Google, wpadłem na pomysł przygotowania własnej wersji Hemingwaya. Tak powstał Hemingway Blue, oparty częściowo na wspomnianym projekcie Andiego Rutledge’a:

Hemingway Blue

Hemingway Blue alpha: download.

Technorati Tags: , ,