déc.
2008
Chers lecteurs, The Coder's Breakfast vous souhaite une bonne année 2009 !
Stay tuned for more happy days !
Chers lecteurs, The Coder's Breakfast vous souhaite une bonne année 2009 !
Stay tuned for more happy days !
Framework | % de votes | # de votes | |
---|---|---|---|
Aucun : Servlets, JSP, JSTL | 10 % | 2 | |
Struts 1 | 10% | 2 | |
Struts 2 | 10% | 2 | |
Spring MVC | 25% | 5 | |
Wicket | 20% | 4 | |
Tapestry | 0% | 0 | |
JSF | 5% | 1 | |
Autre | 20% | 4 |
La spécification JAR propose depuis Java 6 une fonctionnalité fort pratique mais relativement méconnue : la Service Provider Interface (SPI). Derrière ce nom peu engageant se cache un mécanisme de découverte et de chargement dynamique de classes répondant à une interface donnée. Son utilisation est heureusement fort simple, et nous verrons ici qu'il est possible de s'en servir comme d'un système de plugins rudimentaire.
Que pensez-vous de ce code ?
/** * Renvoie un nombre aléatoire entre 0 (inclus) et 'maxValue' (inclus). * @param maxValue Borne supérieure * @param even Indique si le nombre doit être pair (true) ou impair(false) * @return Le nombre aléatoire */ public static final int getRandomNumber(int maxValue, boolean even) { if (maxValue <= 0) { throw new IllegalArgumentException("Invalid 'maxValue' value"); } int value; if (even) { value = new Random().nextInt(maxValue / 2 + 1) * 2; } if (!even) { value = new Random().nextInt((maxValue + 1) / 2) * 2 + 1; } return value; }
Réponse après les fêtes !
Note : on m'a fait remarquer à juste titre que l'algorithme de génération des nombres était faux ; je l'ai donc corrigé (et testé cette fois...). Rassurez-vous, cela ne change en rien le point technique que ce quiz vise à exposer.
En me baladant dans la classe java.lang.System
du JDK 6.0, je suis tombé sur du code pour le moins surprenant.
Vous croyiez connaître System.out
? Ce champ à l'allure anodine cache en réalité quelques petites bizarreries amusantes...
Ce billet fait suite à la première partie du compte-rendu du Barcamp de décembre, décrivant la table-ronde portant sur la génération de code.
Pour la deuxième séance, j'ai sélectionné le thème "ESB : Mule et Spring Intégration", car c'est un domaine que je ne connaissais pas. Je n'étais apparemment pas le seul, puisque plus de 15 personnes se sont pressées dans la salle pour profiter des retours d'expérience de Julien Dubois (SpringSource), Nicolas Martignole (le Touilleur-Express) et Florent Ramière (Jaxio) sur ces technologies.
Ce mardi se tenait le second Barcamp organisé par Octo.
J'en profite pour remercier encore une fois Luc Bizeul pour son organisation impeccable, et pour m'avoir prévenu de l'événement.
Comme la fois précédente, 6 tables-rondes (3 salles x 2 séances) ont été organisées autour de sujets proposés par les participants eux-mêmes. Au final, les thèmes sélectionnés étaient :
Dans un billet récent, Scott Berkun donne 5 astuces pour garder les réunions sous contrôle, quantitativement et qualitativement.
Je vous les résume ici :
Dans une interview accordée à ComputerWorld, Larry Wall partage ses réflexions sur Perl, dont il est l'inventeur. Outre les origines du langage, nous y apprenons quelques anecdotes intéressantes ou surprenantes : par exemple, Perl a été utilisé pour écrire le pilote d'accès au système de fichiers de Clearcase (tiens donc, ça explique bien des choses...).
Quant au futur du langage, il s'annonce mouvementé. Après Python 3, c'est au tour de Perl 6 de marquer la rupture : la rétrocompatibilité ne sera pas assurée car le coeur de l'interpréteur a été totalement réécrit, et le langage lui-même semble voué à une forte mutabilité ("embrace and extend, please").
A noter aussi le mea culpa sur la syntaxe des expressions rationnelles : "We took it and made it worse"...
Alors qu'AJAX et Flex se partagent le marché des clients riches (RIA ou "Rich Internet Applications"), deux nouveaux challengers viennent de faire leur apparition : JavaFX chez Sun, et Native Client chez Google.
Que fait le code suivant ? (astuce : résolution en deux étapes)
public class Switcher { public static void main(String[] args) { int i = 0; int j = 0; switch (i) { case j: System.out.println("A"); case j + 1: System.out.println("B"); i = 3; break; default: System.out.println("E"); break; case j + 2: System.out.println("C"); case j + 3: System.out.println("D"); i = 10; break; } } }
Depuis un an, des discussions étaient en cours entre Google et Yahoo! (au grand dam de Microsoft), en vue d'une consolidation du marché de la publicité en ligne.
Il se trouve que le département de la justice américan (DoJ) n'a pas vu ce rapprochement d'un bon oeil, estimant que cette fusion leur octroierait plus de 90% du marché, et a donc préparé un dossier antitrust. Devant l'imminence du dépôt du dossier auprès des tribunaux, les deux géants de la publicité en ligne on préféré renoncer à leur rapprochement. Ce coup de théâtre ouvre la porte à une nouvelle offensive de Microsoft, qui avait déjà tenté une OPA agressive sur Yahoo!...
Au début de l'année, je vous avais déjà parlé de Python 3.0, qui s'annonçait comme une version de rupture, un nouveau départ permettant de faire un peu de ménage dans le langage tout en ajoutant de nouvelles fonctionnalités.
Bonne nouvelle, Python 3.0 est maintenant officiellement disponible en version finale !
Je vous laisse lire la documentation et découvrir les changements apportés par cette version.
Le magasine en ligne IEEE Spectrum propose ce mois-ci un article intéressant sur l'intelligence artificielle dans les jeux vidéos.
Le réalisme visuel des jeux s'est amélioré de manière incroyable au cours des dernières années. Les formules physiques de gestion de la lumière, connues et (quasi-)immuables, ont directement bénéficié de l'accroissement de la puissance brute des processeurs.
Le réalisme comportemental, en revanche, est toujours un domaine en pleine expansion. Il touche à la théorie des foules, à l'analyse et à la prédiction dynamique des comportements des joueurs, et reste relativement artisanal, chaque studio possédant ses propres algorithmes. Le problème est que tout ceci est très gourmand en calcul, et que la montée en puissance brute des processeurs a laissé la place à la multiplication de coeurs moins puissants mais mis en parallèle, bien plus difficiles à exploiter.
Ajoutez à cela le fait que l'ensemble des situations possibles de n'importe quel jeu de tir ("FPS") ou de stratégie ("RTS") est infiniment plus étendu que dans un "simple" jeu d'échecs (qui donne déjà du fil à retordre à Deep Blue), et l'on comprend l'ampleur de la tâche restant à accomplir...