Deja vu

Posted in Codare cu premeditare, Premiul n00bel with tags , , , , , , on January 28, 2011 by Mihnea

Vazindu-se din nou trasi in poze pe site-ul nostru, expertii au dat fuga la butonul de edit si au incercat sa-si corecteze “micile scapari“. Din fericire insa, doar Marius a reusit. Repetind performanta din saga dimensiunii fisierelor, Silviu ne prezinta varianta imbunatatita a tehnologiei indexarii array-urilor:

const int rows = 10, cols = 12;
unsigned char* bmp1 = new unsigned char[cols * rows];

for(int j=0;j<cols;j++)
  for(int i=0;i<rows;i++)
      bmp1[i*rows + j] = i+j;  

delete [] bmp1;
bmp1 = NULL;

Nu, Silviu-Marius. Nici asa nu e bine. Apreciem faptul ca ai inversat for-urile intre ele, ca sa nu para ca ai copiat de la Marius, dar tot n-ai reusit sa iei un numar dintr-un array. Hai sa vedem daca poti sa-ti depasesti recordul anterior de 4 corecturi.

Oricum, in urma acestui esec plenar, in comunitatea expertilor au inceput sa se puna intrebari. Vazind faptul ca personaje ca viorel2005 si mesajflaviu ii tot pun in dificultate cu probleme de clasa a 5-a, unii experti au inceput sa se intrebe daca nu cumva respectivii sintem noi. Mai tineti minte cind expertii erau convinsi ca jos8cal si cu mine sintem aceeasi persoana? In curind vor ajunge sa se banuiasca si intre ei.

Edit: 1 minut. Atit i-a trebuit minerului pentru a-si curata trecutul. La 1 minut dupa ce am postat “corectura”, si-a sters de tot codul. Urmele prostiei sale se pastreaza doar in reply-ul lui viorel2005 de pe pagina urmatoare, care a inglobat aberatia minerului in aberatia proprie, dar din pacate cind a dat el quote era varianta cu “coloum”, nu asta extinsa. Nu-i nimic Silviu, noi stim, si tu stii ca noi stim, la fel cum stii ca poza din articolul asta e o reprezentare destul de fidela a modului in care-ti petreci 3 sferturi din zi.

Ani de liceu

Posted in Premiul n00bel, Stand-up philosophy with tags , , , , , , , on January 27, 2011 by jos8cal

In orice clasa exista cite un elev care invata si restul care copiaza de la dinsul. Stupoarea maxima apare cind dupa corectare primesc toti nota 2, deoarece cel de la care s-a copiat a prins o zi proasta si a raspuns pe linga. Caz concret pe bancile scolii ardenele:

Marius Bancila despre accesarea unui array 2D:

unsigned char* bmp1;
bmp1=new unsigned char[rows * cols];
for(int i=0;i<rows;i++)
   for(int j=0;j<cols;j++)
      bmp1[i * rows + cols] = i+j;

Silviu Ardelean confirmindu-si clasa de copiac notoriu:

Viorel, urmeza sfatul lui Marius de-a folosi array-ul uni-dimensional pentru stocarea imaginii. Cu astfel de buffere se lucreaza in procesarea de imagini.

Anyway… renunta la abordarea cu array-ul 2D si rezolva-ti problema cu un banal array 1D via bmp1[i*row + coloum] = i+j;

Stati jos, 2.

Aventuri 2D in Valea Jiului

Posted in 112, Premiul n00bel with tags , , , , , , , , , , on January 27, 2011 by Mihnea

Dupa cum ne-a obisnuit deja, minerul nu se lasa cu una, cu doua cind spune o timpenie. El continua sa loveasca problema iar si iar, pina aceasta recunoaste ca a ascuns droguri, armament, munitie si masini de scris automate la peneteu, caci cu totii stim ca perseverenta e mama mineritului. Dupa ce i-a explicat lui viorel2005 cum sa reduca numarul de apeluri catre o functie facind parametrii sai variabile globale, a atacat chestiunea de fond, si anume o tehnologie pe care el a descoperit-o cu multi ani in urma: cum sa tii o matrice 2D intr-un array 1D. Daca va amintiti, aceasta problema a mai framintat ograda expertilor, deci clar e o chestie importanta, care ar merita FAQ-ul sau. Oricum, Silviu explica cu cuvintele lui tehnologia in cauza:

Edit: imi cer scuze, din greseala scrisesem corect “column” in subtitrari.

Cum sa nu trimiti un parametru catre o functie

Posted in 112, Premiul n00bel with tags , , , , , , , , on January 26, 2011 by Mihnea

Intrebat cum se poate trimite un array 2D unei functii care vrea un array 1D, Silviu Ardelean propune urmatoarea solutie:

Viorel, daca tot vrei sa folosesti bmp1, de ce nu-l folosesti ca membru al unei clase sau membru global (daca nu lucrezi OOP)? Atunci in functia ta de afisare il apelezi direct fara a-l mai pasa la functie.

Inflexible special tool that could fail.

Posted in Codare cu premeditare, Premiul n00bel, Stand-up philosophy with tags , , , , , , , , , , , , , , , , on January 16, 2011 by jos8cal

Nu cred ca-l cunoasteti pe mesajflaviu. El este un impatimit al jocului “La Perete, La perete, Stop!”. Jocul asta este pentru el ce a fost birna pentru Nadia Comaneci, adica o rampa de lansare. Antrenamentele si meciurile oficiale se desfasoara pe codexpert.ro.

Regula jocului este simpla: mesajflaviu sta cu spatele la Programare si se uita printr-o gaura aflata in peretele cu care pare ca se stie intim. Lumea din gaura este o lume fascinanta pe care mesajflaviu o urmareste hipnotizat, dar ca orice lume fascinanta, pare o utopie.

In spatele sau, la o distanta considerabila, stau in ordinea stelelor si diplomelor, Raspundacii. Aliniati precum negustorii de la sosea care vind ceapa sau echipament rustic pentru imobile, ei ofera Raspunsuri.

Mesajflaviu se intoarce confuz din cind in cind si intreaba multimea de experti despre semnificatia a ceea ce vede prin gaura. Rolul si misiunea raspundacilor este de a inlatura ceata din ochii lui si de a-i conferi o siguranta in privire si in ziua de miine. Cind unuia dintre raspundaci i se pare ca a atins un moment cairotic, creierul da startul unei stari de bine, stare care nu poate duce decit la lucruri marete. FAQ-ul este produsul acestei stari cairotice. Odata conceput, el este aplicat pe gaura cu menirea clara de a corecta vederea celui ce priveste prin ea.

Tematica intrebarilor este Programarea in general si viata de programator in particular. Intrebari precum “Pot trimite un string prin WM_CHAR“, “Cum pot trimite un CString prin PostMessage” sau “Cum se stocheaza o variabila membru tip custom?“, au tinut cu sufletul la gura firme si birouri intregi de programatori, toti in asteptarea raspunsurilor. S-au facut pariuri si s-a dat in bobi. Cum lesne se poate intui, marele pariu era pentru momentul aparitiei starii cairotice la vreun raspundac, adica momentul unui FAQ.

Si iata ca momentul cairotic l-a lovit pe Silviu Ardelean. Again.

Se poate schimba numarul versiunii de program automat, pentru cazul cand programul isi face update?” zice mesajflaviu fara sa-si dezlipeasca ochiul de la gaura. Neintelegind intrebarea, dar totusi in posesia unui raspuns care contine cuvintele “versionare” si “program“, Silviu pune tirnacopul jos si ia atitudine PROPUNIND de la sine citire o solutie la intrebarea pusa in joc. Vazind ca MVP Ovidiu Cucu n-a inteles nimic, dar totusi a ramas profund fascinat de raspuns, Silviului i se aprinde lampasul. Pune mina pe tirnacop si il arunca in departare. Unde-si va gasi tirnacopul hodina, acolo va pune Silviu de un FAQ. Sau cu cuvintele sale:

“Subiectul cred ca se preteaza unui FAQ si cu permisunea d-voastra il voi supune curand spre aprobare.”

Din pacate si Microsoft si-a aruncat tirnacopul acum 6 ani in aceeasi directie si au pus-o si ei de acelasi FAQ. Bineinteles ca asta nu este un motiv sa nu faca si Silviu unul in care sa nu mentioneze sursa si sa PROPUNA dinsul un workaround la o problema de mult apusa:

“Manually editing of binary files version in the resource editor of Visual Studio IDE is not a viable solution.”

“We can use a special tool that does this thing for us. ”

“Unfortunately this approach is not the most flexible and could fail.”

“In order to avoid this issue and edit the version only in a single place I propose the following workaround:”

Deci sa nu folositi NICIODATA un “special tool” pentru ca nu e flexibil si oricum nu o sa mearga. S-a auzit acolo in spate, da? Am sters si eu rusinea mea de tool scris in python care face asta in 8 linii de cod. Sa-mi fie rusine pentru inflexibilitate tool-ului si pentru abordarea sortita esecului.

Bine, daca este sa fim corecti, noi stim ca Silviu se mai inspira de pe net pentru a-si gasi cuvintele, dar niciodata nu ofera sursa. Acum ceva timp s-a inspirat cu copy/paste pentru a gasi rima cuvenita intr-o oda adresata XML-ului.

Interviu cu un MVP

Posted in Premiul n00bel, Regula 0 with tags , , , , , , , , , , on January 10, 2011 by Mihnea

Cindva pe la jumatatea lui 2010, un rus a insinuat pe blogul propriu ca daca nu stii sa inversezi o lista simplu inlantuita, nu esti “programator adevarat”. Blasfemia a ajuns pina la urechile lui Andrei Ignat, care a propus dezbateri pe aceasta tema in citeva forumuri autohtone de programare. Indignarea s-a raspindit ca focul printre uscaturile acestor forumuri si au urmat discutii interminabile intre tabara celor care sustineau ca sint totusi programatori, desi nu-s in stare sa rezolve aceasta problema de clasa a 5-a, si tabara celor care intrebau “cum pula mea ba?”. Mai curios e ca pina si pe forumurile fara legatura directa cu programarea s-a discutat erezia lui Vyacheslav, de exemplu aici.

Pe masura ce mintile lor greu incercate supurau cu nesimtire crescinda justificari penibile, autointitulatii “programatori practici” au pus-o de o miscare de solidaritate si in curind s-a nascut si un gest simbolic prin care simpatizantii cauzei isi proclamau apartenenta. Ca intr-un film american cu oameni ordinari care fac lucruri extraordinare, unii stilpi ai comunitatilor au facut un pas in fata si au declarat raspicat: NICI EU NU SUNT PROGRAMATOR (I broke the dam!). Din pacate, stilpilor nu le-a zis nimeni ca gesturile astea merg atunci cind declaratia e falsa, ca in cazul alora care si-au pus ecusoane cu “tiganca imputita”, sau al vacilor cu bloguri care s-au ras in cap ca sa vindece cancerul la par; in cazul de fata, declaratia nu se cheama luare de pozitie, se cheama truism.

Lunile au trecut si revolta s-a stins, dar un om a ramas marcat de evenimentele din Iunie-Iulie: Ovidiu “MVP” Cucu. La inceputul ostilitatilor, el se intreba (intr-o engleza demna de protejatul sau) la ce ar putea folosi inversarea unei liste:

Clar, baietii nu au nevoie de “kernel developers”, de “compiler designers” sau de “Ph.D. candidate” ci de inversatori de liste simple inlantuite,.Normal, ar fi destul de periculos sa angajeze unul din categoriile de mai sus pentru ca la un momentdat ar putea intreba “What the heck reversing a singly-linked list is good for?”.

Gardianul Ovidiu traieste in concret, unde lucrurile au scopuri evidente: cosorul lui Moceanu este pentru impletit cosuri, sedintele comisiei politice sint pentru critica si autocritica, iar bombeurile sint pentru pupat. O intrebare care testeaza daca subiectul e in stare sa descompuna o problema banala in pasi logici, adica daca gindeste ca un programator, nu e o chestie practica, relevanta intr-o meserie din care cineva ar putea sa se hraneasca pe sine. Codexpertul fondator nu e in stare sa scrie un while cu 4 linii in el care sa umble printr-o lista, deci intrebarea lui Vyacheslav e o deviere de la doctrina politica si o incalcare a Regulii 0, ce i s-ar fi trecut in dosar daca ar fi lucrat in uzina lui Ovidiu.

O parte insemnata din discutiile codexpertilor ajung intr-un fel sau altul la subiectul interviului de angajare, despre care atit Ovidiu, cit si ortacul pe care-l creste au opinii puternice. Mai deunazi, intr-o polemica despre ordinea invatarii limbajelor (amuzanta in sine, de altfel), Courage a venit sa-si descrie viziunea sa asupra insemnatatii C-ului, dar si esecurile personale in lumea interviurilor si gramaticii:

Pentru mine a stii C inseamna sa stii pointeri si cum sta treaba cu memoria.Si pentru asa ceva trebuie anumite carti mai speciale care studiaza in detaliu asa ceva.Zic asta pt ca unu din interviuri l-am picat ca nu am stiut anumite “smecherii” cu pointeri si unu din ele,l-am picat ca nu am stiut cum sunt asezati in memorie si cum pointeaza,era mai complicat exemplu.

Vazind aceasta, Ovidiu a simtit cum ii revine in gura gustul amar de acum 6 luni si a purces la a deplinge abuzurile savirsite in interviuri:

Din pacate in ceea ce priveste testele/interviurile, Courage are dreptate. Poti de exemplu sa dai un test pentru “experienced C++ programmer” si sa trebuiasca sa rezolvi probemutze de C-chior cu pointeri de diverse tipuri fatzaiti prin tot felul de structuri ciudate, hacker style. […] In incheiere, o inversare de lista simplu (/dublu/triplu :) ) inlantuita si alte probeme scoase de prefesori fara simt practic (ca sa pice studentii netocilari la licenta), pune cireasa pe tort. ;)

Nu conteaza ca Courage e un incepator care cu putin timp in urma intreba cum se implementeaza c_str() (si primea un raspuns magistral de la ortacul specialist in C++ si STL). Nu conteaza ca problema din interviul sau e descrisa foarte vag, dar intr-un mod care ne asigura ca dinsul nu este tocmai stapin pe subiectul foarte complicat al pointerilor. Courage n-a picat la interviu pentru ca habar n-are chestii de baza, ci pentru ca i s-au dat probleme pentru tocilari. Ca si alt dobitoc care-si dadea cu parerea pe programare.org, Gardianul Ovidiu crede ca cacatul asta trivial cu inversarea listelor e ceva ce trebuie invatat pe de rost. Fiind un imbecil sinistru, el nu vrea sa accepte ca motivul pentru care nu poate rezolva problema e incompetenta, ci incearca sa ne explice ca problema e proasta.

Ovidiu Cucu este MVP pe Visual C++.

EXTRONUA. Origins.

Posted in Codare cu premeditare, Slagare internationale, Stand-up philosophy with tags , , , , , , , , , , , on December 21, 2010 by jos8cal

Cartea de care va spuneam in postul trecut este pe punctul de a avea un coautor la categoria ASP.NET. Spionii nostri la fata locului au imortalizat momentul: