Asamblorul

Posted in Codare cu premeditare, Regula 0 on September 2nd, 2012 by Mihnea

Bogdan Ontanu este un subiect generos, dar n-am scris pina acum despre el deoarece si-a desfasurat activitatea in neoliticul Internetului romanesc, pe cind Ideile se impreunau cu Eterul prin intermediul conturilor moca de Xnet si doar la ceas de seara, ca atunci era mai ieftin impulsu’ la Romtelecom. Desi forma de protoprostie intrupata in Bogdan este bine studiata in mediul academic, n-am vrut sa va indrept atentia catre trecut, atita timp cit prezentul este intesat de atitia mineri, militieni, profeti si alte subspecii de intelectuali care se zbat pentru a ne atrage atentia. Iata insa ca Viorel, un codexpert cel putin atipic prin faptul ca se preocupa in principal cu raspunsurile la obiect, ignorind aproape total exemplul Cucuscian, a decis sa faca jonctiunea intre trecut si prezent. Cind un incepator pingarit de miinile negre ale minerului a intrebat de unde poate sa-si procure un asamblor pentru a-si pune capat zilelor, Viorel a raspuns:

Încearcă şi acest asamblor interesant:

Bogdan Valentin Ontanu, autorul acestui asamblor interesant si posesorul site-ului oby.ro, este un fel de Aristotel al mileniului 3: prozator, filosof, game designer, virusolog, parinte de sistem de operare dar, mai presus de toate, programator ASM. El si-a asigurat locul in cartile de istorie de la scolile ajutatoare cind, in 2001, a anuntat ca lucreaza la RTS-ul Hostile Encounter, ce va avea urmatoarele caracteristici:

  • cel mai tare RTS 2D
  • Jucabilitate mai buna sau la fel de buna ca Star [adica Starcraft, in caz ca v-ati prins dar nu vreti sa credeti – n.r.]
  • Cel mai tare AI ( cu invatzare, dropuri surprize)
  • Poveste originala, fulminanta (si culmea aproape reala)
  • scris in ASM

Inainte de a studia jucabilitatea, povestea fulminanta sau taria, sa ne intrebam de ce vrea Bogdan sa scrie tot jocul in ASM. Din fericire, FAQ-ul cu reminiscente codexpertice de pe site ne lamureste:

We know ASM well. ASM is also very easy to learn
Argumentul e cladit pe proverbul “drumul cunoscut e cel mai scurt”. Cu alte cuvinte, Bogdan nu e in stare sa invete altceva, asa ca foloseste ce stie, indiferent ce implica asta. Also, “we” adica el.

There will allways be ASM code in a GAME so: Why NOT write all in ASM?
Dupa ce a auzit la Teleenciclopedia ca 57% din corpul uman e apa, Bogdan si-a extras creierul si l-a inlocuit cu apa, devenind astfel al doilea cel mai cunoscut programator hidrocefal din Romania.

Speed is of the essence in GAMES. ASM is 100% up to 300% faster than today “optimized” compiler
Iata ca frica de compilatoare si masini de scris automate facea victime cu mult inainte ca Minerul sa-i dea glas pe codexpert. Sa vedem cum se traduce asta in practica:

Cerinte de sistem pentru Starcraft, scris in C++ de catre fraieri:

  • CPU: 90 MHz Pentium I
  • RAM: 16 MB

Cerinte de sistem pentru Hostile Encounter, scris in ASM de catre Bogdan Ontanu:

  • CPU: 400 MHz Pentium II
  • RAM: 64 MB

Nu rideti. Codul ASM al lui Bogdan chiar este de 3 ori mai rapid decit codul amatorilor ce utilizeaza C++, dar necesita de 4.5 ori mai multi megaherzi d-astia deoarece Hostile Encounter e de 3*4.5 = 13.5 ori mai bun decit Starcraft. Dovada in screenshot-urile alaturate:

Starcraft

13.5 * Starcraft

Sint sigur ca se vor gasi guri rele care vor spune ca screenshot-ul din dreapta arata de maxim 7-8 ori mai bine decit cel din stinga, nicidecum de 13.5 ori. Lor le voi atrage atentia ca ignora faptul ca desi este facut de amatori, Starcraft este, totusi, un joc lansat, pe cind Hostile Encounter este inca in dezvoltare, deci are suficient timp pentru a-si realiza potentialul. In plus, trebuie sa vezi jocul in actiune ca sa-ti dai seama ca performanta de 1350% nu e investita doar in grafica ci si in AI si in modul in care toate elementele se imbina fluid, rezultind intr-o experienta ce atinge dezideratul initial de “cel mai tare RTS 2D”. Din fericire exista un demo care poate convinge pe oricine.

Acum ca am stabilit faptul ca Bogdan este cu adevarat o minte luminata a programarii ASM si nu numai, este timpul sa ne aplecam asupra talentului sau de prozator, de unde izvoraste povestea jocului, “fulminanta si culmea aproape reala”. Fundalul actiunii din Hostile Encounter este un o imbinare magistrala a unor idei de baza din scientologie, crestinism, Lorin Fortuna si practic orice SF de cacat din ultimii 50 de ani, relatata cu maiestria unui elev care n-a trecut de clasa a 3-a desi a incercat de 8 ori. Opera este atit de complexa incit sfideaza orice tentativa de a face un rezumat ce ar putea incapea in acest articol, asa ca va invit sa cititi aici schita realizata de autor. Marturisesc ca eram cu sufletul la gura atunci cind Satana voia ca urmatoarea recolta sa aiba 7 “typo logical DNA code”, in timp ce Dumnezeu insista sa bage 12. Pentru cei care nu dau skip la dialoguri, avem aici inca 3 fragmente scrise in aceeasi limba frumos curgatoare a lui Shakespeares ce imping firul epic cu pulanul in coaste de la Iisus, gheizere sfinte si retele neuronale pina la Zamolxis si hackeri romani.

Printr-o inexplicabila si cruda omisiune a Divinitatii, talentul lui Bogdan cu pixul acopera doar sfera cuvintelor, nu si pe cea a formelor. Acest obstacol a fost insa usor depasit, caci s-a gasit imediat un suflet de artist care sa completeze sufletul de prozator-asamblor al subiectului nostru. Un suflet de artista, mai exact, caci slava pentru grafica de exceptie se cuvine Adinei, care, conform spuselor lui Bogdan, a si cistigat “premiul artistic” la concursul “SF Rom” cu o imagine din joc. Privind in galeria intitulata inexplicabil “Artwork” resimtim un sentiment de goliciune, caci din pacate concursul respectiv s-a pierdut in negura vremurilor si nu putem vedea celelalte lucrari care au participat si n-au cistigat. Imaginati-va doar cum erau alea, daca au fost declarate mai proaste ca asta (intutulata, intr-un act de suprema ironie involuntara, ugly_thing.jpg):

De ajuns insa cu Hostile Encounter. Desi e un capitol important din activitatea lui Bogdan, nu e singurul. Trebuie sa mentionam macar in treacat Solar OS, sistemul de operare scris de Bogdan in – ati ghicit – ASM. Dupa cum putem citi in parabola A Day with Solar OS, acesta este primul sistem de operare care pune o intrebare de ordin filosofic hackerilor:

Yes I know you can break me, but since it is so easy by design, there is also no glory in doing this… so why doing it? Creation and Construction my friend are much more honorable, valuable and harder to achieve than entering a simple house that has no locked doors or “windows”. Besides my core shell is read only, small, simple, fast and does not auto run nothing. How on this Earth are you going to convince me to compile and insert your code into my GUI Kernel?

Sublim. Un nou concept in sfera securitatii aplicatiilor: security by philosophy. OS-ul iti vorbeste de dincolo de “GUI Kernel” si face apel la umanitatea ta, ca o poezie de Elena Farago:

De ce m-ai prins în pumnul tau,
Hacker frumos, tu nu stii oare
Ca-s mic si eu si ca ma doare
De ce ma strangi asa de rau?

Fratii mei ceilalti se joaca
Cu hackerii toti, dar eu
Nu pot alerga ca dansii,
Ca sunt scris in ASM!

Bogdan Ontanu lucreaza in prezent la AVIRA, unde sper ca incearca sa patenteze aceasta manevra filosofica si s-o inglobeze in produsul antivirus al companiei.

Mai sint multe de zis despre acest Om Al Renasterii si din fericire avem unde: Bogdan are un forum dedicat ideilor si proiectelor sale. Recomand cu caldura parcurgerea sectiunii “Evolution of Human Race”, unde vizionarul programator ASM continua discutii de pe alte forumuri sub forma de monolog, atingind subiecte de interes maxim si dind solutii pentru iesirea omenirii din criza morala si materiala in care se afla. De exemplu, aici gasim o aspra critica la adresa CERN, care a construit degeaba LHC-ul. Daca l-ar fi consultat intii pe Bogdan, ar fi aflat in primul rind ca trebuia facut in ASM si in al doilea rind ca “whatever technological advancement we might achieve it does not matter until we do not solve our darkness inside“.

In caz ca n-ati inteles, va traduc eu: pentru Bogdan nu conteaza bosonu’ Higgs si compilatoarele, ca la el in minte e bezna.

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

AGI +1 CHA +5 INT -200

Posted in Slagare internationale, Stand-up philosophy on August 15th, 2011 by Mihnea

In 2001, un grup de nimeni suferind de Complexul Sf. Paul si-au cumparat un domeniu si au publicat pe el Manifestul Agil. Drept raspuns imi voi permite sa-l citez pe Eddie:

Dear Paul (Saint, apparently),

FUCK OFF!

Who are you? Why do you keep sending us letters? You arrogant bastard, to send a letter to an entire city! What do you want us to do, put this up on a board or something? Just fuck off!

Din pacate oamenii sint prosti si fricosi, asa ca jegurile astea despre prieteni imaginari si ritualuri care te scapa de moarte si/sau overtime si bug-uri prind repede. Zece ani mai tirziu avem o religie in toata regula bazata pe manifestul muistilor si practicantii sint la fel de agresivi si dezgustatori ca gunoaiele alea care se zbat sa bage creationismul in programa scolara la americani. Hasa diga Eebowai!

In caz ca ati locuit intr-o pestera pe Marte din 2001 pina acum si nu stiti ce-i Agile, o sa va explic pe scurt. Agile este o metodologie de project management care ne spune ca atunci cind avem de facut un proiect, trebuie sa-l spargem in task-uri cu dimensiuni de bun simt si sa le facem. Atit. Asta e singura chestie concreta din Agile. Serios.

Sigur, nu poti construi o religie doar pe o revelatie, chiar si pe una clar venita din sfere mai inalte, inaccesibile muritorilor de rind, cum e asta. Ai nevoie de profeti, misionari, adunari, organizatii, cuvinte magice, precepte, carti, ritualuri si prosti; multi prosti care sa infecteze si mai multi prosti cu Revelatia. In concluzie, Agile are SCRUM, Extreme Programming, stand-up meetings, sprinturi, porci, gaini, timeboxes, sashimi, scrum masters, kanban, kaizen, conferinte si un trilion de principii abstracte fara nici un fel de aplicabilitate sau relevanta practica. Da, porci; in caz ca nu stiti, in jargonul agil programatorii se numesc porci. Chestia asta ma face sa suspectez ca in agilitate e ca-n crestinism: aia de la virf sint niste infecti cinici care stiu ca totul e o mare vrajeala menita sa controleze prostii si sa le ia banii, dar simt nevoia sa-si si umileasca supusii ocazional pentru amuzamentul propriu, asa ca ii pun sa mearga in genunchi in jurul meselor, respectiv le spun ca numele Luminat pentru profesia lor este “porc”; porc imatur care pute, mai exact. Va explic mai jos cum e cu putoarea, dar pina ajungem acolo as vrea sa va inchipuiti ce misto e in prima zi de lucru intr-o echipa de agili, cind vine project managerul la tine si-ti spune ca esti un porc.

E amuzant sa vezi cum incearca victimele sa implementeze agilitatea in ograda proprie, dar cel mai amuzant e sa-i vezi p-aia care cred ca au reusit. Nu e nimic de reusit, pentru ca in afara de citeva ritualuri imbecile la care vom ajunge imediat, Agile este o metodologie care se remarca prin faptul ca nu specifica nici o metoda. Totul este optional si dupa ce dai la o parte metaforele jenante si citatele din karatisti si frecatori de menta chinezi ramii cu indicatii pretioase marca Captain Obvious gen aia cu despartitul in task-uri sau aia ca dupa ce faci niste treaba, e o idee buna sa ramii cu mai putine chestii de facut decit la inceput (pe bune, asta chiar e un pilon al agilitatii). Partea misto, ca la orice religie cu pretentii, este ca modul vag si intortochiat in care sint formulate directivele sacre baga in ceata mintea prostanilor practicanti, care inteleg ce pot si aplica cum vor, iar daca le iese, o pun pe seama agilitatii. Daca nu iese, e vina lor ca n-au respectat litera legii si n-au crezut cu suficienta devotiune in puterea agilitatii. Foarte misto e si cum discursul subiectilor trece de la “hai ba sa facem si noi o treaba” la ceai chinezesc, koan-uri, software crafstmanship, filmari pe balcoane si alte cacaturi gretoase.

Ajunsi in punctul acesta al analizei, se impune sa ne uitam mai cu atentie la profilul si activitatea celor care raspindesc cuvintul agilitatii in lume. Ce mari realizari au avut Parintii Agilitatii si ce proiecte indispensabile pentru umanitate s-au dezvoltat mai curat si placut uscat ca urmare a folosirii acestei metodologii? Ei bine, aia care chiar au facut software inainte sa devina agili (jumatate din ei se ocupa doar cu conferintele si datul cu parerea) au facut state de plata si site-uri. Acum nu ca ar fi ceva intrinsic injositor in proiectele de genul asta, dar totusi, mai dati-o in pula mea. Pai evident ca ajungi sa aberezi milioane de pagini si mii de ore de conferinte despre clienti care se razgindesc si programatorul social, daca tu faci site-uri de dating si agende pentru cabinete stomatologice. Nu-i chiar limita cunoasterii, virful tehnologiei, punctul focal al cercetarii in programare, nu? E vorba de cod care se scrie singur. Cineva trebuie sa-l scrie, dar nu conteaza cine. Normal ca incepi sa spui ca programatorii sint porci si conteaza mai mult sa fie “sociali” decit sa stie sa programeze, daca singurii programatori pe care ii cunosti sint aia care calculeaza impozite pe salarii. La fel de normal, daca esti manager la asemenea proiecte de mare angajament, te plictisesti si incepi sa-ti pui intrebari in legatura cu utilitatea proprie, asa ca inventezi metafore proaste si principii evidente, ca sa para ca faci si tu ceva important, nu doar te uiti intr-un excel la cite ore au lucrat porcii de programatori vs. cite ore te-au mintit ca o sa dureze. Totusi, e nevoie de un grad foarte mare de nesimtire sa bati dupa aia toba despre cum trebuie sa programeze oamenii si sa te dai in spectacol despre pair programming sau ce inseamna sa fii programator bun. Sugeti pula, ba. Eu nu vin la voi in birouri sa va spun cum sa mutati cartile la solitaire sau cum sa comandati pizza cind se lasa cu overtime, asa ca as aprecia daca nici voi nu ati lansa in eter pareri despre cum trebuie sa scriu eu cod, sau cum sa ma evaluez, sau cum se dezvolta software in general.

Ziceam mai sus de ritualuri si porci imputiti. Puroaiele astea umblatoare au descoperit ca atunci cind ai de scris cod atit de plictisitor incit ai prefera sa-ti smulgi unghiile decit sa mai stai un minut in fata monitorului, ajuta sa ai un coleg de suferinta. Asa au aparut “pair programming” si “collective ownership”. Pair programming inseamna sa stea doi porci la un calculator, ca atunci cind unul ajunge la limita plictiselii, sa preia celalalt. Ala care sta pe bara are rolul sa-l exaspereze pe alalalt spunindu-i cum ar scrie el codul daca ar fi la timona. Agilii nu pot concepe proiecte in care cineva chiar trebuie sa stea sa se gindeasca cum s-ar face ceva inainte de a scrie codul corespunzator. Ei nu cred ca pot exista experti in anumite domenii, pentru ca la statele lor de plata n-ai cum sa fii expert sau diletant. Daca poti sa aduni numere si te exprimi semi-coerent in PHP, stii tot ce va trebui sa stii vreodata pentru ca sa lucrezi la site-urile lor. De aici si ideea de “collective ownership”, adica oricare din porci poate prelua fara efort orice parte a banalitatii pe care o dezvolta cocina, ca doar nu-i nimic complicat, care sa necesite gindire sau cunostinte speciale. Si tot de aici si ideea ca nu conteaza sa fii programator bun, ci sa ai o personalitate agreabila. Si sa nu puti, si sa faci laba din cind in cind daca n-ai ce fute. Pun pariu ca nu stiati ca Bebe Sexologul si Laura Andresan au pus-o de o carte despre pair programming:

Personal hygiene and health are important issues when pairing. Cover your mouth when you cough. Don’t come to work when you are sick. Avoid strong colognes that might affect your partner.

Working effectively together feels good. It may be a new experience in the workplace for some. When programmers aren’t emotionally mature enough to separate approval from arousal, working with a person of the opposite gender can bring up sexual feelings that are not in the best interest of the team. If these feelings arise when pairing, stop pairing with the person until you have taken responsibility for and dealt with your feelings.

Revin la software craftsmanship, ca ma roade. Software craftsmanship inseamna, in mare, sa faci software-ul asa incit sa fie bine, ca-i mai bine sa fie bine decit sa fie rau. Sa n-ai bug-uri, sa scrii cod pe care sa-l poti citi si peste 6 luni, chestii d-astea la care nu v-ati fi gindit fara sa va zica agilii de ele. Evident, si craftsmanshipu’ asta are un manifest, ca fara un manifest si o petitie online nu mai faci nimic in zilele noastre. La fel de evident, nici o conferinta, nici un site si nici o carte de-a mesterilor nu-ti spune ce sa faci ca sa n-ai bug-uri, ci cel mult iti toarna niste metafore despre unit testing. In consecinta, am incercat sa semnez si eu manifestul cu “sugeti pula”, dar mi-a zis asta:

Astia, ba. Astia ne invata pe noi cum sa fim mesteri programatori, cind ei fac proiecte in care oricine poate face orice si nici astea nu le merg; panselutele astea care isi dau aere filosofice spunind cum urmarind textu’ din stinga au descoperit ca ala din dreapta e indispensabil. Mars inapoi la saiba voastra, ba gunoaielor. Nu intereseaza pe nimeni cum vi se pare voua ca trebuie scris codul.

Bonus: pe site-ul lui Aurel este in desfasurare o discutie despre agilitate. TV preacher-ul de serviciu este Mihai Lazar, un autodenuntat student indragostit de dotniet, care dupa ce zapaceste audienta cu citeva acronime si buzzword-uri bine plasate, termina in forta cu doua citate dintr-un mare emitator de metafore cu spectru larg, Bruce Lee:

Empty your mind, be formless. Shapeless, like water. If you put water into a cup, it becomes the cup. You put water into a bottle and it becomes the bottle. You put it in a teapot it becomes the teapot. Now, water can flow or it can crash. Be water my friend.

We don’t rise to expectations, we fall to the level of our training.

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

Cel mai iubit dintre Arhitecti

Posted in Regula 0, Stand-up philosophy on February 28th, 2011 by jos8cal

Asociatia pentru o lume mai buna a anuntat recent un master class la care pe post de Dumnezeu va fi un Dumnezeu care a pus umarul la inventarea cosorului pentru impletit cod. Educator si pedagog, el va fi pret de o saptamina ca un doctor care va sta la capatiiul arhitectului bolnav si va astepta pina acesta se va face bine, adica se va ridica pe picioarele lui!

Toti arhitectii vor merge acolo pentru reeducare! Adica sa invete o meserie din care sa se hraneasca pe sine si ulterior familiile lor. Cu ajutorul unui instrument ingenios, vor invata sa faca impreuna lucruri folositoare pentru oameni si pentru programatori in special. Caci meseria este bratara de aur! Si anume, vor invata sa impleteasca cod in general.

In ingeniozitatea lui, programatorul isi impleteste codul folosind briceagul, care ii permite mai apoi sa-si ievaluieze productivitatea la hectar de cod scris. Dar pentru asta, cineva s-a gindit cu capul lui sa vina in ajutorul programatorului si a inventat un instrument mai ingenios decit briceagul. Asa a aparut Cosorul.

Cosorul este format din doua parti: partea lemn-oasa si partea fer-oasa, iar pentru a invata sa-l minuiti corespunzator aveti nevoie de 2750 de euroi fara TVA. Spor la impletit!

Mai jos redam o bucata din editia precedenta a master class-ului care a avut loc la Slanic:

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

Portretul expertului la 30 de ani

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

Dupa ce a excavat problemele incrementarii si interschimbarii variabilelor, Silviu “Virgula” Ardelean a tras o flegma strasnica in palma, a pus mina pe tirnacop si a lovit din nou in programare. Gaura ce s-a cascat cind virful uneltei a interactionat cu realitatea i-a aratat o lume cu totul noua, pe care n-o mai intilnise pina atunci in cariera sa: lumea fisierelor.

La capatul a 9 ani de succese si progres continuu, Silviu a fost nevoit pentru prima data sa afle dimensiunea unui fisier. Un perfectionist ca el are datoria morala de a utiliza numai solutii optime, dar sa nu credeti ca atunci cind le descopera, le tine doar pentru el. Nu. Silviu este in primul rind un Invatator, o persoana care nu s-ar da inapoi de la nimic pentru a se asigura ca si ceilalti programatori care au nevoie sa incrementeze variabile sau sa afle cit de mari sint fisierele stiu cum se face asta optim. Si cine stie, poate intr-o zi, daca scrie suficiente articole d-astea de indrumare, va primi si el o diploma d-aia de Invatator Microsoft cum au prietenii lui (link-ul duce la Wikipedia deoarece momentan pagina oficiala a Invatatorilor nu merge, probabil intr-un gest de solidaritate cu Ronua, care fiind site-ul unora care fac site-uri, merge cam 2 zile pe saptamina).

Pilda de azi poarta titlul File size fast detection si a fost inscrisa in ceaslovul tehnic al marelui formator de programatori. In textul sau se vorbeste despre multitudinea de optiuni prin care un programator putin naiv (naiv pentru lumea in care traim), asa cum a fost si Silviu odata, ar putea sa-i puna calculatorului intrebari despre “una din cele mai importante proprietati” ale unui fisier: dimensiunea sa. Inarmat cu legendara sa inteligenta, Silviu isi croieste drum prin acest adevarat hatis de functii, si ajunge la urmatorul cod:

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

#ifdef WIN32
   struct _stat buf;
   nSize  =  (_wstat( szFilePath, &buf ) == 0) ?
      buf.st_size : -1;
   if (S_ISDIR(buf.st_mode)) nSize = -1;
#else
   struct __stat64 buf;
   nSize  = (_wstat64( szFilePath, &buf ) == 0) ?
      buf.st_size : -1;
   if (S_ISDIR(buf.st_mode)) nSize = -1;
#endif

   return nSize;
}

Haideti sa incercam sa deslusim impreuna vorbele duhovnicului-ortac, ca si cum am fi la un codecamp. In primul rind, el ne spune ca:

there are a lot of API that allows finding this property, but major needs additional file operations: open file, find file size and close file.

Asa ceva nu-i acceptabil. Daca maiorul are nevoie sa deschida fisierul, minerul va cauta o alternativa. Si tot cautind el, a dat peste _wstat(), care nu are aceleasi nevoi ca perversul maior, deci e “fast”. Dat fiind gradul avansat de analfabetism pe care-l manifesta indrumatorul nostru, e greu de spus la ce s-a referit exact cind a spus “fast”. Probabil se gindea la timpul de executie, un subiect drag inimii lui, caz in care ma declar profund dezamagit de faptul ca tocmai el, un cititor autoproclamat al surselor STL-ului (in care e expert de 9 ani, sa fie clar), n-a citit sursele CRT-ului, acest Vechi Testament al programarii. Ca si in adevaratul Vechi Testament, unde Doamne-Doamne bea in fiecare dimineata laptic plus dupa care isi scoate evreii la un meci de ultra-violenta cu restul Creatiei, CRT-ul ne dezvaluie ororile lui _wstat(), care isi petrece o buna bucata din zi extragind si procesind date care n-au nici o legatura cu dimensiunea fisierului. Fast indeed.

Sigur, dupa cum ne-am invatat deja, Silviu nu greseste niciodata, motiv pentru care ii este si foarte usor sa-si recunoasca greselile cind e cazul. Riposta lui la defaimarea din paragraful anterior va fi ca prin “fast” vroia sa spuna “putin de scris”, deci e “fast” de dezvoltat aceasta functie de o importanta capitala, pe care trebuie s-o dezvolti de sute de ori pe zi cind ai 9 ani de experienta in C++. O solutie care sa foloseasca FindFirstFile() ar incetini dramatic viteza cu care Silviu zboara prin cod la multinationale, pentru ca ar avea o intreaga linie in plus pentru inchisul handle-ului.

Totusi, partea cu adevarat savuroasa din codul asta nu e cit de “fast” sau “nefast” e apelul la _wstat(), ci #ifdef-ul ala cu WIN32. Uitati-va bine la el, caci cu greu se poate gasi un exemplu mai concis al incompetentei minerului. In primul rind, e vorba de incompetenta la nivel practic: Silviu habar n-are ca macro-ul ala e definit implicit prin setarile proiectului si in configuratiile de 64 de biti, deci partea a doua n-o sa se compileze niciodata (eventual doar pe platforme diferite de Windows, care din pacate n-au _wstat64() deloc). El se va apara spunind ca “n-are un compilator in cap”, cum a mai facut-o. Intr-adevar, este un efort supraomenesc ca inainte sa postezi niste gunoi pe internet, sa incerci sa-l compilezi ca sa vezi daca merge, sau sa te uiti in MSDN la cum se diferentiaza build-urile de 64 de biti de alea de 32.

Si mai misto decit necunoasterea acestor lucruri practice de catre un expert cu 9 ani de multinationalism in spate este logica gresita care a stat la baza testului aluia cu #ifdef. In capul minerului, functia _wstat64() este inseparabila de un OS pe 64 de biti. Daca ai OS pe 32 de biti, dimensiunea fisierelor se tine pe 32 de biti. Daca e pe 64, se tine pe 64. Este imposibil, inuman si imoral sa ai un fisier mai mare de 2 GB pe un OS de 32 de biti (macar daca returna un tip unsigned, sa aiba limita la 4 GB, dar nu s-a putut). Un asemenea fisier i-ar provoca lehamite lui Silviu si l-ar determina sa scrie un post despre el pe blog-ul de atitudine, sub tag-ul “demagogie“.

Minerul e abonat la blog-ul nostru si timpul sau de reactie este de ordinul minutelor. Deindata ce va citi ce-am scris aici, expertul isi va folosi cunostintele acumulate cu sirg in aia 9 ani pentru a intreba in stinga si-n dreapta cum sa corecteze timpenia pe care a scris-o. Dupa ce va repara codul de pe blog (uitind sa mentioneze cine i-a pus iar vagonetul deraiat inapoi pe sina, cum a mai facut), va corecta si in softul la care lucreaza pentru Bitdefender, unde probabil ca tocmai a scris abominatia aia. Imediat dupa aia o sa dam mail la Bitdefender sa le cerem bani pentru training-ul pe care il facem de citeva luni bune cu programatorul lor “senior”, expert in C++, STL, CRT si Visual Studio si – speram cu totii – viitor MVP.

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