Un escargot à Manhattan

La Saga Haruhi Suzumiya

Aujourd’hui, 8 octobre, c’est l’anniversaire de Haruhi Suzumiya, un personnage de manga à l’origine d’une des plus grandes franchises de ces dix dernières années.

Si vous n’avez jamais regardé, je vous conseille vivement de le faire. Mais je vais vous raconter comment j’ai été entraîné par ce soft power japonais (pas si soft, en fait).

2008

C’était il y a 8 ans. En juillet 2008.

À Japan Expo, je croise une fille déguisée en un personnage de manga dont je ne me rappelais plus le nom (Haruhi Suzumiya).

— Il est super ton cosplay ! Je peux te prendre en photo ?
— Ah oui ! Attends un peu… (Elle s’en va.)

Elle va chercher sa copine, et là, elles prennent cette pose :

J’étais légèrement surpris et intrigué, du coup en rentrant je me suis dépêché de mettre les yeux sur les épisodes de La Mélancolie de Haruhi Suzumiya.

Après avoir vu l’épisode 1, je n’ai pas compris. Ça semblait être un film dans le film, avec un humour absurde.

En fait, c’est parce que les épisodes de la série ne sont pas dans l’ordre chronologique. Le premier qu’on regarde est en fait le onzième et ainsi de suite, en tout :

XI I II VII III IX VIII X XIV IV XIII XII V VI.

La plus longue sous-suite croissante est I II III IV V VI, le fil principal de l’intrigue. Imaginez donc la surprise quand, après avoir vu l’épisode II, on tombe sur le VII, qu’on ne comprendra qu’après avoir vu le VI, qui arrive à la toute fin de la saison. Il est d’ailleurs amusant de revoir la série et de repérer tous les détails d’apparence anodins mais qui en fait sont des clins d’œil à la fin de la série. En ce qui me concerne, je suis fan du concept.

En outre, la série fait référence à de nombreux concepts développés dans plusieurs œuvres de science-fiction, ou bien des concepts philosophiques tels que :

C’est un peu de la science-fiction pour enfants, et l’intrigue est super bien ficelée. (Je continue à penser que le pitch est le meilleur pitch possible pour une histoire.) Ça s’inspire en partie de L’Oiseau bleu de Maeterlinck, qui est une autre illustration de la citation de Robert Louis Stevenson : « I travel not to go anywhere, but to go. I travel for travel’s sake. The great affair is to move. »

D’ailleurs, une citation de l’héroïne :

Il ne t’arrivera rien d’amusant si tu ne restes à rien faire.

C’était un truc tout bête, comme ça. Mais à l’époque ça m’a rendu fou. C’est sûrement en partie responsable de la quantité déraisonnable de projets divers que je me suis efforcé d’accomplir ces dernières années.

Fraîchement entré dans ma nouvelle école, j’ai tenté de contaminer un maximum de gens à regarder la série. Une méthode qui marchait bien :

— Non mais regarde JUSTE 3 épisodes ce soir !
— OK.
(Le lendemain.)
— Je te DÉTESTE j’ai dû FINIR LA SÉRIE je me suis couché à MINUIT [etc.]
— De rien.

J’ai rejoint le forum suzumiya.haruhi.fr, qui deviendra une association : la Brigade SOS Francophone1.

2009

Un jour, sur le forum de la Brigade, on apprend qu’une rediffusion est programmée, au Japon, dans l’ordre chronologique.

Certains prophètes du forum, qui ont lu les romans sur lesquels est basée la série, présagent qu’il y aura peut-être une saison 2 basée sur des morceaux d’autres romans, intercalée dans la rediffusion de la saison 1.

Je ne sais pas comment les prophètes ont fait, mais effectivement, le 22 avril 2009, au lieu de suivre le fil de la saison 1, un épisode inédit a été projeté. Et là, je ne vais pas faire un dessin parce que ça commence à devenir compliqué.

C’est ainsi que pendant la diffusion, à raison d’un épisode par semaine2, les prophètes se sont amusés à prédire de quel roman proviendrait l’épisode suivant3.

Dans mon école, on a créé un club anime, pour faire découvrir des séries animées japonaises, notamment celle-ci. À l’époque, l’école était suffisamment cool pour qu’on puisse demander :

— Je peux avoir l’amphi B s’il vous plaît ?
— C’est pour quoi faire ?
— Projeter des séries animées japonaises.
— OK.

(Ça marchait aussi pour les anniversaires.) On a donc placardé cette affiche partout :

Quelques réactions :

— Mais vous êtes débiles ! Les gens vont rien comprendre.
— C’est le but.

Et on a quand même rempli l’amphi.

2010

Aux conventions comme Japan Expo ou Epitanime, l’association vendait des goodies, notamment des fanzines parfois faits en LaTeX4 :

La Brigade SOS est ainsi parvenue à récolter quelques milliers d’euros, lui permettant d’inviter l’illustratrice originale de Haruhi Suzumiya Noizi Ito en France, à Epitanime 2010 ! Et ça les gars, c’est bien joué.

Photo par Rin-kun, sur Wikipédia.

2011

En faisant un peu de veille, j’ai découvert que le festival Scotland Loves Animation projetterait à Édimbourg en octobre le film en avant-première européenne : La Disparition de Haruhi Suzumiya.

Du coup, la Brigade y est allée ! À l’époque, il existait pour des saisons comme celle-ci des billets Ryanair à 7 € aller, 12 € retour (la folie). Du coup, on mangeait des pancakes, on allait voir un film, on revenait à l’auberge manger des pancakes, on retournait voir un film, etc. pendant une semaine.

Et le film était à la hauteur de nos espérances. Un bijou d’animation de 2 h 42 et 53 secondes que je vous conseille vivement, même si vous n’avez pas vu la saison 2 en entier (la saison 1 + l’épisode Bamboo Leaf Rhapsody suffisent). Voici un extrait5 :

2013

Résigné à ce que les tomes restants de la série ne soient jamais adaptés, je me suis attaqué à la lecture des romans en anglais. Si vous avez vu la série, je vous conseille vivement la lecture de « Snow Mountain Syndrome », le dernier chapitre du tome 5.

D’ailleurs je viens de voir qu’il existe des fans tellement désespérés qu’ils l’ont… animé eux-mêmes :D

2016

J’ai enfin fini les romans. Et oui, je suis suffisamment taré pour avoir enregistré ma progression de lecture sur un repo GitHub, pendant 3 ans6.

Au final, ceux qui font vraiment avancer l’intrigue sont les tomes 1, 4, 7 et 10.

Et voici un précieux conseil d’écriture de l’auteur dans les dernières pages, qui s’excuse d’avoir mis 4 ans entre le neuvième et le dixième tome :

Il semblerait qu’après être arrivé à saturation d’avoir ma capacité d’écrire poussée dans ses derniers retranchements, j’ai immédiatement eu l’idée pour La Disparition de Haruhi Suzumiya, et j’ai écrit les séries d’histoires alors même qu’elles me venaient à l’esprit. Ainsi, je me dis que ma pensée selon laquelle « Si tu crains de ne pas y arriver, écris juste tout » était plutôt bonne.

En somme, suivez cet algorithme

  • Regardez la saison 1 de La Mélancolie de Haruhi Suzumiya
  • Peut-être pas toute la saison 2, mais au moins « Bamboo Leaf Rhapsody »
  • Délectez-vous du film La Disparition de Haruhi Suzumiya
  • Lisez « Snow Mountain Syndrome », et les tomes congrus à 1 modulo 3.

Partition : Bouken Desho Desho?, opening de la saison 1.


  1. Hélas récemment dissoute ! Mais nos cœurs en ont été grandis.

  2. Que l’on pouvait suivre en direct en France car l’épisode passait à 25 h au Japon, soit 18 h en France.

  3. Bon, ceux qui ont vu la saison 2 savent que les prophètes – tout prophètes fussent-ils – ne pouvaient pas imaginer que la saison 2 se déroulerait comme elle s’est déroulée.

  4. Si, si.

  5. Ah oui, j’ai oublié de dire que la BO du film était principalement composée de gymnopédies d’Erik Satie.

  6. Notez la longue coupure, qui correspond aux dernières années de thèse.

Clément Beauseigneur, Meilleur Dev de France 2016

Ce lundi 14 mars s’est tenue la 4e édition du concours du Meilleur Dev de France, au Théâtre de Paris. Celle-ci a regroupé 600 développeurs. 10 000 € étaient à la clé, et les 25 premiers repartaient avec un voyage à Amsterdam offert par le parrain, Jean-Baptiste Descroix-Vernier.

Le concours est organisé conjointement par Ametix et la société Isograd, qui fournit la plateforme, sur laquelle j’ai rédigé les sujets algorithmiques1.

Pendant que les développeurs développaient, des stands présentaient leurs produits, BFM TV interviewait Henri Seydoux, Samantha Jerusalmy de Girls in Tech Paris ou bien Stéphane Boukris, l’organisateur du concours. Beaucoup de personnalités étaient présentes, telles qu’Axelle Lemaire, Guy Mamou-Mani ou même… Jean-Claude Van Damme ??!!

Mais revenons sur le déroulement de ce concours, du point de vue des coulisses du théâtre :)

Déroulement du concours

Deux sessions : 45 minutes

Les sessions comportaient 3 problèmes algorithmiques de difficulté croissante.

Les 20 meilleurs ont été sélectionnés à l’issue de chaque session. À noter que dans la 2e session, seule une personne a résolu le 3e exercice. Son commentaire : « Trop facile » Merci mec. Ça fait plaisir de lire ça depuis le back-office. Pendant ce temps, Clément Beauseigneur s’est qualifié in extremis, c’est le dernier des 20 développeurs appelés à rejoindre la finale :

J’ai mis 15 minutes pour me connecter, du coup j’ai eu 5 minutes pour faire les deux premiers exercices, puis je n’ai pas effectué le troisième.

Finale : 40 minutes

40 minutes pour résoudre deux problèmes difficiles, c’est pas facile… Le premier était difficile à développer, mais facile à reconnaître pour quelqu’un d’expérimenté. Or, les développeurs avaient accès à Internet, et pouvaient utiliser et adapter du code.

En tout cas, au bout de seulement 5 minutes, un développeur a déjà résolu le premier exercice. Zut, il ne reste donc plus que deux issues. Soit personne ne résoudra le 2e exercice, et on tient notre gagnant, soit quelqu’un le résoudra et sera sacré Meilleur Dev de France 2016.

L’ultime problème algorithmique

Le tout dernier problème était très difficile, voire impossible à résoudre étant donné le faible temps imparti. Ce problème, le voici :

On vous donne un réseau de 100000 ordinateurs tous reliés entre eux sans cycle et on vous demande de choisir à quel ordinateur donner Internet de façon qu’en cas de coupure d’un câble, un minimum d’ordinateurs perdent leur connexion Internet. Combien d’ordinateurs seront privés d’Internet au pire ?

Par exemple, ici donner Internet à l’ordinateur 3 garantit qu’au pire, c’est-à-dire en cas de coupure du câble entre 2 et 3, seulement 3 ordinateurs seront privés d’Internet.

Vous voyez ? Même si vous ne vous y connaissez pas en algorithmique, vous avez compris ce qui est demandé. La plupart de ces problèmes s’énoncent clairement, mais les algorithmes permettant de les résoudre sont parfois difficiles à voir, et demandent beaucoup de rigueur pour être implémentés sans bug.

Ça fait partie du bagage d’un développeur, qui se demande sans cesse comment accomplir une certaine tâche efficacement, comme mettre en relation un chauffeur et un client par exemple.

Dénouement

Au bout d’un moment, Marc dit : « Ça y est. Clément Beauseigneur l’a résolu. » Je crie de joie. Je préférais tellement cette issue au fait que quelqu’un remporte le concours en ayant codé en 5 minutes un exercice facile à reconnaître.

On nous laisse nous exprimer, j’en profite pour faire éhontément de la pub pour ce livre de Christoph Dürr et moi sorti tout récemment, qui recense 128 problèmes algorithmiques résolus :

Après un discours de Jean-Baptiste Descroix-Vernier en trois messages sur :

  1. je vous admire, vous développeurs ;
  2. derrière un système d’information, il y a un développeur, derrière un système de paiement, il y a un développeur, derrière une élection, il y a un développeur ;
  3. à présent que vous avez les moyens d’accomplir des choses immenses, choisissez bien ce que vous voulez en faire.

Puis, on a annoncé le gagnant : Clément Beauseigneur ! Il a 21 ans, est en deuxième année à l’ENS Cachan, donc n’est pas encore employé. Jean-Baptiste Descroix-Vernier le plaisante :

Ah non mais en cet instant précis, tu viens d’avoir un boulot !

Comme Twitter l’a remarqué, Clément n’en est pas à sa première victoire. Il aime la compétition, fait partie des organisateurs du concours Prologin et aimerait dénicher un stage de robotique via les contacts de son professeur, Jean-Paul Laumond.

En tout cas, laissons-le se délecter de cette gloire bien méritée ! Et si vous souhaitez en savoir plus sur cette passionnante discipline qu’est la résolution de problèmes algorithmiques, essayez tryalgo.org !


  1. Je donne un exemple plus bas, continuez de lire !

Software Carpentry, cours de programmation pour chercheurs

Je fais ma thèse à l’université Paris-Saclay. Parmi autres avantages, cela me permet d’être régulièrement spammé. En l’occurrence, j’ai pu découvrir l’existence du « Center for Data Science à Paris-Saclay : un projet pour encourager les collaborations et les synergies interdisciplinaires », organisant des événements tels que :

Software Carpentry

C’est une organisation à but non lucratif qui vise à donner un bagage minimal de cours de programmation pour les chercheurs en science, ingénierie, médicine, etc. Toutes leurs leçons sont sur GitHub, en Creative Commons, ils ont 450 instructeurs à travers le monde, et je pense que je vais les rejoindre.

L’un des fondateurs est Greg Wilson, l’auteur de Beautiful Code et d’une super vidéo sur le développement d’applications. Je l’avais rencontré en 2014 (cf. « Learning at Scale »), il m’a proposé d’écrire un chapitre de son livre donc j’ai codé un convertisseur de slides de Markdown vers PostScript en moins de 500 lignes (c’était le principe du livre), à partir de l’algorithme de Knuth et Plass : « Breaking Paragraphs into Lines », 1981.

À l’époque, il m’avait mentionné qu’il écrivait des leçons de programmation en Markdown qu’il convertissait avec pandoc avec d’autres instructeurs, et (si je me souviens bien), il avait plaisanté sur le fait que je pouvais également former des gens qui à leur tour formeraient d’autres personnes à l’algorithmique2.

Et là, en consultant la liste des leçons qu’ils proposent, on voit de tout :

Ateliers Python à l’ENS Cachan

L’année dernière, avec une bande de potes tirés des départements éco, méca, math, bio, socio et phy, on a fait un barbecue organisé une initiation à la programmation en Python à l’ENS Cachan. J’avais un financement de Google, avec leur programme Google Student Ambassador (principe : il suffisait de remplir un formulaire pour remporter un voyage de 3 jours tous frais payés à Dublin, plus des sous pour organiser des événements).

Au départ on était idéalistes, donc le principe était de trouver toute l’algorithmique enseignée dans chacun des départements :

  • Pauline faisait de l’alignement de séquences de bases azotées en biologie.
  • Fabrice faisait du recuit simulé en physique statistique ;
  • Margot faisait des colonies de fourmis et des simulations de marché en éco-gestion ;
  • Jordan faisait de l’optimisation d’assemblages par colonies de fourmis en génie mécanique ;

Mais finalement, on a simplement fait une introduction à Python, le samedi 16 mai 2015. Les gens étaient contents, voici un compte rendu :)

Mais ce genre d’initiative n’a d’intérêt que si c’est régulier, et que des gens sont prêts à devenir formateurs à leur tour… Tiens, c’est justement le principe de Software Carpentry.

Club Algo de l’ENS Cachan

En parallèle, il se trouve qu’on est plusieurs à être férus de résolution de problèmes algorithmiques à l’ENS Cachan. Or, il y a beaucoup de compétitions de programmation. Genre, vraiment beaucoup.

Donc, on s’est vus (presque) tous les jeudis. Il y avait deux groupes :

Préparer ces séances nous a permis avec Christoph Dürr d’avoir plein de matériau pour notre livre : « Programmation efficace : les 128 algorithmes qu’il faut avoir compris et codés en Python dans sa vie » qui sort le 1er mars 20163.

À présent qu’il y a moins de compétitions à l’horizon (si ce n’est le Google Code Jam qui commence le 8 mars), voici nos projets en chantier :

1. Devenir un vrai cours à l’ENS Cachan ?

Ce serait bien, car on ne maîtrise un algorithme qu’une fois qu’on l’a codé sans bug (il est super facile de rater un algorithme de recherche dichotomique ou de sac à dos, par exemple).

2. Faire un site collaboratif pour tester ses implémentations d’algorithmes

Un peu comme France-ioi, mais où les codeurs peuvent ajouter des jeux de tests, et où l’on peut consulter les implémentations des autres, et imprimer des notebooks PDF (c’est un détail, mais c’est utile lorsqu’on participe à certains concours).

Ce serait utile, car de plus en plus de professeurs enseignant l’informatique se demandent comment mettre en ligne un correcteur automatique des codes des élèves (aussi appelé juge en ligne). C’est compliqué car il faut permettre l’exécution de ces codes côté serveur, mais isoler l’exécution pour qu’un petit malin ne puisse pas casser le serveur à coups d’appels systèmes.

Il se trouve que Michel Blockelet a déjà codé un juge en ligne pour France-ioi, mais je pense qu’on peut encore en démocratiser l’utilisation.

Olivier Marty a commencé ce chantier, que nous appelons pour l’instant Algopédia.

3. Démystifier les algorithmes que l’on croise dans la vie de tous les jours

J’aimerais qu’on écrive des articles sur un code minimal qui résout un problème de la vie de tous les jours.

Tenez, par exemple, un problème banal comme le rendu de monnaie : « Comment déterminer un nombre minimal de pièces réalisant un montant ». On peut le creuser arbitrairement profond pour avoir plein de choses à dire :

  • Si j’ai une quantité infinie de pièces d’un centime, je peux forcément rendre la monnaie. (Non, sans déconner.)
  • Si j’ai un stock illimité d’euros et que je rends tant que c’est possible la pièce de plus grande valeur, je vais rendre la monnaie avec un nombre minimal de pièces. (Ah bon ?)
  • Mais ça, ça marche avec les euros, mais pas avec un système monétaire quelconque. (AH BON ? — Ben oui, regarde, essaie de rendre 6 avec un système monétaire ou tu n’as que des pièces de 4 3 1 ; tu vas rendre 4 + 1 + 1 alors qu’on peut rendre seulement 3 + 3.)
  • Et c’est beaucoup plus facile pour la machine de te dire si un système monétaire a des cas pénibles comme celui que je viens de citer, plutôt que de rendre la monnaie avec un nombre minimal de pièces. (ATTENDS WUT)

Ainsi, ces idées d’articles seraient :

  • comment fonctionne un correcteur orthographique
  • comment fonctionne la machine qui rend la monnaie
  • comment fonctionne Google Maps (Dijkstra)
  • comment fonctionne le pot de peinture dans Paint
  • comment résoudre Sudoku (et là on explique que c’est comme le pot de peinture dans Paint et les gens seront @_@)
  • comment tracer une forme sans lever le crayon (chemin eulérien)
  • comment fonctionne un optimiseur de billets d’avion (Bellman-Ford)
  • comment planifier une to-do list (graphe de dépendances, tri topologique)
  • comment devrait fonctionner Meetic ou Admission Post-Bac (mariages stables, prix Nobel d’Économie pour Shapley)
  • comment fonctionne la recherche dans un texte

Clémence Réda a commencé à rédiger deux de ces articles. Coming soon!

En anglais, on peut citer les incroyables blogs :

Software Carpentry à l’ENS Cachan ?

Bref. Mettez tout ça ensemble, et il y aura bientôt un workshop Software Carpentry à l’ENS Cachan :) Si vous êtes volontaires pour aider, contactez-moi !


  1. Unité de neurosciences, information et complexité.

  2. Avant même de consulter cette footnote, vous avez compris qu’elle contiendrait le mot : « méta ».

  3. HÉÉÉ, C’EST MARDI !!!

Générateurs de pages statiques

Parce que oui, il y a autre chose dans la vie que WordPress.

Le saviez-vous ? Il est possible d’avoir un blog minimaliste (donc pas WordPress) sans payer aucun hébergement, sans pub, ni besoin d’installer des choses sur son ordinateur. Pour le savoir, sautez directement à « Jekyll Now » dans ce post ou cliquez ici si vous êtes pressé.

Update 18/04. L’organisation Seed Development propose un éditeur de pages GitHub : Prose.IO.

Pourquoi WordPress m’a gonflé

  1. J’en avais marre d’avoir des pages qui chargeaient lentement.
  2. J’avais tout le temps des mises à jour de sécurité à faire.
  3. J’avais énormément de spam dans les commentaires, ou alors il fallait que j’installe le plug-in Akismet.

Octopress 2.0

Autant commencer par le moteur qui propulse ce blog. J’écris des posts sous la forme suivante, en Markdown :

---
title: Générateurs de pages statiques
authors:
  - Jill-Jênn Vie
layout: post
published: true
permalink: /2016/02/26/generateurs-de-pages-statiques/
categories:
  - Code
  - Méta
---

Parce que **oui**, il y a autre chose dans la vie que WordPress.

## Pourquoi WordPress m'a gonflé

1. J'en avais marre d'avoir des pages qui chargeaient lentement.
1. J'avais tout le temps des mises à jour de sécurité à faire.
1. J'avais énormément de spam dans les commentaires, ou alors il fallait que j'installe le plug-in Akismet.

## Octopress 2.0

Autant commencer par le moteur qui propulse ce blog. J'écris des posts sous la forme suivante :

Et en tapant rake generate, tout le HTML est généré à partir de mes posts écrits en Markdown, même les regroupements de posts par catégorie. Je peux donc envoyer tout mon blog sur un serveur par FTP ou SSH.

L’avantage : c’est plus clean, je n’ai pas besoin d’écrire du PHP, et les pages s’affichent rapidement. Quelque chose que j’aime beaucoup avec Octopress, c’est son plug-in de footnotes1.

Le code ayant servi à obtenir ce résultat :

Quelque chose que j'aime beaucoup avec Octopress, c'est son plug-in de footnotes[^1].

 [^1]: Reconnaissez que c'est mignon.    

Jekyll

Octopress s’appuie sur Jekyll, un générateur de pages statiques écrit en Ruby.

Les gens derrière cet outil bossent pour la plupart à GitHub, la plateforme closed source de projets open source.

Jekyll Now

Un fan de Jekyll a rédigé un tutorial pour que quelqu’un de non technique puisse tester le système de blogs Jekyll. Je vous invite à y jeter un œil : Jekyll Now.

Poole

En fait, ce qui est fantastique, c’est que la communauté derrière Jekyll est si grande qu’il y a plein de choses qui se sont construites par dessus.

Mark Otto (@mdo), le créateur de Bootstrap, a rassemblé une panoplie de fichiers CSS et de templates pour démarrer un projet Jekyll. Ça s’appelle Poole.

Deux exemples de blogs créés à partir de Poole :

Octopress 3.0

L’auteur d’Octopress a voulu à nouveau réécrire une grosse partie de son code, mais la nouvelle version est supposée sortir bientôt… depuis 1 an, en fait.

En tout cas, sa version bêta a un thème sympa que j’ai utilisé pour un blog de voyage :

Pelican

Pelican, qui se veut être une2 anagramme de calepin, est un générateur de pages statiques écrit en Python.

Je me disais que Pelican serait mieux que Jekyll car plus léger et en Python. Mais ce que j’ai vu dans certains templates et dans le fonctionnement m’a semblé un peu sale (plein de variables globales, peu d’organisation).

Fun fact: l’auteur de Pelican utilise Jekyll pour son propre blog xD

Pandoc

pandoc est un couteau suisse développé en Haskell par un prof de philosophie de l’université de Berkeley (oui oui) qui convertit tout vers tout, en particulier Markdown vers HTML, LaTeX, slides Beamer ou reveal.js, et même en .docx.

Vous pouvez essayer pandoc en ligne ou via ce repo GitHub. Ça me semble un peu overkill pour créer un blog (en plus, il faut appliquer pandoc à toutes les pages), mais pourquoi pas. En tout cas, j’écrirai sûrement ma thèse avec, en Markdown, comme ces gens fous :

Sphinx

Là, on est encore dans le détournement : utiliser un outil de documentation (Sphinx) pour faire des pages statiques. C’est ce que je fais actuellement pour jill-jenn.net et je suis plutôt satisfait, car ça m’a permis d’organiser tout mon contenu sous la forme d’un arbre, et j’ai un module de recherche en JavaScript intégré (en bas de la colonne de gauche).

Pour les commentaires, si on ne souhaite pas utiliser Disqus (car un peu intrusif), on peut utiliser Isso (même si seulement sous Python 2.7 et un peu embêtant à configurer).

Lektor

J’allais oublier le plus récent et important. Un générateur de pages statiques :

  • facile à installer ;
  • sans besoin d’utiliser la ligne de commande ;
  • modifiable soit à partir des fichiers, soit à partir d’un panneau admin (!) ;
  • et ne requérant pas de compte GitHub.

Ce qui est bien, c’est que je peux l’installer à quelqu’un et cette personne peut devenir autonome.

Ça a été développé par Armin Ronacher, le jeune développeur archiprolifique à l’origine de Jinja, Flask, Sphinx, etc..

Il a d’ailleurs un post où il explique pourquoi il a créé un n-ième générateur de pages statiques :

Moralité

Si vous êtes tech, installez Jekyll, éventuellement via le thème Lanyon de Poole et si vous êtes en train de coder un site pour votre grand-mère, installez-lui Lektor.

Zut, j’ai pas fini

Peut-être qu’un jour, j’aurai l’occasion d’essayer :


  1. Reconnaissez que c’est mignon.

  2. Anagramme est un mot féminin, sans accent circonflexe ni trait d’union.

Deep Learning au Collège de France

Ou pourquoi vous auriez dû être au Collège de France jeudi 4/2 au soir. Par David Lambert et JJ Vie.

Update 13/02. Rassurez-vous, la vidéo est déjà disponible sur le site du Collège de France !

Update 18/04. Google a fait une super page pour introduire à leur outil de deep learning, TensorFlow ! http://playground.tensorflow.org

Préambule

NLDR/TLDR. Le deep learning est une méthode d’apprentissage automatique. Vous en avez peut-être déjà entendu parler sous le nom de réseaux de neurones artificiels. En fait, les modèles existent depuis les années 80, mais ont réellement explosé en 2012, voir plus bas. Yann LeCun est un des pionniers de ce domaine, notamment pour avoir créé les réseaux convolutionnels (ConvNets), décrits plus bas.

S’inspirer du cerveau est-il légitime ?

En extrapolant à partir de l’état actuel de l’électronique, on peut supposer que les processeurs seront aussi performants qu’un cerveau humain en 2045 (si la loi de Moore ne se heurte pas entre-temps aux limites de la miniaturisation).

Mais en recherche, la vraie question n’est pas simplement d’égaler sa puissance de calcul, mais de comprendre comment marche le cerveau. Il s’agit de saisir l’essence de son fonctionnement, plutôt que de chercher à le reproduire dans ses moindres détails. Les avions n’ont pas de plumes, et n’en ont pas besoin ; l’avion III de Clément Ader, trop proche physiquement de la chauve-souris, n’était pas une franche réussite.

Trois types d’apprentissage automatique

Apprentissage par renforcement

Méthode façon « la carotte et le bâton » ; on pénalise l’algorithme s’il aboutit à une mauvaise solution, on le récompense s’il fait les bons choix.

C’est un processus lent, mais dans les jeux vidéo, c’est relativement facile, car on peut simuler des parties très vite (NDLR, cf. les travaux de Deep Mind sur les jeux Atari en février 2015 ou bien AlphaGo bat un champion européen le 27 janvier 2016, publié dans Nature).

Apprentissage supervisé

On imagine ici qu’on a accès à des étiquettes sur les données qu’on considère (« ceci est une voiture », « ceci est une blonde aux yeux bleus »).

La classification d’objets est donc un bon exemple. Dans tout ce qui suit, on va parler d’apprentissage supervisé, domaine de la recherche en perception artificielle, sous-domaine de la recherche en intelligence artificielle.

Apprentissage non supervisé

NDLR. Là, on suppose qu’on n’a pas accès à des étiquettes. Ainsi, les approches usuelles consistent à regrouper les données en clusters, ou tenter de visualiser les données selon certains angles (analyse en composantes principales). Par exemple, en recommandation de films, on essaie de rapprocher des utilisateurs d’autres en fonction de ce qu’ils ont aimé, pour essayer de visualiser certains profils-types.

Pour en savoir plus, l’excellent tutoriel scikit-learn (en anglais) : An introduction to machine learning with scikit-learn.

Le perceptron (1957)

Principe : on cherche à distinguer deux catégories d’images, par exemple distinguer les A des B, en les soumettant à la machine. Chaque image est composée de pixels noirs ou blancs (1 ou 0) et on souhaite qu’à la sortie on ait :

  • une valeur positive si l’image est un A ;
  • une valeur négative si l’image est un B.

En fait, chaque pixel participe à la valeur de sortie de la machine selon un certain poids, et la somme pondérée de toutes les entrées donne une valeur globale qui indique si la machine « pense » que l’image est un A ou un B. Si la machine s’est trompée, les poids sont corrigés (on pénalise les poids des pixels qui l’ont induite en erreur) ; la machine apprend ainsi par tatônnements (trial and error), on appelle cela la phase d’entraînement. On itère le processus jusqu’à ce que la fonction d’erreur du système soit convenable.

Les poids relatifs des sorties de chaque cellule sont modifiés comme seraient modifiées les connexions entre neurones dans le cerveau, en fonction de la conformité du résultat.

Un perceptron efficace possèdera la propriété de généralisation : identifier correctement une image qu’il n’a alors jamais vue !

NDLR. Si la reconnaissance de chiffres vous intéresse, voici un code Python tiré d’un tutoriel de scikit-learn par Gaël Varoquaux (qui utilise une SVM plutôt qu’un perceptron).

Deep learning

L’idée du deep learning, c’est de brancher des perceptrons entre eux, regroupés en couches, de façon hiérarchique. Et d’entraîner toutes les couches en même temps.

Chaque couche est responsable d’un certain niveau d’abstraction :

  • un module de niveau 1 détecte l’état d’un pixel (noir ou blanc, présence ou absence) ;
  • un module de niveau 2 s’occupe des conjonctions de pixel et détecte ainsi les contours ;
  • un module de niveau 3 détecte les motifs dans les contours, et ainsi de suite.

Tout ça, ça marche parce que le monde est compositionnel – je ne sais pas si c’est un mot français mais je l’utilise. Un ami dit plutôt, de manière amusante : « Soit le monde est compositionnel, soit Dieu existe. »

Cette hiérarchie des caractéristiques (pixel, contour, motif de contours) on la retrouve dans d’autres objets d’étude des réseaux de neurones, comme les langues par exemple (caractère → phonème → syllabe → mot → phrase → livre).

Réseaux convolutionnels

Je les appelle ConvNets pour éviter qu’on les appelle CNN (convolutional neural networks)…

Lecture automatique de chèques (1996)

Yann LeCun a développé un modèle sur le même principe, qui permet entre autres de :

  • reconnaître un chiffre à n’importe quel endroit de l’image (invariant par translation, NDLR) ;
  • faire le tri entre motif et fond de l’image.

Première application : une machine de lecture automatique de chèques (Bell Labs), déployée aux États-Unis en 1996. 20 % de tous les chèques américains sont passés par cette machine, qui rejetait 50 % du tas mais ne faisait qu’1 % d’erreur, ce qui est convenable en pratique.

Le dataset ImageNet (2012)

Mais dans la communauté scientifique, personne ne s’est intéressé aux réseaux convolutionnels avant 2012, lorsque le dataset ImageNet (1,2 millions d’images, classées dans un millier de catégories) est sorti. Là, en 18 mois, il y a eu un revirement mondial, qui a eu pour conséquence la « redécouverte » de certains concepts par des nouveaux venus, ce qui brouille la visibilité des travaux des équipes précédentes :

Détection de piétons ou d’obstacles (scene parsing / labeling)

Les ConvNets ont été appliqués à l’interprétation d’image par étiquetage de chaque pixel en fonction de la partie de l’image à laquelle il appartient (façade, chaussée, passant, voiture). Chaque sortie tient compte du contexte du pixel d’entrée (NDLR, par analogie avec un puzzle, la machine a la possibilité de distinguer le bleu du ciel et le bleu du reflet du ciel dans le lac si elle détecte une rive).

Cela a fait progresser les travaux en vision robotique à longue distance, cf. cette vidéo (DARPA LAGR/NYU/NetSCALE, 2005-2008), voir à 4:08 :

La première fois que mon étudiant s’est jeté devant le robot, j’ai failli avoir une attaque. Il faut vraiment avoir confiance en son code pour se jeter devant un robot de 120 kilos qui peut vous casser la jambe s’il ne s’arrête pas à temps. D’ailleurs maintenant quand des étudiants veulent travailler avec moi, d’abord je leur fais écrire un peu de code du robot, je les fais sauter devant ; s’ils survivent, je les prends.

Reconnaissance vocale

Avant, les ConvNets étaient principalement utilisés pour la reconnaissance d’images, mais ça s’est propagé à d’autres domaines de l’intelligence artificielle.

Le service de reconnaissance vocale OK Google utilise des ConvNets. Des travaux récents sur les ConvNets polyglottes, entraînés à la reconnaissance vocale dans plusieurs langues, montrent que ceux-ci sont ensuite plus performants dans chacune des langues individuelles (NDLR, ça fait penser au fait que certains conseillent d’apprendre l’espéranto pour apprendre plus vite les autres langages ; il y a des études, mais je ne sais plus où elles sont).

Légendes automatiques

À partir d’une photo, un algorithme peut en décrire le contenu.

On développe [ces systèmes] chez Facebook, en particulier pour aider les malvoyants à avoir une idée de ce qui se passe dans leur flux d’informations.

À noter que la fonctionnalité de reconnaissance des visages de Facebook est désactivée en Europe.

Modèles génératifs

On peut aussi prendre le réseau à l’envers et de demander à afficher quelque chose d’inédit à partir de nombres aléatoires. Par exemple :

  • certains génèrent des phrases ;
  • d’autres des photos de chambres ;
  • d’autres des personnages de mangas !

Jetez un œil au repo GitHub associé : Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks.

Memory Networks

La plupart des modèles ont un peu une mémoire de poisson rouge (NDLR). Ils fonctionneraient mieux s’ils avaient l’équivalent de l’hippocampe pour le cerveau (NDLR, ou de la RAM pour les ordis), une mémoire partagée. C’est ainsi qu’on a créé le paradigme des Memory Networks.

Ainsi, on pourrait attendre d’un algorithme qu’il soit capable de répondre à la question : « Brian est dans la cuisine. Brian prend du lait. Brian va dans la salle de bains. Où est le lait ? »

(NDLR : je vous laisse imaginer ce qu’un tel outil est capable de faire si on lui donne accès aux données de Facebook.)

Traitement des langages naturels (par ex., word2vec)

Effet secondaire de l’entraînement du système : celui-ci fait spontanément émerger des structures à partir des données qu’il a ingurgitées.

Du coup, on peut demander à la machine : « Qu’est-ce qui est à l’Allemagne ce que Paris est à la France ? » et elle est capable de répondre « Berlin ».

Autant faire la même chose avec des photos de visages : on peut demander à l’ordinateur de générer une photo de femme avec des lunettes en effectuant l’opération : « homme avec lunettes – homme sans lunettes + femme sans lunettes ».

Conclusion

Que ne sait-on pas faire ?

Les quatre chaînons manquants de l’intelligence artificielle :

  • une compréhension théorique de l’apprentissage profond : ça marche, mais on ne sait pas pourquoi ça marche aussi bien ;
  • une intégration de ces méthodes d’analyse des représentations (apprentissage profond) aux quatre autres composantes de l’intelligence, qui seraient le raisonnement, l’attention, la planification et la mémoire ;
  • une théorie unifiée de l’apprentissage : un système qui déploierait à la fois des capacités d’apprentissage par renforcement, d’apprentissage supervisé et d’apprentissage non supervisé ;
  • une modélisation efficace de l’apprentissage non supervisé.

Métaphore du gâteau

Actuellement, sur les trois formes d’apprentissage chez les humains :

  • Apprentissage par renforcement : c’est la cerise, c’est facile, on sait faire.
  • Apprentissage supervisé : le glaçage (NDLR, pour lequel le deep learning s’est révélé très efficace).
  • Apprentissage non supervisé : 90 % restants du gâteau, qu’on ne sait pas faire de façon satisfaisante.

L’apprentissage non supervisé pourrait être effectué par un algorithme prédictif dont les résultats seraient pondérés en fonction de la conformité des prévisions avec ce qui s’est produit. C’est l’apprentissage via un modèle prédictif du monde qui nous enseigne le bon sens : quand on lit la phrase « Gérard prend son sac et quitte la pièce », on en déduit que Gérard prend son sac avec sa main, qu’il quitte la pièce par la porte et pas par la fenêtre, ni en volant ni en se téléportant, etc. Pourquoi ? Parce qu’on a appris tout cela au préalable, en observant le monde.

Certains font de la prédiction de frame de film, mais cela ne fonctionne pas très bien, ne serait-ce que parce qu’on ne connaît pas l’état du monde, seulement ce qui est observé à l’écran (NDLR, un T-Rex qui apparaîtrait soudainement dans Jurassic Park).

Et la domination des machines sur l’homme, alors ?

La différence entre l’intelligence humaine et l’intelligence machine est que nous sommes soumis à un ensemble d’instincts, dont la programmation est le résultat du processus d’évolution dont nous sommes le fruit, et que ce sont ces instincts (territorialité, jalousie, …) qui nous font faire n’importe quoi.

Il n’y a aucune raison de construire ces pulsions de base dans les robots : on peut construire des robots qui ne sont pas dangereux.

(NDLR, les algorithmes reflètent déjà aujourd’hui les biais de leurs concepteurs.)

Quelques liens