Archive for the ‘Programming’ Category

Programming languages context-switch

Wednesday, April 16th, 2008

Lavorando a mobitouch cube, mi capita spesso di passare da un linguaggio di programmazione ad un altro. E così scrivo codice Java in PHP, C in Java, Java in Javascript… con il risultato che non ci capisco più niente!

Maybe, I just need an holiday…

Programming languages caricatures

Archive_Tar 1.3.2 - Gzip/bzip2 bug fix

Tuesday, March 25th, 2008

Ho trovato un bug nella classe Archive_Tar che si verifica quando si prova ad aggiungere ad un archivio compresso (gzip o bzip2) un file che, al suo interno, contiene il blocco utilizzato per delimitare la fine dell’archivio tar stesso (null padding di 1024 byte).

Questa patch, applicata alla versione 1.3.2 di Archive_Tar, dovrebbe risolvere il problema.

Riferimenti

Mamma, fix my bug

Monday, February 4th, 2008

L’utopia di un programmatore è quella di credere che un giorno riuscirà a scrivere codice perfetto, senza la presenza di un singolo bug. Ma questo non sarà mai possibile, almeno non su questo pianeta, e voi lo sapete bene. E sembra che non sia nemmeno una questione economica, altrimenti non mi spiego com’è possibile che Microsoft sia riuscita a partorire alcuni dei suoi prodotti (vedi Windows Vista).

Nonostante questa consapevolezza, ogni volta che viene trovato un mio bug su un software in produzione (o, come in questo caso, in beta) è come se il mio orgoglio venisse ferito. Ritengo di scrivere del buon codice, sono abbastanza metodico nei miei test, eppure c’è sempre un errore (più o meno banale) del quale non mi accorgo prima di rilasciare una versione.

Ma non ho scritto questo post per annoiarvi con i miei sensi di colpa, quindi veniamo al dunque!

Fix my bug

Fix my bug

Sabato pomeriggio.

Sono lontano un’ora e mezza di auto da casa, non ho il portattile con me e ricevo una chiamata da Bask, il mio capo: “Ho installato youPeople al <locale> di <città>, ma non riesco ad inviare messaggi dal mio Sony Ericsson”.

Lasciamo da parte il mio sconforto. Ho un problema che devo risolvere, ma non ho il portattile e nemmeno tanta voglia di farmi 3 ore di auto per “passare” da casa a lavorarci. Ho bisogno di una soluzione.

Ho la possibilità di accedere ad Internet da dove mi trovo, ma non posso accedere al server in ufficio perchè (in realtà, non so bene perchè) chi ha configurato il firewall non ha lasciato l’accesso SSH dall’esterno. Fortunatamente ho l’accesso HTTPS a Trac, il software di gestione dei progetti che usiamo, il quale ha una vista (in lettura) sul repository subversion.

Dopo aver downlodato alcuni sorgenti e trovato il bug, resta il problema di come correggerlo. Avrei bisogno di collegarmi alla VPN aziendale, ma non ho le chiavi di accesso con me. Chiamo un collega, ma nemmeno lui ha il portattile al seguito, quindi rimane una sola soluzione: chiamare la mamma!

Avete capito bene. La brillante idea che ho avuto è stata quella di chiamare mia mamma a casa, farle accendere il mio computer, aprire l’IDE, correggere il bug (per fortuna, ha dovuto modificare una singola linea di codice) e committare nel repository.

Tempo impiegato: 40 minuti. Non male.

Fortunatamente, diversi mesi fa ho creato uno script cron che ad ogni ora crea una build del nostro progetto, a partire dal repository subversion. In questo modo, nel server di sviluppo (utilizzato anche per la beta) il progetto viene aggiornato ogni ora. Questo significa che è bastato committare la modifica ed attendere lo scoccare dell’ora successiva affinchè venisse aggiornato il nostro beta-server.

The end

P.S. Sono fiero del logo in stile “Pimp My Ride” che sono riuscito a creare in pochi minuti. Nonostante io non sia un grafico e non abbia nessuna intenzione di diventarlo.

ShellExec - Java System.exec() on PocketPC

Tuesday, November 27th, 2007

JavaPiù di due anni fa, mentre lavoravo su Blues per l’Università di Bologna, ho avuto l’esigenza di eseguire una serie di comandi shell, da un’applicazione Java (J2ME/CDC) per palmari HP iPaq (IBM J9 VM). Questa funzionalità, prevista dalle API Java, in realtà non era implementata sulla maggior parte delle virtual machine CDC/PersonalProfile, a causa del fatto che non era possibile rispettare pienamente le specifiche.

ShellExec

Dopo essermi documentato in rete, ho deciso di sviluppare una piccola libreria nativa, da interfacciare attraverso JNI alla mia applicazione Java, per implementare una versione ridotta della System.exec() e sopperire così alle carenze della JVM che stavo utilizzando. La libreria, chiamata ShellExec, la rilasciai pubblicamente con licenza GPL (repository).

A distanza di più di due anni, continuo a ricevere mail che mi chiedono informazioni e/o aiuti sull’utilizzo di questa libreria, segnale del fatto che la libreria continua a svolgere abbastanza degnamente il suo sporco lavoro. L’ultima mail è arrivata oggi:

Oh, and by the way ShellExec works on my device like a champion. I’m using a Symbol (Motorola) MC70 running Windows Mobile 5.0, using the IBM J9 VM, version 2.3 (CDC 1.0/PP 1.0)

Maggiori informazioni:

Blues - Bluetooth Context-Aware System

Monday, March 26th, 2007

Blues è un’infrastruttura che permette di fornire servizi context-aware a dispositivi mobili, quali cellulari, smartphone e palmari, utilizzando la tecnologia Bluetooth. Il sistema è stato progettato e sviluppato da Marco Pracucci, in collaborazione con il Dr. Stefano Cacciaguerra ed il Prof. Giorgio Casadei, e finanziato dal Sistema Museale d’Ateneo dell’Università di Bologna e da Ser.In.Ar. (Cesena).

Obiettivo

L’obiettivo di Blues è quello di fornire una piattaforma che faciliti la realizzazione di servizi context-aware, ai quali un utente puo’ accedere utilizzando un telefono cellulare o un palmare dotati di tecnologia Bluetooth.
(more…)

ezXML - Indentazione di un documento XML

Wednesday, November 22nd, 2006

ezXML è una libreria opensource, sviluppata in C, per il parsing di documenti XML. La sua semplicità di utilizzo, le buone performance e le sue ridotte dimensioni (compilata in meno di 20K) la rendono particolarmente adatta nello sviluppo di applicazioni per dispositivi embedded (utilizzo questa libreria su un dispositivo basato su processore ARM).

Una delle funzionalità mancanti nella versione corrente è il supporto per l’indentazione, durante la scrittura di un documento XML. Dopo aver contattato l’autore della libreria (Aaron Voisine) ed avergli suggerito l’introduzione di questa funzionalità, ha rilasciato una patch che aggiunge la funzione ezxml_pretty(), inclusa nella prossima versione della libreria. Nel frattempo potete scaricarla da: