mercredi, avril 14, 2010
Ubuntu Python Package Easy Install
installer le package ubuntu "python-setuptools" :
sudo apt-get install python-setuptools
installer le package ubuntu des libs de developpement python (optionel) pour compiler les dépendences des projets téléchargés depuis pypi :
sudo apt-get install python-dev
pour l'utiliser :
sudo easy_install packagename
lundi, avril 12, 2010
XBMC et Xubuntu 9.10 - Divers
Installation: http://wiki.xbmc.org/?title=HOW-TO_install_XBMC_for_Linux_on_Ubuntu_with_a_minimal_installation_step-by-step
SVN Repo installer contient une liste de depot svn de plugins XBMC
SVN Repo Installer toutes versions :
http://xbmc-addons.googlecode.com/svn/packages/plugins/programs/
Plugins XBMC notable (Depot present dans SVN Repo Installer):
pour les sous titres : http://code.google.com/p/dandar3-xbmc-addons/
SKIN Mediastream 1.75 :
http://www.mediafire.com/?qutmzw2ljai
mardi, décembre 08, 2009
Samba configuration
sudo testparm --show-all-parameters
mardi, novembre 03, 2009
Ubuntu - Proxy HTTP
* 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
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
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
- 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 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
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.
<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
<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
Routingorg.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
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
<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
http://support.microsoft.com/kb/315231
Voir les produits auxquels s'applique cet article
INTRODUCTIONCet article explique comment configurer Microsoft Windows XP pour qu'il automat...
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'informationsAvertissement Toute utilisation incorrecte de l'Éditeur du Registre peut générer...
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 :
- Cliquez sur Démarrer, sur Exécuter, tapez regedit, puis cliquez sur OK.
- Recherchez la clé de Registre suivante :HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon
- 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.
- 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 :- Dans l'Éditeur du Registre, cliquez sur Edition, sur Nouveau, puis sur Valeur chaîne.
- Tapez DefaultPassword comme nom de la valeur, puis appuyez sur ENTRÉE.
- 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.
- 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 :- Dans l'Éditeur du Registre, cliquez sur Edition, sur Nouveau, puis sur Valeur chaîne.
- Tapez AutoAdminLogon comme nom de la valeur, puis appuyez sur ENTRÉE.
- Double-cliquez sur la clé qui vient d'être créée, puis tapez 1 dans la zone Données de la valeur.
- Quittez l'Éditeur du Registre.
- Cliquez sur Démarrer, sur Redémarrer, puis cliquez sur OK.
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 :
Valeur :ForceAutoLogon
Type : REG_SZ
Données : 1
- Cliquez sur Démarrer, puis sur Exécuter.
- 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. - 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.
- 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.
- 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
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)
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
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 é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
mercredi, décembre 05, 2007
Elisa reads Youtube - Proof of concept
Snapshot CVS 2007-12-05
------------------------
Elisa
Pigment
gstreamer
gst-plugins
gst-plugins-base
gst-plugins-good
gst-plugins-bad
gst-plugins-ugly
gst-ffmpeg
code plugin you tube : here
Screencast :
jeudi, avril 05, 2007
Algo de flot - Un peu d'historique
The maximum flow problem is one of the most fundamental network problems and has been investigated extensively in the literature (for example, by Ford and Fulkerson 1956, Dinic 1970, Edmonds and Karp 1972, Karzanov 1974, Cherkasky 1977, Malhotra et. al 1978, Galil 1980, Galil and Naamad 1980, Sleator and Tarjan 1983, Gabow 1985, Goldberg 1985, Goldberg and Tarjan 1986, Ahuja and Orlin 1987). Efficient algorithms for computing maximum flows are important not only because they are applied directly to the analysis of traffic or communication networks, but are often employed in the subproblems of other network problems. Some of the network problems whose algorithms use the maximum flow algorithm as a subroutine are the time-cost tradeoff problem in CPM networks (Fulkerson 1961, Kelley 1961), the parametric network feasibility problem (Minieka 1972), the network design problem (Hu 1974) and the minimax transportation problem (Ahuja 1986). Moreover, it plays an important role in solving the minimum cost flow problem (Rock 1980, Tardos 1985, Bland and Jensen 1985). Recently, Goldberg and Tarjan (1987) have developed the fastest known algorithm for the minimum cost flow problem using an extension of their maximum flow algorithm as a major subroutine.
Ford and Fulkerson (1956) formulated the maximum flow problem and solved it using their augmenting path algorithm. Edmonds and Karp (1972) showed that by augmenting flows along shortest paths, the augmenting path algorithm runs in time O(nm 2 ) on networks with n nodes and m arcs. Independently, Dinic (1970) suggested an O(n 2 m) algorithm which proceeds by constructing shortest path networks (known as layered networks) and establishing blocking (or maximal) flows in these networks. Dinic's algorithm has been studied extensively by researchers who dramatically improved its worst case running time using sophisticated data structures. Most notable among these improvements is the 'dynamic trees' algorithm Their algorithm runs in O(nm log n) developed by Sleator and Tarjan (1983). steps. Gabow's (1985) scaling algorithm also uses Dinic's algorithm as a major subroutine.
Recently, Goldberg (1985) and Goldberg and Tarjan (1986) developed a new approach to solve the maximum flow problem that does not construct layered networks but instead maintains "distance labels". Informally, a distance label of a node is an integral lower bound on the length of the shortest augmenting path from that node to the sink. A distance label is called exact if it equals the length of the shortest augmenting path, and approximate otherwise. Distance labels have several advantages over layered networks. They are simpler to understand, easier to manipulate and have led to more efficient algorithms. We refer to algorithms that utilize distance labels as distance-directed algorithms. Goldberg (1985) developed the first distance-directed algorithm. Subsequently, Goldberg and Tarjan (1986) developed improved distance-directed algorithms. Currently, the fastest algorithm to solve the maximum flow problem, due to Ahuja and Orlin (1987a), is also a distance-directed algorithm. Its running time is O(nm + n 2 log U) steps, where U is an upper bound on the capacities of arcs directed from the source. So far all the proposed distance-directed algorithms have been preflow based algorithms, similar in essence to Karzanov's (1974) algorithm.
lundi, avril 04, 2005
Installation d'une plateforme de dev MSYS-MinGW
En quelques points résumés, la facon d'installer un environnement de développement complet sur windows..
1.Procédure d'installation d'une plateforme de développement MSYS/MINGW
Installation de MingGW
URL : http://www.mingw.org
Fichier : MinGW-3.1.0-1.exe
Folder : X:\mingw
Installation MSYS
URL : http://www.mingw.org
Info : Environnement posix sous win32 pour execution de script. Repose sur MingW
Fichier : MSYS-1.0.10.exe
Folder : X:\msys
Installation de MSYS Developer Tool Kit
URL : http://www.mingw.org/
Info : Divers outils supplémentaires dont automake, autoconf, libtool, autogen, guile, cvs, openssl, openssh, inetutils,perl ..
Fichier : msysDTK-1.0.1.exe
Folder : X:\msys
2.Exemple d'IDE Open-Source
Bloodshed Dev-C++
URL : http://www.bloodshed.net/devcpp.html
Fichier : devcpp-4.9.9.2_nomingw_setup.exe
3.Ressources
Mingw32 packages repository
URL : https://sourceforge.net/projects/mingwrep/
Info : Packages de librairies open-source compilées pour MinGW
GnuWin32
URL : http://gnuwin32.sourceforge.net/
Info : Fournit Win32 (MS Windows 95 / 98 / ME / NT / 2000 / XP) ports of tools with a GNU or similar open source license.
4.Divers
Chemin de recherche de gcc sous msys-mingw:
gcc -print-search-dirs
vendredi, mars 04, 2005
Python Distutils
Un résumé de comment utiliser le module distutils..
Python 2.4
EN COURS DE REDACTION
1.Afficher la liste des commandes distutils disponibles
python setup.py --help-commands
build build everything needed to install
build_py "build" pure Python modules (copy to build directory)
build_ext build C/C++ extensions (compile/link to build directory)
build_clib build C/C++ libraries used by Python extensions
build_scripts "build" scripts (copy and fixup #! line)
clean clean up output of 'build' command
install install everything from build directory
install_lib install all Python modules (extensions and pure Python)
install_headers install C/C++ header files
install_scripts install scripts (Python or otherwise)
install_data install data files
sdist create a source distribution (tarball, zip file, etc.)
bdist create a built (binary) distribution
bdist_dumb* create a "dumb" built distribution
bdist_rpm* create an RPM distribution
bdist_wininst* create an executable installer for MS Windows
* On utilisera plutot la commande --format adjointe à bdist ou sdist
register register the distribution with the Python package index
2.Créer un package pour distribuer un module sous forme dite *binaire*
Commandes :
python setup.py --bdist ( format par défaut fichier zip )
python setup.py --bdist --formats=zip fichier zip
python setup.py --bdist --formats=wininst fichier windows installer
Liste des formats de distributions :
python setup.py --bdist --help-formats
3.Créer un package pour distribuer les sources d'un module
Commandes :
python setup.py --sdist ( format par défaut fichier zip )
python setup.py --sdist --formats=zip fichier zip
python setup.py --sdist --formats=wininst fichier windows installer
Liste des formats de distributions :
python setup.py --sdist --help-formats
Résultat :
Une arborescence contenant les sources du module
manifest (log d'exécution de la commande sdist)
dist\name-version\
package1\ (les différents packages embarqués)
package2\
PKG-INFO (fichier d'information constitué d'infos de setup.py)
setup.py (le fichier setup.py qui a été exécuté)
readme.txt (copie d'un fichier readme.txt si présent au meme niveau que setup.py)
Remarques :
- La commande sdist ne prend pas en compte les fichiers déclarés dans data_files
Le fichier setup.py des différents cas
from distutils.core import setup
from glob import glob
import os
import sys
setup(name="VoileIRC-API",
version="0.36",
description="VoileIRC Packaging : API IRC",
author="NoMorgan",
author_email=nomorgan@toto.com,
url=http://www.toto.net/corailnumerique,
packages=["voileirc","voileirc.config","voileirc.error","voileirc.event","voileirc.irc",
"voileirc.log","voileirc.net","voileirc.security","voileirc.tools",
"voileirc.web","voileirc.ia"],
package_dir={"voileirc":"voileirc"},
data_files=[(get_python_lib().split(sys.prefix)[1] + "\\voileirc", ['voileirc/README.txt']), (get_python_lib().split(sys.prefix)[1] + "\\voileirc\\data", ['voileirc/data/log.ini','voileirc/data/test.xml'])] )
packages : Liste des modules et sous-modules concernés par la commande
package_dir : chemin depuis le répertoire courant, c-a-d celui où se trouve setup.py, pour trouver les différents modules cités dans packages. Si certains sont des sous-modules, il n'est nécessaire que de préciser le chemin du module parent.
data_files : Liste de fichiers considérés comme des données du module. (par exemple : fichier image, xml ..)