Google Chrome

December 11th, 2009 Alex

Mi-am instalat şi eu Google Chrome că a fost lansată versiunea beta de Linux. Însă sunt utilizator înrăit de Firefox şi nu prea aveam speranţe mari.

În Firefox sunt dependent de …

  • Web developer toolbar
  • Firebug
  • plugin-ul de delicious
  • live http headers
  • la inputul URL-ului se face fulltext search în History pe URL / titlul paginii
  • feature-ul „add keyword for this search” ce-mi permite să fac căutari rapide pe Answer.com, dexonline.ro şi wikipedia.com

Ultimul feature este valabil în Chrome, dar setarea unui search-engine e mai peste mână. Şi pt penultimul feature poţi defini un shortcut în aşa fel încât dacă-i dai „h jquery” să-ţi facă căutarea „chrome://history/#q=jquery” care este fulltext, dar e mai naşpa de folosit. În rest plugin-urile alea nu sunt valabile, deşi s-ar putea să apară alternative.

Şi pentru că este un browser nou, mai are şi probleme de randare la unele pagini.

Dar … Jesus Christ … cât de rapid este faţă de Firefox, îmi place la nebunie interfaţa, şi în Firefox mi se bloca tot browser-ul când se bloca un script dintr-un tab (şi mi se întâmplă des) de trebuia să aştept dialogul „would you like to stop this script?”.

Choice anxiety” în acţiune pt un rahat de browser.

Posted in review, technology | No Comments »

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 »

Limbaje de programare, ză fiuciăr

February 15th, 2009 Alex

Eul meu alternativ a scris pe celălalt blog o mică diatribă despre problemele combinării de biblioteci de cod scrise în limbaje de programare diferite.

Şi mai am o altă problemă: instrumentele curente de design al unui limbaj de programare sunt destul de primitive. Yacc/Lex sunt decente, dar odată parserul complet cam trebuie să lucrezi la propriul backend cu un minim de facilităţi necesare, cum ar fi garbage-collection şi FFI.
Sau interpretorul se poate baza pe un VM stabil şi complet, cum ar fi JVM sau CLR. Însă din păcate maşinile astea virtuale sunt specifice limbajelor statice pentru care-au fost create, Java/C#, şi deşi JRuby în diverse benchmark-uri are performanţe mai bune ca Ruby MRI, asta spune mai multe despre performanţa proastă a implementării de referinţă. Şi există Antlr (gramatică EBNF, parsare LL(*), AntlrWorks, backend-uri multiple), dar nu-mi rezolvă problema.

Am început să mă joc cu Parrot şi cu Rakudo, implementarea de Perl6. Parrot mi se pare genial şi pentru Februarie este pregătită versiunea 1.0. Parte din Parrot face parte şi PGE (Parrot Grammar Engine) ce permite definirea de expresii regulate cu nume ataşat. Mă rog, termenul de „expresie regulată” nu prea e corect deoarece în PGE expresiile pot fi recursive (uite o întrebare de interviu pentru tortură maximă: dă-mi un exemplu de conţinut ce nu poate fi parsat cu un regex şi demonstrează de ce :) ). Şi tot Parrot îţi pune la dispoziţie unelte pentru reprezentarea AST-ului / compilarea în bytecode.

Planul meu de dominare a lumii începe.
~

Posted in perl, technology | 2 Comments »

Articol pe blog.alexn.org

February 2nd, 2009 Alex

Celălalt blog al meu nu primeşte prea multă dragoste. Azi am spart gheaţa :)

Enjoy ~

Posted in programming, technology | 2 Comments »

Social bitching

January 8th, 2009 Alex

Se zice că o aplicaţie este bună atunci când este folosită în scopuri la care autorii originali nu s-au gândit, dar câteodată întrebuinţările chiar sunt trase de păr.

Înţeleg nevoia de reţele sociale, pentru conectare, informare şi comunicare, pân` la urmă suntem creaturi cu nevoi sociale, dar n-o să înţeleg niciodată oamenii care urmăresc peste 50 de oameni pe Twitter. Eu urmăresc 11 oameni, şi sunt chiar interesat de ceea ce au de spus, dar chiar şi aşa, îmi scapă necitite o grămadă de mesaje, şi deja mi se pare zgomotul prea mare.

La 100 de „prieteni”, situaţie pe care o văd extrem de des inclusiv la câţiva dintre cei 11, ajungi să citeşti doar 5-10% din mesaje, şi cu toate că am listaţi momentan 40 de „ascultători”, sunt sigur că mesajele mele se duc în vid. Iar comunicarea este întrebuinţarea principală pentru Twitter, mai presus de conexiuni.

Mi-au zburat gândurile la acest aspect deoarece aparent sunt urmărit de Reg Braithwaite, un individ al cărui blog îl citeam cu sfinţenie (din păcate a renunţat la compunerea de eseruri). Dar fiind unul dintre cei 131 de oameni urmăriţi, este ca şi când n-aş fi.

Plus că oamenii au tendinţa de a-şi pune statusul actual mult prea des pe Twitter, gen „mănânc paste”, sau „mă cac”, şi mi se pare ok, între prieteni, dar nu când eşti conectat cu persoane care nu le-ai întâlnit niciodată. În loc să anunţi când îţi satisfaci nevoile primitive, mai bine oferi un link mişto, sau o bucăţică de înţelepciune, sau un eveniment, sau pur şi simplu o încurajare pentru noul an, pentru că mesajele n-au categorii ca să le poţi filtra.

Eh ~

Posted in rant, technology | No Comments »

Perl, primele impresii

September 21st, 2008 Alex

Perl CamelM-am jucat un pic cu Perl.

Aveam o impresie destul de proastă despre limbaj din motive evidente:

  • sintaxa este concisă și sunt folosite caractere despre al căror sens nu-ți dai seama decât după ce citești un tutorial
  • în ultimul timp Perl primește multe critici de la programatori Python/Ruby

Încă nu am ajuns departe, limbajul fiind un pic mai greu de învățat, dar momentan sunt plăcut surprins.

Scopul lexical al variabilelor este așa cum te-ai aștepta: o variabilă este privată blocului în care este declarată și variabilele din blocurile exterioare sunt ascunse atunci când este conflict de nume. Iar bloc de cod chiar se referă la orice bloc de cod, adică poți declara variabile vizibile doar în ciclul „while” curent.

În 5.10 metodele pot folosi conceptul de variabilă “statică” din C … adică o variabilă globală ce poate fi accesată numai din interiorul metodei unde este declarată. Sună a moft, dar chiar este util pentru încapsulare, și în anumite situații chiar nu ai nevoie de oop.

Perl este loosly-typed, și experiența cu PHP mi-a lăsat un gust amar, dar cu directivele „use strict” și „use warnings” compilatorul generează o grămadă de erori și avertismente, și fiți pe fază … de la compilare, nu de la runtime. Exemplu:

use strict;
use warnings;
#use diagnostics;
 
sub add_to_list {
    my ($number, @list) = @_; # parametru
 
    sub add {
	return $_ + $number;
    }
 
    map add, @list;
}
 
my @x = add_to_list 0, (1..5);
my @y = add_to_list 5, (1..5);
print "@x\n";
print "@y\n";

Output-ul scriptului este:

Variable "$number" will not stay shared at ./learn line 11.
1 2 3 4 5
1 2 3 4 5

Avertismentul este dat o singură dată, la început, înainte de execuția efectivă a codului. Nu se înțeleg multe, dar dacă folosim directiva „use diagnostics” ni se explică mesajul: funția add nu este anonimă și deci este construită o singură dată, la primul apel al funcției „add_to_list”. Pentru construcția unei funcții ce capturează contextul curent de fiecare dată avem nevoie de un bloc de cod anonim:

sub add_to_list {
    my ($number, @list) = @_; # parametru
 
    my $add = sub {
	return $_ + $number;
    };
 
    map &$add, @list;
}

Cu output:

1 2 3 4 5
6 7 8 9 10

O chestie ce nu mi-a plăcut este noțiunea de referință. Lisp este primul limbaj unde toate variabilele reprezintă referințe la obiecte și nu obiecte propriu-zise. În Perl se face însă distincția. Pe de o parte este bine, deoarece se lucrează mai mult cu clone și se minimizează efectele secundare, dar se înmulțesc lucrurile pe care trebuie să le reți pentru a lucra cu limbajul. De exemplu listele, tip de dată fundamental, nu pot reține decât scalari (i.e. nu pot reține alte liste). Pentru a include liste în liste poți include referințe la liste, referințe care sunt considerate a fi scalari. E ok, dar e cam complicat.

Caracterul loosely-typed mă deranjează un pic, deoarece am coșmaruri de la PHP. Nu este la fel de rău când folosești „use strict”, dar încă apar chestii ciudate, cum ar fi că șirul de caractere “0″ este evaluat ca fals dacă este întâlnit într-un context în care se cere valoare booleană (if, while, etc..).

Are closures și sunt pe bune:

my @func;
 
foreach my $i (0..10) {
    push @func, sub{ 
	my($arg)=@_; 
	$arg * $i;
    };
}
 
print &{$func[$_]}(2),"\n"
    foreach (0..10);

În exemplu se crează un vector, în care fiecărui index $i i se asociază o funcție ce ia un parametru și-l înmulțește cu $i. La fel ca în Javascript, variabilele din context sunt capturate prin referință, nu prin valoare. Același exemplu formulat altfel poate da rezultate neașteptate:

my @func;
 
for (my $i=0; $i<=10; $i++) {
    push @func, sub{ 
	my($arg)=@_; 
	$arg * $i;
    };
}
 
print &{$func[$_]}(2),"\n"
    foreach (0..10);

Documentația oficială este bestială. Credeam că Python are cea mai bună documentație. Vezi learn.perl.org și perldoc.perl.org.

OOP-ul nu este chiar inclus în limbaj. Nu ar fi o problemă, din punctul meu de vedere oop-ul este supra-apreciat. Cu structuri de date suficient de flexibile, și dacă limbajul permite ceva „syntactic-sugar”, poți lucra OO fără probleme. Problema ar fi de standardizare. Common Lisp are CLOS. Se pare că există un add-on pentru Perl care a devenit standard pentru bibliotecile de cod moderne (e.g. Catalyst): Moose. Dar până să-mi dau cu părerea despre Moose, mai am de experimentat.

Posted in programming, technology | No Comments »

Despre optimizări

June 18th, 2008 Alex

Care sunt calitățile elementare ale unei aplicații de succes? Care sunt acele elemente care nu trebuie în nici un caz să lipsească?

Cu siguranță nu poți alcătui o listă completă deoarece nu există rețete tehnice ale succesului bătute în cuie, de multe ori contând enorm și factori externi, și se știe că este nevoie de o atingere de geniu pentru un design reușit. Iar momentan nu pot vorbi de design, deoarece nu am suficientă experiență, deși este un domeniu ce mă interesează. Dar există o temă recurentă … oamenii nu au suficient timp și sunt și leneși, motiv pentru care interfața trebuie gândită pentru a minimiza timpul de folosire a funcționalităților iar timpul de răspuns la interogări trebuie să fie instant.

Premature optimization is the root of all evil.

Donald Knuth a spus asta. Și în general are dreptate, deoarece optimizând local are de suferit calitatea codului și mai mult, arhitectura proiectului. Ori cu o arhitectură bună ai posibilitatea de a observa optimizări globale. Polul opus afirmației respective este la fel de periculos. Nu trebuie să optimizezi prematur, dar trebuie să ai în vedere optimizări pe care le-ai putea face în timp.

În general se poate observa că … dacă aplicația nu este suficient de rapidă, oamenii nu o vor folosi, mai ales în cazul existenței unei alternative mai bune.

Există și un exemplu foarte interesant ce susține această afirmație … Google a făcut acum ceva timp ”a/b testing” cu numărul de rezultate afișate. Practic jumătate din utilizatori primeau zece rezultate afișate pe pagină, în timp ce cealaltă jumătatea primea 30. Și asta deoarece existau clienți ce cereau mai mult de zece rezultate pe pagină. Statisticile au arătat însă că lotul ce primea zece rezultate era mai fericit deoarece calcularea și afișarea a zece rezultate durează cu o fracțiune de secundă mai puțin. Iar pagina de afișare a rezultatelor din Google chiar este optimizată la extrem.

Cine are impresia că performanța aplicațiilor nu mai contează în zilele noastre deoarece procesoarele sunt suficient de rapide … se înșală. Mai ales că în cazul poveștilor de succes în care sunt folosite limbaje de scripting lente … se întâmplă ca gâtuirea performanței să se afle în altă parte (la nivelul SGBD-ului, sau la asamblarea rezultatelor în cazul aplicațiilor distribuite, etc…).

Ca un exemplu de eșec pe partea de desktop ar fi Windows Vista. Cu toate că Vista va fi oricum popular din motive externe, mai ales după al 2-lea sau al 3-lea service pack, unul din defectele principale este performanța proastă, chiar și pe calculatoare foarte bune. Iar efectele grafice accentuează problema, deoarece în loc de un răspuns rapid primești efecte grafice de tranziție care practic nu ajută la nimic. Un alt exemplu de cealaltă parte a baricadei este OpenOffice … sorry, dar atâta timp cât Microsoft Office are un timp de răspuns mai bun (și are), OpenOffice nu are nici o șansă decât pe piața foarte low-end. Când am fost la conferința MySQL am vorbit cu un individ de la SUN despre OpenOffice 3, și sunt oarecum dezamăgit deoarece au îmbunătățit ei un pic arhitectura, fiind mai modulară, dar performanța nu este pe lista priorităților.

Am un proiect personal, și drept calități mi-am propus următoarele:

  1. design sexy
  2. start instant (m-am săturat de aplicații ce au nevoie de un minut pentru a porni)
  3. consum acceptabil de memorie (să fie utilizabil pe un sistem cu 512 MB RAM)
  4. interfața să răspundă instant la comenzi și să dea impresia de stabilitate
  5. să fie extensibil prin plugin-uri
  6. să fie multiplatform

N-ar trebui să fie greu, nu? :)

Va urma …

Posted in design, technology | 8 Comments »

OpenSuse 10.3 … impresii

May 31st, 2008 Alex

Competiţie …

Calculatorul de acasă, deşi este decent, a cam stat pe bară timp de vreo şase luni din diverse motive. Foloseam cu mândrie Ubuntu Linux, dar la fiecare versiune nouă apar probleme noi şi aventual se rezolvă dar ulterior vine iar timpul să upgradezi la o nouă versiune şi m-am săturat de upgrade-uri.

Plus că fiecare versiune nouă vine cu software extrem de experimental, în stadiu beta de multe ori, iar de vrei versiuni noi ale aplicaţiilor pe o distribuţie mai veche, poate ai noroc să apară în „backports”, dar de obicei nu apare deoarece cultura în comunitate favorizează upgrade-ul distribuţiei.

Nu mă înţelegeţi greşit, încă iubesc Ubuntu Linux, şi probabil problemele astea de management se vor corecta.

Însă m-au enervat problemele din ultima versiune (Hardy Heron), şi am hotărât că cel mai bine ar fi o mică schimbare de perspectivă. Este destul de dificil să accept prea multe dificultăţi în ultimul timp fiind răsfăţat de Mac OS X şi parcă nu mai am energia necesară să caut pe forumuri soluţii la sute de probleme de fiecare dată când vreau să mă apuc de treabă.

Am încercat să mă reîmprietenesc cu Windows, că nu poate fi dracul atât de negru :) , mai ales că am o licenţă de Vista Home Premium, dar trebuie să spun că este un eşec, şi am stat 2 ore să-mi dau seama de ce îmi merge hard-disk-ul în continuu fără pauze … şi deoarece procesul ce-mi ţinea hard-ul ocupat era mascat în Task Manager cu „svchost” am dezactivat pe rând servicii ca Windows Search, Shadow Copy, până când am ajuns la SuperFetch.

Total inacceptabil, deoarece nu numai că-mi pune calculatorul în genunchi (şi este un calculator decent, cu Intel Core 2 Duo şi 2 GB de Ram), dar nici nu se pun instrumente de management la dispoziţie pentru a căuta cauza problemei. Tipic pentru Microsoft … utilizatorii sunt idioţi şi n-au ce căuta să umble la astfel de setări.

OpenSuse 10.3

După ce am hotărât că şi o distribuţie stricată de Linux este mai bună decât Windows, mi-am venit în fire :) … şi am instalat OpenSuse 10.3, iar în loc de Gnome, am ales KDE.

Probleme la instalare

Nu a fost ca o plimbare în parc, deoarece am avut probleme cu placa de reţea wireless. Am un D-Link dwl g122 rev C1, ce merge pe ultima versiune de Ubuntu, dar nu merge din start pe OpenSuse. Deşi driverul este prezent, aparent nu are firmware, şi a trebuit să-l instalez din surse, fiind destul de complicat, dar am închis ochii deoarece vina este a producătorilor hardware când vine vorba de wireless.

Dar oricum, a fost greu, şi problema este că trebuie să păstrezi sursele la driver prin preajmă, că trebuie reinstalat de câte ori faci upgrade la kernel … „show-stopper” cum ar zice americanul, şi „ca p*la” cum aş zice eu.

Mai sunt probleme pentru noi, românii, deoarece fontul configurat implicit nu suportă diacritice româneşti, nici cu sedilă, nici cu virgulă (poate am sărit vreo etapă la instalare?). Şi mi-am configurat manual fontul la setul „DejaVu” ce suportă caracterele respective şi de care sunt extrem de mulţumit.

Managementul de pachete

Iniţial arhivele de pachete cu care vine configurat OpenSuse nu sunt suficiente, mai ales dacă vrei să instalezi codecuri audio/video sau aplicaţii mai exotice. Eu am reuşit să instalez noi arhive folosind opţiunile valabile din „Yast/Software/Community Repositories”. Dar există şi o pagină Wiki ce descrie mai multe arhive valabile.

În versiunile precedente lumea se plângea de calitatea proastă a package managerului implicit, Miguel de Icaza recomandând Smart. Versiunea 10.3 aparent are un nou manager pe nume „zypper”, şi pare destul de capabil deşi se mişcă mai greu ca apt-get din Ubuntu/Debian şi mă cam oftică.

În OpenSuse a mai fost introdus sistemul One Click Install în combinaţie cu serviciul de build care este pus la dispoziţie de Novell … şi poţi căuta pachete pe “packages.opensuse-community.org” pe care le poţi instala cu un click pe butonul de „Install” din browser. Şi mi-am instalat în acest fel Firefox 3 Beta.

Aplicaţii Proprietare

DVD-ul OpenSuse 10.3 vine cu Adobe Acrobat 8, cu Flash Player 9 şi cu Real Player. Şi este foarte util deoarece sunt întreţinute pe repository-ul central (non-oss) şi beneficiază astfel de update automat. Driverul plăcii grafice s-a instalat automat, şi pot raporta că Tremulous merge fără probleme :).

O altă bilă albă este integrarea produselor proprietare … Adobe Acrobat merge fără probleme în Firefox, iar când am instalat Eclipse s-a instalat cu Sun Java 6 ca dependinţă (nu cu GCJ, sau alte prosti).

Impresii generale

Interfaţa este bine integrată, diferenţa de aspect dintre aplicaţiile KDE şi cele Gnome fiind minimă. Sistemul dă impresia de stabilitate, şi deja lucrez pe el cam de o lună la proiecte pentru şcoală.

Ca facilităţi prezente mai rar în alte distribuţii, OpenSuse 10.3 vine din start configurat cu meniul Kickoff, şi este belea de util, mai ales în combinaţie cu Beagle. Iar Yast este un instrument grafic de configurare a sistemului, şi deşi este din topor pe alocuri, în mare este intuitiv fiind aproape o soluţie completă de configurare a sistemului. Poţi configura „file sharing” cu Samba, securitatea sistemului (firewall, app armor, user management), tipul de autentificare (ldap, windows), reţeaua locală, diverse setări de hardware, etc…

Ca securitate, nu am experienţă cu OpenSuse, dar am putut seta firewall-ul destul de uşor cu Yast. Tot OpenSuse este livrat cu AppArmor, un serviciu de securitate ce previne accesul neautorizat al aplicaţiilor la resurse în afara domeniului lor de activitate, fiind o adiţie foarte necesară la sistemul de utilizatori standard, sistem ce nu oferă decât protecţie limitată. AppArmor poate fi configurat destul de uşor, şi sunt impresionat, mai ales că am experienţe nasoale cu SELinux.

Per total, până acum este OK şi chiar nu sunt generos la complimente, mai ales că m-am obişnuit cu interfaţa din Mac OS X, dar OpenSuse este bine integrat şi uşor de configurat.

Posted in linux, technology | No Comments »

Emacs, editorul programabil

May 10th, 2008 Alex

De ceva timp am început să fac tranziția de la Vim la Emacs. Știu, știu, cum aș putea? :)

Se poate pune întrebarea, de ce-mi creez atâtea probleme? Adică nu este de ajuns Notepad, sau orice editor de texte?

Într-adevăr, dacă programatorii ar gândi mai mult și ar scrie mai puțin cod, probabil lumea ar fi mai bună :) Dar pentru a putea gândi mai mult, trebuie să înlăturăm complexitatea accidentală (despre complexitate accidentală vezi No Silver Bullet). Programarea, pe lângă creativitate, mai presupune și muncă brută, și la fel ca marii atleți, programarea efectivă (i.e. procesul de comunicare cu calculatorul) trebuie să devină o activitate pe care o faci din reflex (fără să te gândești, la fel ca mersul pe bicicletă).

Use a Single Editor Well
The editor should be an extension of your hand; make sure your editor is configurable, extensible, and programmable.

Pragmatic Programmer

Majoritatea timpului programarea se reduce la editarea de texte (cod, specs, email-uri între membrii echipei, merge de branch-uri, etc…), ai un avantaj destul de mare dacă ai un editor de texte puternic și adaptabil la orice nevoi. Și deși Eclipse este un IDE respectabil cu extrem de multe plugin-uri, chiar nu se compară la flexibilitate și eficiență, ca să nu mai vorbesc de resursele imense folosite. Vim este un prieten vechi, și din punct de vedere al editării de texte, este cel mai eficient editor. Nu cred că voi renunța însă niciodată la vim, mai ales că prezența unui editor compatibil vi este cerință în standardul Posix, iar Vim este prezent pe orice server cu care am interacționat vreodată.

Dar Emacs este cu totul altceva, și sincer să fiu, este greu de explicat de ce Emacs este ceea ce este. Deși este vechi de vreo 25 de ani, pot pune pariu că este singurul mediu de dezvoltare ce încă va fi relevant și peste 100 de ani de acum încolo.

Nu totul este perfect, și pentru un exemplu concret, în Emacs este destul de greu să definești un mod de editare pentru un limbaj de programare nou, fără să ai experiență serioasă cu Emacs Lisp, și există destul de puține limbaje de programare pentru care există suport pentru intellisense și pentru refactoring (până acum știu de Lisp, Java, Python, și în curând Javascript). Comparativ cu Textmate, unde editarea unui bundle este extrem de ușoară datorită unei abstractizări metalingvistice destul de reușite (deși pentru Textmate nu știu deocamdată de nici un limbaj cu suport de intellisense și de refactoring).

Tranziția la Emacs chiar nu este ușoară, și nici nu știu sigur dacă va reuși, dar o iau foarte în serios, și oricum, drept consolare a unei eventuale nereușite cel puțin Emacs Lisp este al naibii de cool ;) Și deja am început să mă gândesc la lucruri ce-mi lipsesc și să le implementez de unul singur. De exemplu îmi lipsește din Eclipse fereastra de Open Resource, ce-ți permite să cauți după wildcards nume de fișiere din proiect, și mi-am implementat o funcționalitate aproape echivalentă în emacs.

Pluginul l-am făcut public … open-resource.el

Este foarte simpluț, dar plănuiesc să-i adaug funcționalități ulterioare … cum ar fi o listă de sugestii în timp ce tastezi, sau să facă cautare și prin CTags de exemplu.

Posted in emacs, technology, unix | 8 Comments »

Digital “Restrictions” Management

May 6th, 2008 Alex

Free Software

N-am mai scris demult despre Free Software – Free Culture, în primul rând deoarece m-am săturat de toți mucoșii de 12 ani care au impresia că știu cu ce se mănâncă Free Software – Open Source, deși dacă-i cauți pe hard-disk mai mult ca sigur au instalată o partiție cu-n Windows fără licență și cu tone de jocuri și fișiere media ilegal copiate de pe DC++.

De unde știu și de ce vorbesc atât de ușor?
Este simplu … deoarece și eu eram la fel acum 2-3 ani. S-au schimbat însă multe lucruri de atunci. În primul rând că am o mică familie pentru care sunt responsabil, iar în momentul în care ai responsabilități idealurile sunt destul de brutal filtrate prin perspectiva omului ce-și face griji pentru ziua de mâine.

Nu dau vina însă pe comunitățile Free Software. Raportul semnal/zgomot este cam la fel pretutindeni, și primul motiv pentru care am ales să fiu un „credincios” a fost tocmai acest raport, mult mai bun față de comunitățile concurente ;). Dar a trebuit să cresc mare și să observ că idealurile sociale duc la fanatism, și deși este OK să fi fanatic pe termen scurt, pe termen lung uiți cine ești, uiți de unde vi, și uiți pasiunea cu care ai început să faci ceea ce faci … lupta devenind o durere, victoria fiind doar eliberare de o povară.

Alb/Negru sau Color?

În ultimul timp m-am împrietenit cu al meu Mac … iar comunitatea de dezvoltatori din jurul Mac-ului are cel mai bun raport semnal/zgomot din câte am experimentat. Unii dezvoltă open-source, alții dezvoltă aplicații comerciale … și dacă este o constantă, pot arăta către design-ul desăvârșit al majorității aplicațiilor ce rulează pe Mac.
Calculatorul de acasă, cel pe care-l folosesc pentru media și pentru proiecte personale, încă rulează Ubuntu, și singura aplicație specifică de pe Mac este Textmate.

Deși lucrez la Adobe încă folosesc Gimp, deși Photoshop este mult superior … blasfemie ar zice unii … doar că Gimp este fun, și scriptabil în Scheme (deși îmi pare rău că nu am încercat prea multe scripturi) … ce ar vrea mai mult un programator care-și retușează fotografiile personale?

Despre Textmate … este un editor de texte mediocru în comparație cu emacs, dar în același timp este cam singurul editor de texte cu o curbă de învățare lină, care este suficient de customizabil pentru nevoile mele. În rest sunt utilizator de Eclipse, Vim și Emacs … oscilând frecvent. Emacs este bestial ca platformă de scris plugin-uri (și da, am învățat Emacs Lisp și am câteva scripturi la activ), suportul pentru pluginuri fiind ușor de învățat datorită facilităților oferite de Emacs, dar multe din plugin-uri sunt într-o stare proastă și-mi ia mai puțin timp să dezvolt un bundle de Textmate decât un plugin de Emacs … iar în rest, Vim este productiv, dar per total mediocru în capabilități, iar Eclipse este groaznic de greoi și poate fi dezvoltat doar cu mult efort, făcând dezvoltarea de plugin-uri deosebit de nepractică.

Emacs este cam singura alternativă „free”, dar are probleme mari … de exemplu, deși teoretic are indentare a codului inteligentă, de obicei lucrăm în echipe heterogene, unde unul folosește IntelliJ IDEA, altul folosește Eclipse … iar Emacs nu te lasă să faci indentare decât cum vrea EL, iar de vrei să customizezi indentarea și să o cobori la nivelul indentării stupide (ca cea din Vim) trebuie să customizezi fiecare mod de editare în parte, deoarece setările de indentare sunt specifice (și am dat doar un exemplu).

Spunea bine cine spunea … „Emacs vs Textmate este ca Linux vs Mac OS X”. Dar viitorul aparține totuși unui editor asemănător cu Emacs, deoarece capabilitățile de scripting din Emacs sunt incomparabile cu orice altceva. Dar cineva trebuie să facă puțină curățenie în plugin-uri deoarece mulți s-au săturat de fișierele de configurare kilometrice, și de shortcut-urile extrem de neintuitive.

Concluzia fiind că lumea nu este alb/negru, și nu este nevoie neapărată ca software-ul să fie open-source pentru a fi bun de ceva.

Astea fiind zise, cu siguranță merită ca software-ul să fie cât mai deschis, și nu cred că voi sta pe Mac și pe Textmate prea mult timp … mai ales că și Apple face gafe, și pentru că tot vorbeam de Textmate, deși este bun în multe privințe, suportul de scripting este atât de limitat că practic nu-l poți îmbunătăți în anumite privințe în care chiar are nevoie … și abia aștept o clonă open-source, iar de nu apare în următorii 5 ani, până la urmă îmi pot face propriile unelte ;)

Digital Rights Management

Titlul articolului face referire la DRM, și deși nu mai sunt idealistul care eram odată, trebuie să recunoaștem că avem gafe catastrofale în industrie. Și în anumite privințe chiar nu trebuie să-ți întorci privirea … deoarece așa cum spunea cineva cândva, libertatea este doar pentru cei ce o merită.

Aveam de gând să vorbesc mult și bine despre DRM, dar chiar nu are rost, mai ales că sunt alții care au spus-o mai bine ca mine.

Sunt mulți oameni care cântă de mult despre pericole cu privire la libertatea de exprimare, sau la costurile suplimentare asociate inițiativei, și pe majoritatea nu ne doare, mai ales că în comunitatea noastră mică (a programatorilor) știm că DRM este o tehnologie ce nu are cum să fie viabilă … și stăm liniștiți deoarece suntem capabili să spargem orice „protecție”.

Dar din păcate tehnologia are darul de a transforma societatea în care trăim și cultura din jurul nostru, și deși auzim de mici victorii, cum ar fi iTunes care oferă posibilitatea de a cumpăra melodiile DRM-free, din păcate uităm ca atunci când vine vorba de DVD-uri, DRM-ul este de extremă actualitate, iar Blu-Ray devine mainstream, fie că vrem, fie că nu.

Iar ultima bombăMicrosoft Pulling Support for MSN Music DRM. Și deși Electronic Frontier Foundațion practic declară v-am spus, acum plătiți prețul ignoranței, practic nimic nu se schimbă, lumea merge mai departe, dar din păcate generațiile următoare sunt cele ce vor avea de suferit … cam cum se întâmplă și cu poluarea.

Și aveți opțiune … votați cu bani. Nu cumpărați medii criptate cu DRM (melodii de pe iTunes, Blu-Ray).
Este chiar atât de simplu.

Posted in evil, technology | 5 Comments »