Concurs SuperEroul Bitdefender

Posted in 112, Regula 0 on January 20th, 2012 by jos8cal

Se pare ca divortul intentat de Silviu Ardelean celor de la Bitdefender i-a adus intr-un an de zile in pragul disperarii. Dupa 3 ani in care s-a luptat cu regula 0 pentru imaginea Bitdefender pe toate forumurile de programare interne si internationale, Silviu s-a retras subit, lasind in urma sa oameni dezorientati si fara reper moral. Contactat telefonic de redactia noastra, Nechifor Trepetnic, angajat Bitdefender, ne-a relatat cu vocea inecata in lacrimi:

Practic nu mai aveam identitate. Am fost decapitati moral si spiritual. Sincer sa va spun, nici nu stiam incotro sa apucam de suparare, asa ca ne-am intors la credinta celor din care ne tragem, adica la daci, mai exact la capul lor de lup.

Firmilian Aristobul, un apropiat al lui Silviu, a completat:

Trebuia sa anticipam plecarea lui Silviu dintre noi, ca nu de nebun isi inalta putin cite putin monitorul spre cer, in fiecare zi. Dar noi, nevrednici, am continuat sa-i exploatam abilitatile de diplomat.

Dorind sa ia atitudine, multinationala a dat zvon in tara, prin gura celor de la Creative Monkeyz, ca va oferi un Wacom Intuos 4 Medium acelui artist care va fi in stare sa conceapa un trup pe masura capului de lup. Iata ce au de spus cei de la CM despre asta:

tot ce trebuie e sa faceti e sa “produceti” o lucrare grafica originala, in care, SuperEroul Bitdefender, imaginat de voi, sa se prezinte in toata gloria. Trebuie sa fie un erou original – poate fi robot, umanoid, animal, leguma, fruct, strutzocangur, rinocerb, etc. (sidekick pentru Bitalau!?). Puteti folosi orice mijloace doriti – fie grafica digitala via Photoshop, Illustrator, etc. ; fie randari din programe 3D, sau desen traditional (also pictura sau fotografie).

Odata realizata imaginea, trimiteti-o pe adresa de email: concurscm@gmail.com. lucrarile selectate apar in concurs, implicit in galerie.

Pozele selectate vor fi expuse in toate galeriile din Valea Jiului, in limita orelor de program.

Noi uram succes tuturor artistilor cu aplecare spre pix.

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

Nevoia cunoasterii lui Dumnezeu.

Posted in Premiul n00bel, Regula 0 on January 7th, 2012 by jos8cal
Asa ai arata tu daca Silviu ar fi portretist.

Asa ai arata tu daca Silviu ar fi portretist.

Aceasta nevoie o simt de fiecare data cind citesc ceva scris de Silviu Ardelean. Si de fiecare data ma imaginez stind in fata lui Dumnezeu in timp ce ma proroceste, iar cind ar ridice ochii sa ma masoare, i-as fute una in coaie sa-l las lat pe jos. Si imobilizat asa de durere, sa-l intreb cum pula mea a reusit sa faca un specimen cu care nu te poti intelege, care se trighereaza pe cuvinte si nu intelege in pula mea nimic, niciodata. Orice subiect i-ar atinge sfecla, el cotrabaie in beciul mintii sa vada daca are ceva stocat din ce au spus altii despre ce se discuta si incepe sa-ti turuie cu o convingere de mai mai sa-i dai omor. Si tot timpul are un prieten care oricind poate garanta pentru spusele lui. Fie el un Assemblerman ori un Javaman, toti in general sint Dumnezei in ce fac si n-au altceva mai bun de facut decit sa faca propedeutica cu Silviu despre absconsa problema a pasarii optime a unui const char* la o functie.

De multe ori m-am intrebat cu Mihnea, cum e sa stai cu Silviu la o bere. Oare cit ai rezista sa vezi cum te izbesti subiect dupa subiect de un munte de ignoranta si prostie etalate cu o nonsalanta rar intilnita?

Am ajuns intimplator pe pagina de facebook a unui fondator Codexpert si observ ca omul empatiza cu durerea utilizatorilor de Eclipse, de Java, de Android si alte mizerii. Vad si poza botului de Silviu si incep sa citesc ce zice, moment in care am vazut negru (iarasi; pentru a cita oara). Iata cursul argumental al dialogului. Nu conteaza ca textul pe care se discuta era scris de Mihnea, ce conteaza e logica de mineriada:

“Nu numai ca pe Android trebuie sa scrii Java, acest limbaj conceput de si pentru copiii cu sindromul Down rezultati din relatiile incestuoase intre pigmei retardati; actul creator se petrece in Eclipse, un fel de editor de text care stie vag ca lucrezi la un proiect compus din mai multe fisiere, dar nu e niciodata sigur care sint fisierele alea, ce sa faca ca sa le compileze si cind.”

Si trinitatea de cuvinte Java, Eclipse, Compilator, au spawnat ortacul:

Silviu-Marius Ardelean Se vede ca autorul nu a ajuns sa lucreze in Eclipse. Daca o facea, ar fi constatat ca in Eclipse exista un mecanism de autocomplile on the fly.

Aici e momentul in care l-as arunca din cer pe Dumnezeu si l-as trimite sa copilareasca in Hateg, sa intre in mina calare pe un vagonet si sa moara pentru mine, sa reinvie si sa o luam de la capat.

Silviu-Marius Ardelean Un alt lucru inedit ce-l poti face in Eclipse cu Java e sa inserezi cod cand esti atasat la un proces (in anumite limite – cateva linii pe care le lasi inainte goale) si sa reevaluezi in mod debug portiunea de cod recent scrisa fara a fi nevoit sa pui noile binare si sa repornesti proiectul.

Pe linga ca nu este nici o legatura intre textul initial si dejectia Ardeleana, Silviu a reusit sa scrijeleasca pe peretii lui facebook o definitie a lui Edit&Continue, a lui HotSwapping, JRebel sau ce neamuri de nume retardate or mai fi in Java pentru Edit&Continue. Practic un FAQ de talie codexperta. Asadar, parafrazind:

Ce este Edit&Continue?

Silviu-Marius Ardelean: Edit&Continue este un alt lucru inedit, dar limitat, in care daca lasi citeva linii goale inainte sa compilezi, poti insera cod cind esti atasat la proces (deci nu pornesti in debug, ci te atasezi mai tirziu) si poti sa reevaluezi in mod debug portiunea de cod recent scrisa fara a fi nevoit sa pui noile binare si sa repornesti proiectul.

Intrebare pusa de interlocutorul sau: Deci au inventat si Eclipse debug and continue, sa inteleg.

Silviu-Marius Ardelean Ceva de genul dar mai transparent datorita autocompilarii si faptului ca nu era nevoie sa pun ultimele binare pe serverul remote la care eram atasat. Javaman ce mi-a aratat feature-ul era foarte incantat… :)

Il observam pe Javaman cum a pus capat zilelor negre in care zilviu impingea la vagonetul cu binare prin galerii.

Si ca sa fiu in ton cu inceputul de an, declar deschisa petrecerea sfirsitului lumii in 2012: Muie Dumnezeu.

Tags: , , , , , , ,

Invatati, Invatati, Invatati

Posted in Premiul n00bel, Regula 0, Slagare internationale on January 5th, 2012 by Mihnea

Sper ca sinteti abonati la lista de lecturi obligatorii a Partidului Codexpert Roman, unde muezinii Bancila si Cucu sufla zilnic in trompeta uzinei pentru a culturaliza masele de codexperti. Daca nu ati aderat inca, voi incerca sa va conving acum s-o faceti, prezentind citeva din recomandarile publicate de catre Primi Inter Pares.

In primul rind, ne este dat un link catre un articol in care Raymond Chen povesteste despre un asa-zis “for-if anti-pattern”. Imi pot inchipui cum formatorii de opinie din Codexpertia au schitat un zimbet condescendent dar incredul citind despre tendintele unora de a lua la rind elementele din directoare sau hash map-uri in cautarea unei valori. Cu certitudine nici cel mai prost aspirant nu ar scrie asemenea cod, nu? NU?

Ma rog, in asteptarea momentului in care Silviu va face apel la Regula 0 si Cucu il va bana pe Raymond Chen de pe codexpert, sa ne indreptam atentia spre o noua propunere din categoria Radio Erevan: [WinAPI] Cum aflu frecventa procesorului? Dupa cum ne-a obisnuit, sectoristul iscoditor nu se multumeste sa-si raspunda la intrebari cu un simplu “nu stiu”, ci insista sa ne demonstreze prin cod ca habar n-are. Prima metoda expusa de dinsul, in legatura cu care avea nedumeriri si acum 9 ani, nu reuseste sa ne dea valoarea exacta, dar se apropie. A doua metoda are avantajul de a fi mai “simpla”, dar din pacate are si un dezavantaj: returneaza tot timpul 0. Unii cititori vor spune ca decit gresit, mai bine deloc, insa altii vor sustine ca dimpotriva, mai bine ceva decit nimic. Gardianul Ovidiu lasa aceasta decizie de ordin filosofic la alegerea ta.

Si cum fara norme de buna purtare n-am putea face nimic pe lumea asta, ultimul imbold muncitoresc ne trimite la un articol in care Danny Kalev ne spune cum putem determina cu usurinta daca stim sa programam. Pe Danny l-am cunoscut intr-un episod anterior, in care ne arata ca nu stie ce face header-ul iosfwd, desi in CV se jura ca a fost baiat de comitet C++. De data asta el isi ia si mai in serios rolul de chibit, spunindu-ne ca n-ai voie sa faci clase cu mai mult de 8 metode publice, dind si exemplul std::string, care in opinia sa este de mare cacat si ar fi trebuit spart in mai multe clase care sa deriveze unele din altele. De asemenea, n-ai voie sa folosesti propriile containere in loc de std::map sau std::vector, deoarece Danny a citit pe Internet ca ce ni-i dat in STL este thread-safe si imbatabil ca performanta. Sigur, nu conteaza ca nu le poti folosi in interfata unui LIB/DLL/SO, ca majoritatea fac o alocare per element si se tiriie ingrozitor din cauza asta, ca poate ai nevoie sa fie lock-free, sau alte astfel de lucruri care ii preocupa doar pe inferiorii care scriu cod. In capul lui Danny conteaza ca au rvalue references, pentru a se comporta optim intr-o serie de cazuri in care oricum n-ar fi trebuit sa ajungi. Danny n-are timp sa scrie cod, e prea ocupat sa scrie pilde. A da, si n-aveti voie cu pointeri; daca ar fi dupa Danny, s-ar scoate de tot pointerii din limbaj si s-ar inlocui cu tipuri clasice, de exemplu vectori sau structuri.

 

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

De Sezon

Posted in Regula 0, Stand-up philosophy on December 25th, 2011 by Mihnea

A venit iar vremea retrospectivelor. Faptul ca Pamintul a mai dat o tura in jurul Soarelui de la ultima recapitulare transforma fiece cetatean intr-un Captain Hindsight inarmat cu concluzii, rezolutii si linii care se cer trase. Clisma de sfirsit de an pune punct Trecutului si-l pregateste pe om pentru Viitor.

Pai daca-i vorba de catharsis, catharsis sa fie. Oricum, nu pot rupe tacerea stinjenitoare ce se lasase pe-aci cu un articol despre micile scapari ale vreunui miner sau retorica mefecista a vreunui militian. Nu. Voi arunca o privire patrunzatoare asupra evenimentelor din 2011 si voi decerna premiile si calificativele meritate de catre fiecare entitate implicata. Deci:

Muie Silviu Ardelean

Pentru ca merita.

Muie Codexpert

Aceasta muie se confera pentru inca un an de dezinformat incepatorii, raspindit semi-adevaruri despre programare si dezvoltat un mediu dulceag-caldut in care minerii mici sa poata ecloza, iar cei mari sa poata creste si mai mari si improsca internetul cu puroiul lor cranian. Se acorda si premiul special Radio Erevan pentru efortul Gardianului Ovidiu de a-si pune Intrebarile Frecvente pe care nu le intreaba nimeni.

Muie Apple

Anul asta s-a lansat XCode 4, care e si mai abject decit 3. Fanboii l-au laudat pentru ca seamana mult mai bine cu iTunes si iti zice ce face intr-un control ce aduce a LCD. Intr-adevar, de mic imi doream ca IDE-ul meu sa semene cu un casetofon de masina. In continuare nu poti naviga intre surse cu tastele, crapa de 2-3 ori pe zi, refuza ocazional sa vorbeasca cu telefonul si trebuie sa restartezi tot, se sperie daca vede provisioning profiles facute de 3 etc.

Muie Google si Samsung

In programare exista un semn universal recunoscut al esecului absolut: sa incerci sa faci ceva ce au facut Apple si sa-ti iasa mai prost. Acest semn era prezis prin carti, dar pina de curind nimeni nu reusise sa atinga nivelul necesar de prostie. Google au ridicat manusa si au adus pe lume sistemul de operare Android.

Experienta dezvoltarii pentru Android face ca programarea pe iOS sa para un masaj erotic prestat de Scarlett Johansson. Nu numai ca pe Android trebuie sa scrii Java, acest limbaj conceput de si pentru copiii cu sindromul Down rezultati din relatiile incestuoase intre pigmei retardati; actul creator se petrece in Eclipse, un fel de editor de text care stie vag ca lucrezi la un proiect compus din mai multe fisiere, dar nu e niciodata sigur care sint fisierele alea, ce sa faca ca sa le compileze si cind.

Peste Eclipse vine Android SDK care este compus dintr-un emulator inutilizabil de incet si un plugin de Eclipse care la fiecare linie de cod da cu zarul sa vada daca sa crape sau nu, si in majoritatea cazurilor pierde. Au fost zile in care Eclipse a crapat de 20-30 de ori, fara a incerca lucruri avansate gen adaugat fisiere noi in proiect sau debug. Uneori cind il repornesti dupa ce crapa refuza sa compileze proiectul, spunind ca nu mai gaseste SDK-ul, ca unknown type java.lang.Object si alte d-astea. Atunci il mai restartezi de citeva ori, ca pina la urma o ia.

Lasind la o parte micile scapari ale mediului de dezvoltare, API-ul Android e facut de niste imbecili colosali. De exemplu, proprietatile si layout-ul controalelor se definesc in niste XML-uri. Unele chestii se pot seta si din cod, dar majoritatea nu, asa ca daca vrei sa faci chestii la runtime, Google iti recomanda sa sugi pula. Nimic nu e unde te astepti sa fie, dar nu pentru ca ar fi intr-un alt loc, ci pentru ca pur si simplu nu exista. Update-urile minore, de exemplu de la 3.1 la 3.2, iti distrug aplicatia pentru ca nimic nu mai merge ca inainte. Pentru a te ajuta sa suporti versiuni multiple, aplicatia iti crapa daca pui in XML-urle pulii ceva ce nu exista in versiunea pe care rulezi; din cod ai putea detecta versiunea si lua atitudine, dar cum ziceam, de acolo n-ai acces la proprietatile care conteaza, deci sugi.

Android este open source, adica in loc sa faca ceva care sa mearga, au luat de pe net chestii scrise de altii, pe principiul ca daca sint pe net, sigur sint bune. Google, fiind un startup cu banii numarati, nu isi permite sa dezvolte un decoder video, de exemplu. E mult mai bine sa foloseasca la maxim potentialul unui alt produs al lor, care chiar merge, pentru a localiza cu precizie o pagina care contine cuvintele “video decoder” si a downloada ce cod se gaseste pe acolo. Da, mai crapa aplicatia sau tot device-ul cind se termina stream-ul, nu merg chestii de baza gen schimbat aspect ratio in timp ce cinta, iti ia 3 versiuni majore sa adaugi suport pentru stream-uri live etc.; dar ce alternative aveai? Google nu crede in reinventarea rotii, daca se gaseste deja pe net una patrata facuta de un mester faiantar.

La tot acest haos se adauga si producatorii de hardware, care customizeaza jegul in functie de bunul plac si posibilitatile siliconului propriu. Campionii sint Samsung, care par sa-si recruteze programatorii exclusiv din rindurile indienilor care liciteaza 5 dolari la orice proiect pe rentacoder. In momentul in care incerci sa faci un player video pe un device Samsung incepi sa-ti doresti bug-urile simple, cinstite, pe care le vedeai pe alte device-uri, gen butoane care uita ce imagini au cind schimbi orientarea, sau controale care isi uita pozitia cind apare tastatura on-screen.

Google e privit ca un fel de Mecca sau Mensa al tehnologiei, unde procesul de angajare permite accesul doar celor mai stralucite minti, unde lucreaza Knuth (ala care scrie carti pentru inaltat monitorul, ca sa prinda si minerii contextul), unde primesti mincare gratis la prinz si-ti cultivi creativitatea. De la astia te astepti sa inteleaga ca daca vrei un lucru, trebuie sa-l faci. Mi se strepezesc unghiile cind trebuie sa-i recunosc cite un merit lui Apple, dar aia si-au facut singuri software-ul si hardware-ul si merg. Au inteles chiar si ca daca vrei IDE, trebuie sa-ti faci, ca dejectiile open source existente sint inutile; asta nu le-a mai iesit si au ajuns tot la o dejectie, dar macar au incercat. Google au incercat sa faca din Linux, gstreamer si Eclipse bici. Firma de programatori web, ce sa le ceri?

Va dati seama cum era Chrome daca nu le facea Apple engine-ul de HTML?

Muie Microsoft

Acum vreo 9 ani, Microsoft au zis ca C++ nu-i mai satisface intelectual si ca daca totusi vrei din C++ UI mai smecher sau feature-uri gindite pentru aplicatii web (dar nu aplicatii web propriu-zise), trebuie sa folosesti noul si stralucitorul Managed C++. Viitorul fusese trasat.

Vreo 2 ani mai tirziu, putinii oameni care au folosit mizeria au aflat ca e cazul sa se reorienteze, caci Stapinirea a infierat Managed C++ ca “deprecated”. La  schimb a fost oferit C++/CLI, care e net superior. Asta chiar e viitorul, credeti-ne de data asta!

Anul asta, Microsoft a anulat viitorul si a declarat inceputul Renasterii C++. C++/CLI nu mai e bun, aplicatiile se vor scrie de acum incolo nativ, in C++. Nu mai poti sa deschizi o pagina de MSDN fara sa ti se spuna asta. Totusi, cind te uiti prin exemplele de cod, numai C++ nu vezi. De fapt este C++/CX, o noua muie data de Microsoft limbajului. Dar sa vedeti, de data asta nu e ca data trecuta. Nu, nu, nu, asta chiar e viitorul, juram pe rosu. Ce, am mai zis asta? De ce sa privim in trecut, cind avem atita viitor de construit? Voi investiti in scris cod C++/CX si faceti-va aplicatiile sa depinda de el, ca noi sigur nu ne razgindim CEL PUTIN un an de acum incolo. CEL PUTIN!

Pentru a completa jignirea, evanghelistii o tot baga p-aia cu “at the interface” sau “at the border”. Aparent, C++/CX trebuie folosit doar cind vrei sa vorbesti cu OS-ul, si poate fi izolat acolo. Intre 99% si 99.9999% din aplicatie (in functie de evanghelistul cu care vorbesti) poate fi scrisa in C++ normal, si doar foarte, foarte rar vei recurge la un virf de /CX, drept condiment. In realitate, se vor scurge tipuri gen String din C++/CX in restul aplicatiei, sau vei muri de plictiseala facind conversii peste tot. De asemenea, e posibil sa constati ca logica de UI reprezinta, totusi, un pic mai mult de 1% din codul aplicatiei. Aceste lucruri nu-i preocupa pe evanghelisti, pentru ca ei nu scriu cod si probabil nici n-au scris vreodata.

Muie Digital Video

Compresia video nu-i un subiect accesibil minerilor. Conceptual e o chestie simpla, dar in practica sint miliarde de detalii, scenarii, profile si alte mui, astfel incit dureaza ani intregi sa scrii un codec modern. Asta este, evident, o mare timpenie.

Minerii sint perseverenti. Daca nu-i lasi sa scrie codecuri, se vor apuca sa faca containere. In fiecare zi se gaseste cite un bou sa remarce ca toate containerele sint de cacat (ceea ce e adevarat) si sa-si faca propriul container, convins ca va rezolva toate problemele (ceea ce e jenant). Unii din astia capata avint si sustinere, si astfel apar chestii ca MKV.

Rezultatul este ca n-ai nici o sansa sa faci un program de cintat sau procesat video. Inainte de a putea sa decodezi primul frame, trebuie sa ajungi la el, desfacind containere care mai de care mai ridicole, produse de programe imbecile scrise de oameni cu interpretari foarte liberale ale standardelor si specificatiilor. Daca totusi reusesti sa ajungi la frame-uri, problema se repeta, doar ca sint si mai multe variabile si e infinit mai mult loc pentru interpretari, bug-uri si alte inovatii. Sigur, poti incerca sa folosesti o biblioteca, cum ziceam mai sus ca au facut Google, dar nu faci decit sa schimbi un cosmar cu altul.

Uneori, printre aceste cacaturi digitale se mai strecoara cite o relicva analogica, gen frame rate-ul de 29.(970029) din NTSC sau codurile de Widescreen Signaling. Nu v-as dori vreodata sa ajungeti sa cititi specificatii scrise de oameni crescuti printre osciloscoape si condensatori.

Muie C++

Anul asta a fost definitivat in sfirsit noul standard C++, prilej de mare bucurie pentru unele paturi sociale care nu se descurcau prea bine nici cu vechea forma a limbajului, dar care vor putea propune acum inlocuirea enum-urilor si cu lambda-uri, nu doar cu vectori si structuri. Cu tot efortul, limbajul tot nu are un ABI si tipurile din STL tot nu pot fi folosite intr-un lib sau intr-o interfata. E induiosator cum se lauda Bjarne ca C++ este un limbaj excelent pentru construit biblioteci, dar eu cred ca e putin penibil ca nu poti distribui bibliotecile alea in forma binara. Uneori am impresia ca lumea e formata doar din freetarzi si ca e un grav faux pas sa afirmi ca vrei sa cistigi bani programind.

Din cauza ca nu exista ABI, exista COM. Din cauza ca COM este oribil si greoi, se nasc jeguri ca C++/CX.

Muie 2011

Tendintele continua: e din ce in ce mai greu sa programezi ceva, pentru ca OS-urile, bibliotecile, IDE-urile si limbajele ti se opun mai indirjit ca niciodata. De aceea, 2011 merita multa muie.

 

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

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