Munka és írás

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…

,

No Comments

Az inspirációról

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?

, ,

No Comments

Árnyékköpések: Food Fight

Életünk első kalandozása a Shadowrun világában, mely egy ártatlan bevásárlásnak indult, és amelyben sajnos minden NJK-nak volt neve. Featuring: Timi hangokat halló kalóza, TeoZ gremlin-elf adeptje, D-nee tárgyalóképes fegyverspecialistája, Overander figyelemelterelő covert ops specialistája, Eversong troll riggere, és természetesen Stampie, mint egykor ember KM.

JK1 (gremlins negative qualityvel): Nem csoda, hogy nincs commlinkem.
JK2: Persze, hiszen gremlin vagy.
JK1: Nem gremlin vagyok, hanem elf.

JK (rigger): Milyen messze vagyunk a kocsimtól?
KM: (hasból) …1 km-re.
JK: Pont 1 km a hatótávolságom!

JK1: Ott valaki mozog.
JK2: (miután perception testre dobott critical glitch folytán képzelődött) Én meg hangokat hallok!

JK: (NJK-król) Vagy egyszerűen nem álltak le gondolkodni.
KM: Túl sok az augmentation…

JK1: (két kétajtós szekrénnyel való harc közben) Mekkora egy szekrény sebzése?
JK2: Ez egy gyenge idegzetű szekrény.

JK: (miután elintéztük az összes ellent, de erről a karakter nem tudhatott, csak a játékos) Én felkiáltok, hogy nincs több… szerintem.

NJK: (frissen megmentve, félelemmel a hangjában) Kik vagytok ti?
JK: Shadowrunnerek, akik éppen most fejezték be első moduljukat.

Intelligencia – a telligencia ellentéte.

, ,

No Comments

Kellemes ünnepeket!

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

No Comments

Új szerveren – ismét

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.

,

No Comments

Mi a hiba a kódban? #2

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

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:

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.

,

No Comments

Egy kis fun: Pigeon impossible

Rég volt vicces kis videó az oldalon. Ennek megfelelően itt az ideje (szüneteltetve a kocka témákat), hogy egyet bemutassak. Ezért kapóra jött, hogy találkoztam a Pigeon Impossible című “kémtörténettel”. Pixar, rettegj. :D

No Comments

OpenOffice egér – avagy hogyan ne…

Kicsit megkésve (november 6-án már olvastam a dologról, csak azóta nem igazán volt időm/energiám erre is reagálni) szeretnék megemlékezni az OOMouse nevű csodáról. Ez, mint a neve is mutatja, egy egér, és az OpenOffice csomaghoz van köze.

Először is szeretném leszögezni, hogy nem az OpenOffice fejlesztőinek munkája az egér, hanem az egeret készítő cég készített nyílt forrású, OpenOffice-t támogató drivert a cucchoz. Ezt azért éreztem fontosnak, mert ugyan az OpenOffice nem az ergonomikus szoftvertervezés csúcsa, de ez messze alulmúlja azt a szintet.

A leírás első körben bizalomgerjesztő: sok gomb (18), külön joystick az egéren, különböző módok, és mindez szoftveresen testreszabható.

Viszont ezután jött a fotó az egérről: a gombok az egér tetején helyezkednek el, rács mentén elhelyezve. Mi is ezzel a gondom?

Egy egyszerű, fehér egér 18 gombbal, görgővel és joystickkel

Egy egyszerű, fehér egér 18 gombbal, görgővel és joystickkel

Egyrészt a gombok mérete feltehetőleg viszonylag kicsi: a görgő két oldalán 3-3 oszlopnyi gomb van (és gyk. 3-3 sornyi is). Ha ennyi a gomb, akkor hogyan oldják meg, hogy nehéz legyen mellényúlni?

A másik fő problémám az, ami miatt a távirányítón is megszüntették a rács szervezést: ha sok a gomb, akkor jobb, ha a gyakran használt gombok egyedi formájúak, és nagyok, mert akkor anélkül tud a felhasználó választani, hogy odapillanata, merre van (igen, a billentyűzetek “f” és “j” gombjain levő jelzés – tipikusan kidomborodás vagy bemélyedés is erre való – ezek segítségével az ember tudja, hogy hol van az ujja).

Ha megnézzük, a joystick helye is érdekes: a hüvelykujjnál, egy gomb(!) mellett. Jó kérdés, hogy ez a kilógó elem mennyire piszkálja az ujjamat, amivel az egeret kell irányítanom, illetve mennyire könnyen tudom véletlenül megnyomni. A mellette levő gomb meg érzésre teljesen használhatatlan – nem férek hozzá.

Mielőtt valaki megvádolna, hogy Apple-fanként csak egygombos egérrel boldogulok, kijelentem, hogy volt dolgom többgombos egérrel – olyan 5-6 gombig. Alapvetően nem volt gondom vele, eltekintve attól, hogy a 4-5-6. gombokat nagyon ritkán sikerült kihasználni. A tapasztalatom az, hogy a bal gomb, jobb gomb, görgő (aminek lenyomása lehet a harmadik gomb) triónál többet nagyon kevés alkalmazás támogat, és viszonylag kellemetlen is használni. Az egyetlen, aminek látnám értelmét, az 1D mozgást leíró görgő helyett valami 2D-s eszközt betenni (mint az Apple Mighty Mouse eszközében a golyó – most már Magic Mouse).

És ami a legszebb, az ára: $74.99. Vezetékkel. Ezzel szemben az Apple új, vezeték nélküli, érintőfelületű egere $69. Amit szintén sokallok azért az egérért… De ez már az én egyéni, szociális problémám.

Amikor a múltkor felhasználói felületekről írtam, akkor is hasonló mennyiségű kritikát írtam – de szemben azzal ez a kritika határozottan negatív.

Összességében: az egér elképesztően bonyolult. Sok gomb, sok mód, sokféle operációs lehetőség. A szoftverét nem láttam, az lehet, hogy a legkirályabb cucc a szeletelt kenyér óta, de a hardverről egy képet látva nagyon nem bizakodom.

Körkérdés: kedves olvasók, ti látjátok értelmét ennek a 18 gombos egérnek?

,

1 Comment

Eclipse GEF wtf

Az előző kitérő után most térjünk vissza egy kis kocka témához. A minap érdekes felfedezést tettem, miközben véletlenül a GEF belső kódjába tévedtem debug közben. Alapvetően egyébként meg vagyok elégedve a GEF és általában az eclipse platform minőségével, ritka az az eset, hogy a fejemet fogom egy-egy megoldás láttán.

A következő kódrészlet ugyan működik és mivel a publikus api elrejti, az átlag fejlesztő nem találkozik vele, mégis érdemes rávetni egy pillantást. További szócséplés helyett következzék a kód, szerintem magáért beszél:

//AbstractEditPart.class

private Object[] policies;

//...

/**
 * @see EditPart#installEditPolicy(Object, EditPolicy)
 */

public void installEditPolicy(Object key, EditPolicy editPolicy) {
    Assert.isNotNull(key, "Edit Policies must be installed with keys");//$NON-NLS-1$
    if (policies == null) {
        policies = new Object[2];
        policies[0] = key;
        policies[1] = editPolicy;
    } else {
        int index = 0;
        while (index < policies.length && !key.equals(policies[index]))
            index += 2;
        if (index < policies.length) {
            index++;
            EditPolicy old = (EditPolicy)policies[index];
            if (old != null && isActive())
                old.deactivate();
            policies[index] = editPolicy;
        } else {
            Object newPolicies[] = new Object[policies.length + 2];
            System.arraycopy(policies, 0, newPolicies, 0, policies.length);
            policies = newPolicies;
            policies[index] = key;
            policies[index + 1] = editPolicy;
        }
    }
   
    if (editPolicy != null) {
        editPolicy.setHost(this);
        if (isActive())
            editPolicy.activate();
    }
}

Akinek nem világos elsőre, kifejteném a problémát: láthatóan egy tömböt használ a java-ban alapértelmezésként elérhető “Map” funkcionalitásának a kiváltására. A tömb páros (és nulladik) helyén szereplő elem tárolja a kulcsot, az utána lévő páratlan helyen lévő elem az érték.

Minden elem hozzáadásakor dinamikusan növeli a tömb méretét, törléskor meg egyszerűen null-ra állítja a tömb megfelelő elemét. Ehhez még társul egy custom iterátor is, ami a tömb nem null elemeit listázza.

Őszintén nem értem a tervezési döntést, ami a tömb-alapú Map-hez vezethetett. A memóriaigénye a HashMap-nek nem sokkal több, és mivel jellemzően kis elemszámú esetek fordulnak elő, ez nem számottevő. A sebessége a HashMap-nek jobb, a “get” és “put” metódusok általános esetben konstans, de mindenképpen kevesebb a tömb végigjárásánál. Mindennek a tetejébe a fenti kód Map alkalmazásával kb. 3 sorra cserélhető, nem beszélve az osztály egyéb kódjáról, ami a tömböt piszkálja.

Egyetlen érthető mentségként csak arra tudok gondolni, hogy esetleg a kód korábban íródott, minthogy a java collections API-ba belekerült volna a Map. Ez viszont az 1.2-es verzióban történt meg, tehát elég régen. Nem tudom mennyi idős a GEF, így ezt nem tudom eldönetni.. Mindenesetre ez a kód nálam megütötte a WTF szintet.

, ,

2 Comments

És mégis leng az inga…

A sok elborult, kocka téma után most egy kicsit könnyedebb vizekre eveznék. Ez nagyjából azt jelenti, hogy a következő írást úgy tervezem, hogy ne csak informatikusok számára legyen érthető (noha ők meglehetősen furcsa okokból nem hemzsegnek az oldal olvasói között).

Kicsit nehezen kezdek hozzá, ugyanis még könyvet nem ajánlottam ezeken a hasábokon – pedig olvastam párat, köztük olyat is, amit tényleg érdemesnek tartok arra, hogy többen olvassák. Ami mondjuk hasznos lenne, hiszen egyre kevesebbet olvasunk.

Viszont a mostani könyvajánlatom nem fog ezen segíteni, ugyanis Umberto Eco Foucault-inga című műve kifejezetten ijesztő: csaknem 800 oldal, nem nagy betűkkel szedve, kemény táblával. De szemben a múltkor emlegetett Ügyféllel itt tartalom is van mellé: Eco professzor úr igen hosszadalmas kutatómunkáját (is) tartalmazza ez a könyv, benne a templomosokról, rózsakeresztesekről és hatalmas rejtett titkokról.

Ha van Terv, akkor minden mindennel összefügg. Ha van Terv, akkor nem kétséges, mi közük a templomos lovagoknak a hasszaszinokhoz, az alkimistáknak a párizsi metróhoz, a titokzatos Saint-Germain grófnak Shakespeare-hez, a rózsakereszteseknek Arsène Lupinhez, a druidáknak az Eiffel-toronyhoz, a Föld forgását bizonyító Foucault-féle ingának… Kihez-mihez is?

Ha van Terv, minden kiderül.

Mi is ez a Terv? Sokat nem mondanék róla, valamit a könyvnek is érdemes meghagyni, de röviden annyit tehetnék hozzá még, hogy negyvenkettő. Azaz a Terv mindent leír, ami a történelmünkben az elmúlt néhány száz évben történt. És a lehetőségekhez képest mégkonzisztens módon is.

Az értékelésem szükségképpen szubjektív, részrehajló vagyok. Én kedvelem a történelmi regényeket, szintúgy azokat a könyveket, amiben a természetfeletti erők is előkerülnek, de azért emberközpontúak maradnak. Ha ehhez még titkok is társulnak, és a főszereplőkkel még azonosulni is tudok, akkor borítékolható, hogy jól érzem magam olvasás közben.

  • Nem rossz – mondta Belbo. – Engem viszont ez a piramisokról szóló ötszáz oldal, ez nem hagy nyugodni.Tudták-e, hogy a Kheopsz-piramis pont a harmincadik szélességi fokon áll, és hogy az a szélességi kör szeli át a legtöbb szárazföldet? És hogy a Kheopsz-piramisnak ugyanazok  a geometriai arányai, mint az amazóniai Pedra Pintadának? És azt, hogy Egyiptomban két tollas kígyó is volt: az egyik Tutankamon trónján, a másik pedig a szakkarai piramison, és ez Quetzalcoatlra utal?
  • Quetzalcoatl a mexikói pantheon tagja. Mi köze neki Amazóniához? – kérdeztem.
  • Mit tudom én, valamit biztos kihagytam. […]

Érdemes lehet megfigyelni, hogy noha összeesküvéselméletekből van bőven a könyvben, a szerző megmarad a tudományos elfogadott módszerek mellett, azaz lehetőség szerint mindent támasszunk alá tényekkel, de legalábbis más művekkel. Jó ez?

Egy biztos: olyan mennyiségű forrásra hivatkozik menet közben, hogy a végén levő függelék kicsit kevés – csak kilenc oldal. Kevésszer fordult eddig elő, hogy egy könyv olvasása közben totál műveletlennek éreztem magam, de itt szinte folyamatosan ez az érzésem volt. Kevés olyan könyv van, ahol egyszerre kap szerepet a Rózsakeresztes kiáltvány, a Gergely-féle naptárreform, kombinatorika (némi programozással együtt) és a Föld forgását kísérleti úton kimutató Foucault-inga.

Szerencsére mindenhol elég pontosan megnevezi a forrásokat – még az elborult, “ördöngös” könyveket is. Így viszont eléri azt, amit nagyon sok könyvnek nem sikerül: hitelesség.

Mindezek mellett a könyv részletesen meg van tervezve: a fejezeteket tíz szakaszra osztotta, amelyeket a szefirák mentén oszt be. Azok kedvéért, akik nem tudnák, mik azok a szefirák (közétek tartoztam a könyv olvasása, illetve az értékelés írása előtt), a héber kabbalisztika tíz állomása a megvilágosodás felé. Emellett a fejezeteket rövid, kapcsolódó idézetek vezetik be.

Ugyanakkor fontosnak tartom megemlíteni, hogy a könyv nem kalandregény, semmilyen formában. Leginkább fejlődésregény: megmutatja, hogyan érti meg Doktor Casaubon a világ legfőbb titkait.

És itt jön az a pont, ahol találkozik a könyv a szakmai érdeklődésemmel is: megmutatja, hogyan lehet leírni a világot egy jól definiált rendszerben. Gondolom, informatikusok/szoftverfejlesztők ismerik ezt a feladatot – ezt rendszeresen kell csinálnunk. Jó tudatosítani az ilyesmit.

És mi különbözteti meg a regény összeesküvéselméleteit a tényleges igazságoktól? Ne akarjuk a hibákat is tökéletesen modellezni. Ha van két, az összes adatunkkal konzisztens hipotézisünk, válasszuk az egyszerűbbet. Meglepően sokszor használható.

Lassan lezárva gondolataimat azzal fejezném be ezt az írást, hogy mindenkinek sok szeretettel ajánlom Eco professzor úr könyvét elolvasásra, a könyv elejéről Raymond Smullyen mottóját idézve:

A babona bajt hoz.

Az idézetek az Európa Kiadó 1992-es magyar nyelvű kiadásából származnak.

, , ,

No Comments