Un abandon nécessaire

La semaine dernière, j’ai appris par des moyens inhabituels que Thalès organisait un concours Codingame. Donc je me suis inscrit, bien sûr.

Et comme d’habitude, je suis parti dans une implémentation basique en Java, avec une machine à états simple et un système multi-agent rudimentaire. Autrement dit, mon algorithme correspondait à ça

  • Tu as le drapeau adversaire ? Rentre dans notre base
  • Tu n’as pas le drapeau ?
    • Tu es le plus proche du drapeau enemi ? Va le chercher
    • Tu es le plus proche de notre drapeau ?
      • Il est sur un adversaire ? Poursuis-le et percute-le
      • Il est dans notre base ? Mets-toi entre lui et les adversaires

C’était naïf, et raisonnablement fonctionnel. Du coup je me suis mis en tête de l’améliorer. Et chaque modification que j’apportais le rendait un peu moins bon. Mais, à cause de l’hubris des développeurs, j’étais convaincu de tenir une solution améliorable. Résultat ? Mercredi soir, alors que j’implémentais un moteur d’évitement (lire un calcul géométrique basique), je me suis rendu compte que j’avais perdu du temps avec des raffinements inutiles alors que j’aurais clairement dû reprendre les choses de zéro et partir sur une solution plus intelligente.

Et je ne l’ai pas fait.

En fait, j’ai arrêté de coder histoire de réfléchir.

Parce que je n’ai de bons résultats à aucun jeu basé sur la géométrie continue, avec des trajectoires, des mobiles à inertie. Alors que quand la géométrie est discrète (façon bomberman ou hypersonic) j’ai des résultats intéressants. Pourquoi ?

Il s’avère que dans le second cas, j’ai un modèle d’implémentation de jeu que je peux « facilement » décliner. Mais je n’ai toujours rien dans le premier. Il me faut donc trouver une bonne intuition. En l’occurrence, j’ai la nette impression que modéliser cet environnement par un champ vectoriel serait une bonne idée. MAIS je ne veux pas discrétiser (c’est-à-dire découper le terrain en petits carrés). Parce que c’est long, et surtout parce que c’est moche.

Et comme je ne mets aucun espoir dans mes possibilités de victoire, je préfère travailler le style. Du coup il me faut quelque chose qui respecte mes envies de style. Et ces histoires de champ vectoriel, ça ressemble d’assez près aux équations de champ magnétique. Il va donc falloir que j’y jette un oeil sérieux. Mais ça, évidement, je ne peux pas le faire pendant un contest. Je vais donc mettre ce hackathon de côté et, quand j’aurais retrouvé la patate, je m’attaquerai de nouveau à un contest dont je ne suis toujours pas satisfait, bien que je sois gold : Coders Strike Back. En attendant, je vais me reconcentrer sur Code of Kutulu, pour deux très bonnes raisons

  1. Je vais le faire (mal sans doute) en Rust
  2. Ce contest sort pour une bonne partie de l’esprit de nmahoude, qui ne peut pas avoir eu une mauvaise idée
Publicités

Bonne année !

Bon, le temps de la trêve des confiseurs est certes passé, et je devrais plutôt me prolonger dans l’avenir. Mais je me dois auparavant de faire un bilan de cette année 2017.

Et si l’année avait plutôt mal commencé, elle a pris un virage sacrément intéressant avec mon arrivée chez Zenika. Et, pour la première fois depuis bien longtemps, je suis dans une boîte où, si il y a des médiocres, je ne les ai pas encore vus. Et ça, c’est spectaculairement intéressant.

Du coup, je me suis retrouvé à apprendre et tenter plein de trucs :

  • Couchbase et OAuth
  • Consul, Traefik, Ansible

Et depuis le début de l’année, j’ai même fait un peu de nginx + lua.

Bref, je me retrouve à faire ce qui fait plaisir à tous les informaticiens du monde : découvrir de nouvelles technologies et tenter de nouveaux trucs. Et qui plus est, je le fais à un âge où, heureusement pour moi, le buzz ne prend plus si facilement que ça. Du coup, j’ai un oeil critique sur tous ces gadgets … critique et parfois même acerbe, c’est vrai. Cela dit, cette critique est parfois fondée quand je vois le buzz qui est fait autour de certains produits quisont loin d’être aussi fameux que ce que la rumeur publique prétend … mais j’y reviendrai peut-être.

Et du coup, 2018 …

2018, ce sera une année … différente.

En 2018, je garantis qu’il y aura enfin des nouvelles de ma radio internet … puisque j’ai acheté un Raspberry et une carte Pi-DAC+.

Il pourrait également y avoir (avec pas mal de chance) une présentation … à DevoxxFr (et si je n’y fait pas de présentation, attendez-vous à voir une bonne grosse rafale d’articles sur toutes les présentations que j’y verrai).

Il pourrait aussi y avoir un retour à Codingame … en Kotlin … ou en Lua, parce que je trouve le langage assez simple et marrant.

Bref, il y aura encore de la vie sur ce blog.

Codingame : fin de partie

Il y avait ces dix derniers jours un contest codingame.

Et j’étais assez bien parti, puisque je suis arrivé en ligue silver. Malheureusement, à un moment donné, je me suis rendu compte que j’y passais sans doute trop de temps.

J’ai donc décidé d’arrêter de participer aux contests codingame. D’ailleurs, je ne pense pas me remettre à codingame, même en-dehors des contests, avant un bon moment. Je retire de nombreuses choses de mes participations que je vais tenter de découper en plusieurs morceaux

Wondev Woman

Sur le contest proprement dit, c’était bien. J’avais commencé à coder mardi un algorithme conceptuellement proche de celui que j’utilisais pour Hypersonic, me permettant théoriquement de faire une analyse complète du plateau à plusieurs tours d’avance. J’achoppais sur un problème de chargement des directions possibles, mais j’avais en tête une solution.

Mais avant un peu de vocabulaire

  • J’appelle action une action complète (MOVE&BUILD ou PUSH&BUILD).
  • Un mouvement est un élément d’une action (déplacer la case « active » dans le futur d’une des directions possibles). Donc si on y réfléchit bien, une action est une paire de mouvements. Petite révélation : la différence entre PUSH&BUILD et MOVE&BUILD est que, dans le premier cas, le premier mouvement arrive sur une case occupée

Du coup, mon algorithme devenait quelque chose ressemblant à

  1. Calculer les mouvements possibles au tour courant pour mes pions
  2. Pour chaque mouvement, calculer l’état du terrain après le mouvement (sans tenir compte de la position des joueurs). Il va y avoir des tonnes de superposition, qui correspondent à des futurs communs, ça offre une bonne réduction de l’espace de recherche.
  3. Scorer les positions des pions. Pour les meilleures positions, recommencer à l’étape 1. Le score utilisé doit être indépendant de la longueur des chemins

A mon avis, avec ça, j’aurais pu atteindre l’or. mais.

  • Implémenter un tel code est long, et assez fastidieux.
  • J’ai eu cette idée uniquement parce que j’ai repris hypersonic après la fin du contest
  • Je n’ai ni la motivation, ni le talent pour atteindre la légende (mon meilleur score à été d’atteindre le fond de la ligue gold).

Plus généralement

Ces constats, qui ne sont pas d’ordre techniques mais personnels, sont reproductibles pour tous les problèmes de codingame : il y a de bien meilleurs joueurs que moi, et je le vois clairement.

A mon avis, c’est parfait pour découvrir un nouveau langage. Et en réalité, attaquer ces problèmes en Java était pour moi une facilité. En théorie, j’aurais dû les attaquer en Python, en Scala, ou dans n’importe quel langage dans lequel j’ai envie de progresser vite.

Parce que les structures de données que j’ai mis en place, contrairement à d’autres participants, faisaient la part belle aux design patterns, à la bonne programmation orientée objet, bref au code Java bien idiomatique. Et je sais que j’aurais fait pareil dans d’autres langages.

Du coup, je vais arrêter d’y jouer en Java, et je m’y remettrais si je dois découvrir un nouveau langage.

Je déteste encore git

J’ai déja écrit que je détestais git ? OUI.

Mais, en un sens, ce que je déteste au moins autant, c’est de me faire prendre pour un con.

Tiens, par exemple, quand j’écris un peu énervé

C’est quand même un peu vexant de se voir répondre

https://twitter.com/_Christ_OFF_/status/742378259128692736

Me dire ça, à moi … Me dire que la meilleure façon d’utiliser cet outil difficilement compréhensible, c’est passer par nodejs et chromium … mon dieu.

Et puis, surtout, mon problème n’a rien à voir avec git en tant que tel, mais plus avec la façon foireuse de git d’utiliser la configuration système. Regardez un peu la question StackOverflow que j’ai posé à ce sujet … c’est assez merdique.

Cela dit, quelque chose m’a un peu intrigué. Ce tweet, en particulier.

Là, vous voyez, il y a un problème : le bon outil est ergonomique. Et quand je vois le nombre de personnes qui galèrent pour l’utiliser, sans même parler de l’utiliser correctement, je me demande si, réellement, il y a eu un gain si net par rapport à Subversion. Bon, pour le noyau Linux, clairement, ça doit être indispensable.

Mais ai-je besoin du même genre d’outil pour un projet qui ne va être partagé qu’entre quelques machines de développement et un serveur d’entreprise ?

Ai-je besoin d’un outil développé essentiellement pour des gens qui considèrent que l’ergonomie de la ligne de commande de Linux est un must insurpassable ?

Ai-je besoin d’un outil dont la l’intégration avec Linux est tellement poussée que le moindre problème dans la configuration réseau doit se résoudre dans les fichiers de configuration ssh du compte utilisé ?

Bref, encore une fois, je suis perplexe devant la faculté du monde du développement à adopter un outil inergonomique, rempli de fonctionnalités inutiles, et totalement inopérable pour peu que cet outil permette de démontrer une forme tordue de supériorité intellectuelle.

Et là, je me rends compte qu’en un sens, le Python ou plutôt sa communauté a peut-être changé ma perception de ce genre de choses …

#devoxxfr – Rideau !

Devoxx est fini, et je suis dans le train.

Ce que j’en retire conceptuellement

Globalement

En montant dans le train, j’ai croisé l’un des GO du chtijug qui n’a pas eu la chance de venir à Devoxx, qui m’a demandé quels étaient mes trois talks préférés. Sans hésiter, j’ai répondu « la troisième matinée de keynotes sur l’impact social du développeur ». Et, vraiment, je le pense. Ces quatre talks m’ont, chacun à leur façon, soigneusement mis en face de mes contradictions, et des contradictions de mon métier face au monde actuel. Ca me fait bien comprendre certains engagements citoyens que je vois émerger. Et clairement, ma vision du monde est changée. Ca, c’est ce qu’on pourrait appeler un point de vue stratégique.

Localement

D’un point de vue plus tactique, pour filer la métaphore, j’ai vu un très chouette talk d’architecture de Simon Brown qui m’a enfin permis de comprendre un point clé sur l’opposition monolithe/micro-services. Je vous explique : d’habitude, on les oppose soigneusement, comme si il n’y avait pas d’intermédiaire. Or, Simon démontre dans sa présentation que l’opposition est idiote, et qu’il existe un continuum entre les deux, ce continuum reposant sur une espèce de curseur d’isolation des composants : si votre application est un plat de spaghettis, vous êtes évidement dans la merde pour passer aux micro-services. Mais, si vous l’organisez proprement, est-ce que vous êtes sûrs que vous aurez besoin des micro-services ? Est-ce que vous ne pourrez pas développer des composants d’un niveau d’isolation équivalent sans passer par le plat de spaghetti réseau des micro-services ? L’organisation en composants étant, évidement, très proche de la vision de DDD proposée par Cyril Martraire dans son talk-surprise. Et cette vision d’une application correcte va évidement faciliter pas seulement le développement, mais aussi l’exploitation et la sécurisation. Un tout bien propre sur lui, donc.

Et dans ce tout, comment vient s’intégrer la blockchain ? Parce que bon, je me suis tapé en tout au moins 4 heures sur le sujet. Eh bien, je dirais que c’est le chaînon manquant. Je vous explique … Actuellement, les applications que nous écrivons sont opaques, et aussi dignes de confiance que, par exemple, le fameux système de paye des militaires qui ne marche pas. En effet, l’exécution du code se passe dans un silo bien protégé, quand bien même votre code n’a pas grande chose de plus confidentiel que, disons, un hébergement de blogs, un hosting d’applications façon clever cloud, ou autres. Avec la blockchain, et en particulier avec ethereum/embark, l’exécution de votre code devient une chose publique (inarrêtable, mais c’est un autre sujet), aussi bien dans son exécution que dans ses résultats.

Par exemple, si le calcul de vos impôts était rendu public, qu’est-ce qu’il se passerait ? D’abord, instantanément, votre situation fiscale (donc financière), deviendrait publique. Vous imaginez le choc dans notre pays de l’argent tabou ? Si on met ce point révolutionnairement épineux de côté, vous auriez aussi la garantie de la justesse de son exécution, parce que cette exécution serait reproductible, et reproduite sur tous les noeuds du réseau l’hébergeant. En bonus, cette information serait infalsifiable. D’autres informations pourraient également bénéficier de ces propriétés de façon moins polémique. Par exemple, à mon sens, la prochaine machine à voter infalsifiable et légalement correcte s’appuiera sur une blockchain (ça posera juste le problème de la disponibilité des votes avant la fin du scrutin, mais j’ai à dire vrai de plus en plus de mal à comprendre le sens de ce secret).

Ce que j’en retire humainement

Il y a un côté un peu … déstabilisant … à se retrouver d’un coup plongé au milieu de plusieurs milliers de développeurs parlant tous de Java, d’exception, de déploiement, de l’impact du ClassLoader sur les performances, de frameworks plus ou moins connus, et de toutes ces choses sur lesquelles j’ai quelques connaissances, mais finalement beaucoup moins que ce dont je peux avoir l’impression hors de cette fête. Mais une fois que ce sentiment est dépassé, il ne reste que le plaisir.

Ou plutôt les plaisirs.

Il y a d’abord le plaisir évidement d’entendre des gens intelligents détailler avec talent des idées qui font rêver.

Il y a ensuite le plaisir humain de pouvoir avoir des discussions intéressantes, intelligentes avec tout un tas de personnes : Clément, Julien, tous les castcodeurs (et en particulier une discussion vraiment chouete avec Vincent Massol sur XWiki, mon usage, son avenir).

Et, même sans forcément leur parler, le plaisir de voir les orgas réussir un bon sang de truc génial, avec une banane incroyable malgré la charge évidente de faire tenir cet édifice sur leurs épaules. J’ai croisé cinq ou six fois Nicolas Martignole, à chaque fois j’ai été de lui lancer un « welcome to the jungle », mais il courrait tellement dans tous les sens qu’il n’aurait probablement rien entendu.

Bon, évidement, tout n’est pas parfait : un talk franchement moins bon (de mon point de vue), deux sessions annulées (mais une remplacée avec talent), un village des exposants qui m’a franchement laissé froid (à part les stands Zenika & Murex – longuement squattés Jeudi soir – et la bière Sonar – abondamment bue le même soir). Et puis surtout, le pire : la terrasse du palais des congrès fermée malgré un temps qui, franchement, s’y prêtait.

Ouais, Nicolas Martignole écrira sans doute un bel article la semaine prochaine sur le blues des orgas, mais je ressens, moi, malgré le retour à la maison, le blues du spectateur qui retourne à son vieux projet après avoir vu, et eu, des idées géniales. Enfin, géniales, à mon niveau :

  • Implémenter browserWatch dans Wisdom framework – après avoir vu les boucles de feedback pour développeurs
  • Ecrire une application de nomic sur la blockchain (dans un ethereum de test pour commencer) – ça impliquera des programmes auto-modifiables
  • Ajouter une sortie graphml/archi au plugin maven de structurizer
  • Peut-être commencer à faire des prez publiques, genre au chtijug, justement sur Wisdom pour commencer, avant de tenter un « développeur à 40 ans, so what ? »
  • Trouver un moyen de manger un jour avec autour de la table quelques personnes à Lille qui devraient se rencontrer
  • Me créer un autre job ? Devenir politicien-développeur ?
  • Et surtout, surtout, commencer à militer dès Lundi pour revenir à Devoxx du 5 au 7 avril 2017 … et avec quelques collègues de plus.

Et, si jamais certains membres de l’organisation tombent sur ce post, merci à eux pour tout (sauf pour la selfie durant la keynote, ça, c’était too much :-)).

Changement de ligne

Depuis quelques temps, j’éprouve le besoin de … changer la ligne éditoriale d’airain de ce blog. Aujourd’hui, je pense qu’il est temps. Ne vous inquiétez cependant pas trop, ça restera avant tout un blog d’opinion. On verra toutefois où ces opinions me mènent … Cela dit, il y a des chances certaines que je parle […]

Pas le temps

Pas le temps, pas le temps, je cours tout le temps.

En fait, j’aimerais bien bloguer un peu plus, mais en ce moment, je dois avouer que c’est un peu la course à l’échalotte permanente. Parce que, vous savez, j’ai changé de boulot.

Et le changement n’a pas été que facile.

Parce que le travail de consultant, et plus particulièrement d’architecte, est bien plus complexe que ce que je (et ce que les développeurs en général) croyait. D’ailleurs, il suffit de se demander ce que fait un architecte logiciel … C’est vrai, ça fait quoi ?

En vérité, je n’en sais pas grand chose. La seule réponse que je puisse donner est

Un architecte, ça fait … tout ce que vous imaginez qu’il puisse faire

C’est flou ?

Ca fait de moi le factotum de chaque projet auquel je peux participer ?

C’est vrai, mais c’est aussi tout l’intérêt du poste : se poser des questions inattendues, avoir la possibilité de créer des liens entre différents concepts pour en tirer des applications intéressantes.

Du coup, ça rend un peu d’intérêt au poste, non ?

En fait, ça lui en donne beaucoup, même si ça vide un peu la tête : il n’est pas rare que, le soir, en rentrant chez moi, je ne puisse rien faire de plus intelligent que casser du tank.

Tout ça fait que j’ai un peu moins de temps pour ce blog. Mais, ne vous inquiétez pas, j’y pense encore.

Mais quel fichu manque d’imagination je peux avoir !

Quand j’ai commencé à fréquenter les recoins sombres d’internet, je n’y connaissais rien en sécurité. J’avais donc, comme tout le monde, un unique mot de passe d’à peine huit caractères (dont un chiffre, heureusement).

Et puis j’ai peu à peu compris qu’un seul mot de passe pour tous les sites, c’était à peu près utile qu’aucun mot de passe. Hélas, si j’utilisais plusieurs mots de passe, comment me souvenir de quel mot de passe était utilisé pour quel site ? Et c’est là que j’ai découvert l’excellent Keepass. C’est donc tout naturellement que j’y ai stocké tous mes mots de passe, protégés par un mot de passe maître d’une longueur … insolente.

Hélas, cette phrase pouvait facilement être retrouvée sur le web, puisqu’il s’agissait de l’une de mes signatures mail/usenet (d’ailleurs, c’est à nouveau, après des errances diverses, ma signature mail/usenet).

Or j’ai découvert récemment les progrès dans les tables d’attaque utilisées par les pirates divers et variés, et donc par les gouvernements qui les emploient. Ce qui m’a poussé, naturellement, à changer ce mot de passe.

Et je dois dire que c’est un changement franchement flippant. Ce mot de passe, c’est, grâce à Keepass, le seul que je connaisse. Il est certes long, mais il est unique et bien ancré dans ma mémoire. Du coup, le changer, ça me fait flipper. Parce que si je le perds, je perds absolument tout : plus d’accès à mes mails, ni à tous les sites web auxquels j’ai pu me connecter.

Je crois qu’il est enfin temps pour moi de passer, pour certains services critiques, à l’authentification à deux facteurs … Ou plutôt à une forme spécifique de celle-ci pour Keepass.

N’empêche, j’ai tellement peur de perdre ce mot de passe que je me demande si je ne vais pas le noter dans un coin secret …

Déprime

Désolé pour mes lecteurs assidus, mais en ce moment, entre une vie personnelle … pas joyeuse … et une actualité rance, je n’ai pas grand chose d’intéressant à écrire, d’où le silence. J’ai néanmoins une réflexion à offrir à la lumière des récentes histoires (lamnetables) de la journée de retrait de l’école. Apparement, la fameuse […]