JavaScript Quiz #2

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

  1. var x = 9;
  2. function test() {
  3. document.write(x);
  4. document.write("<br/>");
  5.  
  6. var x = 10;
  7.  
  8. document.write(x);
  9. document.write("<br/>");
  10. }
  11. test();
  12. document.write(x);
Lire la suite...

Java : @SuppressWarnings démystifié

L'annotation @SuppressWarnings permet de signaler au compilateur que l'on a conscience de réaliser une opération risquée, et qu'il peut donc arrêter de signaler un éventuel problème. Si l'annotation est standard, ses valeurs sont en revanche dépendantes du compilateur (d'après la JLS §9.6.1.5, seule "unchecked" est standard), car ils n'ont pas tous les mêmes capacités d'analyse statique du code.

Lire la suite...

Découverte automatique de services avec Spring

Vous avez aimé le principe de l'API Service Provider Interface mais vous (ou votre client) n'utilisez pas Java 6 ?
Le but de cet article est de démontrer comment on peut implémenter un système équivalent avec Spring, à travers l'exemple d'un système de plugins minimaliste.

Lire la suite...

Séminaire "Expertise Tomcat" : compte-rendu

Mardi 21 janvier se tenait un séminaire d'une demi-journée organisé par SpringSource, sur les différents aspects de l'utilisation de Tomcat en production : déploiement, performance, débuggage et monitoring.
Pour l'occasion, SpringSource avait mis les petits plats dans les grands : récéption dans un grand hôtel à la Défense avec vue panoramique sur Paris et repas gastronomique, et Filip Hanik sur la scène, un des principaux committers sur Tomcat.

Lire la suite...

Java Quiz #27

Que pensez-vous de ce code?
(Quiz proposé par Grégory Boissinot)

  1. class Animal {}
  2.  
  3. class Dog extends Animal {}
  4.  
  5. class Main
  6. {
  7. public static void printAnimals(List<Animal> animals)
  8. { ... }
  9.  
  10. public static void printAnimals(Animal[] animals)
  11. { ... }
  12.  
  13. public static void main(String args[])
  14. {
  15. Dog gromit = new Dog();
  16. Dog[] dogArray = {gromit};
  17. printAnimals(dogArray);
  18. List<Dog> dogList=new ArrayList<Dog>();
  19. dogList.add(gromit);
  20. printAnimals(dogList);
  21. }
  22. }
Lire la suite...

Java Barcamp #3 le 31 janvier

Sun organise le 3° Barcamp Java le samedi 31 janvier.
Le format est différent des précédents, puisque ce ne seront pas deux, mais quatre séances d'une heure qui seront réparties sur la journée :

  • Accueil à 9h30
  • Proposition des session : 10h
  • Première session : 10h15
  • Seconde session : 11h30
  • Buffet-pizzas
  • Troisième session : 14h00
  • Quatrième session : 15h15

L'événement aura lieu dans les locaux de Sun. L'inscription est ouverte et obligatoire.

JavaScript Quiz #1

Un petit quiz JavaScript, pour changer. Voici une fonction de validation de dates, écrite en JavaScript :

  1. /**
  2. * Vérifie que la date passée sous la forme d'une chaîne de caractères
  3. * (exemple : "15/11/2008") est valide
  4. */
  5. function validateDate(dateAsString) {
  6. // Vérifie que la date est du format "JJ/MM/AAAA"
  7. var regex = new RegExp("^[0-9]{2}[/][0-9]{2}[/][0-9]{4}$", "g");
  8.  
  9. if (regex.test(dateAsString)) {
  10. // Vérifie en plus que les champs jour, mois et année sont
  11. // cohérents et correspondent à une date pas totalement farfelue.
  12. var fields = dateAsString.split("/");
  13. var day = parseInt(fields[0]);
  14. var month = parseInt(fields[1]);
  15. var year = parseInt(fields[2]);
  16.  
  17. if (day > 0 && day < 32 &&
  18. month > 0 && month < 13 &&
  19. year > 1970 && year < 2200) {
  20. return true;
  21. }
  22. }
  23. return false;
  24. }

Question : Certains jours de l'année 2009 ne passent pas la validation alors qu'ils le devraient. Lesquels, et pourquoi ?

Lire la suite...

Spring par la pratique : une critique

Spring par la pratique.jpg J'ai rédigé pour le Paris JUG une courte critique du livre "Spring par la pratique", de Julien Dubois, Jean-philippe retaillé et Thierry Templier. Je vous invite à la lire, ainsi que celles des autres Juggers, sur la page dédiée.

En résumé : excellent livre, mais attendez la prochaine version qui couvrira Spring 2.5 !

Intérêt et efficacité du travail : à la recherche du "Flow"

Je viens de regarder sur TED une vidéo-conférence de Mihaly Csikszentmihalyi, sur le thème du flow, cet état de grâce dans lequel on bascule lorsque l'on est concentré sur une tâche captivante et où tout va pour le mieux : compréhension, inspiration, et savoir-faire.

J'ai déjà expérimenté cet état parfois, en travaillant sur des projets personnels (articles techniques pour ce blog, préparation de supports de formation, veille technologique...), plus rarement dans le cadre professionnel. Pour moi, la clé du succès est un enviromment calme et sans distractions - pas de bruits, pas de mouvements, pas de mail/téléphone/MSN, et surtout pas d'horaires (repas, réunions...). Cela explique pourquoi je travaille mieux le soir (au travail) ou la nuit (chez moi), comme la plupart des développeurs expérimentés de mon entourage.

Lire la suite...

Paris JUG : Compte-rendu de la soirée Java EE 6 & Glassfish

Ce mardi se tenait la soirée mensuelle du Paris JUG.
Les thèmes présentés étaient Java EE 6 par Antonio Goncalves, et Glassfish v3 Prelude par Alexis Moussine-Pouchkine. Soirée sponsorisée par Sun donc, jusqu'au buffet dont je n'ai malheureusement eu qu'un lointain aperçu tant la salle était bondée !

Lire la suite...

Sondage : Utilisez-vous les assertions ?

Un nouveau sondage est disponible dans la barre latérale : utilisez-vous les assertions ?
Merci de prendre quelques secondes pour y répondre !

Eclipse : plugin Get Spring Configuration 1.1.0

Voici une mise à jour de mon plugin "Spring Configuration" pour Eclipse.
Pour rappel, il permet de générer la configuration Spring des classes Java sélectionnées dans l'IDE.

Au rayon des nouveautés :

  • Il est désormais possible de sélectionner des fichiers Java ( fichier.png ), en plus des classes elles-mêmes ( classe.png ), ce qui est tout de même plus pratique. Au sein d'un fichier, toutes les classes "top-level" sont prises en compte.
  • Le plugin gagne en intelligence et génère maintenant des configurations différentes selon que les propriétés des classes sont de type primitif ( <property value=""/>) ou objet (<property ref=""/>). Les chaînes de caractères et les wrappers sont considérés comme des types primitifs.
  • Les propriétés des classes mères sont également détectées et prises en compte.

Installation :

  • Téléchargez la nouvelle version (en pièce jointe à ce billet), et décompressez-la dans le répertoire "plugins" d'Eclipse.
  • Si nécessaire, supprimez l'ancienne version du même répertoire
  • Redémarrez Eclipse.

Après avoir sélectionné une ou plusieurs classes ou fichiers Java, l'action "Get Spring Configuration" apparaît dans le menu contextuel. Son activation ouvre une console Eclipse contenant la configuration Spring des classes sélectionnées.

Commentaires, remarques, suggestions bienvenus !

Un coup d'oeil sous le capot de la JVM

Chapardés en partie sur le blog de Xebia, trois liens vers des articles permettant de s'initier au fonctionnement interne de la JVM, de découvrir la structure interne des classes Java (dont le fameux CAFE BABE), et s'amuser à optimiser des paramètres mémoire de la JVM.
Une lecture recommandée à tout développeur Java !

Java Quiz #26

Pour changer un peu, ce quiz a été rédigé comme une question de la certification SCJP (type de question, formatage du code, etc), afin de vous montrer à quoi cela ressemble. Saurez-vous y répondre ?

Considérant le code suivant, lesquelles de ces propositions sont justes ?

  1. interface Interface1 {
  2. String FOO = "foo1";
  3. }
  4.  
  5. interface Interface2 {
  6. String FOO = "foo2";
  7. }
  8.  
  9. public class InterfaceMultipleInheritance implements Interface1, Interface2 {
  10. public static void main(String[] args) {
  11. System.out.println(FOO);
  12. }
  13. }
  1. Le code ne compile pas
  2. Le code compile mais provoque une erreur au runtime
  3. Le code compile et affiche "foo2"
  4. Le code compile et fonctionne si on commente la ligne 11
  5. Le code compile et fonctionne si la valeur assignée aux deux constantes FOO est la même
  6. Autre
Lire la suite...

Séminaire "Expertise Tomcat" le 20 janvier

SpringSource organise un séminaire d'expertise sur Tomcat. Destiné aux architectes, développeurs confirmés et équipes de production, l'événement se déroulera le 20 janvier à la Défense. A cette occasion, Filip Hanik présentera différents aspects de l'optimisation et de la mise en production du serveur web, effectuera des démonstrations pratiques et animera des séances de questions/réponses.

L'inscription est obligatoire et coûte 60€, qui couvrent le déjeuner concluant le séminaire. Les places sont limitées !

Conférence sur la méthodologie "lean" le 21 janvier

Le mercredi 21 janvier, de 19h00 à 21h00, Zenika organise une présentation de la méthodologie de gestion d'entreprise "lean" animée par Pascal Van Cauwenberghe.

L'école de gestion d'entreprise dite lean (littéralement : « maigre », « sans gras », « dégraissé ») s'intéresse à la performance (productivité, qualité). Les tenants du lean recherchent la performance par l'amélioration continue et l'élimination des gaspillages. L'école de gestion lean trouve ses sources au Japon dans le Toyota Production System (TPS). (Wikipedia)

Cette conférence sera l'occasion de découvrir cette méthodologie, de comprendre comment elle peut s'appliquer au secteur du développement informatique, et de bien cerner son positionnement par rapport aux méthodes Scrum et XP.

Les inscriptions sont ouvertes et les places limitées !

Paris JUG : Soirée Java EE 6 & Glassfish le 13 janvier

Le Java User Group de Paris organise une soirée de présentation de Java EE 6 et de Glassfish V3.
Elle aura lieu le mardi 13 janvier, dans les locaux de l'ISEP.

Au programme :

  • 19h15 à 19h30 : Accueil
  • 19h30 à 20h25 : Présentation de Java EE 6, par Antonio Goncalves, contributeur aux différentes JSR.
  • 20h25 à 21h05 : Buffet
  • 21h05 à 22h00 : Présentation de Glassfish V3, par Alexis Moussine-Pouchkine.

Ceux qui ne pourront pas y assister sont invités à lire les comptes-rendus des sessions sur Java EE 6 et Glassfish V3 de la dernière conférence Opensource Exchange.

Les inscriptions sont désormais ouvertes, inscrivez-vous vite car l'événement est de plus en plus populaire et les places sont limitées !