Új formátum!

Ahogy lehetséges tapasztalni, új formátumot kapott szerény weboldalam. Mostantól blog formátumban lehetséges random információkat összegyűjteni róla, szervezetlen és általában érdekes fogalmazású bejegyzések véges sok halmazából.

Minden eddigi tartalom megtalálható, és a rendszer link-szinten backwards compatibilis. Senki nem szereti, ha hirtelen egy iterátor a kezében megszűnik értelmesnek lenni, így a linkeket is próbálom nem elrontani.

Az AsciiDoc blog

Páran, akkikkel sokat beszélek, többek között területi közelség miatt, bizonyosan tudják, hogy a preferált text alapú markup nyelvem az AsciiDoc. Nem annyira flexibilis, mint a LaTeX, de jelentősen egyszerűbb kezelni, és erősebb, mint a Markdown és egyáltalán nem komplikáltabb használni.

De most nem azért vagyok itt, hogy az AsciiDoc csodáit prédikáljam, még.

Miért nem jó a Markdown?

Markdownnal ellentétben, aminek különféle frontmatter és egyéb külsős “Static Site Generator” rendszerekre van szüksége, hogy egy blogot össze lehessen dobni vele. Ráaudásil mire nagy nehezen összetákolja emberünk a blogját, hogy minden, a címektől kezdve a kereszthivatkozásokig rendesen működjön, és megnézi a végereményt: azt tapasztalja, hogy úgy néz ki, mintha egy '80-as évek beli csecsemő diszkózás közben ráokádott volna a képernyőjére. Máshogy megfogalmazva, szarul.

Ezt elkerülvén lehetséges véges sok témát letö ellopni az internetről az eredetileg választott generátorunkhoz, de végeredményben nem fog sikerülni, olyat találni, amelyik ténylegesen tetszik. Itt kezdődik, hogy fájunk.

Nyilván az interneten vagyunk, így a barátságos, egyáltalán nem mutálódott és még szemüveg nélkül is egyértelműen látható, hogy véletlenül sem valamilyen nem evilági módon fogyatékos HTML, CSS, és JavaScript trió birodalmába vergődtünk. Ilyenkor, a (még) épelméjű bloggerjelölt feladja, és megy valami hasznosabbat csinálni az életével egy olyan blognál, amit úgy sem olvasott volna senki. Viszont azok, akik már eleget láttak a világból, és valahogy már érezték, hogy nem lesz ez az egész olyan egyszerű, elkezdenek CSS-t írni, és megvalósítják nagyratörő terveiket. Nem ezt tettem.

Léteznk azonban olyanok, akik hagyják az egészet, de belátják, hogy véletlenül sem az ő hibájukból következett be a jelenlegi status quo, csak a rajta kívülálló 7 milliárd ember közül senki sem képes jól kinézú dolgokat csinálni. Emiatt elgondolkoznak, és a problémát gyökerénél próbálják megoldani: Markdown nem többoldalas, komplex, ide-oda-keresztbe referenciákkal tűzdelt weboldalak készítésére lett kitalálva. Írni egy README.md-t, valami projekthez, amit összesen a GitHub rendererének kell tudnia értelmeznie és jó esetben 2 egész ember megnézi (ebből egy az írója, feltéve, hogy nem vak), általában teljesen megfelelő, de annál többre nem igazán alkalmas. Olyan mint a C, meg lehet oldani vele mindent, de miért akarnál a preprocesszorral generikus adatszerkezeteket csinálni, ha C++ literálisan ingyen ad több, mint egyet és valószínűleg jobb is, mint, amit képes lett volna valaki összetákolni (C-ben valószínűleg egy láncolt listát kaptunk volna, amiről ugye mindenki tudja, hogy nem csinálunk olyat).

Itt lép be AsciiDoc. A szabványba építve tartalmaz, mindent, amit kell, ahhoz, hogy egy tényleges többoldalas, kereszthivatkozásokat tartalmazó blogot tudjunk létrehozni, ami több implementáció között átvihető.[1]

Fél megoldással előrrébb

Ha beletörődünk a keserű sorsunkba, hogy markdown túl együgyű ahhoz, hogy egy szinguláris fájlt tartalmazó dokumentumnál többet nem nagyon tudunk vele egyszerűen összerakni, és elismerjük, hogy AsciiDoc minden problémát megold, akkor már gyakorlatilag a megoldás kapujában állunk, csak nem látjuk a csengőt.

Az asciidoctor program több kényelmes opciót biztosít számunkra, hogy egy értelmes, és jól kinéző készterméket tudjunk biztosítani, anyukánknak, amikor megnézi mit csinált legkedvesebb kisfia. Ezek közül nekünk most a modern HTML5 backend az érdekes, ami képes valamire, amire sok minden más, például érettségiről ismert legkedvesebb barátunk a KompoZer nem: egy csupán 14 éve megjelent szabványnak megfelelő kódot generálni.

Ezt eddig is tuduk a tetszőlegesen megválasztott Markdown static site generátorral. Miért lennénk előrébb? A gyenge pont, amit ki tudunk küszöbölni, a kereszthivatkozások, amik, valahogy, valamiért, valahol minden generátornál, amit próbáltam, még mielőtt megtértem eltörtek.

Emelett sikerült az internet vad mezőiről egy MIT licencszel rendelkező, másnéven legálisan ellopható, témát találni, amit lehetséges annyira konfigurálni, hogy azt, amit most látsz kaphasd belőle. Kicseréli az ember a betűtípust IBM Plexre, a színsémát TokyoNightra, és nyert ügye van.

Viszont azt mondtam, hogy nem látjuk a csengőt. Miért? (Nem, rajtunk van a szemüvegünk.) Bár egy elég menő program az asciidoctor, egyszerre nem képes egy egész webblogra való forrást lefordítani. Így valahogy organizálni kell a buildünket, hogy minden oldal leforduljon. Ráadásul, jó informatikus tulajdonsággal rendelkezve lusta vagyok, így nem sok kedvem van egyesével minden cikk után frissíteni a főoldal összes cikk paszekcióját, még annyira se, hogy “Majdnem minden bejegyzés” legyen a címe. Így hát automatizálni kell.

Embereknek eszükbe juthat, hogy makekel ugranak neki a problémának. Ezeknek az embereknek ajánlanám, hogy egy pszichológus segítségét kérjék, hogy kigyógyítsa őket az erősen önpusztító mazochizmusból. (Nem feltétlen lenne probléma, ha nem egy teljesen általános megoldást BSD/GNU makere akar az ember megírni. Ez erősen nem triviális, de erről most nincs időm mesélni, mert van egy időpontom, ahonnan nem igazán kéne elkésnem.)

Ha a make túl komplikált megoldást tud felajánlani, akkor rántja elő az ember a különböző imperatív szkriptnyelveket, és implementálja egy részhalmazát make képességeinek. Python, Ruby, Perl, Bourne Shell, Tcl, Lua, awk, akármi, amit el lehet futtatni egy modern PC-n minden szóba jöhet, csak ne kelljen Makefileokat írni. Én Perlt szedtem elő, mint kedvenc szkriptnyelvemet. Ezután fogtam, és újraimplementáltam make featuresetjének egy részhalmazát.

Ilynekor jött segítségül AsciiDoc. Mivel a nyelve előre definiált módon léteznek attributumok, ezért nem szükséges különféle frontmatter és hasonló implementációkra hagyatkozni, hogy metadatát tudjak rakni egy dokumentumba. Így implementáltam egy gyors parsert, ami beolvasta egy asciidoc fájlból az összes attribútumot, majd ezt felhasználva megadtam azt a metadatát, ami alapján már el tudtam automatikusan készíteni az összes bejegyzések listáját.

Ezt mind összerakva kaptam egy olyan szkriptet, ami minden nem friss HTML fáljt legenerál a megfelelő AsciiDoc forrásból, és képes egy olyan listát készíteni, ami normális formátumban meg tudja jeleníteni a blog bejegyzéseket. Ezt olvasod most.

Utólagosan szeretnék elnézést kérni mindenkitől, aki ezt a folyékony, tiszta szarkazmust végigolvasta. Már nekem fájt átolvasni, hogy mit írtam. Tényleg, tölthette volna sokkal jobban az idejét. De köszönöm. Megtisztelő, hogy az én hulladékomat olvasta, nem másét. :)


1. Ez utóbbi csak elvileg előny, tudtommal egy implementáció létezik jelenleg, így nincs nagyon hova átelemni a dolgokat.