Escaline2 : la marmotte s'est remise au travail

Bon, voilà, je me suis enfin décidé de me sortir les doigts du derrière pour bosser un peu sur la nouvelle mouture d'Escaline. Pour ceux qui ne suivent pas d'assez près mes fabuleuses, bien que peu nombreuses, créations (ainsi que celles de Sunny en l'occurrence), Escaline est un shell pour le web. Il permet d'enregistrer des commandes qui seront des alias vers (par exemple) différents moteurs de recherche. Il est ensuite possible de l'installer sur son navigateur, au travers d'une configuration pour les navigateurs Gecko (Firefox, Epiphany) ou d'un plugin opensearch.

La version 2 d'Escaline est une refonte complète du site. On passe du framework web.py sur Python 2.4 au framework Django sur Python 2.5 (ou Python 2.6, il faut que je voie si Lenny sera à jour sur ce point). Mais ce n'est pas la seule nouveauté, car j'en ai profité pour implémenter tout un tas de fonctions cool-es que tout le monde attend (ou pas).

Tout d'abord, j'ai implémenté les commandes multi-arguments (fonction qui a réellement été demandée par "beaucoup de monde"). Il sera possible d'écrire des commandes beaucoup plus complexes que ce qui se fait maintenant. Par exemple, il sera possible d'écrire une URI qui permet de gérer une commande de ce style :

g lang:lr%3Dlang_fr type:image Escaline is good

L'URI en question pourrait être :

http://www.google.fr/{type:search}?q={0}[&meta={lang}]

Comme vous pouvez le deviner, le nouveau parser gère les arguments nommés ("lang", "type"), possédant une valeur par défaut (définie après les deux points, a droite du nom de l'argument), ou avec des crochets qui permettent de supprimer du texte autour de l'argument si celui-ci n'est pas renseigné.

Mais cette commande n'est pas très belle. Sérieusement, qui penserait à mettre "lr%3Dlang_fr" à coté de lang pour faire une recherche en français ? Et puis je suis bien bloqué avec mon type, car je n'ai finalement le choix qu'entre des images et du web... Le nouveau parser est certes mieux, mais je le trouve un peu limite pour certains sites un peu tordus. J'ai donc développé un nouveau système de commandes : les commandes "avancées", ou "programmées". Le principe est de passer par un langage de programmation pour définir une commande. Le parser permet toujours de parser les arguments qui entrent en ligne de commande (ce n'est pas obligatoire), mais son résultat au lieu d'être passé à un autre parser qui génère une uri est passé à un programme. Le langage choisit pour cela est le Lua, parce qu'il est hyper léger (l'interpreteur doit faire une centaine de Ko), parce qu'il est hyper facile à utiliser (sa syntaxe s'apprend en à peine 30mn, et encore) et parce qu'il est facilement embarquable et sandboxable (il est fait pour ça). Il sera donc possible d'écrire avec ça des vraies commandes de fous, avec tout plein d'arguments, ou des commandes qui ne retournent pas une URI vers qui se rediriger, mais qui retourne du texte à l'utilisateur (exemple, calc 14+3 retournerait "14+3 = 42").

Voici un exemple de ce que pourrait être le code de la commande passée plus haut :

#!lua
-- Recherche google

search_type = kwargv.type
language = kwargv.lang

search_type_mapping = { web = 'search', image = 'images' }
language_mapping = { fr = 'lr%3Dlang_fr', en = ''}

-- Valeurs par défaut
if search_type == nil then
	search_type = 'web'
end
if language == nil then
	language = 'fr'
end

-- Création de l'uri
uri = string.format('http://google.fr/%s?q=lala&meta=%s',
		search_type_mapping[search_type], language_mapping[language])

-- Retour du résultat
escaline.return_uri(uri)

La troisième nouveauté est plus mineure mais non pas moins utile (à par sur les EEEpc et autres écrans taillés pour les mouches) : il sera possible de chainer des commandes. Ceci est une fonctionnalité du nouveau parser, mais c'est un peu à part du reste. En clair, si vous tapez g Escaline && y Escaline, Escaline ouvrira les deux pages des deux moteurs de recherche, chacune dans une frame. Ceci permettra très facilement de comparer les résultats de deux (ou plus) moteurs.

Escaline en commandes multiples

La quatrième nouveauté est un système de ticket utilisateur. Ces tickets remplaceront un éventuel système de compte utilisateur (qui n'existe pas actuellement), mais de manière anonyme. Le principe c'est de se créer un ticket avec une commande. Le site vous retourne ensuite un numéro et enregistre un cookie sur le navigateur. Grâce au numéro, vous pouvez installer le cookie sur d'autres navigateurs (avec une autre commande). Une fois le cookie en place, vous pouvez toucher à un certain nombre d'options (avec une troisième commande) qui permettront par exemple de personnaliser le logo, de changer le moteur de recherche par défaut etc.

Enfin, la dernière nouveauté (qui sera révélée aujourd'hui) est la disponibilité des sources et ce dès maintenant. Vous pouvez suivre, récupérer et tester l'avancement du site qui est disponible sous forme de dépot git sur idevelop.org. Les sources seront bien entendus libres (releasées sous licence GPL3). Cependant, le principe d'Escaline étant d'être centralisé, on espère que les gens ne s'amuseront pas à créer 150 clones publiques. Pour terminer là-dessus, notez qu'en plus de suivre, récupérer ou tester Escaline, vous pouvez aussi y participer, surtout si vous avez quelques compétences en design, intégration ou Javascript. N'hésitez pas à me contacter si ça vous intéresse.

Commentaires

Avatar de Guillaume
Guillaume
le 25 février 2009 11:29

ah cool, chouette! bonne nouvelle! miam! bonnes idées (toutes)

Avatar de Sunny
Sunny sunfox.org
le 10 juin 2009 10:50

J'approuve fortement et je me réjouis d'avance.

Laisser un commentaire
:
:

Optionnel.

:

Ne sera pas publiée, elle est utile pour les Gravatars et la modération des commentaires.

:

Vous pouvez utiliser ces marqueurs : a, strong, em, pre, blockquote, abbr, acronym, et code. Les sauts de lignes et les liens sont automatiquement convertis.

:

Ce test permet de vérifier que vous n'êtes pas un (salaud de) robot de spam.


J'utilise Escaline 
!