[Bug fix] rssLounge for Android v0.2.1

\"LogoUn petit billet rapide pour vous annoncer qu\’une petite mise à jour de rssLounge for Android vient d\’être publiée. Cette mise à jour corrige un bug qui m\’a été reporté par plusieurs utilisateurs et qui ne permettait pas d\’avoir de caractères spéciaux dans son login ou son mot de passe… Bref, ce problème est maintenant corrigé et a donc donné lieu à une version 0.2.1 de cette application. Comme d\’habitude (!!) toutes les infos concernant rssLounge for Android et notamment son téléchargement se trouvent ici :

http://www.francoistessier.info/rssLoungeAndroid/

Mise à jour de rssLounge pour Android (v0.2)

\"LogoEt voilà! Une semaine après la première release de \ »rssLounge for Android\ », la version 0.2 est là. En si peu de temps ce n\’est évidemment pas une révolution mais il y a malgré tout un certain nombre de nouveautés. En voici la liste :

  • Si aucune URL n\’a été spécifiée (au premier lancement par exemple), l\’écran de préférence est lancé au démarrage.
  • Le support d\’HTTPS a été ajouté! Je n\’ai pas encore trouvé de solution idéale, donc j\’ai dû faire comme grand nombre d\’applications Android  : les certificats ne sont pas vérifiés. Ce support n\’est pas automatique. Il faut cocher une option dans les préférences pour autoriser en toute connaissance de cause ce type de connexion.
  • Un menu contextuel est disponible sur l\’écran listant les flux. Pour le faire apparaitre, il suffit de faire un appui long sur un des items de la liste. Ce menu permet d\’ouvrir le flux dans le navigateur web du smartphone ou de marquer le flux comme lu ou non lu.
  • Un nouveau menu est disponible aussi lorsqu\’on lit un flux. Cette entrée permet encore une fois d\’ouvrir le flux dans un navigateur.
  • Dans la fenêtre dans laquelle les flux sont listés, il est maintenant possible de switcher entre \ »All\ » et \ »Only unread\ » sans avoir à retourner en page d\’accueil
  • Enfin, un dizaine de bugs ont été corrigés : vérification du préfixe \ »http://\ », problèmes d\’affichage, problèmes de traduction, etc…

\"Settings     \"Contextual

Et voilà! D\’autres choses devraient arriver rapidement et notamment des gestures permettant de passer rapidement d\’un flux à un autre en mode lecture.

Comme pour la première fois, toutes les infos sont disponibles à cette adresse : http://www.francoistessier.info/rssLoungeAndroid/. Vous y trouverez notamment un QRcode pour télécharger l\’apk qui va bien.

Enfin, n\’hésitez pas à me donner vos avis, remarques, suggestions. Pour les bugs, la page SourceForge du projet a une section \ »tickets\ » parfaite pour ça.

rssLounge for Android v0.1 is out!

\"LogoAprès une pause de près d\’un an dans son développement, je me suis enfin décidé à sortir une première version de rssLounge pour Android. Cette sortie a été possible grâce à la collaboration de Tobias Zeising, créateur de rssLounge, qui a bien voulu adapter la partie web afin de pouvoir l\’exploiter depuis un terminal Android. Cette version smartphone de rssLounge permet tout simplement la gestion de ses flux de façon synchronisée avec votre instance web. Elle nécessite, côté serveur, la version 1.7 de l\’application.

Comme vous pouvez le voir, cette première version est estampillée 0.1. Concrètement, cela signifie que l\’application est fonctionnelle mais qu\’elle ne fait pour le moment que le strict minimum à savoir : lire ses flux RSS (filtres \ »all\ » et \ »only unread\ » disponibles) et les marquer comme lu/non lu, tout ça de façon synchronisée. C\’est peu en terme de fonctionnalités mais cette partie était certainement la plus complexe à mettre en oeuvre donc des nouveautés devraient apparaître plus rapidement.

Parmi les ajouts que je suis en train d\’implémenter, il devrait y avoir la gestion du HTTPS, quelques gestures pour naviguer dans l\’application ou encore quelques petites corrections de bugs.

Enfin, cette application est évidemment gratuite et open-source! Elle est distribuée sous licence AGPL. Elle n\’est pas disponible sur le Market Android et ne le sera probablement jamais… En revanche, je réfléchis à l\’idée de la proposer d\’ici peu sur un market alternatif comme YAAM ou le CyanogenMarket si celui-ci voit le jour.

Toutes les infos concernant \ »rssLounge for Android\ » sont disponibles à cette adresse : http://www.francoistessier.info/rssLoungeAndroid/

N\’hésitez pas à me donner vos avis ou suggestions.

Cross-compilation de Boost pour Windows sous Linux

À propos de l\’auteur : Fabien Danieau est doctorant à Rennes, entre l\’INRIA et Technicolor. Titulaire d\’un diplôme d\’Ingénieur en Cognitique, ses travaux portent actuellement sur l\’application des interfaces haptiques pour le multimédia.

 

Récemment j\’ai eu besoin de cross-compiler la librairie Boost nécessaire à un projet. Ce ne fût pas chose évidente, j\’ai pensé qu\’un retour d\’expérience pourrait être utile à plus d\’un.
Dans notre cas nous allons voir comment compiler Boost 1.47 pour Windows 32 bits sous une machine Linux ( la procédure décrite a été testée sous Debian Squeeze 64bits et Fedora 14 64bits).

Pré-requis

La librairie Boost se récupère aisément sur le site officiel. Pour la compilation j\’ai utilisé mingw-w32-bin_x86_64-linux_20110818. Le nom indique qu\’il va compiler des projets pour Windows 32bits (w32) et cette compilation se fera sous une machine linux 64 bits (x86_64-linux). On trouve ce compilateur sur le site officiel de mingw.
Pour la suite du tuto nous considéreront que les deux archives récupérées sont décompressées dans un dossier \ »BoostBuild\ » situé à la racine de notre home. Nous obtenons donc l\’architecture suivante.

BoostBuild
-- boost_1_47
-- mingw-w32-bin_x86_64-linux_20110818

Plaçons nous dans le répetoire boost_1_47 et attaquons les choses sérieuses!

cd ~
cd BoostBuild/boost_1_47

Procédure

Premièrement il faut créer un petit fichier de configuration pour indiquer à boost d\’utiliser mingw comme compilateur.

echo \"using gcc : mingw64 : i686-w64-mingw32-g++ : 4.6;\" > user-config.jam

Ceci ne suffisant pas pour que l\’emplacement du compilateur soit trouvé, nous allons modifier temporairement la variable PATH. Le compilateur (i686-w64-mingw32-g++) se trouve dans le dossier mingw-w32-bin_x86_64-linux_20110818/bin.

PATH=/home/fabien/BoostBuild/mingw-w32-bin_x86_64-linux_20110818/bin:$PATH

Cette commande fonctionnera chez les utilisateurs de Debian et autres dérivés. Les possesseurs d\’une Fedora utiliseront plutôt celle-ci.

setenv PATH /home/fabien/BoostBuild/mingw-w32-bin_x86_64-linux_20110818/bin:$PATH

Ensuite, comme indiqué dans la documentation de Boost, il faut appeler le script bootstrap.sh.

sh bootstrap.sh

Dans mon cas le script n\’a pas abouti pour cause de \ »Permission Denied\ ». En effet celui-ci essaie d\’en appeler une autre, build.sh, qui n\’est pas exécutable. D\’où l\’échec… Pour remédier à cela il suffit de faire:

chmod +x tools/build/v2/engine/build.sh

Enfin nous arrivons à la dernière étape, la fameuse compilation de boost. Il faut lancer la commande «./b2» comme nous l\’indique le script bootstrap.sh une fois sa tâche terminée. Cependant nous devons lui passer quelques paramètres spécifique à notre cross-compilation.

./b2 --user-config=user-config.jam --layout=versioned --toolset=gcc-mingw64 define=BOOST_USE_WINDOWS_H address-model=32 variant=debug,release link=static,shared threadapi=win32 target-os=windows stage

\ »user-config\ » et \ »toolset\ » indiquent le compilateur à utiliser. \ »define\ », \ »address-model\ » et \ »target-os\ » spécifient que l\’os cible est windows 32 bits. \ »variant\ » et \ »link\ » déterminent que l\’on veut compiler ici les librairies dynamiques, statiques en version release et debug. Ces arguments sont à modifier suivant vos besoins. L\’argument \ »layout\ » impose ici d\’indiquer ces informations de version dans le nom des fichiers produits.
La compilation est en route, vous devriez voir les librairies apparaître dans le dossier boots_1_47/stage/lib. Cette étape peut prendre un peu de temps suivant les performances de votre machine. Pour une compilation plus rapide n\’hésitez pas à utiliser l\’argument supplémentaire \ »-j n\ » avec n le nombre de processeurs que vous possèdez.

Compilation pour Win64

Si cette article est dédiée à la compilation de la librairie Boost pour windows 32 bits, il est facile de l\’adapter à windows 64 bits. Il vous faudra alors télécharger mingw64-w64 et modifier un peu les arguments de la dernière commande (address-model=64 entre autres). Je n\’ai pas testé mais cela devrait fonctionner.

Anciennes versions de Boost

Si vous voulez compiler une ancienne version de boost (boost_1_46_1 par exemple) il ne faudra pas appeler \ »./b2\ » lors de la dernière étape mais \ »./bjam\ ». L\’ensemble des arguments restent les mêmes.

Références

Quelques références utiles.

 

Programmation Arduino en ligne de commande

Aujourd\’hui, c\’est un nouveau rédacteur qui fait son entrée sur ce blog! Fabien nous propose un article sur la programmation des cartes Arduino depuis le terminal.
À propos de l\’auteur : Fabien Danieau est doctorant à Rennes, entre l\’INRIA et Technicolor. Titulaire d\’un diplôme d\’Ingénieur en Cognitique, ses travaux portent actuellement sur l\’application des interfaces haptiques pour le multimédia.

 

\"Arduino\"Arduino est une plateforme de prototypage électronique. Cela se présente sous la forme d\’une petite carte, avec un circuit imprimé et un microprocesseur, qui permet de réaliser très facilement et très rapidement des montages électroniques. De plus un éditeur simplissime est fourni afin que les débutants en programmation puisse s\’adonner aux joies de l\’électronique. Un langage basé sur le C++ est proposé, les programmes sont appelés \ »sketch\ ». Pour couronner le tout, hardware et software sont tous les deux open source. Ainsi cette plateforme connaît un véritable engouement et les projets fleurissent sur la toile.

La force de ce produit est donc sa simplicité. L\’environnement de programmation y contribue en grande partie. Seules quelques lignes de codes suffisent à allumer ses premières LEDs. Cependant cette simplicité devient vite une limite lorsque l\’on veut développer de plus gros projets. Gérer un code compliqué avec beaucoup de dépendances peut devenir un vrai casse-tête. De plus l\’éditeur n\’est encore qu\’une version alpha (0022 à l\’écriture de ce billet) et n\’est donc pas exempt de bugs. Sur ma machine, la carte n\’est pas toujours détectée lors de son branchement à un port USB. De ce fait il m\’est parfois impossible de charger un programme…
Bref pour diverses raisons on peut vouloir comprendre ce qui se passe derrière l\’éditeur. Ne serait-ce que pour être capable d\’utiliser un autre environnement de programmation. Nous allons donc voir comment compiler et charger un sketch à la main. Suite à cela, diverses alternatives à l\’environnement de développement fourni par Arduino seront proposées.

Pré-requis

Une grande partie des explications seront bâties sur l\’exemple suivant. Il est volontairement basique, les deux premiers tutos du site Arduino suffisent à le comprendre (cf. tuto Blink et tuto DigitalReadSerial). La seule chose que fait ce code est d\’allumer la LED liée à la pin 13 et d\’écrire \ »Starting\ » puis \ »Running\ » toutes les secondes et demi sur la sortie série.

int ledPin = 13;

void setup(){
pinMode(ledPin, OUTPUT);
Serial.begin(115200);
Serial.println(\"Starting\");
}

void loop(){
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(500);
Serial.println(\"Running\");
}

Pour la suite de l\’article nous supposerons que ce code fonctionne sans soucis sur la carte en utilisant l\’éditeur Arduino. Nous appellerons ce sketch \ »blink.pde\ ». Vous devriez obtenir un résultat similaire à celui-ci.

\"\"

A titre indicatif l\’ensemble des manipulations présentées ont été effectué sur une distribution Linux Debian Squeeze 64bits, une carte Arduino Uno SMD (microprocesseur atmel mega 328p) et l\’éditeur en version 0022 (téléchargé depuis le site officiel. La version dans les dépots de Debian est obsolète).

Le secret de l\’IDE Arduino

L\’idée de ce billet est de compiler l\’exemple précédent sans passer par l\’éditeur d\’Arduino. Une première étape consiste à demander à l\’éditeur de nous expliquer ce qu\’il fait lorsqu\’il compile. En faisant cela nous pourrons comprendre les mécanismes sous-jacents à la compilation et au chargement de sketchs sur la carte.
Par défaut l\’éditeur n\’est pas très loquace. Pour le rendre un peu plus bavard il faut modifier quelques options dans les préférences. Ouvrez le fichier de préférences avec votre éditeur favori.

gedit .arduino/preferences.txt

Puis rajoutez les deux options suivantes à la fin du fichier.

build.verbose=true
upload.verbose=true

Une fois ceci fait, lancez une nouvelle compilation du programme. Tout le processus de compilation est détaillé! Quelque chose dans ce goût là devrait apparaître.
\"\"

La deuxième option que nous avons rajouté sert à afficher le même genre d\’information mais lors du chargement (upload) du programme sur la carte.

Si on regarde ce que nous affiche l\’éditeur lors de la compilation on peut voir des commandes du style \ »avr-gcc\ », \ »avr-ar\ » ou encore \ »avr-objcopy\ ». La plateforme Arduino repose en fait sur la solution open source avrdude qui permet de communiquer avec des microprocesseurs atmel. Il suffit donc d\’utiliser directement cet outil pour programmer notre carte!
Avant de se lancer dans le détail du processus de compilation, il faut d\’abord installer avrdude. Normalement un simple apt-get devrait suffire chez les utilisateurs de Debian et autres distributions dérivées.

sudo apt-get install avrdude

Processus de compilation

Conversion du sketch en fichier cpp

Une chose qui surprend de prime abord est que notre fichier blink.pde n\’apparait nulle part dans les infos affichées par l\’éditeur. Par contre nous avons un fichier blink.cpp qui est compilé. En réalité avrdude permet de compiler des fichiers c/c++, les sketch ne sont qu\’en fait une surcouche créés par Arduino pour simplifier l\’écriture de code. Avrdude ne comprend pas ce \ »langage\ » donc une première chose que fait l\’éditeur est de traduire le sketch en fichier c++. Cela est très simple en pratique, il n\’y a pas de grande différences. L\’éditeur ne fait qu\’ajouter un \ »include\ » et les en-têtes des fonctions utilisées dans le sketch. Ce qui donne le fichier \ »blink.cpp\ ».

#include \"WProgram.h\"
void setup();
void loop();
//plus le reste du code affiché plus haut

Le fichier \ »WProgram.h\ » ajouté est fourni avec l\’éditeur. On peut le trouver dans le répertoire d\’installation ( quelque chose du genre arduino-0022/hardware/arduino/cores/arduino/) . Ce dossier contient tous les fichiers nécessaires à la création d\’un programme compréhensible par la carte arduino et sont compilés à chaque fois que l\’on compile un sketch.

Compilation des sources

Pour créer notre programme, la première étape consiste à compiler notre fichier \ »blink.cpp\ ». Cela se fait par la commande suivante.

avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=22 -I /home/fabien/Apps/arduino-0022/hardware/arduino/cores/arduino/ -o blink.o blink.cpp

Il vous faudra bien sûr adapter cette commande à votre configuration. Notamment après le \ »-I\ » où vous devez indiquez le chemin vers le répertoire d\’installation de l\’éditeur arduino. Nous n\’irons pas plus loin dans l\’explication des différents arguments. Ce degré de détails n\’est pas forcément l\’objet de ce billet et je ne suis pas non plus familier avec toutes les options. A l\’issue de cette commande vous devriez obtenir le fichier \ »blink.o\ ».
Le travail n\’est pas fini, vous avez sans doute remarqué que l\’éditeur compile beaucoup plus de fichiers. Comme je l\’ai dit plus haut, toutes les sources situées avec le fichier \ »WProgram.h\ » sont compilées. C\’est ce que nous allons faire à présent.
Pour plus de clarté nous allons faire les prochaines manipulations dans un sous-dossier que j’appellerai \ »core\ ».

mkdir core
cd core

Ensuite la commande de compilation reste la même qu\’au dessus. Par exemple pour le fichier \ »Print.cpp\ »:

avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=22 -I /home/fabien/Apps/arduino-0022/hardware/arduino/cores/arduino/ -o Print.o /home/fabien/Apps/arduino-0022/hardware/arduino/cores/arduino/Print.cpp

A noter que certaines sources sont en C. Il faut donc appeler avr-gcc cette fois-ci et enlever \ »-ffunction-sections\ ». Par exemple pour le fichier \ »wiring.c\ »:

avr-gcc -c -g -Os -w -ffunction-sections -fdata-sections -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=22 -I /home/fabien/Apps/arduino-0022/hardware/arduino/cores/arduino/ -o wiring.o /home/fabien/Apps/arduino-0022/hardware/arduino/cores/arduino/wiring.c

En tout il y a 13 sources à compiler et autant de \ ».o\ » à créer. Ce n\’est pas l\’étape la plus rigolote c\’est sûr. Elle est intéressante à faire une fois pour bien comprendre le processus. Nous verrons à la fin les outils qui font tout pour nous :).
La dernière étape de la compilation est la création de la librairie. Nous sommes toujours dans notre dossier \ »core\ » avec nos 13 \ ».o\ ». Il suffit d\’appeler \ »avr-ar\ » pour tous les compiler en une librairie.

avr-ar rcsv core.a *.o

Et voilà le travail, la librairie \ »core.a\ » devrait être présente dans votre dossier. On remarque que l\’éditeur refait toute la procédure de création de la librairie à chaque compilation. Pourtant l\’édition d\’un sketch ne modifie que \ »blink.pde\ » et donc \ »blink.cpp\ ». On peut se demander si cela à un réel intérêt…

linkage et creation de l\’\ »executable\ »

La prochaine étape vise à lier notre programme compilé, \ »blink.o\ » avec la librairie \ »core.a\ ». Nous remontons d\’un niveau (\ »cd ..\ ») pour nous retrouver dans le dossier contenant ledit \ »blink.o\ » et le dossier \ »core\ ». La commande suivante fera l\’affaire.

avr-gcc -Os -Wl,--gc-sections -mmcu=atmega328p -o blink.elf blink.o ./core/core.a -L core -lm

Le fichier \ »blink.elf\ » devrait apparaître.
Nous touchons à la fin. La dernière étape vise à créer l\’équivalent d\’un exécutable que l\’on pourra charger sur la carte. La création se fait ainsi.

avr-objcopy -O ihex -R .eeprom blink.elf blink.hex

Ca y est tout est compilé! Le fichier \ »blink.hex\ » nouvellement créé est le signe de notre réussite.

Upload

Allez c\’est bientôt fini. Nous allons maintenant charger ce programme sur la carte. Branchons la sur un port usb. Et lançons une dernière commande.

avrdude -v -p m328p -P /dev/ttyACM0 -b115200 -c arduino -U flash:w:blink.hex

Chez vous il faut indiquer le port correspondant à votre carte à la place du /dev/ttyACM0. Si vous utilisez une arduino Uno ça devrait être pareil. Le nombre 115200 correspond à la vitesse de communication entre la carte et le pc fixée à 115200 bauds, et doit être le même que celui indiqué dans le code \ »blink.pde\ ».
Si tout se passe bien la LED liée à la pin 13 doit clignoté à l\’issue du chargement sur la carte. Tout s\’est bien passé, vous avez réussi à compiler votre premier programme à la main!

Communication série

C\’est bien beau tout ça, mais vous allez me demander où s\’affichent les fameux messages \ »Starting\ » et \ »Running\ ». Avec l\’éditeur il suffisait d\’afficher le moniteur, mais maintenant? Avons-nous perdu un outil dans la bataille?
Pas du tout n\’ayez crainte. Nous allons utiliser une alternative appelé \ »screen\ ». Elle permet entre autres d\’émuler un terminal. En lançant la commande suivante dans une console vous devrez voir les messages que l\’on croyait perdus.

screen /dev/ttyACM0 115200

Vous trouverez cet outil dans les dépôts s\’il n\’est pas installé. Le résultat doit approcher celui-ci:

\"\"

Conclusion et alternatives

Voilà nous savons maintenant compiler un programme pour Arduino à la main. Cependant le processus complet est un peu fastidieux. Il est intéressant de le faire une fois pour bien comprendre le mécanisme mais ce n\’est pas vraiment pratique pour une utilisation régulière.
Par contre en connaissant la chaine de compilation utilisant avrdude, rien ne nous empèche de l\’adapter et de l\’utiliser avec notre environnement de développement préféré. Plusieurs solutions existent déjà et vous permettent de compiler un sketch via un makefile, CMake, Scons or encore sous Eclipse.

Réferences

ZenCoding et NetBeans IDE

J\’entends parler de ZenCoding depuis déjà un moment mais je n\’ai jamais pris le temps de regarder concrètement de quoi il s\’agissait. C\’est maintenant chose faite et j\’ai voulu tester ça avec NetBeans!

Mais d\’abord, qu\’est-ce que ZenCoding? ZenCoding est un plugin qui a été porté sur la majorité des éditeurs de texte gérant le HTML. Il permet d\’en accélérer l\’écriture grâce à une syntaxe précise. Un portage non officiel a été fait pour NetBeans et c\’est cette version que j\’ai voulu essayer.

Tout d\’abord, l\’installation sur NetBeans IDE. Les différentes versions du plugin pour chacun des éditeurs supportés se trouvent à cette adresse : ZenCoding.

Une fois le dossier compressé téléchargé, il suffit d\’ouvrir NetBeans IDE et d\’aller dans Outils > General > Import et donc d\’importer le .zip du plugin. Du plugin? Pas vraiment puisque ZenCoding n\’est pas complètement porté sous NetBeans. Quand on regarde le contenu du dossier compressé, on s\’aperçoit qu\’il ne contient en réalité que des templates de code. Cela implique deux choses : Premièrement il faudra suivre chaque abréviation écrite d\’une tabulation pour la \ »tranformer\ »; deuxièmement, une syntaxe comme

ul#my_id>li*5

qui génèrent normalement une liste non ordonnées dont l\’id est my_id et contenant 5 éléments ne sera pas interprêtée. En revanche, on peut quand même gagner du temps pour parvenir à un résultat presque similaire en utilisant

ul=

(suivi d\’une tabulation). Puis, pour chaque item que l\’on souhaite ajouter

li

(suivi aussi d\’une tabulation). Une chose également intéressante est que les templates de Zen Coding pour NetBeans gèrent la position du curseur. Ainsi, une abréviation comme

a:link

qui génère

text

va automatiquement positionner le curseur sur \ »http://\ » puis grâce à une tabulation va se déplacer sur \ »text\ ». Ainsi, en plus d\’écrire une bonne partie du code à notre place, Zen Coding permet également d\’éditer rapidement les différents champs.

Quelques abréviations intéressantes :

link:css

a:link

ul=

form:get

input:button

ou encore les balises \ »html:\ » qui peuvent faire gagner un temps précieux dans certains cas.

Enfin, pour avoir la liste complète des abréviations et de leur résultat, rendez-vous sur la Zen Coding Cheat Sheet (en pdf)