Archive for August, 2012

Raisons techniques pour ne pas utiliser Hotmail

Sunday, August 26th, 2012

Si le service de messagerie Hotmail est peu utilisé dans le milieu professionnel, il reste très répandu chez les particuliers (des millions de français utilisent une adresse @hotmail.com c’est davantage que Wanadoo/Orange !). Pourtant, Hotmail est une véritable plaie : il ne respecte pas certains standards de la messagerie, et c’est un casse-tête pour les sysadmins… doit-on tenter d’expliquer cela aux utilisateurs ? ou doit-on bidouiller des solutions pour prendre en compte la position dominante d’Hotmail ?

Comme souvent, la réponse est entre les deux : si l’on tâche de s’adapter aux différents “caprices” d’Hotmail, ce blog-post essaye d’expliquer pourquoi vous ne devez pas utiliser Hotmail ! Et je ne parlerai pas ici des problèmes de confidentialité posés par l’utilisation d’une usine à emails (tout comme Yahoo, Gmail, etc.), ni de l’interface web horrible d’Hotmail, ni même de l’impossibilité d’avoir un accès à sa messagerie avec un protocole aussi standard que l’IMAP. Je vais plutôt parler des problèmes d’envoi d’email, et notamment du non respect du protocole SMTP ! Voici les dernières facéties d’Hotmail :

– Hotmail cesse en quelques minutes ses tentatives d’envoi lors qu’il reçoit un code de réponse 4xx (signifiant une erreur temporaire pour rappel). D’après une observations récente, il essaye uniquement 4 fois en 3 minutes… puis abandonne définitivement en informant l’expéditeur : This is an automatically generated Delivery Status Notification. Delivery to the following recipients failed. Conséquence assez simple : dès qu’un souci temporaire de plus de 3 minutes survient sur un serveur (maintenance, problème DNS, etc.), les messages n’arriveront jamais ! Pire, dans le cas assez répandu d’une protection antispam via greylisting, qui consiste à renvoyer volontairement un code 4xx pendant un certain temps (souvent 5 minutes), tous les messages seront rejetés ! En bref, si vous envoyez vos emails via Hotmail, une bonne partie de vos correspondants ne les recevront pas…

– Hotmail semble lire à l’envers les poids des champs MX d’un nom de domaine ! J’ai vu mention de cela sur quelques forums et après quelques tests, Hotmail envoie bien vers le serveur MX du poids le plus fort ! C’est exactement l’inverse du fonctionnement correct. À première vue, cela n’est pas grave, mais les serveurs MX de poids le plus fort ne sont utilisés qu’en cas de souci sur les serveurs principaux et : ils sont parfois moins bien maintenus ; ils ont souvent des règles antispam strictes (comme du greylisting) ; pire, ils sont parfois hors-service (j’ai déjà découvert une grosse structure publique qui a eu un MX secondaire renvoyant des erreurs 5xx pendant plusieurs mois !). En bref, outre que c’est non conforme aux standards (c’est même une technique de spammeurs…), cela augmente encore les chances que les emails envoyés via Hotmail ne soient jamais reçus.

En résumé, Hotmail ne respecte pas les standards et en ce moment, les messages envoyés via Hotmail ont une bonne chance de ne jamais être délivrés ! C’est l’une des bonnes raisons pour laquelle on ne doit pas utiliser Hotmail. Et changer @hotmail.com en @outlook.com ne changera rien…

Open Data, révolution ou effet de mode ?

Sunday, August 12th, 2012

Le principe de l’Open Data n’a rien de révolutionnaire. Quoi de plus naturel de mettre à disposition des citoyens/usagers/clients les données intéressantes ? C’est donc un simple retour à la raison… même si c’est étonnant pour notre société qui marche sur la tête dans bien des domaines. En quelques années, l’Open Data est devenu un effet de mode : je suis à la fois enthousiaste de voir les valeurs de transparence véhiculées par les Logiciels Libres s’étendre à d’autres domaines ; et à la fois suspicieux d’entendre des discours politiques prématurés, de voir des requins espérant décrocher des budgets grâce à ce buzzword, de constater la publication de données sans queue ni tête, de déplorer tant d’aberrations techniques, etc. Le scénario catastrophe étant que les hommes politiques s’achètent une crédibilité en allouant des budgets à des consultants externes payés à produire des documents Excel sans intérêt.

Pour éviter ce scénario, je partage quelques points qui me trottent dans la tête :

Quelles données Open Data ont déjà été publiées ?

Il existe bien sûr des annuaires qui tentent de recenser toutes ces données. S’intéresser aux données déjà publiées permet de copier les bonnes idées ! Voici une petite liste (non exhaustive) :

– Données émises par des États : USA (data.gov), Grande-Bretagne (data.gov.uk), France (data.gouv.fr) etc.
– Données locales : Londres, Trafford, Rennes, Toulouse, Paris, Montpellier, Loire Atlantique, Gironde et Aquitaine, PACA, etc.
– Données de transport : transports publics à NYC, géolocalisation des navires, géolocalisation des avions, SNCF, RATP
– Données géographiques : OpenStreetMap, base astronomique, observations météo des 7 derniers jours
– Données culturelles : Bibliothèque Nationale avec data.bnf.fr et Gallica, MP2013, Musicbrainz
– Données scientifiques : données biologiques, openedition

À compléter sur http://pad.evolix.org/p/opendata

Quelles données voulons-nous en Open Data ?

Alors que certaines institutions sont prêtes à jouer le jeu, la question essentielle est de savoir quelles données nous voulons avoir ! En effet, ce sont aux citoyens/usagers/clients de réclamer certaines données (avant d’en créer eux-mêmes dans certains cas). Et cette question n’est pas si simple…

Vous avez des idées d’analyse de données ? d’applications ? de création de start-ups ? Alors réclamez les données nécessaires !

Voici quelques idées :

– Les horaires (commerces, établissements/services publics, musées/jardins/parcs, etc.)
– File d’attente (temps réel et stats) des préfectures, mairies, SS, CAF, médecins/hôpitaux
– Remplissage en temps réel des parkings publics et privés
– Données (temps réel et stats) des autoroutes et de points de passage
– Données (temps réel et stats) des vélos libres, hors-service et bornes libres
– Données de remplissage (temps réel et stats) des transports en communs
– Horaires (et retards) prévus des transports en communs
– Géolocalisation en temps réel des transports en commun
– Budgets détaillés de toutes les structures publiques… ou subventionnées
– Résultats de chaque élection
– Données et statistiques de l’INSEE
– Suivis et résultats de la Recherche publique… ou subventionnée
– Données météorologiques
– Données (temps réel et stats) sur la consommation locale et régionale d’électricité, d’eau et de gaz
– Les tarifs et stocks des produits vendus un commerce (un supermarché par exemple)
– La composition détaillée des produits vendus

À compléter sur http://pad.evolix.org/p/opendata

Les licences de l’Open Data

Étudier et choisir les licences est important mais souvent ennuyeux. Les Logiciels Libres ont une expérience de plus de 20 ans dans ce domaine, et c’est dommage que ceux qui publient de l’Open Data ne s’y intéressent pas davantage : certaines erreurs seraient évitées, notamment de ré-écrire sa propre licence, ce qui entraîne de nombreuses licences sur le “marché” et des problèmes de compatibilité, de fusion, etc. J’encourage donc à utiliser les licences les plus communes comme l’Open Database License (ODbL) (utilisée par OSM) ou la Public Domain and License (PDDL); en France, la Licence Ouverte a été publiée par l’État spécialement pour l’Open Data et me semble très intéressante en terme de liberté et compatibilité, et les projets français devraient a priori l’adopter.

Comment publier techniquement des données Open Data ?

Les données ne présentent que peu d’intérêt si elles ne sont pas publiées sous un format standard et ouvert. Autant dire qu’un document PDF ou Excel à télécharger n’est pas vraiment de l’Open Data… et c’est pourtant ce que l’on trouve majoritairement sur data.gouv.fr ! Il faut bien avoir en tête que les données ne sont pas destinées à être lues directement par des humains. On privilégiera donc des formats comme du CSV, XML ou JSON, facilement utilisables par des applications. Pour certains domaines, des nouveaux formats doivent être crées (exemple avec les données de transport) et l’on veillera donc bien à utiliser le bon format.

L’autre point important d’une publication de données (et surtout pour les données en temps réel) est son accessibilité par des URLs simples et logiques. Par exemple, en s’inspirant du style REST, un tarif d’un produit à une date donnée sera accessible via une requête HTTP GET sur une URL du type http://data.example.com/products/product1/tarif/20100701/EUR

L’éminent Tim Berners-Lee a défini la qualité des données publiées par un système d’étoiles ainsi :

★ make your stuff available on the web (whatever format)
★★ make it available as structured data (e.g. excel instead of image scan of a table)
★★★ non-proprietary format (e.g. csv instead of excel)
★★★★ use URLs to identify things, so that people can point at your stuff
★★★★★ link your data to other people’s data to provide context

Comment aider le mouvement Open Data ?

On répond souvent qu’il faut contribuer à OpenStreeMap et promouvoir l’Open Data. C’est vrai, mais je vous encourage aussi à réclamer les données qui vous paraissent intéressantes auprès des institutions/entreprises ! Et à concevoir des procédés astucieux (comme utiliser des récepteurs AIS) pour générer de nouvelles données.

Si vous avez de bonnes idées, notez les ici ! On pourrait notamment profiter du mouvement d’ouverture de données en région PACA pour obtenir ces données ou un appui. Et si des idées intéressantes émergent, avec des personnes motivées, on pourrait participer au Hackathon organisé à Marseille fin septembre 2012.

Astuces pour gérer un répertoire ext3 bien rempli

Wednesday, August 1st, 2012

Disclaimer : Valable pour de l’ext3 sous Linux (utilisable sur d’autres filesystems ou Unix à vos disques et péril)

Vous avez un répertoire rempli à rabord de nombreux fichiers, et il est impossible de connaître sa taille, le lister ou l’effacer sans impact sur la production ?

Voici quelques astuces :

– Avec un “ls -ld” sur le répertoire, vous pouvez estimer grossièrement le nombre de fichiers présents dans un répertoire. En effet, un répertoire vide fait 4 Ko (je simplifie). Et plus il contient de fichiers, plus sa taille va augmenter. Par exemple, un répertoire contenant 2 millions de fichiers pourra faire une taille de 100 Mo (je parle bien de la taille du répertoire et non pas de la taille du contenu). Attention, c’est variable selon la longueur des noms des fichiers. Et prendre garde aussi que ce n’est pas dynamique : si vous videz complètement un répertoire bien rempli, il gardera sa taille volumineuse (d’où l’intérêt de recréer un répertoire qui s’est rempli “par erreur”).

– Pour lister les fichiers du répertoire, utiliser la commande “ls” n’est pas une bonne idée car elle accède à toute la liste avant de l’afficher. Voici comment lister 10 fichiers sans attendre :

perl -le 'opendir DIR, "." or die; $i=0; while ($i<10) { my $f = readdir DIR; print $f; $i++; }; closedir DIR'

Grâce à leurs noms, vous pouvez désormais examiner (ouvrir, connaître sa taille) un échantillon de fichiers contenus dans votre fameux répertoire.

Pour lister l’ensemble des fichiers sans attendre comme “ls” :

perl -le 'opendir DIR, "." or die; print while $_ = readdir DIR; closedir DIR'

– Pour effacer le contenu du répertoire en limitant l’impact sur la production, oubliez “rm -rf” qui va saturer vos I/O disque mais préférez le faire par blocs de N fichiers avec des pauses de quelques secondes ! Voici une commande “conviviale” qui va faire cela par blocs de 300 fichiers avec des pauses de 5 secondes :

perl -le 'use POSIX qw/strftime/; opendir DIR, "." or die; $i=0; printf "DELETING IN PROGRESS...";
 while (my $f = readdir DIR) {unlink $f;  $i++;
 if ($i % 300 == 0) {printf "...$i files deleted\n".strftime("%Y-%m-%d %H:%M:%S",localtime)." : PAUSE...";
 $| = 1; sleep 5 ; printf "...DONE. "; printf "DELETING IN PROGRESS..."}}; printf "...DONE"; closedir DIR'

EDIT : en complément, on n’oubliera pas que l’on peut aussi gérer la priorité d’ordonnancement des I/O avec la commande ionice
(merci à Sylvain B. de l’avoir souligné)