momente şi schiţe de informatică şi matematică
To attain knowledge, write. To attain wisdom, rewrite.

Despre acest site, în 2018

Am început acest site în 2007 (avem mai jos, un Istoric). Îl revizuiesc, la începutul lui 2018; este la modă Bootstrap - dar o să-l ignor: am deja conţinut propriu consistent (şi ne-adresat telefonului); nu folosesc nici breadcrumbs: navigarea între pagini este asigurată foarte bine de către browser (a folosi "Go back one page" şi "Open Link in New Tab") şi doar, am prevăzut câte un link "Home".
Mai precizez că nu folosesc reţele de socializare; pot fi contactat prin mail (adresa este indicată în subsolul paginilor) şi dacă este cazul, putem discuta orice chestiune privitoare la acest site.

Articole (sau schiţe) şi aplicaţii

Avem aici articole şi aplicaţii (sau "aplicaţii Web"), pe teme de informatică şi|sau matematică (elementară). La modul ideal, articol înseamnă ceva care poate fi luat în seamă pentru publicare într-o revistă "de specialitate" (de nivel elementar); i se poate recunoaşte o anumită consistenţă ştiinţifică, o anumită doză de originalitate şi de calităţi literare (și promovăm limba română); eventual, poate servi altora pentru propria lor instruire. Este drept că eu am început să scriu articole cu mult timp înainte de a fi vorba de acest site, iar această înţelegere a termenului mi-am format-o citind în felul meu (de pe când eram elev), "Gazeta de Matematică" (care şi introdusese categoria de "articol metodico-ştiinţific").

Dar aici, să zicem mai bine că în general avem schiţe de articol (şi nu articole, în sensul ideal precizat) - diferenţa principală ţinând de concizie şi de concentrarea demersului: acestea sunt specifice, în revistele "de specialitate" - ori eu amănunţesc mereu lucrurile (că "în informatică, amănuntele sunt esenţiale)" şi nu mă feresc nici de anumite conexiuni sau divagaţii (în plus, unele schiţe se înlănţuie în timp şi conţinut, dezvoltând treptat tema respectivă).

Nu prezint "limbajul de asamblare", sau "limbajul R" etc., ca atare - pentru aceasta, există manuale şi site-uri atractive - ci folosesc efectiv diverse limbaje (cu lămurile şi conexiunile cuvenite) pentru a dezvolta chestiuni nebanale (abordez calculul factorialelor - dar nu factorial de 3, ca în manuale - şi implic programul executabil rezultat, într-o aplicaţie Web; ocupându-mă de orarul şcolar, apelez şi la limbaj de asamblare, încercând generarea unui orar fără ferestre). Este drept că asemenea "articole" nu sunt uşor de citit şi nu se încadrează în categoria "post" (la modă pe Internet, pentru bloguri).

Articolele sunt legate adesea de aplicaţii (încât acest site surclasează nivelul de simplu "depozit"). Realizarea unei aplicaţii (se subînţelege, nebanală) nu se reduce la scrierea de programe; sunt multe aspecte de avut în vedere şi de disecat, pe deasupra. Am ajuns cu timpul (este drept că şi am timp) la această "metodă de elaborare": lucrez simultan, la aplicaţia propusă şi la un articol referitor la aceasta; au rezultat astfel articole foarte lungi, care prezintă "pas cu pas" dezvoltarea aplicaţiei, intercalând lămuriri şi experimente specifice temei respective sau limbajelor implicate. Cele câteva aplicaţii legate de şah sunt "mână în mână" cu articolul Modelarea tablei şi jocului de şah; iar în articolul Un proiect PGN-games cu R, Django şi PostgreSQL dezvoltăm "pas cu "pas" o aplicaţie concretă şi trecem "pas cu pas" de la Django 1.8 şi MySQL la Django 2.0 şi PostgreSQL.

Adesea, ne permitem divagaţii provocate de starea greşită a lucrurilor. "Informatizarea" a devenit microsoftizare: site-urile instituţiilor publice sunt de fapt, depozite de "Microsoft Word document" sau PDF (plus poze şi animaţii stupide); vrem un set de date (privind salarizarea, să zicem), dar găsim nu date, ci poza tipărită a acestora. Iar învăţământul preuniversitar a căpătat menirea (uluitoare) de a forma viitori clienţi pentru piaţa Microsoft, sau point-and-click: programele şcolare vizează utilizarea produselor Microsoft (Windows, Word, PowerPoint, Excel, Access, VisualFoxPro) şi pe deasupra, "programarea" în C++ utilizând pseudocod şi Code::Blocks Studio, sau "realizarea" de aplicaţii Web folosind un editor vizual de HTML.

Instrumentarea progresului

Riscăm nişte întrebări stupide: ai de învăţat să foloseşti o interfaţă precum CodeBlocks (cât mai impresionantă, cu o groază de meniuri, submeniuri şi butonaşe frumoase pe care trebuie să faci click şi gata) - sau ai de învăţat limbajul C? Ai de învăţat "limbajul C++", sau ai de prins cum să foloseşti un limbaj sau altul (că nu o singură limbă, există)? Ai de învăţat cum să formatezi prin butonaşe un text ca să-l tipăreşti, sau ai de prins cum să scrii un text, sau vreun tabel de date încât acesta să poată fi exploatat apoi în diverse moduri? Pentru ce formulezi un text (şi există fel de fel de categorii de text) - trebuie doar să-l poţi tipări şi admira? "Informatizarea" asta - trebuie să tripleze an de an cerinţa de hârtie, sau dimpotrivă, ar trebui să o reducă? O fi informatica aşa de simplă ştiinţă, încât maniera point-and-click instituită prin programele şcolare, plus ceva "algoritmică" (şi nici nu-ţi trebuie "matematica" sau "Limba română") - să-ţi asigure atestarea ca informatician? Informatica asta, nu are şi ea o istorie şi o devenire - totul o fi început şi sfârşit cu firma Microsoft?

Acum 40 de ani apărea prima carte de "limbajul C" (K&R); nu existau produsele Microsoft şi abia apăruse ideea de a ataşa calculatorului un mouse - încât autorii erau "obligaţi" să folosească un sistem UNIX (încorporând un modest editor de text). Chiar la început, era explicitată practica utilizării limbajului: scrii "sursa programului" în fişierul "hello.c"; lansezi compilatorul 'cc' pentru fişierul respectiv, tastând pe linia de comandă "cc hello.c"; obţii astfel, "fişierul executabil" a.out; poţi executa apoi programul, tastând 'a.out' pe linia de comandă.

Aceasta este maniera cea mai firească şi cea mai eficientă, de folosire a oricărui compilator (şi a majorităţii interpretoarelor existente); în principiu, chiar nu ai nevoie să foloseşti instrumente sau interfeţe intermediare (precum CodeBlocks). Ai de folosit doar un "terminal" şi un editor de text; terminalul îţi asigură posibilitatea de a te folosi după caz, de facilităţile oferite de către sistemul de operare - poţi invoca de pe linia de comandă, comenzi interne sistemului, diverse programe utilitare, un compilator sau altul şi poţi lansa în execuţie un interpretor sau un program executabil oarecare; desigur, se cuvine ca editorul de text să-ţi ofere facilităţi de marcare a sintaxei, pentru diverse limbaje (este suficient de bun gedit - editorul implicit din Ubuntu-Linux).

Precizez că eu am folosit (mult timp) Microsoft Windows şi Microsoft Office; chiar am fost obligat de împrejurări, să editez cu Microsoft Word o carte de aproape 300 de pagini (v. Limbaje şi Calculator (de la nivel-înalt, la microprocesor)). Dar pot să-mi dau seama: deschiderile masive de cunoaştere şi înţelegere a lucrurilor (incluzând "bunele practici") au început odată cu aderarea treptată, la Linux (iar apoi, şi la Internet); dintrodată, vezi că există şi altceva decât Basic, Borland C++, Pascal şi VisualFoxPro şi există şi altfel de lucruri (not "WYSIWYG") decât Microsoft Word.

Apropo de această trecere - îmi place să povestesc cum de am început să abandonez Windows şi să ader la Linux… (şi sper că este şi relevant, pentru ce înseamnă fiecare).
Un anumit număr de ani reuşisem să mă impun în câteva şcoli din judeţ cu o aplicaţie de salarizare pe care o realizasem folosind Microsoft VisualFoxPro; apăreau frecvent modificări legislative (sau situaţii particulare) şi cam în fiecare lună, aveam de umblat prin şcoli cu discheta (mai târziu, cu CD-ul; mai târziu, cu un stick) pentru a actualiza programul respectiv pe calculatorul pe care opera contabila.
Prin 2004, aflu în una dintre şcolile respective: "ştiţi, a fost pe la noi cineva de la firma XXX, cu o ofertă de program de salarizare. I-am spus că avem şi suntem foarte mulţumiţi, de programul d-lui profesor Bazon"; m-a întrebat imediat: "da' cu ce-i făcut programul?" şi i-am răspuns, zice d-na contabilă: "cu VisualFoxPro7" - iar el mi-a zis cam aşa: "Ha-ha... da ce, are Bazon licenţă pentru Microsoft VisualFoxPro?! Şi… se pare că ne trebuie şi nouă, licenţă."
Nu aveam licenţe (…sper că lucrurile s-au prescris) şi era o perioadă (care s-a dovedit a fi scurtă) în care se vânau şi se dădeau amenzi colosale pentru asemenea situaţii… Cred că de chiar a doua zi, am luat în serios opţiunea de a rescrie aplicaţia "pentru Linux" (de care mai ştiam câte ceva, dar folosisem într-o doară); dar nu mai putea fi vorba de o aplicaţie "obişnuită" (de montat cu stickul, pe fiecare calculator), fiindcă în şcoli găseai numai şi numai Windows. Ei - după vreun an, reuşeam să pun la dispoziţia şcolilor o aplicaţie Web (foloseam perl, MySQL şi framework-ul Catalyst) pentru "salarizare prin Internet" - utilizată apoi în câteva şcoli din ţară până în noiembrie 2011 (când ministerul a impus în toate şcolile aplicaţia de salarizare pe care o contractase ca de obicei, cu firma SIVECO).

Dresarea vreme de atâţia ani (cel puţin cei patru, ai perioadei preuniversitare) cu produse Microsoft şi în general, numai cu tehnologie point-and-click - obturează "bunele practici", îngustează perspectivele şi limitează drastic capacitatea de progres a individului. Se poate face educaţie muzicală "după ureche" (ceea ce ar fi analog educaţiei informatice bazate pe point-and-click), dar numai aşa, în general vorbind, vei ajunge un muzician cel mult mediocru.

Istoric

La începutul lui 2005 apărea prima versiune stabilă a framework-ului perl Catalyst şi l-am folosit (împreună cu modulele Class::DBI şi Template::Toolkit) pentru a produce site-urile //lar.sitsco.com şi //salar.sitsco.com ('lar' venea de la "Liceul Anghel Rugină", iar 'sitsco' de la "situaţii şcolare"…).

Până pe la mijlocul lui 2007, //lar.sitsco.com era un "site-ul şcolii" (orar, forum, documente şcolare ("regulament", "raport de autoevaluare", etc.), mici aplicaţii pentru browser, o galerie cu desene ale elevilor şi ceva articole). Dar nu m-am străduit să caut soluţii pentru a facilita editarea (în Word…) şi postarea de către terţi; era "site-ul şcolii" ziceam eu, dar n-am reuşit să iniţiez colaborările cuvenite.
Ar fi de precizat că încă nu apăruseră "telefoanele inteligente", nici site-urile de socializare; se folosea cu precădere "calculatorul de buzunar" şi lumea abia învăţa să introducă "username" şi "password", iar Internetul se rezuma la "edu.ro" şi Messenger.

Ambele site-uri au fost contestate vehement: "nu putem admite afişarea situaţiilor şcolare pe Internet", "nu se poate face salarizarea prin Internet, din cauza hackerilor - că salariile sunt confidenţiale" (redare aproximativă după un "Proces Verbal" oficial, dintr-un "consiliu profesoral"), "siteul şcolii trebuie să aparţină elevilor şi să fie realizat de elevi", "revista şcolii şi siteul şcolii trebuie să conţină articole ale elevilor (nu ale profesorilor)", etc.

Mai mult - "poate şi altcineva să facă orarul" (că nu trebuie expus pe Internet), iar în perioada 2007-2009 am fost chiar degradat birocratic la statutul oficial de "profesor necalificat"… Din 2007 am renunţat la pretenţiile de "site-ul şcolii", păstrând doar secţiunea de "orar" (colaborând cu cel care făcea efectiv, orarul şcolii), iar în 2009 am achiziţionat domeniul "docere.ro".

Dar am neglijat să mă ţin la curent cu dezvoltarea framework-ului Catalyst (de exemplu n-am reuşit să mă "dezvăţ" de Class::DBI, pentru a adopta şi eu DBIx::Class). Un framework nu se poate folosi precum un "produs final" (descarci, instalezi şi foloseşti vreo 10 ani); instrumentele de dezvoltare oferite sunt bazate pe anumite standarde actuale şi odată cu progresele recunoscute în contextul acestora (şi cu noile dileme), se modifică în mod inerent şi frameworkul respectiv.

Cu alte cuvinte, dacă ai adoptat un anumit framework pentru a-ţi produce aplicaţia - atunci trebuie să urmăreşti permanent modificările apărute de-a lungul timpului şi să-ţi actualizezi corespunzător propriul cod. Dar posibilităţile de documentare depind de framework-ul respectiv. Pentru Catalyst cea mai bună sursă de documentare rămâne însuşi codul propriu al pachetului - ceea ce este în fond general valabil, dar dificil de exploatat practic; din acest motiv am început să fiu nemulţumit (dar este vorba de propriile limite sau gusturi şi nicidecum de valenţele Catalyst-ului).

În 2010 am descoperit Symfony - un web-framework bazat pe PHP. Mie îmi era urât PHP-ul (dar nici nu-l ştiam decât de circumstanţă): îmi părea a fi un maldăr dezorganizat de funcţii amestecate, pentru toate cele (chiar aşa era, până la PHP 5) şi nu-mi plăcea de loc ideea de a îngloba cod executabil într-un fişier HTML, amestecând lucruri care ar trebui să rămână separate. Dar m-a cucerit documentaţia oferită de Symfony (demersuri generale şi motivaţii contextuale excelent construite şi dezvoltate cu o logică remarcabilă; claritate dusă până la amănunt).

Am reconstruit //docere.ro, folosind Symfony 1.4; pagina de bază arăta cam aşa:

În 2011 am urmat pe ai-class, cursul (gratuit, la vremea aceea) "Online Introduction to Artificial Intelligence, based on Stanford CS221" şi m-am ocupat mai mult de Python (văzând de exemplu AIMA-code repository). Am ajuns astfel să reconstruiesc acest site folosind Python, Django şi jQuery (abandonând PHP şi Symfony), continuând fără modificări majore până la începutul lui 2018, când pagina de bază apărea cam aşa:

Se vede din cele evocate mai sus, că m-am preocupat în principal de conţinut (elaborând mereu articole şi aplicaţii) şi doar din când în când, de concepţia şi "layout"-ul site-ului; în orice caz, de mai mult timp a ajuns să-mi displacă şi mie, ceea ce se vede în imaginea redată mai sus - nu recunosc sensul pentru care ai stabili o culoare de fundal pentru textul articolului; nu prea are sens să pui linkuri pe fiecare tag (tagul 'Django' de exemplu, apare la multe articole - încât se va repeta de nenumărate ori un acelaşi link); "paginarea" în browser (vezi bara de navigare de la baza imaginii) este doar un surogat (se aplică după ce s-au primit toate rezultatele) - ar fi de paginat nu rândurile derulate în fereastra browserului, ci obţinerea efectivă (la nivelul serverului) şi transmisia rezultatelor.

Reconstrucţie, în 2017-18

Acum reconstruiesc site-ul folosind Django 2.0, Python 3.5, PostgreSQL, jQuery şi mathJax şi revizuiesc întregul conţinut, orientările mele principale fiind simplitatea şi coerenţa sau corelarea lucrurilor. Am reconstruit deja slightchess: iniţial, era un site Django independent (cu Django 1.8, Python 2.7, MySQL), montat ca subdomeniu; acum, este o aplicaţie integrată celorlalte (şi scutită, de facilităţi inutile). Deasemenea, am reconstituit intern variante_bac_mate, simplificând aplicaţia creată în Variantele subiectelor de bacalaureat şi principiul "less is more" (subdomeniu, în 2013).

După ce am transferat în PostgreSQL vechea bază de date (cum am arătat în Transferarea unei baze de date din MySQL în PostgreSQL), am revizuit fiecare dintre articolele existente - folosindu-mă de interfaţa de administrare (creată de către aplicaţia Django '/admin', cooptată în proiectul local al site-ului); practic, am copiat textul articolului prezentat în fereastra "Django administration", într-un fişier "articol.html" (deschis permanent în editorul de text pe care-l folosesc) şi am reparcurs articolul respectiv pentru a vedea ce fac cu el…

De eliminat - au fost numai două articole, dintre care îmi pare rău să zicem, de "Un Google gadget pentru CMMDC" (creat în 2011); l-am eliminat fiindcă între timp, instrumentele Google pe care le vizam au fost abandonate sau modificate (încât o bună parte din articol ar trebui rescrisă, cerându-mi şi o re-documentare asupra "Google gadget"-urilor).

În articolele din 2007-2008 foloseam des elementul HTML '<tt>', care nu mai este valabil (în HTML5); l-am înlocuit peste tot prin '<code>', folosind acest "one-liner":

    perl -p -i -e 's/<tt>(.*?)<\/tt>/<code>$1<\/code>/g' articol.html

Am procedat analog, pentru alte taguri sau proprietăţi (de exemplu, '<acronym>' a trebuit înlocuit cu '<abbr>', iar "-moz-border-radius-topleft" trebuie redenumită "border-top-left-radius").

Pentru secvenţele de cod (în diverse limbaje) am folosit de-a lungul timpului, diverse modalităţi de marcare sintactică; acum, am "pigmentat" unitar, folosind Pygments (cu stilul 'default'). De altfel, am simplificat considerabil stilarea elementelor şi (mizând pe faptul că acum nu se mai foloseşte un singur browser, anume "Internet Explorer") am început să folosesc (elementar însă) CSS Grid layout (inclusiv, în aplicaţii precum PGN browser).

Desigur - mai sunt multe de făcut… De exemplu, "încet-încet" voi revizui din mai multe puncte de vedere, tagurile asociate articolelor (reflectând mai bine conţinutul, nu doar limbajele implicate). Dar sper să revin cât mai curând, la conţinutul propriu-zis al site-ului şi să continui să scriu pe teme de informatică sau|şi matematică…

vezi Cărţile mele (de programare)

despre acesta ~ Home
(sau https://vlad.bazon.net/

Factoriale | Graficul funcţiilor

PGN browser | chess JS engine

Load

in /slightchess

/slightchess

626 partide analizate cu Crafty

(R) Computer Art | Decoraţiuni

Aplicaţii şcolare (javaScript)

Sinteze: