GrammyClient 0.1.1: bugfix


Ho corretto un piccolo baco di GrammyClient. Adesso la gestione della finestra di download delle tracce MP3 avviene in maniera corretta. Potete scaricare l’ultima versione del programma da questo link se usate Python 2.7 o da questo link se usate Python 2.6. Potete scaricare Python 2.6.x o Python 2.7.x da questo link.

Annunci

GrammyClient 0.1


Alla fine è nato! Dopo un bel poco di settimane di sviluppo (a causa dei miei impiegni universitari) vede finalmente la luce GrammyClient 0.1, un semplicissimo client che permette di scaricare comodamente sul proprio desktop le canzoni presenti nell’enorme archivio di grammy.ru. L’applicazione è stata totalmente scritta usando la libreria PyQt4 e il parser HTML/XML BeautifulSoup, senza il quale sarebbe stato impossibile proseguire nello sviluppo.

Potete scaricare il file binario per Windows XP/Vista/7 da questa pagina. Per usare l’applicazione è necessario scaricare e installare Python versione 2.6 o 2.7 (scaricabili qui).

GrammyClient è dotato di una semplicissima interfaccia grafica, spero abbastanza intuitiva da essere capita e usata al primo (o secondo) colpo. Di seguito riporto uno screenshot:

Come potete vedere, l’interfaccia è essenziale, divisa in 3 colonne. Nella colonna più a sinistra abbiamo un campo di ricerca, in cui inserire l’artista da cercare. Non occorre che inseriate il nome completo, basta anche una porzione; il motore di ricerca del sito ricercherà tutte quelle voci che contengono la stringa da voi inserita.

Al di sotto del campo di ricerca compariranno i risultati della ricerca: una tabella con i nomi degli artisti e il numero di tracce audio che potete scaricare. Facendo doppio click su una riga (o usando il menu contestuale) potrete visualizzare nella colonna centrale gli album associati all’artista. Facendo nuovamente doppio click sul titolo di un album potrete vedere sulla colonna più a destra l’elenco delle canzoni contenute nell’album.

Per scaricare una canzone basta fare doppio click sul suo titolo. Comparirà una finestra di dialogo che vi permetterà di scegliere dove salvare il file.

In ogni istante solo 4 download possono avvenire contemporaneamente. Se aggiungete più di 4 download, quelli in eccesso verranno messi in coda in attesa del completamento di uno dei primi 4. Questo limite è imposto dai server di grammy.ru per limitare i download simultanei.

L’applicazione è naturalmente in uno stato embrionale, ma funziona dignitosamente. Non esitate a contattarmi per qualsiasi malfunzionamento. Coerentemente con i miei impegni accademici cercherò di correggere eventuali bachi.

Chromium updater


Per passatempo ho scritto in questi giorni un piccolissimo script python che controlla se esiste una nuova versione per il browser Chromium per Mac OS X; in tal caso scarica il file .zip da http://build.chromium.org/buildbot/snapshots/chromium-rel-mac, lo scompatta e salva l’applicazione Chromium.app sul Desktop, in modo che successivamente l’utente possa copiarla dove meglio crede.

Potete scaricare lo script cliccando qui.

Ecco il codice
Continua a leggere “Chromium updater”

VirtualBox(R) Images: statistiche annuali


Dopo un anno di esistenza del progetto VirtualBox(R) Images, fondato da Emanuele Cipolla e portato avanti anche da me, mi piace tirare le somme di questa interessante esperienza.

Il progetto nacque nel gennaio del 2008 e dopo un anno ha raggiunto dei livelli di successo davvero inaspettati, forse perchè siamo stati i primi ad offire un servizio del genere per la piattaforma di virtualizzazione VirtualBox(R) o forse perchè abbiamo fatto un buon lavoro (o forse abbiamo avuto solo culo 😀 ).

All’inizio il progetto forniva immagini di poche distro di Linux (Debian, Slackware, OpenSUSE); oggi le distribuzioni di Linux son ben 23, dalla piccola Damn Small Linux alla distribuzione server-oriented CentOS. Oltre a distribuzioni di Linux il progetto fornisce immagini di sistemi basati su OpenSolaris (Nexenta, Milax, Indiana) e immagini di sistemi “non convenzionali”, come Haiku, AROS, ReractOS.

Vediamo un poco di numeri. Questo grafico mostra il numero di visite al sito del nostro progetto a partire dal gennaio 2008

Statistiche del 2008
Statistiche del 2008

Dalle 1805 visite di gennaio 2008 siamo passati alle 43315 visite di dicembre 2008; le visite sono quasi raddoppiate rispetto al mese di ottobre.

Passiamo adesso al grafico che mostra il numero di download e la quantità di dati scaricata.

detail-graph2008

Il picco è stato raggiunto nel mese di novembre con ben 8035 download, per un totale di 2.6 TB! Come è possibile vedere dal grafico, per tutto l’anno il numero di download mensili ha subito un incremento davvero notevole. In totale, sono stati effettuati 39487 download, per un totale di 12.6 TB di immagini.

Speriamo di continuare a mantenere questi notevoli risultati anche nel 2009!

Buon anno

Performance di alcuni linguaggi di programmazione


Non avendo nulla di meglio da fare, mi son messo a valutare le performance di esecuzione dei linguaggi che conosco nella risoluzione del “Problema di Flavio Giuseppe”, la cui soluzione vi permetterà di salvarvi nel caso abbiate deciso all’ultimo minuto di salvarvi da un suicidio di massa (leggete prima in cosa consiste il problema per capire la battutaccia 🙂 ).

Ho testato le prestazioni di C, Java, Python, Ruby, C# usando per tutti le stesse condizioni:

  • 100000 iterazioni
  • risoluzione, ad ogni iterazione, del problema che dovette affrontare Flavio Giuseppe in persona: 40 partecipanti al suicidio e determinazione del prossimo suicida contando a 3 a 3 a giro

I test sono stati fatti con questa configurazione:

OS: Mac OS 10.5.4

CPU: Intel(R) Core(TM)2 CPU T7600 @ 2.33GHz

RAM :2 GB

Il risultato del test è dato dal tempo medio (su 10 test )per ogni iterazione espresso in microsecondi.

Ecco la tabella dei risultati.

Linguaggio Versione Note Tempo medio per iterazione (microsecondi)
Ansi C Compilatore: i686-apple-darwin9-gcc-4.0.1 (GCC) 4.0.1 (Apple Inc. build 5465) Compilazione con flag -O3 0.235951
Ansi C++ Compilatore: i686-apple-darwin9-g++-4.0.1 (GCC) 4.0.1 (Apple Inc. build 5465) Compilazione con flag -O3
Uso di funzioni inline
0.205846
C# Mono Framework – 1.9.1_3 0.846871
Java java version “1.5.0_13” 1.898368
java version “1.6.0_5” 0.665434
Python Python 2.5.1 (r251:54863, Jan 17 2008, 19:35:17) 24.0439097881
Uso del compilatore JIT Psyco 1.6 5.55800628662
Ruby ruby 1.8.6 (2008-03-03 patchlevel 114) 55.700048

Per analizzare i risultati occorre precisare che mi sono rifatto allo standard C89 per il C (che non prevede le funzioni inline); ecco perchè il C++ con le funzioni inline risulta più performante.

Se provate a compilare i sorgenti C che seguono mettendo la parola chiave inline nell’implementazione della funzione e compilando usando il flag -std=c99 vedrete che le prestazioni di C e C++ saranno uguali. Nel C++ ciò che fa perder prestazioni è il binding tardivo: polimorfismo, template ecc.

Con notevole sorpresa, ho constatato come la JVM non sfigura affato; addirittura con Java 6 i tempi medi sono più che dimezzati.

I fanalini di coda (c’era da aspettarselo) sono Python e Ruby, col primo in vantaggio sul secondo; per l’occasione ho sperimentato in Python l’uso di Psyco, un compilatore JIT, e devo dire che i risultati si vedono: l’esecuzione del codice col modulo Psyco attivo è più veloce di circa l’80% rispetto a quella senza Psyco.

L’algoritmo che ho usato per risolvere il problema è trattato in questa pubblicazione; tale algoritmo ha una complessità pari a O(m + \log_{\frac{m}{m-1}} \left ( \frac{n}{m} \right ) ), dove n è il numero di persone nel gruppo e m è il numero usato per la conta.

Di seguito troverete il codice usato per fare il test nei vari linguaggi.

Codice C:
Continua a leggere “Performance di alcuni linguaggi di programmazione”