451 Fahrenheitnyi gázlángolás

Egyesek a következő bejegyzést kissé (vagy akár nagyon) öntömjénezősnek, vagy akár felvágósnak is gondolhatják, hiszen ahhoz, hogy elmondhassam azt, hogy mennyire fura érzés is keringett, kénytelen leszek előtte arról is beszélni, hogy pontosan milyen könyveket olvastam előtte (amelyek legjobb tudomásom szerint kellően keveset olvasottak ahhoz, hogy ez akár feltűnő is lehessen). Ez persze nem akadályoz meg abban, hogy összeszedjem a tényeket és az érzéseket, és meghagyom a közönségnek a lehetőséget arra, hogy ezt értékelje kedve szerint (beleértve azt is, hogy meglátja a hosszát, és ennyit nem hajlandó elolvasni még a barbárokra várva sem).

A történethez tudni kell, hogy a tény, hogy azonos novellák különböző válogatásokban is megjelennek, nem feltétlenül vagyok a hívük. Feltehetőleg a M.A.G.U.S-kiadványok a 2000-es években sokat segítettek ebben az álláspontnak az elérésében, hiszen ott simán megcsinálták, hogy egy új novella mellé kiadtak egy kötetnyi ismétlést. A mostani esetben messze nem ez a helyzet, hiszen egy több, mint száz novellát tartalmazó válogatás adta az ihletet az egészhez, amiből nagyjából három vagy négy darabot olvashattam eddig, de az elvek akkor is megvannak.

A VanderMeer házaspár több tematikus “big book” antológiát készített már, a mai poszt motivációját a XX. század sci-fi írásait gyűjtő “The Big Book of Science Fiction” adta.

Kellemes, hogy ez ekönyv változatban van meg, láttam már papíron is, már csak a súlya miatt sem kényelmes fogni.


Hogy ennyi bevezető után a témába vágjak, az antológia kifejezetten hosszú bevezetőjét olvasva (amely már utalt az érintett novellára, és akkor merült fel először bennem, hogy ismerős lehet), majd egy a történethez nem tartozó novellán áthaladva eljutottam Rokheya Shekhawat Hossain bengáli írónő Sultana’s Dream című, 1905-ös novellájáig1. A szerző bemutatásának a végére teljesen megérett bennem a tudat, hogy ezt már olvastam, de pár perc gondolkodás után sem sikerült rájönnöm, hogy hol, így módszert váltottam.

A keresést megkönnyítette, hogy több, mint tizenöt éve naplózom az olvasásaimat a moly.hu oldalon, és novelláskötetek esetén 2018 végétől használom a részolvasások funkciót, hogy egyesével jelöljem a gyűjteményes kötetek elemeit is. És biztos, hogy nem olvastam 2018-nál régebben, figyelembe véve az olvasási szokásaimat. Innentől kezdve, ha rákeresek a novella címére, fel kellene bukkannia az eredménynek.

Ahogy a fenti képen látni lehet, a dolog nem jött be, egészen biztosan nem olvastam azokat a könyveket, amiknek a címében szerepel a cím, Galaktikát sem, a The Big Book of Science Fiction az, amit éppen most olvasok (és ez mutatja, hogy a kereső megtalálja a tartalomjegyzékben is), és a Classic Science Fiction Stories esetében sem olvastam.

Ok, aki ismer, tudja, hogy nem adom fel ilyen könnyen a dolgokat, ezért elkezdek gondolkozni, hogy mi lehet még. Megvan, a moly.hu-n a könyveket gyakran az olvasók töltik fel (én is szoktam), és elképzelhető, hogy aki feltöltötte, nem vitte fel a tartalomjegyzéket, valamint az is elképzelhető, hogy olvasáskor én sem akartam vele szórakozni.

Következő ötlet, szűrjük az olvasmánylistámat addig, amíg át nem tudom nézni az eredményt manuálisan. Első lépés, szűrjünk a novella címkére, 138 könyv, ez még szivárványnak is súlyos, szűrjük tovább, tegyük hozzá az angol nyelvű címkét is, így már csak 84 darab, szűrjük le antológiákra is, így már csak negyven darab maradt, ez már átnézhető. Egyik sem talált, semmi gond, lehet, hogy félrecímkézés volt az antológiáknál, nézzük át azokat a novellásköteteket is, amik nem antológiák, a 44 darabot már meg tudom nézni kézzel (remélhetőleg nem lesz ez dupla csapda). Sajnos ez sem jött be. A linket megosztani nem tudom, csak bejelentkezés után érhető el bárki számára, de megmutatom a képernyőfotót, hogy látható legyen, mit is csináltam.

Talán feltűnt az előző bekezdésekben, hogy elég sokat írok a moly.hu rendszeréről, nem véletlen, jónak és hasznosnak találom, jól lehet használni, szépen végiggondolt felülete van és kellően sok tartalom is van fent ahhoz, hogy működhessen. Ez persze engem nem vezetett eredményre, így más módszereket kellett kipróbálni.


A következő gondolatom az volt, hogy minden valószínűség szerint elektronikus könyvben olvastam, így kihasználhatom a Kindle és a Calibre keresőjét arra, hogy megtaláljam a szövegben. A Kindle esetén ez úgy működött, ahogy elvárnám, a Calibre esetén egy kicsit furcsábban sikerült a dolog.

Ahogy a felületen látni lehet, a Calibre is tartalmaz beépített keresőt, de sajnos ha a keresőmezőbe beírok bármit (például a novella címét, ahogy sárgával kiemeltem a fotón), az csak a metaadatokban (cím, szerző, címkék, stb.) keres, a tényleges szövegben nem. Aztán egy gyors keresés előhozta, hogy a keresősáv bal oldali részén van egy FT feliratú gomb, amire kattintva feljön egy dialógus, amiben teljes szövegbeli keresést is lehet végezni (Full-Text search, király…).

Ez egy kis kitérő volt, de gondoltam, ezt az információt is megosztom, részben önös célokból, ugyanis a dolgok felírása segít nekem memorizálni azt, részben kicsit altruistaként is, hiszen talán másnak is hasznos lehet (mondjuk kizárt, hogy egy ekkora szöveg közepén ezt meg fogja találni, de ez már legyen az ő problémája).

Nem sikerült itt sem megtalálni a forrást, de sikerült felhívnia a figyelmet arra, hogy lehet, hogy az előző két olvasmányélményem viccelhet meg.


Ez praktikusan úgy történt, hogy a keresés bedobta a legutolsó olvasott regényemet, az “If on a winter night a traveler“-t.

Első találkozásom Italo Calvino olasz íróval az “If on a winter night a traveler” (magyar fordításban “Ha egy téli éjszakán egy utazó“, az én virtuális kezem ügyébe az angol fordítás került), amely bő kétszáz oldalon egy tucatnyi történetvázlatot dob fel, ezzel is görbe tükröt állítva a könyvmolyok és úgy általában a könyvipar fonákságai iránt, miközben mélyen elgondolkoztat minket arról, hogy mit is jelent a könyv, illetve úgy általában az igazság.

Are you also dreaming of the petroliferous Sultana?2

A tényleges kontextus alapján sok köze nincsen ahhoz, amit kerestem, de sikeresen kitérített az eredeti keresésemtől, és egy teljesen másik nyúlüregbe vezetett le. Ezen leugrásban sokat segített egy másik, szintén frissen olvasott novelláskötet, Jorge Luis Borges Ficciones című novelláskötete is.

Jorge Luis Borges novelláskötete egy kifejezetten szürreális élmény, a műfaji kavalkádból, amit a rövid történetek adnak, emberi sorsokról, élményekről beszélve. Ami miatt mindenképpen kapcsolódik az előbb leírtakhoz, a kötetben szereplő pár nem létező könyvről írt irodalmi igényességű bírálat.

I’ve become so accustomed to not reading that I don’t even read what appears before my eyes. It’s not easy: they teach us to read as children, and for the rest of our lives we remain the slaves of all the written stuff they fling in front of us.3

Mindkét kötet ugyancsak próbára teszi az embert azt illetően, hogy mi is egy könyv, egy történet, mi az igazság. Mit gondolhatunk arról, hogy ha valamit leírva látunk, az igaz-e. Ha emlékszünk egy olvasmányra, akkor az tényleg úgy volt-e, ahogy emlékszünk, illetve más ugyanazt olvasta-e. Illetve ha valaki beszél egy olvasmányélményéről, az valóban létezik-e. Az, hogy én emlékszem rá, hogy a Szultána álmát olvastam, az valós-e. Valamint léteznek-e a Quebec függetlenségéért küzdő tolókocsis bérgyilkosok?

„In a riddle whose answer is chess, what is the only word that must not be used?”
I thought for a moment. “The word ‘chess,”‘ I replied.4


Természetesen, ha felmerül a kérdés, hogy egy ilyen novella esetén nem lett volna kevesebb munka egyszerűen csak újra elolvasni az egészet, mint ezt az egész szélmalomharcot végigcsinálni, nem is beszélve a blogposzt megírásáról, van egy egyszerű válaszom. Újra elolvasni a történetet nagyjából tizenöt perc lenne, ennél lényegesen többet töltöttem a kereséssel, a poszt írásáról nem is beszélve. De itt most elvekről beszélünk, ami egy teljesen más mértékegység. Arról nem is beszélve, hogy remek prompt motivációt adott rá, hogy végre írjak ide is valamit, és ezáltal esetleg más is szembesüljön azzal, hogy milyen hülyeségekre van időm.

Ez a poszt természetesen sokkal összeszedetlenebb lett, mint eredetileg gondoltam – a racionális énem rögtön elkezdi elemezni, hogy van-e magyarázat, és arra jöttem rá, hogy a keresés lépéseinek bemutatása valamint magukhoz a szövegekhez kötődő érzéseim leírása egybe sok, inkább szét kellene szedni. Nem is beszélve azokról a könyves utalásokról, amit a szövegben nem túl kifinomult módon megpróbáltam elrejteni. De ezen a ponton a józan eszem megvédése céljából inkább kiszállok, elvégre az én blogom, az én szabályaim. Az értékelést meg meghagyom az utókornak.


Utószó: végül ennyi vad nyomozás után elolvastam (újraolvastam?) a történetet, és az első oldal közepén Sister Rose neve felbukkanásakor újra bevillant, hogy ezt én már olvastam valamikor. Azt hiszem, inkább megvizsgálom a kollégáim elegáns névjegykártyáit, mielőtt hosszú álomba merülnék, majd fél tízkor egy mechanikus naranccsal biliárdoznék az üvöltő szelek otthonában a varázshegy tetején József és testvéreivel.

  1. A történet egy álmot ír le (ki hitte volna a cím alapján?), amelynek a hőse átkerül egy különös világba, ahol a férfiak és a nők szerepei felcserélődtek, így több lehetőség volt a tudományos előrehaladásra, ami sokkal több boldogságot hozott a társadalomnak. Természetesen nem ennyire felszínes az olvasmány, de most nem a pontos tartalmáról szeretnék beszélni, ezért inkább javaslom elolvasni az érdeklődőknek. Tanulságos látni, hogy száz éve mit gondoltak a jövő társadalmáról a feministák. ↩︎
  2. If on a winter night a traveler, 105. oldal ↩︎
  3. If on a winter night a traveler, 49. oldal ↩︎
  4. Ficciones, 85. oldal, The Garden of Forking Path ↩︎

Ganymede fejlesztés Java 6-tal OSX-en

Elég sok időt töltöttem már azzal, hogy Java 6 alapú fejlesztést lehessen végezni [intlink id=”570″ type=”post”]Eclipse-szel és OSX-szel[/intlink].

Az alapprobléma az volt, hogy egyszerre kellett 32 (az SWT Carbon API-ja kötelezően 32 bites) és 64 biten dolgozni (mert a Java 6 kötelezően 64 bites). Szerencsére ezt a fejlesztők is belátták, és elkészítették az SWT Cocoa portját (ami mellesleg nem lett rossz, de ez nem ennek az írásnak a témája).

Eredmény: némi varázslás után 3.5-ös Eclipse-szel lehetett Java6-ra fejleszteni (a varázslás nem ártott, de erről szintén nem most írok). De ez bizonyos esetekben nem elég. Például, ha az ember kénytelen 3.4-es Eclipse-szel is kompatibilis maradni, és ezt még ellenőrizni is szeretné.

Ez, és az apróbb problémák a 64 bites Java 6-tal győztek meg végül arról, hogy kb. egy hónappal a megjelenés után frissítsek Snow Leopardra. Elvégre abban van 32 bites Java 6 is, ezért elvileg mennie kellene a dolognak. Sőt, csak Java 6 van a rendszerben, szóval ez még jobb.

Na, Ganymede indul, szépen megy is. Összegyűjtöm a tesztelendő projekteket, és indítanám a runtime workbenchet, mire közli velem, hogy a Carbon SWT nem működik a 64 bites JVM-en. No comment.

A szokásos trükkjeimet ilyen esetekre végigpróbáltam, eredmény teljes kudarc, mígnem  az ESE konferenciáról beszámoló blogbejegyzés kommentjében Kevin Barnes leírja a megoldást: a VM-nek a -d32 paramétert átadva 32 bites JVM-et indít.

És ez tökéletesen működött. Szuper.

PS.: jellemző Eclipse probléma, hogy a megoldás triviális, csak megtalálni nehézkes. De legalább most már tudom, hogyan lehet 32 bitre force-olni a JVM-et.

Hibakeresés: LaTeX ábrafelirat probléma

Nemrég volt szerencsém egy idegesítő LaTeX feature-höz (ugye nem bug, hanem feature). Miután visszafejteni a hiba okát elég macerás volt, ezért gondoltam, megosztom itt is.

Megkérdezték tőlem, van-e ötletem, mitől lehet az, hogy egy ábra hivatkozásánál a számot miért jeleníti meg teljesen más stílusban, mint a többi ábrahivatkozást, ill. mint az ábra feliratát. A probléma úgy jelentkezett, hogy Figure 9. számú ábra (ez az elvárt formátum), míg a hivatkozása Figure 4.4 formátumban jelent meg.

A hivatkozásokat a LaTeX vissza tudta fejteni, semmiféle hibaüzenet nem jelent meg, csak rosszul jelent meg a sorszám. Nagyon látványos hiba sem volt a kódban, többszöri átolvasás után (lényegében hasonlóan nézett ki, mint a többi ábrabeillesztés).

Megpróbálgatva kihagyni elemeket, áthelyezni a kritikus ábrát, illetve hivatkozást sikerült rájönni, hogy a LaTeX valami miatt a fejezet/szakasz-számot jeleníti meg az ábra sorszáma helyett.

Innen már egy gyors Google megadta a megoldást: http://www.leancrew.com/all-this/2008/09/latex-figure-captions/ , ill. az oldalon keresztül a következő lap: http://en.wikibooks.org/wiki/LaTeX/Labels_and_Cross-referencing#Fixing_wrong_labels

A megoldás lényege a következő: semmilyen körülmények között ne legyen a [cci_latex]\label[/cci_latex] címkeparancs a [cci_latex]\caption[/cci_latex] feliratparancs elé. A feliratparancs belsejébe vagy a feliratparancs utánra nyugodtan kerülhet.

A végére beszúrok egy javasolt mintát kép beillesztésére, ami ezt a hibát elkerüli (a forrás a TeXlipse plug-in sablon gyűjteménye:

[cc_latex]\begin{figure}[htp]
\begin{center}
\includegraphics[width=${figureWidth}]{${filename}}
\caption[${labelInTOC}]{${figureCaption}}
\label{${figureLabel}}
\end{center}
\end{figure}[/cc_latex]

A TeXlipse editor ezt a mintát automatikusan beilleszti, ezért nekem nehéz ezt a hibát elkövetnem, de másnak még hasznos lehet. Remélem, van, akinek a megoldás megosztásával

Margók a LaTeXben – grafikusan

A LaTeX egyik legbonyolultabb része a margók kezelése. Pláne, hogy a beállításait relatív módon kell megadni.

Ahhoz, hogy ezt kényelmesebben lehessen csinálni, hasznos tudni, hogy mik az aktuális beállítások. Ebben próbálok segíteni azzal, hogy röviden leírom a [[http://www.mackichan.com/index.html?techtalk/501.htm~mainFrame|MacKichan Software Inc.]] honlapján látható gondolatot röviden összegzem itt is.

A LaTeX egyik legbonyolultabb része a margók kezelése. Pláne, hogy a beállításait relatív módon kell megadni.

Ahhoz, hogy ezt kényelmesebben lehessen csinálni, hasznos tudni, hogy mik az aktuális beállítások. Ebben próbálok segíteni azzal, hogy röviden leírom a MacKichan Software Inc. honlapján látható gondolatot röviden összegzem itt is.

Nehéz pontosan meghatározni, hogy mekkora méreteket használ a LaTeX a kimenet generálásához, ugyanis az függ a dokumentum típusától, a lapmérettől, attól, hogy egy- vagy kétoldalas és még ki tudja, mi mindentől.

Éppen emiatt a bonyolult függések miatt egy táblázatba összeszedni sem feltétlen használható megoldás.

Viszont erre is van automatikus megoldás, ami a fordítótól kérdezi meg. Egészen pontosan ez a layout csomag. A működés egyszerű: felvesszük a csomagot a preambulumba:

\usepackage{layout}

Majd a szövegbe beírjuk a következő parancsot:

\layout

Ennek hatására a LaTeX legenerál egy oldalt, amin felsorolja a paraméterek aktuális értékeit, valamint egy ábrát, hogy könnyebben át lehessen látni, hogy pontosan mi mit jelent. Egyszerű, nagyszerű.

Azért a végleges dokumentumból szedjük ki.:D

Resource fájlok eclipse plugin extension-ben

Aki fejlesztett már Eclipse PDE felett, az talán találkozott a lehetőséggel, hogy egy extension point tulajdonság típusa lehet “resource” is. Ez annyit tesz, hogy a kiterjesztésben megadhatunk egy, a plugin-nel csomagolt fájlt. De a másik oldalon, az extension point beolvasásakor hogyan is olvassuk ezt be? Hiszen fogalmunk sincs honnan jött, melyik plugin adja az extension-t, és hol keressük a fájlt. A megoldás nem triviális, és kell egy kis kutatást végezni, hogy rájöjjünk. Én ezt megtettem, és igyekszem közérthető formában továbbadni.

Aki fejlesztett már Eclipse PDE felett, az talán találkozott a lehetőséggel, hogy egy extension point tulajdonság típusa lehet “resource” is. Ez annyit tesz, hogy a kiterjesztésben megadhatunk egy, a plugin-nel csomagolt fájlt. De a másik oldalon, az extension point beolvasásakor hogyan is olvassuk ezt be? Hiszen fogalmunk sincs honnan jött, melyik plugin adja az extension-t, és hol keressük a fájlt. A megoldás nem triviális, és kell egy kis kutatást végezni, hogy rájöjjünk. Én ezt megtettem, és igyekszem közérthető formában továbbadni.

A probléma, kicsit formálisabban: adott egy extension point, melyen egyik attributúma resource típusú. Mikor egy plugin extension-t csatol ehhez a ponthoz, az adott attríbutúmnak úgy ad értéket, hogy a programozó kiválaszt egy fájlt, amit a pluginnel együtt csomagolva ad. Az extension point-ot adó plugin pedig az ilyen módon regisztrált fájlokat szeretné beolvasni.

Amikor beolvassuk ezt az értéket az extension-ből, a fájl relatív elérési útvonalát kapjuk meg a plugin csomagjában. Első feladatunk tehát, megtalálni a plugin csomagot ([[http://www.osgi.org/javadoc/r4v41/org/osgi/framework/Bundle.html|Bundle]]), ahonnan az extension jött, hiszen abban kell keresni a fájlt is. Ha megvan a csomag, kérhetünk tőle egy URL-t a fájlhoz. A kapott URL azonban nem szokványos, “bundleresource:” előtaggal rendelkezik. Korábban létezett egy asLocalUrl() függvény, ami az ilyen jellegű URL-t hivatott átalakítani abszolút “file:” URL-é. Azonban ez a függvény a 3.2-es verzióban @Deprecated megjegyzést kapott, tehát ez nem a megfelelő mód a megnyitásra. Szerencsére azonban az ilyen URL-ekhez implementálták az URL.openStream() metódust, ami nyit egy megfelelő adatfolyamot a számunkra. Kicsit egyszerűsítve a kód valahogy így néz ki:


//Listázzuk az extension point-hoz csatolt extension-öket:
IExtensionRegistry registry = Platform.getExtensionRegistry();
IExtensionPoint point = registry.getExtensionPoint("ExtensionPointID");
for (IExtension extension : point.getExtensions()){
//Így kell lekérni az extension-t adó plugin csomagot:
Bundle bundle = Platform.getBundle(extension.getNamespaceIdentifier());
for (IConfigurationElement element : extension.getConfigurationElements()){
//A csomagon belüli relatív elérési út:
String path = element.getAtribute("resourceAttrib");
URL url = bundle.getResource(path);
InputStream is = url.openStream();
//...Olvasás...
}
}