Si vous maigrissez trop vite, prenez vos patch un jour sur deux

Je viens d’éclater de rire en voyant une publicité passer dans Gmail :

Maigrir trop vite...

Le plus extraordinaire, c’est que le site en question semble pourtant se vouloir très sérieux :-).

Encoding par défaut avec XML : UTF-8

Nous gérons en ce moment un petit problème d’intégration avec des WebServices d’une entreprise qui ne s’attend qu’à du iso-8859-1. XML a pourtant été conçu pour gérer plus simplement les problèmes de jeux de caractères et d’encodage utilisé, mais ce qui a été fait ne respecte tout simplement pas la spécification.

En effet, notre code envoie une requête SOAP dans un tube HTTP annonçant de l’UTF-8. Comme ça ne marchait pas, nous avons carrément ajouté l’attribut encoding au prologue XML et retesté avec Soapui, mais ça n’a rien donné.

Alors, comme il faut que quelqu’un corrige son code, j’ai vérifié la spécification1^, voici ce qui est indiqué :

Bref, attendre de l’iso-8859-1 lorsque rien n’est indiqué est au minimum une bizarrerie, et au pire une erreur par rapport à ce que dit la spécification.

Notes

[1] Non-Normative

Apache Subversion

Tiens, j’avais raté cette news (300 billets en attente dans mon google reader :-/, que je n’arrive à dépiler que 10 par 10. Ça ne suffit pas :-)) : Subversion a intégré l’incubateur d’Apache.

En français, ça veut dire que bientôt, Subversion sera un projet faisant partie entièrement de la fondation Apache. Subversion n’arrête pas son ascension, et c’est logique vu la qualité de l’outil.

[Hudson] How to set a private maven repository by job and easily be able to delete them

When building maven projects with hudson, there’s some common best practices about maven repositories handling :

  1. isolate maven repositories between jobs
  2. regularly purge repositories

The problem

The basic way to do it is to activate the hudson per-job option : “Use private Maven repository”. But the thing is you have to do it for EVERY new job you add. There is no way inside hudson to activate it globally.

Documented solution

If you look at hudson help for this option, you’ll see a link to a simple solution that specify the repository directly in the maven settings.xml file. The tip is to redefine the localRepository tag inside settings with this special value :

<localRepository>${env.WORKSPACE}/m2_repo</localRepository>

This way, you’re done with the first best practice : isolate maven repositories. But not yet with the regularly purge repositories one. Actually, using this option will put the m2_repo inside each hudson job workspace. So, finding and deleting them could become a bit cumbersome. You’d have to cron something like find . -name m2_repo -exec rm -rf "{}" \;.

Even better

As you might have understood, I was not thoroughly satisfied with this solution. I wanted to be able to really easily delete the repositories. So I just changed the option above to have them all inside the same root directory under ~/.m2/repositories, one per job.

Quite simple in fact, instead, just use :

<localRepository>/some/path/.m2/repositories/${env.JOB_NAME}/repository</localRepository>

This way, the only thing you have to put in the cron job is rm -rf /some/path/.m2/repositories/. A bit more straightforward, isn’t it? :-)

Hope this helps.

Encodages/jeux de caractères : Vincent et Hadrien, un grand merci !

Non, ce billet n’est pas une nouvelle tentative d’explication de ce que sont encodages et jeux de caractères. Je garde toujours dans un coin de ma tête de chercher un jour à écrire moi aussi un billet sur le sujet. Qu’est-ce j’aimerais pouvoir faire comprendre ce sujet à la fois simple et complexe à tous en quelques mots…

Non, ce billet est là pour remercier Vincent et Hadrien pour leurs pages récapitulant les jeux de caractères les plus courants en France. Je viens de m’en servir à l’instant pour expliquer une nouvelle fois le sujet.

Un autre site bien pratique, qui permet notamment d’avoir la valeur hexadécimale du stockage d’un point de code Unicode en UTF-8 : FileFormat.Info. Par exemple, le î (“LATIN SMALL LETTER I WITH CIRCUMFLEX”).

Et encore un rappel d’articles en français que je vous conseille sur le sujet :

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.

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 ! :-)

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 !

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

Après la récente intervention controversée du pape1^, 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.

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).

Page 3 of 33 Older