vendredi 9 mars 2012

Veille technologique semaine 10

Pour le bulletin de cette semaine, je vous propose les sujets suivants :
  • la fin du minitel : le 30 juin 2012.
  • Une interview de Stroustrup au sujet de la norme C++ de 2011
  • Un article au sujet de l'importance de la mesure des résultats pour action de modification du processus de développement : le feedback des méthodes agiles. Il faut une boucle courte avec possibilité de modifier les entrées du développement logiciels. Il la modification n'est pas possible, il n'y a pas de possibilité d'amélioration, donc pas de feedback. C'est le même principe que celui des asservissement : correction de la commande après mesure de la sortie pour maintenir l'objectif.
  • Un premier article au sujet de la conception logiciel : conception = faire apparaître les concepts. C'est un exercice d'abstraction.
  • Les derniers chiffres sur la popularité des langages de programmation, d'après l'index de Tiobe.com.
  • Un exemple  de la mise en oeuvre de la technologie OSGi avec le concept de services.
  • Pourquoi le return d'une méthode Java n'est pas pris en compte lors de la surcharge (overload) ?
Bonne lecture.


Orange envoie un dernier rappel avant la fin du Minitel
Le service Télétel sera fermé le 30 juin 2012, rendant inopérants les nombreux Minitel encore en service. Dans un courriel envoyé à ses clients, Orange rappelle cette échéance, marquée d'une étape : à partir de ce mercredi 7 mars 2012, les locataires d'un Minitel ne sont plus facturés. Les plus nostalgiques pourront d'ailleurs garder leur terminal, Orange prévoyant de n'appliquer aucune pénalité de non restitution.


Stroustrup reveals what's new in C++ 11
C++ 11 offers small upgrades to appeal to different areas of development


Au fait, faut que je te fasse un feedback …
La scène se passe dans le métro parisien.
- Tu prends la ligne 9 toi aussi ? Alors comment ça se passe sur ton projet en ce moment ?
- Ca avance … Tiens, faut que je te raconte, nous avons commencé de travailler avec des méthodes agiles !
- J'ai fait la même chose il y a un an et demi … Vous devez être en plein changement alors ! Où en êtes vous, toi et ton équipe, dans ces changements ?
- Nous sommes accompagnés par un consultant, il a commencé à nous parler de feedback, je n'ai pas bien compris où il voulait en venir …

Conception logicielle
Une pratique utile à tout développeur de logiciels est l'analyse de son propre travail. C'est dans cet esprit que j'entame aujourd'hui une petite série de billets sur la conception de logiciels, ou, plus précisément, ce qu'est, à cet instant, pour moi, la conception de logiciels.
C'est à la fois une façon de faire un point personnel sur ce que j'ai appris, de le partager avec tous ceux qui pourraient être intéressés, et enfin de l'exposer à la critique publique de ceux qui prendront le temps de le lire. Dans cette série de billets, je compte donc aborder les points qui me paraissent les plus importants dans la conception, la manière dont ils évoluent au fil du temps, le contrôle qu'exerce un développeur sur cette évolution et les relations qu'entretient le logiciel avec son environnement.

Le logiciel, un organisme multicellulaire ?


Chacun cherche son TDD





Java tops C in language popularity
Java is barely hanging on to its ranking as the most popular programming language, edging out C in this month's Tiobe index of programming language popularity. Released on Sunday, the February Tiobe Community Programming Index had Java being used by 17.05 percent of developers. A year ago, 18.48 percent of developers used it, while 17.48 percent of developers used Java a month ago. C was slotted right behind Java, used by 16.52 percent of developers in the latest release of the index -- up from 14.98 percent the same time last year, but down from the 16.98 percent using it in last month's index.

Ranking behind Java and C were: C#, used by 8.65 percent; C++, at 7.85 percent; Objective-C, at 7.06 percent; and PHP, used by 5.64 percent.


Introduction to OSGi - 2 (OSGi Services)
There are so many OSGi tutorials, blogs, and samples. I am going to add another OSGi sample/tutorial with my OSGi leanings. Here is my previous article regarding OSGi(Introduction to OSGi).
An OSGi Service is a java object instance which is registered with OSGi framework with set of attributes. Services can be accessed via service registry(performed via the class BundleContext). BundleActivator is to be invoked on start and stop.
When BundleActivator call start method we are going to register our service. After that any bundle can access that service.


Function overloading by return type?
Why don't more mainstream statically typed languages support function/method overloading by return type? I can't think of any that do. It seems no less useful or reasonable than supporting overload by parameter type. How come it's so much less popular?

vendredi 2 mars 2012

Veille technologique semaine 9

Pour le bulletin de cette semaine, je vous propose les sujets suivants :
  • Le preview de Windows 8 est proposé par Microsoft.
  • Le prochain IPV6 day est prévu le 6 juin 2012 : vérifier votre connectivité IPV6.
  • Les évolutions des plates-formes logicielles pour le cloud proposent le concept de multi-tenants : quelques explications.
  • Une interview de Gil Tene explique le garbage collecteur sans pause de la société Azul.
  • Un article au sujet du compilateur Graal de la machine virtuelle Maxine qui est entièrement écrite en Java.
  • L'occupation mémoire des objets Java, par IBM : les applications Java tournent sur des machines virtuelles mais il ne faut pas oublier la représentation mémoire de ces objets.
Bonne lecture.


Windows 8 Consumer Preview, Visual Studio 11 Beta Now Available
Today Microsoft launched Windows 8 Consumer Preview and Visual Studio 11 Beta.
The Windows 8 Consumer Preview page opens with an enthusiastic intro video, then divides into 9 major sections:


IPv6 to be Widely Enabled on World IPv6 Launch Day
Following on from the success of last year's World IPv6 day, in which major organisations such as Facebook and Google enabled IPv6 connectivity for a 24h period, the Internet Society has announced Google, Facebook, Yahoo and Bing) and on World IPv6 Launch Day (6th June 2012) the websites will switch on their IPv6 support and leave it permanently enabled, almost exactly a year since the World IPv6 Day (8th June 2011).



Using Hibernate to Implement Multi-tenant Cloud Architecture
Hibernate is an excellent Java ORM tool but it lacks the features required to implement a multi-tenant cloud architecture. Don't let that stop you.

Multi-tenant cloud architecture is a way to partition data such that a single instance of an application can host data from multiple organizations simultaneously. A multi-tenant application allows each organization (tenant) to co-exist without compromising the security of data defined for other.



Gil Tene Discusses Garbage Collection, the OpenJDK and the JCP
Azul is probably best known for their Pauseless Garbage Collector. So, maybe I can get you to start by giving us a bit of background on garbage collection generally. Could you maybe give us a rundown of the four fundamental approaches to collection?




Graal : Un compilateur dynamique pour Java
Les promoteurs du projet Graal, dont des représentants d'Oracle, aimeraient que le compilateur dynamique soit utilisé dans différentes machines virtuelles Java (JVM).

« Imaginez un codage en Java, une compilation avec un compilateur écrit en Java, enfin l'exécution par la machine virtuelle Java elle aussi écrite en Java - il y a du Java tout au long de la chaîne. C'est la voie d'une intégration parfaitement transparente entre l'application et la machine virtuelle », a déclaré Hari Gottipati, également membre du Groupe d'utilisateurs Phoenix Java. « Je suis sûr que toute la communauté Java va être très emballée par le projet. »



From Java code to Java heap
Understanding and optimizing your application's memory usage.

This article gives you insight into the memory usage of Java code, covering the
memory overhead of putting an int value into an Integer object, the cost of object
delegation, and the memory efficiency of the different collection types. You'll learn
how to determine where inefficiencies occur in your application and how to choose the right collections to improve your code.

vendredi 24 février 2012

Veille technologique semaine 8



Pour le bulletin de cette semaine, je vous propose les sujets suivants :
  • Le Wifi Gigabit avec une puce qui l'implémente.
  • La loi de Moore aurait-elle une limite ? Un laboratoire a réalisé un transistor avec un seul atome (de phosphore).
  • Microsoft met à jour son offre de stokage Cloud SkyDrive et propose 25Go gratuitement pour ses 100 millions d'utilisateurs inscrits.
  • Microsoft, le processeur ARM, Windows 8 et Office : la face caché de l'iceberg.
  • La spécification du langage Java et de la machine virtuelle ont été mis à jour avec la version 7.
  • Oracle viens de prolonger la date le fin de vie (EOL : End Of Life) du JDK 6 : prolongation jusqu'à novembre 2012. Plus de mise à jour gratuite au delà de cette date. Oracle recommande fortement la migartion sur le JDK 7 avant cette date. Le JDK 7 à une date de péremption en juillet 2014.
  • Les fuites mémoires avec les langages à garbage collector :  c'est un problème de l'application.
  • La programmation concurrente en Java : c'est l'application qui doit prendre en compte l'évolution des processeur multi-cores.
  • Une question théorique : quel est le type de null ? Avez vous la réponse avant de regarder le solution.

Bonne lecture.

Gigabit Wi-Fi chips emerge, will power super-fast home video streaming
The first wireless networking chips capable of powering gigabit-per-second speeds using the forthcoming IEEE 802.11ac standard are starting to emerge, with routers and other consumer networking products expected to launch in the second half of 2012. With speeds three times faster than the current generation of Wi-Fi routers, the new products will speed up synchronization between home devices and greatly improve the quality of in-home audio and video streaming, according
to Gigabit Wi-Fi vendors.

New Qualcomm chips aim to bring 1.3Gbps WiFi to one and all


La fin de Moore
La loi de Moore, tout la monde la connait sans la connaitre. On la cite souvent en disant que la puissance des processeur double tous les 18 mois, alors qu'elle concerne la densité de transistors sur une puce de silicium.


Un transistor composé d'un unique atome
Un transistor composé d'un unique atome Alors que l'on grave maintenant de manière industrielle des processeurs à la finesse de 22nm, on sait très bien que la barrière quantique n'est plus si loin et qu'il faudra totalement révolutionner la manière dont les processeurs sont fabriqués d'ici moins de 20 ans. Dans cette course à la nouveauté, des scientifiques ont réussi une prouesse, fabriquer un transistor composé d'un unique atome.


We can do no Moore: a transistor from single atom
At the center of modern technology lies the logic circuitry provided by semiconductor devices. Extending circuit logic to the realm of nanotechnology requires the construction of atomic-scale systems, which has proven challenging. Both the electric nature of individual atoms and the need to place them at specific points within a crystal lattice has kept scientists from creating atom-scale transistors until the present.


Bigger files, remote access, OpenDocument, and more coming to SkyDrive
Microsoft's SkyDrive cloud storage service is set to receive some substantial upgrades this year, according to news from both official and unofficial channels. File synchronization, secure remote access, and Windows 8 integration have been demonstrated by Microsoft, and rumored improvements include paid storage upgrades, secure storage of BitLocker keys, a new Mac client, and support for OpenDocument (ODF) files.


Windows On ARM : entre deux chaises
Après des mois de suspense, Microsoft a enfin levé le voile sur le degré de compatibilité de Windows dans sa version ARM, une question qui laissait nombre d'observateurs dubitatifs. Et la réponse est pour le moins surprenante…


JLS7 and JVMS7 online
Java Language Specification 7 and the JVM Specification 7


Updated Java 6 EOL date
The Java SE Support Roadmap reflects an updated timeline for the EOL of public support and public releases for JDK 6. The EOL date has been extended from July 2012 to November 2012, to allow some more time for the transition to JDK 7. The JRE is free software, and as is the case with most free software, users are encouraged to adopt the latest stable version.


Oracle Java SE Support Roadmap
Java SE 6 will no longer be publicly available after November 2012. Customers interested in continued access to critical bug fixes and security fixes as well as general maintenance for JDK 6 have the option to purchase Oracle Lifetime Support.


What is a memory leak?
When we talk to people about our solution for discovering memory leaks – Plumbr – we immediately get positive feedback. But when we add Java into the equation, the initial excitement is often complemented with questions: "Are there memory leaks in Java? Isn't Java a garbage-collected language?" In this post I will explain why memory leaks are in fact a common problem for Java applications.


Fork and Join: Java Can Excel at Painless Parallel Programming Too!
How do the new fork/join tasks provided by Java SE 7 make it easier to write parallel programs?
Multicore processors are now widespread across server, desktop, and laptop hardware. They are also making their way into smaller devices, such as smartphones and tablets. They open new possibilities for concurrent programming because the threads of a process can be executed on several cores in parallel. One important technique for achieving maximal performance in applications is the ability to split intensive tasks into chunks that can be performed in parallel to maximize the use of computational power.
Dealing with concurrent (parallel) programming has traditionally been difficult, because you have to deal with thread synchronization and the pitfalls of shared data. Interest in language-level support for concurrent programming on the Java platform is strong, as proven by the efforts in the Groovy (GPars), Scala, and Clojure communities. These communities all try to provide comprehensive programming models and efficient implementations that mask the pain points associated with multithreaded and distributed applications. The Java language itself should not be considered inferior in this regard. Java Platform, Standard Edition (Java SE) 5 and then Java SE 6 introduced a set of packages providing powerful concurrency building blocks.
Java SE 7 further enhanced them by adding support for parallelism The following article starts with a brief recall of concurrent programming in Java, starting with the low-level mechanisms that have existed since the early releases. It then shows the rich primitives added by the java.util.concurrent packages before presenting fork/join tasks, an essential addition provided in Java SE 7 by the fork/join framework. An example usage of the new APIs is given. Finally, a discussion on the approach precedes the conclusion.
In what follows, we assume that the reader comes from a Java SE 5 or Java SE 6 background. We present a few pragmatic language evolutions of Java SE 7 along the way.

Concurrent Programming in Java


La Classe De Null ?
La valeur null peut être affectée à toutes les références. Quel est son type ? Si null est du type Object, cela oblige à convertir toutes les valeurs null avant une affectation.

String s = (String)null;

Sans la conversion, le compilateur refuserait la compilation. Pour éviter cela, les concepteurs de Java n'ont pas donné de type à null. Le compilateur converti implicitement la valeur null dans le type du pointeur participant à l'expression. Cela fonctionne dans la majorité des situations.

vendredi 17 février 2012

Veille technologique semaine 7

Pour le bulletin de la semaine 7, je vous propose les sujets suivants :
  • Microsoft a présenté windows 8 porté sur un processeur ARM : le processeur le plus utilisé dans les smart phones et les tablettes. Microsoft suite office est également en cours de portage.
  • Le forum DVD se met en pause : plus de réunion prévue au sujet des standards CD et DVD. C'est de début de la fin des supports optiques ?
  • Le consortium MPEG annonce la sortie du successeur du H264 : le H265 qui permet de gérer les vidéos jusqu'à 8K x 8K pixels
    (7680x4320). De plus, ce nouveau standard de compression permet de réduire les images HD actuelles de 35% à 65%.
  • Un article au sujet des tests de validation fonctionnels des IHM. L'article est écrit par Robert Martin (une référence dans l'industrie du logiciel) explique qu'il ne faut pas construire des tests de validation du niveau fonctionnel avec un dépendance sur le GUI (Graphic User Interface = les JavaBeans et les pixels), car le GUI (les pixels) sont trop fragiles : ils peuvent changer très souvent sans que le fonctionnel change. Il faut donc s'en abstraire.
  • Un article au sujet de la société Azul qui propose une JVM (Java Virtual Machine) avec un garbage collector sans pause (pauseless). Le temps de latence correspondant est de l'ordre de 100 micro secondes.
  • Une liste des frameworks Java pour des applications à très hautes performances. On peut donc constater que les performances sont plus dépendantes de l'architecture du logiciel plutôt que de sa technologie.
  • La spécification Type Annotations JSR 308 (Java Specification Request) propose pour le JDK 8, des extensions pour les annotations Java. C'est une avancé, proposé par l'université de Washington.
  • Le définition du mot clé Java volatile.
Bonne lecture



Microsoft Details Windows 8 for ARM
Microsoft has detailed Windows 8 for ARM: architected for low power consumption, apps that can only target WinRT, restricted desktop that allows only Office 15 and some Windows components to run. Microsoft demonstrated Windows running on ARM System-on-a-Chip (SoC) at CES 2011, and showed Windows 8 (Win8) for the first time at D9 Conference in Taipei, including running it on a prototype ARM machine. While there has been some rumors related to Microsoft's true intentions regarding ARM, it was not clear if ARM will be considered an equal member of the PC family, whether legacy x86 applications will be able to run on ARM and if Win8/ARM will include the desktop interface besides Metro. Steven Sinofsky, President of the Windows and Windows Live Division at Microsoft, published a blog post offering clear details on their plans with ARM.

First of all, Sinofsky wanted to make sure this move won't be seen as a departure from Intel/AMD architecture, but rather the opening up of new opportunities for Windows and its entire ecosystem:


Microsoft va porter sa suite office sur les processeurs ARM
Selon un message posté sur le blog de Steven Sinofsky, président de la division Windows de Microsoft, la société va porter sa suite office sur les processeurs ARM sous la forme de 15 applications indépendantes. Parmi ces applications on trouvera Word, Excel, PowerPoint et OneNote.
Visiblement, seul Windows en version ARM permettra de faire tourner ces logiciels (dans sa version 8). Elles devraient même être offertes avec !

Il semble bien que Microsoft veuille utiliser sa suite toujours très prisée des professionnels pour lancer la nouvelle version de son OS sur un marché où elle n'a pas encore eu de succès, les tablettes. Ce sera sans conteste un argument de poids sur le marché professionnel, si l'on peut continuer à éditer et modifier ses documents sur une tablette lors de déplacements ou avant une présentation. Penser que cela sera suffisant pour assurer le succès de tablettes sous Windows 8 serait prématuré, mais c'est un argument de poids que personne n'a encore pu mettre en avant face à la tablette d'Apple.


Le DVD forum se met en pause
Il y a peu, nous vous parlions du déclin constant des ventes de DVD, qui a conduit certains fabricants de médias vierges à cesser d'en produire. Une nouvelle décision montre que ce format est maintenant en roue libre vers sa mort. Le DVD Forum, qui dicte les normes liées à ce format, a annoncé son intention de se mettre en veille le premier avril prochain. Il n'y aura ainsi plus de réunions planifiées autour de ce format et seules d'importantes décisions à prendre pourront provoquer la convocation de ses membres.
Avec la disparition progressive du DVD, on va plus que certainement assister à la mort programmé des lecteurs / graveurs optiques en informatique, sachant que la présence du Blu-ray reste anecdotique dans les ordinateurs.
A posteriori, on aurait pu prévoir que les graveurs de Blu-ray ne perceraient pas:
  • Lorsque les premiers CD-R de 650 Mo sont arrivés, les disques durs avaient une capacité qui leur était inférieure d'au moins la moitié,
  • Lorsque les premier DVD-R de 4,7 Go sont arrivés, les disques durs avaient une capacité qui leur était 15 fois supérieure,
  • Lorsque les premiers BD-R de 25 Go sont arrivés, les disques durs avaient également une capacité 15 fois supérieure, mais les choses se sont rapidement emballées et aujourd'hui, le rapport est de 40 fois.
Ces médias vierges sont donc devenus trop coûteux par rapport au prix d'un disque dur et ont même perdu leur compétitivité face aux produits dotés de mémoire flash, comme les clés USB, dont l'usage est de plus bien plus flexible. Si l'on rajoute à cela la disparition progressive des appareils optiques avec les Ultrabook, DVD et Blu-ray finiront leur carrière comme supports de distribution de vidéos, tout du moins pour ces derniers tant que la bande passante Internet ne permettra pas de faire de la VoD en HD de manière confortable.


Le format H.265 arrivera en 2013
Une réunion s'est tenue la semaine dernière entre la MPEG LA et l'UIT-T (qui définit les normes de télécommunication). Elle a permis d'en savoir plus sur le prochain format de vidéo compressée, le H.265. (note : le H264 est le format actuellement utilisé pour les vidéos HD : TNT HD et Blu-ray).



Pour commencer, ce nouveau format supportera de très hautes résolutions, le 4K, mais aussi le 8K (7680x4320) de quoi envisager l'avenir sereinement mais aussi permettre aux diffuseurs de films dans les salles de cinéma de l'adopter.

Outre ces hautes résolutions, ce qui en fera certainement un succès sera sa bien meilleure efficacité, qui permettra de garder une qualité équivalente au H.264 tout en économisant sur la taille du fichier final ou du flux de streaming de 35 à 67% du volume/taille.

Ce nouveau format, rien que pour ces dernières raisons, sera certainement très vite adopté par des plateformes de diffusion à moins coût en bande passante films et séries TV, que ce soit en 720 ou 1080p.

Comme à chaque sortie d'un nouveau format, il devrait être entériné en janvier 2013, on aura quand même au départ un problème de décodage sur nos appareils. Actuellement, tous ou presque sont optimisés matériellement pour décoder le H.264, ce qui ne sera pas immédiatement le cas pour le H.265. Il faudra donc que les processeurs centraux s'en chargent, ce qui limitera le décodage aux machines les plus puissantes.


Le successeur du H.264 est sur les rails
Alors que le camp H.264 et le camp WebM se disputent toujours la gestion de la vidéo dans le HTML5, le MPEG-LA et l'International Telecommunication Union se sont mis à pied d'oeuvre sur le H.265, ou plus exactement le HEVC (High Efficiency Video Coding).
Le successeur du codec vidéo tirera parti de l'augmentation de puissance des machines sur deux fronts : le premier concerne le rapport qualité/taille, permettant de réduire la mémoire occupée par les vidéos (et la bande passante lors de leurs transferts) de 35 à 40 % à qualité égale (jusqu'à 67 % en pointe).


Comment faire des tests d'IHM sans se tirer une balle dans le pied ?
L'automatisation des tests d'IHM peut être souvent une mauvaise idée. Le constat est très souvent le même : bien que simple à mettre en place en général, leur apport est souvent mineur par rapport à leur coût (je vous dirige vers l'excellent article de Robert Martin pour creuser le sujet). Comment faire si l'on veut cependant s'engager dans cette voie?

Dans
cet article, Gojko Adzic (commiter fitnesse et auteur du livre passionnant "Bridging the communication gap" ), nous livre des pistes pour maximiser le retour sur investissement sur ceux-ci. Tout d'abord, ne surtout pas partir sur de l'enregistrement brut des cas de tests les uns après les autres (avec Selenium IDE par exemple). C'est dans ce cas-là que l'on se tire une balle dans le pied. Les coûts de maintenance explosent et l'intérêt des tests est remis en question au fil du temps.
La clé est de représenter les tests d'IHM sur plusieurs niveaux :
  • Règles métiers
  • Worfklows
  • Technique
Les niveaux supérieurs sont plus stables dans le temps et sont plus compréhensibles que ceux du dessous. Les niveaux supérieurs s'appuient bien évidemment sur les niveaux du dessous pour fonctionner.
Le but de cette approche est de faire en sorte que les tests restent compréhensibles (bon courage pour aller comprendre la règle métier cachée derrière une centaine d'instructions Selenium) et surtout de promouvoir la réutilisabilité afin de garder la main sur la maintenance des tests.



Ruining your Test Automation Strategy.


Posted by Uncle Bob


The Azul Garbage Collector
The Java language specification mandates some form of automatic garbage collection to reclaim unused storage, and forbids manual memory deallocation. Automatic garbage collection frees the programmer from much of the worry about releasing objects that are no longer needed, which can otherwise consume substantial design effort. It also prevents some kinds of common bugs occurring, including certain kinds of memory leaks, dangling pointer bugs (which occur when a piece of memory is freed while there are still pointers to it and one of those pointers is then used) and double free bugs (which occur when the program tries to free a region of memory that has already been freed and perhaps already been allocated again).


Azul's Pauseless Garbage Collector Goes Native on Linux
Azul Systems have today announced Zing 5.0, eliminating their previous requirement for a hypervisor, and therefore bringing their pauseless JVM to unmodified 64-bit Linux for the first time.
One end is the higher end, the low latency trading guys. These are guys that count [on] 50-100 microsecond response times; they really want to get rid of garbage collection effects but they can't pay an extra 200 microseconds to do it. Those were customers who were very intrigued by Zing 4.0, but the virtualised mechanism with the proxy and the extra hop across it, whilst invisible to any human response time app, would be a 3 times wire latency increase for these guys, so they couldn't use it. With Zing 5.0 it just drops straight in, there's no proxy mechanism, and so no additional cost at all.
But what if all you have is a 3GB heap, and you are just annoyed at the pauses. You can't really go and ask for virtual infrastructure changes to do it. ZingLX is just a better VM for Linux. So it becomes a possibility for these guys too.


High performance libraries in Java
There is an increasing number of libraries which are described as high performance and have benchmarks to back that claim up. Here is a selection that I am aware of.

  • Disruptor library
  • Java Chronicle
  • Colt Matrix library
  • Javolution
  • Trove collections for primitives
  • MG4J: Managing Gigabytes for Java
  • Overview of 8 performance libraries
  • Serialization benchmark

Type Annotations Specification (JSR 308)
The JSR 308 webpage is http://types.cs.washington.edu/jsr308. It contains the latest version of this document, along with other information such as a FAQ, the reference implementation, and sample annotation processors.

Introduction
JSR 308 extends Java's annotation system so that annotations may appear on any use of a type. (By contrast, Java SE 7 permits annotations only on declarations; JSR 308 is backward-compatible and continues to permit those annotations.) Such a generalization removes limitations of Java's annotation system, and it enables new uses of annotations.
This document specifies the syntax of extended Java annotations, but it makes no commitment as to their semantics.


What Volatile Means in Java
Today, I'm going to talk about what volatile means in Java. I've sort-of covered this in other posts, such as my posting on the ++ operator, my post on double-checked locking and the like, but I've never really addressed it directly.
First, you have to understand a little something about the Java memory model. I've struggled a bit over the years to explain it briefly and well. As of today, the best way I can think of to describe it is if you imagine it this way:

vendredi 10 février 2012

Veille technologique semaine 6

Pour le bulletin de cette semaine, je vous propose les articles suivants :
  • Intel annonce l'intégration de la gestion des transactions mémoire dans la prochaine architecture Haswell prévue pour 2013.
  • Des chercheurs propose l'unification du CPU et du GPU pour améliorer leur performances globales.
  • un article au sujet de l'obsolescence dans l'industrie du logiciel.
  • IBM qui propose la définition des architectures orientées services (SOA) et orienté événements (EDA) comme complémentaires.
  • Une liste d'articles de wikipedia sur les acronymes : CRUD, DAO, DTO, DAL, SDO
  • Oracle mise sur JavaFX pour les IHM en Java.
  • La manipulation du système de fichier avec le JDK 7.
  • Les expression lambda en Java : état des lieux. Pour le JDK 8, c'est promis.
  • La première spécification des modules du JDK 8. C'est la première fois qu'un langage de programmation propose ce niveau de concept.
  • Les premières infos du JDK 9 ?

Bonne lecture.



Intel: Haswell arrivera au premier semestre 2013 et supportera un nouveau système de gestion mémoire
En 2011, Intel a pris un conséquent retard sur le lancement des processeurs Sandy-Bridge lié à un bug touchant leurs chipsets. C'est en partie la raison pour laquelle Ivy-Brige n'est pas sorti en tout début 2012, le temps de laisser une carrière à son prédécesseur.
Pour Haswell, la prochaine architecture, Intel ne compte pas essayer de refaire le retard et devrait lancer ces nouvelles puces entre mars et juin 2013.


Pour rappel, l'essentiel de la nouveauté d'Ivy Bridge est lié à la gravure 22 nm 3D de ses transistors. Haswell quant à lui utilisera la même gravure mais verra son architecture interne fortement remaniée. Parmi les nouveautés qu'Intel va introduire, il y aura la gestion de la mémoire transactionnelle.

Son arrivée correspond à un besoin lié à la multiplication des coeurs dans les processeurs et au nombre toujours plus conséquent de logiciels capables d'en tirer le meilleur parti. Lorsque l'on décide de découper un processus de programmation en plusieurs threads pour en accélérer le traitement, on doit gérer toujours plus finement l'usage que chacun fera au niveau de la mémoire partagée, avec le risque qu'une modification d'une donnée en mémoire ne fausse tout le calcul.

Dorénavant, grâce à un jeu d'instructions spécifiques, il sera possible de demander au processeur de surveiller les zones de mémoire partagées, mais aussi d'en rendre l'accès exclusif à certains threads seulement, une sorte de super mémoire protégée qui déchargera le système d'exploitation de ces tâches qu'il remplit plus ou moins bien.

L'usage de cette mémoire transactionnelle obligera quand même les développeurs à un nouveau travail puisqu'ils devront spécifiquement choisir la manière dont fonctionnera chaque thread de leur logiciel en choisissant les instructions les plus appropriées.



Haswell et mémoire transactionnelle
C'est par l'un de ses blogs qu'Intel vient d'annoncer une mise à jour de sa spécification AVX2 concernant Haswell, le prochain "Tock" d'Intel attendu pour 2013.
Cette extension d'AVX2 baptisée TSX apporte de nouvelles instructions qui permettent de gérer ce que l'on appelle mémoire transactionnelle. Contrairement à ce que son nom indique, la mémoire transactionnelle n'est pas un type de mémoire différent, il s'agit plutôt d'une manière différente d'accéder à la mémoire. Le principe de transaction n'est pas nouveau en informatique et se pose dans les cas où une ressource partagée peut être accédée de manière concurrente par plusieurs autres ressources


Transactional Synchronization in Haswell
By James Reinders (Intel)



Engineers Boost Computer Processor Performance By Over 20 Percent
Researchers from North Carolina State University have developed a new technique that allows graphics processing units (GPUs) and central processing units (CPUs) on a single chip to collaborate – boosting processor performance by an average of more than 20 percent.


Software Obsolescence – Complicating the Part and Technology Obsolescence Management Problem
Software obsolescence (more specifically COTS – Commercial Off The Shelf software obsolescence) is generally due to one of three main causes:
1. Functional Obsolescence
2. Technological Obsolescence
3. Logistical Obsolescence

"The only big companies that succeed will be those that obsolete their own products before someone else does"
Bill Gates, Founder, Microsoft Corp.


Event-Driven Architecture and Service-Oriented Architecture
This paper explores what event-driven architecture is, and how it relates to service-oriented architecture and enterprise service bus.


CRUD, DAO, DTO, DAL, SDO : définitions


L'avenir des clients Java passera par JavaFX
Durant la dernière conférence JavaOne 2011, Oracle a dévoilé sa stratégie concernant les applications clientes Java. Sans surprise, Oracle mise sur JavaFX.
Pour rappel, JavaFX est une API pour développer des RIA (desktop ou mobile), apparue il y a quelques années, mais qui n'a pas rencontré le succès escompté. Face à cet échec, une nouvelle version 2.0 de JavaFX a été présentée à la conférence JavaOne 2010.
Parmi les nouveautés marquantes, on peut noter l'abandon du langage Fx Script pour une API full Java. Cela permet notamment l'utilisation d'autres langages compatibles avec la JVM, tels que Groovy ou Scala. On voit aussi apparaître un descripteur d'interface graphique au format FXML. Celui-ci sera accompagné d'un outil graphique (standalone pour le moment), Java Fx Scene Builder, facilitant la création des interfaces. Cet outil fera son apparition courant 2012. Enfin, JavaFX pourra embarquer des composants HTML5 et JavaScript via l'utilisation de
WebKit. Le projet Avatar pousse même encore plus loin, en proposant des applications hybrides avec des interactions entre le monde JavaFx et HTML5.
Afin d'accélérer son développement, JavaFX va devenir open-source et sera intégré directement dans le projet OpenJDK. En parallèle, J2ME, l'API mobile historique de Java, va être unifié aussi dans le prochain JDK.
L'objectif d'Oracle est de diffuser JavaFx sur un maximum de périphériques possibles: desktops, mobiles et tablettes. Potentiellement, tous les périphériques compatibles avec la JVM pourront supporter JavaFX. Une version bêta est d'ores et déjà disponible pour Mac OS X. Une version pour Linux (Ubuntu) fera son apparition en 2012. Au final, JavaFx 3 sera intégré dans le JDK 8 prévu pour 2013 et sera compatible avec toutes les plateformes.

Manipulating Files in Java 7
The following is a modified snippet from a draft of The Well-Grounded Java Developer. It
gives you a quick taster of how much easier it is to manipulate files in Java 7 than in previous
versions. By using the new Files class and its many utility methods, you can perform the
following operations on files with only a single line of code:
  • Create
  • Delete
  • Copy
  • Move/Rename

Let's start by looking at the creation and deletion of files.


Java Lambda Syntax based on C#, Scala
One of the most anticipated new features of Java 8 is the introduction of Lambdas, which are anonymous functions that can be passed around like data in arguments and variables. However, the syntax for these wasn't widely decided, with polls asking for input on what would be most familiar to others.
A recent posting on the lambda-dev mailing list announced the conclusion that the Java Lambda syntax will be based on C# syntax. This is already widely known and used (as C# had delegates back in 1.0, support for delegate functions in 2.0 and lambda expressions in 3.0).


State of the Lambda December 2011 4th edition
This is an informal overview of the enhancements to the Java programming language specified by JSR 335 and implemented in the OpenJDK Lambda Project. It refines the previous iteration posted in October 2010. A formal
description of some of the language changes may be found in the Early Draft Specification for the JSR; an OpenJDK Developer Preview is also available. Additional design documents—in particular a more detailed examination of default
methods—can be found at the OpenJDK project page. As all of these artifacts are works-in-progress, there may be inconsistencies between them, which will be resolved by the time the spec and implementation are finalized.
The high-level goal of Project Lambda is to allow programming patterns that require modeling code as data to be convenient and idiomatic in Java. The principal new language features include:
  • Lambda expressions (informally, "closures" or "anonymous methods")
  • Expanded target typing
  • Method and constructor references
  • Default methods
These are described and illustrated below.


Java Modularity : Project Jigsaw: The Big Picture — DRAFT 1
This document is an overview of the current state of Project Jigsaw, an exploratory effort to design and implement a module system for the Java SE Platform and to apply that system to the Platform itself and to the JDK.
This document is not yet complete. Additional sections covering compilation, packaging, libraries, repositories, the module-system API, and the modularization of the JDK are in preparation. Every feature mentioned here has been implemented in the main Jigsaw repository unless otherwise noted.


Premières infos sur Java 9
  • Reified Generics ?
  • Primitives unifiés ?

vendredi 2 décembre 2011

Veille technologique semaine 48

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

  • Une synthèse de JavaOne qui s'est tenue début octobre à San Francisco.
  • JavaFX 2.0 est sortie en version finale.
  • JavaFX l'avenir du client en Java ?
  • JavaFX et NetBeans 7.1
  • JavaFX et les charts
  • Les premières informations au sujet du JDK 9, mentionnée à la conférence Devoxx.
  • Les fonctionnalités du JDK 7 : un résumé.
  • Les expressions lambda pour le JDK 8.
  • Les énuméré en Java.
Bonne lecture.




JavaOne
La conférence JavaOne 2011 s’est tenue la semaine passée à San Francisco. Comme chaque année, elle a été l’occasion d’un grand nombre d’annonces, de keynotes et de plans sur le futur de Java. On notera après avoir pris la température auprès de la communauté, que celle-ci semble moins inquiète que dans un récent passé: Oracle est là depuis un moment maintenant, les choses semblent s’être stabilisées et clarifiées. La récente arrivée de Java 7 ne doit pas y être pour rien. Parmi les diverses annonces, on retiendra surtout :

  • Java 8 est retardé à début 2013. Nous aurons le temps de vous reparler des nouveaux apports.
  • Java ME tend à se rapprocher de Java SE et vise à en devenir un sous ensemble. L’intérêt est d’unifier les communautés de ces 2 versions.
  • Java EE 7 est en préparation, orienté Cloud et multi-tenancy
  • JavaFX n’est pas mort. Les mauvaises langues diront que le projet ressort du placard chaque année pour JavaOne. Mais Oracle semble décidé à le faire avancer: il devrait progressivement devenir complètement OpenSource et une version 3 est prévue, intégrée directement dans le JDK 8.
  • Pour rêver un peu, quelques pistes pour le JDK 9 ont été évoquées. On parle de VM s’adaptant toutes seules aux applications (plus de XmX et autres barbaries ?!), d’un nouveau Meta Object Protocol améliorant le support entre langages… Là encore, nous aurons laaaargement le temps d’en reparler !
 
JavaFX 2.0 Released, Java 9 Outlined During JavaOne Keynote
Mark Reinhold, Chief Architect for Java at Oracle, gave details of developments in Java 8 and beyond, and announced the GA release of JavaFX 2.0 during his keynote session at the JavaOne conference in San Francisco.

The two big themes for Java 8 are modularity via Jigsaw, and project Lambda. Discussing Jigsaw, Mark Reinhold emphasized the need for seamless integration between it and OSGi. IBM is collaborating on this work via OpenJDK, and indeed the first project that IBM will set up within the OpenJDK will look to explore and demonstrate working interoperability between the two modularity frameworks.



L’avenir des clients Java passera par JavaFX
Durant la dernière conférence JavaOne 2011, Oracle a dévoilé sa stratégie concernant les applications clientes Java. Sans surprise, Oracle mise sur JavaFX.
Pour rappel, JavaFX est une API pour développer des RIA (desktop ou mobile), apparue il y a quelques années, mais qui n’a pas rencontré le succès escompté. Face à cet échec, une nouvelle version 2.0 de JavaFX a été présentée à la conférence JavaOne 2010.



Oracle Sets Out Two Year Plan for Client-side Java
Given that Oracle is predominantly focused on enterprise software, it has been tempting to assume that the vendor would largely ignore client-side Java. It became clear at JavaOne this year, however, that Oracle is making a renewed push on the desktop, spearheaded by JavaFX. It will also be open-sourcing the entire JavaFX platform via OpenJDK.



Hello JavaFX 2.0: Introduction by NetBeans 7.1 beta
 
Over the years since the 2007 JavaOne announcement of JavaFX, I have been somewhat critical of what it has to offer. After Oracle's announcement at JavaOne 2010 that JavaFX would abandon the proprietary JavaFX Script and instead support standard Java APIs, I began to wonder [8] if it was time to invest in learning JavaFX. With the JavaOne 2011 announcements [9] that Oracle intends to pursue standardization of JavaFX as part of Java SE and to open source JavaFX, it is now an easy decision to invest time and energy into learning JavaFX 2.0. In this post, I publicly begin that process. The last couple times I looked at JavaFX, I stopped after feeling disillusioned and resentful. I am expecting better results this time.



Using JavaFX Charts

This tutorial describes the graphical charts available in the javafx.scene.chart package of the JavaFX SDK and contains the following chapters:
  • Introduction to JavaFX Charts
  • Pie Chart
  • Line Chart
  • Area Chart
  • Bubble Chart
  • Scatter Chart
  • Bar Chart
Each chapter provides code samples and applications to illustrate how to use a particular chart. You can find the source files of the applications and the corresponding NetBeans projects in the Application Files.



Premières infos sur Java 9 à Devoxx ?
Il semblerait que la conférence Devoxx nous ait apporté quelques informations concernant les lignes directives de Java 9.

On devrait y retrouver les reified generics et l'unification des primitives.






The 55 New Java 7 Features You (Probably) Didn't Hear About
Slides from deck presented at EclipseConEurope 2011, on November 2ndin Ludwigsburg, Germany.



Les lambda expressions dans Java 8
Durant cet été, l’actuel architecte de Java auprès d’Oracle, Brian Goetz, a fourni des informations intéressantes sur l’implémentation des lambda expressions dans le futur Java 8 et de ses conséquences sur le langage. Par lambda expression comprenez ici closure ou fonction anonyme, qu’il est possible de stocker dans une variable ou de retourner depuis une méthode ou depuis une autre fonction, et bien sûr d’appeler. L’intégration des lambda expressions se fait dans le cadre de la JSR 335 (JSR 335: Lambda Expressions for the Java Programming Language), aussi appelé Lambda Project.




Java Lambda Syntax based on C#, Scala 
One of the most anticipated new features of Java 8 is the introduction of Lambdas, which are anonymous functions that can be passed around like data in arguments and variables. However, the syntax for these wasn't widely decided, with polls asking for input on what would be most familiar to others. A recent posting on the lambda-dev mailing list announced the conclusion that the Java Lambda syntax will be based on C# syntax. This is already widely known and used (as C# had delegates back in 1.0, support for delegate functions in 2.0 and lambda expressions in 3.0).



Java Enum Tutorial: 10 Examples of Enum in Java
Enumeration (Enum) in Java was introduced in JDK 1.5 and it is one of my favorite features of J2SE 5. Java Enum as type is more suitable on certain cases for example representing state of Order as NEW, PARTIAL FILL, FILL or CLOSED.

vendredi 2 septembre 2011

Veille technologique semaine 35

Pour le bulletin de cette semaine, je vous propose les sujets suivants :
  • une réflexion sur les compétences d'un développer.
  • Une synthèse des métriques des bugs dans les logiciels.
  • Le choix d'un OS pour les systèmes embarqués : Windows ou Linux ?
  • IBM a le record mondial de data center avec 120Po (120 millions de giga octets).
  • IBM propose le premier supercalculateur de 20P flops (20 millions de Giga flops) avec 100 000 processeurs, avec des transactions mémoires faite par le matériel : le processeur PowerPC. C'est un 64 bits à 18 coeurs avec 1,5 milliards de transistors, 1,6Ghz pour 205 Gflops à 55 Watts.
  • Les différents moyens de modulariser en Java
  • Le JSR (Java Specification Request) 107 au sujet d'un cache standard est (enfin) prévus pour JEE 7 (Java Enterprise Edition 7).
  • La version 2 du framework Java Disruptor : architecture de programmation concurrente pour consommer de 40 à 50 millions d'événements par seconde (hors réseau). Ceci démontre que les performances de dépendent pas de la technologie (langage Java dans cet exemple), mais plutôt de l'architecture (dynamique dans cet exemple).
  • Une proposition dévolution du langage pour le JDK 8 : les Virtual Extension Methods
  • Explication de la gestion automatique des ressources (ARM : Automatic Resource Management) du JDK 7 : un concept proposé par C# depuis longtemps, repris par le JDK 7. C'est un concept nécessaire au langages à garbage collector.
  • Un résumé sur les IO et les NIO en Java.
Bonne lecture.


Quel type de développeur êtes-vous ?
Etes-vous un expert ou un développeur sénior ? Quelle définition donnez-vous au mot « consultant sénior » ? La définition et la qualification d'un profil représente un gros travail. C'est un sujet tellement vaste, que je me suis dis : il faut que j'en parle avec eux. Bref me voilà de retour pour bloguer sur ce sujet…


How many bugs do you have in your code?
If you follow Zero Bug Tolerance of course you're not supposed to have any bugs to fix after the code is done. But let's get real. Is there any way to know how many bugs you're missing and will have to fix later, and how many bugs you might already have in your code? Are there any industry measures of code quality that you can use as a starting point?

On average 85% of bugs introduced in design and development are caught before the code is released (this is the average in the US as of 2009). His research shows that this defect removal rate has stayed roughly the same over 20 years, which is disappointing given the advances in tools and methods over that time.

We introduce 5 bugs per Function Point depending on the type of system being built (1 Function Point to
about 50-55 lines of Java code). Web systems are a bit lower surprisingly, at 4 bugs per Function Point; other internal business systems are 5, military systems average around 7.

Which means that for a small application of 1,000 Function Points (50,000 or so lines of Java code), you could expect around 750 defects at release.


Embedded operating systems: Linux versus Windows
Should you choose Linux or Windows for your next embedded project?
Before you begin an embedded project, you have a number of choices to make. Some of these decisions about hardware will be no-brainers based on the target device or the specific purpose of the embedded system. However, deciding on an operating system isn't always so clear cut. Assuming your development team is comfortable working with both Linux and MS Windows, you should closely examine the pros and cons of each OS to see which one will provide the most value for your project.


IBM assemble un centre de stockage de 120 Po
IBM vient de battre le record du monde en la matière en assemblant une unité de stockage de 120 Po, soit 120 millions de Gigaoctets. Ce système est composé de 200 000 disques durs à plateau (ce qui fait des unités à 600 Go).

Cette capacité colossale permettrait de stocker 60 copies de la plus grosse archive d'Internet existante ou encore 24 milliards de fichiers MP3 bien encodés.


Bien entendu l'exploit n'est pas tant de mettre 200 000 disques durs dans un même endroit mais bien de les gérer ensemble et aussi de régler le problème des pannes inévitables avec un tel nombre de produits. C'est là que se situe l'expertise qu'IBM veut mettre en avant. Tout est géré par des systèmes experts qui reconstruiront en tâche de fond et de manière totalement transparente les données des disques qui viendraient à mourir ce qui vu leur nombre
doit arriver plusieurs fois par jour.

Cet assemblage utilise un système de fichier appelé GPFS qui a été développé pour améliorer grandement l'accès aux données et les débits en créant des sortes de RAID 0 sur plusieurs grappes de disques et qui a permis, il y a peu de temps, de battre un autre record en indexant 10 milliards de fichiers en seulement 43 minutes.

Maintenant, IBM compte vendre ce type de solution aux possesseurs de supercalculateurs, mais aussi aux sociétés qui font du Cloud. Si cette pratique se généralise, il faudra en effet qu'ils aient des quantités difficiles à appréhender de stockage dans leurs centres de données.


IBM's new transactional memory: make-or-break time for multithreaded revolution
The BlueGene/Q processors that will power the 20 petaflops Sequoia supercomputer being built by IBM for Lawrence Livermore National Labs will be the first commercial processors to include hardware support for transactional memory.

Transactional memory could prove to be a versatile solution to many of the issues that currently make highly scalable parallel programming a difficult task.

Most research so far has been done on software-based transactional memory implementations. The BlueGene/Q-powered supercomputer will allow a much more extensive real-world testing of the technology and concepts. The inclusion of the feature was revealed at Hot Chips last week.


Modules, modules, modules …
I think everybody will agree that writing modular applications and modularity in general is a good thing. But how does support for modularity look like, both from the Java and Scala languages and various Java/Scala frameworks? There's a lot of different approaches! Let's look at some of them. Below "protection" means how well modules are separated either at compile-time or run-time.


JSR-107, JCache: Alive and Going to be Part of Java EE 7
Distributed caching is the tip of the spear for performance and scalability, yet Java does not have a completed standard caching mechanism yet. JSR- 107, the JCache API, is being actively worked on and will be included in Java EE 7. JSR-107 has gained some notoriety over the years because it is one of the older JSRs yet has never been completed, but given the increased demand for caching, JSR-107 will finally see the light of day.


Disruptor 2.0 Released
Significantly improved performance and a cleaner API are the key takeaways for the Disruptor 2.0 concurrent programming framework.

Performance
Significant performance tuning effort has gone into this release. This effort has resulted in a ~2-3X improvement in throughput depending on CPU architecture. For most use cases it is now an order of magnitude better than queue based approaches. On Sandybridge processors I've seen 40-50 million events processed per second.


Virtual Extension Methods (or, wedging multiple inheritance into the JVM)
Goals
• Encourage the creation of more abstract, highperformance libraries
• Secondary goal: encourage a more side-effect-free programming model
• Simplify the consumption of such libraries through a concise code-as-data mechanism
• Provide for better library evolution and migration
• Collections are looking long in the tooth
• Lambdas without broad library support would be disappointing
• Secondary goal: keep doors open
• Function types (but requires reification)
• Control abstraction (but lots of work needed to get there)


Garbage collection with Automatic Resource Management in Java 7
This post provides a brief overview of a new feature introduced in Java 7 called Automatic Resource Management or ARM. The post delves how ARM tries to reduce the code that a developer has to write to efficiently free the JVM heap of allocated resources.
One of the sweetest spots of programming in the Java programming language is automatic handling of object de-allocation. In Java world this is more popularly known as garbage collection; it basically means that developers do not have to worry about deallocating the object allocated by their code. As soon as a developer is finished with using the object he can nullify all references to the object and then the object becomes eligible for garbage collection.


Java NIO vs. IO
When studying both the Java NIO and IO API's, a question quickly pops into mind:
When should I use IO and when should I use NIO?
In this text I will try to shed some light on the differences between Java NIO and IO, their use cases, and how they affect the design of your code.