De Sezon

Posted in Regula 0, Stand-up philosophy on December 25th, 2011 by Mihnea

A venit iar vremea retrospectivelor. Faptul ca Pamintul a mai dat o tura in jurul Soarelui de la ultima recapitulare transforma fiece cetatean intr-un Captain Hindsight inarmat cu concluzii, rezolutii si linii care se cer trase. Clisma de sfirsit de an pune punct Trecutului si-l pregateste pe om pentru Viitor.

Pai daca-i vorba de catharsis, catharsis sa fie. Oricum, nu pot rupe tacerea stinjenitoare ce se lasase pe-aci cu un articol despre micile scapari ale vreunui miner sau retorica mefecista a vreunui militian. Nu. Voi arunca o privire patrunzatoare asupra evenimentelor din 2011 si voi decerna premiile si calificativele meritate de catre fiecare entitate implicata. Deci:

Muie Silviu Ardelean

Pentru ca merita.

Muie Codexpert

Aceasta muie se confera pentru inca un an de dezinformat incepatorii, raspindit semi-adevaruri despre programare si dezvoltat un mediu dulceag-caldut in care minerii mici sa poata ecloza, iar cei mari sa poata creste si mai mari si improsca internetul cu puroiul lor cranian. Se acorda si premiul special Radio Erevan pentru efortul Gardianului Ovidiu de a-si pune Intrebarile Frecvente pe care nu le intreaba nimeni.

Muie Apple

Anul asta s-a lansat XCode 4, care e si mai abject decit 3. Fanboii l-au laudat pentru ca seamana mult mai bine cu iTunes si iti zice ce face intr-un control ce aduce a LCD. Intr-adevar, de mic imi doream ca IDE-ul meu sa semene cu un casetofon de masina. In continuare nu poti naviga intre surse cu tastele, crapa de 2-3 ori pe zi, refuza ocazional sa vorbeasca cu telefonul si trebuie sa restartezi tot, se sperie daca vede provisioning profiles facute de 3 etc.

Muie Google si Samsung

In programare exista un semn universal recunoscut al esecului absolut: sa incerci sa faci ceva ce au facut Apple si sa-ti iasa mai prost. Acest semn era prezis prin carti, dar pina de curind nimeni nu reusise sa atinga nivelul necesar de prostie. Google au ridicat manusa si au adus pe lume sistemul de operare Android.

Experienta dezvoltarii pentru Android face ca programarea pe iOS sa para un masaj erotic prestat de Scarlett Johansson. Nu numai ca pe Android trebuie sa scrii Java, acest limbaj conceput de si pentru copiii cu sindromul Down rezultati din relatiile incestuoase intre pigmei retardati; actul creator se petrece in Eclipse, un fel de editor de text care stie vag ca lucrezi la un proiect compus din mai multe fisiere, dar nu e niciodata sigur care sint fisierele alea, ce sa faca ca sa le compileze si cind.

Peste Eclipse vine Android SDK care este compus dintr-un emulator inutilizabil de incet si un plugin de Eclipse care la fiecare linie de cod da cu zarul sa vada daca sa crape sau nu, si in majoritatea cazurilor pierde. Au fost zile in care Eclipse a crapat de 20-30 de ori, fara a incerca lucruri avansate gen adaugat fisiere noi in proiect sau debug. Uneori cind il repornesti dupa ce crapa refuza sa compileze proiectul, spunind ca nu mai gaseste SDK-ul, ca unknown type java.lang.Object si alte d-astea. Atunci il mai restartezi de citeva ori, ca pina la urma o ia.

Lasind la o parte micile scapari ale mediului de dezvoltare, API-ul Android e facut de niste imbecili colosali. De exemplu, proprietatile si layout-ul controalelor se definesc in niste XML-uri. Unele chestii se pot seta si din cod, dar majoritatea nu, asa ca daca vrei sa faci chestii la runtime, Google iti recomanda sa sugi pula. Nimic nu e unde te astepti sa fie, dar nu pentru ca ar fi intr-un alt loc, ci pentru ca pur si simplu nu exista. Update-urile minore, de exemplu de la 3.1 la 3.2, iti distrug aplicatia pentru ca nimic nu mai merge ca inainte. Pentru a te ajuta sa suporti versiuni multiple, aplicatia iti crapa daca pui in XML-urle pulii ceva ce nu exista in versiunea pe care rulezi; din cod ai putea detecta versiunea si lua atitudine, dar cum ziceam, de acolo n-ai acces la proprietatile care conteaza, deci sugi.

Android este open source, adica in loc sa faca ceva care sa mearga, au luat de pe net chestii scrise de altii, pe principiul ca daca sint pe net, sigur sint bune. Google, fiind un startup cu banii numarati, nu isi permite sa dezvolte un decoder video, de exemplu. E mult mai bine sa foloseasca la maxim potentialul unui alt produs al lor, care chiar merge, pentru a localiza cu precizie o pagina care contine cuvintele “video decoder” si a downloada ce cod se gaseste pe acolo. Da, mai crapa aplicatia sau tot device-ul cind se termina stream-ul, nu merg chestii de baza gen schimbat aspect ratio in timp ce cinta, iti ia 3 versiuni majore sa adaugi suport pentru stream-uri live etc.; dar ce alternative aveai? Google nu crede in reinventarea rotii, daca se gaseste deja pe net una patrata facuta de un mester faiantar.

La tot acest haos se adauga si producatorii de hardware, care customizeaza jegul in functie de bunul plac si posibilitatile siliconului propriu. Campionii sint Samsung, care par sa-si recruteze programatorii exclusiv din rindurile indienilor care liciteaza 5 dolari la orice proiect pe rentacoder. In momentul in care incerci sa faci un player video pe un device Samsung incepi sa-ti doresti bug-urile simple, cinstite, pe care le vedeai pe alte device-uri, gen butoane care uita ce imagini au cind schimbi orientarea, sau controale care isi uita pozitia cind apare tastatura on-screen.

Google e privit ca un fel de Mecca sau Mensa al tehnologiei, unde procesul de angajare permite accesul doar celor mai stralucite minti, unde lucreaza Knuth (ala care scrie carti pentru inaltat monitorul, ca sa prinda si minerii contextul), unde primesti mincare gratis la prinz si-ti cultivi creativitatea. De la astia te astepti sa inteleaga ca daca vrei un lucru, trebuie sa-l faci. Mi se strepezesc unghiile cind trebuie sa-i recunosc cite un merit lui Apple, dar aia si-au facut singuri software-ul si hardware-ul si merg. Au inteles chiar si ca daca vrei IDE, trebuie sa-ti faci, ca dejectiile open source existente sint inutile; asta nu le-a mai iesit si au ajuns tot la o dejectie, dar macar au incercat. Google au incercat sa faca din Linux, gstreamer si Eclipse bici. Firma de programatori web, ce sa le ceri?

Va dati seama cum era Chrome daca nu le facea Apple engine-ul de HTML?

Muie Microsoft

Acum vreo 9 ani, Microsoft au zis ca C++ nu-i mai satisface intelectual si ca daca totusi vrei din C++ UI mai smecher sau feature-uri gindite pentru aplicatii web (dar nu aplicatii web propriu-zise), trebuie sa folosesti noul si stralucitorul Managed C++. Viitorul fusese trasat.

Vreo 2 ani mai tirziu, putinii oameni care au folosit mizeria au aflat ca e cazul sa se reorienteze, caci Stapinirea a infierat Managed C++ ca “deprecated”. La  schimb a fost oferit C++/CLI, care e net superior. Asta chiar e viitorul, credeti-ne de data asta!

Anul asta, Microsoft a anulat viitorul si a declarat inceputul Renasterii C++. C++/CLI nu mai e bun, aplicatiile se vor scrie de acum incolo nativ, in C++. Nu mai poti sa deschizi o pagina de MSDN fara sa ti se spuna asta. Totusi, cind te uiti prin exemplele de cod, numai C++ nu vezi. De fapt este C++/CX, o noua muie data de Microsoft limbajului. Dar sa vedeti, de data asta nu e ca data trecuta. Nu, nu, nu, asta chiar e viitorul, juram pe rosu. Ce, am mai zis asta? De ce sa privim in trecut, cind avem atita viitor de construit? Voi investiti in scris cod C++/CX si faceti-va aplicatiile sa depinda de el, ca noi sigur nu ne razgindim CEL PUTIN un an de acum incolo. CEL PUTIN!

Pentru a completa jignirea, evanghelistii o tot baga p-aia cu “at the interface” sau “at the border”. Aparent, C++/CX trebuie folosit doar cind vrei sa vorbesti cu OS-ul, si poate fi izolat acolo. Intre 99% si 99.9999% din aplicatie (in functie de evanghelistul cu care vorbesti) poate fi scrisa in C++ normal, si doar foarte, foarte rar vei recurge la un virf de /CX, drept condiment. In realitate, se vor scurge tipuri gen String din C++/CX in restul aplicatiei, sau vei muri de plictiseala facind conversii peste tot. De asemenea, e posibil sa constati ca logica de UI reprezinta, totusi, un pic mai mult de 1% din codul aplicatiei. Aceste lucruri nu-i preocupa pe evanghelisti, pentru ca ei nu scriu cod si probabil nici n-au scris vreodata.

Muie Digital Video

Compresia video nu-i un subiect accesibil minerilor. Conceptual e o chestie simpla, dar in practica sint miliarde de detalii, scenarii, profile si alte mui, astfel incit dureaza ani intregi sa scrii un codec modern. Asta este, evident, o mare timpenie.

Minerii sint perseverenti. Daca nu-i lasi sa scrie codecuri, se vor apuca sa faca containere. In fiecare zi se gaseste cite un bou sa remarce ca toate containerele sint de cacat (ceea ce e adevarat) si sa-si faca propriul container, convins ca va rezolva toate problemele (ceea ce e jenant). Unii din astia capata avint si sustinere, si astfel apar chestii ca MKV.

Rezultatul este ca n-ai nici o sansa sa faci un program de cintat sau procesat video. Inainte de a putea sa decodezi primul frame, trebuie sa ajungi la el, desfacind containere care mai de care mai ridicole, produse de programe imbecile scrise de oameni cu interpretari foarte liberale ale standardelor si specificatiilor. Daca totusi reusesti sa ajungi la frame-uri, problema se repeta, doar ca sint si mai multe variabile si e infinit mai mult loc pentru interpretari, bug-uri si alte inovatii. Sigur, poti incerca sa folosesti o biblioteca, cum ziceam mai sus ca au facut Google, dar nu faci decit sa schimbi un cosmar cu altul.

Uneori, printre aceste cacaturi digitale se mai strecoara cite o relicva analogica, gen frame rate-ul de 29.(970029) din NTSC sau codurile de Widescreen Signaling. Nu v-as dori vreodata sa ajungeti sa cititi specificatii scrise de oameni crescuti printre osciloscoape si condensatori.

Muie C++

Anul asta a fost definitivat in sfirsit noul standard C++, prilej de mare bucurie pentru unele paturi sociale care nu se descurcau prea bine nici cu vechea forma a limbajului, dar care vor putea propune acum inlocuirea enum-urilor si cu lambda-uri, nu doar cu vectori si structuri. Cu tot efortul, limbajul tot nu are un ABI si tipurile din STL tot nu pot fi folosite intr-un lib sau intr-o interfata. E induiosator cum se lauda Bjarne ca C++ este un limbaj excelent pentru construit biblioteci, dar eu cred ca e putin penibil ca nu poti distribui bibliotecile alea in forma binara. Uneori am impresia ca lumea e formata doar din freetarzi si ca e un grav faux pas sa afirmi ca vrei sa cistigi bani programind.

Din cauza ca nu exista ABI, exista COM. Din cauza ca COM este oribil si greoi, se nasc jeguri ca C++/CX.

Muie 2011

Tendintele continua: e din ce in ce mai greu sa programezi ceva, pentru ca OS-urile, bibliotecile, IDE-urile si limbajele ti se opun mai indirjit ca niciodata. De aceea, 2011 merita multa muie.

 

Tags: , , , , , , , , , , , , , , , , , ,