jeudi 20 novembre 2008

Flex: using multiple remoting-config.xml file with BlaseDS

Recently, I worked on a Java / Flex project using BlaseDS and I was quite surprised to discover It was not easy to split remote object definitions on separate configuration files. Every remoting object has to be listed in a single configuration file located in "/WEB-INF/flex/remoting-config.xml".

This is really not convenient in cases where remote objects come from different dev teams or third party librairies. I would expect BlaseDS to discover at runtime its remoting configuration.

So I wrote a simple BlaseDS service that discover any "META-INF/remoting-confg.xml" file in the classpath and register any declared remote object with the remoting service. I basically created a new Flex service that inherits from 'flex.messaging.services.AbstractBootstrapService'.

The simplified procedure is :
  1. look up remoting service from broker.
  2. list any existing 'META-INF/remoting-config.xml' file.
  3. parse config files and create destinations (using 'flex.messaging.services.Service.createDestination(String)').
  4. register created destination with flex remoting service (using 'flex.messaging.services.Service.addDestination(String)').
Unfortunately I had to write my own SAXHandler to parse configuration file. I would have preffered to reuse code but I was unable to find a simple way to parse only a subset of configuration files.

You can download implementation.

jeudi 6 novembre 2008

Graver un CD audio sous Linux

Récemment, j'ai voulu graver une compilation de plusieurs chansons sur un CD audio avec Linux. Résulat pas moins de 2 CD perdus.
Voici les difficultés rencontrées :
  1. Il faut extraire les pistes en 44 kHz sinon il faut réencoder les pistes avant de les graver...
  2. Il faut bien préciser Wodim de graver en mode audio sinon...ça ne marche pas très bien. 1er CD de perdu.
  3. Grip à tendance à compresser les pistes extraites. Dans mon cas il les compresse sans perte en FLAC, et graver des fichier encodés en FLAC...ça ne marche pas très bien. 2ème CD de perdu.
Donc au final le plus simple est :
  • d'extraire les pistes souhaitées avec Grip en FLAC.
  • décoder les pistes FLAC pour les repasser en WAV.
flac -d *.flac
  • Graver avec les bon paramètres pour Wodim (RTFM)
wodim -v dev=/dev/scd1 -audio -pad *.wav

mardi 7 octobre 2008

Debugger des tests unitaires Maven 2 avec Eclipse

Pour débugger les tests unitaires lancés par Maven, il rajouter le paramètre -Dmaven.surefire.debug à la ligne commande Maven.

Lancer Maven 2 :
>mvn clean install -Dmaven.surefire.debug
...
Listening for transport dt_socket at address: 5005
L'exécution du test unitaire est bloqué jusqu'à ce que le debugger se lie à la JVM.
Dans Eclipse créer une nouvelle configuration pour le débugger en faisant "Run > Open Debug Dialog..."

Créer une nouvelle configuration "Remote Java Application..." avec en type de connexion "Standard" sur "localhost" et sur le port "5005" par défaut pour le plugin de tests unitaire Maven surefire.
Lancer le debug.
L'exécution du test unitaire reprend alors normalement, et l'exécution des tests unitaires sera suspendue sur les breakpoints définis dans le workspace Eclipse.

dimanche 31 août 2008

rsync sur ftp

Comment faire pour sauvegarder ses documents sur un compte FTP ?
L'utilisation de rsync sous linux impose d'avoir un serveur SSH disponible sur la machine hôte. Si vous êtes comme moi et que votre hébergeur ne vous propose pas de service SSH voici une solution pour arriver à faire des sauvegardes avec rsync.

La solution consiste à monter un site ftp comme un répertoire local et à faire la sauvegarde rsync vers ce répertoire.
Pour faire le montage réseau on va utiliser la librairie Curlftpfs:

Tout d'abord, créez le point de montage :
$mkdir /mnt/jerome.creignou.free.fr
Montez le répertoire ftp :
$curlftpfs -o user="jerome.creignou:xxxxxx" ftp://ftpperso.free.fr /mnt/jerome.creignou.free.fr


Lancez le backup :
$rsync -auv --delete --ignore-errors --stats /home/jerome/Images /mnt/jerome.creignou.free.fr/images
building file list ... done
Images/
...


Voilà !