December 14, 2010

Bez testů do vývoje nelez

Parafráza na: Bez peněz do hospody nelez 😉

Príklad z praxe: Finálny výsledok bol zle generovaný. Asi 50 krát som prešiel kód. Prešiel som všetky vrstvy. To proste nebolo možné, výsledok sa musí generovať správne!

Pozorný čitateľ iste poznamenal: Nemusí. 😛

Presne tak. Výsledok sa generoval nesprávne. A to aj napriek mojej utkvelej predstave, že všetko je napísané správne.

Tak som sa zamyslel, napísal som 5 testov, ktoré sa spustili za menej než jednu sekundu. Nad testami som pustil debugger, predebuggoval som chybný test.

Ajhľa. Bug. Miniatúrny. Fakt malý. Chýbajúci jeden riadok v štvrtej vrstve.

Preto nezabudnite písať testy a hlavne nezabudnite na to, že testy sa dajú ľahšie debuggovať než finálna aplikácia. 🙂

Ešte poznamenám, že pre vývoj na Pythonierskom Googliom AppEngine, je Intellj IDEA 10 (s Python pluginom) parádny nástroj. Pri unittestoch je potrebné správne nastaviť PYTHONPATH, a to nie len do google_appengine, ale aj do google_appengine/lib/webob.

December 11, 2010

Cheat Sheet

Vývoj aplikácií je náročný. V dnešnej dobe je nutné čeliť rôznym API, prepájať heterogénne technológie a učiť sa nové prístupy.

Veľmi užitočnou pomôckou je stránka cheat-sheet.org.

Nájdete tu rôzne dokumenty pre technológie od výmyslu sveta. Z technológie je vždy vytiahnutá esencia, ktorá vám môže výrazne zjednodušiť vývoj a zlepšiť porozumenie implementovaným konceptom.

December 9, 2010

Ako otestovať priepustnosť a stabilitu linky?

Update: Opravené URL prehrávača. Pri priamom zobrazení článku sa prehrávač nezobrazoval 🙁

Napríklad je možné použiť cmatrix.

Jednoducho sa pripojíte cez SSH, zadáte cmatrix a sledujete, či sa náhou Matrix nezasekáva 😉

Tu je video, ktoré ukazuje, ako cmatrix funguje:

[kml_flashembed base=”/wp-content/flex/player-paused” movie=”/wp-content/flex/player-paused/OSMFPlayer.swf” height=”230″ width=”415″ fversion=”10.1″ fvars=”configuration = assets/configuration.xml ; url= /wp-content/videos/linux/2010-12-09-cmatrix.mp4 ; ” allowFullScreen=”true”]

BTW: Video prehrávač som vytvoril pomocou Open Source Media Frameworku 😉 Šikovná to vec.

December 6, 2010

grep -A -B -C

Grep je veľmi užitočný nástroj. Je na veľkú škodu väčšiny IDE, že neimplementujú aspoň časť jeho logiky pre vyhľadávanie.

Potrebujem násť reťazec v podadresároch? Nič jednoduhšie:

grep -r hrasko *

Potrebujem nájsť všetky riadky, kde hraško nie je? Jednoduchá vec:

grep -rv hrasko *

A teraz príde finta, na ktorú upozornil @stibi:

grep -A číslo – nájde reťazec a vypíše aj pár riadkov za výskytom

grep -B číslo – nájde reťazec a vypíše aj pár riadkov pred výskytom

No a @anydot k tomu pridal fintu

grep -C číslo – nájde reťazec a vypíše pár riadkov pred aj za výskytom

November 29, 2010

Materiály z prednášky – Vývoj v C++

Aj tento rok som mal možnosť odprednášať jednu prednášku vrámci kurzu C++ na FI MUNI v Brne. Ďakujem Petrovi Švendovi za pozvanie.

Pribudlo niekoľko noviniek.

Predovšetkým kontinuálna integrácia, profiling a debugging. Zo zaujímavostí pribudlo Adobe Alchemy – kompilátor z C++ do ActionScript Virtual Machine2.

K dispozícii sú materiály z prednášky vo formáte PDF a ukážky vo formáte Tar.gz.

Október 18, 2010

Inštantný HTTP Server

Používatelia Macu a Linuxu možno ani netušia ako jednoducho môžu naštartovať vlastný HTTP server.

Linux aj Mac má často nainštalovaný Python. Používatelia Windows, si môžu Python hravo doinštalovať.

V adresári, ktorý chceme sprístupniť cez HTTP server jednoducho zadáme:

python -m SimpleHTTPServer 8080

Do web prehliadača potom zadáme: http://localhost:8080

Takýto server sa hodí na rýchle testovanie napríklad Flex aplikácií.

Október 15, 2010

Veľkosť IT gigantov

Zaujímalo ma, aké veľké sú softvérové firmy, resp. koľko majú zamestnancov. Údaje pochádzajú z Wikipédie. Myslím, že porovnanie je zaujímavé.

Október 7, 2010

Prechádzka po XML s namespace v Pythone

V predchádzajúcom príspevku “Jednoduchá prechádzka po XML v Pythone”, som ukázal, ako je možné parsovať XML pomocou Pythonu.

Čo ale v prípade, že potrebujeme použiť namespace?

Namespace sa expanduje do tvaru {namespace}element. Čo sa odrazí napríklad v príkaze find. Výsledný kód bude vyzerať nasledovne:

from xml.etree import ElementTree
xmlTest="""
 <s:xml xmlns:s="library://ns.adobe.com/flex">
  <s:person>
  <s:id>573280</s:id>
  <s:type>Supplier</s:type>
 </s:person>
 <s:person>
  <s:id>66172</s:id>
  <s:type>Customer</s:type>
 </s:person>
</s:xml>
"""

tree = ElementTree.fromstring(xmlTest)

namespace="library://ns.adobe.com/flex"
for person in tree:
  type = person.find('{%s}type' % namespace)
  id = person.find('{library://ns.adobe.com/flex}id')
  if type.text == 'Supplier':
    print "Supplier:",id.text

Všimnime si jednoduchý trik s %s na riadku s type = person.find.

Október 5, 2010

SpringSource Tool Suite 2.5 – Error: Method has the same erasure

Java kód, ktorý bol skompilovateľný pod SpringSource Tool Suite 2.3, už nemusí byť skompilovateľný pod 2.5.

Typická chyba: Method has the same erasure.

Problém spôsobí kód, kde sa využíva preťaženie ako:

getById(List <MyClass>, String name)
getById(List <MyClassDto>, String name)

Riešenie: opraviť kód alebo použiť STS 2.3.2.

September 22, 2010

Google App Engine – sporadická garancia dostupnosti?

Pôvodne som chcel tento článok nazvať: Náš Google se Vám co nejsrdečněj omlouvá za toto politováníhodné nedopatření, ke kterému dochází MAXIMÁLNE … třikrát za deset let.

Príhoda z natáčania: deploynete Java aplikáciu na Google obláčik, chcete ukázať ľuďom, ako pekne to funguje a…

Kolečká sa otačajú, procesor si mele-mele-mele…

Timeout error. Pokus môžete opakovať niekoľko krát. Na výsledku nič nezmeníte.

Prezradím, že aplikácia volá veľmi jednoduchú funkciu, ktorá má za úlohu získať údaj z takmer prázdnej databázy.

Počkáte 5 minút a všetko zas ide.

V logu potom objavíte skvelú hlášku:

Request was aborted after waiting too long to attempt to service your request. This may happen sporadically when the App Engine serving cluster is under unexpectedly high or uneven load. If you see this message frequently, please contact the App Engine team.

K svojmu článku: Kde už Google App Enginu nestačí palivo, pridávam túto skutočnosť ako bod 11.