"D'une programmation objet classique au free monad."
Cette présentation explique le cheminement suivi par le code #Scala au sein de @RudderProject, en partant d'un erzatz de Java vers plus de programmation fonctionnelle et de Développement Dirigé par les Types.
Webinar Darkmira PHParty7 France - Présentation des avantages de la nouvelle fonctionnalité de php7, le support des types scalaires dans la définition des arguments d'une fonction
Cette présentation aura pour objectif d’introduire le langage de programmation Scala. Ce dernier bénéficie depuis plusieurs mois d’un véritable engouement qui se reflète au regard de la communauté française croissante.
Pour cela Ludwine Probst et Florent Lagrede reviendront donc sur les notions fondamentales, illustrées d’exemples sur des problèmes récurrents de programmation, afin de dégager les spécificités de ce langage et certains de ses atouts.
Aucune connaissance de Scala n’est donc nécessaire, seulement l’envie de découvrir un nouveau langage.
Kevin Avignon: Roslyn - La plateforme de compilation .NETMSDEVMTL
4 mai 2015
Groupe .NET/ASP.NET
Sujets: Roslyn - La plateforme de compilation .NET
Conférencier: Kevin Avignon
Roslyn est la nouvelle plateforme .NET de compilation créé par Microsoft. En exploitant Roslyn, il devient nettement plus facile de traverser un fichier source (.cs ou .vb) et instaurer de nouvelles règles d'affaires ou de validation comme il était fait avec FxCop. Un des nombreux bienfaits de Roslyn, c'est que les règles d'affaires développer en C# ou VB.NET fonctionnent autant dans un langage que dans l'autre.
Plan de la présentation:
- Qu'est-ce que Roslyn
- Quelles sont les librairies effectuant du code analysis ?
- Introduction sur le Syntax Tree et Syntax Nodes
- Comment utiliser le Syntax Visualizer
- Bâtir son premier analyzer en C#
- Qu'est-ce qu'un code fix
- Les pièges à éviter en faisant de l'analyse
Les applications web recourent de plus en plus au javascript, et on commence maintenant à recourir au javascript pour les parties serveur avec des outils comme Node.js TypeScript est un nouveau language permettant d'annoter et de structurer son code javascript, afin d'en faciliter la fiabilité et la maintenance. Dans cette session, nous vous présenterons les bases de TypeScript et comment tirer le meilleur parti de ce nouvel outil dans vos applications.
Webinar Darkmira PHParty7 France - Présentation des avantages de la nouvelle fonctionnalité de php7, le support des types scalaires dans la définition des arguments d'une fonction
Cette présentation aura pour objectif d’introduire le langage de programmation Scala. Ce dernier bénéficie depuis plusieurs mois d’un véritable engouement qui se reflète au regard de la communauté française croissante.
Pour cela Ludwine Probst et Florent Lagrede reviendront donc sur les notions fondamentales, illustrées d’exemples sur des problèmes récurrents de programmation, afin de dégager les spécificités de ce langage et certains de ses atouts.
Aucune connaissance de Scala n’est donc nécessaire, seulement l’envie de découvrir un nouveau langage.
Kevin Avignon: Roslyn - La plateforme de compilation .NETMSDEVMTL
4 mai 2015
Groupe .NET/ASP.NET
Sujets: Roslyn - La plateforme de compilation .NET
Conférencier: Kevin Avignon
Roslyn est la nouvelle plateforme .NET de compilation créé par Microsoft. En exploitant Roslyn, il devient nettement plus facile de traverser un fichier source (.cs ou .vb) et instaurer de nouvelles règles d'affaires ou de validation comme il était fait avec FxCop. Un des nombreux bienfaits de Roslyn, c'est que les règles d'affaires développer en C# ou VB.NET fonctionnent autant dans un langage que dans l'autre.
Plan de la présentation:
- Qu'est-ce que Roslyn
- Quelles sont les librairies effectuant du code analysis ?
- Introduction sur le Syntax Tree et Syntax Nodes
- Comment utiliser le Syntax Visualizer
- Bâtir son premier analyzer en C#
- Qu'est-ce qu'un code fix
- Les pièges à éviter en faisant de l'analyse
Les applications web recourent de plus en plus au javascript, et on commence maintenant à recourir au javascript pour les parties serveur avec des outils comme Node.js TypeScript est un nouveau language permettant d'annoter et de structurer son code javascript, afin d'en faciliter la fiabilité et la maintenance. Dans cette session, nous vous présenterons les bases de TypeScript et comment tirer le meilleur parti de ce nouvel outil dans vos applications.
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017) univalence
Tallk présenté à Devoxx avec Bachir Ait M'Barek : https://www.linkedin.com/in/baitmbarek
C’est la révolution dans la BI, les zones tampon FTP laissent la place aux systèmes de fichier distribués, le SQL s'exécute sur Hadoop, les dashboard en HTML5 remplacent les clients lourds, mais ne peut-on pas rationaliser un peu l’approche ?
Comment s’y prendre pour transformer une chaine BI en datalake ?
Cette université fera le tour de l’ingénierie des données en mode BigData. Au travers d’une présentation détaillée des concepts, de retour d’expériences et d’un cas pratique, nous allons découvrir :
les technologies et l’architecture, avec Spark, Kafka, Elasticsearch, Impala et Mesos,
et les méthodes associées : cycle de développement avec Hadoop, tests unitaires, jointures, gestion de la qualité de donnée, recette en mode Big Data et gestion des métadonnées.
Big Data Viz (and much more!) with Apache ZeppelinBruno Bonnin
Slides du talk réalisé à Web2Day 2016 sur Apache Zeppelin (env. dédié à l'exploration des données, avec support de multiples langages, multiples backends)
Android, Spring, Gradle et de nombreux autres projets apportent leur soutien au langage Kotlin. Fin 2017, Kotlin tient-il ses promesses ?
Retour d’expérience sur le langage, ses avantages et inconvénients sur un projet Mobile, un projet Back et bien plus.
Conférence Devoxx FR 2022
"Microservices, DDD et bootstrapping pour faire un départ lancé"
Résumé de la présentation :
Associer microservices et conception DDD (Domain-Driven Design) semble une évidence. Le découpage en contextes et les différentes couches d’architecture constituent un cadre séduisant pour bâtir des microservices avec une structure stéréotypée. Mais si on souhaite respecter les fondamentaux du DDD et garantir l’isolation des différentes couches on arrive rapidement à une structure de projet basée sur plusieurs modules qui peuvent devenir complexes à gérer et qui risquent de ralentir le cycle de développement, en particulier lors de la phase de démarrage.
Cette présentation est un retour d’expérience d’un grand projet dans lequel le générateur de code Telosys a été utilisé pour automatiser la phase d’amorçage de chaque microservice.
Environnement technique : Java, SpringBoot, Telosys
The Future of JavaScript, presented by Samir Rouabhi at the 3rd edition of Algiers Developer Meetup, which was held at Djezzy Training Center on October 3rd, 2015
.Net pour le développeur Java - une source d'inspiration?Rui Carvalho
Pour se remettre dans le contexte, nous parlons ici de .Net présenté à une conférence Java.
Nous allons revoir un peu d'historique des débuts pré-.Net et des inspirations mutuelles des deux environnements. Puis nous parlerons fonctionnalités à travers un exemple illustrant notamment les points essentiels de C# aujourd'hui avec les lambdas qui arriveront avec Java 8.
Nous finirons enfin avec une partie communautaire.
What if configuration management didn't need to be lvl60 in dev?RUDDER
Slides from Alexandre BRIANCEAU's talk at #OSSPARIS19 (Open Source Summit.
Server infrastructure automation is not simple. Several solutions have existed for several years and most of them rely on infra-as-code to achieve their mission. By the way, why infra-as-code?
And unfortunately, these solutions require strong development skills. So how can we do this when the infrastructure team does not have sufficient and, above all, homogeneous expertise? Because otherwise, beware of the "Guru Team" effect, or how the infrastructure automation to save time ends up with a huge SPOF because only one person in the team knows how it works....
I would like to discuss this together and introduce you to RUDDER briefly. RUDDER is a configuration management solution, and therefore infra-as-code, that allows you to automate your systems by relying entirely on a graphical interface to manage your configurations. Because the infrastructure is complex enough to add a layer!
Slides from Alexandre BRIANCEAU's talk at #OSSPARIS19 (Open Source Summit Paris 2019).
Security is everyone's business, an exploited breach is enough. Teams are aware of this and yet it is still as difficult as ever to be able to ensure, be confident, and reassure others (prove) that at least one party is under control.
And when it comes to server infrastructure, especially at the OS / middleware level, everything gets complicated. Even with an operational security team, it is difficult to ensure that the Information System Security Policy and security recommendations are properly implemented on all servers.
How can we be sure that our security policies are properly applied on all our servers other than through a massive and costly audit? Even if they were when they were created, how do you know if they remain perfectly compliant after a few days / weeks / months?
Let's discover together RUDDER, an open-source solution for continuous compliance based on configuration management to automatically audit and/or correct our systems.
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017) univalence
Tallk présenté à Devoxx avec Bachir Ait M'Barek : https://www.linkedin.com/in/baitmbarek
C’est la révolution dans la BI, les zones tampon FTP laissent la place aux systèmes de fichier distribués, le SQL s'exécute sur Hadoop, les dashboard en HTML5 remplacent les clients lourds, mais ne peut-on pas rationaliser un peu l’approche ?
Comment s’y prendre pour transformer une chaine BI en datalake ?
Cette université fera le tour de l’ingénierie des données en mode BigData. Au travers d’une présentation détaillée des concepts, de retour d’expériences et d’un cas pratique, nous allons découvrir :
les technologies et l’architecture, avec Spark, Kafka, Elasticsearch, Impala et Mesos,
et les méthodes associées : cycle de développement avec Hadoop, tests unitaires, jointures, gestion de la qualité de donnée, recette en mode Big Data et gestion des métadonnées.
Big Data Viz (and much more!) with Apache ZeppelinBruno Bonnin
Slides du talk réalisé à Web2Day 2016 sur Apache Zeppelin (env. dédié à l'exploration des données, avec support de multiples langages, multiples backends)
Android, Spring, Gradle et de nombreux autres projets apportent leur soutien au langage Kotlin. Fin 2017, Kotlin tient-il ses promesses ?
Retour d’expérience sur le langage, ses avantages et inconvénients sur un projet Mobile, un projet Back et bien plus.
Conférence Devoxx FR 2022
"Microservices, DDD et bootstrapping pour faire un départ lancé"
Résumé de la présentation :
Associer microservices et conception DDD (Domain-Driven Design) semble une évidence. Le découpage en contextes et les différentes couches d’architecture constituent un cadre séduisant pour bâtir des microservices avec une structure stéréotypée. Mais si on souhaite respecter les fondamentaux du DDD et garantir l’isolation des différentes couches on arrive rapidement à une structure de projet basée sur plusieurs modules qui peuvent devenir complexes à gérer et qui risquent de ralentir le cycle de développement, en particulier lors de la phase de démarrage.
Cette présentation est un retour d’expérience d’un grand projet dans lequel le générateur de code Telosys a été utilisé pour automatiser la phase d’amorçage de chaque microservice.
Environnement technique : Java, SpringBoot, Telosys
The Future of JavaScript, presented by Samir Rouabhi at the 3rd edition of Algiers Developer Meetup, which was held at Djezzy Training Center on October 3rd, 2015
.Net pour le développeur Java - une source d'inspiration?Rui Carvalho
Pour se remettre dans le contexte, nous parlons ici de .Net présenté à une conférence Java.
Nous allons revoir un peu d'historique des débuts pré-.Net et des inspirations mutuelles des deux environnements. Puis nous parlerons fonctionnalités à travers un exemple illustrant notamment les points essentiels de C# aujourd'hui avec les lambdas qui arriveront avec Java 8.
Nous finirons enfin avec une partie communautaire.
Similaire à OSIS 2017 - Scala REX dans Rudder (20)
What if configuration management didn't need to be lvl60 in dev?RUDDER
Slides from Alexandre BRIANCEAU's talk at #OSSPARIS19 (Open Source Summit.
Server infrastructure automation is not simple. Several solutions have existed for several years and most of them rely on infra-as-code to achieve their mission. By the way, why infra-as-code?
And unfortunately, these solutions require strong development skills. So how can we do this when the infrastructure team does not have sufficient and, above all, homogeneous expertise? Because otherwise, beware of the "Guru Team" effect, or how the infrastructure automation to save time ends up with a huge SPOF because only one person in the team knows how it works....
I would like to discuss this together and introduce you to RUDDER briefly. RUDDER is a configuration management solution, and therefore infra-as-code, that allows you to automate your systems by relying entirely on a graphical interface to manage your configurations. Because the infrastructure is complex enough to add a layer!
Slides from Alexandre BRIANCEAU's talk at #OSSPARIS19 (Open Source Summit Paris 2019).
Security is everyone's business, an exploited breach is enough. Teams are aware of this and yet it is still as difficult as ever to be able to ensure, be confident, and reassure others (prove) that at least one party is under control.
And when it comes to server infrastructure, especially at the OS / middleware level, everything gets complicated. Even with an operational security team, it is difficult to ensure that the Information System Security Policy and security recommendations are properly implemented on all servers.
How can we be sure that our security policies are properly applied on all our servers other than through a massive and costly audit? Even if they were when they were created, how do you know if they remain perfectly compliant after a few days / weeks / months?
Let's discover together RUDDER, an open-source solution for continuous compliance based on configuration management to automatically audit and/or correct our systems.
OSIS 2019 - Qu’apporte l’observabilité à la gestion de configuration ?RUDDER
On parle d’observabilité des services lorsque ceux-ci exposent des états et métriques internes pour améliorer la disponibilité globale.
Qu’en est-il de l’observabilité des infrastructures sur lesquelles ils sont déployés, configurés et maintenus ?
Les différents logs (centralisés, agrégés) permettent un bon début d’analyse mais il faut aussi observer les systèmes au fil de l’eau pour tracer chaque changement et les corréler avec le monitoring. Aujourd’hui, ces étapes de configuration IT devraient être prises en charge par les outils de gestion de configuration, qui deviennent la passerelle vers l’observabilité des opérations.
Nous montrerons l'intérêt de cette approche pour la gestion IT moderne avec un retour d’expérience sur les challenges de leur mise en place dans Rudder, notre solution libre d’audit et de gestion de configuration en continu.
OW2Con - Configurations, do you prove yours?RUDDER
How can we be sure of the continuous configuration management proper operation? How to expose factual topic-related reports to dev, sec, managers, customers...?
We believe that, in order to deliver the full business and collaboration value of continuous configuration management, the solution needs to go further than simply applying policies - it must ensure configuration reliability; prove historized application and status; share it to other teams; notify of any drift with a relevant context.
This talk will present why and how we should be concerned about transmitting factual measures on infrastructure management to all parties involved. We will also guide you through the journey to include a full-fledged reporting feature in a configuration management solution.
The latest major version of the solution has brought a major new feature to the Rudder solution: a plugin ecosystem.
The Rudder software architect will present the reasons for this new feature, how it works, and what are the different plugins available.
Benoit Peccatte, CfgMgmtCamp 2019.
Benoit Peccatte started out as a developer for air traffic control systems but quickly became more interested in writing code generators to automate his job.
After meeting some smart sysadmins on the beach, he switched jobs and has been automating servers for the past decade.
He stumbled across open source in engineering school, and quickly became convinced that free software is the only way to keep software maintainable whatever happens in the future.
Benoit is now trying to automate his job on Rudder, developing features in Rudder to continuously configure and audit more and more servers.
What uses for observing operations of Configuration Management?RUDDER
Nicolas Charles, CfgMgmtCamp 2019.
More and more services expose their state, internal details and metrics to be observable, and improve overall quality of service.
But what about observing the infrastructure they are deployed, configured and maintained on?
What can we learn from that, and what do we need from configuration management to get these features and metrics?
Logs from installation is a good start, but they need centralization, aggregation and especially knowledge derivation from these - but also we need to observe these features over time, to trace changes, and correlate them with monitoring.
Rudder was built around the predicate that all actions of the configuration agent need to be traced, centralized and exposed in a meaningful way - with agents ensuring the continuous configuration of systems, and this talk will show the rationale behind this predicate, how we implemented this solution, and the benefits of this approach for the modern IT world.
UX challenges of a UI-centric config management toolRUDDER
Raphaël Gauthier, CfgMgmtCamp 2019.
One of Rudder’s main focuses is its comprehensive graphical user interface, which allows users to view and manage its configurations without writing a line of code.
The user experience and interface considerations for a tool as technical and complex, and with such potential to break things as a configuration management tool are certainly a challenge, and in some ways in unchartered territory. Rudder’s frontend developer will present an analysis of the situation, the issues encountered and the approach adopted for the improvement of UX and UI planned for 2019.
What happened in RUDDER in 2018 and what’s next?RUDDER
Alexis Mousset, CfgMgmtCamp 2019.
Let’s take a look at Rudder’s new features from 2018, both in terms of the features of versions 4.3 and 5.0 as well as the new documentation and our platform for building and distributing binaries.
We will then present the provisional roadmap for 2019: let’s go to Rudder 5.1 and 5.2!
Alexandre Brianceau, CfgMgmtCamp 2019.
Rudder is an open source configuration management tool that includes continuous auditing (with or without remediation), compliance info and graphs and the possibility to configure everything in the UI and/or APIs.
It has been around for more than six years and has users large (think 10 000 nodes) and small around the world.
Let’s take a moment to look at the vision that lead us here, how Rudder is different from similar tools, and what users find invaluable, nice (or annoying - I’ll be honest!).
If you’re not familiar with Rudder this is a great talk to attend to get the basics covered.
How can we be sure of the continuous configuration management proper operation? How to expose factual topic-related reports to dev, sec, managers, customers...?
We believe that, in order to deliver the full business and collaboration value of continuous configuration management, the solution needs to go further than simply applying policies - it must ensure configuration reliability; prove historized application and status; share it to other teams; notify of any drift with a relevant context.
This talk will present why and how we should be concerned about transmitting factual measures on infrastructure management to all parties involved. We will also guide you through the journey to include a full-fledged reporting feature in a configuration management solution.
L'audit en continu : clé de la conformité démontrable (#POSS 2018)RUDDER
Présentation issue du talk pour le Paris Open Source Summit 2018 par Alexandre Brianceau dans le track Cybersécurité.
Les politiques de sécurité sont de plus en plus complexes et exigeantes à mettre en oeuvre pour les équipes opérationnelles. Comment pouvons-nous être certains que nos politiques de sécurité soient bien appliquées sur tous sos serveurs autrement qu’à travers un audit massif et coûteux ? Quand bien même le seraient-elles lors de leur création, comment savoir si elles restent parfaitement conformes après quelques jours / semaines / mois ?
Nous montrerons comment définir des règles techniques d'une politique de sécurité dans RUDDER, une solution d'automatisation de conformité informatique open source issue du monde devops où la gestion automatique de la configuration est déjà la norme. ensuite toutes les 5 minutes sur chacun des serveurs afin de remonter un résumé global permettant alors d’inspecter les problèmes qui doivent être corrigés.
Nous expliquerons également comment une politique d’audit déployée avec succès peut être imposée sur tous les systèmes avec le même outil, en passant de l’audit automatique à la remédiation automatique.
Fiabilité et conformité continues en production avec Rudder (#BBOOST 2018)RUDDER
Présentation issue du talk pour le BBOOST 2018 par Alexandre Brianceau.
Une infrastructure dont les configurations ne sont pas homogènes, surveillées et maintenues en conformité en continu finit inévitablement par dériver, entraînant failles de sécurité et incidents de production.
Alors que la fiabilité de l’IT est devenue critique, la méthode traditionnelle consistant à mener des audits tous les X mois montre ses limites : une dérive entre deux audits peut passer inaperçue et causer un incident.
RUDDER est une solution qui garantit la conformité des configurations en permanence.
Stay up - voyage d'un éditeur de logiciels libresRUDDER
Voici le retour d'expérience d'un des fondateurs Rudder sur ce que c'est qu'être entrepreneur dans les logiciels libres et les 10 ans de voyage écoulés à travers 4 étapes clés:
- la constitution de l'équipe,
- le passage par un incubateur,
- la levée de fond (ou pas),
- et la recherche d'un business model soutenable.
How we scaled Rudder to 10k, and the road to 50kRUDDER
Management graphical interface, real-time compliance and ease of use are some of Rudder core principles. When Rudder was created in 2010, hundreds of servers were considered a large installation, and the constraints and limits to manage systems were totally different than nowadays, as IT speaks in terms of thousands of nodes. I’ll present how we scaled Rudder from hundreds to 10k nodes, on each different aspect of the product: changing the way nodes talk with the Rudder server, rewriting the data model, evolving the UI, how we detected new limits - further away - and how we removed them; and made sure these limits don’t come back through tooling and testing. Finally, I’ll present the planned evolutions in upcoming releases to reach 50k managed nodes.
Rudder 4.1 was released in March 2017 with:
- an advanced feature to query external APIs and pull in node properties dynamically
the ability to add "key=value" tags to all Rules and Directives in order to categorize them
- a new API on relay servers to enable node-to-node file sharing and remote run in firewalled environments performance improvements
- a new plugin package format
Rudder 4.2 was released in September 2017 and includes the support for a new plugin that adds support for a new Windows DSC-based agent. Rudder 4.3 will include:
- Parameters for Technique Editor techniques
- ACLs on the API accounts
- Many architecture improvements
In parallel, new plugins are being developed:
- A plugin to integrate data from external APIs
- Monitoring integration with Centreon
- CMDB integration with iTop
- A reporting plugin for historized compliance
This talk will introduce these new features and show how to use them, hopefully getting you as excited as we are! Then, we will move on to explain about longer-term feature ideas we have for Rudder, and the general vision linked to future developments.
About Nicolas Charles
Nicolas is a tinkerer who likes when things just work, and tries his best to reach this goal. He started as a developer 15 years ago, and often had to reach out of this role to solve issues.
In 2010, he co-founded Normation, and he still enjoys fixing things in Rudder and at its users.
DevOps D-Day 2017 - Gestion des configurations et mise en conformité chez un ...RUDDER
En tant qu’hébergeur et infogérant, Jaguar Network est confronté à une double évolution :
Le marché attend de la part d’un Service Provider de prendre en charge une part toujours plus importante de la gestion du système d’information.
La croissance de l’entreprise entraîne une pression plus importante quantitativement (scalabilité) et qualitativement (garantir la fiabilité et la sécurité sur l’ensemble du parc géré).
Ainsi, Jaguar Network a dû trouver une solution capable de résoudre cette double problématique à laquelle de plus en plus de sociétés sont confrontées : assurer la croissance rapide du parc tout en améliorant et en garantissant la fiabilité.
Grâce à RUDDER, solution open-source française de Continuous Configuration dédiée aux contraintes de la production, l’atteinte de cet objectif a été grandement facilité. En duo avec l’éditeur de RUDDER, Jaguar Network racontera le déroulement de ce projet, de la mise en place de l’outil aux résultats constatés, en passant par l’intégration avec les autres technologies du SI.
Un retour d’expérience concret et complet sur le concept de Continuous Configuration et son implémentation avec RUDDER.
RUDDER is an easy to use, web-driven, role-based solution for IT Infrastructure Automation and Compliance. With a focus on continuously checking configurations and centralising real-time status data, RUDDER can show a high-level summary (“ISO 27001 rules are at 100%!”) and break down noncompliance issues to a deep technical level (“Host prod-web-03: SSH server configuration allows root logins”).
A few things that make RUDDER stand out:
- A simple framework allows you to extend the built-in rules to implement specific low-level configuration patterns, however complex they may be, using simple building blocks (“ensure package installed in version X,” “ensure file content,” “ensure line in file,” etc.). A graphical builder lowers the technical level required to use this.
- Each policy can be independently set to be automatically checked or enforced on a policy or host level. In Enforce mode, each remediation action is recorded, showing the value of these invisible fixes.
- RUDDER works on almost every kind of device, so you’ll be managing physical and virtual servers in the data center, cloud instances, and embedded IoT devices in the same way.
- RUDDER is designed for critical environments where a security breach can mean more than a blip in the sales stats. Built-in features include change requests, audit logs, and strong authentication.
- RUDDER relies on an agent that needs to be installed on all hosts to audit. The agent is very lightweight (10 to 20 MB of RAM at peak) and blazingly fast (it’s written in C and takes less than 10 seconds to verify 100 rules). Installation is self-contained, via a single package, and can auto-update to limit agent management burden.
- RUDDER is a true and professional open source solution—the team behind RUDDER doesn’t believe in the dual-speed licensing approach that makes you reinstall everything and promotes open source as little more than a “demo version.”
RUDDER is an established project with several 10000s of node managed, in companies from small to biggest-in-their-field. Typical deployments manage 100s to 1000s of nodes. The biggest known deployment in 2016 is about 7000 nodes.
1. Tous droits réservés
normation.com
D’une programmation objet
classique aux Free Monads
8 ans de Scala dans Rudder
François ARMAND
far@normation.com
Vincent MEMBRÉ
vme@normation.com
1
3. Tous droits réservés
normation.com
Maturité de l’écosystème
● Lightbend (ex TypeSafe): L’entreprise
derrière Scala
● LAMP: Un Labo sur le développement de
Scala
● Scala Center: Promotion du langage dans
la communauté OSS
● TypeLevel: Rassemblement de la
communauté poussant les aspects
fonctionnels du langage
● Netflix, IBM, Twitter, Linked In, Xebia,
Criteo … Scala est partout !
Photo historique de la première assemblée de TypeLevel
3
5. Tous droits réservés
normation.com
What’s about?
Est-ce que la programmation fonctionnelle
améliore la qualité des développements ?
● 8 ans que nous développons Rudder en Scala
○ 8 ans que l’on pratique son aspect fonctionnel
● Qu’est ce que Scala nous apporte ?
● Des exemples, sortis directement de notre code, et
commentés rien que pour vous !
5
6. Tous droits réservés
normation.com
Qui parle ?
● 11 ans de Scala
● CTO @Normation
● Lead-dev de Rudder
● choix de Scala il y a
8 ans pour Rudder
● Etude “LaFoSec” avec
l’ANSSI en 2011
Continuous Configuration for Effective Compliance
François ARMAND / @fanf42
● 6 ans de Scala
● Développeur
● backend / api /
packaging ...
● Release manager
Vincent MEMBRÉ / @macbuche
6
7. Tous droits réservés
normation.com
Scala (historique)
● Créé par Martin Odersky à l’École Polytechnique
Fédérale de Lausanne (EPFL)
● Mêle les principes Objet et Fonctionnel (“dot theory”)
● 2004: Release publique (2.0)
● 2008: Early adopters: communauté très réduite
● 2010: Adoption en hausse: Scala 2.8, API Collection
● 2015: Scala devient hype! (Avec Spark et Big Data)
● La Recherche continue avec Dotty (futur compilateur)
7
8. Tous droits réservés
normation.com
Qu’est ce qu’on aime dans Scala?
Le compilateur est notre meilleur ami !
Si ça compile, c’est quasiment bon!
(Bon des fois c’est un petit peu long…, mais ca vaut le coût!)
8
9. Tous droits réservés
normation.com
Qu’est ce qu’on aime dans Scala?
L’expressivité du langage apporte beaucoup
● Tout est expression
● Peu de boilerplate
● Permet de produire un code concis
● Facile à maintenir
Particulièrement mis en valeur avec:
Les implicits
9
10. Tous droits réservés
normation.com
Qu’est ce qu’on aime dans Scala?
Un système de type puissant et précis
● L’intention se retrouve dans les types, du TDD (t => type!)
● Facile d’exprimer la sémantique du programme
● Abstractions et compositions par des propriétés prouvées
● Des refactoring de grande ampleur sans douleur
10
12. Tous droits réservés
normation.com
Les bases
● Uniquement du code non mutable + fonctions
○ (quelques rares cas, scope limité à une fonction ou moins)
● JAMAIS de NULL !
○ Option[String]
● Pas de “String Typing”
○ ex: pas de String,
○ mais des NodeID
● Repousser les effets de bord au maximum
○ Un coeur pur !
● Fonctions d’ordre supérieur, lambda
○ ex: collection: filter, map, etc
12
13. Tous droits réservés
normation.com
Les bases
● simple à comprendre, comportements répétables
○ structure de données complètement initialisées
○ pas de mutation ou d’I/O, uniquement des transformations
○ les types permettent de comprendre les intentions
● aide du compilateur lors de refactoring
○ “si ça compile, c’est (presque) bon”
● limiter le boilerplate
○ peu de cérémonie
○ se focaliser sur le but, l’intention
13
Bénéfices
14. Tous droits réservés
normation.com
ADT (Sum Type)
● Pattern matching (couverture de totalité)
14
def getPeople(id: PeopleId): Either[Error,Option[People]] = {...}
val message = getPeople(PeopleId(“Alice”) match {
case Right(Some(alice)) => s“Alice age is ${alice.age}”
case Right(None) => “Alice not found!”
case Left (Error(msg) => s“Error with storage: ${msg}”
}
println(message)
● Déclaration de sum type (presque simple)
sealed abstract class Either[+A, +B] { … }
final case class Left [+A, +B](a: A) extends Either[A, B]
final case class Right[+A, +B](b: B) extends Either[A, B]
15. Tous droits réservés
normation.com
ADT (Sum Type)
● rendre impossible les états illégaux
○ moins de complexité “accidentelle”
● aide du compilateur sur la totalité des traitements
● les cas d’erreurs sont des données comme les autres
○ on conserve la transparence référentielle
● faciliter la composition de programme
○ programmation fonctionnelle == légos
15
Bénéfices
16. Tous droits réservés
normation.com
● Décrire la logique du programme
● sucre syntaxique “For comprehension”
16
● Gérer les erreurs de façon pure et composable
● S’appuyer sur des lois mathématiques :
○ on sait que la tuyauterie fonctionne,
○ on peut se concentrer sur la logique métier
Bénéfices
Monade, erreurs &
for comprehension
17. Tous droits réservés
normation.com
Monade, erreurs &
for comprehension
17
● Chaque ligne renvoie Either[Error, T]
● Either est une monade
● résultat: Either[Error, T]
○ T = type de la dernière ligne
18. Tous droits réservés
normation.com
Implicits
● La “Scala touch”
○ https://www.slideshare.net/Odersky/what-to-keave-implicit
● permet de laisser le compilateur choisir
automatiquement certains paramètres
● exemples d’utilisation :
○ passage de contexte
○ implémentation de “types classes”
○ preuve de théorèmes
18
19. Tous droits réservés
normation.com
Ecosystème: bibliothèques “FP”
● “ bibliothèques qui fournissent des abstractions pour
la programmation fonctionnelle en Scala ”
● tiennent compte des spécificités de la JVM
○ constructions stack-safe
○ optimisations (pression sur le GC)
● fournissent des éléments de base des Catégories :
○ monoïd, semi-group, applicative functor, monad, …
○ des instances: IO, Writer, Either, Error, etc.
○ Free Monad
19
Scalaz & Cats
20. Tous droits réservés
normation.com
Ecosystème: bibliothèques “FP”
● Free Monad
○ abstraction couramment employée pour proposer un DSL (Domain
Specific Language) et des interpréteurs de ce DSL
20
Scalaz & Cats
Commands
(monads)
Interpreters
Programme Résultat
DSL
(ADT paramétré
=> functors)
Données Pures
21. Tous droits réservés
normation.com
Ecosystème: bibliothèques “FP”
21
Doobie : principle JDBC
● DSL de construction de requêtes JDBC
● basé sur des Free Monad
● https://www.slideshare.net/normation/doobie-feedbacks-from-the-trenches-scalaio-2016
● gestion propre des sessions, transactions, …
● gestion propre des erreurs, null, …
● Mapping “case class” ⇔ SQL gratuit et automatique
Bénéfices
22. Tous droits réservés
normation.com
Ecosystème: bibliothèques “FP”
● DSL de gestion de “Task” (unité de programme)
● exécutés sur un scheduler (asynchrone, parallel, etc)
● … à base de Free Monads
22
Monix: programmation asynchrone pure FP
● facilité de rajouter des contraintes
○ rate limitation, exécution ordonnée, sémaphores...
● pas de gestion manuelle des threads / futures / etc
● Pour les tests: contrôle du temps via un faux scheduler
Bénéfices
23. Tous droits réservés
normation.com
Next steps
23
Plus de bibliothèques
fonctionnelles (pures)
⇒ JSON, serveur REST
Property-based testing
⇒ scalacheck
Nos propres DSL et nos
interpréteurs
24. Tous droits réservés
normation.com
Conclusion
24
● libération: le code évolue dans un cadre clairement défini, répétable
● vers une “lingua franca” trans-bibliothèques,
○ mais aussi trans-langage de programmations (Haskell, OCaml…)
“recettes”
(design patterns)
Abstraction avec
propriétés prouvés,
lois de composition
programmation
Orientée Objet
Programmation
fonctionnelle
Design Top-bottom,
framework
Design bottom-up,
bibliothèques