Blogounage

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

vendredi 29 mai 2009

JSR 330 : Dependency Injection for Java

Récemment, SpringSource (Rod Johnson, créateur de Spring) et Google (Bob Lee, coauteur de Guice) lançaient une proposition de JSR visant à standardiser un jeu d'annotations pour gérer l'injection de dépendances.

Cette proposition, « Dependency Injection for Java », est devenue une véritable JSR depuis 3 jours.

Personnellement, j'ai hâte de voir ce qui va ressortir de ce travail. Notamment, je regarderai attentivement en quoi cela complètera ou s'intégrera avec les annotations de common annotations (JSR 250, dont sont notamment issues @PostConstruct, @PreDestroy, @Resource) et éventuellement les annotations de la spécification des EJB3 (@TransactionAttribute, notamment).

Comme la spécification sera développée avec un scm et une liste de diffusion accessibles publiquement, j'essaierai de vous en dire plus à ce sujet dès que possible.

À suivre.

jeudi 28 mai 2009

Citation du jour : Clémenceau

En lisant un bouquin, j'ai découvert l'histoire de la mort de Félix Faure, et le commentaire fait par Clémenceau après son décès. Félix Faure, président français de la fin du 19e siècle, est en effet mort en pleins ébats avec sa maîtresse.

Et Clémenceau, publiquement de dire :

Il a voulu vivre César et il est mort Pompée.

Superbe, Georges ! :-)

lundi 11 mai 2009

Java User Group Toulouse : première conférence

Pour ceux qui n'auraient pas encore vu passer l'information, demain soir a lieu la première session du JUG toulousain. Vous êtes évidemment les bienvenus !

Au programme, GWT et Java ME.

À demain !

vendredi 27 mars 2009

L'église catholique à côté de la plaque

Après la récente intervention controversée du pape[1], on a par contre maintenant affaire à un véritable débile en la personne d'André Fort.

Je viens en effet de l'entendre nous expliquer à la radio que (de mémoire) : les scientifiques savent très bien que le virus du SIDA est trop petit et traverse la paroi du préservatif (!).

Inutile de préciser que toute la communité scientifique est dite indignée par de tels propos... Et rappelons que si ! N'en déplaise à ce ramolli du bulbe d'André Fort, l'usage du préservatif est très sûr.

Il est inadmissible de chercher à appuyer ses propos de la sorte en se référant à des soi-disants "scientifiques". Ça me rappelle les créationnistes !

Cela risque d'avoir simplement un impact sur la frange peut-être la plus fragile de la population qui pourrait croire ce discours, et à exaspérer encore davantage les catholiques... Je suis personnellement d'éducation catholique et non pratiquant (je n'ose pas dire simplement "catholique non pratiquant") et les propos de ce genre de décérébré me rendent dingue.

Heureusement que je connais d'autres prêtres plus intelligents, plus pragmatiques, plus ancrés dans la vie de tous les jours, pour ne pas me mettre simplement à penser comme certains doivent certainement le faire (et on peut les comprendre...) : "décidément, ces catholiques, qu'est-ce qu'ils peuvent être cons !".

À bon entendeur.

Notes

[1] attention à bien toutefois se renseigner quant aux propos exacts du pape avant de critiquer, cf. la note de Maître Eolas par exemple. On a toujours l'air très con à critiquer des propos qui ne sont pas ceux que l'on pense précisément.

dimanche 15 mars 2009

Abattre des cloisons non porteuses en briques

Dans les travaux de notre maison actuellement, je me suis enfin décidé à expliquer comment nous avons procédé pour l'abattage de cloisons. Plusieurs personnes ont semble-t-il été étonnées que je n'en parlasse point avant :-).

Abattre des cloisons en brique

Nous avions environ 30 à 40 mètres linéaires à abattre, sur des hauteurs de 2m50 ou 2m80. L'objectif était d'abattre absolument toutes les cloisons, parce que nous n'avions pas de mur porteur (seuls les murs extérieurs sont porteurs sur cette maison). Ces cloisons étaient en brique de 7cm d'épaisseur.

Première étape : se faire une idée de la difficulté des opérations

J'ai commencé par créer un passage entre les pièces pour faciliter la circulation. Ce premier perçage avait aussi pour objectif d'avoir une idée de la vitesse à laquelle nous pourrions abattre le reste.

J'y suis allé franco : à grands coups de masse. (J'avais acheté cette "masse trancheuse" chez Casto. Le côté "tranchant" est effectivement bien pratique.).

Note à ce propos : faites très attention à ce qu'il n'y ait rien qui craigne les projections de gravats de l'autre côté de la cloison sur laquelle vous vous acharnez. En effet, taper à coup de masses dedans a dans mon cas projeté des gravats largement jusqu'au mur suivant (situé à environ 4 mètres). Réfléchissez donc aux fenêtres qui peuvent se trouver derrière, ou simplement aux personnes qui travaillent avec vous. Dans ce dernier cas, hurlez simplement tiiimbeeeer avant de taper, ça fonctionne généralement plutôt bien :-).

Deuxième étape : industrialiser le processus

La technique du "c'est moi que vlà avec ma masse", c'est bien. Mais si vous cassez progressivement et simplement autour du point initial, ça va vous faire des tonnes de gravats à transporter par petits morceaux. Je vous la déconseille donc.

Je vous recommande en effet plutôt une technique que j'ai adoptée ensuite : casser le mur en faisant des grosses saignées pour réaliser des carrés de briques transportables. C'est plus simple à transporter dans la voiture que tout casser en petits bouts...

Pour vous, j'ai testé plusieurs techniques :

  1. Ma tête après le meulage À la meuleuse d'angle et disque diamant (on l'appelle aussi souvent "disqueuse") : bof. Je vous la déconseille plutôt, sauf si vous avez besoin d'une découpe au millimètre. Mais ATTENTION : si vous partez sur cette technique, préparez vous à faire de la poussière. Mais quand je dis poussière, je ne plaisante pas. La pièce sera remplie de poussière après 5 minutes de meulage...
  2. à la masse petit bout par petit bout : vous faites un trou, puis vous l'élargissez progressivement. Cette technique a le gros inconvénient de vous imposer un long et fastidieux ramassage de gravats après coup. Je vous la déconseille aussi. Vous devrez aussi investir à mon avis dans un nombre très important de "sacs de gravats" (j'y reviens plus bas) ;
  3. à la masse, avec des saignées pour essayer d'obtenir des plaques de par exemple environ 1m² plus facilement transportables ;
  4. à la masse et au marteau, par pan de cloison entier... On part toujours sur le principe des saignées, sauf qu'on part du sol, on va jusqu'au plafond. On fait la saignée au ras du plafond avec escabeau et marteau, puis on redescend jusqu'au sol au bout de quelques mètres. Vous l'aurez compris. Cette technique est de loin la plus rapide. Un conseil toutefois : soyez plusieurs et au moment où vous faites descendre la cloison, retenez la le plus longtemps possible. Par exemple, à trois, nous retenions sans aucun souci une cloison de 2m50 par environ 3m. Pensez aussi à mettre au sol des tapis ou toute chose de ce genre pour amortir le choc de la chute lorsque vous ne pouvez pas retenir jusqu'au bout. Nous avons utilisé cette technique pour les derniers 90% des cloisons sans soucis. Son gros avantage est qu'on peut ensuite simplement récupérer des morceaux de taille assez importante au sol sans trop de petits morceaux.

Chute de cloison accompagnée...Saignée dans les cloisons à abattre À propos des petits morceaux, les nombreux "bouts" de gravats que ce genre de travaux va vous produire, un conseil important : achetez des "sacs à gravats" (comme ceux-là). Ce sont des sacs en plastique extrêmement épais qui sont très utiles lorsqu'il faut balayer puis convoyer jusqu'à la déchetterie les bouts de briques cassées sur le sol. Attention, ne les jetez pas avec les gravats... Videz les simplement et réutilisez les jusqu'à ce qu'ils rendent l'âme (jusqu'ici, je dirais que nous avons utilisé chaque sac environ 5 à 10 fois, nous en avions acheté 24...)

Si vous avez des questions, n'hésitez pas.

Dans le prochain épisode, si vous êtes sage : abattre un plafond en plafonnette ou en lattis (oui, j'ai les deux).

mercredi 25 février 2009

Eclipse Killer Feature (un de plus) : formatage automatique du code modifié

Voilà pourquoi j'utilise Eclipse, pour ce genre d'apports qui peut paraître mineur au premier abord, mais qui en fait nous change la vie.

Lorsqu'on développe dans une équipe, on souhaite généralement appliquer entre autre des normes communes de formatage. Dans Eclipse, le Ctrl-Shift-F permet d'exécuter le formatage sur le fichier (ou sur toute une arborescence) selon le modèle qu'on aura défini et chargé au préalable.

Le Ctrl-Shift-F a cependant un défaut : sans sélection préalable, il va formater le fichier complet. La fois suivante que vous envoyez vos modifications aux gestionnaires de version (commit avec svn, par exemple), les développeurs qui récupèrent votre modification peuvent se demander pourquoi vous êtes allé modifier tout le fichier pour une simple faute de frappe...

Autre cas encore plus problématique : vous faites du développement MDA. Une partie plus ou moins importante de votre code est donc générée. Vous ne devez donc a priori surtout pas toucher au code en dehors de ce qu'on appelle généralement le code utilisateur (on retrouve ce principe avec acceleo il me semble). Du genre

// Ici, le code modifié manuellement sera écrasé par le générateur.
  // [DEBUT:METHODES]
// Là, le code ne sera pas écrasé à la régénération suivante.
  // [FIN:METHODES]

Depuis la 3.3 d'Eclipse, dans la partie Java/Editor/Save Actions de Window/Preferences, on peut demander à ce que le code qu'on vient de modifier soit automatiquement formaté... C'est pas formidable, ça ? À chaque Ctrl-S, le code modifié et uniquement celui-ci va subir le formatage adéquat... Via cette fonctionnalité, vous pouvez automatiser tout plein d'autres choses au moment de la sauvegarde, je vous laisse jouer avec :-).

java-editor-saveactions.png

vendredi 30 janvier 2009

Java User Group Toulouse

Via Sami, j'apprends ce matin que ça y est, le JUG Toulouse est né. Je me suis d'ores et déjà inscrit à liste de diffusion.

J'espère que je trouverai le temps de participer à ce groupe malgré les importants travaux à faire dans la maison que nous venons d'acheter.

PS : Sami, merci encore pour la bétonnière :-).

lundi 22 décembre 2008

Drop sequences for Oracle

Adam already showed how to generate all the drop table statements (impossible to trackback):

SELECT 'drop table '||table_name||' CASCADE CONSTRAINTS;' FROM USER_TABLES

As I just needed to drop sequences, based on Adam's query, here's the necessary:

SELECT 'drop sequence '||sequence_name||';' FROM USER_SEQUENCES;

Quite straightforward indeed.

Hope this helps.

vendredi 28 novembre 2008

À quelle vitesse vous tapez ?

41 mots

Speed test

vendredi 17 octobre 2008

L'image du jour

Reçu ça il y a quelques jours, ça m'a beaucoup fait rire : tapette.jpg

mardi 30 septembre 2008

Leçon de politique politicienne à l'américaine

Je viens de lire cet article du monde à propos du rejet du plan Paulson. Très fort, ce Douglas Holtz-Eakin...

Si M. McCain a évité de s'en prendre trop frontalement à Obama, son conseiller économique, Douglas Holtz-Eakin, n'a pas pris de pincettes.

Si l'adoption du plan de relance a échoué, explique-t-il, c'est "à cause de Barack Obama et des démocrates, qui mettent la politique avant le pays". [...] Sur les 433 élus de la Chambre basse, 228 ont voté contre, dont 133 républicains et 95 démocrates.

Refaisons le compte, d'après wikipedia, la chambre des représentants des États-Unis, aussi appelée chambre basse, est composée de 435 membres, répartis comme suit :

  • Républicains : 202 sièges
  • Démocrates : 233 sièges

Et on nous dit donc qu'ont voté contre le plan Paulson :

  • 133 républicains
  • 92 démocrates

Comptons les votes pour :

  • Républicains : 69 votes, soit 34% des républicains
  • Démocrates : 141 votes, soit 60% des démocrates

En résumé, Douglas Holtz-Eakin, républicain, accuse les démocrates qui ont voté massivement pour (autant en nombre qu'en pourcentage) d'avoir fait échouer le plan Paulson... C'est pas un rien malhonnête, ça, mon petit monsieur ?

mercredi 10 septembre 2008

Citation du soir, bonsoir !

Écoutant la radio, je vous la livre ici. Laurent Gerra imite Le Pen et parle de sa femme. Ça donne en gros :

À l'âge où je l'ai ramassée, elle n'avait déjà plus la nurserie, il ne lui restait plus que la salle de jeux.

Finesse, quand tu nous tiens :-).

dimanche 13 juillet 2008

How to retrieve the Hibernate Session from the EntityManager interface

Well, as I myself fell into this stupid gap, I guess I'll try to help. I was quite pushed in this trap by a fallacious part of the jboss documentation :

@PersistenceContext EntityManager entityManager;
public void someMethod();
{
  org.jboss.ejb3.entity.HibernateSession hs = (HibernateSession)entityManager;
  org.hibernate.Session session = hs.getHibernateSession();
}

Let's be clear : this is totally WRONG! Yes, it will work under JBoss, but as there's a standard way to do this, this is not the right way to do this.

In fact, there's a dedicated method that lets you retrieve the underlying persistence manager : EntityManager.getDelegate(). If you read this method's javadoc, you'll see the following :

/**
 * Return the underlying provider object for the EntityManager,
 * if available. The result of this method is implementation
 * specific.
 * @throws IllegalStateException if this EntityManager has been closed.
 */

public Object getDelegate();

And the "underlying provider", for Hibernate, is obviously the Hibernate Session instance...

So, the right way to retrieve the Session is something like the following instead :

@PersistenceContext EntityManager entityManager;
public void someMethod();
{
  org.hibernate.Session session = (Session)entityManager.getDelegate();
}

Under JBoss, using this code won't make a big difference. But using the standard way will let you run your code under several appservers (namely, it works like a charm[1] under JBoss 4.2.2.ga and Glassfishv2ur1 for example). If you use the bad way above, this will just crash under Glassfish, for example...

I reported the corresponding documentation bug in the JBOSS tracker.

Hope this helps...

Notes

[1] ça, c'est pour Seb

Comment gérer la rétro-compatibilité avec l'API d'Eclipse

Dans cet article, Eugene présente un cas où une API évolue. Une méthode est ajoutée qu'il serait bien de pouvoir utiliser. Problème : le faire rendrait le code non rétrocompatible. Donc, pour le faire tout de même sans casser la compatibilité, il utilise la reflection. Et pour le faire proprement, il met en œuvre un Proxy afin que ce code soit bien externalisé.

Une solution très classe de la part d'Eugene Kuleshov.

lundi 30 juin 2008

Comment réinitialiser manuellement les pages chargées par firefox au démarrage

Si, comme moi depuis 10 minutes, vous êtes dans l'impossibilité de relancer Firefox parce que la page sur laquelle vous étiez provoquait un plantage de FF, ce qui suit est pour vous.

Dans les options de Firefox, vous pouvez demander à ce que celui-ci réouvre les onglets ouverts avant la dernière fermeture (Onglet Général, le premier combobox). Une fois cette option sélectionnée, mon firefox qui gelait avait pour bonne idée de redémarrer sur la page en question et de regeler...

Et là, bizarrement, la proposition de "restaurer les onglets" ou de "démarrer une nouvelle session" n'était même pas offerte. Donc, bien bien bloqué.

La solution que j'ai trouvée est la suivante :

  • Tuez firefox
  • dans votre répertoire profile (dans quelque chose comme $HOME/.firefox/1d5s1.default sous Linux ou C:\Documents and Settings\votreuser\Application Data\Mozilla\Firefox\Profiles\1d5s1.default sous windows), supprimez simplement le fichier sessionstore.js.
  • Relancez firefox...

Voilà, en espérant que ça serve...

- page 1 de 20