Django 1.2

Właśnie przestawiłem ten serwis na Django 1.2.1. Migracja i dostosowanie kodu zajęły nie więcej niż pół godziny, pomimo sporych zmian jakie były wprowadzone w wersji 1.2. Jak zwykle jestem pod wrażeniem dbałości o zgodność wsteczną i wzorowej dokumentacji projektu.

I niestety tradycyjnie już memory footprint aplikacji wzrósł — nieznacznie, ale od 1.0.x w sumie jest to już ok. 50% większe zapotrzebowanie na pamięć. Z wersji na wersję Django pożera wciąż więcej i więcej.

Pewna reorganizacja

Zamierzam trochę pozmieniać konfigurację uruchamiania tego serwisu (a przy okazji może dorobię się ciut wygodniejszego deploymentu, do ponownego wykorzystania), więc w ciągu kilku najbliższych dni można się spodziewać niespodziewanych przerw w działaniu.

Expect unexpected, but prepare for better.

Dla poddierżenia razgawora

Ostatnio jest cicho, więc dla poddierżenia razgawora kilka drobiazgów.

@classmethod
def import_object(cls, obj):
    return False, None

Zimno. Odkąd wróciłem z Grecji jest mi nieustająco zimno. Niestety, w te wakacje raczej nie uda mi się dostać 10 dni urlopu, więc jeżeli już pojedziemy do Grecji, to na tydzień.

Ustaliliśmy z żoną, że w przyszłym roku Escort idzie do ludzi. Jakby to wyczuł, bo zaczął się sypać: najpierw jakiś wyciek z układu hamulcowego, teraz problemy ze sprzęgłem i skrzynią biegów.

Po raz pierwszy od ponad miesiąca przyjechałem dziś do pracy komunikacją publiczną. Bez stania w korkach i czekania na autobusy (akurat dziś podjeżdżały w mgnieniu oka) zajęło mi to 70 minut (85 od wyjścia z domu). Samochodem w 70 minut dojeżdżam stojąc w korkach (Piłsudskiego/Chełmżyńska i Marsa). Na szczęście to był jednorazowy wybryk, już jutro znowu zamieniam bus na wóz.

Do koncertu Nine Inch Nails w Poznaniu pozostało 20 dni.

Igranie z przyszłością

Zmiany się szykują... Wspominałem o planach przepisania silnika tego bloga przy użyciu narzędziówki, ale im dłużej nad tym siedzę, tym bardziej jestem przekonany, że nie ma to wielkiego sensu — zbyt wiele rzeczy wymagałoby ręcznej ingerencji, patchowania komponentów i rwania włosów z głowy, bo coś nie działa, jak na przykład odkrycie z wczoraj:

  • nie działa Beaker z powodu błędu w kodzie backendów sesyjnych wykorzystujących bazę danych i memcached (pliki działają OK, ale ich nie chcę);
  • w związku z tym, że nie działa Beaker, nie działa też AuthKit, więc nici z ułatwień autentykacji (np. po OpenID).

Oczywiście, byłbym w stanie naprawić Beaker'a, powstaje jedynie pytanie, czy to się w ogóle opłaca? Alternatywą jest przejrzenie i odchudzenie istniejącej aplikacji w Django, a przy okazji zoptymalizowanie jej nieco, wykorzystując doświadczenie, jakiego nabrałem w ciągu tych kilkunastu miesięcy. To też mogłoby być nienajgorsze rozwiązanie, a na pewno szybsze. Będę żałował Jinja2, ale jak mnie żal przyciśnie, to podłączę sobie ten silnik do Django, żeby stonować trochę ten żal...

Poważnie się zastanawiam i jeszcze nie podjąłem żadnej decyzji — na razie kod wykorzystujący narzędziówkę poszedł do oddzielnego brancha w repozytorium, a w trunku pojawił się kod wersji działającej obecnie, ale nie ma to jakiegoś symbolicznego znaczenia (tak sobie to tłumaczę). Uch, jak ja lubię mieć takie dylematy... :)

Zrobiło się cicho

A to dlatego, że moje przemyślenia na temat technologii przeniosłem do technologicznej tuby tego serwisu, którą w ramach edukacji implementuję na Google AppEngine. Aplikacja, choć wciąż w trakcie rozwoju, powoli zyskuje kolejne funkcje (a ja przy okazji uczę się nowych rzeczy).

Podsumowanie roku 2008

Rok 2008 nieubłaganie zbliża się do końca, czas zacząć podsumowania. Co ciekawego wydarzyło się w upływającym roku?

Jak na rok to raczej było spokojnie. ;)

Nowe komentarze zlądowały

Zaktualizowałem Django na zgodowie.org do wersji 1.0 (a nawet lepiej). Co za tym idzie, są już też nowe komentarze. Udało mi się (przy użyciu brudnych sztuczek, bo inaczej się nie dało) doprowadzić do tego, że najważniejsza zmiana, czyli wymaganie podania emaila przy dodawaniu komentarza, nie jest widoczna — nie jestem zainteresowany kolekcjonowaniem adresów email moich czytelników (prywatnie uważam to za idiotyzm). URL na razie nie jest wykorzystywany, ale myślę, że będzie już niedługo — jak tylko znajdę trochę czasu.

Jak na razie wydaje się, że wszystko działa...

Musi poczekać

Od kilku tygodni mamy w Django nową ramówkę do komentarzy. Kod jest pokłosiem projektu Google Summer of Code™ i trafił do repozytorium Django właściwie bez poważnego przejrzenia, w wielkim pośpiechu, już po wydaniu którejś bety. Resultatem jest fura błędów i niedoróbek, które znalazły się w finalnym wydaniu Django. Nie chodzi bynajmniej o to, że ktoś to marnie napisał — dla każdego projektu programistycznego normalne jest to, że pierwsza wersja służy temu, by poprawić podstawowe błędy i doszlifować ją w trakcie używania. Nowa ramówka nie miała szansy sprawdzić się w boju, pod czujnym okiem dziesiątek czy setek użytkowników.

Próbowałem doprowadzić do tego, by zmiana ramówki komentarzy była niedostrzegalna dla moich czytelników. Niestety, okazało się, że w obecnym stanie ramówki jest to po prostu niemożliwe bez napisania... własnej ramówki. Nie wszystko daje się owrapować i nie wszystko można podmienić, nawet przy bardzo dynamicznej naturze Pythona. Dlatego wspomniane prace konserwatorskie zostają odłożone na bliżej nieokreśloną przyszłość, gdy ramówka otrzyma wreszcie wymaganą konfigurowalność. W sumie, patrząc na to z innej strony, skoro działa, to po co poprawiać? ;)

Przerwa technologiczna

W ciągu najbliższych kilku dni będę musiał wyłączyć komentarze na godzinę czy dwie, żeby przeprowadzić aktualizację do nowszego Django (z nową ramówką do komentarzy). Ale jeszcze chwilę poczekam, może poprawią zgłoszone przeze mnie błędy. ;)

Nowe comments w Django

Dziś w Django pojawiła się zrefaktoryzowana ramówka do komentarzy. Tym razem przed aktualizacją powstrzymuje mnie comment-utils, które chroni ten piękny kawałek internetu przed spamem. Parę dni i będzie, a jak nie, to popracuję nad tym osobiście. :)

Znikam

Dziś znikam z horyzontu internetu na 10-11 dni — wyjeżdżamy nad morze i nie zamierzam tam niczego kombinować z dostępem do internetu, po prostu nie ma.

Wracamy 11 lub 12 sierpnia i liczę na to, że internet będzie tu jeszcze. ;)

Zamieszania trochę było

Było, było, głównie z wyglądem strony. Postanowiłem wykorzystać czas, jaki trafił mi się z okazji choroby i wymieniłem dziś szablon strony. Dwa razy... Po pierwszej zmianie dostrzegłem kilka mankamentów, których za nic nie umiałem poprawić (jakieś obrazki źle się umieszczały), więc w szybkim tempie wymieniłem szablon na jeszcze inny. Ten z kolei dostał raczej niską notę od mojej żony, więc po poprawieniu mankamentów, które gnębiły tego pierwszego, zdecydowałem się go przywrócić.

Teraz czeka mnie trochę dopieszczania wizualnego (tu i ówdzie czegoś jeszcze brakuje).

Na głęboką wodę

Od 10 minut serwis działa na Django-1.0-alpha. Widzę parę rzeczy, które będą wymagały poprawienia, ale ogólnie jest lepiej (i mniej roboty) niż się spodziewałem. Największą zagwozdką była zmiana wprowadzająca zgodność z WSGI — wymagało to dopisania FORCE_SCRIPT_NAME do settings.py. Na szczęście (znowu!) jest to opisane w dokumentacji Django.

Archiwum is back

Poprawiono najbardziej denerwujący mnie błąd w Django z ostatnich czasów i dzięki temu wróciło archiwum. Oh, my...

Zniknęło archiwum

Ale wróci, gdy tylko w Django zostanie poprawiony błąd ze zgłoszenia 7155 (patch działa, ale nie będę go nakładał ręcznie, nie pali się).

Nowości z frontu walki z Akismet

Coś wygląda na nieźle spieprzone w usłudze sprawdzania komentarzy przez Akismet — podanie w komentarzu linku do strony na Grupach Google (obojętne, dyskusje czy pliki), zamiast spodziewanego "true" lub "false" zwraca "" (pusty ciąg znaków). Na razie nikt nie zwrócił uwagi na takie zachowanie Akismet, ale ja się zacząłem rozglądać za czymś innym. Na razie plany rozszerzenia CommentModerator obejmują LinkSleeve i Defensio.

Jak na razie wygląda na to, że nie da się zamieścić komentarza, który zawiera link do Google Groups. Wolałbym nie rezygnować z automatycznego moderowania komentarzy, ale jeżeli nie da się tego uniknąć, to będę moderował komentarze ręcznie. Oh, my...

Jakiś problem z Akismet

Akismet robi jakieś hocki-klocki, gdy w komentarzu wpisuje się link do strony z plikami listy mailowej WARPY. Trzeba będzie to zbadać.

Aksimet poszedł w krzaki

Nie wiem, na którym końcu łańcucha pokarmowego został popełniony błąd, ale przez kilka godzin nie można było dodawać komentarzy dzisiaj z powodu brakującego pola user_agent, którego (zupełnie nie wiedzieć czemu) system antyspamowy nie dostawał podczas sprawdzania komentarza.

Przy okazji wyszło na jaw, że logi nginxa, jakie gromadzi megiteam.pl nie są szczególnie przydatne — nie wiadomo co jest logowane (stdout? stderr?), nie wiadomo kiedy wystąpił błąd, bo nie ma daty i czasu przy wpisach w logu fastcgi, są jedynie w access_logu, ale tam nie ma z kolei komunikatów o błędach. Zresztą, w logu fastcgi też ich nie ma, jedynie ślady w postaci komunikatów to broken pipe.

Nowe na megiteam.pl

megiteam.pl (gdzie hostowany jest ten skromny serwis) wprowadziło w ramach nowości rozliczanie za używaną pamięć, zamiast rozliczania za procesy. Lepiej? Gorzej? Nie wiem, jak dla mnie to chyba drożej, bo drugą aplikację uruchomić będzie mi trudno (w sumie zostało mi ze 20MB pamięci, więc nawet na małego memkesza mi nie wystarczy), musiałbym sobie dodać jeszcze ze 20MB pamięci, a te aplikacje, które teraz powstają mają trochę większe oczekiwania, więc raczej pozastanawiam się jeszcze trochę nad dedykiem w hetzner.de.

Swoją drogą, ciekawe jest orientacyjne zestawienie, ile która ramówka potrzebuje dla aplikacji...

Mówisz - masz

Bluszcz zażyczył sobie RSS-ów dla konkretnych kategorii, żeby odfiltrować offtopiki na planecie. Tradycyjnie na wyrost kazałem mu się zgłosić w przyszłym tygodniu, ale to nie byłaby aplikacja w Django, gdyby rzeczywiście miało to tyle trwać. I trwało w sumie 20 minut. Proszę, masz RSS-y z kategorii (u mnie się one nazywają etykietami). Tę, która Cię interesuje, znajdziesz na stronie z wpisami pod etykietą python.

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...

Nowy szablon

Ciekawe, na jak długo mi wystarczy... Tamten poprzedni był po prostu za wąski.

Komiksy

Zasadniczo zlewam komiksy w internecie, ale XKCD jest po prostu... Po prostu świetne. Warto przejrzeć archiwa, by znaleźć swoje ulubione stripy (mój to ten o spowalnianiu ruchu obrotowego Ziemi).

More power to the people

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... ;)

Nowy gadżet: moje ulubione przepisy kulinarne

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. ;)

Hot! Hot!! Hot!!! Nieustające listy przebojów!

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. ;)

Umm..., this is slick!

Jak się odgrażałem, tak też zrobiłem. Nie jest co prawda brązowo-zielono ale jest pięknie, prawda? ;)

Dwie lewe ręce i zezowate oczy

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...

Mam archiwum XYZ

Zrobiłem dziś archiwum według miesięcy, przy czym trochę bardziej z ciekawości niż z rzeczywistej potrzeby użyłem pakietu Babel (chciałem mieć ładne nazwy miesięcy itd). Przy okazji znalazłem babola w ostatnim wydaniu, tymczasowo poprawiłem ręcznie żeby w ogóle działało. Poczułem się trochę zawiedziony, że tak zachwalany mi przez kolegów pakiet (i w wersji 0.9.1, a taki numerek powinien już zobowiązywać) nie ma testów, które potrafiłyby wykryć taki problem. Ale co ja psioczę, moje projekty w ogóle nie mają testów... ;)

A na razie cieszę się tym nowym, wspaniałym archiwum i już spoglądam w przyszłość, co następne w kolejce do zrobienia.

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. ;)

Słówkiem wyjaśnienia

Zaczęło się ponownie od tego, że wreszcie z początkiem 2007 roku znalazłem pracę, w której piszę w Pythonie (właściwie to w Django). Nie byłem do tej pory wielkim miłośnikiem programowania internetowego, ale Django mnie przekonało na tyle, że zachciało mi się zrobić coś własnego. Na pierwszy ogień, jak zwykle, poszedł silnik blogowy...

Gdy tylko okazało się, że za skromne pieniądze mogę mieć hostowaną aplikację Django na serwerze firmy megiteam.pl, to długo się nie zastanawiałem. Wykupiłem sobie konto na rok i... voila! Jest. Zaczyna się oczywiście od bloga, ale przecież nie musi się na tym skończyć. Serwer jest, czas może się znajdzie, aplikacja (czy nawet aplikacje) mają szanse dojrzeć.

Blog... Again

I znowu mam bloga. Takiego poważnego, z całym szacunkiem. Tyle, że tym razem jest on w nieustającej fazie rozwoju. Wysupłałem trochę grosza i mam - własny hosting z Pythonem/Django...