Dernières nouvelles du front : MongoDB, Android et Java8

Je profite de la relative accalmie avant le cyclone DevoxxFR pour vous expliquer à quoi j'ai été occupé en ce début d'année, et pourquoi j'ai eu moins de temps - et j'en suis désolé - pour vous proposer des billets croustillants sur ce blog. Vous allez voir, c'était le rush !

Lire la suite...

Java 8 : petit exercice pour s'échauffer le neurone à lambda

A une semaine de Devoxx France 2014 qui risque d'être riche en sessions sur Java 8 et la programmation fonctionnelle, je vous propose un petit exercice pour vous dérouiller le neurone à lambdas.

Le but du jeu est d'écrire une fonction permettant de concaténer un certain nombre de listes, passées en paramètre sous forme de var-arg :

public <T> List<T> concatLists(List<T>... lists);

Evidemment, on essaiera d'utiliser le plus possible de nouvelles fonctionnalités de Java 8 - le but est de s'amuser et de tordre un peu Java, et pas forcément de respecter les bonnes pratiques industrielles.

Allez hop, en route !

Lire la suite...

Java 8 : du neuf dans les interfaces !

java8.pngParmi les nouveautés apportées par Java 8, on en trouve deux qui concernent les interfaces : les méthodes statiques et les méthodes par défaut.

Les méthodes statiques définies sur les interfaces fonctionnent exactement de la même façon que celles portées par les classes, il n'y a donc pas grand-chose à en dire. En revanche, les méthodes par défaut risquent de modifier assez profondément notre façon de concevoir nos API.

En Java 7 et antérieur, une méthode déclarée dans une interface ne fournit pas d'implémentation. Ce n'est qu'une signature, un contrat auquel chaque classe dérivée doit se conformer en fournissant une implémentation propre.

Mais il arrive que plusieurs classes similaires souhaitent partager une même implémentation de l'interface. Dans ce cas, deux stratégies sont possibles (celui qui a dit "copier/coller" viendra me voir à la fin du billet pour une retenue) :

  • Factoriser le code commun dans une classe abstraite, mais il n'est pas toujours possible de modifier la hiérarchie des classes
  • Extraire le code commun dans une classe utilitaire, sous forme de méthode statique (ex: Collections.sort()).

On conviendra qu'aucune des deux n'est réellement satisfaisante. Heureusement, Java 8 nous offre maintenant une troisième possibilité.

Lire la suite...

NoSVN

Non, NoSVN n'est pas un nouveau mouvement qui vise à faire prendre conscience qu'il y a de meilleurs moyens de gérer son code source que ce bon vieux Subversion. Quoique.

En réalité, je voulais partager le petit script windows qui me permet de supprimer récursivement tous les répertoires .svn d'une arborescence. Pratique quand on veut copier/coller des répertoires versionnés sans risquer de provoquer des conflits tous azimuts...

Voici donc la fameuse ligne de commande, à coller dans un .bat (ou en extension de l'explorateur de fichiers pour les plus téméraires) :

for /F "usebackq" %%i in (`dir /S /B /AD *.svn`) do rmdir /S /Q %%i

Hope this helps !

Industrialiser Tiles grâce aux Annotation Processors !

Apache Tiles est un framework populaire permettant d'assembler des pages JSP à partir de fragments réutilisables (ex: entête, menu, pied de page...). Un fichier de configuration permet de décrire la composition de chaque page, et de lui assigner un nom logique. C'est ce même nom logique qui permet ensuite, depuis un contrôleur (Servlet pure, Spring MVC...), de demander à Tiles de construire et d'afficher la page correspondante.

Malheureusement, suite à des renommages - ou tout simplement par étourderie - il est facile de faire des erreurs dans les noms des vues au niveau des contrôleurs. Et l'erreur n'est visible qu'une fois l'application déployée...

Je vous propose ici une technique pour générer automatiquement des constantes Java correspondant aux noms des vues Tiles. Ainsi, plus de typos !

Lire la suite...

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...

- page 1 de 34