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

Mineguru

Posted in Codare cu premeditare, Premiul n00bel on October 18th, 2011 by Mihnea

Dupa cum remarcam intr-un comentariu anterior, minerul si-a luat putin din pila articolul ala copiat de pe codeguru si l-a pus pe codeguru. Citind el ce i-am zis despre functia imaginara snwprintf() si alte aberatii, a schimbat placa si n-a mai incercat sa fie cross-platform, ci a incercat sa fie cross-character set. Problema de pornire s-a schimbat peste noapte si a devenit:

The writing of this buffer was done using: vswprintf(). As we know, this function is unsafe and is not recommended.

Iar solutia ar fi:

#if defined(UNICODE) || defined(_UNICODE)  
#define usprintf(x, ...) \
   _snwprintf(x, _countof(x)-1, ##__VA_ARGS__); \
   x[_countof(x)-1] = 0
#else
#define usprintf(x, ...) \
   _snprintf(x, _countof(x)-1, ##__VA_ARGS__); \
   x[_countof(x)-1] = 0
#endif

Lasind la o parte faptul ca n-a inteles cind i-am zis ca macro-urile cu mai multe statement-uri nu se scriu asa, trebuie sa ne intrebam totusi urmatoarele:

  • de ce e vswprintf() “unsafe”, si de ce e _snwprintf() mai “safe”?
  • cum inlocuiesti un apel la vswprintf(), care doreste un va_list, cu macro-ul ala imbecil?

Si daca trebuie sa ne intrebam, ne-am intrebat. Ortacul a facut greseala fatala de a posta pe un site unde nu poate sterge comentariile incomide. Veni si raspunsul:

Sorry, I’m not talking about vswprintf() versus _snwprintf(). I just decided to use one of these.

Ok, n-a inteles intrebarea, deoarece era pusa in limba lui Shakespeares si se referea la articolul lui, pe care doar l-a scris, nu l-a si citit. Am incercat o reformulare, pe care a inteles-o si a raspuns cu un copy/paste din MSDN urmat de propria concluzie:

“Using vsprintf, here is no way to limit the number of characters written, which means that code using this function is susceptible to buffer overruns. Use _vsnprintf instead, or call _vscprintf to determine how large a buffer is needed. Also, ensure that format is not a user-defined string. For more information, see Avoiding Buffer Overruns.” Same story with vswprintf().
http://msdn.microsoft.com/en-us/library/28d5ce15(v=VS.80).aspx

Priviti-l, stimati concetateni, in toata splendoarea lui. Acest cercopitec e atit de sigur pe el incit imi da condescendent si un link la MSDN pe care el nu l-a citit. I-am indicat gratios faptul ca o pula “same story”, asa ca a editat articolul, a pus swprintf() in loc de vswprintf() si a declarat:

The functions used in the macro (_snwprintf/_snprintf()) are not proper to replace functions like vswprintf() – this function has different count of mandatory parameters and uses a list of arguments parameter. Sorry, in article I mean swprintf() witch is unsafe. Thanks for observation.

Aha, doar ca nici vrajitoarea swprintf() nu e “unsafe”, dupa cum i-am explicat deja, dar a uitat; si dupa cum scrie in link-ul la care ma trimitea pe mine, pe care tot nu l-a citit. Silviu nu are nevoie de documentatie sau de realitate, el are 11 ani de experienta.

Va tin la curent pe masura ce-si editeaza articolul si-si fabrica noi justificari, ca in vremurile bune. Sper ca se va incheia triumfal cu Bancila sau Cucu (care sint moderatori pe site-ul ala de tutorialisti indieni) operind “small cosmetics” asupra comentariilor mele.

 

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

Incompetenta de vineri dimineata

Posted in Codare cu premeditare, Slagare internationale on October 14th, 2011 by Mihnea

Organul de presa al Partidului Codexpert Roman a publicat azi o noua serie de lecturi obligatorii. Ne-a sarit in ochi articolul despre micsorat dimensiunea executabilelor, care incepe in forta:

This is probably the most common size-related mistake: programmers add an #include <iostream> to their program just because they happen to use cout once or twice. In such cases, it’s better to replace <iostream> with <iosfwd>.

Adica daca ai urmatorul cod:

#include <iostream>

int main()
{
    std::cout << "a" << std::endl;
    return 0;
}

executabilul rezultat devine mult mai mic dupa ce inlocuiesti iostream cu iosfwd. Mai exact, devine de o infinitate de ori mai mic, deoarece nu se mai compileaza. Cea mai buna metoda de a reduce dimensiunea programelor este sa le stergi.

PS: inainte de a face aceasta inlocuire optimizatoare, nu uitati sa aplicati cealalta manevra obligatorie de inlocuire, si anume sa renuntati la enum-uri in favoarea tipurilor clasice vector si structura.

Tags: , , , , , , , , ,

Incompetenta de miercuri dimineata

Posted in Premiul n00bel, Slagare internationale on October 5th, 2011 by Mihnea

Pe linga ziarul ce are pe post de editor-sef un bot (nu, nu ala), codexpertii au si o agentie de stiri de la tribuna careia informeaza Universul despre lucrurile care-i umplu de uimire si bucurie. Vislind prin torentul de platitudini si fantezii Metrosexuale marca Kanal 9, azi dimineata am dat de citeva cugetari programatoricesti ce cred ca au nevoie de un plus de mediatizare cum numai site-ul nostru le poate oferi.

Prima propunere codexpertica ne indreapta pasii spre reputata publicatie a doctorului Dobbs, unde reputatul Mark Nelson, ce ne-a mai delectat in trecut cu bijbiielile sale in lumea STL-ului, expune o metoda revolutionara de a automatiza login-urile in putty. Odiseea lui Mark zugraveste in culori tipatoare dirzenia unui erou pornit pe drumul consacrarii. El se ia la trinta cu toate obstacolele aruncate in cale-i de zei si soarta, descinde in pintecul bestiei si intr-un final o struneste magistral dupa ce-i umbla prin surse si-i infige un WM_COPYDATA direct in inima. Sigur, ce vrea el acolo se putea face un pic mai simplu folosind public key authentication, dar o poveste despre cum sa pui calea catre un fisier in setari SI ATIT nu e la fel de captivanta ca un poem epic pe 4 pagini despre perseverenta si viol.

Pentru a doua propunere raminem tot pe tarimul bunului doctor, caci Dan Saks, de profesie profesor profesionist, are o opinie si nu se teme s-o foloseasca. In fiecare secol se naste un geniu care schimba modul in care semenii sai privesc lumea. Dan isi depune candidatura pentru acest titlu cu un articol despre unde sa pui keyword-ul const. Pentru colectia de toamna-iarna 2000-2099, el ne propune un “stil neconventional”, spargind tiparele si preconceptiile pentru a redefini normalul si a lasa codul sa zburde liber si aspirational, scapat din ghearele ternei ambiguitati. Cam ca astea:

Practic Dan rezolva in acest articol ultima dar si cea mai mare problema a filosofiei esteticii gnoseologiei programarii. Generatiile viitoare nu-si vor mai pune intrebari despre CUM sa scrie codul, ci se vor preocupa doar de banalul CE sa scrie. Oricum, cred ca e timpul ca drdobbs.com sa se afilieze la AXTI, sa publice Regula 0 pe prima pagina si sa comaseze (sau consolideze, cum se zice acum) toate categoriile alea din stinga sub un singur stindard: “Working is the delight me, thinking is the disgust or revolting me”.

Ultima propunere a zilei ne trimite la un blog mesedenistic unde un indian neidentificat ne arata cum sa ne alegem algoritmul de sortare paralela. Intentiile sale sint bune, pina ajungem la cod si vedem ca singele indian apa nu se face:

std::vector<int> GetInputRandom(const size_t& numElems)
{
    std::vector<int> v;
    for(int i=0; i < (int)numElems; ++i)
    {        
        int e = i;
        if ((rand() % 2) == 0)
            e = -e;
        v.push_back(e);
    }

    std::random_shuffle(v.begin(), v.end());
    return v;
}

Sa-mi spuna si mie cineva de ce cacat ai vrea sa trimiti un intreg ca un pointer const, in loc sa-l trimiti direct. Obligi compilatorul sa puna intregul ala undeva in memorie (chiar si cind e o constanta), ca sa poata sa dea adresa lui catre functie, ca functia sa ia adresa de pe stiva si s-o dereferentieze ca sa obtina valoarea, iar adresa aia are fix aceeasi dimensiune ca intregul respectiv. Si e mai mult cod de scris. DE CE? De ce scriu oamenii “cod didactic” in halul asta, si de ce returneaza vectori by value, in loc sa-i trimita ca parametru? De ce nu face reserve sau resize pe vector, daca tot stie cite elemente va avea, si de ce isi da numElems ca size_t, daca stie ca ii trebuie ca int si il si casteaza la int cum il prinde? De ce acesti muisti invata generatiile urmatoare sa scrie cod in halul asta, si de ce sint lasati sa publice asemenea dejectii pe MSDN? Cine e seful astuia si de ce nu-l incuie intr-o pivnita fara internet, de unde sa nu poata otravi mintile fragede? Sau poate asa scrie indianul cod si in practica, si d-aia are nevoie Visual Studio de 5 ani ca sa porneasca?

Ca bonus, iata la ce se ajunge cind incepi sa returnezi vectori by value si pe drum vrei sa te dai si (cod)expert in C++11:

std::vector<int> sawtoothData(std::move(GetInputPreSorted(toothSize)));

Incredibil.

Acum vreo doua saptamini am mai vazut un articol (pe codeguru, parca) ce primise binecuvintarea codexpertilor in care un cretin explica pe 5 pagini cum sa faci un state machine si in tot codul pasa si returna vectori si string-uri by value. Mi-e lene sa dezgrop link-ul, dar cum pula mea ba? De ce au astia voie sa scrie articole?

Muie Internet.

 

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

Invataturile minerului Silviu Ardelean catre cine l-o asculta

Posted in Premiul n00bel on September 29th, 2011 by Mihnea

Ieri seara un incepator extrem de ghinionist s-a ratacit pe codexpert, punindu-si astfel serios in pericol sansele de a invata vreodata sa programeze. El a intrebat de ce compilatorul ii da eroarea “non-lvalue in assignment” in codul if(x%20=0).

Ovidiu i-a dat omului rezolvarea, dar Silviu a simtit ca e loc si pentru o contributie a sa, caci schema de desfasurare a discutiilor aprobata in sedinta plenara de consiliul suprem al expertilor este intrebare – raspuns (optional) – propunere. Ca si in episoadele anterioare, utilajul minier semi-autonom s-a activat la un cuvint cheie fara sa inteleaga contextul si a emis urmatoarea Cugetare Predefinita:

Aditional la cele spuse de Ovidiu iti recomand ca atunci cand ai conditii cu constante sa pui constanta in stanga. La astfel de greseli compilatorul iti va da peste degete inainte de-a rula aplicatia, evitand astfel de buguri: if(0 == x%20) …

Deci: daca scrii 0 = x%20, compilatorul iti va da eroare, spre diferenta de cazul in care scrii x%20 = 0, cind iti va da exact aceeasi eroare. Bug evitat! Vorba aia, Regula e Regula. In programare e ca-n minerit: trebuie sa te bazezi pe reflexe, nu ai timp sa gindesti.

Este amuzant si cum a ratat ocazia de a o da la intors spunind ca de fapt a zis altceva decit a zis. Daca n-ar fi ilustrat propunerea cu cod, ar fi putut pretinde ca vorbea despre cazul real in care se aplica gaozaria aia cu literalu’ in stinga, dar din exces de zel s-a coborit in mocirla concretului si acum nici nu se mai poate baza pe Ovidiu sa-l ajute cu “few cosmetics”. Ca tot ii plac lui citatele, o sa citez si eu din operele unui instalator cu care am avut mai demult onoarea sa port o discutie: “Meseria asta (mineritul, n.r.) e mai grea decit carnea de porc”. Amin!

Tags: , , , , , ,

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

Cadou

Posted in Regula 0 on September 21st, 2011 by Mihnea

Cu ocazia implinirii frumoasei virste de 31 de ani, noi cei din redactia Standup Programming ii uram lui Silviu Ardelean un calduros La Multi Ani! si ii oferim din putinul nostru un cadou ce speram sa exprime toata stima si consideratia pe care o purtam atit persoanei sale, cit si lucrarii pe care o infaptuieste printre noi.

Cum nu putem avea incredere in nici un serviciu de curierat sa trateze cu respectul cuvenit un asemenea artefact de pret, il rugam pe emblematicul miner sa vina personal sa-si ridice cadoul din Strada Vasile Lascar nr. 197, Sector 2, Bucuresti.

 

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

Revizorul

Posted in Regula 0 on September 21st, 2011 by Mihnea

Greetings, my friend. We are all interested in the future, for that is where you and I are going to spend the rest of our lives. And remember my friend, future events such as these will affect you in the future. You are interested in the unknown… the mysterious. The unexplainable. That is why you are here. And now, for the first time, we are bringing to you, the full story of what happened on that fateful day. We are bringing you all the evidence, based only on the secret testimony, of the miserable souls, who survived this terrifying ordeal. The incidents, the places. My friend, we cannot keep this a secret any longer. Let us punish the guilty. Let us reward the innocent. My friend, can your heart stand the shocking facts of…

 

Tags: , , , , , , , , ,

Standup programming in straie de sarbatoare

Posted in Regula 0 on September 21st, 2011 by Mihnea

Azi este o sarbatoare importanta in calendarul oricarui programator: ziua lui Silviu Ardelean. Standup programming va avea full coverage pe toata durata evenimentului, cu reportaje, retrospective si alte suprize mediatice.

Pentru inceput am dori sa marcam aceasta data cum se cuvine prin instituirea Zilei Nationale a Programatorilor. Este strigator la cer ca aceasta indeletnicire esentiala pentru societatea moderna nu are propria sarbatoare oficiala, si ce data poate fi mai buna pentru ea decit momentul nasterii emblematicului proponent de FAQ-uri? In acest scop am facut o petitie online, asa ca fuga la semnat.

In continuare il vom lasa pe maestrul de ceremonii Dimitri sa va introduca in atmosfera de petrecere:

PS: daca nu vedeti straiele de sarbatoare, F5.

Tags: , , , ,

Izbavirea programatorilor 3D e aproape

Posted in Premiul n00bel, Slagare internationale on September 19th, 2011 by Mihnea

Microsoft au mai avut de-a lungul timpului diverse idei nastrusnice gen Songsmith sau momente de imbecilitate absoluta gen MSI, dar acum incep sa cred ca le pune cineva LSD in brifcor. Dupa ce au transat problema shell-ului, aratindu-ne ca PC-ul a murit si viitorul apartine tabletelor pe care vei putea sa vezi poze fullscreen si cam atit (nimeni nu va scrie soft pentru tabletele alea, ca nu poti sa scrii soft pe tablete), acum au decis ca e timpul ca si Visual Studio sa capete niste glam. In speta, s-au uitat cu atentie la nevoile programatorilor 3D si raspunsul lor a fost asta (am link-ul de pe twitter de la codexpert, care l-au postat cu maxim de entuziasm, conform principiului ca daca nu intelegi ceva, probabil e cool):

Pe scurt, programarea 3D tocmai a devenit accesibila tuturor multumita urmatoarelor dispozitive revolutionare:

  • editorul ala inutil de imagini din VS care l-ar face sa se sufoce de ris pe un utilizator de Paint poate acum sa deschida DDS-uri. Ce mai, un vis devenit realitate.
  • VS contine un viewer de FBX-uri. In film ni se spune ca-i cel mai folosit format 3D sau ceva. Epic.
  • PIX e integrat in VS. Asta nu-i un lucru rau, dar evident nu se mentioneaza ca-i ceva ce exista de vreo 6 ani pe PC si 9 pe Xbox, ci este prezentat ca un feature nou.
  • au implementat un editor vizual de shadere. Nu pot nega factorul ridicat de coolness al zoom-ului aluia care iti deseneaza nodurile in 3D cu un model de preview deasupra, dar pot nega utilitatea respectivului editor. De fapt, pot spune ca te pisi pe el. O sa-l deschizi o data sa te bucuri cum face zoom, dupa care o sa descoperi ca e la fel de util ca mental mill si alte chestii d-astea. Artistii nu vor folosi in viata lor Visual Studio ca sa ia shaderele din pila, programatorii saraci vor vedea ca-i de jucarie si e prea mare bataie de cap sa-l integrezi in engine, iar programatorii bogati au Unreal.

Aceste cacaturi provin din plictiseala. Un programator plictisit s-a decis sa incropeasca un viewer de FBX-uri (care va crapa sau va desena spike balls cu 60% din fisierele pe care i le dai ca na, e FBX), PM-ului plictisit i s-a parut extraordinar de cool si asa a devenit un feature. Programatorul ala e rockstar acum, iar VS are inca niste bloatware in el. Edit and continue tot nu merge in 64 de biti si IDE-ul porneste tot de aproximativ 5000 de ori mai incet decit VC6, desi nu face mai nimic in plus. Numarul de programatori de DX care au nevoie sa vada FBX-uri in general este egal cu numarul de programatori care au nevoie sa vada FBX-uri in VS, adica 0, dar acest lucru este irelevant. Ce e relevant este ca putem sa ne aratam coolness-ul pe Kanal 69 intr-un interviu luat de un dobitoc platit sa spuna “wow” din 2 in 2 minute IN FIECARE FILM.

Revolutia a fost intimpinata cu urale de catre aplaudaci. theahuramaz​da ne arata ca intotdeauna e bine sa ai o opinie, chiar daca nu e bazata pe nimic:

I’m not a DirectX developer(dabbled a bit) but this does look very cool and extremely productive.

HeavensRevenge cistiga insa detasat cursa retardarii de saptamina asta:

Nice render tree! Please take notes from XSI (Autodesk Softimage) render tree editor since it is the king of Shader “tree” editors in my eye.

(Pentru fericitii care nu au avut de-a face cu mizeriile astea, editorul din Softimage este cel mai cretin lucru cu putinta, cu exceptia aluia din Max, care de fapt e un hack mincinos, deci nu se pune).

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