TakeOff Conf 2014

Introduction

La TakeOffConf à lieu à Lille. C'était cette année la seconde édition. Soutitrée "The Future of Web Technology", elle est à vocation européenne et s'adresse aux développeurs, et vise à toucher un grand nombre de sujets, sans forcément rentrer beaucoup dans la technique.

Deux jours de conférences, c'est intense, il y avait du très bon, et du moins bon. Je ne vais pas trop m'attarder sur le moins bon et surtout décrire les highlights.

LES TRÈS BONNES CONFÉRENCES

We made a hack, with fire, a gun and multiple robots.

Michal Wawra de Twilio nous présente une machine de Robinson qu'il a fait durant un hackathon. C'est un moyen compliqué de faire quelque chose de simple. Dans ce cas, c'était comment réussir à envoyer un sms (grâce à l'API Twilio) en passant par des billes qui coulent dans un tunnel en carton pour actionner un robot en plastique qui va s'agiter eu tout sens et déclencher une cellule de mouvement qui va faire déplacer un autre robot qui va amener une petite bougie sous un élastique qui, en brûlant, va libérer un régime de bananes accroché à une corde qui va actionner la gachette d'un pistolet Nerf qui va shooter une cible qi actionne un bélier qui va rentrer une disquette dans un lecteur qui va lancer le script final.

En plus d'être un sujet assez drôle, il en a profité pour extrapoler sur le fait que cette machine n'était finalement qu'une suite d'input et d'output dans des formats complétement différents. Il indiquait aussi qu'ils testaient unitairement chacune des parties mais que faire un test d'intégration complet était extremement couteux en initialisation, du coup ils n'ont pas pu en faire beaucoup avant la "mise en prod". De même, pour la partie avec la bougie, ils ont fait l'équivalent d'un try/catch dans le monde réel, c'est à dire au cas où le feu se répande anormalement, des capteurs devaient sonner une alarme.

Improv and Open-Source

Haleigh Sheehan de Github nous parle des parallelles qu'elle fait entre son boulot de musicienne de jazz, de joueuse dans un théatre d'impro, et de son boulot à GitHub dans le milieu de l'Open-Source.

Pour elle les deux milieux ont beaucoup de points communs, comme l'apprentissage de ses erreurs, la mise en public de son travail, le coté éphèmere, et l'importance du feedback.

Security Good Practices

Olivier Lacan, de CodeSchool (qui se révèle habiter à quelques rues de chez moi en fait), nous présente quelques bons conseils assez simples mais souvent oubliés pour améliorer notre sécurité, et la sécurité de nos apps.

Déjà, ne jamais fixer de limite au nombre de caractères maximum d'un mot de passe. Ne pas forcer de caractères spéciaux, majuscule, minuscule, etc. Plus on ajoute de règles, plus un password est difficile à retenir et donc plus on aura tendance à toujours utiliser le même ou bien à le noter quelque part. Il conseille 1Password (ou KeyPass) pour gérer son portefeuille de pass.

Le juste milieu entre User-Friendliness et Security est toujours très difficile à trouver. Il donne ensuite quelques outils pratiques comme GnuPG ou Meldium.com pour partager des accès à un service en ligne au sein d'une équipe sans pour autant utiliser plusieurs comptes, ni partager le mot de passe commun.

Il enchaine sur le fait que se faire voler son téléphone ou son laptop ne devrait pas être un problème. Le pass d'accès doit être assez complexe pour protéger l'accès. En ajoutant la possibilité de wiper le device à distance et en ayant fait une encryption complète du disque, tout va mieux. Truecrypt permet le chiffrement et permet même un plausible deniability.

Pour lui, il ne faut jamais faire de compromis sur la sécurité. Par exemple, même si la deadline est demain, il ne faut pas envoyer les pass en clair par mail parce qu'on n'a pas le temps de créer correctement un couple de clés. Parce qu'en commencant comme ça, un jour le système forcément sera compromis et un failure public qui révèle la totalité de la base client, qui fait la une des journaux, aura un impact bien pire sur les clients qu'un ou deux jours de retard initiaux (parallelle avec les TU, que le coût de correction d'un problème de secu est exponentiellement plus long plus il est mis en place tard).

Que https est un impératif, qu'il faut supprimer ses logs car ils contiennent des tas d'infos sur les gens, et qu'il est inutile de les garder si on ne s'en sert pas. Qu'il faut stocker les informations sur disque seulement le temps minimum légal, que si on a besoin de garder des données, il faut absolument les anonymiser (discussion intéressante auprès d'une bière après la conf avec un ancien de chez OVH sur ce sujet, comme quoi tout est anonymisé pour les employés). Et finalement, qu'il faut aussi faire attention aux library third party qu'on utilise et s'assurer qu'elles suivent les mêmes standard de qualité de sécu que son propre code.

The Bizarre App Experiments

Deux gars de Blackberry présentaient le framework de dev mobile Qt (prononcez Cute). Le framework est open-source, mais backé à temps plein par des gens de Blackberry. Il permet de faire du crossplatform iOS, Android, Blackberry et Windows Phone.

Ils ont présentés deux démos sympa sur scène. La première avec un capteur de rythme cardiaque, à enfiler autour de son torse, relié à un Blackberry en bluetooth qui lit un mp3 (Eye of the Tiger), et qui le stream en bluetooth vers des enceintes. Le pitch de la musique descends petit à petit et remonte en fonction du rythme cardiaque. Il faut donc s'agiter (courir, faire des pompes) pour remonter la musique au rythme correct. (Le capteur était un Wahoo Blue, ils utilisaient OpenAL pour la manipulation de l'audio et Qt 5.2. Testé uniquement sur Blackberry mais "devrait" marcher de la même manière sur iOs et Android).

Démo du code Bluetooth; découverte des devices, récupération du "heartbeat monitor" -spécifié dans la norme BT-, découverte des services du devices -battery, name, heartbeat, calories burnt, etc-. Tout ceci fonctionne à base d'events à chaque découverte sur lesquels ils se plugguent, et modifient le pitch en fonction.

Deuxième démo dans la même genre, cette fois avec une carte NFC à poser sur le blackberry qui lance un chrono de 10s. Le speaker devait alors courir à l'autre bout de la scène et revenir en moins de 10s, pour reposer la carte, qui lance un nouveau chrono de 9s, puis de 8s, etc. Et si le chrono atteint 0 le public devait lui lancer des balles en mousse. Les cards NFC coutent 0.5€ environ, très facile à mettre en place.

Idem, le timer est executé avec Qt et fire des events. Events fired aussi quand le NFC touche.

Developing Developers

Paul Verbeek, alias @hierow nous explique qu'il est difficile de trouver de bons dévelopeurs à embaucher. 80% d'entre eux sont autodidactes, donc les diplomes n'ont pas de valeur. Il est aujourd'hui bien plus facile d'apprendre le dev web qu'il y a trois ans (maturité des outils, experience, cours en ligne).

Pour lui, le meilleur dev web, est celui que l'on prends comme apprenti. Qui n'a jamais fait de dev avant, mais que ça interesse. Prendre un dev et le former au web va nécessiter de désapprendre beaucoup de choses.

Ne pas confondre Apprenti et Stagiaire. Un apprenti est Luke Skywalker, il sait ce qu'il veut devenir mais il ne sait encore rien. Un stagiaire est Anakin, il ne sait pas ce qu'il veut, il essaie et il deviendra peut-être quelque chose de complétement différent.

Il faut être un bon mentor pour espérer former un bon apprenti. Il faut savoir, et rester à jour sur les technos. Etre positif, et savoir motiver. Connaitre son apprenti, savoir ce qu'il aime, ce qu'il n'aime pas, ses forces, ses faiblesses. Savoir comment il apprends le mieux. Expliquer clairement, et écouter attentivement. Etre discipliné, et lui aussi. Instruire par l'exemple. Définir des règles et s'y tenir autant que lui. Et surtout ne jamais oublier que l'on est soit même un étudiant et qu'on apprends constamment.

Si on forme un dev front, il faut lui apprendre html, css, js. Mais s'il est intéressé par plus (back-end, ops, design) il faut l'aider aussi, et si cela sort de votre domaine de compétence, le diriger vers quelqu'un d'autre qui pourrait l'aider.

Il est normal de ne pas savoir au début, il faut juste savoir d'où part l'apprenti. Quelques questions comme "Qui est Tim Berners Lee ?" "Qu'est-ce qu'HTML5 ?" devrait permettre d'évaluer sa connaissance. Ce ne sont pas des questions pièges, juste pour savoir par quoi commencer.

Ne pas commencer à lui apprendre les table, iframes et floats. Faire du pair-programming pendant au moins une semaine, expliquer tout ce que l'on fait, lui poser des questions, s'assurer qu'il en pose aussi. Lui apprendre à ne pas utiliser w3schools, le rediriger vers MDN ou Webplatform.

Is IT really global ?

Contre-talk au talk sur Developing Developers. Comme quoi "c'est bien beau tout ces principes, mais en France on n'en n'a pas des boss comme ça, c'est pas dans la culture".

Très interessante conférence sur la Culture (dans le sens, les valeurs, les experiences qui entourent les gens du fait de leur milieu, de leur histoire). La culture est une prison, dans laquelle on tombe à la naissance et dont les barreaux sont invisibles. Impossible de voir sa propre culture tant que l'on ne va pas en voir une autre.

Histoire du têtard qui revient dans la mare après l'avoir quitté. On lui demande comment c'est le monde exterieur et il réponds que "c'est sec". On lui demande alors, l'air interloqué, "Sec ? Mais qu'est-ce que ça veut dire sec ?". Il réponds, "Ben, il n'y a pas d'eau quoi.". Et les autres tétards, encore plus interloqués de repondre "De l'eau ? Mais c'est quoi ?".

Confrontés à un même évenement, différentes cultures verront différentes choses, et réagiront différement, selon leurs experiences (directes ou indirectes). La culture est comme un oignon, il faut enlever plusieurs couches pour arriver au centre. Il faut d'abord passer les symboles (la langue, écrite et parlée, les expressions). Puis les Héros, les personnages historiques, réels ou imaginaires qui font partie de la culture d'un peuple. Après ça on arrive aux rituels, des actions que "l'on a toujours fait", même si on ne sait plus exactement pourquoi. Et après ça, finalement on arrive aux valeurs fondamentales.

Ces valeurs sont transmises par l'éducation, la religion, le travail et les lois. Hofstede a identifié 5 valeurs principales, sur lesquelles on peut placer chaque pays du monde sur une échelle de 1 à 100. Des pays opposés auront du mal à se comprendre. Ces valeurs sont Power Distance, Individualism/Collectivism, Masculinity/Feminity, Uncertainty Avoidance and Long Term Orientation

Notes: Il manque quelques CR dans la liste, pour cause de batterie à plat sur mon laptop. Voici quand même les vidéos qui valent le coup :

Comment le Guardian a optimisé son site mobile en terme de webperfs :

Paul Rouget nous explique les méandres de Firefox, ou comment ça se passe à l'intérieur de la machine quand le DOM, le CSS, le Js se mettent en place et comment tout ce beau monde communique avec le CPU et le GPU.

LES BONNES CONFÉRENCES

The web is innefficient, let's fix it

Justin Secor nous parle de green IT, et de l'impact sur l'environnement du Web. Il tente de faire un parallèle entre le poids d'une page web et la consommation d'énergie qu'elle implique. Son calcul se base sur la consommation d'électricité d'un datacenter sur un an (x Mb de donnée stockée coute y kWh).

A partir de là, il donne quelques exemples. La home page de la BBC pèse tant, elle a tant de visites par jour, donc sur une année, ça fait tant de Mb, donc tant de kWh. Conclusion : la home page de la BBC sur une année consomme moitié moins que la ville de Paris. Deuxième exemple, l'iPhone 5 qui ne consomme que 3.5Kw par an pour se recharger. Pour 9.100.000 iPhone, ca revient quand même à la consommation de Lille sur un an.

Finalement, il enchaine pour dire que nous devrions utiliser une métrique de consommation d'énergie dans nos projets, comme on emploi une métrique de poids des pages, de vitesse d'affichage, etc. Et qu'on se fixe une limite et qu'on travaille à la descendre.

Il conseille donc des SPA pour éviter de recharger trop de choses, et préfère les pixels noirs aux pixels blancs (là, je ne suis pas convaincu). Idem il enchaine sur l'utilisation de gzip, de css preprocessors, de limiter les requêtes, les reflows, les repaints pour diminuer notre consommation d'énergie.

Autant je suis d'accord avec le fond, autant ses méthodes de calculs me semblent oublier un trop grand nombre de paramètres pour être sérieuses. Cela dit, c'est un très très bon speaker et son talk est parfaitement bien rodé.

All your base are belong to us

@ColdFusion10 nous parle du security breach d'adobe et de ce que ça implique. Que leur communication était mauvaise, qu'ils ont communiqué sur 2.9 millions, puis 38 millions, puis 230 millions, et le code source de photoshop.

La base volée est facilement trouvable sur le net (users.tar.gz) et contient id, mail, encrypted pass et pass hint. Beaucoup de personnes indiquent leur mot de passe en clair dans le hint, ou de manière très facile à retrouver ("soleil en anglais", "prénom de maman").

Analyse des mails en .fr. 4 millions. dont des ville-.fr, cc-.fr, mairie-.fr, .gouv.fr. Mot de passe les plus populaire : 123456, photoshop, 12345678.

Il nous présente ensuite quelques outils comme shodanhq.com, qui est un google des devices connectés. On y trouve des imprimantes, des serveurs, des cameras de surveillance, avec leur adresse ip. Et beaucoup ont gardé un mot de passe par défaut (admin/admin). Il nous explique aussi que parfois le fichier de config des dns d'un serveur est accessible publiquement et permet d'obtenir la liste des sous-domaines, ce qui donne des pistes de vulnerabilités (jira.domain.com, phpbb.domain.com, confluence.domain.com, etc).

Nous parle ensuite en vrac de dnsenum.pl, nmap, exploit-db.com/search, openvas, metasploit, backtrack.

Il finit par rappeller les règles élémentaires d'utiliser https sur ses sites, et de surfer derrière un vpn. Et d'utiliser des softs open-sources plutot que propriétaires pour limiter le risque de backdoors.

Largescale Javascript applications

La présentation nous donnait des pointeurs sur de bonnes pratiques pour avoir du code javascript maintenable, même sur une large codebase ou sur une grande durée.

Une application largescale n'a pas forcément beaucoup de lignes de code, mais va toucher beaucoup de monde, ou rester en ligne pendant longtemps.

Il est facile d'écrire du Javascript, mais il est difficile d'écrire du js maintenable.

Avec jQuery il est facile de récupérer une soupe d'events difficiles à suivre, liés au markup, qui considèrent le DOM comme la source primaire d'informations, et qui rends le code extremement dépendant du design visuel. Le DOM est un singleton, global, et stateful, donc difficile à tester et maintenir. Il faut apprendre à ne plus dépendre du DOM, ne plus utiliser jQuery.

Aujourd'hui, de plus de plus de taches qui étaient reléguées au backend bougent sur le front, comme le templating ou le routing. Du coup, "If your app breaks without Javascript, you should treat it as a real language.". Le js produit se doit d'être testable, scalable, maintainable.

The secret to build large apps is to never build large apps. Break it in smaller parts.

Use a MVW framework. W stands for "Whatever works for you".

La manière dont le code est organisé (en fichiers, dossiers) influe sur la manière dont le code est testé et maintenu. Il suggère de ne pas diviser en controllers/, views/ etc mais par feature : feature1/, feature2/.

Diviser pour mieux régner. Splitter le code en petits modules, indépendant, réutilisables, unaware les uns des autres, et qui peuvent donc s'imbriquer facilement par injection de dépendance. Ca les rends plus faciles à tester et à maintenir.

Designing Apps for Little Fingers

Ensemble de best practices pour développer des apps pour enfants. Il n'y a pas de méthode bulletproof car le principe même d'être un enfant c'est qu'on est en train de grandir et que différents ages ne réagissent pas de la même façon. La conf se limite donc à la tranche 3-8 ans.

  • Toujours utiliser le mode landscape et pas portrait, les enfants sont habitués aux livres qui sont plus larges que hauts.
  • Penser que l'enfant tient la tablette avec deux mains, il ne faut pas lui demander d'appuyer sur un bouton en même temps qu'il la tient.
  • Il est très intuitif pour un enfant d'appuyer sur l'écran, et il a besoin d'un feedback immediat (ontouch, pas on release). Si pas de feedback tout de suite, il va réappuyer encore et encore. Aussi, ne pas faire de différence entre single tap et double tap.
  • Facile pour eux de dessiner en déplacant le doigt, par contre il faut s'attendre à ce que le doigt "saute" et donc que le trait soit fait avec des coupures.
  • Faire un Swipe d'un coté à l'autre est difficile, il vaut mieux proposer un bouton.
  • Darg'n'drop est intuitif, mais ne sera pas précis. De plus, il faut là aussi s'attendre à ce que l'enfant "lache" l'objet en cours de route, il faut donc le laisser où il est plutot que de le ramener au début.
  • De manière générale, toute ce qui nécessite plus d'un doigt est difficile.
  • Ne pas leur demander de secouer ou pencher la tablette, il risquent de ne pas maitriser le mouvement et la casser. Ne pas non plus mettre de musique de fond (pensez aux parents !).
  • Tout ce qui est action "adulte" (paiement, téléchargement, configuration) doit se trouver derrière une "baby gate". Un texte écrit indique quelle gesture l'adulte doit faire pour accèder aux options (pinch zoom, figure complexe), pour que l'enfant ne puisse pas le faire. Et changer la figure aléatoirement pour que l'enfant ne l'apprene pas par coeur en voyant son parent le faire.

La suite des advices étaient plus d'ordre générique game design, pas uniquement pour les bambins :

  • Avoir des buts clairs et intuitifs. Potentiellement un personnage virtuel qui dit "bonjour, je suis truc, on va faire ça". Ca permet à l'enfant de switcher mentalement du contexte "home page" de la tablette, à celui du jeu.
  • Rendre les éléments interactifs plus visibles que le background (différence de style visuel, glow, highlight, pulse, etc). Si pas d'action pendant 1-2s, highlight des éléments avec lesquels l'enfant peut intéragir.
  • L'enfant apprends en faisant des erreurs, donc bien marquer les erreurs (grosse croix rouge par exemple), mais garder les persos happy (pas de froncement de sourcils par exemple). Aussi, si échec la premiere fois, donner un indice. Si échec à nouveau donner autre indice. Si nouvel échec, faire un highlight de la solution. Mettre des rewards visuelles et sonores.
  • Utiliser des pictos consistants dans toute l'app et si possible d'une app à une autre, sans texte.
  • Si texte, utiliser la même font que celle utilisée dans les livres de lecture du pays en question (différent selon les pays). Si texte lu oralement, faire un système karaoké qui highlight les mots quand ils sont lus.

I have a NoSQL toaster, why should I have a NoSQL database ?

Présentation des db nosql, parce qu'on les qualifie par ce qu'elles ne sont pas, mais pas assez parce qu'elles sont.

Première question : pourquoi ne pas utiliser sql ? Parce que le scaling est difficile avec sql. Parce que maintenir un schema cohérent sur le long terme est presque impossible.

Il présente ensuite des tas de DB NoSQL en les classant selon différents types.

Les DB document-oriented comme mongoDB ou couchBase. Utilisent du json/bson pour stocker la data, et elles comprennent le format du document stocké. Elles peuvent faire du travail qui était habituellement fait par le back-end. CouchBase : ++scaling, ++consistently fast MongoDB : ++easy querying, --no scaling

Les DB au format clé/valeur. Deux versions, soit en mémoire sur une machine, soit distribué sur plusieurs. Si en mémoire sur une machine, extremement rapide. Si distribué, scale beaucoup mieux mais on entre dans de l'eventual consistency (Riak, Dynamo, Voldemort, Cassandra). Ils acceptent tous les writes, même s'ils sont fait en même temps sur deux noeuds (alors qu'il y a un lock en cas de non-distribution). Distributed : ++scaling, ++availability, --manual conflict fixing Non-distributed: ++fast, --scaling

Il m'a ensuite perdu en parlant de columnar db (cassandra hbase) qui sont bien adaptées à du big data, mais sont un cauchemar pour les ops.

Finalement, les bases orientées Graph (Neo4j) qui stockent des objets et les relations entre ces objets. Finalement on s'intéresse dedans plus aux relations qu'aux objets eux-même.

D3.js

Présentation de la lib js D3 pour faire de la dataviz. Output en html ou svg, facile à prendre en main mais aussi extremement puissant pour des besoins plus complexes. Extension Rickshaw spécialisée dans la time visualisation. La lib parait extremement complète et simple à prendre en main, j'ai envie de la tester au plus vite.

LES CONFÉRENCES MOYENNES

Your own adventure web

Robin Berjon, du W3C, prêchait pour un html plus extensible. La possibilité pour les devs front de créer leurs propres balises, et de leur ajouter des comportements particuliers, gérés par les attributs. Un moyen pour lui de sortir de la boucle infernale du "draft > implémentation browser > tests des devs > standard > implémentation partout".

Ca se rapproche assez des directives angular, et c'est un pas dans la bonne direction pour lui, mais il attends que ces primitives soient accessibles directement dans le browser pour tous les devs.

Il a mentionné hitchjs, une libraire js qui ajoute de nouveaux selecteurs css évolués.

OWASP Top 10

Par @airbone42, un recap des règles de bonne hygiène technique en rapport avec la sécu. Que du très basique globalement : attention aux injections sql, ne pas mapper en 1 pour 1 les champs de la db avec les champs d'un menu déroulant (genre si 2 = moderator et 3 = user, alors on peut déduire que 1 = admin).

Quelques exemples de bonne configuration typique Apache (et un lien vers github.com/ioerror/duraconf).

S'ensuit un rappel que ce qu'est un salt, une rainbow table, une attaque XSRF. Qu'il faut bloquer toutes les actions par défaut, et les autoriser au cas par cas plutot que l'inverse. Qu'il ne faut pas stocker un degré d'habilitation dans un cookie (oh, really ?) ni ajouter des infos importantes dans les commentaires HTML. Que toutes les actions "sensitives" (changer mail, changer identifiant, paiement, etc) doivent redemander le pass, même si l'utilisateur est déjà loggué.

Un rappel intéressant au global, mais rien de nouveau.

Emberjs, lessons from the trenches

Slides

Régis Hanol, core contributor de Discourse (forum rails+ember) nous présente Ember. (Note: La présentation en elle-même était assez simpliste et n'apprenais pas beaucoup plus sur le framework que la lecture de la doc, mais j'ai pas mal discuté avec Régis durant les deux jours, et j'en ai appris plus sur Ember).

Ember prone le convention over configuration (comme rails dans l'idée, mais pas les mêmes conventions que Rails, du coup il n'y a pas d'affinité particulière entre les deux si ce n'est le mindset).

Il permet de faire des Single Page Application, en utilisant HandleBars comme moteur de templating en interne (ça limite un peu le templating dans la gestion des attributs html custom par exemple mais devrait s'améliorer dans les prochaines versions).

Il est possible de faire du SEO avec Ember... Enfin, avec Rails surtout. Il suffit d'injecter dans une balise noscript le contenu textuel de la page. Le serveur aura préalablement strippé tous les attributs cosmétiques (avatars, icons, etc). C'est ce qui est utilisé par Discourse.

Ember possède un mécanisme intéressant de rendering pour limiter le nombre de reflow/repaint, il attends que tous les events de sa queue soient effectués pour batcher tout ça. (Angular aussi doit faire quelque chose de similaire sous le capot, mais je n'ai pas trouvé de doc à ce sujet).

Finalement, Ember est jeune, le développement de Discourse a permis de mettre en avant des soucis de performances quand trop de views sont chargées en même temps (d'où le développement d'un principe de cloaking views qui unload les views qui ne sont plus dans le viewport). De même, ils n'utilisent pas ember-data car encore beaucoup trop buggué, ils font leurs appels http à la main.

A noter aussi que les tests d'Ember sont arrivés tard dans le cycle de dev, en ajoutant un member à la core team dont le taff principal était de couvrir l'appli de tests. Il n'y a clairement pas le même support derrière Ember que derrière Angular.

Singing Gophers

Présentation du langage Go, au travers d'un synthétiser de musique de la lib PortAudio (en C). Mais Go peut appeller du code C, et go est rapide (ben, oui parce que si goéland... petit blague pour voir ceux qui lisent mes CR jusqu'au bout), Go a des threads très légers et Go push de la donnée dans des tunnels (channels) qui sont des variables et qui recoivent de la donnée régulièrement.

Exemple d'un suite de fibonacci, on put les nombres dans un channel au fur et à mesure qu'on les génère, tout en continuant de looper dessus. On peut donc les afficher au fur et à mesure de leur génération.

Finalement, sa démo plus ou moins live codée permettait de jouer la marche impériale et donnait envie de tester Go.

LE RESTE

Using promises

Quentin Adam a tenté d'expliquer ce qu'étaient les promises et comment ça pouvait nous aider à sortir du callback hell. Si on connaissait déjà les promises, son talk n'apportait rien de neuf, et si on n'en avait jamais entendu parler, son accent anglais tellement français rendait le talk incompréhensible.

OpenDeviceLab

OpenDeviceLab est une asso internationale pour mettre à disposition des web devs de vieux devices (mobile phone, tablets) pour tester "facilement" son appareil sur toutes les plateformes. La conférence ressemblait plus à une publicité pour l'asso qu'autre chose. Pas été convaincu du tout.

Le seul point valide qu'il ait soulevé est que le parc des devices est beaucoup plus hétérogène que ce que l'on teste habituellement. Et que bien souvent nos tests sont fait dans des univers priviliégiés alors qu'un utilisateur réel aura bien souvent une connection pourrie, coupée par le métro, avec peu de batterie, des reflets sur son écran, etc.

Historique de Windows Azure.

ZZZZZzzzzz

Industrial Javascript

@Swiip nous parle de javascript, pour des développeurs Java. On nous présente tout le panel des outils autour du js, qui permettent au dev java de se retrouver dans un terrain un peu plus connu. Un peu foutoir, ça présente très vite angular (+ember, +backbone), Bootstrap, jshint, grunt (+gulp, +brunch, +jake), scss (+stylus, +less), coffeescript, haml (+jade), yeoman, jasmine, karma, phantomjs, mocha, chai, sinon. Un peu trop de choses à ingurgiter d'un coup, quoi.

HumanTalks Janvier 2014

Introduction

C'était la première fois que j'assistais aux HumanTalks. Je pense que j'y retournerai régulièrement, ça ouvre des reflexions sur pleins de choses annexes à la vie d'un developpeur sans trop rentrer dans le technique. Très rafraichissant.

Ca se passait à La Cordée, un espace de coworking vers la gare de Lyon. 4 Talks de 10mn chacun + questions. Avec un ROTI à la fin (mais pas à la manière OCTO du mélangeage de doigts, mais de marquer une croix dans une des trois colonnes Bon, Moyen, Mauvais de chacun des talks).

Ecrire sur Internet, c'est mieux avec Markdown

Présentation de markdown. Vu que je prends déjà mes notes en markdown, prendre les notes de ce talk avait un petit coté inception.

Markdown est un moyen d'écrire facilement sur internet. C'est un système de mise en forme de texte simple, sans avoir besoin de logiciel particulier, qui permet de rendre un texte à la fois facile à lire et facile à écrire, tout en gardant une hiérarchie, et quelques bonus (emphase, liste, liens, etc).

Bien sur, il y a un script perl qui convertit le markdown en html. Markdown est utilisé (dans des versions légérement modifiées) par github et stackoverflow.

Les MOOCs

Par Yannick Grenzinger, de Xebia.

Ce sont les Massive Open Online Course. C'est à dire les systèmes de cours en ligne à la coursera. Les cours drainent en général entre 50.000 et 200.000 inscrits (beaucoup moins de réels personnes qui suivent les cours jusqu'à la fin, mais des volumétries quand même honorables).

Globalement les cours sont gratuits et fait par des pointures (Google, ou le créateur de Scala qui donne un cours de Scala). Les cours sont de haute qualité en général.

Cela dit, les cours ne sont pas complétement ouverts. Il est souvent interdit/impossible de télécharger les vidéos ou les supports des cours. De plus en plus de cours deviennent payant au bout d'un moment (les premiers sont gratuits pour créer une envie, puis deviennent payants).

Certains cours sont à heures fixes, d'autres sont accessibles 24/24. Paradoxalement, les cours à heure fixe ont plus d'étudiants que les autres, car on a tendance à se dire “je le ferai plus tard” pour ne jamais le faire au final.

Le speaker avertissait qu'il était un peu boulimique des cours, qu'il en faisait beaucoup, voire trop. Ses conseils étaient de télécharger les vidéos pour les regarder dans le métro et de garder le temps réel devant son pc pour les cotés pratiques. Et surtout, de ne pas fréquenter les forums des cours, rapport temps investi/choses apprises est faible par rapport aux vidéos.

Les cours de business sont les plus faciles. Les cours d'UX ne sont pas durs mais nécessitent beaucoup de travail. Les cours de code sont les plus longs et les plus durs.

Certains cours comme ceux de code peuvent être validés automatiquement (check de l'input et de l'output). Les cours d'UX doivent être validés manuellement, donc un système de peer review est mis en place. Chacun doit évaluer 5 cours de 5 autres étudiants random pour que le sien soit aussi reviewé. Selon lui cette étape est beaucoup plus facile dans les cours américains que dans les cours français où les reviewers sont généralement moins laxistes.

Il conseille particulièrement coursera pour la qualité des cours. Il indiquait aussi qu'être prof d'un cours comme ça était une très bonne pub qui permettait aux auteurs de se mettre en avant, et de vendre leurs livres avec beaucoup plus de légitimité.

Il a fini avec une liste de recommandations :

  • Startup Engineering.
  • Intro aux Malwares.
  • Reactive Programming.
  • Comment créer son entreprise
  • Human computer interaction
  • Gamification.
  • Social Psychology

LES LANGAGES ESOTERIQUES

Conférence amusant et wtf sur les langages ésotériques, comme le brainfuck, dont le but n'est pas d'être lisible, ni même d'être pratique. A partir du moment où le langage est capable d'effectuer une liste d'instructions élémentaires, il est dit Turing-complet (ceux qui sont plus calés que moi en algo, reprenez-moi quand je me trompe), et tout langage turing-complet est capable d'exprimer n'importe quel autre langage turing-complet.

Le brainfuck, dont les seuls caracteres autorisés sont <, >, +, -, [ et ] en est un. Tout comme Piet qui s'écrit avec des images composées de pixels tirés d'une palette de 17 couleurs et la transition d'une couleur à une autre se traduit en une instruction, avec un pointeur qui se déplace de pixel en pixel pour executer le code.

(A ce moment il a été demandé pourquoi on n'utilise pas Piet en place des QRcode. A part les problématique évidentes de sécurité, l'idée est interessante.)

Puis vint la présentation de langages tous plus wtf les uns que les autres :

Le Malbolge, qui est fait pour être impossible à programmer.

L'Unlambda, qui n'est constitué que de fonctions.

Le whitespace où les seuls caracteres possibles sont space, tab et new line.

Plus d'infos sur : http://esolangs.org/wiki/Main_Page

L'entreprise comme malade mental

Sans doute la conf' la plus captivante de la soirée, en partie pour les discussions qu'elle a entrainée autour d'une bière ensuite.

En gros, le speaker comparait les entreprises à des personnes atteintes de maladies mentales, et faisait des parallelles très intéressants. Il avait isolé trois pathologies principales.

Les anorexiques/boulimiques sont des sociétés qui vont acheter des filiales… puis effectuer un plan social. Ou créer un nouveau service, avant d'externaliser. Ca pose evidemment des problèmes de digestion la masse salariale devient comme une friandise dont on ne parvient pas à gérer excès. Difficile ensuite pour la société de garder sa ligne et de s'aligner avec les critères de beauté du marché.

Les hypochondriaques, qui sont persuadés que quelque chose ne va pas chez eux. Alors ils demandent des audit, des coachs, et ont une surconsommation de consultants exterieurs. Ils font des séminaires, de réunions, des réorganisations. Leur pole RH devient hypertrophié et touche à tout.

Au final, cela leur cache leurs vrais problèmes. Ils fantasment sur des problèmes qui flattent leur image sans voir la vraie cause. Ils deviennent très liés à leurs consultants, et finissent par racheter les sociétés de conseil, pour avoir leur médecin directement chez eux. Au bout d'un moment cela crée des jalousies en interne et tout le monde veut alors sa part des soins.

Les derniers sont les bipolaires, qui alternent des phases de croissance fulgurante avec de longues périodes de doute. Particulièrement les startups, qui ont des changement de business plan très souvent. Qui “pivotent” à tout va, font des revirement à 180° et perdent complétement leurs employés.

Ils sont dans la surenchère, ils font beaucoup d'effets d'annonce flamboyant, alors que leurs résultats sont fragiles. Ils font tout pour garder la tête haute et avoir l'air bien portant devant le monde exterieur alors qu'en interne tout n'est pas si facile. Ils supportent mal la critique.

Node.js Paris Chapitre 1, Conférence 5

Introduction

Cette fois-ci c'était dans les sous-sols de la mairie de Paris.

PARIS IS API

Présentation de "Paris Numérique”, le département de la direction de la communication de la ville de Paris. Ce sont les responsables du site paris.fr et de tous les sites annexes sur les actualités de la ville (~300 sites, dont paris plage, velib, etc).

Ils ont particulièrement deux sites dont ils sont fiers :

equipements.paris.fr qui référence toutes les piscines, parcs, écoles, etc de la ville, avec placement google maps. Pour chacun ils ont des infos contextuelles en temps réel comme les heures d'ouverture, si la piscine est actuellement bondée ou non, etc.

quefaire.paris.fr qui est un agenda des sorties culturelles et des loisirs de paris.

Toutes les données utilisées dans ces deux sites sont accessibles publiquement par des API et documentées. Les données sont des données en temps réel, on tape réellement sur les bases de prod (nécessaire par exemple pour des events qui sont annulés au dernier moment). Leur documentation est générée automatiquement à partir du code. L'accès est gratuit, il faut juste demander une clée d'API pour qu'ils monitorent l'usage.

Techniquement c'est construit sur une stack MEAN (Mongo/MySQL, Express, Angular, Node).

Et c'est disponible sur demo.api.paris.fr

Avec en plus le code de génération de la doc dispo sur github : https://githu b.com/ParisNumerique/MakeMeApi

Très intéressant, ça donne envie de jouer avec les données.

Grunt

Présentation rapide de Grunt, mais sincérement regardez les screencasts de CSSTricks ou egghead.io et vous en saurez autant, voire plus.

node-libspotify

Présentation de Florent Jaby et de son module nodejs qui wrappe la librairie C/C++ de spotify pour la rendre accessible depuis node. Florent étant un collègue, je n'ai pas pris vraiment de notes, sachant qu'il pouvait m'expliquer tout ça directement si besoin.

Très bonne présentation cela dit, Florent a réussi à rendre compréhensible et amusant un sujet qui est à la base pas super simple.

Growing your prototype

Finalement un REX sur quand et comment passer d'un prototype à quelque chose de mieux construit. Ce que j'en ai retenu c'est qu'il préconise de ne pas se lancer dans les tests ou le TDD trop tôt dans la vie du projet. Au début on experimente, on essaie, et si on commence à mettre des tests, ça nous bloque dans une vision, et on a du mal à jeter tous les tests qu'on a fait.

Dans la même veine, pour tester la faisabilité d'un proto, ils n'utilisaient même pas de DB, tout était dans des fichiers plats JSON. Plus facile à éditer, versionnable, pas de problématique de scaling. Ce n'est qu'une fois qu'ils ont vraiment été sur du set de fonctionnalités qu'ils voulaient qu'ils ont commencé à choisir une vraie techno pour leur db, et qu'ils ont alors commencé à la tester.

D'un point de vue technique, il donnait quelques astuces pour faire du quick and dirty en node. Comme par exemple définir un app.all() qui filtre toutes les requetes, check que les parametres indispensables soient bien là, fait quelques manips de data élémentaires et modifie la requete en conséquence avant de la laisser passer aux app.get et app.post plus précis ensuite.

Il conseillait aussi la library paperwork qui permet de valider un schéma de JSON simplement, à intégrer dans une API REST. Elle retourne un 4xx avec le détail de l'erreur de validation si le JSON envoyé ne corresponds pas à ce qu'on attends.

Il montrait finalement une micro-library maison nommée transquire qui remplace require et qui lui permet de mocker des modules, comme par exemple des drivers mysql qui retournent des données simplement en RAM plutot que de taper dans leur DB. Pour ça, il modifie l'objet require.cache pour toujours retourner son mock plutot que le véritable module. Il ne l'a pas publiée car la librairie fait à peine quelques lignes.

ParisRB Décembre 2013

Paris.Rb dans les locaux d'Epita, grand amphi, comme d'habitude. Début de la session officiellement à 19h30, mais premier véritable talk à 21h. Avant ça, présentation de Paris.Rb, pizza et bières.

Tizen

Romuald Rozan, d'Intel, nous a présenté Tizen, un OS Open Source basé sur le noyau Linux. Destiné à être multi-support (tablette, mobile, desktop, voiture, tv, appareil photo), il est poussé globalement par Intel et Samsung mais avec des partenariats avec d'autres fabricants et opérateurs. Résultat du merge de deux projets internes à Samsung et Intel.

Pas vraiment convaincu de la conférence, c'était plus un message à enrobage commercial qu'autre chose. La question lui a été posé des différences entre Tizen et FirefoxOS. Il a répondu qu'il n'avait pas pour habitude de dire du mal des concurrents, qu'il suffisait d'aller voir ce que faisait FirefoxOS pour voir en quoi Tizen était différent… Il a aussi laissé sous-entendre que Tizen était poussé par des gros du hardware et destiné à tourner sur du matériel de plus haut de gamme que FirefoxOS.

Phusion Passenger

Présentation de Hongli Lai, qui était de passage à Paris pour dotJS et qui nous a présenté Phusion Passenger, et surtout les améliorations apportées ces dernières années. Passenger est un serveur qui fait la liaison entre un webserver (Apache, Nginx) et une appli Rails qui tourne derrière. Il a rapidement comparé Passenger à ses concurrents : Mongrel, Thin, Unicorn et Puma.

Il a mis l'accent sur le fait que Passenger execute beaucoup d'automagic dans sa config et possède des adapter pour Apache et Nginx qui font presque tout tout seul (il a comparé à une config typique de Unicorn qui semble beaucoup plus complexe –mais qui propose peut-être justement plus de fine-tuning ?–).

Niveau perf, il a aussi benchmarké contre Puma, qui est plus rapide sur les benchmarks, mais où les différences de perfs ne sont plus perceptibles in real life, sur une appli déployée. Il a de toute façon précisé que si on cherche à avoir une appli avec de bonnes performances, il ne faut pas faire du Rails, ou alors le blinder derrière du cache et du load balancing.

A part ça, Passenger permet de restarter automatiquement l'appli en cas de crash, de laisser nginx servir les fichiers statiques, d'utiliser des sockets unix pour communiquer si disponible, se scale automatiquement en cas de traffic en spawnant de nouvelles instances du serveur sur chaque CPU de la machine, et il permet aussi l'utilisation de web sockets. Et tout ceci est monitorable depuis la command line avec passenger-status. Il permet aussi d'envoyer un mail ou un log avec la stacktrace complete lors d'un crash.

Ils ont aussi grandement facilité l'installation avec des dépots officiels Debian, Ubuntu et Homebrew. Marche sous heroku et peut même servir de serveur devant du nodejs ou du python (même si j'ai pas trop compris le use-case).

Le seul drawback, si on veut l'utiliser avec nginx est qu'il faut une version spécialement compilée de nginx, mais qui est fournie avec passenger.

Il existe aussi une version pro de passenger, qui intègre des features supplémentaires, mais tous les bugs sont d'abord fixés sur la version open.

Zeus

Lightning talk à propose de Zeus, qui permet de preloader en mémoire son appli rails et donc de pouvoir ensuite executer toutes les taches rails console, rails tests, etc de manière quasi-instanée. En utilisant parallel_test en complément de Zeus, on peut même executer ses tests en parallele sur chaque CPU de la machine, de manière à réduire drastiquement le temps d'execution des tests (exemple présenté sur : 14mn de tests de base, ~6mn avec Zeus+ParallelTest).

Code Reviews

La dernière conf était celle qui m'interessait le plus sur le programme. Christophe Philemotte, de 8th Color nous a parlé des code reviews, des outils, et de la manière dont ils le font dans sa boite.

Il a commencé par rappeller l'utilité d'avoir des tests : pour vérifier d'abord que tout fonctionne, mais aussi pour éviter la non-regression, servir de documentation, ne pas oublier les edge-cases, et au final accélérer les cycles de dev.

Ensuite, il a évoqué l'autre facteur de création de qualité selon lui : les code reviews. Toute nouvelle feature, tout bug fix, est relu par un autre membre de l'équipe. Cela créé une discussion et permet de partager la connaissance du projet au sein de l'équipe, d'éduquer l'équipe, de détecter des bugs qui auraient pu passer devant une seule paire d'yeux. Mais ça améliore aussi selon lui la lisibilité et la consistency du code ainsi que le co-ownership de celui-ci. Et au final, une fois encore ça accèlere les cycles de dev.

Pour faire ça, ils utilisent plusieurs outils qui, en plus des tests, leur permettent de régler automatiquement certains des soucis de leur code avant de le soumettre au code review des autres. L'idée est que si un outil automatique peut nous faire gagner du temps, c'est autant de temps gagner à discuter constructivement avec un autre être humain sur du code, et donc profiter de son experience et de sa pédagogie, ce qu'une machine ne peut pas fournir.

Ils passent donc leur code au travers d'une série de moulinettes, entre autres :

  • un linter, pour checker les syntax error très rapidement
  • Flog, qui évalue la complexité du code (nombre de loop, branching, etc) et se mettent d'accord sur une valeur de complexité maximum autorisée
  • Flay, qui teste la duplication du code au sein d'une codebase
  • Excellent, qui detecte le code smell
  • Rails best practices, qui comme son nom l'indique output les manquements aux bonnes pratiques (à fine-tuner quand même car il est un peu extremiste avec les options par défaut).
  • BrakeManScanner, qui vérifie le code pour y trouver des vulnérabilités de sécurité
  • Rubocop qui checke le code en suivant le Ruby Style Guide et qui peut même corriger certains soucis de lui-même.

Si on ne veut pas s'occuper d'installer tout ces outils, il existe des solutions en SaaS comme CodeClimate et PullReview (le dernier étant fait par le speaker).

Son conseil est de commencer par un des outils présentés, n'importe lequel, et l'incorporer dans son workflow. Puis une fois maitrisé, en rajouter un autre, et ainsi de suite, et une fois que tout ce qui peut être automatisé l'est, passer aux code review manuelle.

Il mettait en garde contre les défenses naturellement humaines que les codeurs ont contre les pull review, la sensation d'être testé, surveillé, quand on commit, et que cela peut créer un climat complétement contraire au but recherché.

ParisJS #31

Introduction

ParisJS 31, dans les locaux de Microsoft à Issy-les-Moulineaux. Cette série de présentations était particulièrement axée sur WebGL dans le navigateur.

WebGLAcademy

La première présentation présentait WebGLAcademy

Un site de cours en ligne pour apprendre WebGL. Fait par un formateur de WebGL qui s'est rendu compte qu'il est difficile d'apprendre les rudiments de 3D à ses élèves et qui a construit le site pour l'aider dans ses formations. Le code de chaque chapitre est éditable et tourne en live dans le browser, découpé en étapes qu'on peut avancer ou reculer.

De ses retours d'experience, la partie la plus dure pour s'y mettre est l'un des premiers exercices qui consiste à afficher un cube coloré qui tourne sur lui même. Après ça, la courbe d'apprentissage (shaders, etc) est beaucoup plus facile.

Babylon.js

La seconde présentation était de David Rousset (@davrous), qui avec son collègue David Catuhe (@deltakosh) ont développé Babylon.js, un framework de jeux 3D avec HTML5 et WebGL. Les deux david bossent pour Microsoft, mais leur framework est fait sur leur temps libre et aucunement affilié à Microsoft. Le code est dispo ici : https://github.com/BabylonJS/Babylon.js

Le framework est une couche d'abstraction au dessus de WebGL pour le rendre beaucoup plus facile d'accès aux néophytes, et orienté développement de jeu. Plein de choses sont déjà incluses dans le framework comme une camera libre, un moteur de collision, la gravité, le déplacement au clavier/souris/touch/accelerometre, des joysticks virtuels en surimpression pour se déplacer sur interface tactile. Le framework va intéragir directement avec le GPU. Ils ont même développé un plugin pour Blender pour exporter directement des modèles en JSON pour les importer dans Babylon.

La majorité des shaders de base sont déjà intégrés, mais il est possible d'en développer des customs. Un système de cache est inclu pour permettre d'optimiser l'affichage d'un même élement de multiple fois, ainsi que le “frustrum” (le fait de ne gérer que ce qui se trouve dans l'angle de vision du joueur et de discard ce qu'il ne peut pas voir, pour économiser des perfs). Ajouté à ça un loading incrémental des assets en fonction de leur distance avec la camera (mais pas de gestion de LOD encore), il est techniquement possible de créer des mondes ouverts à la GTA ou Skyrim.

Marche sur tous les navigateurs, et possibilité d'exporter son code pour le transformer en appli pour le Windows Store et tournera directement en natif sous windows 8. Fonctionne aussi avec une manette Xbox.

Ils ont même une version Occulus Rift dans les cartons, ainsi que des améliorations telles que la création d'un format binaire d'export, le drag'n'drop direct depuis Blender dans Visual Studio, l'intégration d'un moteur physique et pas mal d'autres choses trop techniques WebGL que je n'ai pas retenues.

Bref, c'était un beau projet, très impressionnant, vous pouvez checker les démos sur http://www.babylonjs.com/

ASM.js

Bon, alors là je suis désolé mais mon cerveau est passé en mode shutdown et j'ai pas tout suivi. Je vous invite donc à aller sur la FAQ du site officiel : http://asmjs.org/faq.html

En gros, ASM.js est un subset de javascript qui ne contient que les méthodes les plus bas niveau pour faire du JS hyper rapide, aussi rapide que du C. Il est possible d'écrire en ASM.js dans n'importe quel navigateur aujourd'hui, et pour peu qu'on se plie à la nouvelle syntaxe, notre JS sera de toutes façons executé plus rapidement. Mais si le browser inclue lui-même ASM.js, alors le code serait extremement plus rapide. Actuellement, seul Firefox incluerait ASM.

ASM est donc particulièrement adapté pour écrire du bas niveau qui va parler directement avec le GPU, lui aussi pour faire du WebGL. Les démos étaient impressionnantes, mais le niveau technique en 3D (et en C) était bien trop complexe pour moi.

Cozy Cloud

https://www.cozycloud.cc/

Présentation rapide de Cozy Cloud, un cloud personnel à déployer sur ses propres machines (laptop, mobile, tablette, boxes, etc). L'idée principale est de garder ses données personnelles chez soi, sur son propre cloud, mais de pouvoir néanmoins y accèder sur tous ses devices (potentiellement même en mode offline). Leur idée principale est que nos datas personnelles restent sur nos machines personnelles.

Tout ça tourne sur du linux, avec une couche de node.js en interne. Chacun peut développer ses propres apps sur le système, la principale utilité étant que toutes les apps peuvent avoir accès aux mêmes données (mails, todo list, contacts, films, etc). Actuellement seul node est dispo comme langage de dev, mais python et ruby vont bientot arriver.

Il faut quand même un bon matos pour faire tourner Cozy (ie. un raspberryPi est trop petit, un cubieboard est ok), et ils sont actuellement en discussion avec GDF pour s'intégrer dans leur future box domotique.

Conclusion

Paris.js c'est bon, mangez-en. En plus, il y avait des donuts.