UP11 site rollin' on yPHP

I-am dat drumul. Adică am trimis invitaţia, am pus sus site-ul şi informaţiile existenţiale, lucrurile se mişcă pe partea de logistică, lucrurile se mişcă pe partea de program, n-aş îndrăzni să zic că ne merge super dar avem loc de mişcare.

Site-ul îl puteţi vedea la http://www.unitatesiprietenie.ro/, şi este bazat pe yPHP. Tot setup-ul a durat una sau două ore, în condiţiile în care am gasit bug-uri prin structura yPHP ŞI am avut evident probleme cu encoding-ul. Mă înnebunesc problemele cu encoding-ul în ultima vreme, nu suport să nu fie textul cu diacritice şi întotdeauna fie baza de date fie PHP-ulş vrea să mess with me pe chestia asta.

Spre exemplu, pentru wiki-ul primitiv folosit de yPHP acum, imi trebuia un titlu unic pentru pagină, pe care îl gaseam, după moda Wiki (nu ştiu dacă mai ţine moda asta, da o fost aşa acum ceva vreme), cu toate cuvintele cu prima literă mare şi alăturate. Spre exemplu pagina „ONCR Festival cercetaşi” s-ar traduce în „OncrFestivalCercetaşi”.

Evident, o problemă aparent simplă. Doar că dacă faci ucfirst() pe un string care e encodat cu utf-8, rezultatul e un string pe encoding standard (nu ştiu exact care standard îi – poate cp1251, doar că nu ştie de caractere româneşti). Super, deci

ucfirst($string)

devine

mb_strtoupper(mb_substr($string, 0, 1, „utf-8”)).mb_substr($string, 1, strlen($string) – 1, „utf-8”).

That is in no way cool. Unde mai pui că suportul pentru mb_string în PHP e absolut opţional şi host-ul meu (care sunt români) nu îl are instalat. Deci no joy.

Acum câteva zile, tot probleme de encoding. De data asta, pe conexiunea MySQL. Atenţie pentru cine mai dă de probleme de genul ăsta. Dacă MySQL vă salvează diacriticele ca ? (semne de întrebare), sunt câteva chestii care le puteţi verifica.

1. MySQL are o drăcie care se numeşte collation, care e un atribut care se poate aplica până la nivel de coloană, şi ţine de encodingul folosit în coloanele respective. Atenţie, şi tabelul are proprietatea collation şi contează. Problema mea de ieri se întâmpla în contextul în care toate câmpurile tabelului erau pe utf8_general_ci, dar tabelul, care era proastpăt importat, era setat pe default-ul latin_sweedish_ci, care nu se înţelege deloc cu diacriticele.

2. Asiguraţi-vă că discuţia între server şi clientul vostru se face prin utf8. Sunt mai multe chestii în manualul MySQL despre cum se poate seta asta. Pentru că evident n-am avut chiar vreme (site-ul UP11 era trecut de deadline de muuult) să RTFM, am scanat prin el şi am găsit câteva linii relevante:

SET NAMES 'charset_name'
SET CHARACTER SET charset_name

Evident, nu trebuie să uitaţi să definiti character-encoding-ul în HTML-ul rezultat şi să trimiteţi headerul HTTP cu character encodingul setat corect (desi browserele de doamne-ajută fac ele detecţie).

yPHP – idei

yPHP (care vine de la yetiPHP :P) este cum numesc eu tot ce am învăţat de când am scos nasul în lumea PHP, concretizat în cod. Primele mele aplicaţii în PHP au fost scrise cu ajutorul Dreamweaver de la Macromedia, prin începutul liceului, şi, învăţând din codul autogenerat, am început să scriu şi eu chestiile mele.

Evident, pe vremea aia începusem să învăţ ceva programare la liceu, şi am mai învăţat să folosesc funcţii and stuff, da dacă stau acuma să mă gândesc în urmă, nu cred ca mi-a plăcut vreodata ideea asta cu PHP şi HTML şi CSS şi toate într-o mare ciorba. Aşa că undeva prin anul 2 – 3 (că în anul 1, 2 n-o prea fost rost de învăţat chestii cool), începând să învăţ despre OO pe la şcoală, am început să investighez posibilitatea de a folosi OO în PHP.

A durat ceva, şi am mai inventat câte ceva noi învăţat the hard way, dar până acum câteva zile yPHP nu a fost mai mult decât o modalitate cât mai standard de a scrie codul pentru aplicaţii folosind MVC (model, view, controller).

Scriu postul ăsta pentru că, în timp ce lucram la una alta mi-a venit o idee mai trăznită. Cum ar fi să ai o aplicaţie grafică în care să defineşti relaţiile între entităţile sistemului tău, ce acţiuni poate face şi cine şi când, şi apoi de la setările tale, fie să se genereze nişte clase direct, fie să se genereze nişte fişiere de configurare pentru o … maşină virtuală PHP care să îţi execute chestiile.

Cu cât mă gândesc mai mult la asta cu atât mi se pare mai utilă, deşi nu ştiu cât de mult poate fi scalat aşa ceva. M-am uitat la framework-urile existente pentru PHP, şi iniţial am crezut ca reinventez roata. Dar acum nu mai sunt convins. Cred că ar ieşi ceva interesant pentru IMM-uri şi, mai ales, ONG-uri.

Întrebarea e, cred, cât de departe se poate merge cu descrierea acţiunilor. Cum poţi să faci cât mai simplu şi mai vizual definirea unor funcţii custom, eventual să fie cumva independete de limbaj, fără să ajungi, cum sunt băieţii de la Typo3, să scrii un limbaj noi, şi totuşi fără să pierzi din flexibilitate. Idei?