2010. augusztus 28., szombat

Servlet 3.0 első kör

Nagyon érdekelt a servlet 3.0 és közismerten türelmetlen tipus vagyok, letéptem hát a legfrissebb specifikációt és kipróbáltam rajta pár dolgot. A kipróbált implementációk:
  • Jetty 8
  • glassfish 3.0
  • tomcat 7
Hát eléggé fej-fej mellett voltak, úgy tünt kb mind ugyanaddig jutott el. A kisérletsorozatnak nem sikerült kizökkentenie a jetty-pártiságomból. Továbbra is a jetty volt a fejlesztés során a legkönyebben használható. A 8-as verzióhoz is van maven plugin. Pedig próbálgattam a glassfish 3 embedded pluginjét, igazából pozitív meglepetés volt, de hot deployt nem csinált. Szóval minden eltévedésem után újra kellett startolni és packagelni. A tomcat 7.0 az meg maradt a maga kis bemásolom és újraindítom megoldással. Magad uram ha integrációd nincsen.

Servlet annotációk

Iiiigen... aki velem dolgozik, az tudja mennyire nem komállom azt, hogy mindent annotálunk. Az XML HELL sem volt jó, de most elmentünk egy még rosszabb irányba. XML konfigurációkkal még megvolt az esélye annak, hogy áttekinthető marad. Mindenesetre gyors prototype alkalmazásokat az ember biztosan szivesebben tol össze úgy, hogy csak ráannotál a szervletére. Működött is mindenhol.

Azt soha nem értettem egyébként hogy a servlet ikonja az mi akart lenni. Valami ősi dolog lehet a Delphis és Progress-es időkből.

Opcionális búcsú a web.xml-től

Hát igen, ha nincs benne semmi érdekes, akkor le is törölhetjük és a dolog megy nélküle is. Persze ha már egy adatbázis kapcsolat kellene a la JNDI (ami végülis egy hasznos dolog), akkor vissza is jön egyből. Oké, szóval marad, adatbázisa kb mindenkinek van és az operátorok akarják babrálni. (Vajon miért pont azt az egy resource-ot? Az összes többivel miért nem foglalkoznak?)

Asynchron servlet support

Ez talán a legűberebb dolog mióta gyáva programózó vagyok, de az utóbbi 5 évben biztosan a legfontosabb dolog számomra. Nagyon egyszerő, ez történik: amikor úgy véled, hogy sokáig tartó művelet közeledik (pl vársz egy JMS üzenetre) egyszerűen azt mondod, hogy ez a request innentől asszinkron fog kiszolgálódni. Így:
req.startAsync();
Ezután elkérheted a requesthez tartozó AsyncContext ojjektumot

AsyncContext asyncContext = req.getAsyncContext();
Ezt akár bedobhatod egy másik szál által kezelt listába, ahol a lassú műveletre váró összes többi kliens várakozik. Az az egy szál le fogja tudni kezelni minden requestedet. Például valahogy így

asyncContext.getResponse().getWriter().write("gedappa!\n");
Eddig csúcs :) Na akkor most jön a gubanc. Azt is biztosan szeretnénk tudni, hogy mikor kellene ezt a AsyncContext objektumot kidobnunk a listából. Erre tök jó lett volna az AsyncListener osztály. Ami meg is van, kiválló. Példányosul is szépen az implementáció, még mindig oké, de aztán NoSuchMethodError amikor regisztrálni próbáltam, mind a 3 servlet containerben. Ez vagy valami kis lemaradás a specifikációhoz képest, vagy valami szokásos sünös-orákulumos gányolmány.

Elfelejtettem azzal kezdeni, hogy ennek mi értelme van. Talán már kiderült a fentiekből: megszabadulunk az millió kiszolgáló száltól, maradnak csak simán a TCP kapcsolatok. A NIO után végre a következő lépés.

Pár dolgot biztosan érdemes a async kedvéért átgondolni az üzemeltetésben is: például sokan használnak apache httpd-t a servlet container elött, mert példul még php és perl meg egyéb ingyombingyomokat is ezzel a szerverrel hajtanak. A httpd régebben single process per connection cucc volt, most már lehet külön szálakat is használni, de vicces hogy ott álnak majd a szálak, amig a java VM-ben megoldottuk hogy ne kelljen állniuk. Nekem nagyon gyanús, hogy ilyen esetekben sokkal érdemesebb lesz kihozni a servlet containert a httpd mögül. (és persze van, aki azt kérdezi: mit keresett ott addig, ha csak a java elött állt? kiválló kérdés...)

Hát ennyit akartam elmondani már jórég óta, csak mindig belémfolytották a szót. Egyébként komolyan gondolom, hogy ezt a lépést a java világ legnagyobb előrelépésének tartom az utóbbi 4-5 évre. Mondjuk nem kis lépés, de azért szivesen látnék nagyobb lépéseket is.

2010. július 23., péntek

nyáriszünet

Igen, nagyon meleg van, körülbelül ennyivel tudom magyarázni az elmúlt pár hónap inaktivítását. Kéktúrán voltam, néha egész hétvégén cuppogott és csámcsogott a cipőm a sárban, néha inkább forró mediterrán hangulatba hajlott, de végigcsináltam. Melóztam is elég sokat sajnos mindenki rámtolt mindenfélét és már nem csak fejlesztő vagyok hanem adminisztrátor is. Nem ideális, nagyon lefárasztanak, néha nem is marad időm haladni a fejlesztéssel. Holnap reggel elhúzok egy kicsit a tesóimmal tölteni az időt. Ők is le fognak fárasztani :)

Szóval ennek megfelelően lassan, de készül a todomap 0.6.0, és egy nagy rakás dolog már most is benne van. A héten akartam kitenni, de így nyaralás elött inkáb mégsem kapkodnék. Szóval ezek jönnek:
  • Van szabadszavas keresés. Elég bénácska, még valami szebb dizájn kellene neki :( A kinézettel mindig szívok.
  • Van integráció. A polgármesterek jobbára friss listáját használva üti a helyi hatóságokat. Még ki kellene őket listázni szépen a megfelelő oldalon.
  • Le lehet zárni a bugokat.
  • Pár új apróság, például egy térkép azokkala gebaszokkal, amiket te jelöltél be, saját RSS feedek. Ide még kell, hogy felhasználóknak is használhatóvá tegyem.
Szóval ez jön. Augusztus. A hőmérséklet lassan ismét csökkenni fog, a produktivítás fordított arányban nőni kezd.

2010. július 1., csütörtök

Cowboy Coding Manifesto

Annak ellenére hogy már másfél éve egyedül dolgozok (ami elég unalmas) és emiatt a scrum metodikát -vagy legalábbis jó részét- a sutba dobtam, a munkaadóm elküldött egy scrum trainingre. Azért nem volt tejesen haszontalan, nem írnék most róla részletes beszámolót, csak pár dolgot gondoltam vele kapcsolatban:
  • Kell-e egy scrum csapatnak dokumentálnia? - Erre nekem az lenne a válaszom, hogy HA a ügyfél kéri és csak azt amit kért. Amit senki sem fog elolvasni az ugyebár "waste". Például az OpenSSO-val hogy hogyan integrálódik a webalkalmazásom, nem hiszem hogy bárki elolvasná amit erről írok, de ha egy fejlesztő belenéz a kódba, szerintem értené (nagyon remélem :) ). Mindenki más állította hogy egy feladat akkor kész, ha dokumentálva van. Én ezt kivenném a kész definíciójából. A user doksin kívül egy ilyen feladathoz nem nagyon kell doko. Architektúra doko? Egy ennyire plain webapphoz?
  • Mondjuk azt meg is beszéltük, hogy ha nem adottak a feltételek (mint esetemben) akkor kár is erőltetni a scrumot. Szóval ennyiben maradtunk.
  • Egy processz nem hoz tavaszt. Az emberek visszazökkennek a megszokott munkatempójukhoz. Mondjuk ezért kell egy dedikált scrum master, de hát kinek van erre pénze?
  • Azért ahhoz bátorság kell, hogy idomítsd a munkaadód magas beosztású képviselőit. Pedig erre szükség van.
  • A scrum egy elég szigorú process és a training után már nem tartom annyira minimalistának. Szerintem ez már kicsit ellentétben áll az agile kiáltvány első pontjával.

2010. június 4., péntek

JUM XV log

Tegnap esti Java felhasználók találkozója. A democamphez hasonlóan viszonylag kevesen voltunk, erre az eseményre viszont sajnálhatja aki nem jött el, nekem nagyon tetszett a két előadás. Mindkét előadást szakmai bloggerek tartották, nekem is itt vannak a google reader végén.


A btrace egy trace eszköz, olyan mint a dtrace solarison (ez a legtöbb embernek azért nem mond sokat, nem egy mainstream oprendszer még a szervereken sem). Egyszerű kis scripteket lehet rá írni annotációkkal és nagyon kevés kóddal, ami a hotspot vm-hez kapcsolódik és bizonyos esetekben meghívódik. Például csinálhasz egy scriptet, ami a DriverManager.getConnection() metódusra ráakaszkodik. Tipikusan olyan komponensek tuningolásánál jól jöhet, amik nem logolnak és nem mi írtuk. Őszintén szólva tegnap került csak a látőterembe a cucc és most már nem tudom hogy élhettem eddig nélküle :)

Marhefka István: Domain Driven Development

István egy hosszabb előadást tartott a Domain Driven Developmentről, ami egy nagyon elméleti téma de nagyon sok gyakorlati tapasztalat is volt benne. A DTO pattern körül a végén sok kérdés volt, azt hiszem az említett fintorgók tábora nagy számban volt jelen. Én csak akkor szoktam bevetni, ha már nincs más választásom.
Egyébként nem is tudtam hogy van még a munkaadómon kívül teamcity felhasználó itthon. Elég borsos ára van :-)

Ez volt most az időny utolsó jum-ja, szeptemberig szünetelünk és akkor újjult lendülettel :)

2010. június 2., szerda

Eclipse Democamp 2010 Budapest

Immár szokásosnak mondható éves eclipse democamp a b2international szervezésében. Kis újításként 15 perces előadások vannak, viszont több. Nekem tetszik ez a műfaj. A felratkozott 43 főnél némileg kevesebben lehettünk, szerintem úgy 30 fő lehetett jelen. Mindenki unja az esőt. Szóval annak, aki lemardt...

Nekem kifejezetten tetszett Nagy Gergely Pythonos előadása, aminek csak a kisebb részét szánta a pydev bemutatására, inkáb a python csodálatos képességeit mutatta be, ami perlhez hasonlatos write-only nyelvvé képes tenni.

Aztán Török Zsolt Eclipse Communication Framework-ös demója is érdekes volt. Én jobban szeretem nem teletömni pluginokkal az eclipse-t és csak a szükséges minimummal beérni. Volt régebben egy érdekes demó arról, hogy hogyan lehet egyszerre ketten dolgozni egy editoron ECF segítrségével. Na az konkrétan nagyon jó volt.

Oláh Bence: Developing GWT application using Eclipse IDE. Live demóval fűszerezett prezentáció. Valami forráskód formázáson emélkszem hogy 4-5 percre fentakadtunk. Hát igen, a sok anon inner class nem teszi mindig olvashatóbbá a kódot, főleg ha az anon inner classban van egy anon inner class.

Még az XText-et kiszúrtam, mint lehetséges érdeklődésem tárgyát, de alaposan utánna kell néznem a neten.

ingyen spamblockerek versenye

Összedobtam egy nem túl fair ls tudománytalan tesztet, ami 3 publikus és ingyenes comment-spam szűrő szolgáltatást hasonlít össze a google címemre érkező spam segítségével.

Tessék hát...

[INFO] -------------------------------------------------------
[INFO] T E S T S
[INFO] -------------------------------------------------------
[INFO] Running org.todomap.spamegg.AkismetSpamFilterTest
[INFO] Total messages:354
[INFO] gmail spam considered ham:230
[INFO] Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 282.074 sec
[INFO] Running org.todomap.spamegg.TypePadFilterTest
[INFO] Total messages:354
[INFO] gmail spam considered ham:213
[INFO] Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 313.741 sec
[INFO] Running org.todomap.spamegg.LinkSleeveSpamFilterTest
[INFO] Total messages:354
[INFO] gmail spam considered ham:0
[INFO] Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 196.878 sec

Szóval röviden összefoglalva az eredményt a linksleeve nemcsak a leggyorsabb, de a leghatékonyabb is. Elég gyanúsan lógott ki a sorból, ezért teszteltem kézzel beírt adatokra is, azokat nem szűrte ki. Szóval furcsa, de tényleg jónak tűnik. Az akismet és a typepad ugyanazt a interface-t használa, lehet hogy valami számukra nagyon fontos adatot nem postolok el, amitől javulna a teljesítményük.

2010. május 19., szerda

névadási és verziózási hagyományok

Egy érthető névadási és verziózási szabályrendszer szerintem nagyon nagy szerepet játszik egy technológia használhatóságában. Néhány eset...

Az egykori SÜN! Microsystems termékei minden kanyarban más nevet kaptak. Az első javás történet maga a java verziói és nevei. A java 1.2-t elnevezték java 2-nek és átnevezték j2se-nek, de aztán senki sem hívta 2.0-nak és a 1.3-at és 1.4-et kiadták a régi konvencióval, míg a név megmaradt j2se és j2ee, majd a java 5.0 jött és a j2se-bé eltönt végre a "2", de ezt azért zárójelben 1.5-nek hívtuk és ugyanez igaz az 1.6-ra is. Vajon hogy lesz ez a 1.7-tel, az oracle marketingesei mit szeretnének? És vajon mi lesz akkor, ha egyszer tényleg akkora dolgot csinálnak a java nyelven (bár ennek valószinűsége most már igen alacsony) ami nem férne bele az 1.x-be? Pl kompatibilitás törés és szakítás régi paradigmákkal...
A Sun más termékeinek névadási stílisa néha még ennél is cifrább, például a mai Metro web services stack legalább 3 másik néven volt már fejlesztve. A glassfish is valami minden verzió után más nevű termékből származik ha jól emlékszem. Tök jó, hogy most már 3 verzió óta ugyanúgy hívják.

Néha a saját verziózási és névadási konvencióim se túl egyszerűek. Csomagot átnevezni nem szoktam, de néha olyan neveket adok, amit nem hiszem hogy egyszerű lenne kitalálni. Például a todomap.org-ot egy o29 nevű szoftver hajtja. Azt hiszem jár egy sör a helyes megfejtőnek :-) Más csomagok neve kicsit érthetőbb, pl spameggspam nyilván spam szűrő.
Viszont soha egyetlen egyszer nem neveztem egy szoftveremet 1.0-nak. Három decimális verzió, az első a 0.0.1, így van elég helyem :)

Még a verziókról jut eszembe az a munkatárs (aki hála jehovának nem magyar és ezt soha nem fogja elolvasni) aki szerint a maven SNAPSHOT verziói egy gusztustalan gány. Soha nem használ snapshotokat. Ennek következtében a fejlesztési verziói a végleges verziószámmal "floating around the network", és mindben más van. Ezért egyébként a neki dedikált build agenteken egy időben meg kellett osztani a maven filerendszerét a gépek között. Húúúhhh....
Csak magyarázatként ant júzereknek: a maven a snapshot verziókat időnként felfrissíti (lásd maven paraméterek és settings.xml), míg a nem snapshot verziókat ha egyszer leszedte, örökre ott is marad.

Gyanús dolog az is, amikor az első publikus verzió arra enged következtetni, hogy nem ő az első. Például hogy 2.0-ként adják ki. Ez teljesen igaz arra a szoftverre, amit munkában fejlesztek. Eléggé összetákolt dolog, párszor beszakadt, úgyhogy eldöntöttük hogy from scratch újra. Már egy ideje dolgoztam rajta, amikor mondták hogy ez lesz akkor a BLF 2.0. Mondom BLF 2.0 nem lehet, az fut most a live rendszeren. De akkor már késő volt és most ott járunk hogy két ugyanolyan nevű és verzió számú, de totálisan más kinézetű és funkcionalítású rendszert fejlesztünk. Egy csomó extra munka nekem az, hogy a felhasználóknak elmagyarázzam hogy mi micsoda, ezzel például kivállóan lábon lövöm magam.

Szóval összegzésként csak ennyit szeretnék mondani: marketingesek, politikusok, humoristák, el a kezekkel a szoftveripartól!