Le paradoxe de l'unixien technophile

Prenons un informaticien du monde Unix : sauf exception, ce sera également le plus souvent un technophile facilement enthousiaste en matière d’innovation technologique. Ceci dit il aura probablement également un regard beaucoup plus critique, ne reconnaissant à une nouveauté un caractère novateur que beaucoup plus difficilement qu’un publicitaire par exemple. :-)

Prenons quelque chose de vraiment novateur justement. L’iPhone est d’un point de vue ergonomie sans doute parmi les plus aboutis aujourd’hui (et peut-être le plus lors de sa sortie) : son interface tactile (multitouch, mais à quoi bon préciser ?) est naturelle et intuitive au possible. Attraper des choses, feuilleter des pages ou des photos du bout de doigts, avoir un affichage qui s’adapte à l’orientation de l’écran : c’est ce que l’on veut vraiment, ce que l’on attend même. Ce type d’interaction traîne dans les conférences d’IHM depuis plus de dix ans, et enfin quelqu’un a eu le courage de mettre sur le marché.

Mettez cet objet dans les mains du sujet, et observez sa réaction. Manifestement, il est content. Mais pour faire son bonheur, permettez-lui en plus de faire ceci :

Shell zsh dans un iPhone

Soudain, il retrouve ses marques : il peut faire du ssh, rediriger des ls des sed et des grep. Revenu des années en arrière, il est comblé, il se sent rassuré, il est aux anges, il jubile, il peut frimer et poster un billet sur son blog en parlant de lui à la troisième personne.

Si j'avais le temps…

Si j’avais le temps, il y a tout un tas de choses que j’aimerais faire. Dans le désordre :

  • J’apprendrais plein de langues : le Coréen, parce que le Hangul est peut-être le meilleur système d’écriture au monde ; le Russe, pour sa sonorité ; le Roumain, je ne sais pas trop pourquoi…
  • J’apprendrais aussi plein de langages de programmation, voire même les utiliserais : Ruby, Lisp, Haskell (pour l’instant je n’en suis qu’aux types ;-) ), D, Fortress
  • Je lirais le « Knuth » et le « Gödel Escher Bach ».
  • Je relirais mon cours de maths de spé que j’ai trop vite oublié.
  • Je me remettrais à l’algorithmique.
  • Je deviendrais première dan d’aikidô et de go, autrement dit je saurais à peu près pratiquer l’un et jouer l’autre.
  • J’apprendrais à jouer de la bombarde ou bien de la flûte irlandaise.
  • Je chercherais un boulot qui me donne envie de rester plus de deux ans.
  • J’avancerais mon projet de CMS d’illustrations, je coderais un moteur 3D, et un outil simple de création de schémas.
  • J’installerais ma Sun en serveur de fichiers et tant qu’à faire, j’apprendrais à me servir de Solaris 10.
  • Je ferais une feuille de style digne de ce nom pour ce blog et le reste du site.
  • Et pour finir, après ça, je m’offrirais en plus le luxe de glander !

Si j’avais le temps. Mais d’un autre côté, ne pas avoir le temps de faire tout cela permet d’oublier que si je ne le fais pas, c’est aussi parce que je n’ai le courage non plus. Ce n’est pourtant pas l’envie qui m’en manque.

Apprendre le Haskell sur sa pause déjeuner

Haskell fait partie de ces langages que j’aurais aimé trouver le temps d’apprendre, tant ceux qui en parlent le font de façon élogieuse. Et voilà que Laurent signale l’apparition tout récente d’un blog proposant justement de découvrir ce langage selon le concept : « Apprendre le Haskell en 5 minutes par jour ». Riche idée !

Les articles sont rédigés en anglais avec un style très accessible, et abordent petit à petit la syntaxe à coups de bouts de programmes très brefs (en tout cas pour le moment). La pratique n’est pas laissée en reste puisque l’auteur détaille également les étapes sur un Linux avec GHC et emacs.

Attention, désormais ça va saigner aux discussions autour de la machine à café, car maintenant je sais faire un HelloWorld en Haskell. :-)

Une critique du Lua

Laurent proposait dans l’un de ses articles une critique d’une vingtaine de langages de programmation. Parmi ceux-ci, le Lua était présenté très brièvement. Je propose ici de développer un peu sur ce langage.

Il s’agit donc d’un langage particulièrement léger, qui s’intègre très facilement dans un projet, et qui bénéficie d’une documentation claire et d’une communauté relativement active.

Comme l’indique Laurent, le Lua est multi-paradigme. S’il se présente au premier abord comme un langage impératif, on peut également faire de l’objet (au prix de l’utilisation d’une bibliothèque) et il dispose de plus de tous les outils pour faire du fonctionnel (il me semble juste que l’on ne peut pas faire simplement de curryfication). Du point de vue de la syntaxe, c’est un langage très agréable qui permet d’exprimer les choses de façon très succincte. Ainsi on peut itérer sur un tableau avec un « foreach », on dispose de fonctions locales, il n’y a pas de point-virgule de fin de ligne, pas de parenthèses superflues…

Par contre c’est un langage qui souffre d’un très gros laxisme du point de vue du typage. Il est en effet typé (dynamiquement) dans le sens où l’on peut demander le type d’une variable, mais dans de nombreux cas si l’on utilise une variable d’un type au lieu d’un autre, elle est transtypée sans que cela pose de problème au langage. De plus on ne peut pas imposer le type attendu par une fonction, mais juste le vérifier à l’exécution. Enfin si l’on tente d’accéder à une variable qui n’existe pas, par exemple suite à une faute de frappe, cela ne gène pas le moins du monde le langage, qui renverra « nil » (valeur valide pour une variable). Naturellement c’est source de beaucoup d’erreurs, décelées seulement à l’exécution de la branche erronée.

Autres choix qui ne me plaisent pas : le fait que les variables soient globales sauf contre-indication explicite, et que les opérateurs logiques « or » et « and » qui, contrairement à ce que l’on pourrait attendre d’un langage moderne, ne renvoient pas un booléen mais l’opérande déterminante.

Du côté des outils fournis, le langage se veut doté d’un système de table très puissant, et s’il est vrai qu’il est pratique dans les cas simples, on en trouve très vite les limites. Par exemple on ne dispose pas de reverse-iterator, et en écrire un s’avère laborieux. De même, la fonction permettant de compter les éléments d’une table est en fait une sorte de hack qui ne fonctionne que pour les tables indexées, en renvoyant le plus grand indice consécutif. Si l’on veut une fonction sérieuse pour connaître cette information, on doit donc l’écrire. Le langage se veut également doté d’une gestion de chaînes puissantes. Pourtant la documentation explique que les expressions rationnelles ne sont pas POSIX pour des raisons de quantité de code nécessaire. Au final filtrer des motifs devient vite pénible dès que l’on sort des cas d’école, et l’ajout d’une nouvelle syntaxe maison vient perturber le principe de moindre surprise.

Enfin du point de vue des performances, le langage se place apparemment plutôt bien pour un langage interprété. Il est notamment possible de faire de la compilation just-in-time et d’atteindre ainsi des performances très correctes. Cela dit elles restent plombées apparemment par le typage dynamique. Un simple appel de fonction se révèle être déjà coûteux. Du point de vue de la gestion de la mémoire, il est assez difficile de savoir ce que l’interpréteur fait, mais il semblerait qu’il ne sache pas tirer parti du fait qu’une fonction est souvent appelée pour optimiser l’allocation de ses variables locales. À vérifier cela dit.

En conclusion c’est un langage très pratique, vivant, facilement intégrable, avec une syntaxe relativement agréable, mais qui souffre d’un trop grand manque de rigueur.

Dessine-moi une photo

C’est avec près de deux ans de retard que je viens de découvrir retrievr, un site qui propose de parcourir des photos du site Flickr en dessinant grossièrement ce que l’on cherche.

Bien que l’interface soit assez basique, après quelques tests j’ai pu obtenir très rapidement des photos de chat, d’oeil, de coucher de Soleil, d’éclipse solaire, de tournesol, et de bouche. J’avoue par contre avoir peiné à obtenir une photo de paysage de colline verdoyante, et n’avoir trouvé aucune photo de Jupiter. La majorité des images ne correspondent d’ailleurs généralement pas à ce que l’on cherche, mais force est de constater que ce que l’on cherche s’y trouve en quelques coups de pinceau (la recherche se faisant à mesure que l’on dessine). Cela dépend sans doute aussi du talent artistique de chacun. ;-)

Mais outre la facilité à trouver des sujets en particulier, les autres images renvoyées sont souvent très pertinentes. Enfin que le tout fonctionne en temps interactif dans une interface web est impressionnant je trouve.

Apparemment le fonctionnement semble reposer sur une base d’images déjà analysées, mais ce serait vraiment intéressant de voir un tel outil indexer des images au fur et à mesure de leur arrivée par flux de syndication. Le fait de pouvoir (enfin) rechercher des images par apparence plutôt que par tag est en effet vraiment agréable.

En tout cas voilà encore un bon moyen de perdre son temps. :-)