Retour sur Scalar 2019

Dzień dobry

Scalar est une conférence sur Scala se déroulant à Varsovie, Pologne depuis 2014. Cette année, deux membres de l'équipe ont eu le plaisir de participer à l'édition 2019 qui s'est déroulée sur deux journées, du 5 au 6 avril 2019.

Les deux membres de l'équipe sont :

  • Harrison Cheng, Data Engineer à Univalence depuis Mars 2019
  • Philippe Hong, Data Engineer à Univalence depuis Juillet 2017

Sur ces deux journées de conférences, il n'y a eu pas moins de 22 talks de 30 minutes (à l'exception du premier talk de Jon De Goes qui a duré un peu plus longtemps) sur des sujets variant du challenge de construire une architecture d'event sourcing purement fonctionnelle à une présentation de Kotlin pour les développeurs Scala.

Nous allons, dans cet article, survoler différents talks intéressants ayant pris place pendant la conférence.

Jour 1

Scalar s'est déroulé au POLIN Muzeum Historii Żydów Polskich (Musée de l'Histoire des Juifs polonais) non loin de la vieille ville de Varsovie.

Après avoir passé la sécurité, nous sommes accueilli par des membres du staff qui nous dirigent vers la salle de conférence. Scalar étant une conférence n'ayant qu'une seule track, cette salle de conférence a été utilisée pour toute la conférence.

atomically { delete your actors } - John A. De Goes (ft. Wiem Zine Elabadine)

Talk d'ouverture de la conférence, John de Goes accompagné de Wiem Zine présentent une nouvelle fonctionnalité pour ZIO, une librairie permettant de gérer votre code à effet, celle de pouvoir faire des transactions i.e. STM (Software Transactional Memory). Cela permet de résoudre le problème de concurrence en Scala de manière alternative aux autres méthodes (lock, actors,...).
La présentation a pris le parti de raconter une histoire humouristique, celle d'un voleur parvenant à voler des millions avec des exploits informatique basés sur la concurrence, d'un héros qui est le STM et de nous même, supposés devenir des héros grâce à ZIO.

S'ensuit une présentation des fonctionnalités de ZIO STM avec la promesse que faire de la programmation concurrente avec ZIO STM est très accessible.

FS2 - Crash course - Lukasz Byczynski

Cette présentation de 10 minutes nous décrit FS2, une bibliothèque de streaming I/O. FS2 vient de FSS ⇒ Functional Streams for Scala. Lukasz nous décrit le stream comme étant des itérateurs dopés aux stéroïdes.

Comment commencer avec FS2 ?

  • Devenez familier avec la classe Stream
  • Essayez les méthodes covary et eval
  • Jouez avec la classe Pull
  • Regardez le package concurrent
  • Utilisez FS2 avec d'autres librairies comme Akka, Monix, etc...

The last frontier and beyond - Valentin Kasas

Nous commenceons ce talk avec les bienfaits de la programmation fonctionnelle, à savoir la possibilité d'abstraire du code afin d'éviter la répétition inutile, de passer moins de temps à chasser des bugs, etc. La programmation fonctionnelle est aussi très utile pour modéliser la donnée et les effets.

Nous utilisons dans tous les projets du même code pour sérialiser de la donnée, lire des fichiers de configuration, pretty print, etc... et tout ce code partage une caractéristique : le code dépend de la structure de la donnée.

Donc si nous pouvons abstraire sur cette structure nous pouvons alors bénéficier des avantages évoqués précedemmment.

Une manière de faire cela est d'utiliser des macros.

Le problème survient lorsque nous devons faire évoluer des ADTs et même si nous pouvons garder des anciennes versions de nos ADTs lorsque nos données évoluent, ce n'est pas très réaliste sur des projets trop larges ou qui évoluent beaucoup.

La solution proposée ici est tout simplement le schéma. Nous pouvons en résumé pourquoi pas nous débarasser de nos ADTs et d'utiliser simplement le concept de schéma pour gérer les évolutions.

Ainsi nous devons constituer notre propre version de schéma et pour cela nous avons besoin de

TODO IN ARTICLE

Scalatest : you're asserting it wrong

Dans ce talk, Jacek Kunicki nous explique comment bien faire ses assert avec la bibliothèque ScalaTest. En effet, il n'est pas bien intéressant d'avoir par exemple true was not false comme retour lorsqu'un test échoue.

Par exemple si on a val option = None:

Il vaut mieux utiliser option should be ('defined)qui renvoit None was not defined plutôt que option.isDefined should be (true) qui renvoit false was not true, ce qui est moins explicite.

Jour 2

Cellular Automata: How to become an artist with a few lines of code

Un talk un peu différent des autres. Maciej Gorywoda nous explique comment coder des automates cellulaires en Scala avec comme exemple le jeu de la vie et la fourmi de langton.

https://github.com/makingthematrix/ca_art

Functional Concurrency in Scala 101

Dans ce talk, Piotr Gawryś nous défini plusieurs concepts de la concurrence en programmation fonctionnelle dans Scala (principalement avec cats-effect, fs2, monix, zio).

Il commence par expliquer comment fonctionne la concurrence en général dans la jvm (définition concurrence et parallélisme, threads dans la jvm, context switch, threads pools, asynchronous boundary, task scheduling), puis enchaîne sur les différentes notions introduites par la programmation fonctionnelle (light asynchronous boundaries dans monix et cats-effects IO, fairness qui est la probabilité que différentes tasks peuvent s'exécuter, les green threads qui sont des threads programmés par la jvm plutot que par l'OS, les fibers qui sont comme des threads plus légers).

Taming your herd of cats

Ce talk est une présentation pour les personnes ne connaissant pas ou peu Cats, une librairie permettant de faire de la programmation fonctionnelle avancée. Différentes parties de la librairie sont présentées avec des exemples d'utilisation accompagnés d'astuces.

L'intérêt de ce type de talk est de faire découvrir en relative douceur des concepts plus poussés en programmation fonctionnelle en montrant ce qu'il est possible de réaliser avec ces concepts.
Un exemple connu est le combineAll pour les monoïdes qui permet de réduire une collection.

11 Little life-enhancing libraries

Jon Pretty nous demande de l'aide, il a trop de bibliothèques à gérer ! Dans ce talk, 11 bibliothèques nous sont présentées allant du parsing CSV au lightweight lens syntax, en passant par de l'inline pattern matching.

Nous traiterons ce talk plus en détail dans un prochain article. Restez à l'écoute :)

Kotlin for Scala developers

Ce qu'il faut retenir de ce talk, c'est que John A. De Goes <3 Kotlin.

Blague à part, ce talk de Jarek Ratajski nous présente Kotlin comme un Java ++ plutôt qu'un Scala - -. Il nous expose les différences entre Scala et Kotlin, les avantages à utiliser Kotlin (immutabilité, décision pragmatique sur l'absence d'obligation de compiler check, compilateur rapide, lambas et tailrec,...) et les limitations (pas de for comprehension, pas de type classes (même s'il y a un idiome spécifique pour des type classes dans la bibliothèque arrow), pattern matching limité...).

Scalar pour l'équipe

Commentaire Philippe : Dans l'ensemble les talks étaient bien présentés et réussi. Il y a eu beaucoup de talks sur le sujet de la concurrence et des acteurs. Les trois talks que j'ai préféré sont :

  • atomically { delete your actors }
  • 11 Little life-enhancing libraries
  • The last frontier and beyond

Avec en mention honorable Kotlin for Scala developers qui m'a personnellement donné envie de regarder d'un peu plus près Kotlin.

Commentaire Harrison : Scalar a été ma première conférence sur Scala, et c'était très intéressant. En tant que néophyte dans le domaine de la programmation fonctionnelle, je n'ai pas pu comprendre tout ce qui était expliqué dans les différents talks, mais cela m'a permis de voir les différentes bibliothèques Scala à surveiller et voir jusqu'à quel point vont les experts en Scala. J'ai apprécié le fait qu'il n'y avait qu'une scène et donc ne pas avoir à choisir entre tel ou tel talk.