2020. december 29., kedd

Mit programozzak? (ötletek keresése 1.) és háttér

Korábban az volt a tervem, hogy lesz egy állásom, amiből megélünk, de emellett inkább a hobbim lesz az, amiben nagy sikereket akarok elérni. Ez a terv elég jónak is tűnt mindaddig, amíg a sikernek jó esélyét láttam valamilyen hobbiként végezhető tevékenységben, az állásommal pedig nem voltak gondok. Tehát, hobbi szinten igyekeztem elsajátítani a zeneszerzés tudományát, például az LMMS nevű szoftverrel, vagy például a Dave Conservatoire nevű webhelyen történő gyakorlással (ehhez hasonló gyakorlatokat tartalmaznak a "GNU Solfege" és a "KDE Minuet" nevű szoftverek is). Ezeken kívül a zene elméletéről szóló vagy a zeneszerzéssel kapcsolatos podcastokat hallgattam, és YouTube videókat néztem. De közben rájöttem arra, hogy a zenében eléggé le vagyok maradva azoktól, akik már gyermekkorukban elkezdték a zene tanulását, akik tudnak játszani valamilyen hangszeren, és akiknek a személyisége jobban passzol a zene előadásához, mint az enyém (hiszen a zenéből főleg azoknak van pénze, akik elő is adják azt), illetve rendelkeznek a megfelelő eszközökkel és technikai know-how-al is (ezeket mentor nélkül elég nehéz lenne elsajátítani). Tehát, a zeneszerzés mellett, illetve helyett más hobbikban is próbálkoztam, például a sakkban (amiben az első próbálkozásaim nem voltak túl sikeresek, bár még nem adtam fel), vagy az írásban (amiben meg is írtam "A kereszténység kritikája" című művemet, amit ingyen adok, és amire linkelek is ezen a blogon, de úgy gondolom, sok pénzt inkább regényírással lehetne keresni, erre viszont magyar nyelven kicsi az esély, és a fikcióhoz jelenleg nem is érzem elég kreatívnak magam). De még ha sikerülne is valami nagyon jót alkotnom a zeneszerzés vagy a regényírás területén, az is elbukhatna azon, hogy nem tudom megfelelően reklámozni a művemet, mivel sokféle jogi feltételt nem fogadok el pl. a FaceBook-on vagy könyvkiadóknál. Szóval, egyre inkább kezdtem úgy érezni, hogy a hobbiként végzett tevékenységeimben nem könnyű a siker, sőt, gyakran még kedvem sem volt ezeket csinálni, és még az állásommal is gondjaim adódtak.

Jelenleg, amikor ezt írom (2020-12-29), udvarosként dolgozok egy kiskunfélegyházi középiskolánál, mert nem kaptam jobb állást. Még ehhez az álláshoz is nagy szerencse kellett, hogy megkapjam, és szükség is van otthon arra a pénzre, amit itt keresek, tehát meg kell becsülnöm ezt, így nehezen kockáztatnék meg állást váltani, különösen a koronavírus okozta gazdasági válságban. Viszont ennek az állásnak is megvannak a maga kellemetlenségei és stressze (illetve az abból adódó létbizonytalanság, hogy mi lesz, ha elvesztem az állásomat), ezért hosszabb távon mégis azt tervezem, hogy olyan állást keresek, ami megfelel az iskolai végzettségemnek, ami programtervező matematikus (illetve van egy kereskedő OKJ végzettségem is). Valószínűleg azért nem kaptam állást a saját szakmámban (az informatikában), mert kisvárosban lakok, és a programozó állások zöme Budapesten van, oda pedig nem akartam megkockáztatni az elköltözést a magas albérlet árak és kaució miatt. Illetve, az informatikában többet számít a (naprakész) szakmai gyakorlat, mint az iskolai végzettség (ami elavulhat), és nekem a legtöbb álláshoz nem volt elegendő a szakmai tapasztalatom (a különböző speciális szakágakban). Így ha állást akarok kapni a programozásban (webfejlesztésben vagy szoftverfejlesztésben), akkor önálló referenciamunká(ka)t kell tudnom felmutatni az adott területen. Így az aktuális (2020-12-29) terveim szerint a szabadidőmben (az email-ek és a hírek olvasásától eltekintve) főleg a következő négy dologgal fogok foglalkozni:

Ezek közül valószínűleg mindig azt fogom csinálni, amihez éppen nagyobb kedvem van... általában a legkönnyebben a sakkra vagy a hangoskönyvek / podcastok / stb. hallgatására tudom rászánni magam, de ezzel is javíthatom az esélyeimet az álláspiacon, hiszen angolul vagy németül tanulok közben. Ezt a blogot ritkán tervezem frissíteni, és főleg ("A kereszténység kritikája" című) könyvem folytatására is alkalmas blogbejegyzéseket írok bele, vagy néhány egyéb érdekességet, például ötleteket a környezetvédelem vagy a programozás területén. Így el is érkeztünk oda, ami ezen blogbejegyzés lényege kellett volna, hogy legyen: ez pedig az a kérdés, hogy "Mit programozzak?"

Ha nem lesz jobb ötletem, akkor valószínűleg a "Google Kickstart" felületén fogok gyakorolni, mert ha nem is tartok lépést a technológia fejlődésével a programozás minden területén, azért az algoritmusok írását illik tudni, és itt rám is férne a gyakorlás. Viszont talán még jobb lenne, ha a programozás gyakorlása közben egy önálló referenciamunkának számító open-source prodzsektet tudnék összehozni a GitHub-on, ami akár a portfolióm részévé is válhatna (és akár híres is lehetne, vagyis a hobbim sikerét jelenthetné, ahogy a blogbejegyzésem elején említettem). Ehhez pedig legalább egy olyan ötletre van szükségem, amelyik megmondja, hogy mit érdemes programozni a sikerhez. Ötletekből persze nincs hiány: néhányat leírtam például az informatikáról szóló e-könyvembe. De a sok ötlet közül keveset látok most is jónak. Korábban érdemesnek láttam megpróbálni egy új tömörítő program írását, amit akár a Hutter Prize-ra is benevezhettem volna. Azonban később úgy döntöttem, hogy ezt mégsem próbálom meg, mert lehet, hogy nem sikerül, és akkor hiába dolgoztam (illetve, már nem is biztos, hogy a laptopom elég erős a feladathoz). 2020-ban már korábban is a szabadidőmre vonatkozó terveim között szerepelt a programozás, és írtam például egy olyan JavaScript programot, amely képes labirintusokat generálni egy PDF-be, amit ki lehet nyomtatni és odaadni kisgyermekeknek. Ez azonban nem nagyon érdekelte a rokonaimat, amúgy meg a neten sok hasonló programot lehetett találni... a GitHub-ra pedig azért nem töltöttem fel, mert külső webhelyen lévő erőforrásra linkelt (JsPdf), és a link szerzői joga nem volt az enyém (esetleg csatolhattam volna a JsPdf-et a prodzsekthez, de ehhez meg nem volt kedvem). Inkább írtam még egy olyan JavaScript programot, ami képes volt érdekes képek (de nem fraktálok) létrehozására matematikai számítások alapján. Itt viszont megakadtam, és nem tudtam továbbfejleszteni a programot (tehát nem volt jó az alapötlet), ezért el kellett vetnem azt. Azért néhány képet tudok mutatni:



Akkor most térjünk rá arra, hogy mik a legjobb ötleteim a programozásra jelenleg? Arra gondoltam, hogy lehet, hogy valami olyat kellene programozni, amit akkor is érdemesnek látnék elkészíteni, ha gazdag lennék (így akkor sem dolgoznék hiába, ha később nyernék a lottón). Arra is gondoltam, hogy elég nehéz valami teljesen újat kitalálni (bár játékok esetén erre is van esély), viszont az már könnyebben elképzelhető, hogy valamilyen létező szoftverhez hasonlót alkotunk, de annak rossz tulajdonságai nélkül, esetleg további funkciókkal kibővítve. Azaz, kell, hogy legyen a programnak valami erőssége a vetélytársaihoz viszonyítva. Nézzük csak a programozási ötleteimet ezeknek a fényében:

  • Közösségi oldal (social networking site) motor, amely társkereső vagy levelezőtárs-kereső portál készítésére is felhasználható... mert nem sok ilyen motorról tudtam, ellenben a blogoknak már van motorja (Wordpress), a fórumoknak már van motorja (phpBB), a webáruházaknak már van motorja (WooCommerce), az egyszerűbb honlapoknak van motorja (Drupal, Joomla), a wiki oldalaknak is van már többféle motorja (pl. MediaWiki), stb. Úgy tűnik, hogy aki eddig közösségi oldalt vagy társkeresőt készített, az általában nem tette nyílt forráskódúvá annak motorját, hanem megpróbált úgy húzni hasznot abból, hogy feltelepítette azt valamilyen webhelyre... vagy mégsem? Most rákerestem közösségi oldal motorra, és találtam (pl. ELGG)! De mitől lesz jobb a mi közösségi oldalunk (illetve társkeresőnk, vagy levelezőtárs-keresőnk), mint a többi? Például attól, hogy új ötleteket viszünk bele (ezeket nem árulnám el), vagy attól, hogy a portál felhasználási feltételei (illetve ÁSZF-je) elfogadhatóbb(ak). Például, ha változnak a felhasználási feltételek, akkor a felhasználó nem is jelentkezhet be addig, amíg el nem fogadja az új feltételeket, így elkerülhető az, hogy a felhasználó tudtán kívül változtak meg ezek a feltételek. Egy olyan kis dolog is számíthat, hogy nem írjuk oda, hogy "All rights reserved" (ez ugyanis félreérthető)... na de ha már létezik nyílt forráskódú közösségi oldal motor, akkor lehet, hogy mégsem a legjobb ötlet ilyet programozni, hiszen elég sok munka lenne.
  • Kvíz motor... ez az ötletem már elég régi, hiszen régen a FreeRice.com-hoz hasonló honlapra gondoltam. A kvízek persze okostelefonokon is jól működnének. Mivel nincs pénzem szerverre, kezdetben a kvíz kérdései statikusan letöltésre kerülnének az okostelefonokra a mobil alkalmazással (a kvíz motorral) együtt. Mitől lenne ez a kvíz jobb, mint mások? Szerintem a kvíz csak olyan kérdéseket tartalmazzon, amelyek a hasznos tudásra vonatkoznak (tehát, nem attól lesz valaki okos ember, hogy tudja, hogy mikor ki nyert az olimpián, vagy melyik filmben ki szerepelt). Másrészt, ha mégis lenne szerverünk, akkor a kvíz kérdéseinek nehézségét a kvíz motor automatikusan is mérhetné, és nem kellene előre megadni azt (mint ahogyan meg volt adva az régen a FreeRice.com-on). Illetve, persze itt is lehetséges az ÁSZF-et (Általános Szerződési Feltételeket) etikusabban megadni. Persze kvíz motorból is létezik már néhány, úgy látom, de talán még le lehetne ezeket előzni. De még mindig úgy érzem, ennél jobb ötletre lenne szükség.
  • Fotókat "torzító" mobil App... rengeteg olyan mobil App-ot (alkalmazást) lehet találni a neten, amelyek a fotók szerkesztését teszik lehetővé (így pl. a selfie-ket nem kell rámásolni egy laptopra vagy PC-re, hogy átszerkesszük azokat a közösségi oldalakon való megosztás előtt), ezért elsőre nem is tűnik olyan jó ötletnek az, hogy készítsünk még egyet. De ha lenne valamilyen jó ötletünk olyan effektus(ok)ra, amit az említett programok nem tudnak, akkor akár csinálhatnánk csak ezért is egy mobil alkalmazást (Desktop alkalmazás helyett viszont talán GIMP plugin-t lenne érdemes készíteni). Például, ha valaki szeretne a selfie-jéhez valamilyen stílusú keretet adni, vagy valamilyen formátumú szöveget adni (akár szövegbuborékban, vagy mém-szerűen), akkor azt a mi alkalmazásunkkal tehetné meg a legegyszerűbben (és az App megjegyezné, hogy a felhasználó milyen keretet szokott adni a képeihez, és milyen formátumban szokott szöveget írni hozzájuk). Esetleg a mi App-unk tudna fotókat "torzítani" úgy, ahogy más App nem (és ehhez semmilyen további inputra nem lenne szüksége magán a képen kívül). Általánosságban, a könnyen kezelhetőség érdekében minél kevesebb inputra kellene törekedni, és a lehetséges opciókat használati esetek (Use Case) alapján ajánlaná fel az alkalmazás. Persze még nem tudom, hogy mit tudnak a jelenlegi mobil alkalmazások, amelyek fotók szerkesztésére valók, de úgy gondolom, sok lehetőség elképzelhető valami olyan létrehozására, ami még nincs. Azt sem tudom még, hogy egy mobil alkalmazás fejlesztése hogyan zajlik, de el tudom képzelni, hogy jobb lenne, mint a webfejlesztés, ahol általában szükség van egy webszerverre (ez pedig pénzbe kerül). Persze néhány mobil alkalmazásnak is szüksége lehet szerverre, de a fotókat szerkesztőhöz pl. nem kell. Na mindegy, ennél az ötletnél sem látom nagy valószínűségét a sikernek, de gyakorlásnak jó lehet.
  • Mobiltelefonok szenzorjainak kihasználása... a mobiltelefonokban olyan szenzorok is vannak, amik egy laptopban vagy PC-ben nem... lehetne mobil alkalmazásokat írni ezeknek a szenzoroknak a kihasználására, illetve azért is, hogy tisztában legyünk azzal, hogy mire képesek ezek a szerkentyűk (már csak a számítógépes biztonság érdekében is). Ennek még utána lehet nézni, és annak alapján konkrétabb ötleteket megfogalmazni.
  • BASH szkript podcastok RSS Feed-ről való letöltésére... már eddig is a netről nézett BASH parancsokkal oldottam meg ezt, de néhány részlettel kiegészíthetném ezt, például: ha a podcast epizód hosszabb, mint fél órás, akkor darabolja azt fel több, max. fél órás fájlba (ez azért lenne jó, mert a sétám munkába menet kicsit több, mint fél óráig tart, és a mobilom nem tudja megjegyezni, hogy hol tartottam az MP3 hallgatása közben, sőt, nem tud előre vagy vissza csévélni sem), és hogy tudjam, mikor van vége, illesszen a hanganyagok elejére és végére egy-egy szignált, amelyet akár a fájlok nevéből is vehet, robothangon felolvasva... illetve, ilyen szignált LibriVox-os hangoskönyvek fejezeteinek feldarabolása esetén is alkalmazhatnék. Még elő szokott fordulni egy hiba, hogy a fájlok neve rossz, pl. így végződik: abc.mp3?id=1234 ezt is javítsa ki automatikusan a fájlok átnevezésével. Még elő szokott fordulni az a hiba is, hogy a mobilomon sorrendben előbb jönnek a podcast újabb epizódjai (tehát fordított sorrendben vannak), esetleg a sorrendjük teljesen össze van keveredve (pl. hangoskönyvek esetén)... rendezhetné tehát a szkript a fájlokat név szerint ABC rendben, vagy létrehozási idő szerint fordított sorrendben is (mivel a szkript vsz. az újabbakat tölti le előbb)... közben rájöttem, hogy a fájlok rossz sorrendjét a mobilomon mélyebb okok okozzák: a Linux ext4 fájlrendszerében a "directory order" nem a fájlok létrehozási idejétől függ (hanem hash-code-on), a mobilom vfat fájlrendszerében viszont a "directory order" alapján rendezi az MP3-akat. Ez a vfat fájlrendszerben kiadott néhány Linuxos paranccsal kijavítható (cd unzipBook; mkdir ../sBook; mv `ls` ../sBook/). Amúgy teljes BASH szkriptnél kényelmesebb csak saját célra használható szkript-töredékeket írni.
  • Kártyajátékok... szívesen megvalósítottam volna a kedvenc, magyar kártyával játszható játékaimat (birge, svindli, trómfos bornyú) számítógépes játékként, de rá kellett jönnöm, hogy nincsenek fenn az Interneten a magyar kártyának olyan képei, amelyek közkincsek lennének (ez azt jelenti, hogy valószínűleg az sem közkincs, amit beszkennelhetnénk). Így max. azt tehetném meg, hogy a magyar kártyával játszható játékokat átültetem francia kártyára úgy, hogy a francia kártyának nem használom a lapjait a kettestől a hatosig. De még mindig valami jobb ötletet szeretnék.
  • Sakk-variánsok... érdekesnek találnám a sakkot nagyobb táblán, pl. 10x10-es dáma táblán vagy 18x18-as gó táblán (ez utóbbit dupla annyi bábuval). Persze a hozzá szükséges mesterséges intelligenciát át kellene írni, hiszen a tábla méretének változásával a bábuk értéke is változna. Ez pedig nem nyilvánvaló, tehát valószínűleg önmagától tanuló AI-ra lenne szükségem. Az utóbbit viszont valahogyan le kellene butítani, hogy a humán játékosoknak is legyen ellene esélye. Nem könnyű feladat. Illetve, gondoltam arra is, hogy újfajta bábukat találjak ki a sakkhoz, és ezeknek az erejét összemérjem a sakk eredeti "csapatával". Nyilván ehhez is önmagától tanuló AI kellene.
  • Létező open-source játékok grafikai elemeinek újrahasznosítása... valamilyen más játék készítéséhez (hiszen ezekben sokszor a grafika elkészítése a legnehezebb). Ennek még utána lehet nézni, és annak alapján konkrétabb ötleteket megfogalmazni.

Felsoroltam tehát az utóbbi időben felmerült főbb ötleteimet arra, hogy mit programozhatnék. De egyik ötletemért sem tudok még igazán lelkesedni. Ezeken kívül felmerült az a lehetőség is, hogy másodállásként szabadúszóként is dolgozhatnék a programozásban, olyan honlapok segítségével, mint az Upwork, a Fiverr, vagy a Guru. Ezekhez valószínűleg másodállásban vállalkozónak kellene lennem, ami csak akkor érné meg, ha elég sokat tudnék így keresni, és nem esne túlságosan nehezemre a munka... de egyik feltételben sem vagyok biztos. Úgy gondolom, a programozás szabadúszóként még nehezebb lehet, mint egy állásban, engem pedig még sok állásba sem vettek fel. Másrészt az sem biztos, hogy ha ezen honlapok általános szerződési feltételeit elolvasnám, akkor el tudnám fogadni azokat. Tehát, továbbra is ötleteket keresek arra, hogy mit programozhatnék...

Nincsenek megjegyzések:

Megjegyzés küldése