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

Recapitularea pentru bacalaureat - între PDF-uri şi site utilitar

AsciiMath | LaTex | bacalaureat | bază de date
2013 jul

După înfiinţarea CNCEIP (în 2007), apoi a C.N.E.E. (în 2009) - "recapitulare pentru bacalaureat" a devenit partea centrală a activităţii noastre. Pe de o parte, s-a generat o activitate organizatorică de rezonanţă naţională (implicând un consum enorm de hârtie şi de timpi de lucru) pentru "simularea" pe parcursul anului şcolar (în toate liceele) a probelor examenului de bacalaureat.

Pe de altă parte, "recapitulare pentru bacalaureat" în sensul propriu-zis este înţeleasă ca însemnând rezolvarea cât mai multora dintre cele 100 de variante de subiecte de bacalaureat, oficializate de către Minister în 2008-2009; ideea originală pe care se bazează bacalaureatul constă în construcţia aleatorie a unei "noi" variante (eventual, în cadrul unui spectacol televizat) plecând de la cele 100 existente - aceasta devenind varianta de rezolvat, în sesiunea curentă a examenului.

Pentru desfăşurarea acestei vaste activităţi, avem de achiziţionat de la diverse edituri cărţi tipărite conţinând variantele respective şi rezolvările aferente, sau putem obţine de pe Internet fişiere în format PDF conţinând cele 100 de variante (dependent de "filieră", "profil" şi "specializare" şi desigur, de disciplina de examen).

De la PDF-uri, la site HTML

PDF este destinat tipăririi pe hârtie (format "A4"; "portrait" sau "landscape", etc.). Pentru sprijinirea activităţii de "recapitulare" (desfăşurate atât în clasă, cât şi individual) ar fi mai util un site care să gestioneze variantele respective în dependenţă de cererile diverşilor utilizatori.

Dacă PDF-ul respectiv ar conţine numai text (cum este cazul la proba de "română", de exemplu), atunci transformarea lui în site se poate face şi într-o manieră aproape "automată": se converteşte în HTML (Google search "pdf to html"), se foloseşte pandoc pentru a trece la reStructuredText, apoi se foloseşte generatorul de documentaţie Sphinx - procedeu exemplificat mai demult, în [1].

Dar în cazul probei de "matematică" PDF-ul respectiv conţine şi expresii matematice; în acest caz, rezultatul unei conversii "automate" la HTML (folosind de exemplu, pdf2htmlEX) nu convine deloc prelucrărilor care sunt de făcut mai departe.

Mai mult ca sigur, acele fişiere PDF expuse iniţial pe site-ul Ministerului (de unde au fost preluate şi (cel mult) concatenate pe diverse alte site-uri) au fost realizate folosind Microsoft Word, iar expresiile matematice au fost editate folosind Microsoft Equation Editor - implicând specificaţii particulare (proprii produselor comerciale), dificil de convertit.

În general, produsele "pdf_to_html" nu fac altceva decât să copieze mot-à-mot pagina tipărită (înglobând în HTML-ul final un număr enorm de specificaţii CSS "inline", menite să asigure fiecărui fragment de text sau de "formulă" o poziţionare de pixel absolută) - lăudându-se chiar cu faptul că pagina rezultată reflectă fidel pe cea iniţială, fiind însă HTML în loc de PDF. Am fi dorit însă ca expresiile matematice să fie chiar traduse în HTML: nu ne interesează pagina ca atare, ci expresiile matematice conţinute ("traduse" într-o formă uzuală, uşor de transmis şi de prelucrat).

Dacă vrei să adaugi un nou enunţ matematic în fişierul HTML rezultat, ar trebui să procedezi aşa: deschizi fişierul Word iniţial, adaugi acolo (desigur, tot cu "Equation Editor") enunţul respectiv, salvezi ca PDF, apoi foloseşti din nou produsul "pdf_to_html" (HTML-ul rezultat va conţine acum şi noul enunţ).

Prin urmare, pentru cazul variantelor la "matematică" nu putem proceda "automat" pentru realizarea site-ului. Desigur, am putea folosi Sphinx cum am evocat mai sus: scriem manual câte un fişier ".rst" pentru fiecare variantă, folosind LaTeX pentru editarea expresiilor matematice; dar site-ul constituit automat de Sphinx va trebui regenerat (prin comanda make html, din directorul care conţine fişierele ".rst") după fiecare nou enunţ pe care l-am adăuga.

Soluţia cea mai bună este cea "clasică", bazată pe constituirea şi exploatarea unei baze de date corespunzătoare variantelor respective. Iar această soluţie este şi foarte generoasă: dacă am constituit această bază de date şi am reuşit să inserăm datele necesare - atunci mai avem doar de scris un script (Python, Perl, sau PHP) care să extragă din baza de date diverse categorii de probleme şi să producă fişiere ".rst" corespunzătoare fiecărei categorii; odată obţinute aceste fişiere ".rst" - vom putea genera automat site-ul dorit, folosind Sphinx (ca în [1]).

Marele defect al acestui procedeu ar fi acela că de pe site-ul generat automat cu Sphinx nu putem insera în baza de date; ne-ar interesa de exemplu, să asigurăm unor anumiţi utilizatori posibilitatea de a adăuga variante în baza de date - ori Sphinx este destinat să genereze un site HTML pentru o "documentaţie" statică (modelată printr-un set de fişiere ".rst") şi nu are rost să forţăm lucrurile.

Furnizor de PDF-uri, în loc de site utilitar

Există instituţii publice ale căror site-uri folosesc baze de date pentru a furniza informaţii? În [2] am vizat Compania Naţională Poşta Română S.A., care prezintă utilizatorului formulare HTML prin care acesta poate cere informaţii (codul poştal, oficiile poştale) despre o localitate (indubitabil - rezolvarea cererii respective implică existenţa unei baze de date pentru localităţi).

Foloseşte www.edu.ro vreo bază de date? Să exceptăm secţiunea "Forum Educaţional" - aceasta necesită o bază de date pentru modelarea utilizatorilor forumului, a mesajelor, etc.; ne interesează vreo bază de date privitoare la diversele informaţii de care poate avea nevoie cineva - de exemplu (analog cum obţinem "lista oficiilor poştale din Localitatea") ne-ar interesa "lista Subiectelor I de la Variantele pentru Matematică".

Mai mult ca sigur, "edu.ro" nu implică asemenea baze de date; în tot cuprinsul site-ului există numai link-uri care fie deschid pagini statice, fie asigură "Download" pentru documentul - ".PDF", ".DOC", ".zip", sau ".rar" - specificat în link-ul respectiv. "edu.ro" reflectă mot-à-mot această concepţie: noi - Ministerul, prin "specialiştii noştri" din cadrul organismelor constituente, cu aprobările necesare - vă furnizăm documentele - în format ".DOC", da? - , iar voi - de la departamentul "IT" - ocupaţi-vă să le montaţi pe site pentru a le pune la dispoziţia celor interesaţi.

Lucrurile stau aşa (urât, zicem noi…) din cauza separării categorice între specialiştii Ministerului care se ocupă de elaborarea documentelor (în "format .DOC", desigur) pe de o parte şi specialiştii "IT" dinafară (care doar respectă indicaţiile clientului, pentru că din asta trăiesc) pe de altă parte…
Atunci când "IT"-ul este efectiv implicat (şi nu doar pus să monteze), pot rezulta şi aplicaţii onorabile (implicând eventual şi baze de date): de exemplu, aplicaţia de repartizare în liceu admitere.edu.ro.

Este drept că lucrurile acestea sunt mai subtile, decurgând liniar din aservirea copleşitoare faţă de produsele Microsoft (Microsoft Windows, Microsoft Office, Microsoft Visual FoxPro) a întregului sistem de învăţământ al nostru, aşa cum au decis "specialiştii noştri" de la Minister (pe programele şcolare, pe examenele de "competenţe digitale", etc.). Cum să pretinzi altceva decât "formatul .DOC" (şi "salvezi ca PDF"), dacă 12 ani sau şi mai mulţi n-a auzit şi n-a folosit decât Microsoft Word?

Precizăm că sintagma "specialiştii noştri" nu ne aparţine; ea este folosită curent de către Minister, de exemplu în cazul în care oferă un răspuns cuiva (în scris, ori într-un interviu TV).

Editarea şi redarea lucrărilor ştiinţifice, astăzi

Conţinând formule matematice, variantele pentru matematică ţin de "lucrări ştiinţifice" (analog, cele pentru fizică, chimie, etc.). TeX a devenit limbajul standard pentru editarea lucrărilor ştiinţifice; în scopuri mai modeste - vizând comunicarea prin Internet, nu şi tipărirea lucrării de către o editură specializată - se poate folosi în ultimul timp şi AsciiMath.

Pentru redarea în pagini Web a formulelor matematice se foloseşte MathJax; această bibliotecă recunoaşte TeX, AsciiMath şi MathML (permiţând autorilor să editeze formulele folosind unul sau altul dintre aceste limbaje) şi produce ca "output" cod HTML+CSS, cod MathML şi cod SVG (permiţând browserului să "aleagă" un format sau altul, în funcţie de capabilităţile sale).

Pentru exemplificare - alegem să indicăm două site-uri foarte utile pentru elevi (şi pentru cei care au de lămurit elevilor chestiunile de bază care le-au scăpat până acum): A First Course in Algebra ("ONE MATHEMATICAL CAT, PLEASE!") şi Interactive Mathematics ("Learn math by playing with it!").

Evident, acestea nu folosesc şi nu vizează Microsoft Office; în schimb, didactic.ro şi alte site-uri în mare vogă la noi - exact "Microsoft Office" pretind: "se trimit numai documente WORD, de maximum 3 pagini, redactate cu Times New Roman, cu mărimea fontului 12, spaţiere la 1,5 rânduri".

Un "defect" al procesului de dezvoltare a aplicaţiei

Toate cele de mai sus meditează în jurul ideii dezvoltării unui site care să ofere multiple posibilităţi de lucru asupra variantelor subiectelor de bacalaureat. Desigur, parcă era de preferat ca în loc de a scrie toate cele de mai sus (fără nicio secvenţă de cod!) - să dezvoltăm efectiv lucrurile…

Se poate recunoaşte aici acest defect personal (căpătat în timp, de când tot scriu pe acest site, inclusiv "aplicaţii nebanale"): am ajuns să nu mai pot demara o aplicaţie propriu-zisă decât numai scriind simultan în legătură cu motivarea şi cu elaborarea treptată a acesteia!

Dar (exceptând "scrierea simultană" a lucrurilor) acest "defect" face parte în general din procesul obişnuit de elaborare a unei aplicaţii (nebanale). De exemplu în cazul de faţă, a trebuit întâi să-mi dau seama că formatul PDF nu sprijină cu nimic munca de recapitulare (permiţând doar tipărirea şi mai încurajând şi consumul inutil de hârtie); a trebuit apoi să caut posibilităţi de conversie de la PDF-urile oficiale (rezultate din Microsoft Word) la ceva care să poată fi redat uzual într-un browser.

Neobţinând ceva acceptabil cu produsele "pdf-to-html" (dar am evitat produsele comerciale existente pentru Windows) - am ajuns la concluzia (neplăcută, într-adevăr) că va trebui să scriu efectiv textele şi formulele (în loc să beneficiez de o conversie automată a PDF-urilor oficiale); aceasta înseamnă să folosesc fie LaTeX, fie AsciiMath pentru a edita formulele matematice şi desigur - a trebuit să mă documentez mai bine asupra acestor limbaje (plus MathJax-ul).

Abia după asemenea clarificări şi documentări prealabile (şi tocmai despre acestea am şi scris, mai sus) - are sens şi putem începe să dezvoltăm efectiv aplicaţia respectivă…

Schiţă de site pentru variantele subiectelor de bacalaureat

Imaginea următoare sugerează concepţia site-ului dezvoltat în paralel cu "meditaţiile" redate mai sus; fiind vorba de o "primă variantă" - nu vom reda aici coduri semnificative, ci doar vom puncta specificaţiile principale ("logica lucrurilor").

Utilizatorul principal este elevul sau profesorul care se ocupă de "recapitulare pentru bacalaureat" pe baza investigării şi rezolvării variantelor de subiecte dintre care Ministerul va constitui varianta propusă candidaţilor pentru sesiunea care urmează să se desfăşoare.

Pe utilizator l-ar interesa un anumit "profil" (astfel, "MT1" este acronimul oficial pentru "Filiera teoretică|vocaţională, profilul real|militar, specializarea matematică-informatică"), o anumită "variantă", un anumit "subiect" (I, II, sau III) sau toate subiectele.

Iniţial este redată complet prima variantă şi se oferă (prin link-urile "Next" şi "Prev") posibilitatea accesării următoarei variante (cu redare completă), sau după caz, a celei precedente. Dar oricând, utilizatorul va putea folosi formularul descris pentru a obţine (acţionând butonul "GET") un subiect anumit dintr-o variantă sau alta, sau eventual lista paginată a problemelor de la un anumit subiect (I, II, sau III) din toate variantele.

Fiecare problemă a fost asociată în baza de date cu anumite "tag"-uri, cărora la redare le corespund link-urile adăugate enunţului problemei; la acţionarea unui asemenea link, utilizatorului îi vor fi redate toate problemele existente care se referă la tag-ul respectiv (de exemplu, click pe link-ul "inecuaţii" îi va reda într-o listă paginată, problemele asociate tag-ului "inecuaţii").

În sfârşit - "Login" şi "Register" au în primul rând rolul de a constitui un anumit grup de utilizatori cu permisiuni pentru adăugarea unor noi variante; eu singur pot înscrie iniţial 4-5 variante (şi poate mai adaug ulterior) şi este firesc să creez şi altora interesaţi, posibilitatea să completeze (după un instructaj relativ simplu). Dacă va fi cazul, urmează să vedem cum creem şi posibilitatea ca utilizatorii înregistraţi să insereze eventual "indicaţii" de rezolvare, "atenţionări" sau "comentarii".

Pentru scrierea formulelor am ales iniţial AsciiMath (care este mult mai uşor de însuşit, decât LaTeX). De exemplu, pentru a obţine în browser Problema 1 din Subiectul II, Varianta 1 pentru MT-1:

am înscris în baza de date - folosind interfaţa de administrare accesibilă grupului de utilizatori cu drepturi speciale - următorul text:

Se consideră matricea `A = ((a, b), (b, a)), \ text{cu } a, b in RR`  şi `b ne 0`.
a) Să se arate că dacă matricea `X in bb(M)_2(RR)` verifică relaţia `AX = XA`, 
atunci există `u, v in RR` astfel încât `X = ((u, v), (v, u))`.
b) Să se arate că  `AA n in NN^**,\  A^n = ((x_n, y_n), (y_n, x_n))`, unde
`x_n = {:(a+b)^n + (a-b)^n:}/2,\ y_n = {:(a+b)^n - (a - b)^n:}/2`.
c) Să se rezolve în mulţimea `bb(M)_2(RR)` ecuaţia `X^3 = ((2, 1), (1, 2))`.

MathJax a fost configurat pentru limbajul AsciiMath, astfel că va prelucra secvenţele delimitate de caracterul ` ("accent grav", aflat pe tasta din stânga tastei marcate cu "1"). De exemplu, secvenţa `A = ((a, b), (b, a))` va fi convertită de către MathJax astfel încât browserul o va reda sub forma unei matrice cu două linii şi două coloane (cum se vede pe imaginea reprodusă mai sus).

Este de subliniat că MathJax serveşte pentru scrierea formulelor matematice (modul TeX "math"); de regulă, partea din enunţul problemei care conţine numai "text" (fără formule) se scrie ca atare (fără ambalare între delimitatorii de "math").

Dar curând, am constatat că AsciiMath nu ajunge:

Am reprodus aici - printr-un "screenshot" de pe fişierul original, "d_mt1_ii_002.pdf", din 2008 - problema 2 de la Subiectul II, Varianta 2.

În trecere - amintim o regulă (frecvent încălcată - cum se vede şi pe reproducerea de mai sus - în enunţurile din PDF-urile vizate aici): semnele de punctuaţie (., ;, ,) nu trebuie să fie precedate de spaţiu. Este drept însă că spaţiul este greu de controlat, atunci când amestecăm modul "text" şi modul "math".

AsciiMath - în varianta integrată de MathJax - nu ne-a putut servi pentru a modela ultima formulă ("de n ori a", sub acoladă orizontală). În cele din urmă, am reconfigurat MathJax în <head>-ul paginii de bază, încât să recunoască şi limbajul TeX - anume, în cadrul secvenţelor delimitate de caracterul $ - şi am putut descrie uşor formula incriminată, astfel:

... `a in M` astfel încât $\underbrace{a*a~*...*~a}_{de~n~ori~a} = 2a$.

Dar acest amestec - şi AsciiMath şi LaTeX - este cel puţin incomod; de ce să nu folosim doar LaTeX, pentru care MathJax oferă cel mai bun suport (mai creându-ne şi posibilitatea suplimentară - dar specifică sistemului LaTeX - de a obţine o pagină tipărită de cea mai bună calitate tipografică).

Gândindu-ne la utilizatorii care ar dori să înscrie variante, "instructajul" necesar pentru a folosi LaTeX (şi nu AsciiMath) va fi sigur mai dificil; dar iniţierea şi exersarea în LaTeX sunt de bun augur pentru oricine are de-a face cu "lucrări ştiinţifice" (indiferent de nivel).

Specificaţiile tocmai definitivate mai sus (experimentând pe o formă incipientă de site), constituie partea esenţială a lucrului şi în orice caz, partea cea mai "personală" (implicând o anumită logică creativă); dezvoltarea aplicaţiei folosind un framework sau altul, definirea schemei bazei de date şi scrierea secvenţelor de cod necesare - sunt chestiuni de gust sau chestiuni tehnice obişnuite, ţinând de experienţa fiecăruia (şi mult mai puţin, de "creativitate").

vezi Cărţile mele (de programare)

docerpro | Prev | Next