Przyglądając się WebOb i dołączonym do niego przykładom można wreszcie zobaczyć, jak dużą rzeczą są ramówki webowe. O ile WebOb dostarcza podstawy do zbudowania własnej ramówki, to porównanie tej podstawy z gotowym frameworkiem, np. Django, uświadamia, jak wiele rzeczy trzeba napisać, żeby wszystko razem zagrało. Oczywiście, zazwyczaj używa się tylko pewnej części ramówki i wydaje się, że napisanie własnej spowoduje, że będzie szybsza, lżejsza i w ogóle lepsza, bo przecież pozbawiona kodu (a więc i funkcji), którego się i tak nie używa. Ale to, co pozostaje, to i tak ogromna ilość kodu i ogromna ilość funkcji, które trzeba zaimplementować. I to zaimplementować poprawnie, przewidując sytuacje niezwykłe (dziwnego klienta, któremu się coś pieprzy z HTTP i czegoś-tam zapomina wysłać albo nie rozumie) i awaryjne.
Ja w każdym razie dziękuję, zostanę przy cudzej robocie. :)
Chodzi mi o program port, ten od MacPorts. Jego działanie jest dla mnie źródłem załamywania rąk nad głupotą. A właściwie lepiej byłoby to nazwać badziewnością sączącą się z samego źródła.
Wyoraźmy sobie sytuację (nie całkiem hipotetyczną): w nowej wersji biblioteki libsqlite3 poprawiony zostaje bardzo denerwujący błąd, który miał wpływ na działanie wielu programów. Błąd był bardzo denerwujący i chciałbym się go pozbyć także z moich aplikacji w Pythonie, które działają z PySQLite. Wpisuję więc w terminalu sudo port -R upgrade sqlite3 i...
Ile razy zostanie przebudowane subversion? Ile razy zostanie przebudowany Vim? Ile razy zostanie przebudowane gnutls?
Przykro mi, ale na 2 pierwsze pytania nie umiem udzielić odpowiedzi. Liczenie ile razy budowało się subversion zakończyłem po 15 razie, ale ile razy budował się Vim po 25 razie. Łącznie ponad 40 razy zostały zbudowane 2 programy, które ze sqlite3 nie mają nic wspólnego.
Gnutls budowało się dokładnie raz. O jeden raz za dużo. Bo jedynym pakietem, który od sqlite3 zależy w moich portach jest py25-sqlite3.
W celach zupełnie edukacyjnych postanowiłem zrobić jakąś aplikacyjkę na Google AppEngine, na początek w Django 1.0 (na próby ujarzmienia WebOb czas przyjdzie później).
Napisałem kawałek kodu, zdeployowałem, co mogę powiedzieć po tych paru godzinach... Django musi zostać mocno okrojone, żeby zadziałało poprawnie. Ograniczenie do 1000 plików na aplikację oznacza, że z samego Django trzeba wywalić wszystko, co niepotrzebne lub nieużywalne, bo samo Django liczy sobie około 900 plików i na aplikację nie zostanie wiele miejsca. Przydaje się AppEngine Helper for Django, dzięki temu jest sporo prościej. django.forms można używać, ale ostrożnie i w razie potrzeby podpierając się google.appengine.ext.db.djangoforms (oryginalne ModelChoiceField nie działa). Modele przypominają modele Django, używa się ich podobnie, ale API nie jest takie samo, więc trzeba uważać. Jeszcze nie rozgryzłem autoryzacji, ale nie wygląda jakoś tragicznie.
W sumie wygląda nieźle, ale praca z takim okrojonym Django jest dość stresująca. It's a challenge, baby. :)
Dziś miałem pierwszą jazdę po mieście. Poszło nadspodziewanie dobrze: jechało mi się płynnie i bez problemów, pomimo sporego ruchu (hej, dzisiaj jest przecież dzień bez samochodu!), choć nie obyło się bez kilku zgrzytów w skrzyni biegów. Odwiedziłem Pragę Południe, Centrum i Mokotów, przećwiczyłem ronda, przejścia dla pieszych i szybką jazdę (na Trasie Łazienkowskiej można jechać 80, czad!). Nie stworzyłem zagrożenia w ruchu drogowym i chyba nawet nie było za bardzo widać, że się dopiero uczę.
Podoba mi się to. We czwartek i w piątek ciąg dalszy nauki.
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...
Przybywa dokumentacji w moich django-tutors — skończyłem (a przynajmniej tak mi się wydaje) odcinki o uploadowaniu plików do ścieżek określanych statycznie i dynamicznie, właśnie kończę odcinek o upload handlers. Na napisanie czeka jeszcze odcinek o storage backends, a potem... A potem to się zobaczy.
Padła propozycja, żeby napisać coś o uploadowaniu wielu plików na raz przy użyciu jakiegoś flashowego uploadera, ale nie wiem, czy taki dość specyficzny temat mi odpowiada. A może ktoś zechciałby napisać taki artykuł? Projekt django-tutors jest otwarty, kto chce może dostarczyć co chce, to niekoniecznie musi być komplet (dokument + przykładowy kod), jeżeli czegoś będzie brakowało, to w razie potrzeby się dopisze. Wymaganie właściwie jest tylko jedno, to musi działać z fabrycznym Django 1.0 (czyli bez przeróbek w kodzie ramówki).
Jeżeli ktoś chce dołożyć swoje 3 grosze do projektu, to proszę się zgłosić mailem na moje konto na gmailu (jarek.zgoda i tak dalej), albo odezwać się na jabberze, też na moje konto na gmailu.
Zacząłem dzisiaj szkolenie praktyczne na prawo jazdy, mówiąc po ludzku: miałem pierwszą jazdę. Od kręcenia głową na łuku podczas jazdy tyłem boli mnie szyja i kark, ale w końcu doszedłem do niejakiej wprawy i udawało mi się zmieścić w cholerne słupki za każdym razem.
Nie wiem, ile czasu zajmie mi zdobywanie tego dokumentu, ale teraz już się nie wycofam.
Grywa w badziewnych serialach, ale czasem pokazuje skrzydła. Zaskakujące jest to, że potrafi parodiować sam siebie ("Magda M. po 30-tu latach" w programie Szymona Majewskiego). I potrafi grać mocno przerysowane, typowo komediowe rzeczy (znowu w programie Szymona Majewskiego, "Figo Fago"). Facet ma do siebie dystans.
Moje niedawne przejścia z uploadem plików popchnęły mnie do tego, żeby spisać moje doświadczenia w postaci samouczków. Na początek poszedł właśnie upload plików, jak do tej pory napisałem o uploadzie do statycznej ścieżki.
django-tutors
Wszelka pomoc mile widziana — fragmenty szkoleniowego kodu, samouczki, itp. Jeżeli ktoś chciałby zredagować jakiś artykuł, to oczywiście zapraszam. Język: polski. Na razie wyłącznie.
W poprzednim odcinku było o hardware, a teraz będzie o software. Jako zatwardziały linuksiarz mam nieco inne podejście do oprogramowania, niż użytkownicy Windows® (wolność, wolność!), z kolei system operacyjny i aplikacje traktuję całościowo, jako jeden ekosystem — to w odróżnieniu od bździarzy. Ot i tak (nie mamy pańskiego płaszcza i co nam pan zrobi?).
Mac OS 10.5.4 (Leopard) wygląda ładnie. A nawet bardzo ładnie. Widywałem równie ładne dekstopy, ale jedynie na screenshootach, a tu proszę, sam mam taki piękny dekstop... Ale dość żartów. Patrzenie na OS X sprawia przyjemność i tyle wystarczy o wyglądzie tego systemu.
Jeżeli chodzi o funkcje samego systemu, to wszystko jest na miejscu, ale wszystko już gdzieś widziałem, może w trochę mniej wyczesanym wykonaniu. Inna rzecz, że to wszystko współgra ze sobą jak najlepiej. Pomijając dziwactwa (jak brak pliku /etc/hostname i paru innych w /etc, takie specyficzne pojmowanie dobrych obyczajów uniksowych), to OS X 10.5.4 to przyjemny system z uniksowymi korzeniami i ładną graficzną nakładką. Czasem mogą denerwować wynalazki Apple, jak np hierarche /Library i /Applications, ale można się do tego przyzwyczaić (o polubieniu nie ma mowy, jeżeli ktoś wcześniej miał system z prostą i czytelną hierarchią FHS). Oczywiście, po kilku latach używania jednego środowiska nabywa się nawyków, których trzeba się oduczyć przy przesiadce na inne, ale nawet na linuksie przesiadając się z Gnome na KDE (czy dowolne inne środowisko desktopowe) trzeba się pozbyć jednych przyzwyczajeń i wyrobić sobie następne. Nikt tego nie lubi, więc pewnie dlatego wyrobieni linuksiarze takich rzeczy nie robią — narzekają na swoje środowisko, ale na inne się nie przesiadają bez absolutnej potrzeby. ;)
Niestety, częścią środowiska są aplikacje spoza samego systemu i tu już mało rzeczy można pochwalić. W większości to kupa gówna, za którą w dodatku trzeba zapłacić. Ale użytkownicy Windows prawdopodobnie to znają i są do tego przyzwyczajeni, więc nie robi to na nich wielkiego wrażenia. Linuksiarz będzie psioczył. Na szczęście mam dość specyficzne (czytaj: małe) wymagania, więc udaje mi się je zaspokoić minimalnym zestawem (terminal, edytor, przeglądarka, komunikator i odtwarzacz muzyki).
I na zakończenie o tym, co się przydaje: MacPorts to przeniesiona z FreeBSD idea portów. Z portów mam Pythona, Vima 7.2, ImageMagick, Subversion, bazaar i całą masę innych przydatnych narzędzi typu command line. Trochę denerwujące jest to kompilowanie ze źródeł, ale w sumie da się wytrzymać, dopóki komuś nie wpadnie do głowy zainstalowanie sobie czegoś, co zależy od KDE lub Gnome, bo to wtedy nocka z głowy.
Pomimo narzekań i niesmaku, nie mogę powiedzieć, żeby pod względem softu było źle. Jest mniej-więcej tak, jak na Windows®. W porównaniu do różnych dystrybucji linuksa to jest po prostu gorzej — mało zamienników, kiepska jakość oprogramowania 3rd party i wszechobecna pazerność. I choćby z tego powodu prywatnie Maca bym sobie nie kupił.
Na doczepkę
Na koniec wspomnę krótko o tym, co daje największą przewagę linuksowi. OS X nie ma community. To system zrobiony dla indywidualistów, kultywujący indywidualizm i nie mający żadnego przesłania społecznościowego. Komuś, kto przesiadł się z systemu, wokół którego jest vibrant community, Mac OS X będzie się wydawał systemem bez zaplecza społecznego, napędzanym jedynie pieniędzmi Apple. Przynajmniej ja mam właśnie takie wrażenie. Nie odpowiada mi to, ale powoli się do tego przyzwyczajam.