In căutarea ciocanului perfect

Posted by mzaharia on august 24, 2007
Filed Under Muncă, Tehnologie | 10 Comments

Contextul…

Fiecare meşteşug, şi implicit fiecare ramură a ingineriei, naşte o cultură. Cultură ce influenţează decizii, şabloane, soluţii, şi perspective de viitor. Juniorii ajung să înveţe de la seniori reguli nescrise ale meşteşugului practicat şi experienţa câştigată se transmite din generaţie în generaţie, continuu cizelată şi hrănită de ideile prezentului.

Într-o lume unde legea lui Moore a avut ca rezultat invalidarea cunoştinţelor despre tehnologie cam odată la 5 ani, există o cultură ce a rezistat timpului… Unix.

Şi deşi versiunea originală mai are puţine în comun cu reprezentanţii săi moderni (Linux, *BSD, Solaris), Unix reprezintă mai mult o filozofie foarte coerentă şi simplă ce a demonstrat că poate produce cele mai complexe sisteme software din lume, sumarizată excelent de Doug McIlroy, creatorul pipe-urilor din Unix …

“Write programs that do one thing and do it well. Write programs to work together. Write programs to handle text streams, because that is a universal interface.”

Java

Când mă gândesc la Java, personal mă gândesc la sisteme mari şi greoaie, mă gândesc la consultanţi care şi-au vândut soluţiile pe bani buni sub umbrela presupusei scalabilităţi, mă gândesc la sisteme monolitice destinate să crape sub propria greutate.

In vorbele lui Albert Einstein…

“Any intelligent fool can make things bigger and more complex… It takes a touch of genius — and a lot of courage to move in the opposite direction”

Şi totuşi Java ca platformă este cea mai bună la ora actuală, dacă reuşeşti să vezi dincolo de zgomot …

Cum alegi un framework web, sau o combinaţie, care să pună accentul pe simplitate, şi care să fie în antiteză cu tehnologiile uzuale, gen EJB şi Struts?

Am fost pus în faţa unei astfel de decizii, şi criteriile mele de selecţie sunt…

Tocmai am descris Ruby on Rails ? :) Poate că da.

Însă Ruby on Rails, deşi o adevărată plăcere, a eclipsat alte tehnologii mult mai disruptive, cum este Seaside. Şi spre marea mea bucurie am aflat că feature-ul principal, continuările, poate fi simulat şi-n maşina virtuală Java. De fapt JVM-ul suportă continuări intern pentru management-ul excepţiilor, dar funcţionalitatea nu este expusă programatorilor, dar poate fi folosită cu puţină magie posibilă prin instrumentare de byte-code.

Un framework ce profită din plin de continuări este Rife, şi care împreună cu Terracota se scalează în mod natural, folosind servere light, gen Tomcat sau Jetty.

Un exemplu de workflow cu Rife arată ceva de genul (extras dintr-unul din exemple):


public void processElement() {

Template template = getHtmlTemplate(“game”);
int answer = 0, guesses = 0, guess = -1;
answer = randomNumbers.nextInt(101);
while (guess != answer) {
print(template);

pause();
template.clear();
guess = getParameterInt(“guess”, -1);
if (guess < 0 || guess > 100) {
template.setBlock(“warning”, “invalid”);
continue;
}
guesses++;
// …
}

ContinuationContext.getActiveContext().removeContextTree();
// ….
print(template);
}

Cel mai simplu mod de explicare a continuărilor este prin analogia cu un joc video… ai posibilitatea de a salva un joc, ai posibilitatea de a te reîntoarce la o salvare mai veche în cazul în care ai efectuat o manevră greşită, şi posibilitatea de a transporta salvările jocului de pe un calculator pe altul, fără să se piardă calitatea salvării.

Este un pic ciudat să te obişnuieşti cu continuările odată ce ai “cablat” interacţiunea între pagini web manual, dar odată ce o faci parcă nu-ţi mai vine să te uiţi înapoi.

O altă posibilitate de folosire a continuărilor este Rhino ce poate lucra cu acest concept şi este folosit de altfel în Cocoon.

Mai multe însă despre Rife, Rhino, şi importul de concepte din alte limbaje mai pure… date viitoare.

Share

Comments

10 Responses to “In căutarea ciocanului perfect”

  1. Monica J on august 24th, 2007 16:28

    RUGAMINTE:/PROVOCARE:
    Poate cineva sa imi rezume postul asta intr-o fraza pe care sa o inteleg si care sa aiba maxim 5 randuri?

    va rooog

    p.s. imi place mult blogul vostru.

    bravo!

    deci se poate cu relaxare si cu lipsa de paranoia si la firmele moderne!

  2. mzaharia on august 24th, 2007 17:21

    Hehe! Buna provocare! Hai ca incerc eu, desi e scris de colegul meu, Alex…

    Ideea e ca framework-urile Java pot fi si agile, asa cum e Ruby on Rails, si nu monolitice si complicate, asa cum e perceptia in industrie. Un exemplu bun este RIFE.

    Cam asta e ideea, dar Alex e mai destept decat noi, deci poate spune asta in mai multe cuvinte… :D

  3. Alex on august 24th, 2007 18:21

    Articolul initial era mult mai lung, dar l-am simplificat :P

    Cred ca ar trebui sa avem mereu ca scop cautarea simplitatii in orice cream … interfete, API-uri, workflow.

    Iar simplitatea si agilitatea pot fi castigate atata timp cat esti deschis la idei si metodologi noi … fara sa aruncam vechile unelte la cosul de gunoi.

    Si asa cum poti programa orientat pe obiecte in C (vezi GTK), cu putin efort se pot importa paradigme din programarea functionala in Java.

    O sa mai scriu pe acest subiect … poate se leaga ceva :)

  4. Monica J on august 24th, 2007 18:34

    Ideea e ca framework-urile Java pot fi si agile, asa cum e Ruby on Rails, si nu monolitice si complicate, asa cum e perceptia in industrie. Un exemplu bun este RIFE.

    pls define:
    -framework
    -monolitic

    p.s. de unde vin inititlale RIFE?

  5. Monica J on august 24th, 2007 18:34

    p.s.2 multumesc pentru promotitudine :)

  6. Mihai Constantinescu on august 24th, 2007 23:25

    Salut!

    Referitor la introducere, “Context” as putea completa si cu ce a spus John Maeda ( http://weblogs.media.mit.edu/SIMPLICITY/ ) la Ars Electronica : http://youtube.com/watch?v=cdQZ4U4ysUw
    care zic eu ca este valabil si in programare :D

  7. Cristian Vat on august 25th, 2007 00:04

    Ati uitat la limbajele ce pot rula peste JVM Python (Jython) si ca sa fim mai atractivi pentru cei din web development… PHP ( Caucho Quercus de la Resin ).

    JVM-ul intr-adevar e tare. Cat despre ideea de agile, ea poate fi aplicata in aproape orice limbaj de programare modern. Motivul principal pentru ca majoritatea framework-urilor in java nu par agile e ca au fost dezvoltate pentru proiecte mai “enterprise” unde modelul de dezvoltare/development/marketing era in general opus fata de agile.

    Si totusi, de unde primul post mai tehnic? :)

  8. Alex on august 25th, 2007 12:02

    Mihai: interesant link, deşi m-am chinuit un pic să înţeleg ce se vorbeşte datorită sunetului cam prost … thanks.

    Cristian: am enumerat doar limbajele importante pentru mine momentan :)
    Jython a fost un deschizător de drumuri, dar dezvoltarea sa a cam stagnat.

    M-am bucurat să văd că interesul în Jython este în creştere totuşi în ultimul timp şi plus că mai sunt şi mici iniţiative de colaborare între autorii de compilatoare de pe JVM … http://groups.google.com/group/jvm-languages
    Viitorul sună bine.

    Despre “enterprise” … agilitatea şi simplitatea sunt 2 lucruri separate şi poate ar fi trebuit să le discutăm separat.

    O să dau doar un exemplu ca să poţi face o comparaţie … Debian Sarge (lansat în 2005), datorită modelului de dezvoltare distribuit, a ajuns la 230 de milioane de linii de cod. În comparaţie Windows Vista are doar în jur de 50 de milioane şi are probleme mari de complexitate … vezi confesiunile unui insider … http://blogs.msdn.com/philipsu/archive/2006/06/14/631438.aspx

    Numai bine,

  9. Monica J on august 29th, 2007 20:32

    Multumesc si eu pentru link :)

  10. differin on aprilie 7th, 2008 13:21

Leave a Reply