sabato 24 ottobre 2009

Due giorni all'IPW09 (Italian Perl Worlshop 2009)

Quest'anno per la prima volta mi sono regalato una full immersion di 2 giorni all'ipw09.
E' stata una esperienza bella ed appagante e mi ha lasciato con la voglia di scrivere tanto tanto codice perl.
Un'altra cosa che mi reso questa esperienza ancora più appagante è che alcuni relatori che hanno presentato progetti molto interessanti sono anche miei colleghi ed amici.
La manifestazione si è tenuta al Centro Nazionale delle Ricerche una cornice eccellente all'alto livello della manifestazione.
Fare una carrellata dei talk che si sono tenuti sarebbe un lavoro lungo e faticoso quindi per ulteriori informazioni vi rimando su perl.it, non appena disponibili le slide le potrete trovare qui (come bonus trovate anche quelle degli anni scorsi). Alcuni talk  riguardavano aspetti tecnici specialistici, altri erano divulgativi (tra cui un corso completo di perl della durata di 480 minuti - scusate se è poco) ed ancora alcuni erano ironici come il talk sull'Antiquated Perl   riguardante i trucchi rocamboleschi che si possono fare con il perl delle vecchie versioni, una lezione  che si è rivelato un ottima introspezione sul funzionamento a basso livello del perl.
Insomma molti interventi tutti caratterizzati da un elevato livello di competenza, una voglia di divulgare una propria passione ed anche di divertirsi un pochino.
Una ottima iniziativa.

sabato 4 luglio 2009

Git e Gitosis

Ecco come creare un repository git e condividerlo con gitosis su ubuntu 9.04.

Installare git


sudo apt-get install git-core python-setuptools

Installare gitosis

cd /tmp
git clone git://eagain.net/gitosis.git

cd gitosis
python setup.py install

Gitosis è un modo "semplificato" - si fa per dire - per gestire gli accessi al repository git e consiste nel modificare un file di configurazione con una serie di autorizzazioni e di chiavi pubbliche ssh associata ad ogni utente.

Prima di poter utilizzare gitosis va creato un utente ad hoc e configurato come amministratore di gitosis. L'utente che andiamo a creare molto originariamente si chiamerà git.


sudo adduser \ --system \ --shell /bin/sh \ --gecos 'git version control' \ --group \ --disabled-password \ --home /home/git \ git
l'utente appena creato avrà come unico compito di "ospitare" il repository e di far girare gitosis. Quindi i repository saranno almeno due
  • il repository in cui vogliamo mettere i nostri dati da versionare (può essere più di uno)
  • il repository amministrativo di gitosis che si chiama gitosis-admin
a questo punto bisogna fornire l'accesso al repository amministrativo ad un utente del sistema utilizzato per sviluppare (chiamiamolo valerio)
occorre quindi recuperare la chiave pubblica dell'utente valerio da ~/.ssh/id_rsa.pub ma se non è presente va creata con



ssh-keygen -t rsa

e importata nel repository amministrativo gitosis-admin con

sudo -H -u git gitosis-init < ~/.ssh/id_rsa.pub

il quale confermerà con un


Initialized empty Git repository in ./ Initialized empty Git repository in ./
si lo dirà 2 volte.

Bisogna aggiornare alcuni permessi poichè gitosis li imposta in maniera non corretta

sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update

A questo punto il repository amministrativo è pronto e lo si può accedere ovviamente utilizzando git con

git clone git@localhost:gitosis-admin.git


verrà creata una sandbox con il file e la directory


-rw-r--r-- 1 valerio valerio 142 2009-07-04 17:31 gitosis.conf
drwxr-xr-x 2 valerio valerio 80 2009-07-04 17:31 keydir


gitosis.conf contiene la configurazione degli utenti mentre keydir contiene le chiavi pubbliche di tutti gli utenti (compresa già quella di valerio che è stata passata precedentemente con il comando sudo -H -u git gitosis-init < ~/.ssh/id_rsa.pub )

gitosis.conf contiene le seguenti voci

[gitosis]

[group gitosis-admin]
writable = gitosis-admin
members = valerio@ken

il che significa che attualmente il repository gitosis-admin è accedibile da valerio dalla macchina ken utilizzando la chiave pubblica valerio@ken che è in

ls -l keydir/
-rw-r--r-- 1 valerio valerio 393 2009-07-04 17:31 valerio@ken.pub


A questo punto l'installazione è conclusa anche se ovviamente dovrebbero essere aggiunti i repository su cui si vuole versionare il proprio codice. Supponendo di voler creare un repository chiamato personale gitosis.conf assumerà l'aspetto

[gitosis]

[group gitosis-admin]
writable = gitosis-admin
members = valerio@ken

[group team]
writable = personale
members = valerio@ken

dopodichè va fatto il commit ed il push di queste modifiche

git commit -m "new personal repository" -a
git push


a questo punto l'utente valerio@ken è in grado di creare il repository personale con

cd /tmp
mkdir personale
cd personale/
git init
git remote add origin git@localhost:personale.git
echo "il mattino ha l'oro in bocca" > readme.txt
git add readme.txt
git commit -m "primo file"
git push origin master


e il repository personale adesso è accessibile con

git clone git@localhost:personale.git
Utenti multipli

Ovviamente è possibile utilizzare utenti multipli per un singolo repository aggiungendo vari utenti alla configurazione
[group team]
writable = personale
members = vcrini@vcrini-laptop valerio@ken

qui il repository mysite è scrivibile da vcrini e valerio. In keydir va copiata a mano la chiave pubblica vcrini@vcrini-laptop.pub

Volete debuggare?


Aggiungere "loglevel = DEBUG" proprio sotto la voce [gitosis] e fate attenzione agli spazi altrimenti non funziona.

[gitosis]
loglevel = DEBUG

[group gitosis-admin]
writable = gitosis-admin
...

Maggiori informazioni?
C'è un ottimo tutorial su Git qui.

martedì 26 maggio 2009

ubuntu e terminali multipli


Con linux a me torna comodo avere una visualizzazione di questo tipo dei terminali

il problema è che mi tocca fare sempre tutto a mano fino a che non ho scoperto questa riga di comando:

gnome-terminal --geometry=160x30 && gnome-terminal --geometry=80x21+0+820 && gnome-terminal --geometry=73x21-1+820

mettendo questo comando in uno script multi_finestra

#!/bin/sh
gnome-terminal --geometry=160x30 && gnome-terminal --geometry=80x21+0+820 && gnome-terminal --geometry=73x21-1+820

e rendendolo eseguibile con

chmod u+x multi_finestra


adesso, associandole un tasto veloce riesco a fare tutto con una semplice combinazione di tasti


sabato 16 maggio 2009

Pycon 3 - La conferenza italiana di Python a Firenze

Da Venerdì 8 a Domenica 10 Maggio si è tenuta a Firenze la terza conferenza italiana sul linguaggio python.
Un'incontro molto interessante per chi usa il linguaggio Python e per chi (come me) è semplicemente incuriosito dal fermento che viene fatto scaturire da un incontro con persone legate da un'interessa comune come l'informatica.
La conferenza aveva un'ospite di eccezione quest'anno: Guido Van Rossum il papà di Python ovvero colui che lo ideò tanti anni fa che ha tenuto uno talk sulla nuova versione 3 del linguaggio ed uno su Google App.

In particolare ho trovato molto interessante il talk di Martelli su le Astrazioni , l'epopea della conversione del modulo postgrep da python 2 a python 3 di Federico di Gregorio e il corso di software finanziario tenuto da Stefano Taschini.

Una nota a parte per una introduzione all'utilizzo di Erlang che con Python ha ben poco a che fare ma che è stata molto gradita sia per la simpatia del suo relatore che per l'interesse che è stato destato sull'argomento.

Insomma nel complesso una conferenza ben fatta, ben organizzata e ricca di contenuti. La cosa che più mi ha colpito è stata la grande abilità nel rendere appassionante l'incontro e questo è un grande merito trasversale all'argomento trattato.

lunedì 9 febbraio 2009

xml e wsdl in perl

Dato uno schema wsdl e il modulo SOAP::Lite di perl è semplice ottenere una modulo perl personalizzato per effettuare le chiamate semplicemente utilizzando il comando

stubmaker.pl 'file:./schema.wsdl'

in questo modo verrà creato il modulo schema.wsdl che contiene tutte le chiamate previste nello schema

martedì 3 febbraio 2009

Ubuntu e firefox senza audio su youtube

Mamma mia per mesi ho avuto l'impossibilità di sentire l'audio su youtube malgrado l'audio funzionasse correttamente il player di ubuntu.
Il problema si è verificato facendo l'upgrade da ubuntu 8.04 a 8.10 e questa è la soluzione:

killall pulseaudio
sudo apt-get remove pulseaudio
sudo apt-get install esound esound-clients libao2
sudo rm /etc/X11/Xsession.d/70pulseaudio

adesso posso finalmente tornare a sentire "L'uomo che usciva la gente"

mercoledì 28 gennaio 2009

validatore xml sotto linux con vim

Mi avrebbe evitato un'errore qualche giorno fa mentre testavo un parser di xml proprio perchè vim 7 non ha di default un formattatore e validatore di xml ma è molto semplice aggiungerne uno.

Inserendo in vimrc la seguente riga

vmap ,px !xmllint --format -<cr>

basta selezionare in modalità visuale ciò che si vuole verificare e digitare ',px' a questo punto se l'xml è valido viene formattato altrimenti segnala un errore e specifica anche il punto.

Quindi si passa da

<xml version="1.0" encoding="UTF-8" standalone="yes"> <message version="1" type="foo"> <metadata1> bla</metadata1> <metadata2> bla bla</metadata2> </message>

a

<xml version="1.0" encoding="UTF-8" standalone="yes">
<message version="1" type="foo">
<metadata1> bla</metadata1>
<metadata2> bla bla</metadata2>
</message>

ma se c'è un errore (ad esempio manca un '?' iniziale)

<xml version="1.0" encoding="UTF-8" standalone="yes"> <message version="1" type="foo"> <metadata1> bla</metadata1> <metadata2> bla bla</metadata2> </message>

otteniamo

-:1: parser error : attributes construct error
<xml version="1.0" encoding="UTF-8" standalone="yes"> <message version="1" type="" parser="" error="" couldn="" t="" find="" end="" of="" start="" tag="" xml="" line="" 1=""><xml version="1.0" encoding="UTF-8" standalone="yes"> <message version="1" type="" parser="" error="" extra="" content="" at="" end="" of="" the="" document=""><xml version="1.0" encoding="UTF-8" standalone="yes"> <message version="1" type="">

</message></xml></message></xml></message></xml></xml></cr><cr><xml version="1.0" encoding="UTF-8" standalone="yes"><xml version="1.0" encoding="UTF-8" standalone="yes"><message version="1" type="" parser="" error="" couldn="" t="" find="" end="" of="" start="" tag="" xml="" line="" 1=""><xml version="1.0" encoding="UTF-8" standalone="yes"><message version="1" type="" parser="" error="" extra="" content="" at="" end="" of="" the="" document=""><xml version="1.0" encoding="UTF-8" standalone="yes"><message version="1" type="">
</message></xml></me