Java: misurare i tempi di esecuzione delle nostre procedure

Postato da ROb | nella categoria Java, Sviluppo web | mercoledì, 21 luglio 2010

0

Spesso mi sono trovato nella situazione di voler possedere uno strumento che mi permettesse di misurare i tempi di esecuzione di una procedura, di un metodo di una classe o di un semplice blocco di codice.

chronometer

Tutte le volte mi sono scritto delle apposite funzioni, che facevano la differenza tra la data di fine e la data di inizio della misurazione e poi stampavano il risultato tramite un sistema di logging.

Ieri però, non soddisfatto delle esperienze precedenti, ho cercato un tool che facesse lo sporco lavoro per me, che fosse affidabile e che permettesse di avere un valido report di visualizzazione dei dati raccolti.

Eccomi quindi arrivato, non so come (perché dal nome del progetto non sono chiare le finalità della libreria), a JETM.
JETM è l’acronimo di “Java™ Execution Time Measurement Library” che dichiara di essere “a small and free library, that helps locating performance problems in existing Java applications.”

Per integrarla nelle nostre applicazioni è sufficiente inserire il file jar della distribuzione, chiamato jetm-x-x-x.jar, all’interno del nostro CLASSPATH e fare in modo tale che la configurazione venga inizializzata prima della registrazione delle misurazioni vere e proprie.

Le applicazioni standalone possono inizializzare la configurazione all’inizio del loro ciclo di esecuzione, le applicazioni web possono affidarsi alla configurazione di Spring oppure tramite degli opportuni ContextListener definiti nel file web.xml.

Il codice banale di inizializzazione è:

	    BasicEtmConfigurator.configure();
	    monitor = EtmManager.getEtmMonitor();
	    monitor.start();

a questo punto per poter collezionare una misurazione dobbiamo definire un punto e successivamente determinare la fine della misurazione, in questo modo:

	    EtmPoint point = monitor.createPoint("Nomedelpuntodicollezione");
	    // do something...
	    point.collect();

Il parametro del metodo createPoint serve per distinguere un punto di misurazione da un altro.
Alla fine della nostra applicazione, o quando lo riteniamo più opportuno, possiamo visualizzare i dati collezionati e al termine stoppare il servizio di monitoraggio:

	    monitor.render(new SimpleTextRenderer(new Locale("it")));
	    monitor.stop();

Il renderer inizializzato in italiano serve per utilizzare i corretti separatori di decimali e migliaia.
L’output ottenuto dal metodo render assomiglia a qualcosa di questo tipo:

Java(TM) Execution Time Measurement Library

Il tempo calcolato è espresso in millisecondi.

Se vogliamo anche visualizzare l’annidamento delle misurazioni/chiamate possiamo passare il parametro “true” al metodo di inizializzazione della configurazione:

        BasicEtmConfigurator.configure();

Per ulteriori informazioni e tutta la documentazione necessaria fate riferimento al sito ufficiale del progetto (http://jetm.void.fm/)

Formattazione di un numero decimale in Java

Postato da ROb | nella categoria Java, Sviluppo web | martedì, 20 luglio 2010

2

Può capitare di dover modificare i caratteri separatori di decimali e migliaia nella formattazione di un numero in Java.

Questa porzione di codice vi permette di farlo sfruttando alcune classi base di Java:

    		DecimalFormatSymbols symbols = new DecimalFormatSymbols();
    		symbols.setDecimalSeparator('$');
        	symbols.setGroupingSeparator('#');

        	String format = "###,###.###";
        	DecimalFormat formatter = new DecimalFormat(format, symbols);
        	formatter.setGroupingSize(3);

        	String numberString = formatter.format(number);

In questo caso, un pò per gioco, abbiamo impostato il carattere $ come separatore dei decimali e # come separatore delle migliaia.

La classe DecimalFormat formatta il numero sfruttando il pattern specificato in questo “###,###.###”. Il suo costruttore però accetta anche una variabile di tipo DecimalFormatSymbols che può essere inizializzata a partire da uno specifico Locale (avremmo infatti potuto rimpiazzare la chiamata con DecimalFormatSymbols symbols = new DecimalFormatSymbols(new Locale(“it”)); ).

A questo punto la variabile symbols può essere utilizzata per sovrascrivere le impostazioni dell’eventuale Locale utilizzato oppure può essere utilizzato in modo nativo lasciando i separatori di default che, per la lingua italiana, sono tipicamente la “,” come separatore dei decimali e il “.” come raggruppatore della migliaia (non sempre visualizzato).

Installare un Kernel modulare su OVH SP-09 Mini con Ubuntu Server 8.04 64bit

Postato da ROb | nella categoria Linux | giovedì, 1 luglio 2010

0

Questo titolo così specifico e decisamente prolisso, narra di alcune ore di lavoro spese per ricompilare il kernel per un server in hosting presso OVH su cui è stato successivamente installato VMWare Server come software di virtualizzazione.

OVH è un provider, di origine francese, che da alcuni anni opera a livello commerciale e tecnico anche in Italia. Pur presentando un offerta molto vantaggiosa dal punto di vista economico, garantisce un buonissimo livello qualitativo e di prestazioni (ovviamente dal basso della mia piccola esperienza).

Il supporto è sempre pronto e gentile, i server sono affidabili così come i servizi di cui sono forniti (starò forse portando un pò di sfortuna?).

Lasciando però da parte le qualità del servizio di hosting, è interessante dire come, nei server dedicati a disposizione, sia nell’offerta standard (chiamata OVH) che in quella entry level (Kimsufi), è possibile installare e far funzionare correttamente VMWare Server per la creazione e gestione di macchine virtuale.

Tutto questo è possibile grazie al fatto che i kernel delle macchine distribuite sono liberamente ricompilabili, inserendo gli opportuni flag di compilazione necessari, e che è possibile configurare le interfacce di rete, di host e guest, per fare in modo che le due macchine si parlino e che la guest veda il mondo e sia raggiungibile da esso.

Il vantaggio intrinseco di avere in hosting una macchina virtuale sopra a una dedicata è quello di poter un domani fare un upgrade hardware, aumentando RAM e potenza del processore dell’host, senza spendere neanche un minuto nella riconfigurazione del guest e garantendo nello stesso tempo tempi di downtime minimi verso i clienti ospitati nel server virtuale.

Con il servizio dell’ip-failover inoltre, possiamo anche spostare fisicamente il nostro server virtuale da un host a un altro. L’ip assegnato alla macchina virtuale infatti è spostabile a piacere fra i server che abbiamo nel nostro portafoglio prodotti.

In questo articolo non descriverò la procedura ma rimanderò direttamente al post che ho inserito nell’apposito forum di OVH.

Ecco  i passaggi richiesti per l’installazione direttamente dal post nel forum.

I commenti sull’articolo potete postarli qui, quelli sui passaggi dei tutorial direttamente nel forum.

logkeys – il keylogger per Linux

Postato da ROb | nella categoria Linux, Utilità | venerdì, 18 giugno 2010

0

Dopo numerosi giorni di assenza eccomi tornato a scrivere qualcosa.

I keylogger non sono proprio dei software “buoni” anche se molte volte possono tornare comodi per registrare i tasti che abbiamo digitato per la configurazione di un software o per numerosi scopi analoghi.

Il mondo Windows penso che sia pieno di tool di questo tipo (spesso anche non volutamente installati :-) ) mentre per il mondo Unix e GNU/Linux non ci sono moltissime alternative.

logo logkeys

Un progetto sicuramente promettente, anche se ancora in stato alpha, è logkeys.
Per la mia Linux Box (Ubuntu Hardy Heron) non esistono i pacchetti precompilati quindi, seguendo la pagina di documentazione del progetto http://code.google.com/p/logkeys/wiki/Documentation , ho provveduto alla compilazione e alla successiva installazione.

Ecco il mio script per l’esecuzione di logkeys:

#!/bin/bash

file=~/Desktop/test.log

case "$1" in
	start)
        echo -en "Starting logkeys, output in ${file}\n";
        touch ${file};
        logkeys --start --output ${file};
        ;;
   stop)
        echo -en "Stopping logkeys";
        logkeys --kill;
        more ${file};
esac

exit 0

Salvandolo con il nome logkeys.sh e lanciandolo con il comando ./logkeys.sh start lo script salva tutti i tasti pigiati nel file ~/Desktop/test.log.
Per interromperlo è sufficiente usare ./logkeys.sh stop .

Mi raccomando fatene buon uso! ;-)
Per ulteriori informazioni su logkeys seguite l’homepage del progetto.

Uno script per conoscere in un attimo il vostro IP su Internet

Postato da ROb | nella categoria Linux | venerdì, 21 maggio 2010

0

Esistono moltissimi modi per conoscere il vostro IP su Internet.

ip

Questo script in bash vuole essere solamente l’ennesima strada.
Per funzionare occorre solamente aver installato wget e avere una connessione Internet (ovviamente) con accesso http verso il sito checkip.dyndns.org.

#!/bin/bash

wget -q -O - http://checkip.dyndns.org | sed -n -e 's/.*<body>\(.*\)<\/body>.*/\1/p' | sed -n -e 's/Current IP Address: //p'

Il suo funzionamento è veramente semplice.
Si chiede a DynDns il proprio ip tramite una richiesta http. La pagina web ottenuta viene data in pasto a sed che prima estrae il contenuto del tag body e successivamente toglie il prefisso “Current IP Address: “.

I comandi per conoscere file e pacchetti nelle distribuzioni Debian-based

Postato da ROb | nella categoria Linux | mercoledì, 19 maggio 2010

0

Il comando apt-file (non installato di default in Ubuntu) è una valida alternativa al tradizional dpkg.
Dopo averlo installato bisogna aggiornare il suo database con il comando (eseguito con i permessi di root):

apt-file update

Dopo averlo aggiornato, anche un utente con privilegi normali può usare questa utility per conoscere, dato un patterna di ricerca, quali sono i pacchetti dove ci sono file che rispondono a tale ricerca e quali sono i file in questione. Nella mia installazione per esempio il comando:

apt-file list quake

fornisce il seguente output:

quake2-data: /usr/share/doc/quake2-data/README.Debian
quake2-data: /usr/share/doc/quake2-data/changelog.Debian.gz
quake2-data: /usr/share/doc/quake2-data/copyright
quake3-data: /usr/share/doc/quake3-data/README.Debian
quake3-data: /usr/share/doc/quake3-data/changelog.Debian.gz
quake3-data: /usr/share/doc/quake3-data/copyright

Ci sono cioè 6 file che contengono quel pattern presenti in due pacchetti: quake2-data e quake3-data.

Se vogliamo invece conoscere il contenuto di un pacchetto .deb possiamo usare il comando dpkg-deb nel seguente modo:

bash#roberto@ken ~ >dpkg-deb -c /opt/deb/nautilus-dropbox_0.6.1_i386_ubuntu_8.04.deb
drwxr-xr-x root/root         0 2009-04-17 23:45 ./
drwxr-xr-x root/root         0 2009-04-17 23:45 ./usr/
drwxr-xr-x root/root         0 2009-04-17 23:45 ./usr/lib/
drwxr-xr-x root/root         0 2009-04-17 23:45 ./usr/lib/nautilus/
drwxr-xr-x root/root         0 2009-04-17 23:45 ./usr/lib/nautilus/extensions-2.0/
-rw-r--r-- root/root      1404 2009-04-17 23:45 ./usr/lib/nautilus/extensions-2.0/libnautilus-dropbox.la
-rw-r--r-- root/root     36052 2009-04-17 23:45 ./usr/lib/nautilus/extensions-2.0/libnautilus-dropbox.a
-rw-r--r-- root/root     28996 2009-04-17 23:45 ./usr/lib/nautilus/extensions-2.0/libnautilus-dropbox.so
drwxr-xr-x root/root         0 2009-04-17 23:45 ./usr/share/
drwxr-xr-x root/root         0 2009-04-17 23:45 ./usr/share/applications/
-rw-r--r-- root/root       235 2009-04-17 23:45 ./usr/share/applications/dropbox.desktop
drwxr-xr-x root/root         0 2009-04-17 23:45 ./usr/share/man/
drwxr-xr-x root/root         0 2009-04-17 23:45 ./usr/share/man/man1/
-rw-r--r-- root/root      1284 2009-04-17 23:45 ./usr/share/man/man1/dropbox.1.gz
drwxr-xr-x root/root         0 2009-04-17 23:45 ./usr/share/doc/
drwxr-xr-x root/root         0 2009-04-17 23:45 ./usr/share/doc/nautilus-dropbox/
-rw-r--r-- root/root       780 2008-10-04 04:25 ./usr/share/doc/nautilus-dropbox/README
-rw-r--r-- root/root        68 2008-12-20 03:10 ./usr/share/doc/nautilus-dropbox/AUTHORS
-rw-r--r-- root/root      2363 2009-04-17 23:44 ./usr/share/doc/nautilus-dropbox/copyright
-rw-r--r-- root/root       179 2009-04-17 23:44 ./usr/share/doc/nautilus-dropbox/changelog.gz
-rw-r--r-- root/root        81 2008-07-19 03:12 ./usr/share/doc/nautilus-dropbox/NEWS.gz
drwxr-xr-x root/root         0 2009-04-17 23:45 ./usr/share/icons/
drwxr-xr-x root/root         0 2009-04-17 23:45 ./usr/share/icons/hicolor/
drwxr-xr-x root/root         0 2009-04-17 23:45 ./usr/share/icons/hicolor/24x24/
drwxr-xr-x root/root         0 2009-04-17 23:45 ./usr/share/icons/hicolor/24x24/apps/
-rw-r--r-- root/root      1684 2009-04-17 23:45 ./usr/share/icons/hicolor/24x24/apps/dropbox.png
drwxr-xr-x root/root         0 2009-04-17 23:45 ./usr/share/icons/hicolor/32x32/
drwxr-xr-x root/root         0 2009-04-17 23:45 ./usr/share/icons/hicolor/32x32/apps/
-rw-r--r-- root/root      2157 2009-04-17 23:45 ./usr/share/icons/hicolor/32x32/apps/dropbox.png
drwxr-xr-x root/root         0 2009-04-17 23:45 ./usr/share/icons/hicolor/16x16/
drwxr-xr-x root/root         0 2009-04-17 23:45 ./usr/share/icons/hicolor/16x16/apps/
-rw-r--r-- root/root       918 2009-04-17 23:45 ./usr/share/icons/hicolor/16x16/apps/dropbox.png
drwxr-xr-x root/root         0 2009-04-17 23:45 ./usr/share/icons/hicolor/48x48/
drwxr-xr-x root/root         0 2009-04-17 23:45 ./usr/share/icons/hicolor/48x48/apps/
-rw-r--r-- root/root      3537 2009-04-17 23:45 ./usr/share/icons/hicolor/48x48/apps/dropbox.png
drwxr-xr-x root/root         0 2009-04-17 23:45 ./usr/share/icons/hicolor/22x22/
drwxr-xr-x root/root         0 2009-04-17 23:45 ./usr/share/icons/hicolor/22x22/apps/
-rw-r--r-- root/root      1485 2009-04-17 23:45 ./usr/share/icons/hicolor/22x22/apps/dropbox.png
drwxr-xr-x root/root         0 2009-04-17 23:45 ./usr/share/icons/hicolor/64x64/
drwxr-xr-x root/root         0 2009-04-17 23:45 ./usr/share/icons/hicolor/64x64/apps/
-rw-r--r-- root/root      5016 2009-04-17 23:45 ./usr/share/icons/hicolor/64x64/apps/dropbox.png
drwxr-xr-x root/root         0 2009-04-17 23:45 ./usr/share/icons/hicolor/64x64/emblems/
-rw-r--r-- root/root      4799 2009-04-17 23:45 ./usr/share/icons/hicolor/64x64/emblems/emblem-dropbox-uptodate.png
-rw-r--r-- root/root        42 2009-04-17 23:45 ./usr/share/icons/hicolor/64x64/emblems/emblem-dropbox-syncing.icon
-rw-r--r-- root/root        43 2009-04-17 23:45 ./usr/share/icons/hicolor/64x64/emblems/emblem-dropbox-uptodate.icon
-rw-r--r-- root/root      5053 2009-04-17 23:45 ./usr/share/icons/hicolor/64x64/emblems/emblem-dropbox-unsyncable.png
-rw-r--r-- root/root        45 2009-04-17 23:45 ./usr/share/icons/hicolor/64x64/emblems/emblem-dropbox-unsyncable.icon
-rw-r--r-- root/root      5703 2009-04-17 23:45 ./usr/share/icons/hicolor/64x64/emblems/emblem-dropbox-syncing.png
drwxr-xr-x root/root         0 2009-04-17 23:45 ./usr/bin/
-rwxr-xr-x root/root     91152 2009-04-17 23:45 ./usr/bin/dropbox

Per conoscere invece il contenuto di un pacchetto installato si può usare:

dpkg -L wget

/.
/etc
/etc/wgetrc
/usr
/usr/bin
/usr/bin/wget
/usr/share
/usr/share/doc
/usr/share/doc/wget
/usr/share/doc/wget/AUTHORS
/usr/share/doc/wget/ChangeLog.README
/usr/share/doc/wget/MAILING-LIST
/usr/share/doc/wget/README
/usr/share/doc/wget/copyright
/usr/share/doc/wget/changelog.gz
/usr/share/doc/wget/NEWS.gz
/usr/share/doc/wget/TODO.gz
/usr/share/doc/wget/changelog.Debian.gz
/usr/share/info
/usr/share/info/wget.info.gz
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/wget.1.gz

L’articolo originale è a questo indirizzo: http://www.cyberciti.biz/faq/view-contents-of-deb-file/

Usare netcat per passare file tra macchine GNU/Linux o Unix

Postato da ROb | nella categoria Linux | martedì, 18 maggio 2010

2

Esistono mille modi per passare un file da un server (o un pc) ad un altro.

I più comuni sono:

  • ftp
  • samba
  • scp – ssh
  • email
  • droopy (neanche tanto comune ma citato perché ci avevo già scritto in passato un articolo)

In alcuni casi però si ha l’esigenza di farlo in pochissimo tempo e possibilmente senza nessuna configurazione.
Usiamo allora netcat, il famoso coltellino svizzero della rete!

Scegliamo una porta tcp/ip per lo scambio, in questo caso la 11111 .
Nel PC in cui vogliamo che il file sia depositato usiamo il comando:

nc -l -p 11111 -vv > /home/<user>/Desktop/file_destinazione

Nel PC in cui è presente il file da passare usiamo il comando:

nc <ip_pc_destinazione> 11111 -vv < /home/<user>/Desktop/file_sorgente

In questo modo sfruttando il comando nc (o netcat) abbiamo passato il file al PC di destinazione e lo abbiamo messo nel file .
Ovviamente il tutto senza alcuna protezione, quindi fate attenzione a non lasciare il primo dei due comandi in sospeso… è una porta aperta per parlare con il vostro PC.
Per essere sicuri che tutto funzioni controllare però di avere a disposizione il comando nc e che la porta 11111 sia aperta nei firewall sorgente e destinazione.

Richard Stallman arriva nella Marche, due gli incontri in Ancona

Postato da ROb | nella categoria Varie | mercoledì, 12 maggio 2010

0

Ebbene sì, il nostro beniamino del movimento Open Source mondiale arriva anche nelle Marche e più precisamente in Ancona per ben due incontri:

  • giovedì 13 maggio 2010 ore 17:00 – presso l’assessorato all’informatizzazione del Comune di Ancona
  • venerdì 14 maggio 2010 ore 10:30 – presso l’Aula A7/8 della Facoltà di Ingegneria dell’Università Politecnica delle Marche

Richard Stallman

A questo indirizzo potete trovare il volantino ufficiale dell’evento, linkato anche dalla pagina del Floss Marche.

Invito tutti i marchigiani amanti del Free & Open Software a partecipare numerosi e a diffondere la notizia, ringranziando bubbakk per la preziosa notizia.

Eccolo! Dropbox per Android!

Postato da ROb | nella categoria Android | mercoledì, 5 maggio 2010

2

Da come sì può intuire dal seguente screenshot è finalmente disponibile nel market Dropbox per Android.

Dropbox per Android

Non appena riuscirò a installarla e utilizzarla, aggiornerò l’articolo.

Per ora affrettatevi a scaricarla anche voi!

Output di una query in formato html

Postato da ROb | nella categoria Linux, MySQL | martedì, 4 maggio 2010

0

Il comando mysql permette di generare in modo nativo l’output di una query in formato html.

Per farlo è sufficiente sfruttare l’opzione -html.
Per provare tale funzionalità creiamo un file chiamato script.sql con la seguente interrogazione:

SELECT * FROM user u;

Ora lanciamo la query nel db “mysql” con l’utente root:

mysql -u mysql -p mysql --html < script.sql > output.html

E’ possibile che vi venga richiesta la password dell’utente root se è stata impostata.
Ora possiamo aprire il file output.html con un comunissimo browser.

Un semplice feed per conoscere le previsioni del tempo

Postato da ROb | nella categoria Sviluppo web, Utilità | venerdì, 30 aprile 2010

0

Per chi ama informarsi e rimanere aggiornato tramite i feed RSS o Atom, ecco il feed per conoscere le previsioni del tempo per la propria città.

Grazie al servizio Yahoo Weather, in collaborazione con The Weather Channel, è possibile ricevere un feed della situazione meteo e delle prossime previsioni per la propria città.

Sereno variabile

Prima di tutto bisogna trovare il codice della nostra città (il cosidetto WOEID). Puntiamo quindi il browser su http://weather.yahoo.com/italy/ e cerchiamo la nostra locazione. Nel mio caso, Macerata, la pagina trovata è: http://weather.yahoo.com/italy/marche/-12846728/ dove il numero 12846728 è il codice di riferimento.

Ora possiamo invocare il feed per ottenere le previsioni. Prendiamo l’url http://weather.yahooapis.com/forecastrss?w= e aggiungiamo il nostro numero magico 12846728.
Quindi l’url definitivo sarà: http://weather.yahooapis.com/forecastrss?w=12846728 .

Da buoni italiani che siamo comunque ci serve l’output della temperatura in formato gradi Celsius. Per ottenerlo è sufficiente aggiungere il parametro u=c alla chiamata.

Così l’indirizzo definitivo è: http://weather.yahooapis.com/forecastrss?w=12846728&u=c.

Ormai non avete più scuse se dimenticate l’ombrello!

Finalmente il primo libro per Zabbix

Postato da ROb | nella categoria Informatica in generale, Linux | venerdì, 30 aprile 2010

7

Zabbix

E’ uscito finalmente il primo libro per Zabbix, uno dei più validi applicativi open source di monitoraggio delle reti.

Per chi non conosce Zabbix, ecco un mio precedente articolo in cui ne parlo brevemente.

Il libro, solamente in inglese, si divide in ben 15 capitoli, trattando tutti gli argomenti principali del software. E’ disponibile anche un capitolo di esempio per valutare le qualità dell’edizione e dell’autore stesso.

Per acquistarlo o per ulteriori approfondimenti: https://www.packtpub.com/zabbix-1-8-network-monitoring/book .

Ultimo appuntamento Rassegna Cinematografica Viva Festival – Macerata 2010

Postato da ROb | nella categoria Varie | lunedì, 26 aprile 2010

0

La proiezione conclusiva di questa sera è: Genitori & Figli – Agitare bene prima dell’Uso, ore 21:15 al CineTeatro Don Bosco di Macerata.

Regia: Giovanni Veronesi
Anno di produzione: Italia 2010
Attori: Michele Placido, Luciana Littizzetto, Silvio Orlando, Margherita Buy, Max Tortora, Elena Sofia Ricci, Piera Degli Esposti, Emanuele Propizio, Chiara Passarelli, Andrea Fachinetti, Matteo Amata.
Trama: La studentessa Nina coglie l’occasione di un tema assegnato alla classe dal titolo “Genitori e Figli: istruzioni per l’uso” per parlare del suo rapporto con la famiglia e gli amici a cui riserverà non poche sorprese.

Volantino per ulteriori informazioni sulla rassegna.

Sfruttare le Google Picasa API per generare una galleria di immagini

Postato da ROb | nella categoria Java, Linux, Sviluppo web | giovedì, 22 aprile 2010

0

Chi non conosce il bellissimo e potentissimo software Picasa?
E’ sempre più facile vederlo installato nei desktop degli utenti come rimpiazzo dell’applicazione di default di visualizzazione immagini. Anche io che uso Linux, nonostante la scelta di software di gestione e visualizzazione immagini sia molto ricca e il fatto che non è un’applicazione nativa Linux ma emulata tramite Wine, ho eletto Picasa come il “mio” software di gestione immagini.

Google Picasa API

Non voglio però dilungarmi molto in merito ai pregi di questo gestore di immagini. L’oggetto di questo post è la possibilità di sfruttare il servizio web ad esso associato (ma anche utilizzabile in modo indipendente) chiamato Picasa Web Albums.

Picasa Web Albums è un servizio web che ci permette di caricare, organizzare i nostri album di foto e di condividerli con chi vogliamo. Migliorato di mese e mese, si è arricchito ultimamente anche della capacità di riconoscere i volti delle persone nelle foto in modo automatico.

Questo servizio Google, come molti altri dell’azienda di Mountain View, espone delle API, cioè delle librerie utilizzabili dagli sviluppatori, che, dopo un’opportuna autenticazione, permettono di leggere e manipolare i dati del servizio stesso.
Nel caso ad esempio delle API di Picasa Web Albums possiamo richiedere la lista dei nostri album oppure ricevere la lista delle immagini contenuto in uno specifico album oppure caricare una foto nell’album e così via.

Oggi voglio parlarvi di una piccola applicazione scritta in Java, che sfrutta l’API del servizio per questo linguaggio, in grado di generare una porzione di codice html partendo da una lista di immagini di uno specifico album caricato in Picasa Web Albums.

Per poter eseguire l’applicazione dovete avere opportunamente scaricato e configurato il pacchetto delle API di Google, impostando correttamente le dipendenze verso i file jar dei servizi che utilizzate.
Per comodità comunque allego in fondo all’articolo l’intero progetto Eclipse zippato.

Il programma deve essere eseguito in due passaggi.
Nel primo passaggio, dopo aver opportunamente modificato l’utente e password, bisogna attendere che il programma stampi a video la lista degli album caricati e i relativi id. Scegliamo a questo punto l’id del nostro album e impostiamolo come valore della variabile albumId.

Rieseguiamo quindi il programma (secondo passaggio) e a questo punto potremmo vedere un output decisamente più ricco che contiene un html generato partendo dai dati e dalle immagini contenuti nell’album specificato.
L’html viene generato utilizzando il motore di templating Velocity a cui è stato passato l’oggetto feed contenente tutti i dati del nostro album. Il file del template è album.vm che si trova all’interno della cartella del progetto di nome templates.
Ovviamente potete modificare a vostro piacimento tale template utilizzando a pieno il modello dei dati messo a disposizione da Google.

Di seguito propongo il codice Java del programma, ovviamente con delle credenziali fasulle:

import java.io.StringWriter;
import java.net.URL;
import java.util.Properties;

import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;

import com.google.gdata.client.photos.PicasawebService;
import com.google.gdata.data.photos.AlbumEntry;
import com.google.gdata.data.photos.AlbumFeed;
import com.google.gdata.data.photos.UserFeed;

public class Main {
	public static void main(String[] args) {
		try {
			String username = "<username>";
			String domain = "@gmail.com";
			String password = "<password>";
			String albumId = "<empy>";

			PicasawebService myService = new PicasawebService(username);
			myService.setUserCredentials(username + domain, password);

			URL feedUrl = new URL("http://picasaweb.google.com/data/feed/api/user/" + username + "?kind=album");

			UserFeed myUserFeed = myService.getFeed(feedUrl, UserFeed.class);
			for (AlbumEntry myAlbum : myUserFeed.getAlbumEntries()) {
			    System.out.println(myAlbum.getTitle().getPlainText() + " - " + myAlbum.getId());
			}

			URL feedAlbumUrl = new URL("http://picasaweb.google.com/data/feed/api/user/" + username + "/albumid/" + albumId);

			AlbumFeed feed = null;
			try {
				feed = myService.getFeed(feedAlbumUrl, AlbumFeed.class);
			}
			catch (com.google.gdata.util.ResourceNotFoundException rnfe) {
				System.out.println("\nalbum non trovato, controlla l'id");
			}

			if (feed != null) {
				Properties velProps = new Properties();
				velProps.load(Main.class.getResourceAsStream("velocity.properties"));
				Velocity.init(velProps);

				VelocityContext context = new VelocityContext();

				context.put("feed", feed);

				Template template = null;

				try {
				   template = Velocity.getTemplate("templates/album.vm");
				}
				catch( Exception e ) {
					e.printStackTrace();
				}

				StringWriter sw = new StringWriter();

				template.merge( context, sw );

				System.out.println();
				System.out.println(sw);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

Questo è invece il codice del template album.vm :

		<h4>$!feed.title.plainText</h4>
		<ul class="gallery clearfix">
#foreach($photo in $feed.getPhotoEntries())
		    <li>
		       <a rel='prettyPhoto[$feed.id]' title="$photo.getDescription().getPlainText()" href='$photo.getMediaContents().get(0).getUrl()' >
		          <img src='$photo.getMediaThumbnails().get(0).getUrl()' width='100' class='thumb' border='0' />
		       </a>
		    </li>
#end
		</ul>

Ecco infine il file compresso contenente il progetto completo in formato Eclipse.

Padre Daniele Moschetti a Macerata

Postato da ROb | nella categoria Varie | mercoledì, 21 aprile 2010

0

Padre Daniele Moschetti, il missionario comboniano che ha vissuto molti anni a Korogocho e che insieme ai ragazzi della Carovana hanno lasciato un ricordo indelebile a Macerata e nei cuori di tutti noi, sarà a Macerata venerdì di questa settimana, 23 Aprile alle 21.15, presso l’Auditorium dell’Istituto Salesiano di Macerata.

Per farvi capire l’importanza del personaggio, dopo due giorni dall’incontro a Macerata, Padre Daniele sarà intervistato a Rai News 24.

In allegato il volantino.

Allungare il tempo delle sessioni in un’applicatione web

Postato da ROb | nella categoria Java, Sviluppo web | giovedì, 15 aprile 2010

0

Per aumentare la durata di una sessione in un’applicazione web Java J2EE è sufficiente inserire una particolare direttiva all’interno del file web.xml dell’applicazione stessa.

Ecco la sintassi:

  ...
  <session-config>
    <session-timeout>120</session-timeout>
  </session-config>
  ...

dove il numero rappresenta i minuti.

Clonazione di schede di memoria, il bit è uguale per tutti!

Postato da ROb | nella categoria Linux, Utilità | mercoledì, 14 aprile 2010

0

Qualche giorno fa mi è capitato di dover clonare una scheda SD di un mio amico per problemi legati alla lettura del navigatore installato nella SD sul suo telefono Nokia (N70).

Clonazione SD, telefoni, Nokia, Navigatore

Se avessi avuto sotto mano Linux avrei usato il fantastico comando dd nel seguente modo (supponendo che la scheda sia il dispositivo /dev/sda):

# creazione dell'immagine (scheda originale)
dd if=/dev/sda of=/var/tmp/sd.img
# ripristino immagine sulla nuova scheda
dd if=/var/tmp/sd.img of=/dev/sda

invece mi trovavo su un computer Windows.
Girovagando qua e là, anche se in modo più complesso rispetto a Linux, ho trovato una soluzione gratuita ma efficace sfruttando gli strumenti HDClone e VolumeID.

HDClone serve per clonare dischi e partizioni. Possiede una versione gratuita ed è disponibile a questo indirizzo: http://www.miray.de/products/sat.hdclone.html

VolumeID invece è uno strumento sviluppato dalla SysInternals, un’azienda recentemente acquisita da Microsoft, e serve per reimpostare l’id di un volume nei sistemi Windows. Anch’esso gratuito lo trovate direttamente nel sito Microsoft.

Dopo aver scompattato l’eseguibile volumeid.exe nella directory C: e aver scompattato HDClone dove volete, ecco la sequenza di passi per la clonazione della scheda SD.

  • Da un prompt di terminale Windows (Start => Esegui => cmd ) attraverso il comando DIR, relativo alla lettera di unità assegnata alla scheda, prendere nota del numero di serie del volume che risulterà nel formato XXXX-XXXX
  • Utilizzando Hdclone.exe procedere alla creazione di un immagine della card da clonare sul proprio hard disk scegliendo in Hdclone come sorgente Drive e come destinazione IMG seguendo opportunamente le istruzioni che accompagnano hdclone
  • Ad immagine effettuata sostituire nel lettore di card la scheda presente con la nuova scheda che può, senza alcun problema, essere anche di capacità maggiore
  • Sempre attraverso Hdclone procedere al trasferimento dell’immagine effettuata sulla nuova card scegliendo come sorgente IMG e come destinazione Drive indicando ad Hdclone, nel momento in cui lo richiede, di utilizzare tutta la nuova card (anche se di maggiore capacità) e di effettuare automaticamente le opportune operazioni post copia necessarie
  • Mettere sul disco C:\ il file VolumeID.exe quindi, sempre dal Prompt dei comandi, cambiare alla nuova card il numero di serie del volume attribuendole il numero annotato della vecchia card con il seguente comando C:\volumeId.exe L: XXXX-XXXX dove L: è la lettera di unità card e XXXX-XXXX è il numero di serie della vecchia card

Ecco la fonte originale per la procedura Windows. Ringrazio gentilmente spazio63.

Resettare la password di amministratore in Windows XP

Postato da ROb | nella categoria Utilità, Varie | giovedì, 8 aprile 2010

0

Vi sarà capitato almeno una volta nella vita di dover reimpostare la password di Windows XP.

resettare password Windows XP

Per sistemi che non usiamo spesso, se non siamo stati accorti nel salvarla da qualche parte, è facile dimenticarla.
Fortunatamente ci viene in aiuto un utility gratuita, a riga di comando, che ci permette di modificarla o reimpostarla riavviando semplicemente il pc e facendo partire un cd avviabile.

Offline NT Password and Registry Editor, questo il nome del software, viene distribuito sia in formato floppy disk che in formato cd avviabile e permette di pulire o modificare la password dell’utente Administrator di un pc Windows XP.

A questo indirizzo trovato direttamente l’iso, di soli 3 Mb, da masterizzare in un cd standard. L’ultima versione disponibile risale al 2 agosto del 2008.

Come accennato in precedenza, l’interfaccia di utilizzo dell’utility è decisamente spartana ma, dopo qualche tentativo, sforzandoci di leggere un pò di inglese, il tutto risulta abbastanza agevole.
Purtroppo non posso presentare gli screenshot del mio ultimo utilizzo (ieri) ma magari, cercando in rete, dovreste riuscire a trovare qualche guida.

Aggiornamento Firefox 3.6.2 e problemi flash

Postato da ROb | nella categoria Linux | lunedì, 29 marzo 2010

4

Questo è il secondo post riguardo l’aggiornamento del mio Firefox.

Firefox, aggiornamento 3.6.2 e problemi Flash

Oltre ai problemi di funzionamento della VMWare remote console plugin, aggiornando il flash player alla versione 10, mi sono imbattuto nel classico problema di playback dei filmati flash all’interno delle pagine.
Il problema, ampiamente conosciuto nelle distribuzioni Linux, è relativo a un mancato link alla libreria flash installata con l’installer flash all’interno della cartella dei plugin di Firefox.

Nel caso la vostra installazione di Firefox sia nella directory /opt/firefox e il vostro flash player 10 all’interno della directory /usr/lib/adobe-flashplugin/ , per agganciare correttamente il plugin in Firefox dovete:

  • chiudere tutte le istanze di Firefox attive
  • creare un link verso la libreria flash con il comando:
    cd /opt/firefox/plugins/
    sudo ln -s /usr/lib/adobe-flashplugin/libflashplayer.so
    
  • aprire di nuovo firefox e provare una pagina con Flash embedded

Spero vi possa aiutare… non lesinate commenti (sia positivi che negativi!)

Aggiornamento Firefox 3.6.2 e problemi VMWare remote console plugin

Postato da ROb | nella categoria Linux | lunedì, 29 marzo 2010

0

Qualche giorno fa, utilizzando il progetto Ubuntuzilla suggerito dall’Istituto Majorana, ho aggiornato il mio Firefox su Ubuntu 8.04 (sì lo so è un pò vecchiotta) alla versione 3.6.2.

VMWare remote console plugin

Con mia grande soddisfazione i miei 2 profili sono stati importati quasi perfettamente e quasi tutte le estensioni sono state aggiornate correttamente.
Con l’occasione ho aggiornato anche la versione del Flash Player alla 10.

Quando ho aperto la console web di VMWare Server 2 mi sono accorto però dell’impossibilità di utilizzare la console, l’errore segnalato è: “Cannot access virtual machine console. The request timed out.“. Ecco l’errore che ho ricevuto dall’interfaccia web.

Errore VMWare remote console plugin Firefox 3.6.2

Girovagando qua e là nei forum mi sono accorto di un problema di compatibilità del plugin con la versione di Firefox 3.6.X ma fortunatamente c’è un’espediente per poter aprire le console senza passare per Firefox. Si tratta in pratica di estrarre l’applicativo dal pacchetto .xpi in cui è contenuto e utilizzarlo in modalità standalone.

Ecco i passi necessari:

  • prima di tutto bisogna entrare nelle impostazioni avanzate di Firefox e abilitare il supporto a SSL versione 2 utilizzate dal server web di VMWare Server (disabilitato di default in Firefox 3.6.2). Per farlo aprite una scheda di Firefox e digitate about:config. Cercate quindi la chiave security.enable_ssl2 e cliccandoci due volte la abilitate (se già non lo fosse). Senza questa impostazione probabilmente non riuscirete neanche a vedere il pannello di login.
  • entrare nella directory: /usr/lib/vmware/webAccess/tomcat/apache-tomcat-6.0.16/webapps/ui/plugin/
  • copiare il file vmware-vmrc-linux-x86.xpi da qualche parte nel vostro PC
  • estrarlo con fileroller
  • creare un link, dove volete, all’eseguibile: plugins/vmware-vmrc
  • a questo punto eseguite il comando linkato in questo modo: vmware-vmrc -h :8333

Dopo aver fornito le corrette credenziali di accesso avrete la possibilità di scegliere la console a cui connettervi.

In attesa di un’aggiornamento del plugin stesso da parte di VMWare questa sembra essere la soluzione più comoda, a meno di non voler fare il downgrade di Firefox alla versione 3.5.