SlideShare une entreprise Scribd logo
Votre mission ?
Découvrir Haskell et le
mettre en prod
@celine_louvet
fairvioo.com
Contexte et besoin
Le contexte
Début de Fairvioo
➔ Faire nos preuves
➔ À faible coût
Le besoin
Développement d’une application Web
➔ CRUD basique
➔ Peu de données au début,
➔ Possiblement beaucoup de données à
terme
Des contraintes ?
Pas de stack existante
Une seule vraie contrainte : être efficace et
viable rapidement et sur le moyen terme
Idéal : prendre du plaisir à développer
Choix de la techno
Choix de la techno
Totalement
subjectif !
Avantages
Pratique pour jeter
un POC.
Recrutement facile
Choix de la techno : NodeJs ?
Inconvénients
Code souvent peu
viable
Interprété
Avantages
Pratique pour jeter
un POC.
Recrutement facile
Choix de la techno : NodeJs ?
Inconvénients
Code souvent peu
viable
InterprétéLangage interprété
Avantages
Langage
“fonctionnel”
Choix de la techno : Ruby ?
Inconvénients
Interprété
Recrutement parfois
compliqué
Avantages
Langage
“fonctionnel”
Choix de la techno : Ruby ?
Inconvénients
Interprété
Recrutement parfois
compliquéLangage interprété
Avantages
Compilé
Écosystème très
riche
Choix de la techno : Java ?
Inconvénients
Très verbeux
Complexité pour
démarrer la stack
Avantages
Compilé
Bénéficie de l’
écosystème de Java
Langage fonctionnel
Choix de la techno : Scala ?
Inconvénients
Tentation de faire
du Java
Avantages
Compilé
Langage fonctionnel
Choix de la techno : Haskell ?
Inconvénients
Compliqué
Recrutement ?
Envie d’un langage
compilé
Choix de la techno
NodeJs
Ruby
Java
Scala
Haskell
Envie d’un langage
compilé
Envie de fun
Choix de la techno
NodeJs
Ruby
Java
Scala
Haskell
Envie d’un langage
compilé
Envie de fun
Choix de la techno
NodeJs
Ruby
Java
Scala
Haskell
Envie d’un langage
compilé
Envie de fun
Envie de découverte
Choix de la techno
NodeJs
Ruby
Java
Scala
Haskell
Envie d’un langage
compilé
Envie de fun
Envie de découverte
Choix de la techno
NodeJs
Ruby
Java
Scala
Haskell
Envie d’un langage
compilé
Envie de fun
Envie de découverte
Choix de la techno
NodeJs
Ruby
Java
Scala
Haskell
C’est parti
Vous connaître ?
A quoi ça ressemble ?
Haskell - Alias de type
type UserId = Text
type Date = UTCTime
Haskell - Datatypes
data UserType = Admin | Reviewer
Haskell - Datatypes
data User = User
{ uId :: UserId
, email :: Text
, password :: Text
, userType :: UserType
}
Haskell - Datatypes
let user = User uId email password type
where
uId = “123”
email = “email@test.com”
password = “azerty1234”
type = Admin
Haskell - Datatypes
let user = User “123” “email@test.com” ...
Haskell - Datatypes
let user = User “123” “email@test.com” ...
let userId = uId user
Haskell - Fonctions
isAdmin :: UserType -> Bool
isAdmin type = type == Admin
Haskell - Fonctions
hasType :: User -> UserType -> Bool
hasType user wanted = type == wanted
where
type = userType user
De quoi j’ai besoin ?
De quoi j’ai besoin
De quoi j’ai besoin
+
Haskero
De quoi j’ai besoin
Stylish
jaspervdj/stylish-haskell
De quoi j’ai besoin
hlint
hackage.haskell.org/package/
hlint
De quoi j’ai besoin
De quoi j’ai besoin
Cabal
www.haskell.org/cabal
De quoi j’ai besoin
Stack
www.haskellstack.org
De quoi j’ai besoin
De quoi j’ai besoin
De quoi j’ai besoin
De quoi j’ai besoin
Let’s code
Let’s code
API REST
Services
DB
Configuration
Let’s code
API REST
Services
DB
Configuration
API-REST : servant-server
Avantages
Simplicité de description des API
Facilité à mettre en place
API-REST : servant-server
Avantages
Simplicité de description des API
Facilité à mettre en place (client et serveur)
API-REST : servant-server
Avantages
Simplicité de description des API
Facilité à mettre en place (client et serveur)
API-REST : servant-server
Avantages
Simplicité de description des API
Facilité à mettre en place (client et serveur)
API-REST : servant-server
Avantages
Simplicité de description des API
Facilité à mettre en place (client et serveur)
API-REST : servant-server
Avantages
Simplicité de description des API
Facilité à mettre en place (client et serveur)
API-REST : servant-server
Avantages
Simplicité de description des API
Facilité à mettre en place (client et serveur)
API-REST : servant-server
Inconvénients
Messages d’erreur incompréhensibles
API-REST : servant-server
Inconvénients
Messages d’erreur incompréhensibles
API-REST : servant-server
Inconvénients
Messages d’erreur incompréhensibles
API-REST : servant-server
Inconvénients
Messages d’erreur incompréhensibles
API-REST : servant-server
Inconvénients
Messages d’erreur incompréhensibles
Let’s code
API REST
Services
DB
Configuration
DB : postgresql-simple
Avantages
S’apparente à un connecteur JDBC
Équivalent aux PreparedStatements en Java
DB : postgresql-simple
Avantages
S’apparente à un connecteur JDBC
Équivalent aux PreparedStatements en Java
DB : postgresql-simple
Inconvénients
Les erreurs SQL ne sont levées qu’au
Runtime
Un code pas très explicite
DB : postgresql-simple
Inconvénients
Boilerplate pas très sexy
Les erreurs SQL ne sont levées qu’au
Runtime
Let’s code
API REST
Services
DB
Configuration
Configuration
Lecture des variables d’environnement
fournie nativement
Configuration
Fourni nativement par Haskell
Configuration
Fourni nativement par Haskell
Configuration
Fourni nativement par Haskell
Et les tests ?
Et les tests ?
HSpec : équivalent à Chai.js (Should)
HUnit : équivalent à JUnit
QuickCheck : générateur de tests
Et les tests ?
HSpec : équivalent à Chai.js (Should)
HUnit : équivalent à JUnit
QuickCheck : générateur de tests
Et les tests ?
HSpec : équivalent à Chai.js (Should)
HUnit : équivalent à JUnit
QuickCheck : générateur de tests
Et si on mettait en Prod ?
Et si on mettait en Prod ?
Nouvelle instance sur Clever (PostgreSQL &
Haskell)
Redirection DNS
➔ Push Git via Pull Request
Et les performances ?
Des tutos à conseiller
Des tutos à conseiller
Vidéos de Frédéric Menou :
www.youtube.com/user/fredericmenou
Les points durs
Les points durs - Haskell
Énorme coût d’entrée
Les points durs - Haskell
Énorme coût d’entrée
N’est pas un langage orienté objet
Les points durs - Haskell
Énorme coût d’entrée
N’est pas un langage orienté objet
Complexité à écrire un code simple à lire
Les points durs - Haskell
Énorme coût d’entrée
N’est pas un langage orienté objet
Complexité à écrire un code simple à lire
Les points durs - Haskell
Énorme coût d’entrée
N’est pas un langage orienté objet
Complexité à écrire un code simple à lire
Les points durs - Haskell
Énorme coût d’entrée
N’est pas un langage orienté objet
Complexité à écrire un code simple à lire
Les points durs - Documentation
Complexe à comprendre
Les points durs - Documentation
Complexe à comprendre
Parfois difficile à trouver
Les points durs - Authentification
Via Servant
première version avec BasicAuth
module expérimental pour JWT
Les points positifs
Les points positifs
Programmation fonctionnelle pure
Les points positifs
Programmation fonctionnelle pure
Compilateur qui aide beaucoup
Les points positifs
Programmation fonctionnelle pure
Compilateur qui aide beaucoup
Code lisible par un non-developpeur
Verdict ?
Difficile de revenir
à un autre
langage
Questions ?

Contenu connexe

Tendances

Python + ansible = ♥
Python + ansible = ♥Python + ansible = ♥
Python + ansible = ♥
Gonéri Le Bouder
 
Performance et optimisation de PrestaShop
Performance et optimisation de PrestaShopPerformance et optimisation de PrestaShop
Performance et optimisation de PrestaShop
PrestaShop
 
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013Julien Jakubowski
 
Du JavaScript dans mon projet
Du JavaScript dans mon projetDu JavaScript dans mon projet
Du JavaScript dans mon projet
jollivetc
 
Guide javascript
Guide javascriptGuide javascript
Guide javascript
jollivetc
 
Suivi qualité avec sonar pour php
Suivi qualité avec sonar pour phpSuivi qualité avec sonar pour php
Suivi qualité avec sonar pour php
Gabriele Santini
 
Pourquoi et comment j'ai appris JavaScript
Pourquoi et comment j'ai appris JavaScriptPourquoi et comment j'ai appris JavaScript
Pourquoi et comment j'ai appris JavaScript
jollivetc
 
JavaScript pour le développeur Java
JavaScript pour le développeur JavaJavaScript pour le développeur Java
JavaScript pour le développeur Java
jollivetc
 
Devoxx 2016 - Dropwizard : Création de services REST production-ready
Devoxx 2016 - Dropwizard : Création de services REST production-readyDevoxx 2016 - Dropwizard : Création de services REST production-ready
Devoxx 2016 - Dropwizard : Création de services REST production-ready
Alexander DEJANOVSKI
 

Tendances (10)

Python + ansible = ♥
Python + ansible = ♥Python + ansible = ♥
Python + ansible = ♥
 
Performance et optimisation de PrestaShop
Performance et optimisation de PrestaShopPerformance et optimisation de PrestaShop
Performance et optimisation de PrestaShop
 
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
 
Présentation symfony drupal
Présentation symfony drupalPrésentation symfony drupal
Présentation symfony drupal
 
Du JavaScript dans mon projet
Du JavaScript dans mon projetDu JavaScript dans mon projet
Du JavaScript dans mon projet
 
Guide javascript
Guide javascriptGuide javascript
Guide javascript
 
Suivi qualité avec sonar pour php
Suivi qualité avec sonar pour phpSuivi qualité avec sonar pour php
Suivi qualité avec sonar pour php
 
Pourquoi et comment j'ai appris JavaScript
Pourquoi et comment j'ai appris JavaScriptPourquoi et comment j'ai appris JavaScript
Pourquoi et comment j'ai appris JavaScript
 
JavaScript pour le développeur Java
JavaScript pour le développeur JavaJavaScript pour le développeur Java
JavaScript pour le développeur Java
 
Devoxx 2016 - Dropwizard : Création de services REST production-ready
Devoxx 2016 - Dropwizard : Création de services REST production-readyDevoxx 2016 - Dropwizard : Création de services REST production-ready
Devoxx 2016 - Dropwizard : Création de services REST production-ready
 

Similaire à Votre mission ? Découvrir Haskell et le mettre en prod

BBL - TDD pour les DevOps - Puppet
BBL - TDD pour les DevOps - PuppetBBL - TDD pour les DevOps - Puppet
BBL - TDD pour les DevOps - Puppet
Olivier BAZOUD
 
Ma boîte à outils DevOps
Ma boîte à outils DevOpsMa boîte à outils DevOps
Ma boîte à outils DevOps
Noël Bardelot
 
Rich Desktop Applications
Rich Desktop ApplicationsRich Desktop Applications
Rich Desktop Applicationsgoldoraf
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !
VISEO
 
Je configure mes serveurs avec fabric et fabtools
Je configure mes serveurs avec fabric et fabtoolsJe configure mes serveurs avec fabric et fabtools
Je configure mes serveurs avec fabric et fabtoolsRonan Amicel
 
Docker en Production (Docker Paris)
Docker en Production (Docker Paris)Docker en Production (Docker Paris)
Docker en Production (Docker Paris)
Jérôme Petazzoni
 
Formation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHPFormation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHP
kemenaran
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovyguest6e3bed
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation GroovyJS Bournival
 
Utilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHPUtilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHP
Jean-Marc Fontaine
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Ludovic Piot
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide
 
Hadoop MapReduce - OSDC FR 2009
Hadoop MapReduce - OSDC FR 2009Hadoop MapReduce - OSDC FR 2009
Hadoop MapReduce - OSDC FR 2009
Olivier Grisel
 
Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...
Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...
Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...
Nicolas Silberman
 
Intégration continue & Qualité logicielle
Intégration continue & Qualité logicielleIntégration continue & Qualité logicielle
Intégration continue & Qualité logicielleDavid Buros
 
Cours php & Mysql - 1ére partie
Cours php & Mysql - 1ére partieCours php & Mysql - 1ére partie
Cours php & Mysql - 1ére partie
kadzaki
 
Webinar Smile : Comment industrialiser votre SI avec Ansible ?
Webinar Smile : Comment industrialiser votre SI avec Ansible ?Webinar Smile : Comment industrialiser votre SI avec Ansible ?
Webinar Smile : Comment industrialiser votre SI avec Ansible ?
Smile I.T is open
 
PHP 5.3, PHP Next
PHP 5.3, PHP NextPHP 5.3, PHP Next
PHP 5.3, PHP Next
SQLI
 
Javascript proprement
Javascript proprementJavascript proprement
Javascript proprement
Guillaume Collic
 
ALT.Net Juin 2012 - Specflow
ALT.Net Juin 2012 - SpecflowALT.Net Juin 2012 - Specflow
ALT.Net Juin 2012 - SpecflowMathias Kluba
 

Similaire à Votre mission ? Découvrir Haskell et le mettre en prod (20)

BBL - TDD pour les DevOps - Puppet
BBL - TDD pour les DevOps - PuppetBBL - TDD pour les DevOps - Puppet
BBL - TDD pour les DevOps - Puppet
 
Ma boîte à outils DevOps
Ma boîte à outils DevOpsMa boîte à outils DevOps
Ma boîte à outils DevOps
 
Rich Desktop Applications
Rich Desktop ApplicationsRich Desktop Applications
Rich Desktop Applications
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !
 
Je configure mes serveurs avec fabric et fabtools
Je configure mes serveurs avec fabric et fabtoolsJe configure mes serveurs avec fabric et fabtools
Je configure mes serveurs avec fabric et fabtools
 
Docker en Production (Docker Paris)
Docker en Production (Docker Paris)Docker en Production (Docker Paris)
Docker en Production (Docker Paris)
 
Formation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHPFormation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHP
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
 
Utilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHPUtilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHP
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
 
Hadoop MapReduce - OSDC FR 2009
Hadoop MapReduce - OSDC FR 2009Hadoop MapReduce - OSDC FR 2009
Hadoop MapReduce - OSDC FR 2009
 
Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...
Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...
Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...
 
Intégration continue & Qualité logicielle
Intégration continue & Qualité logicielleIntégration continue & Qualité logicielle
Intégration continue & Qualité logicielle
 
Cours php & Mysql - 1ére partie
Cours php & Mysql - 1ére partieCours php & Mysql - 1ére partie
Cours php & Mysql - 1ére partie
 
Webinar Smile : Comment industrialiser votre SI avec Ansible ?
Webinar Smile : Comment industrialiser votre SI avec Ansible ?Webinar Smile : Comment industrialiser votre SI avec Ansible ?
Webinar Smile : Comment industrialiser votre SI avec Ansible ?
 
PHP 5.3, PHP Next
PHP 5.3, PHP NextPHP 5.3, PHP Next
PHP 5.3, PHP Next
 
Javascript proprement
Javascript proprementJavascript proprement
Javascript proprement
 
ALT.Net Juin 2012 - Specflow
ALT.Net Juin 2012 - SpecflowALT.Net Juin 2012 - Specflow
ALT.Net Juin 2012 - Specflow
 

Votre mission ? Découvrir Haskell et le mettre en prod