riduidel’s posterous

 
Filed under

java

 

Amazon Web Services, ça buzze ...

C'est marrant, ces temps-ci, j'entends pas mal parler d'Amazon Web Services.

Alors, AWS, intéressant ou buzzé à mort ?

Loading mentions Retweet
Filed under  //   cloud   java  

Comments [0]

QI4J

Tiens tiens tiens ...

Je suis tombé ce matin (enfin, plutôt la semaine dernière, mais je ne l'ai lu que ce matin) sur un framework Java qui me paraît mériter qu'on s'y intéresse, plus encore que j'ai pu m'intéresser jadis à Spring ou plus récement à Guice.
L'histoire de cette découverte est d'ailleurs marrante.
Il y a quelques temps, j'ai parlé à mes nouveaux collègues du mouvement NoSQL. Mouvement dont il faut retenir (à mon avis) deux choses
  1. Se définir uniquement par ce qu'on n'est pas, c'est invoquer le démon de la diversité (en même temps, Darwin nous dirait que c'est bon d'un point de vue évolutionnaire).
  2. Les bases de données relationnelles ont trente ans, il est temps de penser à autre chose ...
A la suite de cette discussion, l'un de mes collègues m'a envoyé cette présentation de Neo4J, qui présente très bien les avantages d'une base de données orientée graphe. Dans cette présentation, il est dit que Neo4J peut être utilisé comme back-end QI4J. Comme je trouve Neo4J conceptuellement sympathique (à cause de sa proximité au web sémantique, RDF et toutes ces sortes de choses), j'ai été voir QI4J, et j'ai bien fait (et vous aussi, vous feriez bien).

Pour faire court, QI4J essaye d'appliquer les bonnes idées de l'injection de dépendances au seul domaine où ce soit complexe : le domaine métier. En disant ça, je caricature un peu, mais pas trop. Et je vais essayer de vous expliquer pourquoi; Avec Guice, Spring, PicoContainer et les autres, vous allez facilement pouvoir récupérer les services techniques de votre application : persistance, localisateur d'objets, service de recherche, envoi de mail, ... Mais vos objets métier resteront instanciés par des POJOs. Et tout évolution de la modélisation du domaine métier se traduira par la réécriture de ces POJOs (et sans doute, par conséquent, par la réécriture du mapping objet/relationnel, de la couche IHM, ...). Bref, ça va être le bordel. Et pour une raison somme toute simple : parce que vos objets métier fonctionnent indépendement du contexte, alors précisément qu'un domaine métier est un contexte. Pour le dire dans des mots d'informaticiens, le domaine métier est souvent modélisé à l'aide d'instances d'objets, alors qu'il ne faudrait accéder qu'à des interfaces donnant les capcités des objets. Et là, je paraphrase encore le site de QI4J : dans un domaine métier traditionnel, je suis modélisé comme une personne, alors qu'au travail, je suis architecte, à la maison, je suis un père et un mari, et sur la route, je suis un démon à roulettes lors des Rol Friday Night.

Heureusement, QI4J est là !
Avec QI4J, vous modélisez votre domaine métier sous forme d'entités, d'attributs, et de relations. Et c'est QI4J qui va se charger de faire l'injection de dépendances de tout ce petit monde.
Pour donner un exemple, regardez le 10 minutes tutorial. Bien sûr, il n'est pas complet. Néanmoins, il permet bien de comprendre comment les choses s'articulent. Enfin, j'espère.

D'un autre côté, je commence tout juste à creuser avec vous. Néanmoins, je vois des choses très intéressantes, comme la modélisation des propriétés, qui me rappelle évidement magick-properties, ou encore les annotations beaucoup plus explicites que le @Inject ou même le @Named de Guice.

Bref, ça me paraît prometteur (surtout couplé à Neo4J pour fournir une persistance "sans effort") et je vais sans doute le tester de façon plus approfondie.

Loading mentions Retweet
Filed under  //   ioc   java  

Comments [1]

Flex, c'est quand même moins bien

Pour mon nouveau boulot, je suis amené à faire du Flex. Je ne le prends pas trop mal, dans la mesure où ça me permet (en théorie) d'implémenter un point essentiel des méthodes pour rester un développeur "on the edge".
Là où c'est moins bien, c'est que tant qu'à faire, j'aurais préféré travailler sur un langage qui ne fasse pas semblant.
Prenez l'IDE, par exemple. La toute dernière version de Flash Builder est en fait un packaging d'Eclipse dédié aux développeurs Flash (comme peut l'être, je ne sais pas moi, Eclipse for C, Pulsar, ...). En un sens, c'est très bien, parce qu'en tant que développeur Java, je ne suis pas vraiment surpris. Sauf quand ils décident de me livrer sans mon consentement une version française. Ou que le seul refactoring disponible soit le renommage de fichiers (alors que faire des refactorings dans un langage dynamique, même si c'est plus difficile, c'est possible). Ou que les erreurs de compilation me font revenir quinze ans en arrière, avec des codes aabscons suivis de messages encore moins clairs (pour l'anecdote, il m'a fallu hier à peu près l'après-midi pour trouver qu'un test ne fonctionnait pas à cause d'un simple problème de déclaration de constructeur). Ou qu'une application mxml contenant les tests doive se trouver dans le dossier src (ce qui est super pratique pour séparer les tests et le code source de ma bibliothèque, tiens, imaginez comme maven est content).
Et si l'IDE infâme ne vous suffit pas, prenez les bibliothèques de test unitaire. En Java, je connais bien jUnit, et un peu TestNG. Elles sont plutôt documentées et facilement intégrées dans l'IDE. Bon, en Flex, il y a quoi ? flexunit ? funit ? asUnit ? bon, eh bien je vous mets au défi de trouver une doc claire et complète pour ces différentes bibliothèques; Attention, je ne parle pas d'un tutorial écrit pour faire comme tout le monde et présentant un exemple bidon même pas intégré à l'IDE, mais bien de l'exemple complet qui me permet à la fin de lancer mes tests dans l'IDE. Cherchez pas, vous ne trouverez rien. Parce que ces trucs sont codés à la va-vite et que leurs auteurs ne semblent pas se soucier de l'industrialsiation de ces tests unitaires.
Et pour finir avec l'industrialisation, parlons un peu des flexmojos. C'est une super-idée de vouloir intégrer la compilation Flex à maven pour montrer comme l'outil est extensible. Mais c'est aussi une terriblement moins bonne idée que de fournir une dépendance flexmojos-unittest-support qui contienne les trois bibliothèques sus-mentionnées (dont les classes de bases de test unitaire s'appellent toutes ... TestCase ... merci pour les problèmes d'import) sans jamais expliquer comment éviter cette dépendance (mis à part, quand on connait maven, en allanrt faire un tour dans le pom de cette dépendance pour trouver les dépendances initiales et leurs versions respectives).
Bref, Flex, c'est quand même vachement moins bien que Java. Et c'est là que je comprend les éternels regrets des vrais développeurs Java, qui voient Sun lancer des idées du bout du petit doigt et ne pas les soutenir (au hasard, JavaFX) alors qu'avec un bon soutien, cette techno a les moyens de botter cent fois les fesses à ce Flex, qui n'est rien d'autre qu'un javascript vaguement rabhillé.

Loading mentions Retweet
Filed under  //   flex   humeur   java   test  

Comments [0]

Sorti du ghetto

Ces temps-ci, comme vous le savez peut-être, je ne fais plus vraiment beaucoup de Java.
Pour m'entretenir, je me suis donc dit que j'allais voir dans quelle mesure mon idée folle était réaliste ou pas. Et pour ça, évidement, la meilleure solution, c'est de tenter une implémentation "POC", c'est-à-dire pas belle, mais qui fasse tout ce que je veux.
Et je découvre avec stupéfaction que le monde ne s'est pas arrêté il y a deux ans, et qu'il y a toujours des mecs qui développent des bibliothèques très pratiques en java. Oh, bien sûr, quand il faut les inclure dans une application Java Web Start, ça augmente les temps de download. Mais je vais vous dire, depuis environ 2 ou 3 mois, faire le JAR le plus petit du monde, ça ne m'intéresse plus. Surtout quand la contrepartie, c'est l'interdiction d'utiliser la moindre ligne de code étrangère. Et donc, j'utilise des bibliothèques externes, avec joie, devrais-je dire.
J'ai donc découvert des trucs très bien, comme
  • Guice, que je connaissais déja de vue, mais qui est vraiment très agréable quand on peut réellement utiliser l'introspection.
  • glazed-lists, avec lequel je commence tout juste mes expérimentations, me paraît mériter plus qu'un coup d'oeil, tant il peut rendre de services (et éviter de réimplémentations fastidieuses).
  • google collections et guava m'ont l'air de pouvoir amener quelques jolis éléments d'écriture à la limite de la programmation fonctionnelle (ce qui va nettement me rapprocher de Ruby, et dans le meilleur sens du terme).
  • De manière plus anecdotique, jintellitype eest aussi sympatoche.
  • Et bien sûr, commons-configuration, qui devrait me permettre d'éviter (enfin) de redéfinir mon  propre format de propriétés.
Enfin, de mani-ère encore plus latérale, une fois que j'aurais fini l'implémentation Java de mon idée folle, je tenterai peut-être un truc fou : en refa

Aaaaaaaaah ! Saloperie de clavier !

J'ai accidentellement tapé sur CTRL-machin qui a envoyé le mail ! 

Bref, je disais donc, en refaire une partie en Griffon. Ca a l'air de permettre des choses assez mignonnes, et de manière très efficace (sans doute grâce à Groovy dont je m'imprègnerai aussi, et puis ça me fera mon langage de 2009/2010). 
Mais pour l'instant, je joue pas mal avec la complétion via glazed-lists, et c'est franchement chouette. 

Loading mentions Retweet
Filed under  //   dev   java  

Comments [0]

The most sexy plugin of the Sonar forge

Last week, the most sexy plugin of the Sonar forge was released : the Motion Chart plugin ! This animated bubble chart as I used to call it can handle up to 4 custom dimensions throughout time : X-axis, Y-axis, color and size of the bubbles.

Once installed, a new link “Motion chart” is available both on the Sonar home page and on each project to respectively play with all projects or all components of a given project. It is really impressive to see bubbles moving along with time and code quality evolution.

I am sure you cannot wait to give a try to this new plugin on your own Sonar instance… or maybe you prefer to watch a quick demo first !


Oh lala,
C'est totallement inutile, et ça donne quand même vachement envie d'utiliser Sonar. Et en plus, grâce à un plugin, Sonar et Hudson semblentt pouvoir s'intégrer à merveille !

Loading mentions Retweet
Filed under  //   java  

Comments [3]

Une idée que je n'implémenterai jamais (enfin, sans doute)

Depuis des années que j'utilise Windows et que je me plains que certains éléments de l'expérience Mac me manquent, pourquoi n'y ai-je jamais pensé ?
C'est vrai, quoi, pourquoi est-ce que chaque plate-forme dispose de ses logiciels de lancement d'applications qui font tous peu ou prou la même chose
  1. System.run("monappli.exe");
  2. "1+1"
  3. Accélérateur pour internet
Pour preuve, quelques exemples
Pourquoi je parle de tout ça ? Parce que ce genre de logiciels est le candidat idéal (pour peu qu'on dispose d'une méthode en java pour créer des "system wide shortcuts") à la création d'une version JavaFX.
Ca donnerait un logiciel portable (peut-être même testable d'un coup de Java Web Start), où l'utilisateur pourrait créer ses plugins en Ruby/Python/Scala/Groovy/Brainf*ck, joli, bref, un truc ultime.
Et j'imagine que la première étape (afficher une fenêtre contenant une liste déroulante de tous les éléments exécutables via la complétion) n'est pas complètement hors de portée.
On peut même imaginer un détecteur/interpréteur de one-liners !

Loading mentions Retweet
Filed under  //   idée   java   windows  

Comments [3]

It's just Swing

Bien des gens disent que Swing est un framework dépassé, qui ne permet pas de faire de belles applications.A tous ces gens, je n'ai plus qu'une URL à envoyer : celle de palantir technologies. Regardez un peu ce qu'ils savent faire, l'ergonomie de la chose et, surtout, le fait que toutes ces informations se mettent à jour en temps réel. Pour moi qui bosse dans ce domaine depuis un bout de temps, c'est tout bonnement bluffant.

Loading mentions Retweet
Filed under  //   java  

Comments [1]

La meilleure façon de rater son projet grâce à Maven2

A chaque fois que je vois un développeur Java passer son temps à regarder Maven tourner, j’y vois une perte de productivité.
D’autant plus que je vois très régulièrement cette tendance dans les projets, au sein d’OCTO et même dans ma propre utilisation.
Attention, je pense que Maven est très efficace pour améliorer la productivité des développements, mais le plus gros piège reste de « passer son temps dans la console ».

Pourquoi c’est mal ?
Quand on s’occupe de faire marcher Maven en bidouillant le POM et en regardant le build tourner dans la console : on ne développe pas.
Lorsqu’on développe, on doit passer son temps dans son IDE (eclipse, InteliJ, netbean, notepad ou vi selon les gouts) et coder du code, des tests.

maven is building

Cette image est un détournement, voici l’image originale : http://xkcd.com/303/

Alors pourquoi on passe son temps dans la console ?
En cherchant bien, j’en viens à la conclusion que la principale raison pour laquelle je passe mon temps dans la console est que mon IDE n’est pas bien configuré : un build dans mon IDE produit un résultat différent d’un build Maven, je ne fais plus confiance à mon IDE et la seule façon d’être sûr que mon code marche c’est de lancer la commande « mvn install » et d’attendre le message « Build Successfull ». Un cas typique est l’utilisation du filtering des ressources par Maven qui n’est pas géré nativement par Eclipse (le plugin m2eclipse résout ce problème).

Oui, mais ça ne marche pas : les tests dans mon IDE ont un comportement différents que dans Maven
Dans ce cas, je n’ai qu’un seul conseil : faites le marcher !
Votre configuration doit être assez bonne pour que quand vos tests passent dans l’IDE, vous devez être assez confiants pour pousser votre code dans votre gestionnaire de source.
Si vraiment il y a un problème, l’intégration continue va vous prévenir.

Lancer un build Maven sur votre poste et bidouiller vos configurations (Maven ou IDE) doit être rare :

  • quand l’UDD a retourné une erreur et que vous avez diagnostiqué que le problème vient d’une configuration
  • quand justement vous avez modifié votre POM (pour rajouter un plugin, ajouter un module, etc.)

Ces 2 cas doivent rester marginaux :

  • si votre UDD vous retourne constamment des erreurs de configuration, prenez le temps de les corriger durablement
  • si vous modifiez trop souvent vos POM, il est surement temps de prendre un peu de recul et de stabiliser la configuration des projets.

En résumé : Ne passez pas votre temps dans la console Maven, passez-le à coder dans votre IDE

C'est marrant, ça, mais chez IT-Finance, on a passé pas mal de temps (trop, peut-être ?) à jouer avec le script maven qui permettait de générer l'application. Et bien des fois, j'ai suggéré à mes collègues de réfléchir à notre usage de maven. Est-ce qu'on n'essayait pas d'en faire trop avec maven ? Est-ce qu'on faisait les choses dans le bon sens avec cet outil qui, définitivement, n'est pas une silver-bullet ? Est-ce qu'on n'aurait pas dû rester avec ant (et éventuellement, utiliser un outil séparé de gestion des dépendances comme ivy) ?Je n'aurais sans doute jamais la réponse à cette question. Ce que je sais, en revanche, c'est que c'est encore un domaine où, peut-être sans même sans rendre compte, on réinventait beaucoup de choses.

Loading mentions Retweet
Filed under  //   java   maven  

Comments [2]

Dernières nouvelles de Swing

Avant, sans doute, de quitter le monde merveilleux de Swing et des interfaces "lourdes", quelques liens rigolos

  • Un layout manager avec zoom intégré. Ca m'aidera si, un jour, je reprend jPhotoOrganizer ...
  • Un petit point sur le design d'API par l'auteur de FEST, qui est une librairie très pratique pour les assertions.

Loading mentions Retweet
Filed under  //   java   swing  

Comments [0]

Saleté d'obsolescence programmée !

Suite à des circonstances que je vais sans doute prochainement détailler, j'ai perdu l'un des ordinateurs que j'utilisais à la maison.

J'ai dû tenter de faire passer certains services de cet ordinateur vers mon portable "historique" : un vieux iBook G4 (bon, vieux, pour de l'informatique).
Je dis vieux même si Tiger, à l'époque, m'avait paru le comble de la branchitude. Hélas, ce que je n'avais pas prévu, c'est ce que Jeff Artwood appelle le côté dongle d'un mac. Enfin, avec une certaine nuance. En effet, s'il parle du matériel, le problème tient pour moi au logiciel, et surtout au système : le jour où le monde Mac est passé à Leopard, beaucoup de choses se sont mises, discrètement d'abord, et de plus en plus vite ensuite, à marcher moins bien.
Il y a d'abord eu Qicksilver, puis les logiciels iLife (ce qui n'était pas vraiment gênant). Maintenant, c'est Ruby et Eclipse qui ne supportent plus ma brouette. Et là, c'est rédhibitoire. Sans ça, je ne peux plus faire grand chose : mon lifestream s'appuie sur webgen, qui est passé à Ruby 1.8.5 là où mon iBook n'a que le 1.8.2, et Eclipse réclame à corps et à cris Leopard.
Il ne me reste donc plus beaucoup de solutions (deux, en fait) :
  1. Me passer de tout ça et trouver des alternatives
  2. Trouver un CD de Leopard et faire la mise à jour
D'accord, la seconde méthode est moins honnête, et va faire du mal à ma brouette, mais je vais quand même la tenter. Si ça ne marche pas, tant pis, je passerais à un dual boot avec un quelconque Linux me permettant d'utiliser mes jouets favoris !
Mais avant, opération d'urgence : je dois exporter ma bibliothèque photo pour éviter qu'elle ne soit mangée lors du déménagement (ce qui me permettra par ailleurs de la remettre au carré question IPTC/WMP/...

Loading mentions Retweet
Filed under  //   java   mac   ruby  

Comments [0]