Rush


h1 11/29/2005 01:23:00 AM

Yo. Rentré de Lyon hier soir. Week-end passé vite, soirée, beaucoup de visites, froid, galères de Vélov. Aujourd'hui labo, recommencé à coder dans bedwyr, amélioration du noyau. Toujours pas de dump de la base de donnée du Génépi pour bosser sur leur site. Mais un nouvel item considérable sur la todo-list, avec la traduction d'une présentation de master, bien épais et technique, temps sacrément limité, mais quand même alléchant financièrement par les temps qui courent. OpenOffice pas à la hauteur du DOC qu'on me refile, merdouille. Je veille pour traduire, Romain déboule et m'apprend que RadioPi est morte, ça pourrait accélérer la migration. On relance le nouveau système à base de Savonet, remarque un nouveau bug. Tiens, j'ai aussi de plus en plus de modifs locales à commiter sur ma version perso.. Je crois que le temps va se compresser un peu pour deux semaines. Mon papa s'est offert un iBook, je fantasme un peu sur le bonus de Noël que représente mon petit boulot de traduction, et Bimbo m'annonce que Geek Radio tourne depuis 14 jours sans panne...

Don't Panic!


h1 11/22/2005 05:54:00 PM

Le gadget geek ultime du moment c'est le Nokia 770, un joli petit tablet PC sous linux, plus précisemment la plateforme Maemo. Il utilise des logiciels dérivés de Debian, Gnome, Opéra, etc. La bête a un écran tactile, du wifi, a la taille d'un bouquin poche et un design élégant. Et bien sûr tous les blogs techos de la planète en parlent, et on voit déja fleurir les manuels "Comment hacker son 770", "Programmer vos applis en Python avec l'API officielle du 770", etc.

L'objet devient culte, la preuve en images -- évidemment il faut un minimum de culture pour comprendre. Je tiens à citer ma source, un site présentant quelques hacks sur la bête.



En tout cas, chapeau à Nokia, longue vie à l'Open Source.

Musique, encore...


h1 11/17/2005 01:08:00 AM

Très bonne soirée ce soir. Je ne vais pas rentrer dans les détails, je voudrais dessiner mais je n'ai pas le temps. Pas beaucoup bossé aujourd'hui, je me suis laissé déranger trop souvent. Je poste pas pour me plaindre, mais pour noter une découverte intéressante. On commence à voir des systèmes qui classent la musique, associent des morceaux, vous font découvrir quelquechose dans vos goûts, etc. Pas de quoi tuer Geek Radio l'inimitable, mais c'est plutôt bon et permet de faire des découvertes.

Le truc qu'on connaissait depuis longtemps c'est musicplasma que sam avait décompilé pour aider bimbo à y accéder, jouant le rôle de DJ sensible et original. Romain m'indique aujourd'hui pandora qui génère des listes de chansons similaires, et vous les joue. Ce site vous permet de faire vos propres webradios thématiques, pour gratis! Le principal hic c'est que c'est maigre en trucs trop indépendants, trop français, etc.

Edit: Gim vient de me faire découvrir Jamendo et je suis très enthousiaste. Il s'agit d'un site qui distribue des artistes produisant leur musique sous licence CC. La musique est librement accessible, en mp3 et ogg, et des torrents sont dispos pour chaque album. Un système de tag collaboratif permet de naviguer dans la grosse base de donnée. Enfin, on peut si on le désire faire un don au site ou aux artistes que l'on apprécie. Si on le désire, on peut aussi donner à un artiste que l'on n'aime vraiment pas du tout, aussi... C'est le genre de concept qu'on attendait, espérons que cela tourne bien.

Moins sexy mais puisqu'on parle de sites, j'ai commencé à remplir un agenda en ligne sur binaryblue. C'est pas ultra ergonomique mais les fonctionnalités sont suffisantes, les événements ne sont que ponctuels. Ce serait pas trop dur de faire une petite application équivalente mais il resterait le problème de la synchronisation, des agendas distants.

Musique!


h1 11/16/2005 12:16:00 AM



A force de voir des plus ou moins beaux dessins un peu partout, racontant du drôle ou du touchant, j'ai re-repris ma tablette graphique. Alors voila un dessin. Pas vraiment de finalité, je cherche mes repères, mes outils. Et ce soir, c'est sur ça que je m'arrête. C'est un peu gratuit, un peu gamin, mais bon. Le dessin lui-même est venu quand la BO des triplettes passait sur Geek Radio. Ca bouge, ça entraine... Ajout: Hop un autre dessin. Certains reconnaitront la chanson qui m'a inspiré.

How is life ? Working hard ?


h1 11/15/2005 07:59:00 PM

Une petite phrase de mon maître de thèse aujourd'hui m'a mis en situation délicate face à la réalité. Je n'ai toujours pas débrouillé un article à écrire, j'avais pourtant l'impression qu'on me l'avait jeté tout cuit dans le bec. A la place j'améliore par-ci par là l'outil de preuve, je joue avec. Et je geeke :p Et je suis crevé. Je dors plus dans le RER que chez moi.

Bonne journée quand même, peut être sur une meilleure piste pour le boulot. Mes doigts ont senti le poisson toute l'après-midi. C'est comme l'ail, j'aime bien... Rentré un peu tard, il faisait nuit noire et pleuvait. Temps pourri sur le plateau de Saclay. Un thésard et polytechnicien m'a raconté avoir lu un article poilant, expliquant pourquoi le plateau n'avait jamais été habité par l'homme avant que l'école n'y soit construite. Le temps est trop pourri. Des nappes de brouillard flippantes errent, alors qu'il fait grand beau partout ailleurs. J'ai d'ailleurs eu ce soir droit au spectacle humide et un peu fantastique de l'escalier perdu dans le brouillard. Il fait bon rentrer chez soi, son steak sous le bras.

Un bon petit lien pour la route: Généalogie des langages de progs. Aucune révolution visible depuis les années 90.

Et un autre gros lien même pas geek. De l'humour bien gras comme on l'aime.

99 bottles of beer


h1 11/07/2005 10:48:00 PM

Voici un petit prog OCaml adapté de compile.ml, un des modules du compilo OCaml lui-même. Je vous laisse le soin de compiler ça avec tous les modules utilitaires du compilo Caml. Qu'est-ce que ça fait ? Ca définit un lambda-terme (au sens de lambda.mli) qui affiche la fameuse chanson des 99 bottles of beer, un exemple courant de programme, un peu plus compliqué qu'un simple Hello World. Le lambda-terme est compilé en bytecode caml dans newt.cmo puis linké, au final on obtient un exécutable thenewt qui exécute le fameux algorithme.

L'origine de cette expérience est dans le post précédent, il s'agit d'étudier la faisabilité d'un compilo qui utilise le backend de OCaml, en utilisant une syntaxe et un système de type différents. Je me suis dit qu'on peut faire mieux que boo :p

open Misc
open Config
open Format
open Lambda

let init_path () =
load_path := "" :: (Clflags.std_include_dir ());
Env.reset_cache ()

let initial_env () =
Ident.reinit () ;
try
Env.open_pers_signature "Pervasives" Env.initial
with Not_found ->
fatal_error "cannot open pervasives.cmi"

let print_if printer arg =
fprintf Format.err_formatter "%a@." printer arg ;
arg

let (++) x f = f x

let implementation =
let modulename = "Newt" in
let env = init_path () ; initial_env () in
let objfile = "newt.cmo" in
let binfile = "thenewt" in
let oc = open_out_bin objfile in

let print_string =
let lid = Longident.Lident "print_string" in
let (path,_) = Env.lookup_value lid env in
transl_path path
in
let printf =
let lid = Longident.Ldot ((Longident.Lident "Printf"),"printf") in
let (path,_) = Env.lookup_value lid env in
transl_path path
in
let int n = Lconst (Const_base (Asttypes.Const_int n)) in
let string s = Lconst (Const_base (Asttypes.Const_string s)) in

let lambda =
(* setglobal (persistent Newt) *)
Lapply
(print_string,
[string "They turned me into a newt !\n"])
(* makeblock 0 *)
in
let bottles =
let more,one,nomore =
"%2d bottles of beer on the wall. Take one down, pass it around.\n",
"One bottle of beer on the wall. Take it down, pass it around.\n",
"No more bottles of beer.\n"
in
let id = Ident.create "nn" in
let eqthenelse x n t e =
Lifthenelse
((Lprim ((Pintcomp Ceq),[Lvar x;int n])),t,e)
in
let body =
let x = Ident.create "x" in
Lfunction
(Curried,[x],
(eqthenelse x 0
(Lapply (printf,[string nomore]))
(Lsequence
((eqthenelse x 1
(Lapply (printf,[string one]))
(Lapply (printf,[string more;Lvar x]))),
(Lapply (Lvar id,[Lprim (Psubint,[Lvar x;int 1])]))))))
in
Lletrec
([id,body],
(Lapply ((Lvar id),[int 99])))
in
let lambda = Lsequence (bottles,lambda) in

try
lambda
++ Simplif.simplify_lambda
++ print_if Printlambda.lambda
++ Bytegen.compile_implementation modulename
++ print_if Printinstr.instrlist
++ Emitcode.to_file oc modulename ;
close_out oc ;
Bytelink.link [objfile] binfile
with x ->
close_out oc ;
(* TODO remove file *)
raise x


Voila. J'ai posté parceque c'est court. Mais l'air de rien ça m'a pris du temps et de la patience pour comprendre où trouver telle ou telle fonctionnalité.

Langages


h1 11/02/2005 03:09:00 PM

Ca me travaille ces temps-ci, l'idée d'un langage sûr et sexy... Pas question que je me lance dans l'implémentation d'un nouveau langage, mais je ne peux m'empêcher de considérer la chose. La mode en ce moment c'est les machines virtuelles, le bytecode. Du coup t'écris un compilo pour un bytecode abstrait, si possible pas trop compliqué, c'est portable, t'as pas à te taper le GC, potentiellement tu profites des fonctionnalités des autres langages de la plateforme, t'es content. Ya la JVM de Java, le CIL (.NET,mono) de Ecma, la machine virtuelle Parrot, le bytecode Caml.

En trainant un peu sur l'excellent blog Lambda the Ultimate je tombe sur Boo, une initiative qui me plait bien.. à première vue du moins. Il s'agit de faire un langage agréable type Python ou Ruby, mais typé statiquement. C'est en tout cas une bonne preuve que typage statique ne veut pas dire emmerdement du programmeur. Ca tourne sur la CIL. J'ai lu un peu sur la chose. L'avantage c'est que c'est foutrement beaucoup documenté. Mais c'est gros, pas élémentaire comme truc. Et surtout, le bytecode est typé. Donc pas super comme cible pour un langage statique. Ya un ebuild gentoo, je l'emergerai peut-être quand même.

Quelques précisions à propos de boo. L'inférence laisse beaucoup à désirer.

def f(x):
return (x-1)
f("hop")

Le code suivant, en mode interactif booish, provoque une erreur à l'exécution. Si on essaie de le compiler avec booc, on obtient une erreur statique, mais il s'agit de la défaite de l'inférence, qui ne cherche pas à spécialiser x et le considère comme un objet en général, puis s'indigne qu'on cherche à utiliser la soustraction. En gros il faut préciser x as int.

Ruby


h1 11/01/2005 05:19:00 PM


Hier soir j'ai terminé les features manquants dans bedwyr, je dis pas que c'est pas bugué, mais aujourd'hui j'ai pu faire autre chose. Le problème c'est qu'au lieu de bosser, j'ai bouquiné du Ruby, et codé une ébauche d'agenda en Ruby. Je me suis tourné vers ce langage car il dispose d'une meilleure lib iCal que les autres. Il a une grosse communauté, je pense donc pouvoir facilement intégrer si je vais jusque là des possibilités d'édition de calendriers distants via WebDAV. En plus, c'est plutôt plus sympa que Python finalement. L'idée pour l'interface c'est d'avoir au début une seule colonne avec un calendrier, puis de choisir un jour, ce qui provoque l'affichage d'une partie des composants d'agenda, et si on en sélectionne un on a une vue encore plus précise du composant. Là c'est super schématique, mais dans l'idée la colonne agenda peut servir pour filtrer par source, type, mois, contenu, que sais-je. Enfin si vous avez pas compris, j'essaie de faire une interface façon Finder Mac OSX, pompé par le dernier browser de fichiers gtk aussi. Mais là je galère un peu et j'ai pas trop de courage, ya beaucoup de boulot.

Alors quand même, un coup de gueule contre Ruby. Certes c'est du vrai objet, certes il y a quelques concepts sympas. Mais l'héritage multiple a un goût dégeu de meta-programming fait avec les pieds. J'ai du mal avec ces langages mous pas typés, et avec Ruby on peut pas ne pas y penser dès qu'on fait de l'héritage multiple -- je répète ça me plait quand même plus que python je dirais.

Tu programmes ton truc, tu le lances, tout va bien. Tu fais un petit test, trois clics, boum. Ah oui merde j'avais oublié d'initialiser ça. Re-test, re-trois-clics, re-boum. Ah merde, il manque un argument ici, ah merde une typo là. C'est agaçant tout ça, l'objet ça se type aussi, les interfaces ça se vérifie. Quand est-ce qu'on aura un langage sympathique avec une grosse communauté et un système de type fort et serviable ? Comment les gens imaginent faire du bon logiciel sur des langages comme ça ? Ca arrive à tout le monde de faire une typo, c'est le truc le plus simple du monde à détecter par le système de type, et ça peut être très emmerdant d'en laisser trainer une, oubliée dans un bout de code rarement nécessaire. Est-ce que les concepteurs de langages sont paresseux ? Est-ce que le public est paresseux ou RADobsédé ? Le typage ne rend pas forcément un langage pénible, Caml est plutôt léger d'utilisation. Le typage permet même le meta-programming, cf. MetaML & co.

Autre façon de prendre la question: pourquoi diable le binding gtk de Caml est il si pénible à utiliser ? Pourquoi n'y a-t-il pas une communauté Caml plus forte ?

Poster ou pas..


h1 11/01/2005 12:01:00 AM



Je poste, pour mémoire des efforts qu'il me reste à faire.. Je vais essayer d'améliorer la technique avant de pondre une deuxième planche, probablement une aventure d'Omèrde le pingouin.