dimanche 13 mai 2018

Comprendre l'algorithme de Shor

ou

L'informatique quantique pour les nulls


L'autre jour, alors que je devisais avec ma boulangère de physique quantique, celle-ci m'avoua -avec un peu de honte mais il faut lui pardonner- ne rien comprendre à l'algorithme de Shor. Il est vrai que l'algorithme de Shor n'est pas le plus abordable des algorithmes : c'est quand même celui permettant de casser RSA, ou plus simplement de trouver les facteurs premiers d'un entier.

Et s'il y a bien une technologie de rupture dont on n'arrête pas de parler en ce moment, c'est bien le calcul quantique ! Mais aussi l'IA… Et aussi la blockchain… Mais là, on va rester sur le calcul quantique.

RivieraDev, 16-18 mai 2018

lundi 23 avril 2018

L'accès à la propriété pour tous

Toute application d'une certaine envergure expose un certain nombre des variétés de son exécution sous forme de paramètres, chacun composé d'un nom associé à une valeur. Il est commun que ces paramètres soient regroupés dans un fichier, dit "de configuration" que l'application lira au démarrage. On peut y trouver de tout : la couleur du fond d'écran, l'URL de connexion à une base de donnée (et son user/password), la taille du cache, le nom d'une classe concrète à utiliser pour rendre un service donné, l'âge du capitaine, etc.

Pour une application Java, ce fichier de configuration sera le moins souvent un fichier XML, et le plus souvent un fichier plat, les fameux fichiers .properties. Pour faciliter son traitement, Java offre la classe Properties éponyme avec les moyens de lire (ou de sauvegarder après modification) ces propriétés.

Oui mais voilà, ces propriétés sont accessibles par une clé qui n'est qu'une simple String, et disponibles sous la forme d'une valeur qui, également, n'est qu'une simple String. Ne pourrait-on pas faire mieux, tout en restant simple ?

Si, bien sûr...

Une propriété bien peu pratique d'accès

mercredi 7 février 2018

10 hacks en Java

Parfois, il n'est pas possible de faire certaines choses aisément en Java, parce que le langage et son environnement ne sont pas conçus pour ça. Grosse frustration.

Par exemple, étendre un Enum n'a pas de sens, si on éprouve l'idée sur la notion d'extension telle qu'elle est convenue ; pourtant, il peut arriver qu'on en ait besoin si on considère la notion d'extension différemment. Bien que la JVM ne le permette pas de manière triviale, quelques circonvolutions nous permettent cependant d'obtenir l'effet souhaité. On va décrire comment tout à l'heure.

J'expose ici 10 recettes permettant d'étendre certaines fonctionnalités à priori pas permises en Java : 10 hacks bien commodes dont je me suis déjà servi, et qu'un jour peut-être tu trouveras utile pour ton propre code, ami lecteur.

Une alimentation saine et équilibrée
permet de bien faire hack hack

lundi 13 novembre 2017

Le Seigneur des DAO

Les objets d'accès aux données (Data Access Objects - DAO) servent de point d'interaction entre les objets métiers (ceux que vous gérez dans votre code) et la couche de persistence.

Chaque DAO est spécialisé sur un objet métier et agrège les opérations CrrrrrUD, à savoir la création (Create) modification (Update) suppression (Delete) + une ribambelle d'accès en lecture (Read) sous diverses formes : obtenir la liste des éléments, ou obtenir un élément par son ID, par son nom, par l'age du capitaine, etc.

Dans ce qui suit, j'utilise une couche DAO existante dont je veux altérer le comportement. Je vais utiliser un point d'entrée unique, une sorte de master classe Dao qui me donnera accès à tous les autres. Voyons comment.

Un des acteurs du Seigneur des Daho
- FIXME : pas la même typo ! -

mercredi 11 octobre 2017

Une classe à 1 dollar

Les conventions de nommage ont leur raison d'être : en Javascript, on sait immédiatement qu'uneFonction n'est pas la même chose qu'UneFonction, la seconde étant convenue d'être appelée avec l'opérateur new et surtout pas la première.

En Java une constante s'écrit en majuscules avec des soulignés en guise de séparateur entre les mots, et les noms des classes en camel-case avec la première lettre en majuscule. Attention, on parle bien de conventions, à savoir des bonnes pratiques à utiliser mais qui, si elles ne sont pas suivies, ne donnera pas un code incorrect. Par contre, en ce qui concerne la revue de code, ça risque de coincer aux entournures surtout si vous utilisez un outil tel que checkstyle dans votre build.

On pourrait égrainer l'ensemble des règles spécifiques à chaque langage, au bout d'un moment on reste face à ses choix : comment nommer une interface et la classe qui l'implémente ? Mon choix porte sur la classe à 1 dollar... je vais expliquer pourquoi.

lundi 5 septembre 2016

La vie privée et cachée des membres en Javascript (ES6)

Il est étonnant, depuis la release d'ES6, de ne pas avoir vu évoluer les techniques permettant de gérer correctement les membres privés des objets en Javascript en attendant le support natif du mot clé "private" (à l'heure actuelle, ce mot clé est réservé, mais pas utilisé).

En effet, aucune technique connue ne satisfait toutes ces caractéristiques :
  1. interdire rigoureusement l'accès aux membres privés
  2. les méthodes accédant aux membres privés doivent être des méthodes de classe
  3. l'instance obtenue doit bien être du type souhaité
  4. les membres privés doivent être directement associés à leur instance
Afin de combler ce manque, cet article propose donc une technique qui couvre toutes ces exigences et qui me paraît l'une des plus élégantes que petits et grands pourront à loisir adapter pour leurs propres projets.

jeudi 19 novembre 2015

Ignorer la casse, les diacritiques, et les ligatures dans un autocompléteur GWT

Autant, en Java, supprimer les diacritiques et ligatures est un jeu d'enfant, il suffit de ces quelques ligne (voir ci-dessous), autant, dans une application Web avec GWT, ce n'est pas aussi immédiat.
Nous allons voir comment réaliser cela dans un autocompléteur grâce auquel l'utilisateur peut sélectionner le nom d'un pays sans se soucier de commencer à l'écrire : avec ou sans accents, en majuscules ou minuscules.