Voeux 2021

Juste un petit post rapide pour partager mes voeux 2021 à tous ceux qui tomberaient sur cette page. En espérant que nous pourrons tous sortir de chez nous cette année.

(et une pensée particulière à tous ceux dont j’ai croisé le chemin et avec qui je n’ai pas su garder contact : je ne vous oublie pas dans ces voeux :) )

Explorer les entrailles de Zork avec le langage Rust

Rust Language Logo Un petit post rapide pour vous fournir un lien vers le blog d’experts de Worldline où j’ai posté un petit article.

Le sujet principal : Trouver un “side project” pour apprendre un nouveau langage / framework / techno…

Les “sous-sujets” :

  • Le langage Rust
  • Le format de stockage des fichiers du jeu Zork

Si ça peut vous intéresser, ça se passe ici :

Learning motivation: discover Rust with Zork

Des articles ici, mais aussi ailleurs ...

Un nouveau post sur ce blog après une longue absence.

Bon, pas de choses révolutionnaires à annoncer, mais un petit lien vers le blog technique de mon employeur :

blog.worldline.tech

Et qui sait, vous y croiserez peut-être de mes articles :-)

Utiliser VNC comme interface graphique avec un conteneur docker

Si vous faites du développement logiciel, vous connaissez forcément Docker. Et si comme moi, vous êtes condamnés à utiliser Windows, la tentation d’utiliser des conteneurs pour tous vos outils peut être grande.

Docker est parfait pour tous les services fonctionnant en ligne de commande, mais on souhaite parfois utiliser des outils graphiques et dans ce cas, c’est un peu plus compliqué. (surtout sous windows où l’utilisation d’un serveur X est au mieux complexe).

Il existe cependant une solution tout à fait exploitable pour utiliser l’interface graphique : VNC.

L’idée est d’embarquer trois services supplémentaires dans le conteneur de votre application : VNC

  • un serveur X “virtual framebuffer” Xvfb
  • un window manager tel que fluxbox
  • un serveur VNC x11vnc

Une fois ces éléments packagés, une connexion via votre client VNC préféré vous permettra d’accéder à vos outils.

Mise en place

Pour les besoins de cet article, j’embarquerai l’éditeur de texte / IDE atom dans un conteneur équipé de VNC.

Atom.io Le travail de conteneurisation d’atom a déjà été effectué, nous partirons donc de ce Dockerfile : jamesnetherton/docker-atom-editor

Le Dockerfile que nous allons développer l’étendra pour installer et configurer les composants cité précédemment.

Concrètement, l’installation des éléments se résumera à inclure les lignes suivantes :

USER root
RUN apt-get install -y xvfb x11vnc fluxbox

Il ne reste qu’à configurer et lancer les éléments :

  • la variable DISPLAY doit pointer sur le serveur X que nous allons définir
  • ce serveur est créé via le virtual framebuffer et l’écran est dimensionné à notre convenance : Xvfb :1 -screen 0 1280x1024x16
  • le window manager fluxbox est lancé : fluxbox
  • un serveur x11vnc est utilisé pour permettre la connexion distance sur le serveur X et reste actif même si le client se déconnecte : x11vnc -forever
  • et finalement, l’éditeur atom est lancé (le flag -f permet de désactiver le lancement en tâche de fond, ainsi le conteneur reste ouvert jusqu’à la fermeture d’atom) : atom -f

Ce qui donne :

USER atom
ENV DISPLAY :1
CMD Xvfb :1 -screen 0 1280x1024x16 & fluxbox & x11vnc -forever & /usr/bin/atom -f

Voici alors le Dockerfile complet :

FROM jamesnetherton/docker-atom-editor

USER root
RUN apt-get install -y xvfb x11vnc fluxbox

USER atom
ENV DISPLAY :1
CMD Xvfb :1 -screen 0 1280x1024x16 & fluxbox & x11vnc -forever & /usr/bin/atom -f

Un coup de build :

docker build -t gcastel/docker-atom-editor-vnc .

Et vous pouvez lancer votre conteneur en n’oubliant pas d’ouvrir le port 5900 de VNC et de monter le répertoire contenant les fichiers à éditer avec atom :

docker run -p 5900:5900 -v /documents:/documents -t gcastel/docker-atom-editor-vnc

Une connexion client VNC (ex: TightVNC) sur localhost:5900 vous permettra de vous connecter à atom :

Atom in docker via VNC

Enjoy !

Utiliser les snapshots dans eclipse che

Je fais actuellement quelques tests d’Eclipse che sur mon serveur perso.

Si vous ne l’avez jamais utilisé, il s’agit d’une version de l’IDE Eclipse accessible depuis un navigateur. Elle est basée sur un client javascript, des APIs REST et la conteneurisation des projets (Docker forever :-) ).

Je ne m’étendrai pas sur ses fonctionnalités, ce n’est pas le sujet. Voici un aperçu de ce que ça donne dans un navigateur :

Eclipse che workspace

Exemple d’utilisation des snapshots

Eclipse Che offre une fonctionnalité qui permet de sauvegarder l’état d’un workspace sous la forme d’un snapshot stocké dans un registre docker.

Pour se faire, une des méthodes les plus simple est de lancer le registre docker lors du lancement de che. Voici par exemple la ligne de commande que j’utilise pour lancer che :

bin/che.sh --port:9999 -g

9999 est le port de connexion et -g permet de lancer un registre local pour le stockage des snapshots.

Connectez-vous à localhost:9999 et tout roule, créez un projet depuis un modèle et constatez le lancement des conteneurs.

Super, tout va bien. Mettons à jour quelques dépendances maven, modifions notre projet …

Maintenant, sauvegardons l’état du workspace pour ne pas avoir à retélécharger les dépendances maven.

Sauvegarde d’un snapshot

L’accès à la sauvegarde de snapshot ne saute pas aux yeux.

Il faut passer par la vue machine d’Eclipse Che; il suffit de cliquer sur l’icône suivante en haut à droite de l’IDE :

Machine icon view

Maintenant, le menu “Machine” est actif dans la barre de menu et vous pouvez créer un snapshot (Create snapshot) :

Machine create snapshot menu

Si tout se passe bien, Che vous signale qu’il est parvenu à créer le snapshot.

La problématique du rechargement

Maintenant, stoppez le workspace. Au bout d’un moment, vous souhaitez le recharger et cliquez sur le lien suivant dans le dashboard (ici pour mon workspace wksp-java) :

Open in IDE

Manque de chance, votre snapshot n’est pas chargé. :-(

Eclipse Che est encore en phase de développement, et il n’est pas rare de tomber sur quelques soucis de ce genre.

En fait, le lien d’ouverture des workspaces depuis le dashboard ne déclenche pas le rechargement.

Si vous souhaitez recharger votre workspace avec un snapshot, il faut utiliser le lien direct. Donc pour moi : 192.168.0.1:9999/ide/wksp-java

Et miracle …

Recover snapshot popup

Bref, le mécanisme de snapshot fonctionne, mais la doc n’est pour l’instant pas explicite sur la façon de l’utiliser. Amusez-vous bien avec Eclipse Che !