Cassandra est une excellente base de données pour gérer de très gros volumes de données sans downtime. Mais c’est une technologie plus complexe qu’une base de données relationnelle ou qu’un MongoDB, et il est facile de faire des erreurs de conception quand on est habitué aux bases relationnelles. Avant de me mettre à Cassandra, j’avais regardé pas mal de vidéos sur le sujet et malgré ça, je suis passé à côté de certaines particularités. Voici 5 choses que j’aurais aimé savoir quand j’ai débuté sur le sujet :

1. Définitions

Cluster, clustering key, row, partition, noeud, table, column family… en découvrant Cassandra, vous allez rencontrer de nouveaux mots clés dont la signification n’est pas toujours très claire.

Pour commencer, il faut savoir que le vocabulaire a évolué avec le temps. Vous trouverez sans doute d’anciens articles qui parlent de column families et d’autres plus récents qui parlent de tables....


Dans un article précédent, j’ai essayé de décrire comment créer une application AngularJS minimale en ECMAScript 2015 sans outil de build. La compilation ES2015 vers ES5 (JavaScript) se faisant à la volée, mon petit exemple mettait un certain temps à s’initialiser. Sur une vraie application, cette solution n’est pas envisageable et il est donc nécessaire de faire la compilation lors du build.

Dans cet article, nous allons nous attaquer à la migration d’une application Angular 1.X de JavaScript vers ES2015. Et comme cobaye, on utilisera mon appli Freelance Impôt écrite il y a quelques mois.

L’appli doit être iso-fonctionnelle une fois la migration terminée :

  • rendu identique
  • exécution des tests Jasmine toujours possible depuis la page http://freelance-impot.fr/specRunner.html
  • debuggage possible du code source d’origine dans le navigateur (autrement dit : sourceMaps)

Utilisation des nouveautés d’ECMAScript 2015

Les contrôleurs et les services deviennent des classes. Les...


Utiliser la même image Docker (serveur + appli) sur tous ses environnements, c’est bien. Mais en phase de développement, recréer une image à chaque modif du code, c’est long. Pour éviter ça quand on développe côté front, il est possible d’ajouter ses sources au démarrage du conteneur Docker plutôt qu’au build de l’image.

Sous Linux, c’est facile

Sous Linux, c’est facile grâce à l’option -v qui sert à monter un volume de données. Exemple avec un conteneur embarquant un serveur Apache :

docker run -p 8000:80 -v ~jeff/boulot/angular1-es6/:/usr/local/apache2/htdocs/ -it httpd:2.4

Si on modifie un fichier HTML et qu’on actualise son navigateur à l’URL http://localhost:8000, on verra tout de suite les changements.

Sous Windows, ça se complique

A ce jour, Docker tourne ne tourne que sous Linux. Il faut donc passer par une machine virtuelle (VM) Linux quand on est sous Windows. Cette couche de complexité supplémentaire est en partie masquée...


Le standard ECMAScript 2015 (ou ECMAScript 6 ou ES6) définissant la nouvelle version de JavaScript a été adopté en juin, mais il faudra encore quelques temps avant qu’il soit implémenté par tous les navigateurs. En attendant, on peut utiliser un compilateur comme Babel ou Traceur pour compiler son code ES6 en JavaScript. C’est même fortement conseillé par le Technology Radar paru le mois dernier.

Récemment au boulot, on m’a donc demandé d’ajouter Babel au build Grunt de notre application AngularJS 1.4, puis de migrer un contrôleur JavaScript simple vers ES6 pour valider que la compilation par Babel fonctionnait bien. Ça n’a pas posé de problème particulier, mais je me suis demandé si c’était aussi facile de migrer toute une application en ES6, et j’ai donc commencé à le faire sur une application perso.

Babel ou Traceur ?

J’ai d’abord essayé d’utiliser Babel comme un polyfill, pour ne pas...


Peut-on faire des requêtes de type SQL en utilisant les streams de Java 8 ? En utilisant des fonctions comme MIN ou MAX ? Si on manipule par exemple des instances de la classe Footballeur ci-dessous, comment fait-on pour trouver le joueur ayant marqué le plus de buts ?

class Footballeur { String nom; Integer nbButs; }

En SQL, c’est facile, on ferait une sous requête :

SELECT * FROM footballeur WHERE nbButs = (SELECT MAX(nbButs) FROM footballeur);

En Java, on trouve beaucoup d’exemples permettant de récupérer le plus grand élément d’une liste, mais moins pour récupérer les propriétés de l’objet associé. J’ai eu ce genre de problématique cette semaine, et après un long quart d’heure de recherches...


Avant, on installait Tomcat (par exemple) en local, en dév, en intégration et en production, puis on buildait son application et on la passait d’un environnement à l’autre. Et de temps en temps, ce qui marchait en dév ne marchait pas en prod. Aujourd’hui on peut, grâce à Docker, livrer son application avec son environnement d’exécution (appli + Tomcat + Linux) rapidement sur le serveur de son choix, et ainsi réduire le risque d’avoir des différences entre les environnements.

Docker est donc une solution de virtualisation légère qui fait énormément parler d’elle depuis plus de 2 ans. On trouve donc logiquement sur le web une grande quantité d’articles à son sujet. Mais les concepts de Docker peuvent prendre un peu de temps à assimiler quand ils ne sont pas bien expliqués. C’est pourquoi je vous conseille la lecture de ces 2 articles, qui sont les plus clairs que j’ai trouvés...


Freelance depuis peu, j’ai développé une petite application me permettant d’avoir une idée du montant de l’impot sur le revenu que je devrai payer. J’espère qu’elle pourra être utile à d’autres personnes !

L’application est développée avec AngularJS 1.4 et Bootstrap 3. La courbe interactive utilise une directive basée sur NVD3 et D3.js. L’appli tourne dans un container Docker qui récupère les sources depuis GitHub et les copie dans un Apache. Le Dockerfile comme le code source sont disponibles ici : https://github.com/jffourmond/freelance-impot

http://www.freelance-impot.fr



Ce blog est maintenant hébergé sur GitHub Pages suite à la lecture d’un post de mon collègue Sun Tan. Cet article montre comment créer un blog sur GitHub avec Jekyll, et comment l’éditer et le tester en utilisant Codenvy, un IDE en ligne qui lance des containers Docker : A blog site with Jekyll, Github Pages Eclipse Che and Codenvy.

Super intéressant ! Et pour ceux qui ne connaissent pas Codenvy/Eclipse Che, cet article fera un bon préambule : Eclipse Che, un IDE sur le Cloud.

Les sources de ce blog sont disponibles sur GitHub.


On entend de plus en plus parler de l’internet des objets, et ce n’est pas prêt de s’arrêter. Mais comment créer un objet connecté ? Qu’est-ce que le Raspberry Pi ? Et quels sont les langages, les frameworks et les protocoles à utiliser ? Toutes les réponses sont dans cet excellent article, qui présente le sujet à travers l’exemple d’un objet connecté programmé en JavaScript. Une parfaite introduction pour prendre le train en marche !

Comprendre l’IoT avec une boule… mais pas que…