Bardzo brakuje mi w naszym pięknym kraju porządnej, stabilnej gazety codziennej o profilu konserwatywnym. Pewne nadzieje pokładałem w dzienniku Polska, podobno powstającym we współpracy z The Times (co mi właśnie tak konserwatywnie wróżyło), a wydawanym przez Polskapresse. Kupiłem dzisiaj numer i zrozumiałem, że to była daremna nadzieja. To będzie kolejny dziennik o linii umiarkowanie prorządowej, podobnie jak springerowski Dziennik. Przykre. Gazeta Polska pozostaje jedyną gazetą o akceptowalnej linii politycznej, największa szkoda w tym, że nie jest dziennikiem.
Wszyscy w TVN się cieszą, że oto skończyła się czwarta, ale nikt jakoś nie rzucił pomysłu, żeby teraz była piąta. Znaczy co, znowu jest trzecia?
Subtelna różnica, która może okazać się zdradliwa… Gdy definiuje się wartość domyślną dla któregoś z atrybutów modelu w Django, jest ona ustawiana w momencie kompilowania modułu. Niepotrzebna para nawiasów w tym miejscu spowoduje, że zamiast wyniku wywołania jakiejś funkcji w momencie tworzenia egzeplarza klasy, wstawiona zostanie stała wartość, obliczona w momencie kompilacji modułu (czyli najczęściej przy uruchomieniu aplikacji). Warto jest się zastanowić, czy właśnie tego się chce, bo default=datetime.datetime.now daje inny wynik, niż default=datetime.datetime.now().
Spotkałem się w niedzielę z pewnym człowiekiem… Zaproponował mi wzięcie udziału w dużym, celującym wysoko międzynarodowym projekcie serwisu, oczywiście nie za darmo. Sama propozycja bardzo mile podłechtała moją próżność (podobnie jak kilka miesięcy wcześniejsza propozycja wzięcia udziału w rekrutacji do Google), więc bardzo się nie opierałem przed osobistym spotkaniem, pomimo tego, że miało ono nastąpić w sobotę lub w niedzielę. Katalizatorem dobrego nastawienia do propozycji było to, że człowiek ten przyjechał specjalnie w niedzielę z Krakowa, żeby spotkać się ze mną i z jeszcze jedną osobą z nieodległej firmy (technologicznie i geograficznie), którą też chciał w ten projekt wciągnąć. Umówiliśmy się na 17:00 w Złotych Tarasach, żeby omówić projekt i kilka wstępnych ustaleń.
Człowiek okazał się bardzo miłym młodzieńcem, naprawdę zapalonym do swojego pomysłu. Przedstawił swoją wizję dość klarownie, jednak próba pokazania mi działającego dema zakończyła się katastrofą i nie zobaczyłem nic, oprócz strony z debugiem błędu w Django. Pierwsze skojarzenie, jakie mi się nasunęło, to katastrofa, której doznaliśmy w lipcu, gdy próbowaliśmy pokazać klientowi aplikację na Węgrzech—wtedy przez 5 minut było OK, ale potem wszystko zaczęło się walić. Tutaj nie było nawet tych pięciu minut, co przy założeniu, że aplikacja ma być gotowa za miesiąc, oznaczać może tylko jedno—stan aplikacji jest bardziej niż niepokojący. Z innych rzeczy pozaproduktowych, kwestię finansową przemilczę, bo moja matka twierdzi, że przewróciło mi się w głowie i straciłem kontakt z rzeczywistością. Wystarczy że napiszę, że nie miałbym lepiej, niż mam teraz.
A teraz o samym produkcie. Nie poruszyła mnie jego idea. Być może jestem za stary na takie gwizdki, być może przez cały czas myślę jak człowiek z trzeciego świata, ale faktem jest, że nie poruszyła mnie wizja milionów ludzi płacących po $10 rocznie za coś, co tylko podbudowuje ich ego. Bardzo możliwe, że w ten sposób działają nastolatki, bardzo też możliwe, że postępujące otumanienie społeczeństw konsumpcyjnych idzie w parze z zatrzymaniem rozwoju mentalnego na poziomie nastolatków. Wiem, że można na tym robić pieniądze (vide przykład MySpace czy Facebook) i to nawet ogromne, jednak nie przekonuje mnie to. Wydaje mi się, że na długi czas zatrzymałem się na poziomie Web1.0 i z dużym trudem doszlusowałem do poziomu Web2.0, nie połykając go w całości jak leci, a jedynie przyswajając sobie kluczowe idee. Z każdą kolejną iteracją główna idea internetu wydaje mi się odchodzić w kierunku coraz głębszego autyzmu, a projekt przedstawiony przez tego człowieka wydaje mi się tak autystyczny, że bardziej już nie można. Więcej o filozoficznych podstawach mojego poglądu na rozwój internetu pewnie jeszcze kiedyś napiszę.
Konkudując w skrócie, mam jeszcze kilka godzin na zastanowienie się, ale nie przypuszczam, żeby cokolwiek było w stanie zmienić moją decyzję. Nie wchodzę w to.
Zaktualizowałem sobie Ubuntu w moim domowym lapku z 7.04 (z którego byłem więcej niż zadowolony) do najnowszego 7.10 i od kilku dni mam nieodparte wrażenie, że to już raz było, że podobne rzeczy działy się półtora roku temu, gdy po dwóch miesiącach opóźnienia pojawiła się wersja 6.06, która podobno dopracowaniem miała na głowę pobić wszystko, co widziano w świecie linuksa. Po zainstalowaniu tamtej wersji nagle mój laptop zaczął się grzać, niemiłosiernie hałasował, a system zaskakiwał mnie co chwilę swoimi idiosynkrazjami typu zużycie 100% mocy procesora co kilka sekund.
Teraz jest tak samo. Hałasuje, grzeje się, bateria ładuje się całe wieki, a poprawiony silnik renderowania czcionek TrueType w efekcie daje rozmyty, ohydny i męczący na dłuższą metę obraz. Jestem coraz bardziej przekonany, że powrót do 7.04 jest tylko kwestią czasu.
Zawsze mnie zastanawiało, skąd się biorą badziewne serwisy WWW, zrobione na zasadzie prawie jak…, po których natychmiast widać, że są marną podróbką czegoś-tam. Wydawało mi się, że pomimo różnic w przymiotach intelektualnych (nie, nie jesteśmy sobie równi pod tym względem), istnieje pewien minimalny poziom dobrego smaku połączony z minimalnym poziomem rozsądku, którym posługuje się przytłaczająca większość ludzkości i takie wpadki nie są wynikiem celowego działania, bo przecież nikt specjalnie nie strzelałby sobie w stopę. No i właśnie niedawno doznałem zderzenia z rzeczywistością. Nie ma czegoś takiego. Zasada wydaje się prosta—jeżeli jest jakaś głupota, której klient może sobie zażyczyć, to sobie zażyczy. Można próbować mu wyperswadować taki pomysł, można próbować podsuwać mu rozsądne rozwiązania, które zmniejszą poziom głupoty jego propozycji, ale trzeba założyć, że skutek tego będzie żaden. W dodaku, raz wszedłszy na ścieżkę produkcji g*wna, nie da się z niej zejść tak łatwo i dodawanie kolejnych ficzerów powoduje tylko narastanie tej sterty. W takim przypadku trzeba się cofnąć o te kilka kroków, naprawić popełnione wcześniej błędy (najczęściej przez usunięcie tego, co kontrowersyjne) i dopiero wtedy można mówić o uwolnieniu się.
Jestem rozgoryczony, to prawda. Niewiele brakowało, a byłby serwis WWW, którym mógłbym się pochwalić znajomym i być z niego dumny na zasadzie jam ci to sprawił. I g*wno. Z powodu idiotycznych żądań klienta musieliśmy zrobić z niego koszmarek i nie dało się tego wyperswadować, nie dało się też przekonać klienta do naszych propozycji. Patrząc od strony biznesowej wszystko niby jest w porządku, pieniądze przepłynęły z jednego konta na drugie, klient jest zadowolony, firma jest zadowolona—ale ja nie jestem. Przez cały czas mam wrażenie, że przyłożyłem rękę do produkcji szajsu. którego jeszcze długo będę się wstydził, bo przecież nikogo tak naprawdę nie interesuje, ile włożyłem w to zaangażowania i pracy, przecież tak naprawdę liczy się efekt końcowy. W tym przypadku—opłakany i jest to oczywiste dla każdego, kto w internecie spędza trochę więcej czasu, niż trzeba na przejrzenie newsów na BBC, CNN czy Onecie. Pół roku pracy bez efektu, z którego można być zadowolonym już raz doprowadziło do tego, że zmieniłem pracę (a warunki na rynku pracy wtedy były znacznie gorsze niż teraz). Niestety, po około 10 latach pracy w branży nie spodziewam się, by gdziekolwiek sytuacja przedstawiała się lepiej. No, może tylko w Google, ale też pewien nie jestem…
A co gorsza, utknąłem w tym szajsie na dobre, trochę przez swoje wcześniej wspomniane zaangażowanie, a trochę z powodu braku zasobów. Pociesza mnie tylko to, że to wciąż Python.
Będąc code junkie (jak o nas mawiają marketoidy), nie mogę się powstrzymać, żeby czegoś nie ulepszyć (co wcale nie jest zepsute). Przyszło mi do głowy, że mógłbym poćwiczyć z OpenID, więc należy się spodziewać, że wkrótce gdzieś na stronie pojawi się charakterystyczny symbol i posiadacze OpenID będą mogli się wcielić w jakąś specjalną rolę w serwisie. Jeszcze nie wiem jaką, ale będę musiał coś wymyślić, żeby wynagrodzić im wszystkie trudy… ;)
Albo nagle wszyscy testerzy ruszyli do testowania aplikacji, albo rzeczywiście z tym wydaniem jest naprawdę coś nie w porządku. Ale frekwencja nieco ponad 50% przecież nie jest niczym niezwykłym, skąd więc aż takie problemy?
W każdym razie, ja zamierzam spać spokojnie tej nocy, tak samo, jak i do tej pory. Czego i wszystkim innym życzę.
Prawda jest jedna, absolutna i powszechna. Ci, co mówią, że prawd jest wiele, jak wiele jest ludzi, kłamią. Zasadniczo dlatego, że nie odróżniają faktów od interpretacji…
Moja córka ma 3 lata (no, prawie 3 i pół). Jak każde dziecko lubi, żeby jej opowiadać bajki. Kilka dni temu nieopatrznie zagaiłem, że mógłbym jej opowiedzieć historię o tym, jak niania Ogg i babcia Weatherwax pojechały do Ankh Morpork zwerbować trzecią czarownicę do zespołu… No i zaczęło się. Wczoraj musiałem opowiadać o upiorze w gmachu opery. Dzisiaj chciała, żebym opowiedział, jak doszło do tego, że w Ankh Morpork zjawił się Enrico Basilica. Mam tych opowieści jeszcze na dwa wieczory, a potem będę musiał kupić kolejne książki Pratchetta, żeby znowu mieć, co opowiadać.
Dla miłośników konkursów pytanie: z jakiej powieści opowiadam teraz historie? A dla miłośników głosowań kolejne: którą książkę Pratchetta mam przeczytać jako następną?
Jeśli edytor, to wiadomo: Vim. A jeśli pisanie w nim kodu, to wiadomo, co jest jedną z podstaw: podświetlanie składni tak, żeby wszystko było dobrze widoczne, a jednocześnie w takim zestawie kolorów, który nie męczy oczu, nawet wtedy, gdy trzeba patrzeć w ekran po kilka godzin. W takich przypadkach wygrywają zestawy raczej mało kontrastowe i raczej te z ciemnym tłem. Oto trzej moi faworyci, w kolejności niekoniecznie przypadkowej:
- oceandeep, utrzymany w zielono-niebieskiej tonacji, prawie bez mankamentów;
- desert, brązowo-beżowy, cokolwiek nudny, ale bardzo spokojny;
- zenburn, faworyt wielu, dla mnie trochę więcej niż akceptowalny, jakoś nie przekonuje mnie aż tak niski kontrast, ale czasem (szczególnie późno w nocy) jest ukojeniem dla oczu.
Ponieważ jestem wielkim miłośnikiem jedzenia, nie mogło się tu obyć bez choćby śladu kulinariów. Teraz są—moje ulubione przepisy na moje ulubione dania i napoje. Nie wszystko jeszcze działa tak, jakbym chciał, ale przy okazji następnej choroby pewnie się dotrze. ;)
W naszym mieszkaniu tak dość dziwnie się dzieje, że kiedy zaczynają grzać kaloryfery, wtedy też pojawiają się przebicia na różnych metalowych przedmiotach—najczęściej na klamkach do łazienki i ubikacji, ale też na aluminiowych narożnikach ścian a nawet na śrubach, którymi skręcone są meble. Nie mam wytłumaczenia tego faktu, szczególnie w przypadku śrub w meblach, które przecież nie stykają się z żadnymi przewodnikami elektrycznymi.
Ot i kolejne dziwactwo naszego mieszkania. Krzywe ściany są wytłumaczalne, ale to można potraktować chyba tylko jako zemstę zza grobu socjalizmu z jego “jakością”.
Idąc za głosem serca (i potrzebą przećwiczenia jednej rzeczy z Django) dodałem do serwisu tzw. “listy przebojów”—na razie jedną, dotyczącą płyt zespołu 16Volt. Oczywiście, można klikać. Oczywiście, można komentować. Oczywiście. ;)
Szukam, bo mamy w firmie znaczące niedobory kadrowe. Od razu zaznaczę—wystarczy pobieżna znajomość Django (w szczególnych przypadkach nawet żadna), podstawy Pythona, wskazane jedynie jest dość dobre obeznanie w sprawach programowania aplikacji webowych (obojętne w czym: Java, .Net, RoR, chodzi o znajomość tematu).
Szczegółowe ogłoszenie wraz z danymi kontaktowymi znajduje się w archiwum Google Groups (po kliknięciu w skrót adresu trzeba wpisać kod z captchy, żeby obejrzeć pełny email kontaktowy). Ogłoszenie jest sprzed miesiąca, ale tym się przejmować nie należy. ;)
W chwili, gdy piszę ten tekst, stabilną wersją Django jest wersja oznaczona numerem 0.96, opublikowana w czerwcu 2007 roku. Biorąc pod uwagę, że jest to spory kawał kodu, trudno nazwać tę wersję starą, a poza tym, działa dość stabilnie (pomijając pewną ilość błędów, poprawionych w ciągu tych kilku miesięcy). Pokusa pozostania przy niej jest silna, szczególnie w przypadku aplikacji o charakterze komercyjnym, które nie powinny podlegać ciągłej pogoni za zmianami, wprowadzanymi w SVN. Jest jednak kilka powodów, dla których warto jest rozważyć przejście na wersję rozwojową.
- unikod—do tej pory było tak, że część Django była unikodowa (np. ramówka do RSS-ów), a część zwykła. Teraz takich rozjazdów jest znacznie mniej i są one znacznie mniej uciążliwe (zauważyłem np., że klucze i wartości w cookies muszą być zwykłymi stringami, a nie unikodem);
- poprawiona stabilność—od kilku tygodni nie zauważyłem ani razu słynnego błędu “Can not resolve keyword XXX into field”, który był plagą w Django 0.96;
- dekorator
permalink—coś cudownego, odpina całkowicie model od stałego URL-a (przypina go za to do widoku, ale to już chyba lepsze…);
- działające poprawnie
newforms—wreszcie.
I tu się należy słówko wyjaśnienia dla wszystkich tych, którzy wynajdują słabe strony wszystkiego (nazywa się ich malkontentami, to tak na marginesie). Najprawdopodobniej Django posiada jeszcze wiele niedociągnięć i wiele niewykrytych błędów. Prawdopodobnie należy się spodziewać, że wersja rozwojowa zaskoczy nas jeszcze nie raz (i nie raz nie będzie się nadawała do użytku przez jakiś czas). Komu nie odpowiada wersja rozwojowa, ma przez cały czas alternatywę (a nawet kilka): używać wersji 0.96 lub nie używać Django w ogóle. Jest przecież wiele równie fajnych ramówek aplikacyjnych, nie tylko w Pythonie…
Jak się odgrażałem, tak też zrobiłem. Nie jest co prawda brązowo-zielono ale jest pięknie, prawda? ;)
Nie nadaję się do projektowania stron WWW. Oczywiście, zakładając posiadanie odpowiednio dużej ilości czasu, można tego nauczyć nawet kozę, ale ja tego czasu nie posiadam… I dlatego ten serwis wygląda tylko tak, jak wygląda i ani trochę lepiej. Pewnie skończy się na tym, że wezmę sobie coś z OSWD i przystosuję do moich potrzeb. Żeby tylko było zielono-brązowe…
Zamierzam (i to poważnie) przejść na zawodową emeryturę za około 20 lat, więc wypadałoby już teraz zacząć się zastanawiać, czym się wtedy zajmę. Mam kilka wizji, głównie opartych na przeświadczeniu, może błędnym, a może jednak nie, że inni ludzie mogą lubić to, co i ja. Więcej nawet, że są skłonni zapłacić za te przyjemności, które ja im z przyjemnością będę dostarczał. Pisania programów w to nie wliczam, pozbyłem się już złudzeń...
Może jedzenie? Weekendowe biesiady na Podlasiu, pełne naturalnej żywności. Świeże warzywa, świeże mięso, świeży nabiał. I atrakcje (nie tylko kulinarne), jakich nie zazna się w normalnej restauracji na mieście—jak pieczenie chleba czy kolacja przy lampach naftowych. W ciągu najbliższych 20 lat najprawdopodobniej zmieni się zarówno stan polskiej gospodarki, jak i okolice, w których chciałbym otworzyć to przedsięwzięcie, jednak pomyśleć nie zaszkodzi. W każdym razie, mając dziś perspektywę nieodległej emerytury (moja jeszcze jest odległa), wziąłbym to rozwiązanie pod uwagę, jestem w stanie wyobrazić siebie w takiej roli.
Na pewno będę miał jeszcze wiele wizji i pomysłów, a ten jest raptem drugi czy trzeci…
Ja muszę być jakimś fanatykiem, czy innym zboczeńcem… Kiedy kilka tygodni temu zastanawialiśmy się z moim PM-em, czy mam zająć się nowym projektem, czy może pozostać w obecnym i trzymać go za mordę, sam zaproponowałem, że zostanę, bo znam go dobrze i szkoda byłoby marnować taki kawał wiedzy. Teraz mam za swoje—na trzech instancjach produkcyjnych ciągły pożar, w planie rozwoju dwa duże kawały kodu do napisania, a ja spędzam większość czasu robiąc jako administrator i release manager jednocześnie, z otwartymi kilkunastoma sesjami SSH.
Ale spoko, jest dobrze. Większość kodu to Python + Django, więc i tak jest lepiej, niż w Generali. Pod względem ilości pracy sytuacja tam była dość luksusowa, ale co to była za praca… ;)
W jakiejś reklamie w telewizji pojawił się Che Guevarra, wielokrotny zabójca i moralny degenerat. Zamurowało mnie do tego stopnia, że nawet nie spojrzałem, co takiego on reklamuje.
Zastanawiam się, kiedy w reklamie pojawi się Stalin, np. reklamujący wodę mineralną. “O chlebie i wodzie!”, tak mógłby brzmieć slogan.