Spring 3.0 M2 disponible

Jürgen Höller vient d'annoncer la disponibilité de Spring 3.0 M2 !

Pour faire court :

  • La réécriture du framework pour tirer parti de la JLS 3 se poursuit : génériques, varargs, etc.,
  • Le module de mapping Objet/XML a été déplacé de Spring Webservices vers Spring Core, car il s'agit d'une problématique transverse, applicable à plusieurs modules comme Spring MVC (qui s'enrichit au passage d'une MarshallingView) et Spring Remoting (JMS).
  • Spring Scheduling est en cours de réécriture pour prendre en charge les API java.util.concurrent. L'effort se poursuivra sur la M3 avec l'ajout d'un namespace dédié.
  • Spring MVC gère désormais les Portlets 2.0 (JSR 286)
  • Spring ORM commence à intégrer JPA 2.0
Lire la suite...

Ergonomie : certains symboles ont la vie dure

Faites le test.
SaveFloppy3.jpgOuvrez une application permettant d'éditer du contenu, comme un traitement de texte ou un éditeur d'images. Maintenant, regardez l'icône de la barre d'outils permettant de sauvegarder le document. Oui, celle en forme de... disquette.
Une disquette ? En 2009 ?

Lire la suite...

Résultats du sondage sur l'utilisation des assertions

Cela fait un moment que le sondage est disponible, il est donc temps de dépouiller les urnes.

Les résultats sont très partagés :

  • D'un côté, presque 40% d'entre vous n'utilisent pas les assertions, ou à reculons.
  • De l'autre côté, environ 30% les apprécient et les utilisent régulièrement.
  • Entre les deux, quelque 20% les utilisent lorsqu'ils y pensent et ont du temps à y consacrer, comme un bonus en quelque sorte.
  • Enfin, plus de 8% ne connaissent pas ce mécanisme.
Lire la suite...

Jazoon Rookies : vous pouvez encore postuler

Je vous ai déjà parlé de Jazoon dans le compte-rendu du dernier Paris JUG, vous savez donc que c'est une grande conférence annuelle sur Java et son écosystème. L'édition 2009 se tiendra du 22 au 25 juin à Zürich.

Jazoon rookie Si vous avez moins de 26 ans, le programme Jazoon Rookie vous offre la possibilité d'y être invité pour animer une présentation technique de 20mn - un sacré tremplin pour se faire connaître au sein de la communauté !

Si vous êtes motivé et souhaitez postuler, vous avez de la chance : la date limite d'inscription a été repoussée au 15 mars.
Vous pouvez vous faire assister par votre société pour préparer votre dossier, alors n'hésitez pas, c'est une chance unique !

JavaScript Quiz #4

Vous savez sans doute que l'on peut faire de l'objet avec JavaScript. Mais la syntaxe révèle quelques subtilités, qui sont révélatrices de la manière dont JavaScript implémente l'objet.

C'est ce qui fera l'objet ( ;-) ) de ce quiz JavaScript et des quelques uns qui suivront.

Soit la "classe" Personne, avec deux attributs nom et age et une opération booléenne isMajeur. On peut implémenter ceci comme suit :

  1. function Personne(nom, age) {
  2. this.nom = nom;
  3. this.age = age;
  4. this.isMajeur = Personne_isMajeur;
  5. }
  6.  
  7. function Personne_isMajeur() {
  8. return (this.age >= 18);
  9. }

Gros problème : on peut appeler directement Personne_isMajeur() comme une fonction, au lieu de l'invoquer sur un objet Personne.

Certains vont alors réécrire ce qui précède comme suit :

  1. function Personne(nom, age) {
  2. this.nom = nom;
  3. this.age = age;
  4.  
  5. this.isMajeur = function() {
  6. return (this.age >= 18);
  7. }
  8. }

Mais d'autres auront plutôt tendance à le réécrire comme ceci :

  1. function Personne(nom, age) {
  2. this.nom = nom;
  3. this.age = age;
  4. }
  5.  
  6. Personne.prototype.isMajeur = function() {
  7. return (this.age >= 18);
  8. }

Quelle différence y a-t-il entre ces deux dernières écritures ?

Lire la suite...

Des nouvelles de Java 7

Suite à Devoxx'08 et en prévision de JavaOne'09, Alex Miller publie une synthèse des nouveautés de Java 7 : quelles API seront ou non intégrées, quelles modifications seront apportées au langage... Un tableau récapitulatif est également disponible.

L'absence la plus remarquée est celle des closures, autour desquelles le débat fait rage depuis plusieurs années. En revanche, on se réjouira de voir apparaître certaines fonctionnalités réclamées depuis longtemps, comme la possibilité d'utiliser des Strings dans les blocs switch.

Java7, évolution plus que révolution ?

Java : un problème sur la LinkedBlockingQueue

En s'appuyant sur le code de la classe LinkedBlockingQueue, Alex Miller (Pure Danger Tech) démontre que la moindre erreur d'algorithmique dans une structure de données complexe peut avoir des conséquences catastrophiques au niveau des performances : une simple référence conservée trop longtemps sur un objet devenu inutile peut empêcher le garbage collector de faire son travail, et saturer la mémoire.

Un billet à lire d'urgence, surtout si vous prévoyez de développer vos propres collections.

L'histoire d'Internet en vidéo

Si vous avez 8 minutes devant vous, je vous invite à regarder cette petite vidéo qui retrace les origines de la Toile (en anglais).

Paris JUG anniversaire : compte-rendu

Hier soir, le Paris JUG fêtait son premier anniversaire !
A cette occasion, les organisateurs avaient mis les petits plats dans les grands :

  • Accueil sympa au FIAP, avec buffet et massages (hummm)
  • Intervenants de qualité : JUG-leaders français, Christian Frei (Jazoon), Stephan Janssen (BeJug, Devoxx, Parleys)...
  • Goodies (T-shirts, livres) et bonus (réductions pour Jazoon, points pour JavaBlackBelt)
  • Et 6 quickies (courtes présentations), pas forcément techniques pour une fois.
Lire la suite...

De l'intérêt des portails

Il y a quelques mois, j'assistais à une présentation d'Exo Platform animée par Tugdual Grall. Dans mon compte-rendu, sans remettre en cause la qualité du produit, j'émettais des réserves quant à l'intérêt même des portails d'entreprise.

Comme il semble que je ne sois pas le seul à m'interroger, Tugdual a publié un article répondant point par point aux objections les plus courantes. Une lecture intéressante, qui n'a cependant pas suffi à changer mon avis sur la question...

Le compteur de temps unix atteint la valeur 1234567890

Ce vendredi 13 février à 23:31:30 (UTC), le compteur de temps interne de tous les systèmes Unix atteindra la valeur remarquable de 1234567890.
Vous pouvez le vérifier grâce à la commande perl suivante :

  1. perl -e 'print scalar localtime(1234567890),"\n";'

C'était l'info inutile du jour !

Désactiver les liens hypertextes avec JavaScript

Lorsque, dans une page Web, l'utilisateur déclenche une action qui modifie toute la page, il est de bon ton de s'assurer qu'il ne déclenche pas une autre action avant que la page suivante ne soit chargée.

Tous les éléments qui permettent à l'utilisateur d'agir sur la page doivent donc être désactivés. Parmi ceux-ci, il y a les champs de formulaires (champs texte, boutons-poussoir, boutons radio, cases à cocher, ...), et les liens hypertextes.

Si désactiver les champs de formulaires est assez facile en JavaScript (tous possèdent un attribut disabled, qu'il suffit de mettre à true), désactiver les liens est une autre paire de manches ! Il y a bien un attribut disabled sur les ancres, mais c'est une spécificité, non standard, d'Internet Explorer. Et en plus cet attribut ne modifie que l'affichage : avec IE, un hyperlien dans l'état "disabled" est toujours actif !

Ce constat mène assez rapidement à la question suivante : comment faire ? Et d'ailleurs, est-ce faisable ?

Lire la suite...

Java : plaidoyer pour un mot-clé "packaged"

En Java, il existe 4 niveaux de visibilité, dont 3 seulement possèdent un mot-clé : public, protected, et private. Le 4° est la visibilité "package", qui est appliquée par défaut lorsqu'aucun mot-clé n'est spécifié.
Et c'est bien le problème : l'absence de mot-clé indique-t-elle la volonté du développeur de restreindre la visibilité de l'élément à son package, ou traduit-elle un simple oubli ?

Lire la suite...

JavaScript Quiz #3

Qu'insère le bloc JavaScript suivant dans la page HTML ?

  1. var flagBidon = true;
  2.  
  3. function test() {
  4. var x = 5;
  5.  
  6. document.write(x);
  7. document.write("<br/>");
  8.  
  9. if (flagBidon) {
  10. var x = 10;
  11. document.write(x);
  12. document.write("<br/>");
  13. }
  14.  
  15. document.write(x);
  16. document.write("<br/>");
  17. }
  18.  
  19. test();
Lire la suite...

Inspiration graphique : le plein de listes

Ce week-end, je vous propose de faire le plein d'inspiration graphique, au travers d'un ensemble de listes :

  • 50 re-designs réussis
  • 50 menus de navigation insolites
  • 70 ressources graphiques artisanales
  • 30 ans de design Apple
Lire la suite...

Paris JUG : Soirée anniversaire le mardi 10 février

Le Paris JUG fête son premier anniversaire !

A cette occasion, la prochaine soirée sera spéciale :

  • Format : plein de quickies, c'est-à-dire des petites présentations sur des sujets variés.
  • Lieu : rendez-vous donc à la FIAP à partir de 19h45
  • Intervenants : Antonio Goncalves, David Dewalle et Zouheir Cadi (Paris JUG), Tarik Filali Ansary (SFEIR), Christian Frei (Jazoon), Stephan Janssen, Thomas Chamas (Casden Banque populaire), Julien Gouesse (Mycom France)... Et plein de JUG-leaders français !

Vous pouvez dès à présent vous inscrire !

Edit : Antonio nous signale qu'il reste plein de places, ce qui est surprenant vu le succès habituel des soirées du JUG. Venez à cette soirée qui promet d'être mémorable !

CopyOnWriteArrayList concurrency fun : un billet d'Alex Miller

Alex Miller a publié aujourd'hui un article intéressant sur le fonctionnement interne de la classe CopyOnWriteArrayList.
En voici une traduction rapide.

J'ai déjà mentionné la classe CopyOnWriteArrayList dans un billet précédent de la série "bugs relatifs aux accès concurrents". Il se trouve que j'ai eu besoin de regarder son code source aujourd'hui, et il apparaît qu'elle repose sur une architecture concurrente remarquable mais pas forcément évidente à comprendre.

Lire la suite...

Java SE 6 update 12 disponible

Java 6 update 12 est disponible.

Rien de bien neuf dans cette version, à part l'habituel lot de corrections et d'améliorations mineures.
Mettez-vous à jour !

Java Barcamp #3 : compte-rendu

Le samedi 31 janvier, Valtech et Sun organisaient le 3° Barcamp Java.

Je n'ai pas assisté à l'événément, je vous dirige donc vers les compte-rendus suivants :

The Coder's Breakfast : 1 an déjà !

The Coder's breakfast fête son premier anniversaire !
En 1 an, ce sont pas moins de 134 articles et 160 commentaires qui ont été publiés.
Je tiens à remercier nos lecteurs et nos contributeurs pour leur support et leur fidélité. Merci à tous !

Les statistiques d'utilisation montrent une fréquentation encore faible (~ 20-70 visiteurs par jour, très variable), mais en progression. La fidélité moyenne des visiteurs est de 40%, ce qui est encourageant ! Enfin, l'immense majorité utilise Firefox sous Windows, avec encore 6% d'irréductibes sous IE, et quelques rebelles utilisant Safari, Chrome ou Opera.

J'espère que la seconde année sera aussi bonne que la première, et que nous continuerons ensemble notre aventure dans le monde passionnant de Java et des Nouvelles Technologies. N'hésitez pas à commenter les billets, car ce blog est avant tout un espace d'échange. De même, vos suggestions et critiques sont les bienvenues !

Olivier

PS : J'en profite pour m'excuser des nombreuses indisponibilités du blog, qui surviennent depuis qu'il est hébergé (chez Gandi, pour ne pas les nommer...). Je suis en train d'essayer de régler le problème, mais un changement d'hébergeur n'est pas à exclure si la situation devait perdurer. Merci de votre patience !