J’ai eu la chance de pouvoir participer à la première édition française de scala.io les 24 et 25 Octobre derniers! Et pour celles et ceux qui n’y étaient pas, je vous propose de partager les quelques notes que j’ai prises.
« Failure: The Good Parts », keynote de Viktor Klang
« Real world Akka recipes » par Jamie Allen
Les bus de communication promettent l’intégrité des messages qui y passent, et parfois, même de la persistance. Cependant, comme on nous l’a bien expliqué pendant cette keynote, cette vision est purement idéale. Dans la réalité, les explosions solaires altèrent les données de nos disques.
On regorge d’autres solutions comme l‘event sourcing ou durable mailboxes mais ils viennent avec leur lot de problèmes.
Jamie Allen propose des patterns implémentables avec Akka non pas pour résoudre nos problèmes mais pour mieux vivre avec.
Notamment le pattern sentinel qui permet de corriger les incohérences dans un système où l’on aurait perdu des messages.
Au niveau du control flow, Jamie passe en revue 3 stratégies:
– push with rate limiting : on ne pousse un message à un acteur que toutes les N millisecondes
– push with acknowledgement : on ne pousse un message que lorsqu’on a reçu l’ack du message précédent
– pull from workers to master : les consommateurs demande les messages à leur rythme.
Ensuite il mentionne akka clusters pour créer un système distribué.
Il termine par une démo d’Activator qui permet de créer son hello akka world en quelques clics.
« Purely functional IO with Scala » par Runar Bjarnason
L’intérêt d’être purement fonctionnel est de bénéficier de l’abstraction des fonctions. A -> B
est un contrat de service qui garantit que pour un A on aura toujours le même B (referential transparency). Cependant, si une telle fonction doit lire un fichier ou interroger une base de données, elle ne peut plus tenir sa promesse dans tous les cas, elle n’est plus pure.
Faire des IO purement fonctionnels (comme dans Haskell) avec Scala ne relève pas d’un tour de passe passe. Runar Bjarnason nous propose un framework pour faire cela.
Malheureusement les monoids, monads, free monads, world as state, ont eu raison de moi. Décrochage total au bout de 10 minutes.
Note à moi-même: apprendre Haskell ou lire son livre.
« Playframework Scala: democratising functional programming for web developers », keynote de Sadek Drobi
« Scalaz for the rest of us » par Adam Rosien
Mémoization
La mémoization est une abstraction du concept de cache. Elle permet de tirer partie de la transparence référentielle en wrappant une fonction pour mettre en cache les résultats de calculs. Ainsi, au premier appel d’une fonction, on fait le calcul, et au second on économise son CPU en utilisant la valeur dans le cache.
Du sucre!
if f() then 1 else 0
peut s’écrire f() ? 1 | 0
val a : Some("fo")
a.getOrElse("bar")
peut s’écrire a | "bar"
val c = g(f(a))
peut s’écrire c = a |> f |> g
Domain Validation
Mini-framework pour valider ses objets métier. Très propres
Opérations sur de grosses datastructure
J’ai pas super bien compris, du coup je trouve ça hyper compliqué, surtout quand on a goûté à Clojure.
Si vous voulez les détails de code, c’est ici.
Le talk est pragmatique, lent, et avec du code comme support. On arrive à suivre 🙂
Et les autres ?
Je n’ai malheureusement pas assez de notes mais j’ai aussi assisté à :
« Scraping the web with clojure » par Arnaud Bailly
Une vue d’avion de Clojure et de son écosystème.
« Pimp my GC – du Scala supersonique » par Pierre Laporte
Excellent talk qui explique le fonctionnement du GC, comment mesurer l’impact du GC sur son code et tuner les paramètres. Très riche!
Conclusion: faites des objets immutables (à courte durée de vie), c’est vraiment pas cher en GC.
« Extreme speedups and GPGPU: a tale of two practical uses of reified trees » par Olivier Chafik
J’ai découvert que Scala avait un système de macro. Tout le talk était basé sur cette fonctionnalité, donc je n’ai pas compris grand chose.
« Akka in Practice: Designing Actor-based Applications » par Age Mooij et Raymond Roestenburg
Un hands-on très didactique pour découvrir Akka. On peut même le refaire chez soi, en allant sur son repo github (scala-io-exercise-N).
Conclusion
Deux jours de bombardements fonctionnels, asynchrones et résilients. Trop de choses à voir, je n’aurai pas le temps de m’ennuyer ces prochains mois !!
La conf était très bien organisée, les talks de grande qualité, et le public très intéressant. Rendez-vous en 2014.
scala.io