Deja vu

Posted in Codare cu premeditare, Premiul n00bel on January 28th, 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.

Tags: , , , , , ,

A treia corectura

Posted in Regula 0 on November 24th, 2010 by Mihnea

Gata. Third time’s a charm, and “staff”. “unsigned long” s-a facut “long long” in codul minerului. Tineti minte: asta a fost ideea lui de la inceput, doar a zis si-n comentariu (pe care l-a si editat, ca nu i-a placut cum zisese “unsigned”). In nici un caz n-a facut modificarile astea pentru ca i-am aratat noi ca e prost. De fapt, ce modificari? Asa a fost codul de la inceput.

In momentul de fata, sentimentele mele fata de miner sint amestecate. Pe de-o parte, sint surprins si dezamagit ca dupa atitea mui pe care si le-a luat aici, inca mai scrie pe blog-ul ala. Incapatinarea lui este fenomenala, chiar si pentru un cretin ca el care crede ca poseda “inteligenta emotionala”. Ar putea macar sa verifice banalitatile pe care le posteaza, dar cred ca-i atit de incompetent ca nu-si da seama cum.

Pe de alta parte, sint satisfacut. Desi si-a editat toate timpeniile avind grija sa nu lase urme sau atribuind corecturile diversilor “Sorini” pe care i-a gasit prin preajma, el stie cine i-a zis, si eu stiu. Chiar si dupa ce gogoritele vor disparea din cache-ul lui Google, chiar si cind va pretinde pe blog-ul de atitudine ca noi mintim aici, chiar si cind va cenzura asiduu adresa acestui blog din screenshot-urile sale, chiar si dupa ce toata lumea va trece mai departe, noi doi – el si cu mine – vom sti cum a fost de fapt. Haterii au avut dreptate iar el a recunoscut asta fata de el si fata de noi scriind pina la urma codul dupa dictare. Toata “inteligenta emotionala” si pseudopsihologia din lume nu vor putea schimba adevarul asta pe care noi il impartasim, si asta e tot ce conteaza. Cind el va privi in ochii mei si eu voi scuipa intre ai lui, vom sti.

Tags: , , , , , ,

A doua corectura (la sugestia lui Sorin)

Posted in 112, Codare cu premeditare, Premiul n00bel on November 24th, 2010 by Mihnea

Nici n-am dat bine submit la post-ul anterior, ca Silviu a luat iar atitudine. De data asta a pus “unsigned long” in loc de “long”, dar nu pentru ca ar bijbii in jurul solutiei dupa ce citeste aici, ci pentru ca:

According to Sorin’s observation I changed the long type to unsigned long.

Putin mai devreme, inainte de a vedea post-ul meu, Silviu ii raspunsese direct lui Sorin in felul urmator:

Absolutely. Nobody stops you to replace long with long long or unsigned long long.

Absolutely. Nimeni nu te oprea, dar o faceai degeaba, ca folosea _wstat(), care-ti returneaza dimensiunea pe 32 de biti. Dupa aia poti sa inlocuiesti tu ce vrei, ca e prea tirziu. Acum ar merge inlocuit, dar cineva totusi l-a oprit pe miner si nici dupa a doua corectura nu se descurca cu fisiere mai mari de 4 GB. Poate din a treia ii iese?

Probabil tot in urma “observatiei lui Sorin”, minerul a sters #ifdef-ul rusinos si din FAQ-ul la care tocmai dadusem link. Noroc ca o vreme de acum incolo pagina aia va fi in cache la Google cu aberatia originala. Probabil dupa ce va expira cache-ul, Silviu va pretinde ca a fost asa dintotdeauna (observati ca nu scrie “last edited”, deci MVP Ovidiu Cucu sau MVP Marius Bancila i-au dat o mina de ajutor cu editarea). Nu uitati: el isi recunoaste greselile.

PS: totusi, trebuie sa recunosc ca nu m-as fi gindit ca o functie care returneaza dimensiunea unui fisier poate genera atita amuzament. Inca o dovada ca tot ce-ti trebuie pentru ca sa te poti distra e o problema banala si un miner prost.

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

Prima corectura

Posted in 112, Codare cu premeditare, Premiul n00bel on November 24th, 2010 by Mihnea

Dupa cum preziceam in post-ul anterior, Silviu “Virgula” Ardelean si-a modificat pe furis codul la scurt timp dupa ce l-am vorbit de bine pe-aci. Din pacate pentru el, in loc sa-si intrebe prietenii cum se face de fapt (dupa cum i-am sugerat), el a incercat sa ne arate ca poate si singur, ajungind la urmatoarea varianta:

long GetFileSize(const TCHAR *szFilePath)
{
   long nSize = -1;

   struct __stat64 buf;
   nSize  = (_wstat64( szFilePath, &buf ) == 0) ? buf.st_size : -1;
   if (S_ISDIR(buf.st_mode)) nSize = -1;

   return nSize;
}

Problema e ca nici asa nu e bine. Acum foloseste _wstat64() si pe 32 de biti, dar degeaba, ca pune rezultatul intr-un long, unde nu incape. A scapat de macro-ul ala penibil care arata ca dupa 8 ani de Visual Studio nu stie cum sa detecteze platforma, dar functia tot e limitata la 2 GB pe 32 de biti.

In timpul ce s-a scurs de la postarea originala, colegu’ jos8cal mi-a aratat ca de fapt dilema nu-i una noua, asa cum credeam eu. Lampasul lui Silviu a mai poposit si in urma cu un an pe spinoasa problema a dimensiunii fisierelor. Atunci avea inca blog cu ceas si sigla lu’ Steaua pe el, deci a avut nevoie de un alt canal prin care sa-si impartaseasca descoperirea cu restul expertilor in C++. Si cum nu-i loc mai bun pentru discutii intre experti decit insasi Comunitatea Expertilor C++, a pus-o de un FAQ la ei. Acum tot va ajunge la vorba mea, ca pentru a corecta post-ul ala fara sa scrie “edited by miner” va trebui sa apeleze la prietenii lui MVP-ei si fondatori de comunitati, cum l-am sfatuit sa faca de la inceput. Poate cu ocazia asta reuseste sa scrie si codul cum trebuie.

Tags: , , , , ,