Despre mine

Ionut Grecu

  • Programator Web & Software
  • 34 ani
  • 12 ani experienta
  • Din Romania, Constanta
  • 250+ proiecte
  • Limbaje de programare: PHP, Delphi, Javascript, VB

Despre mine pe scurt:

Perseverent pentru ca nu las probleme nerezolvate. Prin studiu intens si multa munca, am indeplinit cereri greu de realizat, avand si multa incredere in puterile proprii. Ador provocarile.

Organizat in aproape tot ceea ce fac, creand rutine pentru aproape orice. Gazduires & backup & monitorizez peste 130 de site-uri, si asta NU-mi ocupa tot timpul, dimpotriva. Folosesc scripturi sh, cmd si cron-uri.

Orientat spre experienta utilizatorului in general. Deseori, dupa ce realizez un proiect, observ cum este folosit programul de catre client sau de catre diferite persoane care, fara sa stie, devin testeri iar procesul de testare este mascat in utilizare gratuita a acelui serviciu. Scopul final este de a crea interfete cat mai intuitive si usor de inteles de catre persoane atehnice pentru a reduce numarul de intrebari si a scurta trainingul.

Autodidact pentru ca am invatat programare, si inca invat, din nevoia de a rezolva anumite probleme si de a eficientiza procesele, din curiozitate si din dorinta de a vedea proiectele la care lucrez cat mai repede lansate. In prezent creez aplicatii in Delphi, PHP si Javascript, dar nu mi-e frica de nou.

De-a lungul timpului, am dezvoltat un CMS propriu, modular si optimizat pentru SEO si viteza, cu care am adus pe prima pagina in Google zeci de site-uri din diferite domenii de activitate. Cea mai recenta versiune a acestui CMS este bazata pe Yii2 in back-end si Angularjs pentru Admin Area.

Am inceput sa programez inca din anul 1998, din scoala generala, pe un calculator vechi HC90, pe care l-am cumparat de la un prieten contra cateva beri (nu e ceea ce crezi, la 14 ani foloseam berea ca moneda de schimb).

In 2004 am facut cunostinta cu microcontroller-ele (in cadrul unui proiect despre care iti voi povesti doar daca ne vom cunoaste) si am inceput programare in assembler la inceput. Dupa cateva proiecte in assembler, pline de bug-uri dar foarte eficiente ca memory footprint, am descoperit Proton Pic Basic pentru microcontrolere, care semana oarecum cu ceea ce stiam deja.

Apoi am descoperit Visual Basic 6 in care am creat cateva aplicatii mai mult in scop autodidactic: gestiune oferte imobiliare, file sharing (o noua metoda la acea vreme) cu server intermediar, program de rate (pentru firma la care lucram), installer-e, backup arhivare&upload, boti de Mirc si Yahoo Messgenger si program de contabilitate primara nefinalizat.

Tot atunci am creat si un joc online bazat pe browser care necesita un server pe Windows si consta intr-un program scris in VB6 pe post de server HTTP ce genera paginile HTML. Jocul a functionat initial pe domeniu footbalmania.net , mai tarziu l-am rescris in PHP si mutat pe gogoal.org. In prezent jocul este retras din online si trecut in stand-by din lipsa de timp.

HTML si CSS am invatat, pentru ca mi-a trebuit pentru jocul manager de fotbal, folosind un editor cu autocomplete.

In 2007 am obtinut primul job de programator. Incepand cu acest moment, am practicat programare intensiva in aproape fiecare zi. 

Primul site propriu-zis, un portal de divertisment, a fost scris integral in PHP, iar navigarea in site am ales sa o fac cu AJAX. Nestiind de jQuery la acea vreme, a trebuit sa-mi creez propriile functii de AJAX cat si niste librarii in Javascript.

Apoi, pe langa site-uri obisnuite, in perioada 2007-2011 am creat aplicatii complexe in cadrul firmei de webdesign la care lucram:

  • aplicatie de examene si cursuri online cu configurator examene si client local, scris in VB6, pentru examinare fara conexiune la internet
  • program de comenzi, configurator proiecte si estimator de pret si calculator rate
  • reteaua de advertising Bointer avand interfata online cat si client instalat local, scris in VB6, pentru afisarea reclamelor
  • portal de job-uri pentru piata SADC (tarile din Africa de Sud), cu aplicatie offline scrisa in VB6 pentru a accelera administrarea portalului din cauza vitezei mici a internetului in acea regiune
  • site-uri in Flash

Pana in 2009, am pus bazele qEngine alpha, un framework propriu dezvoltat in urma cererii de functionalitati din partea clientilor cat si a nevoii de a refolosi nucleul unei aplicatii online. La inceput nu l-am numit nicicum, pentru ca nu exista ca si produs distinct, ci doar o colectie de functii si librarii.

Desi eram hotarat sa creez si un framework Javascript, la sugestia unui prieten, am incercat jQuery, care facea tot ce aveam nevoie cat si multe lucruri despre care nici nu stiam ca imi trebuie. 

In 2010 am definitivat qEngine v1, un framework PHP, extensibil prin module, ce suporta teme, traducere site in mai multe limbi si interfata de administrare built-in. Pentru acest framework am scris ~40 de module de: e-commerce, blog, anunturi, galerii foto/video, cataloage, imobiliare, administrare utilizatori, etc.

Incepand cu 2011, am facut un pas important in drumul de programator si am decis ca pot realiza mai multe pe cont propriu. Asa ca am inceput sa lucrez ca "self employed", avand direct clienti si proiecte din Constanta la inceput, apoi din Romania, proiecte prin colaboratori, si cateva castigate pe site-urile de freelancing.

In anul 2012 am definitivat qEngine v2, o varianta mult imbunatatita si optimizata a qEngine v1. In plus am introdus Smarty ca template engine, sistem de caching avansat si Twitter Bootstrap pentru teme responsive. Tot atunci, am abandonat librariile proprii de Javascript si am adoptat jQuery ca framework Javascript prezent permanent in qEngine. Pentru qEngine v2 am creat peste 20 de module: e-commerce, blog, anunturi, galerii foto/video, cataloage, imobiliare, administrare utilizatori, etc.

In aceasta perioada am inceput sa invat administrare sisteme Linux, pentru a trebuit sa trec de la hosting Shared la server propriu, datorita cererii crescande de resurse necesare proiectelor. Am testat foarte multe aplicatii de administrat webhosting precum: Cpanel, Kloxo, Virtualmin, Zpanel, etc. Concluzia finala a fost un sistem LNAMP (Linux Nginx Apache Mysql PHP) bazat pe Vesta CP, care vine configurat la pachet cu Apache pentru compatibilitate si Nginx ca reverse proxy si livrare de continut static. Pe aceasta platforma am implementat si niste API-uri de Whois, HTML2PDF, image resize, retea CDN cu load balancing catre alte servere dedicate stocarii, ip rotation pentru trimitere de mailuri, etc.

Pe la sfarsitul 2014 am incercat sa scriu qEngine v3 bazat pe Yii1, proiect pe care l-am abandonat pentru la scurta vreme se lansase Yii2.

La inceputul 2015 am inceput lucrul la qEngine v4, bazat pe Yii2. qEngine a devenit iqApp, si foloseste cele mai noi tehnologii web:

  • Yii2
  • Bootstrap
  • PHP ca template engine, Smarty l-am abandonat
  • jQuery
  • Angularjs, pentru partea de administrare

iqApp v4 este la inceput, in prezent, pe el este creata partea de "client area" a platformei cloudpro.ro , cat si acest site. Este creat avand in minte urmatoarele: user-friendly, caching intensive, multi-language, multi-currency cat si "write once, run anywhere" prin folosirea Angularjs.

Inca din 2014 am inceput lucrul la un program de facturare in Delphi, varianta anterioara a programului fiind scrisa in VB6. In ciuda limbajului oarecum invechit comparativ cu C# sau .NET de ex., am apreciat avantajele practice ale solutiilor Delphi:

  • compilare Windows, Mac OS, Linux
  • compilare pentru Android si Ios
  • compilare pentru aproape orice are procesor: Raspberry PI, smart-watch, smart-glass, etc.
  • programele mult mai stabile pe noile sisteme de operare Win 8 si Win 10, comparativ cu cele scrise in VB6
  • Pe pc, executabilele functioneaza de la sine, fara a fi nevoie de a instala alte librarii gen: vb runtime, .net framework, java, flash sau alte minunatii. Cel mult am avut nevoie de doua DLL-uri pentru SSL, si dll-urile pentru Chromium, pentru a avea un browser propriu diferit de IE.

Tot in 2015, pe cand lucram la un proiect in Delphi de productie si gestiune stocuri, la cererea clientului, a trebuit sa modific interfata default a Delphi conform unei teme alese din mai multe trimise ca propunere. Problema a fost ca tema era scrisa in HTML+Bootstrap, dar aplicatia trebuia sa ramana instalabila pe calculatorul clientului. Asa ca am folosit Chromium (motorul din spatele Google Chrome) pentru a ma asigura ca grafica programului se vede identic pe orice calculator, indiferent de versiunea Internet Explorer, exe-ul compilat in Delphi ca si controller, si SQLite pentru baza de date.

Si asa, din aproape in aproape, de la assembler am ajuns sa creez aplicatii de tip "write once, run anywhere" (WORA) inclusiv browser-based cu framework-ul iqApp, care a ajuns sa fie mult mai usor de intretinut datorita comunitatilor active ce sustin diferitele proiecte Open Source pe care se bazeaza iqApp.

In 2017...

In 2018...

...va urma...

 

De-a lungul timpului, am comis destul de multe greseli in programare. Din greseli am invatat multe principii de programare: DRY, KISS, YAGNI, "premature optimisation", "code coupling", etc.

Primul hack a fost un cap de drac pe site-ul clientului. Atunci am inteles cat de serios trebuie tratata securitatea pe web si ca niciodata nu trebuie avuta incredere in datele provenite de la utilizatori. Validari pe parte de server si "sanitize" sunt pe lista obiceiurilor frecvente. Al doilea hack a fost steagul hacker-ilor algerieni si a fost din cauza softului prost configurat de pe server (de fapt tot din cauza mea) cand am trecut la VPS. Al treilea nu a mai existat.

Backup incremental pentru fisiere si total al bazelor de date sunt pe lista de task-uri zilnice automatizate. Am "creat" multe site-uri in Wordpress si m-au albit in cap vulnerabilitatile ce veneau la pachet cu plugin-urile dar si unele teme. Pe unele le-am rezolvat cu țigănii gen chmod sau chown.

Atat in qEngine v2 cat si in iqApp v4, am optimizat sistemul de caching incat in prezent administrez peste 130 de site-uri, avand un trafic lunar pe tot serverul de peste 3 6000 000 de accesari, dintre care sub 40% atinge apache, servirea continutului din cache se face direct de catre nginx, si sub 5% este prelucrat de PHP (continutul pentru care nu exista cache), astfel am redus CPU load la minim. Impresia de real time este data de mecanismul de invalidare cache in functie de continutul care se modifica. Fisierele statice (imagini, js, css, video, etc) sunt cache-uite de reteaua CDN iar traficul pe serverul principal se reduce aproape numai la fisiere html si php. Main-serverul are o incarcare CPU medie de 0.6, si pana la 1.9 in perioadele de varf. Procesor XEON E5-2620 x 4 cores, 2Gb Ram, SSD.