Le filtre de Bloom

Nous allons présenter dans cet article le filtre de Bloom, une structure de données méconnue mais appréciée, tant pour sa simplicité d’utilisation que pour les gains de performance qu’elle permet d’apporter.

Elle a été choisie par l’équipe de Google Chrome pour implémenter la fonctionnalité « Safe Browsing » qui protège les utilisateurs contre des attaques de fishing et contre certains types de malware. Avec Safe Browsing, le navigateur effectue une validation avant de commencer le chargement d’une page. Si l’URL en question est identifiée parmi une vaste blacklist, Chrome affiche une alerte à l’utilisateur.

Le stockage de cette blacklist pose problème, à cause de son volume. Un million d’URL représentées de manière classique occuperaient environ 30MB, soit l’équivalent de l’empreinte mémoire totale du navigateur.

Chrome a choisi de représenter cette liste sous la forme d’un filtre de Bloom, ce qui a permis de réduire la consommation mémoire à deux mégas, et de garantir une validation en temps constant.

Cet article va détailler l’implémentation d’un filtre de Bloom, expliquer ses propriétés principales et proposer plusieurs scénarios d’utilisation concrets.

(Lire la suite…)

Le point sur Node

Dans cet article, nous allons faire le point sur Node, une technologie serveur dont tout le monde parle et qui est devenue, en 2 ans seulement, le 3ème projet le plus suivi sur GitHub derrière Rails et jQuery.

(Lire la suite…)

La programmation haute performance n’est-elle réservée qu’à une élite de développeurs C++ ?

Récemment un papier d’étude de Google UK a été publié sur la performance des langages de programmation JAVA, Scala, C++ et Go (Loop Recognition in C++/Java/Go/Scala). Dans ce papier, les performances des langages sont comparées sur la base d’un algorithme de recherche de boucles dans un graphe (Algorithme de Tarjan).

Principalement basé sur la performance d’exécution d’instructions séquentielles (boucles), la gestion de la mémoire, le temps de compilation et le nombre de lignes de code écrites cette étude montre que pour arriver à des hautes performances en C++ les optimisations techniques (au niveau du langage) deviennent trop compliquées pour le résultat produit. Comme le dit Robert Hundt :

 

We find that in regards to performance, C++ wins out by
a large margin. However, it also required the most extensive
tuning efforts, many of which were done at a level of sophistication
that would not be available to the average programmer.

Cependant, cet article a été critiqué sur son use-case peu pertinent et sur la validité des résultats. Quand même, C++ est le ++ fort ! Bien qu’il ait été maladroit, ce cher Robert a soulevé un point très intéressant : la programmation haute performance n’est-elle réservée qu’à une élite de développeur C++ ? Le développeur moyen peut-il espérer développer des applications haute performance ?

(Lire la suite…)

Charger des fichiers javascript de façon performante

Users really respond to speed

La citation est de Marissa Meyer, VP expérience utilisateur à Google, en 2006.

Pas grand chose n’a changé depuis, si ce n’est qu’on a des chiffres plus précis, et un peu effrayants, sur l’importance de la performance dans les applications web : Quelques points de performance feront la différence entre une expérience réussie et une application perçue négativement par ses utilisateurs.

Ou plutôt si, ce qui a changé c’est que depuis 2006 on ne se contente plus de sites web, les applications web ont envahi les entreprises et leur SI. Il devient donc primordial de faire attention aux spécificités des applications web : On ne traite pas un navigateur comme un client lourd. (Lire la suite…)

Vers une supervision IT de la performance métier du SI (2/2)

Dans la première partie de l’article, nous avons vu comment la supervision pouvait apporter de la valeur à court terme au SI. Dans cette seconde partie, nous verrons comment la supervision peut permettre d’établir des services répondant à des besoins à plus long terme.

Pour cela on va utiliser la supervision pour capitaliser et modéliser.

(Lire la suite…)

Vers une supervision IT de la performance métier du SI (1/2)

La maintenance des systèmes d’information en production est la tâche la plus coûteuse pour les DSI.

Dans un milieu hétérogène et complexe, la maîtrise du SI est donc un besoin vital pour la DSI mais également un but difficile à atteindre.

L’objectif de cet article en deux parties est de démontrer comment à partir d’une mise en place efficace de la supervision IT on peut construire des services apportant une réelle valeur au SI.

Dans la première partie, nous rappellerons ce qu’est la supervision sous sa forme la plus banalisé et comment l’utiliser pour atteindre un haut niveau de réactivité aux incidents.

Dans la deuxième partie, nous verrons que la supervision est un guide vers une meilleure connaissance de son SI et qu’elle peut aider à valoriser l’apport IT auprès  des directions métiers.

(Lire la suite…)

Optimiser le temps de chargement d’une application GWT (2/2)

La première partie de cet article a permis d’introduire la problématique de chargement des RIA, en commençant par expliquer comment optimiser le temps de téléchargement d’une application web basée sur GWT, notamment à travers la modularisation. Cette deuxième partie aborde l’optimisation du temps d’initialisation d’une application sur le browser, toujours illustré à travers la technologie GWT. (Lire la suite…)

Optimiser le temps de chargement d’une application GWT (1/2)

Le temps de chargement d’une application informatique est un point essentiel en terme d’usabilité. Il a un impact important sur l’expérience utilisateur, tellement important qu’il peut être le facteur décisif d’adhésion ou de rejet de l’application par les utilisateurs qui se font un avis en 2-3 secondes. On a tous des exemples douloureux en tête… ou pas d’ailleurs… et c’est bien ça le drame : ces applications passent aux oubliettes!
(Lire la suite…)

Créer une équipe

Dans les méthodes agiles, l’accent est mis sur l’équipe. Il suffit de lire le manifeste agile pour s’en convaincre, valoriser les individus et les interactions, collaborer avec le client, répondre au changement. De ce postulat, nous pouvons nous demander ce qui définit l’ « équipe », et ce qui la différencie du groupe.

Différence entre équipe et groupe

Contrairement au groupe, une équipe est constituée spécifiquement pour répondre à des enjeux ambitieux et est orientée vers la tâche et vers les hommes. Une équipe se caractérise par sa diversité, son unité et fournit un espace exceptionnel pour ses membres. Une équipe est coordonnée par un leader, un groupe par un chef. Les membres d’une équipe travaillent, créent et décident ensemble ; les membres d’un groupe se réunissent et se répartissent le travail.

(Lire la suite…)