Publié par
Il y a 8 années · 7 minutes · Agile, Back

Revue de Presse Xebia

Revue de Presse Xebia
La revue de presse de l’actualité Java/J2EE hebdomadaire proposée par Xebia.

Actualité éditeurs / SSII

Agilité

RIA

Le coin de la technique

Actualité éditeurs / SSII

Subversion devient un projet top-level Apache

Après seulement 3 mois d’incubation (mais sur le point de fêter ses 10 ans, Collabnet ayant sorti la première version en 2000), Subversion est maintenant projet top-level Apache. Pour ce faire, le projet a du se plier aux règles strictes édictées par la fondation Apache, qui touchent à la fois au code source du logiciel, à la provenance des différents codes, à leur licence, au site internet du projet, au processus de release des nouvelles versions… C’est un gros travail mais il permet ensuite aux projets de bénéficier de toute l’infrastructure ainsi que de l’aura de la fondation Apache.
Subversion s’assure donc pour la suite une stabilité et une plus grande visibilité, élargit sa communauté et s’octroit plus de crédibilité vis à vis des entreprises. En effet, être projet top-level Apache est gage de pérennité.
Le projet en aura besoin, étant fortement concurrencé par les outils de gestion de version distribués comme Git ou Mercurial. Martin Fowler notait ainsi récemment plusieurs points négatifs de SVN :

  • l’absence de copie locale du repository d’où des problèmes de performance et l’impossibilité de travailler offline sur ce repository.
  • le fait que les branches aient une visibilité globale est un frein à l’innovation: les développeurs sont moins enclins à créer une branche pour expérimenter diverses innovations.

Néanmoins, SVN reste pour lui le meilleur des outils non distribué, et est largement recommandable. D’autant que c’est un outil plus simple à appréhender et son ancienneté fait que les bonnes pratiques sont largement répandues. D’autre part, ajoutons que les développeurs semblent ne pas se reposer sur leurs récents lauriers, et annoncent la disponibilité dans la version 1.7 de la fonctionnalité de offline commit. Comme d’habitude, nous bénéficions encore de la concurrence pour avoir à notre disposition les meilleurs outils. Chouette :-) !

Agilité

Sortie du livre « SCRUM : Le guide pratique de la méthode agile la plus populaire »

Claude Aubry, auteur du bien connu blog Scrum, Agilité et Rock’n roll nous délivre dans ce livre un condensé de son expérience sur la mise en place de Scrum. Très pragmatique, ce livre traite point par point les différentes composantes de Scrum en les expliquant et en détaillant pour chacune les pratiques qui fonctionnent et celles à ne pas tenter. Après avoir dévoré les 5 premiers chapitres nous ne pouvons que vous engager à lire cet ouvrage qui fera office de référence pour vous accompagner sur vos projets Scrum.
C’est comme d’avoir un peu de Claude Aubry avec soi sur son projet, mais sans l’accent ;-)

RIA

HTML5 + CSS3 = 52framework

Même si c’est en très bonne voie, les navigateurs Web du marché ne sont pas entièrement compatibles HTML5 et CSS3. Néanmoins, plusieurs librairies JavaScript permettent de rendre votre navigateur 100% compatible avec ces 2 technologies et 52framework en fait partie.

Au menu, la librairie nous propose d’utiliser les différentes nouvelles balises HTML5 telles que aside, nav, section ou bien encore article. Les nouveaux input type='email' et input type='url' sont aussi de la partie. La balise script contenant du JavaScript n’a plus besoin de l’attribut type='text/javascript'. Côté CSS3, il est possible d’utiliser les coins arrondis, les text-shadow et les box-shadow.
La démo se trouve ici, le plus intéressant étant son code source où l’on retrouve les nouveaux éléments cités ci-dessus.

Pour le téléchargement, rendez-vous est pris sur le Google Code du projet section Downloads.

Le coin de la technique

Les nulls, c’est nul !

C’est en tout cas ce que beaucoup d’entre nous ressentent en tombant sur certaines NullPointerExceptions. Et suivent les premières questions : Où sont les tests unitaires ? Quel paramètre n’a pas été testé ? Mais, ressenti de plus en plus grandissant avec les derniers langages alternatifs pour la JVM, pourquoi laisser passer des valeurs nulls en paramètre ?

Pour ne prendre qu’un seul exemple, Scala permet d’éviter ce genre de désagrément grâce à la classe Option (Avoid using nulls in Scala). Dans le cas d’une valeur définie, il suffit d’utiliser Some(something) qui est l’option avec valeur. Et pour le null, il faudra se tourner vers None qui est l’option sans valeur. Le code est ainsi réduit et ne contient plus de test if(obj !=null) (englobé dans l’option None) :

// possible parameters
var anObject = Some(5)
var nullObject = None

// our code that do not care about nulls
val doubleFunc = (option:Option[Int]) => print(option.map(_*2))
doubleFunc(anObject)
doubleFunc(nullObject)

// prints
Some(10) // values has been doubled
None // does nothing

Mais pour Java ? Une petite piqure de rappel ne faisant pas de mal, cet article nous présente une solution possible avec en citation Martin Fowler et le pattern Special Case.

L’idée est la même que pour l’option Scala. On commence par définir une classe abstraite ou une interface avec une méthode spécifique qui sera appelée par notre code. Et de là seront créés 2 objets : un objet réel et un objet null. Ce dernier implémentera la méthode demandée mais ne fera rien alors que l’objet réel exécutera son code métier. Ainsi, plus de test de nullité, notre code lancera directement la méthode sur l’objet et ne se souciera plus de savoir si l’objet est null ou non.

Ce pattern anti NPE est une solution possible mais elle n’est pas la seule. Si vous avez suivi l’actualité, vous êtes malheureusement au courant que les operateurs null-safe et elvis ne seront pas implémentés par l’ambitieux Project Coin. Le sucre syntaxique ne viendra donc pas directement dans nos appels de fonctions mais par les annotations de JSR-305 dont @NonNull. Bien sûr, cette spécification a pour cible FindBugs, Intellij IDEA, Checkstyle ou bien encore PMD. On aurait préféré une intégration au Project Coin mais c’est déjà mieux que rien…

G1 pas à la hauteur des espérances ?

G1 (Garbage First) est un nouvel algorithme pour votre Garbage Collector. Il est destiné à remplacer l’implémentation par défaut lors de l’arrivée de la prochaine JVM. Celui-ci apporte un certain nombre d’avancées significatives dont des performances annoncées (quasi) compatibles avec le temps réel. Pour cela, G1 relève le défi de la maitrise des temps de pause des collections stop the world grâce à une gestion innovante de la mémoire (reposant sur beaucoup plus de ‘petites’ zones).

Nous n’allons pas détailler son fonctionnement ici. Si le sujet vous intéresse, nous vous encourageons à consulter l’un de nos articles sur le sujet. Il date un peu, mais son contenu reste tout à fait d’actualité : GC générationnels traditionnels (jdk6) VS GC Garbage First (jdk7).

Si les fonctionnalités de ce nouvel algorithme sont alléchantes, on retrouve ici et là quelques retours frileux suite à son usage. L’auteur de ce billet annonce des performances moins bonnes qu’avec le garbage collector par défaut lors de l’utilisation de LinkedHashMap. Faut-il s’en inquiéter pour autant ? Non ! Vu la criticité de ce genre de fonctionnalité, il est tout à fait normal que quelques ajustements soient faits lors des premiers retours d’utilisation terrain. C’est d’ailleurs le but recherché suite à l’intégration à Java 6 update 14 (via les options -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC), même s’il est vrai qu’il n’est plus flagué ‘expérimental’ depuis peu sur les derniers build du jdk 7.

En revanche, en plus de la mise en doute des performances de G1 relayée sur le internet, nous pensons qu’un élément bloque effectivement son adoption en production : le monitoring. Celui-ci est aujourd’hui insuffisant, ni jstat ni VisualGC ne remontent d’informations comme le montrent les captures d’écran ci-dessous. :)

jstat et VisualGC ne sont pas encore prêts pour G1

$ jstat -gccause 30572 5s
Warning: Unresolved Symbol: sun.gc.generation.0.space.1.capacity substituted NaN
Warning: Unresolved Symbol: sun.gc.generation.0.space.1.used substituted NaN
...
Warning: Unresolved Symbol: sun.gc.collector.0.invocations substituted NaN
Warning: Unresolved Symbol: sun.gc.collector.0.time substituted NaN
...
S0 S1 E O P YGC YGCT FGC FGCT GCT LGCC GCC
? ? ? ? 79.96 ? ? ? ? ? unknown GCCause No GC
? ? ? ? 79.96 ? ? ? ? ? unknown GCCause No GC

screenshot-visualgc-g1
Xebia France
Xebia est un cabinet de conseil international spécialisé dans les technologies Big Data, Web, les architectures Java et la mobilité dans des environnements agiles. Depuis plus de 11 ans nous avons la volonté de partager notre expertise et nos actualités à travers notre blog technique.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *