Postgis, GeoJSON et approximations

Chez Karnott, nous usons et abusons de Postgis, cette extension PostgreSQL qui permet de stocker de nouveaux types géographiques et ajoute beaucoup de fonctions bien pratiques pour requêter en SQL dessus.

Pour bien comprendre, rien de mieux que leur exemple sur leur page d’accueil :

SELECT superhero.name
FROM city, superhero
WHERE ST_Contains(city.geom, superhero.geom)
AND city.name = 'Gotham';

On comprend tout de suite qu’une ville a une entité géométrique geom, qu’un superhero a une position, et qu’il est possible de requêter tous les superhero de Gotham.

L’une de nos dernières fonctionnalités avec Postgis, c’est d’avoir importé l’intégralité du parcellaire français (anonymisé) pour faciliter la vie de nos agriculteurs lors de la saisie de leur parcellaire chez Karnott. Ils n’ont plus qu’à faire clic clic dans l’interface, les parcelles étant déjà dessinées pour eux.

Mais côté technique, comment cela se déroule ? Comment représenter une parcelle agricole à travers une API ? Il y a beaucoup de formats et de standards pour représenter des polygones. Par homogénéité avec le reste de notre API, nous avons naturellement choisi de représenter tous nos objets géographiques en GeoJSON (RFC 7946) . Et pour cela, Postgis est plus que pratique !

SELECT ST_AsGeoJSON(field.geom) from field limit 1;

Par défaut, nous allons avoir quelque chose du genre :

{
    "coordinates": [
        [
            [
                0.584523334321845,
                42.9562400255637
            ],
            [
                0.585194166712806,
                42.9565556385987
            ],
            [
                0.586094811603247,
                42.9566130759021
            ],
            [
                0.586148521684631,
                42.9564425054839
            ],
            [
                0.584523334321845,
                42.9562400255637
            ]
        ]
    ],
    "type": "Polygon"
}

Vous remarquerez que les coordonnées sont fournies en Degrés Décimaux, et non en Degrés Minutes Secondes. Pourquoi pas. Cela dit, si l’API doit retourner une centaine de parcelles comme sur l’écran vu précédemment, la taille du JSON associé est trop conséquente. (Une parcelle contient rarement 4 points comme dans mon exemple, mais plutôt une 20aine!)

Se pose alors une question : Quel intéret d’avoir 15 décimales après la virgule ?

Nombre de chiffres après la virgule Equivalent en mètres
0 111.32 km
1 11.132 km
2 1.1132 km
3 111.32 m
4 11.132 m
5 1.1132 m
6 111.32 mm
7 11.132 mm
8 1.1132 mm

8 chiffres après la virgule : 1mm. Autant dire que 15 chiffres, ça n’a aucun sens!

Heureusement, Postgis vient encore à la rescousse. Pour 6 décimales, il suffit de demander…

SELECT ST_AsGeoJSON(field.geom,6) from field limit 1;
=>
{
    "coordinates": [
        [
            [
                0.584523,
                42.956240
            ],
            [
                0.585194,
                42.956555
            ],
            [
                0.586094,
                42.956613
            ],
            [
                0.586148,
                42.956442
            ],
            [
                0.584523,
                42.956240
            ]
        ]
    ],
    "type": "Polygon"
}

 

Et voilà une API qui a divisé sa taille par 2!

En Conclusion

Postgis est vraiment un outil puissant et pratique. En contrepartie, Postgis embarque avec lui toute la complexité du monde de la GeoData, avec son système de projection, ses transformations et ses approximations. Si nous avions un retour d’expérience à faire, c’est de bien lire la documentation de chaque fonction, et de ne jamais se fier aux valeurs par défaut.

Un an en tant que CTO, retour d’expérience

Il y a tout pile un an, le 1er juin 2017, j’ai rejoint Karnott en tant que CTO.  Durant cette année passée, on m’a souvent posé la question suivante : « Mais finalement, un CTO dans une startup, ça fait quoi ? » J’avoue que je n’en savais pas grand chose, ayant travaillé pendant 10 ans principalement pour des grands comptes, et d’ailleurs je ne sais pas si il y a une unique réponse à cette question. Je vais juste essayer de faire un petit retour d’expérience, et raconter ce qu’il s’est passé durant cette année.

Mais revenons encore un an en arrière. En 2016, Antoine Dequidt et Alexandre Cuvelier, les deux fondateurs de Karnott, ont confié la concrétisation de leur idée à des développeurs de leur connaissance. Le truc quand on a une idée, c’est qu’on est très loin d’imaginer du premier coup le produit parfait. On ajoute à ça une pincée de développement au forfait, des spécifications fonctionnelles imprécises, et des technologies pas toujours adaptées, et on arrive à un projet qui fonctionnait tout de même, sans répondre totalement au besoin initial.

Je suis donc arrivé dans ce contexte. Mon premier job a été de m’approprier le projet, le fonctionnel, le code, et d’y mettre ma patte. Fiabiliser le bousin, mettre des tests, de l’intégration continue… Ce qui a toujours été super chez Karnott, c’est que dès le premier jour, j’ai eu la contrainte de devoir être au petit soin avec la prod’. En effet, nous avions déjà des utilisateurs, et même si certains jours cela démangeait de tout défaire pour repartir de zéro, il fallait se réfreiner, planifier, réfléchir, et prévoir des plans de migration. Avec le recul, je me dis que cette contrainte de la prod’ m’a aidé à concevoir un système plus solide et pragmatique.

Sur certaines parties, j’ai aussi compris que j’avais besoin d’aide. Typiquement je suis un très mauvais intégrateur web… Et j’en ai tiré la première leçon primordiale :

En tant que CTO, je n’ai pas la science infuse

Alors on s’est entouré. Tout d’abord avec de la prestation, des partenaires en qui nous avions confiance (Coucou Sfeir et Tymate <3 ), avec en parallèle la volonté d’embaucher une équipe de développeurs à embarquer dans l’aventure… Fin aout puis début octobre 2017 nous ont donc rejoint François, dev Front React, et Georges, Fullstack Ruby. 3 développeurs, avec 3 profils complètement différents. Il a fallu apprendre à se connaitre, et cela fit apparaitre la composante la plus importante de mon boulot de ces 12 derniers mois :

En tant que CTO, je m’assure de la cohérence de l’équipe et du projet

Je considère la cohérence humaine et technique comme intimement liée. La technique doit répondre à un besoin fonctionnelle et des contraintes (IOT, scalabilité…), mais dès le premier jour, nous étions tous d’accord sur le fait que tout le monde travaillerait sur l’intégralité de la stack. Il a fallu se mettre d’accord sur des technos que nous avions tous envie d’apprendre, avec lesquelles nous serions productifs. Le choix le plus significatif a été de refondre l’api en Golang. On pense ce que l’on veut du langage (à titre personnel j’aime beaucoup cet article de Sylvain Wallez qui résume bien ma pensée), mais il a eu le mérite de nous permettre de refondre une API complète en quelques mois, de résoudre nos soucis de performances et surtout d’être « facilement » maitrisée par toute l’équipe.

La mise en place d’une équipe, c’est aussi mettre sa casquette d’agiliste, et proposer tous les rituels qui nous permettent de partager et collaborer tous les jours. Daily Meetings, Rétro, Pull Requests systématiques, Sessions de Code Reviews… Si l’on veut travailler sur l’intégralité de la stack et ne pas risquer l’isolement de la compétence, ces étapes sont juste indispensables.

En parlant d’isolement, un autre risque est que l’équipe de devs s’isole du reste de l’entreprise. Chez Karnott, toute l’équipe commerciale est issue du monde agricole. La connaissance métier, c’est eux qui l’ont, et nous ne devons jamais l’oublier. Il est tellement facile de développer des fonctionnalités techniquement sympa, mais complètement à côté de la plaque… Alors voilà :

En tant que CTO, je m’implique dans la réflexion autour du produit

Si l’équipe commerciale vient du monde agricole, je ne leur ferai pas offense en disant qu’ils découvrent tous l’univers du développement d’une application Web. Alors toute cette année il a fallu apprendre à communiquer, qu’ils m’expliquent leur métier, et que nous leur expliquions le notre, et nos contraintes de développeurs. « Tout est possible, tout n’est qu’une question de délai et de priorités » a sans doute été la phrase que j’ai le plus répétée. Mais dev ou commerciaux, nous avons tous fait de notre mieux pour nous impliquer dans la construction du produit Karnott, et être au plus prêt de ce que nos utilisateurs réclamaient. L’arrivée prochaine d’un Product Owner devrait nous faire franchir une étape de plus en ce sens…

Et puis avec le temps et le succès commercial, les priorités et les contraintes changent. Très naïvement, je n’avais pas du tout anticipé cette partie là, mais Karnott est à une période charnière dans sa structuration et nous devons construire un SI d’entreprise. Automatiser la logistique, le monitoring, les prises de parole, la facturation, bref, tout ce qui fait que nous pourrons accueillir sereinement beaucoup plus de clients. C’est techniquement pas mal de travail, ce qui force à ralentir les évolutions du produit Karnott lui-même, mais c’est indispensable.

Un easter-egg se cache sur cette photo. Sauras-tu le retrouver ?

Tout ça pour dire que j’attendais du challenge, et je n’ai pas été déçu ! Je pourrais encore parler du monde agricole que je découvre tous les jours et que je trouve passionnant, de l’équipe géniale et enthousiaste, des raisons pour laquelle nous venons d’annoncer une deuxième levée de fonds, ou encore vous encourager à venir nous découvrir sur WelcomeToTheJungle. Mais là tout de suite, j’ai juste envie de savourer une année riche en émotions (ah oui, je suis papa aussi ! <3 ), et d’attendre avec impatience l’année prochaine !

L.B.

2017, l’année du changement

Cela fait dix ans que je fais de la prestation de service en informatique. Dix ans que je fais du forfait, de la régie, des réponses à appel d’offre, que je rencontre des clients avec des besoins divers et variés.

En dix ans, j’aurais cotoyé le monde pharmaceutique, l’industrie aéronautique, automobile, le monde bancaire, l’univers de la grande distribution, associatif, de la startup au grand groupe, de Bâle à Lille en passant par Toulouse ou Paris. Cette variété de métiers et de façon de faire du développement est l’une des raisons qui m’avait poussé en sortant d’école, à entrer dans le monde du service et des mal-aimées « SSII ».

Alors, 10 ans plus tard, est-ce que j’ai vraiment appris des choses ?

Déjà, j’aurais appris à aimer mon métier. J’ai eu la chance de croiser des développeurs passionnés, et il est clair que c’est contagieux! Merci aux JUGs de Toulouse, Paris ou Lille, aux GDGs de France, et à l’ensemble des Sfeiriens qui ont tous été plus qu’inspirants.
Mais la principale leçon de ces 10 ans, c’est que la technique n’est qu’une petite composante d’un projet informatique. Prenons le métier, l’humain, les compétences à disposition, le temps disponible, la conjoncture, la pleine lune ou la météo, mettons tout ça dans un panier, et on en sort les vrais défis à surmonter. La technique est une composante essentielle, mais non suffisante.

Si je parlais à mon moi d’il y a 10 ans, lui conseillerais-je de faire du service ?

Sans hésiter.
Je ne sais pas si j’aurais été meilleur développeur autrement, mais je suis heureux de ne pas avoir été enfermé dans ma bulle, et heureux de toutes ces rencontres.

Et maintenant alors ?

Et maintenant, le grand changement. J’ai décidé de rejoindre le 1er juin l’équipe de Karnott en tant que CTO. Un terme pompeux pour un challenge bien réel. Le projet est chouette, l’un des deux fondateurs est agriculteur et connait parfaitement son métier (chouette, un nouveau domaine fonctionnel!). Plusieurs choses me plaisent dans ce challenge :
– Chaque pierre posée le sera pour mon employeur direct. La SSII a ce côté frustrant de n’être toujours que de passage…
– Je ne pourrai pas être plus proche de l’utilisateur final! C’est quelque chose que j’avais souvent reproché à mes différents projets par le passé…
– L’un de mes objectifs est de fonder une équipe technique complète. Rassembler des personnes compétentes qui partagent les mêmes valeurs que moi, j’y ai participé avec Sfeir Lille, et humainement c’est génial. (D’ailleurs, si vous êtes dans le Nord, que vous en avez marre du retail et que vous voulez faire de l’IOT, on recrute 😉 )
– Techniquement, il y a carte blanche. Et comme on vit une époque formidable, je crois qu’il y a de quoi bien s’amuser.
– Pas un jour qui passe sans qu’on entende parler de startup. Je crois qu’il ne faut pas mourir idiot et vivre ça de l’intérieur au moins une fois…

Bref, c’est stressant, angoissant, et encore un saut dans l’inconnu… Mais après tout, qu’est ce qu’on risque ?

LB.

Devfest Lille le 9 juin 2017

Je n’avais pas eu l’occasion depuis longtemps d’écrire un petit billet, mais cette annonce en valait bien la peine !

Le 9 juin, nous organisons avec le GDG Lille un Devfest ! Kézaco ? C’est une journée dédiée aux développeurs, avec des conférences techniques, des codelabs, tout ça pour mettre en avant notre métier, et faire se rencontrer les développeurs  et entreprises de la région Lilloise. Nous sommes persuadés qu’il y a pas mal d’entreprises innovantes dans la région qui n’attendent qu’une occasion pour venir partager leur savoir, et leurs choix technologiques.

Alors on participe au Call For Paper !

L’organisation, c’est un sacré challenge. La salle (merci à e-artsup), le planning, les goodies, le traiteur, les sponsors… Cette première édition tachera d’être humble, avec 200 participants et un prix abordable à 20€, sans rien lésiner sur la qualité de la journée. Bref, l’année 2017 s’annonce intéressante.

Toutes les informations, et la billeterie, d’hors et déjà ouverte, sur le site du Devfest Lille.

Startup Weekend Lille : Maker Edition

Du 6 au 8 février, je participe au Startup Weekend Maker Edition à Lille en tant que coach technique, c’est bien l’occasion d’un petit billet de blog !

Startup_Weekend

Déjà, un Startup Weekend, qu’est ce que c’est ? Si je devais résumer rapidement, je dirais que c’est l’occasion d’éprouver une idée sur un week-end… Mais encore ? Et bien c’est simple : tout le monde a des idées, plus ou moins simples, plus ou moins farfelues. Mais en vrai, ton idée, est-ce qu’elle tient la route ? Et comment la mettre en valeur, par quoi commencer, est-ce que des gens adhèrent à ton projet ? Si je devais l’expliquer à une équipe, la pitcher, convaincre, comment devrais-je m’y prendre ? Mon business model est-il cohérent  ? Le startup weekend, c’est un condensé de tout ça et c’est l’occasion de se confronter à des personnes reconnues qui pourront te challenger et te conseiller, et tout ça en 54 heures.

Pendant ce week-end, tu auras une équipe. Ce sont tes premiers alliés, et aussi les premières personnes qui doivent être convaincues du projet. Mais où est-ce que je veux en venir ?

Si tu viens, que tu sois pitcheur ou technique, tu dois être PRÉPARÉ !

On va se concentrer sur la partie technique maintenant… L’édition Makers est un peu particulière, parce qu’une partie de la mise en valeur de l’idée de départ consiste en la réalisation d’un prototype.
Alors là ça se corse un peu ! Même si l’équipe organisatrice du Startup Weekend met des outils à ta disposition (« Imprimante 3D, découpe laser et autres usinage, ainsi que de l’hardware open-source Arduino, Raspberry »), il y a des choses que tu devras faire par toi-même. Et si tu dois passer une journée à développer et mettre en ligne une API REST pour persister des choses, c’est une journée de perdue… La valeur ajoutée de ton prototype n’est pas là, et il ne faut absolument pas que tu passes ton temps à ça.

Mais nous, coachs, serons (un peu) là pour ça. Nous pourrons te débloquer, te conseiller, ou t’orienter vers une solution technique rapide à mettre en place. Un exemple « Old School » est la mise en ligne d’une API Rest sur la plateforme Google Cloud Platform. Je ferai en sorte de pouvoir faire la même chose très rapidement dans d’autres langages (ça n’a pas vraiment d’importance), et sur d’autres plateformes. Mais quelle que soit la techno avec laquelle tu te sens à l’aise, il te faut la bonne alchimie pour perdre le moins de temps possible.

Bref, pour résumer, mon conseil est simple : pour profiter au maximum de ton week-end, prépare toi avant, pour pouvoir te concentrer pendant sur le principal et concrétiser tous les trucs funs et que tu n’as pas l’habitude de faire !!

Ah, et juste pour Damien, attention à ce que personne ne développe d’arme anti-chaton !

194633_A12S15N5OC6VXA4Y818N4WE58XBKLC_big_stickup_H181820_L

Ludovic
@GDGLille