Conventii

Posted in Codare cu premeditare, Stand-up philosophy on September 21st, 2010 by Mihnea

Uneori cind gindesti un sistem descoperi ca poti face sau reprezenta ceva in mai multe feluri echivalente, si atunci trebuie sa recurgi la o conventie. Bizonul prost ajuns intr-o fundatura d-asta va judeca situatia cu mintea lui si va alege bazindu-se pe ce i se pare lui oportun la momentul ala, ignorind preferintele altora de pina la el.

De obicei cind e nevoie de o conventie, alternativele au merite egale. Nu conteaza ce alegi. Nu e mai bine sa mergi cu masina pe dreapta drumului decit pe stinga lui. E tot aia, deci prima data alegerea se poate face arbitrar. Ceea ce conteaza e sa respecte toata lumea conventia aia si sa nu se trezeasca un bou ca a gasit el nu stiu ce avantaje daca face altfel decit restul lumii, iar alti boi sa se ia dupa el, ducind la schisme, probleme de interoperabilitate si in general haos.

Un teritoriu destul de fertil pentru boi neconventionali este programarea 3D, asa ca ma voi opri asupra a doua cazuri in care s-a gasit un mintos sa faca pe specialu’ si sa nenoroceasca o groaza de oameni care au venit dupa el. Primul e legat de reprezentarea vectorilor.

Cind trebuie sa inmultesti vectori cu matrici ai doua optiuni: ori consideri vectorul ca fiind o linie, si faci v’ = vM, ori consideri vectorul ca fiind o coloana, si faci v’ = Mv. In toate cartile de mate se foloseste a doua varianta, asa ca s-au gasit unii sa remarce ca nu e bine si sa faca invers. Rezultatul e ca DirectX si o groaza de alte chestii sint in momentul de fata in dezacord direct cu matematica, asa ca daca incerci sa treci de la una la alta, te ia rapid cu dureri de cap. Ca sa fie si mai misto, multi oameni confunda “column major” si “row major” cu “column vector” si “row vector”, ducind la un haos complet in terminologie. Cind dai prima data peste un sistem cu propria biblioteca de algebra liniara, esti intr-o mare ceata si sint sanse ca documentatia sa nu te scoata, pentru ca unii au simtit nevoia sa-si puna mintea la contributie cind nu era cazul. In unele manifestari de prostie deosebita, cum e 3D Studio Max, biblioteca de mate chiar are doi operatori de inmultit vectori cu matrici, astfel incit sa poti sa scrii si v*M, si M*v, si sa se intimple acelasi lucru.

Din punct de vedere matematic se poate argumenta ca e mai bine sa folosesti vectori coloane, pentru ca sa nu ajungi la spital cind ai nevoie sa derivezi functii. Chris Hecker da un exemplu aici. Pe rebelii carora le datoram dezastrul asta i-au preocupat insa alte lucruri. Un argument des intilnit este ca daca iti place pe invers, poti implementa mai eficient inmultirile intre vectori si matrici pe procesoare SIMD care n-au operatiuni orizontale (produs scalar, in speta). Cu vectori coloana poti inmulti vectorul cu o linie a matricei intr-o singura instructiune, dar dupa aia trebuie sa despachetezi numerele rezultate si sa le aduni intre ele pe rind. In 3D cu coordonate omogene, asta ar veni vreo 4 inmultiri, 8 adunari, 8 shuffle-uri si 4 store-uri (cel putin in SSE). Cu vectori linie, poti inmulti fiecare linie a matricei cu o componenta a vectorului in 2 instructiuni (un shuffle si un mul), dupa care acumulezi rezultatele si ajungi la vectorul transformat, deci ai 4 inmultiri, 4 shuffle-uri, 3 adunari si 1 store (plus mai putine dependinte deci pipelining mult mai bun). S-ar parea ca miracolul graficii 3D realtime a fost facut posibil prin scuiparea matematicii intre ochi, dar nu-i chiar asa.

Daca chiar ai nevoie sa optimizezi inmultirile dintre matrici si vectori, poti sa-ti tii matricile transpuse in memorie, sau “column major”, adica in a[0] – a[3] e prima coloana a matricei, nu prima linie. Layout-ul in memorie nu impune notatia. Poti scrie frumos v’ = Mv peste tot si sa ai un operator care se foloseste asa, dar sa-ti tii matricile column major si sa beneficiezi de viteza superluminica a tehnologiilor SIMD. Totusi, s-ar putea sa n-ai un bottleneck in inmultirea matricilor cu vectorii (mai ales daca traiesti in prezent), sau sa ai un procesor SIMD cu instructiuni orizontale, sau ambele. In particular, GPU-urile au o instructiune de produs scalar, deci daca folosesti vectori coloana, o transformare in GPU se face in 4 instructiuni si atit. D-aia aplicatiile care folosesc matricile din DirectX le tot transpun inainte sa le trimita la shadere. Noroc ca ar putea merge foarte repede inmultirile pe CPU, asta daca s-ar face vreo inmultire acolo.

A doua conventie despre care fiecare pionier al graficii 3D a simtit nevoia sa-si dea cu parerea este aranjarea axelor de coordonate. Daca pui un elev de clasa a 8-a sa-ti deseneze axele de coordonate in spatiu, primesti inapoi ori o privire timpa, ori asta:

Nu e greu. X la dreapta, Y in sus, Z inspre tine. Asa a invatat toata lumea la scoala, nu e nevoie de opinii suplimentare. Nu e mai bine daca il pui pe Z in sus, sau pe X la stinga. Se aude si acolo in spate la 3D Studio Max, in pula mea? Atunci cind treci din 3D in 2D – cum ar veni, atunci cind proiectezi – vrei sa ramii cu X la dreapta si Y in sus. Nu vrei ca axele cu care ramii sa se cheme X si Z. Oamenii normali stau in picioare si privesc inainte. D-aia daca nu esti pe medicamente, Z e adincimea.

La Max n-au lucrat niciodata oameni normali, ci doar labari care nu stiu nimic despre programare. In general, chiar daca un soft e foarte prost, se va gasi cineva care sa incerce sa domoleasca discutiile aprinse cu cuvintele magice “da, dar…”. La Max nu e asa. Orice programator care s-a atins vreodata de SDK-ul lui il uraste cu pasiune. Nimeni nu incearca sa-i gaseasca scuze. In Max, Z este inaltimea. Ca sa ajungi la o asemenea idee ca programator, trebuie sa fii obisnuit sa stai mult pe burta si sa privesti lumea de sus, adica fix pozitia in care-i sta cel mai bine unui muist care crede ca e cool sa descrii atributele nodurilor trimitind sute de parametri la un constructor variadic. Puletul care a facut asta a vrut si el, ca toata lumea, sa ramina cu X si Y cind trece in 2D, dar el se uita de sus, nu din fata, crezindu-se probabil arhitect (d-ala care proiecteaza cladiri, nu d-ala care crede ca design pattern-urile sint chestii interesante si utile). Si din cauza lui si a altora ca el, importatul geometriei dintr-o aplicatie in alta e putin mai greu decit ar trebui sa fie, ca de ce sa avem si noi o viata mai usoara si sa ne concentram pe lucrurile importante, cind putem sa pierdem vremea schimbind axe prin vertecsi si coloane prin matrici. Important e sa fie un jegos fericit ca si-a construit o lume dupa chipul si asemanarea lui, nu dupa cum faceau toti prostii de pina la el.

PS: A da, si e “bitangenta”, nu “binormala”, ca suprafetele n-au doua normale.

Tags: , , , , , , , ,

Curatenie de toamna

Posted in Regula 0 on September 20th, 2010 by Mihnea

Ca orice om care recunoaste ca-si recunoaste greselile, Silviu Virgula Ardelean a fost foarte ocupat in ultimele zile sa-si spele pe furis imaginea online, care in momentul de fata e un pic sifonata. Dupa ofensiva raportata intr-un post anterior, in care un brainstorming al AXTI l-a ajutat sa-si corecteze micile scapari legate de map-uri plus alte citeva detalii d-astea care nu stirbesc cu nimic maiestatea lui de lucrator la cea mai emblematica multinationala, Silviu si-a indreptat subtilul tirnacop spre alte doua intimplari din trecut.

Intii si-ntii si-a editat “optimizarea” pe care o pomeneam aici. In codul original ii scapase degetul aiurea si copia memoria doar daca nu era nimic de copiat. Acum a corectat comparatiile alea care erau gresite doar din neatentie, dar a lasat aberatia principala, aia cu sizeof. Intr-unul din multele paradoxuri ce asezoneaza comunitatea expertilor, desi programa deja de ceva vreme staturi de plata emblematice la multinationala, expertul nostru in masini de scris automate si recunoasterea greselilor avea o dilema de incepator. Din pacate el nu a putut sa-si falsificerecunoasca si greseala mai mare, deoarece se discuta mai departe despre ea in thread-ul ala. Observam ca post-ul nu apare ca editat, cum se intimpla daca un muritor de rind incearca sa pacaleasca trecutul, semn ca Silviu a apelat la Luminatorii AXTI pentru a-si spala pacatul.

Proaspat posesor al unui tecut cu 0.47% mai curat, Silviu a decis sa mai cizeleze un pic si post-ul ala despre a carui evolutie am vorbit pe larg mai demult. Dupa ce a fost de neclintit in decizia lui ca jos8cal si cu mine sintem aceeasi persoana, aducind ca argument faptul ca nu crede ca are fata de prost, el tocmai a trecut la a 5-a varianta de titlu pentru mult iubitul post, de data asta la plural: Mitocanilor. Acum a schimbat si URL-ul (inainte uitase si lasase mai-jegule.html desi ajunsese cu titlul la “Mitocanule”), asa ca voi mistifica si eu trecutul reparind link-urile din post-urile de aici, ca sa nu se piarda saga. In noul text el vorbeste degajat despre doi agresori, de parca n-ar fi sustinut energic de multiple ori la tribuna codexpert faptul ca noi doi sintem unul singur, cu multe conturi menite sa-l bage pe el in ceata. El n-are fata de prost, daca va amintiti. El a stiut dintotdeauna ca sintem doi, deducind chestia asta din faptul ca avem useri diferiti, iar textul a fost asa de la inceput (mentiunea “last edit” e acolo dinainte de ultima editare). Faptul ca unele verbe sint la singular inca (“Încăpăţânându-vă să vă bagi în seamă“, “Voi, frustratilor, foloseşti tool-uri“) nu e IN NICI UN CAZ un semn ca s-a petrecut ceva si oricum se va rectifica deindata ce va citi aici despre asta. Si ca tot avea casca-n cap si vagonetul aproape, a sters si ultimul comentariu din seria aia in care se pisa lumea pe el, iar el isi deschidea sufletul in fata jetului, crezind ca-s cuvinte de apreciere. Noroc ca am salvat tirada.

Daca ar fi sa ne dam cu parerea cine-l ajuta pe Silviu sa-si ia din pila trecutul fara a lasa urme, n-am putea ignora faptul ca Ovidiu “MVP” Cucu si-a sters si el de ceva vreme bancul IT pe care-l semnala publicatia noastra la inceputurile ei. Sa nu uitam ca Ovidiu si-a primit aleasa educatie de atasat politic pe linga uzina in vremuri in care alinierea istoriei la idealurile partidului era o slujba cu norma intreaga pentru unii, de unde si reflexul de a-ti cere buletinul cind ii arati ca a gresit ceva. Probabil Ovidiu isi doreste acum sa deporteze toate thread-urile in care a scris Silviu timpenii, dar asta ar insemna sa-si stearga tot forumul.

PS: Ultima postare pe blog-ul lui Marius Bancila se intituleaza Remnants of the Golden Age of Communism. Mi se pare foarte nimerit.

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

Programul FUL. Balada epica in versuri.

Posted in Codare cu premeditare, Premiul n00bel, Stand-up philosophy on September 13th, 2010 by jos8cal

Probabil cu totii am fost traumatizati cindva pe parcursul vietii. Eu stiu un caz concret cu un hunedorean. Provocarea de a se fi nascut in Hunedoara s-a materializat intr-un blog in care el explica la pertu despre Basescu, demagogie, lehamite, incredibil, prost gust, atitudine, lipsa respect, teape, realitate si tristete. Incordarea maxima dintre el si realitate se poate vedea chiar din titlul blogului unde forta si maturitatea gindirii l-au proiectat sa traiasca prin Romania nu in Romania.

Intr-un alt registru traumatic se afla Fulga Marian. Acest personaj epic* s-a hotarit sa faca un program cu care sa rezolve probleme la orice nivel imaginabil sau inimaginabil, dupa caz. Cu aceasta mutare doreste rezolvarea ecuatiei Utilizator-Programator-Limbaj de programare-Produs prin eliminarea definitiva a programatorului. Rezultatul final va fi: Utilizatorul de FUL-Propriul produs. Practic el doreste sa faca un program cu care toate lumea va putea face orice si asta fara interventia vreunui programator pe viitor.

Dar sa-i dam cuvintul:

Nici simplu nici usor nici imposibil FUL nu este numai o idee elitist intelectuala. FUL este o realitate palpabila concreta materializata intr-un material cu toate cele 80 de notiuni operante ale sale, multe dintre ele de o simplitate totala si de o accesibilitate uluitoare chiar si pentru copii.

Si ca tot veni vorba de fail (ca sa nu zicem FUL):

In alti termeni FUL este un MEDIU DE CONFIGURARE ( ca sa nu zicem de programare) care da posibilitatea utilizatorului sa CONFIGUREZE (ca sa nu zicem programeze) propriul program FOLOSIND O SINGURA MACHETA UNIVERSALA DE CONFUGURARE (ca sa nu zicem de programare)

Sufletul sau tinde dupa libertatea pustnicului hitru care s-a decis sa invinga prin a sta cu spatele si a minca de pe jos:

Totul se face citind si scriind, ce scriem aia apare, ce scriem aia ramine. Decizia , conceptia, realizarea ne apartine si o materializam exact cum o gindim noi insine cu propria noastra minte – nu a altcuiva- Nu mai depindem de de nimeni .

Iata si motivele pentru care FUL trebuie sa existe:

  • FUL – Programarea accesibila oricui ( cu ceva minte )
  • FUL – Programezi de cind inveti sa citesti si sa scrii
  • FUL – Circa 80 de notiuni CONCRETE (fata de sute ABSTRACTE din limbajele de programare).
  • FUL – Rezolva probleme la orice nivel imaginabil
  • FUL – Exista matematic si logic reprezentat grafic explicit pe 4 pagini scrise.

si motivele pentru care programatorii nu trebuie sa priveasca cu ochi hunedoreni demersul sau demiurgic:

  • FUL – Nu exista ca soft si trebuie facut de programator
  • FUL – Elimina programatorul.
  • FUL – Adus la perfectiune si ajuns la utilizatori scoate de pe piata prin suficienta propriul producator.
  • FUL – Va fi realizat

(*)

Am folosit cuvintul epic cu scopul de a demonstra ca programul FUL face parte dintr-o trauma a copilariei mele si anume opera epica in versuri cu rima alba. Pentru demonstratie am sa folosesc metoda analogiei cu o alta opera epica in versuri si de sorginte anonima: Toma Alimos. Ca si cadru de sustinere pentru demersul meu ma voi folosi de o deja existenta demostratie. De asemenea voi imprumuta limba si obiceiurile demonstrandului, deoarece dupa cum veti vedea, poseda o tulburatoare capacitate de a templetiza epicul ca specie literara. Asadar sa trecem la copy/paste din demonstratie:

Programul “FULL” este o creatie epica in versuri, o balada populara pentru ca prezinta momente importante din viata unui personaj inzestrat cu calitati deosebite, elementele reale impletindu-se cu cele fabuloase. Titlul programului reprezinta numele personajului principal (FUL de la Fulga Marian).

Poetul anonim evoca haiducia ca forma a luptei sociale, alegand episoade semnificative din viata unui programator (MFCist in cazul nostru).

In expozitiune, se prezinta locul actiunii, un forum de programare si limbajele cu care va fi executat macelul: “.NET(C#, VB.Net…)”, si personajele baladei: Programatorul (Ovidiu Cucu ca si bidder in josul paginii)  si Fulga Marian Manea.

Prin descrierea din cadrul expozitiunii se realizeaza o sinteza a peisajului IT romanesc: ideologia naiva de tip Scoala Ardeleana, aberatii a la SuperDarie si 30 de minute de tortura cu Ovidiu Cucu. In acest cadru natural, specific romanesc, Ovidiu Cucu zaboveste impreuna cu codul sau. Se odihneste si se ospateaza. El este singuratic, ducandu-si viata in singuratatea biroului, si de aceea, nici armele, nici codul nu pot suplini tovarasia omului. Gandurile si sentimentele lui se indreapta asupra codului cu care se simte infratit: “inchinari-oi codului, int-ilor si float-ilor…“. Ovidiu, personificat fiind, simte apropierea primejdiei, se infioara, , codul necheza, iar armele ies din teci. Incordarea creste cand apare Fulga Marian zis si Manea. Naratiunea este intrerupta aici de descrierea insusirilor fizice ale celor doi, descriere care prezinta in antiteza portretul lor fizic.

In intriga, dialogul dezvaluie motivele supararii lui Fulga Manea: faptul ca i-a inselat asteptarile, i-a tulburat gindurile, depinde de el, si pretinde “codul vama”.

Ovidiu Cucu, demn si cu simtul raspunderii va da seama pentru faptele sale, dar il roaga sa nu fie acesta un motiv de dusmanie intre ei.

In desfasurarea actiunii, sunt urmarite cu ajutorul naratiunii si al descrierii, atitudinile si reactiile opuse ale celor doua persoane si apoi injunghierea miseleasca a lui Ovidiu Cucu, programatorul.

Poetul anonim povesteste cum Ovidiu, cu inima deschisa, intinde boierului codul si banul, indemnandu-l sa se cinsteasca, sa lepede mania, si sa-I vorbeasca ca unui frate. Viclean si las, Fulga Manea i-a cu mana stanga codul, iar cu dreapta il injunghie miseleste, apoi fuge ca un las. Prin repetitia verbului “a fugi” si prin versul “Nu mai depindem de de nimeni” poetul anonim isi exprima dispretul pentru lipsa de demnitate a lui Fulga Manea.

Ovidiu nu-si pierde cumpatul intr-un moment atat de greu pentru el, si nu se lasa invins de durere. Astfel, il atentioneaza pe Fulga Manea ca trebuie sa raspunda pentru fapta sa, apoi isi aduna ultimele puteri si pune un bid de 29 de milioane de lei.

Incepand cu acest episod, balada capata un caracter dramatic si fantastic. De domeniul fabulosului este si felul in care programatorul isi strange mijlocelul cu braul si vorbeste codului cu caldura, ca unui frate. El ii cere sa ii fie de ajutor in acest ceas de cumpana cum I-a fost si in tinerete, sa-l poata pedepsi pe Fulga Manea pentru lasitatea lui. Un alt element fantastic este personificarea codului, care ii asculta dorinta si zboara ca vantul, ajungand dusmanul intr-o clipa: “lasa mouse-ul, sai pe mine, \ si de IDE te tine, \ ca s-arat la batranete, \ ce-am platit la tinerete!”

Printr-un pasaj narativ, poetul anonim surprinde incordarea maxima dintre a conflictului dintre cei doi, cand Programatorul Cucu isi rapune vrajmasul cerindu-i o suma imensa pentru realizarea programului. Acest moment constituie punctul culminant al baladei. Verbul “trimite-mi” sugereaza repeziciunea cu care Ovidiu Cucu l-a pedepsit pe dusman.

Deznodamantul baladei este pe masura faptelor deosebite narate in desfasurarea actiunii baladei. Continuand naratiunea, autoul prezinta fiorii mortii care-l cuprind pe Ovidiu Cucu: “foicica micsunea, \ vreme multa nu trecea \ si pe Cucu-l ajungea \ MFC-ul, moartea grea”.

Monologul lui Cucu exprima dragostea si recunostinta pentru codul care l-a ajutat: “d-alelei , codutule, \ d-alelei dragutule, \ ce-am gandit \ am izbandit, \ vremea MVP-a sosit”.

Eroul ii incredinteaza codului ultimele sale dorinte printr-un adevarat testament spiritual: el ii cere codului sa fie ingropat in mijlocul proiectului, si sa-I puna la cap floare de bujor iar la picioare busuioc, considerand ca acestea sunt un element de legatura intre el si iubitul lui MFC. Desprinde de-aici, ca si din intreaga balada, sentimentul comuniunii depline a omului cu natura sa de epic. El doreste sa fie inmormantat in mijlocul codului, ca sa se simta aproape de fiintele drage: codul si expertii, si spune acela ce-i va pune fraiele codului va continua lupta impotriva nedreptatii, pe care a dus-o si el pe codexpert.ro.

Natura participa la trasaturile sufletesti ale lui Ovidiu Cucu: incearca sa-i aline suferinta, si-l plange atunci cand trece in lumea umbrelor: “codul se cutremura, \ STL se cletina

Credincios stapanului, codul ii sapa groapa in mijlocul projectului in care el a trait bucuria vietii, ii asterne fanisor in mormant, ii sadeste floati, apoi pleaca in codru la noul sau stapan, “fratior de vitejie, tovaras de MFCie”. Durerea sfasietoare a codului la pierderea stapanului, se deduce din folosirea verbelor la imperfect: coda, se exprima, rezolva quiz-uri…

Prin expresivitatea orala, realizata printr-o multitudine de interjectii, substantive in vocativ, formulele de adresare a personajelor baladei populare FUL, demonstreaza ca literatura, in general literatura populara constituie o forma superioara , forma artistica a comunicarii.

QED (Pentru Marius Bancila: inseamna quod erat demonstrandum).

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

Dilema

Posted in Slagare internationale on September 4th, 2010 by Mihnea

In articolul asta voi vorbi despre cea mai proasta echipa de programatori din lume, desi mi se pare foarte nedrept sa nominalizez una singura, cind sint atitia imbecili care ne fac viata mai grea in fiecare zi prin faptul ca nu le trece prin cap ideea sa-si puna streangul de git.

Daca ar fi pe categorii, mi-ar fi mai usor. De exemplu cel mai prost soft facut vreodata de Microsoft este MSI, sau Windows Installer, sau cum mortii lui il mai cheama acum. Asta nici n-ar trebui sa fie un soft. Pina si hipsterii aia labagii ai lu’ Steve Jobs s-au prins ca 99.98% din programe (procent determinat stiintific) au nevoie doar sa-si puna niste fisiere intr-un director. Solutia lor pentru cei cu nevoi speciale este o voma cu mai multe bug-uri decit linii de cod si cu o interfata care l-ar face pe Sisif sa se bucure ca sint altii si mai oropsiti ca el, dar nu conteaza pentru ca nu ajungi in fundatura aia decit in 0.02% din cazuri. Microsoft Installer e fix pe dos: pretinde ca face un miliard de cacaturi care nu-s necesare nimanui (si oricum nu merg), insa nu poti pur si simplu sa pui niste fisiere intr-un director si gata. A fost nevoie de un tip special de prost care sa conceapa un sistem in care ai nevoie de installer-ul original pe disc ca sa poti sa stergi un program instalat. In plus este ridicol de incet si inevitabil se fute la un moment dat, astfel incit exista o tona de tool-uri si blog-uri dedicate aducerii lui pe calea cea dreapta. Daca Aron Pumnu’ ala ar lucra la mine in firma si ar sta sa scrie pe blog despre cautat “return value 3” prin log-uri in loc sa puna mina sa repare muia aia de soft, as incepe sa-mi pun intrebari.

Sau na, daca am vorbi doar de IDE-uri, ar cistiga detasat puroiul de Xcode. Sau daca ne-ar interesa doar soft open source, am putea alege unul la intimplare. Sau daca ne-am uita la site-uri, ar fi twitter sau failbook. Sau daca am cauta prostie concentrata in chestii mici, l-am putea mentiona pe trogloditul care s-a gindit sa sparga calculatorul din Windows 7 in “moduri”, pisa-l-as in ochii lui de muist. Dar nu, aici caut un soft care sa transcenda categoriile, granitele, spatiul si timpul. Ceva de o prostie absoluta, care sa te faca sa-ti doresti sa reaprinzi cuptoarele si sa-i trimiti la dusuri pe toti cei care au lucrat la el.

Stiu ca unii se gindesc deja la 3D Studio Max, dar nu. Ca sa intelegi proportiile ororii intruchipate in Max trebuie sa fii programator, iar eu vreau ceva care nu tine cont de caste, virste si aptitudini.

Cel mai prost soft facut vreodata este Yahoo Messenger. Este incredibil cum un cacat de program de trimis text prin retea poate sa manince atitea resurse si sa aiba atitea bug-uri. Cum pula mea sa ai nevoie de 110 MB de RAM ca sa trimiti text? Altii s-au dus pe Luna cu 4 KB, adica de 28 de mii de ori mai putin. Cum sa te blochezi ma de fiecare data cind pica conexiunea si incerci sa te reconectezi? Cum sa-ti ia atita timp sa pornesti? Cum sa te blochezi cind se stinge calculatoru’ si astfel sa nu lasi calculatoru’ sa se stinga? Cum pula mea sa umbli la setarile globale de window animations cind cineva da minimize la un geam de-al tau? Luati fratilor, sa le trimita cineva link-ul asta, poate la versiunea 11 le iese.

Da, stiu ca pe linga text mai trimite si voice si video prin retea. Mare cacat. Tot n-ai cum sa ajungi la 110 MB de RAM. Photoshop, Starcraft si versiunile mai vechi de Maya incap in mai putin. Muie.

Daca proiectul asta ar fi fost facut pe rentacoder, ar fi costat 50 de dolari, ar fi durat 2 saptamini si probabil ar fi mers mai bine. Orice indian nespalat care maninca de pe jos si bea apa in care se pisa vacile comunitare l-ar fi facut mai bine. Dar nu, Yahoo a reusit cumva sa stringa atitia prosti intr-o singura echipa, incit prostia lor reunita a devenit ceva mai mult decit suma partilor, ca Capitanu’ Planeta.

Problema e ca daca stii sa programezi, nu te intereseaza sa lucrezi la programe de chat, la twitter sau alte mui. Daca loazele care fac astea s-ar fi nascut cu 10 ani mai devreme, ar fi muncit la state de plata in FoxPro si Paradox. Sau la Canal. Din nefericire, e nevoie si de programele astea, ceea ce creeaza o dilema: cum putem face ca si proiectele de cacat sa fie facute totusi de programatori competenti? Asta ar trebui sa-i preocupe pe toti cretinii aia care se duc la conferinte despre project management, nu cum sa pui cite doi prosti la un calculator, ca la cercul de informatica cind erau mai multi boraci decit HC-uri.

Poate ar merge o chestie gen munca in folosul comunitatii. Daca esti programator si o comiti, poti sa alegi intre amenda, puscarie, luat bataie de la mascati sau ce urmeaza sa ti se intimple si contribuit la un proiect de cacat. S-ar putea face un site unde proiectele de cacat isi prezinta nevoile si tu ti-ai alege. Evident, asta n-ar rezolva toate problemele, ca orice om intreg la cap ar prefera sa faca puscarie in aripa de violatori necrofili fani Mac decit sa incerce sa repare ceva in Max, dar rau n-are cum sa fie. Eu de exemplu as face un program de chat daca mi-ar da mai repede carnetu’ inapoi.

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

Despre alegeri

Posted in Slagare internationale, Stand-up philosophy on September 3rd, 2010 by Mihnea

Se facea ca era odata un exporter de geometrie din Max care folosea NVMeshMender ca sa calculeze tangent frame-urile, deoarece Max e vai steaua lui la acest capitol (ca si la toate celelalte capitole imaginabile). Nici biblioteca asta nu era tocmai un exemplu de robustete, caci din cind in cind ii mai scapau citiva indecsi inexistenti prin output, ceea ce ducea la crapatul lui Max si o stare generala de disconfort in rindul artistilor ce-si pierdeau astfel munca. Intra in scena T., programatorul ce a fost rugat sa verifice ce iese din MeshMender si sa anuleze exportul in caz ca o ia prin balarii, pentru a evita crapatul ulterior. Iata mesajul pe care T. s-a gindit sa-l arate utilizatorului cind problema era detectata:

if(MessageBox(NULL,
    "Error in MeshMender.\n"
    "To avoid crash press OK."
    "It'll not export proper mesh",
    "Prepare for crash", MB_YESNO | MB_ICONERROR) == IDOK)
        return;

Rar ne este dat sa vedem o bucata de cod care inglobeaza atitea principii de buna convietuire intre software si utilizator. In primul rind, dialogul ne intimpina cu un titlu primitor, menit sa ne asigure ca totul este sub control: Prepare for crash. Apoi, software-ul da dovada de flexibilitate maxima, intrebindu-ne daca am dori sa crape si sa ne distruga toata munca, sau nu. Mesajul in sine pare la inceput un pic jucaus si dornic sa stimuleze intuitia si inspiratia utilizatorului – lucruri indispensabile pentru un artist – spunindu-i acestuia sa apese OK daca nu e inca pregatit sa crape, dar afisind doar butoane de Yes si No. Noi insa, ce putem vedea dincolo de mesaj si direct in inima codului, observam ca T. chiar verifica daca utilizatorul a apasat OK, desi nu afiseaza acest buton. Cum utilizatorul nu poate apasa OK, exporter-ul crapa intotdeauna, indiferent de alegere.

T. este de fapt un abil invatator, ce ne poarta printr-o iluzie doar pentru a o strivi violent cind ne simtim mai bine, pentru ca socul sa ne deschida ochii: nu exista liber arbitru. Universul este ori determinist, ori aleatoriu si ambele variante exclud vointa si responsabilitatea morala. Nu exista alegeri, exista doar crash-uri.

Sublim.

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