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

Aucun commentaire: