- Produire en chine et très probablement baisser en qualité (ah, l'offshore ...) ?
- Trouver des axes d'amélioration internes (ce qui voudrait dire investir !) ?
- Travailler sur la relation client et l'image de marque - rien de bien nouveau et que se heurte à la politique actuel du "passage obligé par le service achat"
- Jouer la carte de la compétence, un peu comme on visite un atelier pour découvrir le talent d'un artisan ? Encore faut il avoir du talent à montrer ;)
04 novembre 2009
Travailler plus pour ... des prunes ?
24 octobre 2009
Une nouvelle méthode agile ?
Pour faire face à une liste de tâches anarchique, j’expérimente une méthode agile de mon cru : SCUM.
Issu à l’origine d’une faute de frappe, c’est devenu l’acronyme de SCrum for Unique Member (Scrum appliqué à sois tout seul).
Les mêlées quotidiennes sont faciles à organiser, et en plus c’est rapide. Le simple fait de se demander ce qu’on a fait la veille avant d’attaquer est tout de même pas totalement inutile quelque fois !
Un sprint dure de 2 jours à une semaine. Tout seul c’est tenable :)
Jusqu’ici c’est plus du vent qu’autre chose, alors voici le BACKLOG du sprint, et ses célèbres post-it sur le tableau Veleda. L’intérêt énorme de cet outil c’est :
- qu’il n’a pas toutes les limitations de nos trackers en tout genre avec leur cycle de gestion pourrie, leurs champs obligatoires et autres complications inutiles.
- qu’il est dynamique – par définition, un post-it, ça se déplace - et naturellement synthétique
L’air de rien ça permet rapidement de voir où on en est et ce qu’il reste à faire – pour certains ça ferait sans doute peur d’ailleurs, mais ce serait pourtant un bon indicateur !
J’organise donc la “SCUM’Conf 2010”, il reste encore des places pour ceux que ça intéresse :p
15 octobre 2009
Une excellente Idea
Eclipse est omniprésent, et tout le monde s’accorde pour dire que c’est devenu une usine à gaz ingérable. Je dois moi-même faire face aux excès d’humeur de mes petits camarades qui pestent sur un Eclipse “préparé” par mes soins et qui malgré ça plante allègrement ou rame tout ce qu’il peut.
La concurrence, c’est NetBeans – qui a vraiment du mal à décoller même si on m’en a dit beaucoup de bien – et Idea, qui a une excellente réputation, mais malheureusement aussi un prix
Ca, c’était la situation hier. Jetbrains vient en effet de passer son IDE en opensource
Toutes les fonctionnalités de la version payante ne sont bien sur pas au rendez-vous, mais la liste est déjà bien assez large pour contenter les utilisateurs d’Eclipse lassés du “building workspace”
Reste qu’il va falloir franchir le pas de dés-apprendre toute ces (mauvaises ?) habitudes qu’on a si chèrement acquises sous Eclipse, identifier les bons plugins et tout et tout, mais je suis convaincu que ce billet d’entrée sera vite amorti, à commencer par tout ceux qui galèrent avec l’intégration vraiment pourave de Maven dans Eclipse (on attend toujours ce fameux m2e 0.9.9) ...
Pour ma part, je tente l’expérience dès demain :)
Pour plus d’infos, ça se passe ici : http://www.jetbrains.com/idea/nextversion/free_java_ide.html
10 octobre 2009
Encoding Hell
Je viens de perdre une nouvelle journée de boulot sur des %!@$ problèmes d’encodage. Encore un N-ième fichier XML dont l’entête déclare fièrement un encoding=UTF-8, et qui se retrouve charcuté à la sauce CP-1252 (variante MS de l’ISO-8859-1).
Dire que depuis toutes ces années à inventer des formats interopérables et tout et tout on en est encore là ça fait pitié. J’en suis à me demander s’il n’existerait pas un petit plugin Eclipse bien malin pour convertir à la volée tous nos accents en entités xml ou en échappement Unicode – il y a par exemple le plugin propertiesEditor qui fait ça très bien … pour les fichiers properties.
C’est peut être l’occasion de devenir totalement bilingue et de tout rédiger en anglais, histoire de ne plus sortir du bon vieux ASCII 7 bits qui est finalement le seul moyen de ne pas se prendre la tête.
Le build Maven est un peu (!) plus stable grâce à l’option project.build.sourceEncoding mais ce n’est pas encore la panacée : il semble que le générateur de code de CXF (wsdl2java) produise du code source dans l’encodage “local”… pas gagné cette affaire.
08 octobre 2009
Lecture du soir...
Mon éditrice m'a fait parvenir un petit bouquin bien sympa : un petit guide du développeur JavaScript.
05 octobre 2009
HTML 5 - il va falloir réapprendre à coder :)
02 octobre 2009
Google Chrome Frame : amusant
21 septembre 2009
AOP et autres instrumentations du bytecode
- les outils de logs modernes déterminent le nom de la classe/méthode et numéro de ligne à la volée, il serait donc dommage de perdre cette info dans nos logs. Or, en passant par un aspect, ce mécanisme va pointer dans le greffon de l'aspect, et pas là où on l'a appliqué
- chaque ligne de log va nécessiter l'invocation du greffon, la copie des arguments, peut être même la construction d'un logger pour la classe considérée. Des millièmes de secondes qu'on va répéter des millions de fois, au final un dégradation mesurable des performances du code (si vous n'y croyez pas, j'ai vu une appli perdre 10% de son temps dans des mécanismes de log mal fichus).
public boolean doSomething( String value, int count )
{
System.out.println( "done" );
return true;
}
Loggek va modifier le bytecode pour qu'il ressemble à ceci (en pseudo-code puisque le source n'est pas modifié, et le bytecode n'a pas exactement cette structure)
private static transient Logger __logger
= LoggerFactory.getLogger( Foo.class );
public boolean doSomething(String value, int count)
{
boolean returnedvalue;
try
{
__logger.debug( "{" );
__logger.trace( " value = {}", value );
__logger.trace( " count = {}", count );
System.out.println( "done" );
returnedvalue = true;
}
catch (Throwable throwable )
{
__logger.trace( " throws {}", throwable );
throw throwable;
}
__logger.trace( " return {}", returnedvalue );
__logger.debug( "}" );
return returnedvalue;
}
La différence est subtile, mais dans ce second cas la source du log est le greffon de l'aspect, pas le code instrumenté, et au passage on paye même en mode TRACE (généralement désactivé) le prix d'une copie d'arguments et de plusieurs appels de méthodes.
public boolean doSomething(String value, int count)
{
boolean returnedvalue;
try
{
String arg1 = value.clone();
int arg2 = count.clone();
LoggingAspect.aspectOf().before( this, arg1, arg2 );
System.out.println( "done" );
returnedvalue = true;
}
catch (Throwable throwable )
{
LoggingAspect.aspectOf().afterThrowable( this, t );
throw throwable;
}
LoggingAspect.aspectOf().after( this, returnedvalue );
return returnedvalue;
}
<plugin>
<groupid>fr.loof.logeek</groupid>
<artifactid>logeek-maven-plugin</artifactid>
<executions>
<execution>
<goals>
<goal>instrument</goal>
</goals>
<configuration>
<includes>
<include>**/*.class</include>
</includes>
<transformer>fr.loof.logeek.Slf4jLogging</transformer>
</configuration>
</execution>
</executions>
</plugin>
18 septembre 2009
premiers pas avec GWT 2.0
La mise en oeuvre nécessite de récupérer le SDK (prendre par exemple les builds proposés par SFEIR). Configurer ensuite le plugin en affectant le paramètre gwtHome, pour le forcer à utiliser cette version, alors que par défaut il s'adapte à vos dépendances.
14 septembre 2009
Hibernate est un sacré comique
Et là, dès que je charge une instance, j'ai autant de select qui partent en base que j'ai d'éléments dans ma chaîne suivant-précédent...
@OneToOne( fetch = FetchType.LAZY )
private Foo precedent;
@OneToOne( mappedBy = "precedent", fetch = FetchType.LAZY )
private Foo suivant;
@OneToMany( fetch = FetchType.LAZY )
private Set<Foo> suivants = new HashSet<>();
public Foo getSuivant()
{
Iterator<Foo> it = suivants.iterator();
return it.hasNext() ? it.next() : null;
}
public void setSuivant( Foo suivant )
{
for ( Foo item : suivants )
{
item.setPrecedent( null );
}
this.suivants.clear();
suivant.setPrecedent( this );
suivants.add( suivant );
}
Ca sent la grosse magouille, mais au moins ça ne casse pas la logique des get/set. Comme quoi la persistance "transparente" c'est pas encore tout à fait ça ;)
BreizhJUG - saison 2
04 septembre 2009
Bye bye XP, welcome 7
31 août 2009
les cochons dans l' (open-)space
Je découvre avec joie les plaisirs de l'openspace. Je m'en sort bien vu que le maxi-bureau est immense et réserve de grands espaces à chacun. Cependant il reste un bruit ambiant assez bas mais malgré tout omniprésent. J'ai horreur de bosser "dans une bulle" avec un casque sur les oreilles donc il va falloir que je m'y fasse, mais la concentration en souffre...11 août 2009
la bonne gestion des versions
Java Cloud computing - an 1
10 août 2009
m2eclipse - pas encore près pour la prod !
03 août 2009
Rumeur ...
J'apprends avec surprise par Messenger interposé que ma collègue du bureau d'à côté est enceinte de 8 mois. Il faut dire qu'avec 40KTM elle cache bien son jeu.
31 juillet 2009
35 ans, presque mort...
30 juillet 2009
maven, eclipse et aspectJ : si si, ça marche
- option 1 :
- option 2 :
- option 3 :
<profiles>
<profile>
<id>m2eclipse</id>
<activation>
<property>
<name>osgi.bundles.defaultStartLevel</name>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</profile>
Avec cette conf magique, AJDT est correctement configuré par m2eclipse et fait parfaitement son boulot (le hotswap permet ainsi d'éditer le code et de constater le résultat à chaud dans Tomcat), ET les build maven sous eclipse sont raisonablement rapides, le plugin aspectj ne faisant plus rien.