Insemnari din Valley Jiului

Posted in Regula 0, Stand-up philosophy on September 23rd, 2011 by jos8cal

Omul incearca sa inteleaga lumea in care fapteste, iar ca si metodologie foloseste istoria si analiza temporala a lumii. Asadar nu puteam incheia nici noi aceasta paranghelie tiganeasca de 3 zile si 3 nopti fara o trecere in revista a vietii celui care este azi sarbatoritul nostru, al tuturor.

S-a nascut in Tara Hategului, dar asta nu conteaza deoarece nu si-a ales el locul. Ce conteaza sint alegerile pe care le-a facut de-a lungul vietii, iar pentru a afla asta am inceput un intreg demers epistemologic. Inarmati cu tirnacoape de ultima generatie am reusit sa dam peste un filon de aur caruia vom incerca astazi sa-i deslusim tainele. Stimati colegi, iubite colege, onorat CNH, va supunem atentiei primul atestat documentar online despre existenta lui Silviu Ardelean.

Vom incepe prin a trece in revista omul din spatele programatorului Silviu Ardelean, desi va fi foarte greu deoarece practic ei sint de neseparat. Fiind deja expert in C++ de 4 ani la virsta de 20 de ani, este de presupus ca si-a sacrificat copilaria pentru intunericul si singuratatea galeriilor complexe la care mintea umana sapa de milioane de ani.

Matematica este alaturi de informatica materia mea favorita. Este o disciplina complexa, în care absolut totul este logic. Drept urmare dedic matematicii computationale un spatiu mai amplu.

Calculatorul este pentru mine cel mai bun prieten, care nu ma dezamageste niciodata si îmi doresc sa am o viata linistita câstigându-mi existenta din acest domeniu al viitorului.

In fundul galeriei sta scrijelit si motivul pentru care a renuntat la inocenta copilariei:

Visul meu este ca sa ajung un bun specialist în calculatoare, sa lucrez la o firma de software sau intr-un centru ce cercetare si sa ajut oamenii cum pot caci exista destul rau în lume.

Nici divinitatea nu a scapat preocuparilor adolescentine ale faptasului Silviu:

Desi în ultimi ani nu mai am prea mult timp pentru pictura uneori se întâmpla sa mai pictez si tema principala este de inspiratie religioasa.

Silviu stie inca de mic ca in spatele unui om puternic se afla o femeie puternica, asa ca a conturat inca de pe atunci portretul celei care va urma sa-i fie aleasa:

La fete apreciez în primul rând inteligenta si doar apoi frumusetea. Când stau de vorba cu cineva îmi dau seama de la primele cuvinte cu ce fel de fata am de-a face. Sunt un adept al relatiior stabile si nu-mi place sa fiu un aventurier. Apreciez fetele serioase care sunt alaturi de pritenul lor la bine si la greu, îl sprijina în activitatea profesionala, care au ambitie si planuri profesionale serioase si care nu se uita doar dupa baieti de bani gata. Inteligenta nu are pret si nu o are oricine.

Cu toate ca muncea din greu, era dependent de muzica si asta cu timpul l-a distrus. Fost consumator de manele, s-a trezit nas in nas cu muzica celor de la Westlife si a redevenit dependent peste noapte. Cu timpul doza muzicala nu mai era indeajuns pentru apetitul sau, asa ca s-a gindit serios sa infiinteze un fanclub Westlife in care sa discute pe marginea spuselor din piesele celor 5 ginditori pe gura.

Astfel, desi cel mai mult ascult muzica dance si latino se întâmpla sa ascult cu mare placere rave sau balade rock, muzica clasica si din ce in ce mai rar manele.

Actualmente, trupa mea favorita este WESTLIFE, iar ca proiect de viitor mi-as dori sa fac un fun-club WESTLIFE. Daca aveti astfel de preferinte si idei nu ezitazi sa luati legatura cu mine.

Din playlist-ul pe care Silviu a facut primii pasi in copy/paste, reamintim:

Jhon Lenen – ” Imagine ”

Gunse’s Rose – ” November rain ”

Chris Norman – ” Mill night lady ”

Backstreet Boys – ” Show me the meaning of being lonley “

O munca asidua a fost depusa la Aproximarea Computationala a Integralelor, unde nici nu vreau sa ma gindesc cit de complicat a fost sa redai ASCII cu copy/paste toate acele insemne grecesti.

La fel de complicata a fost si adaptarea CV-ului personal dupa o pagina copiata de pe net si apartinind defunctului dancd@mail.com (destinatarul in caz ca dati click pe mail-ul lui Silviu), care probabil era expert in C++ si-n limba lui Shakespeares, dar putin novice in cea a lui Molieres:

Limbi straine: Engleza (fluent), Franceza (incepator)

C/C++ expert / 4 ani

Nuff said!

Tags: , , , , , , , ,

Mineru-si schimba jobul, dar naravul ba

Posted in Codare cu premeditare on July 18th, 2011 by Mihnea

Mi s-a facut observatie ca n-am analizat obiectiv codul minerului din articolul mentionat anterior. Cind i-am corectat lucrarea i-am dat direct doi pentru copiat, n-am gasit de cuviinta sa ma uit cu atentie la partea originala, ca oricum nu prea mai aveam de unde sa-i scad din nota. Gresit! Iar pierdeam una din ocaziile (deloc rare, ce-i drept) in care 4 linii de cod contin mai multe greseli decit litere.

Sa  privim, deci, ce solutie propune Silviu pentru spinoasa problema a buffer overflow-ului:

#ifdef _WIN32
   #define usprintf(x, ...) _snwprintf(x, _countof(x) - 1, ##__VA_ARGS__); x[_countof(x)-1] = 0
#else
   #define usprintf(x, ...) snwprintf(x, _countof(x) - 1, ##__VA_ARGS__); x[_countof(x)-1] = 0
#endif

Ce ne izbeste din prima e o mare surpriza: Silviu stie ca _snprintf() din VC++ nu pune 0 la sfirsitul buffer-ului daca n-are loc! Nu v-ati fi asteptat, nu? Valea Jiului, always surprising! Ei bine, nu va grabiti cu laudele. Eu nu cred minerul a dezvoltat aceasta solutie cu de la sine putere.

In primul rind, problema pe care incearca el s-o rezolve nu exista. Pentru wide char ai swprintf(), care ia si capacitatea buffer-ului, exista pe toate compilatoarele din era noastra si pune si 0 la sfirsit tot timpul. VC++ are mici dubii legate de prototipul ei in C, dar nu si in C++, deci abatajul nu ar fi afectat. Orice om normal ar fi folosit functia aia si gata. In schimb, Capitanul Copypaste a vazut pe undeva pe net sau in proiectul la care lucreaza urmatorul fragment care “rezolva” problema lipsei varului snprintf() din VC++:

#ifdef _WIN32
   #define cevaprintf(x, ...) _snprintf(x, sizeof(x) - 1, ##__VA_ARGS__); x[sizeof(x)-1] = 0
#else
   #define cevaprintf(x, ...) snprintf(x, sizeof(x) - 1, ##__VA_ARGS__); x[sizeof(x)-1] = 0
#endif

Nici ala care a facut chestia asta nu e foarte breaz, dar n-ar fi prima data cind minerul se inspira de la un alt bou. Oricum, ce e important e ca Silviu a luat codul asta, a pus “w” acolo ca sa fie Unicode si a schimbat sizeof() cu _countof() ca i-am zis noi mai demult de chestia asta. Doar ca:

  • snwprintf() nu prea exista (cica ar fi prin Borland, daca intereseaza pe cineva asemenea relicve). Ca si data trecuta cind a scris cod “cross-platform”, ortacul nu s-a ostenit sa vada daca ce a debitat in a doua ramura a #ifdef-ului chiar se compileaza.
  • _countof() nu exista decit in VC++. Da, se poate copia printr-un header si folosi si-n alte compilatoare, dar minerul nu stie asta.
  • nu asa se fac macro-uri compuse din mai multe instructiuni. Astept cu interes sa scrie un coleg de-al lui if(cacat) usprintf(ceva); else usprintf(altceva); si sa se intrebe de ce nu se compileaza.
  • snprintf() pune singur 0 la sfirsit tot timpul, nu-i nevoie de lucru manual. Ipoteticul snwprintf(), numit in realitate swprintf(), face si el acelasi lucru. Dar ma rog, cum am stabilit deja, daca stii de swprintf() nu mai faci deloc cacaturile astea.
  • daca ar fi sa fim pedantici, ne-am lega de faptul ca # trebuie sa fie tot timpul pe prima coloana, nu ai voie sa pui tab-uri in fata lui. Din nefericire compilatoarele sint indulgente in problema asta.
  • nu vad de ce ai vrea sa chemi tu sizeof() sau _countof() pentru utilizatorul macro-ului. Poate ca sa te asiguri ca respectivul utilizator nu poate folosi ce-ai facut daca are un pointer chior, chiar daca stie capacitatea array-ului la care pointeaza.
  • nu vad de ce ai face chestia asta ca macro, in loc sa faci o functie ordinara, care ar merge si cind nu folosesti ultimul racnet de compilator cu suport pentru macro-uri variadice, n-ar avea probleme fara acolade etc.; evident, asta presupunind ca n-ar exista deja functia aia.

Misto e ca de data asta Silviu nu poate baga scuza aia imbecila cu “e cod didactic, nu trebuie sa mearga”. Conform spuselor lui, asta e cod pe care l-a scris in aplicatia pe care o distruge pe bani la Saguaro. Muie Silviu!

PS: Bonus story.

 

Tags: , , , , , , ,

Scoala ardeleana de aritmetica

Posted in 112, Premiul n00bel on April 12th, 2011 by Mihnea

Viata e grea in Valea Jiului. Intre o descindere in abataj si o incursiune horticola la Bucuresti nu-ti ramine mult timp pentru dezvoltare personala. Daca vrei sa-ti cultivi o pasiune, cum ar fi pescuitul, trebuie sa renunti la unele chestii mai putin importante, cum ar fi scoala primara. Tragedia devine evidenta abia cind destinul te forteaza sa dai pestele din mina pe programarea de pe gard si cei din jurul tau descopera ca ai lipsit cind s-a predat impartirea cu rest sau formarea pluralului.

In post-ul despre atoi-ul ortacului va ziceam, printre altele, despre pasiunea lui Silviu Ardelean pentru modulo. Un cititor vigilent a remarcat insa ca nu era prima data cind fostul viitor pescar rescria regulile aritmeticii. Intr-un thread de pe vremea cind Gardianul Ovidiu nu gasise inca un pretext pentru a denunta unilateral dialogul dintre mine si experti povesteam cum aplica Peter principiile programarii defensive:

int& operator[](unsigned int index)
{
    index = index % count();
    return m_elements[index];
}

Ce a inteles minerul din asta:

Totusi… ma intreb daca el a facut vreodata debug pe acest cod. Sincer, ma cam indoiesc, pentru ca atunci, ar fi constatat ca tot timpul elementul ar fi fost valoarea returnata de count() [datorita faptului ca index era mai mic decat aceasta valoare] si in mod normal, ultimul index al lui m_elements ar fi fost count() – 1. Pracic, se accesa un index inexistent ( valoarea returnata de count() ). Sau?

Deci in 2009, pe cind era expert de 8 ani in C++ ([1]), Silviu credea ca restul impartirii lui 4 la 9 este 9. In lumina acestor fapte, ne intrebam ce a vrut de fapt sa faca cu % 10 ala in implementarea lui de atoi(). Sau la implinirea a 10 ani de experienta a descoperit cum functioneaza de fapt modulo si s-a decis sa-l foloseasca si unde nu face nimic, sau a vrut ca atoi-ul lui sa creada ca toate cifrele sint 10. Sau?

Putin mai incolo in thread, insusi Gardianul Ovidiu incearca sa domoleasca zelul cu care minerul explica principiile de convietuire armonioasa cu sizeof (operatorul care returneaza lungimea array-urilor dinamice, daca tineti minte). Ovidiu intinde urmatoarea nada:

size_t v = 0;
while(v < sizeof(v++))
{
    printf("%u", v);
}

Silviu, cu pedala mintii la podea, raspunde:

Fara a rula, iti zic sigur ca va crapa la printf(), chiar daca pasezi “%d” sau “%d”. printf()-ul are limitele sale, ptr. tipuri simple (int, float, char, etc).
Pune std::cout in loc de printf() si nu mai crapa. Chiar afiseaza ok valorile lui v.

Mare atentie, Silviu, ca si pamintul are limitele sale, ca si printf(), si s-ar putea ca intr-o zi sa se surpe pur si simplu sub tine.

In incheierea paginii aflam ce l-a determinat pe Silviu sa schimbe undita cu calculatorul personal:

Daca as lucra intr-un domeniu embeded unde trebuie sa ma supun unor legi mai stricte, atunci las si de la mine. Din fericire doar mi-a mirosit cu ce se mananca si e putin porbabil sa activez vreo data intr-un astfel de domeniu. Acum 2 ani o firma vroia sa ma atraga pe o pozitie de team leader exact pe ceva “embeded” si le-am multumit frumos. Prefer creeativitatea si complexitatea specifica aplicatiilor ptr. PC.

Eu sper ca de fapt aia vroiau sa-l atraga pe Silviu intr-un beci la marginea orasului unde sa-i arate tot felul de pozitii si obiecte emdeduibile in cur. Altfel vreau sa-i cunosc, in primul rind ca sa nu-mi iau vreodata cuptor cu microunde programat de ei si in al doilea rind ca sa le ofer gratuit un abonament gold la RSS-ul site-ului nostru.

Silviu, mopul e la tine. Speram sa nu te dezminti nici de data asta si sa stergi macar “mica scapare” cu operatorul %. Adevaratul test de creativitate va fi insa la aia cu siguranta craparii, ca pe-acolo nu prea vad cum ai putea spala rusinea fara ajutorul mentorului tau (“few cosmetics”, sau?). Sper ca vei opta pentru o explicatie tehnica, cu cuvintele tale, a modului in care functioneaza functiile variadice si mintea minerului. Asta m-ar bucura cu adevarat.

Fig. 1: Silviu propune, codexpertii dau cu mopu'

 

PS: Avind in vedere ca am ris deja de multiple ori de faptul ca multinationala emblematica nu te-a mai dorit asa de tare cum o doreai tu pe ea, poti sa-ti actualizezi linkedin-ul ala, ca nu mai ai ce secret sa tii. In plus, ne-au zis noii tai colegi ca se intreaba daca ti-e rusine cu alegerea facuta, de nu vrei sa o impartasesti public, tu care in rest esti un om asa de deschis.

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

M-a facut mama ortac

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

Când plini de praf cu paşi trudiţi,
Ieşim din mina obosiţi,
Ne doare ca-n lumina sa
Pământul ţine-o lume rea.

Asta fredona Silviu Marius Ardelean in timp ce-si sapa cariera de programator din galeriile reci si ude ale Vaii Jiului catre Timisoara. Cind a dat de lumina neonului de multinationala s-a pus pe scris despre normalitate. Pentru ca lui ii pasa. Si pentru ca scriind poti schimba ceva. Mai ales cind te citeste doar nevasta-ta si restul care rid de tine.

Asa ca automat s-a luat de postul in care se discuta despre imbecili ca el care reinventeaza nimicul pe unde-l prind. Prin MFC sau prin 3D, dupa caz. Dind curs lecturii si neintelegind nimic, spusele lui Mihnea si a altora citati i s-au parut nelalocul lor si asta pentru ca si el are un sistem personal de a defini spatiul. Sa vedem asadar cum defineste Silviu Marius Ardelean un triunghi:

Deci CTriangle deriveaza din CFigure iar Figura ca si concept general are un punct in stinga si unul in dreapta. Directii clare de a defini spatiul, timpul si retardarea. Daca ne uitam in cod sint si mai epice, ca se cheama m_ptUpperLeft si m_ptBottomRight.

Poza asta face parte dintr-un tutorial despre OOP scris de miner pe post de jurnal tinut prin tunelul carierei pe care o sapa de mic. Jurnal tip briceag elvetian care contine nelipsitele sectiuni pentru un programator specialist, sectiuni precum: Bancul Zilei, un ceas, IP-ul celui ce-l citeste si emblema Stelei Bucuresti. Coperta te imbie sa o deschizi deoarece pe dinsa sta scrijelit urmatorul text:

Bine ati venit pe site-ul unui specialist in domeniul software.

Din pacate nu s-au salvat si pozele. Am avut noroc ca poza cu triunghiul am salvat-o cu mult inainte ca Silviu sa decida sa-l copieze pe Marius Bancila si sa-si faca bloage tehnice si de atitudine dinamitindu-si trecutul.

Ca orice labar prost cu idei putine si fixe el se ofera sa ajute lumea bolnava in care se invirte, sa o schimbe, sa-i ofere acces la dimensiunea sa. Asa ca n-am scapat nici eu de momentul in care i-am zis ca abereaza FAQ-uind lumea printr-un indrumar patimas catre programatorii mai saraci cu duhul, despre cum ca pre incrementarea la interatorii containerelor STL este recomandata in favoarea post incrementarii. Evident noi vorbim despre cod in Release, ca doar asta ajunge la clienti (fie ei si colegii tai carora le faci softul de facturi).

Fara o legatura directa dar izvorind in acelasi imbold onanist de a te baga in seama cu chestiuni pe care nu le stapinesti, el are o mai veche pasiune pentru optimizat cicaturi inutile:

Observam cum parametrii vin si pleaca ca-n gara, cum se aloca spatiu intr-un CString si cum se face un undefined behaviour cind esti miner si optimizezi tu incrementarea.

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

Vorbe, nu fapte!

Posted in Glume de autobaza, Stand-up philosophy on October 4th, 2010 by jos8cal

Am 10 minute pauza la ospiciu si am zis sa aduc o mica completare la postul anterior. Scriu de pe telefon fix si sint foarte sedat, so bare with me. Asa, deci doresc o completare la partea cu Fordul in care minierul se identifica cu succesul, cu atitudinea, cu reusita, cu binele din lume, cu futaiul si niciodata cu laba, cu pula-n pizda si niciodata in cur. Acum citeva zile o ardea intelectual pe twitter si se identifica din nou cu oameni care au schimbat fata programarii si au avut ceva de zis in domeniul IT: Einstein, Gandhi, Lao-Tzu, Dijkstra, Antoine De Saint-Exupery.

Emisfera lui dreapta, condamnata sa substituie lipsa celei stingi si sa invete o limba, orice limba, a decis inca o data s-o pise nostalgic in ochi pe consoarta sa muribunda pentru a-i permite Silviului inca o identificare cu colectia de proverbe despre programare sub forma unor Mari Idei Spuse De Oameni Care N-au Nicio Treaba Cu Programarea.

Cum materia lui cenusie a fost salvata de la negreala totala prin distanta de 50Km instituita inca de la o virsta frageda intre el si Valea Jiului, aceasta i-a mai facut un favor Silviului si a comandat serotonina de toti banii, moment in care Silviu s-a pus pe subliniat predicatele proverbelor cu o linie si le-a tras pe nas:

“If you want to build a ship, don’t drum up the people to gather wood, divide the work, and give orders. Instead, teach them to yearn for the vast and endless sea.”

— Antoine De Saint-Exupery

Citatul oglinda pentru captat gindirea miniera. Imi si imaginez cum a dat din cap aprobator ca un tirnacop cind a realizat ca daca vrei sa codezi tot ce trebuie sa faci este sa-ti doresti. O da.

Slabiciunea juvenila catre metafora l-a facut pe Silviu sa-l aprobe si pe Lao Tzu, un Cornel Dinu in materie de razboi care-si scria numele cu Tz in loc de Ț si care nu stia ca era programator undercover inca din anii de inceput ai existentei umane.

A leader is best when people barely know that he exists.
Less good when they obey and acclaim him.
Worse when they fear and despise him.
Fail to honor people, and they fail to honor you.
But of a good leader, when his work is done, his aim fulfilled,
they will say, “We did this ourselves.”

— O Lae-Tzu

Si acum una care-l coafeaza la fix:

We reject kings, presidents, and voting.
We believe in rough consensus and running code.

–Dave Clark (1992)

A se observa aici si aici cum Silviu vorbeste pe “running code” si nu o da-n telenovele si-n teorii retardate care poate poate se pot mula pe retarzenia care-i bintuie existenta.

Abraham Lincoln reportedly said that, given eight hours to chop down a tree, he’d spend six sharpening his axe.

— TidBITS 654, quoted by Derek K. Miller, via Art Evans

Asta cred ca e true story. E ca de la miner la miner. In 8 ore la birou el sta 6 ore sa-si ascuta tirnacopul.

The significant problems we face cannot be solved by the same level of thinking that created them.

— Albert Einstein

Einstein pe prozac vorbind pe limba lui Silviu Ardelean pe serotonina.

“There’s no time to stop for gas, we’re already late”

— Karin Donker

OMGFUCKOFFDIEANDEATSHIT!

Cacat! M-au reperat doctorii ca am inceput sa strig prea tare la telefon de nervi si acum s-au pornit spre mine cu camasa alba. Fuck! Hai c-am taiat-o ca mi-au promis ca nu ma string prea tare de pat daca ma gasesc la mine-n camera.

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