Az alexandriai könyvtár és a 3-2-1 mentési elv

Az alexandriai könyvtár az ókor legnagyobb könyvtára volt, az i.e. 3. században alapították. Több százezer, elsősorban görög nyelvű iratot őrzött, ezek között nagyon sok görögre fordított, eredetileg más nyelven íródott vallásos szöveg, történet vagy tudományos írás is volt.

A könyvtár tehát az akkori világ tudásának legnagyobb birtokosa és őrzője volt. Az emberiség legnagyobb kulturális vesztesége, hogy a könyvtár végül teljesen megsemmisült. Több ízben is érte komoly katasztrófa, hogy végül hogyan tűnt el végleg, abban nincs egységes álláspont.

Még szomorúbb, hogy a könyvtár éppen azzal a céllal is épült, hogy amiről csak lehet, másolatot készítsenek az írnokok, így próbáltak egy minél teljesebb gyűjteményt felhalmozni. Mondhatjuk, hogy ami akkoriban írásos formában fellelhető volt, arról volt másolat a könyvtárban. Még egy óriási katalógus is készült a könyvtárban tárolt tömérdek iratról és könyvről.

A tudomány, a vallás és a kultúra elképzelhetetlen mennyiségű és minőségű tudást veszített el a könyvtár pusztulásával. Ennek sajnos a legfontosabb oka az volt, hogy az akkori világ fejlettségének megfelelően gyakorlatilag csak pergamen felhasználásával készültek a könyvek, ami könnyen és gyorsan ég. De ha lettek volna agyagba vésett szövegek, vagy fémtekercsekre rótt iratok, azok is szétszóródtak és eltűntek vagy megsemmisültek volna a történelem viharaiban, a könyvtárt ért többszöri támadás és pusztítás következményeként.

Sajnos nem ez volt az egyetlen példa az emberiség kultúrkincseinek brutális elpusztítására. A képrombolás során ikonok, szobrok, festmények, faragások estek áldozatul a vallási fanatizmusnak, több alkalommal is. És ne felejtsük el, a XX. században is voltak könyvégetések, és bár ezek is brutális, emberhez méltatlan tettek voltak, de nem okoztak pótolhatatlan károkat.

De térjünk vissza az alexandriai könyvtárhoz. El lehetett volna kerülni a pusztulást? Valószínűleg nem. Meg lehetett volna őrizni a könyvtár legalább egy részét, a legfontosabb iratokat? A válasz: igen. A Szentírás könyvei, az Ószövetség, az Újszövetség, az apokrif iratok azért is tudtak fennmaradni, mert folyamatosan másolták a szövegeket, és a példányokat igyekeztek minél több helyre elvinni. A tartalom megőrzésének legjobb módja a másolás és terjesztés. Ma már persze könnyű ezt leírni, hiszen digitális formában pillanatok alatt másolhatók és terjeszthetők az egyes könyvek, iratok. De hogy valóban biztonságban
vannak-e digitális kincseink, az már nem ennyire biztos.

Nagyon sokan tárolják a nehezen összegyűjtött digitális információt, fényképeket, videókat, könyveket az okostelefonjukon, tabletjükön, asztali számítógépük merevlemezén, pendrive-on, vagy éppen a mostanában divatos felhő alapú tárhelyeken. Aztán történik valami, és a felhasználó hirtelen rádöbben, hogy az egyetlen helyen tárolt féltett és utólag be nem szerezhető kincseiből semmi sem maradt. Ennek oka az, hogy a digitális információ rendkívül sérülékeny, és ezt bizony nagyon kevesen tudják.

Én magam kétszer is szembesültem azzal, hogy milyen pillanatok alatt képes a digitális információ megsemmisülni, egyszer a tápegység tett tönkre két merevlemezt egyszerre a gépemben, ebből az egyik a másik mentéseit is tartalmazta, egy másik alkalommal a szőnyegen volt az 500 gigabyte-os mobil winchesterem, miközben másoltam rá, elkezdtem meglocsolni a virágaimat, és amikor leléptem a székről, sikerült rátaposnom az éppen működő eszközre. A tokot nem ekkora terhelésre méretezték, elég volt annyira behajolnia, hogy a mozgó fejek hozzáérjenek a mozgó tányérhoz, és az eszköz egy pillanat alatt tönkrement, rajta közel 500 gigabyte-nyi anyaggal. Aki dolgozott már életében 1.2 megabyte-os floppy lemezzel, vagy 20 megabyte-os merevlemezzel, az tudhatja, hogy itt százezerszeres mennyiségű adatról van szó.

Mindkét esetben az mentett meg a teljes adatvesztéstől, hogy már akkor alkalmaztam a 3-2-1 mentési elvet, ami tulajdonképpen ennek az írásnak a fő témája. Azért tartottam fontosnak erről írni, mert nagyon sokszor láttam azt, hogy a digitális technikát használók mennyire természetesnek tartják azt, hogy ami most a rendelkezésükre áll, az a jövőben is biztonsággal elérhető lesz. És mint írtam, eleven példák bizonyítják, hoyg ez mennyire nincs így.

Mi is ez a 3-2-1 elv? Az adatainkról 3 mentést kell készíteni, ebbe nem értendő bele az eredeti adat, tehát összesen 4 példányban kell meglennie minden általunk fontosnak vélt adatnak. Miért? Láthattuk, hogy esetemben egy tápegység nemcsak az eredeti tartalmat, hanem annak mentését is tönkretette, tehát ha csak egy mentésem lett volna, akkor nagyon nagy bajba kerültem volna.

A mentéseket legalább 2 féle adathordozóra kell elkészítenünk, például egy merevlemez és egy felhő alapú mentés, vagy egy merevlemez és optikai lemezek (CD, DVD, Blu-Ray, M-Disc), nagyobb szervezetek használnak szalagos egységeket is többpéldányos mentésre. De menthetünk pendrive-ra is, de tudnunk kell, hogy egy pendrive is elérhetetlenné válhat egy pillanat alatt, én is találkoztam már ilyennel, néhány írási hiba után, egyszer csak már nem tudjuk csatolni az eszközt, az operációs rendszer már nem ismeri fel, a tartalom eltűnik.

Végül az 1: egy példány a mentési készletből legyen más, lehetőleg minél távolabbi helyen tárolva. Nagy cégeknél lehet olyan előírás, hogy több száz kilométernek kell lennie a tárolási helyek között. Ez nyilván egy otthoni környezetben túlzás lenne, de az, hogy a merevlemezeket külön szobában tartsuk, az már alapkövetelmény.

Vegyünk példaként egy nagy amerikai céget, rengeteg ügyfél-, és egyéb üzleti adattal, alkalmazzák a 3-2-1 elvet, a mentéseiket több kilométerre egymástól a tengerparthoz közel alagsori helyiségekben tárolják. Aztán jön egy hurrikán, ami elönti mindkét tárolóhelyet. Ha szerencséjük van, a lemezek tartalma még megmenthető, ha nincs szerencséjük, akkor a cégük csődbe került, hiszen nem tudják folytatni a munkát.

Otthoni könyezetben érdemes kijelölni egy mester példányt, ez lehet az egyik mobil winchester, amit vészhelyzetben magunkkal vihetünk. De ha még óvatosabbak vagyunk, és arra az esetre is fel szeretnénk készülni, ha éppen nem vagyunk ott, amikor a baj megtörténik, akkor a legfontosabb forrásainkat, képeinket, írásainkat internetes tárolóhelyre is lementjük. Ebben az esetben érdemes titkosítani a tartalmat, olyan jelszóval, amire még álmunkban is emlékezni fogunk. És természetesen az internetes tárolóhely elérhetőségét, és az ahhoz tartozó jelszót is fejben kell tartanunk.

A 3-2-1 rendszer sem tökéletes, vannak olyan helyzetek, ilyen például egy háborús támadás, ez éppen napjainkban vált kézzelfogható veszéllyé, ebben az esetben tehetetlenek vagyunk. De például egy hatalmas napkitörés, ami minden elektronikus eszközt tönkretehet, az M-Disc-en tárolt adatainkban valószínűleg nem fog kárt okozni. De nekünk nem is a rendkívüli helyzetekre kell készülnünk, hiszen akkor van egyéb fontosabb dolog is az adataink biztonságánál, hanem az általában, sőt gyakran előforduló esetekre, meghibásodásokra. Ezek kivédésére, az adatvesztés elkerülésére pedig a 3-2-1 rendszer megfelelő.

Hogyan kapcsolódik a mentési rendszer az alexandriai könyvtárhoz? Képzeljük el, hogy az akkori könyvtáros ismerte és felmérte volna a könyvtárat fenyegető veszélyeket, és ismerte volna a 3-2-1 mentési elvet. Ekkor létrehozhattak volna Alexandrián kívül, minél messzebb, mondjuk a brit szigeteken egy másik könyvtárat, minden szövegből lett volna két-két példány
mindkét könyvtárban, és a másolatok egyike agyagba égetve, vagy fémlemezekbe karcolva, vagy kőtáblákra vésve maradt volna meg az utókornak. De talán még a 3-2-1 elvnél is jobb lett volna, ha a vírusok által használt technikát használják, minél gyorsabban, minél több példányt, minél nagyobb területen kell elterjeszteni.

Ha bármelyik mentési, megőrzési módszert valóban használták volna, fel nem tudjuk mérni, mennyivel lenne gazdagabb most a vallás, a tudomány, a kultúra, az emberiség. Kezünkben lehetnének a legősibb írások a világ teremtéséről, az özönvízről, olvashatnánk 6-8 ezer éves szövegeket, vagy azok másolatait, talán a legelőször írásba foglalt Ószövetség is a kezünkben lehetne. Közvetlen beszámoló a trójai háborúról, Atlantiszról, talán még a Földünket meglátogató idegenekről is lenne néhány beszámolónk.

Sajnos, az alexandriai könyvtár már csak egy időgép segítségével lenne rekonstruálható teljesen, de ennek igen kicsi az esélye, hiszen egy időgép olyan paradoxonokat generálna, amik miatt valószínűleg soha nem építhető ilyen szerkezet.

Így viszont nincs más lehetőségünk, mint elfogadjuk, hogy az emberiség már örökre elvesztette az alexandriai könyvtárat, olyan tartalmakkal, amiket már soha, de soha többé nem tudunk újra alkotni.

Brett Sayles fotója a Pexels oldaláról

Kérdezed

Tudom, te is sokszor kérdezed,
az életnek mi az értelme,
miért a szenvedés, fájdalom,
háború, gyermekek félelme.

Ezzel én is így vagyok, és
tudni szeretném érdemes-e.
De tudod, nem a mi dolgunk
eldönteni, jó-e, hogy itt vagyunk,
jó-e, hogy az életen gondolkodunk,
mert akkor jössz rá igazán,
mit ér az élet, ha fáj és küzdelmes
már minden egyes lélegzet, ha boldog vagy
csak attól is, hogy megélted a következő percet.

Aidan Roof fotója a Pexels oldaláról

Hogyan írjunk Blu-Ray M-Disc lemezeket?

Amikor először olvastam arról, hogy az M-Disc tárolási technika 1000 éves adattárolást garantál, akkor azt mondtam magamban: “Ha ebből 30-40 év valóban igaz, akkor nekem szükségem van erre a technológiára. Valójában olyan optikai tárolási módról van szó, ahol a lemezek hordozóanyaga az, ami ilyen különleges adatmegőrzési képességet biztosít.

Ideális arra a célra, hogy az 1987 óta összegyűlt számítógépes forráskódjaimnak, szövegeknek és egyéb olyan adatnak gyűjtőhelye legyen, amit más forrásból nem lehet visszanyerni, ha esetleg az eredeti állományokkal történne valami. Körülbelül 20 gigabyte-nyi adatról van szó, pontosan elfér egy Blu-Ray M-Disc lemezen.

Előkészületek

Két egyszerű dolgot kellett volna tudnom, mielőtt hozzákezdtem volna az archiváláshoz:

1. Nem minden M-Disc Blu-Ray.

Rákerestem az Interneten az M-Disc író eszközökre, és meg is rendeltem nagyjából 10 000 Ft-ért egy ASUS M-Disc írót. Nem is lett volna ezzel semmi baj, csak, amikor beletettem egy Blu-Ray M-Disc-et, akkor jelezte, hogy ő ezt a típust nem tudja kezelni. Igen, mert ő M-Disc lemezek kategóriájában csak a DVD lemezekhez értett. Akkor döbbentem rá, hogy DVD is lehet M-Disc, hiszen az M-Disc az adathordozó típusára utal, és nem a lemez méretére. A DVD M-Disc viszont (igaz hogy hosszú tárolási idő mellett,) de csak 4.7 gigabyte-os kapacitású.

Vennem kellett egy igazi Blu-Ray írót, olyat, ami kezeli az M-Disc-et is. Nagyjából 40 000 Ft-ért meg is vettem egy Verbatim Blu-Ray hordozható írót, ami ugyan Pioneer márkájúnak vallja magát, de végül is az is egy ismert márka. Az íróhoz járt egy Nero CD-DVD-Blu-Ray író program, nem a legfrissebb és nem is a legjobb program, de hát a semminél jobb.

Verbatim Blu-Ray M-Disc kompatibilis külső USB író

2. Nem minden Blu-Ray M-Disc.

Ez akkor derült ki, amikor azt láttam, hogy vannak 50 gigabyte-os, sőt 100 gigabyte-os Blu-Ray lemezek is, ez utóbbiak ára kicsit magas, de a dupla rétegű és méretű lemez elég jó áron hazavihető. Aztán jöttem rá, hogy ezek a Blu-Ray lemezek nem M-Disc technológiájúak, hiszen a dupla réteg nem valósítható meg azzal a hordozóanyaggal, ami az M-Disc megbízhatóságát adja.

Összegezve: ha forráskódot, dokumentumokat, saját írásokat szeretnénk hosszú távra megőrizni, akkor használjuk az M-Disc Blu-Ray lemezeket, 25 gigabyte kapacitással. Ha nagyobb hordozóra van szükség, de nem szükséges a szélsőséges tárolási idő, akkor a Blu-Ray minden kategóriája jó. Különösen szerencsés, hogy újraírható Blu-Ray lemez is van (persze ez sem M-Disc), ezek a kísérletezéshez nagyon kellenek, majd meglátjuk, miért.

Az első mentések

Összeállítottam a kiírandó anyagot, kitakarítottam a felesleget, és azon nyomban megírtam egy 50 gigabyte-os lemezt. Ezekből is vettem, de ezek ugye nem M-Disc-ek, de ha már ott voltak, miért ne írjak ki rá mindenfélét. Egyszer írhatóak, tehát nem kell félni attól, hogy később véletlenül törlöm a tartalmat.

Amikor az ember felír egy adathordozót, azt elhelyezi egy biztonságos helyen, de ha valamit le akar róla olvasni, akkor tudnia kell, hogy mi is van pontosan a lemezeken. Ezért érdemes a számítógépre egy megfelelő helyre készíteni egy listát a “dir /s” paranccsal, a kimenetet egy állományba átirányítva.

Ekkor ért a meglepetés (az első): a lista túl hamar elkészült, és rögtön láttam, hogy nem a teljes tartalom szerepel rajta. Rájöttem, hogy egy bizonyos alkönyvtár mélység alatti alkönyvtárak üresek, és amikor a dir parancs ezekhez ér, nem tud tovább listázni, és kilép.

Ugyanakkor a lemez túlnyomó része rendben volt, közvetlenül elérhető volt az egész lemez, csak ugyebár listázni nem lehetett, és bizonyos, túl mélyen lévő alkönyvtár struktúrák hiányoztak.

A kutakodás

Vajon milyen korlát érvényes ezekre a lemezekre. Hamar rájöttem, hogy csak az ISO9880+Joliet kiterjesztés a jó választás, a többinek igen kellemetlen korlátai vannak, viszont a Joliet-ről is csak annyit tudtam meg, hogy 8 alkönyvtárnál többet is megenged. Hogy pontosan mennyit, arról mélyen hallgat mindenki. Aztán az kezdett el érdekelni, hogy vajon a Nero miért nem jelezte, hogy túl mély a könyvtár struktúra?

Kipróbáltam jó néhány programot, és ehhez nagyon jól jöttek az újraírható lemezek, mert amikor kiderült, hogy megint csak hiányoznak könyvtárak, le tudtam törölni a lemezt az új kísérlethez. Ekkor jött a második meglepetés: egyik író program sem jelezte a problémát a könyvtárakkal kapcsolatban. Még olyat is próbáltam, hogy előbb ISO állományt készítettem, azt csatoltam fel, és arról próbáltam dir listát kérni, újra csak nem futott végig a program. Nem az írókkal volt egyedül probléma, az ISO készítő programok is elbuktak a teszten.

A következtetés

Rá kellett döbbennem, hogy ez egy olyan probléma, aminek hivatalos, jó megoldása nincsen, az egyetlen járható út, ha a felírás előtt mindenki maga gondoskodik róla, hogy maximum 12 könyvtár mélységű legyen az adatszerkezet.

Sebaj, keressünk olyan programot, ami kiírja a maximális alkönyvtár mélységet, kilistázza a túl mélyen lévőket, és esetleg még javítja is ezeket. A törlésen kívül a másik logikus megoldás, hogy a mélyen lévő alkönyvtárat egy zip állományba tömörítjük a szülő könyvtárban, majd az eredetit töröljük, így az adat is megmarad, és a struktúra is jó lesz.

Harmadik meglepetés: jelenleg mindenféle bash és powershell szkripten kívül nincs olyan Windows program, ami képes lenne erre a mutatványra, hogy egy kiírandó adatállományról véleményt mondjon, érdemes-e Blu-Ray, DVD vagy CD lemezre írni.

A köztes megoldás

Amikor kiderült ez a probléma, gondoltam, betömörítek mindent zip-pel, és úgy írom ki, ekkor nem lehet probléma az alkönyvtár mélység korlát. Amikor azonban az első 2 gigabyte-nál nagyobb zip-hez érkezett a Nero a kiíráskor, akkor közölte, hogy ez már túl nagy ennek a lemezformátumnak (negyedik meglepetés, de legalább szólt a program). Újra kellett tehát mindent tömöríteni, úgy, hogy minden könyvtár zip állománya 2 gigabyte-nál kisebb legyen, ahol ez nem jött össze, ott megmaradt a könyvtár, és az alkönyvtárait tömörítettem egyenként. Ahol ismét túl nagy volt a létrejött zip, ott egy szinttel lejjebb megismételtem ugyanezt az eljárást, vigyázva persze, hogy 12-nél mélyebben ne legyen könyvtár.

Kiírtam ebből a változatból 2 db 50 gigabyte-os Blu-Ray lemezt, ami már dir-rel természetesen listázható volt. De ugye ez nem volt M-Disc, és ha valamire szükség volt, akkor azokat előbb a zip file-okból ki kellett venni, de ez azért nem olyan nagy probléma. És mivel a tömörítés miatt kevesebb volt a kiírandó adat mérete, sok olyasmit is kiírtam így, amit eredetileg nem terveztem, ez talán a pozitív hozadéka ennek a módszernek.

A jó megoldás

Természetesen nem nyugodtam meg, tudtam, amíg nincs egy-két tökéletes 25 gigabyte-os M-Disc archívumom, életem eddigi összes alkotásáról, addig nem hagyom abba a kísérletezést.

Ekkor ért az egyetlen pozitív meglepetés: rábukkantam a https://raywoodcockslatest.wordpress.com/2016/02/25/counting-the-number-of-subdirectory-levels/ web oldalon arra a megoldásra, ami bár munkaigényesen, de zseniálisan oldotta meg a problémámat.

Készítsünk egy listát az archiválandó könyvtárról a “dir /s /ad /b” paranccsal. Ebben a listában csak a könyvtárak (alkönyvtárak) lesznek benne, a file-ok nem, és csak a nevük, semmi egyéb.

Másoljuk ki a listát a vágólapra, nyissunk egy új Excel táblát, majd az A1 mezőbe illesszük be a listát. Lesz egy hosszú A oszlopunk. A B1 cellába írjuk bele:

=HOSSZ(A1)-HOSSZ(HELYETTE(A1;”\”;””))

Láthatjuk a zseniális megoldást, ami nekem nem jutott volna eszembe, és amiért meg is dicsértem a szerzőt egy kommentben. Az alkönyvtárak számát a “\” jelek száma alapján határozza meg, ezt pedig úgy éri el, hogy az eredeti név hosszából kivonja annak a névnek a hosszát, amiben a “\” jeleket törli, a hossz különbség pontosan a “\” jelek számát adja a névben, ez pedig megadja, hogy hány alkönyvtár van abban az elérési útban.

Ezután csak a formulát kell az összes sorra bemásolni, erre van egy kényelmes Excel megoldás, kétszer kell kattintani a cella jobb alsó sarkában megjelenő jelen, és az Excel a cellákba bemásolja a formulát, addig a sorig, ahol még nem üres az A cella. Ezután csak rendezni kell a táblát a B oszlop szerint csökkenő sorrendben, és máris kiderül, hogy esetemben például 17 volt a legnagyobb szám. Megkerestem az első 12-es sort, elé betettem egy üres sort, hogy tudjam, mely könyvtárakat kell kiigazítanom.

Elég hosszú kézi munka következett, mert volt, amit törölni tudtam, mert nem volt fontos, de volt, amit zip-pel tömörítettem, és csak utána töröltem, hogy azért megmaradjon. Ezt nem tudtam semmilyen programra rábízni.

Mondanom sem kell, többször is neki kellett futnom, de amikor a végső ellenőrzés már azt mutatta, hogy 12 van az Excel tábla legelső sorában, akkor már tudtam, hogy indulhat az írás.

Így készült el a 2 tökéletes 25 gigabyte-os M-Disc, amin életem eddigi alkotómunkájának eredménye található, hiánytalanul, és ami vélhetőleg 1000 évig használható is lesz.

Nehéz volt eddig eljutni és kijózanító is egyben látni, hogy mennyire elnagyoltak és hiányosak ezek a megoldások, hogy nincsenek leírások, egyértelmű specifikációk, hogy a web áruházak mennyire csekély információt adnak egy-egy eszközről, cikkről, hogy mindennek úgy kell utánajárni, és van, amire még az Internet sem mindig ad megoldást.

És jó, hogy vannak segítőkész emberek, akik zseniális megoldásokat adnak olyan problémákra, amiknek nem is lenne szabad létezniük. Jelen esetben az író eszköznek kellett volna jeleznie a problémát az írás előtt, és ha rákattintok a Help menüre, akkor nem a cég web oldalára kellene mennie, ahol semmilyen információ nincs, hanem közölnie kellene a fellépő hiba okát, nevezetesen azt, hogy túlléptem a 12-es alkönyvtár mélység korlátot.

Végül sikerrel és rengeteg tanulsággal zárult a projekt, de a számítástechnika jelenlegi állapotát illetően egyáltalán nem vagyok nyugodt és elégedett.

És ha lesz időm, elkészítem azt a Windows programot, ami egy könyvtárstruktúrában meg tudja találni, majd ki is listázza az egy bizonyos mélységben, vagy az alatt lévő könyvtárakat, és természetesen a programot közkinccsé is fogom tenni, hogy másnak ne kelljen azt végigjárni, amit nekem kellett.

A profit éhség egyre inkább a minőség és a professzionalitás ellen hat, és hogy ennek milyen mélyen van a határa, arra nem olyan könnyű rátalálni, mint a Joliet file-rendszer kiterjesztés 12-es mágikus számára.

25 gigabyte-os Blu-Ray M-Disc

Programnyelvek és típusok

A Debra programnyelv tervezése közben természetesen előkerült a talán legfontosabb tervezési kérdés: szigorúan típusos, vagy dinamikus legyen a nyelv, esetleg a kettő keveréke? Erről már írtam korábban többször is, most újra összefoglalom a legfontosabb tudnivalókat.

Kétféle programnyelv van: a szigorúan típusos és a dinamikus típusos. Esetleg olyan megoldás is lehet, hogy az egyik típusba tartozó nyelv közeledni kezd a másikhoz és kevert nyelvi konstrukciókat alkalmaz (ilyen megoldás a “dynamic” típus bevezetése a C# nyelvbe).

Szigorúan típusos: deklarálni kell a változók típusát, vagy explicit módon vagy értékadással, ilyenkor az értékből derül ki a típus (nem egyértelműség esetén utótagokkal segíthetünk (L, F, … a C#-ban). Az osztályok mezői is szigorúan deklaráltak. A legfontosabb megkötés az, hogy a változó típusa nem is változhat, a változó élettartama idejére ugyanaz marad, más értéktípust nem rendelhetünk hozzá (kivétel float = int, string = char).

Az ilyen nyelvekben a függvény, eljárás definíciókban is meg kell adni a formális paraméterek típusát, függvények esetében a visszatérési érték típusát is. Ez nehézkesnek tűnhet a dinamikus nyelvekhez képest, de amikor többféle argumentumlistával rendelkező, ugyanolyan nevű függvényekről, eljárásokról van szó, a szigorú típusosság segíti a fordítót abban, hogy kiválassza a legjobban illeszkedő függvényt.

A dinamikus nyelvek legnagyobb előnye, hogy menet közben változhat egy-egy változó típusa, értékadásonként, és nem kell ezt eldönteni a definiálásnál, azaz kevesebb kódot kell írni, a kód rövidebb, áttekinthetőbb lesz. Ugyanakkor ez hátrány is lehet, amikor felüldefiniált (túlterhelt) függvényeket szeretnénk írni, ezt ugyanis dinamikus nyelv esetében nem tehetjük meg, csak akkor, ha különbözik az azonos nevű függvények argumentumszáma. Azonos nevű, egyenlő számú formális paraméterrel rendelkező függvények közül, a fordító nem tud választani, a különböző típusú paramétereket a függvény kódjában, futási időben kell megoldanunk. Egy alternatíva lehet, ha segítjük a fordítót, és adunk típust a formális paramétereknek, de ebben az esetben is futási időben dől el, hogy melyik függvény fog lefutni. Dinamikus nyelvek esetében úgy tűnik, a legjobb megoldás, ha az azonos nevű, azonos számú paraméterrel rendelkező függvények esetében a függvények nevében elhelyezünk valamilyen, az argumentumok típusára utaló jelzést, így a fordító fordítási időben is tud választani az azonos nevű függvények közül.

A legfontosabb különbség a kétféle nyelv között az, hogy szigorúan típusos nyelveknél a típus összeférhetetlenségi hibák már a fordítási időben kiderülnek, a dinamikus nyelveknél ezek a hibák a futás közben jönnek csak elő. Azaz, dinamikus nyelven sokkal könnyebb a programírás, de sokkal nehezebb a hibakeresés. Minden értékadás, függvényhívás egy-egy potenciális hibaforrás, statikus nyelveknél, ez mind előkerül a fordításkor.

Külön meg kell említenünk a tömbök esetét: statikus nyelveknél meg kell mondanunk, hogy a tömb milyen típusú elemeket tartalmaz, és minden tömb csak azonos típusú elemeket tartalmazhat. Dinamikus nyelveknél egy-egy tömb, különböző típusú elemeket is tartalmazhat ugyanabban a tömbben, ami jól jöhet, ha adatbázis rekordokat akarunk beolvasni gyorsan és egyszerűen egy kétdimenziós tömbbe, ahol a sorok olyan tömbök, amiknek az elemei különböző típusúak, az adatbázis egyes mezőinek megfelelően. A tömb feldolgozása viszont futási időben lassabb lehet, és a típusok egyeztetése futási hibákat okozhat a legváratlanabb helyeken.

Statikus nyelvekben is lehet olyan tömböket készíteni, amiknek nem azonos típusúak az elemei, de ekkor elveszítjük a szigorú típusosság minden előnyét.

Foglaljuk most össze, a kétféle nyelv tulajdonságait, különös tekintettel arra, hogyan lehet a kétféle megközelítést keverni, ezzel rugalmasabb nyelvet létrehozni.

Statikus nyelvek:

– minden változónak és függvény argumentumnak definiálni kell a típusát

– könnyen megvalósítható a függvény felüldefiniálás, az azonos nevű függvények közül a fordító választja ki a megfelelőt

– a tömbök csak azonos típusú elemeket tartalmazhatnak, a típust meg kell adni a tömb definiálásánál

– lassabb a kód írása, és az nagyobb is, nehezebben olvasható

– a típusegyezőségi hibák már fordítási időben kiderülnek, de a fordítás lassabb

– jóval kevesebb hiba fordulhat elő futási időben, egyszerűbb a hibakeresés, a futás gyorsabb

– akkor érdemes ilyen nyelvet használni, ha jól definiált a környezet, és a programot sokáig szeretnénk használni

Hogyan lehet dinamikus elemeket bevezetni: a legegyszerűbb, ha bevezetünk egy olyan típust, ami éppen azt jelzi, hogy az ilyen változó bármilyen típusú értéket tartalmazhat (ilyen a “dynamic” is) . A függvények is kaphatnak ilyen argumentumokat, és a tömbök is lehetnek ilyen típusúak, azaz az elemeik bármilyen típusú értéket felvehetnek. Természetesen ezzel elveszítünk minden előnyt, amit a statikus nyelvek biztosítanak, és minden típusellenőrzési művelet, futási időre marad. Nagyon nagy előnye ennek a módszernek, hogy csak akkor vesszük elő, ha tényleg szükség van rá. A fordítóban benne kell lenni a képességnek az ilyen kód kezelésére, de ha nem használjuk, a lefordított programban nem lesznek váratlan típus-kompatibilitási hibák, és a futás is gyors lesz.

Dinamikus nyelvek:

– minden változónak és függvény argumentumnak bármilyen típusú értéke lehet

– a függvény felüldefiniálás csak a különböző argumentumszámú függvények esetében lehetséges, egyébként a névben szerepeltetni kell valamilyen, az argumentumtípusra utaló megkülönböztető jelzést

– a tömbök különböző típusú elemeket is tartalmazhatnak ugyanabban a tömbben is

– gyorsabb a kód írása, az rövidebb, könnyebben olvasható

– a típusegyezőségi hibák csak futási időben derülhetnek ki, a fordítás gyorsabb, de a futás sokkal lassabb

– jóval több hiba fordulhat elő futási időben, nehezebb a hibakeresés

– akkor érdemes ilyen nyelvet használni, ha rugalmas a környezet, és a programot csak alkalomszerűen, esetleg csak egyszer szeretnénk futtatni

Hogyan lehet statikus elemeket bevezetni: a fordítottját kell tennünk annak, amit a statikus nyelveknél elmondtunk. Ha nem adunk meg típust, marad a dinamikus működés, ha a definiálásnál, a függvény argumentumok megadásánál típusnevet is szerepeltetünk, akkor a fordító már tudja ellenőrizni a típus-kompatibilitást fordítási időben is. Ha egy tömbnek határozott típust adunk, akkor a tömb csak ilyen elemeket tartalmazhat. Ha a függvény argumentumok határozott típusúak, akkor máris lehetséges az egyértelmű függvény felülírás.

Következtetés: mindkét típusú programnyelv bővíthető olyan eszközökkel, amelyekkel gyakorlatilag egyenértékű nyelvek hozhatók létre. Ha az elsődleges cél a gyors fejlesztés, akkor legyen a nyelv dinamikus, és egészítsük ki statikus elemekkel. Ha a cél a precízebb, kevesebb futási hibával fenyegető nyelv készítése, akkor az legyen statikus, és tegyünk később bele dinamikus elemeket. Nincs tehát kibékíthetetlen ellentét a kétféle nyelv között.

A Debra nyelv megvalósításához a gyorsabb haladás érdekében a dinamikus változatot fogom használni, ezzel gyorsan tudunk egyszer használatos programokat, prototípusokat, kísérleti programokat készíteni. Majd jöhetnek a statikus definíciók, amivel végül egy teljes értékű nyelv lehet a Debra, ami így már rendelkezni fog mindkét típus előnyeivel, és kiküszöbölheti a hátrányokat is, a programozó dönthet, hogy milyen módszerrel programoz, az eszköz tartalmazni fogja mindkét módszerhez az eszközöket.

Ezzel olyan nyelv jöhet létre, ami egyszerre rugalmas, gyors fejlesztésre alkalmas eszköz, másrészt precíz, hibamentes programozásra is alkalmas lesz.

Athena fotója a Pexels oldaláról

Miért jó az ingyenes könyvkiadás?

A kérdés valójában az elektronikus eszközökön olvasható könyvek, az e-könyvek esetében merülhet fel, a nyomtatott könyvek kiadása és terjesztése jelentős anyagi ráfordítással jár, és komoly terjesztői hálózat nélkül nem is működik. Ez esetben ingyenes könyvkiadással csak akkor érdemes foglalkozni, ha rendelkezünk az anyagi erőforrásokkal, és a terjesztéshez is van eszközünk.

Az e-könyvek esete egészen más. Az elkészítés csak időbe kerül, elég hozzá egy szövegszerkesztő, egy PDF konvertáló, és egy epub formátumot előállítani képes program. Ilyen programok ingyen és legálisan elérhetőek az Interneten. Sőt, az e-könyv készítésről is van már ingyenesen olvasható e-könyv, így a gyakorlati megvalósítással sem lehet problémánk, ezek a könyvek részletesen bemutatják az e-könyv készítés menetét.

Természetesen egy író, vagy költő először nem arról álmodik, hogy majd ingyenes könyveket fog kiadni, hanem azt gondolja, majd csak talál olyan kiadót, aki átvállalja a nyomtatás, tárolás, terjesztés költségeit, cserébe a haszon nagy részét megkapja, de azért a szerzőnek is marad annyi bevétele, hogy neki is megérje ez a fajta könyvkiadás.

Van aztán a másik módszer, a szerzői kiadás, és ez az, ami nem működik, legalábbis az én esetemben nem vált be. Szerződtem egy kiadóval, aki megjelentette az e-könyvemet, ami a legnagyobb meglepetésemre nem fogyott egyáltalán. Gondoltam, egy print-on-demand kiadás hátha jobban beválik, ilyenkor csak akkor nyomtatják ki a könyvet, ha vásárló jelentkezik.

Az e-könyv kiadása nem került pénzbe, egy akció volt éppen a kiadónál, ezt használtam ki. Más volt a helyzet a print-on-demand verzióval, itt már fizetnem kellett, de az összeg nem volt megterhelő egyáltalán, vállalni tudtam, abban a reményben, hogy a könyvemet végre venni fogják. Ezután fizettem még reklámújságban megjelenésért is, de ez sem hozott vásárlókat.

Megkerestem a kiadót, hogy mi lehet a probléma, és próbáltam rájönni, hogy ők miért nem reklámozzák a könyvet, hiszen az eladások révén ők is részesednének a haszonból. Megtudtam, hogy a szerzői kiadás lényege, hogy mindent a szerzőnek kell vállalnia, legalábbis, ami a reklámozást, népszerűsítést illeti. Ők annyit tesznek, hogy néha előállnak egy-egy újabb fizetős reklámakcióval, ami persze csak viszi a pénzt, de vásárlót nem hoz.

Aztán a LinkedIn-en keresztül is próbáltam segítséget kapni, a legtöbb, amit elértem, hogy konzultálhattam egy könyvkiadással is foglalkozó „brand-építő”-vel, aki sok mindennel bíztatott (ami pénzbe is került), de konkrét eredmény nélkül. Próbáltam a közben kialakított LinkedIn hálózatomon keresztül is, az ismerősökhöz eljuttatott könyvajánlókkal, még válaszokat sem kaptam.

Az utolsó csepp az volt, amikor a kiadóval folytatott vitám közben, egy email-ben ajánlottak egy web-oldalt, ahol egy „szakértő” elmélkedéseit lehetett olvasni, és podcast anyagokat is lehetett volna hallgatni. Eddig már nem jutottam el, ugyanis az oldal tetején ezt olvastam: „Azt javaslom minden könyvkiadónak, hogy elsőkönyves szerzővel ne foglalkozzon, …”.

Ez egyrészt nagyon rosszul esett, másrészt arra gondoltam, ha mindenki így gondolkodott volna a könyvnyomtatás megszületése óta, akkor soha nem adtak volna ki egyetlen könyvet sem.

Persze nagyon fontos megjegyezni, hogy a science-fiction novelláskötet, amit írtam, nem könnyű olvasmány, szűk réteghez szól, elsősorban elgondolkodtató, filozofikus, mint szórakoztató. Akik a fantasy könyvekhez, meg a szuperhősös filmekhez szoktak, azok nyilván nem az ilyen könyveket keresik. Mégis úgy éreztem, nekem is kell, hogy helyem legyen a könyvpiacon, ha nem is a több ezer példányos sikerkönyvek, de legalább a néhány száz példányos igényes művek között.

Aztán a véletlen segített. Illetve, úgy is fogalmazhatnám, hogy természetfölötti segítséget kaptam. Otthonról dolgoztam majdnem másfél évig, és a szokásosnál több szabadidőm volt, így minden nap ráértem legalább egy félórát meditálni. Aztán láttam egy videót is az automatikus írásról, és rájöttem, hogy hát ezt én régebben aktívan műveltem is.

És elkezdtem az írást. És az automatikus írás nem novellákat hozott ki belőlem, ahogy régebben, hanem verseket. Elneveztem őket meditációs verseknek, mert úgy éreztem a rendszeres meditáció kialakított valami kapcsolatot közöttem és egy spirituális forrás között, szinte akadálytalanul, erőlködés nélkül írtam a verseket, volt úgy, hogy naponta nyolcat, tízet is megírtam.

Aztán jött újra a kiábrándulás. Elküldtem egy minta válogatást néhány embernek, akiről úgy gondoltam tetszeni fog nekik, és segíteni is tudnak a kiadást illetően. De megint csalódnom kellett.

És ekkor akadt a kezembe egy ingyenes e-könyv az elektronikus könyvekről, és ebben a könyvben találkoztam először azzal a fogalommal, hogy „ingyenes e-könyv”. És ez a találkozás megvilágosító erejű volt.

Hiszen ha azt szeretném, hogy amit leírtam azt más is olvassa, mert szerintem az írásaim jók, akkor miért akarnék én ebből meggazdagodni? Ha a könyvkiadás eddig csak pénzköltéssel járt, hasznom nemigen volt belőle, akkor miért kell ezt erőltetni? Az ingyenes e-könyv kiadás, nem csak az olvasónak, hanem nekem is ingyenes!

Ekkor került a látókörömbe a Google Books, illetve a Google Play, ahonnan én is letöltöttem az e-könyvekről szóló e-könyvet, és rövid utánajárást követően már el is készült a szerzői oldalam, ahová feltöltöttem a meditációs versekből egy válogatást. Legnagyobb meglepetésemre néhány nap után elindultak a letöltések. Azt mondtam, ha 15 letöltés összejön, akkor már nagyon boldog leszek. Most már 800 felé közelít ez a szám, nemcsak Magyarországról, hanem külföldről is van már olvasóm, 6-8 országból. Volt olyan nap, amikor a Google Books ingyenes könyvek népszerűségi listáján a 25. voltam. Ezt már valódi sikerként éltem meg.

Aztán feltöltöttem egy science-fiction válogatást is, ez már kisebb siker lett, de itt is 100 felé tart a letöltések száma.

Aztán jött egy elég nagy csalódás, angolra fordítottam a science-fiction válogatást, feltöltöttem, és elvileg 66 országban lehetne angolul olvasni, mégsem töltötte le még senki, rajtam és egy új-zélandi ismerősömön kívül. Folyamatosan gondolkodom az okokon, egyelőre nincs magyarázat, hacsak az nem, hogy az angol nyelvű könyvek választéka nagyságrendekkel nagyobb a magyarul olvasható könyvekénél, és reklám nélkül valószínűleg elvész a kötet a rengetegben.

Összefoglalásként: a könyvkiadókon keresztül történő kiadás bizonytalan, sőt reménytelen, csak viszi a pénzt, de sem olvasót, sem bevételt nem hoz. Az ingyenes e-könyv kiadás nekem is ingyenes, nem csak az olvasónak. Nem kell rá költeni, igaz, nem is eredményez bevételt, de az igazat megvallva a munkám miatt ez most még jó is, mert jövedelemszerző tevékenységhez engedélyt kellene kérnem, ha ezt megkapnám (ami nem biztos), akkor jöhet az adószám, és a bevétel utáni adózás. Ez a probléma a könyvkiadóval kapcsolatban azért nem merült fel, mert ők egy számlán gyűjtenék a bevételemet, tehát azzal egyelőre nem kellett volna elszámolnom.

És ami a legfontosabb, minden egyes letöltéssel, egy emberrel több van a Földön, aki ismeri a nevemet, olvassa az írásaimat, és talán még tetszik is neki, amit írtam. És ki tudja, egy közülük, hátha előáll azzal a javaslattal, hogy kiadná valamelyik könyvemet.

Addig pedig nincs más dolgom, mint új verseket és novellákat írni, esetleg egy tanulmánykötet is jöhet még a tudomány mai problémáiról, és feltölteni őket minél több helyre, és tiszta szívből örülni annak, ha újra és újra növekszik valamelyik letöltési szám.

Ha valaki tényleg szereti azt, amit ír, a pénznél sokkal többet ér az, ha minél több olvasóhoz eljutnak a gondolatai. És ezért érdemes ingyenes e-könyvet kiadni.

Utóirat: a 2021-es letöltési számok így alakultak:

  • Az érkező: 382
  • Lander: 4
  • Meditációs versek: 1446 (Magyarország: 1300, a külföldi országok között Románia vezet, 93 letöltéssel)

És ami a legnagyobb meglepetés, az idei eddigi 8 nap alatt 62 letöltés történt, ezek között a legjobban annak a Lander letöltésnek örülök, ami révén Ausztrália is felkerült az országok közé, ahol olvassák az írásaimat. Talán az angol nyelvű könyvem is elindul a saját útjára.

A “Meditációs versek”-et néhány olvasó még osztályozta is, egy szöveges értékelés is érkezett, nem éppen pozitív, de mivel tudom, hogy a versek sem mindenkihez szólnak, nem is várom el, hogy mindenki szeresse őket. De az is értékes, ha valaki rászánja az idejét, akár egy negatív vélemény megírására is, mert ez azt jelenti, hogy elgondolkodott a verseken, valamilyen szinten megérintették a versek. Lehet, hogy a versek dolgoznak majd benne tovább, és talán később újra előveszi, és kezdi érteni őket.

A letöltési linkek:

Meditációs versek: https://play.google.com/store/books/details/Sz%C5%B1cs_J%C3%A1nos_Medit%C3%A1ci%C3%B3s_versek?id=6LEmEAAAQBAJ

Az érkező: https://play.google.com/store/books/details/Sz%C5%B1cs_J%C3%A1nos_Az_%C3%A9rkez%C5%91?id=JVctEAAAQBAJ

Lander: https://play.google.com/store/books/details/Sz%C5%B1cs_J%C3%A1nos_Lander?id=8UY5EAAAQBAJ