mardi, décembre 08, 2009

Samba configuration

* Pour afficher la liste des options disponibles sur le serveur samba pour le configurer via /etc/samba/smb.conf :

sudo testparm --show-all-parameters

mardi, novembre 03, 2009

Ubuntu - Proxy HTTP

Localisation de la gestion de proxy sur Ubuntu 9.04




* Pour tout les utilisateurs
ajouter dans /etc/environment
HTTP_PROXY="http://login:pass@host_proxy:port_proxy/"
HTTPS_PROXY="http://login:pass@host_proxy:port_proxy/"

http_proxy="http://login:pass@host_proxy:port_proxy/"
https_proxy="http://login:pass@host_proxy:port_proxy/"

ajouter dans /etc/profile
export HTTP_PROXY="http://login:pass@host_proxy:port_proxy/"
export HTTPS_PROXY="http://login:pass@host_proxy:port_proxy/"
export http_proxy="http://login:pass@host_proxy:port_proxy/"
export https_proxy="http://login:pass@host_proxy:port_proxy/"




* Pour un utilisateur
ajouter dans ~user/.profile
export HTTP_PROXY="http://login:pass@host_proxy:port_proxy/"
export HTTPS_PROXY="http://login:pass@host_proxy:port_proxy/"
export http_proxy="http://login:pass@host_proxy:port_proxy/"
export https_proxy="http://login:pass@host_proxy:port_proxy/"




* Pour un utilisateur, dans gnome
Menu Systeme / Préférences / Serveur Mandataire
Spécifier le proxy
Les modifications sont enregistrées dans ~user/.gconf/system dans les fichiers des répertoires http_proxy et proxy






* Gestionnaire de paquet Synaptic
Menu Configurer / Préférences / Réseau
Spécifier le proxy
Le proxy ici renseigné est également utilisé par le Gestionnaire de mise à jour. (Même s'il y n'ya pas de panneau de configuration de proxy dans le Gestionnaire de mise à jour)

jeudi, octobre 29, 2009

Maven 2 : Lifecyle & autres

Option pour lancer une tâche sans les tests :
mvn -DskipTests=true nom_task
(ne lance pas l'exécution des tests, ni leur compilation)

Cycle de vie :
Le cycle de vie par défaut est constitué de tâches successives. En appelant une des taches de ce cycle de vie, toutes les taches précédentes sont exécutées


Le cycle de vie par défaut de maven est le suivant :
  • validate - validate the project is correct and all necessary information is available
  • compile - compile the source code of the project
  • test - test the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed
  • package - take the compiled code and package it in its distributable format, such as a JAR.
  • integration-test - process and deploy the package if necessary into an environment where integration tests can be run
  • verify - run any checks to verify the package is valid and meets quality criteria
  • install - install the package into the local repository, for use as a dependency in other projects locally
  • deploy - done in an integration or release environment, copies the final package to the remote repository for sharing with other developers and projects. 

Cycle de vie en détail :

validate
validate the project is correct and all necessary information is available.
initialize
initialize build state, e.g. set properties or create directories.
generate-sources
generate any source code for inclusion in compilation.
process-sources
process the source code, for example to filter any values.
generate-resources
generate resources for inclusion in the package.
process-resources
copy and process the resources into the destination directory, ready for packaging.
compile
compile the source code of the project.
process-classes
post-process the generated files from compilation, for example to do bytecode enhancement on Java classes.
generate-test-sources
generate any test source code for inclusion in compilation.
process-test-sources
process the test source code, for example to filter any values.
generate-test-resources
create resources for testing.
process-test-resources
copy and process the resources into the test destination directory.
test-compile
compile the test source code into the test destination directory
process-test-classes
post-process the generated files from test compilation, for example to do bytecode enhancement on Java classes. For Maven 2.0.5 and above.
test
run tests using a suitable unit testing framework. These tests should not require the code be packaged or deployed.
prepare-package
perform any operations necessary to prepare a package before the actual packaging. This often results in an unpacked, processed version of the package. (Maven 2.1 and above)
package
take the compiled code and package it in its distributable format, such as a JAR.
pre-integration-test
perform actions required before integration tests are executed. This may involve things such as setting up the required environment.
integration-test
process and deploy the package if necessary into an environment where integration tests can be run.
post-integration-test
perform actions required after integration tests have been executed. This may including cleaning up the environment.
verify
run any checks to verify the package is valid and meets quality criteria.
install
install the package into the local repository, for use as a dependency in other projects locally.
deploy
done in an integration or release environment, copies the final package to the remote repository for sharing with other developers and projects.

lundi, octobre 12, 2009

Webservice : style et encoding

Intro:
Le style et l'encoding qui caractérise un webservice définissent la façon dont un message SOAP sera construit en fonction de la wsdl.

Style : RPC ou Document
Encoding : Literal ou Encoded
Autre : Wrapped Document Literal



Type :
RPC/Encoded :
- Le message SOAP ne contiendra pas le nom de l'opération en tant que racine à l'intérieur du <soap:body>
- Le message SOAP doit contenir des attributs xsd définissant le type de chaque élément
(exemple : xsd:int)
- No WSI-Compliant
- Validation XSD peut aisée car le schéma XSD est éclatée dans la wsdl

RPC/Literal :
- Le message SOAP contient le nom de l'opération en tant que racine à l'intérieur du <soap:body>
- Le message SOAP ne contient pas des attributs xsd définissant le type de chaque élément
(exemple : xsd:int)
- WSI-Compliant
- Validation XSD peut aisée car le schéma XSD est éclatée dans la wsdl

Document/Encoded :
N'existe pas

Document/Literal
- Le message SOAP ne contient pas le nom de l'opération en tant que racine à l'intérieur du <soap:body>
- Le message SOAP ne contient pas des attributs xsd définissant le type de l'élément
(exemple : xsd:int)
- WSI-Compliant partiellement. Dû au fait qu'une des restrictions de la norme préconise de ne faire apparaitre dans le <soap:body> qu'un seul élément racine. Alors que le Document Literal ne fait pas figurer de nom d'opération et n'a donc pas d'élément racine dans le <soap:body>
- Validation XSD aisée

Wrapped Document/Literal
- Le message SOAP contient le nom de l'opération en tant que racine à l'intérieur du <soap:body>
Il s'agit en réalité d'un contournement du type Document/Literal. L'élément racine n'est en réalité pas vraiment le nom de l'opération comme dans un type RPC/Literal, mais est un wrapper qui porte le même nom que l'opération. (Ce qui revient au meme in fine!)
- Le message SOAP ne contient pas des attributs xsd définissant le type de l'élément
(exemple : xsd:int)
- WSI-Compliant
- Validation XSD aisée


Notes :

- Historiquement, le RPC-Encoded fut le premier à apparaitre et est le plus populaire.
Il permet d'écrire des wsdl les moins complexes
- Le type RPC-Encoded présente à machines équivalentes des performances moindre qu'un type Document/Literal
- Le type Wrapped Document Literal est une amélioration du type Document/Literal en paliant à ses défauts.


Source :
http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/
http://www.ibm.com/developerworks/webservices/library/ws-soapenc/

mardi, octobre 06, 2009

JBoss esb et JBoss Remoting gateway (jbr)

Pour chaque service ESB, une ou plusieurs gateway sont définies.

Pour une gateway HTTP attachée a un provider JBR définissant un bus HTTP, il faut a chaque fois déclarer un nouveau port.

Ce qui peut etre problématique (ouvrir de multiple port HTTP, par service ESB)

La version 4.6 de Jboss ESB ne prend pas en charge un routage basé sur l'url (type JBossWS)

Ce sera peut être pris en charge dans la version 4.7
https://jira.jboss.org/jira/browse/JBESB-1557

En attendant, voici une implémentation d'un nouveau ListenerGateway, qui prend en charge un routage basé sur l'url passée, l'authentification http, etc :
http://www.jboss.org/community/wiki/HTTPGatewayListenerConfiguration

lundi, septembre 14, 2009

JBoss ESB : archives, services, messages

Archive .esb
Fichier zip contenant tout ce qu'on retrouverait dans un fichier ear avec en sus
META-INF\jboss-esb.xml
META-INF\deployment.xml
fichier.war (optionnel)
etc...


Fichier jboss-esb.xml

Fichier descriptif de l'application esb. On y retrouve
* des BUS instanciés depuis des providers (HTTP, socket, JMS, ...)
* des services

Services
Un service de JBoss ESB défini
* des listeners gateway
* des listeners ESB-aware
* une sequence d'action

Les messages et listeners

- listeners qui lisent des messages au format ESB (dit listener ESB-Aware)
- listener dit "gateway" qui sont en charge de transformer le message recu de l'extérieur de l'ESB en message de type ESB.

--> Bus GATEWAY (ou EPR End Point Reference) --> LISTENER GATEWAY --> Bus ESB-Aware --> LISTENER ESB-Aware --> Service


Structure d'un message ESB (org.jboss.soa.esb.message)
  • Header: the header information contains information such as the destination EPR, the sender EPR, and where the reply goes--general message-level functional information.
  • Context: additional information that further explains the message; for example, transaction or security data, the identity of the ultimate receiver, or HTTP-cookie-like information.
  • Body: the actual payload of the message.
  • Fault: any error information associated with the message.
  • Attachment: any attachments (additional files) associated with the message.
  • Properties: any message specific properties (for example the jbossesb.message.id property is a unique value for each message.
XSD correspondant :

<xs:complexType name="Envelope">
<
xs:attribute ref="Header" use="required"/>
<
xs:attribute ref="Context" use="required"/>
<
xs:attribute ref="Body" use="required"/>
<
xs:attribute ref="Attachment" use="optional"/>
<
xs:attribute ref="Properties" use="optional"/>
<
xs:attribute ref="Fault" use="optional"/>

Les actions de JBoss ESB

Un service définit une succession d'action.
<actions> <action name="ACTION1" class="fr.com.Action"> </action>

Voici une liste d'actions possible

WebServices
org.jboss.soa.esb.actions.soap.wise.SOAPClient
org.jboss.soa.esb.actions.soap.SOAPClient

Core Action
org.jboss.soa.esb.actions.SystemPrintln

Scripting
org.jboss.soa.esb.actions.scripting.GroovyActionProcessor

Business Process Management (jBPM)
org.jboss.soa.esb.services.jbpm.actions.BpmProcessor

Routing
org.jboss.soa.esb.actions.ContentBasedRouter
org.jboss.soa.esb.actions.StaticRouter
org.jboss.soa.esb.actions.StaticWiretap

Jboss ws + jboss esb : WS embarqué dans un esb ET autodefini en EBWS

VALABLE POUR JBOSS ESB 4.5
Pour faire cohabiter des webservices
* embarqué dans un war (par exemple utilisé dans une action de JBOSS ESB via SOAPClient) lui même embarqué dans le fichier esb
* et ceux générés automatiquement avec EBWS (un webservice endpoint sur l'ESB est défini automatiquement quand on défini les contract sur <actions> d'un service ESB)

Il faut intégrer dans le web.xml en plus des webservices qu'on aura défini ceux qui seront générés automatiquement.


<servlet>
<servlet>
<servlet-name>MonWS</servlet-name>
<servlet-class>fr.com.MonWS</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>MonWS</servlet-name>
<url-pattern>/MonWS</url-pattern>
</servlet-mapping>



<servlet>
<servlet-name>NOM-CATEGORIE_NOM-SERVICE</servlet-name>
<servlet-class>esb.ws.NOM-CATEGORIE.NOM-SERVICE.Implementation</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>NOM-CATEGORIE_NOM-SERVICE</servlet-name>
<url-pattern>/NOM-CATEGORIE/NOM-SERVICE</url-pattern>
</servlet-mapping>

</servlet>
<servlet-mapping><url-pattern></url-pattern>
</servlet-mapping>


Le problème vient du fait que la fonctionnalité EBWS génère son propre war qu'il embarque automatiquement dans le fichier ESB. On se retrouve avec deux war et deux fichiers web.xml. Celui qu'on aura défini masquant celui généré automatiquement.


Pour vérifier la publication de tous les webservices : http://localhost:8080/jbossws/services

mardi, mai 12, 2009

Rappel HTML : centrer une image

Méthode 1 :
<div style="text-align: center;">
<img src="http://www.blogger.com/xxx" sytle="width:256px:height:256px;vertical-align:middle;" alt="mon image" />
</div>

Méthode 2 :
<img src="http://www.blogger.com/xxx" style="margin: auto; display: block; vertical-align: middle;" alt="mon image" />



Le display:block transforme ton image en block, c'est a dire qu'il y aura un retour a la ligne.
Le margin:auto; c'est pour que l'image soit centrée.

samedi, mai 09, 2009

Comment faire pour activer l'ouverture de session automatique dans Windows XP


Ancien nº de publication de cet article : F315231
Cet article peut contenir des liens vers des informations en langue anglaise (pas encore traduites).
Important Cet article contient des informations sur la modification du Registre. Avant de modifier le Registre, pensez à le sauvegarder et assurez-vous que vous savez le restaurer en cas de problème. Pour plus d'informations sur la sauvegarde, la restauration et la modification du Registre, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft.
256986 (http://support.microsoft.com/kb/256986/ ) Description du Registre de Microsoft Windows
Agrandir tout | Réduire tout

INTRODUCTION
Cet article explique comment configurer Microsoft Windows XP pour qu'il automat...

Cet article explique comment configurer Microsoft Windows XP pour qu'il automatise le processus d'ouverture de session en enregistrant votre mot de passe et les autres informations pertinentes dans la base de données du Registre. Cette fonctionnalité permet aux autres utilisateurs de démarrer votre ordinateur et d'utiliser le compte que vous avez configuré afin de permettre une ouverture de session automatique.

Important Si vous activez l’ouverture de session automatique, il est plus pratique d’exécuter Windows. Toutefois, cette fonctionnalité peut présenter un risque en matière de sécurité.

Plus d'informations
Avertissement Toute utilisation incorrecte de l'Éditeur du Registre peut générer...

Avertissement Toute utilisation incorrecte de l'Éditeur du Registre peut générer des problèmes sérieux, pouvant vous obliger à réinstaller votre système d'exploitation. Microsoft ne peut pas garantir que les problèmes résultant d'une mauvaise utilisation de l'Éditeur du Registre puissent être résolus. Vous assumez l'ensemble des risques liés à l'utilisation de cet outil.
Si vous configurez un ordinateur pour l'ouverture de session automatique, toute personne capable d'accéder physiquement à l'ordinateur peut également accéder à toutes les données qui s'y trouvent, y compris aux réseaux auxquels l'ordinateur est connecté. En outre, lorsque l’ouverture de session automatique est activée, le mot de passe est enregistré dans le Registre en texte brut. La clé de Registre spécifique qui stocke cette valeur est lisible à distance par le groupe Utilisateurs authentifiés. Par conséquent, n'utilisez ce paramètre que si l'ordinateur est physiquement sécurisé et si vous vous assurez que les utilisateurs qui ne sont pas fiables ne peuvent pas visualiser le Registre à distance.

Vous pouvez utiliser l'Éditeur du Registre pour ajouter vos informations d'ouverture de session. Pour cela, procédez comme suit :
  1. Cliquez sur Démarrer, sur Exécuter, tapez regedit, puis cliquez sur OK.
  2. Recherchez la clé de Registre suivante :
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon
  3. En utilisant votre nom de compte et votre mot de passe, double-cliquez sur l’entrée DefaultUserName, tapez votre nom d'utilisateur, puis cliquez sur OK.
  4. Double-cliquez sur l'entrée DefaultPassword, tapez votre mot de passe dans la zone de données de la valeur, puis cliquez sur OK.

    S'il n'y a aucune valeur DefaultPassword, créez-en une. Pour cela, procédez comme suit :
    1. Dans l'Éditeur du Registre, cliquez sur Edition, sur Nouveau, puis sur Valeur chaîne.
    2. Tapez DefaultPassword comme nom de la valeur, puis appuyez sur ENTRÉE.
    3. Double-cliquez sur la clé qui vient d'être créée, puis tapez votre mot de passe dans la zone Données de la valeur.
    Si aucune chaîne DefaultPassword n’est spécifiée, Windows XP modifie automatiquement la valeur de la clé de Registre AutoAdminLogon en remplaçant 1 (vrai) par 0 (faux) afin de désactiver la fonctionnalité AutoAdminLogon.
  5. Double-cliquez sur l'entrée AutoAdminLogon, tapez 1 dans la zone Données de la valeur, puis cliquez sur OK.

    S'il n'y a aucune entrée AutoAdminLogon, créez-en une. Pour cela, procédez comme suit :
    1. Dans l'Éditeur du Registre, cliquez sur Edition, sur Nouveau, puis sur Valeur chaîne.
    2. Tapez AutoAdminLogon comme nom de la valeur, puis appuyez sur ENTRÉE.
    3. Double-cliquez sur la clé qui vient d'être créée, puis tapez 1 dans la zone Données de la valeur.
  6. Quittez l'Éditeur du Registre.
  7. Cliquez sur Démarrer, sur Redémarrer, puis cliquez sur OK.
Après le redémarrage de votre ordinateur et le démarrage de Windows XP, vous pourrez ouvrir une session automatiquement.

Si vous souhaitez contourner l'ouverture de session automatique et ouvrir une session en tant que nouvel utilisateur, maintenez la touche MAJ enfoncée après la fermeture de la session ou le redémarrage de Windows XP. Notez que cette procédure s'applique uniquement à la première ouverture de session. Pour appliquer ce paramètre lors des fermetures de session suivantes, l’administrateur doit définir la clé de Registre suivante :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon

Valeur :ForceAutoLogon
Type : REG_SZ
Données : 1
Vous pouvez également utiliser l'activation de l'ouverture de session automatique sans modifier le Registre dans Windows XP Édition familiale et dans Windows XP Professionnel sur un ordinateur non joint à un domaine. Pour cela, procédez comme suit :
  1. Cliquez sur Démarrer, puis sur Exécuter.
  2. Dans la zone Ouvrir, tapez control userpasswords2, puis cliquez sur OK.

    Remarque Lorsque des utilisateurs essaient d'afficher des informations d'aide dans la fenêtre Comptes d'utilisateurs dans Windows XP Édition familiale, les informations d'aide ne sont pas affichées. En outre, le message d'erreur suivant s'affiche :
    Impossible de trouver le fichier d'aide lecteur: \Windows\System32.hlp. Vérifiez si le fichier existe sur votre disque. Si ce n'est pas le cas, vous devez le réinstaller.
  3. Désactivez la case à cocher « Les utilisateurs doivent entrer un nom d'utilisateur et un mot de passe pour utiliser cet ordinateur », puis cliquez sur Appliquer.
  4. Dans la fenêtre Ouverture de session automatique, tapez le mot de passe dans la zone Mot de passe, puis retapez-le dans la zone Confirmer le mot de passe.
  5. Cliquez sur OK pour fermer la fenêtre Ouverture de session automatique, puis de nouveau sur OK pour fermer la fenêtre Comptes d'utilisateur.

Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Windows XP Édition familiale
  • Microsoft Windows XP Professional
  • Microsoft Windows XP 64-Bit Edition

mardi, mars 10, 2009

XBMC use Shuttle VFD with LCDProc on Mythbuntu/Xubuntu

CONTEXTE:

XBMC installé sur Mythbuntu 8.10 (Xubuntu 8.10) dans un barebone de Shuttle incluant un affichage LCD en façade.

Modèles Shuttle potentiellement concernés :
SD32G5, SD30G2B, SG31G2B, SD36G5, SG33G5, SG33G6, SK22G2 ,SN68SG2, SN68PTG5, SN68PTG6 Deluxe ,SN21G5, SN95G5
LCD présent par défaut ou après achat du kit PF27 (http://eu.shuttle.com/DesktopDefault.aspx/tabid-123/241_read-13739/)

Version XBMC : from PPA SVN BUILD : XBMC Pre-9.04 R18324, MAR 7 2009




HOW-TO:

XBMC supporte le pilotage de LCD via LCDProc. (http://lcdproc.org)
LCDProc possède un pilote pour le LCD des boitiers Shuttle depuis mi-fin 2007 dans ses dépots CVS.
Le paquet LCDProc a disposition d'ubuntu/debian est le 0.5.2 et ne dispose pas du pilote pour LCD Shuttle

Vérification du support du LCD Shuttle
lsusb
On doit avoir ID 051c:0005 ou ID 051c:0x0003


Compilation de LCDProc (depuis les sources CVS)
wget http://lcdproc.sourceforge.net/nightly/lcdproc-CVS-current.tar.gz
tar xvf lcdproc-CVS-current.tar.gz
cd lcdproc-CVS-current.tar.gz

sudo apt-get install libusb-dev xmlto libncurses5-dev libsvga1-dev libxosd-dev
./configure --help
./configure --enable-drivers=shuttleVFD
make
sudo make install


Installation du démarrage automatique
sudo cp scripts/init-LCDd.debian /etc/init.d/LCDd
sudo cp scripts/init-lcdproc.debian /etc/init.d/lcdproc
sudo chmod 655 /etc/init.d/LCDd
sudo chmod 655 /etc/init.d/lcdproc
sudo update-rc.d LCDd defaults


Editer /usr/local/etc/LCDd.conf
DriverParth=/usr/local/lib/lcdproc/
Driver=shuttleVFD
ServerScreen=no
Hello="Welcome to XBMC"


Démarrage
sudo /etc/init.d/LCDd start





DANS XBMC:
Dans les paramètres systèmes, LCD : choisir Type LCD = LCDproc


Editer ~/.xbmc/userdata/LCD.xml
<lcd>
<music>
<line>* $INFO[MusicPlayer.Artist] * $INFO[MusicPlayer.Title] ** $INFO[Player.Time]/$INFO[Player.Duration] ** $INFO[System.Time] *</line>
</music>
<video>
<line>* $INFO[VideoPlayer.Title] ** INFO[Player.Time]/$INFO[Player.Duration] ** $INFO[System.Time] *</line>
</video>
<general>
<line>* $INFO[System.Time] ** $INFO[System.Date] *</line>
</general>
<screensaver>
<line>* $INFO[System.Time] ** $INFO[System.Date] *</line>
</screensaver>
</lcd>



Editer ~/.xbmc/userdata/advancedsettings.xml

<lcd>
<rows>1</rows> <!-- Number of rows to use for the LCD. -->
<columns>20</columns> <!-- Number of columns to use for the LCD. -->

<address1>0</address1> <!-- Memory address for row 1. -->
<address2>20</address2> <!-- Memory address for row 2. -->
<address3>64</address3> <!-- Memory address for row 3. -->

<address4>84</address4> <!-- Memory address for row 4. -->
<heartbeat>true</heartbeat> <!-- Enables LCDprocs heartbeat symbol. Defaults to false. -->
<scrolldelay>2</scrolldelay> <!-- Delay of the scroller widget. Defaults to 1. -->

</lcd>





AMELIORATIONS:

Une meilleure programmation de LCD.xml, notemment avec la prise en compte des icônes du LCD des shuttle.
- Le header (.h) du driver du shuttleVFD avec les codes pour les icones : http://lcdproc.cvs.sourceforge.net/viewvc/lcdproc/lcdproc/server/drivers/shuttleVFD.h?view=markup
- Le détail des codes pour LCD.xml : http://xbmc.org/wiki/index.php?title=LCD.xml

XBMC dans Mythbuntu - Xubuntu et partage réseau SMB (en mode user=security)

XBMC inclut son propre client SMB. La version 3.0.23a de libsmbclient figure dans les sources. Cette version peut poser de multiples problèmes d'accès aux répertoires (samba en mode share/user, kerberos, ntlm etc..)

PROBLEME :
Quand XBMC tente d'accèder à des partages samba, deux cas se présentent :
En mode security = share, XBMC n'a aucun problème avec les partages public ou privés et ne nécessite pas d'utiliser fusesmb. L'utilisation de l'ajout d'une source de type smb:// avec renseignement du login/pass le cas échéant suffit amplement.
En mode security = user, XBMC ne sait pas gérer ce type de source smb://


SOLUTION :
La solution de créer des points de montage via CIFS dans /etc/fstab ne résout pas le problème : XBMC on ne peut pas accéder au contenu des points de montage de type CIFS, pour une raison inconnue

Une des solutions, en attendant que les développeurs de XBMC intègre une version plus récente de la libsmbclient (http://xbmc.org/trac/ticket/5653), consiste à passer par un point de montage FUSESMB.


CONTEXTE:
Ma configuration est une installation de XBMC (version SVN PPA : XBMC Pre-9.04 R18324, MAR 7 2009) dans Mythbuntu 8.10 (Donc dans xubuntu 8.10)
A noter qu'ici XFCE est le gestionnaire de fenêtre et Thunar le gestionnaire de fichiers. Le serveur de partage est samba 3.0.24 sur une Debian 4.0 etch.

Le serveur samba partage des répertoires à accès public et privés. Les répertoires privés sont visibles (browseable=yes)
Il est en mode security = user et passdb backend = tdbsam (notamment à cause de la nécessité d'accès à ce serveur par un poste Vista)

Samba est installé et configuré sur la machine XBMC.




HOW-TO:

Installation fuse/fusesmb
sudo apt-get install fuse-utils libfuse2 fusesmb

Creation du point de montage
cd ~
mkdir -p Network


Ajout de l'utilisateur au groupe fuse
sudo gpasswd -a $USER fuse


NOTE BUG:
Il y a un bug identifié qui fait que fusesmb ne fonctionne pas correctement, comme par exemple monte les répertoires réseaux et les fait disparaitre quelques minutes après.
L'erreur provient d'une erreur dans libsmbclient qui surgit à l'utilisation de fusesmb.
https://bugs.launchpad.net/ubuntu/+source/fusesmb/+bug/198351
https://bugs.launchpad.net/ubuntu/+source/samba/+bug/290673
Solution :
downgrader le package avec la version contenue dans ubuntu hardy (8.04) => libsmbclient 3.0.28a au lieu de libsmbclient 3.2.3
Utiliser smbnetfs ne résout rien car il comporte la meme erreur vu qu'il repose lui aussi sur la même version de libsmbclient.


Downgrade de libsmbclient

Télécharger et décompresser le .deb de la 3.0.28a depuis http://packages.ubuntu.com/hardy-updates/libsmbclient puis
sudo mv /usr/lib/libsmbclient.so.0 /usr/lib/libsmbclient.so.0.bak
sudo cp /CONTENTS/usr/lib/libsmbclient.so.*
sudo ldconfig




Génération des fichiers de configuration

On les efface en premier lieu pour mieux gérer la configuration du cache, et éviter quelques bugs.
cd ~
rm .smb/
fusesmb Network && fusermount -u Network



Créer-éditer ~/.smb/smb.conf
Dans le cas où l'on souhaite accèder également à un serveur en mode security=share : La navigation dans le point de montage d'un serveur en mode share dans des répertoires demandant une authentification nécessite d'activer l'authentification lanman. (NOTE : il faut que les definitions de ces repertoires contiennent browseable=yes, available = yes, public = no)
[global]
workgroup = WORKGROUP
client lanman auth = yes #si on veut accéder à un serveur samba en mode share -reporter cette ligne eventuellement egalement dans /etc/samba/smb.conf-



Créer-éditer ~/.smb/fusesmb.conf
A adapter.
; Global settings
[global]

; Default username and password
username=user
password=totallysecret

; List hidden shares
showhiddenshares=true

; Connection timeout in seconds
timeout = 10

;Interval for updating new shares in minutes
interval = 0

; Share-specific settings
[/SERVER/SHARE]
username=john
password=doe

; Server-specific settings
[/SERVER]
username=jane
password=doe


Droits du fichier
chmod 600 ~/.smb/fusesmb.conf


Montage du réseau
fusesmb Network

Pour le faire démarrer automatiquement au démarrage de la session X
Applications > Settings > Autostarted Applications > ajouter une application qui sera la ligne de commande suivante : fusesmb Network


Dans Thunar :
Pour accèder au voisinage réseau, il suffit alors de naviguer dans le répertoire Network de son home. On peut éventuellement créer un lien de Network dans les raccourcis de Thunar

Dans XBMC:
Il suffit d'ajouter une source pointant sur /home/user/Network/WORKGROUP/SERVER/SHARE

vendredi, février 13, 2009

Human Remote concept for Elisa

Human Remote concept for Elisa

Abstract
Elisa can be control by several types of device. Keyboard, mouse,remote, with gyro, bluetooth remote and so on, only if they can be plugged to the host system. But if we consider evolution of HCI world in the past year, we will see that most of innovation try to make the most intuitive and easiest HCI for human. Without anything. No more interaction but with human. Motion detection, voice recognition, everything that is the most natural way for people. This is a technical how-to set up this in Elisa.


Le pilotage de l'interface d'Elisa peut être effectué par différents types de périphériques. Clavier, souris, télécommande IR, télécommande à gyro, etc.. pourvu que le système hote possède les connectiques adéquates. A la vue de la courbe de progression en matière d'IHM grand public et de leur périphérique de contrôle, la part belle est faite à l'interaction directe, ludique et la plus naïve possible. Abordé sous cet angle, l'utilisateur lui-même en tant qu'acteur de l'IHM devient évidente. Usage du corps, des mouvements, de la voix et de toute caractéristique naturelle de l'humain. On peut définir une façon d'utiliser une IHM sans passer par aucun périphérique de commande manipulé d'aucune sorte (ni par contact, ou par pression,etc..).

Dans le prototype mis en œuvre ici pour Elisa, il sera question d'expérimenter l'usage de la combinaison de la voix et de la détection des mouvements de mains.
A elle seule, la voix permet d'activer des fonctionnalités précises. Par exemple, lecture, pause, suivant, etc.. Mais celà ne suffit pas à couvrir l'usage complet de l'interface : il faut aussi des capacités de navigation, comme le défilement ou le feuilletage. Il faut donc adjoindre à la commande vocale, la détection de mouvements.

La plateforme visée est une distribution ubuntu de type standard sur un poste équipé d'une webcam avec micro intégré.


Principe de l'implémentation dans Elisa
Elisa pour sa gestion d'événements de périphérique propose un modèle objet ayant pour racine InputProvider.
Il faut ici implémenter une classe à partir de ce modèle, dérivé de PushInputProvider, prenant en charge la reconnaissance vocale et la gestion des mouvements. Elle injectera alors des ordres automatiquement via le modèle objet à l'IHM. Le tout prenant la forme d'un plugin pour Elisa.


La voix
La reconnaissance vocale doit permettre d'associer des mots ou des phrases à des actions. Il est nécessaire ici d'adopter des mots ou phrases courtes afin de rendre le service efficace. Bien qu'on reste tributaire de la qualité du matérielle.
En ce basant sur l'architecture d'Elisa, il est nécessaire de développer un plugin de reconnaissance vocale fonctionnant de manière asynchrone via GStreamer déclenchant des évenements.
Un corpus réduit choisi : PLAY, STOP, NEXT, BACK

Différents projets notamment de recherche universitaire se prêtent au besoin en mode SPEECH-TO-TEXT. Mais de manière générale plusieurs projets se basent sur des frameworks propriétaires ou sur des technologies présentes uniquement sur une seule plateforme. Quand il ne s'agit pas de simple wrapper de systèmes pré-installés.
Le projet The CMU Sphinx Group Open Source Speech Recognition Engines [http://cmusphinx.sourceforge.net/html/cmusphinx.php] présente les avantages suivant :
- portabilité système
- licence
- utilisable via des pipeline GStreamer
- binding python
Il propose plusieurs moteurs de reconnaissance vocale basés pour la plupart sur des algorithmes communs. Sphinx 2 qui est aujourd'hui abandonné au profit de Sphinx-3, ou Sphinx-4 qui lui fonctionne en environnement Java. PocketSphinx quant à lui est spécialement dédié aux mobile device et possède ses binding pythons.


La détection de mouvement
Il faut pouvoir détecter les mouvements de main de l'utilisateur. Plus précisément détecter une vitesse de mouvement et un sens. On passe par les techniques de détection de blob. Plusieurs implémentations existent.
L'algorithme naïf à utiliser est de détecter les bounding boxes de premier plan, étant ceux possédant la plus grande surface et de les tracker dans le temps, pour calculer une vitesse et le sens. A partir de là, et en fixant des seuils il devient possible d'envoyer des ordres de défilement à l'IHM de Elisa.

Les technologies autour de Processing.org (environnement de R&D pour IHM) permettent cela en Java. Notamment via une librairie appelée JMyron (dérivée de webcamxtra) initialement prévue pour Mac et possédant un noyau en C++ (appelé Myron).
[http://webcamxtra.sourceforge.net/index.shtml]
Myron offre les techniques suffisantes et nécessaires aux besoins. De plus Myron est largement répandu dans le domaine de l'expérimentation d'IHM ou des artistes visuels dès qu'il s'agit d'aborder la motion detection.


Etat du projet
[Au 09/02/09]
Le module de reconnaissance vocale basé sur le corpus défini est fonctionnel.
La navigation par détection de mouvement n'est pas terminée. pyMyron doit être finalisé pour celà.
pyMyron n'est pas complet, seule la fonction de detection de blob est prise en compte bien qu'une erreur dans Myron engendre des erreurs.


TODO list & note
L'efficacité de ce genre de système, surtout pour la partie motion detection, reste trop tributaire de la qualité du matériel.
Un portage win32 sera normalement facilité par le choix des librairies.
Affiner le choix de la librairie de reconnaissance vocale, utilisé sphinx-3 en lieu et place de pocketsphinx.
Finir PyMyron
Intégrer les événements de detection de blob à la classe InputProvider
Etendre le corpus pour activer les sections spécifiques de Elisa via le bus de son api (accès aux films, photos, etc...)


Implémentation de la reconnaissance vocale

Plateforme d'ensemble : ubuntu 8.10, gstreamer 0.10.21, gcc4.3.2, java 1.6.0_10, python 2.5.2, Elisa 0.5.X (from SVN 20090122)

Mise en place de PocketSphinx depuis les archives de sourceforge [http://sourceforge.net/project/platformdownload.php?group_id=1904]
pour créer la librairie, les binding python et le plugin pour gstreamer.

Puis l'utiliser dans le plugin HumanRemote.

1.Compilation de SphinxBase (v0.4.1)

cd sphinxbase-0.4.1
$./configure --enable-fixed --disable-shared
$make
$sudo make install

2.Compilation de pocketsphinx (v0.5.1)

$cd pocketsphinx-0.5.1
$./configure --prefix=`pwd`/build --with-sphinxbase=`pwd`/../sphinxbase-0.4.1 --disable-shared
$make
$make install


3.Test


$export LD_LIBRARY_PATH=`pwd`/pocketsphinx-0.5.1/build/lib
$export GST_PLUGIN_PATH=`pwd`/pocketsphinx-0.5.1/build/lib/gstreamer-0.10
$export PYTHONPATH=$PWD/pocketsphinx-0.5.1/build/lib/python2.5/site-packages:$PYTHONPATH
Test de la librairie python:
$python -c "import pocketsphinx"
Test plugin gstreamer:
$gst-inspect-0.10 pocketsphinx


4.Le corpus et le dictionnaire
A partir de là, il faut créer un modele de dictionnaire à destination du moteur de reconnaissance vocale. Et ceci à partir du corpus de mots définis. Ce dictionnaire définit le vocabulaire à reconnaitre par Elisa, et se présente sous la forme de fichier binaire compilé.
(cf documentation sphinx)


5.Integration au plugin Human Remote
En se basant sur un pipeline gstreamer captant une source sonore, il faut utiliser le plugin pocketsphinx pour lever des évenements Elisa.

Pipeline mis en place pour une webcam à micro intégré :
osssrc ! audioconvert ! vader name=vad auto-threshold=true ! pocketsphinx dict=model.dic lm=model.lm name=asr ! fakesink

On peut envisager, selon la qualité du matériel d'utiler des filtres comme audiochebband pour purger les bruits de fond ou autre parasite d'informations sonores.
Exemple :
audiochebband mode=band-pass lower-frequency=3000 upper-frequency=4000 type=2


def initialize(self):
dfr = super(HumanremoteInput, self).initialize()
...
self.pipeline = gst.parse_launch('osssrc ! audioconvert ! vader name=vad auto-threshold=true ! pocketsphinx dict=' + model_folder + 'model.dic lm=' + model_folder + 'model.lm name=asr ! fakesink')

asr = self.pipeline.get_by_name('asr')
asr.connect('partial_result', self.asr_partial_result)
asr.connect('result', self.asr_result)


Le filtre pocketsphinx va lever deux types d'événements : partial_result et result. Selon qu'une séquence de son représente un mot ou une phrase complet du corpus.

def application_message(self, bus, msg):
"""Receive application messages from the bus."""
msgtype = msg.structure.get_name()
if (msgtype == 'partial_result'):
pass
if (msgtype=='result'):
self.create_input_event(msg.structure['hyp'])
pass


Lors d'un évènement de type result, il faut ensuite via le bus lever un message applicatif qui se transformera un InputEvent et sera traité par l'InputManager d'Elisa.

def create_input_event(self, msg):
...
evt = InputEvent(EventSource.REMOTE, EventType.OTHER,
self.convert_table[data])


asr.set_property('configured', True)
self.info("HUMAN REMOTE : pipeline ok")


6.Human Remote v0.0.1a supportant la voix

Archive du plugin :
http://portail.studio-etrange.net/corailnumerique/humanremote/humanremote-0.0.1a.tar.gz
(nécessite les librairies compilées)

Test avec Elisa-SVN 0.5.24:
$../../pigment/pigment/misc/pgm-uninstalled
$export PYTHONPATH=$PWD/elisa-core:$PWD/elisa-plugins:$PYTHONPATH
$export LD_LIBRARY_PATH=`pwd`/pocketsphinx-0.5.1/build/lib
$export GST_PLUGIN_PATH=`pwd`/pocketsphinx-0.5.1/build/lib/gstreamer-0.10
$ELISA_DEBUG=3 python elisa-core/bin/elisa my_conf.conf


INFO Dummy-2 humanremote_input fév 13 09:31:26 HUMAN REMOTE : full result (elisa/plugins/humanremote/humanremote_input.py:99)
INFO Dummy-2 humanremote_input fév 13 09:31:33 HUMAN REMOTE : full result (elisa/plugins/humanremote/humanremote_input.py:99)
INFO MainThread humanremote_input fév 13 09:31:33 Callback create_input_event called (elisa/plugins/humanremote/humanremote_input.py:111)
INFO MainThread humanremote_input fév 13 09:31:33 Supported key code received: PLAY (elisa/plugins/humanremote/humanremote_input.py:
INFO MainThread humanremote_input fév 13 09:31:34 Humanremote input provider is shutting down (elisa/plugins/humanremote/humanremote_input.py:107)




Implémentation de la détection de mouvement

Plateforme d'ensemble : ubuntu 8.10, gstreamer 0.10.21, gcc4.3.2, java 1.6.0_10, python 2.5.2, Elisa 0.5.X (from SVN 20090122)

Mise en place de la librairie Myron sous ubuntu, et optionnellement à des fins de tests de JMyron pour processing dans ubuntu.
Création de pyMyron en vue d'une utilisation en python de la librairie dans le plugin HumanRemote.

1.Intégrer JMyron (v0025) avec v4l2
Il faut compiler Myron à partir de son code source C++ en librairie pour Java (appelée JMyron) tout en le modifiant pour qu'il supporte v4l2 et donc linux

$svn co https://webcamxtra.svn.sourceforge.net/svnroot/webcamxtra webcamxtra

Les modifications de Myron afin d'intégrer v4l2 ont en parti été réalisées ici
http://piratestudios.com/v4ljmyron/
copier v4l2Camera.h v4l2Camera.cpp Makefile.linux ezcam.cpp dans webcamxtra/ezcam
copier myron.cpp dans webcamxtra/source
Editer Makefile.linux
$(JAVAC)=/usr/bin/javac
$(PROCESSING)=/opt/processing-1.0.1

Pour compiler
$cd webcamxtra/ezcam
$make -f Makefile.linux


2.Intégrer JMyron pour v4l2 dans processing pour Ubuntu (optionnel)


Version : Ubuntu 8.10, sun-java-6, Processing 1.0.1, Jmyron0025

Depuis le site de processing.org
dezipper processing dans /opt/processing-1.0.1

Récupérer Jmyron for processing [http://webcamxtra.sourceforge.net/distro/JMyron0025.zip]
Installer JMyron in /opt/processing-1.0.1
Placer le répertoire JMyron dans /opt/processing-1.0.1/libraries
Placer le répertoire JMyron Examples dans /opt/processing-1.0.1/examples

Installation dans processing
$cp webcamxtra/ezcam/JMyron.jar /opt/processing-1.0.1/java/lib
$cp webcamxtra/ezcam/libJMyron.so /opt/processing-1.0.1/java/lib/i386


3.Création de pyMyron

Utilisation de SIP(v4.7.9) afin de créer des bindings python de la librairie python.

Compilation de SIP
[http://www.riverbankcomputing.co.uk/software/sip/download]
$cd sip-4.7.9
$python configure.py
$make
$sudo make install

Compilation de la lib Myron
edit webcamxtra/ezcam/Makefile.linux
all: Linux jniwrapper.o myron.o libJMyron.so JMyron.jar libMyron.so
libMyron.so: myron.o ezcam.o v4l2camera.o
g++ -shared -o libMyron.so myron.o ezcam.o v4l2Camera.o
$make

Création de pyMyron
dans pymyron copier myron.h et libMyron.so
creer myron.spi à partir de myron.h
creer configure.py comme suit


import os
import sipconfig
build_file = "myron.sbf"
config = sipconfig.Configuration()
os.system(" ".join([config.sip_bin, "-c", ".", "-b", build_file, "myron.sip"]))
makefile = sipconfig.SIPModuleMakefile(config, build_file)
makefile.extra_libs = ["Myron"]
makefile.extra_lib_dirs = ["."]
makefile.generate()


$python configure.py
$make

4.Test de pyMyron
export LD_LIBRARY_PATH=.
$python
>>import pyMyron
>>m=pyMyron.Myron()
>>m.start()
>>m.stop()
pour installer le module pyMyron: make install






Ressources
VIDEO

http://videocapture.sourceforge.net/
A Win32 Python Extension for Accessing Video Devices (e.g. a USB WebCam, a TV-Card, ...)


http://snippets.dzone.com/posts/show/4920
/ Python Motion Detection Library + Demo

http://janto.blogspot.com/2006/01/motion-capture-in-python.html

Myron
http://sourceforge.net/projects/webcamxtra

PYTHON AUDIO TOOLS
Sound toolkit
http://www.speech.kth.se/snack/

Python speech recognition with microsoft speech sdk
http://surguy.net/articles/speechrecognition.xml

speech0.5.1 is a Python module that provides a clean interface to Windows's voice recognition and text-to-speech capabilitie
http://pypi.python.org/pypi/speech/

The Festival Speech Synthesis System [TEXT TO SPEECH]
http://www.cstr.ed.ac.uk/projects/festival/
http://festvox.org/
PyFest 0.1 : ?

The CMU Sphinx Group Open Source Speech Recognition Engines
http://cmusphinx.sourceforge.net/html/cmusphinx.php

IBM Text to speech
http://www.research.ibm.com/tts/

samedi, janvier 24, 2009

Launcher : AzSMRC + Firefox + Ubuntu

Pour l'installation de AzSMRC sur ubuntu suivre le howto suivant : http://ubuntuforums.org/showthread.php?t=637160

Pour éviter le problème des fichiers torrents avec des noms d'espace,
modifier le script de lancement défini dans le howto par celui-ci :

#!/bin/sh
cd $HOME/AzSMRC
if [ "$1" != "" ]; then

parm="${1##*file://}"
java -classpath launcher.jar:/usr/local/lib -Djava.library.path=. lbms.tools.launcher.Launcher "$parm"

else
java -classpath launcher.jar:/usr/local/lib -Djava.library.path=. lbms.tools.launcher.Launcher
fi