Skip to content

Entries from January 2010.

Des tips, enfin !

Ça fait un moment qu'on voulait un système de tips sur awesom qui nous permettrait d'avoir un endroit ou stocker des simples astuces, et qui pourrait par la même occasion être accessible à d'autres personnes.

On a tout d'abord pensé à un StatusNet, mais c'était peu adapté à ce qu'on voulait (mais pour une utilisation « normale », ça poutre). On a donc décidé qu'on le coderait nous même, ce qu'Izu a commencé avec web.py, et s'est arrêté une fois que ça affichait les tips, mais on n'avait pas de possibilitée d'en ajouter et quelques problèmes à le mettre en place proprement avec lighttpd. De mon côté, j'ai essayé dancer et nitrogen, mais c'était un peu trop chiant à utiliser pour faire un truc aussi simple que tips. Izu a ensuite fait quelque chose de pas mal avec Code Igniter, mais toujours sans la possibilitée d'ajouter des tips. J'ai finalement testé Arc et ça m'a semblé être un bon choix.

Arc, un langage orienté web

Arc est un langage de la famille des lisp, conçu par Paul Graham, un hacker Lisp assez renommé qui écrit beaucoup, aussi bien des essais que des bons livres sur le Common Lisp.

La particularité de Arc est qu'il est incroyablement bien adapté pour développer des applications web avec ou même n'importe quelle application qui utilise le réseau (la gestion des sockets est simple avec Arc contrairement aux sockets de Common Lisp qui s'utilisent de façon différente sur chaque implémentation, même s'il existe des bibliothèques plus ou moins portables). Arc a beau être léger, il implémente énormément de fonctions très utiles pour le développement web, ce qui permet de se concentrer sur l'application en soi plutôt que de coder encore et encore les même fonctions qui manquent dans le langage.

Évidemment, Arc étant un dérivé de Lisp, vous pouvez toujours définir des macros (lisez les chapitres 7 et 8 de Practical Common Lisp si vous débutez en Common Lisp et que vous ne conaissez pas les macros, pour ceux qui ont un niveau plus élevé, regardez du côté de On Lisp ou même de Let Over Lambda), ce qui simplifie grandement le développement.

Je ne vais pas parler plus en détail de Arc, si vous voulez plus d'informations, je vous recommande Design Philosophy (ou en français) et Why Arc Isn't Especially Object-Oriented qui peuvent vous donner une première impression sur la façon dont Arc est conçu. Pour avoir un aperçu d'Arc, regardez aussi Take the Arc Challenge et comparez le avec les solutions dans d'autres langages.

Installation d'Arc

Plusieurs implémentations d'Arc sont disponibles, dont les deux principales, implémentées en PLT-Scheme:

  • tout d'abord, la version « officielle » de Paul Graham, qui date un peu ;
  • ensuite, Anarki une version dérivée de la version officielle, qui est bien plus à jour et peut-être légèrement incompatible avec celle de Graham.

Il existe aussi d'autres versions moins actives, moins utilisées et surtout moins complètes, mais qui valent quand même le coup d'œuil:

  • un compilateur Arc vers C, arc2c ;
  • une implémentation en Java, rainbow ;
  • une implémentation en Javascript, arclite ;
  • une implémentation en .NET avec MBase ;
  • une implémentation en Common Lisp avec SBCL, arc-sbcl.

Personnellement j'utilise Anarki, qui est de loin la version la plus complète et active. Pour l'installation, un coup de

git clone http://github.com/nex3/arc
ln -s arc/arc.sh ~/bin

et c'est parti pour de folles heures de hack. N'oubliez pas d'installer les fichiers relatif à votre éditeur de texte, disponibles dans extras (il y a un arc-mode et un inferior-arc-mode pour GNU Emacs ainsi que les fichiers d'indentation, de syntaxe et une extension pour intégrer la REPL d'Arc à Vim)

Pour commencer à programmer avec Arc, lisez d'abord l'introduction de Paul Graham et utilisez la documentation disponible sur l'Arc Language Blog, qui est quasi complète, mais pas totalement, il vous restera donc à trouver votre documentation en lisant les sources d'Arc. Parcourez aussi les deux exemples d'applications disponibles avec Arc: un simple blog et le code source de Hacker News. N'hésitez pas non plus à jeter un œuil au code source de tips (qui s'inspire de ces deux exemples).

J'ai aussi mis en place une page regroupant les ressources francophones disponibles pour Arc, toute contribution est la bienvenue.

Mise en place sur awesom

Arc a été installé dans une jail et il a simplement suffit de récupérer tips dessus (via son dépôt mercurial (que je commence d'ailleurs à préférer à git, car plus simple et plus logique tout en restant puissant)), il ne restait donc plus qu'à configurer le serveur web (en l'occurrence, lighttpd).

Ce dernier point a été assez dur a mettre en place car le mod_proxy de lighttpd refusait simplement de marcher avec Arc (la seule réponse qu'on obtenait du serveur était une page blanche). On a donc mis en place un nginx (qui est très simple à configurer soit dit en passant) dans la jail qui écoute sur le port 80 et qui fait proxy vers tips (qui lui tourne sur le 8080).

Arc étant lancé dans une REPL, on peut facilement modifier les paramètres (url, etc.) et surtout, mettre à jour tips sans même devoir couper le service (en rechargeant simplement les fichiers sources).

Voilà, on a enfin quelque chose pour gérer nos tips, sur tips.awesom.eu, il faut juste espérer que ça se remplisse petit à petit.