jump to navigation

GrammyClient 0.1 6 dicembre 2010

Posted by fripp in C++, GNU/Linux, Informatica, Mac OS X, Musica, Programmazione, Python, Scripting, Unix, Windows.
Tags: , , , , , , , , , , , ,
3 comments

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 21 agosto 2009

Posted by fripp in Browser, Chrome, Chromium, Informatica, Mac OS X, Programmazione, Python, Scripting, Sistemi Operativi, Unix.
Tags: , , , , , , , , ,
6 comments

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
(altro…)

Le piccole soddisfazioni della vita 4 gennaio 2009

Posted by fripp in About me, Bash, cazzate, Debian, Gnome, GNU/Linux, Informatica, Scripting, Sistemi Operativi, Ubuntu, Unix.
Tags: , , , , , , ,
add a comment

#!/bin/sh
var=echo -n $(dpkg -l|grep 'xserver-xorg-video'|awk '{print $2}')
apt-get remove --purge $(for i in $var; do tmp=$(echo $i|grep 'intel'); if [[ -z "$tmp" ]]; then echo $i; fi; done)

VirtualBox(R) Images: statistiche annuali 1 gennaio 2009

Posted by fripp in About me, Amici, Debian, Gnome, GNU/Linux, Informatica, KDE, OpenSolaris, Programmazione, Python, Sistemi Operativi, Solaris, Ubuntu, VirtualBox Images.
Tags: , , , , , , , , , , , , ,
2 comments

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

VirtualBox® Images: che successo! 1 novembre 2008

Posted by fripp in About me, GNU/Linux, Informatica, OpenSolaris, Sistemi Operativi, Unix, VirtualBox Images.
Tags: , , , , , , , , , , ,
7 comments

Arrivato alla fine di ogni mese mi piace guardare le statistiche del progetto VirtualBox® Images, che porto avanti da qualche mese insieme all’amico Emanuele.

Il numero di visite al sito del progetto è aumentato in maniera considerevole rispetto agli inizi, come si evince da questo grafico

Nel mese di ottobre abbiamo ricevuto ben 26141 visite, 5300 in più rispetto al mese di settembre. Un successo davvero notevole, che va ben oltre le nostre aspettative.

Passiamo ad un altro dato interessante e forse più concreto: il numero di download effettuati e il numero di TB serviti fino ad oggi.

Ecco un altro grafico

Dal grafico possiamo vedere come nel solo mese di ottobre siano stati fatti circa 5000 download di immagini dal nostro spazio su Sourceforge.net, per un totale di circa 1.6 TB di dati! Dalla creazione del progetto sono stati scaricati circa 7.4 TB di immagini da Sourceforge.net, per un totale di 24,244 download. Davvero notevole, se si considera che il progetto viene mandato avanti da studenti universitari con poco tempo libero e squattrinati!

Il numero delle distribuzioni di GNU/Linux che attualmente sono disponibili è pari 18 e c’è la volontà di aumentarne il numero e di creare immagini adatte a scopi più specifici:finora abbiamo soltanto fornito immagini general purpose, configurate in modo da funzionare, ma senza alcuna caratteristica in più. Sarebbe interessante creare immagini più specializzate, orientate per esempio allo sviluppo software o allo sviluppo per il web.

Abbiamo aperto il nostro progetto anche alle distribuzioni di OpenSolaris, come la Nexenta o come il progetto Indiana della Sun Microsystems.

Speriamo di migliorare ulteriormente i risultati per il futuro!

Performance di alcuni linguaggi di programmazione 14 luglio 2008

Posted by fripp in About me, Algoritmi, C, GNU/Linux, Informatica, Java, Mac OS X, Matematica, Programmazione, Python, Ruby, Sistemi Operativi, Unix.
Tags: , , , , , , , , , , , ,
add a comment

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:
(altro…)

registerimage 1.0.3 10 luglio 2008

Posted by fripp in About me, Debian, GNU/Linux, Informatica, Mac OS X, Programmazione, Python, Sistemi Operativi, Ubuntu, Unix, VirtualBox Images, Windows.
Tags: , , , , , , , , , ,
add a comment

Ho completamente riscritto in Python registerimage, la mia applicazioncina per registrare le immagini virtuali preconfezionate del progetto VirtualBox Images.

Ho deciso di usare Python per vari motivi:

  • per imparare un nuovo linguaggio;
  • per aumentare la portabilità;
  • per realizzare un’applicazione self-contained;

Questa nuova versione di registerimage non usa alcuna libreria esterna, ma solo moduli nativi della Python Standard Library; non uso più la libxml2 per fare il parsing dei file .xml, ma uso il modulo built-in xml.dom.minidom.

Ho semplificato pure l’interfaccia del programma; questa nuova versione prende sempre due argomenti in input dalla riga di comando:

  1. il path del file .xml di configurazione della macchina virtuale scaricata dal nostro progetto;
  2. il path del file .vdi della macchina virtuale;

L’utente non avrà più la necessità di spostare a mano i file .xml e .vid: ci pensa il mio programma a farlo.

Per usare la nuova versione di registerimage avrete bisongno di un interprete Python (versione >= 2.5); potete scaricare quello per Windows cliccando qui. Nei sistemi GNU/Linux e Mac OS X spesso Python è già preinstallato.

Prima di lasciarvi, devo fare un altro piccolo appunto per gli utenti Window: per usare l’interprete Python dalla riga di comando occorre che modifichiate la variabile d’ambiente PATH in modo che contenga il path dove avete installato l’interprete. A chi non sapesse come modificare tale variabile, consiglio di leggere questa guida.
Nell’immagine seguente trovate uno screenshot di come dovreste settare la variabile PATH

Ecco uno screenshot che mostra come ho usato registerimage per registrare l’immagine del sistema MINIX 3.1.2

Potete scaricare lo script cliccando qui.

Come ordinare e “ripulire” una wordlist gigante 22 giugno 2008

Posted by fripp in GNU/Linux, Informatica, Mac OS X, Ordinamento, Programmazione, Python, Scripting, Sistemi Operativi, Unix.
Tags: , , , , , , , , , ,
3 comments

In questi giorni ho contribuito ad aumentare la temperatura della mia stanza facendo lavorare come un matto il mio povero computer.

Mi sono ritrovato con una wordlist da 700MB con più di 75 milioni di parole; mi sono accorto che era piena di ripetizioni: la sola lettera “a” compariva 59 volte!

Mi sono ingegnato per risolvere il problema.

Occorreva innanzitutto ordinare la wordlist.

Per fare questo ho pensato di usare il comando sort dei sistemi Unix. Purtroppo il file gigante è codificato in unicode e sort si incazza un poco.

Per risolvere il problema ho reimpostato la variabile LC_ALL in questo modo:

export LC_ALL=C; sort wordlist.txt > sortedwordlist.txt

Dopo un poco di elaborazione, mi sono ritrovato con un bel file ordinato.

Occorreva eliminare le ripetizioni. Per fare questo ho implementato un piccolo script Python.
Ecco il codice:

#!/usr/bin/python

from __future__ import with_statement
import sys

with open(sys.argv[1],'w' ) as fileoutput:
	with open(sys.argv[2],'r' ) as fileinput:

		oldline=''

		for line in fileinput:

			if line!=oldline:
				fileoutput.write(line)

			oldline=line

Il primo argomento dello script è il file di output, il secondo è il file di input.

Dopo un poco di elaborazione, mi sono ritrovato una bella wordlist di 441 MB, 260MB in meno di quella di partenza; nella wordlist iniziale c’erano circa 35 milioni di ripetizioni!

Mandare email a più persone usando AppleScript 9 giugno 2008

Posted by fripp in AppleScript, Informatica, Mac OS X, Programmazione, Sistemi Operativi.
Tags: , , ,
4 comments

Mi capita spesso di dover mandare la stessa email a tutte le persone del gruppo LiberaMente, di cui faccio parte.

Per automatizzare la cosa, ho creato un piccolo script AppleScript.

Ecco il sorgente:


set date_dialog to display dialog "Inserisci l'oggetto" default answer ""
set the_subject to text returned of date_dialog

tell application "Address Book"
    set name_list to every person of group "Liberamente"

    set email_value_list to {}
    
    repeat with p in name_list

        set end of email_value_list to value of every email of p

    end repeat

end tell

tell application "Mail"
    activate

    set new_message to make new outgoing message with properties {subject:the_subject, visible:true}

    tell new_message
        repeat with i from 1 to (count email_value_list)

            repeat with j from 1 to (count item i of email_value_list)
                make new to recipient with properties {address:item j of item i of email_value_list}
            end repeat

        end repeat

    end tell

end tell

Vediamo in breve come funziona.

Il primi due righi di codice
set date_dialog to display dialog "Inserisci l'oggetto" default answer ""
set the_subject to text returned of date_dialog

fanno comparire una finestra di dialogo che permette all’utente di inserire l’oggetto della mail.

Il blocco di codice

tell application "Address Book"
	set name_list to every person of group "Liberamente"
	
	set email_value_list to {}
	
	repeat with p in name_list
		
		set end of email_value_list to value of every email of p
		
	end repeat
	
	
	
end tell

estrae dalla Rubrica Indirizzi tutti i membri del gruppo “Liberamente” e li memorizza nella variabile name_list.
Il successivo ciclo repeat estrae le email di tutti i membri del gruppo e li aggiunge alla lista email_value_list.

Il successivo blocco tell dice a Mail di creare un nuovo messaggio di posta avente come oggetto quello inserito dall’utente:
set new_message to make new outgoing message with properties {subject:the_subject, visible:true}.

Il successivo blocco tell serve per inizializzare la lista dei destinatari con tutte le email contenute in email_value_list.

Dive Into Python 4 giugno 2008

Posted by fripp in GNU/Linux, Informatica, Mac OS X, Programmazione, Python, Scripting, Sistemi Operativi, Unix, VirtualBox Images.
Tags: , , , , , ,
add a comment

In questi giorni mi sono “immerso” nello studio del Python, un interessante linguaggio di scripting che mi ero promesso di imparare data la sua crescente diffusione nel mondo del software open (e non).

La rete mi ha aiutato tantissimo: su Internet trovate tonnellate di documentazione, a partire dal sito ufficiale del linguaggio.

Come prima prova con Python, ho provato ad implementare registerimage-1.0.2, il software che ho scritto per automatizzare la registrazione delle immagini virtuali del progetto VirtualBox Images con il software VirtualBox della SUN.

La cosa che colpisce del Python è la semplicità enorme di codificazione; abituato a certe “astrusità” del C, programmare in Python è molto semplice e scorrevole.

Ecco un piccolo confronto tra l’implementazione in C di una funzione di registerimage-1.0.2 e quella in Python.

La funzione in questione effettua un parsing del file di configurazione della macchina virtuale che si vuole registrare per ottenere i parametri salienti della macchina virtuale stessa.

Versione C:
(altro…)