The Knight who says Yi


h1 4/26/2006 11:19:00 AM

Heimdall me parle du SummerOfCode Haskell, et me fait ainsi découvrir Yi, un éditeur de texte écrit en Haskell qui prétend être plus dynamique qu'Emacs. L'auteur explique dans un article comment concevoir des applications complètement dynamiques, dans un langage compilé et statiquement typé comme Haskell -- il a aussi conçu le λbot IRC de #haskell selon la même méthode.

L'article ne présente pas un nouveau langage ni même un nouveau compilo, mais une méthodologie de développement qui permet de faire une application reconfigurable à chaud, dans laquelle on peut même changer des morceaux de code à chaud. C'est un peu gros d'affirmer que le résultat est plus dynamique qu'Emacs, on voit sur la fin les limites du modèle quand il aborde les commandes type :map, autant dire qu'il y a pas de jolie solution pour le M-x d'Emacs. Mais au fond, on peut peut-être se passer de ces choses là. Malgré ces excès, l'article est très intéressant et élégant, et surtout casse des idées reçues sur les langages dynamiques. Avoir un langage statique compilé permet aussi de faire plein de trucs "dynamiques".

Tout ça nous ramène à bed, un éditeur écrit en OCaml qu'on avait commencé avec comme idée centrale de faire le procédé de colorisation/indentation de façon plus jolie en adaptant les techniques bien connues de lexing/parsing de façon plus maline que d'hab. Le développement avait bloqué au moment de faire l'éditeur lui-même pour des problèmes de design, et ce genre de lecture est peut-être un pas vers une solution, un jour. C'est plus raisonnable que mon autre scénario de reprise, qui passait par la création d'un langage de prog plus adapté, que la killer-app bed aurait ainsi popularisé en retour comme le premier langage statique dynamique.

En attendant, la fondation Haskell propose un projet Summer of Code sur l'éditeur Yi, il s'agit d'ajouter la colorisation et l'indentation... Je suis curieux de voir ce que ça donne.

XFesse


h1 4/26/2006 12:19:00 AM

À ma gauche le logo d'un vieux projet mort et enterré que je compte pas du tout déterrer. L'ours en slip a même une histoire qui remonte à avant mes premières lignes de code. Et ce n'est pas fini pour lui, puisque sur idée de Romain, il pourrait devenir la mascotte de liquidsoap. À venir...

Un à-venir vraiment proche c'est Xfce 4.4, puisque la beta-1 est sortie il y a quelques jours. J'ai pu goûter au nouveau filemanager Thunar, dont j'avais déja vu les maquettes Python il y a un moment. Cela promettait, et je suis pas déçu du résultat. C'est simple et très efficace, ça fait penser au bon ROX avec quelques nouveautés, et une meilleure intégration aux standards freedesktop notamment pour le thème d'icône. Si j'utilise un filemanager graphique ce sera celui là. En attendant d'installer la totale de la 4.4 on peut jeter un oeil sur la liste de nouveautés d'Xfce et les dernières modifs de Thunar. Dans la foulée je donne aussi sa chance à Xfmedia. Plus délicat que "Google va-t-il réussir à rester no evil ?", on se demandera aussi "Xfce va-t-il réussir à rester ergonomique et rapide au fil de ses évolution ?"... en ce moment, le mien démarre drôlement lentement, mais c'est ptêt de ma faute. Je conseille en tout cas vivement cet environnement de grande qualité, élégant de simplicité, bourré de bonnes idées et toujours en mouvement.

Tant qu'on y est sur les nouveautés, j'ai quitté ma Google homepage pour la plus jolie et plus fonctionnelle page de NetVibes, qui remplit notamment un vrai rôle d'aggrégateur de flux, se souvient et affiche clairement ce que tu n'as pas encore lu.

Autre nouvelle en vrac: ça se confirme, j'ai des visiteurs occasionnels à part vous trois à qui j'ai donné l'adresse de ce carnet, et pas que des visiteurs anodins, cf certains commentaires... J'ai le trac, faut que je me surveille un minimum sur la qualité :p

Retour de vacances


h1 4/22/2006 11:24:00 AM

De retour de vacances, je pourrais vous faire un post sur une pizzeria de Bourg-St-Maurice, une critique du domaine skiable de Tignes/Val d'Isère, ou encore un comparatif crèmes solaires, ce serait encore plus branché que Gelnior. Mais non. Je pourrais aussi ne pas réussir à vous raconter comme le ski c'est bien, le surf encore mieux mais douloureux à en crier, la famille c'est chouette, surtout quand on l'a plus sur les pattes au quotidien mais seulement dans de bons moments comme ça.

Mon appareil photo a accepté de s'allumer la veille du départ. Agréablement surpris je l'embarque. Mais au premier jour de ski il ne marche déja plus. Du coup pas de photo de ma gueule de kéké. Le soleil m'a cramé de façon alarmante. Maintenant je m'effrite comme une tête de beuh dans les mains de Romain.

Voilà voilà, coupure quasi totale pendant une semaine, faut se remettre au rythme normal là. Ecrire un peu pour le labo deux trois pensées de télésiège. Lire toutes les news de geek qui sont tombées pendant mon absence, et chercher à synchroniser mon Palm avec le tout nouveau Google Calendar... La routine revient vite.

Brisez les chaînes .. de caractères


h1 4/13/2006 04:18:00 PM

Tout à l'heure je discutais avec mon père, il me reparle d'un problème qu'il a en Javascript, et me demande si j'y ai repensé. Je réponds légèrement que non j'y ai pas repensé, je vois pas le problème, etc. Il s'acharne. Alors je pose sur papier un schéma de ce que j'ai en tête. Et là tout s'éclaire...

Vous faites du Javascript, en plein coeur de l'action vous avez quelques variables locales bien compliquées, genre une table de hachage, une fonction, des noeuds XML... Et vous voulez programmer une action à effectuer dans 42 secondes, qui devra utiliser ces données.

On pense à setTimeout, qui prend une chaîne S et un entier N, et évalue S après N millisecondes. Problème: la chaîne est évaluée dans le contexte global, dans lequel on ne voit pas les merveilles qu'on a localement, et qu'on ne peut pas non plus facilement encoder dans la chaîne de caractères. Mon papa ne se décourage pas et programme un système permettant de réserver une place identifiée par un entier pour ranger les infos concernées dans une liste globale, et parle ainsi de ces objets en écrivant l'entier dans sa chaîne. Au bout d'un peu de code et de debug, on s'en sort. Et on est fier d'avoir implémenté un petit système d'allocation de mémoire.

Pratiquant plutôt d'autres langages que je qualifierais de plus sains, j'avais en tête que setTimeout prend en paramètre une fonction F et un entier N, et appelle F() au bout de N millisecondes. Cela simplifie le problème, car Javascript lie les variables statiquement, c'est à dire que si dans ma F je parle de x et de n, il s'agit des x et n dans la portée de la définition de F. Du coup pas besoin d'aller faire des micmacs dans une variable globale ou à sérialiser des données complexes. On crée juste une fonction anonyme exécutant le boulot à faire dans 24 heures chrono, le plus naturellement du monde. Et ben figurez vous que le setTimeout de Javascript accepte aussi des fonctions comme je l'imaginais. Happy end.

Morale: un bon design résout bien des problèmes. Vive le fonctionnel, mort à eval(), aux armes, etc.


By the way, Python a relooké son site web. Python.org fait très pro, voire trop. Par contre on ne sait trop que penser de la campagne de comm menée par Python.com...

Radio time


h1 4/07/2006 10:07:00 AM

J'ai passé beaucoup de temps ces derniers jours sur la préparation de mon séminaire thésard. C'est fini, et ça s'est plutôt bien passé. Maintenant je vais me faire plaisir pendant quelques jours en avançant liquidsoap. J'ai fixé des plus ou moins petits bugs, encore un peu changé la syntaxe, je vais finir par uniformiser les nommages dans l'API de scripts, stabiliser les transitions, etc. Deux nouvelles features:

output.icecast(
mount="prout.ogg",
# La fonction suivante est appelée pour chaque paquet de metadata.
# Cela permet de loguer par exemple les fichiers diffusés, pour la SACEM.
on_metadata =
fun (m) -> system("echo '"^assoc("initial_uri",m)^"' >> /tmp/appended"),
# Ici un exemple de requete dynamique assez débile,
# ça passe le premier fichier valide dans une playslist.
# Bien sûr chacun mettra ici son propre programme
# d'ordonnancement de playlist.
fallback([dyn_request(fun () ->
("zob:ma playlist",
get_process_lines("cat "^"/tmp/playlist"))),
one_file("/usr/share/mrpingouin/mp3/jingle/tue-sa-mort-sam.mp3")]))


OK tout n'est pas clair mais avouez que vous sentez que ça rules :p Bon tout ça ne va pas sans mal et je ne prends pas toutes les précautions nécessaires. Du coup RadioPi était très malade hier soir (plusieurs évanouissements) et les jeunes qui voulaient faire un live ont dû être un peu déçus.

Misc


h1 4/01/2006 10:20:00 PM

J'ai enchainé les petits post anodins et geeks ces temps-ci. Pour me réfréner j'ai décidé d'accumuler plusieurs autres liens dans un seul post, qui est désormais assez plein. Flush.

Les prochaines applications à la mode seront mobiles ? Le Bluetooth offre des possibilités rigolotes, formant ce que certains appellent des Personal Area Networks.. Jouez à Qui est-ce ? avec un inconnu dans le coin, ou partagez des fichiers de façon encore plus incontrôlable que le p2p avec Pocket RendezVous. Romain, la killer-app du futur que tu cherches est sûrement Bluetooth-enabled.

Sinon, j'ai fait une émission très sympa sur RadioPi l'autre soir. On s'est dit qu'il faudrait se préparer pour la prochaine, que ce soit encore mieux. J'ai pas commencé à écrire les textes, mais j'ai trouvé des sites de sons. Allez vous immerger dans deux magnifiques sites de la communauté phonographiste, qui enregistre tout ce qui passe: SoundTransit et SoundScape FM.

Enfin je suis retombé sur un dessin fait avec un nouveau design du blog en tête..

Aha


h1 4/01/2006 02:36:00 PM

Je suis tombé sur un scoop bien chaud ce matin, la sortie de DukeNukem Forever!... J'ai vite réalisé qu'on est le 1er Avril. Drôle aussi: l'ajout de GOTO et COMEFROM dans Php6. Ou encore une bonne blague à la française... qui fâche.