WTF?? Pescarusii ne-o trag in curand …

Deci in pula mea, stateam azi si beam o bere la Monaco, cand vad o cioara din aia alba, adica un pescarus care incepe sa craoie deasupra terasei … dupa cateva zeci de secunde, nu-mi vine sa cred: chelneru’ vine cu niste bucati de pizza, cheama oratania care vine ff docila si …

pescarus-monegasc
pescarus-monegasc

Il intreb pe ala .. cica e obisnuitul locului .. vine in fiecare zi si-l striga sa-i dea de mancare. Pai pula mea … daca si astia s-au adaptat sa ne exploateze …

Unde pula mea e MODELUL ?

model view controller pula

Deci in pula mea, eram ieri la servici, pe la pranz, si ma ia  A-C, sefa mea cu ea la etajul 1 (nu sa-i dau o muie cum poate va gandeati) ci pentru o “reuniune”. Reuniunea de fata insemna de fapt ca am intrat in biroul unuia si ne-am asezat pe niste scaune, el urmand sa ne prezinte, si apoi sa ne predea un maret backoffice de moderare. Backofficeul asta, teoretic, ar trebui sa ma scuteasca pe mine de sarcina de a scrie unul noul pentru proiectul la care lucrez, asa ca putea fi util, daca era adaptabil.

Ok, individul intoarce monitorul si ne arata cum se logheaza el, cu vede niste inregistrari, si le “modereaza”. Adica alege daca sunt spam sau nu, evident. Aplicatia are un aer invechit si arata destul de naspa, dar, ni se precizeaza, a fost utilizata intensiv de echipele care fac moderarea, deci sunt deja obisnuite cu modul de utilizare. In plus, si aici devin brusc interesat, este scrisa foarte curat, obiectual, si poate fi extinsa/adaptata usor pentru a obtine ce avem nevoie.
“Perfect”, imi zic, hai sa vedem codul ala. Reunionistul deschide pspad (intotdeaua mi s-au parut dubiosi programatorii care folosesc pspad, intre noi fie vorba), si imi arata structura de clase. “E arhitectura MVC”, ma asigura el triumfator.  Asa cum aveam deja sentimentul, mvc la el inseamna ca are un fisier, index.php, in care foloseste un switch pentru a selecta codul care se va executa. Exact asa si era …
Restul codului era intr-un folder separat de “clase”, si inca unul de “functii”. Ok, zic eu, arata-mi “clasele” tale.

Clasele erau de fapt bucati de cod care se executau pentru fiecare pagina a siteului, si care tratau tot fluxul, de la intrare pana la template-ul smarty. As face aici o paranteza, legat de smarty. Smarty este un cacat inutil, utilizat de fraieri ca sa dea impresia ca sunt mari programatori si separa “codul” de “view”. De fapt obti acelasi rezultat daca scri un template in php (php este in esenta pulii lui un limbaj de template-uri!) si ii pasezi argumentele intr-un array. La fel de usor ajungi sa bagi business logic in template si in smarty si in php. Si aici inchid paranteza.
Asadar, fiecare pagina avea codul ei,100 % procedural, jalnic inchis intre o declaratie de clasa si paranteza de inchidere corespunzatoare.
Dar asta nu e tot, continua programatorul. Exista si un (simulacru) de sistem de mostenire, pe un nivel: toate clasele mostenesc o clasa de baza pentru a mosteni niste functii comune (si destul de dubioase) de autentificare si acces la baza de date. Pentru ca, da, nici macar o abstractizare BD calumea nu a fost implementata, pentru ca, imi explica el usor jenat, nu a reusit sa gestioneze problema cele 2 servere BD (unul pentru citit, frontul si altul master, pentru scris). “Deci ai facut o treaba de cacat” imi zic eu in gand, apoi zambesc protocolar, pentru ca urma sa-l mai intalnesc pe individ la cafea.

Si acum partea didactica pentru toti pularaii care au deschis un editor si au inceput sa “programeze” in PHP, in principal pentru ca ca are  bariera de intrare foarte joasa.
In cuvinte simple, model view controller este un pattern care ar trebui in principiu sa izoleze logica aplicatiei, cum s-ar zice Business Model-ul, de interfata, de afisare. Asta inseamna ce … de exemplu daca ai de implementat afisarea listei de sefi carora trebuie sa le sugi pula ca sa ajungi un sef mai mic, in modelul aplicatiei incarci lista, din baza de date sa zicem, o prelucrezi, aplici reguli specifice (sa zicem ca ai o filtrare, numai sefi cu acelasi etaj cu tine sa va intalniti la aceeasi toaleta), dupa care pasezi aceste informatii, intr-un format neutru, afisarii. Si cine paseaza datele si face legatura intre model si afisare (view) ? Controllerul.
Aici este momentul in care fraierul cade in plasa … o regula foarte ignorata este TC-FM (thin controller – fat model), adica controllerul trebuie sa faca STRICT doar interfata intre cele 2, sa nu contina business logic. Dar, este mult mai usor sa bagi la greu cod in asa zisa ta “clasa” care devine un fat controller curand singleton curand o mare laba.
In poza de sus, in partea acoperita de pula, scrie “encapsulates application logic” si “exposes functionality”. Adica … adica ofera un acces selectiv la sistemul care e modelat. Deci fara query-uri in controller, desi pare mai usor. Izolarea scopului, asta e esential.
Muirea continua cu viewul: intr-o aplicatie web nivelul view este de fapt o combinatie intre codul server side care prepara afisarea, codul client side care o modifica/afiseaza (html + javascript care manipuleaza html) + browserul web, exact cois… Daca vrei sa fi ortodox nu faci query-uri in template-uri php sau altceva, nu prelucreazi informatie in view si nimic altceva. Doar afisezi, faci un for chestii de genu asta.
Mult mai ingrijorator este persistenta acestei abordari, daca pot macar sa-i zic asa, in framework-uri cu pretentii. Un trist exemplu este Zend Framework care nu ofera absolut nici un suport pentru partea de model, parca incearca sa fie o continuare a “traditiei” scriptkiddies legata atat de des de PHP.
Ca sa revin la intrebarea initiala: “unde pula mea e modelul?”

P.S.

Dupa amiaza m-am intalnit la o tigara cu Mikael, din celula de securitate, care mi- a zis ca cunoaste backoffice-ul respectiv, ca e “un truc de merde” dpdv securitate,  si tradus mai pe scurt, ca “isi baga pula, el nu aproba utilizarea lui in aplicatie”.

Plugin-uri Flickr pentru wordpress

Una din ultimele initiative mai de cacat d-ale mele este sa-mi pun pozele asa zis misto pe flickr. Numele web 2.0 agramat, recunosc, ma irita, dar pana l-a urma am facut cont acolo. Deci cum ar fi, aici ar fi http://www.flickr.com/photos/deodorel/.

Anyway, alataieri ma gandeam daca exista cumva un plugin decent gen sidebar care sa-l pun usor in site. Si oarecum exista … iata testul meu:

1) Quick Flickr widget

Asta s-ar gasi aici : http://wordpress.org/extend/plugins/quick-flickr-widget/

Pluginul se instaleaza clasic, prin dezarhivare/copiere, si apoi il poti trage in sidebar. E destul de complet, merge inclusiv sa-ti bagi numele de utilizator si sa iti gaseasca el streamul. Singurul lucru care nu mi-a placut este formatarea stangace, trebuie sa intru in css chiar si pentru tema default deci nu aveam chef.

2) Flickr RSS
Se gaseste aici : http://wordpress.org/extend/plugins/flickr-rss/

Asta teoretic ar trebui sa mearga cu linkul rss al streamului, dar in practica cu ultima versiune de wordpress nu merge … deci pica.

3) Smugmug photo sidebar widget

Are un nume bizar, si se gaseste aici: http://wordpress.org/extend/plugins/photo-sidebar-widget

Pana la urma asta a fost alegerea castigatoare, care se vede in dreapta. Iti bagi rssul, cate poze vrei, daca pune sau nu caption si aia e, cois. Arata normal in template, nu vreau mai mult. Ce pula mea …

Baietii de la Hotmail?Sa ma suga de pula!

Cam asa ti-as raspunde daca m-ai intreba acum ce parere am de cei care au scris/configurat/decis politica de functionare a serverului de mail hotmail.com. Sa va povestesc de ce …

Ma intorc in timp acum 3 saptamani: pe ansamblu aveam o parerea buna despre Hotmail, chiar daca mi se cam rupea … 5 gb spatiu, interfata web 2.0 ala gmail (chiar mai eleganta as zice eu), etc etc.
Totusi aveam o problema minora cu acesta. O aplicatie mai veche scrisa de mine, care trimite e-mailuri de inregistrare, de confirmare a comenzilor. Aplicatia a fost intarziata destul de mult, dar in sfarsit era aproape de gold, ca  sa zic asa. Mai ramasese de rezolvat o problema minora – unele e-mailuri nu ajungeau la conturile de test de pe hotmail/live. De ce hotmail? Pentru ca potentialii si viitorii clienti se pare ca erau fani, nu era treaba mea de ce, ideea e ca trebuia sa reduc frecventa acestor fenomene.

Initial nu mi-am pus prea mari probleme, eram 99% convins ca e-mailurile ajungeau in junk folder si deci trebuia doar sa mai scot anumite keywords ceva si urma sa se rezolve. Dar .. surpriza … e-mailurile nu ajungeau deloc. Mai grav era ca era random, cateodata ajungeau (in junk) cateodata bine, cateodata deloc.
Inca sigur pe mine, am vorbit cu sysadminul sa-mi confirme ce raspunsuri are de la serverul hotmail pentru cateva e-mailuri care am constatat ca  nu au ajuns: surpriza surpriza, serverul raspundea cu “Sent”.


Jun  2 04:22:57 ZIP1 sendmail[3267]: m52BM8Ki003227: mailto:to=dorel123@live.com, mailto:ctladdr=<censored> (528/100), delay=00:00:14, xdelay=00:00:01, mailer=esmtp, pri=120028, relay=mx1.hotmail.com. [65.54.244.136], dsn=2.0.0, stat=Sent ( <mailto:200806021122.m52BM8Ki003227@ZIP1.censored.com> Queued mail for delivery)

Moment in care am inceput sa caut pe google, si incet, incet o problema de dimensiuni galactice a inceput sa se dezvaluie: hotmail e cu muia. Ca intr-un film prost cu hackeri, pagini dupa pagini de solutii care nu merg, de idei stupide si mai ales disperare se derulau prin fata mea. Se pare ca:

1) serverul de mail utilizat NU suporta RFC. De aia nu zice nimic cand te fute …

2) Microsoft foloseste Symantec BrightMail, un software antispam. Care are prostul obicei de a sterge potentialul spam fara nici un avertisment. De aia nici nu ajunge in spam.

3) Filtrele lor sunt superaiurea, multi se plang de comportament imprevizibil. Probabil ca se mai joaca cu ele, le ajusteaza, dar ideea e ca au mult false-pozitive ceea ce e .. naspa.

Totusi mi-am zis, nu se poate ca Microsoft sa nu fi conceput macar niste solutii pentru asa ceva. Si intradevar, dupa cateva zile am rasuflat usurat: descoperisem  Smart Network Data Services. Acesta ar fi un serviciu prin care poti sa urmaresti ce face Hotmail cu mailurile venind de la un anumit IP(care poti sa-l controlezi), de ce le considera spam, etc . Dar vai … problema e ca dupa ce mi-am facut cont cu ipul serverul de mail, am constatat ca nu merge. Adica nu am nici o valoare .. nicaieri. Si totusi, serverul lor de mail raporta fericit de fiecare data ca a primit mesajul … futui.

Am verificat si incercat de 15k de ori: serverul meu trimite headere calumea, are reverse dns, e trimis prin smtp, userul exista. Nimic. Oricare alt serviciu gratuit nu are nici o pb, chiar si google care le mai baga intr-un timp in Spam.

Singura solutie care se intrevede este mult prea josnica ca sa ma gandesc la ea: microsoft are un “parteneriat” (probabil ca e o firma fantoma) cu o companie care ofera un serviciu de whitelisting. Platesti o suma (1000 $ pe an), si poti sa trimiti un numar de e-mailuri in hotmail si se garanteaza primirea. Dar sa nu fie spam … yeah right. Nu imi vine sa cred ca, avand problemele care le au, au curajul sa-ti ceara bani ca sa poti sa le trimiti e-mailui, e o forma de santaj pe fata.

Asa ca, acum, daca ma intrebati ce parere am despre baietii de la Hotmail o sa va raspund ca-n titlu: sa ma suga de pula!

BIOS update – i’m fucked

M-a mancat rau de tot in cur sa fac un update de bios la laptopul meu Toshiba satellite p200 … si asta din vina imbecililor de la toshiba care nu au reusit sa faca niste drivere de power management care sa mearga (f multi au problema asta), care este un dezastru pentru un laptop ….

Am downloadat frumos softul lor de pe site, l-am pornit cu incredere … si dupa vreo 15 – 20 de secunde s-a blocat elegant, si s-a restartat …. Ca sa vad un mare ecran negru dupa asta, evident bios futut – nu mai merge nimic.
Dupa disperarea de rigoare, in care mi-am dat seama ca singurul device cu procesor din casa era mobilul meu windows (laptopul vechi vandut in aceeasi zi!), am inceput sa caut pe google solutii cu laptopul unui prieten …
Initial pare ca sunt sperante: la biosurile Phoenix exista un mod de recovery in care se poate intra apasand Fn – B (sau Fn – Esc) in timp ce este introdus cablul de power si se apasa butonul de power on. Laptopul intra in acest mod si e capabil sa booteze dupa o disketa pe usb. Pe disketa se pune phoenix crisis recovery disk, si … dumnezeul cu mila.
Am cumparat o unitate (70 ron – nec), si am incercat … desi pare ca citeste disketa cam 1 minut (deci are timp sa citeasca fisierul de 1 mb -> bios-ul), nu am nici un rezultat. Deci cred ca am ramas cu un “expensive paper weight” cum zic americanii .. futui!