mercoledì 19 novembre 2008

Importare un progetto SVN in Eclipse gestendolo con Git

Al fine di meglio apprendere Git, il sistema di gestione dei sorgenti appositamente sviluppato per il Kernel di Linux (ma usato anche in altri progetti), ho deciso di convertire un progetto Java che gestisco con un repository SVN in un repository Git.
Su questo progetto lavoro pressocché da solo, usando Eclipse e i tools SVN sviluppati dal gruppo di SVN stesso, quindi non dovrei molti problemi nella migrazione. Per sicurezza ho deciso di mantenere per alcuni giorni entrambi i progetti in Eclipse, così da poter tornare abbastanza semplicemente al sistema SVN in caso di problemi.
Di seguito i passi necessari all'installazione di EGit, il plug-in per Eclipse/Git e per l'importazione del progetto.

Installazione del plug-in per Eclipse: EGit
L'installazione del plugin non è un'operazione banale, poiché occorre importare i vari sotto progetti in Eclipse e compilarli a mano. In particolare occorre seguire i passi:
  • scaricare i progetti di EGit in una directory temporanea con il comando git clone git://repo.or.cz/egit.git
  • importare i progetti in Eclipse. Per fare questo selezionare da Eclipse il menù File->Import->existing projects into workspace e verificare che i progetti compaiano nel project explorer.

  • ora occorre compilare i progetti, per fare questo occorre darre il classi Build-All dal menù Project. Questo passo è opzionale se avete abilitato il build automatico dei progetti.
  • occorre ora esportare un plug-in compatibile per Eclipse, quindi dal menù File->Export si seleziona la voce Plug-in and fragments. E' necessario impostare come percorso la root dell'installazione corrente di Eclipse.


  • a questo punto è possibile riavviare Eclipse, cancellare la directory temporanea dove si sono scaricati i sorgenti di EGit, rimuovere i progetti dal project manager e verificare che il plugin sia installato. In particolare per questo è sufficiente controllare che nell'import ci sia una voce Git.

Conversione di un progetto SVN in repository Git
Nel mio caso il progetto SVN si chiama HRPM e risiede su una macchina remota. Dopo aver installato sulla mia macchina tutti i tool git, fra i quali git-svn, posso importare il progetto SVN in un repository locale git con la seguente procedura:
  • creare una directory dove inserire il repository, entrare nella directory e inizializzare il repository git: git-svn init svn+ssh://host/sviluppo/svn//hrpm
  • importare i sorgenti con il comando git-svn fetch -r900 (dove 900 rappresenta il numero di revisione a cui il repository SVN è arrivato)
  • dopo qualche secondo (o qualche minuto), il repository git sarà pronto al suo utilizzo. E' ora possibile usare questo repository o importarlo in Eclipse.
  • (opzionale) siccome il progetto importato nel repository contiene lo stesso nome del suo fratello su SVN, qualora si vogliano mantenere entrambi i progetti è necessario editare il file .project che si trova nella directory dei sorgenti cambiandone il nome, come ad esempio in HRPM-git.
Importare il progetto in Eclipse
Avendo ora il progetto su un repository Git è possibile importare il progetto all'interno di Eclipse:

  • dal menù File->Import->Git selezionare la voce Git-Repository;
  • selezionare nella dialog che si apre la voce file e specificare il percorso dove risiede il repository git;

  • la dialog successiva chiede quale branch si vuole importare. Siccome il repository è appena stato creato, il branch master è quello selezionato per default.

  • a questo punto il progetto è importato, ma non ancora visibile in Eclipse: esiste la cartella corrispondente nel workspace, ma non il progetto nel project explorer. Per far comparire il progetto, è necessario procedere ad una successiva importazione di un progetto esistente: File->Import->Existing Project into Workspace come mostrato di seguito

  • si specifica la directory che contiene il progetto (ATTENZIONE: questa volta si deve specificare la directory all'interno del workspace) e si vedrà comparire il progetto fra quelli selezionabili. Qualora esista già un progetto con lo stesso nome Eclipse non mostrerà nessun progetto selezionabile.

  • e il progetto verrà visualizzato nel project explorer. Non è ancora finita, perché il progetto è locale, e non verrà gestito da Git. Occorre quindi fare click destro sul progetto, selezionare Team->Share Project e usare Git come metodo di condivisione.

  • da ultimo si informa Eclipse di usare un repository esistente, e il gioco è fatto.

La cosa interessante è che il procedimento ha funzionato perfettamente nonostante il mio progetto fosse non un semplice progetto Java, bensì un progetto AspectJ. L'unica pecca del plug-in, almeno ad una prima vista, è l'utilizzo dei caratteri in stile CVS per indicare che il contenuto necessita di commit/aggiornamenti, mentre l'uso delle icone del plug-in SVN è sicuramente più gradevole.

Link utili:
Eclipse Git Plugin Installation
A dummy guide to use Egit

martedì 18 novembre 2008

PostgreSQL Europe on-line

E' da pochi giorni disponibile il sito web del PostgreSQL Europe, il gruppo europeo per la diffusione di PostgreSQL. Fra i link amici figura anche quello di ITPUG, associazione per la promozione di PostgreSQL in Italia.

Proceedings del PGDay 2008 on-line!

Sono finalmente disponibili per il download i talk del PGDay 2008, sia in italiano che in inglese. E' possibile scaricare i talk dalla pagina del programma, semplicemente cliccando sul talk a cui si è interessati.

domenica 16 novembre 2008

Quanto farebbe Darrel oggi?

Su YouTube c'è un video di Darrel Pace in azione, e un commento abbastanza stupido al quale ho risposto e del quale discuto anche qui. Sostanzialmente ci si chiede quanto potrebbe fare Darrel Pace oggi con gli equipaggiamenti tecnologici che sono presenti sui campi di gara, e la risposta che è stata data è che gli equipaggiamente di oggi non sono significativamente migliori di quelli di venti anni fa! Non sono per niente d'accordo con una simile affermazione. Se è infatti vero che venti anni fa i punti si facevano anche con attrezzature non paragonabili a quelle attuali, l'equipaggiamento di oggi è sicuramente migliore di quello che c'era allora. Ricordo che Ferrari e Spigarelli passavano abbondantemente i 1300 anche con frecce in alluminio, e lo stesso Pace vinse l'olimpiade di L.A. 1984 con frecce in alluminio dando circa 50 punti al secondo (McKinney). E se è vero che Pace aveva un record del mondo di 1340 punti, in che condizioni doveva essere per poter fare tali punteggi? Intendo dire che gli equipaggiamenti di adesso consentono di sopperire a molti problemi climatico-fisici del contesto di gara. Ad esempio flettenti e frecce veloci consentono di compensare problemi di vento in modo più semplice. Quindi è vero che un atleta capace di fare 1300 punti con frecce di alluminio farà punteggi analoghi con frecce al carbonio, ma sicuramente li farà in modo più costante. E una volta trovata la messa a punto ideale allora farà ancora di più. Altrimenti non si spiegherebbe come mai si sia dovuto attendere gli anni 2000 per avere il primo 1400 femminile.
Infine ritengo che il materiale faccia la differenza per tutti gli arcieri mediocri o bravini, che grazie a tecnologie migliori possono compensare le loro mancanze tecniche o psico-fisiche. A titolo di esempio riporto la mia esperienza con i doinker: montati qualche mese fa hanno subito smorzato le vibrazioni in eccesso del mio arco. Ora, ricordo bene, che i grandi campioni tiravano con archi silenziosissimi anche senza doinker. Cosa significa questo? Che loro erano in grado di far funzionare il materiale meglio, mentre io, comune mortale, devo compensare alla mia incapacità tecnica (o alla mia impreparazione) con del materiale tecnologicamente migliore.

venerdì 14 novembre 2008

Compilazione incrementale Ant usando AspectJ in Eclipse

Dopo aver aggiornato i tools di sviluppo di AspectJ per Ecplise (AJDT) alla versione 1.6.1, mi sono trovato una brutta sorpresa nella compilazione tramite Ant (task iajc): la compilazione incrementale non funziona più se non si specifica un parametro sourceRoots che è praticamente equivalente al precedente parametro che indica la directory che contiene i sorgenti. Ma ahimé nemmeno così la compilazione incrementale può funzionare, e infatti si ottiene la schermata di Eclipse che segue:


Il fatto è che Ant non può sapere quali file sono stati modificati, e quindi quali sorgenti debbano essere applicati dal weaver, percui di fatto ant rimane in attesa come processo attendendo di ricompilare nuovamente il set dei sorgenti. Quindi il task iacj diventa una sorta di processo che non termina mai e che addende sempre input dall'utente per ricompilare. Non esiste quindi nessuna soluzione apparente per usare ant in incremental mode all'interno di Eclipse, percui ci si deve rivolgere al compilare degli AJDT per avere una compilazione incrementale.

Visualizzazione delle variabili GUC

Le variabili GUC (Global User Configuration) possono essere visualizzate in un terminale SQL con il comando SHOW, specificando esattamente il nome della variabile (es. SHOW add_missing_from) oppure con l'opzione ALL che mostrerà una tabella contenente il nome della variabile, la sua descrizione e il suo valore attuale.

Aggiornamento a Kubuntu Intrepid

Ho aggiornato il mio laptop alla nuova versione di Kubuntu, Intrepid (8.10). Il nuovo KDE è veramente molto bello, anche se ci sono diverse cose ancora da sistemare (per esempio l'altezza del pannello che non sembra essere regolabile).
Ahimé all'avvio del nuovo sistema tutte le mie impostazioni (posta, im, ecc.) erano perse! Il problema è che, non essendo più supportato KDE 3 in Kubuntu, la directory di installazione ~/.kde4 non ha più senso di esistere, e quindi le impostazioni sono state copiate nuovamente in ~/.kde. Basta copiare i file di configurazione nella directory ~/.kde per riavere le proprie impostazioni.
Ci sono stati anche alcuni problemi con dei programmi, ma è stato sufficiente reinstallarli per fissare il problema.

lunedì 10 novembre 2008

Questione di igiene

Evidentemente l'igiene non è più una cosa così importante, eppure i miei genitori mi hanno sempre educato a non toccare tutto quello che vedo, a lavarmi le mani prima di mangiare, ma....

...a cena in un ristorante ho dovuto far portare indietro il mio bicchiere di birra perché puzzava di benzina! Evidentemente chi ha spillato la birra aveva appena fatto il pieno all'auto senza lavarsi le mani (e non oso pensare a questo punto il cibo come era stato trattato).

...in una farmacia dove ho fatto una visita il computer collegato agli elettrodi aveva un dito di polvere, tanto che l'operatrice lavorandoci lasciava le impronte sul case.

...ad una mostra canina a cui ho partecipato un sacco di bambini giocavano per terra, mettendosi in bocca dita e altri oggetti. Peccato che per terra i cani facessero anche i loro bisogni.

Sarò paranoico, ma forse un po' di igiene e pulizia non guasterebbe, almeno nelle situazioni più lampanti!

giovedì 6 novembre 2008

Compilare PostgreSQL in Eclipse 3.4

Eclipse può essere usato come ambiente di sviluppo/compilazione/studio di PostgreSQL, basta avere i CDT installati (C Development Tools).
Di seguito i passi per configurare Eclipse per il build di PostgreSQL.

  • Scaricare i sorgenti di PostgreSQL, decomprimerli in una directory (es /sviluppo/src/postgresql-8.3.5).
  • Configurare i sorgenti per un build tramite make, quindi dalla directory principale del pacchetto scaricare lanciare il comando configure come ad esempio in:
./configure --prefix=/sviluppo/sr/postgresqlbin --enable-depend --enable-cassert --enable-debug

  • avviare Eclipse e creare un nuovo progetto, di tipo C, Makefile e vuoto.

  • dare un nome simbolico al progetto (es. PostgreSQL) e, una volta creato il progetto, fare click destro su di esso e selezionare la voce import. Dalla finestra di dialogo che appare selezionare la directory radice risultante dalla scompattazione del pacchetto scaricato.


  • L'importazione dei file produrrà una struttura del progetto simile a quella in figura.
  • Una volta terminata l'importazione dei sorgenti, è possibile lanciare un build dell'ambiente e vedere la compilazione in corso attraverso la console di Eclipse.

smbldap e scadenza password

Per default quando si utilizzano i smbldap-tools per l'autenticazione Samba/Unix unificata tramite Samba viene abilitato un tempo di scadenza password di 45 giorni. E' possibile rimuovere la gestione della scadenza password, o impostare un intervallo di tempo differente, agendo sul parametro defaultMaxPasswordAge del file /etc/smbldap-tools/smbldap.conf.

Quanta fretta

Non posso fare a meno di notare come la gente sembri avere una gran fretta, o meglio una grande maleducazione mascherata da fretta.
Solo per citare alcuni episodi che mi sono capitati:
  • una persona in fila davanti a me alla cassa della coop era così impegnata a telefonare che non ascoltava la cassiera e si è anche dimenticato il resto
  • una persona in palestra ha smesso di fare esercizi per rispondere ad un messaggio al cellulare
  • una mamma mi ha impedito di uscire da un parcheggio perché aveva messo la sua macchina davanti alla mia, a circa 10 mt. dall'ingresso della scuola (non si sa mai che si ammali camminando troppo). Quando finalmente sono riuscito a rintracciarla e a farle spostare la macchina, mi ha comunque ostacolato nella manovra di uscita e si è ripiazzata in modo assurdo appena me ne sono andato.
  • davanti a casa ho una rientranza nel marciapiede fatta apposta per far sostare una macchina, ma tipicamente tutti vi parcheggiano senza far manovra, lasciando quindi la macchina in mezzo alla strada.
Ma possibile che nessuno abbia un minuto, due massimo, per concentrarsi su quello che sta facendo (pagare alla cassa, parcheggiare in modo adeguato, fare un esercizio in palestra)? Prendersi il tempo che serve per se stesi è un bene!

martedì 4 novembre 2008

Acrobat Reader: stampare i commenti

Mi è capitato di dover stampare un documento PDF contenente dei commenti, che nella visualizzazione compaiono come popup, ma che in stampa vengono solo marcati come segnalini privi di contenuto. Dopo un po' di esperimenti ho capito che con Okular non avevo modo di stampare i commenti, così da un computer Windows ho provato con Acrobat Reader...ma niente! Il risultato era sempre lo stesso. E parlo di Acrobat Reader 9, non un reader datato. Ebbene ho trovato che modificando la chiave di registro HKEY_CURRENT_USER\Software\ADOBE\Acrobat Reader\9.0\Annots\cPrefs\bprintCommentPopups da 0 a 1 il programma stampa i popup con le note. Certo non è una stampa molto pulita, poiché i popup vengono stampati in posizioni "random" sopra al testo, ma è meglio di niente.
Sicuramente l'Adobe potrebbe migliorare le opzioni del suo diffusissimo Reader per supportare meglio i commenti. Anche un'opzione per stampare i commenti nell'ultima pagina, un po' come fossero delle note numerate.

Mappare le singole proprietà degli oggetti su un database

In questi giorni sto lavorando ad una applicazione PHP che mappa degli oggetti su dei dati che risiedono su un database relazionale. Nulla di nuovo, nulla di sconvolgente, si tratta di un normale mapping ORM. Il problema è che l'applicazione è lenta, anzi lentissima, per quelle che sono le capacità del server e della rete su cui gira.
Il primo passo per me è stato analizzare i log di PostgreSQL (il database server che ospita i dati) per cercare di capire che tipo di query venivano lanciate. Ebbene ho trovato una serie di micro-query ripetute in modo massivo, e analizzando il codice ho trovato che ogni singolo dato di un oggetto veniva sempre riletto dal database ogni volta che veniva acceduto. In sostanza quindi ogni operazione di get forzava un reload del singolo dato dal database, e quindi il traffico di query, tutte piccole e poco ottimizate (e ottimizzabili) diventava enorme. La mappatura ORM prevede quindi di non tenere in memoria le proprietà di un oggetto ma di ricaricarle ogni volta che queste vengano richieste direttamente dal database. E' evidente che in quest'ottica i singoli metodi get non possono essere ottimizzati, ma si può procedere ad una velocizzazione delle operazioni per metodi getAll su più proprietà dello stesso oggetto. In sostanza si tratta di creare metodi wrapper attorno a più operazioni di get, facendo eseguire però una singola operazione sul database. Se ad esempio si hanno i metodi getNome e getCognome, considerando che nell'applicazione molto spesso occorrono entrambi i dati, si può costruire una funzione getNomeCognome che restituisca un array con entrambi i dati. Al suo interno la funzione non farà affidamento sui due servizi getNome e getCognome, perché questo significherebbe creare due query sul database, bensì effettuerà una query unica verso il database. Sfruttando quindi questi metodi get-combinati si possono ottenere tutti i dati che servono al flusso dell'applicazione con query uniche e quindi riducendo il traffico di rete e la latenza del database.

Gara indoor di Modena

Domenica scorsa si è tenuta a Modena la gara indoor dell'Aquila Bianca, e così al pomeriggio sono andato con la mia ragazza a fare un giro per vedere un po' come si svolgono le competizioni adesso (sono circa 8 anni che non partecipo ad una gara).
E' stato molto emozionante, anche perché ho rivisto un sacco di persone di cui avevo perso notizie. Ho speso buona parte del tempo a fare pubbliche relazioni più che a guardare gli atleti tirare, e mi ha fatto molto piacere che tutti mi abbiano incitato a tornare sui campi di gara (anche se ritengo sia ancora presto). Mi ha chiaramente fatto anche molto piacere vedere il mio primo allenatore e la sua famiglia, nonché ritrovare tanti vecchi compagni di allenamenti.

Non ho poi potuto fare a meno di notare come, oggi, i più giovani siano già dotati di equipaggiamento all'ultimo grido, e non parlo di tecnologia, quanto di moda. Sono rimasto infatto sorpreso di vedere quante faretre della Angel vi erano sulla linea di tiro, e quante di queste erano portate da ragazzi. Ora, essendo io cresciuto con la scuola del "quel che non c'è non si rompe", ho sempre dedicato più attenzione ai materiali (sempre di primissimo ordine, grazie ai sacrifici dei miei genitori) che non alla moda. Inoltre, ricordo che all'epoca l'unico atleta che conoscevo e che aveva una faretra della Angel era Andrea, l'unico degno di portare un simile oggetto. E nonostante dica tutto questo, anche io alla fine ho ordinato una simile faretra, ma mentre io l'ho ordinata dopo anni di tiro, valutando attentamente la spesa e dicendo esplicitamente che non merito una simile faretra (e lo penso realmente), non mi capacito di questa diffusione alla moda fra i più giovani. Sicuramente è una para mentale, se si pensa che è solo una faretra, ma forse è anche questo un indice di come i giovani stiano perdendo il valore degli oggetti e dei sacrifici per averli.