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.