Antisilviul

Posted in Regula 0, Stand-up philosophy on February 1st, 2011 by Mihnea

Incepem ziua cu o veste buna: Marius Bancila si-a corectat gogorita cu fisierele de care ziceam ieri. Inca o fapta buna in numele dreptatii, inca un cap al hidrei retezat. Go Captain Standupprogramming!

Intre timp in subteran, Silviu “Zhàozhōu” Ardelean, cu tirnacopul intr-o mina si mu (無) in cealalta, continua sa dez-intrebe intrebarile calugarului retardat viorel2005:

Invatacelul Viorel: Problema este acum cum modific valoarea unui const int in Visual C++ 2010?

Maiastrul Silviu: Ce intelegi tu prin const int?

Galeria ar fi ramas tacuta si intrebarile ne-dez-intrebate de nu s-ar fi gasit un Dl. Problema sa rascoleasca praful ce abia se asternuse pe florile de mina. Trezit din somn, unul din experti l-a admonestat prompt de sub invelisul protector al contului de administrator (ca tot le place lor sa spuna ca nu se ascund dupa nick-uri):

Ce-i aia “LLE”?
Inainte de a posta citeste te rog “Inainte de a posta“!

Lasind la o parte faptul ca Gardianul Ovidiu si-a mascat doar numele, nu si stilul inconfundabil in aceasta comunicare, haideti sa citim Inainte de a posta inainte de a posta, ca sa nu ne aposteze pe viitor Ovi daca vrem sa postam un post. Pe linga banalitatile uzuale regasite in regulile oricarui forum, Marius Bancila a adus cu el de pe muntele Sinai si urmatoarea gema:

Atunci cand doriti sa raspundeti la o intrebare, asigurati-va ca:

  • raspunsul este in acord cu intrebarea formulata; evitati raspunsurile sau mesajele in afara subiectului;
  • raspunsul aduce ceva nou celor anterioare; evitati sa raspundeti cu aceleasi informatii care au fost deja oferite;
  • sunteti familiar cu subiectul discutat; nu oferiti raspunsuri bazate pe pareri sau impresii; daca nu sunteti sigur de ceva, specificati acest lucru;
  • sunteti cat se poate de clar cu informatiile furnizate; evitati crearea unor seri de intrebari si raspunsuri care sa aiba ca scop clarificarea unui raspuns anterior dat.

Mie mi se pare amuzant cum punctul 3 descalifica aproximativ 99% din experti din cursa pentru postul de Raspundac in orice subiect legat de programare, dar amuzamentul nu se opreste aici. Si mai tare e cum au reusit sa creioneze atit de exact Antisilviul: omul care stie despre ce vorbeste, nu copiaza raspunsurile anterioare si explica clar solutia. Cu toate astea, nu stiu cum se face ca Regula Antisilviului (Regula -1, daca ar fi sa pastram ordinea cronologica) nu este aplicata, insa Regula Silviului (“Nu faceti misto de prosti”, a.k.a. Regula 0) este invocata iar si iar.

PS (adica “post scriptum”, Ovidiu): mesajflaviu a vrut sa intre si el in rindul expertilor postind FAQ-ul Cum pot face download/upload de fisiere in MFC. Din pacate n-am fost pe faza si expertii l-au sters inainte sa apucam sa ne delectam cu el. Daca va grabiti puteti vedea inca urmele sale pe prima pagina a comunitatii expertilor, jos la “Ultimele FAQ-uri”. Nu ne indoim de faptul ca stergerea a fost justificata, dar ne intrebam cit de grandioasa era aberatia, de s-au prins pina si expertii ca trebuie retezata de la radacina. Inchipuiti-va ceva si mai prost decit ce a stat aici timp de un an pina ne-am sesizat noi, sau mai idiot decit asta.

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

A patra corectura

Posted in Codare cu premeditare, Premiul n00bel, Regula 0, Stand-up philosophy on November 27th, 2010 by Mihnea

Truda afunda continua in galeria sapata de Silviu Ardelean. Cu ajutorul cititorilor nostri a reusit sa-si corecteze si “micile scapari” legate de character set, a aflat de FindFirstFile() si chiar a incercat sa trateze path-urile care contin wildcard-uri, lucru care nu prea i-a iesit. In momentul de fata, codul pentru cazul in care nu vrei sa folosesti WinAPI este:

long long GetFileSizeFast(const TCHAR *szFilePath)
{
    if (!szFilePath || !szFilePath[0] ||
        !PathFileExists(szFilePath))
        return -1;

    long long nSize = -1;
    struct __stat64 buf;
    nSize  = (_tstat64( szFilePath, &buf ) == 0) ?
        buf.st_size : -1;
    if (S_ISDIR(buf.st_mode)) nSize = -1;

    return nSize;
}

Sigur, ne-am putea intreba de unde frica asta de WinAPI, avind in vedere ca _tstat64() e o functie care exista doar pe Windows, deci oricum poti sa te bazezi ca ai WinAPI la dispozitie. De asemenea, ne-am putea intreba cum eviti folosirea lui WinAPI, cit timp chemi PathFileExists(), o functie WinAPI. Cei mai circotasi ar putea comenta chiar despre inutilitatea apelului la PathFileExists(), avind in vedere ca functia _tstat64() trateaza singura caile cu wildcard-uri prin ele. Eu va spun doar atit: “mici scapari”.

In cazul in care nu tinem sa scriem cod portabil cu functii care exista doar pe Windows, miinile negre ne intind si o varianta cu WinAPI:

long long GetFileSizeFastest(const TCHAR* szFilePath)
{
    if (!szFilePath || !szFilePath[0] ||
        !PathFileExists(szFilePath))
        return -1;

    WIN32_FIND_DATA sFileData;
    HANDLE hFind = FindFirstFile(szFilePath, &sFileData);
    if (hFind == INVALID_HANDLE_VALUE)
        return -1;

    FindClose(hFind);

    return  (sFileData.nFileSizeHigh * (MAXDWORD+1LL)) +
        sFileData.nFileSizeLow;
}

Din nou clevetitorii ar putea sa se intrebe cum e functia asta “Fastest”, daca ea interogheaza filesystemu’ de 2 ori despre fisier. In cei 9 ani care l-au facut expert in C++, Silviu n-a invatat inca sa compare string-uri; vorba aia, abia a aflat despre fisiere, sa avem un pic de rabdare cu el. Inca o data: “mici scapari”.

Intr-unul din comentariile pe care probabil le va sterge in curind, minerul a marturisit ca lucreaza la o aplicatie care valideaza numele de fisiere folosind expresii regulate. Stie ca se poate si fara, dar nu e “profesional”. Chestia asta suna intr-un asemenea hal, incit ma tem ca ar putea sa fie o tentativa de sarcasm din partea lui, poate chiar prima in cei 30 de ani de cind e expert in Atitudine. Daca e pe bune, e doar o noua “mica scapare”, nimic grav.

Problema e ca se cam aduna “micile scapari” si ca numarul lor creste dupa fiecare corectura, in loc sa scada. Cam de cite “mici scapari” o fi avind nevoie pentru a realiza ca de fapt are de-a face cu o “mare scapare” in ceea ce priveste programarea?

Retorica aceasta este flasca, evident. Puroiul are o intreaga pleiada de justificari pentru faptul ca de 9 ani si 4 zile nu reuseste sa scrie o functie care sa afle dimensiunea unui fisier. In primul rind, in mintea lui (pardon, a unui “prieten”) e acceptabil sa publici cod care nu se compileaza, pentru ca ala care-l ia trebuie sa mai munceasca si el, futu-l in gura de oportunist. Cu alte cuvinte, cind unu’ e asa de incepator incit cauta pe net cum se afla dimensiunea unui fisier, in mod cert este calificat sa recunoasca cazurile limita care pot aparea si sa le trateze singur (sau sa stie cum sta treaba cu WIN32). Silviu i-a aratat ce era mai important, si anume numele unei functii. Mai departe se descurca incepatorul ala, desi Silviu nu s-a descurcat, cu toti cei 9 ani de dat la tirnacop cu care se lauda. Cred ca asta insemna “and staff” ala de dupa pleonasmul cu “CRT run-time library”.

Un suflet mare a incercat sa-i explice ca lumea are tendinta sa te creada prost daca publici prostii, aratind chiar cu degetul in directia lui Bullschildt, dar Silviu nu e un om care sa faca legaturi (desi ocazional il mai paleste cite un moment Poirot). Putem doar specula motivul pentru care Silviu n-a sters acel comentariu eretic si speram ca-i implicat un anumit tip de morcov, dar oricum, a explicat pe blog-ul de atitudine de ce are el dreptul sa faca pe Domnul Trandafir:

În cariera mea am întâlnit mulţi oameni talentaţi, foarte buni profesionişti, dar la toţi am văzut slăbiciuni tehnice. Cu siguranţă şi Mihnea are, la fel cum am şi eu.

Trebuie sa recunosc ca asta m-a enervat un pic. Acest Pitic Porno al forumurilor romanesti de programare, care nu stie sa caute intr-un map sau sa afle dimensiunea unui fisier, poate vedea “slabiciuni tehnice” la altii, pisa-l-as in inima. Mai mult, lacunele mele le scuza pe ale lui, chiar daca ale lui sint in subiecte care i s-ar parea banale unui elev de liceu, iar pe ale mele poate doar sa le conjectureze in baza filosofiei “nimeni nu-i perfect”. Desi i-am mai explicat de vreo doua ori, el continua sa ignore faptul ca eu nu scriu tutoriale, deci nu conteaza cit de incompetent sint. Cind scrii ceva, nu te raportezi la ceilalti gaozari care scriu timpenii pe codeguru sau pe blogurile lor “tehnice”, bai pula. Te raportezi la rezultate, ca programarea e o stiinta exacta, nu e expresionism abstract. Daca postezi cacaturi care nu merg si pe care nici tu nu le intelegi, puti demonstrabil a prost si faptul ca mai sint si altii ca tine nu e o scuza.

Tot in ultima lui luare de pozitie, ortacul revine la o tema mai veche, cea a Adversarului Colectiv. In urma cu ceva vreme el era convins ca jos8cal si cu mine sintem aceeasi persoana pentru ca ne luam de timpeniile lui, desi acum neaga ca ar fi zis asa ceva. Acum ma face pe mine raspunzator de faptul ca cineva a pus niste cod gresit intr-un comentariu la el pe blog. Aparent eu trebuia sa ma iau si de ala, dar n-am facut-o pentru ca si eu gresesc, sau ceva; n-am inteles, logica subterana imi scapa uneori. Minerul n-a priceput inca faptul ca tintele predilecte ale acestui blog sint oamenii care persista in prostie chiar si dupa ce li se spune ca ar fi mai bine sa stea in banca lor si sa se rezume la pus intrebari, iar el primeste atit de multa atentie pentru ca e cel mai penal reprezentat al acestei subspecii.

In finalul justificarii si-asa destul de dezlinate, Silviu recurge la o manevra des intilnita la imbecilii ramasi fara argumente: expresia “m-am plictisit”. Laolalta cu acuza “f(r)ustratule”, sau eventual dupa ce aceasta se dovedeste ineficienta, aruncarea lui “m-am plictisit” intr-o discutie se face in speranta ca il vei inchide pe interlocutor cind realitatea iti e potrivnica, dar vrei totusi sa cazi in picioare. Pentru a completa starea de spirit in care era el cind facea apel la respect (din pacate a sters apelul intre timp), ma vad fortat sa reiau un pasaj liric citat de colegu’ jos8cal intr-un post mai vechi despre felul in care societatea si Internetul il dezamagesc zilnic pe Silviu:

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.

Deoarece un bou nu poate supravietui niciodata singur, Ovidiu “MVP” Cucu a tinut sa-si arate in mod subtil solidaritatea cu cauza mineriadei. Cititorii nostri fideli sigur n-au nimic mai bun de facut decit sa tina minte cum speculam acum citeva post-uri ca Ovidiu este cel care-l ajuta pe Silviu sa-si spele trecutul fara sa lase urme. Atasatul politic pe linga uzina Codexpert a decis sa-si dea jos masca, semnind citet ultima editare a periplului codexpertic al lui Silviu prin lumea fisierelor. Motivul trecut de MVP in condica este “Few cosmetics“. Asta e noul eufemism aprobat in Sedinta Extraordinara de catre AXTI pentru “facut sa mearga dupa un an”. Cosmetica e ce le va trebui lor daca Mos Craciun imi aduce anul asta aruncatorul ala de flacari de care-i tot zic.

PS: avem doua pagini noi la care se poate ajunge din coltu’ rusinii, adica din dreapta-sus: Idei in Monolog, cu citate din viata si opera personalitatilor din programarea romaneasca, si Intreaba-l pe Capitanul Kirk unde invitatul nostru semi-permanent Iacob Tiberu ia interviuri acelorasi personalitati.

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