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

Futurologie aplicata

Posted in Premiul n00bel, Regula 0, Stand-up philosophy on March 5th, 2011 by Mihnea

Noi in anul 2000
Cand nu vom mai fi copii
Vom face ce-am vazut candva
Toate visele indraznete
In fapte le vom preschimba
Vom fi mesteri iscusiti
Sa va facem fericiti
Pe voi parintii ce veti fi
La a doua tinerete in 2000

Web 2.0 este un mod de a folosi internetul inventat de Tim O’Reilly intr-o zi din toamna lui 2003, dupa ce bause la micul dejun 5 pahare de Guiness indoit cu Tullamore. Tim a concluzionat pe propria piele si pe banii lui ca al 6-lea pahar nu e o simpla diferenta cantitativa, ci un salt calitativ, caci in loc de 5 pahare goale cit se astepta sa vada pe masa, acum vedea cam 10. Tim si-a notat aceasta revelatie pe un servetel si a decis sa tina a doua zi o conferinta in care sa spuna lumii ca de la al 6-lea pahar incolo se cheama ca bei agheasma 2.0, chiar daca nu schimbi licoarea. Cind s-a trezit din nou pe inserat cu gust de placenta felina in gura si durere de cap 2.0 si-a dat seama ca o conferinta despre epistemologia trotilarii s-ar putea sa nu-l duca pe culmile faimei si bogatiei, asa ca a decis sa faca o schimbare de disciplina. El a aplicat acelasi principiu web-ului, un domeniu unde e mult mai usor sa monetizezi platitudini, iar restul e istorie.

Inainte de Revelatie, oamenii foloseau internetul pentru porn; in prezent, oamenii folosesc internetul tot pentru porn, dar acum nu mai merge butonul de back din browser. In afara de revolutia tehnologica ce a dus la caderea in dizgratie a butonului de back, Web 2.0 inseamna si o miscare ideatica ce doreste sa convinga societatea moderna sa se intoarca la obiceiurile anilor ’70, cind te conectai cu terminalul dumb la mainframe, desi un procesor cu mult mai multa putere de calcul decit vei avea vreodata nevoie costa azi cam cit doua pungi de pufuleti. A da, mai inseamna si Failbook, “web social” si alte eufemisme d-astea pentru cyberstalking.

Dar probabil stiati toate astea. Ce nu stiati, si veti afla acum, este ce inseamna Web 3.0.

Simpla existenta a lui Web 2.0 dovedeste cu rigurozitate aritmetica faptul ca va exista un Web 3.0. Numerele naturale nu se termina la 2. Rocky, Rambo si Robocop nu s-au terminat la 2. Star Wars nici macar n-a inceput inainte de 4. Practic, atunci cind Tim a pus numarul 2 in coada web-ului, el a inventat si toate versiunile care vor urma, { Web x.0 | x∈ℕ }. Noua nu ne ramine decit sa descoperim ce inseamna aceste web-uri deja inventate, ca sa nu ne ia prin surprindere atunci cind vor aparea.

In Romania, manusa a fost ridicata de worldit.info, o organizatie ce se auto-caracterizeaza drept “blog de tutoriale si articole de programare web, soft si photoshop, securitate, probleme de algoritmica si viata“. Dat fiind ca natura lui Web 3.0 este in mod cert o problema de algoritmica dar si de viata, worldit.info a organizat pe aceasta tema “prima conferinta online din Romania a pasionatilor de IT”, titulatura ce-mi aminteste de un afis din Zalau ce anunta deschiderea unui magazin pentru sudori si pasionatii de sudura. Conferinta s-a desfasurat pe IRC, un mediu cam medieval pentru subiectul futuristic ce urma sa fie abordat, daca ma intrebi pe mine. Din pacate mi-am planificat gresit timpul si pina am terminat de scris comenzile de BitchX pentru intrat pe server si facut un geam nou pentru canalul #rocybercon, conferinta se terminase (doar nu credeati ca o sa intru cu mIRC sau altceva, ca lamerii), asa ca standupprogramming nu a putut sa va ofere o transmisiune live de la conferinta. Voi incerca sa ma revansez acum cu o prezentare la rece a concluziilor.

Nostalgicii ce vor sa retraiasca clipele magice de pe canalele #bucuresti, #romania, #constanta etc. circa 1998 pot parcurge acest PDF (cel mai bine intra cu o coloana sonora potrivita). Pentru ceilalti voi face eu o introducere fortata in atmosfera:

[20:00] == Andrei [webchat@B43EC253.130FC46A.3CEC8F46.IP] has joined #rocybercon
[20:00] <Andrei> .op
[20:00] == mode/#rocybercon [+o Andrei] by Guardian
[20:01] <@Andrei> in primul rand Buna seara si bine ati venit
[20:02] == bcman [webchat@F92DF582.EC5945EF.96EEA9AC.IP] has joined #rocybercon
[20:02] == nutzu2010 [webchat@132ABC0C.1AC69BAC.EF37DABA.IP] has left #rocybercon []
[…]
[20:03] <@Andrei> Si cum suntem in 2011, consider ca e foarte bine sa incercam sa vedem cum va
decurge acest an in acest domeniu
[20:03] == Revelation [webchat@21ACC422.8C1DDB65.1DE3F0FD.IP] has quit [Quit: Page closed]
[20:04] <@Andrei> Subliniez ca informatiile va pot ajuta in vederea unor noi proiecte care sa se remarce de restul, in aplicarea la un job, in dobandirea noilor cunostinte
[20:04] == Revelation [s@21ACC422.8C1DDB65.1DE3F0FD.IP] has joined #rocybercon

Ma rog, intelegeti voi. Cam jumatate din timp vorbitorul a fost acoperit de scirtiitul usii pe care tot intrau si ieseau oamenii din sala de conferinte. Spre bucuria voastra insa, filtratul mental al mesajelor de join si part de pe IRC e ca mersul pe bicicleta, asa ca am putut parcurge log-ul pentru a extrage urmatoarele opinii despre Viitor:

<shady21> parerea mea ca web 3.0 v`a creea fiecarui utilazator o identitate proprie cat maiapropiata de cea reala lasand la o parte “masca ” din ziua de astazi ceva de genul “da esti altul in spatelemonitorului”

<Johane> Andrei, Eu cred ca web 3.0 va o chestie gen yahoo mesenger, dar mult, mult maibine integrata in OS

<Johane> Nu cred ca vom mai folosi browsere ci doar aplicatii mici cu procesare cloud

<sventek> Privesc web 3.0 ca perioada interactiunii utilizator – web. Însemnând ca paginileweb vor “învata” pe masura ce sunt accesate, toate paginile vor fi user-friendly iar totul va fi în realtime.

<bcman> eu zic ca ar fi util ca sistemele de operare sa se bazeze mai mult pe cloud dar nu sunt de accord cu OS care sunt tinute in cloud

<Dieliric> cloud nu foloseste cumva web 3.0?

<s3v3n> CUDA e doar folosirea GPU pe post de CPU .. kinda
<bcman> @s3v3n pai tehnologia ccuda e folosita pe serverele din nori

<Dieliric> si eu am dat exemplul cu CUDA a carei tehnologie este gratis fata de cloud care costa

<Dieliric> dar te rog sa te mai documentezi putin de tehnologia CUDA si despre cum se potface softuri bazate pe ea
<bcman> @dierlic stiu despre ea dar nu toti au cuda
<bcman> un server din nori il poate accesa oricine

<Andrei> hmm, nu e problema noastra asta. Problema noastra este – de ce nu putem fi noi ceicare cream noul Visual Studio pentru ceva nou? Trebuie sa fim smecheri si sa incercam sa intelegemtendintele si sa o luam inaintea altora

<Neo> ma scuzati daca devien de la subiect
<Neo> cine se pricepe la backtrack?

<ghitzZza> da, gama css3 cu svg si ecmascript inlocuieste tot flashul

Si asa mai departe. Rubrica “Flori de mina” incepuse sa puta a statut de cind cu tacerea inexplicabila a expertilor, dar cyberconferinta asta o va revergora viguros. Totusi, sa nu uitam intrebarea de la care am pornit: ce este acest Web 3.0? Ei bine, Web 3.0 este web-ul semantic:

<MarianPetre> suntem aproape deja la semantic web, 3.0
<George> ce reprezinta semantic web?
<Andrei> Semantic web poate fi noua arhitectura a proiectelor din 2011, o arhitectura ce se bazeaza pe colectarea a foarte multe informatii
<MarianPetre> data mining
<MarianPetre> unde masinile vor intelege informatia si o vor utiliza corespunzator
<Andrei> informatii care sunt organizate si se interconecteaza intre generand alte lucruri foarte interesante pentru utilizatori, practic calculatorul devine un micut robot capabil sa interpreteze tot ce te caracterizeaza

Tovarasi, trebuie sa va marturisesc ca nu sint entuziasmat de vestea asta. Cum ar veni, hipsterii care fac cacaturi gen noi2, twitter si failbook au terminat de distrus butonul de back si acum au facut o pasiune pentru corelat chestii. Chiar ma intrebam cit va mai dura pina cind unul din acesti mesajflavii ai internetului 2.0 va auzi de “inteligenta artificiala” si va decide ca asta e viitorul, ignorind ultimii 40 de ani de esecuri in domeniu. In viitor, paginile web vor trage concluzii despre tine pe baza cacaturilor pe care le postezi pe failbook si a geotag-urilor din pozele pe care le pui pe flickr. Daca ati folosit vreodata un sistem cu comanda vocala sau vreun gunoi care incearca sa interpreteze limbajul natural, probabil ca acum sinteti la fel de speriati ca mine. Aparent, s-a decis ca viitorul e asta, dar la scara universala; sisteme care reactioneaza la cuvinte-cheie, fara context, sau mai rau, care incearca sa inteleaga si contextul, pentru amuzament total. Si ca bonus, aceste sisteme vor fi scrise in Ruby de catre oameni care merg la prelegeri despre MVC si nu sint in stare sa tina in picioare un site gen twitter mai mult de 5 minute. Opriti internetu’, vreau sa ma dau jos.

In viltoarea conferintei, sau poate din cauza curentului facut de aia care tot intrau, ieseau sau doar bagau capul sa intrebe daca aici e camera unde se fac temele, conferentiarilor le-a scapat faptul ca printre ei se afla deja un “agent inteligent” care se straduia din rasputeri sa le arate potentialul web-ului semantic. Respectivul agent era un bot numit Cyborg, care credea ca lumea il pune sa caute chestii pe google atunci cind cineva scria “google”. De exemplu:

<Revelation> google buzz , yahoo pulse ambele esecuri..
<Cyborg> http://v-top-40.blogspot.com/2011/01/music-star-usher.html

<Revelation> google face asta deja
<Cyborg> http://www.youtube.com/watch?v=oqiGbTlQymU

<George> google o va duce la extrem
<Cyborg> http://www.euractiv.ro/uniunea-europeana/articles%7CdisplayArticle/articleID_18960/Lucian-Croitoru-In-2010-cresterea-economiei-va-duce-lacresterea-veniturilor-bugetare.-Creditarea-se-va-relua-dar-modest.html
<TheJudger> ignorati botul care a crezut ca vrei sa cauti ceva

Dar nu e nevoie sa privim asa de departe pentru a intelege ce dezastru ne paste. Am mentionat mai sus gunoaiele care incearca sa inteleaga limbajul natural – pai dragilor, trei sferturi din site-ul asta sint dedicate unui astfel de gunoi.

Cind a intrebat unu’ cum “vede” ce e intr-un director, Silviu s-a activat la cuvintul-cheie “a vedea”, fara sa inteleaga contextul. Silviul Semantic stie ca de vazut vezi cu ochii, asa ca i-a spus omului cum poate sa aduca pe ecran un geam care prezinta ochiului ce-i intr-un director. Cind a intrebat mesajflaviu cum schimba versiunea dintr-un exe, Silviu n-a inteles intrebarea, dar s-a activat la cuvintul-cheie “versionare”, si a pus-o de un FAQ (bine ca nu i-a zis-o p-aia cu versionarea in MDI). Cind a vazut ca doi useri de pe un forum ii spun ca bate cimpii, a corelat actiunile lor si a concluzionat ca ei sint de fapt o singura persoana. Ambele sale luari de pozitie impotriva noastra sint un lung sir de reactii pre-programate la cuvinte-cheie. Silviu are chiar si un modul de invatare si stie sa ceara detalii cind isi da seama ca nu intelege (foarte rar, din pacate, ca orice automaton).

Acum citeva zile se afirma pe programare.org ca un “agent inteligent” trebuie sa treaca testul Turing. Cu totii stim deja ca, gratie “inteligentei emotionale” cu care este programat, Silviu a trecut testul Kirk, o varianta a testului Turing dezvoltata de catre CNH Petrosani, asa ca si aici e cu un pas in fata propunatorilor web-ului 3.0.

Deci viitorul web-ului este Silviu Ardelean, “un micut robot capabil sa interpreteze tot ce te caracterizeaza”. “Sa interpreteze”, nu “sa inteleaga”. Cam de cacat, parerea mea.

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

Mineriada de la pagina 5

Posted in Premiul n00bel, Stand-up philosophy on March 3rd, 2011 by jos8cal

Citeodata unele afirmatii ma bintuie! Intrebarile sau raspunsurile ma plictisesc, dar afirmatiile ma ustura pe creier. De ceva vreme tot dau cu nidoflor pe urmatoarea afirmatie, care chipurile ar explica poza de mai sus:

Dupa cum se poate observa, la câte aberaţii spun, sunt “ignorat” de întreaga audienţă.

Afirmatia apartine protagonistului pozei, adica Silviu Virgula Ardelean si ar deslusi misterul paralelismului dintre masa si membrul superior. Dar eu nu pricep! Nu inteleg ce face Silviu acolo de atrage privirea intregii crisme.

Asa ca ma aplec spre domniile voastre, stimati trei cititori, (who touched me?) si va chestionez cu privire la ce credeti ca se intimpla sau discuta in poza aia? Pentru spiritele artistice, accept si poze explicatorii, ca nu-i asa, pina si Lumea a inceput cu unii privind la altii explicind poze pe pereti.

Cele mai bune explicatii sau poze isi vor urma propriul destin!

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

Purely Fabricated Interview Expert Pattern

Posted in Slagare internationale, Stand-up philosophy on February 21st, 2011 by Mihnea

Am aflat de la Andrei Ignat ca Scott Hanselman a publicat o noua lista de intrebari de interviu pentru programatori. Cred ca Hanselman asta e un fel de Ovidiu Cucu international, ca vad ca tot publica liste d-astea. Ca orice programator care se respecta, si eu sint constient ca pot deveni somer peste noapte, deci fac eforturi mari sa ma tin la curent cu ultimele evolutii in domeniul intrebarilor de interviu. Atasez mai jos raspunsurile mele la intrebarile lui, pentru cei 3 cititori din totalul nostru de 5 care nu sint membri pe programare.org. Scuzati limba lu’ Shakespeares, am zis sa nu break character.

What is SOLID?

YABA.

Why are patterns important?

Patterns are important because people who cannot program must be able to project importance by wielding pompous words.

Who are the Gang of Four? Why should you care?

The Gang of Four, also known as The Alpha Wankers, are four non-programmers who understood what power words are and applied the concept to programming. I care because Aurelian Popa told me that today it is more important to be “social” than to know how to program, and using pretentious jargon like “singleton” instead of “global variable” is a guaranteed way of improving one’s social status. They are not to be confused with the Wang-Zhang-Jiang-Yao group, whose name they borrowed in a spectacularly ill-advised stab at self-irony.

Explain the concept of Separation of Concerns and it’s pros and cons.

Separation of Concerns means that when you concern yourself too much with design patterns, you can stop being concerned about grammar. No man can understand the singleton pattern AND remember the basic rules of languages with immensely complex grammars such as English, so once you embrace the teachings of the Gang of Four, grammar becomes Somebody Else’s Concern. The first sign of this transcendence is putting an apostrophe in the possessive pronoun “its”.

Discuss the concept of YAGNI and explain something you did recently that adhered to this practice.

YAGNI is something YAGN, as it’s related to XP.

Are you still writing code? Do you love it?

No, I’m too busy calling my global variables singletons and speaking at conferences about it.

What do you do to stay abreast of the latest technologies and tools?

Hahaha you said breast!

How do you react to people criticizing your code/documents?

I punch them, fire them and/or write inflammatory posts about them on forums or blogs.

Whose blogs or podcasts do you follow? Do you blog or podcast?

Are blogs and podcasts design patterns? Never heard of them. Anyway, I like the color fuchsia, I am an open-minded person focused on self-improvement and my hobbies include hiking, music, reading and taxidermy. I hope this helps you determine if I’m a good programmer or not.

What is the last programming book you read?

I only ever read one, “Design Patterns”. I memorized every word. I don’t need to know anything else.

What’s so great about <cool web technology of the day>?

<generic answer>

How can you stop your DBA from making off with a list of your users’ passwords?

I didn’t know such sexual deviationism is so common among DBAs and anyway, why is that my problem instead of HR’s? Oh wait, you said “making off”, not “making out”. My bad.

What do you do when you get stuck with a problem you can’t solve?

The Design Patterns book is a complete list of solutions which are just waiting for problems. Unenlightened people approach programming the wrong way: they see problems and look for solutions. I use the sure-fire method of picking solutions from The Book and inventing problems for them. That way, I’m never stuck. Any feature or system which cannot be implemented in this way is ill-defined and not worth my concern in the first place. See also the “Separation of Concern” principle.

What’s the difference between a web server, web farm and web garden?

Wait, what? Web garden?

When do you know your code is ready for production?

When I have at least 157 design patterns in it.

What’s YAGNI? Is this list of questions an example?

Didn’t you ask this already?

Noile mele cuvinte favorite: Information Expert (a nu se confunda cu Code Expert), Pure Fabrication, Protected Variations.

LE (adica Later Edit, Ovidiu): hahahaha am aflat ce-i ala web garden. Redefinirea cuvintelor limbii engleze, in pula mea.

LLE: GoF au incercat sa si cinte la un moment dat. Punk, pentru ca si la muzica se pricep la fel de bine ca la programare. Iata-i aici prezentind pattern-ul “Old Grey Whistle Test”:

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

Da-mi taticule si mie o lopata si-o mistrie

Posted in Slagare internationale, Stand-up philosophy on February 19th, 2011 by Mihnea

Cei ce trec prin viata doar in plimbare
Uita ca exista si penitenciare
Unde nu-i soare si nu creste-o floare
Si doare cind musti din covrig

Nenumarati contabili au flatulat de-a lungul timpului perspective numerologice asupra traiului de programator, de la regula 80/20, care a fost aplicata sistematic si contradictoriu tuturor perechilor posibile de cantitati numarabile (dar nu neaparat masurabile) din aceasta ingrata activitate, pina la transpiratul 10/50/30/10. Eu propun o simplificare a acestor dihotomii, triotomii si cvadruplotomii ciomuistice: programatorii isi petrec majoritatea timpului facind cacaturi care n-au absolut nici o legatura cu lucrul pe care vor sa-l programeze.

Cea mai de cacat situatie in care te poti gasi ca programator este atunci cind trebuie sa cooperezi cu niste cod facut de altcineva, adica intotdeauna. In general tu vrei sa faci o chestie clara, dar pina sa ajungi sa scrii alea 2 linii care te intereseaza pe tine trebuie sa te bati cu sute de muisme care iti stau in drum: compilatoare, IDE-uri, SDK-uri, framework-uri, biblioteci, OS-uri si asa mai departe. In loc sa te preocupi de ce face codul tau, te chinui sa intelegi care din mizeriile de lib-uri pe care le folosesti fragmenteaza memoria intr-un asemenea hal ca nu mai vrea OS-ul sa-ti dea 20 de amariti de megi de memorie, cind tu ai commit size pe la 700 MB.

Mai deunazi, in uzina la noi se barbota cu sirg la un plug-in de Max care trebuia sa coopereze cu un alt plug-in, ce nu era al nostru. Acest alt plug-in avea amabilitatea de a oferi chiar un SDK, adica niste headere cu nume de variabile din maxim 2 litere si fara documentatie, deci nu se intrevedeau incidente. Totul a mers ca uns pina in clipa in care am chemat o metoda numita “Eval” si am luat unresolved external.

Vedeti voi, plug-in-ul nostru nu poate fi linkat cu lib-urile celuilalt plug-in, caci trebuie sa se incarce si daca plug-in-ul alalalt nu exista. Daca punem o dependinta statica catre DLL-ul lor, al nostru nu mai merge decit daca e si al lor instalat. In concluzie, trebuie sa incarcam dinamic un pointer la metoda aia s-o apelam doar daca exista, lucru banal in teorie. Procesoarele, aceste chestii de care in zilele noastre sint mai preocupati gamerii decit programatorii, chiar au o instructiune pentru apelat functii, deci n-ar trebui sa existe articole pe blog-uri despre asta, nu? Ei bine, pina la CPU exista C++, compilator si Max, iar retardarile lor combinate dau o retardare mai mare decit suma partilor.

O metoda e o functie ordinara careia trebuie sa-i pasezi cumva si this-ul pe sub mina. In functie de platforma, dinsul trebuie sa fie pus intr-un registru sau pe stiva. Pe linga instructiunea de apelat functii, CPU-ul, acest lucru magic, are in mod surprinzator si instructiuni pentru pus chestii in registri sau pe stiva. Problema e cum il convingi pe compilator sa le genereze cind tu ai un pointer la functia aia – pe care l-ai luat cu GetProcAddress() – si pointerul la obiect.

Intr-o lume ideala s-ar face ceva de genul:

// In expozitiune:
#ifdef _WIN64
const char* methodName = "?Eval@ClasaMuista@@QEAAMM@Z";
#else
const char* methodName = "?Eval@ClasaMuista@@QAEMM@Z";
#endif
void* method = GetProcAddress(dll, methodName);

// In desfasurarea actiunii:
ClasaMuista* instPtr = ...;
float arg = 0.37f;
float retVal;
#ifdef _WIN64
__asm
{
	mov		rcx, instPtr
	movss	xmm1, arg
	call	method
	movss	retVal, xmm0
}
#else
__asm
{
	mov		ecx, instPtr
	push	arg
	call	method
	fst		retVal
}
#endif

Deoarece nu traim intr-o lume ideala, un mintos de la Microsoft care crede ca procesorul e o legenda urbana s-a decis ca Visual C++ nu va avea inline asm in 64-bit. La momentul la care a fost proclamata, aceasta prostie fenomenala a fost intimpinata cu urlete si mui de catre cei afectati, dar pe Microsoft i-a durut la penis. Motivul oficial este la fel de retardat ca decizia in sine: cica nu poti scrie acelasi asm pentru 32 de biti ca pentru 64. Si ce? D-aia avem ifdef, in mortii lui de ifdef. Nu inteleg ce ii fute pe ei grija ca eu trebuie sa fac gimnastica cu ifdef. Daca trebuie, o fac. Alternativele propuse de mintos sint ori sa te descurci cu intrinsics, ori sa scrii codul intr-un fisier separat si sa-l compilezi cu un assembler. Aia cu intrinsics nu se aplica aici, dar si in cazurile in care se aplica o mai da in bara, caci VC nu e tocmai Tata Lor™ la tradusul intrinsic-urilor in cod (ceea ce ma mira foarte, caci de pe banca de unde stau eu mi se pare destul de usor sa produci cod optim din asa ceva, sau cel putin mult mai usor decit alte optimizari pe care compilatorul lor le face bine). P-aia cu assembler-ul extern nu vreau s-o aplic pentru ca mi se pare insultator sa fiu nevoit sa instalez masm sau alta atrocitate ca sa chem o functie.

Un scurt moment am cochetat cu ideea de a face un const char* cu opcode-urile unei functii care pune argumentele unde trebuie si cheama cacatul de metoda, dupa care sa indrept un function pointer spre el si sa-l chem, da’ cirpeala e cam mare, asa ca am zis sa o luam totusi pe calea ortodoxa: facem un pointer la un member function si-l chemam p-ala. Adica:

// Expozitiune:
typedef float (ClasaMuista::*EvalFunc)(float);
union
{
	void*		voidPtr;
	EvalFunc	funcPtr;
} p;
p.voidPtr = GetProcAddress(dll, methodName);
EvalFunc method = p.funcPtr;

// Desfasurarea actiunii:
ClasaMuista* instPtr = ...;
float retVal = (instPtr->*method)(0.37f);

Observam tigania cu union-ul, care-i necesara pentru ca n-ai voie sa castezi void* la pointer la metoda. C++ e retardat si-ti permite sa derivezi din mai multe clase de-odata, caz in care pointerul ala trebuie sa mai contina niste cacat pentru ajustarea corespunzatoare a this-ului. Desi Java a transat problema asta acum vreo 15 ani (spre surprinderea tuturor, caci e singurul lucru facut bine in Java), C++ inca n-a inteles ca numai cretinii deriveaza din mai multe clase cu date in ele. Ba mai mult, ca sa le dea apa la moara cretinilor, ofera si virtual inheritance, acest goatse al OOP-ului care pretinde ca te scoate din cacat cind diagrama ta de clase seamana cu Coloana Infinitului, dar de fapt sileste compilatorul sa produca cod de o uritenie rar intilnita. In fine, C++ n-o sa primeasca interfete doar pentru ca ma oftic eu aici in fata poporului (la urma urmelor, se chinuie de vreo 12 ani sa-i creasca closures si inca nu e gata), dar in cazul de fata toate aceste griji pot fi date uitarii, caci clasa cu care trebuie sa cooperam nu e derivata din nimic, deci pointerii la metodele ei sint pointeri normali. Deci rulam codul si crapa. Cu WTF-ul pe buze, privim in disassembly si ne minunam:

000000013F191043  movss       xmm1,dword ptr [__real@3ebd70a4 (13F1921B4h)]
000000013F19104B  movsxd      rcx,dword ptr [rsp+28h]
000000013F191050  add         rcx,rbx ; Tu cine pula mea esti?
000000013F191053  call        rax

Ce o fi cu acea adunare de colea, ce seamana izbitor de tare cu o ajustare a this-ului pentru multiple inheritance? In acest moment, ne revine din negura vremurilor amintirea ca VC++ are un flag care-ti permite sa fortezi toti pointerii la metode sa foloseasca formatul extins, cu offseti si cacat. Cautam in MSDN si aflam ca flag-ul se cheama /vmg. Privim in project settings, dar nu-i. Mai privim odata in MSDN si observam ca exista si un pragma care face acelasi lucru, moment in care vedem rosu in fata ochilor.

In acest punct de turnura al naratiunii trebuie sa vorbim un pic despre 3D Studio Max si programatorii care lucreaza la el, caci poate nu-i un subiect familiar tuturor. La Max au lucrat de-a lungul timpului cei mai prosti programatori care au scris vreodata cod. Banuiala mea e ca singura cerinta de angajare la Discreet/Kinetix/Autodesk este sa fi lucrat in prealabil la Yahoo Messenger. Proportiile prostiei celor care au facut Max-ul nu se pot descrie in citeva rinduri, insa pentru a va forma o idee pot mentiona ca absolut toti cei care au pus vreodata mina pe SDK-ul de Max, indiferent de nivelul lor de pricepere, au sfirsit prin a dori moartea violenta a dobitocilor care au gindit si implementat acest program de cacat care nu mai moare odata. As dori sa va pot arata niste cod din matele Max-ului, dar cica n-am voie ca NDA si mui.

Cind am vazut ca exista acel pragma, m-am gindit instantaneu la MAXScript. Acest infect limbaj de scripting este facut de cineva cu stofa de Silviu Ardelean, deci am avut o banuiala ca pe undeva prin mecanismul de expus functii C++ in MAXScript voi gasi muia aia. Am dat cu pragma pointers_to_members in virful headerului precompilat, si prompt VC++ mi-a zis:

c:\program files\autodesk\3ds max 2011\maxsdk\include\maxscrpt\..\maxscript\macros\define_instantiation_functions.h(55) : error C2285: pointers to members representation has already been determined – pragma ignored

Muie Max. N-am rabdare sa vad de ce crede dinsul ca are nevoie de cacatul asta, dar va pot garanta ca e gresit. Sigur au futut ceva prin alta parte si au cirpit-o in felul asta. Din cauza imbecilitatii lor, eu nu pot sa chem un cacat de functie.

Ajungind aici, eu m-am enervat si am plecat acasa, dar jos8cal a mai dat un ochi in pagina aia din MSDN care zicea cum e cu pragma si /vmg si a vazut ca mai exista o cirja cu care se poate abuza limbajul: keyword-ul __single_inheritance. Chiar daca un retard ii spune compilatorului sa faca pointeri de cacat, poti reveni la pointeri ordinari pentru clasele care te intereseaza punind keyword-ul ala in declaratie. Deci l-a pus, si a mers. URA AM REUSIT SA CHEMAM O FUNCTIE!

Sau nu. A doua zi, a trebuit sa repetam manevra intr-un plug-in de Maya. Maya nu-i facut de handicapati, deci nu-i nevoie de pragme si keyword-uri si alte chestii d-astea. Din pacate insa, el ruleaza si pe OS-uri de hipsteri si comunisti, unde rolul Domnului Trandafir este jucat de GCC. GCC nu se osteneste sa faca pointerii la metode sa fie pointeri chiori in cazurile cu imbecilitate redusa; dinsul foloseste pointeri d-aia extinsi tot timpul si n-ai cum sa-l rogi sa faca exceptii. Deci ce cacat facem?

GCC are inline asm si in 32 de biti si in 64:

// Expozitiune:
void* method = dlsym(dll, "_ZN11ClasaMuista4EvalEf");

// Desfasurarea actiunii:
ClasaMuista* instPtr = ...;
float arg = 0.37f;
float retVal;

#ifdef __LP64__
__asm__ __volatile__(
	"call *%%rax"
	: "=Yz"(retVal)
	: "Yz"(arg), "D"(instPtr), "a"(method)
	: "memory"
);
#else
__asm__ __volatile__(
	"push (%2)\n"
	"push %3\n"
	"call *%%eax\n"
	: "=t"(retVal)
	: "a"(method), "r"(&arg), "r"(instPtr)
	: "memory"
);
#endif

Singura manevra aici este sa afli cum se cheama constraint-urile alea pentru template-urile de ASM pentru fiecare clasa de parametru care-ti trebuie. Daca il intrebi pe goagal de “gcc inline assembly constraints”, pagina relevanta (adica asta) nu e printre hit-uri (e o pagina care duce la o pagina care duce la asta, totusi). Sint alte pagini insa, scrise de firtati de-ai lui Silviu care simt nevoia sa se exprime desi habar n-au despre ce vorbesc, si care-ti spun, de exemplu, ca constraint-ul pentru rdi este “di”.

Trebuie notat totusi ca am avut bulan ca functia vrea un singur parametru de tip float. In Linux 64-bit, parametrii de tip float se dau in xmm0, xmm1 etc. Exista un constraint pentru xmm0 (numit intuitiv “Yz”, cum se vede mai sus), dar pentru restul nu mai exista (e doar “x”, care inseamna orice registru SSE, adica il lasi pe nenorocit sa aleaga). Ca sa-ti dai parametrii in cazul ala, ii pui in variabile, dai adresele variabilelor, faci lucru manual cu movss ca sa le incarci in registri si pui registrii respectivi in clobber list. Nu ca ce se intimpla deasupra ar fi optim sau ca ar conta, da’ totusi, obscen.

E de notat ca puteam folosi pointerul la metoda si in GCC, si in VC++ fara __single_inheritance, daca ne bateam capul sa scriem chestii in dinsul astfel incit sa faca call-ul care ne intereseaza (layout-ul e documentat pentru GCC si se gaseste pe net sau cu ochiu’ in dezasamblare pentru VC++). Mie asta mi se pare un hack si mai mare decit un const char* cu opcode-urile care fac ce doresc.

Dragi tovarasi, VICTORIE! Am reusit sa chemam o functie! Programarea e o meserie magica, plina de satisfactii, unde visele devin realitate prin simpla apasare a unor butoane!

PS: toata aceasta voma se putea evita daca aia care au facut celalalt plug-in se prindeau ca atunci cind vrei sa expui clase C++ dintr-un DLL, e o idee buna sa faci o interfata si s-o dai p-aia afara. Daca ClasaMuista::Eval() era virtuala, instanta aia de ClasaMuista pe care o primeam de la ei ar fi avut in ea un pointer la vtable, in care s-ar fi aflat si adresa functiei Eval() si ar fi mers totul ca prin minune. Runtime dispatch, chestii avansate nu gluma. Maxim 0.43% din totalul programatorilor de pe planeta asta sint in stare sa faca un API, dar din pacate un procent mult mai mare incearca.

Tags: , , , , , , , ,

Optimizing QuickSort and staff

Posted in Premiul n00bel, Slagare internationale, Stand-up philosophy on February 3rd, 2011 by jos8cal

Frunzaream recent revista celor de la codexpert.ro. Cum ce revista? Pai si-au lansat revista! E scrisa de un bot. In fine!

Evenimentul lansarii a fost unul sters, ca sa nu mai zic de lipsa totala a fundamentului ideologic. Dat fiind ca sintem familiari cu curentul codexpertian, ne-am zis sa incropim noi doua trei rinduri despre necesitatea si misiunea acestui ziar in lume, si nu numai. Asadar:

Pentru noi, cei care am supravietuit prigoanei, raspunderea pentru idealurile miscarii codexpertiste este atit de mare incit de multe ori simtim ca este o povara care ne copleseste si, daca n-ar fi legatura tainica cu C++-ul, poate demult s-ar fi stins nadejdea in sufletele noastre.

Profesorii Ardelean, Cucu si Bancila ne-au invatat sa gindim. Dupa cum Capitanul Bjarne a despartit hotarele lumii vechi de lumea noua, cei trei au despartit lumea formelor sterpe de lumea cugetarii realiste.

Dar cugetatorii si-au sacrificat darul mintii pentru adincul omenesc.

De cind au luat la cunostinta de C++, limbaj atit de apropiat de conceptia lor de viata, nu s-au putut desparti de drumul lui. Si si-au inceput viata intr-o apoteoza de neinchipuita frumusete morala. Ziarul trebuie sa pastreze nealterat spiritul miscarii si sa-l exprime in linia de cugetare a celor trei.

Un ziar de lupta si de idei, dar fara verbalism si entuziasm usor!
Fiecare cuvint trebuie sa se nasca din adincurile sufletului si sa fie insotit de intreaga raspundere a celui care il scrie.

“Ziarul Codexpert” este o batalie si pornim la ea cu aceeasi incredere in Victorie!

Acum ca avem si sprijinul ideologic, putem porni la drum sa ne scaldam printre titlurile care ne sint supuse atentiei in ziar.

Gasim o optimizare de quicksort. Gasim la autor si justificarea ideologica pentru batutul din taste:

“The idea for doing this is that instead of each new recursion copying the same code and using up more memory, it reuses the same code.”

Deja vu. Zbucium. Silviu Ardelean nu este un om, este o modalitate de a vedea lumea.

Ridicam bezmetici capul si privim codul in ochi. 10 numere sint torturate si fortate sa se alinieze de la mic la mare, in numele unei noi ideologii optime, acest pleonasm minier. Luam codul si-l virim sub nas, linie cu linie. Tragem incet si simtim cum ne ia cu ameteala. Trebuie sa gasim o modalitate de a salva numerele din mina ideologiei mirsave! Pregatim siringa pe care sta scris Array.sort() si batem incet vena. Milioane de numere ne trec prin fata ochilor. Eminescu. Truda. Pierdem vena. Intepam de 10 ori si ne intindem pe spate cu ochii tintiti la tavan. Senzatia de timp dispare. Ceasul numara de la kilometrul zero, over and over:

Optimized QuickSort: 00:00:01.2692034
Array sort: 00:00:01.1664805
Optimized QuickSort: 00:00:01.2490031
Array sort: 00:00:01.1632019
Optimized QuickSort: 00:00:01.2463744
Array sort: 00:00:01.1634480
Optimized QuickSort: 00:00:01.2695249
Array sort: 00:00:01.1568251
Optimized QuickSort: 00:00:01.2440373
Array sort: 00:00:01.2517662
Optimized QuickSort: 00:00:01.2694608
Array sort: 00:00:01.1581570
Optimized QuickSort: 00:00:01.2646042
Array sort: 00:00:01.1657108
Optimized QuickSort: 00:00:01.2499172
Array sort: 00:00:01.1557011
Optimized QuickSort: 00:00:01.2406120
Array sort: 00:00:01.1544470
Optimized QuickSort: 00:00:01.2434693
Array sort: 00:00:01.1576033

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

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

Ma-nvirt in cerc, nu te gasesc

Posted in Codare cu premeditare, Regula 0, Stand-up philosophy on January 31st, 2011 by Mihnea

Cind unul dintre experti intra in contact cu o aberatie, aceasta se propaga in staulul lor mai ceva ca herpesul in puscarie, ajungind in timp record sa-si infiga adinc tentaculele in etosul autoproclamatei comunitati de programatori C++. Dupa aia, aberatia foloseste site-ul lor drept un vector infectios pentru a corupe mintile ratacitilor care, orbecaind prin bezna inceputurilor, esueaza printre Raspundaci. Tratamentul nu-i usor, caci chiar daca-l determini pe unul din experti sa-si corecteze pe furis aberatia, un altul ii va lua locul si o va scoate la iveala pe blog, intr-un FAQ sau intr-un alt astfel de vas Petri.

Bunaoara, nici n-am terminat bine instructia cu minerul in problema dimensiunii fisierelor, ca si apare Marius Bancila cu un articol despre cum sa deschizi un dropdown in configuration manager in Visual Studio. In indispensabilul articol ni se enumera si unele din avantajele compilarii pentru 64 de biti:

Printre avantaje se numara accesul la mai multa memorie, accesul la fisiere mai mari de 4GB, sau accesul la functii specifice sistemului pe 64-biti.

Deci da. Inca un expert care crede ca din 32 de biti n-ai cum sa citesti fisiere mai mari de 4 GB.

Si ca tot am ajuns la spinosul subiect al dublarii numarului de biti, Gardianul Ovidiu are si el un sfat pentru noi:

O problema am avut-o si am pierdut ceva timp din cauza ei, in momentul in care am vrut sa fac build din linie de comanda (devenv.exe… ).
Recomandare: pune cele doua configuratii (pt Win23 si x64) in solutii (sln-uri) diferite.

Din pacate dinsul n-a vrut sa ofere detalii suplimentare despre problema pe care o intimpinase, desi minerul s-a aratat interesat. Noi presupunem ca scria numele configuratiei in command line fara sa puna “|win32” sau “|x64” in coada, asa ca devenv incalca iar Regula 0 si-i compila tot timpul configuratia de 32 de biti. Daca cititorii nostri au alte presupuneri creative, le asteptam in comentarii.

Cum codexpert a ramas in urma comunitatilor-surori din AXTI si nu si-a facut inca televiziune online, ne-am decis sa-i ajutam noi, asa ca pe linga RONUA TV, de azi exista si CODEXPERT TV. In continuare va prezentam filmul artistic Raspundacii, care dramatizeaza zbuciumul interior al expertului in incercarea acestuia de a scapa din ghearele aberatiei:

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

Autobaza se muta mai la sosea

Posted in Stand-up philosophy on January 29th, 2011 by Mihnea

Acum vreo doua zile ni s-a atras atentia ca AdWords a facut legatura dintre “Silviu Ardelean” si cuvintul “penis” si ca le serveste cititorilor nostri reclame la produse naturiste cu efecte incerte. Pina aici! Destul s-a imbogatit WordPress pe seama expertilor romani de pretutindeni! Deoarece standupprogramming.ro a fost ocupat abuziv de catre experti in speranta ca ne vor rapi din pretiosul trafic, am decis sa trecem la grupa mare si ne-am luat standupprogramming.com. De acum incolo cei interesati de activitatea autobazei vor putea citi fituica noastra in tihna, fara a fi improscati cu capitalism vulgar, iar asocierile Silviu-pula nu vor mai fi lasate la latitudinea “tool-urilor automate al căror rezultate le luam de bune“.

Vestile bune nu se incheie aici. Site-ul este acum 33% mai lat, 100% mai integrat cu failbook si 0% mai amuzant. Din pacate n-am gasit nici un plugin decent de email subscription in cele 2 minute cit am cautat, asa ca cei 5 cititori care foloseau asa ceva vor fi fortati sa intre in lumea Web 2.0 si sa foloseasca RSS. De asemenea, deoarece noi nu dorim sa avem nimic de-a face cu lumea Web 2.0, am futut CSS-ul si cind dai sa vezi un post individual, link-urile de next/previous post apar aiurea (cel putin in Chrome). Probabil vom repara asta la un moment dat.

Deci incolonarea doi cite doi si porniti in pas vioi catre noua adresa: standupprogramming.com (daca nu vrea nimeni sa stea linga Silviu, e ok, facem o exceptie).

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