Žangovinky #32
Komentovaný překlad Django Dose Community Catchup, Episode #32.
Během prosince se na svém blogu Seek Nuance pěkně rozepsal John DeRosa. V
článku “A performance lesson on Django QuerySets” dokazuje, že
bezmyšlenkovité nasazení QuerySet funkce iterator() přináší spoustu
problémů. Menší paměťové nároky byly v jeho případě draze vykoupeny četností
dotazů na databázi (co iterace to dotaz, navíc umocněné dvaceti simultánně
spuštěnými Celery tasky).
V druhé polovině článku se zmiňuje o špatném pochopení vlastnosti QuerySetu,
tj. že jsou lazy (k vyhodnocení dojde až je to nezbytně nutné) a kešované. Na
praktické ukázce demonstruje, že každý vytvořený QuerySet generuje databázový
dotaz, což v kontextu jeho kódu znamenalo neúměrné zatížení PostgreSQL.
David Cramer je masakrální drsoň. Pokaždé když něco publikuje, tak je to
perla. A pokaždé mi trvá sakra dlouho, než pochopím o co jde.
Nejinak tomu je i v článku “Tracking changes to fields in Django”.
Pokud jsem se někde šeredně nesek, tak nám dává k dispozici dekorátor, s
jehož pomocí můžeme sledovat historické změny atributů u konkrétního modelu.
Fachá to tak, že pokud např. obj.name == 'Petr' a přenastavíme jej na
obj.name = 'Pavel', pak metoda obj.has_changed('name') vrátí True
(atribut name se změnil), metoda obj.old_value('name') vrátí ‘Petr’ a metoda
obj.whats_changed() nás podaruje slovníkem změněných atributů. Tato ultimátní
“změnokeška” se resetuje při vytvoření instance a během uložení objektu.
Daniel Greenfeld rozvířil debatu o Template Languages. Ve svém postu hájí
směr, který tvrdí že šablonovací jazyk musí být stupidní. Čím méně toho umí,
tím lépe.
Reakce na sebe nenechaly dlouho čekat. Autoři alternativních šablonovací jazyků
(Armin Ronacher — Jinja2, Mike Bayer — Mako) vysvětlují, proč toho
jejich jazyky umí víc + jeden pohled zvenčí.
Špetka sci-fi z velkého světa (pro mě rozhodně). Pokud stejně jako chlapci
z The Washington Times spravujete vícero serverů a začínáte mít binec v
Python balíčcích (na serveru A verzi 1, na serveru B verzi 1.2 a na serveru C
nic), může se vám šiknout jejich fabfile.py.
Poslední zpráva hodná zmínky: nedávno implementovaná unittest metoda
assertNumQueries dráždila Luke Planta natolik, že pro ni napsal speciální
pomocnou třídu FuzzyInt. S její pomocí je možné testovat počet SQL dotazů v
zadaném intervalu. Jak Luke trefně komentuje, vlivem kešování se lehce stane,
že počet SQL dotazů v aplikaci kolísá, a testovat je na exaktní počet přináší
spíš problémy než užitek.
A teď něco úplně jiného. Novinky z chobotu:
- Byly rozšířeny funkce mail_admins() a mail_managers(). Odteďka je možné k nim připínat HTML přílohy, čehož se hned využilo pro odesílání přítulnějších error emailů. 3× hurá!
- Odskočme si do views, přesněji na jejich konce. Pokud nejste moc indie, budete
tam mít buďto nějakou
HttpResponse,render_to_responsenebo generické view. Odteďka ale budeme potkávat nového kamaráda TemplateResponse. Ten dostal do vínku kopec lenosti, a obsah generuje až to je skutečně nutné. Díky této povaze bude např. možné změnit na poslední chvíli jméno šablony, nebo do ní poslat upravený či rozšířený kontext. Už se těším na prčovní middlewary, které z této vlastnosti vytěží maximum.
Poznámka: Kopa práce, těžká témata a blížící se vánoce. Výsledek? Žangovinky #31 nejsou a nebudou. Komu chybí, nechť opráší AČ slovník, a postne sem link.
Pěkné vánoce!
Žangovinky #30
Komentovaný překlad Django Dose Community Catchup, Episode #30.
18.října měla být představena alpha 1 verze Djanga 1.3. Bohužel se ale stále objevují drobné chyby a datum se odsouvá. Na termínu oficiálního představení nové verze se naštěstí nic nemění, 17.ledna 2011 nás objede Ježoch a doveze překrásný dáreček. Co bude uvnitř?
- generická view převlečená do class-based kabátku
- jednodušší správa média souborů napříč aplikacemi
- podpora spouštění databázových transakcí uvnitř bloků
with - a spoustu dalších vylepšení
Jednou z nejvýraznějších přednášek na letošním portlandském DjangoConu
byla Why Django Sucks. Eric Florenzano trefně poukazuje na bolesti Djanga
— klesající výkon s každou novou verzí, monolitický settings.py, obtížné
přizpůsobování aplikací třetích stran. Zatímco některá z kritizovaných témat se
podařilo poměrně rychle vyřešit (např. rozšíření týmu core vývojářů), u jiných
to bude běh na dlouhou trať. Andy McKay ve svém článku Django Apps rock
kontruje na Ericovu poznámku ohledně znovupoužitelnosti: nezapomínejme, že
většinu našich webů pohání také “non-reusable” aplikace. A v této rovině Django
exceluje, rychlostí i efektivitou.
U Andyho blogu ještě zůstaneme. Uvažovali jste o tom, že svůj Django projekt nasadíte na Googlím App Enginu? Ceny jsou přijatelné (pro většinu z nás 0,- USD), Django je dlouhodobě podporováno, škáluje to! Možná si napřed přečtete článek When App Engine went wrong a pouvažujte, jestli svůj projekt nerozjet přeci jen jinde.
Jak sledujete chyby na produkci? Necháváte si posílat traceback reporty
přes email nebo používáte sofistikovanější řešení jako třeba Arecibo
nebo Sentry? Pokud patříte do druhé skupiny, nechte si Davidem
Cramerem poradit jak správně používat knihovnu logging, aby se
hlášky v Sentry zobrazovaly jak mají.
A teď něco úplně jiného. Novinky v chobotu:
HttpRequestnyní můžeme číst stejně jako soubor- nový tag
localizenám umožní vypínat/zapínat podporu lokalizace v šablonách (nezávisle na USE_L10N) - testy budou fičet zase o něco rychleji
Poslední téma není můj šálek kávy, ale určitě za zmínku stojí: Postgres 9 Streaming Replication and Django-Balancer.
Žangovinky #29
Komentovaný překlad Django Dose Community Catchup, Episode #29.
Začněme blogy. Peter Bengtsson ve svém článku Local Django development with Nginx radí, jak na lokální mašině nakonfigurovat Nginx a využít jej k servírování statického obsahu (CSS, JS, obrázky). Ukazuje jednoduchý postup, kterým dosáhl zrychlení z původních 446.34 req/s na 15709.54 req/s, což se pozitivně projevilo během ladění Javascriptových kódu v prohlížeči.
A teď něco úplně jiného. Troubení z chobotu:
- Zásadní zpráva. Seznam autorů byl doplněn o Honzu Krále, jediného našince který se na vývoji Djanga aktivně podílí. Gratulace! (a velké díky)
- Od revize 14139 Django podporuje knihovnu unittest2, která mimo jiné přináší nové assert metody pro pohodlnější testování seznamů, slovníků nebo datetime objektů.
- Třída
TestCasebyla doplněna o metodu assertNumQueries (revize 14183), s pomocí které je možné ověřit počet databázových dotazů generovaných zadaným kódem. - U testování ještě zůstaneme. Díky nové třídě RequestFactory (revize 14191) je
možné vytvořit fake request objekt a ten v testu podsunout konkrétnímu view
(čímž elegantně obejdeme pravidla v
urls.py)
Poslední novinka se týká “class based views”, oficiálního začlenění views v podobě tříd (konečně!). Russell Keith-Magee sepsal letový plán, který by nám měl do Djanga 1.3 dopravit tuto vysněnou vlastnost. Držme palce.