Jún 15, 2010

Jednoduchá prechádzka po XML pomocou Pythonu

Taká užitočná vec, možno sa niekomu hodí. ElementTree pre Python obsahuje parser XML. V nasledujúcom príklade vyrobím zo stringu Element a následne nad ním spustím iteráciu cez for.

Je dôležité upozorniť, že find vracia prvky Element. Textový obsah z nich je možné vytiahnuť pomocou atribútu text.

Pokiaľ sa s tým chcete viac hrať, odporúčam použiť iPython shell, ktorý podporuje dopĺňnanie príkazov pomocou tabulátoru.

from xml.etree import ElementTree

xmlTest="""
<xml>
<person>
 <id>573280</id>
 <type>Supplier<type>
</person>
<person>
 <id>66172<id>
 <type>Customer</type>
</person>
</xml>
"""

tree = ElementTree.fromstring(xmlTest)

for person in tree:
    type = person.find('type')
    id = person.find('id')
    if type.text == 'Supplier':
        print "Supplier:",id.text

API k ElemenTree nájdete na python.org. Pre Debian je táto funkcionalita k dispozícii v balíčku python-elementtree.

Jún 5, 2010

Ako zabrániť inštalácii nežiadúcich balíkov na Debiane

Občas sa stane, že je potrebné nainštalovať balík. Ten ale pritiahne so sebou pár ďalších nechcených balíkov.

Nežiadúce balíky sa dajú zablokovať jednoducho. Do súboru /etc/apt/preferences pridáme nasledujúce riadky s menom balíku:

Package: openjdk-6-jre
Pin: version 1.0*
Pin-Priority: 1001

Ďalšie informácie na túto tému nájdete na stránkach Live in X.

Máj 19, 2010

Štartuje Firefox čoraz pomalšie?

Typickým problémom pri štarte Firefoxu je jeho pomalší a pomalší štart.

Kde je problém? Nevedia vývojári vyvíjať?

Vývojári vyvíjajú dobre. Aspoň jadro prehliadača má porovnateľnú efektivitu ako u susedných prehliadačov. Problém prinášajú rôzne rozširujúce doplnky. Nie všetky sú úplne ideálne vytvorené. Naviac pri štarte Firefoxu sa postupne inicializujú. Stačí niekoľko chybných alokácii a než sa Firefox spustí, máte 200 MB pamäte preč.

Autorov modulov by som rád požiadal, aby si občas prečítali nejaké to odporúčanie. Tiež je vhodné požiadať o review kódu. Často stačí drobná úprava a modul má mnohonásobne menšiu pamäťovú stopu.

Ako zrýchliť štart Firefoxu z pohľadu používateľa? Skúste vypnúť moduly a sledujte, čo sa deje. Typicky jeden z modulov je nenásytný a stačí ho výpnúť.

Máj 6, 2010

Google Chrome je rýchlejší než zemiak!

Neveríte? Dokonca je rýchlejší než zvuk a rýchlejší než blesk.

Stále neveríte? Ale prosím vás. Pozrite sa na jednoznačný dôkaz.

Apríl 28, 2010

Softvérová archeológia

Na SE-Radiu som narazil na jeden veľmi dobrý diel podcastu – Software Archeology s Daveom Thomasom, hovoril o softvérovej archeológii. Tento diel je podľa mňa esenciálny a softvérová archeológia by mala byť súčasťou vývojárskych kurzov.

Dave rozdelil softvérovú archeológiu na dve skupiny. Prvá skupina sa zaoberá výhradne len čítaním a snahám porozumieť dávno zaniknutým vývojárskym civilizáciam. Vyžaduje to trpezlivosť, znalosť jazykov a technológii.  Druhá skupina zahŕňa už aktívny prístup ku kódu a jeho modifikácie.

Softvérová archeológia je celkom nešťastne zamieňaná za prístup Indiana Jonesa, teda zahrabať sa do kódu a víťazoslávne z neho vytiahnuť artefakty. Artefakty sú dôležité. Avšak tak ako v archológii, to podstatné spočíva v snahe porozumieť kontextu a pochopiť kultúru.

Dave spomínal jednu zaujímavú techniku: zobrať zdrojový kód, otvoriť ho v editore a zmenšiť písmo na 2px. Stratí sa síce čitateľnosť, ale na povrch vypláva štruktúra kódu. Dokonca je ľahko odpozorovateľné, ktorý kód bol skopírovaný. Pri tak malom písme začnú byť zjavné opakujúce sa vzory v štruktúre kódu.

Dobrá bola aj jeho poznámka k písaniu dokumentácie. Pri archeologickej výprave je dôležité si uvedomiť, že dokumentácia klame. Často sa stane, že po zmene kódu už nie je aktualizovaná. Siahodlhé litánie v docstringu funkcie sú absolútne zbytočné, pretože sa nikto neunavuje to opravovať.

A teraz jeden veľmi zlomový postreh k písaniu dokumentácie v kóde: Pokiaľ dokumentujete ČO funkcia robí, tak je to zbytočné, tieto informácie odvodíte z kódu a z parametrov. Samozrejme krátky náčrt sa hodí, ale nemá význam popisovať všetko a podrobne. Dôležité je dokumentovať PREČO funkcia robí, to čo robí. Relatívne malý rozdiel v písaní textu, kompletné mení jeho kvalitu.

Pokiaľ neviete napísať PREČO funkcia má vôbec niečo robiť, nie je náhodou zbytočná? Nemáte náhodou nejasné zadania? Viete vôbec prečo to celé píšete? Tento prístup veľmi pripomína knihu od Simona Sineka – Start with Why.

Podľa Davida sú veľmi dôležité testy. Pretože testy, na rozdiel od dokumentácie, tak výrazne neklamú.

Pokiaľ sa niekto vydáte na púť archeológa, jednoznačne musíte byť vyzbrojený grepom. Asi najdôležitejší parameter grepu je pre archeológa -v, ktorý neguje výsledok vyhľadávania.

grep -r artefakt * | grep -v Indiana

Uvedený príklad vám pomôže násť všetky riadky so slovom artefakt, pričom tam nebude slovo Indiana.

Pokiaľ aktívne modifikujete kód, tak ako správny archeológ si najskôr nachystáte svoje prostredie a dáte kód do version control (napríklad Git).

Teraz sa môžete pustiť do modifikácii a testovania. Pokiaľ softvér vyžaduje veľa závislostí, uistite sa, že máte bootstrap skript, ktorý vám umožní OPAKOVANE vytvoriť prostredie pre archeologické pokusy. Ak takýto skript neexistuje, je vašou úlohou ho zostaviť. Vývojár/archeológ, ktorý príde po vás, vám nechá vyrobiť minimálne sochu na vašu počesť.

Kód je síce digitálny, ale hnije. Pokiaľ necháte rok stáť kód bez údržby, tak vám proste zhrdzavie.  Je veľmi dôležité si tento fakt uvedomiť. Rozbehnutie zhrdzaveného a zhnitého kódu môže stáť niekoľko dní práce. Dokonca v prípade, že neexistuje bootstrap skript, tú starú herku ani nerozbehnete.

Dave odporučil začínajúcim arechológom, aby si prešli kód interpretera pre jazyku, v ktorom píšu. Napríklad Perl, Python, Ruby alebo PHP. Takáto znalosť umožní lepšie pochopiť fungovanie a štrukturovanie kódu.

Z podcastu som vypichol tie body, ktoré ma najviac zaujali. Určite odporúčam, aby ste si vypočuli tento diel o Softvérovej arecheológii. Ušetrí vám to hodiny frustrácií z nezrozumiteľného kódu.

Niekedy to v archeológii môže dopadnúť aj takto – utekajúci developer opúšťa na svojom prskolete rútiace sa dátové centrum.

Apríl 12, 2010

Matplotlib – profesionálne grafy v Pythone

Pokiaľ potrebujeme dynamicky vykresliť graf na webe, môžeme použiť napríklad Flot. Pokiaľ ale potrebujeme pracovať so zložitejšou grafikou a máme k dispozícii Python, tak je voľba jasná. Použijeme Matplotlib.

Funkcie sú veľmi príbuzné Matlabu, takže rozhodne sa netreba učiť príliš veľa nových vecí.

A výstupy z Matplotlibu sú proste kvalitné.

PS: Za odkaz ďakujem Michalovi Kaukičovi z FRI ŽU.


Apríl 11, 2010

Buildout – podpora virtuálneho prostredia nie len pre Python

Buildout pre Python je niečo ako Maven pre Javu. Buildoutu jednoducho predhodíte recept. Tento recept popisuje, ako má vaše prostredie vyzerať a Buildout za vás pohľadá všetky závislosti a nainštaluje ich. Pythonieristi si možno povedia: “Ale veď inštaláciu zvláda aj easy_install alebo pip“. To je pravda, ale Buildout posúva prácu s virtuálnym prostredím o level ďalej.

Predstavte si, že pracujete v tíme a teraz potrebujete, aby kolega mal rovnaké pracovné prostredie ako vy. Rovnaké balíky, rovnaké nastavenie služieb. Jednoducho napíšete recept pre buildout a ten mu pošlete. Buildout sa postará o vytvorenie virtuálneho prostredia, tak ako to poznáme z Virtualenv. Naviac nainštaluje potrebné balíky. Teraz pozor! Odinštaluje nepotrebné balíky. Nastaví adresáre a importy presne, tak ako je to potrebné. Buildout umožňuje zaviesť do projektu podstatný prvok: opakovateľnosť.

Buildout nie je nástroj výhradne len pre Python. Môžete s ním spracovávať, aj zdroje z Gitu alebo ZIP súborov. Pokiaľ pracujete extenzívnejšie s Pythonom a balíčkovaním aplikácii, určite mu venujte minutku na naučenie.

Príklad receptu na inštalovanie Tracu 0.12dev:

[buildout]
parts = babel genshi trac mypy

[babel]
recipe = zc.recipe.egg
eggs =
    Babel

[genshi]
recipe = infrae.subversion
as_eggs = true
urls = http://svn.edgewall.org/repos/genshi/trunk genshi


[trac]
recipe = infrae.subversion
urls = http://svn.edgewall.org/repos/trac/trunk trac
as_eggs = true

# Make eggs visible to mypy interpreter
[mypy]
recipe = zc.recipe.egg
eggs =
    ${trac:eggs}
    ${genshi:eggs}
    ${babel:eggs}
interpreter = mypy
scripts = mypy

Buildout potupne spracuje jednotlivé časti a podľa receptov uvedených za slovíčkom “recipe”, nainštaluje a upraví potrebné konfigurácie prostredia. Predtým, než sa vrhnete do písania vlastného receptu, odporúčam skontrolovať, či už rovnaký alebo veľmi podobný recept neexistuje.

Pokiaľ tápete v tom, ako funguje Python Eggs a virtuálne prostredie, odkážem vás na výbornú prezentáciu z PyConu 2009 – Eggs and Buildout deployment in Python:

Apríl 7, 2010

Konferencia: Otvorený softvér vo vzdelávaní, výskume a IT riešenia 2010

Na oficiálnych stránkach OSS 2010 nájdete organizačné informácie ku konferencii, ktorá sa bude konať 1.-4. 7. 2010 v Žiline.

Pokiaľ máte nejakú zaujímavú tému, prihláste sa so svojím príspevkom. V roku 2009 rozhodne nebola núdza o zaujímavé témy, ako napríklad OpenstreetMap, počítačová učebňa postavená na Linuxe, alebo programovanie hier v Pythone.

Konferenciu organizuje Spoločnosť pre otvorené informačné technológie (SOIT.sk).

Apríl 3, 2010

OpenBSD song: I’m still here

OpenBSD je tu už pekných pár rokov. Za celú tú dobu vývojári pridávali nové aplikácie a fixovali kvantá bezpečnostných chýb. Ich opravy boli potom často prevzaté aj do iných systémov ako napríklad Linux, Windows alebo Mac. S novým releasom OpenBSD je tu aj nová pesnička “I’m still here“.

V kľudnom duchu hovorí o tom, že OpenBSD sa stále drží svojich hodnôt – slobody a otvorenosti.

Prehrať: [wpaudio url=”/wp-content/videos/song47.mp3″ text=”OpenBSD 4.7 – I’m still here”]

Pesnička je zo série OpenBSD songov, ktoré sú vydávané spolu s každým novým releasom operačného systému.

Marec 31, 2010

Turingov stroj – reálna verzia

Skutočne nápaditá konštrukcia Turingovho stroja 🙂

Na videu pracuje stroj na riešení problému Zaneprázdnený bobor (Busy Beaver). Veľmi zaujímavá a prakatická ukážka 4 stavového automatu s mazacou hlavou v praxi.

Ďalšia informácie o tejto veľmi kurióznej implementácii nájdete na stránke A Turing Machine.