Nézőcsúcs született a tegnapi JUM-on. Mondjuk így könnyű, hogy nem két nappal az esemény előtt derül ki hogy mik lesznek az előadások és mi a helyszín. Az új Számalk épület igazán trendi, letisztult helyszínt szolgáltatott Wifi eléréssel.
Néhány szó az előadásokról:
PMD, Checkstyle - statikus kódanalízis
Ha arra vetemednél, hogy saját szabályok szerint akard ellenőrizni a Java kódodat (vagy másét) akkor ezek közül kell használnod valamelyiket. Az egyikben Java-ban kell vizsgálgatni az Absztrakt szintakszisfát-t, a másikban pedig XPath-tal kell bűvészkedni. A kód duplikációk is könnyen kibújnak a zsákból ezekkel az eszközökkel, mert nem lehet átverni őket megváltoztatott változónevekkel, kommentekkel és whitespace beszúrásokkal. Az előadáson nagyvonalúan átsiklottunk fölötte, hogy mi az az Antlr és Javacc, ami a PMD-ben ill. a Checkstyle-ben dolgozik. Nos, az utóbbi parser generátor és az előbbi is valami olyasmi. Lényeg hogy ha ezekbe betoljuk egy nyelv (jelen esetben a Java) formalizált szintaktikai szabályait, akkor tudnak olyan parser-t generálni, ami fel tudja építeni egy forrásfájlból a szintakszisfát. Aztán ezt lehet interpretálni, elemezni, compilálni. Talán egyszer ezekről a parser generátorokról is lehetne előadás.
Oktech profiler
Sok olyan kérdésre rávilágított az előadó, amin eddig nem is gondolkodtam el. Hogyan lehet profájlolni? Instrumentálni lehet a kódot, vagy mintavételezni a stacktrace-t. Mindkettőnek megvannak az előnyei és a hátrányai. Ők az utóbbi irányba indultak el és nyílt forrásúvá tették a kódot. A jelenlegi formában még elég száraz a kimeneti formátuma, de van benne perspektíva. Mivel a mintavételezéses profiling főleg kilóra tudja megmondani hogy mikor mi fut én olyan bővítéseket tudnék elképzelni, amik színes grafikonokat rajzolnak.
Google App Engine
Ez is jó előadás volt. Átjöttek a Google App fejlesztő legnagyobb szívfájdalmai: olyan a fejlesztés mint egy akadálypálya, ha tényleg akar valami komolyat csinálni az ember, hamar megtalálja a falakat. Van egy hosszú lista, hogy mely java frameworkök támogatottak, melyek részben és melyek nem. Alapvetően szervlet technológia, nagyjából van JPA, de vannak bizonyos korlátok, pl. max ezer fájl lehet egy alkalmazásban. Ha pl. Dojo-t akarok használni vagy más Javascript keretrendszert ami sok kis képet használ, akkor máris bajban vagyok. A GAE folyamatosan fejlesztés alatt áll, néha bejönnek új feature-ök, néha megjelenik valami új bekezdés a honlapon. Egy bizonyos forgalmi határig ingyenes, aztán pedig fizetős. Ez az ingyenes forgalmi határ sok kritériumból tevődik össze kezdve a napi processzoridőtől a napi max deployolások számáig. Ennek ellenére szeretjük a Google-t, mert még mindig látszik a törekvés hogy adni is akarnak valamit nem csak lenyúlni. Fontos még, hogy eredetileg Python-ra volt támogatás. Java csak idén tavasszal lett, ezért még mondhatni gyerekcipőben jár.
A JUM utáni sörözéseket kellene még komolyabban venni. Legközelebb akkor novemberben!
2009-09-17
JUM XI.
2009-07-23
JavaFX Eclipse kipróba
Kitaláltam hogy beleszagolok a JavaFX-be.
javafx.com a hivatalos kiindulóoldal ahol vannak csilivili demók, de engem a rögvalóság érdekel, úgyhogy utánanézek mit kell letölteni ahhoz hogy én is tudjak ilyen szépségeket programozni. Ezt az oldalt találom, ami azt mondja van SDK, Eclipse plugin és a downloads-okra visz. A Netbeans is támogatja, de nekem most nem az van kéznél.
JavaFX Installálás: Kicsit le voltam már maradva a java verzióval is. Mondja hogy JDK6u13+ kell. Letölti, installálja 5 percig. Felhoz SUN regisztrációs oldalt, de nem kell tölteni. JavaFX install gyorsabb. Alapból Program Files-be akarja installálni (ja mert Windowson vagyok), de átállítom. Nem történtek nagy dolgok szerencsére, megjelent a Start menüben, plusz az install helyen. bin könyvtár, ilyesmik.
Eclipse plugin:
update site: http://javafx.com/downloads/eclipse-plugin/
Verzió: 1.2.0.20090528....
Az ajánlott 3.4.2 ganymede-re installálom néhány másik plugin mellé, mint pl. m2, SVN, WTP, Findbugs.
Sikerül az install. Új projekteknél megjelenik a JavaFX projekt. Néhány prototípusból tudok választani. Fotónézegető, 3D-s polc megjelenítő. A Spring (pattog két labda) példát választom - fordul, működik. Ha az lenne a célom, játszhatnák vele hogy változtatgatom itt ott a kódot, de most nem ez a célom. Lehet új külön JavaFX fájlot létrehozni, megjelenik a JavaFX perspektíva és egy külön Run opció a futtatáshoz.
Viszont nem túl komoly a támogatás.
Jobboldalt van egy Drag and Drop-os komponenskészlet kevés komponenssel, de grafikai szerkesztés nincs, csak bedobja a kódrészt ész nélkül oda ahova viszem az egérrel, akkor is ha szintaktikai hibát eredményez. A context assist működött egy darabig, de rövid használat után elromlott, azóta csak ClassCastException-t hoz fel az IDE újraindítása után is. A javafxdoc hover működik, de nekem nem tetszik a formátuma. Túl nagy betűk, ha böngészőben nézem szerencsétlen az elrendezése. Folyton scrollozni kell le-fel, le-fel, le-fel.
Egy egyszerű Swing-es GUI-t akarok átültetni próbaképpen JavaFX-re, ismerkednék a layout-okkal. Alapkövetelmény lenne, hogy az ablak tartalma némileg intelligensen kövesse az átméretezést. Ez Swing-ben igen egyszerű a BorderLayout vagy a GridBagLayout segítségével. Negatív meglepetés: nagyon gyér a layout támogatás. Ráadásul régebbi verziókhoz képest sokmindent visszavettek. Pl. nem lehet GridBagPanel-ozni. Ráadásul a túl sok változtatás miatt, a net tele van használhatatlan példákkal.
Találok egy ígéretes layout menedzsert, DigLayout néven. Letöltöm a jar-t, hozzáadom a projekthez, de nem reagál rá, nem találja meg az osztályt hiába importálom. No ez már azért kicsit durva, úgyhogy be is rekesztem a kísérletezést.
A nyelv maga az oké. A szintakszis kicsit a JSON-ra hajaz bár semmi köze hozzá. Tetszik a deklaratív megközelítés, és látom hogy sok szépet és jót lehet csinálni vele -és bízom benne hogy egyszer majd fogok is- , de egyelőre a 2-3 órás ízlelgetés után, ebben a formában "nem vettem meg".
2009-06-25
Kódlefedettség-mérés
A jtechlog-ban volt egy írás a code coverage-ről ahova be is böfögtem egy kommentet. Na most én is írok róla.
Az Emma is egy ilyen kódlefedettségmérő eszköz, ami mindenféle riportokat tud csinálni XML és HTML formában. De én nem szeretek build scriptből és command promptból bűvészkedni ha kódlefedettséget akarok nézegetni, szóval beérem az Eclipse plugin változatával, az EclEmma-val. Europa környezetben használtam eddig és most felraktam a Gánymedvére is (by czimi). Azon is megy szépen.
Tud package, osztály, metódus, blokk és utasítás lefedettséget. Szépen fában jeleníti meg és lehet nyitogatni, odaugrik a kódra ha klikkelek, valamint kiszínezi a kódot, szóval meg lehet nézni hogy mi hajtódott végre teljes egészében és mi részlegesen végül mi az ami kimaradt a szórásból. El lehet tenni régi riportokat, előszedni de ezt sosem használtam. Be lehet jelölgetni a kapcsolt jar-okat, hogy azoknak is mérje a lefedettségét. Az EclEmma-s honlapon van screenshot, több infó.
Node mire jó ez?
Legalapvetőbb célja az lehet, hogy a unit tesztek a kód hány százalékát hajtják meg. Első közelítésben ez egy szám ami nem sokat mond. Kényelmes test driven fejlesztésnél nálam 70-80 százalék jön ki. Fel lehet tornázni 95, sőt 100%-ra is, de ez már néha igen sok melóval jár, főleg a szoftver határai közelében (I/O). Mindenféle mock-okat kell csinálni, le kell tesztelni mi a helyzet, ha egy stream close() metódusa elszáll IOException-nel, le kell tesztelni az UnsupportedEncodingException-t akkor is ha statikusan megadtuk az encoding-ot. (Checked exception, de minek.)
Akkor kezd izgalmassá válni a dolog, ha megnézzük hogy miért nem 100%, miért csak 70, elkezdjük lenyitogatni a fát, látjuk hogy egyes metódusoknak 0% a lefedettségük. Ilyenkor érdemes megnézni (CTRL+ALT+H) a metódus fordított hívási fáját, azaz hogy használja-e egyáltalán valaki. Nem használja, akkor meg miért van ott? Ha szükséges lesz az a metódus a jövőben akkor érdemes rá valami tesztesetet írni, hogy legyen valami contract-ja, ha nem akkor pedig ki lehet törölni. Ezzel is javul a lefedettség.
Más esetekben a metódusokon belül nem hajtódnak végre bizonyos ágak. Igazi TDD-nél ennek nem nagyon szabadna előfordulnia, de ha mégis akkor pótolni kell a hiányosságot mihamarabb.
Ad hoc tesztelésről feltornázni a teszt lefedettséget -próbáltam- egy rendkívül unalmas és szélmalomharcnak tűnő feladat. Az eredmény sem lesz olyan jó, mintha már az elejétől folyamatosan készülnének a tesztesetek. Update: De TDD nélkül is használható egy ilyen eszköz. Ilyenkor tesztesetek nélkül, egyszerűen azt kell megnézni, hogy némi működés -némi kattintgatás- után a program mely részei kapnak vezérlést. Az összes funkción végigzongorázva a holtággá vált kódrészeket végülis ki lehet így szűrni, egy adott funkció megpendíténél pedig meg lehet találni kilóra hogy a funkció a kód mely részeit hajtja meg.
Másik, nem túl triviális célja annak jelzése, hogy az összes teszt lefuttatása során a tesztkód hány százaléka fut le. Ennek 90-100 százalék közelében kell lennie. Ha ennél alacsonyabb akkor vagy ki vannak ütve tesztesetek -amit illik megindokolni- vagy valamiért nem kerül bele az összes teszteset a suite-be, vagy a tesztkód szerkezete nem megfelelő. Unit teszteknél nem szabad körmönfont vezérlési szerkezeteket használni, nem elfogadható hogy egy adott teszteset kódja nem fut le teljes egészében (100%). If-nek például elvileg egyáltalán nem szabadna tesztkódban lennie, legfeljebb utility osztályban. Egyébként az 5-10 százalék veszteség is valószínűleg a utility osztályokban kell hogy legyen.
1-2% veszteséget a lefedettségmérő eszköz is csinál mérési hibaként. Majd ideírom amikor megint találkozom vele, de úgy emlékszem a finally blokkban lévő kódot nem számolja, valamint az inicializáló blokkokkal is mintha meggyűlt volna a baja. Szóval a 98-99 százalékot néha lehet 100-nak venni már.
Reverse engineering-nél lehet érdekes azt megnézni, hogy egy adott teszteset vagy adott funkció a kód mely részeit hajtja meg. Ránézésre látni kilóra, hogy mely package-ek osztályok és metódusok kaptak vezérlést, miket érdemes a későbbiekben figyelemmel kísérni. Nekem hasznos volt ez a felhasználási mód is néhány alkalommal, amikor más kódjával ismerkedtem.
És végül amiért most ismét elővettem ezt az eszközt: 3rd party komponensek lefedettségét is meg lehet vizsgálni. Éppen egy webstart alkalmazáson dolgozom hobbiszinten, ami használ egy-két külső könyvtárat, de csak egy-két funkció erejéig. Az egyszerűség kedvéért az egész hóbelevancot egy jar-ba csomagolom és arra gondoltam ki fogom ütni a nem használt osztályokat a külső könyvtárakból a buildelés során. Most 1.3 mega a jar, jó lenne lemenni a harmadára. Bár az az érzésem hogy van erre jobb céleszköz is.
Egy-két régi Ant-os projektünket is szívesen végigbogarásznék egy ilyen lefedettségmérővel, mert ott már a világ összes jar-ja benne volt a lib könyvtárban. A Maven-nel már más a helyzet, mert az már ügyel a függőségek kezelésére -mondhatná egy Maven-hívő- de azért ott sem ilyen egyszerű a kép. Néha azért csattogtatni kell a exclusion-okat, mert pl. a log4j-hez is összeszed minden szutykot amit nem is akarok használni.
Remélem sikerült lefednem a kódlefedettségmérés felhasználási lehetőségeit. Jó pénteket!
2009-05-29
Sun Java Café
A munkát félretéve elmentem a Sun Java Café-ra csütörtök délelőtt. A Sun igazán jó vendéglátó, mert az asztalok csurig voltak szendviccsel, ásványvízzel és kávéval. Jó sok ember gyűlt össze, -kb. megtelt a terem- egyre több ismerős arccal. Két előadás volt, amelyeket jövő héten a JavaOne-on is bemutatnak San Fransisco-ban.
Az első előadást a Sun-os emberek prezentálták és arról szólt, hogy hogyan rakták le egy nehézsúlyú nagyvállalati SOA projekt alapköveit Glassfish OpenESB-vel (Enterprise Service Bus). Lehet hogy azért mert nem vagyok járatos az ESB-ben, de nekem ez az előadás nem jött át teljesen. Elmondták hogy különböző Proof of Concept-eket dolgoztak ki a megoldásokra, de engem pont ezek a PoC-k érdekeltek volna. A jtechlog-ban Viczi írt több infót az előadásról. Nekem csak ilyen kérdések keringtek a fejemben, hogy "milyen tényezők határozzák meg egy WAN-os ESB-s szoftverrendszer működési karakterisztikáját? Pl. kell/lehet-e foglalkozni az esetleg földrészeken átívelő elosztott tranzakciók optimalizálásával, lehet-e üzeneteket vagy adatokat cache-elni?" Stb.
A második előadás számomra jóval izgalmasabb volt. Tavaly az Indexen lehetett olvasni egy cikkben ("Műegyetemisták hódítják meg Las Vegast"), hogy a CES kiállítás környékén -miközben odabenn a NavNGo villogott- mutogattak privátban magyar egyetemisták egy mobil telefonra készült BitTorrent klienst. Nos az egyik egyetemista, illetve a BME automatizálási tanszékén működő Applied Mobile Research Group tagja, Ekler Péter jött el bemutatni a néhány projektjüket. Többek között a közepes kategóriájú Java ME-t futtató mobiltelefonokra csinálnak szoftvereket. Például a telefon kameráját használó mozgásérzékelőt, speciálisan mobilra optimalizált szociális hálót, stb. Meglepődtem mennyi funkciót el lehet már érni a mobilokban a Java platformmal. Ezek az alkalmazások nem feltétlenül mindennapi használatra készülnek, hanem inkább afféle prototípusoknak, a mobiltelefonok képességeinek bemutatásának céljából.
Bejelentették, hogy a JavaOne után valószínűleg lesz mégegy Java Café, ahol a konferenciáról hallhatunk majd beszámolókat. Nagyszerű! Remélem ismét el tudok menni.
2009-05-22
JUM X.
Kocka és Viczi már megelőzött a beszámolóval, de azért írogatok ezt-azt. Kicsit az utolsó pillanatra sikerült mindent összeszervezni, ennek ellenére nagyon jól sült el a dolog. Az előadások is jók voltak, ahhoz képest emberből sem volt kevés és ezúttal az időtervet is sikerült betartani.
Az első előadásból nekem az jött le, hogy SOAP-os szervizek teszteléséhez a Grovvy és a SOAPUi egy elég alapvető megoldás, mivel már a második független forrásból ajánlják a használatukat. A Netbeans 6.5 Groovy támogatását láthattuk élőben. A refactor és a kódkiegészítés kicsit döcögős, de ez egy dinamikus nyelvnél mindig is sarkalatos pont.
Corsin Decurtins az Objektum Orientált adatbázisokat mutatta be. Hozott egy jó hasonlatot: "Objektumokat relációs adatbázisba pakolni olyan, mintha az autódat minden este úgy tennéd be a garázsba, hogy előtte darabokra szeded." Azóta eszembe jutott egy riposzt erre a hasonlatra: "Az autókkal kapcsolatban viszont nincsenek olyan igények, hogy kérném az összes csavart az autóból méret szerint rendezve." Végülis abban maradtunk, hogy az OO adatbázisok egyelőre egyetemi kutatások témái, éles ipari környezetben még nem állják meg a helyüket, hacsaknem a Bajor Motorgyár Rt (a.k.a BMW) termékeiben. Végülis az előadás még a gyors prototípus készítésről szólt. Szerintem a JPA-val és az EJB3-mal már elég gyorsan lehet prototípusokat készíteni, de biztos vagyok benne hogy meglesz az OO adatbázisok helye is. Még a Jazoon konferenciát reklámozta Corsin, ami júniusban lesz, tavaly ha jól emlékszem 850-en voltak. Ezt az előadást egyébként tavalyelőtt ott is prezentálta. Lehet hogy valahol van is link róla. Említett még design patterneket, pl. az Active Record-ot, ami szerintem anti, a Transaction Script-et és a Domain Model-t. Ja és a db4o egy ilyen OO DB.
A harmadik előadás az Amazon Web Services-ről szólt, ami egy számítási felhős vagy inkább virtualizációs téma (v12n). Pénzért bérelhetsz a számítási teljesítményt, sávszélességet és tárhelyet, valamint vannak előregyártott image-ek, pl. mindenféle Linux-ok, telepített appszerverek. Pár kattintással lehet csinálni egy Websphere környezetet -példának okáért- ha jól értettem. Az jött ki hogy olcsó, olcsóbb mintha szerver hostelbe betennél egy gépet, ráadásul az időszakos terheléseket jobban le lehet kezelni úgy hogy arra az időre bérelsz még egy kis virtuális teljesítményt. A múltkor nagyon kutyáztam a cloud computing-ot, de ez az AWS egy jó dolog akárhogy is nézzük. Java-val is volt némi kapcsolódási pont, mégpedig hogy vannak valami java API-k ennek az AWS-nek az elérésére (jets3t, quillen és jclouds). Valamint a Szantog szokott még erről írkálni elvileg, de nem néztem bele.
Aztán kocsmáztunk még egy kicsit (10-ig ugye), ami szerintem nagyon hasznos volt. Bár nem sokra emlékszem miről beszélgettünk, a cetlit meg elhagytam amire felírtam pár betűszót aminek utána akartam nézni. Nem baj, majd eszembe jut.
Egyébként lehet hogy megint átmegyek egy darabig ilyen meeting tudósító oldalba, mert lesz egy-két esemény amire elmegyek előreláthatólag. Pl. lesz a Sun Java Café és az Eclipse Democamp a Galileo megjelenésének alkalmából, plusz a Newtech Meetup-ok, ami ha jól látom fizetős lett. Abban maradtunk hogy nyáron nem lesz JUM -legalábbis a klasszikus előadásos fajta- tehát szeptember a következő időpont.
