Olivier Mengué – Code & rando

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

mardi 1 mai 2007

Conseils aux kayakistes (de l'époque)

Voici quelques extraits d'un article du Touring du 15 août - 15 septembre 1968 intitulé « Conseils aux kayakistes (de l'époque) » (sic) signé « A. Chassang ». Cet article qui montre l'évolution des techniques et de l'outillage du sportif, est tout aussi plaisant à lire qu'il l'était en 1968. Le dernier paragraphe nous montre le caractère visionnaire de l'auteur.

Lire la suite...

jeudi 12 avril 2007

Simple Perl wrapper for non-Perl TAP programs

TAP (Test Anything Protocol) is a simple protocol to report the result of a testsuite. It was initially designed for test suites of Perl modules, but developers of the Test::Harness modules have seen the potential for a more generic usage of the protocol outside of the Perl ecosystem and libraries are in development for other programming languages.

I'm writing C code and contrary to most programming langages today, there is no library to build test suites in a standard way. Java has JUnit, Perl has Test::Simple and Test::More...

Someone has developped libtap, but no one uses it (except FreeBSD developers as advertised on the site). Also, I do not like the library interface because it exports functions such as ok() or diag() which could conflict with existing code. So, I wrote my own library that I will publish one day. But that is not the point of this post.

When you have written a program conforming to the TAP, you want tools to analyse the result of the tests. And the main advantage of using a standardized protocol is to be able to use generic tools and avoid to implement/test/debug them yourself. The problem with TAP is that the only tool that is available is prove and it suffers of a major flaw: it is designed to run only Perl tests.

Here is a simple TAP-compliant C program that outputs the result of a static testsuite:

#include <stdio.h>

int main(int argc, char *argv[])
{
  puts("1..1\nok 1");
  return 0;
}

And the output:

$ gcc a.c
$ ./a.out
1..1
ok 1

When trying to run it with prove, perl complains it did not found Perl code:

$ prove a.out
a....Unrecognized character \x7F at a.out line 1.
a....dubious
        Test returned status 9 (wstat 2304, 0x900)
FAILED--1 test script could be run, alas--no output ever seen

So I wrote the following generic Perl wrapper a.out.t that just runs a.out:

# vim:set ft=perl:

use strict;
use File::Spec;
my $exe = File::Spec->rel2abs($0);
$exe =~ s/\.t$//;

exec $exe $exe or die "$exe: $!";

And now, success is achieved:

$ prove a.out.t
a.out....ok
All tests successful.
Files=1, Tests=1,  0 wallclock secs ( 0.01 cusr +  0.01 csys =  0.02 CPU)

mercredi 7 mars 2007

Installer Python, SQLObject et Cheetah sous Windows

Voici un micro tutoriel pour installer le langage Python et quelques modules de base qui seront bien utiles au RIF.

Lire la suite...

vendredi 23 février 2007

The-passenger.com : Nokia lance ses GPS

Nokia lance ses téléphones incluant une puce GPS. Pour l'occasion il ont créé un site, The-Passenger.com, où l'on peut jouer à l'espion dans Paris au volant d'une Mini et en suivant les instructions du système de navigation.

Le jeu est techniquement bien fait. On est vraiment dans un film et on a presque l'impression de piloter la voiture. On excusera le fait qu'on fait au moins quatre fois fois le tour du meme pâté de maison : c'est sûr c'est pas facile de bloquer tout un quartier de Paris. Heureusement que tous les réalisateurs ne font pas comme Claude Lelouch pour C'était un rendez-vous.

Mais c'est du coté du scénario, manifestement pas écrit par un parisien, que ça pêche. D'abord, toutes les rues filmées sont sur l'Île-Saint-Louis. Or dès qu'on sort de la voiture, on se retrouve à l'Arc de Triomphe ou à la Tour Eiffel. Ensuite, le jeu finit à l'héliport Notre-Dame (sic). Mais il n'y a pas d'héliport dans Paris, ni même d'hélicoptère : le survol de Paris est en effet totalement interdit.

Et pour finir, les acteurs ont des vrais accents français. Tellement vrais qu'on ne comprend rien lorsqu'ils parlent anglais !

jeudi 22 février 2007

Cheap podcast download using cmd.exe and wget

Why use huge and intrusive software such as iTunes when a small script is just enough?

I own a NDEO Equinox² OGG/MP3/FM player/recorder which appears in the PC as a simple 512 Mb flash drive. Besides listening to music and radio it is very convenient to move files to/from work and it recharge itself from the USB. It works on any operating system which support USB storage without a special driver and help to stay away from DRM.

I'm also using the storage feature for scripts directly useful for the main usage of this particular flash drive: retrieving podcasts. I have installed GNU wget on all my Windows PCs (this is an invaluable tool that is particularly useful to download big files (see --continue and --limit-rate options) and for mirroring of web sites) so with the following 10 lines cmd.exe script I can download the latest Radio France podcats of the broadcast I missed.

Here is the generic Windows script for any Radio France MP3:

@echo off
setlocal
:: Le numero de podcast est soit sur la ligne de commande
:: soit dans le nom de ce script get-<numero>.cmd
if not "%1"=="" (set n=%1) else (
    for /F "delims=-_ tokens=2" %%i in ("%~n0") do set n=%%i
)
set rss=rss_%n%.xml
wget -O %rss% http://radiofrance-podcast.net/podcast/%rss% || goto :EOF
for /F "tokens=2" %%f in ('findstr "enclosure" %rss%') do set URL=%%f
set URL=%URL:~5,-1%
echo %URL%
wget -c %URL% && del %rss%

It fetches the RSS file, extracts the URL of the MP3 file and downloads it. The podcast number must be either given file as a command line argument or in the name of the file itself. For example to retrieve "France Info - Chronique Jeux Vidéo, just save the script as radiofrance-18963.cmd. Run it today and it will download 18963-18.02.2007-ITEMA_20059064-0.mp3.

Note: I you are behind an HTTP proxy, you have to set the http{,s}_proxy environment variables. For example:

set http_proxy=http://myproxy:3128
set https_proxy=http://myproxy:3128

You can define them once for all in the Windows Control Panel.

vendredi 16 février 2007

Vim & Polyhedra : added polycfg.vim

I uploaded two Vim syntax scripts for Polyhedra :

See my post about the previous release.

dimanche 11 février 2007

VirginMega.fr : un site raciste !

Virgin France fait de la ségregation technologique ! Impossible de s'y connecter avec un navigateur autre que Internet Explorer ou Mozilla Firefox. Et cela depuis des années.

En voici quelques preuves, grâce à l'archive du web :

  • De novembre 2002 à avril 2004 : seul Internet Explorer (4.x ou plus) est accepté.
  • Depuis mai 2004, le site fait la ségregation selon différents critères :
    • le système d'exploitation : Windows 98 SE ou supérieur. Le site, qui sait tout sur tout, indique : « Les navigateurs adaptés au surf sur ce site ne sont pas encore disponible pour le système d'exploitation que vous utilisez. » Firefox existait déjà à l'époque et fonctionnait aussi bien sur Linux que sur Windows.
    • le nom du navigateur : Opera est donc refusé, quelle que soit la version. Sur la version 9.0 pour Windows, j'obtiens : « La version du navigateur que vous utilisez ne vous permet de surfer sur ce site. » Et sur ma tablette Internet Nokia N800, c'est le système d'exploitation (Linux/Maemo) qui ne lui plaît pas.
    • les cookies : « Pour surfer sur ce site votre navigateur doit être réglé pour accepter les cookies. » Même pour voir la page d'accueil.

Inutile de vous dire que je n'ai jamais vu le site.

Croyez-vous que je doive faire appel à la HALDE ?

En tout cas, du côté de Virgin, ils devraient se poser des questions. Se passer des DRM, c'est bien, mais abolir ces barrières bidon et simplement respecter les standards, c'est mieux. Si c'est un contrat avec Microsoft qui leur impose ces restrictions (VirginMega.fr est le site mis en avant dans le Windows Media Player pour l'affichage des informations sur les artistes et les albums, donc ils ont un contrat), sont-ils vraiment gagnants à refuser des clients potentiels ?

Compléments (19h25) :

dimanche 28 janvier 2007

I'm a cmd.exe master

A few months ago, Paul Bissex posted this on his blog: Let’s play a game: BASIC vs. Ruby vs. Python vs. PHP. Just a small exercise at implementing a simple algorithmic problem in diverse programming languages.

I replied with an implementation in an old and widespread but still much unknown, language: the Microsoft Command Processor (cmd.exe). Old because it inherits from the command.com present in 80's {PC,MS}-DOS. Widespread because it is available on every Windows machine in the world. Unknown because few use it.

Lire la suite...

samedi 27 janvier 2007

Vim & Polyhedra

I uploaded this afternoon on vim.org a syntax highlighting script for Polyhedra CL.

Polyhedra is a memory based database engine. It can be used in for embedded development, but also in high performance application where more classiscal disk-based engines are too slow. CL is the programming language used for stored procedures.

dimanche 21 janvier 2007

Formations gratuites à l'informatique à la Cité des Sciences

La Cité des Sciences propose tout au long de l'année des formations gratuites à des logiciels libres au Carrefour Numérique :

Voici quelques liens vers le programme de ces ateliers :

Why use REST, CRUD (and avoid SOAP) ?

Ruby on Rails 1.2 has been released. In the announcement, David writes about the new features he announced at the RailsConf in July. Don't miss the video of his talk (the slides are here).

The main points of the talk:

  • what is REST and why it is good,
  • how implementing REST is available in Rails,
  • what is CRUD, how CRUD helps in designing your model (in a MVC application),
  • using mimes types, and content negociation, a powerful feature of HTTP, in Rails for an unified set of set of URLs,
  • how to access to REST web services using ActiveResource

I'm just glad that development tools improve to simplify REST-enabled and content negociation-enabled applications.

I'm already using theese HTTP features in my Météo Mobile application developed in PHP :

  • /meteo/bna/06 uses content negociation (examinates Accept header) to serve the most appropriate content type
  • /meteo/bna/06.html serves XHTML as text/html
  • /meteo/bna/06.xhtml serves XHTML as application/xhtml+xml
  • /meteo/bna/06.wml serves WML as text/vnd.wap.wml for mobile devices

For those that would like to implement content negociation in PHP, the main tip is to capture 406 errors to be able to serve content to (mobile) browsers that do not accept */* in Accept:.

jeudi 18 janvier 2007

Tutoriel GPS, photos, Google Maps

Je vous invite à consulter ce tutoriel en anglais qui explique pas à pas comment mettre sur le web un compte-rendu de randonnées : la carte avec Google Earth et Google Maps, les photos avec Picasa, et la géolocalisation des photos avec WWMX Location Stamper.

jeudi 11 janvier 2007

Compte-rendu du FOSDEM 2006

Pour vous inciter à aller au FOSDEM 2007, voici un compte-rendu détaillé du FOSDEM 2006 que j'avais écrit en mars dernier.

Lire la suite...

samedi 6 janvier 2007

Départ du Dakar

C'est le départ du rallye Dakar. Voici quelques sites pour rêver :

Nouveautés sur Météo Mobile

J'ai fait quelques modifications sur mon site Météo Mobile (la météo spécialisée, à consulter sur votre téléphone) :

  • l'ajout des "bulletins de synthèse hebdomadaire et Analyse du manteau neigeux".
  • un peu de réorganisation sur la page d'index pour afficher les liens vers ces nouvelles informations. Les bulletins neige sont maintenant groupés par massif montagneux.

vendredi 22 décembre 2006

Encodage BER et Perl

Une réponse à une question sur la liste de diffusion des Mongueurs de Perl m'a amené à explorer l'encodage 'w' (BER : Binary Encoded Representation) de la fonction pack() de Perl 5 (voir perlpacktut dans la doc).

La chaîne de caractères obtenue est de longueur variable car découpée par paquets de 7 bits. Voici quelques lignes de Perl pour trouver les bornes des changements de longueur :

my @a = map { ((2**(7*$_))-1, 2**(7*$_)) } 0 .. 5;
print map { "$_: ".unpack('H*', pack('w', $_))."\n" } @a;

On obtient ceci (à gauche, le nombre en décimal et à droite encodé en BER puis en hexa) :

0: 00
1: 01
127: 7f
128: 8100
16383: ff7f
16384: 818000
2097151: ffff7f
2097152: 81808000
268435455: ffffff7f
268435456: 8180808000
34359738367: ffffffff7f
34359738368: 818080808000

mardi 19 décembre 2006

Météo mobile : lancement officiel

Mon site "méteo mobile" existe déjà depuis presque un an. Longtemps réservé à une élite (2 personnes : mon frère et moi) en raison de problèmes techniques (pas facile le développement web pour mobiles !), il était néanmoins depuis plusieurs mois indiqué sur ma page d'acceuil.

Maintenant que les problèmes techniques sont résolus (je vous en parlerais un de ces jours) et que la saison de ski commence, il est temps de faire un peu de pub. Il s'agit de la présentation d'informations météo spécialisées de Météo France pour consultation sur téléphone mobile. Le but : avoir ces infos toutes fraîches, dans la main, lorsqu'on pratique des sports de plein air. Ces bulletins ne sont malheureusement pas disponibles sur les divers "portails de contenu" des opérateurs, donc c'était un beau projet technique utile.

Vous avez donc accès sur votre téléphone mobile :

  • aux bulletins neige et avalanches par département
  • aux bulletins côtiers par région

Ces bulletins sont directement téléchargés du site Météo France et simplement reformatés pour l'affichage sur téléphone mobile. Les fautes d'orthographe viennent directement de Météo France.

Bien sûr, il n'y a aucune garantie de service : il ne s'agit que d'un site personnel, soumis au bon vouloir de Météo France et de mon hébergeur. Donc, ne comptez pas dessus si vous partez en montagne. Renseignez-vous plutôt directement auprès de Météo France et des gardiens de refuges.

Voici donc l'adresse à saisir sur votre mobile : http://o.mengue.free.fr/meteo/

J'ai testé le site avec le navigateur interne d'un Nokia 3100 (mon cadeau de Noël de l'année dernière), d'un Nokia 5140 et du navigateur mobile Opera Mini (utilisable sur ces deux mobiles et sur de nombreaux autres). Je suis curieux de lire vos réactions et suggestions d'améliorations.

samedi 25 novembre 2006

Django aux Journées Perl 2006

Hé oui, Django c'est du Python, et pourtant on j'en parlerais aux Journées Perl 2006 ce week-end à la Cité des Sciences et de l'Industrie.

J'ai deux présentations au programme :

  • 14h00 Introduction aux ORM : un introduction générale sur les ORM et une présentation du modèle de données utilisé en commun dans plusieurs des présentations : un mini modèle représentant une association de randonneurs.
  • 14h10 Les modèles de Django : une petite introduction générale sur Django puis l'accent sera mis sur la définition des modèles Django, l'API de requêtes et comment les spécificités de Python sont utilisées. L'objectif est de montrer un modèle de conception d'ORM et comment le sucre syntaxique du langage peut être mis à profit.

Je vous invite à aller voir les autres présentations sur les ORMs qui ont lieu le samedi après-midi.

mardi 21 novembre 2006

De Moret à Montigny

Dimanche, une rando dans le sud de la forêt de Fontainebleau. 28.6 km mesurés par le GPS. Les couleurs d'automne étaient à leur apogée : du vert au roux en passant par divers tons de jaune. Un peu de pluie le matin, mais le soleil était là l'après-midi pour éclairer les feuillages avec une belle lumière rasante.

Couleurs d'automne

Patientez quelques jours pour un compte-rendu plus complet avec plus de photos et la trace GPS.

lundi 20 novembre 2006

Dotclear et le spam

À peine quelques semaines d'existence de ce blog, et déjà du spam. C'est la fonction trackback de Dotclear qui est ciblée.

Voici quelques requêtes que j'utilise pour les éliminer :

SELECT * FROM dc_comment WHERE comment_trackback = 1
AND (comment_site LIKE '%sitesfree%' OR comment_auteur LIKE '%viagra%' OR comment_auteur LIKE '%pills%' OR comment_site LIKE '%hydrocone%')

DELETE FROM dc_comment WHERE comment_trackback = 1
AND (comment_site LIKE '%sitesfree%' OR comment_auteur LIKE '%viagra%' OR comment_auteur LIKE '%pills%' OR comment_site LIKE '%hydrocone%')

- page 3 de 4 -