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

Prochaines sessions inter-entreprises : 28-31 mars 2017 / 13-16 juin 2017
Sessions intra-entreprises sur demande.
Inscrivez-vous vite !

Les annotations @Repetables en Java 8 !

java8.jpgComme vous le savez (dans le cas contraire, foncez regarder ma conférence sur les annotations !), il est actuellement interdit de placer plusieurs fois la même annotation sur un élément donné.

Mais ça va changer avec Java 8 !

Lire la suite...

Implémenter le pattern Session Object avec Spring MVC

HTTP est un protocole déconnecté : un client se connecte à un serveur, lui transmet une requête, attend une réponse, et se déconnecte. Bonjour, au revoir, et on recommence à zéro.

Pour servir des documents sur un réseau, c'est parfait ; mais pour interagir avec une application web professionnelle, c'est un peu limité. L'utilisateur apprécie qu'on se rappelle de lui tout au long de sa session de travail, qui peut nécessiter de nombreux cycles requête/réponse.
Pour conserver ce contexte applicatif entre les requêtes, le serveur propose donc la notion de Session. Chaque utilisateur se voit ainsi attribuer un petit coffre-fort personnel, dans lequel les données qui le concernent sont stockées entre les requêtes.

Lire la suite...

Restangular : une architecture full-REST avec Restlet et AngularJS

Il y a un an, je vous proposais d'intégrer AngularJS et Spring MVC. L'excellent support du format JSON par ce dernier en faisait une technologie de choix pour exposer des ressources en REST/JSON, format favori d'AngularJS.

Un an plus tard, je découvre Restlet, un peu par hasard.
Je lis la documentation, mon intérêt s'éveille, je fais quelques tests... puis je repense à AngularJS.

A ma gauche, un framework spécifiquement conçu pour exposer des ressources en REST ; à ma droite, un framework qui consomme principalement des ressources REST... Aurais-je trouvé le couple parfait ? Vite, un prototype !

Dans cet article, je vous présente le résultat de ma petite expérience : une micro-application (la classique Todo-list) à l'architecture 100% RESTful, basée sur Restlet et AngularJS, et saupoudrée d'un peu de Bootstrap 3 pour le style graphique (voir capture d'écran ci-dessous).

Vous avez fait le plein de café et de tartines ? Alors c'est parti, suivez le guide !

Lire la suite...

What's The Fold ?

Chers lecteurs, si vous avez raté ma conférence à DevoxxFR 2013, pas de panique, tout a été filmé !

Il a fallu un peu de temps pour encoder les vidéos et les synchroniser avec les slides, mais la plateforme Parleys vient enfin de rendre disponible ma modeste prestation, que je m'empresse donc d'intégrer ci-dessous.

Bonne lecture ! (en plein écran, c'est mieux)

Devoxx 2013 : 3 jours exceptionnels !

DevoxxFR-2012-skyscraper02-160-600.pngLa semaine dernière se tenait l'édition 2013 de la conférence DevoxxFR, hébergée comme l'année passée dans les salons de l'hôtel Mariott, dont les motifs psychédéliques de la moquette ont marqué les esprits.

Pour faire court, DevoxxFR c'est 3 jours de conférences en tous genres, plus de 1400 personnes, une trentaine d'exposants et de sponsors (dont Oracle et Google), et une équipe d'une vingtaine de personnes en polo rouge dopées à la caféine pour organiser tout ça (sacré boulot !). L'occasion d'en prendre plein les yeux, de remettre le cerveau en route, et de renforcer son réseau professionnel.

Et comme j'ai toujours des bêtises à raconter, et que la programmation fonctionnelle revient à la mode, j'ai proposé une conférence sur la notion de Fold : "WTF - What's The Fold ?", qui a eu l'immense honneur d'être sélectionnée (seules ~12% des soumissions sont acceptées, pour des raisons évidentes de temps et de place !). Je vous en reparlerai dans un prochain billet.

En tant que spectateur, on a intérêt à être bien organisé : il se passe plein de choses en même temps, et il suffit que le sujet ou le speaker soient un peu à la mode pour que les places s'évaporent en quelques minutes. J'avais donc prévu, pour chaque tranche horaire, un plan A et un plan B, voire même un plan C au cas où, et mon agenda était rempli à ras bord.
Précaution inutile, car lors de la keynote, Stephen Jansen a annoncé que toutes les conférences seraient disponibles gratuitement sur la plateforme Parleys, dotée pour l'occasion d'une toute nouvelle interface en HTML5. Il sera donc possible de revoir tout ça tranquillement vautrés installés dans le canapé du salon. Merci Parleys !

Lire la suite...

Astuce : itération inverse

Une petite astuce en passant : comment parcourir une liste en sens inverse, à l'aide d'un itérateur ?
En utilisant un ListIterator, qui dispose de méthodes hasPrevious() et previous() :

List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5);
ListIterator<Integer> it = nums.listIterator(nums.size());
while(it.hasPrevious()) {
    Integer num = it.previous();
    System.out.println(num);
}
5
4
3
2
1

Ca peut toujours servir !

The Coder's Breakfast à DevoxxFR !

Chers lecteurs,

Comme l'année dernière, je suis speaker à DevoxxFR !

J'aurai l'honneur de présenter une conférence sur le thème des Folds, un concept important hérité de la programmation fonctionnelle. Si le nom peut faire peur, le principe est en réalité très simple - mais très puissant également. Haskell (naturellement), mais aussi Groovy et Scala en proposent une implémentation -- et même Java 8 s'y met !

Venez donc me voir le vendredi 29 à 11h45, et vous saurez tout sur les Folds, avec des exemples de code en Java 8 et une pincée d'autres langages !


DevoxxFR-2012-banniere-texte-600-232.png

Critique de livre : AndEngine for Android Game Development cookbook

Book cover [ Préambule Mes chers amis et lecteurs, une fois n'est pas coutume, j'ouvre mes colonnes à un collègue. Hadrien Pierart, qui travaille pas mal sur Android, va vous entretenir ci-dessous d'un livre sur AndEngine, qui a suscité son enthousiasme. Je n'ai plus qu'à vous souhaiter une bonne lecture !]

Il y a quelques semaines, Olivier m'a annoncé qu'il avait à nouveau eu vent d'une recherche de reviewers par Packt Publishing pour faire la revue de leur dernier livre AndEngine for Android Game Development cookbook par Jayme Schroeder et Brian Broyles.

Heureusement pour moi, j'avais récemment parlé à Olivier de mon projet de jeu Android, et il me recommanda de recontacter Packtpub.
Après quelques emails échangés et quelques heures d'attente, me voilà l'heureux propriétaire de cet ouvrage (en version ebook, comme ca, pas besoin d'attendre la poste) !

Lire la suite...

Java Quiz in Unicorn land

Some days ago, ZeroTurnaround, of JRebel fame, published a funny Java Quiz on their website.
It is not very hard, and there are at least 3 different solutions that I know of.

Below is my solution ; but try to find your own before taking a look !

Lire la suite...

Coding challenge : maman les petits avions

Aujourd'hui, je vous propose de jouer aux petits avions, et de vérifier quel prototype vole le mieux.

Pour les départager, nous allons nous appuyer sur la Suite de Syracuse :
En partant d'un nombre initial (entier positif), pour obtenir le suivant :

  • s’il est pair, on le divise par 2 ;
  • s’il est impair, on le multiplie par 3 et on ajoute 1.

On répète l'opération jusqu'à obtenir le nombre 1 (la suite est convergente).

On définit ensuite les termes suivants :

  • le temps de vol total : c'est la longueur de la séquence obtenue.
  • le temps de vol en altitude : c'est la période continue, à partir du décollage, pendant laquelle l'avion reste à une altitude supérieure ou égale à l'altitude initiale (voir exemple ci-dessous).
  • l'altitude maximale : c'est la valeur maximale de la séquence.

Prenons l'exemple du nombre initial 15.

  • Sa séquence est [15, 46, 23, 70, 35, 106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1]
  • Son temps de vol total est de 18
  • Son temps de vol en altitude est de 11 ([15, 46, 23, 70, 35, 106, 53, 160, 80, 40, 20] = 11 éléments)
  • Son altitude maximale est de 160

Voyons maintenant comment tester nos différents prototypes d'avions.
Chaque prototype a évidemment un nom de code top secret, comme "Enterprise" ou "FauconMillenium". En additionnant les valeurs des lettres qui composent leurs noms, nous sommes capables de déterminer leur nombre initial.
Ainsi : "Enterprise" vaut 1057, et "FauconMillenium" vaut 1544.

Je vous laisse calculer quel modèle vole le mieux, et inventer vos propres prototypes !

Idéalement, il suffirait d'appeler une méthode en lui passant le nom du prototype, pour calculer (et éventuellement afficher) les trois indicateurs.
(Tous les langages bienvenus, utilisez Gist, Pastebin ou autre si votre code est volumineux)

Lire la suite...

- page 2 de 34 -