ScalaIO 2017

La 4ème édition de ScalaIO a eu lieu les 2 et 3 novembre 2017 dans les locaux de l’école CPE à Lyon. Il s’agit de l’événement principal de la communauté Scala en France mais il y a également une forte composante internationale avec environ la moitié des talks qui sont donnés en anglais et de nombreux participants et speakers étrangers.

Comme chaque année, nous avons eu droit à une excellente conférence avec de très bonnes sessions, de nombreux speakers renommés et une organisation remarquable. Cette année un accent particulier avait été mis sur l’ouverture aux moins expérimentés avec pas mal de communication en amont sur cet aspect et les deux tiers des talks qui étaient accessibles aux débutants.

Ceux qui veulent faire fondre leurs neurones n’étaient pas en reste pour autant avec comme à l’accoutumée des sessions avancées sur des sujets complexes tels que la théorie des catégories ou bien toutes les merveilles que l’on peut faire avec le système de types de Scala. Autre nouveauté de cette année, l’ensemble des sessions a été filmé et elles devraient donc être très certainement disponibles prochainement en streaming.

Lire la suite

Serverless : API de recherche la centrale

Plusieurs articles sur les architectures AWS API Gateway et AWS Lambda pointaient du doigt certains problèmes tout en reconnaissant les nombreux avantages de ces nouvelles stacks.
Nous avons lancé un projet pilote 100% Serverless sur Amazon Web Services afin de nous faire notre propre idée.

L’objectif était le suivant :

  • Offrir une API REST de recherche utilisant ElasticSearch comme moteur de recherche
  • Scalabilité totale
  • Temps de réponse lors des pic à 600 requêtes par seconde :
    • Moyenne < 40ms
    • p50 < 10ms
    • p95 < 90ms
    • p99 < 200ms
  • Rester dans des couts comparables à une architecture REST classique
  • Temps avant mise en production : 1 mois

Lire la suite

Comment j’ai vécu mon premier Hackathon

Qui veut aller à un hackathon ?

Quand on nous a parlé du hackathon je me suis dit ‘c’est pas pour moi, c’est pour les gens qui dorment avec leur ordinateur’.

Après quelques jours de réflexion je me suis dit que moi-même je passe quand même environ 16 heures par jour sur l’ordinateur (le temps cumulé entre le travail et à la maison), que moi aussi je suis curieux,  et que moi aussi j’aime bien faire ceci cela (la preuve c’est que j’ai toujours un projet perso en cours sur lequel je bosse sur mon temps libre).

Après avoir discuté avec un collègue, nous nous sommes convaincu l’un l’autre que ce serait intéressant d’y aller. Quelques jours après on était 4 à vouloir y participer. Cool. Vu que le hackathon se déroulerait en Allemagne, c’était mieux d’y aller à plusieurs et d’éviter de se retrouver tout seul parmi d’autres.On avait à peu près 2 semaines devant nous pour « nous préparer ».On se disait qu’il fallait se préparer, préparer des trucs, faire de la recherche sur Internet, etc.

Les deux semaines écoulées, résultat : rien préparé 🙂

Finalement on s’est dit qu’il vallait mieux y aller l’esprit libre, et comme  nous avons souvent des idées pour créer un projet, ça devrait bien se passer.

En même temps on se demandait si les autres participants seraient meilleurs que nous et si on n’allait pas rentrer la tête baissée.

Jour J : Le départ

Nous arrivons là bas, là-bas, c’est Berlin, ville historique du groupe Axel Springer

On voit déjà pas mal de monde installé, en train de bosser sur je ne sais pas quoi. En les voyant, nos craintes ont disparu. On se disait, on peut quand même faire quelque chose de raisonnable, voir plus que ça.

La motivation était double : la satisfaction personnelle et le fait qu’on représentait notre société au sein du groupe, et que des gens ont pensé que nous avions le niveau pour y faire face, donc il fallait assurer.

En attendant nous avions discuté entre nous et échangé vite fait avec un autre participant.

Heure H : présentation du concours

Après la présentation, on était toujours ensemble mais on était que 4 développeurs. On savait qu’il fallait avoir plusieurs profils dans l’équipe afin de pouvoir faire quelque chose de sympa et joli.

On commence à se demander ce qu’on pouvait faire comme projet. Pas trop d’idée géniale à ce moment là. Par chance, 2 filles nous abordent : elles ont une idée et cherchent des développeurs. Après avoir échangé 3 minutes, on dit oui, on va faire équipe ensemble.

Toute la soirée on a alors essayé de se mettre d’accord sur ce qu’on nous allions réellement essayer de faire. Avec la barrière de la langue (des allemands et des français se parlant en anglais) et avec notre manque d’enthousiasme sur l’idée en elle-même, à minuit nous étions un peu paumés.

Mais après une bonne nuit de sommeil, au matin en se retrouvant dans les locaux, l’idée nous paraissait meilleure que la veille. On a commencé à 9 heures et sauf les pauses pour manger, nous avons bossé non stop. C’était du boulot mais dans une très bonne ambiance.

Nous 4, on se connaissait déjà étant collègues dans la même société, mais on avait pas réellement pas bossé ensemble. Durant cette journée on s’est bien amusé : il y avait de la bonne nourriture, des jus de toute type, de la bière.

En fin de journée on avait quelque chose de présentable dont nous étions plutôt fiers :

On était fatigués mais on s’était bien amusé en travaillant.

Le lendemain matin : présentation des projets

On se retrouve de nouveau tous les 6. On était plutôt en forme, de bonne humeur.

Quelques heures après, nous et tous les autres participants on était présents dans une grande salle, au dernier étage d’une grande tour appartenant au groupe. Très sympa la salle, belle vue, des petits fours.

Après que chaque équipe ait présenté son projet devant une grande salle bien remplie (et donc avec le stress qui viens avec) nous apprenons que nous n’avons pas gagné.

Tant pis. On n’avait pas perdu, c’est juste qu’on n’avait pas gagné. Nuance. Mieux que ça : on a vécu une super expérience, et on sait que l’année prochaine on fera mieux (oui, on ira aussi l’année prochaine pour prendre notre revanche ;)).

On rentrant au travail le lendemain, beaucoup nous ont félicité. C’est très plaisant 🙂

A refaire.

Corneliu Croitoru, développeur CBM.

L'équipe Sportify

L’équipe Sportify

Quand nos annonces prennent l’R : Nettoyage

Cette article fait suite au premier article sur la découverte des données.

Après avoir identifié nos données, l’étape suivante dans tous projets de machine learning est de “nettoyer la donnée”, ceci afin de la rendre plus facilement exploitable et de supprimer les cas incohérents ou trop marginaux (outliers)

cars <- read.csv("finalcars.csv", sep=",", header=TRUE, stringsAsFactors = FALSE)

stringsAsFactors = FALSE nous permet de désactiver la conversion automatique en Factor, cela nous permet d’éviter des optimisations intempestives et notamment de conserver le millésime (yearModel) en tant qu’entier

  • En visualisant le résumé du dataframe, nous observons des NA que nous supprimons :
summary(cars)
##     brand              model             version         
##  Length:258320      Length:258320      Length:258320     
##  Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character  
##                                                          
##                                                          
##                                                          
##                                                          
##   yearModel           mileage             gearbox             energy      
##  Length:258320      Length:258320      Min.   :     0.0   Min.   : 1.000  
##  Class :character   Class :character   1st Qu.:     2.0   1st Qu.: 2.000  
##  Mode  :character   Mode  :character   Median :     2.0   Median : 2.000  
##                                        Mean   :    13.7   Mean   : 1.905  
##                                        3rd Qu.:     2.0   3rd Qu.: 2.000  
##                                        Max.   :999999.0   Max.   :11.000  
##                                        NA's   :123        NA's   :7       
##      doors           powerDin         priceNew           price        
##  Min.   : 0.000   Min.   :    -1   Min.   :      0   Min.   :      0  
##  1st Qu.: 4.000   1st Qu.:    90   1st Qu.:  17200   1st Qu.:   9600  
##  Median : 5.000   Median :   111   Median :  24000   Median :  13990  
##  Mean   : 4.314   Mean   : 65529   Mean   :  26400   Mean   :  17384  
##  3rd Qu.: 5.000   3rd Qu.:   149   3rd Qu.:  31000   3rd Qu.:  20500  
##  Max.   :11.000   Max.   :999999   Max.   :1076400   Max.   :4190000  
##  NA's   :1

Lire la suite

Quand nos annonces prennent l’R

Cette présentation fait suite au tools in action que nous avons donné à Devoxx cette année. L’objectif étant de montrer l’intérêt de R pour découvrir, nettoyer puis enrichir nos données avec des approches de type machine learning.

Chez Car&Boat Media, grâce au site de dépot d’annonces de véhicules d’occasions lacentrale.fr, nous avons à notre disposition plus de 280 000 annonces en publication. Nous souhaitons dans cette présentation vous montrer ce que l’on peut faire très facilement avec R pour découvrir, manipuler et jouer avec la donnée en partant d’un simple dump de ces annonces.

Pour illustrer cela de façon concrète nous allons élaborer un modèle simple de prédiction de prix de vente d’un véhicule (algo supervisé), un équivalent de la cote automobile.

Ensuite nous formerons des groupes de données proches en utilisant un algo non supervisé cette fois (kmeans) pour définir des catégories de véhicules.

Partie 1 : découverte du dataset

Nous avons obtenu un dump au format CSV de toutes les annonces en cours de publication, nous allons l’explorer pour déterminer ce que nous allons pouvoir en faire.

  • Chargement du fichier csv :
cars <- read.csv("finalcars.csv", sep=",", header=TRUE)

Nous créeons ainsi le dataframe cars, structure composée de lignes et de colonnes, que l’on peut assimiler à une table en BDD relationelle.

  • A quoi ressemblent nos premières lignes :
head(cars)

##    brand model                                   version yearModel mileage
## 1 ABARTH   500      1.4 16V T-JET 595 50EME ANNIVERSAIRE      2014     500
## 2 ABARTH   500                      1.4 16V T-JET ABARTH      2012   46750
## 3 ABARTH   500                   1.4 16V TURBO T-JET 140      2012   52250
## 4 ABARTH   500 1.4 16V TURBO T-JET 160CH 595 TURISMO BVR      2012    8800
## 5 ABARTH   500 1.4 16V TURBO T-JET 160CH 595 TURISMO BVR      2013   17850
## 6 ABARTH   500 1.4 16V TURBO T-JET 160CH 595 TURISMO BVR      2013    6911
##   gearbox energy doors powerDin priceNew price
## 1       1      1     3   999999        0 31990
## 2       2      1     3      134        0 13500
## 3       2      1     2   999999        0 14500
## 4       1      1     3      140        0 20690
## 5       1      1     2      140        0 19990
## 6       1      1     2      160        0 21980

Lire la suite