Přejít k navigační liště

Zdroják » Různé » Poznámky z EuroPython 2015

Poznámky z EuroPython 2015

Články Různé

V létě proběhla mezinárovní konference EuroPython 2015 s bohatým programem. Co si z ní odnesl jeden z návštěvníků?

Nálepky:

Text původně vyšel na autorově blogu.

Logování

Stejně tak jsem začínal i loňské poznámky. Tentokrát jsem se však dozvěděl víc. A to to, že stále neexistuje žádný pořádný tool. Resp. existuje jich spoustu a každý umí stejnou věc trochu jinak. V základu jde o to, že není potřeba otevírat logy. Automaticky jsou shromažďovány na jednom místě a analyzují se. Vyhledávají se chyby a jiné užitečné „události“. Například pomalé odpovědi, warningy atp. Tyto události se groupují a zobrazují v hezké podobě s grafem četností výskytu. Také s možností se podívat, kterým lidem událost nastála a kdy se objevila poprvé, případně naposledy.

Jenže stále neexistuje nic, co by si člověk mohl nainstalovat u sebe. Dostupné tooly fungují jako služby, což v mnoha případech není možno použít z důvodu citlivých dat. Takže tu zůstává ELK (Elastic + Logstash + Kibana), což ale „jen“ graficky zobrazí logy v prohlížeči s možností filtrovat. Tedy je nutno si udělat v takovém případě vlastní řešení.

Každopádně je důležité si uvědomit, že aktuální situace na zpracování logů je stále nedostačující. Pokud nemáte problém posílat data cizí službě, běžte do toho (seznam různých možností). Pokud máte, investujte čas minimálně do ELK. Věřte mi. :-)

Type Hinty

S novým Pythonem 3.5 přijde PEP 484 – type hinty. Není divu, že o nich bylo hned několik přednášek. Ale nic velkolepého. Mohlo se slyšet o obhajobě, proč něco takového se do Pythonu vůbec zavádí. Jak to vlastně vypadá. Proč to je takové… ošklivé. A tak.

Osobně mi takové diskuze přišly zbytečné. Jasně, že type hinty jsou fajn. Však to známe z jiných jazyků. A jelikož Python je nezavádí povinně a ani na ně nebude defaultně reagovat, není ani potřeba nic řešit. Naopak spoustu starostí odpadne. Třeba nebude potřeba psát asserty. Pylint nebude mít problémy. A hlavně, což je ze všeho nejdůležitější, editory budou schopné lépe napovídat. Například PyCharm přijde s plnou podporou někdy na podzim. Pylint zase příští rok v totálně přepracované verzi 2.

OK, type hinty jsou fajn, jenže my jedeme stále na Pythonu 2.7… Za prvé, není potřeba se stydět. Za druhé, je možné psát tzv. stub files už dnes. :-)

AsyncIO

Dalším velkým tématem bylo asyncio. Přeci jen se stále jedná o novinku.

Pokud vám jde opravdu o výkon, nejvýkonnější asynchronní aplikaci napíšete ve Scale. Ale zdroják není tak pěkný. Hned v závěsu se drží pythoní Tornádo s asyncio. Nejhůře dopadla Node.js aplikace. Podrobnosti v přednášce Better asynchronous with Tornado and Python 3.

Už kdysi jsem si hrál s asyncio v Pythonu 3.3, což je backportnutý balík z 3.4, tak nějak mne vůbec nenapadlo, že by mohl existovat port i na nižší verzi Pythonu. U trojky mi to přišlo zbytečné a na dvojku nemožné. Ale existuje – balík trollius. Sice nemá příliš podpory ze strany knihoven, ale za zmínku stojí opět podpora Tornáda.

S asyncio vypadá asynchronní kód jako synchronní, i tak potřebuje trochu změn v testech. Na což pro můj oblíbený pytest existuje plugin pytest-asyncio. Není to jediná knihovna využívající asyncio, od vydání Python 3.4 vzniklo spoustu užitečných knihoven na napojení všemožných databází atp.

Testování

Narazil jsem na velmi zajímavý tool na vylepšení pytestu – po změne kódu či testu automaticky spustit jen ty testy, kterých se změna týká. Zní to opravdu skvěle a vypadá ještě lépe. Ale jedná se o beta verzi a u nás v práci jsme to zatím nerozchodili kvůli závislostem. Počin to je i tak obdivuhodný. Balík se jmenuje pytest-testmon.

V programu jsem zahlédl ještě jednu zajímavou předášku o testování pro machine learning. Bohužel zajímavá byla pouze na papíře. Než jsme se prokousali přes úvodní slajdy, co je vlastně machine learning, nezbyl pořádně žádný čas na to, jak je možné takové programy testovat. Jen že numpy má pár vychytaných assertů. Tak i to se hodí vědět, i když žádný velký zázrak.

Balíčkování

Neustálý boj, jak vlastně distribuovat aplikaci. Buď jednoduše jako Git repozitář, nebo přes Python balíček, či jako skutečnou aplikaci jako debianí (či jiný OS) balíček. Jenže při debianím balíčku těžko dáme závislost na pypi. Ale opět, jako vždy, vítězí poslední možnost. Do pythoního balíčku prostě celá aplikace nepatří. Tečka. Nesnažte se to dělat.

Naopak pythoní balíček pro knihovny a další tooly je jako dělaný. A umí spoustu věcí, o kterých pravděpodobně ani netušíte.

Na balíčkování jsem navštívil ještě jednu přednášku o pluggy. To je totiž způsob, jak funguje pytest a pluginy pro něj. Většinou nic takového nikdo nepotřebuje, ale když na to přijde… je už funkční hezké řešení. Teda, pokud nepočítám, že se jedná zatím o alpha verzi a ještě nemá ani dokumentaci. Ale to přijde! Zatím aspoň slidy.

Terminal Whispering

Jedna z mála přednášek, které se mi opravdu, ale opravdu líbily, byla Terminal Whispering. Bylo v ní totiž několik užitečných věcí:

  • Znáte pdb? Používáte? Taky znám a moc nepoužívám. Existuje vylepšenější, visuální, pudb.
  • Terminál podporuje spoustu escape sequences. Pro mne bylo novinkou možnost vstoupit do full-screen módu. Je to vidět u spoustu programů, ale stejně mne nenapadlo, že to je vlastně děsně jednoduché. A s knihovnou blessed o to víc!
  • Mimochodem zajímavá myšlenka je optimalizovat weby pro konzole. Tedy pokud přijdu na web přes telnet, mohu posílat i escape sekvence a ono to bude fungovat. Nic překvapivého ani nového, ba naopak. Ale kdo si to dnes uvědomuje? :-) Schválně zkuste telnet termcast.org.
  • Zadávání hesel se dá vyřešit pomocí shelového příkazu stty -echo. Aby to bylo v Pythonu hezčí, existuje ve standardní knihovně getpass.

Více v celé přednášce.

Transducers

Styl funkcionálního programování se mi líbí a velmi zajímá. Takže jsem se zašel podívat na workshop s transducery.

V jedné větě s big data dnes často uslyšíte napříkad Hadoop. Což jsou map-reduce joby přes několik serverů. Transducer je technika (představená teprve nedávno v Clojure), jak naopak map a reduce spojit do jednoho průchodu. Není to ale hlavní myšlenka. Důležitější je, jak jsou data zpracovávána. Zpracování dat je úplně odděleno od toho, jak se data dostávají dovnitř a ven. Pak kód na zpracování zůstává neměnný, i když data přicházejí třeba asynchronně.

Workshop začal cvičením, že funkce map a filter v Pythonu vlastně nejsou potřeba. Oboje lze zapsat pomocí funkce reduce. Na tom to celé stojí. Zbytek už jsou postupné hrátky až k finálnímu řešení, což je knihovna transducer. I přesto, že výsledek není těžké pochopit, napsat si vlastní řešení není zrovna jednoduché cvičení. Tedy za tři hodiny jsme se dostali sotva do poloviny. Naštěstí mi to stačilo na pochopení konceptu. Vám doporučuju spíš přečíst sérii článků o tomto tématu od stejného člověka.

O funkcionálním programování bylo více témat. Například blázinec zvaný Mochi, představená knihovna pyrsistent a další.

Záznam přednášek

Takže pokud chcete, podívejte se na přednášky sami. Všechny se nahrávaly. :-) A rozhodně stojí za to se podívat i na některé z Montréalu.

Komentáře

Subscribe
Upozornit na
guest
1 Komentář
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
View all comments
Pepa

Predne: kdysi jsem nasel Python a to byl duvod okamzite skoncit s PHP. Co muzu napisu v Pythonu. Efektivita vyvoje je super!

Ncmene: v posledni dobe (cca 1/2 roku) aktivne pisu v NodeJS. Duvod byl jediny: vykon/zatez aplikace na serveru. Po te co jsem precetl spoustu porovnavacich testu mi nezbylo nic jineho, nez si udelat vlastni testovani. Testoval jsem s Apachem a Nginxem a NodeJS. Testoval jsem server side aplikaci v PHP, Pythonu a JavaScriptu pod NodeJS.
Vysledek byl jasny: absolutne nejrychlejsi NodeJS (diky V8), poto PHP a nakonec Python. Python nebyl pomaljsi o neco, ale o strasne moc. Zkousel jsem pak ruzne skalovat na Nginxu, ale Pythonu uz nic nepomohlo. A tak jsem od nej musel na backendu odejit….

Tvuj clanek jsem cetl hlavne kvuli Asyncio. Nasel jsem odkaz na video a to zkouknul. Teda jen do momentu kdy prezentoval porovnavaci test Pythonu s NodeJS.

A mam 2 veci:

  1. Pises ze NodeJS dopadl nejhur. Dopadl nejlip. I kdyz jen o chlup. Ale to neni to dulezite.
  2. To co a jak napsal v NodeJS neni NodeJS. Je to zpraseny JavaScript
    spusteny pod NodeJS.

Pisu to jen proto, aby nekdo, kdo jako kdysi ja, ktery jen cte ostatni a sam se o veci samotne nepresvedcil, blahove neveril a nenaletel :)

Python pouzivam kazdy den dal, protoze je SUPER!

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.