2016. december 4., vasárnap

final code-review-review

Vannak érvek a codereview mellett és ellene is. Kellett hozzá néhány év türelem, had gyűljenek az élmények. Ragyogó elméletek kontra szőrös valóság. Legyenek akkor elöbb a pro, mert az egyszerűbb, és sajnos sokkal rövidebb is.

Pro - ami működött


Egyik régi munkaadómnál a külső beszállítók gyakorlatilag review nélkül, és a management nyomására nem elég ritkán tesztelés nélkül is élesbe állították a rendszereiket. Mindenki boldog volt, amíg el nem szállt. És akkor jött a körkérdés: "Ért itt valaki groovy-hoz?" mire a legtöbben: "Mihez?"
Élesben fut egy rendszer, azt se tudtuk hogy mit csinál és ki használja, de elhasalt és fel kell támasztani.

Ugyanitt önként és meghívásos alapon elkezdtünk egymás között egy code-review szerűséget. Tea vagy narancslé, két szék, egy képernyő, együtt átnéztük a szoftver egy részét. Az ötlet az volt, hogy a review-er egyúttal backup ember is lehet, ha az eredeti fejlesztő nem elérhető, mert mondjuk elütötte egy autó. Például ez meg is történt velem.
A review során a review-erek inkáb csak ötleteket adtak, nem kötelező jellegű utasításokat. Jópár nagyon jó és hasznos ötletet kaptam és ezeket a review-ket úgy tünt mindkét oldalon pozitívan értékeltük. Mindkét fél ott ült, mindenki csak erre figyelt, elég gyorsan ment. A pár-hetente pár óra aligha lassította a fejlesztést, ugyanakkor viszont arra nem volt jó hogy konkrét hibát találjon.

Kontra


A szorosabb review process ötlete főleg, de nem kizárólag az open source projektek jellemzője. Mondjuk egy open source projekten tényleg át kell nézni az akárkiktől érkező patcheket, de ezzel sok probléma akadt:


Elösször is léteznie kellene egy alap kritérium listának, ami alapján elindul az ember, amolyan checklist. Ilyesmiket, mint kódformázással kapcsolatos szabályok. Ilyen többnyire nincs és helyette olyanokat szoktak mondani, mint "common sense", "well known traditions". Ez nem működik, ami az egyik kultúrában értelmes, az a másikban nem. Pl ami a spring-ben normális, az Java EE-ben nem az.
A helyzetet súlyosbítja, ha több reviewer is lehet, ugyanis többnyire ők sem értenek egymással, ami átmegy az egyiken fennakad a másiknál és fordítva.

Aztán a másik dolog ami a code review igéretei közűl megmaradt igéretnek az a párbeszéd. Egy webappon keresztül akarunk beszélgetni? Ne tessék viccelni, már a shared desktop + skype is elég szűkös néha, mert nincs hova rajzolni, lag-el a vonal, nem értjük elég jól egymást, esetleg a nálam már hajnalodik, a másik fél viszont még nem ebédelt.
Itt egy kicsit a kultúrális különbségek bejátszottak. Például sok izraelli munkatársam még mindig aktív katonai szolgáltaban állt, ők a command chain-hez voltak hozzászokva, az ő napi megszokásuk az volt, hogy a besztottak végrehajtják a parancsot. Abból lesz ám fasza dolog :)
Más kultúrákban is van így, például sok indiai is ha egyszer mondott valamit, akkor nagyon nehezen, vagy egyáltalán sehogy se tud kihátrálni. Persze ismerek kivételeket köztük is, de ez a rugalmatlanság amerikaiaknál és európaiaknál ritkábban fordul elő.

Harmadik beteljesítetlen igéret a kevesebb bug a kódban. A probléma talán onnan jön, hogy egy webappon keresztül nézegetik a reviewerek a kódot. Az hogy letöltsék és ki is próbálják, az opcionális, és mivel sok időt vesz igénybe, úgy látom többnyire nem is történik meg. Ezt a legtöbben be is vallották és azt mondták, a patch fejlesztőjének a felelőssége a tesztelés. Ebben nem értek egyet, teszt nélkül szerintem a review teljesen irreleváns.
Egy esetben pl 5 hónapig pöckölgettünk egymásnak patcheket, a végén a management nyomására lett vége a sztorinak. Bár egy délután alatt bőven le lehetett volna tesztelni a kódot, sajnos ez alatt az idő alatt én voltam az egyetlen aki kipróbálta.

A negyedik elmaradt igéret a tisztább kód. Bár a code review elvileg kivállóan betartatná a konvenciókat, a valóságban gyakran ez sem így történt. A már meglévő kód takarítása gyakorlatilag megvalósíthatatlanná vállt. Nem maradt rá idő. Amikor mégis beküldessz egy kis patchet, akkor a review gudelines hiánya miatti félreértések következnek: vedd még mást is hozzá illetve már így is túl sok, várj még a patch-csel illetve elavult és légyszi rebaseld.


Az ötödik probléma a review-val a határidő. Sajnos a reviewerek a gyakorlatban teljesen leszarták a határidőket. Ez már management hiba, de meg is tehették, mert rajtuk senki sem kérte számon. Gyakran hetekig vagy akár hónapokig is eltartott egy review, közben nem történik semmi. Ez két további problémát vet fel:
  • Nagyon gyakori task-switching. Ebben a gépek a nyerők, az embernek sok időbe tellik és a párhuzamos taszkok számával exponenciálisan nő a valószinűsége annak, hogy elcseszi. Csinálj egy dolgot, csináld addig, kész nem lesz!
  • Ha nem tudok igéretet kapni a reviewerektől a határidőkre, akkor hogyan tudnék én igéretet adni határidőkre? Ez a legsúlyosabb probléma a code review-vel a hétköznapi életben.

Szóval...

A code review mögötti ötlet érthető, csak a gyakorlati megvalósítása elött van egy pár akadály, amit a projekt vezetők gyakran figyelmen kívül hagynak. Nem tartom elképzelhetetlennek azt, hogy működjön, csak valószinűtlennek. Túl könnyű szarba lépni, mint egy gyanútlan túristának a nyóckerben.
Mindenesetre a tavalyi év végére eldöntöttem, hogy olyan munkát akarok, ahol ezt veszélyt kiküszöböltük. Az elműlt egy évben ilyen helyen dolgoztam. Nyugodt volt a hangulat, bár pár alkalommal rendesen bele kellett húzni, végül mégis kényelmesen elértük a határidőket, az ügyfél boldog és nagyon jó fej velünk. Nekem ez bevállt és megtartom ezt az irányelvet: amíg találok olyan munkát ahol nincs potenciális probléma, addig olyat vállalok!

Code Review: Good Bye!

2016. november 13., vasárnap

No kerub-agent

A legtöbb IaaS egy agent nevű szoftverre épít, ami minden host-on fut. Ez egyrészt egy olyan szoftver, ami a kommunikációt bonyolítja a controller és a host között, másrészt egy absztrakciós réteg is.
Az ovirt-ben ez egy VDSM nevű python script, ami XML-eket kap a kontrollertől és azt lefordítja másféle XML-be, konkrétan a libvirt XML formátumába, másrészt pedig néha operációs rendszer parancsokra, szóval kicsit többet csinál mint egy XSLT processzor :)
A cloudstack-nek egy java agentje van. Elsőre kicsit soknak tünhet akár fél gigát is beáldozni a host memóriájából egy ilyen, viszonylag erőforrásigényes processznek, de tipikusan a cloudstack felhasználók TB-ben mérik a host memóriát és fél giga nem kategória. A java-t inkáb azért nem tartom szuperfrankó választásnak agenthez, mert brutálisan béna az operációs rendszerekkel az integrációja, például a processz kezelés, meg persze mindenkinek vannak ellenérzései a JNI-vel szemben. JNI pedig van, persze hogy van...
Viszont itt nyilván előny, hogy a java fejlesztő, aki a kontrollert buherálja, az az agentet is simán buherálhatja minden további tanulmányok nélkül.

Mindkettő http protokolt használ: kapcsolódunk, kezetrázunk, bemutatkozunk, valami teljesen minimális dolgot közlök veled aztán elbúcsúzunk és fél másodperc múlva újrakezdjük. Az oVirt még emellett egy döbbenetes dolgot is csinál a tranzakciókkal, ami a MS-SQL-ből PostgreSQL-re való áttérés (és talán egy súlyos félreértés) eredménye.


Amikor azon gondolkodtam, hogy hogyan tudnék jó agentet a kerubhoz, elösször is inkáb azon gondolkodtam hogyan lehetne megúszni az egészet, mert nincs rá időm. Másodszor pedig szerettem volna megszabadulni a kommunikációs overhead-tól, pl xml parsing.

Végülis az, hogy nincs agent, azt nevezhetjük félrevezető marketing-baromságnak, mert valamilyen szoftvernek futnia kell, amivel kommunikálunk. Ennyi lett: OpenSSH, az OpenBSD klasszikus SSH szervere, ami fut linuxon, windowson (cygwin), mindenféle BSD-n és solarison, ráadásul többnyire része egy szerver alaptelepítésnek.


Az absztrakciós réteg... egy része ott van a kontrollerben, mert annak tudnia kell, hogy milyen operációs rendszerhez beszél, az absztrakciók nagy része viszont elment. Eleinte csináltam abstrakciót a hypervisor-elé, de később találtam jobb megoldást és mostanában lassan eltávolítom ezeket a kerub-ból.

Ez most hosszú lett, mert vasárnap van, legyen legközelebb például az, hogy mit csinál a planner és miért nem kellenek az absztrakciók.

2016. november 9., szerda

kerub - az "expectation"

Az expectation (elvárás) az a dolog, ami a kerub nagy planner-egyenletének az egyik oldala. Elvárásokat határozhat meg az ember virtuális erőforrásokhoz (virtuális gép, virtuális merevlemez, hálózat) teljesítményükre, megbízhatóságukra, futási környezetükre vonatkozóan.
Pár ilyen elvárás:
  • Redundancia - egy merevlemezre megmondhatjuk hogy mennyi másolat kell hogy legyen belőle - esetleg egy vagy több hoston tarthatjuk-e a másolatokat.
  • Kölcsönös kizárás (not-same-host) virtuális gépre és virtuális merevlemezekre lehet használni, például ha két tomcatunk között session replikációt játszunk, akkor igazán hülye dolog lenne a IaaS-tól ha ugyanazon a kiszolgálón hagyná futni őket. Ha a kiszolgáló elszáll, mindkettő tomcat bebukik. Hasonlóan pl scale-out adatbázisok (cassandra) merevlemezeinél.
  • Host-tal kapcsolatos elvárások, pl ECC-memória, tápegységek száma, vagy akár a gyártó is (még van ember, aki hisz az IBM-ben pl, mindenki hülyének tartja de van pénze)
  • Nyilván I/O teljesítmény, CPU teljesítmény és satöbbi elvárások
És így tovább, ilyenből egész sok van...

2016. november 7., hétfő

Műsorváltozás - kerub

Kicsit másként fogom használni ezt a blogot most egy ideig, mert nagyon kevés időm van rá, hogy ide írjak. Ez nem feltétlenül baj, mert nektek meg kevés időtök van rá, hogy elolvassátok, csak nem fogok rajta sokáig töprengeni, itt landol majd sokminden mint vasárnap hajnalban a diszkó elött a járdán.

Szóval mostanában ezen a kerub nevű dolgon dolgozok. A kerub egy IaaS prototípus. Arról, hogy IaaS alighanem mindenkinek az OpenStack jut eszébe. A legtöbb barátom OpenStack-en dolgozik vagy dolgozott, egy egész hadsereg lehet rajta. És mennyi ZS...

Nade kerub... Mi is lenne az alapötlet? Csak mert az egy jó kezdőlépés lenne ugye :)
A kerub-ot azért kezdtem el, mert ki akartam próbálni egy másmilyen megközelítést a virtuális gépek schedulerére. Bár a kernel scheduler abszolut tudományos dolog, sajnos a cloud rendszerek schedulerei enterprise agybajok.
A kerub schedulerétől elösször is azt akartam, hogy ne okozzon sok seggfájást, találja ki, hogyan tudja kielégiteni a felhasználók elvárásait.
Ja mert ez a tényleg fontos ötlet, a felhasználóknek elvárásaik vannak, mindig minden pillanatban azt nézi a kerub, hogy ezek az elvárások teljesülnek-e, illetve hogyan lehet kielégíteni őket. Nem kell servicenow ticketet nyitni, mint melóban, kerub tudja ha baj van és dolgozik is rajta.

Akkor legyen most gyorsan csak ennyi :)

2016. augusztus 22., hétfő

off: Az IT egy fekete lyuk

Ma sorba vettem, hogy mit csinálnak mostanában azok, akikkel huszonévesen térdig legyalogoltuk a lábunkat minden szombaton:
  • Eszti N diplomával és X doktorival rendelkező bölcsész, úgy 6-7 éve IT supportos
  • Dani posztdok biokémikus, most data scientist, Perl és Python mágus
  • Szöcske fizikus phd, mostanában Java szoftverfejlesztő - érdekes választás
  • Zalán szoftver-fejlesztő maradt
  • Sanyi is maradt szoftver-fejlesztő
  • Ákos rájött az egyetem végén, hogy valami gyanús és nem tudom pont most mit csinál, de nem szivatja magát absztrakciókkal
  • Anikó szakirányú egyetemi előadások nélkül is rájött ugyanerre, ő pont most alszik...
  • Nekem valami gyanús, de hát 11-12 éves korom óta szoftverfejlesztő akartam lenni. Mi legyek? Vadakat terelő juhász?:)

Kicsit olyan ez az ipar, mint London: szinte mindenki itt van. Vajon mit csinálnánk egy brexit esetén?

2015. november 27., péntek

Howto szakításhoz

Az utóbbi pár évben egy outsourcing cégnek dolgoztam. Igyekszek anoním módon és nem sértően, de muszáj leírnom, mert marha vicces volt. Második alkalom, hogy ennek a cégnek dolgoztam, az előző alkalommal egészen pozitív élmény volt és az akkori manageremet a legjobbak között tartom számon és néhány akkori munkatársamet szintén a legkivállóbb munkásemberek közé sorolom.
Valami változhatott viszont az alatt a jónéhány év alatt, amíg én mással foglalkoztam, ezt már akkor  megéreztem, amikor beléptem az ajtón.

Az állásinterjún a HR-es lány több mint egy órát késett, amikor megérkezett egy kávéval és laptoppal leült velem szemben és mondta hogy beszéljek a szakmai múltamról. Elkezdtem beszélni, de nehéz volt nem észrevennem, hogy nem érdekli: a laptopján olvasott valamit. Nem a CV-met, mert az nem olyan vicces. A technikai emberekkel azért kellemesen elbeszélgettem, de nagyjából az volt az érzésem, hogy ez a cég nem érdeklődik irántam komolyan. 2 hét csend után aztán mégiscsak előálltak egy ajánlattal. Azt hiszem az előző jó élmény miatt döntöttem úgy, hogy elfogadom.

Pár év eltellett és ez idő alatt jobbára a levélcímem volt az egyetlen kapocs köztem és a munkaadóm között. Leadtam a munkaidőről a jelentést, elküldték a fizetésem, ennyi. Semmi harag, de én úgy éreztem, ideje valami mást csinálnom, mert itt ülve egyszerűen kikopok a szakmából, a munkám meg csak annyi amennyi, abból nem sokat tanul az ember. Zseniális volt a felmondás, se harag, se indulat, se sértettség, semmilyen negatív érzés. Egyáltalán semmilyen érzés. A HR-es lány nem ért rá, csak mondta, hogy tegyem az aszaljára a papírt, odatettem, kész. Szevasz, resource! Szevasztok, resource-ok!

Erről az egészről a Kispál és a Borz "Jutka" című dalából jut eszembe az a sor, hogy

"Hívhatjuk baszásnak"

Igazi hungaricum ez a régi magyar alkesz-bölcsész-rock.
Na, legközelebb mesélek róla, hogy mit csinálok munkán kívül. Nem hiszem hogy bárkit igazán érdekelne, de ez lesz a műsor, mert engem ez érdekel :)

2015. november 9., hétfő

kotlin 1.0-majdnem

A kotlin programnyelv közelít az 1.0 kiadáshoz és érezhetően nő az érdeklődés körülötte, gondoltam pár további tapsztalatot megosztanék arról, hogy hogyan alakult a történet az utóbbi hónapokban.

Kezdjük mondjuk azzal, hogy a fejlesztők néha felvetettek egy-egy kérdést fórumra blogra és így az aktív felhasználói közösség részt vehetett a kotlin nyelv alakításában. Ez szimpi.

Ennek keretében szinte utolsó elötti húzásként kötelezővé tették az annotációk elötti kukacot. Lehetett mindent telekukacolni. Szintén viszonylag nemrég kicsit lazítottak a nullpointer védelmen és már nem kell mindenhova !!-t meg ?-t írni, ha java kódot hív az ember.

Főleg az utóbbi pár hónapban a fejlesztők kidobtak egy csomó deprecated funkciót és jópár másikat pedig átneveztek. Ennek következtében elég sok időt rá kellett szánni a migrációkra. Erre számítnia kell annak, aki 1.0 elötti programnyelvet használ.

A compiler nem igazán lett gyorsabb, de végre feltalálták az inkrementális fordítót és az ideába integráltak egy fordító démont, ez kicsit segít a problémán.

Szerintem továbbra is elég kedvetlenül támogatják a maven felhasználókat, a gradle-t sokkal inkáb. A maven compiler például annyira kevéssel gyorsul a második fordítás során, hogy az simán lehet mérési hiba, szerintem egyszerűen csak nem működik az incremental compiler mavenben és kész. Az is ide tartozik például, hogy a régi dokumentációs eszköz, a kdoc soha nem kapott működő maven plugint, az új dokumentációs eszköz a dokka pedig még mindig nem elérhető a maven centralból. Na jó, szóval a másik kevésbé-siker-sztori a dokumentáció generálás.

A bytecode idáig minden release körül változott. Ez azt jelenti, hogy a kotlin 0.11-el lefordított library nem működött kotlin 0.12-vel. Ennek ellenére léteznek kifejezetten kotlin-hoz írt libraryk:
  • A jackson-hoz van egy kotlin modul, ami a kotlin data osztályait segít JSON-ba és vissza alakítani.
  • A kovenant egy kotlin framework Future ojjektumok köré
  • Quasar - actor és satöbbi library kotlinhoz. Olyan mint az akka scala-hoz.
Szóval legalább ez a néhány népszerű fejlesztő csapat rendszeresen adott ki frissítést a kotlin verziók megjelenése utáni napokban vagy általában inkáb órákban. Szép tőlük.

Elvileg a legutóbbi beta kiadással lezárták a módosításokat és mostantól kezdve igyekeznek majd kompatibilisek lenni.

Az IDE támogatás mint az egy IDE fejlesztő cégtől elvárható, elég kellemes volt idáig. Mondjuk nem érzem magam másodosztályú IDEA felhasználónak egy java fejlesztőhöz képest. Engem kicsit bosszantott, hogy minden új kotlin release-hez egy új IDEA verziót is be kell szereznem, mert a régivel már nem műxik a plugin. Nagyon sok időt nem kellett ezen elszúrnom, de minden alkalommal egy fél óra nekem az már sok. Az új IDEA-ba már alapból benne van a kotlin, remélem így kényelmesebb lesz.
Határozottan örülök neki, hogy lassan szobatisztává válik a kotlin, egy egész használható dolgot kapunk, de azért még van egy hosszú listám arról, hogy mit szeretnék kapni. Jön a karácsony :)
  • Valami olyasmi, mint a PMD java-ban igazán hasznos lenne kotlin-hoz
  • Sonar plugint!
  • gyorsabb compilert
  • több valamit, kevesebb semmit