Unicode

Posted in Stand-up philosophy on September 19th, 2012 by Mihnea

De ce pula mea ai vrea sa poti scrie nume de fisiere in telugu? Ok, stramosii tai n-au fost in stare sa realizeze ca 20 si ceva de semne sint suficiente pentru a reprezenta pe foaie sunetele care le ies pe gura, dar s-au prins altii intre timp. Cum cacat sa insisti sa scrii cu viermisori si iatagane dupa ce ai vazut alfabetul latin? Si, mai rau, cum sa-ti vina ideea sa aduci haosul asta in software, in loc sa le faci un bine inapoiatilor si sa le spui ca daca vor tehnica de virf pentru vazut porn, trebuie sa se invete si cu tehnica de virf pentru scris si citit? الجهاد!

Faptul ca lumea civilizata i-a bagat in seama p-astia a fost prima greseala. A doua greseala a fost formarea unui Comitet responsabil cu recensamintul alfabetului si incartiruirea mazgaliturilor intr-un Standard International. Acest Comitet ar fi putut sa adune literele latine, chirilice, kana si eventual grecesti (cu perversiunile lor gen ăâöé etc.), sa le puna intr-o tabela si sa termine treaba (ignorind ostentativ ideogramele si jihadistii), dar nu asa functioneaza comitetele. Cind ti se confera puterea de a Gindi O Solutie, trebuie sa faci ceva complicat, ca sa le arati celorlalti ca esti destept. Orice prost poate sa puna citeva sute de caractere intr-o tabela, dar tu esti un erudit patrunzator si vezi imaginea de ansamblu, asa ca tabela ta va contine hieroglifele egiptene, caracterele ugaritice, cartile de joc, emoticoane, piesele de domino si mahjong etc. Si privind tu asa la cele un milion de semne adunate, simti ca tot nu-i destul si tot se vor gasi diversi sa conteste valoarea ta, valoarea ta, asa ca adaugi si scrijeliturile de pe discul din Phaistos (caracterele 0x101D0 – 0x101FF), care nu a fost descifrat inca. CINE-I CEL MAI ERUDIT ACUM?

Si nu te opresti aici. Nefiind prost si tinind cu tarie sa arati lumii asta, te apuci sa incurajezi creativitatea in exprimare prin intermediul semnelor diacritice. Desi ai bagat in tabela toate formele de A cu cerculet, accente, sedila, puncte si combinatii, faci caractere separate pentru toate aceste semne, ca sa poata omul sa scrie A cu trema fie ca Ä, fie ca A urmat de ¨.

Astfel s-a nascut Unicode, un standard menit sa ingreuneze pe cit posibil reprezentarea digitala a textului. Unicode se asigura ca orice operatiune de bun simt pe care ai vrea s-o faci pe un string devine imposibila. De exemplu, daca ai avut ghinionul sa inveti ca un string e o insiruire de caractere, imperialistul dornic de globalizare din tine va avea pretentia ca al 5-lea caracter dintr-un string sa fie la pozitia 5. In termeni stiintifici, vei dori ca accesul la caractere sa fie in timp O(1). Ei bine, Unicode se pisa pe pretentia ta din multiple directii.

In primul rind, cea mai folosita encodare pentru Unicode este UTF-8, care e un cod cu lungime variabila. Asta s-a intimplat din cauza ca, desi sint vreo 1.1 milioane de caractere in Unicode, oamenii normali folosesc cam 100 din ele, deci s-a simtit nevoia unei reprezentari compacte. Astfel, un caracter poate avea intre 1 si 4 bytes, deci textu’ e mic, dar ca sa ajungi la un caracter trebuie ori sa treci prin toate caracterele de dinainte, adica O(N), ori sa tii si sa actualizezi o tabela de index impreuna cu string-ul, care ar fi mai mare decit spatiul cistigat prin encodarea cu lungime variabila.

Minerii se vor grabi sa observe ca Microsoft au rezolvat demult problema asta prin intermediul string-urilor wide, unde un caracter e tinut pe 16 biti. Minerii sint prosti si nu realizeaza faptul ca 1.1 milioane de caractere nu incap in 16 biti. String-urile wide din Windows folosesc de fapt UTF-16, care este tot un cod cu lungime variabila si are aceleasi probleme ca UTF-8, plus ca ocupa de doua ori mai mult spatiu pentru textul de oameni normali, trebuie convertit la UTF-8 pentru a discuta cu restul lumii si e endian-dependent, asa ca inainte sa te exprimi pe limba lui trebuie sa semnalezi ce endianness preferi cu un cacat numit byte order mark.

Sigur, 1.1 milioane de caractere pot fi reprezentate pe 32 de biti. Se pare ca problemele noastre se rezolva daca folosim UTF-32 si acceptam ca 75% din text sa fie 0, ca memoria si discurile sint ieftine in zilele noastre. Ei bine, gratie diacriticelor separate (sau “combining marks” cum se numesc ele oficial) se rezolva o pula. Daca pentru codul tau “un caracter” inseamna “o litera” si nu “o litera sau un semn de cacat care face parte din litera anterioara”, tot trebuie sa parcurgi string-ul ca sa ajungi la o anumita pozitie si ca bonus trebuie sa si stii care sint semnele alea ca sa tii cont de ele cind numeri. Evident, celelalte reprezentari au si ele problema asta.

Sa facem un efort de imaginatie: un miner-arhitect este insarcinat sa toarne fundatia unui cod ce va folosi UTF-8. Sesizind problema indexarii, dinsul infaptuieste o functie numita CharacterAt() care parcurge string-ul in cautarea pozitiei date, tinind cont de lungime variabila, diactritice separate si alte mui. In urma sa trudeste minerul-programator ce este insarcinat sa caute slash-urile dintr-un string. Miinile lui negre iti vor intinde o floare asemanatoare cu codul ce urmeaza:

for(size_t i = 0; i < Length(str); ++i)
{
    if(CharacterAt(str, i) == '/')
    {
        // ceva
    }
}

Am incercat aici sa cuprind cit mai bine mentalitatea de miner, folosind size_t pentru variabila i, ca asa a auzit ca-i bine, dar chemind Length() la fiecare iteratie, deoarece minerii nu inteleg ce face de fapt functia aia. Oricum, chiar daca minerul muta apelul catre Length() in afara buclei, cautarea asta e tot O(N^2). Cam ca atoi-ul Minerului Suprem, mai tineti minte?

Apropo, Length() ala trebuie sa aplice aceleasi principii de convietuire globala ca CharacterAt() ca sa afle cite caractere sint de fapt in sir, nu merge sa cauti primul 0.

Exista diversi mintosi care sustin ca accesul aleatoriu la caractere este necesar foarte rar. De obicei cauti ceva printr-un string, deci oricum iei la rind toate caracterele, asa ca ai nevoie doar de niste facilitati de iteratie care sa stie de regulile pulii. Chiar daca le dam dreptate, ramine comparatia, un alt detaliu prin care Unicode da muie programatorilor din lumea intreaga.

Un om sanatos s-ar astepta sa poata compara doua string-uri byte cu byte: cind gasesti valori diferite la aceeasi pozitie, string-urile difera. Asta ar fi prea simplu, asa ca din nou diacriticele separate salveaza situatia. Ca sa compari doua string-uri trebuie intii sa le normalizezi, o operatiune cit se poate de simpla si naturala cu o descriere concisa, de doar 27 de pagini. Pentru a stimula si mai tare creativitatea, exista de fapt 4 moduri de normalizare, numite intuitiv D, C, KD si KC. Pe linga disclaimer-ul ala despre OOP ce insoteste codul Java din descriere, supun amuzamentului dumneavoastra si metoda recomandata de utilizare a implementarii din WINAPI: deoarece nu poti sti cit de mare o sa fie string-ul normalizat, chemi functia aia intr-o bucla pina cind o nimereste.

Dupa ce reusesti sa normalizezi string-ul ala trebuie sa incepi cu intrebarile filosofice: este sau nu string-ul ’10’ echivalent cu ‘Ⅹ’, ‘Δ’ sau ‘١٠’? Apropo, Ⅹ ala nu e X, este 0x2169, “Roman Numeral Ten” si in UTF-8 se scrie pe 3 bytes: 0xE2 0x85 0xA9. Ce ne faceam daca nu aveam in Unicode numerele romane de la 1 la 12? UNDE MAI ERA ERUDITIA NOASTRA?!

Deci muie Unicode, muie alfabet!

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

Asamblorul

Posted in Codare cu premeditare, Regula 0 on September 2nd, 2012 by Mihnea

Bogdan Ontanu este un subiect generos, dar n-am scris pina acum despre el deoarece si-a desfasurat activitatea in neoliticul Internetului romanesc, pe cind Ideile se impreunau cu Eterul prin intermediul conturilor moca de Xnet si doar la ceas de seara, ca atunci era mai ieftin impulsu’ la Romtelecom. Desi forma de protoprostie intrupata in Bogdan este bine studiata in mediul academic, n-am vrut sa va indrept atentia catre trecut, atita timp cit prezentul este intesat de atitia mineri, militieni, profeti si alte subspecii de intelectuali care se zbat pentru a ne atrage atentia. Iata insa ca Viorel, un codexpert cel putin atipic prin faptul ca se preocupa in principal cu raspunsurile la obiect, ignorind aproape total exemplul Cucuscian, a decis sa faca jonctiunea intre trecut si prezent. Cind un incepator pingarit de miinile negre ale minerului a intrebat de unde poate sa-si procure un asamblor pentru a-si pune capat zilelor, Viorel a raspuns:

Încearcă şi acest asamblor interesant:

Bogdan Valentin Ontanu, autorul acestui asamblor interesant si posesorul site-ului oby.ro, este un fel de Aristotel al mileniului 3: prozator, filosof, game designer, virusolog, parinte de sistem de operare dar, mai presus de toate, programator ASM. El si-a asigurat locul in cartile de istorie de la scolile ajutatoare cind, in 2001, a anuntat ca lucreaza la RTS-ul Hostile Encounter, ce va avea urmatoarele caracteristici:

  • cel mai tare RTS 2D
  • Jucabilitate mai buna sau la fel de buna ca Star [adica Starcraft, in caz ca v-ati prins dar nu vreti sa credeti – n.r.]
  • Cel mai tare AI ( cu invatzare, dropuri surprize)
  • Poveste originala, fulminanta (si culmea aproape reala)
  • scris in ASM

Inainte de a studia jucabilitatea, povestea fulminanta sau taria, sa ne intrebam de ce vrea Bogdan sa scrie tot jocul in ASM. Din fericire, FAQ-ul cu reminiscente codexpertice de pe site ne lamureste:

We know ASM well. ASM is also very easy to learn
Argumentul e cladit pe proverbul “drumul cunoscut e cel mai scurt”. Cu alte cuvinte, Bogdan nu e in stare sa invete altceva, asa ca foloseste ce stie, indiferent ce implica asta. Also, “we” adica el.

There will allways be ASM code in a GAME so: Why NOT write all in ASM?
Dupa ce a auzit la Teleenciclopedia ca 57% din corpul uman e apa, Bogdan si-a extras creierul si l-a inlocuit cu apa, devenind astfel al doilea cel mai cunoscut programator hidrocefal din Romania.

Speed is of the essence in GAMES. ASM is 100% up to 300% faster than today “optimized” compiler
Iata ca frica de compilatoare si masini de scris automate facea victime cu mult inainte ca Minerul sa-i dea glas pe codexpert. Sa vedem cum se traduce asta in practica:

Cerinte de sistem pentru Starcraft, scris in C++ de catre fraieri:

  • CPU: 90 MHz Pentium I
  • RAM: 16 MB

Cerinte de sistem pentru Hostile Encounter, scris in ASM de catre Bogdan Ontanu:

  • CPU: 400 MHz Pentium II
  • RAM: 64 MB

Nu rideti. Codul ASM al lui Bogdan chiar este de 3 ori mai rapid decit codul amatorilor ce utilizeaza C++, dar necesita de 4.5 ori mai multi megaherzi d-astia deoarece Hostile Encounter e de 3*4.5 = 13.5 ori mai bun decit Starcraft. Dovada in screenshot-urile alaturate:

Starcraft

13.5 * Starcraft

Sint sigur ca se vor gasi guri rele care vor spune ca screenshot-ul din dreapta arata de maxim 7-8 ori mai bine decit cel din stinga, nicidecum de 13.5 ori. Lor le voi atrage atentia ca ignora faptul ca desi este facut de amatori, Starcraft este, totusi, un joc lansat, pe cind Hostile Encounter este inca in dezvoltare, deci are suficient timp pentru a-si realiza potentialul. In plus, trebuie sa vezi jocul in actiune ca sa-ti dai seama ca performanta de 1350% nu e investita doar in grafica ci si in AI si in modul in care toate elementele se imbina fluid, rezultind intr-o experienta ce atinge dezideratul initial de “cel mai tare RTS 2D”. Din fericire exista un demo care poate convinge pe oricine.

Acum ca am stabilit faptul ca Bogdan este cu adevarat o minte luminata a programarii ASM si nu numai, este timpul sa ne aplecam asupra talentului sau de prozator, de unde izvoraste povestea jocului, “fulminanta si culmea aproape reala”. Fundalul actiunii din Hostile Encounter este un o imbinare magistrala a unor idei de baza din scientologie, crestinism, Lorin Fortuna si practic orice SF de cacat din ultimii 50 de ani, relatata cu maiestria unui elev care n-a trecut de clasa a 3-a desi a incercat de 8 ori. Opera este atit de complexa incit sfideaza orice tentativa de a face un rezumat ce ar putea incapea in acest articol, asa ca va invit sa cititi aici schita realizata de autor. Marturisesc ca eram cu sufletul la gura atunci cind Satana voia ca urmatoarea recolta sa aiba 7 “typo logical DNA code”, in timp ce Dumnezeu insista sa bage 12. Pentru cei care nu dau skip la dialoguri, avem aici inca 3 fragmente scrise in aceeasi limba frumos curgatoare a lui Shakespeares ce imping firul epic cu pulanul in coaste de la Iisus, gheizere sfinte si retele neuronale pina la Zamolxis si hackeri romani.

Printr-o inexplicabila si cruda omisiune a Divinitatii, talentul lui Bogdan cu pixul acopera doar sfera cuvintelor, nu si pe cea a formelor. Acest obstacol a fost insa usor depasit, caci s-a gasit imediat un suflet de artist care sa completeze sufletul de prozator-asamblor al subiectului nostru. Un suflet de artista, mai exact, caci slava pentru grafica de exceptie se cuvine Adinei, care, conform spuselor lui Bogdan, a si cistigat “premiul artistic” la concursul “SF Rom” cu o imagine din joc. Privind in galeria intitulata inexplicabil “Artwork” resimtim un sentiment de goliciune, caci din pacate concursul respectiv s-a pierdut in negura vremurilor si nu putem vedea celelalte lucrari care au participat si n-au cistigat. Imaginati-va doar cum erau alea, daca au fost declarate mai proaste ca asta (intutulata, intr-un act de suprema ironie involuntara, ugly_thing.jpg):

De ajuns insa cu Hostile Encounter. Desi e un capitol important din activitatea lui Bogdan, nu e singurul. Trebuie sa mentionam macar in treacat Solar OS, sistemul de operare scris de Bogdan in – ati ghicit – ASM. Dupa cum putem citi in parabola A Day with Solar OS, acesta este primul sistem de operare care pune o intrebare de ordin filosofic hackerilor:

Yes I know you can break me, but since it is so easy by design, there is also no glory in doing this… so why doing it? Creation and Construction my friend are much more honorable, valuable and harder to achieve than entering a simple house that has no locked doors or “windows”. Besides my core shell is read only, small, simple, fast and does not auto run nothing. How on this Earth are you going to convince me to compile and insert your code into my GUI Kernel?

Sublim. Un nou concept in sfera securitatii aplicatiilor: security by philosophy. OS-ul iti vorbeste de dincolo de “GUI Kernel” si face apel la umanitatea ta, ca o poezie de Elena Farago:

De ce m-ai prins în pumnul tau,
Hacker frumos, tu nu stii oare
Ca-s mic si eu si ca ma doare
De ce ma strangi asa de rau?

Fratii mei ceilalti se joaca
Cu hackerii toti, dar eu
Nu pot alerga ca dansii,
Ca sunt scris in ASM!

Bogdan Ontanu lucreaza in prezent la AVIRA, unde sper ca incearca sa patenteze aceasta manevra filosofica si s-o inglobeze in produsul antivirus al companiei.

Mai sint multe de zis despre acest Om Al Renasterii si din fericire avem unde: Bogdan are un forum dedicat ideilor si proiectelor sale. Recomand cu caldura parcurgerea sectiunii “Evolution of Human Race”, unde vizionarul programator ASM continua discutii de pe alte forumuri sub forma de monolog, atingind subiecte de interes maxim si dind solutii pentru iesirea omenirii din criza morala si materiala in care se afla. De exemplu, aici gasim o aspra critica la adresa CERN, care a construit degeaba LHC-ul. Daca l-ar fi consultat intii pe Bogdan, ar fi aflat in primul rind ca trebuia facut in ASM si in al doilea rind ca “whatever technological advancement we might achieve it does not matter until we do not solve our darkness inside“.

In caz ca n-ati inteles, va traduc eu: pentru Bogdan nu conteaza bosonu’ Higgs si compilatoarele, ca la el in minte e bezna.

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

Simpleton Pattern

Posted in Premiul n00bel on June 10th, 2012 by Mihnea

Cu siguranta ati remarcat ca minerul si-a cam suspendat activitatea tutorialistica in ultimul timp. Cind firma aia care n-a auzit de Google l-a luat la sinul ei dupa despartirea de multinationala si l-a reprofilat pe Java, Silviu a fost cuprins de o bucurie de copil mic cu mintea goala. Vazind ca Normele de Exploatare mentioneaza prezenta unui garbage collector, s-a simtit obligat sa produca cit mai mult gunoi in timpul programului, astfel incit foarte rar ii mai raminea timp de cite un tweet extracuricular despre psihologie si Einstein. Spre fericirea noastra insa, dupa aproape un an de truda a avut pentru prima data nevoie sa declare o variabila globala si vechile instincte de pedagog s-au reaprins in el.

Dupa cum stie toata lumea si a aflat si Silviu saptamina asta, in Java nu ai voie cu variabile globale, deoarece incalca Principiul Celor 50 De Linii de Cod. Acest principiu, formulat de niste muisti ale caror nume mi-e lene sa le caut acum pe Wikipedia cind s-au strins nu stiu unde cacat sa faca ei limbajul viitorului care in 3 ani sa devina unicul limbaj folosit in intreaga lume, suna asa:

Se va numi Java acel limbaj obtinut pornind de la C++ si eliminind feature-uri pina cind orice program imaginabil necesita minim 50 de linii de cod.

In constructia dogmaticii lor, muistii s-au inspirat viguros de la unii care incercasera si ei sa impuna o limba unica in Europa cu vreo 50 de ani inainte si pina la urma au avut cam tot atita succes. In fine, cert e ca pentru a cirpi gaurile din Java, s-au gasit alti 4 muisti care au intemeiat o noua dogmatica: design patterns. Pentru a contrabalansa neonazismul lui Gosling (na, ca l-am cautat pina la urma), astia 4 muisti s-au inspirat din comunism, deci muie Ovidiu Cucu.

Pardon, divaghez. Ce voiam sa spun este ca design patterns sint diverse metode de a implementa banalitati ca variabile globale, instructiunea for, instructiunea switch etc. in Java, cu clase. Si cum for si switch sint concepte avansate pentru unii, orice retardat care cedeaza impulsului de a scrie un articol pe tema intelligent design in programare incepe cu singletonul, adica variabila globala.

Retardarea asta insa are grade. Exista retardati care pot fi convinsi sa nu mai incerce sa bage patratul prin cerc, retardati care musca din patrat in timp ce se pisa pe cerc si jos de tot, sub toti ceilalti retardati, exista Silviu Ardelean. In contextul de fata, Silviu Ardelean poate fi recunoscut cu usurinta, pentru ca va incerca sa aplice acest hack necesar pentru a avea variabile globale in Java la C++, care deja are variabile globale.

Articolul nu dezamageste. Lasind la o parte ilaritatea care survine cind ne uitam cum se framinta ortacul sa fie thread-safe si in pas cu C++11, la o trecere sumara prin articol sintem izbiti de o schimbare radicala in exprimare, pe undeva pe la mijloc, cind incep partile “dificile”. De la “that’s way I’m trying to figure a few implementations, some base on C++ 11 features” si “pointer final deleting problem disappears“, trecem brusc la “it might just happen that the OS scheduler unwittingly interrupts the first thread at this point“. Poftim? Unwittingly, pe bune? Probabilitatea ca Silviu sa foloseasca cu de la sine putere cuvintul “unwittingly” este la fel de mare ca in cazul ala din trecut cu “this is in contrast with“, deci ma simt obligat moral sa-l intreb pe Google ce parere are despre fraza aia. Si ce sa vezi, primul hit contine exact descoperirile originale ale minerului, cu tot cu numerotarea aia a liniilor-problema: de fapt e un citat din cartea lui Alexandrescu.

Mai jos observam ceva actiune SF cu std::call_once si std::lock_guard. De unde cacat stie Silviu despre std::call_once, va intrebati? Pai ia cautati codul ala exact asa cum e pe Google, si veti afla: de pe Stack Overflow. Daca va uitati putin mai atent, cum a facut-o un suflet rau ce a si comentat la miner pe blog, va puteti chiar intreba de ce cacat mai ai lock-ul ala acolo, daca faci call_once. Pai simplu: pe Stack Overflow zice unu’ sa folosesti call_once, da’ nu arata exact codul rezultat, asa ca minerul a pus pur si simplu cu copy/paste peste codul original, deoarece habar n-are ce fac cacaturile alea. Totul e sa dea articol++. A, scuze, ++articol, ca asa e optim.

Ma rog, articolul are acea calitate remarcabila de a-ti oferi cite o noua timpenie amuzanta de fiecare data cind il recitesti. N-o sa va stric placerea, va las sa va bucurati in tihna de acest mic miracol al programarii. Vreau doar sa-l intreb pe Silviu: ba, tu esti chiar atit de prost incit nu-ti dai seama cind e cazul sa te opresti din copy/paste?

PS: daca zice cineva ceva de avantajele singletonilor fata de variabile globale pentru unit testing si mock objects si pula mea, ia ban direct. De asemenea se confera ban pentru infierarea singletonului ca anti-pattern si sustinerea celorlalte pattern-uri.

 

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

Analfabetia de miercuri dimineata

Posted in 112 on March 28th, 2012 by Mihnea

Ca oricarui militian, lui Ovidiu Cucu ii place sa intocmeasca liste: liste cu norme, liste cu abateri de la norme, liste cu sanctiuni de aplicat pentru abateri de la norme, liste cu sanctionati si sanctionabili etc. De asemenea, e ferm convins ca odata intocmita, o lista trebuie lasata asa cum e; orice manipulare de lista il scoate din ale lui. Astazi el s-a decis sa redacteze o lista cu fruntasi in ale programarii si s-o posteze la avizierul ograzii, ca material de studiu pentru membrii Uniunii Tineretului Codexpert.

Ce e insa cu adevarat interesant e modul in care a luat nastere aceasta pornire. Ovidiu marturiseste ca ideea rabojului i-a venit citind o lista asemanatoare pe site-ul lec-academy.ro, un colt de internet unde niste tutorialisti intreprinzatori isi propun sa ne lumineze zilnic cu vorbe sau imagini din programare sau Microsoft Office. Sa spicuim, dara, din lista celor mai importanti 20 de programatori ai tuturor timpurilor in viziunea extrem de relevanta a acestor antrenori de secretare:

Pe primul loc este Tim Berners-Lee, care “a fost clasat pe locul ntai […] in lista Telegraph a celor 100 de marii genii.”

Ne bucura nespus sa-l vedem pe 2 pe marele programator Matt Mullenweg. Cum, nu stiti cine e Matt? E ala care a facut WordPress.

Urmeaza Larry Page care e “top 27 cei mai bogat miliardari”, precum si colegul sau Sergey, care este “top 28 cei mai bogat miliardari”.

Despre Linus Torvalds aflam ca “exista mii de variante / distributiile de servere de web Linux si multe ruleaza pe el“. Deci Linux ruleaza pe el Linux, sau pe el Linus?

Dennis Ritchie este “creatocul limbajului C si un mare dezvoltator a sistemului de operare UNIX”.

Brian Kernighan este “autorul a mai multe programe UNIX”. Sigur, orice student de la orice facultate de calculatoare este autorul “a mai multe” programe UNIX, ca doar e cursul ala de SO unde te chinuie cu asa ceva, deci locul asta ar trebui impartit de Brian cu toti studentii din toate timpurile. Cel putin eu asta inteleg din epifatul tutorialistilor.

Ken Thompson este “un pionier american in informatica, si a ajutat la crearea limbaj de programare B”. Redactorul a fost si el un mare pionier, motiv pentru care a petrecut mai mult timp la muncile patriotice decit in clasa. Asa se explica de ce nu stie cum se declina “limbaj”.

Rasmus Lerdorf “a autorizat primele 2 versiuni de PHP, si apoi a contribuit la dezvoltarea celor mai recente ale PHP. Astazi, PHP ruleaza peste 34% dintre site-urile online“. Sint curios ce cuvint era in original in engleza, de a tradus Google “autorizat”. De asemenea, daca s-ar fi pus si site-urile offline pe care ruleaza “cele mai recente PHP”, cred ca procentul ala ar fi depasit 100%.

Ca sa nu se simta singur Matt Mullenweg in lista (ala care a scris WordPress, in caz ca ati uitat deja cine e), il avem ceva mai jos si pe celebrul programator Jason Fried, a carui contributie la propasirea omenirii este un site ce “contine unele aplicatii web uimitoare“.

Alan Cooper “este numit parintele Visual Basic, deai mare parte din munca pentru Visual Basic a fost realizata de grupul intern de la Microsoft”. Chiar daca n-a muncit, aparent a fost facut parinte pentru ca “a contribuit la interfata grafica pentru sistemul API“. In caz ca nu stiti, interfata grafica pentru sistemul API este folosita pentru a realiza interfete GUI de urmarit IP-uri.

Larry Wall este S.A. Societate pe actiuni? Silviu Ardelean?

John Resig completeaza constelatia frecatorilor de text din care mai fac parte Matt Mullenweg (ala cu WordPress) si Jason Fried (ala cu site-ul de site-uri). Asta a facut jQuery, dar nu s-a multumit cu atit: el este si blogger.

Guido van Rossum este “autorul limbajul de programare Python”.

Daca vreti sa invatati programare de la oamenii care au intocmit aceasta lista, ii puteti contacta la office@leconline.ro sau direct la sediul din Strada Frumoasa. Frumoasa, da’ proasta.

PS: in ochii albastri ai lui Ovidiu, lista comite o mare nedreptate istorica omitind s-o includa pe Grace Hopper, un fel de Amelia Earhart a programarii. Chestia asta zdruncina tot fundamentul moral pe care este cladit demersul tutorialistic, deci ar fi bine sa nu-i dati crezare si sa folositi in schimb Lista lui Ovidiu cind simtiti nevoia sa va inchinati si nu stiti cui.

 

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

Amintiri din copilarie

Posted in Regula 0 on March 20th, 2012 by Mihnea

De cind minerul Silviu Ardelean a cazut din gratiile multinationalei emblematice si s-a vazut obligat sa-si ia tirnacop cu garbage collection, a lasat-o mai usor si cu “acting into a C++ Romanian programming community called CODEXPERT”. Desi ograda n-a dus lipsa de rataciti a caror retardare ar fi putut rezona cu prostia lui pentru a da nastere unei explozii de bucurie in sufletele cautatorilor de amuzament facil (de exemplu ala suparat pe assert), oportunitatile au venit si au trecut fara ca minerul sa faca vreo propunere. Totusi, nu e totul pierdut: ortacul are si twitter, unde mai scapa din cind in cind cite un link la chestii care-l umplu de mirare (pentru ca nu le intelege) sau un citat care l-a impresionat.

Ciripeala de azi continua o tema inceputa cu mult timp in urma prin celebrul “psychologists say“; o sa vi-l arat imediat si probabil il veti recunoaste, pentru ca este folosit de multi prosti pentru a-si justifica prostia. Ne putem doar inchipui extazul care l-a cuprins pe miner cind a vazut ca insusi marele Albert Einstein i-a lasat peste veacuri un mesaj de imbarbatare care confirma faptul ca nu-i nimic in neregula cu el si ca haterii n-au dreptate:

A person who never made a mistake never tried anything new.

Sigur, ne-am putea lega de faptul ca de la “a mistake” pina la colectia de imbecilitati consemnate de letopisetul nostru este o distanta pe care s-ar putea ca Al sa nu vrea s-o acopere cu remarca lui, sau ca nu poti pretinde ca programarea e “something new” si in acelasi timp sa scrii pe linkedin ca ai 10 ani de experienta. Nu are rost insa sa zabovim mult pe astfel de argumente, pentru ca voi le stiti deja, iar el nu le intelege (mai ales ca acum il are si pe Einstein de partea lui). In schimb, o sa fac ca-n Greuceanu, propunind sa ne duelam in citate. In coltul meu va sta John Holt cu o poveste din copilaria lui Silviu:

One day, in room period, I asked the children to write on paper certain words that I had showed them, and then write what these would look like if seen in a mirror. First I wrote CAT. Silviu wrote CAt. It didn’t trouble him that two letters were capitals and one lowercase – if he noticed it at all. He assumed that seen in a mirror the order of letters would be reversed, so he wrote TaC. The lowercase t became capital; the A became lower case. The next word was BIRD. He completely forgot what he had just done – about reversing the order of the letters. This time he assumed that the trick was to write each letter backwards, while keeping them in the original order. On his paper he had written BIrD. He reversed the B correctly, wrote the I, then looked at the lowercase r, which must have looked to him like an upside down L, decided, “I must turn this right side up,” and wrote L. Then he decided that the letters B and D should not be reversed, so his final answer was BILD.

Sper ca acum intelegeti cum ii vin ideile alea cu inlocuit enum-urile cu vectori. Mai departe ni se explica de ce reactioneaza cum reactioneaza cind ii spui ca a gresit:

This child must be right. He cannot bear to be wrong, or even to imagine that he might be wrong. When he is wrong, as he often is, the only thing to do is to forget it as quickly as possible. Naturally he will not tell himself that he is wrong, it is bad enough when others tell him. When he is told to do something, he does it quickly and fearfully, hands it to some higher authority, and awaits the magic word right or wrong. If the word is right, he does not have to think about that problem anymore; if the word is wrong, he does not want to, cannot bring himself to think about it.

Si acum despre raspunsurile aprobatoare si propunerile suplimentare din thread-urile in care s-a dat deja raspunsul corect:

This fear leads him to other strategies. He knows that in a recitation period the teacher’s attention is divided among twenty students. He also knows the teacher’s strategy of asking questions of students who seem confused, or not paying attention. He therefore feels safe waving his hand in the air, as if he were bursting to tell the answer, whether he really knows it or not. This is his safe way of telling me that he, at least, knows all about whatever is going on in class. When someone else answers correctly, he nods his head in emphatic agreement. Sometimes he even adds a comment, though his expression and tone of voice show that he feels this is risky. It is also interesting to note that he does not raise his hand unless there are at least half a dozen other hands up.

Atit.

 

 

Tags: , , , , , , ,

Vorbitor in numele prostilor

Posted in Slagare internationale, Stand-up philosophy on March 9th, 2012 by Mihnea

Microsoft organizeaza anual cu 47% mai multe chiolhanuri decit un primar pesedist in campanie, dar in afara de serbarea emvepeilor (care tocmai s-a terminat, apropo), aceste evenimente nu ofera prea multe motive de amuzament sau oripilare. In 2012 insa, deschizatorii de drumuri din Redmond s-au gindit sa rectifice situatia, oferindu-ne un generos subiect de bancuri si in acelasi timp confirmind raspicat faptul ca-s decisi sa se duca pulii, ca firma, cu totul.

Majoritatea reuniunilor au teme tehnice, fiind deci populate de dorci imbracati in tricouri cu zicatori despre C# sau convertit cafea in cod. Neamuzament total. Exista insa citeva care au ca subiect group hugging-ul, iar cea aleasa de Microsoft pentru declaratia de anul asta este printre ele: Worldwide Partner Conference. Aici nu se poarta tricouri, ci costume, iar participantii au siluete si postúri de fosti directori de CAP (si chiar experienta practica in aceasta ramura de activitate, in cazul celor care provin din popoare ce s-au bucurat de binecuvintarile colectivizarii si economiei centralizate).

O adunatura de umflati si decrepiti care fac “networking” nu este o priveliste amuzanta in sine, nici macar cind networking-ul continua in baruri de striptease dupa incheierea programului impus. Totusi, Microsoft au reusit sa dea o noua dimensiune evenimentului de anul acesta printr-o singura atingere de geniu. Mail-ul prin care se anunta WPC 2012 poarta urmatorul subiect:

Inspiring. Influential. Iconic. Hear him speak at WPC 2012!

Sper ca daca nu v-as fi zis ca-i vorba de Microsoft, ati fi presupus ca WPC asta e ceva circ cu agili si ca “him” e vreun Bruce Lee care vine sa le spuna cum sa fie fluizi ca apa. Eu unul asa am crezut si am dat click sa citesc, pregatindu-ma sa rid. In schimb, m-am umplut de oroare, caci iata ce scria mai departe:

COME HEAR INTERNATIONALLY ACCLAIMED DEEPAK CHOPRA SPEAK AT WPC!
Don’t miss this inspirational opportunity to hear one of the foremost leaders in the field of mind-body medicine.

Deepak Chopra

In caz ca nu sinteti la curent cu arborele genealogic al Mamei Omida si n-ati auzit de domnul Chopra, va pot spune ca “mind-body medicine” este exact ceea ce pare: un gunoi new age despre vindecare prin ginduri pozitive din aceeasi categorie cu reiki si medicina germanica. Sa fii “foremost leader” in asa ceva e ca si cum ai fi foremost leader in crestinism, barbut sau stat pe scaun. Cel mai bun mod de a deveni foremost leader intr-un domeniu de genul asta este sa inventezi respectivul domeniu si sa te proclami foremost leader, dupa cum a procedat subiectul nostru de azi. Deepak a invatat despre fizica cuantica de pe Discovery si prompt a inventat medicina cuantica si nutritia cuantica. In timpul liber sustine Intelligent Design cu argumente stiintifice preluate de la Muzeul Creationismului. El isi are locul asigurat in constelatia marilor filosofi si profeti ai timpurilor moderne, alaturi de Ryke Hamer, Rael, Osho, David Icke si, sa nu-i uitam pe-ai nostri, Lorin Fortuna si Bivo.

WPC 2012

Si ma rog, chiar daca ar exista vreo diferenta intre invataturile domnului guru si descintecele Clarvazatoarei Vanessa din Chitila, tot trebuie sa ne intrebam de ce vine el sa vorbeasca la o conferinta de IT. Sa fi acceptat oare Microsoft ca toata industria de software e de cacat, si sa incerce sa-si invete partenerii ca singurul mod de a face bani e sa gasesti niste prosti si sa le vinzi vrajeala?

Teoria mea este ca Aurelian a facut pasul cel mare peste ocean si acum e responsabil cu evenimentele micromoi. Astept cu infrigurare filmarea de pe un balcon din Toronto care sa-mi confirme suspiciunea. Sper ca la WPC 2013 va fi invitat ex-Dr. Hamer sa continue educatia CAP-istilor in domeniul medicinei moderne explicind cum microbii sint de fapt agentii de vindecare, nu problema, iar medicina “mainstream” este de fapt o conspiratie prin care evreii vor sa dea cancer civilizatiei vestice (in Israel neexistind cancer, evident). Toate aceste noi informatii ii vor ajuta cu siguranta pe directorasi sa-si creasca mai cu spor culturile de soft din ograzile proprii.

Aurelian Popa

C-o fi Aurel de vina sau ca n-o fi, macar ne-am lamurit de ce e VS 11 alb-negru si are viewer de FBX si tool-uri pentru SCRUM: daca aia din conducere o ard in spirala cu personaje ca Deepak, ce pretentii sa ai de la restul angajatilor?

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

Concurs SuperEroul Bitdefender

Posted in 112, Regula 0 on January 20th, 2012 by jos8cal

Se pare ca divortul intentat de Silviu Ardelean celor de la Bitdefender i-a adus intr-un an de zile in pragul disperarii. Dupa 3 ani in care s-a luptat cu regula 0 pentru imaginea Bitdefender pe toate forumurile de programare interne si internationale, Silviu s-a retras subit, lasind in urma sa oameni dezorientati si fara reper moral. Contactat telefonic de redactia noastra, Nechifor Trepetnic, angajat Bitdefender, ne-a relatat cu vocea inecata in lacrimi:

Practic nu mai aveam identitate. Am fost decapitati moral si spiritual. Sincer sa va spun, nici nu stiam incotro sa apucam de suparare, asa ca ne-am intors la credinta celor din care ne tragem, adica la daci, mai exact la capul lor de lup.

Firmilian Aristobul, un apropiat al lui Silviu, a completat:

Trebuia sa anticipam plecarea lui Silviu dintre noi, ca nu de nebun isi inalta putin cite putin monitorul spre cer, in fiecare zi. Dar noi, nevrednici, am continuat sa-i exploatam abilitatile de diplomat.

Dorind sa ia atitudine, multinationala a dat zvon in tara, prin gura celor de la Creative Monkeyz, ca va oferi un Wacom Intuos 4 Medium acelui artist care va fi in stare sa conceapa un trup pe masura capului de lup. Iata ce au de spus cei de la CM despre asta:

tot ce trebuie e sa faceti e sa “produceti” o lucrare grafica originala, in care, SuperEroul Bitdefender, imaginat de voi, sa se prezinte in toata gloria. Trebuie sa fie un erou original – poate fi robot, umanoid, animal, leguma, fruct, strutzocangur, rinocerb, etc. (sidekick pentru Bitalau!?). Puteti folosi orice mijloace doriti – fie grafica digitala via Photoshop, Illustrator, etc. ; fie randari din programe 3D, sau desen traditional (also pictura sau fotografie).

Odata realizata imaginea, trimiteti-o pe adresa de email: concurscm@gmail.com. lucrarile selectate apar in concurs, implicit in galerie.

Pozele selectate vor fi expuse in toate galeriile din Valea Jiului, in limita orelor de program.

Noi uram succes tuturor artistilor cu aplecare spre pix.

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

Nevoia cunoasterii lui Dumnezeu.

Posted in Premiul n00bel, Regula 0 on January 7th, 2012 by jos8cal
Asa ai arata tu daca Silviu ar fi portretist.

Asa ai arata tu daca Silviu ar fi portretist.

Aceasta nevoie o simt de fiecare data cind citesc ceva scris de Silviu Ardelean. Si de fiecare data ma imaginez stind in fata lui Dumnezeu in timp ce ma proroceste, iar cind ar ridice ochii sa ma masoare, i-as fute una in coaie sa-l las lat pe jos. Si imobilizat asa de durere, sa-l intreb cum pula mea a reusit sa faca un specimen cu care nu te poti intelege, care se trighereaza pe cuvinte si nu intelege in pula mea nimic, niciodata. Orice subiect i-ar atinge sfecla, el cotrabaie in beciul mintii sa vada daca are ceva stocat din ce au spus altii despre ce se discuta si incepe sa-ti turuie cu o convingere de mai mai sa-i dai omor. Si tot timpul are un prieten care oricind poate garanta pentru spusele lui. Fie el un Assemblerman ori un Javaman, toti in general sint Dumnezei in ce fac si n-au altceva mai bun de facut decit sa faca propedeutica cu Silviu despre absconsa problema a pasarii optime a unui const char* la o functie.

De multe ori m-am intrebat cu Mihnea, cum e sa stai cu Silviu la o bere. Oare cit ai rezista sa vezi cum te izbesti subiect dupa subiect de un munte de ignoranta si prostie etalate cu o nonsalanta rar intilnita?

Am ajuns intimplator pe pagina de facebook a unui fondator Codexpert si observ ca omul empatiza cu durerea utilizatorilor de Eclipse, de Java, de Android si alte mizerii. Vad si poza botului de Silviu si incep sa citesc ce zice, moment in care am vazut negru (iarasi; pentru a cita oara). Iata cursul argumental al dialogului. Nu conteaza ca textul pe care se discuta era scris de Mihnea, ce conteaza e logica de mineriada:

“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.”

Si trinitatea de cuvinte Java, Eclipse, Compilator, au spawnat ortacul:

Silviu-Marius Ardelean Se vede ca autorul nu a ajuns sa lucreze in Eclipse. Daca o facea, ar fi constatat ca in Eclipse exista un mecanism de autocomplile on the fly.

Aici e momentul in care l-as arunca din cer pe Dumnezeu si l-as trimite sa copilareasca in Hateg, sa intre in mina calare pe un vagonet si sa moara pentru mine, sa reinvie si sa o luam de la capat.

Silviu-Marius Ardelean Un alt lucru inedit ce-l poti face in Eclipse cu Java e sa inserezi cod cand esti atasat la un proces (in anumite limite – cateva linii pe care le lasi inainte goale) si sa reevaluezi in mod debug portiunea de cod recent scrisa fara a fi nevoit sa pui noile binare si sa repornesti proiectul.

Pe linga ca nu este nici o legatura intre textul initial si dejectia Ardeleana, Silviu a reusit sa scrijeleasca pe peretii lui facebook o definitie a lui Edit&Continue, a lui HotSwapping, JRebel sau ce neamuri de nume retardate or mai fi in Java pentru Edit&Continue. Practic un FAQ de talie codexperta. Asadar, parafrazind:

Ce este Edit&Continue?

Silviu-Marius Ardelean: Edit&Continue este un alt lucru inedit, dar limitat, in care daca lasi citeva linii goale inainte sa compilezi, poti insera cod cind esti atasat la proces (deci nu pornesti in debug, ci te atasezi mai tirziu) si poti sa reevaluezi in mod debug portiunea de cod recent scrisa fara a fi nevoit sa pui noile binare si sa repornesti proiectul.

Intrebare pusa de interlocutorul sau: Deci au inventat si Eclipse debug and continue, sa inteleg.

Silviu-Marius Ardelean Ceva de genul dar mai transparent datorita autocompilarii si faptului ca nu era nevoie sa pun ultimele binare pe serverul remote la care eram atasat. Javaman ce mi-a aratat feature-ul era foarte incantat… :)

Il observam pe Javaman cum a pus capat zilelor negre in care zilviu impingea la vagonetul cu binare prin galerii.

Si ca sa fiu in ton cu inceputul de an, declar deschisa petrecerea sfirsitului lumii in 2012: Muie Dumnezeu.

Tags: , , , , , , ,

Invatati, Invatati, Invatati

Posted in Premiul n00bel, Regula 0, Slagare internationale on January 5th, 2012 by Mihnea

Sper ca sinteti abonati la lista de lecturi obligatorii a Partidului Codexpert Roman, unde muezinii Bancila si Cucu sufla zilnic in trompeta uzinei pentru a culturaliza masele de codexperti. Daca nu ati aderat inca, voi incerca sa va conving acum s-o faceti, prezentind citeva din recomandarile publicate de catre Primi Inter Pares.

In primul rind, ne este dat un link catre un articol in care Raymond Chen povesteste despre un asa-zis “for-if anti-pattern”. Imi pot inchipui cum formatorii de opinie din Codexpertia au schitat un zimbet condescendent dar incredul citind despre tendintele unora de a lua la rind elementele din directoare sau hash map-uri in cautarea unei valori. Cu certitudine nici cel mai prost aspirant nu ar scrie asemenea cod, nu? NU?

Ma rog, in asteptarea momentului in care Silviu va face apel la Regula 0 si Cucu il va bana pe Raymond Chen de pe codexpert, sa ne indreptam atentia spre o noua propunere din categoria Radio Erevan: [WinAPI] Cum aflu frecventa procesorului? Dupa cum ne-a obisnuit, sectoristul iscoditor nu se multumeste sa-si raspunda la intrebari cu un simplu “nu stiu”, ci insista sa ne demonstreze prin cod ca habar n-are. Prima metoda expusa de dinsul, in legatura cu care avea nedumeriri si acum 9 ani, nu reuseste sa ne dea valoarea exacta, dar se apropie. A doua metoda are avantajul de a fi mai “simpla”, dar din pacate are si un dezavantaj: returneaza tot timpul 0. Unii cititori vor spune ca decit gresit, mai bine deloc, insa altii vor sustine ca dimpotriva, mai bine ceva decit nimic. Gardianul Ovidiu lasa aceasta decizie de ordin filosofic la alegerea ta.

Si cum fara norme de buna purtare n-am putea face nimic pe lumea asta, ultimul imbold muncitoresc ne trimite la un articol in care Danny Kalev ne spune cum putem determina cu usurinta daca stim sa programam. Pe Danny l-am cunoscut intr-un episod anterior, in care ne arata ca nu stie ce face header-ul iosfwd, desi in CV se jura ca a fost baiat de comitet C++. De data asta el isi ia si mai in serios rolul de chibit, spunindu-ne ca n-ai voie sa faci clase cu mai mult de 8 metode publice, dind si exemplul std::string, care in opinia sa este de mare cacat si ar fi trebuit spart in mai multe clase care sa deriveze unele din altele. De asemenea, n-ai voie sa folosesti propriile containere in loc de std::map sau std::vector, deoarece Danny a citit pe Internet ca ce ni-i dat in STL este thread-safe si imbatabil ca performanta. Sigur, nu conteaza ca nu le poti folosi in interfata unui LIB/DLL/SO, ca majoritatea fac o alocare per element si se tiriie ingrozitor din cauza asta, ca poate ai nevoie sa fie lock-free, sau alte astfel de lucruri care ii preocupa doar pe inferiorii care scriu cod. In capul lui Danny conteaza ca au rvalue references, pentru a se comporta optim intr-o serie de cazuri in care oricum n-ar fi trebuit sa ajungi. Danny n-are timp sa scrie cod, e prea ocupat sa scrie pilde. A da, si n-aveti voie cu pointeri; daca ar fi dupa Danny, s-ar scoate de tot pointerii din limbaj si s-ar inlocui cu tipuri clasice, de exemplu vectori sau structuri.

 

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

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: , , , , , , , , , , , , , , , , , ,