Skip to content

GhoUl

A Cubus Sapiens oldal

Archívum

Author Archive

Kissé eltűntem az utóbbi időben. Szemlátomást továbbra sem tudom tartani azt a magamnak tett ígéretemet, hogy rendszeresen írjak ide valamit. Mivel várhatóan ez a jövőben is hasonlóan bizonytalan lesz (reálisabban gondolkozva: várhatóan ez a jövőben csak romlani fog :) ), most már nem is próbálkozok efféle ígérettel.

Miért nem írok? Szerencsére nem azért, mert nincs miről írni. Például az utóbbi időben szórakoztam olyan, Eclipse-közeli dolgokkal, amelyeket megérné leírni, hogy később ne a saját kódomból kelljen visszafejteni, miért úgy csináltam. :D Arról nem is beszélve, hogy esetleg másnak is hasznos lehet.

A gondolatot folytatva könnyen eljutok odáig, hogy miért (próbálok) írni. Azért, hogy a gondolataim egy részét összeszedjem. Elsősorban magamnak, de ha van még valaki, akinek segít, annál jobb. És igen, egy bejegyzés mindig kicsit rólam is szól. Még akkor is, ha abszolút technológiaismertető vagy hasonló az egész. Más kérdés, hogy ez írás közben gyakran az én fejemben sem tiszta. De ahhoz, hogy bármit leírjak, alaposabban végig kell gondolni, mint a használatához. És ez segít az én fejemben is egy kicsit rendet tenni. Szóval megéri.

Rövidre zárva: sírást befejezem, írás lesz még, vannak konkrét ötletek (például Command framework vagy buildelés kapcsán), csak idő/energia kérdése, hogy ebből valami kisüljön. Addig is jöjjön inkább egy aktuális, Eclipse fejlesztéshez kötődő tapasztalat.

Egy fejlesztői gép: 1000$. Egy Eclipse fejlesztési környezet: ingyen. A JDT hibaüzenet alapján kitalálni, hogy az EMF modell milyen változtatása nem került fel a repository-ba: megfizethetetlen.

Avagy részletesebben: az EMF egy borzasztó jól megtervezett és integrált környezet. Olyan Java kódot generál, hogy gyorsan kitalálható, pontosan mi változott a modellben… Az én mostani esetemben például a multiplicitás változott. A hibaüzenetekből és a generált Javadocból ez gyorsan kiderült. Bár van negatív oldal is, egy konkrét idézet a generált Javadocból, amivel már az EMF környékén mindenki találkozott:

If the meaning of the ‘Replicas’ containment reference list isn’t clear, there really should be more of a description here…

Ez annyira imádnivalóan undorító. :D Tényleg csak egy smiley hiányzik a szövegből, amin keresztül a számítógép kiröhög engem, mint felhasználót, hogy ezt megetted… Bárcsak eljutnánk odáig, hogy ne az ember legyen a számítógépért, hanem a számítógép az emberért…

Mi tetszik nekem az informatikában? Az, hogy lehetőségem van emberek kezébe eszközt adni, amivel elvégezheti a dolgait. Alkotó folyamat, ami nem öncélú. Kevés felemelőbb dolog van számomra, mint alkotni valamit, amit mások tudnak használni.

Ugyanakkor ezen eszközök készítése két részből áll: van egy része, ami jól szabályozható, átlátható és specifikálható, ehhez nem kell más, mint leülni, és végrehajtani a feladatokat; valamint van egy része, ami kreativitást igényel, senki nem mondja meg, hogy csináld, miért úgy csináld, esetleg mit csinálj, hanem valahogy neked kell eljutni a még nem létező célhoz. Ez persze problémás lehet:

An undefined problem has an infinite number of solutions. (Robert A. Humphrey)

A szabályozható résszel nincs sok probléma, le kell ülni és meg kell csinálni. Más a helyzet a kreatív részével: vagy megvan az inspiráció, az ötlet, a múzsa csókja, vagy nincs. Ha megvan, jó, akkor pillanatok alatt megoldod az előtted lebegő feladatot, ha nincs meg, akkor viszont ülsz felette, és csak nézel.

És ami fontosabb kérdés: mit csinálj akkor, ha köt a határidő, szorongatnak, és nem jön az ihlet? Vagy a másik fele: mit csinálj akkor, ha megjött az évtized ötlete, megvalósítottad, és mindenki téged emel fel? És ezután elvárják tőled, hogy legközelebb is ilyen jó legyél?

Ezzel a kérdéssel foglalkozik Elizabeth Gilbert a TEDTalks előadásán. Egy író szemében a kreativitás kérdése talán fontosabb, mint nekünk, ugyanis ott sokkal korlátozottabb az a rész, amit csak meg kell csinálni. Az ő véleménye, hogy az ötleteket úgy kell kezelni, mintha azokat egy külső entit isteni lény adná – ez volt az ókori görögök és rómaiak megoldása. Ezzel ugyan siker esetén kevésbé emelik fel az embert, de a kudarc esetén sem egyedül az alkotó a felelős.

Ez egy érdekes álláspont – ugyanis a modern, “gondolkozó” ember számára azt állítani, hogy a gondolatai (amik Descartes számára az egyetlen biztos pont a világegyetemben) külső forrásból jönnek. Ugyanakkor a gondolat biztosan nem alaptalan, hiszen egy közös brainstorming remek módja annak, hogy az ember “ihlethez” jusson, és kitalálja, mit akar csinálni. És ilyen esetben sem valami abszolút logikus, levezetett álláspont kerül elő, hanem egy közös ötletgyűjtés, ami segíthet abban, hogy valami sikeres dolog jöjjön ki belőle.

Ugyanakkor, mivel az ötletek forrása nem ismert, ha az ember jobban boldogul azzal, hogy valaki külső, nem látható lényt képzel neki, akkor érdemes azt csinálni. Sok érdekes dolog kijöhet belőle. Eddig úgyis csak azt csináltam egy probléma esetén, hogy addig nézegettem, amíg valahogy meg nem láttam, mit lehet vele kezdeni.

Mindenesetre Elizabeth Gilbert megközelítése tetszik: tegyük oda magunkat, végezzük el a munka ránk háruló részét, és reménykedjük, hogy a múzsánk is megteszi a magáét. Nektek van esetleg más ötletetek az inspiráció kezelésére?

Nagyon kellemes ünnepeket kívánok mindenkinek, és részvétemet fejezem ki azok számára, akik ezt nem megkésve olvassák :D

Kis technikai váltás volt: új szerverre költözött az oldal. Ha minden jól megy, ezt senki sem vette észre, azaz sikerült nulla downtime-mal megoldani. Az egyetlen reális kockázat, hogy valaki a régi szerverre ír kommentet az átmeneti időszakban, de ezt meg éppen ezért próbáltam minimalizálni.

A költözés meglepően simán ment. Adatbázis backup régi szerveren, restore új szerveren, fájlok átmásolása, és végül az adatbázisparaméterek átállítása a konfigurációs fájlokban. Ahogy az a nagykönyvben is meg van írva.

Nem emlékszem rá, hogy lett volna bármikor ennyire sima migrációm szerverek között. Ráadásul egy Drupal költöztetéshez képest kevés adatot kellett vinni: az adatbázis két wordpress telepítéshez volt 6 MB, míg Drupal adatbázisnál egy darab elérte ezt a méretet – feltéve, hogy a cache és az indexelés a kereséshez ki volt kapcsolva. Egyébként még sokkal nagyobb. A fájlméretnél körülbelül hasonlóan teljesítenek.

Mindenesetre köszönetet nyilvánítanék mindenkinek, akinek segítsége nélkül ez a költözés sokkal gyorsabban és egyszerűbben lezajlott volna. :D

PS.: ha látod ezt a hírt, akkor már az új szerveren vagy. Ha még ezt is el tudod olvasni, nincs szükséged szemüvegre.

A múltkori, nagy sikerű írásom hatására Tompika küldött nekem egy hasonlóan izgalmas problémát.

1
2
3
4
while (true) {
Process p = Runtime.getRuntime().exec("macska");
p.waitFor();
}

A kód eredeti, Tompika kedvenc állatait, a macskákat felemlegetve. A kód elméletben a következőt kellene, hogy csinálja: az első sor a p referenciával elérhető módon indít egy processzt; míg a második sor vár, amíg a processz fut.

Ha megnézzük a kapcsolódó JavaDoc kommenteket, ez így működőképes is lehet. Ezzel szemben futásidőben problémák léptek fel, amiket feltehetőleg a következő kódrészletre való kicserélés javított:

1
2
3
4
5
6
7
8
9
while (true)
{
Process p = Runtime.getRuntime().exec("macska");
p.waitFor();
p.getErrorStream().close();
p.getOutputStream().close();
p.getInputStream().close();
p.destroy();
}

A kódrészlet utolsó sora vicces. Idézném a Javadoc kommentet:

public abstract void destroy()

Kills the subprocess. The subprocess represented by this Process object is forcibly terminated.

Amit én úgy értelmeznék, hogy a függvényt meghívva explicite lezárom a Processt. Viszont állítólag nem így történik. Valaki tudja a magyarázatot? Kíváncsi lennék rá.

PS.: ha valaki hozzájut hasonló gyöngyszemekhez, és eljuttatja hozzám, szívesen közzéteszem.