vendredi 29 avril 2011

Veille technologique semaine 17

Pour le bulletin de cette semaine, je vous propose les sujet suivants :
  • Les navigateurs web et le "Do Not Track" : il n'y a pas encore de consensus.
  • Un article sur le dette technique des systèmes d'informations
  • Le modèle de compétence de Dreyfus : comment gérer ses connaissances et les faire évoluer.
  • Introduction au langage de requête LINQ avec C#
  • Exemple de langage de requête pour Java : Querydsl
  • Les nouveaux langages pour la JVM : discussion depuis la proposition du langage Ceylon
  • L'outil de qualimétrie Sonar : donner accès simplement à une synthèse des métriques sur du code source. Sept axes sont identifiés : Duplicated code, Coding standards, Unit tests, Complex code, Potential bugs, Comments, Design and architecture.
  • Un petit tutorial sur les types paramétrés : les génériques en Java
  • Les varargs en Java :
  • La sortie de la version 1.8 du langage Groovy avec un exemple pour la programmation par contrat : @Invariant, @Requires and @Ensures

Bonne lecture.


Google et Opera bloquent sur Do Not Track
Le président de la Federal Trade Commission américaine, Jon Leibowitz, s'est ému que Google, contrairement à Mozilla, Microsoft et apparemment Apple, ne se soit pas engagé en faveur de l'initiative "Do Not Track".

Celle-ci permet à l'internaute de spécifier de manière définitive aux sites web s'il accepte ou non que ses informations de navigation soient traitées par les annonceurs afin de recevoir des publicités ciblées ou de connaître ses déplacement entre les sites. Encore faut-il évidemment que les sites récupèrent et acceptent cette demande transmise par le navigateur web (lire aussi Mozilla et Google proposent la fin du tracking).


L'endettement de nos systèmes d'information
Ward Cunningham introduisait en 1992 la métaphore de la dette technique faisant une analogie entre les coûts futurs liés aux choix de conception logicielle et une dette financière.

Pour illustration, l'éditeur CAST Software a publié un rapport qui évalue le montant moyen de la dette technique à 2,82$ par ligne de code. Le sujet de la dette technique n'est pas tant le montant que son échéance – mais date à laquelle il devient nécessaire d'apurer la dette technique – et ses intérêts – surcoûts liés à une conception technique peu flexible.



Le modèle Dreyfus d'acquisition de compétences.
Ce modèle dit que le passage de novice à expert d'un domaine donné passe par cinq étapes.

étape 1: Novice

  • l'activité change sa manière de penser car il acquiert de l'expérience dans un domaine qu'il ne connaît pas, ou peu.
  • il focalise sur le besoin, l'objectif immédiat.
  • l'accomplissement de ses tâches nécessite des recettes, une marche à suivre.
  • il n'a pas d'intuition sur la manière de résoudre les problématiques.

étape 2: Débutant avancé

  • il fait preuve d'indépendance technique et sait chercher l'information nécessaire à l'accomplissement de ses tâches.
  • il sait choisir quelle démarche et technique appliquer selon le contexte.
  • il ne comprends pas ou peu la stratégie globale du système, de l'entreprise; il ne voit généralement pas les liens avec son travail quotidien.

étape 3: Compétent

  • il peut développer et utiliser des modélisations des problématiques et travailler par abstractions.
  • il peut résoudre des problèmes qu'il n'a pas rencontré auparavant.
  • on dit d'eux qu'ils font preuve d'initiative.
  • il ne réfléchit pas ou peu sur ses méthodes de travail, ne rentre pas dans un processus d'amélioration continue.

étape 4: Spécialiste

  • il ressent le besoin de comprendre la vue générale et les détails, la sur-simplification le frustre.
  • il corrige ses erreurs.
  • il apprend par l'expérience des autres, étudie des cas, des projets et prends ce qui peut améliorer son expertise.
  • il comprends et applique des maximes, vérités essentielles "Fait le minimum qui peut fonctionner", "Ne te répète pas", "Teste tout ce qui peut casser", ...
  • il sait utiliser les modèles de conception quand nécessaires (ce ne sont pas des recettes) et les adapter .
  • il utilise les avantages de la réflexion et du retour d'informations qui sont au cœur des méthodes agiles

étape 5: Expert

  • il cherche continuellement des nouvelles méthodes et manières de mieux faire les choses.
  • il travaille par (bonne) intuition.
  • il peut avoir du mal à expliquer ses choix: ils lui semblent "naturels".
  • il distingue les détails futiles de ceux très importants.
  • peu d'experts existent: certainement entre 1 et 5 pourcent de la population.

A noter qu'on peut être expert dans un domaine et totalement novice dans un autre.

Si le novice ne cherche pas à diversifier son expérience (ou ne suit pas de formation), il peut rester novice dans ce domaine quelque soit le nombre d'années d'activité. De même pour passer de débutant à compétent.

Nous tendons à penser que la plupart d'entre nous est au niveau "Compétent". Or il apparaît en pratique que la grande majorité est au stade "Débutant avancé".

Nous nous estimons aisément expert d'un domaine et sûr de nos choix lorsqu'on possède peu de compétences et connaissances de ce domaine. Un novice ne connaît peu ou pas les limites de son savoir. Plus on est expert, plus on doute, on se sent ignorant.



Le modèle d'acquisition de compétences de Dreyfus
Le modèle de Dreyfus n'est pas un modèle théorique mais plus un modèle pragmatique qui fournit une grille de lecture de l'apprentissage de nouvelles compétences. Il permet ainsi de concevoir des cours et supports permettant un meilleur apprentissage de compétences de haut niveau.


Introduction aux requêtes LINQ (C#)
Une requête est une expression qui récupère des données d'une source de données. En général, les requêtes sont exprimées dans un langage de requête spécialisé. Au fil du temps, différents langages ont été développés pour les divers types de sources de données, par exemple, SQL pour les bases de données relationnelles et XQuery pour le XML. Par conséquent, les développeurs ont dû apprendre un nouveau langage de requête pour chaque type de source de données ou format de données qu'ils doivent prendre en charge.

LINQ simplifie cette situation en proposant un modèle cohérent qui permet d'utiliser des données de types de sources et de formats divers. Dans une requête LINQ, vous travaillez toujours avec des objets. Vous utilisez les mêmes modèles de
codage de base pour interroger et transformer des données en documents XML, en bases de données SQL, en groupes de données ADO.NET, en collections .NET et en tout autre format pour lesquels un fournisseur LINQ est disponible.


Querydsl
Querydsl is a framework which enables the construction of type-safe SQL-like queries for multiple
backends including JPA, JDO and SQL in Java.
Instead of writing queries as inline strings or externalizing them into XML files they are constructed via
a fluent API.
Code completion in IDE (all properties, methods and operations can be expanded in your favorite Java IDE)
Almost no syntactically invalid queries allowed (type-safe on all levels)
Domain types and properties can be referenced safely (no Strings involved!)
Adopts better to refactoring changes in domain types
Incremental query definition is easier


Querydsl Reference Documentation


Creating a new JVM language
Last week's announcement of Ceylon brought the focus on JVM-based languages. Ceylon isn' the first JVM based language; nor will it be the last. But the general case of JVM based languages was proposed in Bruce Tate's Beyond Java in 2005, and has been a focus of the Java platform for a significant time, as the list of JVM languages on Wikipedia can attest to. Bruce noted that community is the key to success:


Sonar - Monitor Project and Code Quality
What is Sonar ?
Sonar is an open source Platform used by development teams to manage source
code quality. Sonar has been developed with a main objective in mind: make code
quality management accessible to everyone with minimal effort.
As such, Sonar provides code analyzers, reporting tools, defects hunting modules
and TimeMachine as core functionality. But it also embarks a plugin mechanism
enabling the community to extend the functionality (more than 35 plugins
available), making Sonar the one-stop-shop for source code quality by addressing
not only developers but also managers needs.
In terms of languages, Sonar support analysis of Java in the core, but also of Flex
(ActionScript 3), PHP, PL/SQL and Cobol through plugins (Open Source or
commercial) as the reporting engine is language agnostic.


Java Generics Tutorial
Generics is a Java feature that was introduced with Java SE 5.0 and, few years after its release, I swear that every Java programmer out there not only heard about it, but used it.
There are plenty of both free and commercial resources about Java generics and the best sources I used are:
• The Java Tutorial.
• Java Generics and Collections, by Maurice Naftalin and Philip Wadler.
• Effective Java (second edition), by Joshua Bloch.

This blog post is made up of the following parts:
Part I - The Basics
Part II - Subtyping
Part III - Wildcards



Java Varargs Corner Case
Recently I have been playing with the Omniscient Debugger (or ODB), which is pretty cool in its own right, but in the course of playing with the code I ran into some vararg behaviour which was unexpected.
Varargs, or variable arguments were introduced in Java 5 to support some features available in other languages. The basic idea is that a method doesn't need a defined number of parameters and can accept any number of parameters made up of fixed and variable parameters provided:
  • The variable parameters all have the same type
  • There are zero or variable parameters
  • There is only one set of variable parameter
  • The variable parameters come last in the parameters

Welcome to GContracts – A Programming by Contract Extension for Groovy!
This project aims to provide contract annotations that support the specification of classinvariants, pre- and post-conditions on Groovy classes and interfaces. In addition, GContracts supports postconditions with the old and result variable and inheritance of all assertion types.
Applying @Invariant, @Requires and @Ensures
With GContracts in your class-path, contracts can be applied on a Groovy class or interface by using one of the assertions found in package org.gcontracts.annotations.

vendredi 22 avril 2011

Veille technologique semaine 16

Pour le bulletin de cette semaine, je vous propose les sujets suivants :
  • Oracle libère le nom "OpenOffice" et le remet à la communauté, et arrête le support commercial correspondant. Oracle continu à contribuer au projet.
  • La zone Asie Pacifique a épuisée ses adresses IPV4.
  • Google a converti les vidéos YouTube au format WebM en remplacement du H264 : sur le chemin du HTML5.
  • Sortie de la version 7 de l'outil NetBeans avec le support du JDK 7 et de HTML5.
  • Le troisième article au sujet de la modélisation UML : les cas d'utilisations.
  • Une page de wikipedia sur le diagramme de classe UML : les attributs, les associations, les agrégations et les compositions : explication de toute ces différences.
  • Un résumé du pattern Entity, Control et Boundary.
  • Une synthèse sur le nouveau langage de programmation Ceylon, proposé par la société  Red Hat.
  • Un exemple d'utilisation de la classe java.util.Objects du JDK 7.
  • Les tests de couverture de code : il ne faut pas se tromper d'objectif.
Bonne lecture.


Oracle Offloads Open Office
Oracle has announced that OpenOffice.org is to be a community project and to cease production of the commercially supported version. From the press release:
 
"Given the breadth of interest in free personal productivity applications and the rapid evolution of personal computing technologies, we believe the OpenOffice.org project would be best managed by an organization focused on serving that broad constituency on a non-commercial basis," said Edward Screven, Oracle's Chief Corporate Architect. "We intend to begin working immediately with community members to further the continued success of Open Office. Oracle will continue to strongly support the adoption of open standards-based document formats, such as the Open Document Format (ODF)."


No more addresses: Asia-Pacific region IPv4 well runs dry
The Asia-Pacific Network Information Centre (APNIC), which is the organization responsible for distributing IP addresses in most of Asia, Australia, and the Pacific, announced that on April 15, it reached its final /8 block of IPv4
addresses. This cryptic announcement means that APNIC's supply of IPv4 addresses has been exhausted, and since the global pool of IPv4 addresses was previously exhausted, IPv4 addresses are no longer available in the APNIC region as they were before—basically, "to each according to his needs."



WebM, Google met les bouchées doubles
Hier, YouTube a annoncé sur son blog officiel avoir déjà converti en WebM 99% des vidéos les plus regardées. Ce chiffre représente 30% du stock total. Étant donnée la quantité de vidéos uploadées chaque jour (une durée équivalente à 6 ans est envoyée quotidiennement !), c'est déjà un chiffre impressionnant.
Derrière cet événement, se cache en fait un épisode de la guerre des navigateurs que se livrent Google, Mozilla, Microsoft et Apple en plus de quelques autres moins importants en nombre d'utilisateurs. Le champ de bataille, ce sont les codecs vidéo et audio pour le HTML 5.


Petit rappel : devant l'absence de consensus à propos des codecs vidéo et audio pour les spécifications du HTML5, en juin 2009, le W3C (Worldwide Web Consortium, censé mettre en place les standards du web)
avait choisi de ne pas choisir. Ce non-choix impliquait la guerre des formats à laquelle on assiste actuellement, jusqu'à ce qu'un standard s'impose de fait.
Le WebM est le format que Google, Mozilla et Opera ont créé, il est sous licence BSD et donc complètement libre.
Constitué du codec vidéo VP8 et du codec audio Vorvis, le tout dans un container basé sur Matroska. Il est soutenu par de grands noms comme Adobe, Oracle, Skype et beaucoup d'autres.
L'opposant principal est le H.264 qui est une variante de MPEG4 (part 10) aussi appelé H.264 AVC et dont le codec vidéo est le x264. Il est soutenu par Apple et Microsoft.

Aujourd'hui, beaucoup considèrent que la qualité vidéo est à l'avantage du H.264, mais le développement du WebM continue, et l'on peut dire à sa décharge qu'il a commencé plus tard que son opposant.
En mars dernier Google avait sorti un plug-in pour compatibilité du WebM avec Internet Explorer. C'était déjà une réponse à Microsoft qui avait sorti un plug-in pour lire le H.264 sur Chrome.
Un standard n'est pas prêt de faire surface, et ces rivalités risquent de durer encore quelques années.




Oracle Have Released NetBeans 7.0 with Support for the JDK7 Developer Preview and HTML5
With today's release of version 7.0, NetBeans becomes the first open source IDE to support JDK 7, providing both syntax support for the new language features, and code inspectors to help update existing code bases to take advantage of the new capabilities of the JDK platform. The specific JDK 7 features are:

  • 1. Strings in switch
  • 2. Diamond operator (new LinkedList<>())
  • 3. java.util.Objects
  • 4. JSR 292 (Exotic identifiers)
  • 5. New integer literals
  • 6. Multicatch
  • 7. Automatic resource management
Around 50% of NetBeans users are building JavaSE applications, according to Mills, the visual editor tools for Swing continue to receive attention. NetBeans 7 adds a new visual editor, GridBag Customizer, to the tool.


A propos des cas d'utilisation
Quelle drôle d'espèce UMLienne que ces cas d'utilisation ! Avez-vous déjà essayé d'en dompter un ? Difficile à apprivoiser que cette bête là, vous ne trouvez pas ?
En fait, c'est comme tout, comme une passoire ; une fois qu'on a compris que ça servait à égoutter et pas comme couvre-chef, on arrive à s'en servir sans avoir l'air trop ridicule (car on est ridicule avec une passoire sur la tête, non ?).
Bon alors, ça sert à quoi les cas d'utilisation ?


Class diagram
In software engineering, a class diagram in the Unified Modeling Language (UML) is a type of static structure diagram that describes the structure of a system by showing the system's classes, their attributes, operations or methods and the relationships between the classes.

The class diagram is the main building block in object oriented modelling. It is used both for general conceptual modelling of the systematics of the application, and for detailed modelling translating the models into programming code. The classes in a class diagram represent both the main objects and or interactions in the application and the objects to be programmed. In the class diagram these classes are represented with boxes which contain three parts.


The Entity-Control-Boundary Pattern
The Entity-Control-Boundary Pattern (ECB) is a variation of the Model-View-Controller Pattern.
Entity, Control, and Boundary are class stereotypes, but UML has some special icons to represent them.
  • Entities are objects representing system data: Customer, Transaction, Cart, etc.
  • Controllers are objects that mediate between boundaries and entities.
  • Boundaries are objects that interface with system actors: user interfaces, gateways, proxies, etc.


Red Hat prépare Ceylon, un nouveau langage pour la JVM
Le « buzz » de la semaine c'est bien sûr la diffusion d'une présentation (et de sa deuxième partie) que Gavin King a faite à Pékin lors de la QCon, où il révèle qu'il travaille pour Red Hat à un nouveau langage pour la JVM : Ceylon. Bien que Gavin ne prévoyait pas de parler officiellement du projet de son équipe aussi tôt, il a confirmé la nouvelle ; d'abord sur son blog, puis lors d'une interview pour InfoQ.
Alors de quoi s'agit-il ? La première chose à noter est que Gavin King se défend de vouloir créer le langage du futur pour la JVM ou un « Java Killer ». Il se dit d'ailleurs « fan apologétique » de Java et propose donc Ceylon comme un langage fortement inspiré de celui-ci, sans les frustrations qu'il occasionne. Les principales frustrations étant selon lui.
 


java.util.Objects class JDK 7
With new release of JDK 7, a lot of really useful features has been developed, some of them I have write off before in this blog (JSR 203 and JSR 166y). In this post I am going to talk about one new small enhancement. This new feature is the
addition of java.util.Objects class. This class is similar to java.util.Arrays or java.util.Collections but for objects instead of arrays or collections. This class offers nine methods grouped by four groups: equality, hashing, nullables, and toString. Let's examine all of them.


100% Code Coverage!
The basis of this article is a sequences of tweets betwen me and M. Robert Martin, on April 8th 2011:
  • 1. If you have 100% coverage you don't know if your system works, but you _do_ know that every line you wrote does what you thought it should.
  • 2. @unclebobmartin : 100% code coverage doesn't achieve anything, save making you safer while nothing could be further from the truth.
  • 3. @nicolas_frankel : 100% code coverage isn't an achievement, it!s a minimum requirement. If you write a line of code, you!d better test it.
  • 4. @unclebobmartin : I can get 100% code coverage and test nothing because if have no assert. Stop making coverage a goal, it's only a way!

vendredi 15 avril 2011

Veille technologique semaine 15

Pour le bulletin de cette semaine, je vous propose les sujets suivants :
  • Microsoft a fait une démonstration de Windows 8 sur processeur ARM.
  • Les mémoires flash gravées à 20nm annoncées par Intel.
  • Un nouveau langage de programmation (un de plus) : Ceylon. Le compilateur de ce langage génère du byte code JVM. Depuis 1998, les runtimes JVM (Java) et CLR (DotNet) sont les runtimes cibles de différents langages, il est plus facile de faire un nouveau langage car il n'est plus nécessaire de faire les runtimes. Il faut juste faire la théorie du langage et le compilateur correspondant (plus quelques API de base). La conséquence est que l'on va avoir un nouveau langage par ans. Bientôt chacun son langage ? (chacun son DSL ?).
  • La stratégie d'Oracle sur la plateforme Java : par Oracle : 1,5 milliards de dollars de R&D sur la plate-forme Java.
  • La préparation de JEE7 (Java Enterprise version 7) prévue pour 2012.
  • Quels est la mission du développeur de logiciel : Rentability, quality and maintainability.
  • Après un premier article sur la nécessité de modéliser un système logiciel, le deuxième article explique la différence entre une donnée, un traitement et les objets. C'est très important de bien séparer ces concepts pour bien construire une architecture logicielle qui sépare correctement les responsabilités de chaque partie. A lire attentivement. Je suis intéressé par vos remarques.
  • Une série d'articles au sujet de Protocole Buffer de Google qui est une technologie qui permet d'échanger des données entre langages différents, avec gestion du changement de version. Cet encodage binaire est 20 à 100 fois plus rapide que le XML des Web Services (on s'en serait douté). Google n'a pas souhaité faire une usine à gaz (principe KISS :  Keep It Short and Simple).
  • La classe JLayer du JDK 7 : pour décorer vos composants Swing.
bonne lecture.

Microsoft a un Windows tournant sur les processeurs ARM
On savait déjà que Windows 8 serait aussi développé pour fonctionner avec les processeurs ARM. Microsoft en serait plus qu'à l'état de projet. Ils auraient une version de Windows capable de tourner sur un processeur ARM cadencé à 1 GHz.
Visiblement, la société n'en peut plus de dépendre autant d'Intel qui a tant de mal à faire autre chose qu'une pâle figuration dans le monde des tablettes, même s'ils travaillent très dur à fabriquer un processeur X86 ayant un rapport consommation puissance aussi favorable que les puces d'ARM.
C'est donc la fin d'un dogme pour Windows. Mac OS a tourné sur des processeurs 68000, Power PC et Intel, Linux a vu encore plus large, Windows était encore le seul aussi ancré dans deux architectures : x86 et Alpha (windows NT).


 
Intel et Micron annoncent de la mémoire Flash NAND gravée en 20 nm
Intel et Micron ont dévoilé une technologie de production permettant de fabriquer de la mémoire Flash NAND MLC 8 Go gravée en 20 nm, qui pourra trouver sa place dans de futurs smartphones et tablettes, ou dans des disques SSD.


Ceylon JVM Language
Given as a talk at QCon Beijing, Gavin King presented the Ceylon programming language, which he has been working on at Red Hat for the last couple of years. The news was picked up via twitter, and now a number of sites are reporting it, including Lambda the Ultimate, Slashdot and Reddit and YCombinator Hacker News. As a result, Gavin has posted a a post specifically on Ceylon with references to the presentations that caused the stir. He also makes clear that it was never designed as a Java killer:


Some insights from Oracle on the their plans for Java
Henrik is Oracle's director of Java platform strategy - and an official spokesperson
from Oracle, able to pronounce on behalf of Oracle regarding Java. Henrik was able to give us the following insights (some of which you may have heard before):


Jerome Dochez Discusses Early Plans for Java EE 7, Planned to Ship in 2012
One of the main themes for Java EE 7 is the Cloud. How does running an application on the Cloud differ from running it on an existing Java EE container?


What is the mission of any software developer?
In software development there are only three measurable areas that encapsulate all that is important in an application: Rentability, quality and maintainability.

From these metrics, is important to understand two things:
  • Rentability is the most important metric. No rentability = failure.
  • Quality and maintainability are only important because they have an impact in the rentability. They basically represent the cost of maintaining and fixing the application.


Objets, données, traitements et modélisation
Ah l'objet ! C'est super !

La réunification des données et des traitements, le tout en un. Fini les données d'un côté et les traitements de l'autre, « has been » tout ça, vive l'avènement de l'objet et de la modélisation objet. Moi, Monsieur, je pense Objet, je modélise Objet, je programme Objet, je dors Objet, je mange Objet, je m'habille Objet, je bois Objet, je… Euh, j'y vais un peu fort là !

On constate souvent ce genre de discours, sauf les quelques derniers mots peut être, et cette opposition qui est faite entre l'objet et le légendaire couple données-traitements. On fait d'ailleurs souvent ce raccourci pour définir ce qu'est un objet : « c'est comme une donnée avec les traitements en plus ». Sommes nous vraiment sûrs que cette explication ou cette opposition soient justes ?
Maîtrisons-nous réellement la portée de ce raccourci : « c'est comme une donnée avec les traitements en plus » ? La fusion complète des données et des traitements est-elle réelle en objet ?
Essayons donc de voir quelle est la vraie nature de l'Objet et en quoi l'approche objet a apporté de la nouveauté dans nos pratiques d'informaticiens (et ciennes bien entendu !) Qu'est ce qu'un objet ?


Protocol Buffers, la solution de Google pour gérer la sérialisation de structure de données
Le Journal Du Net a annoncé que Google souhaite offrir une alternative à XML.
Pour gérer l'échange de données d'une application à une autre (avec des langages d'implémentation différents), le format XML s'impose de raison pour structurer les messages échangés. Après avoir défini une structure pivot pour l'échange de message, chaque application implémente un parseur afin de sérialiser et desérialiser les messages entrants et sortants.
Google met donc à disposition Protocol Buffers, qu'ils utilisent en interne (ils ont plusieurs milliers (12 183) de descripteurs .proto dans leur base de code), en fournissant une alternative plus performante et plus simple que la sérialisation XML. Comme le XML, Protocol Buffers a pour ambition d'être portable d'une plateforme à une autre, et d'un langage à un autre (aujourd'hui les langages supportés sont C++, Java et Python).
Protocol Buffers fonctionne de la manière suivante :
  • On réalise un fichier de grammaire .proto
  • On génère la structure de données à partir de ce fichier de grammaire, dans le langage de destination souhaitée : C++, Java ou Python
  • On génère le parser à partir de ce fichier de grammaire, dans le langage de destination souhaitée : C++, Java ou Python
Tutorial Java pour l'utilisation de Protocol Buffers
Le mécanisme est légèrement différent d'une solution basée sur XML. En effet, en XML, il n'y a pas la deuxième étape : la génération de la structure de données. Cela permet à Protocol Buffers d'avoir des messages plus petits qu'un fichier XML (en terme de taille en octets). Cependant, les messages sont moins lisibles pour l'homme, mais un outil est mis à disposition pour pallier à ce frein (si c'est un frein).
Les objectifs affichés de Google avec Protocol Buffers sont d'avoir une solution de sérialisation/desérialisation de message :
  • 20 à 100 fois plus rapide qu'avec des fichiers XML
  • Avoir du code plus simple et plus facile à maintenir que des solutions autour d'XML (parser XML, …)
  • Il est possible de mettre à jour la structure de données sans casser les applications qui ont été compilées sur une version plus ancienne
Site officiel de Protocol Buffers
Annonce sur le blog Google Open Source


Protocol Buffers: Google's Data Interchange Format
At Google, our mission is organizing all of the world's information. We use literally thousands of different data formats to represent networked messages between servers, index records in repositories, geospatial datasets, and more. Most of these formats are structured, not flat. This raises an important question: How do we encode it all?



Protocol Buffers
Welcome to the developer documentation for protocol buffers – a language-neutral, platform-neutral, extensible way of serializing structured data for use in communications protocols, data storage, and more.
This documentation is aimed at Java, C++, or Python developers who want to use protocol buffers in their applications.
This overview introduces protocol buffers and tells you what you need to do to get started – you can then go on to follow the tutorials or delve deeper into protocol buffer encoding. API reference documentation is also provided for all three languages, as well as language and style guides for writing .proto files.

What are protocol buffers?
Protocol buffers are a flexible, efficient, automated mechanism for serializing structured data – think XML, but smaller,  faster, and simpler. You define how you want your data to be structured once, then you can use special generated source code to easily write and read your structured data to and from a variety of data streams and using a variety of languages. You can even update your data structure without breaking deployed programs that are compiled against the "old" format.


How to Decorate Components with JLayer
This section was updated to reflect features and conventions of the upcoming Java SE 7 release. You can download the current JDK7 snapshot from java.net.
The JLayer class is a flexible and powerful decorator for Swing components. It enables you to draw on components and respond to component events without modifying the underlying component directly.
The JLayer class in Java SE 7 is similar in spirit to the JXLayer project at java.net. The JLayer class was initially based on the JXLayer project, but its API evolved separately.
This document describes examples that show the power of the JLayer class. Full source code is available.

vendredi 8 avril 2011

Veille technologique semaine 14

Pour le bulletin de cette semaine, je vous propose les sujets suivants :
  • Microsoft souhaite accélérer le déploiement de IE 9
  • La vision de la plate-forme Java par Oracle. 14 millions de développeurs connaissent Java et 9 millions l'utilise tous les jours. Oracle a 20 000 développeurs Java, et développe tous en Java, sauf de cœur de la base de données.
  • Un extrait d'un livre sur Java 7
  • Oracle propose à la communauté Java, de rassembler les idées pour le JDK 8.
  • Une proposition de Joshua Bloch, pour le JDK 8, avec les Collection Literals.
  • Un article sur la dette technique : c'est quoi ?
  • Pourquoi modéliser : une explication.
  • Une interview de Jonas Bonér, concepteur du framework Akka, en langage scala
  • Un article au sujet de la gestion de la mémoire.

Bonne lecture.


Microsoft accélère le déploiement d'Internet Explorer 9
Virage à 180° pour Microsoft qui a décidé de revoir de fond en comble sa politique de déploiement d'Internet Explorer 9.


Oracle Senior VP Steve Harris on Oracle's Vision of Java
"If Java Is Not Successful, We Will Fail"
According to the Tiobe Community Programming Community Index, Java remains the world's most popular programming language.

He pointed to the estimated 14 million Java developers in the world with some nine million using Java regularly during the work day.


Java 7 and Polyglot Programming on the JVM
Part 1: Developing with Java 7
  • 1 Introducing Java 7
  • 2 New I/O

Part 2: Vital techniques
  • 3 Dependency injection
  • 4 Modern concurrency
  • 5 Understanding performance tuning

Part 3: Polyglot programming on the JVM
  • 6 Introducing non-Java languages on the JVM
  • 7 Groovy, Java's flexible friend
  • 8 Scala, power and economy
  • 9 Clojure, learning safer programming

Part 4: Crafting the polyglot project
  • 10 Test-driven development
  • 11 Build and continuous integration
  • 12 Rapid web development
  • 13 Beyond ground level

Oracle Seeking Community Input for JDK 8
With Java 7 now feature complete, Oracle is starting to shift some attention to JDK 8, and Mark Reinhold, chief architect for the Java platform group, is asking for input from the Java community.
Oracle has 20,000 Java developers working for the company, everything except the core database is written in Java. If that were to decline... that would be a significant re-investment


Collection Literals
FEATURE SUMMARY: Add support for immutable List, Set, and Map literals, with a syntax similar to that of array initializers.
MAJOR ADVANTAGE: Reduces verbosity and adds clarity when creating small lists, sets, and maps and whose contents are known at compile time. This feature is well-liked in the many languages that support it (e.g., Perl, Python).
MAJOR DISADVANTAGE: The facility can be abused to simulate named parameters, resulting in loss of type safety. Hopefully people won't do this.


TechnicalDebt
In this metaphor, doing things the quick and dirty way sets us up with a technical debt, which is similar to a financial debt. Like a financial debt, the technical debt incurs interest payments, which come in the form of the extra effort that we have to do in future development because of the quick and dirty design choice. We can choose to continue paying the interest, or we can pay down the principal by refactoring the quick and dirty design into the better design. Although it costs to pay down the principal, we gain by reduced interest payments in the future.


Pourquoi modéliser ?
Quel que soit le langage de modélisation ou la méthode utilisé, vous vous êtes peut être demandé pourquoi réaliser des modèles, à quoi cela peut-il vraiment servir ? Vous avez peut être aussi travaillé à partir de modèles réalisés par les autres et vous n'avez pas vraiment saisie l'intérêt. Quelle que soit la raison pour laquelle vous avez eu envie de lire cet article, nous allons tenter de vous convaincre que la modélisation, Merise ou UML, peut être utile à plusieurs points de vue.
Lire l'article complet : Pourquoi_modeliser.pdf (70 Ko)



Talking about Akka, Scala and life with Jonas Bonér
This time we will interview Jonas Bonér. Jonas is a Java Champion, an owner of Scalable Solutions and an author of the Akka framework. He specializes in distributed computing, concurrency and knows a lot about many programming languages, including Scala, Clojure, Erlang and of course Java.


La gestion de la mémoire

Un gestionnaire de mémoire, c'est quoi ?

D'abord, c'est un très mauvais nom, qui me rappelle tout à coup que j'avais déjà prévu depuis longtemps d'écrire un billet sur la notion même de gestionnaire. Mais laissons pour l'instant de coté ce débat, et concentrons nous sur les fonctionnalités généralement offerte par un tel sous-système.

En premier lieu, un gestionnaire de mémoire a pour but de nous donner accès à la mémoire de notre système. Cette fonctionnalité suppose l'existence de deux opérations distinctes :

  • Une opération permettant au programme client d'obtenir un bloc contigu en mémoire. Cette opération est communément appelée allocation ou réservation de mémoire. La bloc de mémoire obtenu via cette opération est dit alloué. 
  • Une opération permettant au programme client de signifier qu'il n'a plus besoin d'un bloc de mémoire particulier - c'est la libération, ou la désallocation. Un bloc de mémoire auquel on applique cette opération est dit libre.

Un système qui propose ses deux fonctionnalités seules est un système très simple du point de vue de la gestion de la mémoire ; la plupart du temps, ce type de système est utilisé à bas niveau, ou via des librairies dans les langages dit "système" (dont le C est un exemple reconnu ; mais on peut aussi considérer le langage Pascal et beaucoup d'autres langages aux fonctionnalités similaires).

Où un problème et sa solution se précisent ...


vendredi 1 avril 2011

veille technologique semiane 13

Pour le bulletin de cette semaine, je vous propose les sujets suivants :
  • Un extrait d'une thèse au sujet du développement à base de composants CBSE : Components Based Software Engineering. Pourquoi la conception objet n'est pas suffisante pour d'écrire l'architecture logicielle d'un système.
  • La mise à jour de la norme C++ est prévue d'ici la fin de l'année 2011 (initialement prévue pour 200x)
  • La fonction try-with-resources du JDK 7 utilisée pour les verrous : un exemple
  • Evolution de la technologie OSGi en version 4.3 avec l'intégration des types paramétrés (Générique du JDK 5).
  • La version 2.9 du langage scala avec les collections concurrentes, ...
  • Le détail de la mise à jour du tutorial Java avec les compléments du JDK 7
  • Le projet VMKit : pour faire des machines virtuelles Java ou DotNet.
  • Le pattern MVVM : le pattern des IHM Model View ViewModel utilisé par le framework de Microsoft WPF (Window Presentation Framework)
  • Les accès au système de fichier par le JDK 7
Bonne lecture.

Component Based Development
Les limites du tout-objet
Même si la technologie objet a apporté de grands bouleversements dans le domaine informatique dans les années 1990, celle-ci n’est pas suffisante pour répondre aux besoins devenus de plus en plus complexes. La réutilisabilité des objets est limitée à cause de certains problèmes liés au paradigme objet, comme l’anomalie de l’héritage dans les langages concurrents ou encore le problème de l’encapsulation des aspects transversaux comme la gestion de la répartition, la persistance, la tolérance aux défaillances, etc.
  • Pourquoi des composants ?
  • Naissance du tout-objet
  • Les limites du tout-objet
  • Après la technologie objet
  • Qu’est-ce qu’un composant ?
  • Les interfaces du composant
  • L’implantation du composant
  • Les différentes abstractions d’un composant

ISO finalizes C++ update
C++ 2011, in development for eight years, may be released by year's end.
The widely used C++ programming language is about to be updated, as the ISO steering committee for the language has approved the final draft specifying its next version.
The ISO/IEC Information Technology Task Force (ITTF) will review the steering committee's Final Draft International Standard (FDIS) will review and, barring any complications, publish the draft later this year. It will be known as C++ 2011.


Project Coin: the try-with-resources lock support debate
If you have recently been following Project Coin’s mailing list , you will have spotted an interesting discussion regarding the inclusion of lock management inside the scope of a try-with-resources (TWR) code block.

The Initial Idea
The idea was initiated by Gernot Neppert who proposed a class java.util.concurrent.AutoLockable which would implement AutoCloseable, and therefore be eligible for usage with TWR:


OSGi 4.3 brings some Generics and Capabilities
At EclipseCon 2011, the next release of the core OSGi platform were announced and made available as a public final draft, with the released document happening in the near future. BJ Hargrave gave a presentation on what's new in OSGi 4.3, which sums up the key differences between it and previous releases.


Scala 2.9 est sur les rails
La première release candidate de la version 2.9 de Scala vient d’être annoncée.

Cette nouvelle version arrive après une petite année de développement et apporte un certain nombre d’évolutions dont :

le support des collections parallèles dont nous vous parlions à l’occasion de la venue de Martin Odersky au PSUG. Pour rappel, l’idée des collections parallèles est de tirer parti des architectures multi coeurs pour traiter les éléments d’une collection (filtrage, map, regroupements …) l’apparition des blocs try-catch-finally génériques permettant de définir des handlers réutilisables pour traiter vos exceptions (plus de détails ici), l’amélioration de la console Scala, l’ajout du trait App qui a pour objectif de remplacer Application. Ce nouveau trait permet entre autre de récupérer les arguments passés au lancement de votre application, l’extension de l’API collections, avec par exemple les méthodes minBy and maxBy qui sont un raccourci à la composition des fonctions map et min (ou max) le support de l’annotation @strictfp utilisé pour le calcul en virgules flottantes.
Outre ces différentes évolutions, cette nouvelle version apporte un grand nombre de corrections de bugs et d’améliorations de performances.
Une description plus exhaustive des nouveautés de cette version est disponible ici.

Et comme une bonne nouvelle n’arrive jamais seule, Miles Sabin nous annonce la sortie de la première bêta du plugin Scala IDE 2.0 pour Eclipse. La grande nouveauté de cette version est qu’elle est en partie développée par Scala Solutions, la société fondée parMartin Odersky.

Cette version 2 du plugin Scala promet une amélioration sensible de la stabilité, des performances et de nouvelles fonctionnalités. Elle apporte notamment une utilisation confortable de la completion, de la vérification de type en temps réel (l’inférence de type c’est génial, mais ça demande beaucoup de travail au compilateur) et de la navigation entre les classes sur de gros projets. Les utilisateurs d’Eclipse pour développer en Scala apprécieront la bonne nouvelle !


St Patrick's Day Release of Java Tutorial

We have recently released two updates of the Java Tutorial.
The February 21st update was designed to coincide with the JDK7 Developer Preview Release. The tutorial was updated again on St Patrick's Day, March 17th. The updated content for both releases includes the following features:



VMKit: a Substrate for Managed Runtime Environments

Abstract
Managed Runtime Environments (MREs), such as the JVM and the CLI, form an attractive environment for program execution, by providing portability and safety, via the use of a bytecode language and automatic memory management, as well as good performance, via just-in-time (JIT) compilation. Nevertheless, developing a fully featured MRE, including e.g. a garbage collector and JIT compiler, is a herculean task. As a result, new languages cannot easily take advantage of the benefits of MREs, and it is difficult to experiment with extensions of existing MRE based languages.

This paper describes and evaluates VMKit, a first attempt to build a common substrate that eases the development of high-level MREs. We have successfully used VMKit to build two MREs: a Java Virtual Machine and a Common Language Runtime. We provide an extensive study of the lessons learned in developing this infrastructure, and assess the ease of implementing new MREs or MRE extensions and the resulting performance. In particular, it took one of the authors only one month to develop a Common Language Runtime using VMKit. VMKit furthermore has performance comparable to the well established open source MREs Cacao, Apache Harmony and Mono, and is 1.2 to 3 times slower than JikesRVM on most of the DaCapo benchmarks.


Behavior Driven Development using MVVM pattern and GreenPepper tests

MVVM is a quite mature design pattern one can use with the microsoft WPF framework, or with Silverlight. You’ll find a lot of literature and tools on the web to start a new development with this pattern. In this article, we show how MVVM can be implemented for a quite large application, and the value it brings in a Behavior Driven Development approach.


How to Traverse a File Tree in NIO.2 and Java 7 (JDK 7)
JDK 7 and NIO.2 brings new and great I/O features – many of them are related with file system and files. Based on these features I tried to develop a simple Search File application.
The idea is to provide a file name and the application will detect all system roots and search for that file – it is also a good idea to specify a starting folder with a few intuitive modifications.

vendredi 25 mars 2011

Veille technologique semaine 12

Pour le bulletin de cette semaine, je vous propose les sujet suivants :
  • une mise à jour du tutorial Java est sortie le 17 mars 2011 avec déjà les évolutions du JDK 7
  • Un article au sujet de l'agilité et la contractualisation
  • La loi de Conway : comment une organisation qui construit un système peut finir par le concevoir comme le reflet de sa propre structure.
  • Deux articles sur l'architecture logicielle : un terme qui n'est pas strictement défini.
  • Le produit EHCache qui propose un système de requête sur des objets en Java.
  • Les quatre règles minimum pour écrire du code.
Bonne lecture.


What's and What's Old? The History of  the Tutorial
17 March 2011


Travaillons ensemble à votre contractualisation Agile
L'Agile est aujourd'hui un outil puissant d'amélioration de la qualité des produits et de la satisfaction des acteurs, utilisateurs comme artisans du système d'information. Si la méthode commence à être connue, sa mise en oeuvre peut néanmoins se heurter à des difficultés, notamment sur le volet contractuel.

Ainsi, dans les organisations où les pratiques d'achats reposent sur une définition exhaustive des besoins (i.e. cahier des charges) et une obligation de résultat portant sur un périmètre figé et qui ne peut évoluer qu'à l'aide d'avenants, il est souvent difficile voire impossible de concilier ces pratiques avec les
principes fondamentaux de l'Agile à savoir : autoriser le changement, affiner et spécifier les fonctionnalités au fil de l'avancement du projet pour répondre mieux aux besoins des utilisateurs. Alors que faire ?


The Conway's Law
This concept is known as Conway's Law, named after Mel Conway, who published a paper called "How Do Committees Invent?". Fred Brooks cited Conway's paper in his classic "The Mythical Man Month", and invented the name "Conway's Law". Here's the definition from Conway's own website (which also has the original paper in full):

Any organization that designs a system will inevitably produce a design whose structure is a copy of the organization's communication structure.

ConwaysLaw appears in MythicalManMonth, citing an earlier article by Conway from Datamation.


Conway's Law

Over the years I've heard a number of creative derivations of ConwaysLaw, including
  • The architecture of a system is a copy of the architecture of the organization
  • The structure of a system is determined by the structure of the team.
  • To understand the team, look at the software they're producing. If it's slow and bloated, the team is slow and bloated. If it's lean and quick, the team is lean and quick.
  • More precisely, The structure of a system reflects the .status and power relationships of the people and organizations involved.

Conway's Law and the Impact to Product Development
Think about your product and it’s strengths and weaknesses. Can these strengths and weaknesses be mapped to the strengths and weaknesses of the communication paths in your organization? Component-based teams and human relationships are at the core of this idea.



What is Software Architecture?
It's what software architects do / create / make! :-)
But still . . . . we've asked probably the hardest question in the world of software development.



What is a software architecture?
Architecture is the first of a four-part series on "architecting" in general. The author begins by defining the discipline's key terms and goes on to explore what a well-designed architecture contributes to the environment in which it is deployed.


Ehcache: Distributed Cache or NoSQL Store?
Is Ehcache a NoSQL store? No, I would not characterise it as that, but I have seen it used for some NoSQL use cases. In these situations it compared very well — with higher performance and more flexible consistency than the well-known NoSQL stores. Let me explain.
Ehcache is the de facto open source cache for Java. It is used to boost performance, offload databases and simplify scalability. Backed by the Terracotta Server Array, Ehcache becomes a linearly scalable distributed cache. It is a schema-less, key-value, Java-based distributed cache. It provides flexible
consistency control, data durability, and with the release of Ehcache 2.4, search by key, value and
attribute indexes.


Clean Code: Four Simple Design Rules – Obligatory Read
Posted by theholyjava on February 14, 2011 consider the Clean Code book to be obligatory for every programmer. And if you currently haven't the time to read it all at once then you should read – and take deep into your heart at least the 12th chapter Emergence by Jeff Langr, which introduces Kent Beck's Four Simple Design Rules and explains thoroughly what they mean and why they're so important. The rules, in the order of importance, are:


vendredi 18 mars 2011

Veille technologique semaine 11

Pour le bulletin de cette semaine, je vous propose les sujet suivants :
  • Microsoft propose la version 9 du navigateur Internet Explorer : compatible HTML 5 et performances sont au rendez vous. Pour Windows Vista ou 7 uniquement.
  • Le standard Java Enterprise Edition 7 (JEE7) est ouvert : objectif cloud et HTML5.
  • Un IDE (Intégrated Development Environment) dans un navigateur web : le Cloud IDE
  • JavaFX 2.0 : interview de l'architecte chez Oracle. Version publique pour mi-2011.
  • Une série d'article pour essayer de préciser la différence entre l'analyse et la conception (design) dans le logiciel : il est très important de séparer correctement la phase d'analyse et les concepts correspondants, et la phase de conception et ses concepts. L'industrie du logiciel propose les concepts d'architecture logiciel orienté services (Services Oriented Architecture : SOA) et orienté événements (Event Driven Architecture : EDA). Ces deux styles d'architectures ne sont pas liée à une solution technologique. C'est donc l'analyse des spécifications fonctionnelles qui va permettre de construire l'architecture du logiciel (espace du problème : le quoi) uniquement à l'aide de principe basé sur ces concepts de services et d'événements. La phase d'après, la conception (espace de la solution : le comment) permet d'intégrer les exigences non fonctionnelles (les performances, ...) et les solutions techniques pour la persistance, la distribution de données, les invocations distantes (remote) ... La distribution de données n'est donc pas un concept du niveau de l'analyse mais bien un concept de design, de l'espace des solutions. Il n'y a pas d'architecture orienté distribution de données.
  • IBM propose un article qui résume la complémentarité des architectures orienté services (SOA) et Orienté événements (EDA) et propose de l'appeler ED-SOA : pour Event Driven-Service Oriented Architecture.
  • Un COTS de messageries : ZeroMQ. Interropérable avec une vingtaine de langage de programmation, avec un modèle de programmation requête-réponse (SOA) et publish/subscribe (EDA), différent transport : intra-process, IPC, IP et des performances remarquable (en débit et latence).
  • Un article pour préciser la différence entre la surcharge (overload) et la redéfinition (override). Ces deux concepts sont très souvent confondu.
  • Un exemple de code Java pour observer le système de fichier, avec les nouvelles API du JDK 7.

Bonne lecture


Microsoft IE 9 Released
Microsoft released IE9, its flagship internet browser, at the SxSW conference yesterday. This brings IE into closer alignment with current web browsers, as it introduces some level of HTML5 support and achieves a 95% pass rate on the Acid 3 tests.
The most notable feature of IE9 is its speed. With a background thread for JIT compilation of JavaScript and hardware acceleration, it feels much faster in performance than its predecessors. There are other user interface updates to fit in with Windows 7, including "pinned sites" which give you a quick link from the shortcut bar to a web page.

The addition of HTML5 features such as the HTML History API will enable more user friendly websites/applications to be written without needing to invoke the hashbang syntax which was largely derided when sites like gawker disappeared from Google's caches.


Java EE: Objectif Cloud !
Vous n'avez pu rater la semaine dernière l'annonce de la sortie de la JSR 342! Il s'agit de la spécification de Java EE 7 dont le principal focus se veut être le Cloud.
Cette évolution de la plateforme était attendue. En effet, nombreux sont ceux qui, depuis plusieurs mois, prédisent que l'avenir de Java dépendra de sa faculté à intégrer les paradigmes du Cloud, tels que le « multitenancy » (partage d'une même application entre plusieurs utilisateurs ou organisations clientes) ou encore l'élasticité (mise à disposition automatique de ressources en fonction de la montée ou de la baisse de charge).
Voici un rapide tour d'horizons du contenu de cette JSR.



Oracle's Java EE 7 Plans Include Adding Cloud and HTML5 Support to the Platform
Oracle has filed Java Specification Request (JSR) 342, the umbrella JSR for Java EE 7. The JSR places emphasis on emerging web technologies, cloud computing, and continued ease of use improvements including an overhaul to the JMS API. Elsewhere, JPA is scheduled to receive attention, and Oracle is talking about plans to revive the long dormant JCACHE JSR.
The primary focus for making Java EE more suited to the cloud is on multi-tenancy (having the same program execute in a variety of different environments from a local application server to a private cloud to a public cloud), application versioning, and support for non-relational (NRDBMS) data stores.
 


Java EE 7
Suite à la sortie de Java SE 7 en developper preview, c'est au tour de Java EE 7 de faire parler de lui. Il y a deux semaines, la spécification de la plateforme Java Entreprise Edition dans sa version 7 a été soumise au JCP sous la JSR 342. Bien entendu, cette spécification est une proposition qui devra être votée et implémentée par l'« expert group ». Selon plusieurs sources, JEE 7 devrait voir le jour courant 2012, au troisième ou quatrième trimestre.
Au programme de cette version 7 : du cloud, du cloud et encore du cloud. En effet, cette JSR « umbrella » — c'est-à-dire chapeautant à son tour d'autres JSR — se veut résolument « cloud-friendly ».
Mais JEE 7 couvrira aussi d'autres sujets : le support des derniers standards du Web, la modularité et la facilité de développement.
 
Focus sur le Cloud
Le spec lead de cette JSR voit le cloud comme un prolongement du modèle orienté conteneur (accès au système et aux ressources externes géré par le conteneur) de la plateforme Java Entreprise Edition, où une application peut être déployée sur une machine unique comme sur un cluster de manière distribuée, sans changements radicaux, grâce à la souplesse de la stack.
La plateforme JEE étant déjà bien parée pour des environnements cloud — grâce à son modèle orienté conteneur et à son abstraction d'accès aux ressources — l'objectif de la spécification est d'améliorer l'intégration de la plateforme dans des clouds privés ou publics, afin que les applications y soient exposées « as a service », avec le support de fonctionnalités telles que l'extensibilité horizontale (« horizontal scalability ») ou encore la « multitenancy » (principe d'architecture logicielle où une seule instance d'une application peut servir, de manière individualisée, différents clients avec potentiellement des configurations et des paramétrages personnalisés).
Il s'agit également de tenir compte des problématiques liées au cloud (sécurité, isolation, qualité de service), en définissant par exemple de nouveaux rôles, tel que celui de PaaS (Platform as a Service) administrator ou en mettant à jour le modèle de sécurité de la plateforme en ce sens. Aussi, les applications qui voudront tirer avantage des différentes fonctionnalités spécifiques au modèle PaaS devront-elles obéir à certaines contraintes et fournir un moyen d'être identifiées comme étant conçues pour évoluer dans un environnement cloud.
Bon nombre d'APIs vont être mises à jour pour tenir compte de ces problématiques. Celles notamment qui gèrent des accès aux ressources, comme JPA, JDBC ou encore JMS, devront se rendre compatibles avec les systèmes multitenants. Dès lors, des ressources externes telles qu'une source de données ou une file de messages pourront être marquées comme étant partagées entre plusieurs applications. Les « expert groups » qui gouvernent chaque API seront chargés d'identifier ces besoins et de prendre les mesures adéquates.
 
Les derniers standards du Web
Le Web est aussi à l'honneur pour cette version 7 de la plateforme. D'ailleurs, deux nouvelles APIs, venant étoffer le support des dernières technologies Web dans le vent, sont en discussion :
  • Support du HTML5 et des Web Sockets via l'API Java Web Sockets.
  • Support de JSON (JavaScript Object Notation) via l'API Java JSON.
JEE 7 inclura aussi la version 2.0 de l'API JAX-RS (Java API for RESTful Web Services) définie par la JSR 339. Cette dernière sera rajoutée au profil Web, en plus des mises à jour des APIs déjà présentes au sein de celui-ci.

Modularité
Cette JSR a aussi pour objectif de faciliter la modularité et la gestion de versions, en permettant par exemple à une application d'utiliser une version supérieure d'une API déjà incluse dans la plateforme. Ce travail devra être coordonné avec la JSR à venir sur la modularité dans Java SE afin de rendre les deux plateformes cohérentes.
 
Facilité de développement
Tirant les leçons de certaines API vilipendées pour leur lourdeur ou leur complexité — on pense aux EJB d'avant la version 3.0 — cette version 7 se veut simple, légère, efficace et efficiente. En ce sens, l'API JMS dans sa version 2.0 va être améliorée et l'API CDI (Context and Dependency Injectio), introduite dans JEE 6, se verra doter d'une API pour configurer un injecteur : l'API DI 1.1 (la suite de la JSR 330).
A noter que la JSR 342 propose l'ajout de deux nouvelles JSRs, à savoir :
  • Concurrency Utilities for Java EE (JSR-236) : construite sur l'API java.util.concurrent, cette API offre des facilités pour exécuter des tâches de manière asynchrone.
  • JCache (JSR-107) : cette API a pour objectif de standardiser un système de cache accessible depuis tous les conteneurs en vue de rendre les applications plus « scalables » (extensibles).
En résumé, plusieurs APIs déjà présentes dans JEE seront mises à jour :
  • Java Persistence API (JPA)
  • Java API for RESTful Web Services (JAX-RS)
  • JavaServer Faces (JSF)
  • Servlets
  • Enterprise JavaBeans (EJB)
  • JavaServer Pages
  • Expression Language
  • Java Messaging Service (JMS)
  • Java API for XML-based Web Services (JAX-WS)
  • Contexts and Dependency Injection for Java EE (CDI)
  • Bean Validation
  • Dependency Injection for the Java Platform (JSR-330)
  • Common Annotations (JSR-250)
  • Java Connector Architecture


eXo Releases Cloud IDE
What Is Cloud IDE
Cloud IDE is a full-fledged development environment inside of a browser. Cloud
IDE contains many of the features developers expect such as color-coded syntax,
context sensitivity, auto-complete, multi-file editor with preview panel and
integration with source control systems.



JavaFX 2.0 Will Bring Hardware Accelerated Graphics and Better Licensing Terms to the Platform
At last year's JavaOne conference Oracle announced that it would continue to invest in JavaFX, shipping JavaFX 2.0 this year. At part of this, however, it also announced that it would be dropping support for JavaFX Script, replacing it with a new Java API for creating JavaFX applications. That API can also be used from alternative languages such as JRuby, Clojure, Scala and Groovy.
The beta program for JavaFX 2.0 has started, with Early Access releases open to members of the JavaFX Partner Program. A public beta is planned by the end of the first half of 2011. Participants will have the opportunity to provide feedback through multiple channels, including surveys, participation in focus group sessions, and discussions with key members of the JavaFX product team.

InfoQ spoke to Richard Bair, the architect for client software at Oracle, to find out more about the release and future plans


Object-oriented analysis and design
  • Object-oriented systems
  • Object-oriented analysis
  • Object-oriented design

The Architectures for software engineering
  • 1. Enterprise
  • 2. Functional
  • 3. Software
  • 4. Logical
  • 5. Technical
  • 6. Physical
  • 7. System
  • 8. Deployed

Architectural Principles and Solution Architectures
How I see it...

There is a difference between architectural principles and solution architectures.
Architectural principles are guidance in ambiguous situations toward an ideal.
A solution architecture holds the trade-off.
Deviating from the principle must be motivated, adhere to the principle not. That's what enterprise architecture is about: principles, decisions and solutions.

Architectural principles help in decision-making, solution architectures help in building systems solutions. Architects should recognize this difference. Architectural principles lead to design-to-change, solution architectures lead to design-to-release.
Practice learns that not all architects do make this distinction. And even worse, some architects don't see the necessity to lean on the guiding principles to which you may deviate during the designing of the solution.

If you don't take into account architectural principles that guide you to flexibility in changing the system across versions, and you don't document your design decisions that deviate from them, you may build perfectly working systems for extremely happy users and at the same time create a nightmare when you have to build and release the next version of the system. That may turn to be lethal for businesses in a world with the current increasing pace of change.




Event Driven Architecture and Service Oriented Architecture :
  • (1) the fusion of SOA and EDA into ED-SOA (event-driven, service oriented architecture) is the way of the future,
  • (2) building processes is greatly facilitated by ED-SOAs,
  • (3) conversely ED-SOAs can be constructed as layered architectures using BPM systems.
  • (4) CEP principles must become an integral component of both ED-SOAs and business processes because of the ever increasing quest for control of our business processes, real time autonomous operation, and the need to gather business intelligence from the events flowing through our IT systems.

Event-Driven Architecture and Service-Oriented Architecture
  • What is EDA?
  • EDA and SOA
  • EDA, SOA, and Services
  • EDA and SOA Programming Techniques
  • EDA, SOA, and ESBs
  • Conclusions

ZeroMQ.
un broker qui implémente plusieurs protocoles dont AMQP. On est ici à la limite du sujet tant cette application s'attache moins à son intégration dans une application de gestion classique qu'à construire une bête de course aux performances affichées impressionnantes (13.4 microsecondes de latence end-to-end, 4.1 millions de messages à la seconde).


ZeroMQ
Less is More :
  • The socket library that acts as a concurrency framework.
  • Carries messages across inproc, IPC, TCP, and multicast.
  • Connect N-to-N via fanout, pub-sub, pipeline, request-reply.
  • Fast enough for clustered products and supercomputing.
  • Asynch I/O for scalable multicore message-passing apps.
  • Large and active open source community.
  • 20+ languages including C, C++, Java, .NET, Python.
  • Most OSes including Linux, Windows, OS X.
  • LGPL free software with full commercial support from iMatix.

ZeroMQ
ZeroMQ is a messaging library, which allows you to design a complex communication system without much effort. It has been wrestling with how to effectively describe itself in the recent years. In the beginning it was introduced as 'messaging middleware' later they moved to 'TCP on steroids' and right now it is a 'new layer on the networking stack'.


What is the difference between method overriding and method overloading in Java?



How to watch the file system for changes in Java 7 (JDK 7)
Java 7 uses the underlying file system functionalities to watch the file system for changes. Now, we can watch for events like creation, deletion, modification, and get involved with our own actions. For accomplish this task, we need: