A fejlesztés menetéről

Az alábbi nagyon frappáns kérdést kaptam:

Idén év végén a böngészőkben megszűnik a Flash futtatási lehetőség. Mire lenne szükség(ed) ahhoz, hogy a program “átalakuljon” HTML5-ös változatúvá?

Valóban, az biztos, hogy ez a technológia halott, és így a Flash alapú program előbb vagy utóbb nem lesz elérhető. Azaz elérhető lesz, de az új böngészők nem fogják megjeleníteni. A lényeg, hogy a program a megszokott formában gyakorlatilag megszűnik működni.

Mi lesz helyette

Tény ami tény, hogy egyelőre nincs alternatívám. Több alkalommal kezdem el új programot írni, és idő közben a technológia folyamatosan változott. Így egy dolog biztossá vált számomra: Olyan technológiai megoldással szeretnék dolgozni, ami hosszú távon is fenntartható. (tényleg csak zárójelben az “új” program HTML5 vagy még jobb: JavaScript nyelven íródik, egészen pontosan React.)

A tények

  1. Egyedül csináltam a programot, és valószínűleg így is fogom folytatni. Egyedül, mert ezáltal tanultam is, jó munkahelyi referencia volt egy időben, és ha már ennyi munkám van benne, szeretném megtartani és továbbra is működtetni, alakítani, a sorsa felől dönteni.
  2. Egyedül nem megy, a segítség jól jön. Én is ember vagyok, van munkám, és az idő nekem is drága. Egy komolyabb fejlesztéshez sok idő és sokféle ismeret kell.
  3. Van igény a programra. Persze nyilván csak akkor, ha továbbra is ingyenes marad.
  4. Egy jó gépírás oktató mindenkinek jól jön, nem csak a magyar nyelvű közönségnek. Jó lenne lefordítani más nyelvekre is.

Hogyan tovább

Bebizonyosodott, hogy nem tudom elég gyorsan meglépni a változtatásokat, az új technológiai igények sokkal gyorsabban változnak, semmint követni tudnám. Segítséget csak akkor remélhetek, ha nyitott vagyok rá, ha megteremtem annak lehetőségét. Ez jelenleg csak a következő feltételekkel működhet:

  • A program nyílt forráskódú kell hogy legyen, azaz mindenki számára elérhető és olvasható. Ezen felül hozzájárulásokra is nyitott kell hogy legyen, azaz engedélyemmel bárki szabadon “beleírhat” a kódba. Ez a lépés megtörtént. A program elérhető a github és/vagy a gitlab oldalakon. (tickets/issues: github, Auto-deployment/CI: gitlab)
  • A program hivatalos nyelve az angol. Ez egyáltalán nem azt jelenti, hogy ne lenne elérhető magyarul. De az internet nyelve az angol, a legtöbb fejlesztő ezt a nyelvet használja. Így a ticketek (teendők), issues (hibajelentések és kérések), a changelog (változtatások listája) és más programozáshoz köthető dolgok angolul történnek majd.

Az új koncepció

A Flash program oktatói funkciója viszonylag rögzített terv mentén haladt, azaz a billentyűket meghatározott sorrendben, adott lecke szövegek mentén tanította. Hogy ez előny-e vagy hátrány, az most majd kiderül. A tervek szerint az új változatban nem lesznek fix, előre megírt leckék, gyakorló szövegek. E helyett a gyakorlatilag szövege egyénileg lenne előállítva, kinek-kinek nyelve, billentyűzet-kiosztása, haladási szintje és személyes hibái szerint. Ez egy nagy kihívás, de véleményem szerint hatalmas előnyökkel járna a felhasználóknak. A felső sor a betűkkel tehát el fog tűnni. (Nem lesz megvalósítva.)

A beviteli mező annyiban változik, hogy csak egy szövegmezőt tervezek, ez mutatja a szöveget, és ide is lehet majd írni. Különböző színek jelölnék a beírásra váró, beírt, avagy elhibázott karaktereket.

A haladás menetét felugró ablak jelenítené meg minden blokk végén, külön opciókkal, hogy a felhasználó kiválaszthassa, kívánja-e folytatni a gyakorlatokat, megismétli az előbbit avagy mást választ.

A képernyőn megjelenő billentyűzet nyilván valóan az egyik legfontosabb része a programnak, jelenleg ezen munkálkodom, talán már egy éve - vagy több éve (szabadidőmben). Ennek hibátlanul kellene működnie, csak kérdés az, hogy mi a helyes működés. Akármennyire nem akarom bonyolítani, ez az egyik legnagyobb kihívás amivel dolgom volt. Ezt külön fejezetben kifejtem.

A program “online” lesz, azaz nem tervezek letölthető verziót. Ennek több oka van:

  • Manapság minden az interneten van, és mindent a böngészőn keresztül használunk, így nem újdonság amit csinálok.
  • Frontend developer avagy jelenleg hivatalosan JavaScript fejlesztő vagyok, így ezt a részét ismerem a technológiának. Egy kollégám úgy mondta, hogy ha csak egy kalapácsod van, hajlamos lehetsz mindent szögnek látni.
  • Egy letölthető programmal ellentétben “platformfüggetlen”, vagyis Windows, Mac és Linux operációs rendszeren is használható
  • Viszonylag egyszerűen elérhető és biztonságos.
  • Különféle nyalánkságok csak így működtethetőek ésszerűen, pl.: felhasználói fiók, toplista, frissítések, visszajelzéseken alapuló fejlesztés.

Biztos van még sok érv, de maradjunk annyiban, nem lesz letölthető változat. Mint mindig, most is van kivétel: a fejlesztést magam is “offline” végzem, azaz megfelelő technikai ismeretekkel a program forráskódja letölthető és használható.

A billentyűzet problematikája

A JavaScript a böngészőben működik és nincs hozzáférése a helyi számítógép java részéhez, de az biztos: nincs hozzáférése a felhasználó billentyűzetéhez. Egyszerűen nincs. Fogalmam sincs, milyen billentyűzeten pötyög valaki, amíg nem kezd el írni - de az meg már késő. Ez azért baj, mert nyilván meg kell jelenítenem egy olyan billentyűzetet, amilyen a felhasználónak van. Ennek kiválasztását nem érdemes a felhasználóra bízni, mert nem biztos, hogy ki tudja választani a megfelelőt. Mert 329 különböző kiosztást kezel jelenleg a program, azt elfelejtettem mondani. Ezt a kép javul, hogyha figyelembe vesszük, hogy az operációs rendszer nevéhez van hozzáférésem, így azt előre ki tudom választani, ezzel lecsökkentve a listát. A nyelvét pedig mindenki tudja, így ismét szűkül a kör.

A fizikai billentyűzet nem egyenlő a kiosztással. Nekem pl. Magyar, Német és Angol kiosztás is be van állítva, és a szerint váltogatom, milyen nyelven írok. De a kollégák panaszkodnak, hogy az angol nem az, amit ők angolként ismernek. Mert nyelven belül is van több, persze.

Ha már fizikai billentyűzet, nos ez is eltérő, a magyar nyelvnél tipikus az “í” gomb, amely vagy a bal kéz kisujjához jut (a Shift mellé), vagy valahova. Ahol van hely neki. Vagy hely híján nincs is fizikai gomb, hanem csak billentyűkombináció.

Az Enter billentyű alakja 4 különböző lehet, és más-más kódjelet adhat le a mátrixon, jellemzően “C12”, “C13”, “C14” vagy akár “D14”. De mindegy is, mert se nem látom a kódot, se nem segít az alakjának a kitalálásában.

A Különböző kiosztásokról van adatbázis, ez azonban az egyes karakterek ISO kódját adja meg, amit én nem tudok kideríteni a JavaScript segítségével. Viszont látok egy “Code”-ot, és azt hogy milyen karakter kerül leütésre. Így például elméletből tudom, hogy az “E11”-es fizikai billentyűre (bizonyos) német billentyűzeten a “ß” karaktert kell megjelenítenem. De gyakorlatban csak azt látom, hogy a felhasználó a “Quote” nevű gombot nyomta le és az “ä” karaktert gépelte be vele. Nos ezt így elég nehéz összeegyeztetni, de azért vannak sikerek.

Csak azután tudom megmondani, milyen karaktert ír be egy billentyűzet valójában, miután beírásra került, de amikor lenyomódik a billentyűzet, akkor még nem. (keydown event, onchange event) Ez a kis eltérés igen sokat számít.

Vannak “módosító” billentyűk, amelyek nem adnak bemeneti jelet, csak megváltoztatják a többi billentyűét, mint a Shift, vagy CapsLock. Ezek közül néhány operációs rendszerenként eltér, így ami a Windows alatt “Ctrl” az Mac alatt “Command” avagy az “Alt” helyett “Opt” billentyű található.

Vannak billentyűk melyek nem adnak közvetlen bevitelt, hanem az utánuk következő karaktert módosítják. Pl. a “´” karaktert lenyomva nem jelenik meg semmi, de azt követően a “z”-t beírva “ź”-t kapunk, a “P”-ből “Ṕ”-t, stb…

Vannak u.n. “Repülő ékezet” karakterek is (dead keys) amik akár nincsenek feltüntetve semelyik billentyűzeten, mégis, két gomb lenyomásával beírhatók. Engem is meglepett, hogy egy szimpla magyar kiosztással is elképesztően sok egzotikus karaktert lehet begépelni. A program ennek feltárásában is segíteni tud, erre már vannak félig-meddig működő megoldások.

Tehát hogy egy adott fizikai billentyű milyen ISO kódot ad, az függ az operációs rendszertől, és hogy valójában mit ír be lenyomáskor, az függ a felhasználó billentyűzet-kiosztástól, az esetlegesen nyomva lévő módosító billentyűktől, a CapsLock állapotától, előzőleg bevitt karakterektől, és talán még sorolhatnám…

2020.04.16.

Updated 2020.05.12.

Updated 2020.05.18.

Folyt köv...