Olivier Mengué – Code & rando

Aller au contenu | Aller au menu | Aller à la recherche

samedi 3 novembre 2007

Une icône pour les liens vers Wikipédia

J'ai juste ajouté une petite touche à la feuille de style de ce blog (dont j'ai déjà longuement parlé en anglais) : une petite icône pour signaler les liens vers Wikipédia.

J'ai récupéré l'icône du site en ligne de commande avec Wget :

$ wget -O wikipedia.ico http://fr.wikipedia.org/favicon.ico
--19:23:35--  http://fr.wikipedia.org/favicon.ico
           => `wikipedia.ico'
Résolution de fr.wikipedia.org... 145.97.39.155
Connexion vers fr.wikipedia.org|145.97.39.155|:80... connecté.
requête HTTP transmise, en attente de la réponse... 200 OK
Longueur: 318 [image/x-icon]

100%[====================================>] 318           --.--K/s             

19:23:35 (30.79 MB/s) - « wikipedia.ico » sauvegardé [318/318]

Je l'ai ensuite convertie à la taille 14x14 au format GIF avec l'outil convert d'ImageMagick :

$ convert wikipedia.ico -resize 14x14 wikipedia.gif

L'image résultante faisait 595 octets. L'utilisation de l'application en ligne Image Optimizer m'a permis de réduire le nombre de couleurs de l'image à 16 et de réduire la taille à 167 octets.

En suivant Megan McDermott, j'ai modifié ma feuille de style pour ajouter la ligne suivante :

Il peut être utile parfois de désactiver ce style localement ou pour les blocs de code :

pre.code a:link, pre.terminal a:link,
.no-link-icon a:link,
a:link.no-icon
{ background: inherit; padding-right: inherit }

Mise à jour 2007-11-05 à 22:25 : mes règles pour les exceptions ne fonctionnent pas ! Je me suis fait avoir par les règles de précédence des règles CSS ! Il va falloir que je corrige cela...

Mise à jour 2007-11-05 à 22:46 : voici, j'espère, la correction. Il faut que j'augmente le poids des règles d'exception en augmentant le nombre d'attributs ou de pseudo-classes dans le sélecteur.

pre.code a:link[href], pre.terminal a:link[href],
.no-link-icon a:link[href],
a:link.no-icon[href]
{ background: inherit; padding-right: inherit }

Rotation JPEG sans perte, suite

Suite à mon précédent post, j'ai profité qu'exiftool est un module Perl pour re-développer en Perl mon outil de rotation des images JPEG vraiment sans perte. Voici ci-dessous le code et les astuces pour l'intégration dans Nautilus.

Lire la suite...

dimanche 21 octobre 2007

Rotation JPEG vraiment sans perte

Avez-vous déjà examiné en détail les méta-données EXIF d'une photo numérique après une rotation soit-disant « sans perte » ? Si vous l'avez fait avec un outil tel que exiftool, vous avez sûrement du constaté la catastrophe. Certains outils de rotation perdent toutes les données EXIF, d'autres une partie des paramètres de prise de vue ou le champ Software... Et aucun ne fait la rotation des imagettes de prévisualisation, ni ne préserve la date de création originelle du fichier. J'ai essayé sous Ubuntu 7.10, F-Spot, jpegtran (paquet libjpeg-progs) et exiftran. Chacun a ses défauts.

Je vous propose donc ici la solution personnalisée que j'ai développée ce week-end en utilisant jpegtran et exiftool. Ce n'est pas forcément une solution universelle, mais elle est satisfaisante pour les photos issues de mon APN (sous réserve que mon outil d'observation

Lire la suite...

lundi 3 septembre 2007

Paris Bluetooth MobiGuide : première réaction sur la forme

Je viens de découvrir ce soir que la Mairie de Paris a commencé une expérimentation de diffusion de contenu par Bluetooth à partir des stations Vélib’ : le Paris Bluetooth MobiGuide. Voici mes premières réactions, plutôt d'un point de vue technique (comme souvent ici), c'est à dire sur la forme plutôt que sur le fond et notamment du point de vue d'un utilisateur de Nokia N800.

Il y a quelques mois j'avais déjà reçu par Bluetooth une image JPEG de l'affiche du film Spiderman 3 en passant à coté d'un panneau d'affichage sur le boulevard Haussmann. J'ai repéré un panneau semblable du côté de la rue de la Gaîté. Dans le cas du MobiGuide, c'est potentiellement, pour le récepteur, une utilisation plus intéressante de la technologie Bluetooth.

Le MobiGuide est disponible de plusieurs façons :

  • pour consultation hors-ligne sur un téléphone mobile, sous la forme d'une application Java à installer après téléchargement :
    • par diffusion vers le téléphone mobile depuis des fontaines Bluetooth placées à des stations Vélib' ;
    • par téléchargement depuis en allant naviguer sur http://mobile.paris.fr/ ;
    • par téléchargement avec un ordinateur sur paris.fr ;
  • par consultation en ligne sur http://mobile.paris.fr/.

Ma première réaction : malgré la multiplicité des moyens d'accès, aucun ne me permet d'accéder facilement au MobiGuide avec les appareils dont je dispose :

  • L'application Java ne fonctionne que sur appareils mobiles, pas sur PC.
  • Le Nokia N800 est un appareil mobile qui dispose d'un chip Bluetooth, mais il n'a pas de machine virtuelle Java.
  • Mon téléphone mobile (Nokia 3100) n'a pas la capacité mémoire suffisante pour stocker l'application. 300 Ko, c'est trop pour lui !
  • Le site en ligne est inaccessible aux navigateurs web standards à cause d'un bête problème de configuration du serveur :
    C:\>curl -I http://www.v2asp.paris.fr/v2/mobile/bluetooth/site_PB1er/index.xhtml
    HTTP/1.1 200 OK
    Server: Microsoft-IIS/5.0
    Date: Sun, 02 Sep 2007 22:04:48 GMT
    Content-Type: application/octet-stream
    Accept-Ranges: bytes
    Last-Modified: Mon, 30 Jul 2007 14:25:45 GMT
    ETag: "20399984b5d2c71:86e"
    Content-Length: 1383
    Le Content-Type devrait être « application/xhtml+xml; charset=iso-8859-1 ». Ce simple paramètre bloque la consultation sur le N800 ou sur un PC (MSIE, Firefox) : au lieu de simplement montrer le fichier, le navigateur propose de le télécharger. Quant aux téléphones mobiles, le navigateur intégré de mon Nokia 3100 indique « Réponse inconnue », et Opera Mini signale « Opera Mini Basic ne supporte pas les téléchargements. Ignore "index.xhtml" avec le type "application/octet-stream". »

Je suis finalement arrivé (mais c'est laborieux) à accéder au contenu hors-ligne entièrement depuis mon N800 en bidouillant ainsi :

  1. téléchargement par wifi de Paris1.jar (j'aurais aussi pu aller me rendre à une fontaine Bluetooth pour récupérer le fichier, mais bon, j'habite pas à côté) ;
  2. renommage de Paris1.jar en Paris1.zip ;
  3. décompression de Paris1.zip dans le répertoire Paris1 ;
  4. lancement du navigateur web (l'extension .xhtml n'est pas reconnue directement depuis le Gestionnaire de fichiers) ;
  5. menu Page Web, Ouvrir fichier... pour ouvrir Paris1/microsite/index.xhtml ;
  6. ça y est ! J'accède au contenu XHTML.

Le résultat : j'obtiens un site qui ne prend même pas un quart de l'écran parce que la largeur est fixée en dur sur chaque page à 176 pixels (alors que l'écran du N800 fait 800 pixels). Et j'aboutis à des impasses telles que http://www.v2asp.paris.fr/v2/mobile/bluetooth/site_PB1er/622_ballades.xhtml où les liens pointent vers des fichiers texte qui sont probablement utilisés par l'application Java pour afficher des cartes, mais qui ne sont visibles ni dans le N800 ni sur le PC.

En résumé, c'est plutôt un fiasco. Faut que ça mûrisse encore pour être disponible sur un plus grand nombre de plateformes.

dimanche 2 septembre 2007

Le clavier français sous le DOS de Vista

Mise à jour 2008-08-30 : Cette astuce a été sélectionnée par le magazine L'Ordinateur Individuel et publiée dans le numéro 208 (septembre 2008) page 136 comme astuce du mois.

Nostalgie, nostalgie... le DOS c'est toute ma jeunesse. Le manuel du MS-DOS 5.0 est d'ailleurs le premier livre d'informatique que j'ai lu. Même sous Windows, j'ai toujours systématiquement une fenêtre d'« invite de commandes » toujours ouverte. Et la première chose que je fais sur un nouveau PC Windows, c'est d'assigner le raccourci Ctrl+Alt+C à l'invite de commandes MS-DOS. La deuxième, c'est Ctrl+Alt+N pour le Bloc-Notes (N comme NotePad). Et la troisième, c'est d'installer mon fichier .INF qui ajoute une entrée Ouvrir un shell dans le menu contextuel de l'Explorateur Windows.

Alors de temps en temps je vais voir comment évoluent les articles de Wikipédia dédiés au MS-DOS pour vérifier qu'ils ne racontent pas trop de bêtises, les corriger à l'occasion, et éventuellement encore apprendre quelque chose. C'est donc dans la section Windows NT que j'ai vu quelques commandes que j'ai vu quelques commandes que j'ai voulu vérifier par l'expérience sur Windows Vista.

Microsoft Windows [version 6.0.6000]
Copyright (c) 2006 Microsoft Corporation. Tous droits réservés.

C:\Users\Dolmen>ver

Microsoft Windows [version 6.0.6000]

C:\Users\Dolmen>command /k ver

MS-DOS Version 5.00.500


C:\USERS\DOLMEN>

Rien de spécial jusque là.

C:\USERS\DOLMEN>cd 

Mais là, oh stupeur ! Pas moyen de taper un '\'. La combinaison de touches AltGr+8 ne fonctionne pas ! En fait, le clavier est en QWERTY dans COMMAND.COM !

En investiguant un peu plus, j'ai pu vérifier que ce sont tous les programmes pur MS-DOS qui ne tiennent plus compte de la configuration du clavier français mais utilisent au lieu de cela une configuration américaine du clavier. Par exemple debug.exe ou edit.com. Vous pouvez tester avec tous les .COM (ceux-là, contrairement aux .EXE, vous êtes sûrs que ce sont des programmes DOS) :

C:\Users\Dolmen>dir %windir%\System32\*.com
 Le volume dans le lecteur C s'appelle XXX
 Le numéro de série du volume est YYYY-ZZZZ

 Répertoire de C:\Windows\System32

02/11/2006  10:31            11 776 chcp.com
02/11/2006  09:09            50 648 COMMAND.COM
02/11/2006  10:32            13 824 diskcomp.com
02/11/2006  10:32            11 264 diskcopy.com
18/09/2006  23:43            69 886 edit.com
02/11/2006  10:32            35 328 format.com
02/11/2006  10:35            56 320 graftabl.com
02/11/2006  09:09            19 694 GRAPHICS.COM
02/11/2006  09:09            14 710 KB16.COM
02/11/2006  09:09             1 131 LOADFIX.COM
02/11/2006  10:32            25 088 mode.com
02/11/2006  10:32            20 992 more.com
02/11/2006  10:32            16 384 tree.com
02/11/2006  10:35             6 656 win.com
              14 fichier(s)          353 701 octets
               0 Rép(s)  VV VVV VVV VVV octets libres

Vous aurez peut-être noté la présence de KB16.COM qui semble une piste à explorer :

C:\USERS\DOLMEN>kb16 /?
Configures a keyboard for a specific language.

KEYB [xx[,[yyy][,[drive:][path]filename]]] [/E] [/ID:nnn]

  xx                      Specifies a two-letter keyboard code.
  yyy                     Specifies the code page for the character set.
  [drive:][path]filename  Specifies the keyboard definition file.
  /E                      Specifies that an enhanced keyboard is installed.
  /ID:nnn                 Specifies the keyboard in use.

C:\USERS\DOLMEN>chcp
Page de codes active : 850

C:\USERS\DOLMEN>kb16 fr,850 /E

C:\USERS\DOLMEN>

Voilà, c'est réparé... pour cette session ! Mais au prix de la perte de 6 Ko de mémoire conventionnelle (comparer avant et après avec mem /C). Et vous aurez noté que KB16.COM n'est pas traduit : Microsoft ne semble plus attacher autant d'importance à la traduction de ses produits.

Mise à jour 2008-10-20 : La solution ci-dessous est obsolète. J'ai trouvé la vraie solution au problème, bien plus simple. Sautez au commentaire 26.

Pour charger automatiquement KB16.COM dans les prochaines sessions, il faut ajouter l'appel dans %windir%\System32\autoexec.nt. Mais comme avec Vista, rien n'est simple en raison de la protection paranoïaque des commandes d'administration, voici la marche à suivre :

  1. Dans le menu Démarrer, Tous les programmes, Accessoires, cliquez avec le bouton droit sur Invite de commandes puis Exécuter en tant qu'administrateur.
  2. Chargez le clavier français et lancez edit.com :
    Microsoft Windows [version 6.0.6000]
    Copyright (c) 2006 Microsoft Corporation. Tous droits réservés.
    
    C:\Windows\system32>KB16 fr,850 /E
    
    C:\WINDOWS\SYSTEM32>edit autoexec.nt
    
    Pourquoi edit.com ? On aurait pu aussi utiliser le Bloc-Notes (notepad.exe). Sauf que l'on souhaite ici entrer des accents qui seront affichés dans la page de code du terminal, c'est à dire 850. Or le Bloc-Notes ne connaît que les encodages ANSI (cp1252), Unicode (ucs-2le), Unicode Big Endian (ucs2-be) et UTF-8.
  3. Tapez Ctrl+Fin et collez les lignes suivantes (pas avec Copy du menu Edit d'edit.com, mais avec Modifier, Coller dans le menu système de la fenêtre) :
    lh %SystemRoot%\system32\KB16 fr,850 /E
    if not errorlevel 1 echo Clavier français activé.
    
  4. Quittez en enregistrant : Alt+F, x, Entrée.

mardi 28 août 2007

TiddlyWiki and favicon

TiddlyWiki is a standalone wiki that is fully interactive and fully contained in a single HTML file. Here is a tip to add a favicon to your wiki.

To enable saving you have to give to the browser some special permissions allowing the JavaScript code to write to your disk. When using it with Microsoft Internet Explorer, the easy way to enable saving is to just rename your wiki as .hta to transform it into an "HTML Application", as Microsoft calls it.

But you can do better with HTML Applications than just decreasing the security level. I was particularly interested in a better integration with Windows. I wanted in particular to change the icon of the window that appears in the taskbar (I commonly have about 30-40 windows opened on my desktop). This is quite easy: you just have to add an <HTA:APPLICATION ICON="myfile.ico"> tag the <head> section of the HTML file.

Here is how to do it the TiddlyWiki way:

  1. Get an icon and save it as tiddlywiki.ico in the same directory as your wiki.hta file. For example: http://www.tiddlywiki.org/favicon.ico. You can also create you own icon here or here.
  2. Edit the built-in tiddler MarkupPreHead
  3. Insert the following text just after <!--{{{-->:
    <!--[if IE]>
    <HTA:APPLICATION ID="oHTA" APPLICATIONNAME="My wiki" ICON='tiddlywiki.ico'/>
    <![endif]-->
    <link rel='shortcut icon' href='tiddlywiki.ico' type='image/vnd.microsoft.icon '/>
    
  4. Reload your wiki.hta. That's it!

I now have to explore how to convert this to a plugin...

samedi 25 août 2007

Syntax highlighting on this blog using semantic tags and Vim

The regular readers of the HTML view of this blog (if they exist) may have noticed some changes in the syntax highlighting of the source code in my posts. I've tweaked the CSS style sheet to use the RubyBlue Vim theme instead of the Blue Vim theme. This is the occasion to explain you my process to format source code samples in HTML.

I'm a Vim addict, using it on Linux, AIX and Windows. Vim has a powerful and extensible syntax highlighting engine that can format almost any existing text file format. And most importantly, it has a plugin that can export the highlighted code as HTML.

There is many advantages in using Vim and storing statically highlighted code:

  • I can use the huge set of languages supported by Vim highlighting ;
  • I can use the huge set of themes built for Vim and easily convert to a CSS for the web ;
  • if a language is not supported, I can define highlighting myself (I already did it for 4 languages) and it will be done once for use both in Vim and on my blog ;
  • as I store only pure HTML as data in the blog engine (no special wiki code, no plugin), I am not dependent on the engine I'm currently using ;
  • no charge on the server (as with PHP formatting engines such as GeSHi) or on the client (such as with syntaxhighlighter) ;
  • as we are using simple <pre> tags, there is no characters/tags pollution: the reader can simply select and copy the text to the clipboard ;
  • last but not least, I can tweak the output to improve it and fix the highlighting bugs (some languages are very hard to parse).

In Vim you can invoke the conversion to HTML from the "Syntax" menu or that way:

:runtime syntax/2html.vim

To get the best XHTML code, I'm using the following settings in $HOME/.vimrc:

syntax on
" Conversion HTML (:help 2html.vim)
let g:html_use_css = 1
let g:html_use_encoding = "utf8"
let g:use_xhtml = 1

For example, here is the HTML I extract (I remove anything around the <pre> tag) from what is generated by 2html.vim from the code above:

<pre>
<span class="Comment">&quot; Conversion HTML (:help 2html.vim)</span>
<span class="Statement">let</span> g:html_use_css <span class="Operator">=</span> <span class="Constant">1</span>
<span class="Statement">let</span> g:html_use_encoding <span class="Operator">=</span> <span class="Constant">&quot;utf8&quot;</span>
<span class="Statement">let</span> g:use_xhtml <span class="Operator">=</span> <span class="Constant">1</span>
</pre>

I just have to add my own set of classes to enable highlighting:

<pre class="code vim vimft-vim">...</pre>

Here is the semantic associated to the classes:

  • code is my generic class for source code blocks 
  • vim is for source code formatted using the Vim classes for highlighting 
  • vimft-html is the class for the specific kind of source code: Vim's filetype option, displayed with ":set ft?".

For terminal output samples, I'm using my own highlighting using semantic XHTML tags :

  • <pre class="terminal">, the enclosing tag, with an optional class :
    • unix for Unix/Linux samples ;
    • cmd for Windows cmd.exe shell code.
  • <kbd> for what is typed in the terminal, with the following optional classes:
    • shell for any Unix shell samples ;
    • bash or ksh (in addition to shell) for Unix shell samples that uses features which are not in the standard POSIX shell ;
    • cmd for Windows cmd.exe shell code.
  • <samp> for programs output:
    • prompt for shell or interactive programs prompts ;
    • shell, bash, ksh or cmd for shell prompts (in addition to prompt) ;
    • sqlite, sqlite3 for SQLite client samples...
  • <var> for variable input/output. Everything except the <var> content should exactly match if you repproduce it yourself. The title can indicate what the variable represent, and on which data it depends. The tag is always a direct child of either <kbd> or <samp>.

Here is an example:

<pre class="terminal unix">
<samp class="prompt shell">$ </samp><kbd class="shell">echo Hello, world!</kbd>
<samp>Hello, world!</samp>
<samp class="prompt shell">$ </samp><kbd class="shell">date</kbd>
<samp><var>samedi 25 août 2007, 18:51:00 (UTC+0200)</var></samp>
</pre>

And the final result:

$ echo Hello, world!
Hello, world!
$ date
samedi 25 août 2007, 18:51:00 (UTC+0200)

This semantic tags will allow me to provide later additional feature using JavaScript code. I'm thinking to a button that would hide any <samp> tags and keep only <kbd> tags to ease copy of the commands to a terminal to run the commands.

With these tags in place, the CSS stylesheet is quite short and simple. More importantly it is easily replaceable in case I change the theme of the blog.

pre.code.vim,
pre.terminal { margin-left: 1pt; padding: 5pt; }

/* Text not embedded in samp or kbd will be in red, to easily detect errors */
pre.terminal { background: #000; color: #f00; }
pre.terminal samp.prompt { color: #888; }
pre.terminal samp { color: #eee; }
pre.terminal kbd { color: #fff; font-weight: bold; }
pre.terminal var { color: #55f; font-style: italic; }

/* colorscheme rubyblue */
pre.code.vim { color: #c7d4e2; background-color: #162433; }
pre.code.vim a[href] { color: #0f0; }
pre.code.vim .Constant { color: #0c0; }
pre.code.vim .Comment { color: #428bdd; }
pre.code.vim .Identifier { color: #fff; }
pre.code.vim .Label { color: #ff0; }
pre.code.vim .Operator { color: #ff0; font-weight: bold; }
pre.code.vim .PreProc { color: #f9bb00; }
pre.code.vim .Special { color: #0c0; }
pre.code.vim .Statement { color: #f9bb00; }
pre.code.vim .Title { color: #fff; font-weight: bold; }
pre.code.vim .Type { color: #fff; text-decoration: underline; }
pre.code.vim .Underlined { color: #208aff; text-decoration: underline; }

I had to tweak a bit the blog engine I use (DotClear) to add this style sheet: modifying the template.php in the theme directory is not enough because the theme is used only on the public part of the blog. So I added an @import rule in ecrire/style/default.css to enable the CSS in the private area of the blog.

 

I would be glad to read your experiences about source code formatting on your own blog or CMS.

Update 2007-09-06: added missing information about the usage of <var> tags.

vendredi 24 août 2007

Pipes Vélib’ sur mobile

Suite à mon billet sur Vélib’ et Yahoo! Pipes, j'ai testé un pipe Yahoo! dans le navigateur de mon téléphone mobile (un Nokia 3100, plutôt bas de gamme de Nokia, mais que j'exploite bien plus que l'utilisateur lambda). Ça fonctionne dans Opera Mini, même si ce n'est pas génial. Chez Yahoo! ils n'ont pas encore pensé à adapter le format.

J'en profite pour faire la pub pour Opera Mini, le navigateur que j'utilise. Il est gratuit et est disponible pour la plupart des téléphones disposant d'une machine virtuelle Java. Et malgré la faible capacité mémoire de mon téléphone, il fonctionne très bien (à part quelques erreurs "Mémoire insuffisante") pour lire des actualités. Et il sait même lire les flux RSS.

Pour faciliter la saisie de l'URL du pipe, j'ai utilisé tinyurl.com pour créer une URL courte : http://tinyurl.com/2o26e6.

Et pour avoir vos directement stations favorites (plutôt que le formulaire de saisie) vous pouvez créer vos propres URL courtes. Ainsi, pour obtenir les informations sur les stations 5026, 5027, 13001 et 13005 j'ai mis dans mes favoris l'URL courte http://tinyurl.com/3dmx5b pointant vers http://pipes.yahoo.com/pipes/pipe.run?_id=YGAJFE5L3BGsu_WZtiI0fw&_render=rss&station1=5026&station2=5027&station3=13001&station4=13005.

Les pipes peuvent aussi être reçu au format RSS en ajoutant "&_render=rss" à l'URL. Opera Mini sait aussi lire les flux RSS. Mais malheureusement, tinyurl.com ne renvoie pas le type MIME correspondant au document original et cela perturbe le navigateur. Donc pas de tinyurl pour les RSS.

mercredi 15 août 2007

Vélib’ et Yahoo! Pipes : vive XML et les services Web !

Le site Vélib’ utilise des services web pour afficher les informations sur les stations :

  • la liste statique des stations : numéro, nom, adresse, latitude, longitude ;
  • les informations dynamiques sur une station : vélos disponibles, emplacements libres, impression de tickets.

Voilà donc une occasion d'expérimenter Yahoo! Pipes, l'application web de développement et d'hébergement de scripts de traitement de données du web.

J'ai réalisé ces quelques « pipes » utilisant les services web Vélib’ :

J'ai voulu créer un pipe recherchant toutes les stations autour d'une adresse donnée. Récupérer une adresse est facile avec le tuyau Location Builder. Mais j'ai rencontré un obstacle insurmontable lorsque j'ai voulu comparer les coordonnées latitude/longitude obtenues avec celles des stations : il impossible de manipuler des nombres flottants et même de convertir du texte en nombre.

Bilan de cette utilisation de Yahoo! Pipes dans Firefox globalement positif :

  • Le concept est génial : c'est la programmation fonctionnelle appliquée aux données structurées du web !
  • L'interface d'enchaînement des tuyaux est très intuitive. Le drag'n drop est parfait : on oublie que l'on est dans une appli web et on est vraiment dans un outil de développement.
  • Le debogueur est génial ! On visualise facilement le résultat de chaque étape de la plomberie.
  • C'est bien plus facile à développer et déboguer que XSLT !

Néanmoins l'étiquette « beta » reste de rigueur :

  • l'API, c.à.d. la liste des tuyaux disponibles, n'est pas très intuitive : je n'ai pas compris la logique du classement
  • la documentation des tuyaux est inexistante : Yahoo! ne propose qu'un exemple comme forme de documentation.
  • la documentation de l'affichage de la sortie des tuyaux est aussi inexistante : les éléments title ou y:location.lat/y:location/lon sont particuliers dans l'affichage final, mais il n'existe nulle part de liste complète de ces éléments.
  • l'API est plutôt incomplète : j'aimerais pouvoir traiter des nombres flottants tels que des coordonnées (latitude, longitude)
  • les regex soit-disant « Perl-like » ne le sont pas. Par exemple \L fonctionne pour mettre en minuscules, mais pas \E. Et comme rien n'est documenté...
  • les transformations de types sont laborieuses : le concept d'« item » est nouveau par rapport à d'autres langages de programmation, mais n'est expliqué nulle part. C'est un Item builder qu'il faut utiliser pour convertir du texte en item, mais il est rangé dans la catégorie des Sources. La réorganisation de l'arbre d'un item se fait en utilisant un tuyau Rename. Et il est impossible de convertir du texte en nombre...

dimanche 12 août 2007

Stations Vélib’ : v2.0

Voici une nouvelle version de mon script de conversion des stations Vélib’ en base POI pour Maemo Mapper sur Nokia N800 (voir mon post précédent).

Parmi les améliorations :

  • un script pour automatiser le processus de transformation 
  • le renseignement du champ poi_id, ce qui corrige le problème d'édition des POI 
  • un index sur la table POI sur les champs latitude, longitude en espérant que cela améliore les temps d'accès. En pratique, je n'ai constaté aucune amélioration ;
  • 4 catégories de POI au lieu d'une seule, pour créer votre propre base des stations : Station Vélib’, Station Vélib’ corrigée, Station Vélib’ validée, Station Vélib’ erronée ;
  • des modifications d'implémentaiton XSLT : l'utilisation de xsl:foreach et un traitement exhaustif des caractères de l'adresse de la station.

Lisez la suite pour le nouveau code...

Lire la suite...

lundi 6 août 2007

Bilan d'une semaine de Vélib’

Il y a une semaine, j'ai souscrit un abonnement Vélib’ 7 jours attaché à mon passe Navigo.

Le bilan est simple : je suis accro ! Vélib’ est le complément idéal au métro, et même un substitut pour certains trajets. Et puis c'est aussi LE vélo du geek : les clés d'antivol, c'est has-been ! C'est la magie du passe sans contact qui libère le vélo. Enfin, cela me donne l'occasion d'utiliser mon N800 comme jamais !

J'avais emprunté 5 vélos dès le premier jour, mardi dernier. Je me suis calmé ensuite en m'en tenant à 2 par jour. Pour le dernier jour, j'en ai emprunté 8 !!! Un ce matin pour mon trajet habituel de la Gare d'Austerlitz aux Gobelins, malgré la petite pluie (j'ai pu constater comment cela effraye les utilisateurs : les stations étaient quasiment pleines). Deux ce midi pour aller faire une course du côté de la rue Montgallet. Et cinq ce soir pour une rando Vélib’ à travers Paris, en alternant vélo et marche à pied, de façon à rester dans la limite des 30 minutes gratuites et à laisser passer 10 minutes entre deux emprunts. Le point culminant fut l'ascension de la Bute Montmarte, avec un passage devant le Sacré Cœur. Un peu plus tard j'ai pu frimer avec mon plan électronique des stations lorsqu'un autre cycliste m'a demandé si je savais où étais la station la plus proche. Mais j'ai merdé sur l'un des trajets : je n'ai pas vu le temps passer le long du canal Saint-Martin et j'ai rendu le vélo à 30 minutes et 42 secondes (j'ai le reçu), donc 1 € facturé, d'après la consultation de mon compte sur la borne. On verra si c'est effectivement débité.

J'ai pu mettre en action le GPS Bluetooth Globalsat BT-359W acheté ce midi. Très petit, il tient dans la poche de chemise. Il a été directement détecté par le Nokia N800 et a presque immédiatement alimenté Maemo Mapper (le temps de « fix » initial m'a un peu fait peur). Heureusement parce que le seul logiciel de diagnostic fourni est un logiciel pour Pocket PC, donc d'aucune utilité pour moi.

Le GPS est l'outil indispensable pour optimiser ma balade dans des quartiers que je ne connais pas. Je peux profiter au maximum des 30 minutes de vélos (le GPS permet d'éviter de chercher les noms des rues sur le terrain puis sur le plan) en localisant à la dernière minute la station la plus proche. Ensuite, marche ou flânerie (selon le quartier) de 10/15 minutes vers une autre station pour reprendre un vélo. Le tout sauvegardé en trace GPX. Enfin presque tout, car Maemo Mapper a planté et m'a donc perdu la première heure de trace. Il a aussi tendance à planter lorsque j'éteins le GPS.

Le GPS m'a servi également à collecter les « vraies » coordonnées de quelques stations. En effet certaines coordonnées de stations sont incorrectes sur le site web. Celle de la rue du Chevaleret (13054) par exemple.

J'ai eu plus de mal à configurer l'accès au GPS depuis Ubuntu. Alors que tout était graphique sur le N800, la configuration sur Ubuntu est manuelle : il faut récupérer l'adresse MAC du périphérique (sudo hcitool scan) et le numéro de canal (sudo sdptool records), éditer /etc/bluetooth/rfcomm.conf pour ajouter la définition de rfcomm0 et enfin lancer la création du périphérique (sudo rfcomm bind /dev/rfcomm0). On peut vérifier que ça fonctionne avec « cat /dev/rfcomm0 ».

samedi 4 août 2007

Using OpenStreetMap with Maemo Mapper

I found in the svn source code of Maemo Mapper that the new default map provider for Maemo Mapper is now OpenStreetMap, a free map database that you can contribute to. You can already manually add the OpenStreetMap repository with the following URI: http://tile.openstreetmap.org/%0d/%d/%d.png

Le « full utf-8 » est un mythe !

Suite à un message sur la liste des Mongueurs de Perl à propos d'encodage de caractères, j'ai fait un petit historique des jeux de caractères que j'ai utilisés depuis 1989 :

J'étais en full cp437 sous MS-DOS.

Je suis passé au cp437/cp1252 avec Windows. J'ai résisté au passage à cp850 pour garder le jeu complet de caractères semi-graphiques de cp437.

Avec Unix/Linux j'ai ajouté iso-8859-1 vers 1993.

Avec Windows NT, j'ai abandonné finalement cp437 au profit de cp850, toujours utilisé dans les fenêtres DOS.

L'euro est apparu et je suis passé à iso-8859-15 sous Linux.

Depuis Windows 2000, RegEdit 5 enregistre ses fichiers en « Unicode » (comme dit Microsoft), c'est à dire ucs-2le. C'est donc un encodage de plus que j'utilise régulièrement.

Coté Linux, j'ai abandonné iso-8859-{1,15} pour utf-8 (merci à RedHat d'avoir initié ce changement sur l'ensemble d'une distrib). Mon Nokia N800 est aussi en UTF-8. Malheureusement je bosse encore aussi sous Solaris et AIX qui ne connaissent pas UTF-8 pour les locales de base.

Les encodages de caractères que j'utilise actuellement régulièrement sont donc ASCII, utf-8, cp1252, cp850, ucs-2le et iso-8859-1.

Bref, le « full utf-8 », c'est à dire un environnement où toutes les données texte sont uniquement encodées en UTF-8, est pour moi un mythe. La compatibilité avec les anciennes applications, les anciens formats de fichiers ou les systèmes d'exploitation où UTF-8 n'est pas l'encodage primaire nécessite la manipulation de multiples encodages.

Ma solution : avoir la boîte à outils qui me permette d'éditer les fichiers de la façon la plus transparente possible (détection au chargement d'un fichier texte) et de faire facilement les transformations nécessaires. Et si on travaille sur plusieurs plate-formes, il faut que la boîte à outils soit également portable.

Ma boîte à outil, c'est Vim, avec ces paramètres :

" List of encodings for autodetect
if has('win32') || has('win64')
  set fileencodings=ucs-bom,utf-8,cp1252
else
  set fileencodings=ucs-bom,utf-8,iso88591
endif

jeudi 2 août 2007

Une carte des stations Vélib’ sur Nokia N800

Vélib’, c'est génial ! Abonné depuis deux jours et déjà accro ! Vive le vélo Plug'n Play ! Vive le vélo jetable !

Néanmoins, un outils devient vite indispensable : la carte des stations.

Je suis l'heureux propriétaire d'un Nokia N800 : c'est une « tablette Internet », avec connexions wifi, Bluetooth et un écran 800x480. Le tout fonctionne avec un système ouvert : Linux. Et ça tient dans la poche.

Le logiciel Maemo Mapper pour le N800 permet de télécharger des fonds de carte (Google Maps notamment) et de les afficher. Ces cartes peuvent aussi être récupérées dans un cache pour consultation hors-ligne. Ainsi on peut avoir tous les plans de Paris de Google Maps dans la poche, sans connexion Internet. Maemo Mapper peut aussi afficher les informations d'un GPS Bluetooth.

J'ai donc créé une base de points d'intérêt (POI) pour afficher les stations Vélib’ dans Maemo Mapper.

Mais ma source des données pour les emplacements des stations n'est pas libre : il s'agit du fichier XML publié sur le site officiel (http://www.velib.paris.fr/service/carto, voir ce forum). Je préfère donc éviter de distribuer le fichier terminé. Je vais par contre vous expliquer comment recréer vous-même ce fichier.

Photo de mon N800 avec Maemo Mapper affichant un plan de Paris avec les stations Vélib'

Lisez la suite de ce post pour voir le code...

Lire la suite...

samedi 28 juillet 2007

Extraction des données GPS sous Ubuntu

Première étape du traitement des données : l'extraction des appareils. Voici la manipulation sous Ubuntu 7.04.

Tout d'abord, installons les packages nécessaires :

$ sudo aptitude install gpsd
$ sudo aptitude install gpsbabel

La connexion USB avec le GPS Garmin eTrex Legend C n'est pas reconnue nativement par gpsd sous Ubuntu 7.04. J'ai donc dû ajouter les lignes suivantes à /etc/udev/gpsd.rules pour que le périphérique /dev/gps0 soit créé automatiquement (« Plug and Play ») :

# Garmin eTrex Legend C (kernel driver: garmin_gps)
SUBSYSTEM=="tty", SYSFS{idVendor}=="091e", SYSFS{idProduct}=="0003", SYMLINK="gps%n", RUN+="/lib/udev/gpsd.hotplug"

Pour sauvegarder les données du GPS, il suffit alors de connecter le câble et d'utiliser gpsbabel :

$ gpsbabel -t -r -w -i garmin -f /dev/gps0 -o gpx -F Donegal.gpx

vendredi 27 juillet 2007

De retour d'Irlande...

De superbes randos dans le Donegal. Temps magnifique : à peine une demi-journée sous la pluie. Et une cure de musique irlandaise, arrosée à la Guinness et à la Smithwicks.

J'ai amassé un paquet de données numériques brutes :

  • avec mon Nikon Coolpix E995, des photos numériques horodatées. Cet APN ne gère pas la notion de fuseau horaire. J'ai choisi de conserver toutes mes photos avec la même heure de référence : l'heure de Paris (UTC+2), alors que l'Irlande est à UTC+1. Au départ, j'ai vérifié que l'heure de l'APN était la même que l'heure exacte, extraite du GPS, à la minute près car le Coolpix n'affiche pas mieux. Chaque photo est nommée DSCNxxxx.JPG.
  • avec mon GPS Garmin eTrex Legend C :
    • les traces de l'active log. La quantité de mémoire disponible pour l'active log est limitée, et insuffisante pour 10 jours de rando. Je n'ai donc conservé l'active log que pour les deux derniers jours.
    • des traces sauvegardées (sauvegarde quotidienne de l'active log). Malheureusement, lorsqu'on sauvegarde la trace du jour, on perd les informations temporelles. De plus le nombre de points est limité à 500, soit beaucoup moins que les 800/900 points enregistrés par le log d'une journée. C'est pourquoi la conservation brute de l'active log est préférable.
    • des waypoints GPS, pour localiser mes photos : pour la plupart des photos en rando j'ai enregistré un waypoint nommé xxxx pour la photo DSCNxxxx.JPG. Dans le commentaire du waypoint se trouve automatiquement la date et l'heure au format JJ-MMM-AA hh:mm:ss (fuseau horaire « London » : UTC+1).
    • les waypoints pour les géocaches emportées avant le départ. Malheureusement, la seule que j'ai cherchée est restée désespérément introuvable.

Avec tout cela, je devrais pouvoir :

  • remettre les photos en format portrait à l'endroit
  • utiliser Google Picasa pour ajouter des légendes IPTC aux photos
  • reconstituer la géolocalision de beaucoup de photos, c'est-à-dire ajouter les métadonnées EXIF de latitude/longitude dans le fichier JPEG. Perl et le module Image::ExifTool devraient m'aider à automatiser le processus.
  • créer un fichier KML pour Google Earth contenant les parcours de rando, et des blocs HTML présentant chaque photo et sa légende.

Du boulot en perspective !

dimanche 8 juillet 2007

Astuce GPS : raccourci d'envoi vers un GPS Garmin

Une deuxième astuce pour créer un raccourci Envoyer vers pour transférer un fichier (GPX, LOC...) vers un GPS Garmin.

Lire la suite...

Astuce GPS : raccourci de conversion rapide en GPX

Voici un mode d'emploi pour créer un raccourci pour Windows pour convertir rapidement un fichier de données GPS vers le format GPX, en utilisant GPSBabel. Ainsi, en quelques clics on pourra par exemple convertir un fichier .LOC téléchargé sur geocaching.com.

Lire la suite...

samedi 7 juillet 2007

Vacances en Irlande : les landes du Donegal

Je pars dans quelques jours en vacances en Irlande. Une itinérance sportive organisée par l'UCPA.

J'ai créé une carte du parcours prévu (PDF) sur Google Maps et elle est embarquée sur ce blog grâce au site Embed Google 'My Maps'. Vous pouvez la voir en grand sur Google Maps.

vendredi 18 mai 2007

Sécuriser XAMPP

Quelques instructions pour sécuriser XAMPP pour un environnement de développement personnel.

Lire la suite...

- page 2 de 4 -