2021. március 21., vasárnap

Mit programozzak? (ötletek keresése 3.)

Valószínűleg az előző blogbejegyzésem ebben a témában nem volt a legbölcsebb húzásom. Például, azóta mégis kicsit több kedvem támadt sakkozni... másrészt a matematikai mesterséges intelligencia fejlesztésétől (C++ban) elment a kedvem. Az is lehet, hogy nem lett volna etikus azt fejlesztenem. De a legerősebb érv ellene az, hogy valószínűleg túl nehéz feladat lenne (ha nem sikerül, nem sok hasznom lenne a prodzsektből, és eléggé beképzeltnek is tűnnék). Így hát sürgősen újabb ötleteket kezdtem el keresni, hogy mit programozhatnék... Nem tagadom, elég sokat keresgéltem a neten, hátha adnak valami jó ötletet, de az ottani ötletek túlnyomó többségét nem láttam érdemesnek megvalósítani. Csak egy-két ötlet maradt:

  • Ha már van asm.js, arra gondoltam, hogy talán a Java Virtuális Gép (JVM) is megvalósítható lenne JavaScript-ben. Azaz, a böngészőben futtatni lehetne a Java appleteket (class és jar fájlokat), Java plug-in nélkül (amit már amúgy sem támogatnak). Ez jó ötlet lenne, de rákerestem, és úgy tűnik, hogy már megcsinálták, lásd pl. JavaPoly és DoppioJVM. Másrészt ez (mint olyan függvénykönyvtár vagy segédprogram, ami csak más programokkal együtt ér valamit) nem is lett volna olyan látványos, mint egy kifejezetten a végfelhasználóknak készült program. Úgy láttam, hogy az Adobe Flash JavaScript-es emulálására is születtek már megoldások.
  • Az "Audio Visualizer" ötletét a neten láttam, de ebben az ötletben látok is potenciát, még azután is, hogy rákerestem létező megoldásokra a témakörben. A lényeg az, hogy a program valamilyen zenéhez annak a ritmusára mozgó, érdekes vagy szép videót generálna. A neten talált megoldások esetén például a zenékhez olyan videókat lehet generálni, amik YouTube-on való megosztásra alkalmasak, és ezeket már elég sokat használják is a YouTube-on. De talán másképpen is megvalósítható ez az ötlet: ha nem túl bonyolult videót szeretnénk, akkor azt talán valós időben, a zene lejátszása közben is le lehetne generálni, mint régen a WinAmp néhány plugin-ja tette. Jó kérdés, hogy ezt csak a felhasználó által biztosított MP3-al tudnánk-e megtenni, vagy akár az Internetről stream-elt zenével is... akár okostelefonon is? Másrészt az is eszembe jutott, hogy sokszor koncerteken is kivetítenek a zenét kísérő videókat, és ilyeneket is megpróbálhatnék készíteni, ebben lehet még üzlet. Még ha az "Audio Visualizer" ötletét meg is valósították már, valószínűleg lehetséges ettől jelentősen más megjelenésű videókat készíteni, amikre lehet még piac.
  • A következő ötletet egy saját gyakorlati problémám ihlette. A LibreOffice Writer-ben ugyanis nem tudtam az "élőfejet" elég jól beállítani. Azt elvileg be lehet állítani, hogy az első oldalon ne legyen élőfej, és a páros és páratlan oldalakon különböző legyen az élőfej, illetve lehet még az élőfejbe különféle információkat tartalmazó mezőket beszúrni... de úgy láttam, semmi többet nem lehet rajta variálni. Pedig arra is szükség lehet, hogy az első KÉT oldalon ne legyen élőfej, vagy pedig az élőfej tartalma attól is függjön, hogy éppen melyik oldalon tartunk, és melyik fejezetet olvassuk (bár ez utóbbit a mezőkkel talán meg lehet oldani, de elképzelhető olyan eset, amikor nem, pl. ha két különböző dokumentumot akarnánk egyesíteni egy fájlban, vagy ha "majdnem" üres lapokat szeretnénk hagyni a könyv részei között). Ezen kívül még más hiányosságokat is találhatunk a LibreOffice-ban, szóval ez a programozási ötlet arról szól, hogy miért ne forkoljuk a LibreOffice-t (legalábbis a LibreOffice Writer-t), és miért ne fejlesszük tovább?
  • Ha nincs jobb ötlet, számítógépes játékot még mindig lehet programozni. Gyermekkoromban például szerettem volna egy olyan számítógépes játékot, ami a "Super Mario" és a "Prince of Persia" keveréke lett volna: tehát, a főszereplő tudott volna ugrani úgy is, mint Mario (magasra), és úgy is, mint a Prince (távolra). Mondjuk ez az ötlet már nem izgat. Jó játékhoz jó ötlet kellene: pl. a "Fish Fillets" még mindig nagyon jó játék, már Linux-ban is lehet vele játszani. Mondjuk ilyen jó ötletet nem könnyű kitalálni. Korábban volt egy olyan ötletem is egy nagyobb számítógépes játékra, hogy egy nemzetközi környezetvédő szervezetet kellene irányítani, ez is egy lehetőség. Ha valami könnyebbet szeretnénk, akkor eszembe jutott egy memóriajáték lehetősége, amiben a székely-magyar rovásírás karaktereit mutató kártyákat kellene pároztatni (van is már egy ilyen játékom, amit kaptam, csak az nem számítógépes). Régebben Pascal-ban megvalósítottam még egy olyan játékot, ami a "Sokoban" és az "Atomix" játékok keveréke volt, és úgy neveztem: "Aspace"... de csak 20 tutorial szintű, és 3 "easy" pályát csináltam hozzá, ami után erős volt a gyanúm, hogy ez a játék nem alkalmas sokkal nehezebb pályákra. Szóval a játékfejlesztéshez valami jó ötletre lenne még szükségem.
  • Még álmodtam is egy programozási ötletről, de olyan ködösen emlékszem rá, hogy nem tudtam belőle egy valóban jó programozási ötletet rekonstruálni (pedig fel is írtam). A mezőgazdaság és az élelmiszerbolt témakörében lehetett ez az ötlet, és például arról szólhatott, hogy miért nem kapható valami a büfében. Valószínűleg lennének már létező szoftverek erre az ötletre, csak azért nem adják azokat ingyen, mert így hátrányba kerülnének másokkal szemben. Az álmom talán nem is vonatkozik valamilyen konkrét ötletre, csak a ötletkeresésem folyamatát tükrözheti.

Ennyi programozási ötlet jutott eszembe a napokban... ezek közül (illetve a korábbiak közül is) az Audio Visualizer tűnik a legérdekesebbnek, és üzleti szempontból a legígéretesebbnek. Mondjuk még mindig nem biztos, hogy ezt fogom csinálni, hiszen elég nehéz rávenni magam a programozásra... meg még az is lehet, hogy jobbnak látom majd a Google Kickstart-ot megpróbálni vagy egy fizetős programozó másodállást keresni, stb.

2021. március 13., szombat

Mit programozzak? (ötletek keresése 2.) és a háttér változása

A "Mit programozzak? (ötletek keresése 1.) és háttér" című blogbejegyzésem óta elég sok változás történt a siker-terveimben. Például, általában nem volt kedvem sakkozni, így a sakk újabban már a terveimben sem szerepelt. Persze lehet, hogy néha-néha sakkozok majd a neten (ha mégis lesz kedvem hozzá), és/vagy elmegyek majd a kiskunfélegyházi nem ÉLŐ-pontos sakkversenyekre, ha a koronavírus-járvány alábbhagy... de komolyabb szinten valószínűleg nem fogok versenyezni (a versenyekkel az lenne még a gond, hogy mi van, ha közben el kell mennem WC-re gyomorideg miatt). Tehát a sakk és a zene már nem szerepelnek a siker-terveimben (de néha még kísértenek: ha más számítógépes játékokban nyerni tudtam, akkor a sakkot miért ne próbálnám meg újra). Viszont az íráshoz több kedvem kerekedett, és 2021-ben már indultam is egy pályázaton. A következő internetes helyeken szoktam ingyenes irodalmi pályázatokat keresni (sajnos sok közülük fizetős, azaz nevezési díjas):

pafi.hu

intercompetition.com

dystopianstories.com

Ezek közül engem főleg azok a pályázatok érdekelnek, amelyekhez nem kell túl sok szóból álló művet beadni (pl. microfiction / flash fiction, ötlet, haiku, szlogen), és/vagy jó sok pénzt lehet velük nyerni (pl. esszé, dráma). Ilyen pályázatokat néha máshol is lehet találni (pl. hírekben, webes kereséssel, vagy több éve rendszeresen megrendezett versenyeket, mint pl.: Bulwer-Lytton Fiction Contest, Poetry Magazine Prizes, Salvatore Quasimodo Költőverseny). Sajnos még szűkebbé válik a megfelelő irodalmi pályázatok köre, ha elolvassuk a részvétel jogi feltételeit (valamint a versenyeket meghirdető honlapok felhasználási feltételeit). Mindazonáltal már jónéhány éve figyelem az irodalmi pályázatokat, és minden évben szokott lenni néhány, amiken tényleg érdemes lehet indulni. Ezekkel valószínűleg fejleszthetem az írói képességeimet, és így később talán jobb könyvet írhatok. Na de térjünk a lényegre...

Sajnos programozni sem volt kedvem az utóbbi időben... talán azért, mert nem volt elég jó ötletem arra, hogy mit érdemes programozni. A korábbi blogbejegyzésemben említett "közösségi oldal" és "kvíz motor" azért nem tűnnek jó ötletnek, mert csak akkor érnek valamit, ha fel vannak töltve felhasználókkal vagy adatokkal. Ezek nélkül semmi hasznunk a használatukból, én viszont valami olyat szeretnék programozni, ami legalább valakinek (elsősorban nekem) mindenképpen hasznos. Én pedig igazából jól megvagyok a korábbi blogbejegyzésemben említett többi program nélkül is. (Egyébként a "közösségi oldal" és a "kvíz motor" programkódja egy idő után valószínűleg elavulna, miként a webfejlesztésben szinte bármi, ezért nem biztos, hogy hasznos lenne akkor sem, ha később meggazdagodnék, és fel tudnám telepíteni élesben.) Jöhet tehát az ötletelés neheze: mit lehetne még programozni?

Egy dolog jutott csak az eszembe: megpróbálhatnék írni egy olyan mesterséges intelligenciát, ami a matematika világában működik (tehát nem neuronháló, amit a nagy cégek úgyis jobban kihasználhatnának azzal, hogy nagy mennyiségű adattal etetik), és talán segíthet bebizonyítani pl. a Goldbach-sejtést. Arra gondoltam tehát, hogy elkezdhetnék írni egy CAS-hoz (Computer Algebra System, komputeralgebrai rendszerhez) hasonló matematikai szoftvert (a korábbi munkahelyeimen sok ilyet láttam), azután megpróbálhatnám ezt képessé tenni egyszerűbb, majd bonyolultabb matematikai bizonyításokra. A matematikai szoftvert hasonlóan építhetném fel, mint ahogy a matematika felépül Euklidesz óta (alapfogalmak, definíciók, axiómák, lemmák, tételek). Egy osztály lehetne benne például a természetes számok osztálya, és mivel itt a bizonyítás a lényeg, nem foglalkoznék közelítő és numerikus számításokkal, azaz a programozási nyelvek "valós szám" (float, double) adattípusával sem (legalábbis egyenlőre). Szerintem a legalkalmasabb nyelv a szoftver megvalósítására a C++ lenne (ez talán nem avul el olyan gyorsan), amit nem csak Linuxos vagy Windowsos gépi kódra, hanem Internet-böngészőben futó WebAssembly / asm.js-es kódra is le lehetne fordítani (lásd: emscripten). A prodzsekt megvalósítása tehát a webfejlesztői képességeimet is fejleszthetné az asm.js / WebAssembly jobb megértésével (pl. hogyan működhet együtt a JavaScript és a C++).

Egyébként nem vagyok meggyőződve arról, hogy ez jó ötlet: ha nem sikerül, akkor talán ugyanúgy hiába csinálnám, mint a tömörítő programot. Azaz, ennyi erővel a tömörítő programot is megkísérelhetném megcsinálni a Hutter Prize-ra. Másrészt a mesterséges intelligencia fejlesztése etikai kérdéseket is felvet. Szóval, továbbra is nyitott vagyok új ötletekre is, de jó lenne már elkezdeni a programozás gyakorlását, és jobb ötlet híján valószínűleg ezt a matematikai mesterséges intelligenciát fogom megpróbálni, mert a programozási ötletek közül jelenleg ehhez lenne a legnagyobb kedvem... de vajon elég sok kedvem lesz hozzá ahhoz, hogy valóban ezen dolgozzak?