Valentin Jacquemin

Amazon Web Service

Les applications aujourd’hui connectées à Internet peuvent interroger des services web afin d’obtenir des données externes aux objets de l’application. Il est ainsi possible d’interroger des miliers de bases de données en ligne.

Nous avions par exemple vu l’application Delicious Library. L’appel d’un service web se fait au moment où on lance une recherche à propos d’un média. En entrant un simple mot vous obtenez une liste de livre, cd, dvd ou encore de jeux vidéos correspondant à votre recherche. L’application utilise le service web de la plateforme amazon et par cet article je vais démontrer la facilité avec laquelle il est possible d’interroger se service web en Java. C’est parti!

Il faut tout d’abord créer un compte sur la plateforme depuis cet url : http://www.amazon.com/gp/browse.html?node=3435361

Après inscription il est possible d’obtenir un identifiant (acces key id) nécessaire à l’interrogation du service web. Il nous manque plus que le lien reliant notre application et le service web. L’utilitaire en ligne de commande wsimport va nous créer ce lien. Cet outil est intégré au JDK. Donc si l’environnement est bien configuré il sera possible de directement lancer cet utilitaire depuis le prompt. Sinon il faudra vérifier que le répertoire JDK est bien référencé dans le _PATH _de l’environnement.

Utilisons donc cet utilitaire pour nous créer les classes nécessaires à l’interrogation du service web. Pour cela rien de plus simple : wsimport http://www.amazon.com/gp/browse.html?node=3435361 -d src -p org.poxd.gen Après exécution de cette ligne dans le shell (prompt DOS ou shell unix) un ensemble de classes sont créées. Celles-ci feront tout le travail d’interrogation sur le service web.

Suite à la création de ces classes, nous allons les utiliser afin d’interroger amazon pour nous retourner les résultats de livres pour un auteur renseigné par l’utilisateur dans une application graphique. L’aspect graphique peut en rebuter plus d’un lorsqu’il faut s’attaquer à la librairie swing qui a mauvaise réputation. Cependant en utilisant Netbeans il devient très facile d’arranger des composants ensembles grâce à Matisse son _GUI Builder. _En 2 minutes on peut se créer une fenêtre contenant une liste, un champ de texte, un bouton, une barre de menu et une gestion complète du positionnement et de la taille de la fenêtre qui vont être mémorisées à la fermeture de l’application pour les restaurer au prochain démarrage. Voici le rendu de mon application :

aws-gui

Netbeans s’appuie sur l’Application framework développé par Sun ce qui tend à rendre les choses plus facile pour ce genre de développement. Tout ce qui est de la gestion de l’internationalisation, des actions, du modèle de Swing est plus accessible à tout développeur.

Maintenant si nous retournons à notre application nous allons y intégrer l’appel au service web d’amazon en passant par nos classes générées par wsimport. Pour récupérer donc une liste de livres correspondant à un auteur le tout est aussi simple que ça:

AWSECommerceService service = new AWSECommerceService();
AWSECommerceServicePortType portType = 
            service.getAWSECommerceServicePort();
ItemSearchRequest request = new ItemSearchRequest(); 
Holder<OperationRequest> operationrequest = 
            new Holder<OperationRequest>();
Holder<java.util.List<Items>> items = 
            new Holder<java.util.List<Items>>();
request.setSearchIndex("Books"); 
request.setAuthor("tevis"); 
ItemSearch search = new ItemSearch(); 
search.setAWSAccessKeyId(AWSID);
search.getRequest().add(request); 
List result = new ArrayList();
portType.itemSearch("", AWSID, AWSID, "", "", "", request,
search.getRequest(), operationrequest, items);

La variable AWSID étant la clé fournie par amazon après création d’un compte. A ce moment-là, la liste _result _contient toutes les informations dont on peut avoir besoin! Tout est accessible depuis son membre value. Pour de plus amples informations sur ce qui est possible et comment je vous laisse consulter le centre de ressources d’amazon. Voici en quelques minutes ce que l’on peut obtenir conjointement avec les services web d’Amazon et Netbeans 6.

result-aws

Vous pouvez trouver les sources ici.

Envie de rire un coup ?

Pour certains c’est encore pire le lundi matin….

Java et le web 2.0

Un article intéressante concernant java et les appels asynchrones est consultable sur developerwors.

Il met bien à l’index les lacunes de l’architecture Servlet de Java en ce qui concerne le buzz du moment : le web 2.0. Mais ce qu’il y a d’intéressant c’est que l’article propose des pistes sur lesquelles se diriger lorsque l’on veut créer une gestion asynchrones de requêtes. Il est parlé entre autre de du projet Apache MINA , SEDA, mais également du pattern COMET. Très bon tour d’horizon et d’idées à consulter. Un benchmark est de plus utilisé afin de prouver l’apport des appels asynchrones par rapport à la démarche synchrone traditionnelle à Java. Il propose de nombreuses ressources; à aller consulter!

Pour info l’article parle également de 2 solutions proposées par les conteneurs Tomcat et Jetty qui permettent une communication asynchrone : Apache Tomcat 6 Comet API et Jetty Continuations.

Lectures #2

L’oiseau d’amérique (Walter Tevis)

Un roman SF mais trop tout comme j’aime. C’est l’histoire de ce qu’est devenu l’humanité en l’an 2100 et quelques au contact de robots de classes plus ou moins sophistiquées. A cette époque tout est régulé jusqu’au taux d’infantilité. Ce taux est d’ailleurs devenu très bas au point qu’il n’y a carrément plus d’enfants qui naisse…. Mais tout n’est pas perdu. … (je ne sais plus son nom) , un humain, lui travaille à l’université de New-York et peut consulter de nombreux livres… Il apprend à lire et découvre ce qu’était l’homme au XXème siècle. Il prend goût à la lecture et au visionnage d’oeuvres cinématographiques ce qui le change complètement. Il ne fume plus d’herbe, ne prend plus de _soppor _et est heureux!

Je vous laisse découvrir cet ouvrage magnifique qui est un hommage à la lecture et à cette détermination de vivre innée à l’homme.

#Et après (Guillaume Musso)

Roman quelque peu fictif (un peu moins celui-ci) et à suspens. C’est l’histoire d’un gamin qui manque de se noyer à l’âge de 8 ans et qui devient plus tard avocat renommé sur Manhattan. Un épisode tragique rend la séparation d’avec sa femme inévitable. Celle-ci déménage à l’autre bout des Etats-Unis mais un contact régulier est maintenu entre lui et sa petite fille Bonnie. C’est alors qu’un étrange chirurgien entre dans sa vie avec des révélations bien étranges….

Si vous ne l’avez pas lu, sautez dessus! J’ai particulièrement aimé les dialogues entre le père et sa fille qui lui inculque le respect des gens quels qu’ils soient, le respect de l’argent, le respect tout court. Une autre chose qui ressort bien de se livre est notre changement d’attitude lorsque l’on se dit que l’on va bientôt mourir… A chacun de nous de ne pas oublier de vivre chaque journée à fond pour n’avoir aucun regret (plus facile à dire qu’à faire).

La perle

Il y a des livres qui sont simples mais dont la morale peut nous laisser une marque indélébile.

Dans ce genre de lecture, j’ai nommé La Perle de John Steinbeck. Ce livre dépeint une histoire somme toute assez simple d’une famille pauvre vivant dans un petit village. Un malheur arrive lorsque Coyotito, le bébé, se fait mordre par un scorpion. Heureusement Kino, le papa, trouve une perle énorme qui permettra certainement de régler tout les problèmes que cette famille naissante pourrait rencontrer grâce à l’argent que cette perle rapportera. C’est alors que Kino se met à rêver de tout ce qu’il va pouvoir faire avec l’argent qu’il est près d’obtenir. La morale du livre ressort à ce moment-là très bien:

“C’est le fusil qui rompit les digues. C’était l’objet hors d’atteinte, et si Kino pouvait concevoir l’idée d’un fusil, alors il n’y avait plus de limites à ses désirs. Car on dit que l’homme n’est jamais satisfait; qu’une chose lui soit offerte, et il en souhaite une seconde. Cela est dit dans un sens de dénigrement et c’est cependant là une des plus grandes qualités de la race humaine, celle qui la rend supérieure aux animaux, lesquels se contentent de ce qu’ils ont.”

![la perle][3] Cet extrait pousse à la réflexion et c’est ce que j’aime dans la lecture. La lecture permet de s’ouvrir à des choses auxquelles ont n’a pas le temps de réfléchir en regardant un film ou en jouant à un jeu vidéo. En lisant cet extrait on peut se dire que c’est vrai que cette envie d’aller toujours plus loin peut valoir des choses extraordinaires. Rien qu’en pensant à toutes les possibilités offertes depuis la révolution industrielle, c’est remarquable! Par contre il est également possible de réfléchir au sentiment d’insatisfaction qui ressort d’une telle attitude. Aujourd’hui nous pouvons tellement acquérir de choses qu’il devient facile de ne plus apprécier à sa juste valeur les choses que nous possédons déjà ou les choses que nous avons pu faire nous-même. Personnellement, j’aime de temps en temps essayer de sortir de cet environnement publicitaire, marketing, pécuniaire à outrance, afin de profiter des choses qui m’entourent. Et à mon avis c’est quelque chose de bénéfique, d’indispensable pour avoir un sentiment de satisfaction.

Bee

Bee est une application AIR (j’ai décidé de m’y plonger donc). Une fois de plus, l’intégration se fait très simplement. Une fois sur le site proposant l’application un clic et l’application est installé sur votre machine après avoir accepté la licence ainsi que l’accès à vos données.

bee

Cette application vous permet d’éditer votre blog à la manière d’ecto. Bee est moins évolué que celui-ci en fonctionnalités mais au niveau interface ca poutre comme on dit! Des effets de transparences, de fade in/out, d’animation… Tout y est et ca donne vraiment bien! Je continue mon exploration, j’espère bientot créer ma première applic.

Adobe AIR

Un article très intéressant concernant les applications desktop riches (RIA) est parru sur DevX.com

Cet article compare 3 technologies ayant pour but la création de ce genre d’application. Silverlight, Adobe AIR (anciennement connu sous le nom Apollo) et JavaFX sont mis côte à côte pour la création d’un même widget, un chronomètre.

Il est comme toujours évident qu’une technologie ne répondra pas à tous les besoins. Mais concernant le développement d’application riche je me dis que je vais peut-être bien me pencher davantage sur Adobe AIR quant on voit le résultat du chronomètre sous cette technologie et le développement y ayant mené. Ainsi le widget n’a aucune décoration et supporte la transparence. C’est la différence principale mise en avant dans l’article. Peut-être qu’il y a possibilité d’y arriver avec les autres technologies (en Java c’est possible d’ôter la décoration donc en JavaFX sûrement aussi) mais AIR le fait très simplement. Au niveau du déploiement les 3 technologies me semblent défendables; il n’est en tout cas pas difficile d’effectuer cette opération sur aucune des 3 technologies.

LibraryThing

J’ai parlé il y a quelques temps de Delicious Library. Application permettant de gérer votre médiathèque de façon agréable grâce à de beaux effets… Aujourd’hui j’ai découvert LibraryThing. Ce site permet de gérer sa bibliothèque en ligne et d’être lié a une communauté forte de plus de 280'000 membres. Les fonctionnalités sont similaires à Delicious mais il est évident que l’accès au travers de la grande toile apporte quelques avantages. Il est ainsi possible de consulter l’avis des autres membres sur des livres que l’on posséde ou qui sont similaires. On peut également intégrer des groupes d’internautes qui ont les memes gouts que vous pour parler de vos découvertes ou d’échanger tout simplement vos appréciations… Bref le fait de rendre l’application plus sociale est vraiment sympathique…

La communauté de développeurs autour de LibraryThing a l’air bien active. Elle alimente un blog et fournit plusieurs outils sympathique en marge de l’application comme un widget à publier sur son blog personnel ou encore un plugin firefox permettant de faire directement une recherche sur le site à partir d’une sélection de texte.

Les joies de la configuration réseau

/etc/modprobe.c/blacklist : un fichier important! …. La configuration de serveur, stations et autres périphériques est la chose la plus ennuyeuse à mes yeux en informatique. Mais bon il faut bien y passer de temps en temps. J’ai enfin terminé la configuration de mon serveur sous ubuntu feisty. Si vous possédez comme moi un chip sis 191 comme carte ethernet voici quelques notes importantes:

Le driver intégré à la distrib fait arrêter le démarrage de votre os. Il faut donc désactiver le composant depuis le bios. Ensuite pour installer le driver on est obligé, à ma connaissance mais ca peut très bien évoluer, de passer par un driver windows. Il vous faut donc le dowloader depuis le site de sis. Ensuite il va falloir installer ndiswrapper qui permet d’installer le driver:

Voilà ndiswrapper est maintenant configuré. Ce qu’il m’a fallu encore faire que je n’ai pas trouvé sur cette procédure c’est d’ajouter le module sis190 au fichier /etc/modprobe.c/blacklist. Il faut juste ajouter blacklist sis190 et le tour est joué. Sans ajouter cette ligne, ubuntu va tenter de charger ce module pour la carte réseau et va faire planter le démarrage. Après blacklistage, ndiswrapper prend les choses en main et tout fonctionne.

C’était le plus compliqué à trouver mais maintenant c’est tout bon j’ai mon serveur ssh qui tourne dessus et grâce à ce driver il est enfin possible de lire et écrire sur partition ntfs donc je n’ai pas à me casser bonbon à convertir/réorganiser toutes mes partitions… Ouf! Voilà qui est bien, enfin fini… Ah et pis chose rien à voir… Si vous voulez utiliser tomcat sur système Unix (en tout cas sur mac), ajouter bien l’autorisation d’exécution à tous les fichiers .sh sinon vous vous prendrez une erreur concernant une variable BASEDIR… Enfin bon pas toujours logique.

Multithreaded Java GUI Programming

J’ai lu récemment cet article sur InformIT. J’ai cependant une petite précision à faire. Il est en effet important de connaître la structure de swing au niveau threading avant de faire passer une application monothread à une application multithread. Ce n’est pas aussi simple que l’article semble le montrer.

Au départ de toute application, swing ou pas, la machine virtuelle démarre un thread de lancement. Ce thread a pour nom le main-thread, c’est donc au sein de celui-ci qu’est lancé la méthode main de votre application. Ensuite votre code peut initialiser, lancer, tuer des threads à souhait. Mais lorsque vous développez une application graphique avec le framework swing, un thread additionnel est lancé. Il se nomme l’_Event Dispatch Thread (_abbrévié EDT). Ce thread a pour but de gérer les interactions de l’utilisateur et l’affichage des composants graphiques de votre application. Ce qui est important c’est que ce thread n’ait à faire que des tâches très courtes afin que votre application ne gèle pas mais également que tout changement d’apparence de votre application passe par lui.

Si maintenant nous revenons à l’article de Monsieur Morris nous pouvons voir en page 3 que pour lui passer une application swing en multithreading est aussi simple que de créer un thread lors d’un clic de bouton et le lancer. Ce pourrait en effet paraître très facile! Mais il faut faire très attention en suivant cette méthode… En effet si vous mettez à jour votre application depuis le thread lancé il peut vous arriver malheur et ce qu’il fait dans l’article.

En revenant à notre description (très rapide) de l’architecture swing nous nous rappelons de l’EDT. Tout ce qui concerne un changement graphique doit passer par ce thread puisque c’est lui gère tout (redimensionnement, rafraîchissement, disposition…) ! Il existe plusieurs méthodes dans l’API de java qui permettent d’ajouter une tâche à effectuer dans l’EDT: SwingUtilities.invokeLater(Runnable r) et SwingUtilities.invokeAndWait(Runnable r)

Je vous laisse consulter la documentation pour connaître leur spécificités. Tout cela pour dire qu’il ne faut pas oublier de passer par l’EDT pour changer l’aspect de votre application pour ne pas avoir de surprise.