Astăzi se împlinesc 12 ani de când s-a vândut prima licență software pentru un produs realizat în cadrul firmei pe care am fondat-o în 2004!
Încă-l mai avem în listă – pur și simplu pentru că încă sunt clienți (developeri) care-l doresc. Oferim, desigur, alternative moderne (și – spoiler alert! – lucrăm intens la ceva și mai și), dar primul nostru Gantt Chart (the original ProjectView) pentru WinForms poate rula fără probleme chiar și în aplicațiile WPF bazate pe cel mai recent .NET Framework (4.7.2), grazie Microsoft – their backwards compatibility is absolutely great!
Dar nu ca să fac reclamă am postat acest articol azi, ci cu speranța de a oferi, eventual, puțină inspirație cuiva, dacă ar avea vreodată nevoie. Mai bine v-aș povesti, așadar, câte ceva din perioada de dinainte de acești cei mai recenți 12 ani; de fapt chiar puțin mai de demult: din viața “anterioară”, de programator “for fun”.
M-am gândit deci că, deși din păcate nu mai am source code-ul și nici executabile pentru programele listate mai jos (cel mult mă pot baza pe câteva persoane-martor ca să demonstrez că ele chiar au existat), ar putea fi interesant să indic o serie aplicații pe care le-am “envision-at” și le-am scris folosind tehnologiile disponibile prin acea perioadă. (Postându-le aici, mă asigur și că nu le uit nici eu de tot.) 😉
1. “Compilator” de scheme logice
Scris în Pascal folosind mediul de dezvoltare cu nume de Porsche (“Turbo” Pascal), oferea o interfață grafică simplă (pentru ecran EGA de 16 culori) ce permitea definirea unor scheme logice plasând pur și simplu cu mouse-ul (chiar dacă nu încă cu dragging) blocuri de diferite tipuri, precum start, set, input, check, sau stop, plus săgeți de legătură, într-un grid pe ecran și completându-le apoi cu “bucăți de cod” introduse de la tastatură și afișate în interiorul shape-urilor de pe ecran.
Când erai gata și aveai diferite “căi de rulare” de la start la stop se făcea o mini-validare iar apoi… se genera (foarte simplu!) un program .pas într-un fișier temporar, conținutul fiind bazat pe schema ta, fișier ce era apoi compilat cu TPC.exe către un executabil de asemenea temporar, iar acesta din urmă rulat, în final, automat, într-un proces separat.
Nu era deci un compilator propriu-zis, nu genera direct cod mașină, dar dacă vedeai sistemul ca pe un black box – funcționa întocmai ca un mediu de dezvoltare cu compilator inclus!
(L-am scris prin clasa a 9-a și l-am prezentat – oh my! – la o așa-zisă “sesiune de comunicări științifice”, la Hunedoara. “Let the beat Ctrl-F9!”)
2. Educative: optică geometrică
La fizică în clasa a 11-a, parcă, am învățat câte ceva despre optică: lumină, oglinzi și reflexie, lentile și refracție. Cam în acea perioadă vedeam și eu Windows (3.1) pentru prima oară: sistemul de operare devenea grafic, aplicațiile deveneau event driven (dar puteau fi scrise totuși în continuare în Pascal – exista deja Borland Pascal for Windows, apoi a venit și Delphi!) Așa da, faină viață! Am putut scrie deci rapid o mini-aplicație Windows pentru școală pe care cred că am și prezentat-o profesoarei de fizică:
aveai un obiect vertical undeva în mijloc, apoi puteai așeza, oriunde pe orizontală (cu mouse dragging de această dată!) o sursă de lumină, un element cu rol de ecran, dar și lentile și oglinzi concave sau convexe de diferite înălțimi (de fapt distanțe focale) pentru a vedea ce se întâmplă: cum se vede oare obiectul în urma trecerii luminii? Totul era live, adică în timp ce mutai o lentilă (de exemplu) umbra de pe ecran devenea mai mare sau mai mică, în funcție de distanțele dintre obiect și lentilă, respectiv lentilă și ecran, de distanța focală a lentilei respective ș.a.m.d.
(Similar, am scris ceva mini-app și pentru chimie la un moment dat, dar chiar nu mai știu despre ce era vorba, nici măcar dacă era pentru organică sau anorganică…)
3. Jocuri
Apăruseră deja și jocurile pentru Windows – precum foarte simplul, dar mult jucatul Columns, care însă avea și un mic bug și uneori crăpa de-ți pierdeai toate punctele fără să fi greșit tu – dacă venea o coloană cu un anume set de culori și jos aveai blocurile aranjate într-un anume fel – așa că m-am gândit să scriu și eu unul, mai “jmeker”. Rezultatul a fost Fă 3. Un joc similar cu Columns, doar că de sus veneau seturi de 3 bile în loc de 3 pătrate, iar acestea “curgeau” în partea de jos, nu se așezau ca la Tetris, dar dispăreau tot când erau câte 3 de aceeași culoare. (Câtă distracție a adus vizitatorilor noștri!)
Dar am scris și jocuri cu cărți – fain era Solitaire, așa că trebuia să “scot” și eu ceva; folosind pentru prima oară imagini bitmap (reprezentând “culorile” cărților de joc): Șeptică americană a fost o simulare exactă a jocului cu doieri și șeptari, practicat împotriva computerului; apoi încă unul, gen Video poker, dar mai special: după ce câștigai “jetoane” puteai să ți le dublezi sau să le pierzi cu totul dacă nimereai, respectiv nu nimereai culoarea unei cărți trase la întâmplare din pachetul rămas (de maximum 7 ori, parcă, la sugestia tatălui meu.)
4. Productivity: cheltuieli la bloc
Pe vremea când abia auzisem de Excel era mai simplu să scriu algoritmi de calcul pentru sumele de plată per apartament, în funcție de metri pătrați sau de numărul de locatari, distribuite corect pe scări și considerând diferite excepții (precum “neracordații”), așa cum ar fi fost nevoie la administrație, în Basic. Visual Basic 6, dacă nu greșesc.
(Mai târziu, precursor al lui Visual Studio, mi-a plăcut și am folosit mult și Visual J++; înainte de C#, Java a fost “tatalor” din punctul meu de vedere, inclusiv pentru a dezvolta aplicații Windows!)
5. Diverse
În această secțiune aș putea include, de exemplu, primul meu “Paint” (sau cum l-oi fi numit) în GW-BASIC, în care mișcai un cursor de tip punct cu tastele săgeți, iar cu spațiu schimbai starea: apăsat – lăsa dâre colorate, respectiv neapăsat – nu lăsa/ștergea punctele peste care trecea. Iar tastele de la 0 la 9 alegeau culori dintr-o paletă fixă.
… Plus altele asemenea, dar nu mi le mai aduc aminte bine. (U-u, ce vremuri! În orice caz, pe atunci lumea cam râdea când susțineam că-n viitor voi fi programând… pe bani!…) 😀
6. Lista se încheie aici, dar ghiciți voi ce făcea programul ăsta de final
Iată pașii de pseudo-cod care se executau la rularea executabilului pentru MS-DOS care-l conținea – dacă bine-mi amintesc, scris fiind în C++:
- Uneori, alege la întâmplare un fișier F de tip .exe, altul decât cel care tocmai rulează (P), din directorul curent, dintr-un subdirector (dacă există), din directorul părinte (dacă nu cumva procesul curent rulează din rădăcina unui disc), sau dintr-un alt director din cadrul aceluiași părinte;
- Dacă s-a ales un fișier F, citește B = array de N bytes din fișierul P.exe asociat procesului curent (N este o constantă determinată empiric);
- Dacă primii maximum N bytes ai fișierului F sunt diferiți de array-ul B, deschide acel fișier F în read-write mode și inserează conținutul B la începutul său, păstrând restul intact (utilizând eventual un fișier temporar pentru intermedierea operației); dacă este imposibil de citit sau de salvat fișierul F modificat, nu afișa nicio eroare;
- Citește R = restul de M bytes, sărind peste primii N din fișierul executabil P care tocmai rulează;
- Dacă M > 0, scrie baiții R într-un fișier temporar cu nume ales la întâmplare T.exe în directorul curent (verificând în prealabil că un asemenea fișier nu există deja, altfel încercând alt nume aleatoriu), rulează executabilul respectiv, iar la sfârșit șterge definitiv fișierul T pentru… a nu da de bănuit.
Nu vă speriați: n-am distribuit niciodată acest ultim program, nimănui, doar câțiva apropiați l-au văzut, și numai pe 386-le meu. 🙂