Diamante si rubine n-au valoare pentru mine

Posted in 112, Slagare internationale on June 21st, 2013 by Mihnea

Ruby este o artista de etnie conlocuitoare care cinta manele softcore despre dezvoltare personala pe intuneric. Din pacate lucrurile nu se opresc aici. In unele cercuri si mai respingatoare din punct de vedere moral decit consumatorii de reggaeton, Ruby este si numele unui limbaj de programare inventat de un onanist japonez si adoptat de hipsterii pentru care Python este prea mainstream si prea ne-Perl.

Exista multe limbaje penibile pe lume si de obicei nu simt nevoia sa le scot in public si sa ma pis pe ele. Pur si simplu le ignor, cum am facut si cu Ruby pina azi, cind n-am mai putut. Azi am preluat un proiect de la altcineva, si am descoperit ca foloseste ceva numit CocoaPods. Deoarece nu mai auzisem in viata mea de aceasta tehnologie, am dat cu goagal si am aflat ca CocoaPods este “the best way to manage library dependencies in Objective-C projects”. Citation needed.

Bun, deci e un package manager. Spre imensa mea bucurie, primul lucru scris pe pagina lor este ca tot ce trebuie sa faci ca sa-l instalezi e sa scrii “sudo gem install cocoapods”. Asa ca dai, si stai. Dupa ce te uiti cam un minut la terminalul in care nu se intimpla nimic, vrei sa scrii in goagal “sudo gem install cocoapods hangs”. Dar nu apuci sa scrii toata asta, pentru ca dupa ce dai paste la comanda in search box, goagal iti sugereaza singurel sa-ti termini ideea cu “hangs” sau “does nothing”:

sugestiaImbucurator. Mai putin imbucurator e ca nimeni nu pare sa aiba o solutie clara. Afli, totusi, doua lucruri importante. In primul rind, cica daca dai intii “gem update –system” va dura mai putin. In al doilea rind, daca vrei sa vezi ca se intimpla ceva, poti sa-i dai optiunea -V lui gem. Este momentul sa ne intrebam cine pula noastra e gem.

Gem este package managerul lui Ruby. Package managerul de Cocoa se instaleaza folosind package managerul de Ruby, fiind scris in Ruby. Daca n-ar fi asa de rasuflat meme-ul, ar urma o poza cu xzibit care a pus un package manager in package managerul tau ca sa poti managerui package-urile. Apropo, gem e instalat de catre macports, package managerul lui OSX pentru programe open source.

package_managementAici trebuie sa intrerup un pic firul epic ca sa va atrag atentia asupra numelui gem. Cum ar veni, printr-o potriveala cosmica, termenul de gema era deja consacrat pentru “bucata de cod care face ceva util”, dar se incadreaza si in tema mineralogica generala, ca doar rubinul e si el o gema. Jocul de cuvinte este de o asemenea ingeniozitate si dragutenie, incit utilizatorului aproape ca-i rasar panselute in rect de atita bucurie si optimism. De altfel, tot cultul acestui limbaj este saturat de o abominabila dragutenie infantila, de zici ca-i facut de unicornul de plus al unei fetite de 5 ani. Sau ma rog, de un japonez oligofren. Poate ati auzit de cartea lor cu desene presupus amuzante, scrisa de unul care-si spune “why” si care de 4 ani sufera de o criza prelungita de Asperger’s si respira intr-o punga.

In fine, sa lasam unicornii si sa revenim la rulat gem. De curiozitate, am dat cu -V inainte sa-i dau cu update, ca sa pot sa compar cu ce face dupa update, de zic diversi ca merge mai repede. Secretul era ca inainte isi lua fisierele de pe rubygems.org, care probabil e tinut pe dialup acasa la ala cu Asperger’s, iar dupa update le ia de pe amazon. Dupa citeva minute de downloadat 50 de versiuni ale aceluiasi fisier, si dupa ce te intreaba daca e OK sa suprascrie un script instalat tot de el, gem te anunta triumfator ca se pune pe compilat lucruri. Imediat dupa aia, iti zice urmatoarele:

ERROR: While executing gem … (NoMethodError)
undefined method `join’ for nil:NilClass

Ce bine ca folosim un package manager, ca sa evitam problemele care pot aparea daca stam sa compilam din surse! Cautam pe goagal noul indiciu si gasim o voce respectata in comunitatea dezvoltatorilor Ruby: blogul de la Ruby on Rails (pentru neofiti, Rails e o biblioteca pentru transformat Ruby intr-un PHP mai incet). Aici aflam ca e o problema comuna, si ca orice problema comuna, nu poate fi rezolvata de programatorii “sistemului”, caci dinsii sint prea ocupati sa-si deseneze unul altuia curcubee in oracole. Trebuie sa stergi tu de mina directorul source_cache de unde o fi el. Observam si ca autorul postului, fiind un programator web cu experienta, care scrie biblioteci pentru alti programatori web, a dat direct paste la text din consola in HTML, cu enter-uri, asteptindu-se sa ramina formatat. Ia ziceti, cind scrie Chad acolo “run the following command”, care e comanda? “gem env”? “gem env RubyGems”? “gem env RubyGems Environment”?

Am gasit directorul, l-am sters. Fix aceeasi eroare. In acest moment, un coleg a descoperit alt link in care se sugera sa incerci fara -V. Eu am zis ca nu cred asa ceva si am refuzat sa incerc. Cit ma pregateam sa ma uit in cacatul ala de script care da eroare ca sa incerc sa inteleg ce se petrece, colegul a rulat totusi fara -V la el pe calculator. Si a mers. Dupa care am dat si eu, si a mers si la mine. Tocmai am incercat pe un al treilea calculator acum, si se intimpla la fel. Se fute doar daca-i zici sa-ti arate ce face.

“RubyGems is a sophisticated package manager for Ruby.” E o pula.

 

 

 

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

What would you be if you were attached to another object by an inclined plane, wrapped helically around an axis?

Posted in Codare cu premeditare, Slagare internationale on January 23rd, 2013 by Mihnea

Tovarasi, am infrint. Minerul ex-multinational emblematic Silviu Virgula Ardelean pare sa se fi vindecat de tutorialita, militianul Ovidiu a demisionat de la Radio Erevan, iar singurul semn de viata din directia ograzii cu experti este sunetul mocirlos pe care il face pulanul flasc al cite unui fondator cind mai usuie un elev de liceu care are nevoie urgent sa-i faca cineva tema. Cred ca este timpul sa gasim noi mineri, dar jugul capitalist ne-a cam impiedicat sa dedicam timpul cuvenit activitatii de largire a orizonturilor si abatajelor.

Pina una-alta, o sa va delectez cu doua slagare internationale. In deschidere ne cinta formatia NewTek, care in SDK-ul de Lightwave ne ofera o viziune lirica alternativa asupra puterilor lui 2:

#define IQ_CTRL         1
#define IQ_SHIFT        2
#define IQ_ALT          4
#define IQ_CONSTRAIN    8
#define IQ_ADJUST       16
#define MOUSE_LEFT      32
#define MOUSE_MID       64
#define MOUSE_RIGHT     96
#define MOUSE_DOWN      128

Aceste constante sint combinate intr-un bit field care-ti zice starea butoanelor cind iti vine un eveniment de mouse. Cind bitii 5 si 6 sint setati, nu inseamna ca userul tine apasat pe left si middle, ci ca tine apasat pe right. Era absolut vital sa se faca economie de un bit, chiar daca asta inseamna ca “sistemul” nu poate sa-ti spuna cind userul tine apasat pe mai multe butoane in acelasi timp. In caz ca va intrebati, variabila care tine bit field-ul e int, deci masura de austeritate n-a izvorit din utilizarea unui char, ci pur si simplu din spirit civic si responsabilitate sociala.

Lasind aritmetica in sant cu botul umflat, este timpul sa ne ocupam un pic si de algebra. Pentru neinitiati, un quaternion este un hack matematic care-ti permite sa encodezi o rotatie in 3D folosind 4 numere. In practica, cel mai des construiesti un quaternion dintr-un vector care reprezinta axa de rotatie si unghiul de rotatie in jurul axei respective. Primele 3 numere din quaternion sint componentele vectorului inmultite cu sinusul jumatatii unghiului, iar al 4-lea numar este cosinusul jumatatii unghiului. Orice implementare de quaternion dintr-o biblioteca de algebra contine un constructor sau o functie care ia un vector si un unghi si face manevra asta cu sin si cos. 3D Studio Max are si el asa ceva:

/*! \remarks Constructor. The quaternion is initialized from the
 vector <b>V</b> and angle <b>W</b> passed. The quaternion is
 then normalized.\n\n
*/
GEOMEXPORT Quat(const Point3& V, float W);

In caz ca aveam dubii, autorul remarca clar (ma rog, cit de clar se poate intr-un comentariu minjit cu puroi de doxygen) ca acest constructor face un quaternion dintr-un vector si un unghi. Asa ca te pui linistit pe scris cod si rotit obiecte si cind rulezi observi ca ele nu prea se rotesc cum ai dori tu. Si te uiti peste cod, si pare bun, si totusi nu merge. Si intr-un final te paleste inspiratia sa privesti in interiorul quaternionilor si vezi ca nu contin deloc ce ar trebui. Codul constructorului, fiind foarte complicat, nu putea fi pus in header, ci sta intr-un cpp (care ajunge sa fie un DLL, ca sa treci printr-un import table de fiecare data cind vrei sa initializezi 4 floati). Din fericire insa, Autodesk ofera apropiatilor bucati din sursele de Max, astfel incit putem lectura quat.cpp si vedea urmatoarea grozavie (cu tot cu indentarea de oligofreni):

Quat::Quat(const Point3& V, float W) {
    x = V.x; y = V.y; z = V.z; w = W;
    Normalize();
    }

Cum ba pula? Cum este W un unghi, daca tu il asignezi direct in a 4-a componenta, fara sa faci muismul cu sin si cos de juma din el? Cum cacat ti s-a parut mai util sa faci asta intr-un constructor care ia vector si scalar, decit sa faci ce face tot restul lumii?

Citeva linii mai jos intilnim si urmatoarea gema:

Quat Quat::operator+(const Quat &q) const {
   //return(Quat(x + q.x,y + q.y,z + q.z,w + q.w));
   return *this * q;
   }

Deci dragii mei, in algebra autodesciana, inmultirea si adunarea sint una si aceeasi operatie, caci unui mintos i s-a parut ca “+” este un simbol potrivit pentru compozitia quaternionilor (care, apropo, nu e comutativa ca + ala pe care-l stim cu totii, daca e sa ne legam de detalii). Lucru documentat de altfel si-n header, daca ignori comentariul de la sfirsitul liniei. Cred ca comentariul ala e comentat, deci n-are nici un efect:

/*! \remarks This operator is the same as the <b>*</b> operator. */
GEOMEXPORT Quat operator+(const Quat&) const; // sum of two quaternions

Tirnacop + tirnacop = tirnacop * tirnacop pentru valori foarte mari ale lui 2.

Tags: , , , , , , , , ,

Vorbitor in numele prostilor

Posted in Slagare internationale, Stand-up philosophy on March 9th, 2012 by Mihnea

Microsoft organizeaza anual cu 47% mai multe chiolhanuri decit un primar pesedist in campanie, dar in afara de serbarea emvepeilor (care tocmai s-a terminat, apropo), aceste evenimente nu ofera prea multe motive de amuzament sau oripilare. In 2012 insa, deschizatorii de drumuri din Redmond s-au gindit sa rectifice situatia, oferindu-ne un generos subiect de bancuri si in acelasi timp confirmind raspicat faptul ca-s decisi sa se duca pulii, ca firma, cu totul.

Majoritatea reuniunilor au teme tehnice, fiind deci populate de dorci imbracati in tricouri cu zicatori despre C# sau convertit cafea in cod. Neamuzament total. Exista insa citeva care au ca subiect group hugging-ul, iar cea aleasa de Microsoft pentru declaratia de anul asta este printre ele: Worldwide Partner Conference. Aici nu se poarta tricouri, ci costume, iar participantii au siluete si postúri de fosti directori de CAP (si chiar experienta practica in aceasta ramura de activitate, in cazul celor care provin din popoare ce s-au bucurat de binecuvintarile colectivizarii si economiei centralizate).

O adunatura de umflati si decrepiti care fac “networking” nu este o priveliste amuzanta in sine, nici macar cind networking-ul continua in baruri de striptease dupa incheierea programului impus. Totusi, Microsoft au reusit sa dea o noua dimensiune evenimentului de anul acesta printr-o singura atingere de geniu. Mail-ul prin care se anunta WPC 2012 poarta urmatorul subiect:

Inspiring. Influential. Iconic. Hear him speak at WPC 2012!

Sper ca daca nu v-as fi zis ca-i vorba de Microsoft, ati fi presupus ca WPC asta e ceva circ cu agili si ca “him” e vreun Bruce Lee care vine sa le spuna cum sa fie fluizi ca apa. Eu unul asa am crezut si am dat click sa citesc, pregatindu-ma sa rid. In schimb, m-am umplut de oroare, caci iata ce scria mai departe:

COME HEAR INTERNATIONALLY ACCLAIMED DEEPAK CHOPRA SPEAK AT WPC!
Don’t miss this inspirational opportunity to hear one of the foremost leaders in the field of mind-body medicine.

Deepak Chopra

In caz ca nu sinteti la curent cu arborele genealogic al Mamei Omida si n-ati auzit de domnul Chopra, va pot spune ca “mind-body medicine” este exact ceea ce pare: un gunoi new age despre vindecare prin ginduri pozitive din aceeasi categorie cu reiki si medicina germanica. Sa fii “foremost leader” in asa ceva e ca si cum ai fi foremost leader in crestinism, barbut sau stat pe scaun. Cel mai bun mod de a deveni foremost leader intr-un domeniu de genul asta este sa inventezi respectivul domeniu si sa te proclami foremost leader, dupa cum a procedat subiectul nostru de azi. Deepak a invatat despre fizica cuantica de pe Discovery si prompt a inventat medicina cuantica si nutritia cuantica. In timpul liber sustine Intelligent Design cu argumente stiintifice preluate de la Muzeul Creationismului. El isi are locul asigurat in constelatia marilor filosofi si profeti ai timpurilor moderne, alaturi de Ryke Hamer, Rael, Osho, David Icke si, sa nu-i uitam pe-ai nostri, Lorin Fortuna si Bivo.

WPC 2012

Si ma rog, chiar daca ar exista vreo diferenta intre invataturile domnului guru si descintecele Clarvazatoarei Vanessa din Chitila, tot trebuie sa ne intrebam de ce vine el sa vorbeasca la o conferinta de IT. Sa fi acceptat oare Microsoft ca toata industria de software e de cacat, si sa incerce sa-si invete partenerii ca singurul mod de a face bani e sa gasesti niste prosti si sa le vinzi vrajeala?

Teoria mea este ca Aurelian a facut pasul cel mare peste ocean si acum e responsabil cu evenimentele micromoi. Astept cu infrigurare filmarea de pe un balcon din Toronto care sa-mi confirme suspiciunea. Sper ca la WPC 2013 va fi invitat ex-Dr. Hamer sa continue educatia CAP-istilor in domeniul medicinei moderne explicind cum microbii sint de fapt agentii de vindecare, nu problema, iar medicina “mainstream” este de fapt o conspiratie prin care evreii vor sa dea cancer civilizatiei vestice (in Israel neexistind cancer, evident). Toate aceste noi informatii ii vor ajuta cu siguranta pe directorasi sa-si creasca mai cu spor culturile de soft din ograzile proprii.

Aurelian Popa

C-o fi Aurel de vina sau ca n-o fi, macar ne-am lamurit de ce e VS 11 alb-negru si are viewer de FBX si tool-uri pentru SCRUM: daca aia din conducere o ard in spirala cu personaje ca Deepak, ce pretentii sa ai de la restul angajatilor?

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

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

Izbavirea programatorilor 3D e aproape

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

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

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

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

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

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

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

HeavensRevenge cistiga insa detasat cursa retardarii de saptamina asta:

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

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

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

Window 8

Posted in Premiul n00bel, Slagare internationale, Stand-up philosophy on September 17th, 2011 by jos8cal

Dupa cum probabil stiti, Kanal 69 este in straie de sarbatoare. Mult tinut sub secret, parteneriatul dintre Microsoft si Budoar a fost facut in sfirsit public. Din partea celor doua companii au fost prezenti regizorul Herb Sutter, un om care nu a reusit in industria XXX in ciuda felului in care arata, si Titus Steel, un om care nu mai are nevoie de nici o introducere.

Impreuna au descins in a prezenta ultima coproductie Microsoft-Budoar si anume Window 8, un SF porno despre un sistem de operare hermafrodit. Titus Steel va juca rolul unui programator tinut ostatec intr-o celula cu un singur geam (geamurile overlapped au fost scoase pentru a creste gradul de dificultate al puzzle-ului), celula controlata in totalitate de acest OS. Cu amabilitatea lui Titus, redam mai jos un screenshot din Window 8 si in lateral poze de la eveniment.

Mersi Titus.

PS. La eveniment au participat si mineri. Intrebat de reporterul nostru ce parere are despre prezentarea Window 8, Silviu Ardelean ne-a marturisit:

“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.”

Tags: ,

Coming out

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

In sfirsit Apple au decis sa faca pasul cel mare si sa iasa din closet. Noul lor CEO e gheu pe fata, nu pe ascuns ca Steve. Asteptam cu interes versiunea aniversara XCode 5 unde vei scrie cod printr-o interfata cum aveau strumfii xenozoofili cu inorogii in Avatar, doar ca in loc sa-ti impletesti pleata cu coada calului, iti vei da cu iLube si-ti vei baga in cur un iDildo. Roz.

La cit mai multe puli in cur!

 

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