Paricid

Posted in Premiul n00bel, Regula 0 on September 5th, 2011 by Mihnea

Cind s-a impleticit pentru prima oara pe usa staulului cu experti, minerul Silviu Ardelean avea casca in mina, lampasul stins si capul plecat. Inca nu se saturase sa-si tina atitudinea doar pentru el, nu se angajase la multinationala emblematica, nu fusese dat afara de la multinationala emblematica si nu-si pusese in semnatura dihotomii adinci. Multa vreme s-a multumit doar sa fie de acord cu post-urile altora si sa se gudure pe linga mai-marii locului. Flatati de faptul ca in sfirsit ii priveste si pe ei cineva de jos, mai-marii l-au luat sub obladuirea lor, l-au aparat de hateri, l-au ajutat cu “few cosmetics” – intr-un cuvint, l-au crescut. Si ce sa vezi: saminta de miner a prins puteri, si-a gasit o voce si acum se razvrateste impotriva expertilor folosind tocmai uneltele pe care ei l-au incurajat sa si le ascuta. Ce ironie!

Psychologists say ca era inevitabil ca relatia dintre militian si miner sa ajunga in acest punct: pina la urma minerul-fiu va dori s-o futa el pe programarea-mama si va incerca sa-l omoare pe militianului-tata pentru a inlatura concurenta. It’s science! A inceput subtil, cu cite o ridicare de glas pe alocuri, cite un comentariu aprobator-dar-nu-tocmai la un raspuns militienesc. Ortacul trebuia sa testeze intii terenul, nu putea sa dea buzna ca-n Piata Universitatii, caci se temea de pulanul pe care-l vazuse lovind nemilos in trecut.

Vazind ca pulanul sovaie, Silviu a trecut la atac, scolindu-l pe Ovidiu in problema STL-ulul:

– Clasele MFC sunt mai usor de folosit atunci cand se dezvolta variantele ANSI si UNICODE, zise Militianul.

– Te rog, detaliaza cu ce sunt mai usor de folosit, veni replica Minerului. Pana la urma, diferenta o faci din niste macro-uri pe care le poti aplica si sa faci distinctia std::string vs. std::wstring.

Militianul facu un pas in spate, dupa care continua:

– Alte functii STL “puternice” sunt rar folosite intr-o aplicatie MFC.

Minerul, simtind ca e sansa lui, se puse pe enumerat functiile pe care le foloseste zilnic cind optimizeaza cautarea i-urilor in std::map:

– Nu vad asta ca un argument si as venii cu cateva contra-exemple: for_each, find, count, search, copy, fill, merge si multe altele.

Pe la mijlocul discutiei pulanul devine semi-erect, asa ca Silviu se retrage temporar in diateza pasiv-agresiva:

Daca se doreste sa se poarte o discutie interesanta ar trebuii sa scoatem din ecuatie cuvintele subliniate si sa vorbim pro/contra celor doua librarii in contextul aplicatiilor Windows.

Obisnuit sa-i lase pe altii sa gindeasca in locul lui, a incercat chiar un link spectaculos de prost (chiar si pentru el), pe care Ovidiu l-a desfiintat prompt. Ca sa nu pice de prost, minerul a incercat sa rida si el de prostia link-ului pe care el l-a adus ca argument cu o gluma despre bac. Discutia a sucombat iar minerul a ramas cu pantalonii in vine si cu frica de castrare pulsindu-i dureros in virful tirnacopului.

O luna mai tirziu, Silviu a intrat iar peste Ovidiu in CDormitor cind stimabilul MFCist il lumina pe mesajflaviu in problema inchiderii si deschiderii ferestrelor. Ovidiu a incercat sa-i explice ca nu-i frumos sa se bage in treburile care se petrec in intimitate intre doi adulti. Minerul i-a tras-o insa previzibil, spunindu-i ca de fapt nu a vrut sa zica ce a crezut Ovidiu ca a zis. Militianul, ajuns la capatul rabdarilor, a decis ca-i timpul pentru o corectie:

Uite ce e, Silviu! Nu-mi place cand cineva “o intoarce ca la Ploiesti”.
Am mai mult respect pentru un “OK, sorry, am gresit (eu sau tastatura)” atunci cand cineva scoate un “porumbel”. I se poate intampla oricui, inclusiv mie.

Un singur lucru nu pricep: de ce s-a redenumit manevra clasica din “few cosmetics” in “intoarcere ca la Ploiesti”?

Cock-blocked pentru a doua oara, cind mama-programare era cracita si disponibila la doar citiva centimetri in fata lui? Nu inca, caci minerul mai are citeva trucuri in tolba sa, ca n-a dospit degeaba la loc caldut 4 ani sub protectia codexpertilor fruntasi. Stim cu totii ca in general se ajunge si-n cazul lui, dar de data asta se pare ca s-a ajuns deja:

PS. Ovidiu, e departe de mine gandul unui flame, dar cand spui “Nu, Silviu, nu neaparat” referitor la ce am citat ulterior cred ca te refereai la persoana mea iar mie astfel de lucruri imi sunt clare – deci nu am ce sa intorc. M-am jucat si eu cu CMultiDocTemplate.

Sa fie clar – lui ii este! Link-ul duce la celebrul “articol” despre serializarea in MDI in care minerul ne arata ca n-a inteles nimic din MDI, serializare, MFC etc. Deja m-am pierdut in straturile de ironie ale intregii situatii asa ca ma duc sa-mi iau niste popcorn si sa astept cu infrigurare episodul urmator al telenovelei.

 

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

Campionatul national de tirnacop viteza

Posted in Codare cu premeditare, Premiul n00bel on May 11th, 2011 by jos8cal

Azi in Codexpertia a avut loc Campionatul National de Tirnacop Viteza. Bineinteles nu a lipsit de la eveniment multiplul medaliat la sol, Silviu Ardelean HD nominalizat acum la sectiunea “Eu propun”.

Cum nu de mult timp a devenit somer in JAVA, el a tinut sa explice motivele pentru care tirnacopul l-a ales pe el si nu invers. Medaliat la sectiunea Un Certain Retard pentru inovatia adusa metodei aflarii numarului de bytes dintr-un fisier, premiat la sectiunea Facepalm D’or cu simularea functiei atoi() in timp patrat, Silviu a deschis prelegerea cu problema numararii bitilor 1 dintr-un numar.

Cu Silviu in mina, tirnacopul s-a pus pe treaba. Dupa o lovitura bine aplicata lui Google s-a si intrezarit raspunsul la problema minerului in link-ul 2 (ca primul link l-a luat Marius Bancila care a si apucat sa ia cuvintul inaintea lui la dezbatere, futu-i). Asa ca a copiat repede codul prin metoda clasica a schimbarii numelor de variabile si si-a deschis prelegerea cu clasicul “Eu plagiezEu propun

Eu propun o varianta mai clasica.

int counter(int nr)
{
   int i = 0;  

   while (0 != nr)
   {
    i += (nr & 1);
    nr >>= 1;
   }  

  return i;
}

Desi este o metoda clasica, ea nu e functionala si tinem sa precizam ca operatorul >> a fost inventat intr-o perioada neo-nazista, de unde probabil si tenta mai nationalista de a opera cu numere pozitive.

Ceva amuzant s-a intimplat in pauza prelegerii. Cineva a pus o intrebare care l-a facut pe Silviu sa priveasca in jur, pentru a gasi pe cineva pe care sa-l aprobe. Intrebarea a fost asta:

Intrebarea este cum apelez functia sum fara sa modific clasa A.

class A
{
   private:
      A(){};
      ~A(){};

   public:
      int sum(int a, int b){return a + b;}
};

Primul care s-a aventurat a propus un:

#define private public

moment in care Silviu a simtit cum se scutura de certitudinile vietii. Nedorind sa creada ca aceste doua cuvinte, public si privat, nu sint de fapt magico-atomice asa cum a invatat el la Hidrocentrala pe vremea cind era pasionat de apa si peste, el a pus compilatorul capra si i-a virit acest #define pe git, sa vada daca si inghite, nu doar provoaca.

Ca dupa orice finalizare, oboseala incepe sa-si spuna cuvintul si uitind ca a lasat in cod acel #define, el ne propune rezolvarea:

O varianta mai curata dar nu imaculata:

class B : public A
{
public:
   B() {}
   ~B() {}

   int sumX(int a1, int b1) {
      return sum(a1,b1);
      }
};

int main()
{
   B z;
   z.sumX(2,3);
}

Deci daca vrei sa apelezi o metoda dintr-o clasa care nu poate fi instantiata, poti “propune” compilatorului sa-i dai o clasa derivata care sa apeleze metoda clasei de baza. Poate cineva de acolo din cartile pe care le citeste Silviu ne poate ajuta cu un

#pragma eupropun

in fata manevrelor de acest gen.

Mai mult decit atit, Silviu a declarat oficial ca a fost pacalit cind a propus rezolvarea sa, deoarece Zlatomir s-a grabit sa raspunda primul si a introdus subversiv in discutie acel #define private public obligindu-l efectiv sa-l aduca cu copy/paste in codul sau. Daca nu exista acest Butterfly Effect, codul lui Silviu era bun. De fapt stai, nu codul initial linie cu linie, ci codul pe care Silviu nu l-a scris dar l-a Gindit si din pacate un mirsav i-a ghicit gindul si i-a sugerat la noi pe site EXACT la ce s-a gindit el initial, dar nu a scris. Intelegeti voi.

PS. Multumim corespondentului Felics aflat in Codexpertia pe durata CNTV.

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

Internetul, memoria si Ardeleanul

Posted in Premiul n00bel, Regula 0 on March 7th, 2011 by Mihnea

Azi e o zi importanta pentru Silviu Virgula Ardelean: in sfirsit a gasit un articol care explica pe intelesul sau ce-i cu pointerii si cu memoria. Surescitat de descoperirea sa, expertul ce duce-n spate nu mai putin de 9 ani de tras la saiba C++-ului si-a aruncat tirnacopul in zare, sa stie toata lumea:

A nice and simple tutorial of “C/C++ Memory Corruption and Memory Leaks”: http://bit.ly/jWwEd

Vreau sa subliniez “pe intelesul sau”. Articolul nu e in nici un caz pe intelesul oricui, ci doar al lui Silviu, asa cum discutiile intre doi boschetari beti nu-s pe intelesul oamenilor de rind. Sa spicuim:

char *oldString = "Old String";
char newStrig = strdup(oldString);
if(newString == ENOMEM) ... // Fail!!!!

...

free(newString);

Nu-i asa ca aveti un deja-vu? Cod care nu se compileaza, pentru ca “omul nu are un compilator in cap”, si pentru ca “tutorialele nu-s facute sa iei cu copy/paste din ele”? Bifat. Autor care e asa de prost incit crede ca malloc() returneaza ENOMEM cind nu mai are de unde da, dar posteaza totusi tutoriale pe net? Bifat. Utilizarea limbii lui Shakespeares pentru a ne asigura ca mesajul de pace si incompetenta este inteles si de oamenii din “India, Africa de Sud, Columbia, Rusia, etc”?

Memory allocated by copy constructors for pointer duplication. Check in destructor and delete if necessary. Memory allocated in passing class by value which invokes copy constructor.

Bifat.

Numarul de ineptii din articolul respectiv este aproximativ egal cu numarul de propozitii (doar daca socotim drept propozitii si enunturile alea fara predicat, altfel ineptiile cistiga), dar n-o sa stau acum sa fac analiza pe text. Mai interesant ar fi de aflat cum si de ce a ajuns minerul sa-si gaseasca sufletul-pereche in persoana acestui Greg Ippolito. “Cum” e simplu: a scris in google free memory tutorial si a dat pe primul link. “De ce” are legatura cu site-ul asta si cu utilizatorii sai.

Acum ceva vreme, minerul a postat un articol in care ataca spinoasa problema a convertirii numerelor in string-uri. La momentul creatiei l-am sarit pentru ca nu ni s-a parut ca ar avea suficient potential umoristic, dar un cititor fidel ne-a urecheat ca n-am semnalat faptul ca Silviu punea destructori virtuali in niste clase goale, ca un automaton constiincios ce este. Sigur pe textele invatate pe de rost de prin surse dubioase, Silviu (care, tineti minte, nu se ascunde dupa nick-uri pentru ca are singe in instalatie) a venit deghizat in Coco si a lasat urmatorul comentariu veninos:

Coco Says:
January 26th, 2011 at 4:32 pm
@thefatredguy: prima data trebuie sa scrie un FAQ special pentru tine despre destructori virtuali.

Dupa risetele ce au urmat, el si-a inmuiat intrucitva pozitia:

Coco Says:
January 26th, 2011 at 4:58 pm
Discutia cu destructor virtual / nevirtual e cu dus-intors oricum ai intoarce-o. Voie buna!

Vazind totusi ca voia buna nu inceteaza, a dat fuga la articol si a scos destructorii aia virtuali, ca nu se stie. A ramas totusi cu un ghimpe, ca n-a inteles de ce i-a scos, asa cum n-a inteles nici de ce i-a pus. Neintelegind ca e atit de prost incit nu va intelege niciodata, el a continuat sa caute raspunsuri sub forma de tutoriale si asa a dat peste Greg.

Un om de calibrul lui Silviu, care isi recunoaste greselile, nu putea dormi noaptea fara a scorni o justificare pentru faptul ca orice spune se dovedeste a fi gresit. El e un suflet nobil si mare, care vede dincolo de corecturi. Atita timp cit Adevarul iese la iveala, pe Silviu nu-l intereseaza cum se ajunge la asta. Cum ne-a obisnuit, minerul iar da cu tirnacopul in peretele gresit, crezind ca noi ne luam de el pentru ca isi corecteaza post-urile, asa ca ma voi preface ca incerc sa-l indrept pe calea cea buna, inainte sa-si darime abatajul in cap.

Nu, draga Silviule. Noi nu ridem de tine pentru ca iti corectezi scrierile, ci pentru ca trebuie s-o faci. Tot ce scrii este gresit si tu nu vrei sa vezi in asta un semn al incompetentei colosale care-ti caracterizeaza existenta. Post-urile tale ar trebui sa-i avertizeze pe cititori sa nu ia nimic de bun pina nu apare articolul corespunzator la noi pe site. Daca vrei, facem noi plug-in-uri de wordpress si phpbb care afiseaza un disclaimer in ce postezi si adauga automat link-ul catre noi in momentul in care publicam corecturile. Visez la ziua in care vei putea imprumuta de la cineva un sfert de creier si vei putea vedea ironia faptului ca ai invatat despre pointeri, constructori si destructori de la un idiot ca tine, care nu stie despre ce vorbeste, dar totusi vorbeste. Tu, in prostia ta, ai preluat prostia lui si o dai mai departe altora. Daca Fibonacci ar fi trait azi, i-ar fi dat pulii de iepuri si ar fi studiat pe tine rata de crestere a prostiei pe internet.

Sigur, incercarile acestea de a-l face pe Silviu un ortac mai bun sint nascute moarte. Un intelept ne-a lasat mai demult pe failbook urmatorul mesaj, ce ilustreaza cu mare concizie si absoluta precizie imposibilitatea comunicarii cu minerul-programator:

Cand Silviu-Marius Ardelean greseste si incerci sa ii spui, sunt trei variante:

1. Faci misto si nu se prinde;
2. Ii spui discret si nu intelege;
3. Ii spui direct si nu te crede.

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

Cum sa nu trimiti un parametru catre o functie

Posted in 112, Premiul n00bel on January 26th, 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.

Tags: , , , , , , , ,

Ingineriada in metru antic

Posted in Codare cu premeditare, Premiul n00bel, Stand-up philosophy on October 15th, 2010 by jos8cal

Pentru mine viitorul este o prioritate. La fel si cariera. Nu mai zic de destin … Asa ca deseori bat intr-o tabla cu butoane pe care stau lipite aptibilduri cu numere si litere. Folosesc circa 7 degete pentru genocidul asta iar cel mai Silviu Ardelean dintre ele este degetul mare, care bate doar tasta spatiu. Ele (ca am doua) nu se misca precum restul degetelor in cautarea Sensului deasupra tastaturii sau prin multinationale. Nu. Ele stau pitite linga tasta spatiu si o pocnesc la un interval regulat in speta de fiecare data cind posesorul degetelor face o pauza in vorbire. Pauza e muzica. Pauza e bataie. Fara bataia la doua miini a spatiului nu exista viitor, cariera sau armonie muzicala. Bataia lui ordoneaza si da sens apasarilor derutate a celorlalte 4 degete. Eins zwei, eins zwei!

Inainte sa existe masinile de scris automate, degetul mare nu avea niciun sens, nu juca niciun rol pe scena vietii. Constientizind aceasta provocare Omenirea a inventat burghiul prin profesorul Burghiu. Directia si Sensul au fost dezvaluite asadar omenirii iar victoria asupra materiei a fost dedicata in intregime degetului mare. Modest si sub acoperire (a se citi “regula burghiului“) El ofera acum directia pentru oricare doi neaveniti care se bat cap in cap, perpendiculariceste.

Grecii nu stiau de burghiu, deci automat nu stiau ce sa faca cu degetul mare. Il foloseau la flotari in doua degete pentru a le face in ciuda atenienilor care pazeau pe la spring time-urile vremii. Dar au gasit alta modalitate sa bata spatiul. Prin muzica. Ei au stiut primii ca daca taci din cind in cind in timp ce cinti, lumea incepe sa-si apropie miinile linga piept si sa le bata, ceea ce-ti produce tie o descarcare si simti ca Ai Reusit!

Ca sa bati spatiul muzical iti trebuie niste materie pe care sa o ordonezi si sa-i zici Instrument Muzical. N-am fost niciodata fanul instrumentelor muzicale pe care trebuie sa le imbraci inainte sa te produci in ele, cum ar fi acordeonul. Dar cind viitorul si cariera trag de tine iti imbraci tastatura si pui mina sa realizezi ceea ce ai de realizat. La fel a facut si Inginer Boață Cristian. Colegul naicul l-a reperat prin Bucuresti vorbind prin gura stilpilor de telegraf pe care si-a lipit afise cum ca si dinsul ofera Directii. Cu alte cuvinte un atac la degetul mare. La regula burghiului. La umanitate si la acordeon!!

Si-a facut si dinsul acordeon 101-102 si pentru o suma modica te invata cum sa bati spatiul la domiciu proprietate personala. Sa vedem asadar cum arata dialogul dintre un cetatean si un stilp pe care sta lipita poza de mai jos cu luarea de pozitie:

Am terminat IPB fac. Automaticã in 1983 .
20 de ani am fost ing. programator la un institut de cercetare al Armatei. Un an am lucrat in invatamant. In domeniul IT, învãţãmântul romanesc oferã opogramã depãşitã …timp pierdut …un start ratat.

In  caz ca nu stiti in ce cheie cinta Cristian, luati aminte:

Un ing. IT poate schimba radical lecţiile în domeniul informatic.
Urmare : …un elev incepãtor va aborda domeniul IT fãrã complexe.
Astãzi 90% din soft == aplicaţii in reţea, aspect foarte important !

Asa ca dati-va jos mastile! Lasati dracului complexele si iata ce va asteapta:

Pentru o Carierã IT de Top, …eventual in Vest, …Stabileşte Prioritãţile !Unica modalitate de a sãri pragul mediocritãţii este studiul Extra-Şcolar.Nu pierde Timpul …Învaţã Programare (matematica şi engleza in planul 2)

Este el Vestul (muzical sau nu). Pentru viitorii ingineri IT se recomanda studierea asidua a lectiilor template de pe site.

LE: Intre timp cineva vadit deranjat de regula burghiului s-a uitat mai atent la degetul mare si a descoperit ca are linii (mostenite din CFigure) pe fata. Le-a botezat amprente si multumita lui acum sintem identificati toti dupa degetul mare. Now that’s a turn off!

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