Un chtijug élastique

D’abord, quelques annonces

A 20 € ! Ca va être dur de faire valider la note de frais.

Pour les slides, c’est par là

Elastic, c’est 4 projets open-source :

  • Logstash (malheureusement écrit en JRuby)
  • Beats (alternatives à Logstash en go beaucoup plus simple). il y a FileBeats, NetworkBeats, MetricBeats
  • Elasticsearch (moteur d’indexation et de recherche JSON. Ne loupez pas l’interview de notre speaker chez lescastcodeurs)
  • Kibana (outil de dashboard)

Et un ensemble de solution commerciales appelées génériquement X-Pack

En particulier, graph permet d’éviter le problèmes des supernoeuds dans les graphes (un problème auquel je suis assez sensible, mais je m’éloigne du sujet).
Et prelert va identifier les erreurs « exceptionnelles » grâce à de l’apprentissage.

A quoi sert elasticsearch ?

Ben à faire des recherches floues, où à trier les résultats de recherche selon … un score. Et floue, ça implique de gérer les fautes d’orthographe, les textes approchants, les synonymes, …

Et maintenant, le coeur de la présentation : ingest node

Avec ingest, on peut remplacer l’architecture classique

iyxfbszfiyqhkn3bp4briaqiaupaxelvvas7bogmpowa5ifpxazotebfsoa4r1ixorlc91qnp2o7foom9mtmmmtkjkco3cvfsa5c1vc85kpm5kqwtyzc0g00

par une architecture beaucoup plus simple

iyxfbszfiyqhkn3bp4briaqiaupaxekvvygmbsgc1wsc5ylda5hpag01gjopbpsrk8ihbwkkllvn3y880000

Du coup, le pipeline de transformation Logstash (grok, date, mutate) est remplacé par un équivalent ingest (grok, date, remove). Il y a naturellement tout un tas de plugins (dont la lecture d’attachments avec Tika). Bon, autrement dit, on remplace un ETL par un autre, espérons juste qu’il soit plus performant. Et évidement, on peut créer ses propres plugins.

Il y a quand même un gros intérêt, puisque les pipelines ingest sont utilisables dans la plupart des urls d’appel à Elasticsearch. Et en particulier, dans l’un des trucs les plus balaizes : le reindex. Ce reindex permet la migration facile d’un cluster Elasticsearch d’une vieille version vers une nouvelle. Et ça, ça me paraît vraiment très chouette.

Comme dans n’importe quel ETL, il est possible de définir des failure processors qui vont être utilisés en cas d’échec lors de la série de transformation. On peut les définir par pipeline ou par processeur.

Dans un cluster, (parce que oui, Elasticsearch fonctionne toujours en cluster), il est possible de laisser tous les noeuds faire de l’ingestion, on d’en forcer certains à faire l’ingestion. En prod, d’ailleurs, il vaut mieux séparer les noeuds d’ingestion des noeuds de données.

Et si on regardait un plugin ?

Par exemple, le fameux plugin BANO (déja mentionné chez les castcodeurs). BANO pour base nationale d’adresses, parce que David est fan des adresses postales. Et cette base, ce sont des documents CSV (ou JSON) disponibles chez OpenStreetMap.
Donc David a un plugin qui lui permet de charger dans Elasticsearch la base des adresses, puis d’enrichir les adresses et les localisations GPS en ajoutant la donnée inverse.

Et maintenant, c’est le moment de la démo !

Et franchement, au début, la définition de pipeline d’ingestion est assez facile, et la définition des failure processors est tout aussi facile. J’imagine très bien les interfaces très graphiques faisables là-dessus.
Pour la récupération des données, le fait que ce soit un moteur de recherche fait que des résultats moins pertinents pourront être retournés par les requêtes, mais derrière les résultats les plus pertinents.

Un autre élément intéressant, c’est que la recherche est foutrement rapide : l’ingestion d’une coordonnée GPS avec ajout automatique des adresses (et donc recherche dans l’index des coordonnées) est immédiate (pour autant qu’on puisse le voir). Même si la coordonnée GPS n’est pas exactement la bonne.

Et avec tout ça, et le processor GeoIP, il est par exemple possible d’envoyer un courier à l’adresse donnée lors de la requête HTTP. Ca fout la trouille, hein ?

Au passage, l’un des trucs les plus intéressants selon moi est l’utilisation de JSON pour exprimer les requêtes : le code n’est pas moins clair qu’avec un langage de requête dédié (genre SQL).

Un autre intérêt d’Elasticsearch, c’est qu’il supporte les tâches longues, qu’on peut suivre et gérer (pour par exemple tuer les tâches trop longues).

Non mais, et si on développait vraiment un plugin ?

Eh bien ce serait aussi simple que d’écrire une classe étendant une superclasse abstraite.
Evidement, quand on regarde le code, on voit des choses … curieuses : trouver le point le plus proche en calculant la distance de tous les points, je peux dire que c’est pas le plus efficace (il n’y a pas d’index géographiques ou quadtrees dans Lucene ? Ah si, à priori, avec les bkdtree de Lucene 6).
Dans le même ordre d’idée, déclarer ses plugins en associant une clé à une factory … alors qu’on peut faire du CDI ? C’est pas fameux. mais bon, tout le monde n’est pas censé écrire des plugins.

Conclusion

L’un des plus gros intérêts de cette présentation, c’est de sortir Elasticsearch de son rôle le plus connu de stockage ELK pour bien montrer qu’avant tout, c’est un ETL moderne qu’on sous-utilise volontiers.

Et personnellement, en voyant cette présentation, j’ai eu l’envie un peu folle de resortir mes projets de livestream pour les porter dans une base plus moderne.

Et pour la blague, le premier rang, c’est pratique pour démontrer la présence quand le speaker fait des selfies

Art et science sont-ils miscibles ?

Cette question pas si simple a été posée par Robin sur PodcastScience il y a quelques semaines.

Plus exactement, il disait que l’art et la vulgarisation scientifique avaient des buts contraires. Parce que si la vulgarisation cherche à expliquer simplement une idée complexe, l’objectif d e l’art est tout autre. Et si j’utilise le terme de vulgarisation, c’est à dessein : je n’ai personnellement rien contre (mais je m’éloigne un peu du sujet).

Personnellement, je ne crois pas que les buts en soient si éloignés. Parce que l’art, dans la plupart des cas, est avant tout un appel à l’existence de la part de l’artiste, une création qui n’existe pas forcément pour transmettre une information, mais plus pour créer.

Seulement cette création, cette incarnation d’une idée, a toujours besoin de moyens, de supports. Et ces supports sont des objets, et ont souvent utilisé des techniques de leur temps.

L’exemple le plus classique est éventuellement celui de l’incursion des mathématiques dans la peinture, avec l’apparition de la perspective à la renaissance.

Mais d’autres exemples sont plus intéressants, et devraient toucher plus Robin. J’en ai très particulier en tête : l’oeuvre de Greg Egan, et en particulier ses recueils de nouvelles Axiomatique , Océanique ou Radieux. Il me semble qu’on trouve dans chacun de ces recueils au moins une nouvelle dont le sujet est la manière dont les mathématiques sont, en un sens, un acte de création de l’univers.

On pourrait y ajouter évidement tous ces films de science-fiction à dominante très scientifique, comme par exemple Interstellar, où la science n’est pas seulement un décor aux aventures des héros.

Bref, dire que l’art et la science ne sont pas miscibles me paraît, au mieux, une exagération. En revanche, effectivement, la vulgarisation, elle ne peut que difficilement s’appuyer sur l’art.

Le quidditch, c’est pas si facile

Pour la troisième fois, je me suis lancé dans un des contests de Codingame.

Cette fois-ci, Harry Potter était à l’honneur.

fantastic_bits_ld-compressor-1

Oui, enfin, sans les combats de sorciers

En particulier, le quidditch. Enfin, un quidditch un peu simplifié : seulement deux sorciers, et, surtout, pas de vif d’or. Et heureusement, parce que j’en ai bien bavé pour en arriver à résultat un peu meilleur que la dernière fois, et surtout, cette fois-ci, raisonnablement satisfaisant, vu le temps investi :

score

707 sur 1950 qui passent atteignent le bronze, c’est bien. Mais s’arrêter à la porte de la ligue gold, ça craint.

EDIT : heureusement, une heure plus tard

score_1

Alors, comme la dernière fois, il y a des leçons à retenir.

D’abord, mon code magique qui produit des tests directement à partir du jeu est très pratique, mais nécessite que le code n’utilise jamais de random() sous quelque forme que ce soit. Cela dit, c’est tellement pratique ! regardez mes classes InGameTest, comme par exemple ici

test_generator

Et n’oubliez pas que ça vient directement de l’état du jeu à instant donné !

Ensuite, utiliser le bug tracker de GitHub comme bloc-note, c’est évidement pratique pour me garantir que j’ai traité le sujet efficacement. Et je m’en resservirai.

Enfin, j’avais une première implémentation que je savais boiteuse dès jeudi. Mais, si vous regardez mon historique de commit, vous verrez … rien ! En effet, le code que j’ai mis en place samedi et dimanche n’a pas été placé dans GitHub avant ce soir … Le fameux rush de fin de projet :-). Cela dit, il n’y avait peut-être pas de commits, mais il y avait des tests ! Et j’utilise toujours avec autant de profit mon plugin Maven qui génère le fichier source de codingame. Mais pour en revenir à cette histoire d’implémentation, clairement, il va falloir que je passe plus rapidement à la deuxième implémentation. Je dis deuxième, mais pour Hypersonic, j’ai enchaîné 4 implémentations différentes, donc n’en avoir que deux, c’est déja un net progrès. D’ailleurs, je pense ne pas vraiment pouvoir en faire moins. En effet, mis à part pour les super-tueurs genre Magus, il paraît difficile d’obtenir une première version qui soit à la fois correcte conceptuellement et efficace.

Mais bon, tout ça ne doit pas ôter quelque chose que j’ai écrit sur hypersonic : coder une de ces satanées IA est un sacré challenge, mais aussi un sacré fun. Et pour le coup, le quidditch était très bien grâce à sa complexité.

PS : Bravo à nmahoude :

Utiliser Eclipse derrière un proxy à la con

Vous connaissez les proxy à la con ? C’est une spécialité des grandes boîtes françaises qui ont une vision assez … restrictive … de ce qu’est un « bon » usage d’internet.

Par exemple, j’ai dû il y a peu installer un Eclipse pour me connecter à un serveur Subversion chez un client qui n’autorise pas l’accès à bintray. Pas grave ? Ca dépend.

Par habitude, j’utilise Subclipse. Or, récemment, ils ont changé leur hébergement pour passer .. chez bintray. Du coup, le plugin n’est plus téléchargeable. Heureusement, eclipse est modulaire, et j’ai pu installer Subversive « facilement » : pour installer Subversive, on installe d’abord le plugin, qui télécharge indépendamment les connecteurs sur un site qui a changé. Ca se passe bien sans proxy à la con. En revanche, dans le cas contraire, il faut télécharger l’update site contenant les connecteurs. Et c’est tout aussi merdique (même si, en fait, Subversive semble mieux que Subclipse – au merge dialog près).

Fiddler pour débugger à distance

Vous connaissez Fiddler ? C’est un très bon proxy de débuggage http pour Windows.

Eh bien aujourd’hui, j’ai découvert que je pouvais l’utiliser pour intercepter les requêtes entre un serveur Apache (sur une autre machine) et mon serveur web Java (lui aussi sur une autre machine). Le pire, c’est que ça n’est même pas compliqué.

Il suffit de régler le proxy pour accepter les requêtes distantes

2016-11-04-20_54_19-telerik-fiddler-options

Et de régler le proxy que fiddler utilisera pour recevoir les requêtes pour que ce soit l’autre machine

2016-11-04-20_56_38-telerik-fiddler-options

Et là, les requêtes arriveront bien d’Apache dans Fiddler pour repartir aussi sec vers le serveur.

Très cool.

 

Pédophile, criminel ou malade ?

Ah, ça, c’est sûr, vous ne vous attendiez pas à un titre pareil.

Surtout qu’à priori, je ne vais pas vous parler de ça, … mais en fait si, par un angle détourné.

J’ai récemment ajouté Samedi Noir à la liste de mes podcasts. C’est un podcast de lecture de récits policiers, noirs, fantastiques ou science-fictionesques.

Et le dernier épisode, « le Neither » de Jennifer Haley, explore avec une finesse perturbante la pédophilie. Je ne peux que vous recommander de l’écouter pour comprendre ce qu’est le monde pour un pédophile. Honnêtement, c’est moche, et je n’aimerai pas être à leur place. Pas pour la condamnation morale. Plus parce qu’il s’agit authentiquement d’un délit d’opinion. Pour être plus clair, en France, aujourd’hui, on est condamné pour pédophilie dès qu’on détient des images représentant, réellement ou virtuellement, des images représentant les actes incriminés. C’est un authentique crime iconique : le simple fait de détenir une icône, sans préjuger de son origine, suffit à faire de son détenteur un criminel.
En fait, je ne sais pas dire à quel point, dans le contexte d’une société de l’image elle-même pédophile (regardez les images de mannequins prépubères pour comprendre l’image qu’on veut donner de la beauté : une chose qui n’appartiendrait qu’aux plus jeunes), criminaliser des représentations me paraît dangereux philosophiquement. Je comprend que, pour le législateur, c’est plus simple que de chercher la vérité, et ça achète facilement des voix. Mais je trouve cette solution bien trop criminelle. le législateur, en l’occurrence, sacrifie encore une fois des « malades » pour apaiser l’opinion. Et si je mets « malades » entre guillemets, c’est parce que je suis bien trop conscient que toute pulsion sexuelle peut être criminalisée.

Vite, un chtijug !

Je me demande si je n’ai pas déjà utilisé ce titre …

En attendant, hier soir, c’était chtijug spécial quickies.

HTTPS Everywhere avec let’s encrypt

Le HTTPS c’est mieux pour la confidentialité des utilisateurs. Let’s encrypt est une autorité de certification, dont le client essentiel est certbot.

certbot

Tourne sur n’importe quel Unix (oui oui). Il y a des plugins pour tous les serveurs web, même sur le Raspberry.

Démonstration avec un site Apache

S’ensuit une jolie démonstration avec des poneys en ascii-art. Et tant mieux, parce que certbot a une interface ncurses ! On note tout de suite les problèmes classiques liés à du https : le mixed content (images ou scripts chargés en http, …). Je note également le point « magique » de Let’s Encrypt : obtenir un certificat à la volée, c’est quand même vachement plus rapide que de le réclamer physiquement à un service de sécurité.

Validation du certificat

La partie intéressante de Let’s encrypt, c’est le mode de génération de certificat. Plutôt que d’utiliser la méthode traditionnelle avec échange de mail, ils reposent sur l’exposition d’un challenge en http sur le site pour lequel on veut un certificat. C’est assez malin, car plus facilement automatisable. Et j’imagine que certbot doit pouvoir automatiser ça

Démonstration avec nginx et webroot

Histoire de montrer les capacités de certbot, on refait la démo, mais avec une configuration manuelle, pour nginx.

Intérêt ?

Le certificat est renouvellé automatiquement tous les 90 jours ! Du coup, plus de problème d’expiration. Et ça, pour les noobs de la sécurité comme moi, c’est vraiment cool. Un point important à noter : Let’s encrypt ne fournit que des certificats de classe 1, donc avec une sécurité « moyenne ». Les classes 2 et 3 impliquent des vérifications physiques, qui sont évidement manuelles.

Point bonus : il y a une interface permettant de révoquer les certificats depuis le site de Let’s Encrypt, ce qui provoquera sans doute leur renouvellement automatique.

Ce que la revue de code m’a apporté

Julien commence par nous raconter sa vie de jeune développeur. Et, personnellement, je me reconnais mal là-dedans :

  • la fierté du code produit
  • la propriété du code (c’est le code de Julien)
  • Et enfin, il veut que son code soit beau longtemps

Du coup, ils ont mis en place chez Axa des revues de code avec des rôles identifiés pour limiter les procès en sorcellerie. Malheureusement, j’ai peur que ça ne suffise pas. Du coup, il faut apprendre plusieurs choses (qui, il me semble, font partie de l’expérience du développeur). La première étant évidement de faire preuve de bienveillance envers ses collègues, le fameux « dur avec le code, doux avec les gens ».

Axa consomme environ 5% de son temps à faire de la revue de code. C’est assez peu, vu que ça permet de détecter des bugs (en plus d’assurer une cohérence stylistique des livrables).

A priori, il faut environ 3 mois pour que les revues soient « apaisées ».

A la réflexion, il y a à mon avis quelque chose de complètement biaisé dans le fait que le développeur vienne présenter lui-même son code à un procès en sorcellerie. Il vaudrait sans doute mieux que le code soit défendu par un « avocat » sans que le développeur à l’origine du code puisse être reconnu. Parce que, comme je le dis toujours, le code qui est dans Subversion/Git n’est plus ton code, c’est celui de l’équipe. Et c’est ce qui le rend magiquement sale.

lunrjs

lunrjs est un portage de Lucene pour javascript, utilisé chez Decathlon. Et sur le site de Decathlon, actuellement, quand on change un filtre de recherche, la page est visiblement rechargée (ce qui n’est pas terrible en termes de performances). Un portage, mais un peu restreint, puisqu’on perd par exemple les recherches de termes approchants.

A noter qu’actuellement, le catalogue produits de Decathlon est hébergé en SAAS, ce qui est … osé, je trouve.

Cela dit, je n’ai pas trouvé ça si impressionnant. Parce qu’il existe déja des tonnes d’API javascript pour exploiter le local storage « correctement ». En fait, le seul intérêt de lunrjs, c’est de compléter les recherches disponibles dans Lucene pour les déconnexions, mais je trouve le cas d’utilisation assez rare pour ne pas investir spécifiquement dessus. A mon sens, travailler sur une vraie API client/serveur dans le navigateur permettrait plus facilement d’attaquer ce type de problème. Sauf, bien sûr, si l’objectif du projet est précisément d’étendre Lucene, mais c’est plus de l’ordre du patch que de l’évolution en profondeur.

Cerberus

Donc, cerberus est un outil de test fonctionnel automatique. Des outils comme ça, il y en a … déjà … des tonnes. Alors pourquoi La Redoute s’est lancée dans cette guerre des tranchées ? Comme d’hab, l’hubris (autrement dit « il n’existait pas de solution correspondant à leur besoin »). Cerberus se place donc entre les différentes équipes, pour fournir un référentiel commun. ce qui implique également que les tests puissent être décrits par les fonctionnels ou les développeurs. Et comme un outil comme HPQC, il offre tout un tas de fonctionnalités, comme le support multi-technologies, multi-langues, multi-environnements l’exécution adaptative des tests, la génération de rapports ou l’intégration dans les outils de développement du SI (IC, bug tracker, …).
Bon, j’avoue, j’ai décroché lors de la démo. Parce que vraiment, on est face à de l’outil de test fonctionnel très haut niveau, où les étapes peuvent être effectuées manuellement ou automatiquement. Ce qui ne m’inspire qu’une chose : ces outils ne sont pas faits pour le monde d’aujourd’hui, mais pour les bonnes grosses applications traditionnelles des entreprises qui ont encore des équipes dév, fonctionnelles, test, différentes, et des processus de livraison longs et lourds. Dans ce cadre, j’imagine que ça doit marcher. Mais dans le cadre hyper-mouvant du web de 2016, je ne suis pas sûr que ça bouge assez vite.

Conclusion

Je peux paraître un peu dur avec certains des talks, mais ça n’est pas mon but. Le contenu ne m’a peut-être pas autant intéressé que les orateurs l’auraient souhaité, mais ça n’ôte rien à leur prestation. Les quatre présentations étaient en effet bien préparées, construites, bien organisées. C’est juste que chaque auditeur met ses propres filtres sur les sujets qui lui sont présentés … Bravo encore au chtijug qui arrive toujours à trouver des choses intéressantes à nous présenter (eh oui, ça n’est pas parce que ça ne m’a pas plu que ça n’était ps intéressant).

Vendredi, c’était TakeOffConf

Vous ne connaissez pas la TakeOff ? la conférence la plus barbue au nord de la Seine ? Tant pis pour vous. Par une chance extraordinaire, j’ai pu obtenir une place pour assister aux conférences du Vendredi … Mais du fait d’obligations, je n’ai pu voir que celles du matin. En voici un rapide compte-rendu.

How to rescue tech migrants from Brexit

Un talk « tongue in cheek » expliquant que les anglais allaient fuir leur pays pour venir se réfugier … à Lille. Il recense quelques bonnes habitudes à prendre pour intégrer les nouveaux, comme par exemple trouver un tuteur pour les nouveaux arrivants, faire en sorte de vaincre les problèmes d’I18n/l10n comme par exemple

  • Vaincre la barrière de la langue
  • Les foutus claviers différents

C’était pas mal, et très flatteur pour Lille

Create modern web APIs in minutes

Ca parle d’API Platform, en PHP

Il y a plein de standards de description d’API

  • Swagger
  • JSON-LD (standard W3C), déjà utilisé et compatible web sémantique
  • Schema.org vocabulaire ouvert pour le web, hébergé par le W3C, compatible JSON-LD
  • Hydra
  • RAML

API Platform, donc, permet de développer une API en PHP et supporte tout ça, ainsi que tout un tas de features habituelles comme la pagination, le filtrage, l’auth (JWT, Oauth), le cache, CORS. Bon, je suis un peu passé à côté en bon développeur Java(EE).

Sharing code between web and native mobile apps

Dans le développement mobile, maintenant,

  • Web => Audience
  • Native app => rich experience.

Du coup, les deux sont nécessaires. Et donc NativeScript fournit un truc qui ressemble à ionic pour Angular 2

Le plus gros avantage, c’est qu’avec electron, on peut aller jusqu’aux applications Desktop

Il y a néanmoins un système de distribution curieux avec WebPack et des extensions de fichier selon le canal d’utilisation. mais là, c’est sans doute ma méconnaissance du sujet qui parle.

Let your devices talk to each other

Dans l’IoT, les données sont centralisées (et pas stockées sur les machines). Et c’est galère quand les serveurs tombent en rade. Au contraire, en M2M, les données sont décentralisées. Du coup, pourquoi ne pas utiliser les concepts du second dans le premier ? Par exemple, en laissant les devices se découvrir en P2P. Mais comment se connecter en P2P sur un réseau local ? En utilisant de la discovery (Bonjour, JmDNS, UPnP)

Et que vient faire CouchBase là-dedans ?

Présenter Couchbase Lite ! En ayant une base de données locale synchronisable avec le serveur, on permet plus facilement la déconnexion du serveur. Et la base peut se synchroniser en P2P. Clairement, ça aurait pu me servir il y a des années.

Building a Web API with Hanami

Pas de monkey patching, pas de method_missing … Construit en opposition avec Ruby on Rails, autrement dit. C’est un framework web pour Ruby qui semble assez élégant et conçu autour de concepts très simples. Mais bon, comme pour le PHP, ça ne me touche qu’à moitié.

Elixir a language for the Future

Dans ma mémoire, c’est un framework web basé sur Haskell … mais en fait, c’est un langage pour le futur.

Pour le speaker, le futur est

  • Dynamique
  • Concurrent. Et pour ça, Ericsson a inventé … Erlang !

Du coup, Elixir, c’est

Ruby+Erlang+steroids=Elixir !

Quelques éléments sont bluffants, comme le pattern matching sur les paramètres de méthode. D’autres sont … moins impressionnants, comme l’utilisation de tous les coeurs qui surprend en Ruby, mais vraiment pas en Java.

Et c’est tout ?

Ben oui, c’est tout. le reste du temps, j’étais pris. Cela dit, c’était un chouette moment.

Petit projet d’hiver : une webradio sur raspberry

Il y a quelques années, j’ai acheté une radio philips NP 3300. C’était un chouette petit gadget qui me permettait d’écouter des radios sur le web (bon, ça, c’est sympa, mais sans plus), mais aussi toute ma bibliothèque musicale via UPnP (oui, encore un protocole qui n’a pas perçé). Et tout ça en se connectant en wifi au web. Et c’est très cool.

Ca marchait bien au début.

Et très vite, on a rencontré des soucis : l’appareil ne trouvait pas les radios, ou alors il restait complètement bloqué et on devait redémarrer. En plus, les rares mises à jour n’ont jamais apporté de corrections, mais juste des saletés comme le support de Spotify. Spotify … Quand je peux avoir toute ma bibliothèque UPnP ! Quelle honte.

Donc, depuis quelques temps, ce petit appareil dort dans un coin du salon. Et c’est très frustrant. Parce que quand il marche, le son est bon.

Du coup, en bon vieux geek qui a déjà mis en place un raspberry, j’avais déjà vu « quelques trucs » qui avaient l’air cool (connecter des trucs comme un écran LCD, des boutons, des haut-parleurs, ou alors installer une webradio). Et j’y ai réfléchi. Et encore réfléchi. Et donc, aujourd’hui, j’ai pris le taureau par les cornes. J’ai démonté mon NP 3300 pour regarder ce qu’il y avait dedans histoire de savoir quelle était l’ampleur de la tâche.

Il va donc me falloir

  1. Un raspbery 3 (pour avoir le wifi déjà configuré, c’est pratique !)
  2. Une carte MicroSD d’au moins 8 Go
  3. Un moyen d’alimenter mon Raspberry depuis une alimentation 9V/1.1A
  4. Une connexion pour mes deux hauts-parleurs 6 ohms/1.5 Watts (pour lesquels je n’ai, semble-t-il qu’une paire de câble directement connectés à la bobine)
  5. Une connexion pour les boutons sur le dessus de l’appareil … c’est une nappe de 13 fils dont un rouge … la masse, j’imagine)
  6. Une connexion pour l’écran LCD. Et là, je dois dire que je suis bien embêté, parce que la nappe de l’écran intègre également la LED de la télécommande infrarouge.

D’où le terme de projet d’hiver : tout ça va être sans doute assez long à mettre en place. J’essayerai de rassembler tout ça sur ce blog, histoire d’avoir une trace du bazar. Mais ça pourrait ne pas être simple.

Je ne suis pas hypersonic sur CodinGame

Depuis deux ou trois semaines, avec quelques collègues, nous avons créé des comptes CodinGame et nous nous sommes lancé dans les jeux pour programmeurs qui y sont disponibles.

Au début, c’était simple …

Et puis, il y a deux semaines, ils ont lancé Hypersonic. Bon, hypersonic, c’est pas bien compliqué, c’est faire jouer un bot que vous programmez. Donc j’en ai codé un.

Et j’ai fini quasi-dernier en bronze.

Vous pouvez lire le post-mortem que j’ai écrit pour y voir les leçons techniques.

J’en tire quelques autres leçons, plus humaines.

La première est assez logique, pour un jeu : c’est la chose la plus amusante, la plus prenante, et la plus crispante que j’ai codé au moins cette année, et facilement ces cinq dernières années. Imaginer un algorithme, le développer, et le voir se comporter, même mal, a ce côté démiurgique qui est la raison pour laquelle je suis développeur. Le corollaire évident, c’est que je ne comprend toujours pas pourquoi mon métier est aussi chiant actuellement : j’ai utilisé des méthodes professionnelles pour développer ce bot : tests, profiling, … Et c’était vraiment amusant. J’en tire la conclusion que notre métier est chiant parce que les demandes des clients sont, la plupart du temps, d’un ennui mortel.

La seconde est assez logique, mais moins drôle : j’ai fini 1675ème ! C’est médiocre, évidement. Et c’est vrai que mon bot était médiocre : des timeouts partout, et des décisions suicidaires encore plus souvent. J’ai pris une vraie leçon d’humilité, ce qui est toujours bien.

La dernière est plus intéressante : on est certes loin du fameux « meilleur programmeur de France », mais il y a beaucoup de monde, et qui semble prêt à y passer beaucoup de temps. Autrement dit, les développeurs sont des gens passionnés, prêts à se confronter les uns aux autres, et à communiquer autour de leurs succès ou de leurs échecs.