( poliverzum | 2014. 01. 09., cs – 23:21 )

Én nem a képernyőrészével foglalkoztam, hanem azzal ami a billentyűzetet kezeli. Alapvetően meg úgy nem is a kód minőségével van nekem bajom, azzal úgy vagyok hogy hát persze szar meg minden, de végülis fut, végzi a dolgát, azt meg tudjuk hogy az optimalizálást manapság mindenki leszarja, vegyen a júzer bikább gépet és kész. Szóval ezen már meg se lepődtem.

Ami engem igazán ledöbbentett, az maga az ELV volt, ahogy ezt a tulajdonképpen tök primitív kérdéskört az X kezeli. Gondold el, kérlek, miről van szó, mit kell tenni:

— a billentyűzet küld egy kódot a gépnek, amikor megnyomnak egy billentyűt. (kicsit leegyszerűsítem, tudom hogy lehet külön is vizsgálni, lenyomták vagy felengedték a gombot, most ilyen apróságokon ne lovagoljunk).

— Egyszerre több gomb is le lehet nyomva. Ezen gombok közül némelyiket módosítóbillentyűnek kell tekinteni. Attól függően, a gomb módosítóbillentyűnek van-e beállítva, s melyik módosítóbillentyűnek, az X kell generáljon egy úgynevezett karakterkódot.

Ez eddig tiszta sor. Na most ez ugyebár tök primitív feladat, amit szerintem 3 hónap autodidakta programozási stúdium után is megír bármelyik reményteljesebb programozói babérokra aspiráló padawan, még akkor is ha figyelembe vesszük, hogy azért fel kell készülni pár cifrázásra, például hogy vannak különböző típusú billentyűzetek, meg különböző előre definiált kiosztások.

Hogyan lenne a legegyszerűbb ennek nekikezdeni? Szerintem kevesen vannak, akik nem úgy fognának neki, hogy legyen a „driverüknek” egy táblázata, ami áll mondjuk 8 értékből, mindegyiknek a helyére benyomnak egy kódot ami jön a billentyűzetről, s azt mondják, ha az a kód érkezik, akkor az az x-edik módosítóbillentyű, amennyiben az x-edik helyén találták meg a táblázat 0-7 pozíciói közt.

És lenne egy másik táblázat, mondjuk 256 sorral, 8 oszloppal, jön a kód, megnézi melyik módosítóbillentyűvel van lenyomva, akkor annak az oszlopából kiválasztja az eredményként kiköpendő karakterkódot. Elvileg azt is meg lehetne könnyen csinálni, hogy a táblázatnak ne is 8 hanem 256 oszlopa legyen, ekkor akár egyszerre is lehetne használni mind a 8 elméletileg lehetséges módosítóbillentyűt, ha volna valaki aki képes egyszerre lenyomni annyit.

Figyeljük meg, hogy e módszerrel csak 1 indexelése van a módosítóbillentyűknek, és 1 a „normál” billentyűknek. És bármelyik billentyűt kinevezhetjük módosítóbillentyűnek.

A drága X nem így csinálja. Egyetlen táblázata van, amiben vegyesen van összekutyulva a módosítóbillentyű a normál karakterekkel. Össze-vissza indexelget mindent ad-hoc módon, egyik réteg a másikra épül, és hogy egy billentyű módosítóbillentyűnek van-e tekintve egyáltalán az aktuális gépelési pillanatban, az még attól is függ, vele együtt épp lenyomva van-e valami másik módosítóbillentyű! S ha azt hinnétek azért, hogy még nagyobb szabadságot adjon az usernek vagy programozónak, tévedtek: E táblázatnak is 8 oszlopa van, de ebből semmiképp se használhatsz többet egyszerre mint 6-ot, de ezt is csak jóesetben, mert csak az első 4 léte és használhatósága a garantált! Mindezek tetejébe a módosítóbillentyűk mindenféle „csoportokba” vannak szervezve, csak azért, hogy a végén kiderüljön, gyakorlatilag a rengeteg variációból amit normális programozással meg lehetne valósítani, csak 2 marad meg neked: 2 fajta olyan módosítóbillentyű létezik, ami igazán független egymástól és az összes többitől, mindegyik 2 oszlopra vonatkozik egyszerre, s van még a shift, ami ezen oszlopok közti váltást végzi.

Gyakorlatilag tehát össze-vissza kutyul mindent hogy jó áttekinthetetlen legyen, s a végén megvalósítja a lehetséges funkcionalitásnak és a kihozható variációknak a szánalmas, elenyésző töredékét. Megsaccolom, körülbelül tizedennyi kódsorból ki lehetett volna hozni ennél messze áttekinthetőbb, logikusabb, könnyebben menedzselhető és főleg funkció- és variációgazdagabb billentyűzetkezelést is.

Egyszerűen iszonyat. Nem tudom, ettől akartak a programozói tudományosabbnak vagy okosabbnak látszani, vagy mi?! Igazából ez amire itt rájöttem, olyan élmény volt a számomra hogy még most se tértem magamhoz belőle teljesen. Őszintén remélem, nem az a stílus a jellemző minden OpenSource kódra amit itt tapasztaltam, mert ha igen, akkor nem is tudom... Bár sok reményem nemigen lehet azok után, amit még annó tapasztaltam a KDE és a Gnome esetében is.

De említhetnék még egyéb „furcsaságokat” is. Valójában amióta kissé kikupálódtam a linux terén meg a programozásban - no nem nagyon, azt elismerem, de egy picit - kezdek messze kritikusabb szemmel látni bizonyos dolgokat, s értem már, Saxus meg még páran mit kifogásolnak ebben a FOSS program-ökoszisztémában. Ettől még nem lettem persze Windows-párti, sőt a zárt forráskód híve sem, de azért azt már belátom, hogy a kritikáik egy része bizony jogos, és egyáltalán nem mindig csak trollkodásból meg gonoszkodásból mondanak kellemetlenül hangzó dolgokat.

-------------
Honlapom: http://parancssor.info Könyvem a VIM-ről
KISS-Linux, from scratch!