PDI^2

Perché Java è meglio di Ruby

ruby, java, fun June 22, 2007 4:56 pm (Save post)

Si, siamo una comunità di disturbati, e ne siamo fieri.

Ruby & rails vs J2EE, di nuovo

ruby, java, blogosfera June 13, 2007 2:44 pm (Save post)

Su TRM c’è un articoletto che ha l’intento di spiegare rails al programmatore J2EE, e da lì c’è un articoletto di risposta di uno sviluppatore J2EE, appunto.

Le mie dure lire: usate quello che è più adatto al progetto corrente, che conoscete meglio e che preferite. È il modo giusto per vivere felici :-)

Ad ogni modo, nel post e nei commenti ci sono dei punti validi: la m17n in ruby è ancora debole (ma per il web cambia poco, visto che utf8 è gestito), il deploy non è ancora un’operazione banale, ruby non ha i thread nativi ed è un interprete lento, non esiste accesso a tutta la pletora di MOM che c’è in java e altro. Ricordo che io, fondamentalmente odio rails ;)

Però, siccome l’autore dice di cercare l’oggettività, per quanto ovviamente possibile, mi permetto di rettificare alcune cose sbagliate ( credo siano dovute alla mancanza di conoscenza dell’ambiente, non a un FUD intenzionale ;)

Su ruby:

  • ruby non ha le variabili dì’istanza pubbliche di default, anzi non è proprio possibile avere variabili pubbliche, si accede solo attraverso metodi.
    Le variabili d’istanza pubbliche sono una rottura dell’incapsulazione (eccezione: property alla python/C#/TP) e infatti in Smalltak, che la OO l’ha inventata, non esistono.
  • non so cosa significhi che la struttura delle classi è neogotica, perché non so qual’è l’equivalente degli archi a sesto acuto in ambito programmatorio, ma la gerarchia delle classi mi sembra abbastanza ragionevole. Non c’è neanche l’ereditarietà multipla che dovrebbe far storcere il naso ai javisti (io, essendo anche pythonista non ci vedo niente di male :)
  • sinceramente non mi pare sia possibile assegnare una variabile da sinistra a destra in ruby, a meno che non ci sia un operatore “->” che non ho mai trovato negli ultimi 6 anni
  • le variabili d’istanza vengono istanziate al volo, vero, ma puoi comunque farlo solo tramite i metodi (o la reflection) quindi non c’è problema
  • “La tipizzazione degli oggetti base è da barzelletta non esiste”. De gustibus, a me i tipi dinamici piacciono. D’altronde neanche java è type safe, e HAppS è ancora un po’ ostico per me.
  • gli errori sono più comprensibili in ruby imho. Almeno l’equivalente di NullPointerException ti dice che metodo è stato richiamato, perché nil è un oggetto
  • mai fallita l’installazione di una gemma, ma capisco possa accadere. Però il confronto con maven mi pare inappropriato, non è un package manager.

Su Rails:

  • il sistema di template (che imo pone pochi problemi) si cambia in una riga. script/plugin install liquid | haml | erubis | ya2yaml | amrita | markaby o quel che volete
  • credo che il plurale di persona (as in dramatis persona) sarebbe personae, ma si sa che gli inglese col latino fanno porcate :) . Aldilà di questo, è possibile definire le proprie inflection se si vuole un db sgrammaticato (o uno legacy)
  • non ho capito che significa che la gestione degli url viene fatta in punti diversi, io la faccio solo in routes.rb
  • non so perché non si possa usare un qualsiasi approccio allo sviluppo. In teoria si può sviluppare un’applicazione RoR anche senza modelli e controller ma grazie al cielo lo fanno in pochi ;)
  • si può usare uno schema legacy, si può fare. Ci sono pure plugin per farlo. Certo, manca JCA.
  • manca il supporto all’internazionalizzazione builtin, ma esistono plugin come globalize apposta. Rimane sempre meglio averla builtin, come in django (lo dicevo di là) e comunque il supporto a unicode è scadente, come dicevo prima, ma c’è sempre UTF-8.
  • non ho capito il problema con gli scaffolding. Quelli servono a evitare di scrivere un po’ di codice, mica sono un’interfaccia di amministrazione (django++ ma per rails ci sono, ancora, dei plugin)

Sui punti generali non posso commentare.. non uso capistrano, ViM è il mio IDE e Rails forse non scala ma non per colpa di FastCGI (che è concettualmente molto diverso da CGI). Yahoo, Google, Digg, reddit, Flickr, livejournal etc scalano infinitamente senza servlet. <flamebait>e poi vorrei vederla questa mega applicazione in java che scala come slashdot, che è fatto con mod_perl </flamebait>

Ancora, right tool for the job, KISS, long life & prosperity, io domani parto per l’heineken jammin festival dove non mi preoccuperò di queste cose :)

JDK open source

java May 9, 2007 6:07 pm (Save post)

e con questa, abbiamo finito la roba proprietaria di Sun, credo ;)

Harmony Project, guarda chi si rivede!

java April 11, 2007 7:50 am (Save post)

Qualcuno se lo ricorda il progetto Harmony? Si trattava di quell’idea fantastica di implementare una versione open source della JVM (oooh), ma diversa dalle altre ottomila esistenti (oooh) e con una libreria diversa dal supportatissimo GNU Classpath (oooh).

Voglio dire, GNU Classpath ha più sviluppatori, più test, più codice già scritto, è condiviso da una mezza dozzina di implementazioni diverse.
Ma ehy, non è stato inventato sotto l’ombrello di Apache/Jakarta!

Insomma, io ho sempre ritenuto che harmony non servisse a una mazza, ma che potesse essere un buon ponte nel momento in cui a Sun venisse in mente di rendere java open source. Ma aspettate un momento: Java è già open source!

Mh.. vabè.. come dire, meglio avere alternative. sempre.

Nel frattempo, harmony è vecchio di due anni, e ha ricevuto donazioni di codice da Intel, IBM e altri. Nonostante ciò, e nonostante il fatto che effettivamente gli manchino ancora cose come un gestore di JAR,
il debugger, rmi* etc qualcosa funziona.

Ci funziona Eclipse! Voglio dire, non ci funziona Geronimo, ne’ Azureus, ne’ le applet, ma potete usare Eclipse per sviluppare con Tomcat direttamente, facendo un balzo nel futuro di meno 5 anni.

Giustamente, quantomeno il progetto ha guardato alla portabilità, e quindi supporta una sfilza di sistemi operativi e architetture, ovvero: linux su intel e amd.

Ma continuiamo a sperare, e facciamo notare che hanno richiesto a Sun un JCK, ovvero il pacco di test che se passa dimostra che la vostra è un’implementazione di Java e non un linguaggio quasi-javesco.
E hanno scritto una lettera aperta a Sun per chiedere che il JCK sia rilasciato senza balzelli nella licenza, e questa è una buona cosa che potrebbe far bene a tutti.

Chissà che Harmony non serva a qualcosa.

Post Archivio n. 12

ruby, java, personale, blogosfera, italia, lettura February 24, 2007 10:50 am (Save post)

Ricomincio ad avere troppe cose da fare e dire, e troppo poco tempo per farlo. Ma cerco di tornare fedele alla mia regola di rispetto per il lettore: meglio pochi post densi che molti leggeri, quantomeno non vi intaso l’aggregatore.

Per cui, le cose su cui riflettere oggi:

  • Domani, domenica 25, c’è il carnevalone liberato! Non vi sto a spiegare cosa cavolo sia e perché dovreste venirci, perché già l’ho fatto un anno fa, seppure in stato alterato :)
  • Alcuni programmatori sono più fortunati degli altri, perché trovano sempre nuove cose con cui divertirsi :)
  • Ho infranto il muro dei cento lettori, grazie gente, non so che ci fate da queste parti ma fa piacere vedervi. Già vi leggo tutti, o almeno quelli di cui ho un link, se avete dubbi lasciatemi un commento così mi ricordo di voi. Chiamatelo delurking day se vi va.
  • E parlando di commenti, abbiamo sfondato la soglia dei 500, grazie per aver chiacchierato con me. E ho pensato di fare una cosa carina, per ringraziarvi: questa paginetta conterrà link a tutta la gente che ha commentato questo blog finora (lasciandomi un url). Potrei fare delle analisi scientifiche tipo “quella/quel bastardo che fine ha fatto?”, ma fondamentalmente non me ne frega niente. La pagina non vi passerà molto PR, comunque, scusatemi :(
  • E a proposito di lettori, Nicola mi ha mandato una mail per correggere la mia ortografia. Nico’, l’ho apprezzata e potevi anche sputtanarmi in pubblico, ma non posso risponderti via email perché il tuo provider ha blacklistato Yahoo! (??)
  • Invece, a proposito di letture, mi son comprato il castello di eymerich. In genere evangelisti mi piace, e questo promette bene.
  • E a proposito di nonletture, ho adottato il protocollo zero inbox:
    Spam -> cancella
    Non utile -> cancella
    Non interessante -> cancella
    Importante -> leggi e archivia
    Richiede risposta -> segnala appropriatamente
    sembra un sistema scemo, ma giuro che crea un grande senso di organizzazione e controllo. In realtà c’è un’ulteriore categoria che avevo iniziato ad utilizzare: da rivedere, per cose potenzialmente interessanti.
    Ma la verità è che la cartella in questione finiva per esplodere e tutto andava nel cestino, per cui ho deciso di eliminarla in toto. Se una cosa è effettivamente interessante c’è tempo di leggerla al volo.
  • Rack vorrebbe essere per ruby quel che WSGI è per python, ovvero un layer unificato per tutti i webframework che funzioni da astrazione rispetto a quel che c’è sotto, cgi/fcgi/scgi/mongrel/webrick etc. Gli auguro un grande grande successo.
  • E nel frattempo ho anche scoperto ramaze, che mi pare una soprta di fork/clone ripulito di Nitro. Siccome l’unico problema di quest’ultimo è sempre stata la schizofrenia degli sviluppatori, potrebbe essere una cosa fantastica.
Groovy 1.0, D 1.0, Perl 6, Java 7 e Ruby 1.8

java, perl6, pugs January 4, 2007 8:56 am (Save post)

Pare che questa sia stata una settimana intensa sul fronte dei linguaggi di programmazione, ed è una cosa buona.

In particolare è una cosa buona per me, visto che oggi ho tempo di scrivere questo post mentre domani me ne torno nella terra degli unni, il che significherà un probabile /away di un mese dal mondo tecnologico. Siccome voglio chiudere in bellezza vi lascio qualcosa di corposo da leggere.

Pugs & teoria dei numeri
Ma dicevo, settimana intensa sul fronte programmatorio. Anzitutto l’Autore è diventato committer di pugs, dimostrando che effettivamente il commit bit viene dato via con estrema facilità.
In particolare il suo ultimo contributo è stato il problema numero 32, implementare l’algoritmo di euclide per il minimo comune multiplo:

# Perl6 impone l'ottimizzazione delle tail call, per cui
# non abbiamo bisogno di scrivere la routine in forma iterativa.
# Ale' !
	
multi sub gcd(Int $a, Int $b){
    return $a if $b == 0;
    return gcd($b,$a % $b);
}
	
is gcd(36,63), 9, \"We should be able to find the gcd of 36 and 63\";
is gcd(63,36), 9, \".. and viceversa\";
is gcd(0,5)  , 5, '.. and that gcd(0,$x) is $x';
is gcd(0,0)  , 0, '.. even when $x is 0';


Notate la finezza per cui gcd è definito come un multimetodo, perché in teoria è possibile definire la funzione in qualsiasi anello commutativo, non solo per gli interi.

Ovviamente io so che esiste una cosa chiamata anello commutativo, ma non mi ricordo cosa sia veramente e questa nota è un semplice plagio da wikipedia.

Il che tra l’altro mi da l’occasione di far notare che la definizione di numero primo su en.wikipedia è sbagliata.
Uno (1) non è un numero primo, per definizione un numero primo è un numero positivo divisibile solo per se stesso e per 1 ma diverso da uno (o -1).
Questo perché, se usiamo questa definizione poi ci viene fuori il fantastico teorema fondamentale dell’aritmetica che è:

Ogni numero naturale diverso da 1 o è un numero primo o si può esprimere come prodotto di numeri primi. Tale rappresentazione è unica a meno dell’ordine in cui compaiono i fattori.

Il motivo di questo delirio era ovviamente la soluzione del problema 31.

Tornando a Perl6, forse l’Autore potrà raccontare ai suoi nipotini che se una subroutine dichiarata come Bool converte automaticamente un valore di ritorno undef in False è merito suo. Larry sembrava ponderoso sull’argomento, ma ci sono speranze.

Groovy 1.0
E a proposito di linguaggi con dichiarazioni di tipo opzionali, Groovy ha finalmente raggiunto la versione 1.0.
Per parte mia, ritengo che Groovy sia un linguaggino carino, mi piace un sacco che abbiano la variabile implicita “it” nei blocchi, ad esempio, che permette di scrivere

[1,2,3].each { print it}

Ma in fondo è solo un poco interessante dialetto di ruby per la JVM.
Il Lettore arguto potrebbe obiettare che ruby è solo un poco interessante dialetto del lisp o di smalltalk per unix, ma ho fiducia che i Lettori arguti non siano dei rompipalle.

D 1.0
Più interessante è invece il linguaggio D, che raggiunge la 1.0 , e mi han fatto notare che adesso c’è anche un pacchetto debian di gdc.

L’Autore invita a notare che gdc è un anagramma di gcd, e questo ovviamente non è un caso.

IMHO D è un’ottimo esempio di linguaggio di sistema moderno. Design By Contract, libreria ricca (regexp, socket, thread), strutture dati come array dinamici ed hash integrate, OOP fatta in modo sensato, supporto unicode etc..

Ma perché D prenda piede ha bisogno di un progettone open source che lo traini (server ftp/http/whatever, nuova implementazione di X11, linguaggio usato per nuke’em forever…) , e questo non verrà fuori a brevissimo tempo, temo.
Python e Ruby ci hanno messo una decina d’anni a sfondare.
E nel frattempo la concorrenza non se ne sta ferma, con il nuovo C++ in arrivo, il nuovo C# e i futuri Java, quindi imo il futuro di D non è particolarmente brillante.
Ma speriamo che mi sbagli.

Java 7
Guardiamoci in faccia, la comunità Java si è data una svegliata, hanno corretto, o provato a correggere, il linguaggio dove aveva delle falle troppo grosse (generic, autoboxing etc), hanno esteso la libreria dove ce n’era bisogno (java.util.concurrent etc), hanno cercato di abbracciare le richieste della comunità (JVM open source, invokedynamic).
E in java 7 ci saranno anche le closure, cosa che già sapeva , ma quello che non sapevo è il modo con cui esse si integreranno con le api precedenti.

In pratica, la closure viene utilizzata per costruire un’oggetto anonimo che viene poi infilato dentro l’interfaccia che già esisteva per i metodi. Ok, non si è capito, intendo dire che ad esempio una funzione startComputation(Runnable r) può essere richiamata con una closure come argomento, che verrà poi convertita automaticamente nel metodo run di un oggetto Runnable creato al volo.
Ovviamente, affinché il compilatore sia in grado di gestire correttamente la cosa è necessario che riesca a capire in che metodo mettere il blocco, quindi perché la cosa funzioni l’interfaccia deve fornire un solo metodo, come fa Runnable con run.

Per il resto è bello vedere come queste closure siano identiche ai blocchi in ruby, ad esempio non vengono segnalate nell’eccezioni come funzioni aggiuntive, il return da una closure esce dal blocco esterno ad essa invece che dalla closure, se si mettono come argomenti speciali si può usare una sintassi più carina etc..
Vabè, ma è inutile che ve ne parli io, andatevi a leggere l’intervista a neal gafter

Conclusione
Siamo al 4 gennaio, e già c’è un sacco di roba a cui pensare.
In più lawrence ha scelto erlang come LoTY, il che suggerisce che si potrebbe seguirlo.
E poi mi sono impegnato a rendermi utile con sette gruppi di persone differenti.
Ed avrei due o tre progettini da portare avanti.
E devo prendere una cavolo di laurea (”oh no, di nuovo!” [cit]) .

Ma se ne parla da febbraio, da febbraio.

Java 7 (dolphin) avrà le closure

java, personale August 19, 2006 7:26 am (Save post)

Ovvero Sun finalmente ha fatto una cosa sensata :D
Ci saranno funzioni anonime con scope lessicale in Java 7, e speriamo anche un bel po’ di posti nuovi dove poterle usare. Questa è un po’ di documentazione a riguardo e questo è l’annuncio di gilad bracha.
Il nuovo python con i blocchi, C#3 e Java7 con i blocchi, perl e ruby li avevano da una vita… misà che cominciano ad essere pochi i linguaggi rimasti senza. Come ha detto qulcuno, se il tuo linguaggio non ha i blocchi vedi se puoi farti ridare i soldi ;)

Mustang beta 2

java, personale, fun June 19, 2006 11:18 pm (Save post)

Ovvero, java.succ.

Link solo perché questo fa troppo ridere:

# Scripting
You can now mix in JavaScript technology with your Java technology source code, useful for prototyping. Also useful when you have teams with a variety of skill sets. More advanced developers can plug in their own scripting engines and mix their favorite scripting language in with Java code as they see fit.

Perhaps You ThougHt yOu couldN’t program with a scripting language and Java togetheR. Which will yoU Be trYing ?

PS
non ho tempo di campare!

MobilePedia Wikipedia in j2me

java, software June 4, 2006 7:43 pm (Save post)

Chissà che succede in questi giorni, pare che chiunque conosco stia rilasciando roba utile al mondo :)
In particolare congratulazioni a Luca e Federico, che hanno appena tirato fuori un’utile applicazione per consultare wikipedia via cellulare, con licenza GPL.

Io non ho la possibilità di provarla per colpa della mia inferiorità tecnologica, ma sembra carina :)

Ruby @ JUGPadova & il mondo

ruby, java, personale, blogosfera, fun, rubyonrails May 23, 2006 9:04 am (Save post)

Insomma l’hanno fatto. Il meting del java user group padovano su ruby & rails intendo.
E pare sia andato alla grande, viva l’ interimpollinazione informatica.
Il mio sogno di organizzare una conferenza a linguaggi unificati sembra ogni giorno meno assurdo, peccato che fino a dicembre/gennaio non se ne parla..

Ma quello che volevo dire in questo post è che seguo pensieri sparsi perché l’autrice usa scrive.it ed i suoi commenti sui film erano in linea con i miei e della mia dolce metà.
E poi è un blog simpatico :) .

(Notiamo che scrive.it è fatto con rails. )

Poi oggi, guardando il suddetto blog ho trovato nel fotostream di monja le foto dell ruby@jugp.

Il mondo è decisamente troppo piccolo.

Che dite, è il caso di dire che è una figata ?

Get free blog up and running in minutes with Blogsome
Theme designed by Janis Joseph