Feedback loop

Posted in Regula 0 on December 7th, 2015 by Mihnea

O sa rup un pic tacerea aici ca sa va infrumusetez acest inceput de saptamina cu o noua isprava a tovarasului Ovidiu Cucu. In ultimul timp, vajnicul militian duce o lupta acerba cu botii de spam care au luat cu asalt ograda expertilor. Din pacate insa, cind iti petreci tineretea in comitetul disciplinar al unei uzine comuniste redactind autodenunturi, autocritici si compendii de reguli, iti distrugi iremediabil partea din centrul limbajului care ii ajuta pe oameni sa faca diferenta dintre un postac onest si unul cu intentii capitalist-antisociale.

In fapt: utilizatorul haleema, originar pare-se din Bistrita-Nasaud, cu fix un post la activ, lanseaza o intrebare: “Cum fac o aplicatie similara cu File Explorer-ul din Windows, care eventual sa aiba caracteristici noi ca de exemplu view-uri multiple, taburi, paneluri docabile etc.” Intrebarea zace fara raspuns vreme de 9 luni, pina o vede Ovidiu si o ia personal: Windows, multi-view, docking, MFC, FAQ! Daca nu el, atunci cine? Si unde mai pui ca are si raspunsul potrivit, caci intimplator a scris un articol pe blog despre asta, acum mai bine de un an?

haleema intreaba

 

Din pacate insa, imboldul raspundac pe care l-a simtit Ovidiu nu era izvorit doar din pasiunea pentru MFC. Familiaritatea cu subiectul merge mai adinc, deoarece cu vreo 4 luni inainte, Ovidiu insusi se intrebase pe sine, in aceeasi sectiune a site-ului: “Cum fac o aplicatie similara cu File Explorer-ul din Windows, care eventual sa aiba caracteristici noi ca de exemplu view-uri multiple, taburi, paneluri docabile etc.

cucu raspunde

Observati vreo similitudine? Sa fie haleema un bot care reproduce alte postari de pe forum, ca sa para ca spune ceva coerent, ca sa poata apoi sa bage un link la Viagra in semnatura, sau la homepage? Greu de spus. Nu e ca si cum ar mai exista exemple pe forum. Si in fond, Ovidiu are chiar un protejat care raspunde la intrebari pe care nu le intelege copiind chestii gasite pe internet, si despre el stim ca nu e un bot, nu?

Nea’ Ovidiu, daca auzi un tiuit puternic in urechi de citeva zile, nu-l baga in seama pe doctorul care-ti spune ca e tinitus. Se cheama feedback si e ca atunci cind pui un microfon linga boxa la care e conectat, doar ca la matale s-a inchis circuitul prin intermediul forumului.

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

Sa ma fut in politete

Posted in Regula 0 on September 18th, 2013 by Mihnea

retard-baby2Cum pula mea s-a ajuns sa fie mai important sa fii politicos decit sa stii despre ce vorbesti?

Este o chestie pe care o tot vad pe forumuri, liste de discutii etc. Sa-i spunem sindromul Marius Bancila. Vine un prost – sa-i spunem Silviu Ardelean – si emite o timpenie. Ii arati ca-i prost si-l rogi sa nu mai posteze imbecilitati. Apare un moderator – sa-i spunem tot Marius Bancila, ca sa rimeze cu sindromul – si te avertizeaza sa nu-i mai spui lui Silviu Ardelean sa-si tina gura, ca nu-i frumos. CUM SLOBOZ BA? In loc sa-i spuna Silviului ca e inacceptabil sa vorbesti timpenii (sau sa-l baneze direct), Mariusul e preocupat de mentinerea atmosferei de voie buna si cooperare tovaraseasca. Ca si retardatii e oameni, si are si ei inteligenta lor emotionala, nu?

Da, stiu. Daca iti antagonizezi interlocutorul, comunicarea se duce pulii, asa ca daca vrei sa fii constructiv trebuie s-o iei cu frumosul. Problema cu aceasta regula de cacat este ca presupune existenta unui interlocutor. Eu nu vorbeam de cazurile in care cineva greseste pur si simplu si il corectezi, ci de situatiile in care e implicat un Silviu, unde e evident de la inceput ca n-ai cu cine sa discuti. Presupusul interlocutor e atit de prost incit nu numai ca nu poate, dar nici nu vrea sa inteleaga argumentele pe care le aduci. In mod normal, Mariusul ar trebui sa-i stearga aberatiile. Daca n-o face, ceilalti participanti la discutie au obligatia morala de a face misto de retardat, pentru a se asigura ca viitorii cititori ai thread-ului nu sint indusi in eroare. Eu asa vad lucrurile.

Dar sa lasam numele generice si sa trecem la un exemplu practic. Un domn de la Valve a propus ca VC++ sa dea warning-uri cind dai parametri aiurea la functii care accepta format string-uri, asa cum fac deja diverse alte compilatoare. VC++ da si el warning-uri d-astea, dar doar cind ii dai cu /analyze, ceea ce dureaza inacceptabil de mult IRL. Validarea asta nu e costisitoare (dupa cum ne dicteaza atit bunul simt, cit si faptul ca nu incetineste semnificativ compilarea acolo unde e implementata deja), deci ar putea fi mutata din analizorul static in compilator.

In acest moment se amesteca in discutie Silviul de serviciu, cu numele de scena UnitUniverse, care nu vrea ca compilatorul sa faca “special process” pentru printf, care e o functie ordinara. Fiind foarte prost, el este de parere ca problema reala sta in faptul ca printf foloseste “extractie binara” si “masti binare” pentru a extrage parametrii, deci compilatorul n-are ce face. Ca si Silviul real, este preocupat de noile cuceriri ale tehnicii in materie de generat code bloat si incetinit compilatorul, asa ca face si el o Propunere: sa inlocuim printf cu template-uri variadice (sigur, nu inainte de a inlocui enumurile cu vectori).

Imboldit iar de spiritul civic, am considerat ca-i datoria mea sa-i spun boului ca nu e vorba de printf, ci de un mecanism pentru marcat format string-urile ca sa le poata verifica compilatorul. Care mecanism exista deja in VC++ sub forma macro-ului _Printf_format_string_. Ce a inteles retardatul (care stapineste limba lui Shakespeares la fel de bine ca omologul sau din Valea Jiului):

Yes, providen switchers to enable the detecting is an considerable idea. But, as i written previously, the printf extracting tail arguments with binary cutters, I’m doubt if they could implement such kind of checking mechanism.

I-au zis doi oameni ca e facut. I-am zis si cum e facut si i-am dat si link la cum fac alte compilatoare. De aici, el a concluzionat ca nu se poate face din cauza “taietoarelor binare”. In pula mea.

I-am raspuns ca nu stiu ce-s alea binary cutters si ca-s convins ca nici el nu stie, dar ca indiferent de ce crede el, mecanismul exista deja si trebuie doar mutat din analizor in compilator. De asemenea i-am recomandat sa nu-si mai dea cu parerea in probleme pe care nu le stapineste. Nu i-am zis sa nu-si mai dea IN PULA MEA cu parerea. I-am zis fara mui si puli. Rezultatul a fost ca s-a autosesizat Mariusul local si mi-a sters comentariul.

Lasind la o parte faptul ca-i urez cancer militianului care a facut asta, doresc sa insist un pic asupra unui model de comportament (ca nu pot sa-i spun gindire) ce este des intilnit printre Silvii. Cum ajunge imbecilul sa deduca cu mintea lui ca nu se poate face, dupa ce i-am aratat cum e facut, si i-am dat si link-uri?

Raspunsul e simplu si nesurprinzator: prostia. Silviul porneste cu o Opinie. Desi undeva adinc in fiinta lui licare ideea ca de fapt nu prea stie despre ce e vorba, odata ce-si formeaza si exprima Opinia, vocea interioara este sugrumata si Silviul se lanseaza cu toata forta intru sustinerea Opiniei. Nu conteaza daca ii dai argumente, link-uri sau bucati de cod pe care le-ar putea baga intr-un compilator ca sa verifice ca-i prost. Cind parcurge raspunsul tau, Silviul sare pur si simplu peste partile pe care nu le intelege. Nu le vede. Este un mecanism de aparare: faptul ca nu intelege ceva ar insemna ca e prost. El nu vrea sa fie prost, asa ca lucrurile pe care nu le pricepe trebuie sa fie irelevante. De la irelevant la inexistent este un pas foarte mic, pe care intelectul sau de batracian cu trisomie il face fara ezitare.

Pentru a vedea cum percepe un Silviu o discutie, iti poti sterge toate argumentele. Textul ramas pare o simpla Opinie. Aha! Silviul are si el o Opinie. De ce ar fi Opinia ta mai buna decit Opinia lui?

Revenind: e OK ca intr-o discutie despre compilatoare pe MSDN sa spui ca printf foloseste taietoare binare pentru extras argumente, dar nu e OK sa ii recomanzi unui bou sa nu vorbeasca despre lucruri pe care nu le intelege. Idiocracy.

PS: tag-urile pentru acest post s-au scris practic singure. Le-am luat direct de la ultimul post de pe blogul de atitudine al minerului.

PPS (adica post-post-scriptum, Ovidiu): in curind e ziua de nastere a minerului si i-am pregatit o surpriza.

EDIT: multumim Pintea:

yPuhX91

Tags: , , , , , , , , ,

Problemele infrastructurii locale

Posted in Regula 0 on July 19th, 2013 by Mihnea

Desi tot auzim ca romanii sint fruntasi la internet, publicatia noastra a raportat in trecut ca exista zone din unele orase mari ale tarii unde aprovizionarea cu internet se face greu sau chiar deloc. Un exemplu este strada Venus din Timisoara, mai ales la numarul 33. Aceste lacune ale infrastructurii cauzeaza grave probleme in activitatea agentilor economici, impiedicindu-i sa foloseasca motoare de cautare consacrate in procedura de validare a aptitudinilor candidatilor din cadrul procesului de recrutare, ceea ce in cazuri extreme poate duce chiar la angajarea lui Silviu Ardelean.

Cu toate astea, lucrurile se regleaza uneori de la sine, dupa cum ne invata celebrul mistic si autor de citate pentru Facebook Paolo Coelho. Ne face o deosebita placere sa va informam (cu o oarecare intirziere, ce-i drept) ca S.C. Firma Unde HR-ul Nu Are Acces La Google S.R.L. s-a prins in sfirsit ca Silviu nu este asa de avansat pe cum s-ar putea deduce din titlul postului pe care-l ocupa, asa ca minerul nostru preferat trudeste de vreo 3 luni intr-o noua multinationala emblematica: Visma.

Cititorii cu spirit civic se vor grabi sa se intrebe daca pe strada Coriolan Brediceanu, unde muncesc cei aproximativ 128 de programatori de la Visma Timisoara plus Silviu Ardelean, sunt aceleasi probleme de livrare a agentului internetic ca in zona strazii Venus (mai ales ca se intersecteaza cu strada Circumvalatiunii, si clar nu poti avea internet pe o strada care se cheama asa). De data asta insa, angajarea lui Silviu nu s-a produs din vina unor deficiente de infrastructura, ci ca urmare a unei cumetrii. La Visma lucreaza de ceva vreme ingerul pazitor al lui Silviu, Marius Bancila. Ii uram sa culeaga ce-a semanat.

examen_cnh

Bonus story.

 

Tags: , , , , , , , , ,

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

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

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

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

Stop. Hamming time.

Posted in Premiul n00bel on October 20th, 2011 by Mihnea

Mai stiti cind zicea Marius Bancila ca distanta Hamming este cea mai rapida metoda de a calcula distanta Hamming (sau ma rog, “Hammering” cum a botezat-o el initial)? Mai stiti cind ziceam eu ca timpeniile codexpertilor sint contagioase? Ei bine, iar am avut dreptate:

Inainte de asta domnul Richard [Hamming, n.r.] s-a jucat cu numaratul bitilor dintr-un string de bytes si, asa cum s-a mai discutat pe acest forum, a generat cea mai optima metoda in acest sens.

Acum crezul asta dublu-pleonastic este intiparit in mintea lui bu7ch3r, iar el ii va infecta la rindul lui pe altii. Deci copii, aveti grija sa va protejati cind intrati in codexpertia, ca altfel luati chestiuni ce nu trec nici cu Moldamin.

Putin mai devreme am primit de la colegul de redactie acest link in care se povesteste cum au dispersat comunistii o rascoala a minerilor stropindu-i cu cacat. N-ar fi frumos ca intr-o zi cacatul cu care aruncam noi inspre codexpertia sa disperseze minerii de acolo?

PS: bu7ch3r a mai avut citeva interventii ce m-au facut sa suspectez ca este un membru conspirat al Rezistentei angajat intr-o campanie de trollaj extrem de fin. Daca e asa, felicitari tovarase. Daca nu, nu.

Tags: , , , , , , ,