Catégories
E-mobilité Paramétrage

Nitdroid et power-kernel

L’installation automatique de Nitdroid supprime des paquets incompatibles. En plus du menu de démarrage il semble aussi supprimer le noyau dit « power » permettant notement d’overclocker le N900.

Heureusement il suffit de lancer les commandes suivantes pour retrouver le power-kernel accessible depuis le menu de démarrage.

apt-get install kernel-power-bootimg kernel-power-modules
apt-get install multiboot-kernel-power

Catégories
E-mobilité Paramétrage

Installation Android sur N900 sur micro SD de 2Go

Nitdroid est le portage d’Android sur N900. L’installation est facilitée par un script qui s’installe par un

sudo gainroot
apt-get install nitdroid-installer

Ensuite faire

nitdroid

La procédure va alors échouer sur le formattage de la partition linux de la carte sd. En effet le script s’attend à avoir une carte sd avec une partition windows (vfat) et de l’espace libre pour une partition linux (ext3). Il faut donc au préalable, partitionner correctement la carte puisque les cartes vendues sont déja partitionnées avec une seule partition vfat qui prend tout l’espace.
Comme il faut un peut moins de 2 Go pour la partition linux, il suffit comme indiqué dans la procédure manuelle de faire

sfdisk -uM /dev/mmcblk1

Puis rentrer quand sfdisk demande la partition mmcblkp1

,1M,

Enfin faites entrée pour les autres partitions qui normalement seront vides.
N’oubliez pas de répondre par y à la question finale.

Maintenant refaire

sudo gainrooot
nitdroid

Catégories
Application Paramétrage

Monitorer une machine Linux avec le N900

Surveiller une machine Linux peut se faire avec différent logiciel. Nous choisissons Munin pour sa simplicité « out of the box » sur une distribution Ubuntu. Aussitôt installé, on dispose de jolies graphiques pour suivre l’état du système dans un navigateur.

L’application Munin permet par ailleurs d’envoyer des alertes quand une variable sort d’une limite prédéfinie. L’alerte peut être un mail ou un script appelé par Munin. L’avantage du mail est qu’il ne nécessite aucun développement pour être mis en oeuvre. Le client mail du N900 se chargeant de faire la notification. Le mail présente aussi l’avantage de pouvoir être lu en asynchrone mais le gros désavantage c’est que une fois faite la notification de l’arrivée d’un nouveau message, l’utilisateur qui est submergé de mail risque de ne pas prendre en compte une alerte au fin fond de sa boîte de réception.

Des améliorations au mail peuvent être trouvées par l’utilisation d’une boîte dédiée par exemple mais cela ne change pas le problème de fond: une alerte doit être visible et se signaler en permanence. L’idée du voyant vert qui passe au rouge s’impose et ce voyant ne doit pas être une application mais un widget sur le bureau.

Il nous faut donc faire le lien entre les informations que Munin produit avec le bureau Hildon. Le monde Linux à alors de nombreux atouts. Contrairement au monde Microsoft/Window où la facilité d’entrée permet au tout venant de faire des applications qui seront mal conçues, Linux à cause d’une barrière d’entrée plus élevée et, grâce à l’open-source et le libre, crée des applications mieux conçus et plus modulaires. Ainsi dans notre cas, surveiller un serveur Linux équipé de Munin via un mobile sous Maemo 5 est un jeu d’enfant.

Tout d’abord on peut laisser en place la notification par mail et décider de se spammer pour les alertes critiques. Ensuite on s’aperçoit que les pages web générées par Munin ne contiennent aucune information textuelle sur l’état du serveur: Munin produit des graphiques sous forme d’images. Mais les développeurs de munin ont bien architecturé l’application. Ainsi dans le fichier /var/lib/munin/limits il y a l’état de toutes les sondes surveillées en texte. Il suffit de le rendre disponible depuis le web pour que le N900 mette à jour les widgets.

De même historiquement les utilisateurs de Linux sont plus conscients de leur informatique et l’outillage de l’administrateur est un souci permanent voire même le premier souci puisque un système qui n’est pas bien administré, fonctionnera mal et ne sera pas utilisé ! Donc il n’est pas étonnant de voir parmi les applications produites par la communauté pour le N900, un grand nombre d’applications d’administration parmi lesquelles Queen BeeCon Widget (QBW). Ce dernier se présente sous la forme de petits widget dont la couleur change en fonction du code de sortie d’une commande arbitraire. Il y a par défaut 3 états:

  • icône verte quand le code de sortie est 0
  • icône orange quand le code de sortie est 1
  • icône rouge quand le code de sortie est 2

Commençons par la validation da la connectivité. Il s’agit de faire un simple ping sur le serveur. Dans le cas d’un serveur derrière un routeur, on se contentera d’un ping sur le routeur. Il suffit de créer un widget QBW avec pour commande:

tokenfound=`sudo ping -c 1 -q 127.0.0.1 | grep "1 packets received" | wc -l'`;
if [ $tokenfound -eq 1 ]; then echo "OK"; exit 0; else  echo "KO"; exit 2; fi

remplacer l’ip 127.0.0.1 par celle du serveur ou celui du routeur (adresse externe)

Pour vérifier que le serveur web répond du point de vue d’un utilisateur réel, il suffit de s’assurer que le résultat d’une url de référence contient bien un mot-clé. Dans le cas d’un apache fraichement installé on peut vérifier que la page racine contient bien « It works ». Voici la commande qui sera associée au widget QBW:

tokenfound=`wget -O - -T 3 -t 1 -q http://127.0.0.1/ | grep "It works" | wc -l'`; if [ $tokenfound -eq 1 ];
then echo "OK"; exit 0; else echo "KO"; exit 2; fi

Dès lors que le serveur est joignable et que le serveur web apache répond, on peut vérifier que les pages html générées par munin sont présentes. Voci la commande pour QBW:

tokenfound=`wget -O - -T 3 -t 1 -q http://127.0.0.1/munin | grep "This page was generated by
<a href="http://munin-monitoring.org/">Munin</a> version 1.4.4" | wc -l`; if [ $tokenfound -eq 1 ];
then echo "OK"; exit 0; else echo "KO"; exit 2; fi

Bien sûr le script précédent gagnerait à vérifier la date de mise à jour de la page !

Une fois que le fonctionnement de munin est acté, on peut passer en revue les sondes intéressantes dans la surveillance du serveur. Prenons l’exemple des sonde de température. Disons que l’on veut surveiller toutes sondes confondues si au moins l’une pose un problème. Dans le cas d’une sonde munin on peut avoir envie d’accéder au graphique de la sonde. Disons que lorsque l’on tape sur le radar du widget, le navigateur s’ouvre sur le graphique de la sonde. Il suffit de créer un widget avec la commande:

if [ $QBW_HOTSPOT_PRESS -eq 9 ]; then dbus-send --system --type=method_call --dest=com.nokia.osso_browser
/com/nokia/osso_browser/request com.nokia.osso_browser.load_url
string:"127.0.0.1/munin/localdomain/localhost.localdomain/sensors_temp-day.png"; fi;
limits_file=/home/user/limits_sensors_temp; wget -O - -T 3 -t 1 -q http://127.0.0.1/munin/limits
| grep sensors_temp > $limits_file; if [ $? -ne 0 ]; then echo "??"; exit 1; fi;
tokencount=`cat $limits_file | grep "critical" | wc -l`; if [ $tokencount -gt 0 ]; then echo "critical";
exit 2; else tokencount=`cat $limits_file | grep "warning" | wc -l`; if [ $tokencount -gt 0 ];
then echo "warning"; exit 1; else echo "OK"; exit 0; fi;fi
Catégories
Application E-mobilité

Geocaching

Le geocaching est un jeu de recherche de cache tout autour du globe. L’application GPXView pour N900 permet visualiser les cartes fournies par le site officiel Geocaching. En créant un compte gratuit sur le site, on peut télécharger les localisations des cachettes à la main mais il est plus pratique d’installler Geotoad qui sera utilisé par GPXView pour télécharger les cachettes.

L’application GPXView est très conviviale. La recherche des cachettes se fait via le menu tool > geotaod où l’on peut filtrer par distance autour de la position GPS actuelle ou un point sur la carte. Le processus de requêtage du site geocaching peut être long mais cette opération est effectuée une seule fois puis les informations sont stockée en local sur le N900.

Téléchargements des localisations des caches

Une fois une base de cachette en place, GPXView affiche la liste des cachettes par ordre de proximité avec la position GPS actuelle. Quand on sélectionne un cache, on accède aux informations qui la concerne comme la taille de la cache, sa position, sa distance et la direction jusqu’à elle. Le bouton goto affiche une boussole et optionnellement une indication sonore de la distance.

Liste des cache à proximité

Détail d'une cache

Guidage vers la cache4rr4

Carte de la chasse au trésor

Le geocaching permet de découvrir des lieux et c’est une activité très amusante à faire en famille. La difficulté des caches prend en compte également la difficulté du terrain.

Catégories
Langage

Multithreading avec GTK en python sur N900

Une application sous linux en python telle que Caritang doit résoudre le problème de réactivité de l’interface utilisateur en prenant en compte les spécificités suivantes:

  1. la thread principale qui execute GTK
  2. l’interpréteur python
  3. le serveur X

Une IHM se doit d’être réactive. Toute action de l’utilisateur doit provoquer une réponse immédiate de l’IHM. Or la mise à jour de l’IHM se fait quand la thread principal qui execute la boocle gtk sort du code appelé par l’évènement de l’interface graphique. Autrement dit ce n’est que lorsque le code créeé par le programmeur pour effectuer l’action est terminé qu’on est sûr que l’IHM sera mis à jour. Donc si le code de l’action n’est pas trés rapide alors on va monopoliser la thread principale de gtk à faire de l’applicatif au lieu de faire de l’IHM.
Quand on veut effectuer un traitement long, il faut lancer une thread dédiée à ce traitement afin de libérer la thread principale. Plusieurs techniques existent: on peut utiliser les fonctions utilitaires de gobject comme timeout_add ou bien une classe Timer ou alors créer soit même une Thread.
Quelque soit la technique il faut néanmoins indiquer à gtk qu’il va s,exécuter en multithreading en invoquant gtk.gdk.threads_init()

Libérer la thread principal permet à GTK de mettre à jour l’IHM. Ainsi si la thread du traitement modifie le texte d’un gtk.Label, la thread de GTK pourra mettre à jour l’IHM. Inversement l’IHM étant disponible, l’utilisateur peut demander la fermeture de l’application. Dans ce cas que se passe-t-il pour la thread de traitement? Soit elle continue en empêchant la fermeture du programme soit elle est brûtalement arrétée si elle est marquée comme deamon. Ce dernier cas n’est pas la meilleur solution car il entraine des erreurs dans la thread de traitement. Ainsi durant l’arrêt de l’interpréteur python, la thread de traitement se retrouve dépourvu des variables locales ou d’instances.
L’idéal est d’envoyer un signal à la tread de traitement pour qu’elle se termine proprement.

Enfin le serveur X (peut?) n’est pas « thread safe ». Malgrès tout ce qui précède il se peut que le thread principale de GTK accède à l’IHM en même temps que la thread de traitement. Une simple modification du texte d’un gtk.Label provoquera de manière aléatoire une erreur dans XLib. La solution est de protéger (synchroniser) les accès aux composants graphiques en encadrant toute modification de l’IHM dans la thread de traitement par gtk.gdk.threads_enter() et gtk.gdk.threads_leave()

Catégories
Paramétrage

Ajout d’un programme dans Hildon

Hildon est le nom de l’interface graphique du N900. Toute application qui veut s’intégrer à l’interface doit avoir une entrée dans la liste des programmes. Pour cela il n’est pas nécessaire de fabriquer une application « packagée » sous forme de paquet debian. Une simple installation de module python fait l’affaire.

La principale chose à faire est del créer un fichier du nom de l’application. Supposons que l’application s’appelle zourite. Il faut alors créer un fichier
/usr/share/applications/hildon/zourite.desktop
dont le contenu minimal sera:
[Desktop Entry]
Encoding=UTF-8
Version=1.0
Type=Application
Name=Zourite
Exec=/usr/bin/zourite

La ligne Exec peut contenir une ligne de commande complète avec argument telle que /usr/bin/caritang -g

Ce fichier suffit pour que Hildon ajoute une entrée dans la liste des programmes.
Liste des applications dans Hildon

Maintenant si on veut que Hildon affiche une jolie icone, il faut la lui fournir. Avec le fichier .desktop minimaliste, hildon va rechercher les icones à l’emplcement par défaut sous le nom par défaut, à savoir:

/usr/share/icons/hicolor/48x48/hildon/zourite.png
/usr/share/icons/hicolor/64x64/hildon/zourite.png

Avec un minimum d’effort il est maintenant possible d’ajouter un raccourci sur le bureau.

Ajout d'un raccourci sur le bureau Hildon

Catégories
Langage

Upload de vidéo sur Picasa en python

L’utilitaire caritang a pour objectif de permettre la sauvegarde des documents du N900 vers google docs. Mais il s’avère que picasa est plus adapté pour les média enregistrés avec la caméra du terminal qu’il s’agisse de photo ou de vidéo.

L’api gdata en version 2.0.9 permet depuis python de manipuler un compte picasa. Malheureusement la version de l’api picasa implémentée est la 1.0 alors que la 2.0 qui n’existe pas en python est la seule qui autorise l’envoi de vidéo.

Une impasse pour les vidéo ? Non, car le mécanisme d’envoi de vidéo est en fait, d’après la documentation de la 2.0, similaire à celui des photos modulo le type mime. Un test en utilisant le binding python officiel et en passant le type mime video/mp4 montre que le module gdata.photos.service vérifie que le type mime est bien une photo.

C’est la que la nature dynamique de python nous sauve. Il suffit de changer la liste (supposée être une constante) des type de fichier autorisés.

gdata.photos.service.SUPPORTED_UPLOAD_TYPES = gdata.photos.service.SUPPORTED_UPLOAD_TYPES + ("mp4",)

Dans la cas particulier du N900 l’obtention du type mime par le module mimetools echoue sur les mp4. Là encore on peut ajouter le type mime video/mp4 au module par une instruction

mimetypes.add_type("video/mp4", ".mp4")

Catégories
Langage

Upload de vidéo sur Picasa en python

L’utilitaire caritang a pour objectif de permettre la sauvegarde des documents du N900 vers google docs. Mais il s’avère que picasa est plus adapté pour les média enregistrés avec la caméra du terminal qu’il s’agisse de photo ou de vidéo.

L’api gdata en version 2.0.9 permet depuis python de manipuler un compte picasa. Malheureusement la version de l’api picasa implémenté est la 1.0 alors que la 2.0 qui n’existe pas en python est la seule qui autorise l’envoi de vidéo.

Une impasse pour les vidéo ? Non, car le mécanisme d’envoi de vidéo est en fait, d’après la documentation de la 2.0, similaire à celui des photos modulo le type mime. Un test en utilisant le binding python officiel et en passant le type mime video/mp4 montre que le module gdata.photos.service vérifie que le type mime est bien une photo.

C’est la que la nature dynamique de python nous sauve. Il suffit de changer la liste (supposée être une constante) des type de fichier autorisés.

gdata.photos.service.SUPPORTED_UPLOAD_TYPES = gdata.photos.service.SUPPORTED_UPLOAD_TYPES + ("mp4",)

Dans la cas particulier du N900 l’obtention du type mime par la module mimetools echoue sur les mp4. Là encore on peut ajouter le type mime video/mp4 au module par une instruction

mimetypes.add_type("video/mp4", ".mp4")

Catégories
Gestion de projet

Packaging d’application python sous maemo 5

Dans le monde java, le packaging d’application est dicté par les standard java. On fait des JAR, des WAR, des EAR… L’ecosystème étant borné par la JVM et le conteneur (web ou ejb), la question du livrable ne se pose guère. Mais en python sous linux comment fait-on ?

La première idée est de générer un paquet pour la distribution cible. En l’occurence il s’agissait de l’application Zourite pour N900. On s’oriente donc vers la création de paquet debian. La création de paquet peut se faire via l’IDE Esbox. Cependant cela n’est pas si simple et un ignorant en packaging linux-debian n’y arrive pas sans faire un petit tour sur le site de debian pour se rendre compte que la création de paquet s’apparante à la création de distribution et que c’est un rôle distinct de celui de développeur d’application.

Heureusement que python (à ma grande surprise pour un vieux langage) dispose d’un écosystème riche à la java. Python inclut un mecanisme de création de livrable par le biais du fameux fichier setup.py. Un détour par la documentation en ligne et un peu de persévérence permet d’arriver à ses fins.

Le fichier setup.py contient la description du paquet python. Il est conseillé d’avoir au préalable organisé les sources du projet en modules dans un paquet dédié. Cela permettra d’embarquer tous les fichiers dans le paquet (répertoire) d’installation. Le fichier setup.py peut installer également des scripts de lancement du programme python. Ces scripts sont eux-même des script python qui pourront changer le répertoire courant du processus pour se rendre dans le répertoire du paquet de l’application afin que l’execution se passe comme en développement.

Voici un exemple de fichier setup.py:

# -*- encoding: UTF-8 -*-
'''
Created on 30 mars 2010

@author: thierry
'''
from distutils.core import setup
setup(name='zourite',
version='0.1.0',
package_dir = {'': 'src'},
packages=['zourite',
'zourite.common',
'zourite.core',
'zourite.gui',
'zourite.plugin',
'zourite.plugin.gmail',
'zourite.plugin.linkedin'],
scripts=['scripts/zourite','scripts/zourite-setup'],
package_data={'zourite': ['*.png']},
author='Thierry Bressure',
author_email='thierry@bressure.net',
maintainer='Thierry Bressure',
maintainer_email='zourite@bressure.net',
url='http://blog.zourite.bressure.net',
download_url='http://zourite.bressure.net',
description='Zourite Professional Networking Application for N900',
long_description='Zourite is a client for professional Network like LinkedIn. You can stay connected to your contacts and manage you network.',
classifiers=[
'Development Status :: 1',
'Environment :: Hildon',
'Environment :: Maemo',
'Intended Audience :: End Users/Desktop',
'Intended Audience :: Developers',
'License :: OSI Approved :: LGPL',
'Operating System :: Maemo :: Maemo 5',
'Programming Language :: Python',
'Topic :: Communications :: Email',
'Topic :: Office/Business',
],

)

Catégories
Application

Sauvegarde des documents N900 sur google doc

Google propose depuis peu de stocker tout type de document sur son service Google Docs. Si la capacité est limitée à 1 Go dans sa version gratuite, pour 5 $ on passe à 20 Go. Cette capacité est alors assez confortable pour stocker les documents et média enregistrés avec la caméra du terminal. Cependanr pouquoi payer alors qu’un compte gmail offre déjà un quota de 7 Go? Parce que gmail a une limite de taille de pièce jointe à 20 Mo alors que google docs pousse la taille max des documents à 250 Mo.

Une recherche sur… Google nous montre qu’une solutions existe pour le N900 en couplant 2 logiciels: Petrovich et Pixelpipe. Mais l’idéal serait un mécanisme automatisée. Autrefois je m’aurais tourné vers un développement Java mais le temps est au Python. Cela tombe bien puisque google fournit une implémentation Python de son API gdata.

Un premier parcours de cette API montre qu’elle permet d’accéder à presque tous les services de Google depuis la base de contacts jusqu’à Youtube. Cela ouvre des perspectives pour les développeurs.

En revenant sur la problématique de sauvegarde, on peut imaginer écrire un script python qui prend les fichiers contenus dans les réepertoires DCIM des partitions pour les mettre dans google docs. Il faudrait prévoir la création d’un répertoires N900 dans google docs afin de bien identifier ces fichiers.

Pour finir ce billet, je dirai que même si mon propos est orienté vers le N900, un tel scripte python marche aussi sur tout autre de bureau.