Java Quiz #40

Pour faire plaisir à votre chef de projet, ancien développeur, vous le laissez occasionnellement développer quelques fonctionnalités mineures de votre application.

Aujourd'hui, vous lui avez demandé d'itérer sur une liste pour en afficher le contenu : "Hello World". Malheureusement, un peu rouillé et distrait par son départ en vacances prévu pour le soir même, il a malencontreusement oublié de mettre "World" dans la liste lors de son initialisation ! Pour réparer cette erreur, il l'a inséré un peu plus loin, mais son code ne fonctionne plus et il ne comprend pas pourquoi ("ça doit être un bug de la JVM").

Avant de partir en vacances, il vous charge donc du problème, avec les instructions suivantes :

  • Interdiction de modifier le code existant, qui est naturellement parfait
  • Le FIXME indique la ligne où il vous autorise à insérer du code correctif
  • Il doit être capable de comprendre votre solution (l'usage de la Réflexion est donc interdit)

Saurez-vous vous montrer à la hauteur de la confiance que vous accorde de votre chef de projet bien-aimé ?

  1. final List<String> list = new ArrayList() {{ add("Hello"); }};
  2. final Iterator<String> iterator = list.iterator();
  3. System.out.println(iterator.next());
  4. list.add("World");
  5. // FIXME : insert some magic code here
  6. System.out.println(iterator.next());

Note : ce quiz a été réalisé avec l'aide de Romain Revol, que j'ai eu le plaisir de former au cours Java Spécialist.

Lire la suite...

Paris JUG "Java EE 6" par Adam Bien

La séance de juillet du Paris JUG a eu pour thème "Lightweight Killer Apps with Nothing But Vanilla Java EE 6". Elle était présentée par Adam Bien et a occupé les deux créneaux horaires (19h30 à 22h00).
Le buffet était offert par François Ostyn.

Une soirée bien intéressante, qui l'a redonné envie de jouer avec Java EE 6, malgré son passif technologique assez lourd. Je vous laisse lire le compte-rendu intégral :

Lire la suite...

Conférence : Les annotations enfin expliquées simplement

Mardi dernier, j'ai animé chez Zenika une conférence sur les Annotations.

Et le sujet est plus complexe qu'il n'y paraît. Outre les subtilités de leur syntaxe, les annotations disposent d'un outillage puissant à la compilation et au runtime, dont la maîtrise ouvre de nouvelles perspectives en termes de méta-programmation.
En particulier, j'ai démontré l'utilisation des Annotation Processors, qui permettent d'interagir avec le compilateur Javac, et de la Réflexion pour lire et injecter des annotations dynamiquement au runtime.

Apparemment, la conférence a remporté un franc succès :

  • "Très intéressant. Niveau technique avancé" A. F.
  • "Vivement le prochain projet pour qu'on mette cela en place" JP. L.
  • "Excellente présentation avec démo hardcore à la fin ;)" C. M.
  • "Très bon intervenant" S. F.

Je remercie de leur présence tous les participants qui ont pu venir.
Pour les parisiens qui n'ont pas pu avoir de place, rassurez-vous, il est possible qu'une nouvelle session soit programmée. Et pour mes lecteurs de province, mon passage est prévu dans certains JUGs d'ici la fin de l'année. Renseignez-vous et faites pression ! :)

Pour finir, j'ai le plaisir de vous offrir, en annexe de ce billet, les slides et les sources de la conférence.
Tous les commentaires sont les bienvenus !

Java Quiz #39

A défaut d'entretenir le bronzage de votre corps d'athlète sur la page par ce beau mois de juin, voici de quoi entretenir vos neurones.
Que fait ce code ?

  1. public class Quiz39 {
  2.  
  3. public static void main(String[] args) {
  4. int[] array = null;
  5. try {
  6. array[0] = array[(array = createArray())[array.length - 1]];
  7. } finally {
  8. System.out.println("Array = " + Arrays.toString(array));
  9. }
  10. }
  11.  
  12. public static int[] createArray() {
  13. return new int[]{1, 2, 3, 4};
  14. }
  15.  
  16. }
Lire la suite...

Paris JUG "Holly Cummins"

Le Paris JUG accueille pour sa séance du mois de juin un invité de marque, en la personne de Holly Cummins.

Holly présentera deux séances ce soir :

  • Java Performance Tuning - not so scary after all
  • OSGi and the Enterprise: A match made in a… box?

Vous trouverez ci-dessous une retranscription en temps réel de la conférence, sous la forme d'une Wave. N'hésitez pas à participer !
(PS : Google Wave est désormais en accès libre, si vous n'avez pas de compte il vous suffit de vous inscrire !)

Lire la suite...

Java Quiz #38

Saurez-vous aider l'exception à s'échapper de la Matrice ?
Mais attention, les Agents rôdent et vous repéreront si vous tentez de modifier la signature de la méthode getTheSpoon() ou la classe de test !

  1. public class Matrix {
  2. public static void getTheSpoon() {
  3. throw new NoSuchMethodException("There is no spoon !");
  4. }
  5. }
  1. public class Test {
  2. public static void main(String[] args) {
  3. try {
  4. Matrix.getTheSpoon();
  5. } catch (Exception ex) {
  6. System.out.println(ex instanceof java.lang.NoSuchMethodException ? "You passed the Quiz !" : "You failed !");
  7. }
  8. }
  9. }
Lire la suite...

Java Quiz #37

Voici un nouveau quiz, pour bien finir le mois de mai avant d'entamer ce beau mois de juin.

La classe ColoredPoint ci-dessous pose un problème assez subtil. Lequel ?

  1. public class Point {
  2. private int x;
  3. private int y;
  4.  
  5. public Point(int x, int y) {
  6. this.x = x;
  7. this.y = y;
  8. }
  9.  
  10. public boolean equals(Object o) {
  11. if (this == o) { return true; }
  12. if (!(o instanceof Point)) { return false; }
  13.  
  14. final Point point = (Point) o;
  15. return (x == point.x && y == point.y);
  16. }
  17.  
  18. public int hashCode() {
  19. int result = x;
  20. result = 31 * result + y;
  21. return result;
  22. }
  23. }
  24.  
  25. public class ColoredPoint extends Point {
  26. private Color color;
  27.  
  28. public ColoredPoint(int x, int y, Color color) {
  29. super(x, y);
  30. this.color = color;
  31. }
  32.  
  33. public boolean equals(Object o) {
  34. if (this == o) { return true; }
  35. if (!(o instanceof ColoredPoint && super.equals(o))) {
  36. return false;
  37. }
  38.  
  39. final ColoredPoint point = (ColoredPoint) o;
  40. return (color == null ? (point.color == null) : color.equals(point.color));
  41. }
  42.  
  43. public int hashCode() {
  44. int result = super.hashCode();
  45. result = 31 * result + (color != null ? color.hashCode() : 0);
  46. return result;
  47. }
  48. }
Lire la suite...

Et le gagnant du concours est...

La semaine dernière, il était possible de concourir pour gagner un livre au choix : Pragmatic Programmer ou Clean Code.

Après tirage au sort, la gagnante est Florence. Félicitations !

Why I Don't Read Your Comments - Votre avis ?

Il y a deux semaines, j'étais en Crète en compagnie des meilleurs experts Java (Michael Hunger d'Allemagne, Larry Presswood des USA, Herman Lintvelt pour l'Afrique du Sud, David Gomez pour l'Espagne, et David Hallett pour la Nouvelle-Zélande), pour suivre le séminaire de certification des formateurs du Java Specialist Master Course, sous la houlette du Champion Java Heinz Kabutz.

Nous en avons profité pour enregistrer un webinar intitulé "Why I Don't Read Your Code Comments", dans lequel nous confrontons nos avis quant aux bonnes et mauvaises pratiques relatives aux commentaires de code (et pas de blagues sur mon accent anglais :). Heinz avait déjà défriché le terrain dans sa newsletter n°39, mais il était intéressant d'avoir des avis supplémentaires.

Je me tourne donc vers vous à mon tour, pour recueillir vos témoignages :

  • Quelles sont vos bonnes pratiques personnelles ?
  • Quelles sont les meilleurs et pires commentaires que vous ayez vus / écrits ?
  • Que faut-il commenter ? Est-ce une perte de temps ?
  • Quels conseils donneriez-vous à un développeur débutant ?

Cadeau bonus : gagnez au choix Pragmatic Programmer ou Clean Code.
Pour participer au tirage au sort qui aura lieu ce week-end, il suffit de laisser un commentaire intelligent sur ce billet et d'habiter la France métropolitaine. Le gagnant sera contacté par l'email associé à son commentaire.

Java Specialist Master Course

Chers lecteurs, si nous n'avez plus de nouvelles depuis deux semaines, c'est normal : je reviens tout juste de Crète, où j'ai suivi une formation très spéciale : le Java Specialist Master Course.
Pendant une semaine, j'ai étudié les arcanes de Java sous la houlette du Java Champion Heinz Kabutz, en compagnie de quelques pointures internationales.
Nous en avons également profité pour enregistrer un petit "webinar" intutilé "Why I don't read your comments", où nous confrontons nos points de vue sur les commentaires dans le code.

Je vous le dis tout de suite, cette formation est réservée à des développeurs déjà très expérimentés.
Le contenu est très dense, et les travaux pratiques offrent un challenge certain. Pour vous donner une idée, c'est à peu près du niveau des fameuses java specialist's newsletters. Débutants, passez votre chemin...

La bonne nouvelle en revanche, c'est que je suis désormais certifié pour l'animer en Français !
Si vous n'avez pas peur du challenge, allez vite vous inscrire à la session de juin chez Zenika ; je vous promets qu'on passera une semaine sympa et très intéressante !

Lire la suite...

- page 1 de 26