skystar edge x95 3

Gearbest m'a gentiment proposé de m'envoyer un drone pour le tester. C'est avec plaisir que je me suis amusé à piloter le SKYSTARS X95 EDGE équipé d'un récepteur Frsky XM et de deux batteries 2S de 500mAh chacune.

Je pilote habituellement un drone 5 pouces que j'ai construit moi-même il y a quelques mois comme vous avez pu le voir dans mon précédent article. Il me manquait un petit drone 2 pouces équipé d'une caméra de bonne qualité pour faire du FPV en indoor / outdoor. Ce petit SKYSTARS X95 EDGE 2 pouces équipé d'un mini récepteur Frsky XM compatible avec ma radiocommande Taranis X9D me permet de m’entraîner en indoor et m'évite de faire trop de casse sur mon 5 pouces qui nécessite beaucoup d'espace pour être piloté en toute sécurité.

Le SKYSTARS X95 EDGE est équipé d'un contrôleur de vol F4 embarquant Betaflight. La configuration de Betaflight qui équipe le drone a été préalablement réalisée par SKYSTARS, le mapping des ESC a été modifié ainsi que les PID par défaut. Si vous ne connaissez pas Betaflight, il s'agit d'un micrologiciel Opensource assurant les fonctions de controleur de vol du drone que vous pouvez découvrir sur mon autre site Wiki-FPV.

Pour mettre en service ce petit drone, vous allez avoir besoin :

  1. De flasher le récepteur Frsky XM FCC en EU.
  2. De binder votre récepteur à votre radiocommande.
  3. De calibrer le gyroscope depuis le logiciel Betaflight Configurator.
  4. D'associer des modes de vol aux boutons de votre radio commande (armement, failsafe ...)

Une fois ces 4 étapes réalisées vous pourrez effectuer votre premier vol dans une zone autorisée par la DGAC et sans survoler de personnes.

Voici une synthèse des caractéristiques de ce petit engin qui a tout d'un grand :

  • Châssis en carbone 3K avec une épaisseur de 1.5mm
  • Moteurs : DS1104 7500KV
  • Batterie : 2S 7.4V 500mAh 30C
  • Hélices : Gemfan 1940
  • FC : Micro F4 Flight Control Board équipé d'un MPU6000-SPI et d'un CPU STM32F405RGT6 dual 8K
  • ESC : 20A 2 - 4S BLHeli - S 4 in 1 ESC supportant du DSHOT 600.
  • Émetteur vidéo 5.8Ghz supportant 25mW / 100mW (La documentation officielle indique 150mW mais le VTX semble disposer de deux niveaux de puissance : 25 et 100mW)
  • Caméra de 800TVL en résolution horizontale avec un FOV de 115 degrés ( 2.3mm )

skystar edge x95 2

Après quelques recherches, la stack qui équipe ce mini-drone est en fait une Spedix IS 100 Flytower d'une valeur de 54€.

spedix IS 100 flytower 03

Ce petit drone est disponible au prix de 106€ à 121€ sur GearBest en fonction des équipements choisis. Il est parfait pour vous initier au pilotage FPV à condition d'avoir une radiocommande compatible et un masque vidéo.

Vous pouvez utiliser le coupon suivant pour bénéficier d'une réduction sur l'achat du drone sur Gearbest : GBFRXY95 Il vous permettra d'obtenir le pack BNF2 (avec récepteur Frsky +2 Batteries ) au prix de 111.51€.

J'ai aimé :

  • La qualité vidéo. La caméra filme en 800 TVL même si la qualité de la vidéo prise avec mon DVR n'est pas de très bonne qualité.
  • Les protections des hélices qui peuvent être montées ou non en fonction de votre niveau de pilotage.
  • Les LED et le buzzer sont disponibles en standard.
  • La stack Spedix IS 100 Flytower de bonne facture, très simple à démonter. La carte F4 embarquée fournit de bonnes performances (DShot 600, loop 8Khz)
  • Sa taille, idéale pour apprendre en outdoor ou indoor sans trop casser de matériel.

On regrettera

  • Le récepteur XM est livré un firmware FCC par défaut non compatible avec des radiocommandes européennes, il faut prévoir une petite mise à jour du firmware pour le passer en EU. Un petit hack des pin du récepteur est nécessaire pour le passer en EU.
  • La caméra / VTX chauffe beaucoup, la puissance d'émission du VTX semble être à 100mW par défaut ce qui est interdit en France. Il faut configurer le VTX à 25mW pour respecter les limites de puissance d'émission françaises.
  • Les batteries fournies dans le pack sont en 500mw. Vous pouvez utiliser des batteries 2S avec plus d'intensité pour avoir une plus grande autonomie.
  • Le drone n'est pas équipé de smartaudio pour permettre de configurer le VTX à distance. Il faut donc utiliser un appui long de 3 secondes pour configurer consécutivement le canal, la bande et la puissance.

synology zwave node red

Vous utilisez un Raspberry Pi comme box domotique alors que vous avez un superbe NAS Synology qui possède un disque redondé et qui est sous-exploité ? Que diriez-vous d'utiliser votre NAS Synology comme box domotique via l'utilisation d'une image Docker de Node-Red et une clef USB ZWave ?

Les 3 ingrédients nécessaires sont :


Installation des modules "Serial" sur votre NAS :

Malheureusement, Synology a retiré les drivers "Serial" du Kernel Linux de son système d'exploitation, il faudra donc installer manuellement les drivers pour permettre à votre clef ZWave de fonctionner correctement et lui permettre d'être reconnue comme interface TTYUSB0.

Vérifiez le type de processeur de votre NAS :

https://www.synology.com/fr-fr/knowledgebase/DSM/tutorial/General/What_kind_of_CPU_does_my_NAS_have

Téléchargez les drivers USBSerial de la plateforme correspondant au type de CPU de votre NAS en vérifiant bien que votre NAS fonctionne en DSM 6.2 :

http://www.jadahl.com/drivers/DSM_6.2/

Allez dans l'application "Centre de paquets" de votre NAS pour installer ce paquet fraîchement téléchargé : install packet nas

Activez le terminal SSH de votre NAS : service ssh synology

Connectez-vous en SSH à notre NAS, le mot de passe est le mot de passe du compte administrateur :

$ ssh admin@<ip du NAS>

Récupérez les droits root :

$ sudo -s

Vérifiez que le kernel de votre NAS a bien identifié la clef USB ZWave :

# dmesg | grep tty
 722.055702] cp210x ttyUSB0: cp210x converter now disconnected from ttyUSB0


Préparez l'espace data

Le container Docker est stateless, afin d'éviter de perdre la configuration de votre système de domotique, vous allez devoir créer un volume spécifique. Dans mon cas j'utilise le répertoire : "/volume1/docker/data"

Lors du premier démarrage de votre container, Node-Red vous réclamera la présence d'un fichier "settings.js" dans ce répertoire data. Copiez ce fichier du repository GitHub de Node-Red et adaptez-le à vos besoins.

Node-Red vous demandera aussi la présence du répertoire "lib/flows". N'hésitez pas à initialiser ce répertoire afin de permettre à Node-Red de démarrer correctement.


Démarrez le container Node-Red :

Afin de démarrez correctement le container Node-Red, nous sommes obligé d'utiliser la ligne de commande shell de votre NAS, l'interface Web du NAS Synology ne supportant pas l'utilisation d'arguments avancés comme le "--device" utilisé pour exploiter le périphérique USB.

Lors des premiers démarrages, supprimez l'option "-d" pour visualiser sur la console les messages d'erreurs.

# docker run -d -t -i \
-e PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' \
-e NODE_VERSION='6.14.4' \
-e YARN_VERSION='1.6.0' \
-e FLOWS='flows.json' \
-e NODE_PATH='/usr/src/node-red/node_modules:/data/node_modules' \
-p 1880:1880 \
-v /volume1/docker/data:/data \
--device=/dev/ttyUSB0 \
--privileged \
--restart=always \
--name domogeek \
nodered/node-red-docker:latest

Connectez-vous au container Docker Node-Red :

# docker ps
(Identifiez l'id du container)

# docker exec -it --user root <id du container> bash

Le connecteur ZWave disponible sur Node-Red requiert la librairie OpenZwave pour fonctionner correctement. Il vous faudra compiler cette librairie pour permettre à votre noeud ZWave de fonctionner sur votre container Node-Red.

# wget https://github.com/OpenZWave/open-zwave/archive/V1.5.tar.gz
# tar -zxvf open-zwave-1.5.tar.gz
# cd open-zwave-1.5
# make 
# sudo make install

Ajoutez le répertoire /usr/local/lib64 dans le LD Library path de votre image Docker :

# echo "/usr/local/lib64" > /etc/ld.so.conf.d/zwave.conf
# ldconfig


Connectez-vous à l'interface d'administration de Node-Red

Ouvrez votre navigateur sur le port 1880 de votre NAS, vous devriez voir apparaître l'interface d'administration de Node-Red : http://<ip du nas>:1880

Installez les noeuds node-red-contrib-openzwave et node-red-contrib-mqtt-broker depuis le burger menu de droite dans l'item "Manage palette" : node red mqtt zwave

Redémarrer votre container Docker Node-Red depuis l'interface d'administration de Synology : docker synology restart

Intégrez le flow suivant via la fonction "Import -> clipboard" présente dans le burger menu de droite de l'interface Web :

[
  {
    "id": "5944d71.e21c728",
    "type": "zwave-in",
    "z": "e17e9ac1.145f38",
    "name": "Zwave",
    "controller": "e027a4e7.1c8068",
    "x": 90,
    "y": 100,
    "wires": [
      [
        "a4fe692d.6e5088"
      ]
    ]
  },
  {
    "id": "7ed78180.055c9",
    "type": "debug",
    "z": "e17e9ac1.145f38",
    "name": "",
    "active": true,
    "tosidebar": true,
    "console": false,
    "tostatus": false,
    "complete": "false",
    "x": 550,
    "y": 100,
    "wires": [
      
    ]
  },
  {
    "id": "5885ddff.850334",
    "type": "mosca in",
    "z": "e17e9ac1.145f38",
    "mqtt_port": 1883,
    "mqtt_ws_port": 8080,
    "name": "MQTT Server",
    "username": "",
    "password": "",
    "dburl": "",
    "x": 110,
    "y": 240,
    "wires": [
      [
        "bce0e2f.878f32"
      ]
    ]
  },
  {
    "id": "bce0e2f.878f32",
    "type": "debug",
    "z": "e17e9ac1.145f38",
    "name": "",
    "active": false,
    "tosidebar": true,
    "console": false,
    "tostatus": false,
    "complete": "false",
    "x": 290,
    "y": 240,
    "wires": [
      
    ]
  },
  {
    "id": "3fd7c2af.4e2f1e",
    "type": "comment",
    "z": "e17e9ac1.145f38",
    "name": "ZWave Listener",
    "info": "",
    "x": 120,
    "y": 60,
    "wires": [
      
    ]
  },
  {
    "id": "c6190944.06fe08",
    "type": "comment",
    "z": "e17e9ac1.145f38",
    "name": "MQTT Server",
    "info": "",
    "x": 110,
    "y": 200,
    "wires": [
      
    ]
  },
  {
    "id": "a4fe692d.6e5088",
    "type": "function",
    "z": "e17e9ac1.145f38",
    "name": "Set the command class",
    "func": "var commandClass = {\n\t113 : "alarm",\n\t34 : "applicationStatus",\n\t133 : "association",\n\t155 : "associationCommandConfiguration",\n\t32 : "basic",\n\t80 : "basicWindowCovering",\n\t128 : "battery",\n\t// 0x56 : "crc16Encap",\n\t70 : "climateControlSchedule",\n\t129 : "clock",\n\t112 : "configuration",\n\t33 : "controllerReplication",\n\t144 : "energyProduction",\n\t130 : "hail",\n\t135 : "indicator",\n\t137 : "language",\n\t118 : "lock",\n\t114 : "manufacturerSpecific",\n\t50 : "meter",\n\t53 : "meterPulse",\n\t143 : "multiCmd",\n\t96 : "multiInstanceChannel",\n\t142 : "multiInstanceAssociation",\n\t0 : "noOperation",\n\t115 : "powerlevel",\n\t136 : "proprietary",\n\t117 : "protection",\n\t43 : "sceneActivation",\n\t156 : "sensorAlarm",\n\t48 : "sensorBinary",\n\t49 : "sensorMultilevel",\n\t39 : "switchAll",\n\t37 : "switchBinary",\n\t38 : "switchMultilevel",\n\t40 : "switchToggleBinary",\n\t41 : "switchToggleMultilevel",\n\t68 : "thermostatFanMode",\n\t69 : "thermostatFanState",\n\t64 : "thermostatMode",\n\t66 : "thermostatOperatingState",\n\t67 : "thermostatSetpoint",\n\t99 : "userCode",\n\t134 : "version",\n\t132 : "wakeUp"\n};\n\n// Check the topic\nif (msg.payload.cmdclass !== 'undefined'){\n    msg.topic = commandClass[msg.payload.cmdclass];\n} else {\n    msg.topic = "default";\n}\n\nreturn msg;",
    "outputs": 1,
    "noerr": 0,
    "x": 330,
    "y": 100,
    "wires": [
      [
        "7ed78180.055c9",
        "75d0448.b115cbc"
      ]
    ]
  },
  {
    "id": "75d0448.b115cbc",
    "type": "mqtt out",
    "z": "e17e9ac1.145f38",
    "name": "",
    "topic": "",
    "qos": "0",
    "retain": "false",
    "broker": "23cb3156.2a7d1e",
    "x": 530,
    "y": 160,
    "wires": [
      
    ]
  },
  {
    "id": "e027a4e7.1c8068",
    "type": "zwave-controller",
    "z": "",
    "port": "/dev/ttyUSB0",
    "driverattempts": "3",
    "pollinterval": "10000",
    "allowunreadyupdates": false,
    "networkkey": "",
    "logging": "full"
  },
  {
    "id": "23cb3156.2a7d1e",
    "type": "mqtt-broker",
    "z": "",
    "name": "",
    "broker": "localhost",
    "port": "1883",
    "clientid": "nodered",
    "usetls": false,
    "compatmode": true,
    "keepalive": "15",
    "cleansession": true,
    "birthTopic": "",
    "birthQos": "0",
    "birthPayload": "",
    "closeTopic": "",
    "closePayload": "",
    "willTopic": "",
    "willQos": "0",
    "willPayload": ""
  }
]

Vous devriez voir le flow suivant apparaître : node red admin synology

Ce flow est très simple, il consiste à démarrer un bus MQTT sur votre Node-Red et à distribuer les messages de votre réseau ZWave dans des topics spécifiques en fonction du type de message reçu. Ces topics étant :

  • 113 : "alarm",
  • 34 : "applicationStatus",
  • 133 : "association",
  • 155 : "associationCommandConfiguration",
  • 32 : "basic",
  • 80 : "basicWindowCovering",
  • 128 : "battery",
  • 70 : "climateControlSchedule",
  • 129 : "clock",
  • 112 : "configuration",
  • 33 : "controllerReplication",
  • 144 : "energyProduction",
  • 130 : "hail",
  • 135 : "indicator",
  • 137 : "language",
  • 118 : "lock",
  • 114 : "manufacturerSpecific",
  • 50 : "meter",
  • 53 : "meterPulse",
  • 143 : "multiCmd",
  • 96 : "multiInstanceChannel",
  • 142 : "multiInstanceAssociation",
  • 0 : "noOperation",
  • 115 : "powerlevel",
  • 136 : "proprietary",
  • 117 : "protection",
  • 43 : "sceneActivation",
  • 156 : "sensorAlarm",
  • 48 : "sensorBinary",
  • 49 : "sensorMultilevel",
  • 39 : "switchAll",
  • 37 : "switchBinary",
  • 38 : "switchMultilevel",
  • 40 : "switchToggleBinary",
  • 41 : "switchToggleMultilevel",
  • 68 : "thermostatFanMode",
  • 69 : "thermostatFanState",
  • 64 : "thermostatMode",
  • 66 : "thermostatOperatingState",
  • 67 : "thermostatSetpoint",
  • 99 : "userCode",
  • 134 : "version",
  • 132 : "wakeUp"

Il vous suffira ensuite de créer un client MQTT sur les topics de votre choix pour traiter les messages et réaliser les actions que vous souhaitez ... "Meter" pour les infos de SmartMetering, "sensorAlarm" pour les alarmes ...

Vous voilà avec un NAS Synology transformé en box domotique très puissante ! ;-)

christmas gift

Comme chaque année depuis déjà plusieurs années, voici ma sélection d'idées de cadeaux High-tech branchés pour Noël.

Un mini drone ultra-puissant

Le Beta75X 2S est probablement l'un des meilleurs mini-drone du marché capable de monter jusqu'à plus de 80km/h ... Il existe différents modèles, avec des batteries 1S ou 2S en fonction de la puissance que vous souhaitez. Comptez un budget de 100$ à 130$.

betafpv x75 2s

Le dernier assistant vocal

Vous être probablement déjà équipé d'un ou plusieurs assistants chez vous, mais c'est peut-être l'occasion d'en offrir à vos proches ? Le dernier assistant Echo Dot d'Amazon est commercialisé au prix de 59,99€

alexa

Le robot programmable Cozmo

Un robot pour enfants et adultes pour jouer et apprendre à coder. Il faisait déjà partie de la liste de 2017, mais je le remets dans cette liste 2018. C'est l'un des jouets les plus en vogue actuellement sur Amazon. Il est commercialisé au prix de 149,90€. Il dispose d'un SDK Python pour permettre d'enrichir ses compétences ... Le must have des papa geeks.

Un portefeuille de cryptomonnaies

Voici le Ledger Nano S, un portefeuille physique de cryptomonnaies. Il supporte pas moins de 20 cryptomonnaies, y compris Bitcoin, Ethereum, Ripple et Altcoins. C'est un moyen sécurisé pour stocker sa cryptomonnaie, à condition bien sûr de ne pas perdre la clef. Ce petit gadget est commercialisé au prix de 69,99€.

ledger

Un casque sans fil à réduction de bruit

Le Bose QuietComfort 35 II est probablement le meilleur casque sans fil à réduction de bruit du marché. Au prix de 329€, il peut se le permettre d'être le meilleur ... Il est équipé d'un assistant vocal embarqué : Alexa.

bose quiet confort

ColorReader

Je viens de recevoir le scanner de couleur ColorReader de DataColor capable de retrouver la référence de la peinture de tous les objets qui nous entourent.

Cet objet, de la taille d'une boite d'aspirine, fonctionne grâce à une application mobile sur iOS et Android et d'une communication Bluetooth.

L'utilisation du ColorReader est très simple :

  1. Vous appuyez sur le bouton du scanner.
  2. Votre téléphone mobile affiche la référence de la couleur scannée.
  3. Vous pouvez créer des palettes de couleur et les partager grâce à Internet.

Voici à titre d'exemple les couleurs de tous les objets qui décorent de mon salon : color reader ios

Voici à quoi ressemble le portail Web généré dès lors que l'on souhaite partager une palette de couleurs : https://dache-production.herokuapp.com/palette/A0jYmgbM/

Le ColorReader permet de retrouver des références de peintures et de comparer des couleurs virtuellement.

Pour les développeurs d'applications, un SDK est disponible pour intégrer l'utilisation de cet objet dans vos applications. Ce SDK n'est malheureusement pas en libre téléchargement, mais peut être obtenu en contactant DataColor.

Cet objet connecté est disponible au prix de 117.81€ en version classique et 296.31€ pour la version professionnelle. C'est un objet indispensable pour des professionnels de la décoration, il peut être pratique pour un particulier qui se lance dans un chantier de décoration.

Il ne manque au ColorReader qu'une intelligence artificielle pour identifier les palettes de couleur de mauvais goût et réaliser des propositions de couleurs sur la base de ce que vous avez déjà dans votre pièce.

amazon reduction livraison 1centime

Après la semaine Black Fiday, Amazon anticipe la vague de Noël et réduit le prix de ses livraisons à 0.01 euros.

Cette offre est valable pour l'ensemble des produits expédiés par Amazon à partir du jeudi 29 novembre 2018 à 00h01 au mercredi 5 décembre 2018 à 23h59

Cette promotion vous évitera de payer la livraison au prix fort si le montant de votre commande ne dépasse pas les 25€.

N'oubliez pas de saisir le code "LIVRAISON" comme bon de réduction pour profiter de l'offre.

Si vous recherchez des idées de cadeaux à offrir à vos proches, Amazon a créé une page dédiée pour vous aider à trouver des idées.

idees cadeaux noel

confluence

Vous connaissez probablement Confluence ,un Wiki très riche édité par Atlassian qui permet de construire rapidement des espaces collaboratifs pour des projets informatiques.

Ce produit est excellent, l'un des seuls inconvénients que l'on pourrait lui reprocher est son algorithme de construction d'URL un peu simpliste qui consiste à construire des URL "propres" seulement si le titre de la page contient des caractères ASCII.

Cette règle fonctionne bien pour des sites anglophones. Cependant dès lors qu'un caractère accentué apparaît dans le titre d'une page, les URL générées sont des identifiants numériques dénuées de sens syntaxique ....

Exemple d'une URL propre :

https://mon-wiki/display/SPA/Introduction

Exemple d'une URL basée sur l'ID du contenu dès lors que le titre contient un caractère non ASCII :

https://mon-wiki/pages/viewpage.action?pageId=327894

Dans le cadre d'un usage interne, cette règle n'est pas importante, elle l'est cependant dès lors que Confluence est utilisé pour publier du contenu sur Internet. Les mots clefs contenus dans les URL étant pris en compte comme règle de SEO, la construction de l'URL des pages est donc très importante.

La bonne nouvelle est que Atlassian partage le code source de ces outils et que la modification nécessaire pour permettre à Confluence de mieux supporter les accents dans les titres est très simple à réaliser.

Le patch consiste à supprimer les accents dans la fonction getPageUrl de la classe GeneralUtil avant d'appeler la fonction isSafeTitleForUrl qui permet de décider si l'URL de la page à utiliser peut être propre ou non.

Cette classe se trouve dans l'arborescence suivante du code source :

confluence-project/confluence-core/confluence/src/java/com/atlassian/confluence/util

Pour cela on peut s'appuyer sur la fonction stripAccents de la classe StringUtils disponible dans la librairie Commons Lang3.

public static String getPageUrl(AbstractPage page) {
        if (page == null || (page.isLatestVersion() && page.getSpace() == null))
            return "";

        String title = page.getTitle();

        /**
          * @HACK : Suppression des caractères accentués avant vérification 
          * de l'éligibilité du titre à être utilisé comme URL
          **/ 
        title = org.apache.commons.lang3.StringUtils.stripAccents(title);
        	
        // only use simple/nice page url if the page does not contain:
        // - non-ASCII characters
        // - '+' or '-' characters because these can be picked up by the insert and stripe through filters
        // - double quotes (") because orion doesn't play nicely with them (CONF-1287)
        // - ends in punctuation (CONFDEV-3995)
        if (isSafeTitleForUrl(title) && page.isLatestVersion())
            return toDisplayUrl(page);
        else
            return getIdBasedPageUrl(page);
    }

Une fois la modification réalisée, vous devrez compiler la classe et patcher le JAR "confluence-X.X.X.jar" avec le fichier "GeneralUtil.class" compilé. Cette petite modification vous permettra d'obtenir de belles URL sur votre serveur Confluence malgré l'utilisation de caractères accentués de la langue française.

Il est possible d'aller plus loin pour construire des URL plus "SEO friendly", cependant l'outil est conçu pour retrouver un contenu en comparant l'URL reçue aux titres des pages ... Une suggestion d'évolution a été proposée à Atlassian pour ajouter un attribut URL aux pages afin de séparer le contenu du titre des pages aux URL des contenus. Wait & see !

trend micro maximum security 2018

Je profite de ce post pour offrir un numéro de licence à Trend Micro Maximum Security 10 pour 1 an et 3 périphériques au premier lecteur qui souhaite utiliser cet antivirus complet.

Le premier lecteur intéressé qui publie un commentaire à cet article recevra le numéro de licence par email.

L'antivirus est téléchargeable depuis le portail www.trendmicroupdate.com

Vous n'avez pas eu la chance de participer au DevFest Nantes 2018, le 3ème plus grand événement français autour du développement informatique ? Les vidéos des différentes conférences viennent d'être publiées sur Youtube la semaine dernière, profitez-en !

Le DevFest Nantes fut encore une fois au top, plus de visiteurs, plus de speakers .... Vous souhaitez être inspiré, découvrir de nouvelles technologies ? Voici de quoi passer vos longues soirées d'hiver :

  1. Opening keynote / Keynote d'ouverture
  2. Rémunération Poker
  3. Git Dammit !
  4. Penser son infrastructure comme du code
  5. Au pays des Gophers à partir de 3 ans
  6. Shaving my head made me a better programmer
  7. La "process communication" ou comment faire rentrer les gens dans des cases
  8. Passez vos tests end to end en vitesse lumière avec Cypress
  9. Machine Learning & JS Take your PWA to the next level
  10. Hacker les catastrophes naturelles
  11. Enlarge your team !
  12. Comment perdre sa surchage featurale
  13. AI Takeover
  14. Ready for Angular version 8
  15. Vanilla JS 2018
  16. La conquête de l'espace se déroule dans votre poche
  17. Kotlin Coroutines
  18. Ready for Angular version 8
  19. L'infrastructure as code avec Terraform
  20. Où sont les femmes ?
  21. Détectez et trackez les aliens qui se cachent dans vos dépendances
  22. Séquenceur MIDI en NodeJS sur Raspberry PI
  23. Serveur d'intégration mobile gitlab ci avec Fastlane
  24. Android all the things !
  25. Typographie et accessibilité
  26. Concourse : CI/CD version 2020 !
  27. Highway to Elm !
  28. Push du Machine Learning dans ton app When TensorFlow and MLKit rule the world
  29. Lisibilité & Design Construisons des expériences numériques inclusives
  30. Le storytelling et la fiction pour imaginer de nouveaux lendemains
  31. Les nouveautés "serverless" de Google Cloud
  32. Deliver search friendly JavaScript powered websites
  33. Compassion First Design pour l'intelligence artificielle
  34. Kubeflow : Tensorflow on Kubernetes
  35. Créer un datapipeline en 20 minutes avec Kafka Connect
  36. Istio, we have a problem! Understanding and fixing bugs with a service-mesh
  37. Partir à la découverte du serverless avec OpenFaas
  38. Neuro Game Experience : Votre pensée prend le contrôle !
  39. The next big thing in (client side) templating
  40. Look mum, no hands ! Mind control in JavaScript
  41. Ghost in the Machine
  42. Un joli template ne rendra pas votre produit utilisable
  43. What's up TC39
  44. The postmodern API gRPC on Android
  45. How do we use Vue js in GitLab
  46. Shaping your app’s architecture with Kotlin and Architecture Components
  47. Automate your whole iOS Projects & share resources with Android
  48. Creating a geolocation app powered by Firebase
  49. Secret Management with Hashicorp's Vault
  50. Hello from the other side
  51. SSR, SPAs and PWAs
  52. Optimize App Downloads with Android App Bundle and Dynamic Delivery
  53. Crafting a Character Create a Persona for your Google Assistant App
  54. Fast and Beautiful Modern Image Delivery Techniques
  55. What Can We Learn With JavaScript Fatigue
  56. Il développe une solution SaaS sans se soucier de la sécurité ...

Un grand merci au GDG, à tous les bénévoles et aux sponsors qui permettent à cet événement d'exister !

Nantes the place to dev !