vendredi 18 décembre 2009

Veille technologique semaine 51

Pour le bulletin de cette semaine, je vous propose les sujets suivants :
  • la sortie de NetBeans 6.8 synchrone de l'implémentation de référence JEE 6 GlassFish V3. A noter le support de JavaFX 1.2.1.
  • le principe de l'inversion de dépendance : principe souvent mal compris et donc non utilisé. On entend parler de modularité et de re-use mais on oubli très souvent que du code fonctionnel qui dépend du socle technique (et donc du modèle de programmation du socle technique) est très peut réutilisable en dehors de ce socle technique. La meilleure traduction française trouvée est : "il ne faut pas construire le fonctionnel sur le socle technique [comme c'est le cas traditionnellement], mais il faut construire le socle technique sur le code fonctionnel". Question ; pouvez vous construire votre système et le faire tourner sans le socle technique ? Si la réponse est non, votre architecture n'est pas indépendante du socle technique, il n'y a pas d'inversion de dépendance : la probabilité de re-use s'effondre.
  • deux articles au sujet de la dette technique : c'est un sujet du bulletin de la semaine dernière, qui a intéressé quelques personnes. Je vous propose donc un complément.
  • un autre article au sujet du développement du logiciel.
  • un article sur la mesure de la productivité : c'est une question qui revient souvent.
  • la présentation d'Emmanuel Bernard faite au JUG de Paris au sujet des standards.
  • les nouvelles API de HTML 5 : le push
  • le projet Lambda intégré à OpenJDK : sur le chemin des closures pour le JDK 7
  • enfin les dernières mesures de perf des implémentation des langages les plus utilisés : le plus rapide est le C/C++ avec la valeur 1,
    Java est à 1.68 (1. 68 fois plus lent que le C/C++), Ada à 1.99, scala est à 2,8, C# mono à 3.3, l'interpréteur Java à 23, JRuby à 89 et Ruby à 94.
Bonne lecture.


Sun has released NetBeans 6.8, its open source IDE for Java. C++. PHP, and Ruby.
New features in this version include:

• EJB 3.1 support
• RESTful web services (JAX-RS 1.1), GlassFish Metro 2.0 web services (JAX-WS 2.2), JAXB 2.2
• Java Persistence JPA 2.0, deployment, debugging and profiling with GlassFish v3 application server
• Code completion, error hints, namespace completion, documentation popups, and tag auto-import for Facelets
• Editor support for Facelets libraries, composite components, expression language, including generators for JSF and HTML forms
• Customizable JSF components palette generates JSF forms and JSF data tables from entities
JavaFX SDK 1.2.1
• Editor Hints: Fix Imports, Surround With, Implements Abstract Methods, and more
• Improved navigation: Hyperlinks, Go to Type, Find Usages
• Full JIRA support
• Project dashboard with more member and project details, improved search and navigation, easier project sharing
• Improved instant messenger integration
• Improved issue tracker integration
• PHP 5.3
• Symfony Framework support
• PHPUnit, Code Coverage, FTP/SFTP integration improvements, exclude PHP project folders from scanning/indexing
• New Project from Maven archetype catalog and improved support for Java EE 6, Groovy, Scala projects
• Support for Rails 2.3.2 apps with dispatchers, JRuby 1.3.1, Ruby 1.9 debugging, and RSpec 1.2.7
• C++ Profiling: New Microstate Accounting indicator, Thread Map view, Thread Analyzer, Hot Spots view, Memory Leaks view, Sync Problems view
• C++ Parallelization Adviser
• Support for gdbserver attach and easier attaching to already running processes


Principe d'inversion des dépendances

Dependency Inversion Principle - DIP :
A. Les modules de haut niveau ne doivent pas dépendre de modules de bas niveau.
Tous deux doivent dépendre d'abstractions.
B. Les abstractions ne doivent pas dépendre de détails.
Les détails doivent dépendre d'abstractions.


LES ARCHITECTURES CLASSIQUES NE PERMETTENT PAS LA RÉUTILISATION DES MODULES "MÉTIER"
Dans la plupart des applications, les modules de haut niveau (ceux qui portent la logique fonctionnelle de l'application ou les aspects "métier") sont construits directement sur les modules de bas niveau (par exemple les librairies graphiques ou de communication) :

Cela paraît naturel au premier abord mais pose en réalité deux problèmes essentiels :
• Les modules de haut niveau doivent être modifiés lorsque les modules de bas niveau sont modifiés.
• Il n'est pas possible de réutiliser les modules de haut niveau indépendamment de ceux de bas niveau. En d'autres termes, il n'est pas possible de réutiliser la logique d'une application en dehors du contexte technique dans lequel elle a été développée.


Il faut construire les parties "techniques" de l'application sur les parties "fonctionnelles",
et non l'inverse.


VERS DES FRAMEWORKS MÉTIER ?
Ce principe conduit à des applications dans lesquelles la logique "métier" est parfaitement réutilisable. Cette partie métier forme une sorte de "framework", qui permet de développer une même application dans des contextes techniques différents.


Technical Debt
The term "technical debt" was coined by Ward Cunningham to describe the obligation that a software organization incurs when it chooses a design or construction approach that's expedient in the short term but that increases complexity and is more costly in the long term. Ward didn't develop the metaphor in very much depth. The few other people who have discussed technical debt seem to use the metaphor mainly to communicate the concept to technical staff. I agree that it's a useful metaphor for communicating with technical staff, but I'm more interested in the metaphor's incredibly rich ability to explain a critical technical concept to non-technical project stakeholders.


Dette technique - Technical Debt
C'est bien connu, une chose n'existe pas tant qu'elle n'a pas de nom.

L'informatique, discipline pas si jeune que ça, n'échappe pas à la règle même si certains ont tendance à oublier certains noms pour en faire apparaître de nouveaux.

Voici un terme qui a l'avantage de mettre en avant un fléau difficile à cerner de notre discipline : la dette technique. Il s'agit de mettre un nom sur une pratique généralisée dans le métier et qui constitue le principal problème de maintenance des systèmes informatique. Une traduction de l'entrée wikipedia sur le sujet pourrait être résumée ainsi :

La dette technique est un terme inventé par Ward Cunningham pour décrire une situation où l'architecture d'un système logiciel est conçue et développée trop précipitamment. L'analogie avec une dette financière vise à montrer que du code écrit médiocrement requiert le "paiement d'intérêts" par un effort de maintenance, qui serait plus petit ou inexistant si le code fut développé plus soigneusement et avec une planification à plus long terme.

Rearchitecturer et réécrire le code pour être plus maintenable est analogue au paiement de cette dette.

L'objectif d'une telle métaphore est bien de communiquer à des personnes qui n'ont pas de bagage technique mais qui sont pourtant en charge de l'allocation des budgets informatique, un problème essentiellement visible du développeur / architecte. La communauté des développeurs / architectes a tout intérêt à faire ressortir ces coûts dans l'objectif d'améliorer la qualité des logiciels et de rendre plus intéressant et utile la profession d'informaticien.

Mais un frein à la diffusion de cette information est le flou autour de ces coûts car la dette technique est à la base de la forte rentabilité des société de service en ingénierie informatique. Une SSII a tout intérêt a construire une application peu chère mais avec une forte dette technique pour qu'elle puisse continuer à faire de la marge sur la maintenance du système.


Développement logiciel : Doit on continuer à ignorer l'évidence ?
Nous l'avons constaté encore une fois, une fois de trop sans doute. L'un de nos clients s'est mis tout seul (car les responsables d'une telle situation travaillent bien dans la même entreprise que celle où officie notre interlocuteur) dans une situation perdant / perdant avec son intégrateur dans le cadre d'un projet développé au forfait. Quels sont les faits ? Nous pourrions, sans même lui laisser la parole, nommer une à une toutes les difficultés qu'il rencontre, les yeux fermés, à la manière d'un chapelet qu'on égrène.


Comment mesurer la productivité ?
Depuis toujours, dans le monde du logiciel, on entend « Il faut augmenter la productivité des développements ». Il ne suffit pas d'en parler pour améliorer la productivité. Comment passer d'un slogan très abstrait à des actions concrètes et des résultats tangibles ?

On ne peut améliorer que ce que l'on mesure. Il est donc impératif de trouver un indicateur permettant de vérifier l'amélioration recherchée. Les mesures comme le nombre de lignes de code ou le nombre de points de fonctions, encore utilisées aujourd'hui, sont trop éloignées de la valeur produite pour être intéressantes. Un indicateur beaucoup plus proche de la satisfaction client, et donc plus pertinent, est « le nombre de fonctionnalités sans erreur ajoutées à un logiciel durant un période donnée », ce que l'on pourrait appeler le débit de fonctionnalités.
  • Nombre de fonctionnalités ajoutées à un logiciel
  • Sans erreur
  • Durant une période donnée

Présentation sur les Standards par Emmanuel Benard au JUG de Paris
L'objet de la présentation d'Emmanuel Bernard est limpide : « Les Standards : caca ou pas caca ?" .
Avec un sujet décalé, exercice imposé par Antonio, il s'en est très bien sorti. Emmanuel pour ceux qui auraient été dans une grotte ces derniers mois, travaille chez JBoss RedHat, s'occupe du Podcast « Les CastCodeurs« , blog de temps en temps et trouve aussi le temps d'être membre du Java Community Process en participant à la spécification JPA 2.0 et en étant Spec Lead de la JSR-303 (Bean Validation). Avec tout cela, il trouve le temps de venir au Paris JUG, c'était bien sympa.

La légende veut que les spécifications désignées par des comités d'experts
soient lourdes et inadaptées au marché. A l'opposé, le monde de l'open-source est un univers merveilleux où tout se passe bien, les gens s'éclatent et s'entendent super bien pour faire de magnifiques logiciels.

En conclusion
Pour terminer, Emmanuel explique qu'un bon standard doit être stable, extensible, ouvert sur le futur et surtout adopté par la communauté. L'objectif de Java EE 6 est de proposer un socle normalisé, afin que maintenant la communauté mette son énergie sur de nouveaux problèmes. Et là, mesdames et messieurs, il a raison. Bon sang quel temps perdu pendant 3 ans, nous devons maintenant passer à autre chose, et commencer à réfléchir à des serveurs de 4ème génération.


Le point sur les nouvelles API HTML 5
  • Le point sur les technologies actuelles
  • WebSockets
  • Server-sent events
  • XmlHttpRequest v.2
  • Cross-document messaging
  • Conclusion

Le projet Lambda apparaît au sein d'OpenJDK
Mark Reinhold annonce la création d'un nouveau sous-projet au sein d'OpenJDK : le Projet Lambda. Son but est d'apporter une implémentation des closures pour le JDK 7. Dans la mesure où il est prévu que cette fonctionnalité soit implémentée dans un premier temps pour être spécifiée par la suite, il sera particulièrement intéressant de suivre l'évolution de ce projet dans les prochains mois afin de découvrir à quoi pourraient ressembler les closures dans la prochaine version de Java.

Un premier document de travail a été mis à disposition. Il présente de manière non formelle la proposition pour l'implémentation des closures qui est retenue pour le moment. Cette proposition se base sur les trois principales bases de travail qui s'étaient dégagées lors des débats précédents, à savoir la BGGA, la CICE et la FCM. Elle met en avant principalement :

• La syntaxe retenue pour la définition de fonctions anonymes qui se base sur le caractère #, ainsi #()(42) définit une fonction retournant toujours 42.
• La définition d'un type Java pour ces fonctions. Ainsi la fonction #()(42) prise en exemple précédemment a pour type#int().
• Les fonctions anonymes peuvent être converties automatiquement lorsqu'elle sont passées en argument d'une méthode attendant une instance d'une classe anonyme. En clair, il sera possible de créer une nouvelle thread avec new Thread(#() { ...some code... } ) plutôt que de fournir au constructeur une classe anonyme implémentantRunnable pour définir la méthode run(). Cette possibilité permettra donc aux closures d'être utilisées directement dans les APIs existantes !
• Dans certaines conditions, les closures sont à même d'utiliser les variables accessibles dans le contexte dans lequel elles sont définies.
• Le mot clé this peut être utilisé si la closure est déclarée depuis une méthode d'instance, il référence alors l'instance à laquelle est attachée la méthode concernée.

Enfin, pour faciliter les évolutions des APIs existantes que pourraient justifier ces nouvelles possibilités du langage, la notion de méthodes d'extensions est introduite. Il s'agit de permettre la définition de méthodes au sein des interfaces dont l'implémentation par défaut serait une méthode statique indiquée en argument.

Pour plus de détails sur cette proposition, n'hésitez pas à lire le document de travail, volontairement très didactique, du projet Lambda.


Project Lambda: Straw-Man Proposal
This is a straw-man proposal to add first-class functions, function types, and lambda expressions (informally, "closures") to Java.
1. Lambda expressions
2. Function types
3. Function conversion
4. Variable capture
5. Instance capture
8. Extension methods


Les expressions lambda (closures) se dotent de méthodes d'extension !
C'est fait, le projet Lambda est né de la volonté d'intégrer un système de closures, que l'on nommera désormais "expressions lambda".

On y retrouve donc une liste de diffusion mais surtout un prémice de la proposition : Project Lambda : Straw-Man Proposal.


Computer Language Benchmarks Game

vendredi 11 décembre 2009

Veille technologique semaine 50

Je vous propose, pour le bulletin de cette semaine, les articles suivants :
  • un article au sujet de la dette logiciel des projets,
  • la sortie de JEE 6 signé le 10 décembre : avec une implémentation de référence GlassFish,
  • première partie au sujet de JEE 6 (les deux autres seront envoyés dans les prochains bulletins),
  • le multi-core et la programmation concurrente,
  • la sortie de Google Web Toolkit (GWT) en version 2 : c'est une version très attendue,
  • la sortie de l'IDE IntelliJ en version 9 avec une version community gratuite : il est donné comme le meilleur IDE pour Java (et autre langage),
  • deux articles sur le projet Lombok : réduire le code technique,
  • Scala et la programmation fonctionnelle,
  • JUnit 4.8 et les @Category
  • Java et les performances,
  • la pratique du Service Oriented Architecture,
  • le NoSQL data base,
  • l'integration continue,
bonne lecture.


Votre logiciel est-il en bonne santé financière ?
La santé financière est une métaphore utile pour nous aider à comprendre la relation entre la qualité d'un logiciel et sa valeur réelle. Utiliser la notion de dette financière nous aide notamment à réfléchir aux conséquences de livrer un logiciel plus rapidement au détriment de sa qualité (externe ou interne).
Ward Cunnigham a introduit le terme de dette technique pour faire référence aux raccourcis techniques qu'une équipe fait afin de livrer plus tôt, par exemple pour satisfaire des contraintes de temps ou de budget. Comme l'analogie le laisse supposer, s'endetter c'est accepter de rembourser plus tard et de payer les intérêts en attendant. Et il faut bien comprendre quel est le taux d'intérêt qui s'applique !


Java EE 6, Glassfish 3 and NetBeans 6.8 Released:
Q&A with EE 6 Specification Lead Roberto Chinnici

Following the final approval vote for Java EE 6 last week, Sun has today announced the official release of the Java EE 6 SDK, along with GlassFish version 3, the first application server with full support for the platform, and NetBeans 6.8.

When the Java EE 6 specification was first made public the three central themes could be summarised as improving extensibility, adding profiles and pruning redundant APIs. EE 6 has delivered something on each of those areas. For extensibility the CDI portable extension SPI in particular offers substantially easier integration of additional technologies into the Java EE environment. For profiles the specification provides a general definition and introduces the Web Profile, defining a smaller container comprising a subset of key components such as servlets, JPA, JTA, JSF, CDI and EJB Lite.

The pruning work has seen largely underused features like EJB Entity beans, JAX-RPC, JAXR and Java EE Deployment marked as future optional components. At the same time, EE 6 has overhauled key parts of the platform and continued to push on the ease of development work which started with Java EE 5. As the platform is officially launched I talked to Sun Microsystems' Roberto Chinnici, one of the two leads for the EE 6 specification, beginning by looking at the significance of these themes from a developer's perspective.


Introducing the Java EE 6 Platform: Part 1
Java Platform, Enterprise Edition (Java EE) is the industry-standard platform for building enterprise-class applications coded in the Java programming language. Based on the solid foundation of Java Platform, Standard Edition (Java SE), Java EE adds libraries and system services that support the scalability, accessibility, security, integrity, and other requirements of enterprise-class applications.

Progress continues. The next release of the platform, Java EE 6, adds significant new
technologies, some of which have been inspired by the vibrant Java EE community. It
also further simplifies the platform, extending the usability improvements made in
previous Java EE releases.

This article highlights some of the significant enhancements in Java EE 6.
- Java EE 6 Goals
- Powerful New Technologies
- Enhanced Web Tier Capabilities
- EJB Technology, Even Easier to Use
- A More Complete Java Persistence API
- Further Ease of Development
- Profiles and Pruning
- Summary
- For More Information
- Comments


do you speack concurrency ?
Nous sommes toute une génération de développeur qui a été bercée par la course au Méga-Hertz, et si nous constatons un plafond les vieux réflexes perdurent. Face à un programme trop lent, la solution reste le "plus gros" processeur.

Seulement, l'offre des fondeurs de puces est explicite : n'espérez plus de GHz supplémentaire – à la place, on vous propose des cœurs en plus.

La conférence de Doug Lea à Devoxx ainsi que son livre "Programmation Java Concurrente" sont basés sur ce constat. Fini le Free Lunch sur la puissance CPU. Pour faire plus rapide il va falloir apprendre à penser et à parler parallélisme, concurrence et synchronisation, des sujets particulièrement pointus et mal connus.

Pas encore convaincu ? Intel annonce avoir dans ses labs un processeur à 48 coeurs ! Vers 2012, un serveur haut de gamme se basera sur ce type de puce, et votre PC portable entrée de gamme en 2020 aussi. Croyez-vous vraiment que vos logiciels sauront en profiter ? Votre super batch d'import de données tire t-il profit d'une architecture à 48 coeurs, ou ressemble t-il plus à un bête programme séquentiel, comme décrit dans votre document de spécification ?

Les traitements lourds comme les encodeurs vidéo, traitement d'image et autres manipulations massive de données ont déjà franchi le pas, mais que penser des milliers d'autres softs, … à commencer par ceux que nous développons nous même !


Google Releases GWT 2.0
Google's open-source Web Toolkit (GWT) has become a popular Web
development framework in recent years. GWT allowing developers to
write Java code, using familiar Java development tools, and generates
highly optimized JavaScript from the Java code base. The GWT compiler
takes into account the idiosyncrasies of various browser environments
when optimizing its JavaScript output. Google released this week
version 2.0 of GWT.

The most visible feature in the latest release is Speed Tracer, a
performance profiler that works with the Chrome Web browser. Speed
Tracer is not tied to GWT applications: It can be used to profile and
analyze the performance of any Web applications. Speed Tracer is a
result of performance profiling instrumentation added to the version
of WebKit used by Chrome and, therefore, works only in Chrome.

Separating user interface and program logic is a key feature of almost
every Web and UI toolkit. However, as UIs become increasing
sophisticated, graphic artists and UI specialists often need to work
side-by-side with more code-centric developers. Since graphic
designers and developers often use different tools and have different
working styles, modern UI toolkits need to facilitate easy interaction
between developers and designers. Adobe's Flex framework has provided
such features for a long time with an XML-based declarative UI
language, and GWT 2.0 adds a similar capability with UiBinder:

To construct your UI, simply mix HTML and widget elements
declaratively in a UiBinder XML template — a .ui.xml file. You can
then place application logic in an associated .java file... UiBinder
makes it much easier to involve web designers more directly into the
development workflow. For example, developers can copy/paste from HTML
mocks provided by a web designer... Incorporating your own custom
widgets into a UiBinder template is exactly the same as using any of
the built-in widgets...

An equally important aspect of Web application UIs is their fidelity
to design when rendering in various browser environments. To that
effect, GWT 2.0 introduces layout panels, an abstraction over CSS
layout:

Prior to GWT 2.0, even GWT's widgets were not able to fully abstract
away some of the layout headaches that can occur. However, GWT 2.0
introduces layout panels that actually do make it possible to reliably
create the layout you want... Layout panels create a predictable
constraint-based layout system on top of standard CSS. Because it
works with CSS, rather than in spite of it, layout panels continue to
work predictably in the presence of custom CSS styles that you might
need to include.

Since GWT applications run mostly in the browser, minimizing
application download time is an important usability concern. GWT 2.0
introduces code splitting, allowing a GWT application to incrementally
download to a browser:

Just find a spot in your project where you'd like to chop out some
code and use the magic new GWT.runAsync() method to create a split
point. By continuing to add split points wherever it makes sense, you
can easily and safely slice and dice your application to ensure that
the initial download includes only the bare minimum of code necessary
to start. The compiler automatically arranges for additional code
fragments to be downloaded later. And, unlike manually splitting
JavaScript... the GWT compiler does the hard work of ensuring that all
necessary dependencies are downloaded in the correct order
automatically.

GWT 2.0 also includes numerous compiler improvements, leading to
further optimization in the generated JavaScript:

With each new release of GWT, we add compiler optimizations to make
compiled JavaScript smaller and faster. That's a big benefit if you
have existing GWT projects, because you can simply upgrade, recompile,
and — poof — your applications start and run more quickly. Indeed, GWT
2.0 includes some high-impact new optimizations, and we have already
seen size reductions in compressed JavaScript ranging from 3% up to
over 20%.


IntelliJ IDEA 9.0
The Most Intelligent Java IDE


What's New in Version 9
This release delivers many major updates to IntelliJ IDEA including better performance, support for Java EE 6 and other new frameworks, lots of productivity improvements in the editor, a more streamlined user interface and much more.


Lombok Reduces Your Boilerplate Code
In this article, I show you the power of the product I stumbled upon this week: Project Lombok enables you to modify bytecode at compile code. First, I will detail what features Lombok brings you out-of-the-box. In the second part of this article, I will describe how to extend it to generate you own code.

Lombok's driving feature is to create code you need from annotations in order to reduce the amount of boilerplate code you have to write. It provides you with the following annotations that will change your code (if not your life) forever:

@Getter and @Setter: create getters and setters for your fields
@EqualsAndHashCode: implements equals() and hashCode()
@ToString: implements toString()
@Data: uses the four previous features
@Cleanup: closes your stream
@Synchronized: synchronize on objects
@SneakyThrows: throws exceptions


Interview: Reinier & Roel on Lombok
Project Lombok removes the need for you to code a lot of the standard boilerplate, such as "getters" and "setters", that have helped cause developers to leave Java, in favor of other languages. Using annotations provided by Lombok, your application's bytecode can be modified at runtime, as explained below in an interview with
Reinier Zwitserloot and Roel Spilker, the two developers behind Lombok.


A Taste of Scala
A (Brief) History of Object-Functional Programming

Once upon a time, there was a language, it was called Scala.
People came to look at the language, and they announced that it was "pretty impressive", but they thought that the feature set was changing too fast, and that nobody was using it yet outside of hobby projects. It sure did look good, but nobody wanted to risk their career on it, it was too young, it might not last.

Then something happened; Scala grew up. Twitter announced that they used it to replace some of their Ruby back-end, and SAP were using it, and EDF. The news spread and new developers also came to see that Scala was "pretty impressive", whilst the early pilgrims began to look at it with renewed interest and a glint in their eye. What they saw was a language that is now mature and ready to be used in anger. With the approach of version 2.8, Scala is coming of age, and it is indeed "pretty impressive"!


About JUnit and the 4.8 Release
JUnit has been an important framework in the evolution of test-driven development (TDD). The open source unit testing framework has been ported to numerous languages (e.g. PHP (PHPUnit), C# (NUnit), and JVM languages) and can now be found natively in many popular IDEs. DZone recently talked with David Saff, a JUnit committer and Software Engineer in Test currently working on Google Books, about the newest version [1] of JUnit and the current state of the project.


Devoxx – Jour 4 – Java Performance Tuning
A Devoxx, deux sessions étaient dédiées au thème du tuning de performance en Java : Performance for the performance-shy par Holly Cummins et The not so dark art of performance tunning par Kirk Pepperdine et Dan Hardiker. Nous nous attardons ici sur cette dernière. Kirk Pepperdine (photo ci-contre) est Java Champion et
possède une expertise reconnue dans le domaine des performances des applications Java. On se souvient également de sa présentation en avril 2008 au ParisJUG où il avait fournit un aperçu des problématiques liées à ce sujet. Dan Hardiker est pour sa part le fondateur d'une entreprise spécialisée dans l'hosting de solutions basées sur Confluence.


Devoxx – Jour 2 – SOA en pratique
Les sessions dédiées à SOA étaient présentes cette année encore à Devoxx. Nicolai Josuttis a animé une présentation intitulée « SOA in practice » à l'image du titre du livre dont il est l'auteur, publié chez O'Reilly. Passage obligé de toute présentation sur SOA, Nicolai Josuttis commence par introduire l'ensemble des concepts gravitant autour de l'architecture orientée services. Nous passerons sur ces rappels ici, car malgré quelques divergences dans les définitions, on retrouve les idées décrites dans les différents articles portant sur SOA que nous avons pu publier jusqu'alors.


Devoxx – Jour 1 – NoSQL avec HBase
Durant la première journée de Devoxx, deux sessions étaient dédiées au NoSQL : une présentation (trop) courte de 30 minutes durant la journée suivie d'un BOF sous forme de discussion d'une heure le soir. Ce sera l'unique incursion de cette technologie durant la semaine. On peut d'ailleurs regretter que ce sujet qui monte en puissance actuellement n'y ait pas été plus présent.


Continuous integration, going beyond continuous compilation.
Continuous integration is in my opinion the most important practice to successfully deliver good software. Continuous integration should go beyond a simple set of practices and tools to build your source code every now and then; doing so is continuous compilation, not continuous integration. Continuous integration goes beyond that, it should drive the way the software gets build and how the different actors from the project interact with each other. The five main characteristics of continuous integration

vendredi 4 décembre 2009

Veille technologique semaine 49

Pour le bulletin de cette semaine 49, je vous propose les sujets suivants :
  • la présentation DCNS à la conférence Model Driven Day 2009 est disponible sur le site web.
  • Nokia qui sort la version 4.6 de la boite à outil Qt : animation et multi-touch pour les IHM.
  • Chrome OS : la conférence de Google pour son nouvel OS prévu pour 2010.
  • Le Java Community Process (JCP) vient d'approuver la version 6 de Java Enterprise Edition (JEE 6).
  • Microsoft a présenté sa plateforme Azure pour l'hébergement d'application : SaaS : Software as a Service. Sur le chemin de la location d'hébergement d'application.
  • Un résumé des modification du langage Java pour le JDK 7, avec le retour des closures.
  • Le projet Lombock présenté à la conférence Devoxx : faire générer les méthodes de la classe Object. Annotations, annotations ... la puissance des annotations.
  • Maven 3 : la suite en multi-threadé ...
  • Google Waves : c'est quoi ?
  • Les sockets et Java : cela peut encore servir.
Bonne lecture


Slides présentation DCNS au Model Driven Day 2009 sur le site web :
http://www.mdday.fr/


Témoignage DCNS :
http://www.lyria.com/mdday/objecteering.htm#client

ensemble des présentations
http://www.mdday.fr/IMG/presentations/MDDAY_2009.zip

dézipper le fichier puis MDDAY_2009.zip :

dossier OBJECTEERING :
fichier : "DCNS_MDDAY 2009 - DCNS - GRIVOT.E [Compatibility Mode].pdf"


Qt 4.6.0 Released

Nokia has released the latest version of its cross-platform toolkit Qt, version 4.6.
As usual, it comes with a whole slew of improvements and new features, and this time, they even added a new platform into the mix.

The improvements in Qt 4.6 can be summed up as more platforms, more eye candy, more fingers, and more horsepower. Qt 4.6 adds support for the Symbian platform, and obviously also gains support for Mac OS X 10.6 Snow Leopard and Windows 7. In addition, community support is available for the real-time operatig systems QNX and VxWorks. Meamo 5 is on the way, with its second technology preview released today.

Eye candy-wise, Qt 4.6 gets the Animation Framework, which includes "intuitive state machine functionality", as well as new graphical effects such as opacity, drop shadows, glow, and filtering. Qt 4.6 also comes with multitouch support, providing the ability to, among other things, flick and scroll kinetically.

As far as performance goes, the Qt GraphicsView rendering algorithm has been rewritten, but 4.6 also receives a new OpenGL paint engine, WebKit, 2D vector graphic support using OpenVG, and new DirectFB support.

"Qt 4.6 marks an exciting time for developers, regardless of their target form factor or platform," said Sebastian Nyström, Vice President, Application Services and Frameworks at Nokia, "Developers can easily create visually appealing and web-connected applications for desktops or devices, including targeting the hundreds of millions of Symbian and Maemo-based devices. The community will enjoy using Qt's intuitive programming interface to quickly create powerful, appealing applications."

You can get Qt from its website.


Chrome OS : la conférence de Google
La conférence de Google sur Chrome OS ne doit démarrer que dans 20 minutes, mais le code de la version open source de son système d'exploitation - Chromium OS - sont déjà disponibles comme le signale un ingénieur de Google.


Java EE 6 platform approved today
With the closing of the final approval ballot earlier today, it is now official: the JCP Executive Committee has given a green light to the release of the Java EE 6 platform specification. The final release will happen on December 10, when GlassFish v3 will be available. For more details of the ballot, with comments from several EC members, please refer to the JCP web site. Of course the excitement of the event drove me to watch live the ballot close at midnight PT and tweet about it!


Microsoft propulsera Windows Azure dans les nuages le 1er janvier 2010
Microsoft a profité de la PDC 2009 pour annoncer que Windows Azure, sa première
plate-forme en mode cloud computing, ainsi que SQL Azure débarqueront officiellement en janvier prochain.


Article complet: Projet Coin : Les modifications du langage pour Java 7
Joseph Darcy a mis les choses au clair concernant les récentes annonces de la conférences Devoxx et leurs conséquences pour le projet Coin.
Et la bonne nouvelle vient du fait que la proposition d'amélioration de la gestion des exceptions est actuellement réexaminée pour une éventuelle inclusion dans Java 7, en plus des précédentes modifications déjà acceptées. Par contre il ne devrait plus y avoir de réexamen d'autre proposition...
Pour rappel, l'amélioration de la gestion des exceptions comporte deux concepts : multi-catch et rethrow.
Mais voyons voir de plus près cette proposition...


Article complet: Que peut-on attendre des closures de Java 7 ?
Stephen Colebourne a fait un résumé des fonctionnalités des différentes propositions de closures, en les reliant avec le peu d'information obtenu lors de la conférence Devoxx et à la nouvelle proposition de Neal Gafter : Closures for Java 0.6a, qui est présenté par tous comme un document de travail tentant de faire le consensus de chaque proposition.
Voyons voir cela de plus près...


Devoxx – Jour 5 – Projet Lombok
L'objectif de ce produit est de nous faire gagner du temps et d'améliorer la lisibilité de nos classes. Comment ? Et bien, moyennant quelques annotations, l'outil va par exemple générer pour nous les méthodes toString, equals et hashcode mais aussi les getters et setters de notre POJO. Certes, nos IDEs nous proposent déjà ce travail mais il subsiste 2 différences de taille : ...


Lombok features
@Getter / @Setter
@ToString
@EqualsAndHashCode
@Data
@EqualsAndHashCode,
@Cleanup
@Synchronized
@SneakyThrows


Devoxx – Jour 4 – Maven Reloaded
Jason van Zyl, le leader emblématique du projet Maven, était présent à Devoxx pour présenter les nouveautés à venir dans l'environnement Maven : Maven 3.0 et 3.1, finalisation de M2Eclipse, améliorations à venir sur Nexus ; le contenu était
dense.Il commence sa présentation en s'excusant pour la version 1.0 de Maven qui relevait de l'expérimentation et n'était pas destinée à une telle diffusion. La version 2.0 présentait quant à elle de nombreux défauts, il le reconnaît également. Il promet alors un outil mature et abouti avec Maven 3.0.


Pourquoi tant de vagues autour de Google Wave ?
Depuis un peu plus d'un mois, Google a lancé un test grandeur nature (on parle de 100 000 bêta testeurs) de sa plate-forme de communication centralisée, Wave. Après une grande frénésie de chasse à l'invitation, le soufflet retombe peu à peu : on sent bien qu'il y a quelque chose à tirer de cet agrégat d'outils devenus 'temps réel', mais on ne sait pas encore quoi. On voit apparaître de nombreux prototypes (traduction temps réel, interfaçage avec des mobiles…), mais peu de choses très concrètes. Il
faudra pour cela attendre d'atteindre une masse critique (si plusieurs entreprises décident par exemple de remplacer l'intégralité de leurs outils de communication par Wave) mais aussi compter sur la communauté pour explorer les possibilités d'extension de Wave et proposer des robots attractifs. Malgré tout, l'outil de Google a attisé notre curiosité, principalement grâce à son architecture ouverte et à ses possibilités d'extension.


Sockets programming in Java: A tutorial
Writing your own client/server applications can be done seamlessly using Java.


vendredi 27 novembre 2009

Veille technologique semaine 48

Pour le bulletin de cette semaine, je vous propose les sujets suivants :
  • la conférence Devoxx : les sujets présentés, la synthèse, ...
  • Google et Chrome OS : l'annonce de Google sur la sortie de son prochain OS en 2010
  • GWT : Google Web Toolkit sortie de la première version 2
  • les manques de Java ?.
  • explication du multi-dispatch : c'est quoi ?
  • les closures pour le JDK 7, suite
  • quelques nouveautés de JavaFX 1.2
Bonne lecture


JDK 7, JEE 6, et Maven 3.0 : les annonces de Devoxx

La conférence Devoxx ayant eu lieu la semaine dernière a été l'occasion de plusieurs annonces importantes qui ont rapidement fait le tour de la blogosphère.

JDK 7 avec les closures, mais retardé à nouveau

C'est surement l'annonce qui à fait le plus de bruit. Elle s'est répandue comme une trainée de poudre tant elle était inattendue. Lors d'une présentation en apparence sans surprise sur les nouveautés du JDK 7, Mark Reynold explique que le temps est venu pour Java de supporter les closures. Afin de permettre leur implémentation, la finalisation du JDK 7 est repoussée à septembre 2010. Trois nouveaux milestones sont donc ajoutés au calendrier initial avec une finalisation des fonctionnalités (features complete) prévue pour Juin 2010. Ce nouveau délai permet donc à l'équipe du JDK de travailler sereinement sur la finalisation de Jigsaw, d'implémenter les closures, et devrait vraisemblablement permettre également l'inclusion du multi-catch pour les exceptions.

En fait ce délai semble laisser la possibilité à de nombreuses autres fonctionnalités et spécifications qui avaient été mises de coté de prétendre de nouveau intégrer le JDK 7. On peut ainsi imaginer :

Questionné à Devoxx sur l'étendue des fonctionnalités pouvant être concernées par une potentielle inclusion, Mark Reynold ne ferme la porte à aucune hypothèse. Il explique ainsi qu'il n'a pas eu l'occasion de voir de proposal pour les propriétés qui lui semblait satisfaisante jusqu'à présent mais n'exclue pas une telle possibilité d'ici la finalisation des fonctionnalités du JDK 7.

JEE 6 finalisé en décembre

Lors du keynote du premier jour des conférences, Roberto Chinnici (Spec lead JEE 6) a annoncé la finalisation de l'ensemble des spécifications JEE 6 ainsi que de l'implémentation de référence associée (Glassfish V3) pour le 10 décembre 2009.

Cette nouvelle intervient alors que JEE 6 a été très bien accueilli par le public à Devoxx comme il l'a été maintes fois répété dans le dernier épisode des Cast Codeurs.

Maven 3.0 finalisé en Janvier

Cette annonce est passée plus inaperçue parmi l'actualité de Sun. Pourtant Jason van Zyl, lors de sa présentation des nouveautés de Maven 3.0, a annoncé une finalisation de la nouvelle version de son outil de build pour la fin janvier 2010.

Cette nouvelle version apportera le support des builds multithreadés ainsi qu'un environnement de base pour les extensions très intéressantes que sont Polyglot Maven et Maven Shell.

Nous publierons rapidement un article plus détaillé sur l'ensemble des nouveautés à venir sur Maven 3.x.


Devoxx 2009, une synthèse 1/2

  • Les keynotes
  • Le cloud computing

Devoxx 2009, une synthèse 2/2
  • Java comme une plateforme
  • Java plus simple et plus productif
  • La SOA
  • L'OSGI
  • Les sessions méthodologiques, avec par exemple Pomodoro et « development is social? »

Devoxx – Jour 3 – La keynote
Cette première keynote qui a eu lieu Mercredi marque le début officiel des conférences de Devoxx. Stephan Janssen nous a souhaité la bienvenue en nous précisant quelques chiffres pour Devoxx:
  • 2500 participants,
  • 737 compagnies représentées
  • comme Xebia par exemple ,
  • 132 sessions,
  • 120 speakers,
  • 56 JUGs (dont 10 en France),
  • 36 pays,
  • et 19 partenaires ce qui est moins que d'habitude.

Devoxx – Jour 2 – Scala Actors
Le langage Scala était très représenté cette année à Devoxx avec une session sur les acteurs par Franck Sommers, une autre sur ScalaTest par Bill Venners ou encore celle sur le framework web Lift par Timothy Perrett. Cette dernière n'a malheureusement pas tenu toutes ses promesses : la moitié de la présentation
s'est focalisée sur les spécificités du langage et une autre partie sur la déjà vue application ChatDemo en comet de David Pollack sans réelle explication de code, ne laissant ainsi que très peu de place pour Lift lui même.
Nous consacrerons donc un retour à Scala en deux parties : la première sur les acteurs (présent billet) et la seconde sur ScalaTest.


Devoxx – Jour 3 – ScalaTest
Devoxx consacrés à Scala. Après les acteurs, c'est au tour de la librairie ScalaTest de faire son show.


Devoxx – Jour 3 – Spring Actionscript
Spring ActionScript est un framework Spring permettant de faire de l'inversion de contrôle en ActionScript. Ce framework connu initialement sous le nom de Prana Framework est actuellement en incubation chez Spring. Devoxx fut l'occasion pour Christophe Herreman, initiateur du projet, de nous le présenter.


Details of the Now Available Google Chrome OS
Google has open sourced Chrome OS a year before the planned launch which is to happen some time before winter holidays in 2010. Google is working with manufacturers on a new reference hardware to accommodate their speed and security requirements which are key features of their new operating system.


GWT version 2.0 RC1

Une nouvelle version majeure du RIA de Google, GWT, sort en version 2.0 RC 1. Cependant, aucune date de sortie n'est encore annoncée. Cette version s'accompagne d'un plugin pour Eclipse, nommé Google Plugin for Eclipse 1.2 RC1, dont l'on recommande vivement la mise à jour.
Parmi les nouveautés, on peut citer:

  • Utilisation du Development Mode (anciennement appelé Hosted Mode) dans le navigateur de votre choix via un plugin.
  • Possibilité de fragmenter le code JavaScript généré en plusieurs morceaux en utilisant GWT.runAsync() va permettre d'accélérer considérablement les temps de chargement.
  • Story Of Your Compile (SOYC) génère un rapport sur le processus de compilation et permet d'avoir une meilleure vision du code généré.
  • Facilitation de la création d'IHM par déclaration avec Ui Binder.
  • Apparition d'un ClientBundle, similaire au ImageBundle, qui permet la généralisation du sprinting à d'autres formats les fichiers textes, css, etc.
  • Utilisation de HtmlUnit pour les tests unitaires, qui permet maintenant de débugger directement dans le débuggeur Java.
Les nouveautés sont donc nombreuses et apportent un réel gain de productivité.
Le combat auquel se livrent actuellement les RIA est loin d'être terminé…


The following is a list of the language features I miss most when programming Java:

  • Closures
  • Modules
  • Generators
  • Mix-ins
  • Post-hoc interfaces

Multiple dispatch: a fix for some problems of single dispatch (Java etc.)
Almost all well-known object oriented languages (Java, C#, JavaScript, Python, Ruby, ...) have single dispatch: Methods are chosen depending on the (single) receiver of a message. On the other hand, there is multiple dispatch which is an interesting mix of functional method selection with mutable state. It is used in less-known object-oriented languages such as Common Lisp.


More detail on Closures in JDK 7
This blog goes into a little more detail about the closures announcement at Devoxx and subsequent information that has become apparent.


What's New In JavaFX 1.2 Technology: RSS, Storage, and Charts
The first article in this series, What's New In JavaFX 1.2 Technology: New Layouts and Effects, introduced you to new layout classes such as ClipView, Flow, and Stack, and demonstrated how to use these classes within your applications.
Unlike the many articles that concentrate on graphical user interface (GUI) features and application design in JavaFX technology, this article and the next will provide insight into the more technical features such as RSS and Atom tasks, local
storage using JavaFX's built-in storage classes, and the use of JavaFX charts.


Devoxx – Jour 2 – Java FX The developer guide
La session JavaFX fut l'occasion de découvrir comment développer une application JavaFX. Le speaker Stephen Chin, chef de projet de WidgetFX, nous a proposé une introduction au langage de script JavaFX. La présentation semblait à mon avis plus modeste que les présentations faites l'année dernière. Le nombre de sessions
JavaFX est moins important comparé l'année précédente. De même pas de présentation au Keynote où Adobe semble être mis en avant avec sa plateforme Flash.

vendredi 20 novembre 2009

Veille technologique semaine 47

Pour le bulletin de cette semaine, je vous propose les sujets suivants :

  • présentation d'un retour d'expérience à la conférence Model Driven Day 2009 sur Paris le 26 novembre prochain (site www.mdday.fr) dans les locaux de Microsoft. Je présente l'usage du Model Driven Architecture (MDA) et de l'Aspect Oriented Programming (AOP). L'inscription est gratuite (voir sur le site).
  • Des résultats de performances du standard OpenCL pour le traitement du signal audio. Le standard OpenCL (à ne pas confondre avec OpenGL) propose une API qui permet de déléguer du travail de traitement sur le processeur graphique (GPU). Ce traitement n'est pas lié à des pixels (contrairement à OpenGL). CUDA est l'API propriétaire
  • Un article au sujet de HTML 5 qui veut remplacer Flash.
  • La NASA qui adopte NetBeans comme plateforme.
  • 5 bonnes pratiques pour le développement du code.
  • La conférence Java Devoxx qui a eut lieu du 16 au 20 novembre en Belgique, plusieurs présentation on été faites.
  • Toujours à cette conférence, a été annoncé le retour des closures pour le JDK 7. Différents articles au sujet des closures en Java.
  • Deux articles sur l'intégration du concept de services dans Java
Bonne lecture.


La journée du « Model Driven » - Edition 2009

Titre de la présentation:JAva COmponent MOdel - How Aspect Oriented Programming can help Model Driven Architecture

Abstract : Model Driven Architecture (MDA) propose to transform Platform Independant Model to Platform Specific Model (PIM). Aspect Oriented Programming (AOP) propose to weave technical code inside domain code. JAva COmponent MOdel (JACOMO) technologie use AOP to implement MDA.

Intervenant : Emmanuel Grivot


OpenCL Standard Speeds Compute Intensive Applications
OpenCL, an emerging new standard for distributing applications across processor cores and GPUs promises to dramatically speed up processing time for parallelizable tasks. One Mac programmer was stunned to see a 492 seconds audio processing task shrink to a mere 14.1 seconds..


HTML 5, tueur de Flash ?
Les fonctionnalités étaient jusqu'à présent seulement disponibles sur nos postes de travail. Aujourd'hui, on trouve des applications Web capables de proposer de la retouche de photos, la visualisation de bande annonces de film, la gestion et l'écoute de musique, la lecture de livres, etc. Les standards actuels du W3C n'ayant pas été conçus pour la création d'applications Web, des plugins tels que Flash ont comblé
ce manque. Le W3C préparait XHTML 2 depuis des années mais cette spécification était orientée document et non application.

Des employés d'Apple, de Mozilla Foundation et d'Opera Software ont
formé la communauté WHATWG. Point de départ d'HTML 5, leurs travaux ont été orientés vers un standard capable de créer des applications : ajout de la vidéo, mode hors-ligne, etc. HTML 5 est-il une réelle alternative aux plugins comme Flash ? Voire un Flash-killer ?


NASA Adopts the NetBeans Platform
Tim Boudreau, Senior Staff Engineer at Sun Microsystems,
recently spent some time with engineers at NASA, showing them how to use
the NetBeans Platfom.
Below, he reflects on some of the interesting engineering needs that NASA
has and how the NetBeans Platform is well suited to respond to these. During
the interview, Tom Wheeler, one of the NetBeans Platform's several external
contributors, talks about his participation in the course at NASA, too!


5 practices to create good code.
  • Keep it simple
  • Make it work, then make it fast.
  • Automated Test
  • Code reviews.
  • Refactor.

Devoxx Conference
Devoxx Day 1: University Day 1
Devoxx Day 2: University Day 2
Devoxx Day 3: Conference Day 1


JDK 7 Unexpectedly Gets "Simple" Closures, but is Pushed Back to End of 2010
During his Devoxx talk, Mark Reinhold has announced that JDK 7 will have Closures. With the inclusion of this much debated feature, JDK 7 schedule will be extended until around September 2010.
Joseph D. Darcy, lead engineer of Project Coin, which aims to make small language changes for Java 7, has confirmed that the next version of the language will include some kind of "lightweight" Closures:


Closures after all?
Apparently Mark Reinhold announced that closures would be added to JDK 7 at Devoxx today:


Closures? In Java 7???
Today, a tantalizing announcement by Mark Reinhold about closures in Java 7 has made its way through the twittersphere.


Closures for Java (v0.6a)
We describe a proposed extension of the Java Programming Language that supports deferred execution of snippets of code. These correspond to lambda expressions in languages such as Javascript, C#, and Groovy.


First-class methods: Java-style closures
The following examples refer to static methods:

Math#min(int, int)
Collections#sort(List, Comparator)

The following examples refer to instance methods:

Integer#intValue()
Object#equals(Object)


How to create services in Java
Creating services is quite an abstract subject, everyone has his own ideas and preconceptions, so is worth clarifying what I mean by services in this article. A service is a component that holds some business logic which can be easily reused anywhere else in the application no matter where the service is located, or what the communication mechanism is used between the client and the service. The following code samples detail my own personal approach on how to implement services in Java.


Service Provider Interface: Creating Extensible Java Applications
Most of an application's life cycle revolves around maintenance. An extensible application allows for easy maintenance—i.e., upgrading of specific parts of a product—without affecting the entire application. This article examines the service provider interface (SPI) approach to creating extensible applications, a key to modular, plug-in architectures. The article begins by defining what a service provider interface is, how it is implemented, and how you can achieve extensibility by using the ServiceLoader API (part of JDK 1.6).

vendredi 13 novembre 2009

Veille technologique semaine 46


Pour le bulletin de cette semaine, je vous propose les sujets suivants :
  • le JDK 5 a atteind la fin de son cycle de vie le 3 novembre dernier. Il n'y a donc plus de mise à jour publique du JDK 5 qui reste à l'update 22. La maintenance est passé en mode payant : de 15K$ à 250k$ par ans. La fin de vie du JDK 6 est prévue pour 2010.
  • le produit de gestion de configuration subversion passe en projet apache.
  • Oracle confirme le soutien des produits SUN : sparc, solaris, glassfish, openoffice, mysql, netbeans ...
  • un mouvement anti SQL : noSQL.
  • sortie de JavaFX 1.2.1 : perf et correction de bugs.
  • Java et le multi-core :
  • Groovy et la délégation : @Delegate
  • JBossCache et le MVCC : Multi Version Concurent Controle.
  • JUnit et l'annotation @Rule
  • un article au sujet des performances de Java versus C/C++.

Bonne lecture.


Java SE 5 Reaches End Of Service Life
Sun's implementation of J2SE 5.0 reached its End of Service Life (EOSL) on November the 3rd 2009, which is the date of the final publicly available update of version 5.0 (J2SE 5.0 Update 22).

Customers looking for support from Sun can either update to Java 6 or subscribe to Sun's Java for business program.
Sun offers a number of paid support options for Java. Java classic support covers the latest release of Java for a period of three years from product release and comes in two variations: Standard support which provides business-hour (12x5) coverage with a four hour response time SLA, and premium support which offers 24x7 support with an immediate response time. The cost of Java classic support starts at $15,000 per year. Pricing increases by the size of the organisation and for very large enterprises could be up to around $250,000 per year.



Java SE & Java SE for Business Support Road Map
JDK 6 : GA Date = 6 December 2006, EOL Notification = 2009*, EOSL = 2010*, Support Period = 4 years*

* EOL Notification date, EOSL date, and exact support period for the Java SE 6 release family have not been determined at the time of the writing of this article. Information will be posted to the Java SE web site as it becomes available.


Subversion, le nouveau projet de la Fondation Apache

C'est officiel, Subversion fait maintenant partie des projets de la fondation Apache. Avant de pouvoir devenir projet top-level, Subversion doit d'abord passer par l'incubateur. Durant cette période, CollabNet continuera d'héberger le projet surhttp://subversion.tigris.org. De plus, les différents binaires continueront d'être publiés sur ce site au-delà de la période d'incubation. Nous sommes donc en droit de nous demander ce que cette nouvelle va finalement changer ?

Certains imaginent la refonte de Subversion pour lui ajouter des fonctionnalités de gestionnaire de sources distribué, comme GITou Mercurial. Il est pourtant difficile de croire à une telle transformation, Subversion étant connu comme le gestionnaire centralisé star du moment. Un tel virement de bord signifierait la fin de ce modèle centralisé.

D'autres perçoivent au contraire cette nouvelle comme une fierté personnelle et voient l'arrivée de Subversion dans l'ASF comme un aboutissement. Le projet est assez mature pour rentrer dans une nouvelle phase et Apache est la maison idéale pour le faire vivre sur le long terme tout en pérennisant la communauté.

Au final, la véritable réponse à cette question se situe probablement entre ces deux visions. Pourquoi le projet ne continuerait pas tout simplement à avancer sur le chemin qu'il suit depuis sa création ? Il lui reste du trajet à parcourir : performances, intégration avec les IDEs, outillage …



Oracle Announced Plans for the Future of Sun's Products, but Raised Concerns about NetBeans
Oracle has released an FAQ that describes its plans for the future of popular Sun technologies like GlassFish, NetBeans, MySQL and more. In some cases Oracle's announcement is unclear and raises concerns about product viability.
The announcement makes clear that the Oracle will continue to invest in Sun hardware, in Solaris, SPARC, GlassFish and OpenOffice.


Le mouvement NoSQL divise et intrigue

Le nom NoSQLest apparu courant 2009 pour qualifier un mouvement initié depuis longtemps mais qui a pris une importance et une visibilité particulière ces derniers mois. Il regroupe l'ensemble des projets proposant une solution de persistance de données non relationnelle qui se caractérisent par un design favorisant la scalabilité et la flexibilité. On reconnaît dans ces deux caractéristiques les besoins du Web, dont les grands acteurs que sont Google, Amazon et Facebook ont joué un rôle important en apportant leur propre solution (respectivement BigTable, SimpleDB et Cassandra).

Remettre en question le stockage relationnel exclusif qui s'était imposé presque comme une évidence dans le monde de l'entreprise ne pouvait se faire sans initier de nombreux débats. La dernière intervention en date est celle de Michael Stonebraker qui critique vivement cette initiative en avançant :

  • Le choix du NoSQL comme solution de persistance est en général amené par un besoin de performance et de flexibilité. Ces deux caractéristiques peuvent être assurée par les RDBMS traditionnelle par la mise en place de bonnes pratiques épaulées d'un éventuel sharding
  • Les systèmes NoSQL souffrent eux aussi de certaines des problématiques des RDBMS et ne sont donc pas une solution parfaite
  • L'utilisation de procédures stockées permet d'obtenir la performance voulue dans de nombreuse situations
Ces arguments, assez classiques à l'encontre du NoSQL, sont opposés à ceux mis en avant par Debasish Ghosh, l'auteur du prochain DSLs in action à paraître chez Manning :
  • Le sharding, solution souvent mise en avant pour sauver la scalabilité des RDBMS, est une solution très lourde à mettre en place, qui évolue mal et qui est très intrusive dans la logique métier ; elle est appliquée à des systèmes qui n'ont pas été prévus pour une telle utilisation
  • Le théorème CAP montre que seule une approche différente des RDBMS classiques permet d'obtenir les performances voulues
  • Une coopération intéressante se met en place entre les projets NoSQL afin de permettre des interopérabilités (tel queNeo4j s'appuyant sur Cassandra ou Riak sur CouchDB)
La remise en question apportée par le NoSQL est forcément bénéfique et ne peut amener qu'une innovation. Si le mouvement est encore récent et qu'il doit gagner en maturité, il amènera probablement à se poser plus naturellement la question de la ou des meilleure(s) solution(s) de persistance pour les données d'une application ou d'un système d'information.


JavaFX 1.2.1 is out, fixes binding leaks and performance
Sun just released the first maintenance update for JavaFX 1.2. This release brings mostly a batch of important javafxc fixes, that I dissect in this blog...


Creating Highly-Scalable Components in Java
With multi-core processors becoming main-stream, there is significant pressure on application developers to write correct highlyscalable applications to take advantage of the underlying hardware. Further, legacy applications have to be ported to run on the new architectures.
An efficient way to ensure scalability of applications is to use highly-scalable components to build the applications. For example, in various applications, java.util.concurrent.ConcurrentHashMap can replace a synchronized HashTable and make the application more scalable. Thus, providing a set of highly scalable building blocks that can be directly introduced into applications to introduce parallelism will be very useful.


Practically Groovy: The @Delegate annotation
Exploring the frontiers of duck typing in a statically typed language.
@Delegate is a compile-time annotation that instructs the compiler to push all of the delegate's methods and interfaces up to the outer class.


A Look Inside JBoss Cache
This follow-up article focuses entirely on the brand-spanking-new JBoss Cache 3.0.0 - codenamed Naga, and goes in depth to discuss how our high-performance concurrency model works.

MVCC has landed
Multi-versioned concurrency control - MVCC - was adopted as the default concurrency scheme in the cache. When run in local mode, the most costly part of the cache in terms of memory and CPU cycles is the locking involved in maintaining integrity of shared data. In a clustered mode, this locking is the second most expensive thing, after RPC calls made by the cache instance to remote instances.

Legacy locking schemes
In JBoss Cache 1.x and 2.x, we offered two different locking schemes - an optimistic one and a pessimistic one. Each had their pros and cons, but in the end they were both still costly in terms of performance.
The pessimistic scheme used a lock per tree node. Reader threads would obtain nonexclusive read locks and writer threads would obtain exclusive write locks on these nodes before performing any operations. The locks we used were a custom extension of JDK ReentrantReadWriteLocks, modified to support lock upgrading where within the scope of a transaction, a thread may start off reading a node and then later attempt to write to it.

So how does MVCC help?
MVCC offers non-blocking readers where readers do not block writer threads, providing a high degree of concurrency as well as removing the risk of deadlock. It also is fail-fast, in that writers work sequentially and don't overlap, and if they do time out in acquiring a write lock, it happens very early on in the transaction, when a write occurs rather than when a transaction commits. Finally, MVCC is also memory efficient in that it only maintains 1 copy of state for all readers, and 1 version being modified for the single, sequential writer. Even better, our implementation of MVCC uses no locks at all for reader threads (very significant for a readheavy
system like a cache), and a custom exclusive lock implementation for writers. This
custom lock is completely free of synchronized blocks and uses modern techniques like compare-and-swap and memory fencing using volatile variables to achieve synchronization. All this leads to a very highly performant and scalable locking scheme.


Writing Your Own JUnit Extensions Using @Rule
In the new release (4.7) you have access to a lot of interesting stuff (still in development for some). One that is really interesting is @Rule [1]. This annotation allows you to annotate a public field in your test class, which is of type MethodRule [2]. This binding will intercept test method calls like an AOP framework would do
and redefine the execution, skip it, or do anything else.


Java vs C performance... again...
I just foolishly got caught in a You-Tube discussion on Java vs C performance. Foolish because You-Tube comments are a lousy way to present anything and because it's hard to keep the level of discourse scholarly.
And foolish especially for me because I've had this discussion so many times and it always comes out the same way... so here's my attempt at distilling my arguments into something I can point people the *next* time I get caught in this silly discussion.

Is Java faster than C/C++? The short answer is: it depends.



Ubuntu : Intel® Q6600 quad-core Computer Language Benchmarks Game (Read the FAQ!)
You choose the language implementations for robust Box and Whiskers statistics of program time measurements on the default benchmarks!