Archives de catégorie : Informatique et technologie

Golang, Openstreetmap, threads

In my previous attempt of parsing Openstreetmap data, I found parsing XML data slow. Fortunately I realized that the data was also available in Google Prococol Buffer format, and

  • it’s 30-40% smaller than bzip2 XML (and you know, bzip2 requires a fair amount of CPU power)
  • it’s much faster to parse: with Osmosis, reading a PBF file on my quad-core took 14 seconds, and reading the XML.bzip2 with the help of lbunzip2 (multi-thread decompressor) it took 1mn50s. Ouch!

There is a Go library to handle Protocol Buffers, so I tried to write a PBF reader in this language and could see how efficient it would be. My program worked like this:

  • the main thread would read blocks from the file and pass them to thread workers using a channel
  • each worker (a goroutine) would decompress the block, unmarshall the data and process it
  • when there would not be any block left to process, the results of the workers would be merged into a single image

So what kind of performance did I get? I get the best result with a number of workers equal to the number of cores + 1 (so 5 workers): about 28 seconds. I cannot compare this result with Osmosis (not all the cases are handled), but it’s quite acceptable.

I find Go a nice language to use, and it compiles very very quickly. I struggled a little bit with some points, and everything is not clear yet for me also. It feels strange not to program in a OO-way. And I can’t be sure if I have to trigger tons of goroutines or use a pool of workers, if I should pass callback functions or channels.

That’s also a pity that the tremendous performance is not there yet. It’s supposed to be «close to the metal», «a language for system programming», but for the moment (after 3 years) it is not a fast as Java.

Hébergement e-mail associatif: Sud-ouest.org

Mise-à-jour: l’association est plus ou moins en sommeil. Les inscriptions sont fermées.

Billet d’origine: « Si le service est gratuit, c’est que vous êtes le produit ». Je cherchais une alternative à Gmail car je n’aime pas:

  • qu’on fasse du ciblage à partir de mes données
  • être pieds et poings liés face à d’un fournisseur (quelque soit la qualité de son service), qui pour une raison ou une autre peut couper les vannes

Mon hébergeur historique, Free, a longtemps eu le défaut honteux de ne pas proposer de communications chiffrées avec ses serveurs (bref, si quelqu’un écoutait le tuyau, il pouvait voir le contenu des communications).

Il existe une alternative: l’hébergement d’e-mail associatif, comme par exemple chez Sud-ouest.org. Pour une modique somme (un prix libre en fait), cette association héberge en toute confidentialité vos courriers.

Attention, leur but n’est pas de stocker tous vos e-mails depuis la nuit des temps (comme sur gmail): vous devez déclarer au préalable la taille de votre boîte mail. J’ai configuré mon lecteur de mail (en l’occurrence Thunderbird) pour laisser sur le serveur les courriers des jours précédents, comme ça je peux consulter ceux qui m’intéressent depuis mon téléphone ou le webmail.

Sud-ouest.org permet d’héberger les mails de son nom de domaine, ce qui permet de changer de fournisseur en gardant son adresse mail. On a  aussi accès aux fonctionnalités qu’on peut attendre d’un hébergeur: pop3, imap et smtp chiffrés, anti-spam, webmail. Et pour ma part, ça marche très bien depuis des mois.

Go XML sax-like parsing is slow

I wanted to write a Openstreetmap XML processor in Go language, hoping that I would get a performance boost from my Python implementation. And it ended being slower. Python is using Expat (written in C) and maybe the Go module «encoding/xml» is not the state of the art of optimization.

In wrote simple programs handling the event «start element». In 10 seconds, I could parse the following amount of XML data (Athlon II X4 620):

  • PyPy: did not run because of a bug (no progressive parsing)
  • Go: 70Mo
  • Python 2.7: 210Mo
  • Python 3.2: 215Mo
  • Java 7: 460Mo
  • C++ / libxml: 675Mo

I tried to use Expat or Libxml in Go, but for the moment it is just too complicated. In Go code, It’s easy to call C functions located in shared libraries, but if you need to pass callback functions written in Go to a library written in C, you will have to do dirty things (create wrappers in a Go module having C code).

That’s a pity because the Go compiler automatically generates C wrappers for your exported Go functions, but you can not get an raw pointer to these wrappers (this way I would have been able to pass my callbacks to LibXML or Expat)… See you later, Go.

OVH met fin aux offres ADSL bêta et gamma les moins chères :-(

Triste revirement d’OVH. Selon son fondateur sur la mailing list, certaines leurs coûtent plus qu’elles ne leur rapportent. Je comprends sans peine pour des offres bêta à 10€ (HT). Mais s’être planté dans la rentabilité pour les offres «gamma» (dont la no!tv à 24€TTC, qui me convenait bien), ça ne donne pas une image de fiabilité auprès du client.

Au début de l’offre, j’ai du attendre 3 semaines pour avoir le téléphone (plus 1 semaine de migration ADSL). L’IPv6 promis a mis 10 mois (bref, je l’ai depuis 2 mois) pour arriver. Si j’avais été méchant, je me serais plaint auprès de la répression des fraudes et demandé un remboursement. J’avais également acheté pour l’occasion des adaptateurs CPL pour remplacer ceux de Free.

Je vais donc sûrement repartir chez Free (sauf si ma ligne est considérée comme rentable pour OVH). Je vais payer un peu plus cher, mon boîtier télé va rester dans le placard, les débits Youtube seront ridicules, mais j’aurai de la fibre et un abonnement téléphone pour le micro-consommateur de mobile que je suis.

Fix for Amarok2LibreFM broken by Amarok 2.5 (Kubuntu 12.04)

It seems that Amarok 2.5 (present in Kubuntu 12.04) has an issue with the scripting: tracks are notified twice, and lastfmsubmitd (used by the script Amarok2LibreFM) doesn’t like that: the tracks are not submitted or submitted twice to Libre.fm. I slightly modified the the script so it behaves as expected. Download the main.js and save it there:

~/.kde/share/apps/amarok/scripts/Amarok2LibreFM/

wget, logs apache OVH et erreur SSL

Depuis peu (en fait peut-être depuis le passage à Kubuntu 12.04), je ne pouvais plus récupérer par wget les logs de mon hébergement OVH. J’avais l’erreur suivante (avec wget -d):

Résolution de logs.ovh.net (logs.ovh.net)... 213.186.33.7
Caching logs.ovh.net => 213.186.33.7
Connexion vers logs.ovh.net (logs.ovh.net)|213.186.33.7|:443... connecté.
Created socket 3.
Releasing 0x00000000006b8be0 (new refcount 1).
Initiating SSL handshake.
SSL handshake failed.
Closed fd 3
Incapable d'établir une connexion SSL.

La solution a été de rajouter le paramètre «–secure-protocol=SSLv3».