Neasteptat, programez boti si jocuri

October 21st, 2016

Anul trecut, relativ neasteptat, am inceput sa programez din nou. Pur si simplu firesc si natural, din necesitate, din interes, asa cum se fac in fapt mai toate lucrurile care se merita facute: voiam ceva ce nu exista, asa ca am pus mana si-am facut, acum exista. Acel ceva - un bot, adica o bucata de cod automatizand diverse operatiuni - a aniversat de altfel recent un an de utilizare intensiva si e acum integrat direct in jocul Eulora. Tot firesc si natural, a capatat si nume, pur si simplu pentru ca oamenii aveau nevoie sa-i spuna cumva, asa ca i-au zis Foxybot dupa numele personajul meu in joc, anume Foxy:

Foxy in Eulora.

Ce-mi pare cel mai curios la toata treaba asta e cat de interesanta (si folositoare in diverse moduri initial nebanuite direct) se dovedeste inca munca asta de-am facut-o anul trecut in vreo cateva saptamani de tras din greu. Corect sau nu, consider ca asta-i cel mai bun semn al unei excelente alegeri a problemei de rezolvat: o solutie buna (ori macar decenta) la o problema oarecare rezolva problema cu pricina si atat, dar o solutie similara la o problema care chiar conteaza ofera cu mult mai mult decat beneficiul direct si initial vizibil. Practic deschide drumuri noi.

Sa zic din start ca n-a fost nici simplu nici musai vreo placere anume in sine programatul asta la Foxybot. Desi chiar imi place sa programez1, chestiunea ramane ca bietul Foxybot a fost din necesitate programat ca parte - tinuta cat de separat am putut - a unui cod existent si infernal de scarbos2. Si mai mult decat atat, versiunea curenta de Foxybot e de fapt rezultatul unei rescrieri complete, cam de la zero, anuland complet designul original care era tehnic si teoretic vorbind mai aproape de ideal. Practic insa, designul initial s-a dovedit s-ar zice chiar *prea* aproape de ideal: desi foarte util in a marca fara gres carentele mediului, mediul tot e cel care este si in consecinta asemenea abordare esential carcotasa nu e de mare folos ca si automatizare. Altfel spus, varianta initiala mergea perfect intr-un mediu ideal, frecand in schimb menta mizerabil in mediul real cel plin de mesaje trimise aiurea ori pierdute pe drum, grafica amestecata cu logica3 si alte bube, mucegaiuri si viermi colcaitori ce se afla pe acolo.

A doua versiune de design (curenta) s-a dovedit cu mult mai robusta, supravietuind cu brio schimbarilor majore de client si chiar de server. Insa de cand Foxybot s-a inhamat sa rezolve singur inca o problema majora din joc - practic transformand explorarea pentru resurse in joc - iata ca au aparut iar si ceva probleme foarte similare fundamental cu cele ale primei versiuni. Practic bietul Foxybot e iar carcotas mai degraba fara voie: cand conexiunea client-server devine prea inceata si mesajele vin cu mare intarziere, botul ajunge sa fie inaintea lumii insesi si incearca sa interactioneze in prezent cu viitorul care inca sta blocat in trafic undeva pe fir. Probleme foarte interesante la nivel filosofic, dar extrem de frustrante la nivel practic de utilizator.

Faptul ca Foxybot e iar prea carcotas taman cand in fapt a devenit singura solutie reala curenta pentru o problema semnificativa in joc4 nu-mi pare intamplator deloc5. Practic cu fiecare noua utilizare/functie oferita, codul isi extinde inevitabil expunerea la potentiale probleme. Intai pentru ca deh, orice activitate noua vine cu propria-i portiune de potentiale greseli si moduri de a o da in bara. Al doilea si potential mai relevant aici pentru ca o noua activitate extinde de asemenea tipurile de interactiuni si situatii pentru care botul trebuie sa fie complet pregatit, unde complet pregatit inseamna in ultima instanta ca botul e perfect (si mereu) capabil sa iasa la liman cand diverse lucruri merg prost/neasteptat/deloc. Ori asemenea capabilitati de reactie sunt strans legate de designul botului: daca n-a fost conceput cu ochi/urechi/senzori sa deduca singur cand ramane lumea in urma timpului altminteri, nici n-o putea face asa minune brusc, ori in tot cazul n-o va face foarte bine.

Sigur, ca oricarui lucru care evolueaza, i se pot atasa si botului diversi senzori dupa nevoie (iar designul actual e voit suficient de flexibil sa permita atasamente la o adica). Insa extensiile astea au un cost. Mai mult decat atat, au si potentialul de a extinde utilitatea botului - aducand deci noi probleme. Nu-i greu deloc de intrat intr-o spirala care nu prea poate duce lasata de capul ei decat la cod fix din acela plin de bube, mucegaiuri si viermi colcaitori. Motiv pentru care chiar nu ma grabesc deloc sa fac adaugiri din astea asa, peticeli create cu bune intentii si cu zero evaluari de impact ori efect real pe termen mai lung (ori arie mai larga). N-am nici cea mai mica intentie sa fac botul care face prost totul pe post de imbunatatire la botul care face mai putin, dar bine.

Totusi, daca n-am de gand sa fac peticeli nu inseamna ca am inghetat botul asa cum e si n-oi modifica nimic veci. Nicidecum. Deocamdata insa prefer sa las - si chiar ajut - utilizatorii sa il modifice fiecare dupa cum gaseste ca-i mai bine pentru situatia lui anume. Si daca la un moment dat o reiesi din toate modificarile acestea separate ca anume exista o schimbare cu adevarat utila si realizabila pentru cazul general, atunci o voi pune pe lista pentru implementat, desigur. Pana atunci insa, Foxybot va ramane imi pare mai carcotas asa, mai ales cand lumea Eulorei nu tine pasul si-si amesteca haotic trecutul cu prezentul dupa cum ii vine.

Intre timp, eu imi vad de treaba programand alte solutii la probleme de se anunta chiar mai interesante fix in modul acesta care-mi place mult de tot: odata rezolvate, deschid cai noi. Asa ca pe langa design de boti, jucat la propriu, discutat potentiale modele de dezvoltare software si multe alte lucruri chiar delicioase, se cheama iata ca am revenit la programat si chiar nu-mi pare rau deloc, ci dimpotriva. Cu mentiunea ca daca programarea e chestia aia de o faci la servici/scoala pentru ca trebuie si nu pentru ca vrei, inseamana ca ori n-ai treaba cu programarea ori nu programezi ce trebuie (posibil amandoua). In toate cazurile, Eulora oricum nu pleaca nicaieri.


  1. Din motive structurale asa ca inevitabile. 

  2. CAT de scarbos anume e o intreaga discutie care poate merita purtata odata mai in amanunt, dar pana atunci a fost un pic mentionata aici 

  3. Atata cata e, ca deh. 

  4. Gasirea resurselor in joc e o parte fundamentala deoarece resursele sunt folosite ca elemente de baza in diversele lanturi de productie. In plus, cererea de resurse e mai mare decat productia curenta si in consecinta e nevoie de *munti* de resurse care se gasesc asa bucata cu bucata, migalos. Mai mult decat atat, resursele gasite pot fi grele ceea ce inseamna ca omul nici nu poate cara prea multe. Foxybot rezolva problemele astea dintr-un foc folosind un container ca sa depoziteze practic oricate resurse si sa poata deci explora fara intrerupere 24 de ore sau si mai mult - practic cata vreme are unelte si ce-i mai trebuie ca sa extraga resursele, n-are treaba. 

  5. S-ar zice ca nici altora nu le pare dat fiind propunerea unui model "planetar" de dezvoltare software pornind -macar in parte- de la experienta cu Foxybot.