Web Framework Smackdown

Luca | January 29, 2007

Monday, the 19th of February, the JavaWUG London will held its 24th meeting: RIFE, Spring MVC and Java+Servlet+JSP+EL will fight in this smackdown contest in order to conquer the title of best framework in Java Land :-)

More details are available here.

The Wumpus is alive

Luca | January 25, 2007

I’m pretty sure that a good number of you out there know the Wumpus from an Artificial Intelligence course.

This is one of the best implementation around the web…have fun!

100!!

Luca | January 22, 2007

Woww!!! this is the post number 100..not bad for a bunch of useless rants!! :-)

As a sort of new year’s resolution I’d like to start writing my entries in english (ehrr…actually I’m doing it now). Yes, I know I had to start this earlier, but I’m a bit lazy and writing in english takes me more time than writing in my native language ;-)

The reason is quite simple: now I can start massive flames with Antonio and Marco :-D without any languages gap between our entrie(they both post in english).
Happy 100th post to everybody!

Coraggio

Luca |

public void evaluate(Case theCase) {
// cel-1260
/*if( caseProcessed ) {
throw new EvaluationException("More than one case condition evalautes to true." +
"You must refine your case to have a single uinque output dataset.");
[...]
}*/
Coraggio e’ cancellare questo codice, non commentarlo con il link al bug chiuso. Se il problema e’ risolto questo codice non serve.

Se questo e’ un work-around allora il problema non e’ risolto.

In entrambi i casi abbiamo mancato di coraggio e di chiarezza nella comunicazione di quello che stavamo facendo.

Quando non si condividono i piu’ elementari principi di design…

admin | January 19, 2007

Ci sono cose che non si sradicano. Il concetto di semplicita’ ad esempio: molti vedono un if molto piu’ semplice di una chiamata polimorfica.

Oggi ho fatto la code review ad un collega: sostanzialmente dovevamo parsare un file che definiva delle operazioni aritmetiche basilari e poi eseguirle.

L’XML è qualcosa del tipo:

<add>
<function-literal value=’5′/>
<function-literal value=’6′/>
</add>
Le operazioni posso ovviamente essere annidate una nell’altra.

Ora, sara’ perche’ ho gia’ fatto qualcosa di vergognosamente simile sullo stesso parser, ma questo nella mia mente risuona in modo molto chiaro con qualcosa che i piu’ precisini posso chiamare composite (no!!! non sto forzando il pattern…..giuro che quando ho fatto l’altra parte ci sono arrivato un po’ alla volta, lo giuro!!)

Una volta che abbiamo un grafo di oggetti e dobbiamo valutare lo specifico nodo, bastera’ chiamare qualcosa tipo operazione.calculate(operandOne, operandTwo) ed il gioco e’ fatto, quell’amico chiamato polimorfismo ci risolve il problema!!

Il mio collega S. ha invece optato per una sempre classica soluzione procedurale (che non impegna mai, un po’ come il nero…)

Ha creato una generica ArithmeticExpression, ma con dentro una stringa che definisce l’operazione che viene di volta in volta inizializzata a “add”, “subtract” etc etc

Al momento di elaborare gli oggetti ottenuti dal parsing e fare la reale operazione, abbiamo del codice che si presenta all’incirca cosi’:
if (arithmeticExpression.getName().equals("add")) {
Calculator.add(operandOne, opernadTwo);
} else if (arithmeticExpression.getName().equals("subtract)) {
Calculator.subtract("operandOne, operandTwo);

etc etc

Quando gli ho fatto notare che questo mi sembrava inutilmente complesso, e non vedevo il perche’ chiedere l’identita’ della class per poi far fare a qualcun altro il lavoro (God Class is coming!!) mi ha detto che risultava + semplice che una gerarchia di classi ed una chiamata polimorfica.semplice ??? ora, stamattina ero di buon umore e non avevo voglia di far partire un flame sui principi di design, ma questo mi ha fatto rabbrividire…

Quando non si condividono i piu’ elementari principi di design…

admin |

Ci sono cose che non si sradicano. Il concetto di semplicita’ ad esempio: molti vedono un if molto piu’ semplice di una chiamata polimorfica.

Oggi ho fatto la code review ad un collega: sostanzialmente dovevamo parsare un file che definiva delle operazioni aritmetiche basilari e poi eseguirle.

L’XML è qualcosa del tipo:

<add>
<function-literal value=’5′/>
<function-literal value=’6′/>
</add>
Le operazioni posso ovviamente essere annidate una nell’altra.

Ora, sara’ perche’ ho gia’ fatto qualcosa di vergognosamente simile sullo stesso parser, ma questo nella mia mente risuona in modo molto chiaro con qualcosa che i piu’ precisini posso chiamare composite (no!!! non sto forzando il pattern…..giuro che quando ho fatto l’altra parte ci sono arrivato un po’ alla volta, lo giuro!!)

Una volta che abbiamo un grafo di oggetti e dobbiamo valutare lo specifico nodo, bastera’ chiamare qualcosa tipo operazione.calculate(operandOne, operandTwo) ed il gioco e’ fatto, quell’amico chiamato polimorfismo ci risolve il problema!!

Il mio collega S. ha invece optato per una sempre classica soluzione procedurale (che non impegna mai, un po’ come il nero…)

Ha creato una generica ArithmeticExpression, ma con dentro una stringa che definisce l’operazione che viene di volta in volta inizializzata a “add”, “subtract” etc etc

Al momento di elaborare gli oggetti ottenuti dal parsing e fare la reale operazione, abbiamo del codice che si presenta all’incirca cosi’:
if (arithmeticExpression.getName().equals("add")) {
Calculator.add(operandOne, opernadTwo);
} else if (arithmeticExpression.getName().equals("subtract)) {
Calculator.subtract("operandOne, operandTwo);

etc etc

Quando gli ho fatto notare che questo mi sembrava inutilmente complesso, e non vedevo il perche’ chiedere l’identita’ della class per poi far fare a qualcun altro il lavoro (God Class is coming!!) mi ha detto che risultava + semplice che una gerarchia di classi ed una chiamata polimorfica.semplice ??? ora, stamattina ero di buon umore e non avevo voglia di far partire un flame sui principi di design, ma questo mi ha fatto rabbrividire…

Agile religion

Luca | January 17, 2007

Un’interessante dibattito su essere dogmatici nel mondo agile.

Promemoria: installare YourKit Profiler su una macchina *nix senza X11

Luca | January 16, 2007

Nello speciifico sto usando una macchina Sparc Solaris e voglio essere in grado di fare profiling di WebLogic 9.2 da remoto, il tutto con JVM 1.5_04.

YourKit Profiler ha uno script di installazione che cerca di lanciare una UI: Senza X11 installato lo script ovviamente fallisce.

Ma per installare il profiler, oltre all’aggiunta della variabile d’ambiente LD_LIBRARY_PATH (settata alla directory relativa al sistema di riferimento di YourKit, in questo caso yjp-6.0.5/bin/solaris-sparc-32), basta modificare lo script di lancio di WebLogic aggiungendo il parametro agentlib:
${JAVA_HOME}/bin/java -agentlib:yjpagent=port=8849[....]

La definizione della porta e’ opzionale

it’s here

Luca | January 10, 2007

l’iPhone è tra noi!!!

it’s here

Luca |

l’iPhone è tra noi!!!