Olivier Mengué – Code & rando

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

vendredi 12 août 2011

ARGV::URL - a new tool for Perl one-liners

I published a new module on the CPAN : ARGV::URL. At import time it'll process @ARGV to allow handling of URLs as transparently as filenames in one-liners. Here are a few examples of its power.

Show the count of fans for Delicious's user dolmen:

$ perl -MARGV::URL -MJSON -E 'say "Fans: ", (decode_json <>)->[2]->{n}' http://feeds.delicious.com/v2/json/userinfo/dolmen
Fans: 9

Show lines starting with 'ftp ' in the document at the given URL:

$ perl -MARGV::URL -nlE 'say if /^ftp /' http://www.iana.org/assignments/port-numbers
ftp              21/tcp    File Transfer [Control]
ftp              21/udp    File Transfer [Control]
ftp              21/sctp   FTP

mercredi 10 août 2011

Les noms de domaine en attente à l'AFNIC

Depuis le 1er juillet les mots réservés ont été débloqués pour la réservation de noms de domaines en .fr. C'est donc la course à la réservation de mots usuels comme nom de domaine. Voici une petite visualisation des noms en attente (examen de la légitimité des demandes) à l'AFNIC :

Wordle: 2011-08-10 Les noms de domaines en attente à l'AFNIC

Et voici le code Perl d'extraction que j'ai utilisé pour transformer les données avant de les soumettre à Wordle :

#!/usr/bin/perl -nl
s/^\d+;([^;]*)\.fr;.*;En attente \/ Pending$/\1/ and print

dimanche 26 octobre 2008

Fontaines autour de Dourdan

Cela fait bien longtemps que, malgré le titre de ce blog, je n'avais pas publié de randonnée. En voici une !

31km autour de la gare de Dourdan en passant par plusieurs fontaines (eau non potable) et les villages/hameaux des Granges-le-Roi, Sainte-Mesme, Saint-Martin de Bréthencourt, Hautbout et Denisy :

Consultez mes archives publiques de randos.

dimanche 28 septembre 2008

xmltv-fr.appspot.com est en ligne !

J'annonce xmltv-fr.appspot.com, mon grabber XMLTV qui diffuse la grille de programmes de télévision au format XMLTV.

J'avais déjà développé une solution à base de scripts shell et de feuille de style XSLT, puis un proxy en PHP il y a 6 mois, mais j'avais des problèmes de fiabilité en raison de l'hébergement chez Free.fr : un appel sur trois au service échouait. J'ai donc fait en une journée le portage en Python pour l'héberger sur Google AppEngine. Grâce à l'infrastructure de Google je ne devrait pas avoir de soucis du même type.

Pour l'instant, le flux récupéré ne correspond qu'à un seul appel au site Télérama et donc ne récupère que 3h de programmes des 6 chaînes analogiques nationales. Mais je compte bien poursuivre le portage pour arriver à l'équivalent de la version PHP puis éventuellement utiliser le stockage Google pour améliorer les performances grâce à un cache.

Pour vous faire patienter, voici un peu de doc sur l'interface du grabbber PHP :

  • /xmltv/telerama.xmltv : 3h de programme à partir de maintenant sur les 6 chaînes (c'est la seule chose qui fonctionne sur xmltv-fr.appspot.com pour l'instant).
  • /xmltv/telerama.xmltv?start=20080927220000 : 3h de programme à partir du samedi 27 à 22:00 (heure de Paris)
  • /xmltv/telerama.xmltv?channels=192,4,80,34,47,118,111,445,119,195,446,444,234,78,226,481,458,482 : 3h de programme de la TNT

J'ai écrit cette semaine une feuille de style XSLT pour faire plusieurs appels au service et combiner les résultats en un seul fichier XMLTV :

xsltproc -o tv.xml http://o.mengue.free.fr/xmltv/telerama-full.xslt http://o.mengue.free.fr/xmltv/TNT.xml

Dès que j'aurais implémenté les paramètres start et channels la même feuille de style pourra aussi fonctionner pour xml-fr.appspot.com.

MàJ 2008-09-29 : le portage est complet, l'API complète (start, channels) est disponible, donc vous pouvez utiliser la même feuille de style simplement en changeant l'URL du service. Voici un exemple où je récupère le programme des 5 prochains jours (voir le format du paramètre duration) :

xsltproc -o tv.xml -stringparam xmltv-url http://xmltv-fr.appspot.com/telerama.xmltv -stringparam duration P5D http://o.mengue.free.fr/xmltv/telerama-full.xslt http://o.mengue.free.fr/xmltv/TNT.xml

Malheureusement, je m'aperçois que je rencontre les mêmes problèmes d'accès au service : je ne peux qu'en déduire que cela vient en fait du site Télérama. À suivre…

dimanche 21 septembre 2008

PhotoSynth : le salon De Gaulle, au ministère de la Défense

J'ai profité des Journées Européennes du Patrimoine pour faire quelques visites d'hôtels particuliers de la rue de Grenelle.

Voici la reconstitution en 3D, grâce à PhotoSynth, du salon De Gaulle à l'hôtel de Brienne (ministère de la Défense). Ce salon fût occupé par le Général en tant que chef du gouvernement provisoire du 25 août 1944 à janvier 1946.

Pour voir en plus grand, suivez ce lien. Pour la visualisation 3D l'installation du plug-in PhotoSynth est nécessaire. Et il n'est disponible que sous Windows. XP et Vista uniquement. Désolé.

samedi 6 septembre 2008

Mise à jour du site MétéoFrance, donc de Météo Mobile

Le site de MétéoFrance a été relooké. Pas pour le mieux étant donné que l'on retrouve beaucoup de problèmes du site précédent et d'autres en plus : le changement cosmétique est malheureusement bien suffisant et encore une fois mal réalisé :

  • du Flash partout : les possesseurs d'iPhone (qui n'affiche pas le flash) seront à la fête ;
  • l'activation des cookies est nécessaire pour passer la page d'accueil : inadmissible !
  • ce cookie est défini par du code JavaScript sur la page d'accueil, donc JavaScript est nécessaire ;
  • le code HTML est changé, mais toujours aussi bogué puisque ce n'est pas du XML valide (9 erreurs relevées sur le W3C Validator sur la page d'accueil) ;
  • il y a toujours autant de pubs intrusives (popups...) ;
  • les URLs sont toujours aussi abominables. Exemple : http://marine.meteofrance.com/marine/accueil?17865.path=marinecote

Cette réorganisation impacte ma passerelle de consultation des bulletins sur téléphone mobile, Météo Mobile, qui ne fonctionnait donc plus :

  • l'URL des bulletins a changé. Exemple d'un bulletin côtier : http://marine.meteofrance.com/marine/accueil?MARINE_PORTLET.path=marinecotebulletinCOTE_RAPH_MENT ;
  • il faut maintenant envoyer le cookie IntersticielPerso=done pour ne pas être redirigé vers la page d'accueil (voir le code source de la page d'accueil sans cookie) ;
  • il y a encore des problèmes de XML, différents de la version précédente, donc on ne peut toujours pas utiliser un analyseur XML pour extraire le texte du bulletin.

Voici comment j'ai testé le requêtage HTTP pour récupérer la page d'un bulletin :

C:\>curl -i --header "Cookie: IntersticielPerso=done" http://marine.meteofrance.com/marine/accueil?MARINE_PORTLET.path=marinecotebulletinCOTE_RAPH_MENT

J'ai adapté le code de récupération. L'ancien code était très simple, grâce à file_get_contents() :

$url = 'http://www.meteofrance.com/FR/mer/bulCote.jsp?LIEUID=COTE_' . $lieu;
$data = file_get_contents($url);

Pour passer le cookie, j'ai dû utiliser la libcurl ainsi :

$url = 'http://marine.meteofrance.com/marine/accueil?MARINE_PORTLET.path=marinecotebulletin/COTE_' . $lieu;

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
// C'est ici qu'est la partie spéciale du site de MétéoFrance
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Cookie: IntersticielPerso=done"));

curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 4); // 4 secondes
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$page = curl_exec($ch);

if (curl_errno($ch)) {
    // Faire quelque chose de curl_error($ch)
    $page = '';
}
curl_close($ch);

Comme vous l'avez vu j'utilise pour l'instant les bulletins publiés sur le site web public. Mais je préfèrerais avoir un accès direct au bulletin texte brut. Je n'ai rien trouvé sur le site FTP de MétéoFrance. Alors, si vous connaissez l'URL d'une telle source, je suis intéressé.

mercredi 6 août 2008

Just released: curlIE

I just published on Google Code a small software project I wrote about one year ago but that I just rediscovered on my hard drive a few weeks ago: curlIE. This is an implementation of a subset of cURL, the command line tool for transferring files with URL syntax, in JScript in the Windows Script Host environment using the XMLHttpRequest object. This is the first piece of code since I write JavaScript/WSH code (more than 10 years now) that I found good enough to be worth publishing. There is probably more to dig in my hard disk...

As you can see in the source, the code that deals with HTTP is very small as everything is delegated to the XMLHttpRequest object. In fact, half of the lines are a generic command line parser that implements the classic UNIX-style argument parsing with short and long options to match cURL. Just the few major options are currently implemented. I will add others if I get incoming feature requests...

mercredi 9 juillet 2008

Utiliser une base Access dans OpenOffice.org

Il est possible d'utiliser et de modifier sous Windows les données d'une base de données Microsoft Access sans le logiciel Microsoft Access.

Le pilote d'accès aux bases de données Access, Microsoft Jet Engine, est depuis longtemps un composant intégré à Windows. Voici comment paramétrer OpenOffice.org 2.4 sous Windows pour utiliser une base et ainsi profiter du requêteur graphique (semblable à celui d'Access), réaliser des mailings, etc.

Lire la suite...

vendredi 4 juillet 2008

À Vélib’, pratiquez-vous la « chronoculture » ?

Depuis le 14 juin Vélib’ a ajouté une caractéristique au compte abonné : le « Bonus V’+ ». Le principe est de récompenser les utilisateurs qui ramènent des Vélib’ aux stations les plus dépourvues : celles situées en haut des collines de Paris. Découvrez la chronoculture !

Lire la suite...

mardi 27 mai 2008

My first Perl 6 / rakudo patch

<rakudo_svn> r27835 | pmichaud++ | [rakudo]:
<rakudo_svn> r27835 | pmichaud++ | * Add an implementation of infix:<xx>, from RT#54870 (dolmen++)
<rakudo_svn> r27835 | pmichaud++ | * Patch courtesy Olivier Mengu?\195?\169 <olivier.mengue xxatxx gmail.com>
<rakudo_svn> r27835 | pmichaud++ | * One minor change to handle negative repetition values.

dimanche 18 mai 2008

Journées Perl 2008, à Albi

Les journées Perl 2008 auront lieu à la fin du mois à Albi. Une fois de plus je ne présenterai pas de Perl. Il y a un an et demi j'avais présenté l'ORM de Django aux Journées Perl 2006. Cette fois-ci, ce ne sera pas du Python, mais du shell Unix (ksh, bash...) : ma présentation est intitulée Mieux programmer en shell. Le contenu sera fortement inspiré du guide de style non officiel d'OpenSolaris.

Mise à jour : voici les dispositives de ma présentation « Mieux programmer en shell ».

dimanche 2 mars 2008

Télérama → XMLTV : mise à jour

J'ai mis en ligne une version corrigée des mes outils de transformation de la grille télé de Télérama en XMLTV (voir mon billet précédent). Maintenant l'applet OnTV disponible pour le bureau Gnome fonctionne avec ces outils.

Capture de l'affichage des programmes avec OnTV

Lire la suite...

mercredi 20 février 2008

Je vais au FOSDEM 2008

I’m going to FOSDEM, the Free and Open Source Software Developers’ European Meeting

Comme chaque année depuis 2005, je vais au Free and Open Source Software Developers’ European Meeting, à Bruxelles, le week-end prochain. J'avais publié l'année dernière mon compte-rendu de 2006. Il est toujours utile pour ceux qui hésitent à venir à cet évènement.

lundi 11 février 2008

Les programmes télé de Télérama en XMLTV

XMLTV est un format informatique pour les programmes de télévision. Ce format est utilisable dans un nombre grandissant d'applications. Le magazine Télérama propose sur son site une grille des programmes télé, mais juste consultable sur le web. Pas de XMLTV.

Je vous propose donc de combler ce manque avec un petit cours de reverse engineering sur le web et la démonstration de quelques outils pour arriver rapidement à vos fins. La grille de Télérama est une excellente cible pour ce genre d'exercice parce que, vous le verrez, la tâche n'est pas simple, mais possible. Elle donne l'ocassion de montrer l'usage de plusieurs outils (curl, XSLT, Perl) et c'est un exemple de ma démarche de prototypage rapide en utilisant le meilleur de chacun.

MàJ 2008-02-15 : j'ai profondément remanié l'introduction et la conclusion suite à quelques commentaires de lecteurs.

Lire la suite...

jeudi 24 janvier 2008

Formule Excel : extraire le nom de fichier d'un chemin

Voici une formule bien utile pour les administrateurs système qui manipulent des listes de noms de fichiers avec Excel. Elle permet de supprimer le répertoire d'un chemin. Par exemple, « /abc/def/ghi/truc.txt » devient « truc.txt ». A1 est la cellule contenant le texte d'origine.

=SI(ESTERREUR(TROUVE("/";A1));A1;STXT(A1;
 TROUVE(CAR(1);SUBSTITUE(A1;"/";CAR(1);
 NBCAR(A1)-NBCAR(SUBSTITUE(A1;"/";""))))+1;
 NBCAR(A1)))

Sur un Excel anglophone, ou sur Google Document et Tableur cela s'écrit (notez que CHAR(1), l'équivalent anglais de CAR(1) ne fonctionne pas sur Google Document et Tableur) :

=IF(ISERROR(FIND("/";A1));A1;MID(A1;
 FIND("¤";SUBSTITUTE(A1;"/";"¤";
 LEN(A1)-LEN(SUBSTITUTE(A1;"/";""))))+1;
 LEN(A1)))

En Perl, cela s'écrirait :

s@.*/@@;

Est-ce que quelqu'un osera dire qu'Excel c'est simple et que Perl, c'est compliqué ?

Une partie de cette formule Excel est bien utile dans d'autres cas : il s'agit de la recherche de la dernière occurence d'une chaîne.

=TROUVE(CAR(1);SUBSTITUE(A1;"/";CAR(1);
 NBCAR(A1)-NBCAR(SUBSTITUE(A1;"/";""))))

Et en anglais :

=FIND("¤";SUBSTITUTE(A1;"/";"¤";
 LEN(A1)-LEN(SUBSTITUTE(A1;"/";""))))

Un peu d'explications :

  • NBCAR(A1)-NBCAR(SUBSTITUE(A1;"/";"")) calcule le nombre d'occurences de "/" ;
  • le SUBSTITUE() qui l'entoure permet de remplacer cette occurence par un caractère spécial (ici CAR(1) est le caractère dont le code est 1) ;
  • le TROUVER() englobant permet de trouver la position de ce caractère spécial.

Et pour vous faire rire un peu, voici la formule que le support Microsoft propose (à valider en technique matricielle avec Ctrl+Maj+Entrée). Cette fois, le texte dans lequel on cherche est dans la cellule A2 pour bien distinguer de la cellule A1 utilisée dans la formule matricielle.

=STXT(A2;MAX(SI(ESTERREUR(
 CHERCHE("/";A2;LIGNE(DECALER(INDIRECT("A1");;;NBCAR(A2)))));0;
 CHERCHE("/";A2;LIGNE(DECALER(INDIRECT("A1");;;NBCAR(A2))))))+NBCAR("/");
 NBCAR(A2))

Laquelle préférez-vous ?

mercredi 23 janvier 2008

Maman utilise Ubuntu !

Ça y est, depuis samedi ma mère utilise Ubuntu au lieu de Windows !

Mon vieux PC de 1998 a fait son temps, et même si c'était le top à l'époque (Céléron 300 MHz overclocké à 400, nVidia TNT) il devenait insuffisant pour utiliser Firefox et Thunderbird en même temps, sans compter l'antivirus AVG qui prenait aussi de plus en plus de place. D'autant plus qu'il y a un an j'avais dû restreindre à 160 Mo la mémoire utilisée par Windows au lieu des 196 Mo physiquement installés en raison d'un défaut sur l'une des barrettes (paramètre /MAXMEM dans le boot.ini).

Je préparais cette migration depuis plusieurs années en essayant de remplacer petit à petit les logiciels habituels de mes parents par des solutions libres, en cherchant toujours un logiciel pour Windows existant également sous Linux. Le bourrage de crâne concernant l'intérêt des logiciels libres était léger, mais régulier.

Voici les logiciels qu'ils utilisent :

  • Firefox pour la navigation web (depuis 4 ans). Mon père continue malgré tout à utiliser IE6, bien plus véloce pour ses transaction sur eBay.
  • Thunderbird pour la messagerie. Outlook Express n'est remplacé que depuis 4 mois, parce qu'il a fallu que j'attende Thunderbird 2 pour que le module d'import des e-mails sache importer les messages en respectant la structure des dossiers existant. Lors de cette migration j'en avait profité pour séparer les comptes e-mails sous deux profils différents. Mes parents utilisaient auparavant un seul compte Windows et un seul compte Outlook Express, ce qui était plus pratique à l'époque de la connexion par modem : celui qui se connectait à Internet récupérait d'un seul coup les e-mails pour toute la famille.
  • Picasa, pour le classement des photos numériques (depuis 2 ans et demi). Ce n'est pas libre, mais c'est le seul logiciel de ce type existant à la fois pour Windows et Linux. Et c'est gratuit.
  • The Gimp pour la retouche de photos. Mon père l'a même utilisé pour faire les plans de modification de leur maison !
  • OpenOffice.org : ma mère a même pu vanter à l'un de ses collègues de cours d'anglais la fonction d'export PDF intégré, fonction qui n'existe pas dans la suite de Microsoft.

Finalement, ce que je craignais le plus, le changement de système d'exploitation, est passé comme une lettre à la poste. Maman ne voit pas la différence entre l'Explorateur Windows et Nautilus. Le menu Raccourcis de Gnome est toujours bien accessible et il n'y a pas à chercher parmi les 14 lettres de lecteur (de A: à O:) de Windows. Insérer/éjecter une clé USB est très semblable même si le vocabulaire diffère un peu. Peut-être faudra-t-il juste que j'ajoute un raccourci Win+E pour accéder rapidement à Nautilus puisque mes parents y sont habitués.

J'avais envisagé un temps d'utiliser un NAS pour qu'ils puissent partager des fichiers entre les deux PC mais il semble que la migration soit complète et définitive et que l'ancien PC sous Windows 2000 puisse être abandonné d'ici quelques semaines.

J'ai même pu éprouver Wine avec le CD d'un logiciel d'astrologie que ma mère vient d'avoir gratuitement avec un magazine. Mis à part quelques problèmes de polices de caractères, tout s'exécute bien.

Il me reste toutefois encore quelques tâches pour que la migration soit complète :

  • installer l'imprimante laser HP 1018 : je ne m'inquiète pas trop à ce sujet parce que la compatibilité Linux était un critère de choix du modèle à l'époque.
  • migrer les photos et surtout les méta données enregistrées par Picasa : je n'ai trouvé aucune info là-dessus pour l'instant.

Sous le capot d'une station Vélib’

Ce soir, j'ai assisté par hasard au reboot d'une station Vélib’.

Lire la suite...

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...

- page 1 de 3