luni, 14 octombrie 2013

Timpul local și data în limba română în Moodle (sau - pînă ajungi la Dumnezeu, te mănîncă sfinții)

1. Problema


Data creării subiectelor de discuție din forumuri este afișată în limba engleză, iar ora în format 12 ore (sufixate cu AM sau PM după caz); de exemplu:

by Admin User - Tuesday, September 10, 2013, 7:46 PM

în loc de

de către Admin User - marți, 10 septembrie 2013, 19:46

Chiar dacă... toate opțiunile legate de formatul afișării datei și orei, limba implicită pentru site, setările de localizare, chiar și traducerile zilelor săptămînii și a denumirilor lunilor... toate-s în ordine.

2. Contextul


Ubuntu 12.04 LTS; Moodle 2.5.1

3. Pre soluție


Moodle este scris în PHP. Respectiv formatarea datei și timpului se face prin funcțiile din PHP, în particular prin funcția strftime (http://php.net/manual/ro/function.strftime.php). Acest fapt poate fi confirmat analizînd codul sursă sau, mai simplu, prin faptul ca în fișierul langconfig.php din categoria core (Site administration > Language > Language customisation) șabloanele de formatare a datei și orei au sintaxa identică cu cea a argumentului format a funcției strftime.

Funcția strftime la rîndul ei formatează în raport cu setările regionale curente a sistemului de operare. Dacă se dorește formatarea cu alte setări regionale  fără a schimba cele curente a sistemului se poate folosi funcția setlocale.

Anume așa e realizat în Moodle. Înainte de a fi utilizată vreo funcție de formatare a datei sau orei se cheamă funcției moodle_setlocale (din moodlelib.php) care la rîndul ei cheamă setlocale.

Funcția setlocale activează setările regionale indicate; cu condiția că acestea sînt disponibile în sistem. Puteți chema de 1001 ori funcția setlocale cu parametrul, de exemplu, ro_RO.UTF-8, dar dacă aceste setări regionale nu-s instalate în sistem nu veți avea denumiri de luni în română. De unde? Sistemul nu le are.

Cel mai des cînd se instalează sistemul cel care instalează specifică fusul orar, specifică moneda, iar setările regionale rămîn cele englezești, adică en_EN. Configurația ro_RO.UTF-8 nefiind instalată (pe server). Pe un calculator Desktop posibil că da (de exemplu cînd am instalat Linux Mint cu KDE imediat după instalare am fost rugat să introduce astfel de info).


Așadar, dacă nu aveți setările regionale ro_RO.UTF-8 instalate nu aveți cum să primiți denumiri de luni în română.

4. Soluția



Verificați setările Moodle legate de localizare:

  • Administration > Language > Language Settings
    • Default language = Română (ro)
    • Sitewide locale = ro_RO.UTF-8
  • Administration > Appearance > Calendar
    • Time display format = 24=hour
  • Administration > Language > Language Customisation > Română (ro)
    • core calendar.php: zilele săptămînii sînt traduse
    • core langconfig.php: locale=ro_RO.UTF-8

Verificați lista fișierelor de localizare (setări regionale) disponibile în sistem:

locale -a

Dacă în lista afișată lipsește rîndul ro_RO.utf8. Atunci acest fișier trebuie generat. Îl puteți genera cu ajutorul comenzii:


sudo locale-gen ro_RO.UTF-8

După ce ați generat fișierul de localizare obligatoriu reporniți sistemul, de exemplu prin:  

sudo reboot

Dacă nu reporniți sistemul funcția PHP strftime se va comporta straniu: ba va formata în română, ba în engleză.

marți, 8 octombrie 2013

Un exemplu de utilizare a programului GNU parallel

1. Începutul

În data de 29 septembrie 2013, la Bălți, s-a desfășurat „Ziua Libertății Programelor și 30 de ani de GNU”. Evenimentul a fost organizat de Fundația Ceata (http://ceata.org) și sprijinit de Universitatea de Stat "Alecu Russo" din Bălți (http://www.usarb.md). Programul evenimentului poate fi găsit la adresa http://ceata.org/evenimente/zlp-2013-%C8%99i-30-de-ani-de-gnu-%C3%AEn-b%C4%83l%C8%9Bi.html. Țin să precizez că Bălți nu a fost unicul oraș în care Fundația Ceata a organizat evenimente legate Ziua Libertății Programelor. Au fost de tot șase orașe.  Mai multe detalii le puteți găsi în comunicatul oficial al Fundației Ceata.

Cine s-a săturat de citit poate să privească fotografiile de la evenimentul din Bălți, https://albume.ceata.org/index.php?/category/118.

2. GNU Parallel (și GNU Stow)

Reiese așadar din denumirea evenimentului că trebuia să se fi vorbit mult despre GNU. Așa și a fost. S-a vorbit despre GNU Hurd, despre programele făcute de cei de la GNU, în special, de Emacs, de GNU Core Utilities etc. Eu am vorbit despre GNU Prallel și GNU Stow (http://www.slideshare.net/vundicind/gnu-parallel-i-gnu-stow). Apropo prezentarea de pe slideshare.net este pusă la dispoziţie, cu toate că nu este specificat pe primul diapozitiv a prezentării, sub Licenţa Atribuire - Distribuire-în-condiţii-identice 3.0 Ne-adaptată (CC BY-SA 3.0).

Am vorbit despre metode de instalare a GNU parallel, am dat exemple de utilizare combinată cu programul grep, am explicat cum poate fi controlat  numărul de procese paralele  și în final am prezentat un contraexemplu (un caz în care executarea sarcinilor în paralel înrautățește lucrurile). N-am reușit însă să prezint un alt exemplu. Un crawler web realizat în întregime doar prin comenzi GNU/Linux și care face interogările către server în paralel. Nu l-am prezentat pentru nu-l aveam finalizat atunci. Acum după cîteva săptămîni am găsit totuși timp și l-am data gata.

 3. Crawler web care folosește GNU parallel și nu doar GNU parallel

Am fost inspirat de exemplul de crawler web din manualul programului GNU parallel. Crawlerul realizat de mine este la fel un script shell care l-am numit „pwspell” (pe lung ar fi „Parallel Web Spell Checker”) adică un crawler care mai și verifică ortografia paginilor vizitate. Script-ul poate fi descărcat de pe Github.com(https://github.com/vundicind/pwspell). Proiectul pe Github conține trei fișiere: script-ul și două fișiere text. Fișierul README_ro.md conține indicații, în română, pentru instalare (pachete adiționale) și rulare.

Script-ul face ceea ce am scris mai sus că face, dar mai este de lucru la el. De exemplu, dacă textele în website conțin literele „ț” și „ș” cu sedilă (redactate din Windows XP) atunci toate cuvinte cu aceste două litere vor fi considerate greșite de pwspell. Acest fapt se datorează lui aspell (programul utilizat de crawler pentru verificarea ortografiei) în dicționarele căruia se folosesc „ț” și „ș” cu virgulă (cum e corect).

Pentru mine acest script are o importanță mai mult didactică decît funcțională. Crawler-ul este un exemplu netrivial de utilizare combinată de comenzi GNU/Linux, un exercițiu de scriere de script-uri shell reușit.