La voix du secrétaire (Jean), avec l'aide d'Olivier
Présents à la réunion, en fonction de la position autour de la table
David,
Théo,
Sébastien,
Alexandre,
Éric (glb),
Charles,
moi,
Julien,
Olivier (M),
Stéphane,
Laurent (G),
Laurent (un autre, de Red Hat également),
et Jérôme.
Comme les mois précédents, nous sommes allés
au Café Indiana, juste à côté de la Taverne
République. Nous avons mangé des chimichangas au poulet,
des enchiladas, des tacos,
des blue cheese burgers et une entrecôte. Nous avons bu de la bière
(Adel Scott notamment) du Coca-Cola et un Blue Lagoon.
Où en est Perl 5.10 ? David nous apprend
qu'on en est au
feature freeze,
ce qui signifie que la première version à porter
le numéro 10 va sortir très bientôt. Il énumère
quelques-unes des nouveautés de cette
version. Il y a les state
variables, qui sont l'équivament des variables
statiques de C. Il y a les captures nommées
dans les expressions régulières, il y a quelques
assertions de contrôles du genre « commit »
ou « rollback » dans les expressions
régulières pour éviter le back-tracking
infernal qui nécessite plusieurs fois l'âge de l'univers
pour aboutir.
David a également évoqué un nouveau module,
autobox.
Avec ce module, vous pouvez appeler des méthodes
sur des valeurs et non pas simplement des variables.
Voici quelques exemples, pris de la doc du module :
C'est bien utile, semble-t-il, avec les hachages de hachages
de hachages, car cela simplifie la syntaxe.
Il a été question des nouveaux opérateurs de Perl 6,
qui utiliseront des caractères en dehors de l'ASCII
7-bits, comme les guillemets français " « "
et " » "
[ ou les guillemets hollandais
peut-être ? ]
Mais, pour nous rassurer, on nous promet
qu'il y aura des équivalents à 7 bits.
Est-ce le retour des trigrammes de C, comme
« ??< » destiné à remplacer l'accolade
ouvrante, ou bien « ??/ » destiné à remplacer
le backslash sur les machines ne disposant
pas de ces caractères ?
Il sera possible en Perl 6 de déclarer une fonction
MAIN. Bon, d'accord, c'était possible en Perl 5,
mais c'était un nom de fonction comme un autre.
En Perl 6, le fait de déclarer une fonction MAIN
avec une liste d'arguments formels fera que l'appel
du programme en ligne de commande effectuera automatiquement
l'analyse des paramètres, pour coller avec la signature de la
fonction MAIN. On peut avoir également
un embryon de documentation généré automatiquement.
Jérôme pense même que cela facilitera l'écriture
de procédures
RPC.
Il y a quelque temps, lorsque Julien écrivait des programmes
Perl utilisant une base de données, il le faisait avec
la technique habituelle, en construisant ses ordres
SQL et en les exécutant par
DBI.
Puis il a trouvé mieux,
Class::DBI,
qui lui permet de ne plus toucher à la syntaxe SQL.
En revanche, David a eu récemment le cas où
il a accéléré une requête en réécrivant le SQL
lui-même. La requête est passée de 30 minutes
à quelque chose comme 400 millisecondes.
Au lieu de laisser le générateur de SQL constituer
de nombreuses mini-requêtes et d'effectuer certaines
transformations de données dans le programme Perl,
David a constitué une requête unique qui effectue en plus
les transformations de données dans le moteur de la base
de données. Même si cette requête contient des sous-requêtes,
il plus efficace d'envoyer une requête compliquée mais unique
que de nombreuses requêtes simples.
Stéphane a raconté comment Rafael a supprimé
la variable dépréciée
$*
et comment
ça a tout cassé
dans GHC.
[ En fait, je n'ai pas entendu cette intervention de Stéphane.
Mais comme il a pris la peine de m'envoyer le lien... ]
Olivier et David ont parlé de
Vélib'
auquel ils sont tous les deux abonnés. Ils ont évoqué la difficulté de trouver une
place pour déposer le vélo dans le quartier à cette heure. David a un
module WWW::Velib en cours de développement. Il s'est pour l'instant
intéressé à la récupération des informations sur le compte de l'abonné.
Olivier lui a indiqué l'existence de services web donnant les informations
sur les stations.
Il en a parlé sur son blog.
Olivier a utilisé ces services avec l'application web
Yahoo! Pipes
pour construire des interfaces alternatives au site officiel. Du développement
graphique sans une ligne de code.
Stéphane a appelé les mongueurs à s'inscrire sur
FaceBook.
Je me suis inscrit récemment, mais ce n'est pas
dû à Stéphane. En fait, j'ai été averti par
Briac
qu'il avait utilisé un certain nombre de modules de
DateTime,
dont le mien,
pour écrire une application disponible pour les personnes
inscrites sur FaceBook et leur affichant
la date dans plusieurs calendriers.
Puis j'ai reçu une invitation de
Kai
qui a su trouver l'argument qu'il fallait :
il a daté son message du septidi 17 vendémiaire,
jour de la citrouille.
C'est à ce moment-là que j'ai pris
la peine de m'inscrire.
Il a été question du service de téléphonie par Internet,
Skype.
Alors que j'avais tendance à prononcer
« skaïp' », certains prononcent
« skaïpi », ce qui me fait plutôt penser
à un kangourou.
Il a été question d'un site web entièrement en
Flash.
Toutefois, ce site a également une version
en HTML tout simple. Officiellement, la raison
est l'accessibilité pour les handicapés, notamment
les aveugles. En fait, la version HTML existe
pour le référencement par les moteurs de recherche
qui ne pourraient pas utiliser leurs webbots
sinon.
Il paraîtrait qu'Internet représente 5 % de la consommation
électrique mondiale. Julien effectue un calcul à la louche
pour vérifier cette affirmation. Il a entendu parler d'un
data center en banlieue parisienne,
dont la consommation équivaut à celle d'une ville
de 40 000 habitants. Ce data center
voit passer 5 % du trafic Internet français.
Tous les data centers ensemble
représentent donc la consommation de 800 000 français.
Or, nous sommes 60 millions environ, donc la part
des data centers est de 1,3 % environ.
Mais il ne faut pas se limiter à ces data centers.
Il y a d'autres installations pour l'infrastructure
ainsi que la consommation des machines chez les particuliers.
Le pourcentage de 5 % semble donc plausible.
Laurent et Olivier ont une fois de plus frimé avec leurs tablettes Internet
Nokia, respectivement un 770 et un N800. Olivier a présenté un petit boîtier
GPS Bluetooth qu'il utilise connecté au N800 lors de ses déplacements en
Vélib'. Il a constitué
une base POI
des stations Vélib' qu'il utilise avec
Maemo Mapper, un logiciel de cartographie qui utilise les fonds de carte de
Google Maps.
Ainsi il trouve facilement les stations pour prendre ou déposer
un vélo.
Julien revient d'une longue période de programmation
en .NET. Il s'est remis au logiciel libre, mais
hélas, c'est du PHP. Il est heureux de refaire
du logiciel libre, mais il regrette quand même
de taper ses sources sous
vi,
alors qu'il disposait de
Visual Studio.
Compte tenu de sa connaissance d'autres langages et
des styles correspondants, Julien passait pour un
génie auprès de ceux qui ne connaissaient que .NET.
Cela me rappelle un collègue avec qui j'ai travaillé
en 1996. Il me racontait que quelques années plus tôt,
il avait travaillé sur un projet en langage C.
Il avait écrit ses typedef dans des
fichiers toto.h, puis il avait inséré
ces fichiers dans les sources titi.c
par #include. Ses collègues de l'époque,
des adeptes du copier-coller,
en étaient restés stupéfaits !
Julien enchaîne pour dire que le fichier toto.h
devait avoir une structure du genre :
mais les collaborateurs de mon ancien collègue
n'auraient pas été capables de comprendre le pourquoi
de ces déclarations.
Il faut le reconnaître, Microsoft sait reconnaître les bonnes
idées des autres et s'en inspirer. [ Ils ne savent pas
toujours implémenter les bonnes idées qu'ils ont prises
ailleurs, mais c'est une autre histoire. ]
Puis Stéphane est intervenu pour dire :
Vu le contexte dans lequel la question a été posée, la réponse
est évidente, c'est Microsoft qui l'emploie.
L'une des nouveautés de Vista, c'est le
PowerShell,
destiné à remplacer COMMAND.COM et cmd.exe.
Alors que les shells Unix produisent des sorties
au format texte, qui sont transmises au programme suivant
par un pipe « | »,
le PowerShell produit des objets. Par exemple,
ps produira une liste d'objets processus,
qui pourront être interprêtés par le programme suivant
au choix comme une liste de lignes de commande, une liste
de plages d'allocation mémoire, ou tout simplement
une liste de PID.
Stéphane a présenté un exposé long mais impromptu sur la
programmation fonctionnelle, que j'ai manqué en
grande partie. J'en ai retenu que les
monades
sont un moyen pour les scripts en programmation
fonctionnelle de communiquer avec le monde environnant.
On y perd un peu par rapport au dogme de la programmation
fonctionnelle stricte qui bannit tout effet de bord, mais sans aboutir à tous les
inconvénients de la programmation impérative.
Mais il y a mieux que les
monades,
il y a les
flèches,
qui sont une extension des monades.
Dans le cadre des monades et des flèches, il existe un opérateur
en Haskell,
((.)$(.))
Son nom officiel est
« la chouette »,
mais Stéphane pense à autre chose. Je ne donnerai
pas de lien ici, dans l'hypothèse où quelqu'un
regarderait par-dessus votre épaule. Mais si vous
voulez savoir, renseignez-vous sur le mot « mazophallation ».
Ou bien cherchez à quoi peuvent correspondre les
mots-clés « notaire » et « cravate ».
Un autre point abordé par Stéphane au sujet de la programmation
fonctionnelle, c'est l'évolution paresseuse. Lorsque l'on appelle
une fonction en lui passant comme paramètres des expressions,
ces expressions ne sont pas évaluées tout de suite.
Elles ne sont évaluées que quand on en a besoin et si l'on en
a besoin. Tout comme la fonction appelée, d'ailleurs.
Un autre qui connaît plutôt bien la programmation
fonctionnelle, c'est Olivier. Il s'est essayé à
Haskell, en implémentant
le Compte est Bon
en Haskell. Mais il n'est pas allé jusqu'au bout.
À noter qu'il avait déjà programmé ce jeu
dans d'autres langages :
Pascal,
C
et assembleur i386.
En fait, la programmation fonctionnelle n'est pas totalement
inconnue des autres programmeurs Perl. Les auditeurs de
Stéphane et d'Olivier ont été étonnés d'apprendre que,
comme Monsieur Jourdain, il faisaient de la programmation fonctionnelle sans
le savoir, lorsqu'ils utilisaient
grep,
sort,
ou map,
en Perl. Quant à ceux qui ont lu et compris
Higher Order Perl
ils en savent déjà pas mal sur la programmation fonctionnelle.
L'un des intérêts de la programmation fonctionnelle, selon
Stéphane, c'est que cette méthode est propice à
la parallélisation des calculs. Comme la programmation
est très formalisée, comme il n'y a pas de variables
globales, le compilateur peut examiner le programme
en cours de compilation et démontrer que telle partie
n'a aucune interaction avec telle autre et qu'elles
peuvent donc s'exécuter en parallèle. Pas besoin donc
pour le programmeur d'apprendre à paralléliser ses
morceaux de programmes, le compilateur
(Haskell
au hasard) s'en charge.
Stéphane en déduit que l'avenir de la programmation
se trouve du côté
d'Haskell.
Ou peut-être également du côté
d'Erlang
qui n'est pas fonctionnel, mais quand même spécialisé
dans la parallélisation des programmes.
Julien est en contact avec des chercheurs de
l'ENS.
Il a demandé à l'un d'entre eux quel était
le langage le plus utilisé. Éh bien, c'est...
FORTRAN.
Il y a deux raisons :
les Numerical Recipes
et le parallélisme.
Alexandre nous raconte qu'il dispose d'un écran ultra-large,
ce qui lui permet d'éditer des textes en 300 colonnes.
Il ne voudrait pas revenir à du 80 colonnes.
Il y a pis que l'édition en 80 colonnes. Il y a
FORTRAN
et COBOL.
Non seulement l'édition se fait en 80 colonnes, mais en plus les colonnes
73 à 80 sont interdites (réservées soit pour le numéro de ligne
soit pour le nom du programme) et les colonnes 1 à 8 sont d'une utilisation
très restreinte : marque de commentaire ou symbole de continuation
(pour les instructions FORTRAN qui ne tiennent pas sur une seule ligne).
En FORTRAN, les commentaires sont marqués par un « C »
ou une étoile en colonne 7, ou peut-être 6, je ne me souviens plus.
Cela me rappelle l'une des rares fois où j'ai eu à programmer
en FORTRAN. J'étais dans un groupe de trois et je m'étais arrangé
pour que ce soit les deux autres qui codent et moi qui commente.
Mes commentaires ressemblaient à :
CONFORMEMENT AU DOCUMENT DE SPECIFICATION, IL
CONVIENT DE NOTER QUE LA VARIABLE NITER EST UN
COMPTEUR D'ITERATIONS,
CE QUI PERMET D'INTERROMPRE LE PROGRAMME EN
CAS DE BOUCLAGE INFINI ET INTEMPESTIF
Jérôme a évoqué un langage encore pire que FORTRAN,
RPG.
J'ai côtoyé des programmeurs RPG (heureusement, ma tâche
à l'époque consistait à écrire des spécifications, pas à
les implémenter). J'ai donc découvert que
non seulement RPG est un langage en 80 colonnes,
mais en plus, l'analyse lexicale s'effectue
en découpant la ligne de code en fonction du
numéro de colonne. Je reprends l'exemple des 99 bières :
FSCREEN O F 80 WORKSTN
C MOVE 100 X 30
C X DOWGE0
C EXCPT
C SUB 1 X
C END
C SETON LR
OSCREEN E
Si vous décalez d'une colonne dans un sens ou l'autre, comme
ceci :
FSCREEN O F 80 WORKSTN
C MOVE 100 X 30
C X DOWGE0
C EXCPT
C SUB 1 X
C END
C SETON LR
OSCREEN E
vous obtenez des erreurs de compilation !
Il paraît que l'Inde délocalise en France !
La raison en est que l'échelle des salaires pour
un programmeur en France est plutôt réduite par
rapport aux autres nations. On peut trouver, paraît-il,
aux États-Unis un programmeur avec un salaire
annuel d'un million de dollars, sans que ce programmeur
ait une once de management à faire.
Mais on ne verra jamais cela en France pour un
pur programmeur. Par conséquent, un très bon
programmeur français est très peu cher par rapport
aux très bons programmeurs des autres pays.
[ Il reste à savoir si nos très bons programmeurs
sont compétitifs aves les Indiens du même niveau.
En Inde, les salaires partent de très bas, donc même
avec une échelle de salaire étendue, le sommet de
cette échelle n'est peut-être pas si élevé qu'on
peut le penser. ]
Certains participants lisent
Les Échos.
Depuis un certain temps, disons depuis le mois
de mai, la lecture des Échos surprend souvent
les habitués. Alors qu'ils étaient habitués
à une orientation éditoriale de droite,
voilà qu'ils lisent maintenant des
articles qui critiquent le président,
qui expliquent qu'il y a trop d'inégalités
en France, et ainsi de suite.
On croirait presque la ligne éditoriale
de l'Humanité.
Il a été question de
Beaumarchais,
l'inventeur du droit d'auteur. Curieusement, il a
également critiqué les héritiers de ces auteurs,
qui n'ont eu que la peine de naître.
[ En fait, je pense qu'il y a une confusion
avec une citation du
Mariage de Figaro,
où Beaumarchais critique le caractère héréditaire
de la noblesse.
]
Éric et moi avons discuté du
dernier roman
de Terry Pratchett,
Making Money.
Le personnage principal est le même que dans
Going Postal.
Dans ce premier livre, il est question de façon détournée du monde
du logiciel tel que nous le connaissons. Éric a noté
entre autres un discours style costard-cravate et start-up.
Moi, j'ai remarqué que les opposants, ceux qui cherchent
à combattre le système mercantile des communications,
ont pour nom
The Smoking Gnu.
David et Julien ont parlé de
Cryptonomicon
et de Quicksilver,
deux romans de
Neal Stephenson.
Dans Cryptonomicon, il y a quatre pages sur l'art et la manière
de manger des céréales au petit-déjeuner.
Julien a nous relate une discussion récente avec une personne dont la profession
concerne l'écologie. D'après cette personne, le meilleur
moyen pour lutter contre certaines pollutions, c'est
de créer des marais. Par exemple, les marais retiennent
les métaux lourds, ce qui purifie un peu l'eau courante.
L'inconvénient, c'est que les marais sont une source
inépuisable de moustiques et les humains préfèrent
vivre avec une pollution qu'ils ne voient pas plutôt
qu'avec des moustiques qu'ils voient, entendent et sentent
(au sens tactile, pas olfactif).