Vous aimez ce que vous lisez sur ce blog ?
Envie d'aller plus loin avec véritable formation d'expertise en Java ?
Venez suivre ma formation Masterclasse Expertise Java !

"Même un développeur experimenté a besoin de continuer à apprendre. Et dans cette formation... j'ai appris beaucoup !" - A.G., Java Champion

Prochaine sessions inter-entreprises : 13-16 février 2018
Sessions intra-entreprises sur demande : contact[at]mokatech.net.
Inscrivez-vous vite !

Du micro-BDD avec les labels

Vous connaissez le "Behavior-Driven Development" (BDD) ?
C'est une méthode de spécification et de test, qui consiste à décrire des scénarios sous la forme de triplets "conditions initiales" / "action" / "résultat attendu" (Given... / When... / Then...).

Différents frameworks (Cucumber, EasyB, JNario...) facilitent la mise en place de ce pattern en proposant notamment une syntaxe spécifique (DSL), et offrent de nombreuses fonctionnalités fort pratiques.

Mais si seule la formalisation "Given / When / Then" vous intéresse dans vos tests unitaires, il suffit d'utiliser... les labels Java.

Lire la suite...

Adieu Paris, direction Bordeaux !

Chers lecteurs et amis,

Après quinze ans d'études et de travail sur la région parisienne, il est temps pour moi de voguer vers d'autres horizons. Aussi je déménage sur Bordeaux, pour me rapprocher des miens et respirer un peu - il était grand temps.

Je quitte sans regrets Paris et son rythme de fou, ses heures de transport débilitantes dans des métros aux allures de bétaillères, la pollution et le stress qui gangrènent ses habitants.
Mais je quitte également des amis et des collègues estimés, ainsi que la grande clique des habitués du Paris JUG. On s'est bien amusés. Vous me manquerez tous.

D'un point de vue professionnel, en revanche, rien ne change : je poursuis ma collaboration avec Zenika, qui saisit l'occasion pour ouvrir un nouveau pôle Sud-Ouest.

Je serai disponible à partir de mi-octobre, toutes les propositions de missions sont les bienvenues : développement, architecture, conseil, formation... ou juste boire un coup :)

Le blog aura peut-être une petite période de creux le temps que je m'installe, mais ne vous inquiétez pas : je n'ai pas perdu la flamme, et tant qu'il y aura des choses intéressantes à découvrir en Java, je serai là pour vous en parler.

A la vôtre, et à très bientôt sur Bordeaux !

Olivier


vin.jpg

P6Spy, l'espion qui m'aidait

Hibernate est un bon outil, mais complexe. Pour surveiller les requêtes qu'il envoie à la base de données, il est possible d'activer différentes options :

hibernate.show_sql         = true
hibernate.format_sql       = true
hibernate.use_sql_comments = true

Mais les traces ainsi produites ne sont pas vraiment satisfaisantes : on voit bien la structure des statements, mais pas les véritables valeurs des paramètres :

Hibernate: 
    insert 
        into
            VILLE
            (version, nom, PAYS_ID, ID) 
        values
            (?, ?, ?, ?)

On sent bien qu'Hibernate a fait de son mieux pour nous aider, qu'une petite goutte de sueur a ruisselé sur son front fiévreux au cours de l'effort, mais tout de même, le résultat est loin d'être satisfaisant.

Et c'est là que P6Spy intervient.

Lire la suite...

Équipez vos développeurs ! (petit guide de rentabilité à l'usage des décideurs)

Tout bon artisan vous le dira : la qualité de ses outils est primordiale pour la réussite de son art. Le peintre sélectionne avec soin son pinceau, l'ébéniste son rabot, le boulanger son four.

Il n'est qu'en informatique que le développeur se voit imposer son outil de travail. Ce qui ne poserait aucun problème si celui-ci n'était pas, la plupart du temps, complètement obsolète, limité, ou simplement inadapté aux tâches à réaliser.
Le développeur éprouve alors une légitime frustration devant son incapacité à exprimer son plein potentiel au travail, et que son matériel personnel est bien meilleur que son matériel professionnel - un comble !

Le plus souvent, le constat est partagé par les développeurs, le chef de projet, les architectes, et dans un certaine mesure par tous ceux qui suivent l'avancement du projet. Mais voilà : l'acquisition d'équipement informatique est soumis à l'approbation des Achats, entité toute-puissante mais aux oeillères bien ajustées.
L'équipement coûte cher, paraît-il. Et aucun budget n'est prévu cette année pour ce poste. Réessayez l'année prochaine, en remplissant le formulaire 27B en quatre exemplaires. Fin de l'histoire.

Pourtant, tout développeur apprend vite que le temps perdu à attendre la machine se compte en heures, en jours, en semaines ! Et que la perte de productivité est en réalité bien plus importante que cette simple mesure horaire : la perte de contexte mental, la frustration et le stress des deadlines, l'abandon des tests trop longs à passer, minent les projets et les équipes. Le problème est que cet élément est inchiffrable, et donc difficilement opposable aux décisions des Achats.

Lire la suite...

Gnome3 : Audacious vampirise Nautilus !

Depuis peu, Audacious (lecteur audio) a une fâcheuse tendance à vampiriser les actions de Nautilus (gestionnaire de fichiers de Gnome) : toute action qui devrait normalement afficher un dossier dans Nautilus, lance Audacious à la place ! Et c'est très pénible au quotidien.

En attendant que le bug soit résolu lors d'une prochaine mise à jour, il suffit d'éditer le fichier des associations action/programme :

# Fichier ~/.local/share/applications/mimeapps.list

[Default Applications]
(...)
inode/directory=nautilus.desktop

[Added Associations]
(...)

Et voilà ! Même pas besoin de relancer la session !

Développer une application REST avec Spring MVC & Angular.js

Aujourd'hui plus que jamais, le Javascript a le vent en poupe. On le trouve même côté serveur - ce que je trouve personnellement d'une absurdité étourdissante, mais passons.

En ce moment, la mode est aux frameworks MVC côté client ; là, j'y crois déjà un peu plus. Mais il en sort environ un par semaine, et il est difficile de faire son choix, malgré la pléthore de comparatifs qui fleurissent sur le net (ici, , ou encore là-bas).

Thoughtworks, de son côté, estime que la peinture n'est pas encore sèche et qu'il vaut mieux attendre un peu avant de se lancer dans ce genre d'aventure en production. En effet, on a encore très peu de retours d'expérience, et la pérennité des frameworks n'est pas encore démontrée.

Pourtant, dans le tas, il y en a un qui m'a fait de l'oeil : Angular.js. Je vous propose donc une petite démonstration de son intégration avec Spring MVC côté serveur, pour réaliser une application, totalement originale n'est-ce pas, de "todo-list".

Lire la suite...

Java Quiz #45

Français :
Le pattern Singleton est bien connu ; son but est de garantir qu'une classe donnée ne possède qu'une seule instance.
Mais comment le protéger contre une réinstanciation par réflexion ?

Note: le but n'est pas de réimplémenter le Singleton sous la forme d'un enum, mais de protéger son implémentation classique, proposée ci-dessous.

English :
Singleton is a well-known design pattern ; its purpose is to guarantee that only one instance exists in the VM for that particular class.
But how can we protect the class from being instanciated again via reflection ?

(below : a basic Singleton implementation)


public class Singleton {
 
    private static final Singleton INSTANCE = new Singleton();
 
    public static Singleton getInstance() {
        return INSTANCE;
    }
 
    private Singleton() {
    }
 
    public void sayHello() {
        System.out.println("Hello World !");
    }
 
}
Lire la suite...

Google TV : another brick in the wall ?

La semaine dernière, Zenika organisait la première zNight, un événement ouvert à tous, qui permet à des équipes de coder toute la nuit autour d'un sujet imposé.
Malgré l'exiguïté des locaux (mais ça devrait aller mieux bientôt), l'organisation était impeccable, et nous avons pu accueillir une quarantaine de personnes dans une joyeuse ambiance geek/pizza/bonbons.

A événement exceptionnel, sujet exceptionnel : la Google TV, qui devrait débarquer bientôt dans nos contrées.

Un représentant de Google était présent pour nous présenter la bête et nous expliquer, des étoiles dans les yeux, à quel point cela allait changer la façon dont nous regardons la télévision. Personnellement, je n'ai pas ce type d'écran à la maison, mais j'étais curieux de voir ce qu'on pouvait en tirer.

Lire la suite...

Java 8 et les Lambda

La prochaine version de Java, prévue pour 2013, apportera le lot de nouveautés le plus important depuis Java 5 : expressions lambda, "public defender methods", références de fonctions...

Aujourd'hui, je vous propose de découvrir la nature, la syntaxe et les cas d'utilisation des expressions lambda (une forme de "closure"), ainsi que leur impact sur notre façon de coder.

(Cet article est également publié sur le blog Zenika).

Lire la suite...

The Coder's Breakfast à Devoxx-fr 2012 : les slides !

Comme indiqué dans le précédent billet, j'ai eu l'honneur de présenter deux sessions à Devoxx-fr :

  • Un "quickie" (15mn) pour présenter Seren, ma librairie d'optimisation de sérialisation;
  • Une "conférence" (1h) avec Heinz Kabutz, sur le thème "Deadlock Victim".

Pour nos lecteurs qui n'auraient pas eu l'opportunité d'y assister, voici les slides correspondants.
De plus, la conférence a été intégralement filmée, vous pourrez donc la retrouver très bientôt sur la plateforme Parleys.

Bonne lecture !

Lire la suite...

- page 4 de 35 -