02 août 2017

J'ai aimé Valérian

C'est l'été, et ce blog va donc - une fois n'est pas coutume - me permettre d'exprimer une petite critique cinéma.

générique.




Je suis donc allé voir Valérian, l'occasion de partager un moment avec mes deux grands, de leur parler de cette BD qui a bercé mon enfance et que j'ai adoré et relu de nombreuses fois (merci à la BDThèque de Brest).

---

Avant d'entrer dans la salle obscure, j'ai lu des critiques plutôt négatives sur le film, et j'avoue ne pas m'y reconnaitre après séance.

Comprenez bien que ce n'est pas une transcription de la BD à l'écran, ce qui aurait été très différent. D'une part la BD a elle même beaucoup évolué dans son style entre le premier album et le dernier opus, ensuite le rythme et le type de narration n'ont pas grand chose à voir dans ces deux formats. Le film est un vrai film, avec la dynamique liée au format "image grand format", avec un scénario taillé pour un format de 2h, mariant action, sentiments, humour, etc.

Je vois deux pièges possibles dans ce genre d'adaptation

1. le pur fan-service : le film que seuls les amoureux de l'oeuvre originale peuvent comprendre.
Le ire du genre : Final Fantasy Advent Children. Si t'as pas joué au jeu vidéo tu pige juste rien

2. le foutage de gueule hollywoodien : le film qui raconte un truc avec plein de références empruntés à l'oeuvre originale mais qui la dénature pour tenter de tenir un scénario.
Typiquement: Mission Impossible (qui fait de Jim Phelps un traitre ... sans commentaire)


Valérian évite ces deux écueils, en proposant un vrai film qui reprend les éléments de l'univers de la BD, quelques personnages clés, mais surtout la diversité biologique qui caractérise cette fiction, jusque dans le détail d'une humanité à l'origine de la station Alpha "des milles planètes" et pourtant en plein déclin, et qui craint de s'en faire exclure.

Niveau casting, j'étais sceptique du choix de Dane DeHaan, un peu trop "ado" a mon avis pour ce role, mais au final ça passe bien. Quand a Cara Delevingne elle incarne une parfaite Laureline : sexie mais pas bimbo, fière, déterminée, vaillante... et la doublure voix Française lui donne un charme fou.



Niveau image, on navigue dans un environnement graphique élégant, riche et régulièrement renouvelé, qui reproduit très fidèlement l'imaginaire de la BD en terme de "diversité biologique". On a aussi droit à une bonne dose d'images 3D, surtout dans les scènes d'action aux travelings improbables, sans pour autant se perdre dans des plans séquence épileptiques à la Tranformers.

J'avoue être un peu partagé sur la présence de Rhianna au casting, dont le rôle est au final un peu artificiel : même s'il permet d'apporter un moment différent dans le rythme du film qui n'est pas du tout inutile, la sortie du personnage est un peu rapidement balayée par la suite des événements. Ce serait peut être le seul reproche que j'aurais à faire.



J'ai pu lire des reproches sur les similitudes avec Blade Runner, Star Wars ou Avatar. Ce serait peut être oubliée que la BD a commencé en 1967 et que c'est plutôt elle qui a inspiré (directement ou indirectement) les réalisateurs de ces films - lire cet article.


Alors oui, lorsque les trois protagonistes sortent d'un container à ordure forcément on peut voir un parallèle avec la même scène de Star Wars... mais bon, je préfère y voir un clin d'oeil plus qu'un manque d'originalité, car le film n'en manque pas sur d'autres aspects. 

Idem pour le look des Pearl, habitants de Mül, qui rappellent forcément Avatar. Mais bon, nos canons de beauté étant assez limités il est difficile d'éviter ce stéréotype dans un film grand public : grands, minces, des traits doux et lisses, une relation harmonieuse avec la nature ... ce que l'humanité aimerait être quoi. Alors oui, ils auraient pu avoir de petites ailes dans le dos. 



BREF je trouve ce film très réussi, adapté aussi bien aux fans de la BD qui y retrouveront ce qu'ils ont aimé dans les aventures en planches du duo cosmique, aussi bien que des non-initiés qui découvrent un univers richer et inspirant, au long d'une histoire bien sympathique. 

Donc, merci Mr Besson pour ce bon moment, aussi bien pour moi qui ai retrouvé le plaisir de la BD que pour mes gamins qui en ont pris plein les yeux ! 





07 juillet 2017

Writing a Docker Authorization Plugin

Docker daemon is extensible by plugins, allowing network, volumes, authorization and (in last version) logs and metrics management to be plugged in and controlled from external services.

As I'm investigating Docker infrastructure security in the contexte of a CI/CD service, I've been looking for ways to lock down docker daemon so it only allows a subset of the Docker API. Typically, I want to disable bind mounts to ensure one can't just make crazy things like :

docker run -v /:/target alpine rm -rf /target/*

(don't try this at home)


There's various solutions to prevent bad things to happen, including enabling the user namespace, but a second protection barrier still makes sense #DefenseInDepth.



So I've been investigating authorization plugin for docker daemon.

Step 1 : Architecture

Authorization plugin are invoked by deamon for any API call, either from docker socket or http clients. User identity is based on TLS key, so one could create such a plugin with user profiles, so some super-admin with adequate TLS key could do anything, and all others would have restricted access to the API. You can chain authorization plugins, so depending your needs you can keep them simple, or just plug existing ones.

Authorization plugin only implements 2 http endpoints, one to authorize the incoming API request, and the second to authorize the resulting output. This design allows to filter some API calls or to block some data to be exposed by the daemon. It's sometime simpler to let the daemon run some read-only API calls (like inspect)  then check the result to ensure no sensible data is exposed.

To write such a plugin, you'll need to understand which API are actually used by a docker CLI command. Typically, docker run -it  actually uses a bunch of them to pull image, create and start container, attach stdin/out. A simple way is to just look a docker daemon logs when debug is enabled.

Also note authorization plugin can't make changes to the incoming request, so you can't for sample remove some parameters or add some additional ones, like forcing a label to a container to track which user created it. I'd like to do this so I can prevent a later docker exec command to enter a container someone else created. To do this from this plugin I'll need to become stateful and store some container :: owner map.

Step 2 : Code

I've implemented my plugin in Go, using go-plugin-helper skeleton. There's not much done by this lib, but I'm lazy :P

I spent some time fighting with GOPATH and (lack of) dependency management in Go language. Typically, go-plugin-helped do depend on go-connections, and I've been hurt by this change as go-connection has some tags but go-plugin-helper doesn't, so dep I'm using to manage dependencies just pulled incompatible code. I like go development but dependency hells is really a terrible issue for this ecosystem.

Plugin's code is available on github. There's nothing magic here, just a whitelist for API calls I authorize and a specific parameter check for 'docker run'  to ensure no bind mount is user, nor Privileged containers creation.

I could also have used twistlock authz plugin with a custom profile, but

  1. I'm not sure this plugin is more than just a proof of concept (twistlock offers a proprietary more advanced security service, so don't expect this project to do more than just basic filtering)
  2. One learn more by getting hands dirty. Or maybe this is some sort of NIH syndrom :P 

Step 3 : Test

You can ask my colleagues : I'm not used to write unit tests (and that's probably bad) but here I did at least for a simple one :P. But unit tests only cover local code execution, let's try to deploy this plugin on a real docker daemon and validate it actually does the job.

To avoid breaking my local docker installation (sic) I created a virtualbox test environment using docker-machine (yes, despite docker4desktop supersede it for developer experience, this project still is useful). So we now have a sandbox, let's play

Step 4 : Deploy

Authorization plugin deployment is not a smooth process. I would expect I can run something like:

  docker build -t myplugin . && docker plugin install myplugin

but ... that's not the case (yet - maybe this will be improved in a future release).

You first have to build your plugin and provide a root filesystem for it to run containerized. So the simpler solution is to build a docker image and export it's filesystem

docker build -t authobot .

(...)

mkdir rootfs
ID=$(docker run -d authobot)
docker export $ID | tar -x -C rootfs
docker kill $ID
docker rm $ID
One also have to create a JSON descriptor for the plugin. There's various options in this file, but for this simple plugin descriptor is trivial:

{
  "Description": "Authorization plugin for Docker",
  "Documentation": "https://github.com/ndeloof/authobot/blob/master/README.md",
  "Entrypoint": [
    "/bin/authobot"
  ],

  "Interface": {
    "Socket": "authobot.sock",
    "Types": [
      "docker.authz/1.0"
    ]
  }
}


We can now register this plugin on docker daemon and enable it

docker plugin create authobot .
docker plugin enable authobot

Here, the funny thing is that the plugin is enabled, but not in use. #plugin channel on Docker slack was a great assistance for me to understand the issue. Thanks a lot to Brian Goff for taking time to assist a noob :P

Authorization plugins have to be explicitly set as docker daemon options, and can't be enabled/disabled from the API. It makes sense as one could then use the API to disable authorization :-\ but makes the code/deploy/test cycle bit more slow and annoying.

So let's now actually enable the plugin :
sudo vi /var/lib/boot2docker/profile
(adjust to your docker installation if you don't use a boot2docker VM)

Add --authorization-plugin=authobot to docker daemon arguments

restart daemon :
sudo /etc/init.d/docker restart

Step 5 : Done!

My docker daemon now accepts the few API I've whitelisted, but nothing much

$ docker run -it ubuntu echo 'hello world!'
hello world!

$ docker ps
Error response from daemon: plugin authobot:latest failed with error: AuthZPlugin.AuthZReq: /v1.30/containers/json is not authorized


Step 6 : What's next?

Code is currently very minimalist, there's many thing I could improve.
Generally speaking, it only partially cover my need : I will need to track the owner of each container to prevent one try to access other's containers.

Also, as an authorization plugin doesn't allow to change the API call payload, there's few things that will be harder to implement, like per user resource quota, and few other protections I'd like to implement. This plugin anyway will at least prevent the most obvious security issues.





28 juin 2017

Filmer un meetup ...

J'écris ce billet en réponse à l'article "filmer le web" de Thomas Gasc, vu que son blog ne permet pas de laisser de commentaires :P



Le BreizhJUG a été créé en 2008 et de nombreuses tentatives ont été menées pour assurer la captation, pour aboutir au setup actuel du BreizhCamp qui offre un super résultat mais au prix d'un investissement conséquent et d'un coût non négligeable.

Je ne vais donc pas vous faire une liste de matos, je comprend bien que l'idée ici c'est de faire avec les moyens du bord, et pas de cherche un sponsor pour l'acquisition d'un micro Sennheiser de concert à 1k€.

Il y a par contre quelques points que je note, et que je voudrais partager parce que je suis régulièrement moi-même dans un trois rôles : organisateur, speaker, ou "filmer".

1. Privilégier le son. L'image du speaker n'a pas grand importance, si le son n'est pas bon, personne ne supportera votre vidéo plus de 2 minutes. Thomas a d'ailleurs fait un autre article sur comment filmer avec un bête smartphone, j'en vois aussi utiliser de GoPro. Bref, n'investissez pas dans un super caméscope si vous n'avez pas déjà un bon micro. L'entrée de gamme est malheureusement décevant, il faut donc accepter d'y mettre des sous. J'ai de bons résultats avec un micro canon, placé en face du speaker. C'est pas trop intrusif (vs un serre tête) et ça donne un bon signal de base. L'autre option c'est le Lavalier "micro cravate", mais là attention pour avoir un bon micro il faut accepter d'y mettre des sous, et accessoirement ça suppose une transmission sans fil si vous ne voulez pas que le speaker se prenne les pieds dans un cable et arrache tout.

Ensuite, il faut un enregistreur. Les Zoom sont très bien, mais sinon une carte son USB et un enregistrement directement sur PC peut faire le taf. C'est juste plus encombrant. NB: les caméscopes grand public n'ont souvent pas d'entrée micro, et même avec les circuits audio intégrés sont souvent source de souffle, donc à éviter.

J'ai déjà vu un meetup ne capter que les slides et le son, et ne pas filmer le speaker. Ben au final la vidéo est tout aussi utile, même si elle manque inévitablement de vie.

2. Ne pas être intrusif. Exemple type : l'éclairage. Oui, pour filmer, il faut de la lumière. Et oui, pour que les slides soient lisibles, il en faut le moins possible. 

En tant qu'orga, je privilégie les gens qui sont venu physiquement au meetup, donc si la lumière les dérange je demanderai de la couper, tant pis pour la captation (de toute façon, voir 1.)

En tant que speaker, un spot dans la tronche ce n'est pas non plus très agréable. Un speaker chevronné sera un peu plus habitué, mais un novice peut être déstabilisé.

Le meilleur setup c'est de pouvoir décaler le speaker par rapport à l'écran, et de l'éclairer de côté avec deux projos plutôt directionnels et équipés de coupe-flux (les 4 plaques autour d'un projecteur de cinéma). Ca évite de tout lui balancer dans la tronche, ça fait une lumière plus jolie (la lumière de face écrase les ombres du visage) et les brise flux permettent d'épargner l'écran. 

Pour le BreizhCamp on a sorti les projecteurs de théâtre de 500W mais bien sur c'est €€€ et pas très portable, à la place sans investir beaucoup on peut bricoler un truc avec des petits projos LED.

Même règle de ne pas venir déranger le meetup pour ce qui est de la captation son (cf 1.) ou de la captation des slides, d'ailleurs ...

3. Capter les slides. Un speaker • euse qui parle avec les mains c'est sympa, mais un live coding sans voir le code c'est pas terrible. Filmer "large" pour capturer aussi l'écran de projection pose plein de problèmes, d'une part de luminosité, d'autre part de "piqué" (en général, c'est difficilement lisible).

La solution de facilité c'est le petit soft de capture qu'on installe sur le PC speaker. On va par contre à l'encontre de la règle 1., mais bon si le speaker est prévenu à l'avance ça peut être jouable.

Sinon, pour capter le signal HDMi on trouve aujourd'hui du matos adapté pour pas top cher. En gros, une carte blackmagic dans un boitier extension PCI sur USB-C, et on a un système de captation portable.

Attention à bien respecter le point 2: parfois le speaker a un setup exotique (un PC Windows 10 4k par exemple) et la captation merde. Dans ce cas, à meetup -2 minutes il faut accepter de laisser tomber la captation pour que le public puisse profiter du meetup, tant pis c'est la vie voilà.


4. Collaborer. J'avais dit qu'on ne parlerais pas matos et pourtant j'ai pas arrêté. Du coup se pose une question simple : les organisateurs de meetup - qui ont la plupart du temps des sponsors - peuvent-ils contribuer à l'achat de matériel ? Un éclairage soigné du speaker est nécessaire pour la captation mais peut être aussi utile de manière plus générale pour baisser la lumière générale et avoir des slides bien nets tout en gardant un speaker bien visible même du fond de la salle. 

De ce que je comprend (j'ai pas eu l'occasion d'en discuter de visu) Thomas débarque dans un meetup et se propose de filmer. Cool. Par contre les contraintes techniques apparaissent du coup au dernier / mauvais moment. En discutant plus en amont avec les orgas pour aménager un peu le meetup il est possible de mieux gérer tout ça et d'éviter ces mauvaises surprises. 


Bref  si vous voulez filmer un meetup, déjà essayez ! Ce qui précède ce ne sont que des conseils après plusieurs années de merdages répétés et de mauvais choix. Ne soyez pas forcément trop ambitieux, mais gardez les règles ci-dessus en tête. Je vous propose d'ailleurs cette progression :


  1. Commencer par un bon enregistrement son. Accompagné du lien slideshare ça peut déjà être sympa. Style podcast. Si vous êtes courageux vous pouvez alors faire un montage slides + son. Ajoutez un écran d'intro avec la photo du speaker ça lui fera plaisir :P
  2. Essayer de capturer la sortie vidéo ou de trouver un soft acceptable par vos speakers. J'ai pas de recommandation, perso j'ai horreur de ça (j'ai eu un gros plantage une fois, merci).
  3. Filmez le speaker et faite un joli montage picture-in-picture comme les pros. 
Vous le voyez, dans cette recette, filmer le speaker c'est le dernier point, la cerise sur le gateau. Essayez donc de déjà faire un gateau sympa avant de vous embarquer dans des trucs compliqués et intrusifs.

Notez bien que je parle de captation de meetup ici, pas d'interview, vidéo d'ambiance, etc. Ca c'est un tout autre sujet :D



19 juin 2017

Jenkins Community Day à Paris

Le 11 Juillet, JFrog organise le Jenkins Community Day à Paris, une excellente opportunité pour rencontrer ceux qui font Jenkins et découvrir toutes les nouveautés et tendances dans le monde du Continuous Delivery.



J'y serais présent en tant que speaker pour vous présenter l'évolution du couple Jenkins + Docker ces dernières années, et les pistes pour l'avenir - le tout en mode "Back to the Future", parce qu'on peut parler de choses sérieuse sans s'y prendre sois-même aux. (si vous connaissez une tournure correcte pour cette phrase sans répéter "sérieux" je suis preneur)



Si vous voulez m'y rejoindre, passez par ici pour obtenir une réduction sur votre inscription.

Docker et la Sécurité

Chose promise, chose due

Voici donc la première vidéo qui marque le retour de "Quoi d'neuf Docker". J'y parle de Docker et de la Sécurité, un thème qui amène de nombreuses questions et pas mal de fantasmes. Je compte d'ailleurs faire une vidéo "follow-up" pour répondre à vos réactions/questions/corrections, donc n'hésitez pas à pousser un commentaire (sur YouTube).




09 juin 2017

Quoi d'neuf Docker Reloaded

Je vous annonçais dans un billet de décembre (décidément, ce blog n'est plus très prolifique...) mettre un terme à ma chaine Youtube "Quoi d'neuf Docker". Cet article avait fait suite à plusieurs mois à tenter de me motiver pour sortir une vidéo sur Docker Swarm, qui aurait fait suite à son lancement à la DockerCon'16. Enregistrée deux fois, la vidéo manquait du peps que je veux insuffler dans mes vidéos, le texte était bancal, les tentatives de montage laborieuse (si tu as de la merde en entrée...)

BREF, j'ai baissé les bras, à contre coeur, mais constatant mon incapacité à avancer

Depuis, j'ai reçu de nombreux messages d'encouragement ou de remerciement, qui paradoxalement me laissent un gout amer : j'ai merdé.

Vous m'avez fait confiance, vous m'avez encouragé, vous m'avez soutenu, y compris financièrement, et plouf je baisse les bras, c'est pas très classe.

Par ailleurs, merde j'aimais bien faire ces vidéos. D'une part j'ai appris plein de choses en les préparant - il y a une énorme différence entre faire un truc et savoir l'expliquer - mais aussi je me suis bien amusé sur les montages, tentatives d'effets spéciaux plus ou moins réussis, et ça c'est un truc qui me botte. D'autant qu'il y a une marge de progression gigantesque dans ce domaine.

En en discutant avec mes copains du BreizhCamp, j'ai réussi à embarquer sans avoir besoin d'insister Yoann et Sylvain pour me prêter main forte. Essentiellement pour me botter le cul, mais aussi pour relire les textes (qui du coup sont plus préparés) et me pousser des idées.

Je suis donc heureux de vous annoncer le retour de Quoi d'neuf Docker


Et comme vous l'aurez compris, le côté "vidéo" m'éclate bien, donc j'ai embauché l'équipe pour un trailer.

La prochaine vidéo avec du vrai contenu sortira si tout va bien avant fin juin (le texte est prêt, y'a plus qu'à). Le sujet c'est ... et bien vous verrez bien, mais histoire de faire les choses comme il faut pour me faire pardoner d'un an sans publication, j'ai abordé le sujet qui m'était le plus réclamé :P

A+


06 février 2017

10 ways for a speaker to upset conference organizers

Cet article est une réaction à cet autre article.

Dans l'article en question, l'auteur - que je ne connais pas, de toute évidence une star dans son domaine vu son propos, moi désolé jamais entendu parler - énonce 10 points qui l'horripilent lorsqu'il intervient dans une conférence.
Etant à la fois speaker et organisateur, je vous propose ma vision des choses...

Forcing a slide template on people

Je dois l'avouer, c'est souvent très chiant. Le support dans les outils de présentation de templates est d'ailleurs assez mauvais, et lorsqu'on en change toute la mise en page est à refaire. Cependant, en tant que speaker, lorsqu'on ne m'impose pas un template - je précise qu'on ne me l'a jamais "imposé", juste très fortement recommandé, ce qui n'est pas la même chose, j'aurais pu faire ma conférence sans, et ne pas pour autant être blâmé - j'ai pour habitude d'essayer a minima d'intégrer le logo de la conférence dans les slides. Ca s'appelle respecter son hôte.

Asking for slides in advance

Ca ne m'est jamais arrivé, j'ai parfois vu cette option dans un Call for Papers, mais généralement on me demande plutôt une vidéo d'une de mes intervention pour estimer mes qualités de speaker. J'admet que si ça m'arrivait je serais emmerdé. Il est assez courant que j'ajuste mes slides au denier moment, souvent en fonction des sessions qui ont précédées ou qui sont au programme et recouvrent mon sujet "pour en savoir plus, allez voir XX salle YY à 16h".

Asking for slides after the talk

Sérieux, peut-on reprocher à une conférence de vouloir regrouper les slides sur leur site web ? Bien sur, l'essentiel de la conférence n'est pas dans les slides, mais il y a TOUJOURS des gens pour vous les demander. Franchement ce n'est pas pour ce que ça coute, sans parler des très nombreux speakers qui les mettent en ligne d'eux-même

Screens that are only 4:3

Alors là mon gars, je sais pas dans quel monde tu vies, mais quand on est organisateur, on est bien obligé de faire avec ce qu'on trouve dans les rares lieux qui correspondent à l'événement qu'on prévoit. Et oui, parfois on a de vieux projecteur 4:3 qui poussent à peine en 1024x768. Mais pour quelqu'un qui nous explique que son talk ne se résume pas à ses slides, je trouve que la critique tombe bien mal.

Badly prepared rooms

J'admet qu'un micro qui part en vrille au bout de 10 minutes, ou pire : un micro pupitre qui t'interdit tout mouvement, c'est pénible. Seul point sur lequel je suis d'accord. Ceci dit, un bon micro serre tête sans fil ça coute un bras, aussi voir le point précédent.

Conference laptops are (usually) painful

Je n'ai jamais fait cette expérience, et je n'aurais pas l'idée de l'imposer à un speaker. Mais de toute évidence ça arrive. Si c'est le cas j'admet que c'est un soucis au niveau de l'organisation, à savoir que permettre au speaker de vérifier sa connectique avant son intervention est un minimum. Maintenant, encore faut-il que le speaker en question soit présent à l'avance et joignable :P

Not covering T&E is a massive no-no

Ben tiens. Viens vendre ta camelote, je te payerais le billet d'avion avec plaisir ! Y'en a qui n'ont peur de rien. Evidemment il existe des speakers qui se font rémunérer, mais là on parle d'autre chose, non?
Dire ça, c'est clairement ne pas comprendre le modèle économique d'une conférence, qui doit jongler entre ce qu'elle arrive à soutirer des sponsors, et le prix du billet qu'elle veut afficher. Alors oui, on peut faire des conférences de riche avec des billets à 1500€ et payer l'avion à tous les speakers, ou bien ne proposer une assistance financière qu'au cas par cas et conserver un billet abordable.

Bad hotels are bad

Désolé, la suite présidentielle n'était pas libre. Et nous ne payons pas non plus le service de callgirls. 

Not allowing me to arrange my own flights

Bon là, clairement on est dans la catégorie Lady Gaga, je ne sais même plus quoi dire. Le mec on lui paye l'hotel, l'avion, et il est pas content parce que c'est compliqué d'indiquer ses contraintes.

Not treating conferences as a mutually-beneficial relationship

Vu le discours, il est clair que le "beneficial" dans un des deux sens il est évident. En tant qu'organisateur, je laisserais le plaisir à d'autres de gouter à l'autre direction de la relationship.


Voilà, bref, ce discours de speaker-star m'exaspère. Ce mec mériterait un bon entartrage (tarte évidemment financée par l'organisateur)