PySnooper aneb debugging na jedné řádce | Mňamka #497

Dneska mám krátkou mňamku pro ty, kteří sem tam něco napíšou v Pythonu. Nedávno jsem se toulala na PyConCZ a narazila jsem tam na knihovnu PySnooper. Znáte ten pocit, když objevíte něco nového a nechápete, jak jste bez toho mohli doposud žít? Tak přesně tohle se mi stalo s PySnooperem.

Debugging

Známe tu situaci všichni. Píšeme kód, blíží se oběd, chceme to dotáhnout, ale kód nefunguje. Na nastavování debuggeru, vkládání break pointů a plnohodnotný debugging nezbývá moc energie. Navíc ten kód je stejně krátký, tak tam nacpeme print(”uaaaaa ”, proměnná) a pak druhý print(”chci obeeeeeeeeeed  ”, promenna2) a ještě deset, než konečně kód projde a my se můžeme jít spokojeně najíst.

Na knihovně PySnooper je krásné to, že udělá tohle za vás (bohužel bez zoufalých uvodních textací), aniž byste museli cokoliv složitě nastavovat. Je to vlastně velmi jednoduchý debugger, který vypíše lokální proměnné postupně tak, jak se v kódu vytvářejí/modifikují. Knihovna má hezky popsanou dokumentaci https://pypi.org/project/PySnooper, ze které si půjčím ilustrační příklady.

Celé kouzlo tkví v tom, že si knihovnu naistalujeme, importujeme a napíšeme dekorátor `@pysnoooper.snoop()` nad funkci, kterou chceme debuggovat. Spustíme kód a zázraky se dějí.

Proměnné

PySnooper nám vypíše postupně všechno řádek po řádce. Do funkce vkládáme proměnnou `number` s hodnotou 6 (označeno jako `starting var`), volá se funkce, vytváří se seznam `bits`, který je prázdný, kód pokračuje while cyklem, kde proměnná `number` získává novou hodnotu (odznačeno zeleným textem jako `modified var`) a vytváří se nová proměnná `remainder` (označeno jako `new var`). Vidíme, že while cyklus se spustil třikrát, než se ukončil a `return value` je [1,1,0]. No není to super?

Někdy se hodí sledovat jen část fukce. Pro ty případy použijeme funkci `pysnooper.snoop()` ve `with` bloku.

Na výstupu opět vidíme, jaké máme lokální proměnné, kde vznikaly a kde se modifikovaly.

PySnooper má i další funkce, například dokáže log uložit do souboru, můžete mu nadefinovat, jak “hluboko” má jít v případě vnořených funkcí, můžete pomocí něj sledovat i globální proměnné nebo si nechat vypisovat záznamy ve slovnících a itemy v seznamech. A to se někdy opravdu hodí. Zvlášť, když už je oběd na talíři.

Máte k článku nějaké otázky nebo připomínky? Klidně nám napište, rádi to s Vámi probereme :-)

Baru Ševčíková
 data detective

Tableau - Performance Tuning (časť 3.) | Mňamka #506

Tableau - Performance Tuning (časť 3.) | Mňamka #506

Chcete vědět, jak zlepšit rychlost a efektivitu vašeho dashboardu v Tableau? Tento článek vás seznámí s významem materializace výpočtů, výhodami agregace dat a důležitostí specifikace datových zdrojů. Navíc se dozvíte o nové funkci "workbook optimizer", která vám nabídne automatizované doporučení pro dosažení optimálního výkonu vašeho dashboardu. Přečtěte si více a dozvíte se, jak dosáhnout rychlejšího a hladšího provozu vašich vizualizací v Tableau.

Tableau - Performance Tuning (časť 2.) | Mňamka #503

Tableau - Performance Tuning (časť 2.) | Mňamka #503

Dnes nadviažeme pokračovaním na minulotýžďnový článok a pozrieme na niektoré ďalšie možnosti zrýchlenia vašeho pomalého dashboardu. V prípade filtrov tiež platí, že pre performance je lepšie držať ich počet na uzde. Je to spôsobené tým, že načítanie hodnôt pre každý jeden interaktívny filter predstavuje jednu query. Negatívny vplyv na performance sa ešte umocňuje v prípade využitia možnosti “Only Relevant Values”.

Tableau - Performance Tuning (časť 1.) | Mňamka #500

Tableau - Performance Tuning (časť 1.) | Mňamka #500

Naimplementovali ste dashboard, vyhrali ste sa s vizuálom, čísla na vám sedia. Násadíte dashboard na Tableau server a idete ho otestovať, tu však narazíte na problém. Dashboard sa načítava extrémne dlho. Pre časovo vyťažený klienta, ktorý potrebuje mať dáta nie len správne, ale aj dostupné v rozumnom čase, je samozrejme takýto stav neakceptovateľný. Čo teraz? Určite nezúfajte, v tomto článku sa s vami podelíme o skúsenosti čo v takom prípade robiť.