- Kje,
Bonjour chers agrumes,
Aujourd'hui je viens proposer pour ceux que ça intéresse, moins qu'un projet, un petit script que j'ai fais hier soir en 10 minutes et qui pourrait être utile à d'autre ici. Il s'agit d'une pré-pré-pré-version d'un convertisseur d'IPython notebook vers le markdown de zds.
Si vous n'y connaissez rien à Python, lisez tout de même ça peut vous concerner tout de même car le nom est trompeur.
Qu'est ce qu'un IPython notebook ?
Un peu de contexte : IPython est un terminal interactif1 (shell) visant a remplacer l'invite de commande fournit avec la distribution standard de Python. Il apporte tout un tas de fonctionnalités et de commandes très utile à tel point que je le conseil fortement à tous ceux qui utilise Python.
Un sous projet de IPython est appelé IPython notebook. Difficile à qualifier, il s'agit d'une interface web riche à IPython. Concrètement, il s'agit d'un espace de rédaction mélangeant texte, code, images, formules… Une fois le programme lancé, un mini serveur tourne en local et vous pouvez y accéder par votre navigateur pour créer des documents. La page obtenu est alors divisé en cellule. Chaque cellule va servir de conteneur et peut contenir plusieurs types de données, principalement :
- Du texte formaté en markdown : Une fois validé celui-ci sera transformé en html et affiché. Cela permet donc d'écrire le corps de votre texte. Il est d'ailleurs possible d'insérer des formules au format Latex
- Du code (supposons en Python par exemple) : Une fois validé celui-ci est alors exécuté et le résultat affiché en dessous.
On arrive donc au coté pratique des notebook : il est donc possible dans un même document de mélanger texte, code et résultat et cela sans devoir faire de copier/coller entre votre éditeur de texte, votre éditeur de code et le résultat de la console. Les résultats obtenus sont sauvegardés avec le notebook ce qui permet d'avoir un document autonome et complet. Il est aussi possible de ré-éxécuter chaque cellule code (si vous choisissiez de la modifier ou parce que vous reprenez votre rédaction quelques jours après). Un petit indicateur numérique est alors placé pour précisé l'ordre dans lequel les codes sont exécutés.
En plus du texte qui est produit sur la sortie standard, le notebook est capable d'afficher directement certains
éléments de bibliothèques classique de Python comme les graphique de Matplotlib ou génère des tableaux depuis les
DataFrame
de Pandas. Il est bien sûrs aussi possible d'insérer facilement n'importe quel image, vidéo voir en réalité
tout ce qui est affichage dans un navigateur.
Une fois terminé vous pouvez exporter votre document vers du html, du pdf, etc. On obtient alors un document en lecture seul comme celui-ci.
Si vous avez un peu de temps, je vous invite a regarder cette petite vidéo de présentation, qui date un peu, mais qui vous présentera tout ça en live et bien plus (mais pensez à couper le son, la musique est horrible) :
Enfin notez que les IPython notebook ne sont pas limités à Python. Alors que les versions précédentes obligeaient à bidouiller pour l'utiliser avec d'autres langages, la version 3 qui ne devrait pas tarder à sortir (et que j'utilise déjà) permet de s'interfacer avec d'autres langages très facilement comme cet exemple avec Ruby, celui-ci avec Julia ou ce dernier avec Haskell.
C'est vraiment utile ? Même pour Zds ?
Peut être pas pour tout le monde, mais personnellement oui. Je l'utilise beaucoup dans le cadre de mon travail pour écrire des rapports de recherches et avoir des expériences reproductibles, avec le code et les explications au même endroit. Ce n'est aussi probablement par un hasard si Apple a présenté les Swift Playground récemment qui reprennent ce principe existant depuis de nombreuses années dans le monde Python.
Pour Zds cela peut aussi être utile. Par exemple je prépare actuellement un article et comme il mélange du texte et du code je me suis donc tourné vers IPython comme à mon habitude. Malheureusement au moment de visualiser ce que ça donnait, j'ai vite déchanté. Il fallait copier/coller chaque cellule et mettre en forme le code et les sorties pour obtenir un truc présentable. Pourtant un notebook peut faire une bonne base pour éditer un article hors-ligne, visualiser le résultat et exécuter les codes liés à l'article.
Hier soir, j'avais 10 min de temps libre et j'ai donc pondu un petit convertisseur.
cipyn.py
Après cette longue introduction je propose donc à ceux que cela interesse une pré-pré-pré version de cipyn.py, mon mini convertisseur (mini car il fait environ 60 lignes).
Pour le moment, cipyn se charge simplement d'ouvrir un notebook et de tout coller ensemble. Les cellules markdown sont reprises tel quel et les cellules de codes sont mises dans la balise dédié avec la sortie résultante si présente. Enfin les cellules de titres sont converties dans leur équivalent markdown.
Voici un exemple pour un notebook présenté plus haut :
Vous pourrez remarquer que le graphique est perdu. En effet pour le moment cela n'est pas prit en charge par le
convertisseur. (je viens de rajouter l'extraction des images, voir mon post en dessous) En attendant cela permet de gagner beaucoup de temps pour passer de l'éditeur IPython à Zds.
Pour la suite
J'ai bien conscience que ce script vise une niche et que je serais, malgré mes tentatives de vous convaincre que c'est génial, le seul à utiliser IPython notebook comme éditeur offline pour Zds. Mais puisque ça peut servir, je mettrais à jour ce sujet avec les ajouts que je pourrais faire en fonction de mes besoins.
A court terme je pense ajouter la gestion des images/graphiques et probablement le rendu des des tableaux en markdown. A
moyen terme, si je trouve le temps, je ferais en plus une extension pour IPython pour utiliser la feuille de style CSS
du site et le remplacement du moteur markdown par le notre pour obtenir hors-ligne un éditeur totalement compatible avec
ZDS et avec un rendu identique.
Voilou
-
D'où le I de IPython ↩