~bohwaz/blog/

Avec de vrais morceaux de 2.0 !

Altermusique.org : partage et widgets des albums

Il est désormais possible d'exporter deux types de widgets pour chaque album Altermusique.org. Il suffit de cliquer sur "Partage l'album" sur la page de l'album.

Le premier au format large est quasiment la même chose que le lecteur qui s'ouvre en popup :

Le second a au format plus simple, par exemple pour intégrer sur myspace :

Comment donner à Opera une géo-localisation fixe ?

Facile, il suffit d'utiliser le nouveau service de géo-localisation fixe de KD2.org, exemple :

http://kd2.org/map/geoloc/45.95674/-1.11467/

Placer cette adresse dans la configuration d'Opera (<a href="opera:config#Geolocation|LocationProviderURL">opera:config#Geolocation|LocationProviderURL</a>) vous localisera une fois pour toutes sur l'île Madame, à côté de l'île d'Oléron. Oui bon mais si vous voulez être localisé ailleurs ? Simple, il suffit de connaître la latitude et la longitude que vous souhaitez indiquer et de les placer dans l'adresse aux bons endroits :

http://kd2.org/map/geoloc/[latitude]/[longitude]/

Pour trouver ces coordonnées vous pouvez utiliser le service de cartes de KD2.org : <a href="http://kd2.org/map/">kd2.org/map</a>, basé sur l'API Ovi Maps. En déplaçant la carte au bon endroit, la latitude et la longitude apparaissent dans l'adresse de la page.

Je vous promet qu'on ne stocke pas les coordonnées que vous utilisez, mais si vous avez pas confiance vous pouvez aussi le faire sur un serveur à vous, c'est très simple : <a href="?2010/07/01/327-custom-geolocation-api-for-opera-replace-google">Custom Geolocation API for Opera (replacing Google)</a>.

ING Direct : changement de la procédure de sécurité

Message reçu d'ING Direct :

ING Direct fait évoluer son système d'authentification pour vous garantir une sécurité maximale et toujours plus de simplicité dans vos opérations.

A présent, pour vos opérations sensibles (par exemple une commande de chéquier ou l'ajout d'un RIB externe) réalisées dans votre Espace client ou par téléphone auprès d'un chargé de clientèle, il vous sera demandé une validation à l'aide d'un code temporaire.

Ce code temporaire vous sera envoyé par SMS, message vocal ou courrier. C'est vous qui choisissez.

Cette procédure nous permet de vérifier que vous êtes bien à l'origine de la demande. Vous recevrez également un email de confirmation après chaque opération.

A noter :
Votre carte d'authentification ne vous sera plus demandée et a été désactivée. Vous n'avez aucune démarche supplémentaire à effectuer. Vous pouvez dès à présent la détruire. Mais si vous l'utilisiez pour remplir votre grille du loto vous pouvez la garder !

Combien de fois va-t-il falloir expliquer aux banques que les SMS c'est mieux que rien mais que ça vaut pas grand chose en matière de sécurité ?

La seule solution sécurisée c'est l'authentification à deux facteurs, mot de passe et code à usage unique généré hors ligne, par exemple avec un petit boîtier comme ça :

Ces boîtiers sont très répandus par exemple au Royaume-Uni et en Belgique, pourquoi pas en France ?!

PHP 5 implementation of Bubble Babble encoder / decoder

Do you know Base64? This is a binary encoding that is widely used to store and transmit binary data using simple ASCII characters. Bubble Babble is also binary data encoding, much like Base64, but it alternates consonants and vowels to encode data as pseudo-words that can be easily pronounced.

Take for example the "1234567890" string. It will be encoded as "MTIzNDU2Nzg5MA==" with Base64, and as "xesef-disof-gytuf-katof-movif-baxux" with Bubble Babble. Doesn't the second string looks like a bit more readable?

Bubble Babble (see also the spec) also includes two features to check for string integrity which are nowhere to be found in Base64. The first one is begin and end markers. See the "x" characters at begin and end of the encoded string? These marks the begin and end of a string. The second feature is an integrated checksum to detect transmission errors.

The advantages of Bubble Babble:

  • readable string
  • pronounceable text
  • begin and end markers
  • checksum to detect transmission errors

The main disadvantage is the size of the encoded string, which is 3 times bigger than the original string, whereas Base64 is only 1.37 times bigger.

I think that this might be really useful to exchange gpg fingerprints for example, as hexadecimal isn't really pleasant to pronounce. But there might be a lot of other use-cases I haven't thought of.

There is implementations of Bubble Babble in Perl, Go, Python, Javascript, etc. But in PHP there was only a old script. And of all those implementations, only the Go one was implementing the decoding. So I wrote my own implementation for PHP, using objects and exceptions, and put it under the GNU LGPL license, as always.

This implementation can be found here : bubble_babble.php

Hope that might be useful to someone :)

Sortie de Dillo 2.2.1 et de son paquet debian

Dillo est un navigateur web très léger, très rapide, configurable simplement, extensible via des extensions, et particulièrement à cheval sur de nobles principes, notamment protéger la vie privée des utilisateurs ou implémenter les standards strictement sans bidouille destinée à faire fonctionner des sites qui se basent sur les bugs d'autres navigateurs.

Au niveau des fonctionnalités plutôt intéressantes, on notera :

  • le refus systématique des cookies par défaut, il faut configurer chaque domaine qu'on souhaite autoriser dans un fichier de configuration (très simple), permettant de spécifier les domaines sur lesquels on souhaite des cookies permanents ou uniquement pour la session ;
  • la légèreté, la rapidité, l'efficacité ;
  • n'envoie aucune donnée personnelle aux sites, pas de referer, pas d'envoi de vos urls tapées à Google, etc.
  • pas d'historique conservé à la fermeture ;
  • système d'extensions simple et puissant sur un modèle proche des CGI ;
  • configuration stable et simple dans un fichier texte ;
  • raccourcis claviers configurables simplement dans un fichier texte ;
  • désactivation des CSS et des images à la demande ;
  • etc.

Dillo 3

Malgré des soucis d'intégration dans Debian, notamment car les versions 2.x utilisent la librairie FLTK2 qui a d'abord eu une licence non-libre puis a été abandonnée au profit de FLTK 1.3 (récemment sorti), Dillo a continué son bonhomme de chemin malgré le travail demandé par une première ré-écriture (pour passer de FLTK1 à FLTK2), puis une seconde, plus récente, pour passer à FLTK 1.3.

Ainsi la série 2.x, bien que non disponible dans Debian a bénéficié de mises à jour plutôt régulières.

Et à l'occasion de la sortie à venir (dans les prochains jours normalement) de Dillo 3.0 (intégré dans debian ce coup-ci), une dernière mise à jour de la branche 2.x est disponible, la 2.2.1. Il est possible d'obtenir le paquet Debian ici : http://apt.klaumikli.de/testing/

Les nouveautés en résumé :

  • Visualiseur de code source
  • User-Agent configurable
  • Support des règles @media CSS
  • Plein de nouveaux attributs CSS supportés
  • Quelques améliorations sur les cookies

Voilà et sinon dans quelques jours la version 3 sera aussi disponible, directement dans Debian unstable.

PS : au niveau des autres navigateurs légers, voir aussi du côté de NetSurf (pas mal, excellent rendu, mais semble un poil instable, et repose sur GTK qui est plutôt lourd et lent) ou xxxterm (basé sur webkit, avec toutes les fonctionnalités d'un navigateur de bureau classique, mais orienté sécurité et utilisation au clavier, pas encore testé, le paquet semble cassé dans debian unstable).

Google Art Project : appel à l'aide ;)

J'avais proposé au téléchargement un script permettant de télécharger les œuvres en haute résolution du site Google Art Project (ici). Il ne fonctionne désormais plus suite à un changement de Google qui a inclus une sécurité dans son script : chaque URL de chaque "tile" (l'image est découpée en plusieurs "tiles") exige désormais un paramètre de sécurité, en fait un code HMAC-SHA1, généré de manière unique pour chaque URL. C'est un peu con car ces œuvres sont du domaine public, Google fait donc ici de la rétention pour rien, mais bon ça ne m'étonne même pas venant d'eux.

Bref, générer ce code n'est pas bien compliqué, mais il se base sur une clé "secrète" qui est générée à partir des couleurs d'un logo de google. Comme je n'ai pas vraiment l'habitude d'ActionScript 3 (je suis directement passé de AS2 à tenter d'apprendre haXe), j'ai un peu de mal à faire fonctionner le code de Google et aussi à installer le compilateur AS3. Bref je n'ai pas réussi à re-générer cette clé en ré-écrivant le code AS3 en PHP.

J'ai posté un commentaire sur un script Ruby permettant de télécharger les œuvres et qui se retrouve dans la même situation, expliquant un peu plus amplement le problème et le fonctionnement du code de Google : https://gist.github.com/812918#gistcomment-46116

Voilà donc je demande à quiconque passerait par ici avec quelques minutes de dispo pour regarder ça, si vous me trouviez la clé secrète (peu importe la méthode, il doit aussi être possible d'utiliser un débugueur flash pour ce faire), ça me serait bien utile, merci pour moi et plein d'autres gens qui se sont intéressés à ce script :)

Que faire avec un nouveau Palm ?

J'avais déjà parlé de la seconde vie des Palm, ces petits PDA plutôt bien foutus utilisant un OS dénommé PalmOS (logique) : Que faire avec un vieux Palm ?

Suite à un malencontreux accident, le port USB de mon Zire 31 est cassé, donc impossible de le synchroniser, je suis un peu bloqué. Mais grâce à un vide grenier j'ai désormais un Palm TX pour 10 euros (neuf !).

Alors qu'en faire ? Et bien la même chose qu'avant, mais bien plus ! Le Palm TX est largement mieux fourni que le Zire 31 qui était plutôt bas de gamme. Ici on a beaucoup plus de mémoire, un écran de qualité, du wifi, du bluetooth, bref de quoi faire. Voici quelques utilisations possibles en plus, qui n'étaient pas possibles sur le Zire 31 :

  • Faire de la musique ! SunVox est un excellent logiciel musical qui existe pour PalmOS, iOS, Windows, Linux, OSX et Windows Mobile. Ça ressemble surtout à un tracker, et c'est assez impressionnant tellement c'est bien foutu. Et l'avantage du multi-plateforme c'est qu'on peut retravailler une ébauche faite sur le PDA avec un PC plus tard pour plus de confort. Ça tient bien la charge, des dizaines de pistes, d'instruments et d'effets ne font pas flancher le Palm. C'est libre et gratuit en plus, que demander de plus ?
  • Encore de la musique ! Bhajis Loops et Microbe sont deux logiciels musicaux qui sont désormais gratuits, dispos sur le site de l'éditeur : http://chocopoolp.com/. Bhajis Loops fonctionnait déjà sur Zire 31 mais poussivement, ici c'est déjà un peu mieux, c'est un vrai studio à dispo dans la poche, mais ça reste un peu poussif avec pas mal de pistes, dommage.
  • Écouter de la musique avec TCPMP, je sais je l'avais déjà mis précédemment mais le lien est mort, donc je met un miroir ici : TCPMP_0.72RC1.zip
  • Transformer le Palm en clavier/souris BlueTooth. Alors là franchement ça c'est cool :) Ça fonctionne avec BlueRemote
  • Utiliser un clavier/souris BlueeTooth. L'inverse est donc également possible... en théorie. Car bien qu'il existe un freeware le permettant (BT Keyboard), il est bridé et ne permet pas l'utilisation des touches A à Z. Peut-être pour vendre une version commerciale ? En tout cas celle ci n'existe même pas. Il existe aussi un driver officiel (ici) mais il est conçu pour le clavier fabriqué par Palm, aucune idée si ça marchera avec n'importe quel clavier Bluetooth, faudrait tester. Sinon peut-être regarder du côté de ce driver-ci.
  • Se balader sur les cartes Google Maps avec l'application Google Maps pour PalmOS : http://m.google.com/maps/download/GoogleMaps.prc (miroir). Ça marche pas mal, mais attention le clic sur le bouton pour montrer le trafic routier plante l'appli. Sinon habituel : carte, vue satellite, itinéraires, localisation par défaut (pas de géolocalisation sans GPS).
  • Il existe aussi des applis GPS et des modules GPS BlueTooth pour le transformer en GPS de voiture, mais bon c'est cher. Et Google Maps est gratos.
  • Au niveau web, le navigateur fourni, Blazer, se débrouille pas mal, malgré le fait que le premier marque page soit inamovible (vers le site mobile de Palm qui n'existe plus...). Au niveau des autres navigateurs, la plupart sont morts, les sites disparus, et c'était souvent du shareware de toutes façons. Opera Mini n'est dispo que via l'installation d'une JVM Java dans PalmOS, qui n'est plus dispo, donc c'est mort. Le plus réputé des navigateurs de l'époque, Xiino (PRC), est buggué jusqu'à la moëlle, donc de toutes façons pas trop le choix.
  • Au niveau mail le client fourni (VersaMail) fonctionne bien et fait de l'IMAP, du POP3, du SSL, SMTP-AUTH, bref tout ce qu'il faut.
  • Autres applis connectées : client SSH, client RDP, serveur HTTP, client Jabber (Chatopus), client Usenet, agrégateur RSS, client IRC, etc.
  • Par contre les seuls clients Twitter existants sont payants, et l'appli Facebook est réservée aux téléphones sous PalmOS (sans raison apparente).

HOWTO Encourage Women in Linux (en français)

Ce HOWTO a été traduit en 2004 par djrom et a tendance à disparaître du web en ce moment, il ne reste que peu de copies en ligne, je profite donc de propos sexistes sur LinuxFR pour mettre en ligne ce HOWTO sur mon site, afin de préserver sa disponibilité, car ce document me semble intéressant dont la publication avait aussi été annoncée sur LinuxFR.

Donc voici : http://bohwaz.net/static/Encourage-Women-Linux-HOWTO-fr.txt

Edit 17 juillet 2011 : mise à jour du HOWTO, nombreuses corrections de fautes par un lecteur, merci pour la contribution :)

Auto-blog, VroumVroumBlog et effet Streisand

Suite à ce billet de SebSauvage, j'ai trouvé cette idée des AutoBlogs excellente, du coup j'ai pas pu résister, vous me connaissez ! Je m'y suis attelé ce midi pour reprendre le code de VroumVroumBlog et lui donner une cure de jeunesse et voilà j'ai tout réécrit au final !

Voici donc VroumVroumBlog 0.2, complètement nouveau et tout beau ! Il reprends les idées et certains trucs de la version de Sebsauvage :

  • Très simple : un seul fichier à copier, un seul fichier à configurer pour que ça marche
  • Gestion de ATOM 1.0 / RSS 2.0 en entrée
  • Recopie automatiquement les articles du flux source dans sa base de données
  • Recopie automatiquement les images liées dans les articles du flux source
  • Re-publication des articles dans un flux RSS 2.0
  • Clonage aisé !

Mais ma version ajoute :

  • Utilisation de SQLite3 comme base de données plutôt qu'un fichier sérialisé (permet d'améliorer les performances)
  • SQLite3 est normalement installé par défaut partout, mais sinon, sous debian/ubuntu : apt-get install php5-sqlite3
  • La base de données peut être téléchargée et directement réutilisée avec un autre logiciel
  • Code objet propre, codé pour PHP 5.3
  • Gestion de RSS 1.0 / RDF en entrée en plus
  • Recherche performante full-text !
  • 850 lignes de code (oui je l'ai un peu fait grossir, mais au final ça ne fait que +9Ko par rapport à la version 0.1.126)
  • Toujours un seul fichier unique, et aucune dépendance
  • Séparation des bases de données de recherche (n'est utile que localement) et d'articles (utile à cloner)
  • Possibilité de traduire l'interface
  • Possibilité de faire une "ferme" d'auto-blogs avec un seul fichier à maintenir
  • Possibilité d'utiliser des rewrite-rule pour faire de jolies URLs (facultatif)
  • Pagination plus évoluée
  • Possibilité d'indiquer plusieurs domaines pour le miroir des images/médias
  • Recherche des médias dans les tags image (src) et dans les liens (href), ainsi par exemple un PDF mis en lien et se trouvant sur un domaine autorisé sera aussi recopié
  • Gestionnaire réseau plus solide avec timeout pour éviter des attentes inutiles
  • Gestion des erreurs en cas de flux XML invalide
  • Gestionnaire d'exceptions et d'erreurs propre
  • Rétro-compatible avec les fichiers de configuration des version 0.1.XXX (mais pas avec les données)

Téléchargement et installation

C'est pas tout ça, mais on commence où ? Et bien avec une démo qui n'est rien d'autre que l'auto-blog de Sebsauvage : http://autoblog.kd2.org/sebsauvage.net/

Pour télécharger le code source : http://autoblog.kd2.org/source.txt

Un fichier de configuration d'exemple (pour ce blog), commenté : http://autoblog.kd2.org/vvb.ini

Pour installer : télécharger le code source, renommer ce code source en index.php, télécharger le fichier de configuration, le modifier selon ses besoins, envoyer ces deux fichiers dans un nouveau répertoire que l'on créera chez son hébergeur favori. Ensuite se rendre à l'adresse du blog, ça fera tout tout seul comme un grand.

Recherche full-text

Il est désormais possible de faire des requêtes complexes dans la recherche du blog, par exemple :

Comment traduire l'auto-blog en français ?

Simple, télécharger ce fichier : http://autoblog.kd2.org/config.txt, le renommer en config.php et le placer dans le même répertoire que index.php.

Comment avoir de jolies URLs

Pour avoir de jolies URLs comme http://autoblog.kd2.org/sebsauvage.net/Oyez-Oyez par exemple, il vous faut créer un fichier .htaccess dans le répertoire de votre auto-blog, contenant :

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*) /sebsauvage.net/index.php?$1 [QSA,L]

Évidemment dans votre cas il faudra remplacer /sebsauvage.net/ par le bon répertoire où vous avez mis votre auto-blog. La deuxième étape est de rajouter ou d'éditer le fichier config.php de votre auto-blog et d'y placer :

<?php
define('LOCAL_URI', '');
?>

C'est tout.

Comment faire une ferme d'auto-blogs ?

Encore une fois c'est simple. Imaginons que vous ayé créé http://bohwaz.net/streisand.me/ pour y mettre plein de blogs automatiques. Vous allez télécharger le code source ci-dessus, le renommer en autoblog.php et le mettre dans ce répertoire. Dans ce même répertoire vous mettez aussi un fichier config.php contenant :

<?php
define('ROOT_DIR', dirname($_SERVER['SCRIPT_FILENAME']));
?>

Enfin, pour chaque blog que vous voulez "auto-recopier", vous créez un nouveau répertoire, par exemple "sebsauvage", et vous mettez dedans un fichier vvb.ini comme si vous installiez un auto-blog seul, mais au lieu de mettre le code source dans index.php, vous ne mettez dans index.php que ça :

<?php
require_once dirname(__DIR__) . '/autoblog.php';
?>

Vous pouvez faire comme moi et mélanger ces trois recettes afin d'avoir une ferme avec de jolies URLs et une interface en français.

EDIT du 18 juillet 2011 : une version 0.2.4 est désormais dispo, corrigeant plusieurs problèmes et ajoutant quelques petits trucs, merci à tous ceux qui m'ont signalé les bugs et aidé à les corriger :-)

Edit 26 août 2012 : il existe des forks de mon VroumVroumBlog par Mitsu : version HTML5 et par Hoaro : Ferme autoblog"

mypwsafe: a simple CLI password manager

It's been some time that I was looking for a password manager which is simple to use, very secure, and based on open technology and not on obscure binary format that can disappear easily, leaving you with no access to your data.

I tried many of them, KeePassX, KeePass and other GUI programs were interesting but really overkill for my needs. So I took a look on the CLI-side. pwsafe looked interesting and simple enough, but it is not actively developed anymore and will be dropped from the next Debian release, although it uses a well-documented format (compatible with Password Safe), it's still a non-standard binary format and doesn't look like a good choice for a long-term relationship. cpm looked interesting, as it was based on XML and GPG, but I never understood how the hell it was supposed to work. Its interface seems one of the most complicated things ever for such a simple task.

Looking around, I found simsafe, a simple Perl script which allows to create and edit a GPG-encrypted text file with your favorite editor. But you know, I'm never happy with what already exists, so I don't really like Perl for basic tasks and basically it seemed too hard for my laziness to open an editor and write a text-file all by myself.

So, I took a couple hours and wrote something a bit more elaborate. And here it is: mypwsafe is a simple bash script, which stores your login/password credentials in a CSV-like text file, encrypted with GPG. It only needs two things: pwgen for password generation, and GPG for encryption and decryption.

It can work in 2 different GPG modes: symmetric, where it uses a specific passphrase to encrypt the passwords file, and key-based where it simply uses your private key for that task (so you can use GPG agent and all if you wish). Personally I prefer to use the key-based encryption, as I always remember my GPG passphrase. But the symmetric encryption can also be interesting if you like it.

This is configurable at the beginning of the script, just set USE_SYMMETRIC to true instead of false. If you use key-based encryption, you will have to change the GPG_ID value too, with the name or email address linked to your GPG key.

Here's one example with symmetric encryption and password generation (I just hit enter on password field):

   $ ./mypwsafe.sh --add
   Password safe file does not exists. To create one, please supply password:
   Enter passphrase: 
   Confirm passphrase: 
   -- Saving a new login/password couple to password safe --
   Identifier (or hostname): seenthis.net
   Login: bohwaz
   Password (leave empty to create random one): vECWR4u4Rge

   Encrypting file...
   Done.

   $ ./mypwsafe.sh --all
   Enter passphrase: 
   ID            Login   Password
   seenthis.net  bohwaz  vECWR4u4Rge

A little warning: with symmetric encryption, your passphrase is stored on your hard drive by the script (and deleted after script completion), like in simsafe, but with key-based encryption, your passphrase is NEVER stored on your drive, only GPG has access to the passphrase. So I advise you to use key-based encryption.

Here is an example with key-based encryption to search for a specific password:

   $ mypwsafe.sh dailymotion

   Vous avez besoin d'une phrase de passe pour déverrouiller la
   clé secrète pour l'utilisateur: « BohwaZ <bohwaz@notfound.tld> »
   clé de 4096 bits RSA, ID D0B04280, créée le 2010-11-18 (ID clé principale B818EA34)

   ID               Login                              Password
   dailymotion.com  bohwaz                             blabla

As you can notice you just have to give a regexp in argument and it will return all matching IDs. There is also a "--edit" option, which opens the CSV text file in your favorite editor (a temporary unencrypted copy of the file is created on disk for this, and deleted afterwards), and a "--change-password" to change the file password when using symmetric encryption.

If one day you lose the script, it's always easy to recover your data as it's just plaintext CSV, using tab-separated values, encrypted with GPG.

Download the script here: http://bohwaz.net/static/mypwsafe.sh

Notes rapides... ↓