Bonjour,
J'ai été amené à m'intéresser à cette technologie, pour pouvoir participer à un projet dont des amis développent les aspects applicatifs, j'interviens en support technique. C'est autour du robot fermier de FarmBot, composé d'un Arduino pour la partie CNC ET d'un Raspberry pour les applications, et il se trouve que le portail d'administration et d'application intégré, Open Source, est écrit en Elixir et Phoenix.
Petit retour en arrière, vers 2004, la technologie Ruby on Rails révolutionnait le développement Web rapide, et avait permis entre autre de déployer la première version de Twitter. Son héritage est toujours présent avec l'architecture de l'application et des fichiers que beaucoup de "frameworks" de dev pour le web utilisent aujourd'hui encore. Son problème, les perfs. Un des développeurs de ce projet RoR décide de repartir sur des bases plus solides, sans renier le style de Ruby, et crée Elixir, avec comme fondation rien moins que Erlang, le langage d'Ericsson, spécialisé dans le temps réel, un vrai socle ancré dans la culture industrielle. Le langage ressemble beaucoup à Ruby, avec un parti pris de "programmation fonctionnelle", et de "pattern matching". Parmi les constructions du langage, inhabituelle mais très expressive et concise, se trouve par exemple le "cond", qui est comme un switch/case mais avec des booléens et des cas multiples, pas seulement une seule expression et les deux cas vrai ou faux. Les cas ont chacun une expression booléenne, et la première qui est évaluée à vrai, déclenche une action et la sortie de ce branchement, une manière expressive et concise de remplacer des if..then..else imbriqués. Pour les traitements l'opérateur pipe: "|>" initialement introduit par Microsoft dans F# est présent. Pour les bibliothèques, ce sont celles de Erlang qui sont interopérables, donc inutile de réinventer la roue, en plus des bibliothèques Elixir.
Et de la même manière que Rails apporte la dimension développement web à Ruby, Phoenix est la plateforme web associée à Elixir. L'idée est de laisser le serveur générer l'HTML grâce à des templates, et d'utiliser une communication rapide par websockets avec le navigateur. Récemment (< 18 mois), le Phoenix de base s'est enrichi de deux nouveaux aspects Live View (générateur d'HTML du serveur) et Hooks (pour interopérer avec JS). Et bien sûr, il existe aussi plusieurs intégrations de la techno Web Assembly de Mozilla.
Cela ressemble à un parfait premier de la classe qui coche toute les cases, avec déjà une certaine maturité, mais qui reste dans une niche. Pour les curieux quelques videos YT, pas trop longues :
- Pour ceux qui veulent rester à un haut niveau sans trop de détails, https://www.youtube.com/watch?v=yo8Y1SUGW1w
- Plus de code, mais pas trop d'explications, construction d'un "chat" persistant les messages dans Postgres : https://www.youtube.com/watch?v=ZUNzXbIP_FQ
- Gratuit avec inscription, cours d'intro à Elixir sur Udemy: https://www.udemy.com/course/elixir-programming-for-beginners/
Notez que les tutos ou formations Phoenix doivent s'aligner sur ces technos (LiveView et Hooks) récentes et tous/toutes ne le font pas.
J-P
Un dernier élément dans ce fil, un peu à part, c'est juste pour attirer l'attention bidouilleuse qui sommeille en chacun de nous.
Il existe un environnement de dev basé sur Elixir (donc Erlang) et Phoenix, qui sert à transformer un Raspberry Pi en objet connecté, fermé, sécurisé : un système audio, une station météo etc... sans aucun outil restant au niveau de l'OS (pas de shell), qui en faciliterait l'attaque.
https://elixirschool.com/en/lessons/advanced/nerves/ (Tiens ! pas de traduction française !)
https://hexdocs.pm/nerves/getting-started.html
JP
Pour compléter les infos sur ce topic:
- Il faut une connaissance pas trop approfondie de Ruby-On-Rails pour pouvoir suivre ensuite son évolution : Une formation gratuite très complète, mais avec un bémol : comme elle date de 5 ans, la mise à niveau de la plateforme pour pouvoir suivre le cours est un exercice difficile, plus difficile que le cours lui-même. Mais faisable. Avantage de ce cours, il ne demande aucune connaissance préalable. C'est en Français sur OpenClassrooms : https://openclassrooms.com/fr/courses/3149156-initiez-vous-a-ruby-on-rails
- J'ai déjà cité le cours gratuit d'Elixir sur Udemy
- Formation gratuite sur Phoenix/LiveView (le RoR d'Elixir) : Je n'ai pas fini encore, mais c'est très intéressant. Le style de programmation est moderne. Sans renoncer aux jolis effets, on reste dans un framework de haut niveau qui va s'interfacer en sous-marin avec Node, puisque qu'à aucun moment on ne code de JavaScript. L'asynchronisme est utilisé sans effort, jamais on ne parle de thread ou de futur ou de promesse, et malgré tout on va pouvoir faire apparaître des animations d'attente, pendant que les tâches s'exécutent en arrière-plan. Pour éviter la trop grande attention portée à la base de données, on travaille avec des résultats en dur dans le code. Le pattern matching est très souvent utilisé et simplifie la programmation de la logique. Au lieu d'utiliser la technique Javascript d'ajax, deux websockets sont utilisés pour synchroniser le client et le serveur avec l'échange de juste les changements. Tout ce qui n'a pas changé vient du cache.
Ça se passe sur un site privé de formation en anglais, mais c'est gratuit: https://online.pragmaticstudio.com/courses/
Voilà, pour les curieux qui voudraient varier un peu les plaisirs pour s'intéresser à Ruby/Erlang/Elixir plutôt que les sempiternels Python ou JavaScript et PHP. Que ce soit OpenClassRooms ou Pragmatic Studio, dans les deux cas, la formation est bien construite
: on suit un chemin bien balisé qui mène à une bonne compréhension, après visionnage de présentations en video et TP, mains sur le clavier, des sujets abordés.
Si ça peut aider ou inspirer...
J-P
Un petit exemple simple de code Elixir pour avoir une idée du style général. Ce n'est pas le parfum vanille le plus simple, c'est un peu avec supplément Chantilly et noisettes
Propulsé par Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)