AlcionTech

Aller au contenu | Aller au menu | Aller à la recherche

jeudi 20 novembre 2008

Mise à jour communautaire de developpez.com

Je suppose que bon nombre d'entre vous connaît le site http://www.developpez.com/, la plus grosse communauté virtuelle de développeurs francophones (tous langages confondus), ses blogs techniques, et ses forums, qui sont une référence lorsqu'on butte sur un problème technique.

Depuis maintenant 3 jours, ce site a subi une grosse mise à jour, visant à accentuer le côté "communautaire":

  • possibilité d'annoter les profils des membres (principe des évaluations Ebay ou des "messages sur le mur" de Facebook)
  • possibilité de créer des albums de photos
  • possibilité de créer (ou de rejoindre) des groupes d'utilisateurs par centre d'intérêt.


Derrière cette mise à jour, on peut voir une tendance assez généralisée du web à s'orienter vers les systèmes communautaires (Ebay ayant été un des précurseurs en la matière, en allant jusqu'à créer un vocabulaire dédié partagé entre "ebayeurs et ebayeuses"): les nouvelles fonctionnalités proposées par http://www.developpez.com/ rejoignant finalement celles proposées par d'autres sites communautaires (Facebook, LinkedIn, Viadeo, etc.).

mardi 4 novembre 2008

Les Google Apps disponibles 99.9% du temps

Google vient de l'annoncer sur son blog officiel: le taux de disponibilité des Google Apps est de 99,9%

C'est plutôt une bonne nouvelle pour le million d'utilisateurs professionnels (dont Alcion Group) ayant choisi d'externaliser une partie de leur infrastructure informatique en utilisant les Google Apps, afin de se lancer dans le Cloud computing, concept à la mode du monde informatique.

Lire la suite...

mercredi 16 juillet 2008

Revue de presse estivale du monde java

En juin et en juillet, de nombreux projets liés à java ont bien évolué. Voilà un petit résumé de ces évolutions (outre la sortie de la nouvelle version d'Eclipse Ganymède à laquelle un billet complet a été dédié):

Par ailleurs, Sun a publié un compte-rendu des différentes présentations techniques qui y ont été faites lors de JavaOne session 2008.

jeudi 26 juin 2008

Sortie de Eclipse Ganymede

Il y a un mois, nous avions annoncé la sortie de la première release candidate de la nouvelle version d'Eclipse, et les nouveautés qu'elle apportait.

Hier, c'est la version finale de cette nouvelle version (Eclipse 3.4 "Ganymede") qui est parue. Et avec elle, un certain nombre de fonctionnalités supplémentaires par rapport à la release candidate et à la version précédente.

Lire la suite...

lundi 23 juin 2008

Vérifier automatiquement la qualité d'un code java

Il existe de nombreuses règles de "bonnes pratiques" en programmation objet, dont certaines sont spécifiques au langage java. Il existe des formations et des ouvrages entiers consacrés à ce sujet: je n'ai donc absolument pas la prétention d'en faire la liste ici. En revanche, j'aimerais attirer l'attention sur le fait qu'il existe maintenant des outils faciles à mettre en oeuvre, et permettant de vérifier automatiquement un certain nombre de ces règles de "bonnes pratiques". Ils permettent d'améliorer significativement la qualité du code, pour un faible coup (à condition qu'ils soient déployés le plus tôt possible dans le processus de développement).

Lire la suite...

lundi 2 juin 2008

Project Euler

Je poste cet article au nom d'Olivier Coanet qui nous fait découvrir un projet de défis mathématiques. Merci pour lui !

Project Euler (http://projecteuler.net) est un site proposant près de 200 challenges mathématiques à résoudre par des programmes informatiques.

Si les premiers problèmes sont triviaux, la difficulté augmente progressivement et les derniers n'ont été résolus que par une poignée de personne surmotivés. Avis aux amateurs : de nouveaux challenges sont ajoutés régulièrement et à l'instant même où j'écris ce billet le problème 196 vient d'apparaître.

Etant donné que résoudre ces problèmes est une bonne occasion pour tester un nouveau langage, j'ai voulu voir ce que pouvait donner le C# 3.0. Le résultat est plutôt impressionnant.

Lire la suite...

mercredi 28 mai 2008

Eclipse Ganymede est passé en RC1

La nouvelle version de Eclipse (Ganymede) vient de passer la cap de la "Release Candidate". Il est encore un peu tôt pour l'utiliser en environnement professionnel, mais cette version se montre déjà prometteuse.

Du point de vue de l'interface, il y aura moins d'évolution majeures que n'en a connu la version "Europa" actuelle, mais on peut tout de même relever quelques points que les développeurs apprécieront:

  • le "quickfix" proposant de corriger automatiquement les erreurs de code apparaît maintenant au survol des erreurs: il n'est plus nécessaire d'aller jusque dans la barre latérale de l'éditeur
  • une navigation en "fil d'Ariane" permet de revenir bien plus facilement à la classe sur laquelle on travaillait lorsqu'on se déplace en suivant des objets ou des méthodes
  • la gestion des plugins installés et disponibles, qui a été complètement revue et qui est maintenant beaucoup plus intuitive
  • le temps de chargement de l'espace de travail, qui a été nettement réduit (divisé par 2 à 3)

Mais la grosse nouveauté de cette version réside à mon avis dans les deux nouvelles distributions disponibles, qui vont certainement être très prisées:

  • une distribution "Java J2EE" spécialisée dans les applications de reporting, incluant des outils de développement pour BIRT
  • une distribution "Architectes", incluant des outils de modélisation (UML, etc.)

Enfin, j'ai pu remarquer que la vitesse de compilation des gros projets a été augmentée par une meilleure gestion des processeurs à plusieurs cœurs.

Pour télécharger une de ces distributions de Ganymede, c'est par ici: http://www.eclipse.org/downloads/packages/

dimanche 30 mars 2008

Safari 3.1 et le nouveau visage du Web

safariApple a sorti ce mois-ci la version 3.1 de son navigateur Safari. Outre les classiques corrections de bugs et améliorations de performances (Apple annonce par exemple que cette version est 4,5x plus rapide que Firefox 2 dans l'execution du JavaScript), Safari 3.1 profite surtout des dernières améliorations du moteur de rendu Webkit qui lui permettent de prendre en charge un nombre important des futures spécifications de HTML5 et CSS3.
Je vous ai compilé une liste de nouveautés intéressantes, avec des liens vers des pages où vous pouvez les tester si vous avez installé cette version. (Je vous rappelle que Safari est aussi disponible pour Windows et qu'il peut être téléchargé gratuitement ici)

  • Les transformations (CSS3) : permet d'appliquer des transformations affines aux objets CSS (rotation, translation, redimensionnement ou cisaillement).
  • Les transitions (CSS3) : permet de définir des transitions fluides lors d'un changement de propriété d'un objet CSS. Il est possible de combiner des transitions et des transformations pour produire des animations amusantes.
  • Les polices téléchargeables (CSS3) : permet aux designers d'utiliser des polices qui seront téléchargées à la volée par le navigateur.
  • Les balises média (HTML5) : Support natif des contenus audio et vidéo dans les pages Web (sans Flash ou autre plugin externe). Offre également une API riche pour le contrôle de lecture.
  • Le stockage de données structurées côté client (HTML5) : permet aux applications Web de sauvegarder des données sur le disque dur et d'y accéder via une API à la syntaxe SQL. Notez l'animation à la fermeture d'un post-it, c'est le résultat de deux transformations (cisaillement + redimensionnement) et d'une transition (changement d'opacité sur 0,25s).

Les technologies propriétaires comme AIR ou Silverlight devront s'imposer rapidement, avant que ces fonctions ne soient supportées par tous les navigateurs.

jeudi 20 mars 2008

Utiliser la Wiimote autrement

Depuis maintenant plus d'un an, la Wii s'est imposée comme un énorme succès commercial de Nintendo, principalement a cause de sa manette, la "Wiimote", et de son gameplay révolutionnaire. Celui-ci permet effectivement de passer de très bonnes soirées entre amis, mais a également donné l'idée à des chercheurs d'analyser son fonctionnement, afin d'y trouver d'autres applications. Cette page consacrée à la Wiimote du professeur Johnny Chung Lee explique en images son fonctionnement, en trois parties:

  • une présentation du principe de fonctionnement de la Wiimote.
  • une application pratique, dans le domaine de la bureautique et du travail collaboratif.
  • une application à ce qui pourrait être "l'avenir de la télévision", avec une démonstration de "headtracking" impressionnante.

PS: si certains ont envie de bricoler et d'utiliser leur console autrement, le professeur Chung Lee a mis à disposition les codes sources de ses applications d'exemple (programmées en C#).

vendredi 14 mars 2008

Comment Marche Google : la présentation

Olivier Astier sur les moteurs de recherche, PageRank, et Google.

mardi 11 mars 2008

Jeudi 13 Avril - OpenBar special : comment marche Google

CommentMarcheGoogle.jpg Au cours de notre plongée dans l'univers de Google, nous aurons l'occasion de découvrir comment fonctionne le moteur de recherche le plus utilisé au monde, tant sur le plan de l'algorithme de recherche, clé de voute de la pertinence des résultats , que de son implémentation à l'échelle de plusieurs centaines de milliers de serveurs qui utilise des patterns logiciels novateurs. Nous aurons également l'occasion de voir comment fonctionne cette entreprise pas comme les autres. Il sera donc question de mathématiques, d'informatique, et d'organisation ; il y en aura pour tous les goûts et les différents métiers qui son ceux d'AlcionGroup.

jeudi 14 février 2008

OpenBar le 21 février : Webservices B2B : étude de cas et panorama technologique

mike Jeudi 21 février à 18h30 au siège

5 ans après leur arrivée sur le terrain, les webservices sont devenu un mode privilégié de communication entre applications, notamment de part et d'autre d'une frontière organisationnelle, par exemple entre partenaires (clients, fournisseurs). Ils offrent un couplage moins fort que d'autres protocoles, et sont disponibles sur une grande variété de plate-formes.

Après un rappel, l'étude de cas que nous présentera Aziz sera l'occasion de resituer les différents concepts (XML, HTTP, SOAP, UDDI, WSDL, WS-Security...), puis de passer aux choses sérieuses en implémentant un cas d'école sur Weblogic 8 et 9 et sur Apache CXF.

Lisp ou Perl ?

http://xkcd.com/

Nos reporters aux Microsoft Techdays, Day 1

MS TechdaysUn brillant essai de Laurent Liger et Olivier Coanet.

Où il sera question de toute l'actualité .NET, de Domain Driven Design, d'Entity Framework, de Linq, de lambda expressions, de F#...

Microsoft TechDays - Day 1

Session Plénière

/Olivier/ La session plénière c'est le grand show d'ouverture, avec les caméras de partout, les effets de scène et les personnalités. C'est aussi le moment pour faire le point sur les nouveaux outils Microsoft et les sessions de la journée. Le truc à ne pas rater et en même temps totalement inutile. On y apprend en gros que : - les technos mise en avant cette année sont Visual Studio 2008, SQL Server 2008 et Windows Server 2008, - les nouveaux projets des entreprises sont majoritairement réaliser en .NET : 39% contre 35% pour le Java (je ne cautionne absolument pas ces chiffres ^^), - les besoins en compétence .NET sont toujours important, d'ailleurs il y avait 600 offres d'emplois sur le salon. /Laurent/ Mine de rien, on était plus de 5400 personnes le premier jour dans la salle, on a eu droit à une petite vidéo enregistrée la semaine précédente par le futur retraité le plus riche du monde, monsieur Gates, qui regrettait de ne pas pouvoir être présent pour cet évènement qui est le plus grand d'Europe de ce genre et vient juste derrière la PDC (Professional Developers Conference) des États Unis.

Domain Driven Design

/Laurent/ Le concept du DDD (à ne pas confondre avec l'outil linux) date du début des années 2000, au moment ou les modèles d'architecture en couche d'applications n'était pas encore répendus, Eric Evans se posait déjà la question de savoir si cela n'allait pas poser de nouveaux problèmes et si le découpage proposé était vraiment la meilleure solution. Cette conférence nous a donc présenté le DDD qui est un découpage différent de celui adopté majoritairement maintenant. Actuellement la couche domaine a en effet tendance à être dépouillée au maximum pour ne plus être qu'une structure de donnée, épurée (trop) de comportement métier, ce dernier étant uniquement relégué au niveau de la couche services. La proposition du DDD est de recentrer le développement sur la couche domaine, de lui rendre l'intelligence qu'elle a perdue : c'est elle qui doit faire appel aux services et non l'inverse. Dans le paradigme DDD, les clients ne manipulent donc presque que des objets de la couche métier, alors que dans la quasi-totalité des développements effectués à l'heure actuelle, les clients utilisent des services pour agir sur les données.

Mais... c'est un tableau qui me fait peur : si la couche métier est au centre, il faut la modifier constamment pour l'adapter aux nouveau comportements que l'on souhaite ajouter. Dans le cas d'un développement .Net, il faudrait redéployer l'assembly associée à cette couche partout pour assurer la compatibilité des anciennes applications. Il s'agit d'ailleurs d'un faux problème à la base : il suffit de s'assurer dans un découpage traditionnel que les objets métiers conservent les règles métier qui sont les leurs. Si un objet à besoin de manipuler des données, rien n'empêche d'identifier les différentes opérations à effectuer, de créer une interface offrant ces opérations, et enfin d'injecter un service plus tard implémentant cette interface. Bref tout est déjà possible avec un découpage normal d'une application. Il faut juste faire attention à ne pas tomber dans un modèle "anémique".

Vous l'aurez compris, je n'adhère pas avec la vision pessimiste qu'avait l'auteur du DDD. Pour les curieux, un lien vers le livre fondateur de ce concept : http://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1202846134&sr=8-1

/Olivier/ La session était intéressante, ce qui n'est pas étonnant étant donné que l'auteur n'est autre que Sami Jaber, un des fondateurs de DotNetGuru (http://www.dotnetguru.org/). J'ajouterai aux remarques de Laurent que Sami a soulevé des problématiques intéressantes auxquelles je vous invite à réflechir : "faut-il mettre en places des architectures dans lequelles les développeurs n'ont pas de question à se poser et où chaque problématique a déjà été pensée ?" (avec les questions sous-jacentes : "est-ce souhaitable du point de vue du développeur ?" et "est-ce vraiment réalisable ?"). Sami a également mis en avant que les nouveaux outils liés à la couche de présentation (qu'ils soient côté Web avec Silverlight et les composants AJAX ou côté client lourd avec WPF) n'améliorent pas la productivité des développements et qu'il y a encore des progrès à faire dans ce domaine.

Entity Framework et Linq

/Olivier/ Voilà une session qui ne m'a pas du tout convaincu sur le mappeur objet-relationnel à la sauce Microsoft, j'ai nommé Entity Framework ou EF. Dans sa version actuelle il est limité, intrusif et ne fonctionne vraiment que dans le mode où les objets métiers sont générés à partir de la base. Et attention, quand je dis générés c'est avec plein des classes de bases et d'attributes bizarres. Enfin je ne m'inquiète pas pour son succès, nous sommes dans l'univers Microsoft : tout le monde va utiliser le mappeur de Microsoft. Le reste n'existe même pas :) /Laurent/ Oui c'est ça le pire quand on fait du .Net, on a l'impression que les gens de Microsoft ne tirent pas les leçons de l'expérience du monde Java (pour les frameworks qui gravitent au tour en tout cas, le langage c'est autre chose ;)) : c'est un peu comme repasser d'EJB 3.0 à EJB 1.0, on se demande quand même s'ils sont au courant de projets comme NHibernate pour ne citer que lui. Heureusement, les intervenants de la session eux on fait un tout d'horizon des frameworks de persistance existants sur le marché pour nous présenter un petit benchmark (trop petit, dommage). On constate donc que la majorité des outils d'ORM sur le marché ont une vitesse équivalente, même si ce n'est pas le cas de leurs fonctionnalités. Malheureusement les intervenants n'ont pas comparé les fonctionnalités et ni les limitations de ces frameworks de persistance. Car ce qui est généralement le critère le plus important lors de l'adoption d'un mappeur O/R c'est sa capacité à supporter l'applicatif existant (code et base de données) et rarement ses performances.

Linq anvancé

/Olivier/ La killer feature du Framework .NET est vraiment Linq. Le problème c'est que dans la pratique (et en tout cas dans un futur proche) la seule version qui me semble utilisable est Linq to Objects. Pour ceux qui ne connaissent pas Linq, c'est un ensemble de méthodes similaires à du SQL accessibles directement à l'intérieur du langage. Le tout est de disposer d'une interface IQueryable<T> et ensuite vous pouvez effectuer des requêtes dessus du style :

int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };

var numberGroups =
    from n in numbers
    group n by n % 5 into g
    select new { Remainder = g.Key, Numbers = g };

foreach (var g in numberGroups) {
    Console.WriteLine("Numbers with a remainder of {0} when divided by 5:", g.Remainder);
    foreach (var n in g.Numbers) {
        Console.WriteLine(n);
    }
}

Evidement il existe de nombreuses implémentations de IQueryable<T> qui fonctionnent différement : Linq to Objects qui effectue les requêtes sur des collections en mémoires, Linq to SQL qui génère des requêtes SQL pour récupérer une représentation objet des tables, Linq to Entity qui permet de requêter les objets dans Entity Framework et bien d'autres encore... Dans la pratique, Linq to SQL n'est intéressant que pour des petits projets utilisant une base MS SQL Server, car le provider Linq to Oracle n'existe pas, Linq to Entity n'est utile que pour les utilisateurs de EF. C'est dommage car certaines fonctionnalité de Linq sont très intéressantes : par exemple si une méthode de service retourne un IQueryable<T> on peut très facilement ajouter en AOP des conditions dans la requête (pour filtrer en fonction du périmètre utilisateur par exemple). Vivement Linq to NHibernate pour que je puisse mettre tout ça en pratique !

/Laurent/ En parlant de filtre, Olivier me fait penser à une autre partie intéressante de la présentation : Les lambda-expressions. Derrière ce nom barbare se cache un concept venu des langages fonctionnels : on peut enfin utiliser les fonctions comme des objets de premier ordre du langage C#. Un lambda expression représente une fonction, mais elle peut être : - soit compilée en IL (c'est une sorte de delegate anonyme encore plus facile à écrire que ce que permettait C# 2.0) - soit sous la forme d'un arbre d'expressions

Mais voyons plutôt ça avec un exemple ayant un rapport avec Linq to SQL (ça tombe bien ;) ) :

-façon delegate :

IEnumerable result = personnes.Where(
                                    delegate(Personne p)
                                    {
                                        return p.Age ==  30 && p.Prenom == "foo"
                                    }
                                );

- façon Lambda :

IEnumerable result = personnes.Where(p => p.Age == 30 && p.Prenom == "foo");

Ces deux appels produisent le même résultat : ils renvoient toutes les personnes dont l'âge est égal à 30 ans et le prénom est "foo", mais il y a une grosse différence dans la façon dont le résultat va être récupéré : dans le cas du delegate, le code est compilé, c'est une fonction comme une autre qu'on a passé à la clause Where et la seule façon d'appliquer le filtre est de récupérer toutes les personnes que contient la base, et d'appliquer le test à toutes les instances ainsi récupérées en mémoire. C'est évidemment très couteux et c'est une très mauvaise solution. Au contraire, dans l'autre cas, la clause where va traiter la lambda sous la forme d'un arbre d'expressions qui va être traité et analysé par le moteur Linq to SQL et transformé en un vrai filtre SQL, dans ce cas le filtre s'effectue au niveau de la base et le résultat est récupéré en un temps minimal !

Le choix de récupérer une lambda dans une forme plutôt qu'une autre se fait suivant la variable qui va la contenir :

Func<Personne, bool> lambdaFun = p => p.Age == 30 && p.Prenom == "foo";

Ce bout de code va permettre de récupérer la lambda compilée, elle sera l'équivalent d'un delegate.

Par contre si l'on écrit :

Expression<Func<Personne, bool>> lambdaTree = p => p.Age == 30 && p.Prenom == "foo";

Le compilateur va la récupérer sous sa forme d'arbre d'expression qui pourra être analysé, retravaillé plus tard, etc.. C'est ce que fait la clause Where de Linq to SQL ci-dessus : elle prend en argument la lambda comme un arbre qu'elle pourra analyser.

L'exemple exposé par Mitsu Furuta, responsable de cette session, était le suivant : essayer d'accéder à une propriété d'un objet dont on ne connaît pas le nom à la compilation. Le premier cas qui vient à l'esprit est d'utiliser la réflexion pour y arriver : - on récupère le type de l'objet, puis les information de la propriété à laquelle on veut accéder, et enfin on utilise ces informations pour récupérer la valeur de la propriété sur l'instance de l'objet, soit :

public object GetValue(Personne object, string propertyName)
{
    return typeof(Personne).GetProperty(propertyName).GetValue(object, null);
}

Le problème de cette méthode, c'est que la réflexion, est très coûteuse, et si on est dans une boucle, ça devient problématique.

La solution proposée grâce aux lambda est la suivante : on construit un arbre d'expression lambda qui utilise cette méthode, et on va ensuite parcourir cet arbre pour remplacer la réflexion par un appel de méthode standard. Il ne reste plus ensuite qu'à compiler l'arbre d'expressions lambda pour obtenir une fonction aussi rapide qu'un appel direct à la propriété.

J'ai trouvé cet exemple moins bon que s'il avait parlé de celui de Linq to SQL que j'ai présenté plus haut (eh oui, il n'était pas dans la présentation) car il est discutable : il y a d'autres façon moins "tordues" d'arriver à des performances semblables, et ce sans avoir eu à attendre le C# 3.0 ou 3.5. Il suffit de penser "Génération de code à la volée" pour trouver. Je vous laisse regarder cet article http://jaychapman.blogspot.com/2007/11/nhibernate-access-performance.html sur lequel je suis tombé il n'y a pas longtemps et qui résumera mieux que moi tout ça.

F# et la parallélisation

/Laurent/ Comme l'indique le sujet, cette session n'était pas une introduction au F#, mais traitait spécifiquement des problématiques de programmation parallèle et des améliorations apportés au langage F# pour faciliter la programmation asynchrone et concurrente. En gros, sans notion préalable de la syntaxe et des concepts particuliers aux langages fonctionnels de la famille ML (http://fr.wikipedia.org/wiki/ML_(langage)), c'était la sieste assurée ;)

Le constat des concepteurs du F# : programmer à l'aide de threads est fastidieux, trop difficile (en tout cas plus que ça ne devrait l'être) et pas assez souple. Pourtant, il faut bien faire des programmes multi-threads si l'on veut pouvoir faire des appels asynchrones, ou concurrents. La solution habituelle est d'appeler une fonction qui s'exécutera sur une autre thread en lui passant en argument des fonctions de rappel (callbacks) pour indiquer la suite de l'exécution en cas de succès, ou en cas d'échec de l'opération que l'on veut exécuter. C'est lourd ! On casse le rythme habituel de programmation en devant prendre en compte tous les problèmes pouvant se passer pendant l'exécution sur un thread séparé à la main : en effet, si une erreur se produit, il devient difficile de la faire remonter jusqu'à l'appelant.

Pour palier à ces inconvénients, le F# propose des constructions syntaxiques simples : - pour effectuer un appel asynchrone bloquant : il suffit d'utiliser un opérateur d'affectation spécial, et le membre droit de l'affectation s'effectuera de façon asynchrone, et le résultat sera récupéré à la fin de l'exécution. Tout est transparent pour le programmeur : si une exception est levée au cours de l'appel, elle est remontée automatiquement dans le thread principal ! Un bonheur :)

- pour lancer des opérations en parallèle : on encadre les blocs de code par la construction "async { }", et on appelle /// Async.Run(Async.Parallelfoo, bar)) /// l'exécution de "foo" et "bar" se fera en parallèle et un join() s'effectue à la fin des threads pour continuer sur le fil d'exécution du thread appelant.

Ouf ! Là j'ai déjà du perdre tout le monde ^^. Pour une explication avec du vrai code (à la fois plus clair et plus compliqué), vous pouvez regarder le blog de Don Syme, un des intervenants de cette séance : http://blogs.msdn.com/dsyme/archive/2007/10/11/introducing-f-asynchronous-workflows.aspx

mardi 12 février 2008

Quelques nouveautés J2EE

Il y a quelques temps, nous avions parlé de la sortie de Eclipse 3.3, qui avait apporté un gros lot de nouveautés améliorant grandement le confort de développement J2EE.

Cette version étant maintenant stabilisée (WTP2 avait dans sa toute première version quelques bugs génants), c'est maintenant la version 3.4 d'Eclipse qui est en préparation, et qui devrait à son tour améliorer la productivité du développement, avec entre autre: - la navigation en Breadcrumb - une meilleure prise en charge des annotations - une meilleure gestion des jars (possibilité de faire plusieurs configurations avec des "Main Class" différentes pour un même jar) - complétion de code améliorée et étendue - etc.

La version M5 de Eclipse 3.4 est déjà disponible ICI pour ceux qui veulent la tester. La liste complète des évolutions déjà disponibles dans les versions "Milestone" successives est disponible pour la M5, la M4, la M3, la M2 et enfin pour la M1.

Côté Framework, on peut noter la sortie ce 9 février de Wicket 1.3.1., un Framework de l'Apache Foundation, permettant de développer des interfaces web. Il est actuellement très populaire auprès de la communauté java francophone, et beaucoup de développeurs l'ayant essayé préfèrent Wicket aux JSF. Cependant, je ne m'avancerai pas trop sur les qualités/défauts de ce Framework, n'ayant pas pu le tester à fond moi-même. Pour ceux qui veulent le découvrir, il est disponible ICI, et je conseille pour débuter ce tutoriel.

lundi 4 février 2008

XMPP, protocole de messagerie XML

Vu sur slashdot :

XMPP (eXtensible Messaging and Presence Protocol) has been getting a lot of attention during the last month and it seems that the protocol is finally taking off as a general purpose glue to build distributed web applications. It has been covered that AOL was experimenting with an XMPP gateway for its instant messaging platform. XMPP has been designed since the beginning as an open technology for generalized XML routing. However, the idea of an XMPP application server is taking shape and getting supporters.

lundi 28 janvier 2008

Perl, pour quoi faire ?

Choisir le bon outil pour le bon usage... Facile à dire !
Un petit article qui résume ce que l'on peut faire avec Perl :

  • pattern-matching : en ligne de commande, recherche dans des fichiers
  • in-place editing : en ligne de commande, rechercher/remplacer dans des fichiers
  • shell scripts : en Perl, on peut faire plus lisible (hum ?), plus puissant,
  • manipulation rapide de base de données : rapport...
  • tout ça en cross-platform.

et ce qu'il vaut mieux éviter :

  • des applications temps-réel ou haute performance,
  • des scripts shell que l'on pourrait écrire en shell, et/ou ayant besoin de performance
  • du développement web,
  • d'utiliser toute la puissance de la syntaxe Perl, qui peut vite rendre le code illisible.

D'autres articles dans la même série : Javascript, pour quoi faire, et PHP, pour quoi faire ?

samedi 12 janvier 2008

Inversion de contrôle avec Guice

Au sein de Google, Crazy Bob Lee a crée Guice (prononcé d͡ʒʊːs comme "juice"), un container léger pour faire de l'IoC. Guice profite des annotations et des génériques apparus dans Java 5 pour créer les liens entre JavaBeans. Ce petit produit de google (547.5 KB) propose une manière alternative simple et rapide pour faire de l'IoC et ceci sans fichiers XML; offrant ainsi des performances intéressantes dans certains cas, pour le prix tout de même d'une petite intrusion dans le code.

Alors, petit gadget ou future alternative a Spring?

Page officielle et analyses/comparaisons plus ou moins sérieuses pour ce faire une petite idée sur Guice!

mardi 8 janvier 2008

Analyser le fonctionnement d'un serveur

Pour analyser les performances, identifier les contentions et planifier la capacité future d'un système, on a besoin de collecter les consommations CPU, mémoire, réseau, disque en continu.
On peut écrire son script soi-même ou bien, c'est mieux, utiliser des outils open-source existants :

Ces outils collectent les données ; on peut ensuite les traiter avec Nagios par exemple.

via [High Scalability]

lundi 10 décembre 2007

Mashups cartographiques...

MapifiedKayak.screenshot.jpgJe me fais un petit peu de pub:

Si vous êtes intéressés par les technos du Web 2.0 (javascript, html, css, php,...) et la représentation cartographique de données, je vous invites à faire un passage par mon site perso. Vous y trouverez plusieurs projets de veille technologique sur ces sujets, dont un à même eu le privilège d'être 'Mashup of the day" sur programmableweb.com.

  • Mapified Kayak: une jolie couche de présentation pour le métamoteur de recherche de voyages Kayak, et la possibilité de rechercher plusieurs destinations et dates d'un coup (Google Maps + Kayak API).
  • Overflown Countries: pour savoir quels pays vous survolez lors de vos voyages (Google Maps + Geonames API).
  • Mapified Stock Indices: une présentation géolocalisée des variations d'indices boursiers asiatiques (Google Maps + Geonames + Dapper API).
  • Mapified Rss: pour géolocaliser n'importe quel flux RSS et mettre en surbrillance les pays (Google Maps + Geonames API).
  • GoogleMaps vs YahooMaps: les 2 cartes sur la même page pour comparer facilement les niveaux de zoom disponibles. Une fonction de synchronisation est fournie (Google Maps + Yahoo Maps API).


Bien que personnels, ces projets constituent également des démos pour présenter notre offre E-business et les compétences des ingénieurs d'Alcion dans ce domaine. Dans cette optique, si vous êtes vous-mêmes ingénieurs d'Alcion, n'hésitez pas à faire partager vos projets logiciels sur ce blog.

mercredi 5 décembre 2007

Slides de l'open bar GWT (Google Web Toolkit)

Disponibles au téléchargement ci-dessous (lien "une annexe").
dilbertFlashJS.gif

AlcionGroup au forum Supélec

OLYMPUS DIGITAL CAMERA         Ca devient une habitude ! Cette année encore, Alciongroup est présent au Forum Supélecles 5 et 6 décembre, stand F16. Ouvert à tous et à tous les âges ! Une bonne occasion de faire connaissance avec la société, ses activités et les carrières (passionnantes) qu'elle propose.
http://www.forum.supelec.fr/
EDIT : photo ajoutée. Que de monde !

vendredi 23 novembre 2007

Des videos à voir

Il existe aujourd'hui un support d'auto-formation que l'on néglige encore trop: la vidéo. La progression de la bande passante d'Internet permet d'assister maintenant à des conférences techniques fort éducatives depuis son canapé. On recommande à ce titre le YUI theater et le YUD Theater chez Yahoo, et le channel Googletalks de Google. Sans oublier le Channel9 de Microsoft. Des conférences gratuites faites par des gens brillants. Que demander de plus? ;)

mercredi 21 novembre 2007

Faire une démo de logiciel...

...ça a l'air très simple...
...Il n'y a qu'à lire ça.

Optimiser l'expérience utilisateur

On sait bien que la patience de l'utilisateur d'une application informatique est une denrée précieuse qu'il convient de préserver au maximum, surtout lors d'une 1ère utilisation.
Les équipes de Yahoo! se sont intéréssés au problème dans le cadre des applis Web et ont élaborés des règles à étudier de près. Parmis celles-ci, la 10ème: "Minify JavaScript". En effet avec l'avènement d'AJAX, les clients légers ont souvent besoin de requêter auprès de serveurs des scripts de plus en plus lourds dont le temps de récupération peut parfois entamer largement le capital sympathie d'une appli.
Après avoir testé plusieurs solutions de compression, je vous recommande Javascript Compressor. Il m'a permis de réduire la taille d'un script en production de 35kO à 24kO. Cet utilitaire permet également d'obfusquer son code et donc de le protéger si jugé sensible. Ce cryptage a également des effets bénéfiques sur la taille puisque dans le cas de notre script précédement évoqué, on est passé à 15kO. Ce dernier restant bien sure complètement opérationnel...

Je profite de ce billet pour vous inviter à préparer vos vacances en visitant la page de ce projet de veille technologique de la DT autour des technos Web 2.0 (AJAX, Web Services, Google map, frameworks javascript): MapifiedKayak. Un peu d'indulgence svp, ce n'est qu'une beta...

lundi 19 novembre 2007

OpenBar Alciontech le 29 novembre : le client riche en Java, c'est facile avec GWT et JavaFX

ajax.jpgCe mois-ci, une conférence pleine de bonnes nouvelles : on peut développer des écrans portables et sexy en Java, sans avoir besoin de connaître Javascript !

En introduction, un coup de projecteur sur JavaFX, sur le thème de "comment faire du flash, en java".

En plat principal, GWT, un framework qui a le potentiel de changer la donne. Il permet de réaliser des applications Ajax portables, en Java. Ses caractéristiques principales sont :

  • il est open-source ;
  • il n'impose pas d'apprendre javascript pour faire de l'ajax,
  • il absorbe les nuances de navigateurs,
  • il gère automatiquement des concepts de haut niveau comme la sérialisation, les appels RPC, et la traduction de code java->javascript pour exécution des traitements locaux au navigateur, ce qui est une petite prouesse.

Après 6 mois sur le terrain, il commence à être adopté par certains de nos clients.

Thierry a travaillé quelques semaines sur GWT. Il vous en expliquera les concepts, les principes de développement et vous fera une démo couvrant le design d'écrans, le remoting et l'exécution de code au sein du navigateur.


Que vient faire ici ce barbu frisé ? C'est Ajax le Grand, héros de la guerre de Troie... ;-)

vendredi 16 novembre 2007

SoHorse.com [bêta] est en ligne !

default-avatar-female.jpgSoHorse est un réseau social, à l'instar de FaceBook, MySpace et consorts, qui est centré sur l'univers du cheval, et des activités d'équitation de loisir et de compétition.
Le projet est porté par une startup qui nous a fait confiance, depuis le début, pour la réalisation du site. A l'initiative de Stéphane Boisson, chef de projet, l'architecture s'appuie sur J2EE et les frameworks Apache (Wicket pour la présentation et IBatis pour la persistance). Le fonctionnel inclut l'upload de vidéos et une intégration poussée avec Google Maps.
La bêta est privée pour l'instant, vous devrez donc un peu attendre avant de voir le résultat. Thomas, le PDG de SoHorse, devrait d'ailleurs nous accompagner à la soirée courses organisée par le CE à Vincennes le 4 décembre, et nous aider à parier malin... Tous nos voeux de réussite à sohorse.com.

jeudi 15 novembre 2007

Web 2.0 API Listing

Depuis le temps que je cherchais un annuaire des API Web 2.0, je l'ai enfin trouvé et je partage son url avec vous :)

lundi 12 novembre 2007

Brèves développement Java/J2EE

i-can-lift-40-pounds.jpgAujourd'hui je peux :

vendredi 9 novembre 2007

Forte activité sur Linux

Linux est dans nos usages quotidiens, tant sur les serveurs, que sur les postes de développement.
Les dernières semaines ont été particulièrement riches en actualité :

Comme dit Linux.com, "where do we go from here ?"

P.S. : nous venons d'avoir, pour la première fois, un projet sur lequel il y avait à la fois des postes de développement Windows, Linux, et OSX, sans souci : Eclipse, Maven, Subversion, Tomcat en Java 5.

Géomarquer ses données

Il est devenu très fréquent de voir des données affichées dans un composant cartographique de l'IHM d'une application. Les parisiens penseront peut-être tout de suite à celui de Velib' qui permet de localiser rapidement les stations et la disponibilités des vélos. Il est clair qu'une telle présentation est beaucoup plus ergonomique que le rendu dans une grille.
Pour atteindre un tel résultat, il convient de pouvoir répondre à 2 questions:

  • Comment géotaguer ses données?
  • Comment présenter ses données?


Comment géotaguer?
Il existe plusieurs services permettant de géotaguer ces données c'est à dire associer une longitude et latitude à une entité localisable (adresse, code postal,etc) . On recommendera ceux de Geonames.org et Google. Les formats de sortie sont au choix xml ou json.
On notera en particulier l'existence d'un service très intéressant de conversion de feed RSS vers geoRSS. C'est ce service qui est utilisé dans notre application sur les indices boursiers (voir billet précédent) ou bien pour localiser les dernières news planétaires.
Il peut parfois être intéressant de faire du géocodage inversé, c'est à dire associer une addresse (souvent approximative) à un couple (latitude, longitude). On trouvera ici plusieurs services intéressants. Notez que google ne propose pas (encore) de tels services.
Un autre besoin peut consister à localiser des addresses IP. Il existe là encore plusieurs services dont IP2Location utilisé par le fameux wikiscanner.


Nota: Pour des besoins locaux, Les BD sous-jacentes peuvent souvent être installées en local moyennant leur achat.

Comment présenter ses données?
L'insertion d'entités géotaguées dans une carte est assez direct chez Google map comme chez Yahoo! map. L'API Google utilise un objet GGeoXml dont le constructor prend le fichier de données géotaguées en paramètre. L'objet YGeoRss fait de même chez Yahoo! map.

lundi 15 octobre 2007

Des widgets aux mapplets

UPDATE DU 16/10/07: En complément du blog officiel de Google Map, je vous recommande le blog Google Maps Mania qui regorge d'informations fascinantes sur les mashups possibles avec Google Maps.

BILLET ORIGINAL:

Le 11 juillet dernier, Google annonçait le lancement d'un nouveau service appelé Mapplets. Il s'agit de mini-applications insérables dans google map, comme le précise le site officiel. Un certains nombres sont déja disponibles dans le Google Map Directory et sont pour la plupart superposables pour faire du recroisement d'informations.
L'intérêt des Mapplets est identique à celui des Widgets web: permettre aux utilisateurs d'installer gratuitement les services de tiers dans leur application & pages web. C'est à la charge de votre business model d'évaluer comment rentabiliser l'opération (un chercheur d'hôtels ou de cinémas avec commisions).

D'un point de vue technique il est très facile de transformer une application utilisant Google Map en Mapplet en suivant le protocole proposé. Et c'est ce que nous allons faire avec notre visualiseur de variation quotidienne des bourses asiatiques exposé dans le billet précédent. L'idée maitresse est d'encapsuler le code html, css et javascrit dans un fichier XML qui est servi en tant que mini page web (dans des balises <iframe>) sur le site de Google Map. Le fichier XML doit-être accessible depuis l'internet pour être récupéré à la demande par Google.
Notre application est accessible ici et insérable dans votre map en activant ce lien (Vous devez posséder un compte Google).

mapplet.screenshot.gif

L'opération a pris environ 1h mais l'application initiale était déja parfaitement fonctionnel. Le développement from scratch est plutôt délicat et nécessite de farcir son code d'alert(). Il est plutôt conseillé de développer dans un 1er temps une application standard AJAX puis de la mappletiser. Par ailleurs le code source est parfaitement lisible et donc récupérable par d'autres mais c'est le jeux: la plus-value de votre application vient du mode de présentation des données aux utilisateurs, pas de son algorithme.

PS: Sur le plan fonctionnel, on a maintenant une largeur de barre proportionnelle à la capitalisation boursière du pays. Par exemple, le marché japonais (4872 milliards $) n'a pas la même envergure que l'indonésien (166 milliards $) et cela est mis clairement en évidence.

vendredi 12 octobre 2007

API de Google et Yahoo! map

Dans un billet précédent de ce blog, nous avions vu qu'il était possible de construire des flux rss (dapper) et de géolocaliser leur contenu (yahoo!pipe). Nous avions pris comme exemple les variations des indices principaux des bourses asiatiques.
La présentation par défaut sur la page du pipe a le bon goût d'exister mais convenons que le rendu n'est pas percutant. Il faut en effet cliquer sur chaque marqueur pour avoir les informations.
L'idéal serait d'avoir des marqueurs représentatifs de la variation de l'indice, vert quand positif, rouge quand négatif, avec une taille proportionnelle à cette variation.
Pour arriver à ce résultat, il faut un peu programmer. Un API maps est fourni par Google et Yahoo! donc nous allons travailler avec les 2 pour comparer.
Le principe est relativement simple, dans chaque carte (YMap et GMap), pour chaque pays présent dans le flux RSS, on ajoute un marqueur (YMarker, GMarker) personnalisé (YImage ou GIcon). La hauteur du marqueur est ajustée par la formule Math.round(Math.abs(fChange) * 20) et donc d'avoir une hauteur de 20px pour une variation d'indice de 1%. Le fichier source est disponible en annexe (fonction fFillYahooMapWithGeo et fFillGoogleMapWithGeo).
Les résultats sont visibles ci-dessous, avec à gauche Google en haut et Yahoo en bas.

google.map.asian.stock.daily.change2.jpg yahoo.map.asian.stock.daily.change2.jpg

Sur le plan fonctionnel, un léger avantage à Yahoo! qui permet d'afficher un label par un simple passage de la souris sur le marqueur alors que Google nécessite de cliquer dessus.
Les métriques ne font pas apparaitre de différences significatives entre les 2 API:

  • Temps de chargement: environ 4s,
  • Nombre de requêtes: légèrement plus pour Yahoo (71 contre 54),
  • Octets téléchargés: environ 400kO,
  • Nombre de lignes de code propres aux API: une dizaine.

Les 2 API offrant un services de géolocalisation, nous pouvons donc essayer d'utiliser directement le flux RSS de Dapper (non géo-localisé) et confier la tâche de géolocalisation aux API. Yahoo le permet très simplement en remplacant un paramètre d'entrée du constructeur de YMarker mais les requêtes sont synchrones (fonction fFillYahooMapWithoutGeo dans le source). L'API Google est plus délicate à mettre en oeuvre car il faut utiliser un objet GClientGeocoder et utiliser une fonction de callback.
Dans les tests, il a été constaté un léger ralentissement (environ 1s) avec cette méthode à cause d'une plus forte utilisation du réseau (17 requêtes de plus).

Avis subjectif de l'auteur:

  • Aucune API ne se démarque de l'autre. Celle de Google est légèrement plus complexe mais compense par légèrement plus de fonctionnalités.
  • Notre application est bien exigeante en bande passante et temps d'UC puisqu'elle nécessite de mettre en forme le HTML chez Bloomberg, de transférer ce flux de Bloomberg à Dapper qui est alors retraité en RSS, de transférer de Dapper à Yahoo pour géolocaliser, puis enfin de Yahoo au client. Si Bloomberg (ou un autre) fournissait directement le flux rss (idéalement déja géolocalisé et gratuitement), on ne serait pas obligé de faire tout cela :)


PS: La démo utilise l'objet XMLhttpRequest qui n'autorise pas chez Firefox les requêtes hors du domaine courant, alors que si chez IE. Donc

  • si vous utilisez IE, mettez simplement "urlProxy":"" à la ligne 29 dans maps.htm,
  • si vous utilisez Firefox, installez un serveur local (localhost) avec la page php_proxy_simple.php fournie en annexe,

jeudi 11 octobre 2007

Stockage : la révolution du SSD, le disque sans disque

ssd1.jpgPour ce centième billet sur AlcionTech (hé oui, déjà), coup de projecteur sur la question du stockage (ce n'est pas que le blog prenne tant de place que ça...) qui arrive sur le devant de l'actualité.
L'affaire arrive par le biais des SSD, ou "Solid State Drive", qui désigne le stockage en mémoire flash (Solid State = Silicium, par opposition aux disques magnétiques). Vous voyez les tailles de carte mémoire (pour appareils photos, baladeurs numériques) augmenter et les prix chuter. Apple fait cohabiter, à des prix comparables, des modèles d'Ipod à disque dur ("classic"), et des modèles à mémoire flash, à des prix comparables, aux capacités nettement moindres (10x), mais ayant l'avantage de la solidité (aucune mécanique) et de l'économie d'énergie (et donc autonomie).
Récemment, on voit aussi arriver des SDD au format IDE ou SATA, permettant de prendre la place d'un disque dur sans autre forme de procès, avec les avantages de la mémoire flash. Il lui faudra cependant quelques années avant de détrôner les prix des disques durs, à stockage égal. Différents fabricants d'ordinateurs portables ont sorti des modèles avec 16 ou 32 Go de disque SSD, avec un surcoût notable.
Nous allons être impactés dans nos façons de faire du logiciel. Assez vite, nous aurons à disposition des média de stockage nettement plus rapides, qui accélèreront de façon importante les accès aux données. On n'arbitrera plus de la même façon les choix d'architecture relatifs à la persistance, aux caches, etc.
Le modèle figurant sur la photo, de ioFusion, sur port PCI-Express 4x, offre des performances hénaurmes (600Mo/s à l'écriture, 800Mo/s à l'écriture, soit 10 à 20 fois plus qu'un disque dur magnétique, comparable à la vitesse de la RAM) grâce à l'écriture en parallèle dans les différentes puces de la carte. Existe en 80Go au prix de 2400$.

vendredi 5 octobre 2007

Slides de l'open bar Intégration Continue

La présentation est disponible ci-dessous (pièce jointe).
Pour mémoire, la plate-forme d'IC AlcionGroup (300Mo environ) est disponible au siège.

jeudi 4 octobre 2007

Java : outils

Ce matin, Florent m'a confié trois secrets d'un air de conspirateur :

  • Non, OSCache (d'Open Symphony) n'est pas un cache transactionnel distribué ; par contre, TerraCotta est extraordinairement prometteur ;
  • JXInsight est l'outil d'analyse de code java en fonctionnement (threads, mémoire, temps d'exécution) qui surpasse tous les autres en ce qu'il permet de débusquer rapidement les anomalies de fonctionnement ;
  • SonarJ,, outil de rétro-ingénierie du code et de l'architecture d'une application, par exemple dans un contexte d'audit.

Merci Florent !

11 ans après Java, .NET publie ses sources

Les sources de l'API .NET sont à présent disponibles pour consultation par les développeurs dans le cadre du programme "Open .NET". Il ne s'agit _pas_ d'open source :

Microsoft is releasing the source code for .NET Framework libraries under the Microsoft Reference License. This license allows viewing of source code, but not modification or redistribution.

Ceci permet néanmoins au développeur d'aller voir sous le capot pour comprendre un comportement non documenté, et de voir le code plate-forme dans le débugger.
On me souffle que certains voient les sources depuis longtemps grâce au décompilateur Reflection.
Sun a toujours fourni les sources de l'implémentation de référence (le fameux src.jar) du JDK.

mercredi 3 octobre 2007

L'évolution des langages web

Aujourd'hui les développements web s'articulent principalement autour

Des travaux sont actuellement en cours au sein du W3C pour préparer les évolutions qui seront prises en charge par les prochaines générations de navigateurs.

longue-vue-telescopique.jpgHTML5 (auparavant Web Applications 1.0)
Apple, Opera et la fondation Mozilla se sont associés de manière informelle au sein du Web Hypertext Application Technology Working Group (WhatWG) pour donner naissance au successeur du HTML4.1 figé depuis 8ans. Le W3C a pris ensuite le résultat de ces travaux comme base.
Les specs du HTML5 et de son équivalent XML, appelé XHTML5, sont à l'état de draft.
Pour ceux intéréssés par les nouveautés, un article d'IBM mérite une lecture. La synthèse de la prise en charge par les navigateurs est disponible ici.

ECMA-262 edition 4
A la base du futur Javascript 2, la naissance de la 4eme édition des specs de l'ECMA-262 a été lente et laborieuse pour cause de vision divergente entre Mozilla et Microsoft. Toutes les infos sur l'état courant sont sur un wiki.
On annonce une machine virtuelle et un compilateur JIT (appelée Tamarin dans Mozilla2).

Les microformats
Supportés par Firefox3 et IE8, les microformats visent à faciliter l'extraction automatique de contenu web en attachant de la sémantique aux données. Une introduction se trouve sur le site de référence.

lundi 24 septembre 2007

OpenBar AlcionTech 4 octobre : Intégration Continue sous J2EE et .NET

rose.jpgVous êtes cordialement invités à l'Open Bar AlcionTech, Jeudi 4 octobre à 18h30 au siège. Une collation sera servie.


L'intégration continue est une pratique de développement logiciel où chaque membre d'une équipe intègre ses travaux fréquemment, au moins une fois par jour. Chaque intégration est contrôlée par un build automatique (incluant des tests) de manière a détecter le plus tôt possible les anomalies.

L’expérience a montré que cette démarche conduit à des gains substantiels en terme de coûts de développement. Malheureusement encore trop peu de projets la mette en place.

Après une approche théorique rapide, nous vous montrerons une mise en application de la CI autour d’un projet J2EE avec Maven&Continuum et d’un projet .NET avec Ant&Cruise Control.

Yayoo! Pipes ou les prémices du nouveau web

Tim O'Reilly le considère comme le service qui va changer l'internet parce qu'il met enfin le web en tant que BD à la portée des non-informaticiens.
YahooPipes-logo.gif Ce service, c'est Yahoo!Pipes et ca permet de faire des aggégations très intéressantes.
Prenons l'un de ses exemples phares: le GeoAnotated Reuters News. Ce pipe récupère les 10 titres à la une dans un rss Reuters et alimente un service de conversion rss vers georss pour fournir un georss. Si vous regardez le source, vous verrez la présence des balises xml <geo:lat> et <geo:long>.
Ce flux est ensuite traité pour afficher les résultats dans une carte.

Evidemment, il ne vous a pas échappé qu'il était déja tout à fait possible de coder cela soi-même avec des HttpRequest pour peu d'avoir les compétences en javascript adéquates. La grande force de Yahoo!Pipes est d'offir une IHM masquant la complexité du code et de permettre le clônage des pipes produits.
Yahoo! Pipes et Dapper (vu dans le précédent billet) sont très complémentaires puisque le 1er peut produire le rss si celui-ci n'existe pas dans un site et le 2ème le manipuler aisément. Par exemple, si l'on souhaite représenter sur une carte les évolutions journalières des bourses asiatiques, on créé le Dapp à partir de Bloomberg, puis le pipe pour géolocaliser les bourses.

Dapper ou le web scrapping pour les pros

Disons que nous concevons une application web de gestion de porte-feuille boursier et que nous avons besoin des cours de clôture à J-1 de l'indice CAC40 pour les retraiter ensuite suivant nos besoins. Comment allons-vous nous y prendre?
Le site d'Euronext présente quelque chose de bien intéressant: une table HTML avec les 40 valeurs de l'indice. Un service de téléchargement au format cvs ou excel est proposé mais