dadadi blog

To content | To menu | To search

March 2010

Friday, March 26 2010

new geoclue release

geoclue 0.12 has been released last Thursday. Geoclue is a geoinformation library. It provides a way for applications to get geographical informations, such as user address or positions.

Geoclue has a really nice feature, the master provider. It means geoclue can handle multiple sources of geoinformations. For example, you can get your position with your gps device, or with OpenCellId, or with webservices that will associate your IP address with a location (such as hostip). Geoclue master provider is able to choose the source with the best accuracy.

Geoclue is used at least in Empathy to publish your location to your contacts, and in WebkitGtk to support html5 geolocation.

It's been the first release in nearly two years, and it's great to see that nice project moving forward again. In this release, Nominatim has been added as a provider for geocoding and reverse/geocoding. It means it's possible to use nominatim service to get the position for a given address, or the opposite. There have been also many bugfixes and code cleaning, including a bug I've helped to resolve that prevented master provider from being usable in some configurations.

During this realease cycle, I've also started working on a provider that would allow an user to enter it's location manually. While location aware software can be a really useful feature in some cases, it's also important that user can a have the choice to provide a fake or inaccurate location. This is already possible in Firefox with geolocater extension. Once I have finished this provider, it will be possible to have this privacy protection for all applications using geoclue library.

Tuesday, March 16 2010

Mosaic on linux

Sources of mosaic web browser are available at github. Mosaic is one of the first graphical browsers, and the first one to support images in html documents. It is often considered as the grandparent of modern web browsers.

Available sources compile fine on linux. This allowed me to install mosaic and browse the web for some time. Actually, I did not browse for a long time because most websites, including the most accessible ones display badly with pristine mosaic. But that was still fun.

this blog with mosaic

google with mosaic

wikipedia with mosaic

Saturday, March 13 2010

installation de weave minimal

Je me suis intéressé récemment au projet weave de mozilla. Il s'agit principalement d'une extension Firefox qui permet la synchronisation de données (historique, marque-pages, etc) entre différents postes de travail.

Ce type d'outil est très répandu, mais le premier intérêt de weave, c'est que les données sont chiffrées avant envoi au serveur; il lui est donc impossible de lire nos données, de les diffuser ou de les revendre. Le deuxième intérêt, c'est qu'en plus de proposer le service de synchronisation, Mozilla met à disposition, sous licence libre, le logiciel du serveur de synchronisation. Il devient ainsi facile de synchroniser des profils Firefox de manière totalement indépendante, c'est à dire sans dépendre d'un service que l'on ne maitrise pas.

Pour cela, j'ai d'abord commencé par créer mon sous-domaine et attendu que les dns soient mis à jour. Ensuite, j'ai téléchargé une copie du minimal server. À priori il existe une version plus complète et plus compliquée à installer, mais le minimal server est adapté à un usage domestique pour lequel les nouveaux utilisateurs sont ajoutés manuellement.

J'ai ensuite décompressé l'archive
tar zxf weave_minimal.tgz
puis j'ai déplacé le répertoire extrait dans le répertoire de mon choix
mv weave_minimal /var/http/
J'ai ensuite donné les droits en écriture à l'utilisateur qui fait tourner le serveur web, afin que la base de données sqlite puisse être crée puis mise à jour correctement.
chgrp -R /var/http/weave && chmod g+w /var/http/weave
Weave a besoin d'une installation de php qui supporte json, mbstring et sqlite, j'ai donc du installer, sur mon serveur en debian stable, le paquet php5-sqlite
J'ai ensuite configuré et redémarré le serveur web. J'utilise lighttpd, voici le contenu de mon fichier de configuration

server.modules += ( "mod_alias", "mod_redirect", "mod_auth" )

$HTTP["host"] =~ "^$" {

server.document-root = "/var/httpd/weave/"
alias.url = ("/weave" => "/var/httpd/weave/index.php")

$SERVER["socket"] == ":80" {
url.redirect = ( "^/(.*)" => "$1" )


Pour que weave soit disponible en https, il faut créer un certificat. Idéalement, il faudrait le faire certifier par une autorité de certification, mais pour un usage personnel, un certificat auto-signé fait très bien l'affaire. Comme j'en avais déjà un, je n'ai pas eu à en recréer, je ne vais donc pas décrire cette étape, mais des bons tutoriels existent sur le web.

Ensuite, je me suis rendu avec mon navigateur à l'adresse et mon navigateur m'a demandé login et mot de passe. On peut rentrer n'importe quoi, cette étape ne sert qu'à initialiser la base sqlite. Ensuite, le navigateur redemande en boucle login et mot de passe, c'est normal, il suffit juste de répondre une seule fois.

On peut maintenant créer les utilisateurs du service grâce au script create_user disponible dans le dossier weave: php create_user.

Il ne reste plus maintenant qu'à installer l'extension sur les postes de travail que l'on veut synchroniser. Avant d'installer l'extension, il m'a été nécessaire, vu que j'utilise un certificat autosigné, de visiter l'url afin d'ajouter une exception de sécurité pour chacun des postes que je vais synchroniser. Lors de la configuration de l'extension, j'ai du choisir l'option Use a custom server, et configurer l'url suivante:

Voila, weave est maintenant installé !

Sunday, March 7 2010

creating a midori extension.

Today, I created my first extension for midori browser. I wanted to have the current time in my statusbar, in way similar to what Statubar Clock does for Firefox.

Extensions for midori must be written in C language. An extension source file must implement a function extensions_init to be loaded. If the source file to be in extensions/ directory, midori build system will be aware of its existence and build it.

A MidoriExtension object must be created in extension_init. A callback must then be connected to it for signal "activate". When extension is activated, this callback will be called with a MidoriApp object as argument. With this object, it's possible to access the underlying windows, tabs, menus, webviews, and other objects extension may need to access. Extension must also connect a callback to deactivate in order to be able to clean up things if user wants to deactivate the extension.

In my extension, I needed to get the statusbar, add a label to it, and set a timeout to update with with current time. Display format can be configured in a config file. There is currently no UI for configuration; I still need to work on it.

You can take a look at a screenshot of midori with Stat'o'clock activated. You can also see the source code of stat'o'clock.

In the end, I think building a simple extension for midori is quite easy and fun if you known a bit of gtk. It will be even better if one day, midori extension can be written in other languages (python, lua, javascript ...). You can learn more by reading the midori extension tutorial.