vendredi 19 mars 2010

Veille technologique semaine 11

Pour le bulletin de cette semaine, je vous propose les articles suivants :
  • Les statistiques du monde Java : il y a plus d'équipements avec du Java embarqué que d'humains sur la planète. Sinon il y a environs 6,5 millions de programmeur Java.
  • Les leçons des technologies Java et DotNet.
  • Une présentation du langage Scala : un résumé.
  • Microsoft qui a présenté IE 9 : support de HTML 5.
  • Présentation par Microsoft de Windows Mobile 7 : modèle de programmation, pas de multitâches utilisateur et pas de code natif (C++) : que du code managé DotNet.
  • Présentation de HTML 5 par Google, HTML 5 et JavaScript, les websockets.
  • Les règles de conceptions des API : c'est un sujet à soigner.
  • Les transaction mémoire non intrusive : le projet Deuce :
  • Le projet Jigsaw du JDK 7.
  • Commentaire sur le JSR 310 : Date and Time.

Bonne lecture.

What's Happening in the Java World?
Statistics for Java:
  • 15 million JRE downloads/week (doesn't count tax season in Brazil)
  • 10 billion-ish Java enabled devices (more devices than people)
  • 1 billion-ish Java enabled desktops
  • 100 million-ish TV devices
  • 2.6 billion-ish mobile devices
  • 5.5 billion-ish smart cards
  • 6.5 million professional Java developers

C++, Java and .NET: Lessons Learned from the Internet Age
His talk was a retrospective of the trade-offs compared to C++ illustrated by Java, C# and other VM-based programming languages with Garbage-Collection, scripting languages simultaneously thrived, and what this teaches us about the applicability of technology to emerging challenges and environments such as cloud computing. Why did Java become so successful? Some folks say it was marketed better, but it was Sun - so we know that could've have been possible.
Top 10 Reasons Why Java has been able to supplant C++.
The Top 10 list of advantages C++ has over Java.

The Scala Programming Language
Introducing Scala
Scala is a general purpose programming language designed to express common
programming patterns in a concise, elegant, and type-safe way. It smoothly integrates
features of object-oriented and functional languages, enabling Java and other programmers to be more productive. Code sizes are typically reduced by a factor of two to three when compared to an equivalent Java application.

MIX10 : Microsoft présente Internet Explorer 9

À l'occasion du MIX10, la conférence des développeurs de Microsoft, la firme de Redmond a levé le voile sur la prochaine version de son navigateur fétiche, Internet Explorer 9.

Microsoft semble encline à mieux respecter les standards, plaçant le HTML5 au cœur de son navigateur. Comme Safari ou Chrome, les formats H.264 et AAC ont été retenus pour la vidéo et l'audio. Le CSS est mieux géré, notamment les nouvelles fonctions d'opacité, mais IE 9 cale à 55 % de l'Acid Test 3.

Microsoft Details Internet Explorer 9
As predicted, more Microsoft news from MIX10, and this is some big stuff: Internet Explorer 9. As we all know, Microsoft really let Internet Explorer rot away, allowing competitors to make much better browsers with better standards compliance and performance. With IE9, Microsoft is aiming to not just close that gap -but to overtake the competition.

There's really a lot to tell about Internet Explorer 9, so I don't really know where to start. First of all, you can download a test version[], called the IE9 Platform Preview. This preview will be updated every eight weeks, and customer feedback will be taken into account - presumably much like the Windows 7 development phase.

So, what's new in IE9? Fist, there's a new JavaScript engine called "Chakra". It is a much, much faster engine than IE8 has, and it currently performs somewhere in the middle compared to other major browsers. The interesting thing about it is that IE9 will run Chakra (and thus, JavaScript code) on a separate thread, on a separate core (if available).

That's not the only thing that IE9 will hand off to hardware - text, graphics, and SVG rendering will be hardware accelerated as well, providing, according to Microsoft at least, better performance than other browsers.

A hot iron is obviously standards compliance, and it appears that Microsoft has finally learnt its lesson with this one. The post on the IEBlog announcing the IE9 MIX10 details is full of holding hands and flowers and free hugs, and the current Platform Preview build scores 55/100 on the ACID3 test. Microsoft is asking for feedback on this stuff.

"The main technologies to call out here broadly are HTML5, CSS3, DOM, and SVG," Microsoft writes, "The IE9 test drive site has more specifics and samples. At this time, we're looking for developer feedback on our implementation of HTML5's parsing rules, Selection APIs, XHTML support, and inline SVG. Within CSS3, we're looking for developer feedback on IE9's support for Selectors, Namespaces, Colors, Values, Backgrounds and Borders, and Fonts. Within DOM, we're looking for developer feedback on IE9's support for Core, Events, Style, and Range."

At the Platform Preview site, there's a whole bunch of browsers tests to perform, and, of course, you can download the latest IE9 build - new territory for Microsoft. This is what competition can do, and it's good. Especially the hardware acceleration sounds incredibly interesting.

Windows Phone 7 Series Programming Model
"The application model supported on Windows Phone 7 series will be managed only and will leverage Silverlight, XNA and the .NET Framework".

No native code development on Windows Phone 7 says Microsoft – so what about Flash?

Windows Phone 7 is a managed code platform, we've been told at Mix10 in Las Vegas. Development is via Silverlight or XNA; there is no native API.

Of course there is a native API; the question is more about what code is allowed to access it. Still, in the press briefing the spokesman was clear that native code development will not be supported.

What about projects like Adobe's Flash runtime, which both Microsoft and Adobe have said is planned, or at least (in Microsoft's case), not blocked – although we already know that Flash will not be available in the first release.

All my spokesman would say is that nothing has been announced about that.

My suspicion is that in reality certain privileged vendors will be able to, in effect, extend the operating system with native code libraries. Adobe could be one of those; so too could a company like Rhomobile, which has a cross-compiler for a variety of mobile platforms. So I doubt that Microsoft has yet given us the full story here.

Update: The latest on this is that Microsoft's Charlie Kindel says that Adobe will have special native access for Flash, but that no other vendor will have that privilege. This still does not make sense to me. Let's suppose that Windows Phone 7 is a big success. What justification could Microsoft have for supporting the Flash runtime but not the Java runtime, for example? I suspect that Microsoft is chasing the Flash checkbox to one-up Apple; but if Adobe gets native access, others will no doubt follow.

Microsoft: Windows Phone 7 Doesn't Do Multitasking - Yet
Charlie Kindel, who sets out Microsoft's Windows Phone developer strategy, explained in an interview that Windows Mobile Phone 7 Series will not support multitasking, for the same reasons we've heard before: to preserve battery life, and to keep the phone responsive at all times.

Présentation HTML5 par Patrick Chanezon, conférence
Patrick Chanezon de Google est passé en France pour présenter l'évolution du développement Web et de la plate-forme lors de la conférence « Innovation Web » en décembre 2009. Cette conférence est organisée par l'association étudiante GET. Celle-ci a pour but la promotion des technologies Google auprès des étudiants et plus largement, des développeurs.

HTML5 – Les API JavaScript
C'est le moment de passer à la deuxième partie de cette série sur HTML5, avec en ligne de mire les nouveautés côté JavaScript. La spécification a pris le parti de mettre
JavaScript en avant, avec des API standards qui pourront être implémentées dans tous les navigateurs. L'un des buts de la spécification est de faire monter HTML et JavaScript à un niveau de finition et de performance égalant les applications de bureau. Côté performance, il y a le parallélisme et quelques fonctions natives qui viendront remplacer des fonctions déjà implémentées par les frameworks JavaScript. Mais HTML5 fait aussi écho à l'explosion du Web mobile avec la géolocalisation et les applications hors ligne pour ceux qui ne sont pas connectés en permanence.

How HTML5 Web Sockets Interact With Proxy Servers
With the recent explosion of WebSocket server implementations, a lot of questions have come up about how HTML5 Web Sockets deal with proxy servers, firewalls, and load-balancing routers. Will proxy servers automatically kill WebSocket connections? Do HTML5 Web Sockets handle firewalls and proxy server issues better than Comet? Are Web Sockets the silver bullet in seamless proxy server traversal? In this article, I'll explain how HTML5 Web Sockets interact with proxy servers, load balancing routers, and firewalls. Additionally, I'll explain how Kaazing WebSocket Gateway and its Web Socket emulation can add additional value.

The Primary Goals of API Design: Functional Software Elegance
1.The primary goal of an API or component is to solve some problem the user has.
2.The secondary, but still important goal is to do so with as little effort required from the user as possible.
3.Third, your API should not create any new problems for the user.

Noninvasive concurrency with Java STM
Abstract. In this paper we present a complete Java STM framework, called
Deuce, intended as a platform for developing scalable concurrent applications
and as a research tool for designing new STM algorithms. It was not clear
if one could build an ef ficient Java STM without compiler support. Deuce
provides several bene ts over existing Java STM frameworks: it avoids any
changes or additions to the JVM, it does not require language extensions or
intrusive APIs, and it does not impose any memory footprint or GC overhead.
To support legacy libraries, Deuce dynamically instruments classes at load
time and uses an original "field-base" locking strategy to improve concurrency.

Deuce also provides a simple internal API allowing different STMs
algorithms to be plugged in. We show empirical results that highlight the
scalability of our framework running benchmarks with hundreds of concurrent
threads. This paper shows for the rst time that one can actually design
a Java STM with reasonable performance without compiler support.

Software Transaction Memory : Deuce
We present a complete Java STM framework,
called Deuce, intended as a platform for developing scalable concurrent applications and as a research tool for designing new STM algorithms.
Deuce provides several benefits over existing Java STM frameworks:

  • Avoids any changes or additions to the JVM.
  • Does not require language extensions or intrusive APIs.
  • Does not impose any memory footprint or GC overhead.
  • Dynamically instruments classes at load time.
  • Uses an original "field-based" locking strategy to improve concurrency.
  • Provides a simple internal API allowing different STMs algorithms to be plugged and test.

Jigsaw will come with JDK 1.7 and is now part of the openjdk project and so opensource. Other JDK implementations could simply reuse it.It will become interesting, because:

JSR 310 Date and Time API for Java
Stephen Colebourne, lead of the JSR 310 Date and Time API, has recently published an Early Draft Review of the proposed additions and changes to the Java language. InfoQ caught up with Stephen at QCon London to find out more about the project.
InfoQ: Why do we need a new Date and Time API? What's wrong with the existing one?
Stephen: The main problem with the current APIs (java.util.Date and java.util.Calendar) is that they are mutable.

vendredi 12 mars 2010

Veille technologique semaine 10

Pour le bulletin de cette semaine, je vous propose les sujets suivants :
  • un article sur le problème du vocabulaire logiciel versus le vocabulaire de client,
  • un sondage réalisé par Martin Fowler au sujet des outils de gestion de configuration,
  • le group Kronos annonce la sortie de la spécification OpenGL 4.0,
  • le retour de la JSR 310 : le remplacant de la classe Date du JDK,
  • le projet Multi-verse qui propose des transactions mémoire (STM : Software Transaction Memory) pour la JVM : langage ciblé : Java, Scala, ... Bientôt de base dans le JDK ?
  • Les appel asynchrone et la transparence : comment ne pas modifier une interface de services ou d'événements pour réaliser un appel asynchrone ?
  • Deux articles sur le langage scala : la base et les traits.
  • Un Hello World avec la modularité du JDK 7 : le classpath devient inutile.

Bonne lecture.

Pourquoi le client ne parle pas votre langue
Il semble important d'apprendre aux développeurs quelques techniques pour parler avec le client. Cet enseignement vient de ce que j'ai vu lors de ma formation Domain Driven Design chez Zenika : l'importance d'un langage unique, ce que l'on appelle « Ubiquitous Language« . Je ne parle pas des règles de politesses, mais bien de l'importance de définir une sémantique claire entre l'équipe de réalisation d'une part, et l'équipe de maîtrise d'oeuvre d'autre part.

VCS Survey :
When I discussed VersionControlTools I said that it was an unscientific agglomeration of opinion. As I was doing it I realized that I could add some spurious but mesmerizing numbers to my analysis by doing a survey. Google's spreadsheet makes the mechanics of conducting a survey really simple, so I couldn't resist.

Khronos Unleashes Cutting-Edge, Cross-Platform Graphics Acceleration with OpenGL 4.0
Open standard 3D API specification available immediately; Provides performance, quality and flexibility enhancements including tessellation and double precision shaders; Tight integration with OpenCL for seamless visual computing.

Où l'on reparle de la JSR-310

La JSR-310 (Date and Time API) était initialement prévue pour le JDK 7 mais il y a un an, la roadmap de Sun l'en excluait. Cette spécification était pourtant attendue par tous ceux qui étaient lassés par les défauts de java.util.Date et qui voyaient enJodatime (dont la JSR-310 est largement inspirée) une échappatoire tentante. L'API proposée par cette JSR est en effet beaucoup plus riche et permet de représenter tous les concepts d'instants et de durées.

Lors de l'annonce du report du JDK 7 en novembre dernier, Mark Reinhold avait laissé la porte ouverte aux fonctionnalités qui avaient été abandonnées faute de temps ; la JSR-310 en faisait partie. Courant février, questionné sur cette spécification par un spectateur d'un webcast, il disait regretter qu'elle n'ait pu être finalisée dans les temps. Dans le même temps, Stephen Colebourne, spec lead de la JSR-310, expliquait sur son blog qu'il disposait désormais de temps libre pour travailler sereinement sur cette spécification. Quelques semaines plus tard une early draft review voyait le jour. Enfin, il y a quelques jours, Stephen Colebourne répondait à un commentaire en disant que l'inclusion de la JSR-310 dans le JDK 7 dépendrait de sa finalisation et de la volonté de Sun/Oracle.

La saga de la JSR-310 semble donc renaître de ses cendres et la possibilité de son intégration au prochain JDK est bien réelle. L'affaire est donc à suivre…

Multiverse: Open Source Software Transactional Memory for Java.
Interview with creator Peter Veentjer by Alex Tkachman

Today we have pleasure to talk with Peter Veentjer creator and lead developer of very interesting open source project called Multiverse

Alex : Hi Peter! Thank you for taking time to talk with DZone. Why don't you start with telling us a bit about what Multiverse is ?

Hi Alex, Multiverse is a Software Transactional Memory implementation for the Java platform I have been working on for the last 18 months. It has 2 important mission statements:

1) To create an STM that seamlessly integrates with the Java language
2) To create an STM that can integrated with other JVM like Scala, Groovy or JRuby

Alex : Software Transactional Memory. That sounds cool. What does it do?

Transparency and Asynchronous Method Invocation
This article focuses on transparency in the context of asynchronous method invocation. It describes two solutions available to provide full-transparency: where asynchronism is entirely masked to the developer. The main contribution of this paper is to clearly present the drawbacks of this approach:
exception handling and developer consciousness are two problems inherent to full-transparency that makes it at least, hard to use, at worst, useless. This paper defends explicit asynchronous method invocation and proposes semi-transparency: almost all the complexity of asynchronism is masked to the developer but the asynchronism itself. keywords: transparency, asynchronous method invocation, concurrency.

Scala, partie 1
Proche de Java, il est pourtant bien différent, et vraiment intéressant comme nous allons le voir ensemble.

James Gosling, l'un des inventeurs de Java, a dit à propos de Scala la phrase suivante :
« If I were to pick a language to use today other than Java, it would be Scala »

Plus suprenant, James Strachan qui a initié le langage Groovy en 2004, a dit aussi à propos de Scala :
« I can honestly say if someone had shown me the Programming in Scala book by by Martin Odersky, Lex Spoon & Bill Venners back in 2003 I'd probably have never created Groovy. »

Le langage a été initié en 2003. Scala (pour Scalable Language) a été pensé pour la programmation multi-threads, avec un niveau de qualité assez impressionnant. Ce langage cible toujours du bytecode dans une machine virtuelle Java.

Scala, partie 2
Après un premier article qui vous a fait pas mal réagir, je vais vous parler des Traits et des Collections. J'ajoute un peu plus de programmation fonctionnelle dans cet épisode.

Hello World module with Jigsaw

vendredi 5 mars 2010

Veille technologique semaine 9

Pour le bulletin de cette semaine, je vous propose les sujets suivants :
  • les Microsoft techdays
  • HTML 5 et ses nouveautés
  • La conférence OSGi à Londres,
  • La commutation de contexte chez les humains : il faut la minimiser car non optimisée.
  • Les architectes logiciel ?
  • Les couches et management
  • La fusion de HotSpot et JRockit
  • La modularité du JDK 7
  • Un pattern pour les constantes initialisées dynamiquement en Java.
  • Un Quiz Java

Bonne lecture.

Microsoft Techdays 2010 (2/3)
Les Techdays sont l'occasion pour Microsoft de présenter chaque année à ses utilisateurs, du plus geek au plus boss, sa gamme de produits, d'outils sous forme de présentations, d'ateliers ou de retour d'expérience. Difficile de couvrir complètement cet événement tant l'offre de sessions est pléthorique, nous vous proposons donc, à travers une série de posts (voir le premier [1]), sur les sessions que nous avions choisi et de partager avec vous notre ressenti. Ce deuxième post est orienté nouveautés serveurs, cloud … et un petit bonus.

HTML5 – Les nouveaux éléments
Comme évoqué dans une précédente revue de presse, voici le premier article de ma série sur HTML5. Plutôt que de faire du comptage de points entre Apple et Adobe, j'ai décidé de commencer par faire un tour d'horizon des nouveautés proposées par cette nouvelle spécification du W3C. Dans ce premier article, je vous propose donc de faire un voyage à la découverte des nouveautés du côté de HTML. ; pour connaître les nouvelles balises, et les nouveaux attributs que nous pouvons déjà ou pourrons bientôt utiliser dans nos navigateurs. Du layout au canvas en passant par les WebForms, le son et la vidéo, tout tout tout, je vous dirai tout sur HTML5. Commençons donc par le commencement: HTML5 qu'est-ce que c'est ?

OSGi DevCon London
Last week saw the first OSGi DevCon London, held in conjunction with JAX London in Hammersmith's Novotel. The keynote by Kirk Knoernschild available beforehand as a preview, packed the room to standing room only.
Kirk's presentation (slides) did not focus on OSGi directly, but rather on complexity of software and what projections the future holds. Analysis of the past growth of source code suggests that the number of lines of code ever written doubles every seven years; to put it another way, by 2017, the world will have as much new code again as ever existed up until 2010.

Human Task Switches Considered Harmful
In fact, the real lesson from all this is that you should never let people work on more than one thing at once. Make sure they know what it is. Good managers see their responsibility as removing obstacles so that people can focus on one thing and really get it done.

Are You a Software Architect?
The line between software development and software architecture is a tricky one. Some people will tell you that it doesn't exist and that architecture is simply an extension of the design process undertaken by developers. Others will make out it's a massive gaping chasm that can only be crossed by lofty developers who believe you must always abstract your abstractions and not get bogged down by those pesky implementation details. As always, there's a pragmatic balance somewhere in the middle, but it does raise the interesting question of how you move from one to the other.

Layers of Management == Layers of Veto
In an organization with more than one layer of management, the default answer must be "no". Folks get needlessly frustrated by this. But it's a logical consequence of multiple layers of management. Consider that direction must come down from above. If you're suggesting something up to your manager (or in your role as an outsider) the response must be "no". What you're suggesting is not the direction that came from above.

La fusion JRockIt / Hotspot pas pour demain

Nous en parlions il y a quelques semaines, Oracle envisage de ne proposer à l'avenir qu'une seule JVM, qui tirerait le meilleur des deux que la firme s'est offert (JRockit via BEA, et Hotpsot via Sun). Dans un récent webcast (via InfoQ), Mark Reinhold s'est exprimé sur le sujet. Cette fusion n'est pas pour tout de suite : trop de clients utilisent les fonctionnalités spécifiques à l'une ou l'autre des JVMs en production, et il serait risqué de les forcer à migrer vers une version fusionnée bancale. Ce dernier se dit jaloux de certaines fonctionnalités de JRockIt et donc particulièrement excité d'avoir l'occasion de l'étudier en profondeur. Cependant, ce qui transparait dans son discours (et peut être via nos diverses expérience), c'est que la JVM de Sun est en avance sur celle de BEA. La prochaine version fusionnée devrait donc tendre plus vers Hotspot que vers JRockit. En résumé rapide, cette future VM Oracle devrait avoir les fonctionnalités runtime de Hotspot, et le garbage collector et la robustesse de JRockit. Finalement, à part l'ébauche d'une timeline, nous ne sommes pas beaucoup plus avancés.
Coté nouveautés du JDK 7, Mark Reinhold se dit aussi particulièrement excité par l'intégration du projet Coin (au contraire de la grande majorité des consultants Xebia, qui trouvent que la plupart de ces évolutions syntaxiques confinent au gadget).
Il reparle aussi des closures, principalement sous l'angle des raisons de la polémique, mais personne ne semble réellement savoir comment elles seront implémentées dans le JDK 7 (voir ci-dessous pour l'avancement du projet Lambda).
Dernière annonce, pour ceux qui comme lui sont impatients de voir une JVM enfin modulaire (aka Jigsaw, prévu dans le JDK 7, voir ci-dessous), ils devraient en avoir un aperçu mi-mars, avec la release 88 de l'OpenJDK.

Certains noteront avec un certain amusement (ou une certaine nostalgie) quelques ratés : "We, at Sun..."

Jigsaw, les modules du pauvre ?

Adam Bien est l'un des Java champions les plus visibles et les plus lus d'internet. Il a publié cette semaine un petit article au titre accrocheur : « Jigsaw / JDK 1.7 sera une solution qui permettra de répondre à 80% des besoins de modularité ». Vous avez probablement suivi les différents épisodes et rebondissements de la modularité dans le JDK 7. C'est peut-être l'occasion de faire le point sur ce que propose Jigsaw.

Le projet Jigsaw proposera une implémentation permettant la mise en place d'un système de modules bas niveau pour vos projets. Il sera également utilisé en interne pour découper le JDK Oracle/Sun lui-même.

  • Jigsaw vous permettra de choisir tout ou partie du JDK tout en restant 100% rétro-compatible, d'améliorer les temps de démarrage de la JVM et son utilisation mémoire.
  • Jigsaw pourra être utilisé directement sur vos projets si vous disposez d'une JVM reposant sur ce système. Jigsaw sera chargé avant rt.jar et sera donc disponible à quiconque désirant l'utiliser. Ce projet étant open source, il sera également possible de réutiliser celui-ci dans d'autres contextes.
  • Jigsaw vous permettra de rendre vos applications modulaires progressivement. Nul besoin de migrer vos applications dans leur ensemble pour tirer parti des bénéfices de la modularité. Un même package peut être éclaté dans plusieurs modules.
  • À l'instar d'OSGi, Jigsaw n'est pas un moyen de recharger vos modules à chaud. Vos modules sont chargés statiquementau démarrage de vos applications.
  • Tous vos modules sont chargés dans un même classloader, cela permet de simplifier grandement son utilisation. Du même coup, il vous sera probablement possible de 'tricher' en chargeant, au runtime, des classes d'un module sans que vous en ayez réellement le droit.
Si vous confondiez modularité du JDK avec OSGi, cette liste vous a certainement ouvert les yeux : Jigsaw vous propose une solution beaucoup moins fournie qu'OSGi.

Dans les faits, ce projet a été créé, avant tout, pour casser notre bon vieux JDK monolithique. Bon nombre de polémiques ont été faites sur ce choix. Pourquoi se contenter d'aborder 80% des problématiques de la modularisation avec une nouvelle solution alors qu'OSGi en aborderait 90% ? La simplicité et la souplesse d'utilisation ont été préférées à une solution décrite comme lourde (nécessitant beaucoup de glue), vieillissante (datant de 1998) et difficile à maîtriser. Ce choix a été sans conteste difficile à effectuer, il s'est ailleurs attiré les foudres des défenseurs d'OSGi, mais reste complètement défendable

Declaring Final Variables Elegantly Using The Assigner Design Pattern
A final variable is used to define a constant value and reference, and can only be defined once. In most cases, declaring a final variable is just a matter of assigning to a primitive value or an object reference directly. However, in some cases, declaring a final class/instance variable may be more involving especially it gets assigned from a method that throws an Exception (eg API for database access, web access), or it may involve multiple statements.

Java Quiz #33
La classe ci-dessous part d'une bonne intention, mais où est le problème ?