dadadi blog

To content | To menu | To search

Saturday, April 17 2010

New release for Show Your Places.

Today is time for a new Show Your Places release. Version 0.4 is now available.

SYP is a CMS to manage photos or pictures and displaying them on a map. It's slightly similar to what you get when showing photos with google maps, but it suits my needs more. First, I host my photos and my application myself, so (as long as I backup), it's more durable. Then, I don't have to adhere to painful google maps terms of use. That's actually the main reason I had to write syp: I wanted to show some photos on a map, and wanted my site to be private (password protected). It's not allowed to do that will google maps, so I had to find an alternative, and eventually wrote my own CMS. And also, it uses openstreetmap to display the map.

I hadn't worked on syp for 6 months, so it was time to move this project forward again. Yesterday, I added support for postgresql as a database backend. There was also some old committed but not released modifications. So now, syp is less a pain when you have many photos in same area. You can refer to changelog for more information.

As usual, you can get syp from syp main page, you can browse git repository, or you can try the demo or admin interface demo (login: admin; password: toto). Enjoy!

Thursday, April 1 2010

CSS History Hack corrigé

Grâce au (à cause du) sélecteur css visited, il est possible d'appliquer une propriété différente à un lien html qui a été visité. Cela peut donner une indication visuelle très intéressante lorsque par exemple les liens déjà visités sont d'une couleur différente. Par contre, cela donne aux sites webs, un moyen de connaître la liste des sites que l'utilisateur a visités, ou au moins de savoir lesquels il a visité parmi une liste d'adresses.

En javascript, la méthode getComputedStyle permet de récupérer des informations sur le style réellement appliqué à un élément. Si l'auteur du site déclare que les liens visités doivent être de couleur verte ou de taille 12px qu'il affiche une liste de liens (au besoin en les cachant plus ou moins grossièrement à l'utilisateur), il lui suffit d'utiliser la méthode getComputedStyle pour connaître la couleur ou la taille des liens et ainsi savoir lesquels ont été visités. Il est ainsi possible de tester un grand nombre de sites très rapidement. (démo)

Il est également possible d'utiliser cette technique sans javascript. Par exemple, en utilisant la propriété css background-image qui va afficher telle ou telle image distante pour chaque adresse visitée. Il suffit au site attaquant d'interpréter les logs du serveur web pour savoir quelles images ont été affichées et donc en déduire quels sites ont été visités. (démo).

Ce problème est connu depuis longtemps, au moins 8 ans, et aucune solution n'avait été apportée. Or, le problème vient d'être résolu par Mozilla. Tout d'abord, le comportement de getComputedStyle a été modifié afin de ne plus  retourner le vrai résultat pour les liens visités. D'autre part, on ne peut plus maintenant modifier que  la couleur des liens, et pas les autres propriétés.

Cette correction sera disponible dans les prochaines version de Firefox et permettra d'améliorer la protection de l'historique des utilisateurs, au moins dans Gecko pour l'instant. Elle ne permettra malheureusement pas de le protéger complètement. Il sera toujours possible par exemple d'afficher des images de différents sites et de mesurer le temps de chargement pour essayer de deviner si elles étaient dans le cache. D'autres moyens sont également envisageables. Néanmoins, ce type d'attaque devrait être rendue plus difficile à mettre en place, ce qui est déjà un progrès important.

vteplugin: improve your workflows by decreasing number of opened windows

When working on my computer, my two main applications are a webbrowser and a terminal. I'm constantly switching between those two windows, and therefore loosing some valuable time during the switch.

At first, I decided to improve my workflow by browsing the web from my terminal, but browsing experience in the console is slightly limited. I had still a strong motivation after lynx had prompted me 4 times if I wanted to store cookies when using a search engine, and didn't give up when I realized cookies were not stored on hard drive, but I decided to find another way when I could not log into this blog.

As it was difficult to use a webbrowser inside my terminal, I tried to run instead my terminal inside my webbrowser. Then I made vteplugin, a plugin to run a terminal inside a webbrowser tab.

screenshot of vteplugin inside midori

It works in Gecko (firefox, seamonkey, ...) and webkit-gtk (midori, uzbl, ...). I don't known if it works in webkit-qt (arora, ...). If you try it, I'd be happy to known the result. It does not work in opera. To install, you can download it from this blog or clone it from github. Then, extract it and run ./waf configure && ./waf build and, as root, ./waf install. Restart your browser, and open vteplugin.html file.

On the technical side, it's a npapi plugin using XEmbed Extension. It uses libvte to open a terminal in plugin window

Now, like web2.0 fanboys, I can have all my applications inside my browser, but all my data are still belong to me.

Post written with vim inside vteplugin inside iceweasel

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 weave.renevier.net 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"] =~ "^weave.renevier.net$" {

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

$SERVER["socket"] == ":80" {
url.redirect = ( "^/(.*)" => "https://weave.renevier.net/$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 https://weave.renevier.net/weave/1.0/blah/info/collection 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 https://weave.renevier.net/ 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: https://weave.renevier.net/weave/

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.

page 2 of 2 -