martedì 30 settembre 2008

MIgrare la posta da kmail 1.9 a kmail 1.10

Con l'avvento del KDE 4.1 è stato reso finalmente disponibile la versione stabile del nuovo kmail, la 1.10. Peccato che migrare la posta e le impostazioni dalle versioni precedenti non è una cosa semplice, e infatti sono stati necessari diversi passaggi tutti fatti per tentativi e non documentati sul sito web del progetto. Si suppone di avere la configurazione della vecchia versione di kmail sotto la directory ~/.kde e di avere la nuova configurazione (quella verso cui migrare) nella directory ~/.kde4. Anzitutto è bene fare un backup della propria posta (~/.kde/share/apps/kmail/mail) come sempre, prima di procedere a qualsiasi migrazione di dati.
Di seguito i passi da effettuare:

  1. migrazione della posta: copiare o spostare la directory ~/.kde/share/apps/kmail/mail nel relativo percorso della nuova installazione ~/.kde4/share/apps/kmail/mail.
  2. migrare le impostazioni: vanno spostati i file ~/.kde/share/config/kmailrc, ~/.kde/share/config/emaildefaults, ~/.kde/share/config/identities.
  3. definire le fonti di trasporto (server in uscita): è necessario definitre il file ~/.kde4/config/mailtransport e copiare al suo interno le sezioni [Transport N] (N = numero di trasporto) originariamente presenti nel vecchio file di configurazione kmailrc.
  4. definire i server di ricezione (account): occorre controllare che il numero delle sezioni [Account N] (N = numero di account) contenga gli account corretti e che ci sia una voce nella sezione [General] una voce accounts con valore pari al massimo numero di account N presente nel file. Si presti attenzione che se il Type=Pop è scritto con 'pop' minuscolo (come nella vecchia versione, kmail si limiterà a cancellare gli account (che gli risultano sconosciuti) dal file di configurazione!
  5. sostituire i vecchi percorsi: cambiare i vecchi percorsi di posta da ~/.kde/share/apps/kmail/mail a ~/.kde4/share/apps/kmail/mail.
E magicamente la posta e le impostazioni compariranno nel nuovo programma. Veramente strano che non sia stata prevista una impostazione relativa alla migrazione dei dati da una versione di programma all'altra.

BlockSite

Mi è capitato di dover fare una installazione di computer ad una fiera, dove solo una parte all'interno di un sito doveva essere visibile. Solitamente quando era necessario bloccare determinati sit usavo il trucco di impostare nel browser web un proxy fittizio e di imporre il non utilizzo del proxy per i domini sbloccati. Ma per rendere accessibile solo la parte di un sito ho dovuto installare una estensione apposita di Mozilla Firefox: BlockSite. Tramite questo strumento è possibile impostare una lista di URL come whitelist o blacklist (nel mio caso whitelist), e quindi stabilire effettivamente quali URL possono essere accessibili e quali bloccati.
Nel mio caso specifico è stato sufficiente impostare nelle preferenze di BlockSite gli URL da sbloccare (whitelist) senza specificare nulla nella blacklist (quindi avendo bloccati tutti i siti), e di rimuovere il warning utente per i siti bloccati (questo per non infastidire i navigatori). Il risultato è che chiunque provi a navigare al di fuori della whitelist non ci riesce, e nessun errore viene visualizzato: semplicemente il browser web non si sposta dalla pagina correntemente caricata (quindi dall'URL in whitelist).

Allenamenti indoor

Lunedì
Tornato dal Cersaie, prima di andare in piscina mi sono fermato al campo per fare qualche tiro, e così ho fatto 40 frecce a 18 mt su bersaglio Las Vegas. Ancora una volta, tenendo la corda con l'anulare ho frecce che impattano a destra e rosate abbastanza strette, ma dopo circa 20 frecce forse per stanchezza sulle dita cominciano a comparire errori a sinistra. Ho anche cercato di tenere le scapole maggiormente aperte in fase di trazione, ma non è affatto semplice poiché una trazione lineare come quella che ho provoca facilmente una compressione della schiena. Questa è sicuramente una cosa sulla quale vale la pena fare qualche esperimento.

Martedì
Ancora 40 frecce a 18 mt di ritorno dal Cersaie. Aprire di più la schiena allontanando le scapole mi riesce difficile, però negli ultimi tiri sono riuscito a rilassare gli antagonisti della spalla destra, e questo mi pare un buon segno. Ancora una volta però dopo circa 20 frecce inizio ad avere errori a sinistra, colpa un po' dell'anulare che non tiene e di un tiro un po' più deciso che mi produce qualche esplosione del braccio davanti. Ho dovuto tirtare con la patella della soma al posto di quella cavalier perché la prima ha la pelle leggermente più dura. e avendo un taglio sull'indice mi riusciva difficile tenere la corda.
Tornato a casa ho fatto qualche trazione per cercare di comprendere meglio come rilassare gli antagonisti, ma mi sento ancora lontano dal risultato. Se non altro inizio a capire, o meglio ad intuire la strada da seguire.

Mercoledì
Solo qualche trazione a casa prima e dopo la piscina, per cercare di esercitarmi sul rilassamento degli antagonisti della spalla desttra. Ho anche fatto delle prove con i flettenti più morbidi al fine di poter meglio controllare il movimento. Quello che ho scoperto è che avendo una trazione fluida, con qualche brandeggio leggermente verso il basso per poi salire al mento o laterale mi aiuta ad arrivare in ancoraggio ben disteso e rilassato. Ovviamente tutte cose da riprovare e ripetere sul campo. La parola chiave comunque è trazione fluida, è inutile fossilizzarsi su una trazione rigida e cercare di rilassare le spalle ad ancoraggio avvenuto.


Giovedì
48 frecce a 18 mt, devo dire che ho ripreso ad andare molto a sinistra, ma mi sto concentrando sulla fluidità del movimento e non riesco a tenere bene con l'anulare. Il gesto inizia ad essere più fluido, ma ancora mi ci vuole molto per memorizzare il movimento. A casa ho poi fatto qualche altra trazione per meglio allenare la memoria muscolare. In sostanza riesco a fare qualche tiro molto sciolto, ben rilassato e quindi stabile. Dalle prove che ho fatto direi che si tratti anche di rilassare la spalla destra al momento della precarica, posizionandola ben allineata da subito in modo da facilatarne l'incastro una volta in ancoraggio. Sembra inoltre che un lieve brandeggio laterale o verticale possa facilitare il posizionamento con la schiena ben aperta. E' come se arrivando diretto in ancoraggio mi fermassi in leggero sotto-allungo (dal punto di vista delle spalle) e sia costretto a gonfiarmi per uscire poi dal clicker.

E il campo?
Sono un po' contrariato per essere stato sospeso (in senso buono) dall'uso del campo di appoggio. Infatti non posso andare al campo per il periodo invernale fino a quando non si sarà fatto un consiglio, e il problema da quello che sembra è comune un po' a tutte le società. Non resta che aspettare....

Martedì
45 frecce a 18 mt al campo della Re Astolfo, ahimé terminate al buio perché ormai non si riesce più a tirare all'aperto uscendo dall'ufficio. Qualche errore a sinistra, ma meglio che nei precedenti allenamenti. Ancora difficoltà invece nello stabilizzare il tiro, è come se ad ogni allenamento mi trovassi a scoprire nuove posizioni che sembrano darmi stabilità. Voglio fare qualche esperimento con le trazioni a casa.

Sabato
63 frecce a 18 mt al campo. Ho ancora dei grossi errori laterali, ma il tiro inizia ad essere più stabile. Cerco nella precarica di rilassare ed estendere bene la spalla della corda, in modo da avere una posizione più solida e ancoraggio, e in effetti qualche risultato lo noto. Per il momento sto facendo delle trazioni a casa, visto che non ho accesso ad un campo vicino. Inoltre, da un esperimento nell'ultima voléé, parte degli errori laterali potrebbe essere dovuto ad un errore di visione, poiché ho notato che tirando con gli occhiali da sole (sole contro) andavo tutto a destra, e senza (con occhio sinistro chiuso) in centro. Devo approfondire questa cosa facendo delle prove e tenendo l'occhio sinistro chiuso.
Mi rincuora che il mio allenatore dica che sto tirando bene, penso sia solo questione di tempo (e di sicurezza) prima che qualche punto inizi a ritornare.

domenica 28 settembre 2008

PL>Y Modena

Venerdì sera ho visitato PL>Y, la fiera del gioco organizzata a Modena. Devo dire che l'organizzazione ha fatto veramente un bel lavoro, lo spazio è ben allestito con video games, wii, bigliardini, tavoli per giochi di società, fumetti, e due piste di macchinine giganti! Insomma, veramente una buona impressione, complimenti agli organizzatori.
Con i miei amici abbiamo anche giocato ad un gioco da tavolo, Thurn und Taxi, basato su corse in diligenza. All'inizio è stata un po' dura capire le regole (spiegate dal personale di PL>Y), ma una volta comprese devo dire che ho trovato il gioco piuttosto affascinante.

venerdì 26 settembre 2008

Programma PGDay 2008

Il programma del PGDay 2008 è on-line: http://www.pgday.org/it/programma. Quest'anno ci saranno 28 fra talk e mini-corsi, italiani e inglesi, per due giorni pieni di PostgreSQL!

mercoledì 24 settembre 2008

Azzerare il contenuto di un disco o di una chiavetta USB

Cancellare il contenuto di un disco portatile o di una chiavetta usb con Linux è un gioco da ragazzi: basta dare un comando simile al seguente (essende sdb1 la partizione corrispondente che deve essere cancellata)

sudo dd if=/dev/zero of=/dev/sdb1

e il dispositivo sarà riempito di zeri. Questo non significa che il dispositivo conterrà degli '0' leggibili, ma che tutto il file system risulterà inestitente, e che quindi anche montare il dispositivo non riuscirà fino a quando non verrà nuovamente formattato il dispositivo stesso.

lunedì 22 settembre 2008

AgorArco chiude?

Stamattina ho effettuato il login al forum AgorArco poiché volevo sottoporre una domanda, ma subito il layout mi ha fatto intuire che ci fosse qualche cosa che non andava: l'indice dei forum era riferito alle sole sezioni di acquisto/vendita, mancavano tutte le sezioni relative ai materiali, alla tecnica di tiro, ecc.
Ho pensato ci fosse una qualche operazione di manutenzione in corso, e ho quindi deciso di attendere.
Più tardi ho riprovato, ma la situazione non era cambiata, così ho guardato fra i messaggi degli amministratori ed ho trovato un messaggio di ieri che dice che il forum è chiuso e che tutti i messaggi al di fuori delle sopra citate sezioni non sono permessi (infatti non ho più nemmeno la lista dei messaggi che ho inviato nelle mie impostazioni). Il messaggio in particolare dice che:

I motivi della chiusura del forum sono privati ed estranei allo sport e al tiro con l'arco e pertanto non possono essere riportati.

Ora la decisione è piuttosto drastica, se si conta anche l'elevato numero di messaggi che il forum gestiva, ma soprattutto non si ha alcuna spiegazione concreta dei motivi dietro a questa chiusura. Se esistono motivi personali perché l'amministrazione del forum non possa continuare allora è bene piuttosto cercare nuovi amministratori e lasciare il servizio fruibile. Altrimenti ritengo che gli amministratori debbano fornire spiegazioni circa il loro atteggiamento.

martedì 16 settembre 2008

Pubblicazione di un progetto Web gestito tramite SVN

SVN è un ottimo software per il versioning dei sorgenti di qualunque tipo. Quando si utilizza però per progetti Web, può essere necessario avere un qualche tipo di deploy automatico. In altre parole si vuole che il ramo dei sorgenti resi pubblici dal server Web sia automaticamente aggiornato ad ogni commit sul repository SVN. La FAQ di SVN presenta già una soluzione al problema, ma io ne ho messa a punto una leggermente differente che non fa uso di programmi compilati e di suid, ma semplicemente di script shell e di sudo.
L'idea è quella di creare un post-commit-hook, ossia un comando da eseguire a seguito di un commit, che effettui l'aggiornamento dell'albero dei sorgenti web. Nello specifico andrà a fare un update dell'albero dei sorgenti web prendendo solo gli ultimi file modificati in fase di commit (ovviamente si ipotizza che il server web sia locale al repository SVN). Il file post-commit della directory hooks del repository SVN deve quindi contenere il seguente codice shell:

REPOSITORY=$1
REVISION=$2

GREP_CMD=`which grep`
SED_CMD=`which sed`
ECHO_CMD=`which echo`
SU_CMD=`which su`
WWW_USER="www-data"
SUDO_CMD=`which sudo`
DEPLOY_CMD="/usr/local/bin/svnWeb.sh"
SVNLOOK_CMD=`which svnlook`
TMP_FILE=/tmp/svn.changed
WEB_REPOSITORY="myProject"

# controllo se il repository include la parte web
$ECHO_CMD $REPOSITORY | $GREP_CMD $WEB_REPOSITORY > /dev/null 2>&1
if [ $? -eq 0 ]
then
# e' il repository web, faccio la pubblicazione automatica

echo "Pubblicazione web automatica " > $TMP_FILE
echo "per il repository $WEB_REPOSITORY " >> $TMP_FILE
echo " (vedere il file post-commit del server svn) " >> $TMP_FILE
echo "\nSeguono i dettagli dell'aggiornamento web\n" >> $TMP_FILE

# mi faccio dire i file che sono cambiati
$SVNLOOK_CMD changed $REPOSITORY | $AWK_CMD '{print $2;}' >> $TMP_FILE

# faccio la pubblicazione diventando un utente apposito tramite
# il comando su, invocato a sua volta tramite sudo. E' importante
# che l'utente con il quale si esegue il comando sudo abbia
# una impostazione di /etc/sudoers che non richiede password, altrimenti
# questo script non verra' eseguito correttamente.
$SUDO_CMD $SU_CMD -c $DEPLOY_CMD $WWW_USER >> $TMP_FILE

fi

Come si può notare, oltre all'inizializzazione di alcune variabili (si presti attenzione poiché post-commit potrebbe eseguire con un PATH modificato o nullo) si effettua un primo controllo sul tipo di commit, affinché si riferisca al repository/progetto di cui si vuole fare il deployment. Dopodiché si scrive un semplice file di log per tenere traccia delle ultime modifiche effettuate (questo può essere utile da inviare come allegato in una e-mail di notifica del commit). Infine, si effettua un cambio utente (tramite su) all'utente cui appartiene la directory del server web e si esegue il comando di deploy (DEPLOY_CMD). Tutto questo viene fatto tramite sudo, per evitare che venga richiesta una password per diventare l'utente del server web. Infatti, se nel file di configurazione di sudo (/etc/sudoers) l'utente che effettua il commit è configurato perché non venga richiesta nessuna password, allora egli può diventare prima superutente (con sudo) e da li un utente qualunque (tramite su) senza che nessuna password sia richiesta.
Il comando di deploy (DEPLOY_CMD) è uno script che effettua l'update tramite SVN e sistema i permessi della directory del server Web:

#!/bin/bash

SRC_DIR=/var/www/myProject
SVN_REPOSITORY=file:///sviluppo/svn/myProject/trunk
SVN_CMD=`which svn`
CHMOD_CMD=`which chmod`
CHOWN_CMD=`which chown`
WWW_USER="www-data"
WWW_GROUP="www-data"



# entro nella directory in cui aggiornare l'albero dei sorgenti
cd $SRC_DIR || exit 1

# effettuo l'aggiornamento dei sorgenti
echo "Aggiornamento dell'albero dei sorgenti..."

$SVN_CMD update $SVN_REPOSITORY `pwd`
echo "fatto <$?>"

# cambio i permessi dei file copiati
$CHOWN_CMD $WWW_USER:$WWWGROUP `pwd` -Rf
$CHMOD_CMD 755 `pwd` -Rf

L'utilizzo di un post-commit hook per la pubblicazione del server Web ha comunque alcuni difetti:
  • occorre più tempo per ogni commit, poiché il server Web deve essere aggiornato;
  • per testare le modifiche occorre fare dei commit, e quindi si va a fare il commit di codice non proprio stabile. A tal fine è bene inserire uno schema di branching o tagging.

lunedì 15 settembre 2008

Orari del treno sballati

Oggi riaprono le scuole, e gli orari del treno Sassuolo-Modena (Gigetto) variano, anche se non ne capisco bene il motivo. Infatti solitamente nel periodo scolastico gli orari del treno venivano aumentati con più corse, al fine di offrire un migliore servizio agli studenti (che comunque non sono gli unici utilizzatori...). Quest'anno invece gli orari sono calati: infatti alcuni treni non fanno più le fermate intermedie, come ad esempio Casinalbo, Quattroponti e Fornaci, e gli orari sono stati spostati indietro di qualche minuto (alla mattina) o di circa 15 minuti (alla sera). Ad esempio il mio treno delle 18.31 (che penso fosse comodo per diversa gente che usciva alle 18 e poteva così raggiungere comodamente la stazione) è ora fissato alle 18.17. Non solo: se si perdeva il treno delle 18.31 si poteva contare su quello delle 19.06, e quindi si doveva attendere circa 30 minuti. Ora invece se si perde il treno delle 18.17 si deve attendere fino alle 19.17, quindi l'attesa diventa di 60 minuti (il doppio). Una cosa analoga succede al mattino: dopo il treno delle 7.55 c'è quello delle 8.55.

Quindi i tempi di attesa fra le corse più gettonate è raddoppiato, alcune corse non fanno nemmeno tutte le fermate, eppure in tutte le fermate si trova un volantino che dice come questo nuovo orario offra maggiori corse. Semplicemente ridicolo!

Ma non è finita qui: evidentemente il sistema informativo di monitor (che chissà quanto è costato) di ogni fermata non indica più gli orari e i treni in arrivo, ma si limita a riportare la frase che "...è in vigore il nuovo orario dei treni".

Ancora una volta mi domando in che direzione la regione voglia spingere questo servizio, che sicuramente non è economico, e a questo punto nemmeno pratico.

giovedì 11 settembre 2008

PuTTY e password sulla linea di comando

PuTTY è un ottimo client SSH/Telnet usato principalmente sulla piattaforma Microsoft Windows. Nel caso di SSH PuTTY permette anche l'autenticazione tramite chiavi, e per quello che ne sapevo questo era l'unico modo sicuro di autenticarsi automaticamente verso un server ssh. E invece no, perché ho scoperto che esiste un'opzione da linea di comando -pw che consente di specificare la password in chiaro (vedere la documentazione di PuTTY)!
E' quindi sufficiente creare un link al programma PuTTY specificando, oltre al nome di login, la password in chiaro, e il collegamento SSH effettuerà in automatico il login.
A mio avviso questa funzionalità, anche se pratica, andrebbe rimossa.

Molto meglio creare un link a pgageant nell'esecuzione automatica di Windows indicando anche il file della chiave da caricare.

mercoledì 10 settembre 2008

VMWare & Ubuntu 8.04

Installare VMWare su una macchina Ubuntu 8.04 non è sempre facile, specialmente se la macchina aveva già installato una versione precedente del pacchetto vmware-server. Il problema è che il pacchetto di Ubuntu non è stato ancora aggiornato alla nuova versione del kernel, e quindi l'unica soluzione è di scaricare il binario da VMWare stessa. Ma qui sorge un altro problema: l'installazione tramite lo script vmware-install.pl non inizia nemmeno e da un errore relativo all'impossibilità di eseguire vmware-uninstall. E rimuovere i pacchetti non è sufficiente, occorre proprio cancellare manualmente le directory .vmware che si trovano nelle home degli utenti, oltre a /etc/vmware affinché lo script di installazione riprenda il suo lavoro.
Dopodiché basta seguire le guide Ubuntu per completare l'opera.

lunedì 8 settembre 2008

goto

Praticamente nessun corso di programmazione incentiva l'uso dell'istruzione goto, poiché essa può generare salti di codice che rendono difficile la lettura e, soprattutto, la manutenzione del codice sorgente.
Che io ricordi, nei corsi universitari si tendeva addirittura a penalizzare gli studenti che facessero uso del goto.
Ora, siccome penso che un ottimo esempio di codice C sia rappresentato dal kernel di Linux, ho fatto il seguente semplice test sull'albero dei sorgenti 2.6.24:

find . -name *.c -type f -print0 | xargs -0 -r grep -E "goto (.)*;" | wc -l

e come risultato ho ottenuto 49628!
Ciò significa che nel kernel di Linux ci sono 49628 istruzioni goto. Che sia forse il caso di rivedere l'utilità di questa istruzione e di insegnare agli studenti ad utilizzare quando necessario?

giovedì 4 settembre 2008

Wait/Notify vs Join

Quando si lavora con programmi multi-threaded ci si potrebbe chiedere se sia meglio sincronizzare i processi mediante una serie di wait()/notify() oppure invocazioni del metodo join(). Anzitutto occorre chiarire la semantica dei metodi:
  • wait()/notify() sospendono e risvegliano un processo sul monitor associato all'oggetto sul quale viene richiamto il metodo;
  • join() sospende il processo corrente fino a quando il Thread sul quale il metodo è stato chiamato non ha terminato la sua esecuzione (ossia è usito da run()).
Dalla semplice descrizione di cui sopra se ne deduce che il metodo join() è molto utile quando si ha un thread "padre" che deve attendere la fine dell'esecuzione di tutti i suoi figli, come pure se si hanno processi che devono continuare la propria esecuzione solo dopo che altri processi hanno terminato il loro lavoro. Il meccanismo wait()/notify() risulta invece più flessibile, poiché può sincronizzare processi che non stanno terminando, e quindi che potrebbero riprendere il loro lavoro. Quello che però molto spesso inganna è che il metodo join() è equivalente ad una buona sincronizzazione con wait()/notify(), e quindi non esiste nessuna potenziale differenza di performance nell'utilizzo di un metodo o dell'altro. Infatti, spulciando il codice sorgente di java.lang.Thread si scopre che il metodo notify() viene implementato con una "semplice" wait(), e che di conseguenza quando il thread termina provvede a risvegliare i processi sospesi sul suo monitor.

 public final synchronized void join(long millis)
throws InterruptedException {
long base = System.currentTimeMillis();
long now = 0;

if (millis < 0) {
throw new IllegalArgumentException("timeout value is negative");
}

if (millis == 0) {
while (isAlive()) {
wait(0);
}
} else {
while (isAlive()) {
long delay = millis - now;
if (delay <= 0) {
break;
}
wait(delay);
now = System.currentTimeMillis() - base;
}
}
}

Installazione pcl6

Il pacchetto GhostPDL contiene un programma molto utile: pcl6. Questo comando funziona da interprete per file PCL, ossia file che contengono comandi nel linguaggio delle stampanti HP. Tramite questo comando è possibile convertire file pcl in file pdf/postscript. La sua installazione però non è sempre semplice, poiché il pacchetto non viene distribuito sotto forma binaria e deve quindi essere compilato da zero.
Nel mio caso si trattava di installare pcl6 su un sistema Ubuntu 8.04. Una volta scaricato il pacchetto, e installati gli strumenti e le librerie per la compilazione, ho provveduto alla classica compilazione tramite make, che è terminata senza errori. Al seguito di make install mi sono ritrovato il comando pcl6 fra gli eseguibili, e l'ho messo subito alla prova. Ahimé il comando non funzionava lamentandosi di un errore nell'interprete e uscendo con codice -1. Svariate ricerche su Internet non mi hanno fornito la soluzione, fino a quando ho capito che il funzionamento di pcl6 dipendeva dalla presenza nel sistema dei font URW. E' stato quindi necessario ricompilare il pacchetto avendo scaricato anche i fonts, e in particolare i passi sono stati i seguenti:
  1. scompattare il pacchetto ghostpdl;
  2. scompattare il pacchetto dei fonti e copiare la directory ottenuta dentro a quella in cui si è scompattato ghostpdl, avendo cura di rinominare tale directory togliendo i numeri di versione;
  3. lanciare dalla directory di ghostpdl il comando make fonts e verificare che tutto proceda bene. Alla fine i fonts verranno installati nella cartella /windows/fonts;
  4. lanciare il comando make product;
  5. installare il pacchetto compilato con make install.
A questo punto il comando pcl6 ha iniziato a funzionare regolarmente nel sistema.

Kopete & OpenFire login: failed with unknown reason

A few times happened that I was unable to log-in my OpenFire server with a Kopete client. The error message reported by Kopete was useles at all: Login failed with unknow reason.
Even starting Kopete from the command line, and observing the messages reported didn't help me at all, but I was sure that the account was working, since I was able to log-in with another Jabber client (e.g. PSI).
At last I found an hint in the OpenFire server logs, in particular in the Warn section of the logs: the Kopete client was sending to the server a wrong/bad server name, and thus the server was refusing the connection. For example, if the server is called myserver.mydomain.com and the Kopete client is configured to connect to myserver, it will not work. It does not matter if you manually specify the server ip address, either overriding the name of the server in the Jabber ID or placing it directly in such ID, the server will refuse the connection. In my case, for instance, I was trying to log-in with the Jabber ID:
luca.ferrari@myserver
and my computer could resolv myserver (i.e., it is not a DNS problem). Once I substituted the Jabber ID with the following:
luca.ferrari@myserver.mydomain.com
I was able again to connect to the server. In conclusion, Kopete requires you to specify the same server string that you put in the OpenFire server configuration, or the server will refuse the client to connect to the server.

Openfire & OpenLDAP

Oggi mi è capitato di installare una nuova versione, la 3.6, di OpenFire, il server Jabber di Ignite Realtime. L'installazione è andata liscia come l'olio, come sempre per l'installazione di OpenFire. Arrivato al momento della configurazione, ho provveduto a configurare il backend OpenLdap che utilizzo per memorizzare gli utenti e i gruppi. E qui sono cominciati i problemi. Nonostante la configurazione fosse la stessa della precedente installazione di OpenFire, questa volta solo gli utenti erano visibili, mentre i gruppi erano totalmente invisibili.
Guardando i log di OpenFire mi sono accorto di diversi errori relativi proprio alla selezione e caricamento dei gruppi da OpenLDAP: diversi gruppi venivano specificati come "doppi". Spulciando il codice sorgente della classe relativa al caricamento dei gruppi, org.jivesoftware.openfire.ldap. LdapGroupProvider, ho trovato che OpenFire non gestisce il caso di omonimia fra utenti e gruppi, e quindi non tollera che nel sistema vi sia uno o più utenti che hanno il nome di uno o più gruppi. Questo mi ha riportato alla mente che già in passato avevo avuto un simile problema: OpenFire nasconde i gruppi di utenti che hanno una qualche omonimia con degli utenti. Così leggendo i log ho cancellato tutti gli utenti che avevano lo stesso nome di un gruppo, ho riavviato OpenFire così da forzare un nuovo caricamento, ma ancora nulla! Nessun gruppo era visibile, e questa volta i log non riportavano nulla di utile (e nessun errore). Il fatto ancora più strano era che questa volta i gruppi comparivano correttamente nella console amministrativa di OpenFire, e quindi questa volta il server stava caricando correttamente i gruppi, ma non li stava esportando bene. Ho iniziato così a controllare alcuni gruppi a caso, per verificare che fossero esportati (shared) con tutti gli utenti, e ho quindi provveduto a renderli nascosti (un-shared) e nuovamente condivisi (shared). Nulla!
Infine, applicando lo stesso procedimento al gruppo al quale appartenevano gli utenti amministratori (fra i quali io), che era anche uno dei pochi con utenti on-line (ma non so se queste siano solo coincidenze) i gruppi sono magicamente ricomparsi nei roster dei client.

mercoledì 3 settembre 2008

Inserire le password in automatico in smbpasswd

E' molto utile poter inserire le password di utenti in modo automatico, così da poter processare un foglio di calcolo o un file CSV in modo batch. Mentre passwd accetta la password direttamente come parametro, il comando smbpasswd no, ed è quindi necessario usare una concatenazione di comandi per fornire a smbpasswd la password da STDIN, come si farebbe in modo interattivo.
Il seguente script processa un file CSV che si suppone abbia le colonne corrispondenti a username e password:

#! /bin/bash

cat $1 | while read ;
do
echo "Processo l'utente $REPLY"
echo $REPLY | awk 'BEGIN {FS=";"}{print "smbpasswd -a -s "$1"\n"$2"\n"$2"\n"}' | /bin/bash

done

L'idea dello script è abbastanza semplice: si legge il file passato come primo argomento, e la relativa linea viene messa automaticamente nella variabile REPLY dal comando read. Successivamente si usa awk per splittare la linea nei campi separati da ; (cambiando il separatore di campo) e infine si passano i valori a smbpasswd facendoli seguire da un'andata a capo che simula la pressione del tasto INVIO da parte dell'utente.

lunedì 1 settembre 2008

A scuola con gli amici


Da diverso tempo ho notato dei cartelli strani vicino alla scuola elementare Carbonieri che c'è vicino a casa mia. Ebbene i cartelli, che recano la scritta "Vado a scuola con gli amici" e una freccia che indica una direzione, tracciano un percorso verso la scuola stessa e dovrebbero fungere da mappa per i bambini che, in gruppo, si ritrovano e si recano a scuola.
Ho indagato un po' e ho scoperto la pagina ufficiale del progetto; è da non credersi come questa cavolata sia nata da questionari consegnati a 5200 famiglie, come il progetto risalga addirittura al 2001 e sia stato attuato solo ora. Mi domando quanto è costato tutto questo e se installare 1-2 punti/cartelli per scuola possa portare beneficio ai bambini. Infatti, poiché i cartelli sono solo 1-2 per scuola, la distanza coperta è poca, troppo poca perché i bambini possano:
  • socializzare attivamente;
  • sviluppare il senso dell'orientamento;
  • diventare autonomi.
Da non sottovalutare poi che, essendo la distanza piuttosto ridotta, si tratta in realtà dell'ennesima banalità verso bambini che continuano a crescere dipendenti da input del mondo esterno e non dall'esperienza che acquisiscono giorno per giorno.
Non era meglio finanziare un progetto di vigilanza, o dei parchi giochi, o trasporti (scuolabus) più efficienti e assistiti?

I trasporti a Modena costano sempre di più

Dal 1 Settembre 2008 il trasporto delle biciclette sul treno Gigetto che collega Modena (e provincia) a Sassuolo non è più gratuito: ogni bicicletta caricata costa all'utente 3,5 euro a viaggio oltre al biglietto ordinario dell'utente stesso.
Considerando che, al prezzo più alto di una corsa d'abbonamento Modena-Sassuolo il costo del biglietto è di 2,16 euro, non vedo per quale motivo il trasporto di una bicicletta costi una maggiorazione di oltre il 150%! Possibile che invece che promuovere il trasporto pulito e l'utilizzo dei mezzi pubblici, Modena non riesca a pensare ad altro che a guadagnare sugli utenti? Si confronti il costo di un viaggio andata e ritorno in treno (2,16 + 2,16 + 3,5 + 3,5 =~ 11 euro) con il costo, decisamente più basso, dello stesso viaggio in auto...