Emacs - editorul zeilor

March 8th, 2009 Alex

Am fost Joi la Wurbe #18 și am ținut o prezentare despre Emacs.

Nu a fost prea reușită … n-am mai ținut prezentări până acum și m-am cam emoționat :) … încurcându-mă în prezentare am uitat de aspecte importante despre care ar fi trebuit să vorbesc, și am lăsat pe afară alte câteva plugin-uri foarte cool. Plus că am uitat de partea cea mai importantă … resurse de învățare.

Data viitoare o să vin mai bine pregătit :)

Resurse Emacs

Pentru început:

Plugin-urile prezentate:

  • Yasnippets … cu un articol introductiv scris pe celălat blog
  • ISpell și FlySpell (module incluse în distribuție) … integrare cu ispell/aspell ce permite corecția textului în mai multe limbi, inclusiv în română
  • Flymake (modul inclus în distribuție) … ce permite raportarea de erori sintactice în real time, independent de limbajul de programare
  • cperl-mode (inclus în distribuție) … mod editare inteligent de Perl, cu syntax highlighting bine făcut, integrare cu perldoc, și integrare cu Grand Unified Debugger din Emacs
  • python-mode (inclus în distribuție) … modul de Python inteligent, cu debugger integrat cu GUD și interpretor interactiv

Funcționalități care ar fi trebuit să le menționez:

Și bineînțeles … configurația mea de Emacs.

De ce nu Eclipse, Visual Studio, etc…?

Pe vremea când foloseam Eclipse, chiar încercam să-mi placă. Îmi plăcea ideea că este extensibil și că de voie de nevoie are o comunitate, și promite să fie un Visual Studio pentru Linux/Mac OS X.

Dar sunt genul de om ce experimentează cu diverse tehnologii și limbaje de programare destul de „cutting edge”, iar plugin-urile de Eclipse sunt mereu la câteva buguri departe de pragul în care încep a fi funcționale. Și pentru a începe lucrul cu orice limbaj, n-ai nevoie decât de syntax highlighting … atât. Și nici un IDE nu are integrare reală cu alte unelte, fiind monolitice și destul de departe de filozofia Unix.

Și un IDE pe termen lung nu te ajută deoarece din motive greu de prevăzut îți dictează arhitectura aplicației, și influențează întreaga cultură din jurul tehnologiilor suportate, făcând posibile aberații ale naturii, cum ar fi …

BufferedReader in = new BufferedReader(
    new InputStreamReader(
    new FileInputStream("file.txt"), "UTF-8"));

… idee exprimată ceva mai bine în Does Visual Studio Rot the Mind? (Charles Petzold … unul dintre cei mai cunoscuți editori pe tehnologii Microsoft).

Iar pentru o comparație de perspectivă dintre cele două lumi … o diferență între System.Shell.CommandLine și Mono.Options, discuție care n-ar exista dacă System.Shell.CommandLine n-ar fi gândit pentru utilizarea într-un IDE de programatori mediocrii (din fericire se pare că nu vor include totuși System.Shell.CommandLine în următorul preview).

Plus că trebuie să aștepți deschiderea aplicației cam cât îți ia să citești acest articol ;)

De ce Emacs?

Nu cred că pot răspunde prea bine, este mai mult vorba de un sentiment pe care-l simți odată ce reușești să devi familiar cu mediul.

Emacs și Vim sunt două unelte foarte interesante, comparate cu IDE-urile clasice. Nu oferă prea ușor intellisense, n-au interfață de design a interfețelor grafice, și de fapt nu au interfață point&click. Asta nu înseamnă că nu te ajută, departe de asta. Și pentru a lucra eficient, ai nevoie de ceva timp de studiu, și deoarece sunt atât de diferite de mediile tradiționale tranziția este dureroasă.

Munca fizică efectivă a oricărui programator este citirea/generarea/editarea de texte. Cu toate astea instrumentele clasice nu sunt eficiente pentru editare. Este ca diferența între un chirurg ce folosește un bisturiu ascuțit, și un chirurg (al viitorului) ce folosește un roboțel programat din fabrică pentru anumite operații. Esta ca diferența între un set de Lego tematic din care poți construi doar o corabie cu pirați, și unul format doar din cărămizi de diverse forme :)

Lumea a devenit mult prea obsedată de ușurință în folosire, de rezultate rapide, de „instant gratification”. Cu toate astea profesioniștii din alte domenii merg într-o direcție diferită … n-o să auzi de la un chirurg că și-a luat licența fără ani buni de studiu, n-o să auzi de la un pilot de curse că folosește cutie de viteze automată, n-o să auzi de la nici un artist sau sportiv bun că a ajuns unde a ajuns fără o cantitate de efort aproape ireal.

Am exprimat în mare aceeași idee în Obsesie pentru limbaj, de unde și citatul …

The clumsiness of people who have to engage their brain at every step is unbearably painful to watch, at least to me, and that’s what the novice-friendly software makes people do, because there’s no elegance in them, it’s just a mass of features to be learned by rote. However, this suits people a hell of a lot better than setting out at age 6 to become a great ballet dancer and achieving their goal 20 years later after every tendon and muscle and joint has been asked to perform just a little bit more than nature ever intended over and over and over again. To most people, this is insanity. But in reality, it’s art, and it’s the art in what we do that makes us human.

Erik Naggum, Usenet article

Așa că aveți răspunsul … Emacs este pentru artiști. Știu că pare a fi o atitudine arogantă, dar în Emacs simplul fapt că orice acțiune și comportament poate fi controlat din eLisp, simpla idee că-ți poți controla mediul în orice chip imaginabil, și că nu ești limitat de un wizard grafic al cărui rezultat este bătut în cuie … este o idee periculoasă în industria noastră. Asta înseamnă că-ți poți controla mediul, că nu ești o comoditate debarasabilă, că vei putea concura de unul singur cu hale întregi de programatori ieftini ;)

Enjoy ~

Posted in passion, technology, unix | 5 Comments »

Pasiune pierdută

July 19th, 2008 Alex

Odată cu primul calculator am început să-mi cumpăr și reviste din domeniu … în primul rând CHIP, deoarece căutam informați despre noutăți în hardware, în software, dar mai ales deoarece CHIP se livra cu un CD pe care găseai bunătăți.

O nestemată pe care am găsit-o pe CD-urile CHIP și care m-a proiectat definitiv pe calea informaticii este o serie de tutoriale despre modul grafic 13 hexa cu Turbo Pascal + Asamblare ca limbaje de programare. Turbo Pascal era limbajul care ne era predat la școală, și făcusem rost de o copie ilegală pentru calculatorul de acasă.

Tutorialele sunt scrise în format txt cu același stil pe care îl folosesc azi oamenii pe bloguri, și sunt semnate de către DENTHOR of ASPHYXIA, aka Grant Smith. Știu, Internetul a născut o grămadă de nickname-uri amuzante (al meu era bonefry).

Și aventura a început de la …

Procedure SetMCGA;
  BEGIN
    asm
          mov     ax,0013h
          int     10h
    end;
  END;

Îmi amintesc cum pierdeam nopțile lucrând la demonstrați grafice, și deși aveam cu ce mă mândri, nu am arătat decât prietenilor foarte apropiați. Aș fi vrut să particip la un demoscene (tot pe CD-uri CHIP mai găseam demonstrați de la astfel de evenimente), dar eram prea timid pentru asta, și oricum eram total rupt de lume. Mai mult, din păcate harddisk-ul calculatorului meu și-a dat eventual duhul, și mi-am pierdut toată munca.

De ce pasiune pierdută?
Deoarece extazul din acea perioadă nu-l mai simt decât într-o mică măsură, și cam are de-a face cu rahaturile de proiecte la care ajung românii să lucreze (că doar nu ne caută lumea degeaba … suntem ieftini și tolerăm rahatul). La Adobe este OK, dar perioada în care am fost angajat înainte de a ajunge la Adobe mi-a lăsat cicatrici (și se întreabă lumea de ce plecăm din țară).

Mi-am amintit cu plăcere de acea perioadă, și am căutat cele 10 tutoriale, reprezentând o bucățică de amintire pe care nu aș vrea să o pierd. Sunt fericit că le-am găsit, și sunt uploadate pe serverul meu la:

http://lexoft.eu/asphyxia/

Pentru compilare am încercat FreePascal, dar nu merg fără modificări, în principiu deoarece codul a fost scris pentru procesoare 386 ce rulează în modul standard, pe 16 biți. Și în primul rând că trebuie să setezi flaguri pentru selecția arhitecturii.

Începătorii nu cred că mai sunt interesați, acum existând alternative mai high-level precum PyGame, SDL, iar pentru programatori pe Windows ar fi XNA. Dar oricum, dacă aveți curiozitatea eu zic că merită să arunci o privire la felul în care erau create jocurile în anii 80-90. Eu am intrat în posesia lor prin anul 96 (dacă nu mă înșel) și deja DirectX apăruse, dar așa cum am mai spus, acces la Internet nu aveam, și oricum mă bucur că am gustat din plăcerile programării low-level.

Și deh, totul era mai simplu pe vremuri … n-aveai IDE cu intellisense, n-aveai zeci de layere de abstractizare deasupra hardware-ului, și aveai ocazia să te ocupi de detaliile low-level care sunt chiar fun.

Lista, în ordine, este următoarea:

  1. The Basics - Text / HTML / Package
  2. The Pallette - Text / HTML / Package
  3. Circles and Lines - Text / HTML / Package
  4. Virtual Screens - Text / HTML / Package
  5. The Scrolling Saga - Text / HTML / Package
  6. Pre-generated arrays - Text / HTML / Package
  7. Animations - Text / HTML / Package
  8. Optimisation and 3D - Text / HTML / Package
  9. 3D Solids - Text / HTML / Package
  10. Chain 4 - Text / HTML / Package
  11. Crossfade - Text / HTML / Package
  12. Full Screen Scrolling - Text / HTML / Package
  13. Starfields - Text / HTML / Package
  14. Glenzing, faster polys, fixed point and assembler - Text / HTML / Package
  15. Plasmas - Text / HTML / Package
  16. Scaling - Text / HTML / Package
  17. Pixel morphs and statics - Text / HTML / Package
  18. PCX Files and File packing - Text / HTML / Package
  19. Assembler and Fire - Text / HTML / Package
  20. 3D hidden face removal and face sorting - Text / HTML / Package
  21. Free direction texture mapping - Text / HTML / Package

Enjoy ~

Posted in learning, passion | 5 Comments »

Dragonul lui Heghway

July 6th, 2008 Alex

Am vrut să mă detașez un pic de problemele normale de servici, și să mă reîntorc la fascinațiile ce mi-au cucerit inima cândva :)

Mi-a venit idea să desenez un fractal, nimic pretențios, doar geometrie elementară ce presupune rotații, intersecții, și translații. Mi-a și ieșit ceva, însă rezultatul este prea urât ca să-l arăt momentan … încerc să-l fac să semene cu un pom real. Așa că am revenit la ceva mai simplu, și mi-am amintit de dragonul lui Heghway.

Navigând pe net am găsit și un algoritm descris de Knuth în „Arta programării calculatoarelor”, iar individul al cărui blog îl indic descrie următoare implementare în Python …

def create_dragon_set(n):
    """calculate the dragon set, according to Knuth"""
    s = set([0.0+0.0j])
    for i in range(n):
        new_power = (1.0-1.0j)**(-i)
        s |= set(x+new_power for x in s)
    return s

Încă n-am descoperit magia din spatele algoritmului (probabil trebuie să citesc capitolul corespunzător din Knuth), dar algoritmul este atât de concis scris că este aproape echivalent notației matematice.

Aș fi vrut să transform programul într-o animație Flex, și ar fi fost bestial, dar când am început rescrierea am descoperit că ActionScript nu are suport „out-of-the-box” pentru numere complexe, pentru seturi de date (unice) sau pentru list-comprehensions. Și ar fi arătat foarte urât … m-aș fi simțit nașpa să stric astfel de frumusețe.

Rezultatul pentru 5 iterații …

Pentru 7 iterații …

Pentru 10 iterații …

Pentru 12 iterații …

Pentru 19 iterații (și mărit pentru plăcere sporită) …

Putea fi, cum am spus, construit recursiv-geometric, și poate reușesc până la urmă să folosesc Flex la un task pentru care se potrivește.

Posted in learning, passion | No Comments »

Despre pasiune

June 4th, 2008 Alex

Cînd eşti tînăr şi ne-experimentat, visul unei lumi pline de libertăţi şi de oameni ce lucrează nerestricţionat numai la proiecte interesante în folosul umanităţii, pare pe cît ireal, pe atît de fascintant. Banii nu sunt o problemă şi nu-ţi doreşti decît un mediu în care să fi cine vrei tu să fi, şi să te accepte lumea aşa cum eşti, fără cravată, fără cont în bancă şi fără responsabilităţi, dar cu multe vise. Păcat că visele nu durează.

Am încă convingerea că cei mai fericiţi oameni sunt cei ce nu se maturizează niciodată, pentru că-n procesul de maturizare ajungi să vezi lumea aşa cum este … urîtă, meschină şi sufocantă, şi dacă nu-i poţi bate, trebuie să li te alături, iar roata se-nvîrte şi fără să-ţi dai seama, ajungi parte din „sistem”.

Dacă mi-ar citi părinţii acest articol, probabil m-ar trata ca pe un copil căruia i-a venit o idee de salvare a planetei … „ce ar fi dacă am fi cu toţii mai buni şi nu ne-am mai duce la războaie, şi nu am mai omorî animale şi nu am mai polua planeta?”. Da, desigur, acum du-te la culcare.

Dar pe bune, ce ar fi dacă societatea ne-ar accepta pentru ceea ce suntem şi nu ne-ar judeca după cît de bine se potriveşte cravata la cămaşă, şi ce ar fi dacă ne-am asculta instinctul mai des, şi nu instinctul ăla conservator ce s-a născut stînd pe canapea, sau în faţa unui birou … vorbesc de acel instict pe care-l ai de cîte ori vrei să-ţi iei cîmpii şi să zbori oriunde cade degetul pe un glob ce se-nvîrte în faţa ta … ce-ar fi dacă imboldul ar dura mai mult de 3 secunde? Ce-ar fi dacă visele ar dura o viaţă?

Posted in passion | 1 Comment »

Obsesie pentru limbaj

April 5th, 2008 Alex

Timp de 5 luni am fost departe de casă, apartamentul meu fiind trecut printr-un dureros proces de renovare.
Asta a presupus o separare drastică a timpului liber de comoditățile cu care eram obișnuit, printre care și accesul la Internet, iar la servici întotdeauna se găsesc lucruri mai bune de făcut. Suntem totuși fericiți, eu și soția mea iubită, că totul s-a terminat și că suntem în sfârșit acasă.

Desigur, o parte din motivul pentru care nu sunt prea activ pe blog ține de abilitatea mea de a-mi exprima sentimentele în cuvinte. De multe ori simt o anumită idee, sau o anumită concluzie ca urmare al unui șir de evenimente ce au dus la observarea unui șablon, dar în lipsa unui limbaj adecvat sunt incapabil de multe ori să pun lucrurile în perspectivă și prefer să tac din gură. Fără un limbaj bogat procesele cognitive nu funcționează la capacitate maximă. Fără un limbaj adecvat nu ai ordine în idei și o astfel de idee pe care nu o poți exprima în mod eficient nu o poți folosi în construcții mai complexe (nu scalează).

Și ca o paranteză, vă rog să-mi scuzați articolul kilometric, dar n-am reușit să-mi exprim aceste gânduri într-un mod mai succint ;)

Este interesantă astfel paralela care poate fi trasată între programare și comunicarea dintre oameni. Programarea propriu-zisă este procesul prin care comunici unui calculator ideile. Iar cea mai mare problemă din informatică ține de managementul complexității, și dacă exită o determinată, printre colecțiile uriașe de cunoștințe empirice pe care le avem, este eterna complexitate a proiectelor ce crește de multe ori exponențial.

Programarea este cunoaștere.

Ideile sunt într-adevăr exprimate în limbaje străine oamenilor obișnuiți, dar acele limbaje sunt necesare deoarece limbajul natural are o gramatică non-deterministă și este nevoie de inteligență umană pentru a-l înțelege. De fapt, dacă ar fi să definim inteligența umană, am putea-o defini drept capabilitatea de a înțelege și de a comunica folosind limbajul natural (iar mulți oameni de știință sunt de părere că am evoluat din maimuțe odată cu dezvoltarea acestui mijloc eficient de a comunica). Desigur, și un cățeluș este un suflet, și un cățeluș comunică, dar limbajul său este rigid, se naște cu el și nu poate defini noi cuvinte decât foarte greu (există și excepții … Bella, fetița mea rottweiler, își scurură urechile când vrea afară, și-mi citește starea de spirit de cum mă vede, dar desigur, Bella este fata mea).

Practic poți păcăli teoria evoluției deoarece nu este nevoie de mii de generații ca organismul să se adapteze mediilor noi în care trăiești. Poți pur și simplu învăța de la alți oameni experiențe, greșeli, tehnici, și chiar și sentimente. Dacă te-ai ars cu focul, copiii tăi o vor învăța de la tine (deși câteodată este inevitabil pentru copii să repete aceleași greșeli, dar nu mai se pot scuza că n-au știut).

Încet, încet am ajuns la concluzia că cea mai importantă calitate a unui inginer (excluzând ambiția, calitate cu care probabil te naști) NU este folosirea eficientă a uneltelor, și nici învățarea perpetuă de lucruri noi, deși sunt calități destul de importante. Cea mai importană este capabilitatea de exprimare cât mai eficientă a ideilor.

Și ca să pun aceste vorbe în contextul profesiei mele … cu toți simțim asta mai ales când suntem cocoșați de complexitatea unui proiect ce a avut parte de alegeri neinspirate, sau poate o auzim de la alții, dar cred că este nevoie de o oarecare maturitate să o recunoști …

Modularizarea este banală și de multe ori ineficientă, mult mai scalabilă este abstractizarea meta-lingvistică (vezi [1])

Când am început să simt acest adevăr, prima reacție a fost să caut un limbaj de programare mai eficient, mai “enterprise”, mai popular. Eram în liceu și programam mici joculețe în Pascal. Eram total nemulțumit [2] în primul rând datorită restricțiilor impuse de compilator, și prima reacție a fost să învăț C++, deși n-am văzut nici o lumină când transformarea s-a încheiat. O a doua revoltă a fost odată cu trecerea de la PHP la Java, deoarece PHP îmi dădea impresia de jucărie, sau de la Java la Python, într-o încercare de reconciliere cu limbajele dinamice, încercând să-mi regăsesc latura pragmatică.

Există din păcate programatori ce nu reușesc să vadă valoarea limbajelor de programare. Și acești programatori formează o majoritate semnificativă.
Iar din anumite perspective au dreptate să o facă …

  1. un editor de texte deștept poate alina durerea cauzată de folosirea unui limbaj rigid pentru un domeniu pentru care nu a fost proiectat, cazurile cele mai populare fiind C++, Java și C#, iar mulți speră ca într-o zi un IDE le va alina probleme probabil prin citirea gândurilor :) (pentru o părere în acest sens vezi [3]).
  2. Tehnologiile informatice evoluează extrem de rapid, și ce este nou astăzi poate fi depășit peste un an
  3. Un limbaj nou vine cu paradigme noi (de cele mai multe ori, exceptând clonele cu mici variații), și este mai greu de învățat decât un framework nou
  4. Paradigmelor noi nu le observi oricum utilitatea decât după o perioadă de folosire în probleme reale

As long as our hypothetical Blub programmer is looking down the power continuum, he knows he’s looking down. Languages less powerful than Blub are obviously less powerful, because they’re missing some feature he’s used to. But when our hypothetical Blub programmer looks in the other direction, up the power continuum, he doesn’t realize he’s looking up.

(Beating the Averages, Paul Graham [4])

Practic, un limbaj prea diferit de limbajele cu care ești obișnuit are potențialul de a te face să te simți incompetent (vezi plângerile celor ce au încercat Haskell). Și nimeni nu suportă asta.

Și din păcate toată lumea a devenit obsedată de rezultate și câștiguri rapide, de comoditizare, de ieftin și debarasabil, în timp ce adolescenții sunt orbiți de poveștile oamenilor ce au câștigat la Loto, sau de poveștile adolescentelor ce se mai cuplează cu câte un Irinel și cu prețul demnității au parte de succes fără efort (sau cel puțin așa se vede din exterior).

Și vorbind de aparențe, îmi aduc aminte de filmulețele demonstrative ale framework-ului ASP.NET [5]. Și sincer, câtă strălucire, câtă ușurință … trei click-uri, și țaca-paca ai un website complet. Și cât de naiv am fost să cred asta. Pentru că odată ce te apuci de mult subestimatele “probleme reale”, observi cât de non-standard și de problematic este mecanismul de postback, sau cât de rigide sunt componentele standard, sau cât de complex este pipeline-ul prin care se răspunde la un request (lovindu-te de problema abstracțiilor prea ambițioase [6]), sau cât de departe este ASP.NET de paradigmele și șabloanele de proiectare standard folosite în aplicațiile web uzuale, sau cât de rar este folosit ASP.NET pentru proiecte populare, deși tehnologia are deja 7 ani vechime (singura excepție semnificativă fiind MySpace). OK, știu că a mai evoluat, și că ultima versiune în sfârșit vine cu MVC (wow), poate sunt un pic rău, dar tot nu m-aș mai atinge de ASP.NET odată ce m-am fript.

În spusele lui Erik Naggum (vorbind de Haskell vs Lisp) …

If you have a language that is good at demonstrating such things, maybe it has been optimized for demonstrations? At least one really huge software company has made the bulk of its earnings on its ability to demonstrate to other people … what they could do.

From the Latin word “imponere”, base of the obsolete English “impone” and translated as “impress” in modern English, Nordic hackers have coined the terms “imponator” (a device that does nothing but impress bystanders, referred to as the “imponator effect”) and “imponade” (that “goo” that fills you as you get impressed with something — from “marmelade”, often referred as “full of imponade”, always ironic).

Erik Naggum, comp.lang.lisp

Un alt exemplu de regresie în industria IT este obsesia programarilor de a mapa modelul de reprezentare a datelor relaționale în obiecte. SGBD-urile relaționale au multe defecte, iar sistemul relațional de reprezentare a datelor (tabelar), deși cu multe defecte, ne este mai intuitiv decât programarea orientată pe obiecte (cred că și un copil de 5 ani poate pricepe un tabel). Este însă o oarecare prăpastie între obiectele din OOP și datele din sistemul relațional, agravată de necesitatea programatorilor de a învăța SQL. Oh, da. Deși SQL-ul este cea mai utilă abstractizare meta-lingvistică pe care o cunosc, mulți programatori sunt mai mult decât fericiți să folosească metode și clase Java, prost concepute aș mai adăuga, pentru interogări.

De ce ar a vrea cineva să folosească Hibernate sau DB4O, în loc de SQL, cumva îmi scapă.

Adică, dacă vrei validarea automată a tipurilor de date, nu este mai bine să folosești un limbaj mai flexibil?
Dacă vrei să treci facil la MySQL, de la Oracle, nu poți scrie un compilator? Atât teoria [7], cât și uneltele necesare [8] sunt valabile de câțiva zeci de ani, iar uneltele curente au evoluat atât de mult încât este posibilă scrierea unui parser pentru un limbaj relativ complex în câteva ore, cu tot cu teste unitare.

Și da, când vine vorba de compilatoare există un șoc inițial, cauzat de concepte nefamiliare majorității. Și nerăbdarea cu care vrei să aplici aceste tehnici este un dezavantaj.

the clumsiness of people who have to engage their brain at every step is unbearably painful to watch, at least to me, and that’s what the novice-friendly software makes people do, because there’s no elegance in them, it’s just a mass of features to be learned by rote. however, this suits people a hell of a lot better than setting out at age 6 to become a great ballet dancer and
achieving their goal 20 years later after every tendon and muscle and joint has been asked to perform just a little bit more than nature ever intended over and over and over again. to most people, this is insanity. but in reality, it’s art, and it’s the _art_ in what we do that makes us human.

once you have attained that level of effortless and carefree performance, you forget the pain.

Learning Emacs, by Erik Naggum [11]

La ce se reduce totul?

Eu am acceptat abstractizarea meta-lingvistică drept o alternativă la modularizare. Mi-a luat ceva timp, și am trecut prin durere căutând ceva timp limbajul perfect, mediul de dezvoltare perfect, etc… Voi lăsa însă la o parte mănușile și voi îmblânzi dragonul [7].

Limbajele de programare nu sunt nici zei ce trebuie idolatrizați, dar nici efecte secundare ce trebuiesc suportate în așteptarea unui IDE mai bun. Sunt doar unelte de abstractizare a complexității.

Cred că abstractizarea meta-lingvistică este explicată mai bine în cursul 6.001 de la MIT [9], acompaniat de celebra referință Structure and Interpretation of Computer Programs [1].
Deasemenea, vezi … Growing a Language, de Guy Steele [10].

Bibliografie

  1. SICP, chapter 4
  2. Pasiune de copil, si o alegere personala (lexoft.eu)
  3. It’s the IDE, dummy
  4. Beating the Averages
  5. ASP.NET tutorials
  6. Leaky Abstractions, Joel Spolsky
  7. Compilers, the Red Dragon book ;)
  8. Antlr, Bison, Flex
  9. Structure and Interpretation of Computer Programs (Video Lessons)
  10. Growing a Language, Guy Steele
  11. Learning Emacs, Erik Naggum

Posted in compilers, passion, rant | 4 Comments »

Povești interesante

February 28th, 2008 Alex

The Graphing Calculator Story

I used to be a contractor for Apple, working on a secret project. Unfortunately, the computer we were building never saw the light of day. The project was so plagued by politics and ego that when the engineers requested technical oversight, our manager hired a psychologist instead. In August 1993, the project was canceled. A year of my work evaporated, my contract ended, and I was unemployed.

I was frustrated by all the wasted effort, so I decided to uncancel my small part of the project. I had been paid to do a job, and I wanted to finish it. My electronic badge still opened Apple’s doors, so I just kept showing up.

The Greatest Hacker of All Time

All the lights in Colorado Springs had gone out. And that, readers, is to me the greatest hack in history. I’ve seen some amazing hacks. The 8-bit Atari OS. The Mac OS. The phone company computers — well, lots of computers. But I’ve never seen anyone set the world’s lightning record and shut off the power to an entire town, “just to see what would happen”. For a few moments, there in Colorado Springs, he achieved something never before done. He had used the entire planet as a conductor, and sent a pulse through it. In that one moment in the summer of 1899, he made electrical history. That’s right, in 1899 — darn near a hundred years ago.

Este fantastic ce pot realiza oamenii cu suficientă ambiție, iar pasiunea unora sfidează orice logică.

Posted in links, passion | No Comments »

A programmer’s life

January 22nd, 2008 Alex

You do a clerk’s job, you settle for a clerk’s working conditions and wages, but you take solace in the thought that you are somehow more than a clerk, because you have a university degree and the dental technician who cleans your teeth doesn’t.

Only everyone knows it’s a sham, especially the hiring manager who puts “University degree required” in the job advertisement. He wants to hire a clerk, someone who will work long hours doing as they’re told in a top-down, hierarchal command structure. Does that job sound like there is any Science involved? Of course not, everyone knows that, it’s why the industry is trying to weed all of the Science out of a Computer Science degree.

And you’re falling for it, hook, line, and sinker.

- No Disrespect

Simt și eu cam același lucru. Am schimbat ceva servicii într-un timp destul de scurt. Din afară par a fi un neadaptat, dar m-am cam săturat de aceleași taskuri repetitive și plictisitoare, și de șefii ce nu-nțeleg că programarea este marele joc.

Dar este OK. Mă simt bine în pielea mea. Lucrez la ceea ce-mi place.

If it is possible to make yourself into a great hacker, the way to do it may be to make the following deal with yourself: you never have to work on boring projects (unless your family will starve otherwise), and in return, you’ll never allow yourself to do a half-assed job.

- Great Hackers

Posted in management, passion, quotes | No Comments »

Programare pentru cei mici

September 25th, 2007 Alex

Sunt frecvent întrebat de cunoscători: care sunt paşii necesari pentru a deveni programator ?

Nu ştiu. În general mă abţin să dau astfel de sfaturi, mai ales că sfaturi curg din toate direcţiile ;)

E o întrebare grea care n-are mereu răspuns, şi nici nu mă chinui să-l dau deoarece motivele pentru care sunt întrebat sunt extrem de diferite faţă de motivele pentru care mi-am ales eu profesia asta.

Dar pentru cei mici ?

Personal mă încearcă un sentiment cald de împlinire de câte ori am fost pus în situaţia de a da un sfat unui copil sau unui părinte (şi din păcate nu s-a întâmplat prea des). Copiii care întreabă o fac din însă din motivele corecte: sunt curioşi. Calculatorul este o jucărie ce trebuie dezasamblată, iar micile progrămele create sunt motiv de mândrie în faţa prietenilor :)

Programarea pentru copii ar trebui să semene cu un quest parcurs în Final Fantasy, şi pentru un ochi antrenat chiar aşa este :) Programarea până la urmă seamănă cu scrierea de proză, şi de multe ori nici nu este necesar să spui copilului că învaţă să programeze.

Astfel, iată mediile de dezvoltare care mi-au sărit în ochi, perfecte pentru începutul unei cariere, sau al unui hobby:

Alice - creezi o lume virtuală şi animezi obiectele folosind comenzi (de programare) construite cu mouse-ul prin drag&drop

Squeak - un mediu Smaltalk special creat pentru copii, ce permite crearea facilă de interfeţe grafice, dar care a ajuns să fie folosit în aplicaţii serioase.

Scratch - seamănă foarte mult cu Alice de mai sus, dar interfaţa este pe web. Se pare că este creat cu Squeak.

Lego Mindstorm - cel mai cool proiect de care am auzit vreodată: îţi construieşti fizic un roboţel din piese puse la dispoziţie de Lego, şi apoi îl programezi cu scripturi. Din păcate costă, dar copiii merită orice sacrificiu.

OLPC - laptopul minune, proiectat special pentru copii. Vine din fabricaţie cu Squeak, Python, capabil să ruleze o grămadă de alte pachete educaţionale. Din păcate guvernarea actuală a respins proiectul, poate din incompetenţă sau poate că li s-a sugerat din afară, nici nu prea mai contează de ce. Când va fi pus la vânzare însă, sunt dispus să plătesc $400 pentru unul.

OpenMoko - se vrea a fi un telefon mobil de rangul iPhone-ului. Însă este o platformă de calcul destul de capabilă, cu o comunitate în spate, cu specificaţii deschise, cu un kernel de Linux, cu documentaţie despre cum să-l dezasamblezi şi cu codul sursă valabil la toate aplicaţiile disponibile. Jucăria perfectă :)

Posted in edu, passion | 3 Comments »

La mulţi ani, Linux

September 16th, 2007 Alex

tux2.png

Pe 17 Septembrie 1991 Linus Tolvards lansa versiunea 0.01 a kernelului Linux cu extrem de multă modestie. Codul sursă a devenit disponibil pentru oricine ar fi vrut să participe la dezvoltarea sa (deşi componente vitale cum ar fi compilatorul GCC si biblioteca standard GNU C erau deja valabile mulţumită proiectului GNU, simbioză fără de care GNU/Linux nu ar fi existat).

Linux împlineşte 16 ani. Este momentul perfect pentru adresarea câtorva cuvinte de suport comunităţii. Şi dacă vă puteţi permite, sărbătoriţi împărţind prietenilor CD-uri cu distribuţia dvs preferată.

Pentru mine Linux este o platformă, o comunitate, o stare de spirit. Fără ecosistemul Linux culoarea industriei IT ar fi cu siguranţă mult mai gri.

Nu pot decât să mulţumesc din inimă pasionaţilor ce au ajutat la dezvoltarea sa, deşi cuvintele sunt cam de prisos. Sunteţi eroii mei :)

P.S. Pentru mai multe mulţumiri din partea utilizatorilor de Linux, intraţi aici: linuxday.getnix.com

Posted in linux, passion | No Comments »

Pasiune de copil, şi o alegere personală

August 25th, 2007 Alex

Îmi amintesc de prima zi când am pus mâna pe un PC. Eram clasa a 5-a. Eram la ora de informatică. Profesorii ne lăsau în pace timp de 2 ore în care cine apuca un scaun liber se putea juca în voie jocuri legendare precum Lion King sau Aladin.

În fiecare zi când veneam de la şcoala treceam prin faţa unui magazin “cu de toate”, ce avea în vitrină un PC de vânzare. Salivam efectiv în fereastră, după care mă duceam acasă, puneam mâna pe cartea mea de Sinclair Basic, din care nu înţelegeam mare lucru în afara faptului că aş putea să proiectez jocuri şi progrămele de unul singur, şi visam cu ochii deschişi.

În clasa a 8-a mi-au cumpărat părinţii în sfârsit primul PC. Era un Gateway 2000 486 DX2 la 66 MHz, cu 4 MB de RAM şi hard-disk de 400 MB. Ca sistem de operare aveam MS-DOS 6 şi Windows for Workgroups 3.11 … ambele cu licenţă.

În fiecare zi aveam voie doar două-trei ore să-l folosesc. Îmi era suficient însă să-l repartiţionez, să-l formatez şi să reinstalez sistemul de operare cel puţin odată pe zi. Încercam din răsputeri să înţeleg ceva dintr-o mini-referinţă de buzunar de Turbo Pascal. Mâncam pe pâine orele de informatică desfăşurate pe HC-uri 90. Eram extrem de curios, şi singurul meu regret este că n-am încercat mai insistent să găsesc documentaţie mai de calitate. Acces la Internet nu aveam şi profesorii de informatică sunt în general oameni necăjiţi, prost plătiţi şi plini de probleme. Dacă ajung să predea în scoli generale sau în licee, nu sunt din păcate în stare decât să mimeze că predau informatică.

La procesul de instalare şi reinstalare a Windows-ului, trebuia să mă uit şi să înghit acelaşi slide-show în care mi se explica ce viaţă minunată voi avea cu noua versiune a sistemului de operare pe care am dat o căruţă de bani (yeap, toate calculatoarele folosite până acum au avut licenţe pt Windows) … mai sigură, mai rapidă, mai interactivă … după care dacă nu vroiam să mă infectez cu “One Half” trebuia să-mi instalez şi doi sau trei antiviruşi (f-scan, rav şi mcfee … preferaţii mei pe care-i rulam secvenţial în fiecare seară).Mă duceam la un Internet-Cafee local cu o conexiune ce nu mergea niciodată mai bine de 4 Kb/sec, şi căutam cu disperare documentaţii despre programare … orice găseam. N-aveam noroc. Nu ştiam ce să caut. Şi când găseam câte ceva stăteam ore întregi să downloadez cateva sute de kilo.

msfreedom.png

Azi sunt un om fericit. Accesul la informaţie stă la baza degetelor mele :)

Am tot ce vreau … tutoriale, documentaţii, cod sursă, şi acces la comunităţi vaste de oameni extrem de talentaţi şi de pasionaţi. Datorită copilăriei mele, când lipsa de informaţie mi-a sugrumat curiozitatea, am ajuns să preţuiesc munca altora, am ajuns să preţuiesc Internetul, am ajuns să preţuiesc libertatea de exprimare.

Distribuţiile de Linux vin cu tone de documentaţii, cu zeci de compilatoare, cu buildere, cu medii de dezvoltare, cu cod sursă, cu manipulatoare de imagini şi de grafică vectorială, cu programe de calcul ştiinţific, cu procesoare de texte, cu sute de programe proiectate pentru aproape orice sarcină care-ţi trece prin cap.

Încă mă simt ca un copil de fiecare dată când emit la consolă “sudo aptitude install”, de fiecare dată când învăţ ceva nou, de fiecare dată când citesc ştiri din comunitate, de fiecare dată când mi se aduc mulţumiri pentru o treabă bine făcută. Mă simt ca un copil în fiecare zi.

Fac parte din cei 3% din utilizatorii de PC-uri care sunt inspiraţi de Linux … este gratuit, este liber, este pentru mine.

Posted in lifestyle, passion | 14 Comments »