... 2 Guillaume Cauchon @gcauchon • Développeur chez Mirego • Fondateur de À la garderie • OpenCode • Web à Québec • Meetup Elixir, Montréal Expériences passées
Beaucoup de contenu, 40 minutes 1 Elixir, le language P 4 2 iex > shell interactif P 10 3 Configurations d’un projet web P 13 4 GraphQL P 18 5 Web Sockets P 22 6 OTP P 23 7 Tests P 25 8 Déploiement P 26
GraphQL Web Socket OTP Tests Déploiement “Elixir is a dynamic, functional language designed for building scalable and maintainable applications.” Elixir . 4 • Syntaxe verbale et opinionated inspirée de ruby. • Concepts d’extensibilité (protocol, behaviour) inspirés, entre autre, de Clojure. • Code compilé en byte code pour BEAM, la VM Erlang. • OTP, des outils facilitant le développement d’application web distribuée.
GraphQL Web Socket OTP Tests Déploiement “Elixir is a dynamic, functional language designed for building scalable and maintainable applications.” Elixir . 5 • Fonctions pures. • Structures immuables. • Flow de donnée naturel avec l’opérateur pipe : |> • Pattern matching et guards : simplifier les code paths. • mix, one tool to rule them all ◦ dépendances, build, test, release, etc… • iex, un shell interactif (ie REPL).
Configuration GraphQL Web Socket OTP Tests Déploiement Elixir . Elixir Conf 2018, opening keynote by José Valim “If we need a major version to change the language then we failed to build an extensible language!” https://youtu.be/suOzNeMJXl0 Elixir: A Mini-Documentary by Honeypot Get ready to explore the origins of the Elixir programming language, the manner in which it handles concurrency and the speed with which it has grown since its creation back in 2011. https://youtu.be/lxYFOM3UJzo
Configuration GraphQL Web Socket OTP Tests Déploiement Elixir . Elixir Forum Oui; un forum en 2019! Et fort probablement une des meilleure source d’information sur le langage, la communauté et les projets qui s’y développent. https://elixirforum.com Elixir School Elixir School is the premier destination for people looking to learn and master the Elixir programming language. https://elixirschool.com Conférences Toutes les conférences principales sont disponibles sur YouTube; habituellement en moins d’une semaine! • Elixir Conf - https://elixirconf.com • Code Sync - https://codesync.global/conferences • Lonestar Elixir - https://lonestarelixir.com • Empex - http://empex.co • etc…
Configuration GraphQL Web Socket OTP Tests Déploiement Elixir . Accent, open-source le 5 avril 2018 par Simon Prévost Le premier outil de traduction pensé par/pour les développeurs. https://www.accent.reviews https://github.com/mirego/accent Donner l’exemple
GraphQL Web Socket OTP Tests Déploiement iex . 10 Interactive Elixir est un REPL qui permet de développer de façon interactive et itérative, sans avoir à redémarrer votre serveur. * * sauf si vous changez les configurations.
Configuration GraphQL Web Socket OTP Tests Déploiement iex . Fonctionnalités • Autocomplete • Helpers ◦ h - documentation d’un module, d’une fonction ◦ i - documentation d’un type de donnée (ie struct) ◦ r - compilation et swap en mémoire du module ◦ t - documentation des types définis dans un module Il est simple et utile d’utiliser iex dans une release OTP, déployée sur la PAAS de votre choix; plus de détails plus tard…
GraphQL Web Socket OTP Tests Déploiement Configuration . 13 Les configurations d’un projet sont contenus dans 3 fichiers : 1.mix.exs (et son lock file) 2.config/config.exs 3.config/$MIX_ENV.exs À l’image de ruby et rails, elixir profite d’un écosystème de librairies en forte expansion avec l’adoption du langage.
Configuration GraphQL Web Socket OTP Tests Déploiement Configuration . Makefile Des workflows clairs et documentés pour le développement, les tests et le déploiement. Un outils qui simplifie grandement le onboarding, la maintenance et la pérennité du codebase. Bonus!
GraphQL Web Socket OTP Tests Déploiement Configuration . 17 Un objectif de notre équipe pour 2019 est de rendre open-source plusieurs projets boilerplates pour phoenix, ember et react! Leak!
GraphQL Web Socket OTP Tests Déploiement GraphQL . 18 • Séparation des concerns entre le transport et les données • Schema typé et validé par l’engin à l’entrée et la sortie • Découplement entre l’api et les modèles de persistance ◦ Lecture → query / Écriture → mutation • Résolution du graph : ◦ Chaque field est résolu de façon unitaire ◦ Orchestration de plusieurs contextes • Payload malléable qui s’adapte aux besoins du client • Documentation: 1st class citizen A query language for your API
Configuration GraphQL Web Socket OTP Tests Déploiement GraphQL . Absinthe permet même d’inclure GraphiQL, un IDE in-browser pour GraphQL, directement dans votre environnement de développement! • Auto-complete • Documentation (queries, mutations, types, etc…) • Partage
Configuration GraphQL Web Socket OTP Tests Déploiement GraphQL . Pas de magie, les fonctions utilisées pour résoudre les fields peuvent être utilisées directement dans iex, aussi simplement que celle du contexte : iex(1)> alias Remedy.Account Remedy.Account iex(2)> Account.find("3865005d-abe1-4998-a61d-87a4b73c06ff") %Remedy.Account.Presenter{ __meta__: #Ecto.Schema.Metadata<:loaded, "presenters">, company: "Mirego", handle: nil, id: "3865005d-abe1-4998-a61d-87a4b73c06ff", inserted_at: ~N[2019-01-18 05:43:37], name: "Guillaume Cauchon", title: "ELIXIR, REMÈDE FONCTIONNEL AU WEB", updated_at: ~N[2019-01-18 05:43:37] }
GraphQL Web Socket OTP Tests Déploiement Web Socket . 22 • 1st-class citizen dans Phoenix. • Utilisé en développement pour le live-reload des assets dans le browser. • Utilisé dans GraphQL pour les requêtes de type subscribe. • Phoenix.Presence, un data-store distribué qui permet de stocker du metadata sur le socket. aka Channels
GraphQL Web Socket OTP Tests Déploiement OTP . 23 OTP stands for Open Telecom Platform, although it’s not that much about telecom anymore (…) If half of Erlang’s greatness comes from its concurrency and distribution and the other half comes from its error handling capabilities, then the OTP framework is the third half of it. Fred Hébert, https://learnyousomeerlang.com/what-is-otp Survol
GraphQL Web Socket OTP Tests Déploiement Tests . 25 • Fonctions pures et données immuable, donc les tests sont extrêment simple et légers. • mix test --stale • ExMachina (ex_machina) • @behaviour + Mox (mox) ◦ Simuler une librairie tierce en quelques lignes. • Coveralls (excoveralls) ◦ mix coveralls.details présente un diff des code paths couverts et manqués par les tests! Survol
GraphQL Web Socket OTP Tests Déploiement Déploiement . 26 • Une release OTP est platform specific. • Principes Twelve-Factor App. ◦ Configuration basée sur les variables d’environnement ◦ Même image en, QA, Staging et Production • Multi-stage build avec Docker ◦ Build sur une image elixir basée sur Alpine Linux. ◦ Copier la release OTP sur une image Alpine Linux.