Épp a .Net-es IoC konténer megoldásokat tanulmányoztam, amikor az Autofac nevű megoldásra keresve egy Wikipedia szócikkre bukkantam Philip K. Dick azonos című novellájából. Az egészben az az érdekes, hogy a szócikk alján a hivatkozásoknál egy archive.org-os link is volt magára a novella egy Galaxy Magazine sci-fi magazinból szkennelt példányára!

Egyből el is olvastam, mivel mostanában úgyis az emberek és gépek jövőjén is törtem a fejem. (Bevallom, azért is,mert megnéztem a Terminátor: Sarrah Connor krónikái című – amúgy egész szórakoztató – sorozatot) A novella nem rossz, bár nem is vagyok lehidalva tőle. Másfelől mivel a sci-fi fénykorából való, az itt látott klisék és formulák még viszonylag frissek voltak akkortájt, csak azóta koptatták el őket. Ezért egy 6,510-et adok neki. Azért nem többet, mert az ilyen kicsit nyitva hagyott végű történetekhez képest számomra túl érdekes a téma, ezért hiányolom a bővebb tárgyalást, a csattanó pedig kissé lerágott csont napjainkra, legalábbis bizonyos mennyiségű elolvasott sci-fi novella után ;).

Amúgy a különféle IoC konténerek közül végül az Autofac-ra esett a választásom, mivel MIT licencű, elég intuitív a használata, elterjedt, és úgy néz ki, hogy mindent tud, amire szükségem lesz. Mellesleg egész gyors is az alternatívákhoz képest. Nem mintha ennek a komponensnek a sebessége számítana az alkalmazás szempontjából.

Az internet 2015-ben néhány érdekesebb dolgot sodort elém, de a top eddig még mindig a…

Piclecat

Érdemes a zenét is hallgatni, nagyon relaxáló, valamint az egér mozgására láthatóvá válik a macsek térhatása!

Amúgy egy ideje követem a hackernewst egy egész jó alkalmazás segítségével (semmi hülye felesleges jogosultságot nem kér), és ez eddig a legjobb kontent onnan. Az az oldal sokszor hupubb a hup.hu-nál is.

A minap a Déli pályaudvarnál jártam, és egy gyönyörű tacskót láttam. A kutyát egy perverzzel sétáltatták. Nagyon maradni akart a kutyus, de a perverz nem hagyta, és erővel elvontatta.

A perverz története

Az egész még kissrác koromban kezdődött. Nagybátyámék vándortábort szerveztek, és az öcsémmel mi is velük tartottunk. Az tábor helyszíne az Őrség volt. Vonattal utaztunk, és mivel nem volt kibérelve egy kocsi, mindenféle emberekkel együtt utaztunk.

Abban a kabinban amiben utaztunk, egy fiatalokból álló banda utazott. Beültünk melléjük a maradék szabad helyekre. Épp a Sziget fesztiválról tartottak hazafelé, ahol előzenekarként léptek fel. Azt gondolták, hogy élettapasztalataik megosztják a még csupán általános iskolás fiatalokkal, úgyhogy beszédbe elegyedtek velünk. Amikor azonban látszott, hogy a szókincsünk még nem elég bő ahhoz, hogy követni tudjuk őket, pár dolgot elmagyaráztak nekünk.

Ekkor tudtam meg, hogy a perverz szó azt a kutya hasörvet jelenti, amivel például a minap azt a gyönyörű tacskót vonszolta be a kocsmába a gazdája…

Ez a tudás azóta is sokszor jött jól. Köszönöm, ismeretlen fiatalok! (Bár nem értem, miért mondják rám a parkban a lányok, hogy kutya hasörv vagyok.)

Heinlein olvasónapló - 3. felvonás

Ezúttal rövid leszek. Korábban írtam, hogy félretettem pár Heinlein könyvet. Nos, nem vetem azóta sem őket elő ismét, és szerintem egy jó darabig nem fogom még elővenni.

Number of the Beast

Amint korábban írtam, rendkívül modoros és vontatott, és családregénybe illően kusza szociális hálóról szólóan indult. Azóta sem vettem erőt, hogy átrágjam magam rajta, és úgy érzem, hogy nem is fogom, főleg miután a következő könyvet sem bírtam elolvasni.

I will fear no evil

A főszereplő egy idős milliárdos egy anarchista káoszba fulladó Amerikában. Beteg, és csak gépek tartják életben, és úgy dönt, hogy kijátssza a halált. Elkezdődik a keresés egy alkalmas test iránt, amibe átültethetik az agyát, illetve az ügyvédek tudják a pénze feletti hatalmát megtartani.

Ismerteti a társadalom sajátosságait, beteg, kaotikus, hektikus működését, a közbiztonság hiányát. Ezután, illetve ennek kapcsán sikerül is donorhoz jutni. A átültetés után nagy titkolózás, és kiderül, hogy női testbe került az agya.

Mindez olyan szinten túlírva, és hosszasan leírva, hogy inkább abbahagytam, és elolvastam a Wikipedian.

Mindezzel együtt, miután elolvastam a cikket, nem vagyok meglepve. Heinlein egy hosszas, és súlyos betegség során írta, valamint a női elmével kapcsolatos hipotézisei ezután váltak még hangsúlyosabbá a műveiben, és általánosságban megváltozott műveinek hangvétele. Itt már levontam a következtetést, hogy legalább is most nem vagyok fogékony ezen műveire. Inkább a korábbi műveit fogom olvasni, azok hangvétele közelebb áll az ízlésemhez.

De akkor mit olvassak?

…merült fel a kérdés bennem. Nos, a skandináv krimikre nyergeltem át, és ezt nem bántam meg! Hamarosan Jo Nesbø műveiről írok rövid áttekintést.

24 órás hackathon voltam

Mit is csinál? Alapvetően YAML és JSON fileokból XML fileokat generál…

A munkahelyemen félévente külön teret adnak a kreativitásnak: egy 24 órás programozó maratont (hackatlon) szerveznek, ahol különféle ötleteinket kiélhetjük magunk. Egy barátommal, aki történetesen a kollégám is (commiter oszlopban brogrammer néven szerepel), úgy döntöttünk, hogy az egyik cluster termékünk tesztjeit hatékonyabbá és olcsóbbá kellene tenni, amihez KVM alapú virtualizációval kellene egy framework, amiben lehet felhúzni clustereket percek alatt. (Így például a kereskedemi virtualizációs megoldások licencein tudnánk spórolni.)

Ezt a célt kitűzve magunk elé, belevágtunk a “Cluster Termékünk Neve virtualized smoke test” projektbe.

A munkakörülmények adottak voltak:

  • áram
  • LAN, internet (mondjuk csak WiFi volt technikai okokból, és ez kissé az utunkba is állt)
  • játszós gépek: 2 (Sun?) Blade (8 Xeon mag + 8 HT, 48 GB RAM, több mint elég HDD, Ubuntu 14.04 LTS)
  • kávé
  • energiaital (annak aki ilyesmiket iszik)
  • rostos és szénsavas üdítők
  • sör, buzisör
  • pizza
  • chips
  • xbox one, ps 4

Tehát étel, ital is volt gyakorlatilag végtelen mennyiségben. A bladek több mint elegendőek voltak számunkra. Our greetings fly to the lab operators!

Miután megterveztük a cluster setupot nekiláttunk egy RESTful webapp készítésének, amit backend microservicenek szántunk, de végül eléggé monolitikus lett a dolog. :) Ez az alkalmazás gyártotta le a libvirt számára a konfigurációs xml-eket, és bizgerálta a KVM-et a libvirt segítségével.

Összességében nem sikerült minden célunkat elérni, de sikerült egy olyan állapotig eljutni, hogy egy clustert be tudunk bootolni, és le tudunk állítani a kis webapp segítségével.

A sikerünkhöz hozzájárult a megfelelő stack választásunk:

  • Ubuntu 14.04 LTS
  • KVM
  • libvirt
  • Python 2.7 + IPython
  • Flask web microframework
  • Jinja 2 template engine
  • Stack és Heap in-memory adatbázisok
  • git
  • Gogs git frontend a szép színes git loghoz, és access controlhoz. (Tisztára egy privát github!)
  • Pure CSS a reszponzív témához (hisz ki ne akarná a mobiljáról vezérelni a clusterjét! Tudjuk, hogy lehetett volna Bootstrappal ezt is, de most így alakult.)
  • Bootstrap a színes gombokhoz és ikonokhoz
  • YAML a konfig fileokhoz
  • Visual Studio Code

Tanulságok

Jónéhány fontos tanulsága volt az eseménynek:

A pihenés fontos

A legfontosabbak a fáradtság kezelésével, és az energia helyes beosztásával kapcsolatos tanulságok: Utálom az energiaitalok szagát. A különféle serkentőszerek szervezetbe juttatásánál érdemes a használati útmutatót követni. Még akkor is, ha már 24 órája vagy ébren!

Nem érdemes így maratoniban kódolni, főleg nem úgy, hogy már reggel a munkába is hullafáradtan érkeztem, miután nem rendesen elaludni. Valószínűleg több eredményt értünk volna el, ha rendesen alszunk, mondjuk legalább 6 órát.

Amúgy épp a minap olvastam egy ehhez lazán kapcsolódó írást: Sabotage - az önszabotálás kultuszáról, okairól, hátrányairól, előnyeiről. Angolul.

A libvirt API, Python binding és a doksija elég gáz

Generált a binding. Ez nem lenne még gond, ha vették volna a fáradtságot rendesen megcsinálni. Sajnos nem vették, vagy teljesen eltér a rendesen megcsinálásról a véleményük az enyémtől. A C apiban, mivel ott nincsenek namespacek, prefixelt minden függvénynév. A bindingban ezek le vannak vágva, de elég brainfuck módon. Persze pythonban nincs segítség az autocomplete type hintjeiből sem. Az egészet talán legjobban összefoglaló példa:

Vajon mit csinálhat a libvirt connection createXML() metódusa? Nem, nem XML-t csinál! Egy VM leíró XML-t vár argumentumként, és abból csinál egy VM-et. Ez a C API-ban a DomainCreateXML hívás, ami már sejthető, hogy mit csinál.

A linux bugzani fog

Másik tanulság az, hogy linuxxot csak magic sysrq-val indíts újra, ha nincs iLO, IPMI vagy egyéb out of band remote konzolod. Történt ugyanis, hogy a libvirtes kisérletezgetés során a KVM kicsit betojt, és beragadt egy VM. Gondoltuk, hogy újraindítjuk, de le sem állt a gép, viszont az sshd-t már kilőtte… Szerencsénkre egy laboros kolléga még dolgozott ezen a késői órán is, és így erőből újraindította a gépet nekünk.

A konzolok továbbra is… konzolok

Az XBOX One és a PlayStation 4 is console plebeknek való. FPS játékot controllerrel játszani? Összességében nem találtam nagyon jónak a játékélményt egyiken sem, pedig neves franchiseok darabjait próbáltam ki. Az pedig, hogy a Need For Speed valamennyivel vagy nem lehet split-screen versenyezni (XBOX One), vagy úgy el van rejtve annak a módja, hogy nem találtuk meg, így vagy úgy, de a játékipar szégyene. A játékipar többnyire amúgy is szégyen.

A rendes nyelvek nem véletlen vannak ott az ipari felhasználásukban, ahol

Egy másik tanulság: a duck typing hamar nagyon drága lesz. Egy jó típusrendszer, egy jó fordító, és máris jobban megy a kód írása fáradtan is. A pythonban az első lépések nagyon faszák voltak, aztán már ennyi idő alatt eljutottunk oda, hogy jobban visszafogott minket, mint segített.

A fáradtság lenyomata

A projektet nem tesszük közzé, mert ez csak a miénk. Meg amúgy is csúf a kód, meg python. :)

Ellenben megosztjuk a commit messageket. Érdemes a commit messageken keresztül követni a fáradtság hatását a kognitív képességekre. Jól látható, hogy miként fogyott az erőnk az értelmes összefoglalók megírására. Emellett az is megfigyelhető, hogy miután hajnalban ledőltünk 1-2 órát aludni, majd megreggeliztünk, utána ismét értelmesebb üzeneteket tudtunk írni.

TimeCommitterCommit message
15:12:21initial commit
15:10:39kódfodrászExtended README
15:25:03brogrammerAdd kvm scripts for starters
18:19:55brogrammerAdd backend proto
18:31:51egy másik pókfirst
19:15:14brogrammerAdd template
21:29:32brogrammerninja2ization
18:37:55kódfodrászsome vscode defaults for the project
21:28:33kódfodrászStart rewriting of the backend app
21:50:11brogrammerAdd ninjaized templates
22:19:18kódfodrászAdded bridge name heuristic
22:46:48brogrammerAdd network xml creation
22:57:39kódfodrászbridge generation in Cluster
23:37:34brogrammerDomain status
23:42:12kódfodrászRefactored network creation. Added storage creation.
00:53:53kódfodrásztempalte loading from yaml
00:59:55brogrammerbringup
01:13:22brogrammerdont try this at home
01:21:09brogrammerworks as designed
01:21:46brogrammermoar blobz
01:32:48brogrammeronly on post.................
01:28:11kódfodrászdep injection. add storage. stuff.
01:40:10kódfodrászlisten on all interfaces
01:43:10kódfodrászfix stuff
01:53:02brogrammernetcode
02:00:29brogrammerrefactor
01:44:50kódfodrászadd shell script to start up app
01:57:20kódfodrászcreate domain in bringup
02:04:29brogrammerstorage
02:10:53brogrammerCall net and storage bringup
02:12:24brogrammertypo
02:13:05brogrammerfaszom mar
02:14:25brogrammerprxl
02:18:05brogrammermi van maaaar
02:15:40kódfodrászmar az en faszom is
02:22:39kódfodrászpython suxxs
02:27:12kódfodrászi am a bad mothafucka!
02:38:53brogrammeri
02:42:46brogrammerdebug
02:42:02kódfodrászlog some shit
02:46:10kódfodrászthis is a patriarchal commit
02:47:12kódfodrászthis time feminists won :(
02:49:14kódfodrásze!
02:56:51kódfodrászdem plates
03:07:17brogrammerlool
03:07:55brogrammerszabtoaaaaszzzsss
03:08:56brogrammernem
03:11:12brogrammerazrt
03:13:06brogrammertokeletes
03:15:14brogrammerforman
03:19:25brogrammermindent megcsinaltam
03:22:08brogrammermit tudjuk mirol van szo
03:36:02brogrammerwhitespace fix and backdoor for nsa
03:45:43brogrammerrandom minden
04:00:39kódfodrászteardown
04:35:49kódfodrásznem vagyok beszamithato
07:20:42brogrammercss a little (very little)
07:23:59brogrammeriii
07:32:45brogrammerAlways return something
07:38:54brogrammerDelete host handler
08:05:07brogrammerFixit
08:29:08kódfodrászez má' igen!
08:41:02kódfodrásza hohes c multivitamin nyito kupakot vagy gonosz vagy idiota emberek terveztek.
08:47:01kódfodrászén ugyan biztos nem a majomtól származom!!4! Kulonben is, te reviewztad
08:56:45brogrammerez meger egy komitot
09:00:54brogrammereloleptetnek menedzserre annyira szart kodoltam
09:02:01brogrammereating is for pussies
09:05:19brogrammerpitno plz
09:26:26kódfodrászAdd some responsiveness
09:49:41kódfodrászéjjel ötkor ne szivj táplálékkiegészitőt az orrodba
10:07:00brogrammerAdd bootstrap
10:16:09brogrammermore fancy
10:16:57brogrammercorrect to submit
10:18:41brogrammerFix action
10:36:00brogrammerjol szetcsesztem hehe
10:38:16brogrammeriso
10:52:20brogrammertemplate changes
13:23:56kódfodrászextend readme

Konklúzió

Részben sikerült a célunk. Kipróbáltunk dolgokat, amiket egy hétköznap nem tennénk. Jól éreztük magunk. Azt hiszem, hogy legközelebb is megyünk, és bőrőzünk! Én legalábbis szeretnék, és brogrammer is ennek jeleit mutatta.