Changement de cap

Souvenez vous de l’article Cap sur 2015

Celui-ci en est une suite directe.

Il y a deux ans, j’avais donc décidé de tenter de travailler dans cet énorme multinationale. J’espérais y découvrir des choses …

  • Comment travailler sur des gros projets
  • Comment être efficace dans des organisations complexes
  • Comment discuter avec des clients du CAC40, ou semi-publics
  • Comment faire avancer des projets d’entreprise

J’ai découvert tout ça, et bien plus.

Je ne vais pas détailler tout ça publiquement. Si vous voulez plus de détails, je pourrais vous en donner de façon plus personnelle.

Toujours est-il qu’au bout de deux ans, même si je suis loin d’avoir fait le tour de l’entreprise, j’ai au moins compris une chose, grâce à ce dessin de XKCD

settling

Je dois bien admettre que prendre une décision de travail sur la base d’un dessin peut sembler ridicule … mais il s’agit plus d’un déclencheur que d’autre chose. Un déclencheur qui a bien aidé certaines personnes à me placer dans une orbite plus incertaine, mais aussi plus excitante.

En effet, je rejoins dès mardi Zenika, pour continuer à y fournir mes services de développeur Java un peu expérimenté et d’architecte … un peu moins expérimenté.

Pourquoi ?

Parce que je vais au chtijug très régulièrement, et que Zenika en est un sponsor depuis un moment.

Parce que j’ai vraiment beaucoup aimé aller à DevoxxFr, et que Zenika en est également un sponsor.

Parce qu’au-delà de ça, un certain nombre de consultants Zenika contribuent à l’open-source.

Autrement dit, parce que je me sens plus aligné avec les valeurs de Zenika.

Une nouvelle aventure, donc, dont je ne sais pas encore où elle me mènera.

En tout cas, elle évitera que je me retrouve propulsé au management

dt170216
Ca me fait le même effet

Ou, pire encore, que je me retrouve coincé dans la matrice des buzzwords

index

Et en terme de réalignement des objectifs sur les deadlines, croyez-moi, c’est pas une bonne idée.

Sincèrement, j’espère éviter ça chez Zenika … A moins que je ne le souhaite d’une façon obscure.

En tout cas, une chose est sûre, la nouveauté m’attend dès mardi !

Publicités

Un chtijug dans le textile

Et paf, un chtijug pas à petit prix chez kiabi ! Le site est plutôt sympa, avec un côté plateforme pour théatre d’improvisation (par contre, les spots du fond qui clignotent, ça va pas être pratique pour les épileptiques). Julien (du chtijug) est bien content qu’on sorte des éternels ISEN/IUT B …​ et moi aussi : aller faire ces conférences dans des entreprises, pour des développeurs professionnels, c’est effectivement mieux.

OpenAPI chez Kiabi

Il y a deux ans, Kiabi a lancé une API web. Je ne vais pas vous reprendre tout l’argumentaire développé par le speaker sur les API, parce que personnellement, je connais déja (oui, je ne suis pas vraiment pédagogue). Cela dit, il explique bien les différents aspects positifs de la définition d’une API (quand les slides seront disponibles, ce sera plus clair). L’un des plus grands bénéfices étant évidement l’accélération des développements : en découplant le développement back-end et le développement front-end, on peut accélerer ce dernier.

OpenAPI, c’est le troisième niveau du développement d’API dans l’échelle suivante :

  1. API interne
  2. API publique, mais uniquement exposée aux partenaires (avec évidement de l’OAuth, et peut-être de l’API management)
  3. API publique, exposée et source de revenus.

Définition

Pour développer l’API, Kiabi a d’abord défini des concepts généraux :

  • API Kiss
    • incluant une API affordance, c’est-à-dire intuitive dans son usage, et suggérant même ses bons usages
    • avec une sémantique claire
    • et en ne fournissant qu’une seule façon de faire une chose
  • Réutiliser des standards et des types d’API existant

Par contre, il faut éviter d’utiliser le jargon fonctionnel interne (ce qui est un point à mon sens super intéressant). Laissez-moi détailler ce point un instant. Dans votre entreprise, vos fonctionnels sont là pour définir le vocabulaire métier. Vous comptez sur leur sérieux. Mais quand vous développez une API publique, vous n’utilisez pas ce vocabulaire … C’est de la schizophrénie ? Non, à mon avis, c’est plutôt que le vocabulaire interne dérive, se jargonifie, et perd son adhérence avec le réel. Du coup, c’est DDD ou pas ? A mon avis, et contrairement à certain homonyme, oui.

A partir de ces concepts, Kiabi a défini une refcard qui reprend l’ensemble des concepts et des règles de fonctionnement définies. Chose curieuse, cette refacrd inclut la liste des codes HTTP retournés par les applications Kiabi. Ca me paraît curieux : le W3C a défini ces codes pour des raisons qui peuvent arriver, non ? Alors pourquoi ne pas tous les utiliser ?

Implémentation

Et donc, les implémenteurs implémentent leur API à partir de ces règles, et elle est définie en comité (argh) avec une platrée d’architectes transverses (re-argh). Evidement, ça qualifie le projet comme non-agile, mais en un sens, je comprend le besoin de cohérence du bazar. Et de la même manière, l’implémentation se fait sur une plateforme standard : Tomcat, CXF, JSON, …​

Management

Pour gérer tout ça, Kiabi a mis en place un API Manager (Software AG Webmethods API machintruc) qui ne semble pas fournir tous les services, puisqu’il y a quand même un Apache en frontal (apparemment pour faire de l’URI rewriting). Ils ont également un portail d’API pour développeur, évidement indispensable pour permettre aux développeurs d’utiliser les différentes API proposées. D’une façon amusante, le speaker insiste lourdement sur le fait que ce portail d’API permet aux développeurs d’utiliser facilement les différentes API. Ca trahit à mon sens plus le choc culturel qu’est cette ouverture que le challenge technique de ce portail (ne serait-ce que parce que StackOverflow, Goodreads, le fournissent déja depuis …​ quoi …​ 5 ans ?).

Démo

Pub

Kiabi organise au mois de juin un hackathon. Bon, personnellement, je ne suis pas fan de ce genre d’événements. Mais si ça vous branche …​

traefik

Pourquoi faire un autre reverse proxy (par rapport à, par exemple, nginx ou HAProxy) ? A cause des miccroservices.

Avec les microservices, on gagne un tas de nouveaux outils :

  • Des conteneurs (Docker, rkt)
  • Des orchestrateurs (Docker Swarm, Kubernetes, Mesos, Rancher)
  • Des outils de service discovery (etcd, Consul, Zookeeper)
  • Et des reverse proxy

A quoi ça sert ? A connecter le réseau privé au web en respectant l’état des microservices. Souvenez-vous, Christophe Furmaniak en avait déja parlé lors d’une session sur Rancher.

Les reverse-proxyes open-source (HAProxy et nginx) ont une configuration statique. Du coup, quand les microservices sont déployés, il faut

  1. Arrêter le proxy
  2. Changer la configuration
  3. Redémarrer le proxy

Pas très pratique.

traefik, lui, lit sa configuration depuis l’orchestrateur. Du coup, pas besoin de redémarrage. Plutôt cool …​ Et pour être rapide, c’est du go. Et d’un coup, je comprend pourquoi le go progresse : avec le build statique, une image Docker d’un programme go ne contient pas de dépendances, et c’est chouette ! (pour ceux qui aiment ça). Attention, je ne dis pas que c’est bien. Je dis juste que Go est plutôt bien adapté au monde Docker.

Démo

Et d’un coup, je comprend l’affection de Quentin Adam pour les gestionnaires d’abréviation : lancer des conteneurs docker en ligne de commande pendant une démo, ça peut merder facilement …​ Parce qu’Emile a eu quelques soucis liés à la connexion internet … sensible et aux commandes docker un peu longues.

Pourquoi mes messages sont tronqués (ou absents) ?

J’écris ce message histoire de clarifier un peu les choses.

Comme je passe doucement de Twitter à mastodon, j’en profite pour faire un nettoyage dans mes systèmes d’information et pour ajouter un peu de documentation.

Donc, actuellement, pe publie des informations en utilisant les solutions suivantes

flux_de_publication.png

Il y a évidement des troncages, en particulier quand les textes arrivent dans twitter. Mais dans l’ensemble, c’est assez correct.

Il y a toutefois un défaut, que j’ai l’intention de changer. Regardez en bas : Goodreads, WordPress et StackOverflow publient directement dans Twitter sans passer par mastodon. C’est mal.

Et autant pour Goodreads et WordPress, je pense utiliser brutalement le flux RSS, autant pour Stackoverflow, comme je ne publie pas systématiquement mes questions, je pense que je vais garder une publication manuelle.

Mais j’ai une question :

Pour l’instant, je n’ai pas la réponse … mais je pense me décider assez vite.

Bon, cela dit, je n’ai pas non plus la réponse à « comment embarquer un pouet dans WordPress …

Ne vous trompez pas : votez … ou pas

Donc, la France a choisi ses candidats pour le second tour de l’élection présidentielle.

Avant d’aller plus loin, un petit rappel : le président de la république est, comme tout le monde le sait, plus une figure de proue qu’autre chose. Allez voir par exemple la page wikipedia précisant ses fonctions. Clairement, lorsque les candidats à l’élection ont présenté leur « programme », ils ont présenté le programme qu’ils espéraient faire adopter si le gouvernement et l’assemblée nationale étaient les leurs. N’étant ni analyste politique, ni voyante, ni voyageur du temps revenu du futur, je suis incapable de comprendre comment les deux candidats actuels dégageront une majorité parlementaire à l’issue des élections législatives prochaines : l’une a un parti qui sent trop le facisme pour espérer avoir une majorité « fiable » (sauf en mangeant littéralement toutes les circonscriptions « Les républicains ») l’autre n’a actuellement aucun élu à son nom à l’assemblée nationale.

Du coup, quel sera leur rôle ? A priori, il s’agit de représenter la France à l’étranger. Et de ce point de vue-là, je préfère encore être représenté par un banquier d’affaire mondialiste que par une proto-faciste anti-européenne (A toutes fins utiles, je rappelle que la CEE a avant tout permis une chose unique : 60 ans de paix continue entre ses membres, ce qui est, il me semble, assez exceptionnel pour le continent ayant fait progresser le plus le concept de guerre). Au-delà de ça, je me range à cette opinion, vue sur Twitter.

OwnCloud, c’est cool

J’ai installé il y a un bout de temps OwnCloud sur mon Raspberry, mais pendant longtemps, je n’en avais rien fait.

Hier, j’ai enfin installé le client de synchronisation sur ma machine Windows et mon téléphone.

Et surtout, j’ai déplacé tout le contenu de mon dossier Dropbox dans le dossier OwnCloud.

Et franchement, ça marche rudement bien.

De mon point de vue de simple utilisateur, ça marche aussi bien que Dropbox.

Du coup, adieu Dropbox !

Un mastodonte est-il plus léger qu’un oiseau ?

Ouais, bon, je tente le titre accrocheur.

Donc, j’ai entendu parler toute la semaine dernière de mastodon, un réseau social de microblogging décentralisé.

Autrement dit, un équivalent de twitter (avec une limite des messages à 500 caractères) qui présente l’avantage (en termes de scalabilité) de permettre l’ajout de nouvelles instances au réseau. Pour être plus clair, le réseau social n’est plus un unique site web, mais un ensemble de sites web sur des serveurs différents, dans des pays différents.

Ca me plaisait pas mal (moins d’adhérence à la silicon valley, plus de possibilité de survie du réseau, tout ça tout ça.

J’attendais juste de trouver une instance « sympathique ».

Et soudain, grâce à Camille Gévaudan, la lumière

Donc j’y suis allé, j’y ai créé un compte.

Pour l’instant, c’est sûr que le réseau est encore peut-être un peu jeune. Mais

  • Les fonctionnalités sont équivalentes à celle de Twitter
  • La liberté est plaisante
  • Le nombre d’instances est déjà élevé

Je vais donc tenter la migration complète vers mastodon : envoyer le flux RSS de Shaarli vers mastodon, puis générer un flux RSS de mastodon et l’envoyer vers Twitter.

Une petite mise à jour de rss-bridge, ça vous dit ?

Suite aux mises à jour de Sexactu, j’ai dû réécrire le bridge correspondant, et j’en ai donc profité pour mettre à jour rss-bridge.

Et même si je n’aime pas spécialement le PHP, je dois dire que les choix d’API sont quand même vachement pratiques.

En bonus, avec xampp et Eclipse-PDT, c’est quand même super facile de bosser.

Du coup, j’en ai profité pour mettre à jour tous mes bridges … et évidement les envoyer sur github. Et franchement, c »était facile. Bravo à l’équipe rss-bridge.

Il est re-RAID

Bon, c’est bien dépassé (genre ça fait pile un mois). Mais mon NAS a retrouvé son RAID. La leçon essentielle est qu’il faut bien lire les messages des différentes commandes Linux, parce qu’en fait, j’avais démonté le mauvais disque dur … Dès que j’ai pensé à enlever le bon disque dur, ça c’est mis à […]

Il est un peu moins RAID …

Mais ça va s’arranger.

Parce que j’ai reçu aujourd’hui mon disque de remplacement.

J’ai d’abord essayé de remplacer le disque à l’arrache, avant de me souvenir qu’il y a sur le site de Alt-F une page complète sur le changement d’un composant dans un disque RAID.

J’ai donc repris la procédure en suivant méthodiquement les étapes.

Hélas, dès la suppression du composant, c’est le drame :

[root@dlink-6A4EB1]# mdadm --manage /dev/md0 --fail /dev/sda2
mdadm: set device faulty failed for /dev/sda2:  Device or resource busy

Et j’ai passé du temps avant d’avoir l’éclair de lucidité.

En fait, j’ai partitionné mes disques « simplement » : une grosse partition en RAID1 avec tout dedans. Tout … y compris ffp … Lequel ffp fournit évidement les services SSH et compagnie. Du coup, évidement, quand j’essaye d’enlever le composant (enfin, le disque, mais en RAID, apparemment, ça s’appelle un composant), ça ne marche pas … Attendez, c’est du RAID1, donc ça devrait marcher, non ?

Du coup, si c’est pas ça … je fais quoi, moi ? Ben j’en sais rien. Enfin, j’ai bien une idée : je peux toujours copier tout le contenu de mon montage RAID1 sur mon nouveau disque, et le faire évoluer vers un disque RAID1 en reformattant le composant qui reste dans le RAID1.

Bon, en théorie, la solution idéale serait quand même de mettre mon nouveau disque directement dans le conteneur RAID1 … mais je ne sais pas trop comment faire ça, ni dans l’interface d’Alt-F, ni même dans mdadm. Je sens que je vais encore aller écumer ServerFault, moi …

Il est RAID … mort ?

Bon, ça sent pas bon

2017-03-07 19_48_12-

Oui, mon RAID est dégradé.

Mais comment ?

Une première réponse grâce à cet article : How to get the status of a Linux software raid?

Qui donne ce résultat éloquent :

[root@dlink-6A4EB1]# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid6] [raid5] [raid4]
md0 : active raid1 sda2[0]
975585856 blocks [2/1] [U_]

unused devices: 

Effectivement, le U_ est clair : l’un des deux disques semble être dysfonctionnel. Mais lequel ?

En regardant dans l’interface de Alt-F, je peux avoir ces informations là :

/dev/sda2:
          Magic : a92b4efc
        Version : 0.90.00
           UUID : a112692c:cd4ddd32:b98be83a:b8b6c728
  Creation Time : Sun Feb  8 22:22:54 2009
     Raid Level : raid1
  Used Dev Size : 975585856 (930.39 GiB 999.00 GB)
     Array Size : 975585856 (930.39 GiB 999.00 GB)
   Raid Devices : 2
  Total Devices : 1
Preferred Minor : 0

    Update Time : Tue Mar  7 20:15:34 2017
          State : clean
 Active Devices : 1
Working Devices : 1
 Failed Devices : 1
  Spare Devices : 0
       Checksum : 67beb987 - correct
         Events : 12447483


      Number   Major   Minor   RaidDevice State
this     0       8        2        0      active sync   /dev/sda2

   0     0       8        2        0      active sync   /dev/sda2
   1     1       0        0        1      faulty removed
/dev/sdb2:
          Magic : a92b4efc
        Version : 0.90.00
           UUID : a112692c:cd4ddd32:b98be83a:b8b6c728
  Creation Time : Sun Feb  8 22:22:54 2009
     Raid Level : raid1
  Used Dev Size : 975585856 (930.39 GiB 999.00 GB)
     Array Size : 975585856 (930.39 GiB 999.00 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 0

    Update Time : Wed Feb 15 09:09:56 2017
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0
       Checksum : 67a3a500 - correct
         Events : 12444067


      Number   Major   Minor   RaidDevice State
this     1       8       18        1      active sync   /dev/sdb2

   0     0       8        2        0      active sync   /dev/sda2
   1     1       8       18        1      active sync   /dev/sdb2

Et donc, clairement, mon disque /dev/sda1 a un problème.

Du coup, j’essaye de l’enlever via Alt-F, encore une fois. Et c’est le drame :

Removing the sda2 partition from the md0 RAID device failed:

mdadm: hot remove failed for /dev/sda2: Device or resource busy

Damned ! Comment je fais, maintenant ?

Evidement, un coup d’oeil à ServerFault donne des réponses …comme celle-là, mais par prudence, je ne vais pas l’appliquer tout de suite …

Et je vais surtout (encore) acheter un nouveau disque de 1 To …

J’en profiterai évidement pour faire jouer la garantie, parce que le disque Toshiba n’a quand même qu’un an …