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

Dilemele vizibilității

Django | R
2026 may

[1] V. Bazon - Logica producerii unui orar al școlii, Recreații Matematice XXVII Nr. 2 (2025)

În anumite condiții, probabil ușor de satisfăcut, Internetul asigură (indiferent de limbă) vizibilitate foarte bună pentru produse alimentare și nealimentare (de uz casnic), servicii de rezervare specifice industriei turismului și spectacolelor artistice sau sportive, ba chiar și pentru circulația rutieră.
De exemplu, având nevoie să cosesc iarba, am tastat în bara de căutare "motocoasă" și din paginile de rezultate am putut accesa filme de pe YouTube (mai mult sau mai puțin reușite) din care am învățat cum trebuie folosit instrumentul și cam cum rezolvi necazurile care se pot ivi și deasemenea, link-uri la diverse magazine de unde pot alege și achiziționa o motocoasă și eventual, diverse componente și accesorii.
De fapt, dacă ai televizor, parcă nu ai nevoie de Internet; poate vezi vreun film bun, păi atunci primești gratis un maldăr de "spoturi publicitare" pentru produse alimentare și nealimentare (de uz casnic), pentru medicamente de la Katena, pentru a paria pe SuperBet, ba chiar și pentru motocoase electrice. Mai folosești desigur și Internetul, pentru a te lipi de rețelele sociale.

Pentru anumite categorii de cărți și pentru "articole științifice", vizibilitatea și satisfacția rezultatelor depind mult de limba pe care o folosești pentru căutare.
Căutând "limbajul R" dai peste ceva lecții și manuale introductive "despre R" în limba română, dar mai toate sunt simple compilațiuni sau traduceri trunchiate după manualul în engleză de la CRAN; pe acesta îl găsești imediat, alături de tutoriale veritabile și cărți importante, căutând "R language" (sau simplu "R", dacă n-ai "românizat" sistemul).
Căutând mai demult "problema orarului școlar", n-am găsit nimic semnificativ — pe subiectul respectiv nu existau articole în limba română; în schimb, căutând "school timetable problem" găsim numeroase referințe la articole științifice (în engleză) și lucrări de doctorat, relevante.

Vizibilitatea curentă a site-ului propriu

Referitor la anumite curbe, avem pe acest site câteva articole bune (și nu compilațiuni după manuale sau alte surse); am evidențiat chiar și aspecte inedite (uneori, nimerite prin investigații computerizate): "elipsele tangente într-un același punct unei drepte date au focarele pe o cardioidă, iar centrele pe o parabolă", sau: "pătratul unei curbe Cassini față de centrul acesteia este un cerc; invers, radicalul unui cerc este o curbă Cassini" (unde "pătrat" și "radical" vizează afixele punctelor față de un anumit pol).

Deasemenea, avem o serie de articole investigative bune referitoare la "School Timetable Problem" (constituind până la urmă, pachete R adecvate, v. pe CRAN de exemplu recastlessons), sau la crearea de fonturi și pachete LaTeX (Metafont pentru lemniscata lui Bernoulli, sau v. pe CTAN rojud), la modelarea jocului de șah (a vedea sinteza /modelling_chess), sau referitoare la grafuri, la factoriale, la OCR, etc.
Am arătat în multe locuri cum programăm (în C, Perl, Bash, R, Prolog, LaTeX, MetaPost, postScript, javaScript, jQuery, Python și Django, HTML, CSS, MySQL, PostgreSQL și bineînțeles… în limbaje de asamblare) și cum ne folosim de programele respective.

Cu toate acestea, în pofida conținutului bogat, original și instructiv — vizibilitatea pe Internet a site-ului (sau a articolelor respective) este foarte scăzută… Dacă folosești Google Search și cauți "cardioidă", sau "ovale Cassini", vei obține ca rezultat multe pagini, pe care însă nu apare vreo referire și la vreunul dintre articolele mele în care am vizat (și original) una sau alta dintre aceste curbe; doar dacă tastezi eventual "semicardioidă", atunci (chiar în prima pagină de rezultate, pe primul loc) apare și:

Dacă tastezi să zicem "limbajul R", dai și peste lucrări "despre limbajul R" în limba română, prezentate de obicei artistic (chipurile…), dar lipsite de conținut autentic (doar preiau în română de prin manualul de la CRAN); și nu apare vreo referință, la niciunul dintre numeroasele articole consistente de pe acest site, în care am folosit efectiv R (de exemplu, pentru a constitui orare școlare plecând de la încadrarea profesorilor, sau pentru a analiza datele rezultate în urma examenului de bacalaureat, sau pentru a investiga anumite limbaje aritmetice și automate, etc.) — acoperind și clarificând în mod implicit, dincolo de manuale, diverse aspecte de programare.

În loc să mai scriem "articole" originale… ar fi momentul să ne întrebăm de ce vizibilitatea pe Internet a site-ului este așa de scăzută ? O putem crește cumva ? (sau mai bine și mai simplu, desființăm site-ul ?! că nu avem de respectat vreo "constituție")

Despre cauzele vizibilității

Se știe că cei mai mulți (probabil 90%) folosesc Internetul (anume, prin telefon) numai pentru a căuta și a achiziționa produse (alimentare, vestimentare, etc.), servicii turistice, filme, muzică rock, bilete la spectacole Tehno sau Untold, eventual pentru a-și plăti facturile și bineînțeles, pentru a se juca și a paria pe la SuperBet, etc. Foarte puțini mai caută lucrări științifice și folosesc Internetul pentru a se instrui (folosind în acest scop nu telefonul, ci firește, vreun laptop). (subliniem că "a se instrui" nu are de-a face cu obiceiul multor elevi de a copia de pe Internet în "portofoliul" cerut de profesor)

Iar de o bucată de timp, Google, Firefox, ba chiar și Ubuntu, vizează nu pe oricine, ci… majoritatea; am povestit în Recunoașterea textului..., surpriza pe care am avut-o instalând automat (fără să gândesc) Ubuntu 24.04 LTS "Noble Numbat": în final am avut în față un "desktop" stupid (de neașteptat, pentru prestigiosul Linux): la bază figurau 5 iconuri mari, prin care puteam lansa prin click anumite aplicații — iar icon-ul central ne lansa (e drept, gratis) "Office"…
Cu alte cuvinte, se înclină din ce în ce mai mult spre "point-and-click" și spre microsoftizare; marea majoritate folosește Microsoft-Word, iar eu — care am eliminat încă de-acum vreo 15 ani, 1.5 GB de produse "Office" și nu am avut vreodată, motiv de regret — a trebuit să muncesc vreo două zile ca să obțin din monstruosul sistem point-and-click+Office obținut, un mediu de programare convenabil, tipic pentru Linux (cam cum aveam în versiunea anterioară, 22.04; sper că între timp lucrurile s-au mai reglat — Ubuntu o fi mizând și el pe majoritate, dar prestigiul vine din altă parte…).

Dar ce e drept e drept: de unde își trag (și în general, se trag) banii ? De la majoritate — iar politica de stat, consiliată cu abilitate, favorizează ba chiar impune aceasta: învățământul de bază impune oficial, de la un capăt la celălalt, produsele Microsoft și point-and-click, iar "informatică" se confundă cu Microsoft și senzație tehnologică (și de fapt, ar fi o știință adâncă și ca istorie și prin conexiuni, mai ales matematice).
De!… ce alte "strategii" să aștepți de la aleși care înțeleg prin "informatizare" înlocuirea documentelor scrise, cu noi documente anume cu "documente electronice" ? Și de fapt, prin această "strategie de informatizare" (cu un cost prostesc de mare), volumul de hârtie de imprimantă necesar instituțiilor noastre, în loc să scadă, s-a cam triplat.

Pe lângă cauzele inerente sugerate mai sus, vizibilitatea scăzută are și o cauză "subiectivă", ținând concret de organizarea și construcția paginilor site-ului. De regulă se caută după elementul HTML <title>, iar acesta ar trebui reprezentat în pagina respectivă printr-un element <h1>; eu unul zic că H1 (fără ajustări) este o dimensiune exagerat de mare și am folosit mereu <h2> pentru titluri (și <h3> pentru subtitluri); iar titlurile mele nu sunt formulate "comercial", cum s-ar cere pentru o bună vizibilitate.

În plus… demult — mai neștiutor fiind și deci, ușor de înclinat spre complicații spectaculoase — am optat să depozitez fragmente de fișier HTML într-o anumită bază de date, din care la cerere (prin AJAX) se formulează pagina HTML a unui articol și articolul astfel îmbinat este postat într-o anumită diviziune fixată pe pagina de bază a site-ului. Ori regula era ca pagina HTML să fie una independentă și nu constituită din fragmente și adusă prin AJAX (se pare totuși că în ultimul timp, AJAX nu mai reprezintă un impediment pentru motoarele de căutare).

În plus… unele "articole" se întind de fapt pe mai multe "articole", al căror URL diferă unul de altul doar prin sufixul de "parte" (de obicei "-I", "-II", etc.); nu-i exclus ca acestea să fie considerate ca "duplicate", fiind deci neglijate în masă, de la indexare.

Ar mai fi o cauză, chiar foarte importantă, a lipsei de vizibilitate: faptul că articolele mele sunt scrise nu în engleză, ci în limba română ! Avem un exemplu sugestiv: căutând "problema orarului școlar" (în română) obții rezultate nesemnificative (exceptând azi, câteva referiri la lucrări ale mele !), tocmai fiindcă nu există lucrări în română, cu un asemenea subiect; în schimb, căutând "school timetable problem" (în engleză), am obținut numeroase referințe la articole științifice importante, multe aflate cumva în domeniul public, ceea ce mi-a permis să le studiez, mai mult sau mai pe răsfoite, și să-mi dau seama de o nouă posibilitate de tratare (v. sinteza formulată în [1])— iar investigațiile respective, de-a lungul a vreo trei ani, sunt reflectate în multe articole (dar neindexate) de pe acest site.

Și alții (iar nu oricine) au remarcat diferența între a fomula în engleză și a formula într-o altă limbă; chiar mi s-a sugerat odată: "treci pe engleză"!
Nu! Eu nu scriu articole (pur) "științifice" (pentru profesioniști); și îmi place să aleg cuvintele (că nu-mi vin gratis), pentru a exprima elementar și cât mai bine lucrurile, tinzând mereu spre o "limbă literară" (în loc de "științifică"). Limba română, pe care o și prețuiesc nespus de mult, devine de neînlocuit.

Ar mai fi un "în plus…": nu pot beneficia de avantajele de publicitate oferite de rețelele sociale, fiindcă (asta-i culmea!… probabil, dar sper că nu-i cazul să fiu interogat) nu agreez nici Facebook, nici LinkedIn și nici măcar, "telefonul inteligent" (și având asemenea nazuri, e greu să fii vizibil).

Ce-i de făcut ?

Refuz deocamdată o soluție radicală (de exemplu, dacă nu-l abandonez, să reconstruiesc site-ul, cu ce am mai învățat în ultimii ani)… Chiar am de făcut lucruri mai atractive: de cosit, de plivit, de luptat cu dăunători de cartof și de roșii și de gutui, de udat (se pare că iar vom avea o vară toridă și lungă), de făcut dulcețuri din ce fructe vor mai fi după zilele prea reci de la începutul primăverii, de făcut țuică de prunele care au mai rămas și vin din strugurii care au început să se facă; ar mai fi de lucrat o anumită porțiune de gard și de reparat una-alta. Și sper, că măcar astea, să nu le fac în zadar…
Bineînțeles, depindem foarte mult de vreme; dar în ultimul timp, grație hâcâielilor parlamentarilor care nu-s în măsură să afle ce-i important de făcut, depindem nemeritat de mult, dacă ai o casă "la țară", de excesul de zel al vreunui neica polițist, care una-două i se năzare și îți reține carnetul "în baza articolului..." și te face imediat (la imprimantă, că ne-am informatizat) cu o amendă "minimă" cât jumătate de pensie.
Aflăm continuu că suntem în vârf la numărul de accidente rutiere — o fi, dar complementar, întrebarea corectă ar fi aceasta: la numărul de amenzi de circulație, cum stăm ? Aș pune pariu că în privința excesului de zel suntem în vârful vârfurilor (și nu o fi și acest aspect, o cauză ? că pierzând vremea tot căutând cât de mici nereguli pe la conducătorii modești obișnuiți, scapi din vedere pe cei poate și mulți la care ar trebui într-adevăr să iei seama).

Refuz ideea de a insera pe paginile site-ului reclame ale unor produse cu mare căutare (ceea ce probabil, ar spori vizibilitatea articolelor proprii) — cum dacă am înțeles bine, îmi propune Google Ads; eu unul cam "turbez", când văzând pe TV din când în când (că-s rare) un film bun, sau orice altceva, derularea este întreruptă mereu de câte un maldăr de reclame stupide — așa că refuz categoric să inserez reclame.

Rămâne o singură soluție, și ea binecunoscută dar nu infailibilă: să confecționez un fișier sitemap.xml și să-l trimit sau să-l indic la Google Search Console.

Iar pentru aceasta, nu văd (deocamdată) de ce ar trebui să folosesc "The sitemap framework" de la Django… Încercăm o soluție directă, fără a instala aplicația django.contrib.sitemaps.

Întâi constituim un obiect data.frame, cu două câmpuri — numele articolului (în formatul 'slug' în care apare ca parte a URL-ului prin care este accesat articolul) și data creării acestuia:

library(RPostgreSQL)
drv <- dbDriver("PostgreSQL")
conn <- dbConnect(drv, dbname="docer", host="localhost", 
                  port="", user="...", password="...")
dbf <- dbGetQuery(conn, 
    "select slug, creat from blog_articol order by creat desc")
saveRDS(dbf, "st_map.RDS")
dbDisconnect(conn)

Am salvat datele în "st_map.RDS" pentru eventualitatea că vom reveni pentru a elimina unele articole. Acum doar ambalăm liniile de date rezultate, în taguri <url> cu subtagurile <loc> și <lastmod>, având grijă să prefixăm "titlul" cu partea de domeniu a URL-ului; înscriem rezultatele, prin sink(), în fișierul "sitemap.xml":

Dbf <- readRDS("st_map.RDS")
sink("sitemap.xml")
for(i in 1:nrow(Dbf)) {
    cat("<url>\n")
    cat("\t<loc>https://vlad.bazon.net/", Dbf$slug[i], "</loc>\n", sep="")
    cat("\t<lastmod>", as.character(Dbf$creat[i]), "</lastmod>\n", sep="")
    cat("</url>\n")
}
sink()

Finalizăm "sitemap.xml", adăugând la început tagul <urlset>, al cărui conținut l-am preluat dintr-un fișier "sitemap" dat pe undeva ca exemplu (având grijă să și închidem în final, tagul respectiv) și mai adăugând tagul <url> corespunzător paginii de bază:

<?xml version="1.0" encoding="UTF-8"?>
<urlset
      xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
            http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
<url>
	<loc>https://vlad.bazon.net/</loc>
	<lastmod>2026-05-04</lastmod>
</url>
<url>
	<loc>https://vlad.bazon.net/Cam-din-amintiri-o-noua-aplicatie-Django</loc>
	<lastmod>2026-05-03</lastmod>
</url>
# ... etc.
</urlset>

Am terminat ceea ce ar fi trebuit să fie cel mai greu, anume am formulat în formatul XML cerut, lista care conține URL-ul fiecăruia dintre cele aproape 400 de articole.
Dar de fapt, abia acum urmează partea care ni se pare dificilă, a lucrurilor…

După documentațiile consultate, pare simplu: trebuie să plasezi fișierul "sitemap.xml" în "rădăcina" site-ului (specificată în declarația DOCUMENT ROOT din fișierul de configurare, prin Apache2 în cazul nostru, a site-ului) și trebuie să adaugi specificația "Sitemap:" în fișierul "robots.txt" (de plasat și acesta, într-un anumit loc).

Însă în cazul unui site construit ca în cazul nostru, cu Django, lucrurile trebuie să fie mai complicate; articolele sunt redate folosind fișierele "urls.py" ale aplicațiilor Django, adică sunt redate prin Django și nu prin Apache2 (se redau prin Apache2 doar fișierele statice*.js, *.css și imaginile) — încât ne confruntăm cu ceva nesiguranță, față de "DOCUMENT ROOT"… Poate de aceea trebuia să folosesc totuși aplicația "django.contrib.sitemaps"? Aceasta crea în "urls.py" adresa de acces "/sitemap" (implicând o anumită funcție adăugată în "views.py") și are avantajul că sitemap-ul este generat dinamic (scutindu-ne de a-i adăuga manual câte un element <url> de fiecare dată când adăugăm pe site noi articole).

Nefiind în stare să depășesc această nesiguranță, am procedat "la repezeală", cam "neortodox" (de corectat cândva): am plasat "sitemap.xml" în mai multe locuri de pe server, am adăugat în "robots.txt" linia "Sitemap: https://vlad.bazon.net/path/to/sitemap.xml/" și în fișierul de configurare a serverului am adăugat o declarație "Alias /robots.txt" în care am precizat locul în care am plasat "robots.txt". (peste vreo două zile, mai consultând și StackOverflow — care îmi și dă dreptate în ceea ce privește "Document Root" pentru Django — am "corectat", dar succesul rămâne misterios…)

În sfârșit, am reușit să accesez Google Search Console și să înscriu acolo link-ul către fișierul "sitemap.xml" constituit mai sus; rămâne de așteptat câteva zile, pentru a vedea dacă indexarea cerută astfel reușește sau nu… Proba veritabilă a reușitei ar fi probabil aceasta: tastând "limbajul R" să rezulte și referințe la unele dintre articolele mele.

Până atunci, hai la treabă!
cu mare atenție la vânătorii de amendă ai statului, de care iată că am ajuns să ne temem — și de legi căznite și îmbâcsite, și de aceștia care le "aplică" cum și când și cui li se năzare. Dacă n-aș avea ce face, aș demara vreun mecanism de propunere: pentru a deveni polițist de "circulație", să treci obligatoriu de un test obișnuit de inteligență (de obicei… se testează doar capacitatea de a face din țânțar armăsar). Nu mai mulți, cum vor toate sindicatele și partidele, ar trebui să vrem — ci mai puțini, adică mai capabili și mai instruiți; atunci… numai atunci, și rata de legi conjuncturale și proaste, și volumul de "consumabile", și rata de accidente, vor scădea (Și probabil, va fi posibil să avem vizibilități corecte, cumva după merit).

Plouă…; așteptăm și dorim ploaia, dar ne temem de grindină.

vezi Cărţile mele (de programare)

docerpro | Prev |