Nie ma ludzi niezastąpionych
Claudiu Pap, (obecnie już były) portal manager Commune.ro wpisał w komentarzu do mojego pożegnania z Sensisoftem, że spodziewa się w tej sytuacji rychłej śmierci projektu. Bardzo to miłe z jego strony, ale to nie działa w ten sposób.
Wiele razy już byłem ogłaszany człowiekiem, którego nie da się zastąpić i wiele razy okazywało się, że z perspektywy firmy lub projektu nie jest to prawdą. Faktycznie, z pewnej perspektywy jest to prawda, bo każdy człowiek jest unikalny na skalę światową i ma niepowtarzalny zestaw umiejętności, osobowości, charakteru, wiedzy i doświadczeń. Patrząc pod tym kątem to i owszem, próba zastąpienia mnie jest skazana na pewną porażkę. Ale przecież w projekcie nie chodzi o cały ten komplet cech, a jedynie o pewien zestaw cech, który powodował że coś się udawało. Patrząc z tej strony, niezastępowalność nie jest już tak oczywista. Prawdopodobnie będzie trudno znaleźć kogoś, kto będzie w stanie przejąć moje obowiązki w sposób niezauważony, ale nie chodzi nawet o to, żeby się to odbyło w sposób niezauważony. Mój sposób dowodzenia nie był jedynym, który mógł doprowadzić do sukcesu. Przypadek sprawił, że był dość charakterystyczny i ekstremalny, przez co łatwo zapadł w pamięć i szybko został skojarzony z owym sukcesem na zasadzie analogii. Trudno oczekiwać, żeby akurat w tym przypadku (w odróżnieniu od tego, jak reszta świata jest skonstruowana) istniała tylko jedna dobra recepta na powodzenie (abstrahując od stopnia dobrości różnych recept).
Nasze drogi z Sensisoftem rozeszły się i teraz każdy musi sobie poradzić sam. Jestem przekonany, że tak jak ja potrafię zadbać o siebie, Sensisoft będzie w stanie zadbać o przyszły sukces projektu Commune.
Opublikowany 26 czerwca 2008 o 12:19, oznaczony etykietami: praca prawda (1 komentarz).
Pożegnałem się z Sensisoftem
Wczoraj, w godzinach popołudniowo-wieczornych, dokonałem pożegnania z Sensisoftem, oficjalnie — to znaczy przy użyciu piwa. Wypiliśmy, pogadaliśmy, w nieco szerszym gronie wypowiedziałem to, co mówiłem już wiele razy przy nieco mniejszych spotkaniach towarzyskich: że sposób, w jaki ta firma produkuje oprogramowanie jest chory (co nie przekłada się wprost na jakość tego oprogramowania, a jedynie wtórnie, mam nadzieję). Porozmawialiśmy też trochę na temat zadań, jakie powinien wypełniać lider techniczny projektu, zakresu jego odpowiedzialności i związanego z nią zakresu władzy.
Tak, nie ma co się wstydzić tego słowa. Zgłaszanie się do roli technicznego lidera projektu z powodów ambicjonalnych czy prestiżowych mija się z celem, biorąc pod uwagę to, za co ten człowiek odpowiada — czyli za terminowe dostarczenie oprogramowania zgodnego ze specyfikacją. A niosąc taką odpowiedzialność, musi mieć też władzę zarządzania czasem członków swojego zespołu (władzę na szczeblu taktycznym), musi mieć też możliwość wpływania na decyzje operacyjne typu "co ma zostać zrobione wcześniej, a co później". Ja taką władzę miałem i nie pozwalałem jej sobie odebrać, co, jak zauważyłem, nie było szczególnie dobrze przyjmowane. Nie uzurpuję sobie większych zasług, niż mi się należą, ale wydaje mi się, że dzięki mojemu chłodzącemu wpływowi rozwój mojego projektu odbywał się w postaci kontrolowanego chaosu. Odszedłem z firmy, gdy przestałem panować nad tym chaosem.
Mam nadzieję, że w nowym miejscu będzie mi lepiej. Ale może po prostu wystarczy mi, że będę w stanie kontrolować chaos.
Opublikowany 21 czerwca 2008 o 18:06, oznaczony etykietami: praca (4 komentarze).
Zdrada? To się dopiero okaże...
No i będę miał w pracy MacBooka. Niby zwykłego, ale tak nie do końca, bo czarnego. Nigdy nie miałem Maca, nigdy też go nie używałem, więc zacząłem od czytania, co też mnie czeka po przesiadce z linuksa. Nie zapowiada się różowo, głównie z powodu problemów z bibliotekami. Ale może jakoś to przeżyję...
Opublikowany 19 czerwca 2008 o 16:40, oznaczony etykietami: free software / open source linux praca programowanie python (6 komentarzy).
Co programista robi na urlopie
I właśnie to chciałem na urlopie robić! :)
Opublikowany 10 czerwca 2008 o 13:07, oznaczony etykietami: jedzenie praca prawda życie w Wołominie (6 komentarzy).
Przede mną tydzień urlopu
Po miesięcznym zapieprzu związanym z zakończeniem kontraktu na aplikację, wziąłem tydzień wolnego od firmy. Zamierzam nie myśleć o pracy i zajmować się swoimi sprawami, w swoim tempie. Nie wiem jeszcze, co będę robił, niczego nie planuję. Jest wiele rzeczy, które mam ochotę zrobić — chcę sobie trochę poczytać, przećwiczyć parę sztuczek z javascriptem, może napisać trochę kodu na własne potrzeby.
Opublikowany 7 czerwca 2008 o 22:25, oznaczony etykietami: praca programowanie (2 komentarze).
Patch applied
W pracy używamy kilku różnych bibliotek third-party. W ogniu walki często okazuje się, że mają one jakieś mankamenty, albo brakujące funkcjonalności, od których zależy działanie naszej aplikacji. Czasem kończy się to zgłoszeniem błędu, ale częściej razem ze zgłoszeniem dostarczamy poprawkę. Czuję się szczególnie doceniony, gdy moja poprawka trafia do upstream — mam wtedy megalomańskie uczucie, że dzięki mnie świat staje się lepszy. Chociaż w niewielkim zakresie... ;)
Opublikowany 7 czerwca 2008 o 09:48, oznaczony etykietami: free software / open source praca programowanie.
jQuery mi się podoba
Po raz kolejny zastrzegam: to nie jest miłość (bo miłość może być tylko jedna). Ale jQuery mi się podoba.
Dzisiaj miałem zrobić taki pokręcony formularz z trzema select-ami, gdzie środkowy przyjmuje elementy z dwóch naokoło niego na kliknięcie. Biorąc pod uwagę moją niechęć (i co tu dużo ukrywać, nieznajomość też) do JavaScriptu, planowałem sobie to na co najmniej dzień roboty, a najprawdopodobniej półtora. Tymczasem usiadłem do roboty około 10, a o 12 miałem już to zrobione. 35 linijek kodu i żadnego znużenia. Więcej takich ułatwiaczy poproszę.
Opublikowany 2 czerwca 2008 o 22:43, oznaczony etykietami: free software / open source internet praca programowanie.
To dziwne czasy
Gdy kilkanaście lat temu zaczynałem pisać programy o nieco większym stopniu skomplikowania, obowiązującą mantrą było: przerzuć obliczenia na serwer bazy danych, on ma więcej mocy niż aplikacja. Stąd wzięły się wszystkie moje umiejętności optymalizacyjne, które dobrze robiły przez wiele lat. A teraz dowiedziałem się od naszego bazodanowca, że muszę chronić serwer przed przegrzaniem i jak najwięcej robić na serwerze aplikacyjnym, bo... serwer z bazą nie wyrabia.
Mam dysonans poznawczy. Wolałbym, żeby okazało się, że z powodów oszczędnościowych firma postawiła bazę na jakimś Celeronie 1.7GHz z 256MB RAM, niż że moje umiejętności optymalizacyjne nadają się do lamusa... ;)
Opublikowany 2 czerwca 2008 o 21:09, oznaczony etykietami: praca programowanie.
Pasanie owieczek
Po ponad roku pracy z młodzieżą zebrało mi się na kilka refleksji dotyczących całej branży robienia softu. Raczej przygnębiających.
Po pierwsze, i najważniejsze, większość z programistów przed 30-tką, jakich spotkałem w ciągu tego roku, nie ma pojęcia o projektowaniu aplikacji. Umieją napisać kod, który robi to, co założyli, ale zazwyczaj cała aplikacja nie robi tego, co miała robić. Ich horyzont widzenia kodu zamyka się w jednym, najwyżej w dwóch modułach, więc każda większa zmiana skutkuje zwykle załamaniem się innego fragmentu aplikacji. A o czymś takim, jak zastanawianie się nad konsekwencjami zmian w kodzie zwykle sobie nie pozwalają. Powiedziałbym ogólnie, że myślenie nie jest ich najmocniejszą stroną, albo inaczej — są świetni w rozwiązywaniu problemów, które sami sobie stworzyli (by sparafrazować Kisiela). I to jest ta przygnębiająca konkluzja.
Przyczyna tego stanu rzeczy wydaje się leżeć głębiej, a jest ona chyba jeszcze bardziej przygnębiająca. Otóż, według mnie, głównym czynnikiem, który sprawia, że młodzi programiści nie dojrzewają do projektowania aplikacji, jest nacisk managementu na to, żeby jak najszybciej dostarczyć działający kod, byle by był. Management żyje w świecie złudzeń (podtrzymywanych przez samych programistów), jakoby zawsze można było poprawić źle działający kod później, ale z drugiej strony, żeby się z tych złudzeń wyleczyć, to trzeba napisać sporo kodu, którego nikt nigdy nie poprawił z powodu braku czasu. Autor nie poprawi, bo nie ma kiedy (zajmuje się przecież czymś innym, również na już), a jego następca też nie poprawi, bo kodu nie rozumie (autor mu nie wytłumaczy, bo nie ma czasu, zresztą prawdopodobnie sam już nie pamięta).
I co teraz? Założę się, że nic, będzie tak, jak poprzednio.
Opublikowany 15 maja 2008 o 12:49, oznaczony etykietami: praca programowanie (8 komentarzy).
Good bye, Debrecen
Powoli żegnam się z pięknym miastem Debreczynem (pogoda piękna, miasto... no cóż, na pewno ma swoich miłośników). Spotkanie nie było tak straszne, jak się obawiałem, chociaż do przyjemnych nie należało. Zjedzony nie zostałem i to się dla mnie liczy. ;)
O 20:00 mój samolot wystartuje z Ferihegy i mam nadzieję około 23:00 znaleźć się we własnym łóżku.
Opublikowany 9 maja 2008 o 11:00, oznaczony etykietami: praca życie w Wołominie (1 komentarz).
W pięknym mieście Debreczynie
No, nie takim znowu pięknym, przypomina raczej Piotrków Trybunalski... Ale Piotrków też pewnie ma swoich amatorów.
Najpierw godzina samolotem z Warszawy do Budapesztu, potem 2 godziny czekania na samochód w hali przylotów lotniska Ferihegy 2A, a potem jeszcze dwie godziny samochodem z Budapesztu do Debreczyna (mają autostrady... zazdrość!). Jestem półżywy. A jutro szykuje się nieprzyjemne spotkanie z klientami. Mam nadzieję, że mnie nie zjedzą, ale może być różnie...
Dopiero wyjazdy na kilka dni uświadamiają mi, jak bardzo tęsknię za Kasią i ZIZ. Gdy jestem w domu, to z niecierpliwością czekam na każdą godzinę-półtorej, kiedy zostawią mnie samego i będę mógł sobie trochę pokodować, ale gdy wyjadę na dłużej, to mi ich brakuje. Bardzo.
Opublikowany 7 maja 2008 o 23:33, oznaczony etykietami: praca rodzinka życie w Wołominie (2 komentarze).
Gówniażeria
Co jakiś czas na pl.comp.lang.python pojawiają się ogłoszenia o pracy dla programistów w Pythonie. Abstrahując od dyskusyjnej właściwości tej grupy dla wysyłania ogłoszeń o pracy (niby jest pl.praca.oferowana, ale ogłoszeń o pracy dla Pythoniarzy nie jest aż tak wiele, więc ma to pewien walor...), to reakcje na takie ogłoszenia doprowadzają mnie do białej gorączki.
Przykład z ostatnich dni, pewna firma z Wrocławia zamieściła ogłoszenie o pracy. Napisali czym się zajmują, czego oczekują i tradycyjnie enigmatycznie co oferują. I od razu zaczęło się wydziwianie: a to że polszczyzna odbiega od wzorca metra prof. Miodka, a to że znowu nie podali proponowanych zarobków, a to że wymagają bardzo dobrej znajomości biblioteki standardowej. Takie pitu-pitu, żeby sobie tylko popyszczyć. Dużo osób narzeka, że gdzie indziej pracodawcy w ofercie podają kwoty, ale nikt jakoś nie zauważa, że dotyczy to ofert zamieszczanych w serwisach jobsowych, a nie w usenecie. I pewnie aby dopełnić obrazu nikt się nie pofatygował, żeby popatrzeć jak gdzie indziej wyglądają reakcje na takie ogłoszenia. Podpowiem — odpowiedzią jest milczenie.
Opublikowany 28 kwietnia 2008 o 11:48, oznaczony etykietami: internet praca python (7 komentarzy).
Topre, topre
Some people would argue that not all developers are morons or assholes, but they are mistaken. For example, some people posit the existence of what I will call the “angel” developer. “Angels” read specs closely, write code, and then thoroughly test it against the accompanying test suite before shipping their product. Angels do not actually exist, but they are a useful fiction to make spec writers to feel better about themselves
(za diveintomark)
Opublikowany 18 kwietnia 2008 o 16:27, oznaczony etykietami: praca programowanie.
Gdybym mógł wybierać...
Jest kilka firm, w których chciałbym pracować. Na poniżej liście nie ma mojego obecnego pracodawcy, bynajmniej nie dlatego, że nie chcę już pracować w Sensisofcie, ale dlatego, po pierwsze jest to lista marzeń, a nie planów, a po drugie, gdybym tam nie chciał pracować, to już bym nie pracował.
- Google. To oczywiste. Każdy programista czy projektant chciałby pracować w Google, a ja nie jestem w tej dziedzinie wyjątkiem. Ta firma robi rzeczy wielkie, coś na miarę projektu Manhattan, ale w skali oprogramowania. Chciałbym (chociaż przez pewien czas) być jednym z nich.
- Xerox. Dziwnym może się wydać umieszczenie firmy Xerox już na drugim miejscu, bo dla większości ludzi oblatanych w IT kojarzy się ona z kopiarkami, potwornie drogimi drukarkami, a dla niektórych także z niezwykle innowacyjną historią Palo Alto Research Center (Xerox PARC). Jest jednak coś innowacyjnego w tej firmie także i dziś, ale niewiele osób o tym wie, bo jej najbardziej innowacyjne produkty mają wąskie grono odbiorców, jak np. VIPP. Poznałem VIPP dość dobrze i doceniłem jego klasę.
- Canonical. Robienie na linuksie jest dla mnie teraz tak oczywiste, że trudno mi sobie wyobrazić, że mógłbym w pracy używać innego systemu operacyjnego, a w dzisiejszych czasach coraz częściej jest tak, że mówisz linux, myślisz Ubuntu.
- IBM, Sun i Microsoft, ex aequo. Każda z tych firm robi ciekawe rzeczy, choć te, które mnie naprawdę interesują, stanowią margines ich działalności. Gdyby udało mi się popracować przy tych ciekawych rzeczach, to czemu nie?
Jak widać, nie ma tego szczególnie wiele. Jedyną nieoczywistą pozycją w tym zestawieniu wydaje się być Xerox, więc może jednak zostanę w Sensisofcie... ;)
Opublikowany 27 marca 2008 o 21:35, oznaczony etykietami: praca programowanie (3 komentarze).
Poważny projekt, poważne koszta
A tak całkiem na poważnie, to nie wiem, czy te koszta są tak poważne.
Ten projekt to webshop (a jakże), z dość egzotycznym rodzajem muzyki. Nie obliczam go na jakiś ogromny ruch typu miliony wejść dziennie, ale z 10 000 przydałoby się obsłużyć. Oprogramowanie napiszę sobie sam (koszt: 0), pozostaje to, czego sam nie zrobię, czyli maszyna (najcieńszy Root Server na hetzner.de to około 2500 złotówek rocznie), storage (S3, z pewnym okładem to 250 złotówek miesięcznie) i opłaty dla firmy rozliczającej płatności. Razem daje to około 5500 złotówek samego kosztu utrzymania, kosztów administracyjnych jeszcze nie udało mi się policzyć.
Dużo? Czy nie dużo? Trudno mi powiedzieć, chociaż tak na oko nie wydaje się to jakimś ogromnym wydatkiem.
Opublikowany 25 marca 2008 o 13:59, oznaczony etykietami: internet praca życie w Wołominie (6 komentarzy).
Wyczesane zarządzanie obiektowym keszem w Django
Bardzo, bardzo dokładnie przyglądam się wszystkiemu, co związane z cache na poziomie obiektów w Django (np. projektowi django-orm-cache). Znalazłem blogowy wpis (po rosyjsku, a jakże!), który opisuje rozwiązanie bardzo podobne do tego, którego i my używamy, ale o wiele bardziej kompletne. Wypadałoby to teraz gdzieś przetestować, ale w środowisku, w którym miałoby to jakikolwiek sens, nie za bardzo możemy — po prostu nie ma na to czasu...
Ku pamięci, jak to Aleksiej Koszeliew załatwił sprawę odświeżania obiektowego cache w Django. Polecam uwadze, jeżeli kogoś też interesuje to, jak inni dają sobie radę z wygaszaniem cache...
Opublikowany 9 marca 2008 o 21:13, oznaczony etykietami: django internet praca programowanie python.
Ludzie mają problemy
A my nie! (My, czyli kilka naszych aplikacji)
Iwan Sagalajew, pracujący dla yandex.ru, podzielił się kilkoma spostrzeżeniami po nieudanym odpaleniu nowego serwisu społecznego. Czytałem to z niekłamanym zadowoleniem — większość problemów, które tam opisał, nie ma nawet szans, żeby nas dotyczyć. Po kolei:
- zbyt długi czas zapisu danych sesji, nie dotyczy nas, bo sesje trzymamy w memcache;
- efekt "dog-pile", nie dotyczy nas, bo rzeczy kosztowne robimy poza aplikacją (poniekąd asynchronicznie);
- pomimo nacisków naszego DB-speca, nie normalizujemy naszego modelu nadmiernie.
Nie mam złudzeń, że w pewnym momencie będziemy musieli troszkę przyciąć nasz radosny bałaganik, ale aplikacja została zaplanowana z tak dużym zapasem, że to na pewno nie nastąpi w ciągu najbliższych kilku miesięcy...
Mała aktualizacja, pod wpływem komentarza Bluszcza — to on to wymyślił. A żeby nie rozpłynął się w samozachwycie, to wymyślił też parę marnych rzeczy, ale tego co marne pozbędziemy się prędzej czy później...
Opublikowany 25 lutego 2008 o 21:21, oznaczony etykietami: django free software / open source internet praca programowanie python (7 komentarzy).
Dziwne potrzeby, oczywiste rozwiązania: polib
Ktoś (imienia nie wymienię) wysłał klientowi teksty do przetłumaczenia... w Excelu. Klient zadowolony, że nie musi używać żadnych hackerskich narzędzi typu poEdit, oczywiście przetłumaczył teksty w tymże Excelu, a nam przyszło załamać ręce. Ale tylko na chwilę.
Dzięki bibliotece polib załatwiliśmy sprawę w pół godziny. A żeby zaoszczędzić stękań na przyszłość, następne partie tłumaczeń też będziemy wysyłać w Excelu. A co!
Opublikowany 24 lutego 2008 o 19:59, oznaczony etykietami: free software / open source praca programowanie python (2 komentarze).
Trafiony, zatopiony
Pół dnia spędziłem na szukaniu błędu, który ukrył się w poniższym fragmencie kodu:
try:
contactsIndex = self.names.index('Contact')
contacts = items[contactsIndex]
mail = email_re.findall(contacts)[0]
if mail:
logger_main.debug('Email %s found within ad data' % mail)
report_counters['ads_with_emails'] = report_counters['ads_with_emails'] + 1
except:
mail = False
Wszystko wydawało się w porządku, ale nie było. Klauzula except bez wyspecyfikowania wyjątku zachowuje się tak, że wyłapuje wszystko. Dopiero zapisanie jej w postaci except Exception, e: i zalogowanie wyjątku pokazało, gdzie tak naprawdę ten błąd był. Zupełnie nie tam, gdzie się spodziewałem — klucz słownika report_counters wcale nie nazywał się 'ads_with_emails' (mniejsza o to, jak się nazywał).
Po prostu się nie spodziewałem. Perfidia.
Opublikowany 14 grudnia 2007 o 15:40, oznaczony etykietami: praca programowanie python (1 komentarz).
Książki, książki
Po Pro Django, Web Development Done Right szykuje się kolejna książka o tej ramówce — James Bennet zaanonsował, że pisze książkę, która omawia Django od strony praktycznej. Książka jest już listowana na Amazon.com, więc sprawa wygląda na poważną. Wypada się tylko cieszyć. Przyda się taka książka wszystkim początkującym.
Jednym z zagadnień przez tę książkę poruszanych ma być pierwsza aplikacja w Django, czyli właśnie silnik blogowy. Ja swój napisałem w ciągu kilku wieczornych sesji, właśnie jako projekt szkoleniowy z migracji na nową wersję Django (choć wcale nie był pierwszą aplikacją, moją pierwszą aplikację można już podziwiać od dłuższego czasu w Rumunii, na Węgrzech i w Wielkiej Brytanii). Trudno jednak wymagać, by ktokolwiek zaczynał zaznajamianie się z Django od dużego, komercyjnego projektu na zlecenie międzynarodowego klienta...
Opublikowany 14 grudnia 2007 o 12:36, oznaczony etykietami: blog django free software / open source internet praca programowanie python (2 komentarze).
Co z tym Django?
Coraz bardziej niecierpliwię się tym, że Django wciąż nie ma oficjalnego wydania wersji, która miałaby pełne wsparcie dla unikodu i działające newforms. Pojawiły się pogłoski, że następne wydanie to nie będzie oczekiwane przez wszystkich 0.97, ale od razu 1.0 — to by oznaczało, że ilość rzeczy, jakie trzeba będzie zrobić podczas migracji będzie podobna, jak przy 0.91. Tutaj nie ma to wielkiego znaczenia, ale w pracy będziemy mieli dylemat...
Opublikowany 13 grudnia 2007 o 16:17, oznaczony etykietami: django free software / open source praca programowanie python.
O transatlantykach i motorówkach
Porównując do jednostek pływających, moja poprzednia praca przypominała supertankowiec — wszystko tam szło powoli i majestatycznie, trudno było zmienić kierunek, a każde niepowodzenie było katastrofą, po której ofiary liczono w setkach (jednostek umownych), a jednocześnie statek był w stanie przyjąć ogromną ilość uszkodzeń, zanim miał pójść na dno.
Teraz pracuję w firmie, którą można porównać do motorówki. W porównaniu do innych jednostek pływających zakręca praktycznie w miejscu, porusza się z relatywnie ogromną prędkością, najdrobniejsze uszkodzenie kadłuba spowoduje zatonięcie, a i tak nikt tego nie zauważy.
Jak widać z porównania, trudno wybrać, co lepsze...
Opublikowany 12 grudnia 2007 o 13:37, oznaczony etykietami: praca (1 komentarz).
Rzeczy proste, rzeczy skomplikowane
Kiedyś o tym ktoś już napisał (może Joel Spolsky, a może ktoś inny, nie mogę sobie przypomnieć). A teraz dotknęło to mnie osobiście.
Są rzeczy proste i są rzeczy skomplikowane. Naturą rzeczy prostych jest to, że łatwo jest ich używać (my to nazywamy, że mają prosty interfejs). Są jednak także rzeczy, które są skomplikowane same z siebie. A jak jest z ich używaniem?
Podobnie jak z rzeczami prostymi, rzeczy skomplikowane są... skomplikowane w użyciu. Rzeczy skomplikowane mają skomplikowany interfejs właśnie dlatego, że ze swej natury są skomplikowane i ich funkcji nie da się wyrazić w sposób uproszczony. Można to porównać do dwóch narzędzi, które służą do wyciągania gwoździ: obcęgów i tzw. łapki. Obcęgi są dość skomplikowanym narzędziem, które spełnia kilka funkcji (na kilka sposobów), więc jego interfejs jest nieco bardziej skomplikowany, niż łapki. Oczekiwanie, że obcęgi będą miały prostszy interfejs, doprowadzi do degeneracji obcęgów do poziomu łapki. Podobnie, nikomu nie wpadnie do głowy, by żądać od 50-tonowej lokomotywy, by miała interfejs Hondy Civic.
A teraz zdążam na skróty ku poincie. Dużo ludzi uważa, że zadaniem nas, czyli developerów, jest zapewnianie prostego interfejsu. Abstrahując od tego, że jest to piramidalną bzdurą, jest to także niemożliwe. Rzeczy skomplikowane nie mogą mieć prostego interfejsu, dopóki są skomplikowane. I nie będą miały prostszego interfejsu, dopóki będą realizować skomplikowane funkcje w skomplikowany sposób. A takie działanie jest chyba immanentne dla aplikacji webowych...
Opublikowany 6 grudnia 2007 o 22:18, oznaczony etykietami: internet praca programowanie (6 komentarzy).
Dell hell
Dzień w plecy z powodu kreatywności firmy Dell. Moja maszynka w pracy to niestety Dell Optiplex 320 — tak, niestety, właśnie ten szajs. Zainstalowanie na niej jakiegokolwiek linuksa graniczy z cudem, a Ubuntu 7.10 zainstalować się na nim nie da wcale z powodu buga w jądrze 2.6.22 (7.04 się udało, pomimo gimnastyki z grub2). Wydaje się, że przyczyną większości problemów jest kontroler SATA firmy (a jakże!) ATi, ale regresja względem poprzedniego wydania to nie jest coś, czego bym się spodziewał...
Opublikowany 3 grudnia 2007 o 22:07, oznaczony etykietami: free software / open source linux praca (3 komentarze).
Practicality beats purity
Każdy, kto programuje w Pythonie dłużej niż kilka godzin, na pewno kiedyś zetknął się z tym:
Python 2.5.1 (r251:54863, Oct 5 2007, 13:36:32)
[GCC 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
Często zdarza mi się zapomnieć o jednej z tych zasad: że practicality beats purity. Mamy teraz taki drobiazg do zrobienia, przydałoby się wyjąć z jednego modelu wszystko, co jest związane z jego wyświetlaniem. Oczywiście, nie tylko dlatego, że to łamie podstawową zasadę MVC i miesza model z jego wyświetlaniem — z tego powodu jest to tylko brzydkie, a poza tym to jest też dość niezręczne w zarządzaniu. Wiele już myślałem nad tym, jak wyjąć konfigurację wyświetlania tego modelu żeby wyglądało to ładnie no i chyba właśnie wygrało to practicality — zrobimy oddzielny model na DisplayProperties.
Opublikowany 18 listopada 2007 o 13:53, oznaczony etykietami: praca programowanie python.
Übersatan
Opublikowany 13 listopada 2007 o 13:57, oznaczony etykietami: free software / open source linux praca programowanie python.
Niejaki problem z Flupem
Jak wiadomo, Django używa pakietu Flup żeby uruchamiać aplikacje w środowisku serwera oferującego FastCGI (Apache + mod_fastcgi, nginx, lighttpd). Trafiłem na coś, czego jeszcze do tej pory nie widziałem na oczy. Nigdzie i nigdy.
Nasza aplikacja nigdy nie wyrzuca błędu. Nie mówię o 500, w końcu istnieją aplikacje doskonałe, ale nawet 404, i to pomimo tego, że w kodzie w wielu miejscach leci wyjątek django.http.Http404. W takiej sytuacji aplikacja wyświetla jakąś statyczną stronę (nie ma to nic wspólnego z naszym szablonem 404.html czy 500.html) i zwraca 200. Dogrzebałem się, że jest to efekt działania ErrorMiddleware z Flupa, który w ten sposób próbuje zwrócić na siebie uwagę (przy okazji wysyła maila do administratora, ale u nas to nie występuje...). Podobno występuje to wtedy, gdy błąd taki nie zostanie obsłużony przez aplikację, co w naszym przypadku jest o tyle dziwne, że podobno przecież Django obsługuje wszystkie wyrzucone wyjątki przy użyciu odpowiedniej dla typu wyjątku funkcji.
Co ciekawsze, okazało się, że najnowsza wersja Flup-a (1.0) nie zawiera już tego middleware, więc gdyby się okazało, że Django bez problemu działa z tą wersją, to może oznaczać tylko głębokie problemy z naszą konfiguracją na styku mod_fastcgi i Django.
Opublikowany 11 listopada 2007 o 14:38, oznaczony etykietami: django free software / open source praca programowanie python.
Cache obiektów w Django - jak się nie zgubić?
Zdarza się tak, że domyślny sposób buforowania, używany przez Django (buforowanie całych stron, buforowanie całego serwisu) nie wystarcza i trzeba buforować pojedyncze obiekty lub ich listy. Gdy się już zacznie, trudno jest przestać i wtedy okazuje się, że nie sposób dojść do tego, pod jakim kluczem co jest zbuforowane. Sytuacja komplikuje się dodatkowo, gdy używa się memcache, a już całkiem, gdy w buforze trzyma się dane sesji. Najłatwiej byłoby zrestartować memcached, ale przecież polecą sesje użytkowników... Zaczyna się gorączkowe szukanie klucza i strzelanie w ciemno, ale to naprawdę głupiego robota, bo klient memcache zawsze zwraca 1, gdy nie wystąpi żaden krytyczny błąd. Rozwiązaniem byłoby przejrzenie listy kluczy (np. przeiterowanie przez nie), ale czegoś takiego nie ma.
Wpadłem na pomysł prostego rejestru kluczy w postaci zbioru (set). Zdaje się to działać na tym serwisie (który jest trochę poligonem...), a jak działa w naprawdę dużym serwisie, to się dopiero okaże jutro, jak sprawdzę to w pracy. Na razie jestem dobrej myśli, bo idea zdaje się nie mieć słabych punktów... ;)
Opublikowany 4 listopada 2007 o 22:10, oznaczony etykietami: django free software / open source praca programowanie python.
Web3.0? Nie, dziękuję.
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.
Opublikowany 29 października 2007 o 10:16, oznaczony etykietami: praca programowanie python (2 komentarze).
Duma i niezadowolenie
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.
Opublikowany 26 października 2007 o 12:59, oznaczony etykietami: praca programowanie (6 komentarzy).
Trzy kolory
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.
Opublikowany 16 października 2007 o 22:27, oznaczony etykietami: free software / open source praca programowanie python (9 komentarzy).
Plug! Szukam współpracowników
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. ;)
Opublikowany 10 października 2007 o 10:21, oznaczony etykietami: django praca.
Rozważania o emeryturze
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…
Opublikowany 7 października 2007 o 23:00, oznaczony etykietami: praca życie w Wołominie.
Pali się, moja panno
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… ;)
Opublikowany 4 października 2007 o 14:46, oznaczony etykietami: praca python (2 komentarze).
Piątek po ciężkim tygodniu
Niewielka pociecha z tego piątku… Po całym tygodniu ciągłego stresu nie mam siły zająć się swoimi sprawami. Przyjdę do domu i może zrobię archiwum do tego bloga. O ile wystarczy mi na to siły.
Jeszcze dziś rano miałem masę pomysłów na zabawne ficzery, które mógłbym tutaj dorobić... ale po 17 (i po całym dniu pracy) już mi się nie chce. Może sobota lub niedziela będą bardziej łaskawe dla Pythona i Django. ;)
Opublikowany 28 września 2007 o 17:20, oznaczony etykietami: blog praca (3 komentarze).
4 dni w plecy
Zakończyliśmy wreszcie aktualizowanie aplikacji. Trwało to 4 dni, od poniedziałku po południu do czwartku po południu. Kiedy wreszcie nam się udało, po trzech nieudanych podejściach, miałem mózg jak gąbka. Nie takie coś do kąpieli, lecz jak to stworzenie, co żyje w morzu. Gąbka, jedno z najbardziej prymitywnych stworzeń wielokomórkowych. A potem poszedłem się spotkać z kolegą, żeby go przekonać do pracy u nas i zupełnie się już wyluzowałem.
Nie obchodzi mnie, co będzie jutro, na pewno nie będzie gorzej, niż było przez ostatnie 3 dni. To znaczy, że będzie całkiem dobrze.
Opublikowany 27 września 2007 o 22:19, oznaczony etykietami: praca.
Pierwszy update produkcji
Nie miałem dotąd wielkiej możliwości nadzorowania aktualizacji oprogramowania na serwerach u klienta… ale zawsze musi być ten pierwszy raz. W końcu jestem dyrektorem aplikacji. ;)
Na szczęście aplikacja nie jest duża. Na szczęście nie jest bardzo poważna. Na nieszczęście jest dość skomplikowana w swojej architekturze.
Opublikowany 24 września 2007 o 17:46, oznaczony etykietami: praca.
