Catégories
Application E-mobilité Langage

Autorotation des applications Python sous Maemo 5

A screenshot of the Maemo interface on a Nokia...
Image via Wikipedia

La rotation de l’affichage suivant l’orientation du terminal est devenue depuis la PR1.3 une fonctionnalité intégrée au bureau Hildon, si bien que toutes les applications sont encouragées à proposer également la rotation de leur IHM suivant la position du mobile.

La gestion de l’orientation se fait par interception et appel à l’Hardware Abstract Layer (HAL) par le D-Bus. Cela peut en rebuter plus d’un, mais heureusement un hacker (comprendre développeur) australien, Thomas Perl, propose une classe python qui s’occupe de la gestion de l’orientation. Cette classe fait partie de la version maemo5 de gPodder et est disponible en GPL3. C’est donc avec bonheur que toutes les applications python sous Maemo 5 (évidement en GPL3) peuvent accéder à l’autorotation.

La classe en elle-même possède un dépendance sur gpodder et il faudra alors modifier 2 lignes de code relatives à l’internationalisation afin de la réutiliser dans sa propre application. C’est ce que j’ai fait pour ajouter l’autorotation à Gnatirac.

Le libre c’est bon !

Catégories
Gestion de projet Langage

Prototype d’application python pour Maemo 5

Often called "albino", this amelanis...
Image via Wikipedia

La mise en place d’un nouveau projet python pour Maemo5 est consitituée de plusieurs étapes:

  1. création du référentiel de sources: ex: subversion chez google code
  2. création du projet sous ESBox
  3. ajout des fichiers pour setuptool
  4. ajout de l’arborescence initiale du projet (architecture)
  5. import des sources dans le référentiel
  6. enregistrement du projet sur PYPI
  7. création du site du projet: ex: blog chez blogspot
  8. création du groupe de discussion: ex: google group

La création des fichiers initiaux est une tâche rébarbative mais nécessaire pour d’une part industrialiser la production (build, déploiement et d’autre part assurer la qualité du code (architecture en couche, réutilisation…). D’un projet à l’autre ces étapes ne diffèrent que par les caractéristiques du projet:

  • Nom du projet
  • Nom de l’auteur
  • Licence du projet
  • Date de création
  • Nom de certaines classes etc.

En somme la phase d’initialisation du projet doit pouvoir s’automatiser. Un peu à la manière des archétypes maven, il serait intéressant de pouvoir générer à l’aide d’une commande (et d’un assistant) le squelette d’un nouveau projet qui compile et s’exécute !

Le projet Pyjama est sans doute le dernier que je crée par copier/coller d’un projet précédent. Pyjama doit en effet permettre la création de projet via une simple commande.

Catégories
Application E-mobilité

Client Picasa pour N900

English: Nokia N900 smartphone (display shows ...
Image via Wikipedia

Le N900 dispose d’une grande capacité de stockage (27 Go) mais cela n’élude pas le besoin de sauvegarde externe qui peut se faire par un script utilisant rsync automatisé par alarmed ou bien par l’utilitaire Caritang qui permet de transférer les médias (photo et vidéo) sur Picasa.

Nous nous intéressons au cas où les médias sont archivés sur Picasa. La consultation des médias ne peut pas se faire aisément sur le terminal. En effet, la version complète utilise un style d’affichage prévu pour les écrans d’ordinateur et non pas pour le petit écran du N900. De plus l’utilisation des javascript mettent déjà à mal la puissance faiblarde du N900 dont le CPU plafonne à 600 Mhz (voire 800 Mhz par overclocking) et l’avènement de nouvelles technologies telles que HTML5 vont rendre le navigateur du N900 inopérant sur les nouveaux sites. Finalement l’utilisation de la version web de picasa n’est donc pas une solution viable.

Un client spécific permettrait d’utiliser correctement les possibilités du terminal (écran, cpu) afin de rendre accessible les média archivés. Mais il semble que ce besoin n’ait pas eu d’écho dans la communauté des développeurs Maemo5: il n’y a pas d’application cliente Picasa pour le N900 ! Alors j’en ai développé une: Gnatirac. Gnatirac utilise le binding python de l’API Gdata pour Picasa Web et permet de naviguer dans les albums et les photos d’un compte picasa. Voilà, le N900 dispose de son client Picasa.

Catégories
Langage

Créer un widget GTK en python sous Maemo5

GTK Widgets
Image by crafterm via Flickr

Dans le développement de Maegen j’ai eu envie de créer une vue affichant l’arbe généalogique de manière arborescente. Pour cela j’ai utilisé un gtk.DrawingArea dans lequel je dessine l’arbre. Les méthodes de dessin et les diverses variables sont portées par la fenêtre qui contient le gtk.DrawingArea.

L’envie de réutiliser cette arbre ailleur qu’en pleine fenêtre m’invite à en faire un widget à part entière que je pourrai mettre dans une fenêtre ou tout autre widget conteneur.

Le site learningpython montre un exemple de création de widget personnalisé et l’exemple fonctionne quasiment parfaitement sur Ubuntu 11.04. Quasiment car le widget ne s’affiche que si on redimensionne la fenêtre. Je me lance alors dans un refatoring pour extraire le code de dessin et le mettre dans une classe dérivant de gtk.Widget. Voir le code ici.

Le premier problème vient d’une inattention fébrile à l’idée de créer mon premier widget… L’oublie de la ligne suivante:

# register the class as a Gtk widget
gobject.type_register(MyOwnWidgetClass)

qui est obligatoire sinon la méthode __init__() de la classe gtk.Widget refuse de s’éxécuter sur la classe dérivée.

Malheueusement une fois cette ligne ajoutée, le widget reste définivement vide sans le moindre petit arbre dedans. En y regardant de plus près, la méthode do_expose_event() n’est pas appelée. Cela est encore pour moi un mystère…

Quoiqu’il en soit il y a un contournement qui consiste à dériver de gtk.DrawingArea pour créer mon widget. Cette solution est sans doute la plus simple compte tenu du fait que mon code de départ manipule un DrawingArea ! Le site suivant montre une telle réalisation : zetcode.com

Catégories
Gestion de projet Langage

Google Data API 2.0.15 et Maemo5 en python

.AVI en el N900Maegen, une application de généalogie pour Maemo5/N900 utilise le service googlecode de google pour la soumission de bug. Pour cela Maegen se base sur la librairie gdata fournie par google. Le code de rapport de bug a été écrit il y a plus d’un an et suppose que la version de gdata soit la 2.0.9 alors que la version courante est la 2.0.15

Ayant testé Maegen sur des machines différentes sur lesquelles des versions récentes de gdata étaient installées, je pensais qu’une dépendance de type au moins la 2.0.9 était une solution valable. Cela donne dans le fichier setup.py

setup(... install_requires=["gdata>=2.0.9"], ...)

Tout semblait marcher correctement puisque à la fois sur le terminal et les machines de développement (Virtual Appliance Maemo SDK), Maegen s’executait correctement, jusqu’à ce que je décide de passer sur une machine vierge (Virtual Appliance Maemo SDK) où jamais gdata n’avait été installé. Et là ce fut le drame, Maegen ne fonctionnait plus. La faute à gdata introuvable.

Une première solution est provoquer l’installation des dépendances. Pour cela se mettre sous l’environnement de compilation croisée

scratchbox

puis se placer dans le répertoire du projet

cd workspace/maegen

et enfin lancer une installation

python2.5 setup.py install

Lorsque les lignes cabalistiques ont fini de défiler, on remarque que gdata 2.0.15 a été installé. Le lancement de Maegen echoue cette fois sur l’absence du paquet json !

D’où vient le problème ? En regardant la version de gdata sur les machine où Maegen fonctionne, je remarque alors une différence: c’est la 2.0.14. Je désinstalle donc gdata 2.0.15 et installe la 2.0.14 à partir des sources dans scratchbox et là le miracle se produit: Maegen reprend vie !

En comparant le module gdata.gauth.py entre la 2.0.14 et la 2.0.15, on constate que des tentatives d’imports de json sont effectués à partir de la ligne 64 et finalement suppose que python 2.6 est utlisé en essyant un ultime import json, ce qui malheureusement échouera lamentablement sur le N900 qui ne dispose que de python 2.5 !

Voilà, le mystère est résolu, à moins de rajouter une dépendance vers json, je doit me résoudre à ne pas utliser la dernière version de gdata. Pour cela la directive de dépendance dans le fichier setup.py devient:

install_requires=["gdata>=2.0.9, <=2.0.14"]

En conclusion, les dépendances externes doivent être utiliser avec parcimonie et on doit éviter les dépendances ouvertes en leur préférant une dépendance exacte si possible. En effet moins il y a de dépendance, plus l’application est autonome et légère avec des risque de conflit de version en moins. De plus les dépendances ouvertes ouvrent la porte à une régression apportée par une nouvelle version.

Catégories
Application E-mobilité

Application généalogique sous Maemo 5/N900

Le N900 est un vieux smartphone qui ne bénéficie plus de l’attention de la communauté Maemo comme à ses débuts fin 2009. Il n’en reste pas moins à mon sens la machine improbable que tous les développeurs du libre et de l’open-source n’avaient osé espérer même si les puristes bouderont leur plaisir en arguant que certains composants du N900 sont propriétaires. Les alternatives comme openmoko ne sont pas au niveau technique ni d’ergonomie du N900.

Même si il s’agit d’une plateforme appelée à mourir, il y a encore des utilisateurs qui comme moi n’hésitent pas à se retrousser la chemise pour développer l’application manquante répondant à leur besoin. En l’occurrence il s’agit d’une application de saisie de relevés généalogique que j’ai appelé sans grande originalité Maegen.

Maegen permet la saisie des informations en mobilité puis de faire leur exportation au format GEDCOM pour les integrer dans tout autre logiciel final. L’interface de Maegen est spécifique au N900 ce qui lui permet d’être plus pratique qu’une application pure GTK de PC que le N900 peut exécuter. La contrepartie est que Maegen se concentre sur les données essentielles permettant de crééer des individus et leur relations.

L’application est disponible sur l’index des paquet python Pypi et dispose d’un Blog. L’installation se fait facilement pourvu que l’on dipose de easy_install sur le terminal. Il suffit alors de faire en temps que root

easy_install maegen

Actuellement l’application est utilisable pour des saisies basiques, l’export GEDCOM fonctionne, le tracé de l’arbre également. Une évolution possible serait l’utilisation du cœur de GRAMPS afin de bénéficier de l’expérience de ce projet et de mutualiser les efforts.

Catégories
Application E-mobilité

Retour de subversion sur le N900

The view of the front of a Nokia N900
Image via Wikipedia

L’évolution des distributions Linux consiste principalement à s’assurer que les divers logiciels puissent cohabiter entre eux, notamment en vérifiant les dépendances des logiciels vis-à-vis des librairies. Ainsi une simple incompatibilité d’un logiciel avec la version d’une librairie centrale ou d’un logiciel phare de la distribution suffit à écarter celui-ci.

Sous Maemo 5, il existe un paquet subversion qui a cessé de fonctionner depuis une récente mise à jour (PR1.3?). En effet subversion crash sur un segmentation fault. La raison en est la dépendance de subversion vis-à-vis de la librairie APR (Apache Portable Runtime) qui a changé de version mais est devenu incompatible avec le paquet subversion.

Malheureusement le paquet subversion pour N900 est devenu orphelin. Son mainteneur ne va pas repackager une version compatible avec la dernière version de la distribution du système (voir ce thread sur le forum maemo.org). Heureusement que le système de gestion de paquet permet de forcer la version des librairies … Au risque d’introduire de nouvelles incompatibilié.

Ainsi pour refaire fonctionner subversion il suffit de lancer la commande suivante en root

apt-get install libaprutil1=1.3.9-2 libapr1=1.4.2-1

Les versions sont celles qui fonctionnaient avec le paquet subversion pour Maemo 5 au moment où il a été créé.

Catégories
Application

Plus de subversion pour Maemo

Maemo 5 Screenshot
Image via Wikipedia

Il y a quelques temps, j’ai développé des programmes pour mon N900 en utilisant l’environnement ESBox qui est un Eclipse avec tous les plugins adéquoits. La seule chose qui manquait était la présence du client subversion (ou tout autre SCM) dans l’edtiteur. Mais cela n’était qu’une problème passager car il suffisait d’installer via Eclipse les bons plugins. De même sur le terminal, je souhaitais avoir accès au dépôt de source et l’installation du client subversion via un apt-get me donnait alors toute satisfaction.

Mais voilà, le N900 est le dernier de la famille Maemo car Nokia est passé sous le giron de Microsoft… cela s’en ressent dans l’environnement de développement. En effet la dernière version de la Virtual Appliance (Machine Virtuelle dont le but est d’embarquer un ESBox déjà configuré), le support de subversion est cassé. Il ne s’agit d’ailleurs pas de subversion spécifiquement, car toute mise à jour ou ajout de plugin semble cassé. Il m’est donc devenu impossible d’utiliser l’intégration d’éclipse dans ESBox. Cela m’oblige à passer en ligne de commande pour exécuter des svn status, svn add, svn commit… un poil moins sympathique qu’un clic dans Eclipse.

De plus, le client subversion du terminal ne fonctionne plus non plus. Toute commande svn provoque un segmentation fault. Une solution glaneé sur le forum de maemo.org propose une installation de subversion depuis les sources mais cela n’a pas fonctionné chez moi. Je dois ssans doute mal m’y prendre car non habitué à la compilation d’application native sous Linux.

Le retour dans le panier de python est un peu décevant mais c’est le prix de la liberté !

Catégories
Application

Transfert des photos et vidéos du N900 vers un DVD

DVD-R bottom side
Image via Wikipedia

Le N900 permet de prendre des photos en 2576×1936 et des vidéos en 848×480. Ces résolutions sont plus que suffisantes pour produire des DVD contenant film et diaporama. Ce billet montre comment réaliser un DVD vidéo à partir de ces fichiers en utilisant des logiciels libres.

Le logiciel Imagination disponible dans le dépôt d’Ubuntu s’acquittera de la tâche de transformation des photos en diaporama. Il propose la rotation des photos manuellement (ne lit pas les données exif), l’ajout de transitions parmi plusieurs dizaines et d’ajoindre une bande son musical au diaporama (plusieurs formats sont supportés). Le diaporama produit s’exporte diretement en fichier VOB.

Les fichiers vidéo produits par le N900 sont au format en MPEG4. Le transcodage en MPEG2 utilisé par le DVD se fera avec l’outil ffmpeg. Supposons que l’on veuille transcoder le fichier 20110717_078.mp4, il faudra faire:


ffmpeg -i 20110717_078.mp4 -f pal-dvd 20110717_078.mpeg

La mise en forme des vidéos (découpage, concaténation, transition…) se fera avec l’incontournable Cinelerra. On fera attention à ne pas prendre en entrée les fichiers MP4 brutes du N900 car leur manipulation par le logiciel est lourde et le rendu sonore des vidéos incorrect (son coupé). Il faut prendre en entré les vidéos déjà transformées en MPEG2. Une fois le montage effetué, il faut exporter c’est-à-dire effectuer le rendu de la vidéo. On utilisera le format DV (attention trés gourmand en espace disque).

Enfin quand les fichiers vidéos sont prêts (diaporamas en VOB, vidéos montées en DV, fichier viédos brutes en MP4), on utilise le logiciel DVDStyler. Ce dernier permet la création de DVD Vidéo avec des menus interactifs. Il est egalement possible d’ajouter un fond musical sur les menus. La génération du DVD peut se faire directement par gravure, ou par création d’un fichier ISO ou bien par génération de l’arborescence du DVD.

Le résultat testé sur PC et dans un lecteur de salon (XBox 360) est trés convaincant. Le N900 étant largement issu du monde linux, il est donc tout à fait possible de produire des DVD amateurs avec du libre de bout en bout.

Catégories
Application

Guide de randonnées à La Réunion sur N900

Official logo of Réunion
Image via Wikipedia

Ce billet ne traite pas spécifiquement du N900 ou d’une application dédiée mais montre comment une utilisation triviale d’outil ouvre à l’utilisateur l’accès à un guide de randonnées sur mobile.

Le site Randopitons présente plus de 190 circuits de randonnée avec description, photos et cartes. C’est un site trés complet dont l’architecture est simple ou plus précisèment conforme à l’esprit du web originel: des pages reliées par des liens accessibles par GET. Ici par de web caché, ni de technologie sexy mais propriétaire. Du vrai web en somme.

Le rendu de ce site sur le N900 est parfait mais il ne faut pas compter sur internet pour y accéder une fois sur place à la Réunion à cause du prix de l’itinérence des données et de la couverture du réseau en pleine randonnée. C’est pourquoi nous utiliserons un aspirateur web pour copier le site sur le téléphone. L’outil httrack s’acquitte de cette tâche avec brio et simplicité. Sur les 5000 liens du site seulement 5 erreurs furent reportées. L’opération se fait d’abord sur PC classique. Httrack se trouve dans le dépot d’Ubuntu 11.04 et s’utilise comme une application web. L’icône installée lance un serveur local puis ouvre le navigateut sur la bonne url. On va alors créer un projet que nous nommons par exemple randopitons et dans lequel on indiquera le site http://randopitons.free.fr. L’aspiration du site prend près de 3 heures (la faute aux nombreuses photos du site) et il faudra s’armer de patience.

Le site est aspiré par défaut dans ~/websites/randopitons/randopitons.free.fr. Il suffit de faire une archive du site:

thierry@jesus:~/websites/randopitons$ tar -cvzf randopitons.free.fr.tgz randopitons.free.fr

Puis copier le tgz sur le terminal. En supposant que depuis celui-ci on puisse aller en ssh sur le PC, il suffit de faire un scp:

~ $ scp thierry@perso.bressure.net:/home/thierry/websites/randopitons/randopitons.free.fr.tgz /home/user/MyDocs/randopitons.free.fr.tgz

Il ne reste alors plus qu’à décompresser le site sur le terminal.

tar -xvzf randopitons.free.fr.tgz

Attention la décompression peut prendre plusieurs heures !!!

Quand c’est terminé, on peut alors ouvrir le site local et préparer ses randonnées sur place sans utiliser internet.

Enfin, si la navigation sur le site local permet de se donner une idée de la ballade, une fois sur place l’usage d’une carte papier est toutefois nécessaire pour ne pas se perdre. A moins d’avoir une solution de cartographie hors-ligne… Mais c’est une autre histoire.