tag:blogger.com,1999:blog-277737362024-03-14T16:16:19.251+01:00Too Loud a SolitudeAn excellent novel from Bohumil HrabalEmmanuel Lécharnyhttp://www.blogger.com/profile/00606458715529159834noreply@blogger.comBlogger76125tag:blogger.com,1999:blog-27773736.post-90636097566478949252015-06-19T13:57:00.000+02:002015-06-19T13:57:36.634+02:00L'université Française, dans toute sa splendeur...<pre wrap=""><b class="moz-txt-star"><span class="moz-txt-tag"> </span></b></pre>
<pre wrap=""><span style="font-size: large;"><b class="moz-txt-star"><span class="moz-txt-tag">Ok, c'est pour bosser 6 h par semaine, donc au final, c'est bien payé ! (mieux vaut en rire...)</span></b></span></pre>
<pre wrap=""><span style="font-size: large;"><b class="moz-txt-star"><span class="moz-txt-tag">Le nouveau ministre de l'enseignement supérieur, Thierry Mendions, a du pain sur la planche. Heureusement qu'on a un gouvernement de gauche !</span></b></span></pre>
<pre wrap=""><b class="moz-txt-star"><span class="moz-txt-tag"><span style="font-size: large;">Allez, voici le mail : </span></span></b></pre>
<pre wrap=""><b class="moz-txt-star"><span class="moz-txt-tag"> </span></b></pre>
<pre wrap=""><b class="moz-txt-star"><span class="moz-txt-tag"> </span></b></pre>
<pre wrap=""><b class="moz-txt-star"><span class="moz-txt-tag">----------------------------------------------------------------------------- </span></b></pre>
<pre wrap=""><b class="moz-txt-star"><span class="moz-txt-tag">*</span>OFFRE D'EMPLOI POUR UN POSTE D'ENSEIGNANT-E CONTRACTUEL**-LE<span class="moz-txt-tag">*</span></b>
<b class="moz-txt-star"><span class="moz-txt-tag">*</span>Intitulé :** Anglais 11ème section<span class="moz-txt-tag">*</span></b>
Nombre d’heures : 192 heures équivalent TD (réparties sur toute l’année
universitaire)
Rémunération mensuelle brute sur 12 mois: 1152 euros (sans doctorat) ou
1504 euros (avec doctorat)
Affectation : Université de Cergy-Pontoise, UFR LEI, département d'Anglais
LLCE - RER Cergy-Préfecture
Le département d'anglais de l'Université de Cergy-Pontoise recrute pour
l'année 2015-2016 un-e enseignant-e contractuel-le (contrat mi-temps sur
support vacant du 2nd degré). Les candidats doivent être titulaires (au
minimum) d'un diplôme d'études anglophones de niveau Bac + 5. Les candidats
certifiés ou agrégés devront demander à être détachés de l'enseignement
secondaire.
Les besoins d'enseignement sont principalement dans les spécialités
suivantes:
- civilisation américaine
- traduction (thème et version)
- histoire de l'art
- préparation à l'insertion professionnelle
Les pièces demandées sont les suivantes:
• une lettre de motivation
• un curriculum vitae
• une copie des diplômes universitaires
• la copie d'une pièce d'identité
Les dossiers sont à adresser par email exclusivement aux adresses
suivantes: <a class="moz-txt-link-abbreviated" href="mailto:Henry.Wyld@u-cergy.fr">xxxxxx@u-cergy.fr</a>, yyyyyy<a class="moz-txt-link-abbreviated" href="mailto:Guillaume.Coatalen@u-cergy.fr">@u-cergy.fr</a> et
<a class="moz-txt-link-abbreviated" href="mailto:edechamp@u-cergy.fr">zzzzzz@u-cergy.fr</a>
<b class="moz-txt-star"><span class="moz-txt-tag">-----------------------------------------------------------------------------</span></b>
<span style="font-size: large;">Pathétique...</span></pre>
Emmanuel Lécharnyhttp://www.blogger.com/profile/00606458715529159834noreply@blogger.com0tag:blogger.com,1999:blog-27773736.post-24143244482956467782015-04-03T16:18:00.001+02:002015-04-10T18:53:11.748+02:00Projet de loi relatif au Renseignement<br />
<span style="font-family: Courier New, Courier, monospace;">Dans 12 jours, le gouvernement Français, profitant de l'émotion suscité par l'assasinat lâche de journalistes, va mettre aux votes une loi scélérate.</span><br />
<br />
<b><span style="font-family: Courier New, Courier, monospace;">Il est de notre devoir de faire savoir à nos députés que nous n'acceptons pas de devenir citoyens d'un état (potentiellement) totalitaire. </span></b><br />
<br />
<span style="font-family: Courier New, Courier, monospace;">Le texte de loi <b><a href="http://www.legifrance.gouv.fr/Droit-francais/Actualite/Projet-de-loi-relatif-au-renseignement-PRMX1504410L-19-03-2015-pjl">est disponible ici</a></b>. </span><br />
<br />
<span style="font-family: Courier New, Courier, monospace;">Vous pouvez consulter <b><a href="http://sous-surveillance.fr/#/">ce site</a></b> pour vous informer de la façon de contacter votre député.</span><br />
<br />
<span style="font-family: Courier New, Courier, monospace;">Voici le mail que j'ai envoyé à Mr Goasguen, député du 14ème arrondissement :</span><br />
<br />
<br />
<i><span style="font-family: "Trebuchet MS",sans-serif;">Monsieur le Député,</span></i>
<i><span style="font-family: "Trebuchet MS",sans-serif;"><br />
vous avez l'honneur de représenter le 14ème arrondissement de la ville
de Paris, dans lequel je suis domicilié. A ce titre, vous me représentez
également.</span></i>
<i><span style="font-family: "Trebuchet MS",sans-serif;"></span></i><br />
<i><span style="font-family: "Trebuchet MS",sans-serif;"></span></i><br />
<i><span style="font-family: "Trebuchet MS",sans-serif;"><br />
Je me permets donc de vous interpeller sur le projet de loi qui est
amené à être voté dans deux semaines. Celui-ci comporte des risques
inacceptables sur les libertés fondamentales, tels que spécifiés dans
l'article 811-1.</span></i>
<br />
<i><span style="font-family: "Trebuchet MS",sans-serif;"><br />
L'article 821-1 précise que l'autorisation de mise en oeuvre du recueillement d'informations relève de sept personnes :<br />
- le premier ministre<br />
- et 6 personnes qui ont délégation du premier ministre</span></i>
<i><span style="font-family: "Trebuchet MS",sans-serif;"></span></i><br />
<i><span style="font-family: "Trebuchet MS",sans-serif;"><br />
L'exercice de cette commission de contrôle, dont la composition est
hautement politique, violerait le principe de séparation des pouvoirs,
principe fondateur de notre république, et préambule à notre
constitution. Il n'est pas envisageable que cette entité distincte du
pouvoir judiciaire puisse remplir un rôle qui est du ressort du judiciaire.</span></i>
<i><span style="font-family: "Trebuchet MS",sans-serif;"></span></i><br />
<i><span style="font-family: "Trebuchet MS",sans-serif;"><br />
Voter cette loi serait donner raison à toute forme de terrorisme,
rangeant la France dans le groupe des nations disposant d'outils de
surveillance dignes de systèmes totalitaires. Non, l'assassinat ignoble
de journalistes ne saurait justifier la mise en place d'un tel système,
que ces journalistes auraient bien évidement rejeté avec la plus grande fermeté.</span></i>
<i><span style="font-family: "Trebuchet MS",sans-serif;"></span></i><br />
<i><span style="font-family: "Trebuchet MS",sans-serif;"><br />
Je vous demande de faire ce qui est en votre pouvoir pour faire rejeter
cette loi liberticide. Il ne s'agit pas ici d'une position politique,
mais d'une position de principe. Votre devoir est de défendre les
principes fondamentaux qui font la grandeur de notre république, au delà de tout attachement partisan.</span></i>
<i><span style="font-family: "Trebuchet MS",sans-serif;"></span></i><br />
<i><span style="font-family: "Trebuchet MS",sans-serif;"><br />
Je vous remercie par avance,</span></i>
<i><span style="font-family: "Trebuchet MS",sans-serif;"></span></i><br />
<i><span style="font-family: "Trebuchet MS",sans-serif;"><br />
Emmanuel Lécharny<br />
7 Square de Chatillon,<br />
Paris 14</span></i>Emmanuel Lécharnyhttp://www.blogger.com/profile/00606458715529159834noreply@blogger.com0tag:blogger.com,1999:blog-27773736.post-70767124662389218832014-10-26T20:53:00.000+01:002014-10-27T07:34:24.572+01:00I have a dream...Ce dimanche, il fait un peu gris, la choucroute mijote dans le fait-tout... Il me reste une petite demi-heure avant de passer à table, la famille est en route, j'ai le temps de me laisser aller à une petite rêverie informatique.<br />
<br />
Mon camarade <b>Antonio Goncalves</b>, un des organisateurs de <a href="http://www.devoxx.fr/">Devoxx.fr </a>(pub plug) se plaint de l'incapacité de l'administration à mettre en place une informatique qui fonctionne.<br />
<br />
Qu'en dire ? Qu'un programme comme <a href="http://fr.wikipedia.org/wiki/Logiciel_unique_%C3%A0_vocation_interarm%C3%A9es_de_la_solde">Louvois</a>, lancé en 1996, abandonné en 2013 après avoir <strike>foutu à la poubelle</strike> dépensé 470 M€ puisse avoir été un tel echec est la preuve que l'état est incapable de gérer son informatique. Et des faillites équivalentes, il y en a : project <b>Chorus</b> (500M€), <b>Dossier Personnel Médicalisé</b> (500M€ pour 400 000 patients...), l'<b>Opérateur National de Paye</b> (750M€).<br />
<br />
J'ai également en tête l'informatisation de la <b>DGI</b>, où l'état avait missionné deux énormes sociétés française (sans doute pour les sauver en ces années de bulle internet...), qui facturaient entre 1000 et 2000€ la journée, et qui avaient bien sûr des sous-traîtants, qui eux même prenaient des sous-traîtants... Ceux qui ont effectués leur déclaration par internet la première année se rappellent bien de la totale incapacité du système à ternir la charge à l'époque bien faible. Le project <b>COPERNIC</b> a coûté <span style="font-size: large;"><span style="color: red;">1.5G€</span></span> (cf <a href="http://www.senat.fr/rap/r09-070/r09-070_mono.html">le rapport du sénat</a>).<br />
<br />
Bref, on se dit qu'il y a des marges de progression. Mais dans quel cadre technique, juridique et surtout organisationel ?<br />
<br />
C'est là que je me mets à rêver. Je lisais il y a quelques mois <a href="http://rust-class.org/static/classes/class12/healthcaregov.html">cet article édifiant<span id="goog_1134639893"></span><span id="goog_1134639894"></span></a>, où était décrit l'opération commando qui 'sauva' <b>Obamacare</b>. Je me dis qu'il devrait être possible de faire la même chose en France.<br />
<br />
Nous avons un vivier d'Open Sourceurs, assez large en plus. Dans des domaines variés, qui couvriraient largement le spectre de l'informatique mise en oeuvre par l'état. Ce sont nos impôts qui financent ces échecs, et ce sont également nos impôts qui (sur)payent les systèmes qui finissent par fonctionner (mal). Ne serait-il pas possible de réunir assez de compétences pour remettre en état un de ces systèmes, à coût nul pour l'état, pour un résultat fonctionnel, mais également moins onéreux en fonctionnement ?<br />
<br />
L'idée - le rêve - serait de mettre à disposition d'un des projets en souffrance une équipe pluridisciplinaire compétente, disponible, et cela <b>gratuitement</b>. <br />
<br />
La gestion de projet serait totalement collaborative, sans la contrainte temporelle et budgétaire si mortifère dans un cadre contractuel classique : à savoir que l'on se focaliserait sur les fonctionalités, les performances, l'évolutivité et les tests, au lieu de se limiter à livrer dans les temps, à l'aide de stagiaires si besoin (vécu...).<br />
<br />
On s'épargnerait la recherche du profit - ou plus souvent la limitation des pertes dans l'espoir de se refaire grâce à de substantiels avenants que le client se voit bien obligé de signer... -, au profit de la satisfaction du 'client' - c'est à dire, le citoyen -.<br />
<br />
Il serait possible de dire non, mais également de remettre en cause les choix initiaux, puisque l'objectif est d'aboutir à un système fonctionnel, sans craindre un clash avec le client. La relation avec ce dernier serait de même bien plus confortable, car on éviterait d'accumuler les "preuves" de malfaçons et de non respect des délais et des fonctionalités, puisqu'aucune pénalité de retard ne serait en jeu.<br />
<br />
Bien sûr, on ne peut imaginer disposer de quelque dizaines
d'informaticiens compétents pendant une période de six mois ou un an
sans les payer, alors - second rêve - j'imagine un système de
sponsoring, ou de crowdfunding permettant de financer cet effort. <br />
<br />
Et pourquoi pas ?<br />
<br />
A condition que les lobbies, puissant, des SSII, laisse faire, bien sûr : la fonction publique est une source majeure de revenu récurrents pour ces sociétés. Et que le droit administratif ne vienne pas se mettre au travers d'une telle démarche : comment éviter de passer au travers d'un appel d'offre public? <br />
<br />
Dernier point : pourquoi ne pas profiter de ce cadre pour former ? Au lieu d'envoyer des stagiaires achever des projets comme on achève les chevaux, on les enverrait se faire former dans un cadre plus souple, et surtout par des personnes compétentes, et disponibles. Ce serait aussi l'intérêt des SSII de 'sponsoriser' un projet donné, par délégation de personnel : après tout, il n'est pas si fréquent de pouvoir se confronter à des problématiques complexes dans un cadre réel, sans les contraintes habituelles. Un lieu magique où la recherche de solution serait possible, un <a href="http://en.wikipedia.org/wiki/Manhattan_Project">projet Manhattan </a>à la Française en quelque sorte...<br />
<br />
Et pour 50 personnes, payées - soyons généreux - 100 000 € par an, plus 2 M€ de frais de fonctionnement (ordinateurs, locaux, télécom, frais divers), soit 7M€ par an, allez, 10M€ en intégrant les charges sociales, je serai surpris qu'on n'arrive pas à produire quelque chose qui fonctionne, à comparer aux coûts délirants des projets nommés ci-avant...<br />
<br />
On pourrait même imaginer les faire tourner dans un cloud Français ! (Ok, là, je parle d'un vrai cloud, pas d'une sorte de FranceStein du cloud financé par vos impôt, hein !)<br />
<br />
Ok, je rêve... Mais après tout ?<br />
<br />
Et vous, il vous arrive de rêver aussi ?<br />
<br />
Allez, la choucroute m'attend...Emmanuel Lécharnyhttp://www.blogger.com/profile/00606458715529159834noreply@blogger.com4tag:blogger.com,1999:blog-27773736.post-60190383386500316302014-10-23T17:39:00.001+02:002014-10-23T23:48:31.445+02:00About Perfection and OSSFrom time to time I feel like we all have our own Moby Dick, and when it comes to OSS, it's name is 'perfection'. <br />
<div>
<br /></div>
<div>
Those shiny moments of pure joy, this warm feeling that surround you, when you can say 'mission accomplished' are rare and vanishing periods when you work on a never ending project. Its more or less when you get a big bug fixed, or when you read some enthusiast review on the project you are working on. </div>
<div>
<br /></div>
<div>
Fixing a bug is probably the best way to get this reward, as you <b>know</b> that you have made some progress.</div>
<div>
<br /></div>
<div>
It's forever shadowed by the constant pain of knowing that there are other bugs, and that in order to get a release done, you had to make some choices, leaving problems behind. </div>
<div>
<br /></div>
<div>
Is it a sad story about being a developer? No. It's not sad. It's tough, it's long, it's an endless job. Would I prefer doing something else? Certainly not ! At least, I know what I'm chasing, and even if I rarely foresee this fading perfection, sometime, I can almost touch it. Not something you can experience when you work in a company, as you don't have the opportunity to polish the project as much as you want, due to time constraints.</div>
<div>
<br /></div>
<div>
Last, not least, you are not alone. When you think that you are turning in circles, you know that the community you are part of will help you. Use it : they have the clues you don't have. </div>
<div>
<br /></div>
<div>
An Arabic proverb says "It's not that the way is painful, it's just that the pain is the way". So you better deal with it.</div>
<div>
</div>
Emmanuel Lécharnyhttp://www.blogger.com/profile/00606458715529159834noreply@blogger.com0tag:blogger.com,1999:blog-27773736.post-85017155124556002102014-10-23T16:36:00.000+02:002014-10-23T17:29:50.680+02:00Free ADSL, où comment ne pas avoir d'ADSL pendant plus d'un mois...Ne plus avoir d'électricité pendant 2 jours, sauf en cas de tempête, est juste inconcevable en France. Pour une connexion ADSL, vous pouvez rester coupé pendant plus d'un mois sans que cela ne semble soucier votre provider, en l'occurence <b>Free</b>.<br />
<br />
On ne parle pas d'un village au fond d'une vallée reculée du haut morvan, là. C'est à Puteaux, dans la proche banlieue parisienne.<br />
<br />
Tout commence par une intervention sur une ligne par l'opérateur historique, le 24 septembre 2014. Résultat, une ligne ADSL dont le débit chute brutalement à 500Kbits (54db) au lieu de 10Mbits (42db). Typique d'une ligne abimée, ou d'un signal affaibli par une interaction magnétique ou un cable de mauvaise qualité.<br />
<br />
Et là, la boucle infernale commence : ouverture de ticket d'incident chez <b>Free</b>, une semaine de délai avant vérification des équipements (et oui, c'est <b>toujours</b> chez vous que le problème se situe, par défaut !), puis suite à la vérification du bon fonctionnement de l'équipement, on bascule chez l'opérateur historique (entendez <b>FT</b>), par le biais de ce qui s'appelle un <a href="http://fr.wikipedia.org/wiki/Guichet_d%27accueil_maintenance_op%C3%A9rateur_tiers"><b>GAMOT</b></a>. C'est encore une semaine d'attente...<br />
<br />
Suite à quoi, généralement, <b>FT</b> ne détecte bien sûr aucun problème, et ferme le <b>GAMOT</b>. Vous venez de perdre 2 semaines...<br />
<br />
Voilà, vous devez réouvrir un ticket chez <b>FREE</b>, qui va cette fois devoir aller plus loin que de constater que votre matériel fonctionne bien et rouvrir un second <b>GAMOT</b>. Puisque qu'aucun des deux opérateurs ne reconnaît un problème chez lui, c'est qu'il doit y avoir un problème entre les deux...<br />
<br />
(Entre temps, votre voisin, qui est abonné chez <b>FT</b>, lui, a été rétabli dans les 2 jours...)<br />
<br />
Que se passe-t-il lors de cette "procédure d'expertise" ? Et bien les deux sociétés font intervenir deux techniciens pour tester la connection de bout en bout. Généralement, ils découvrent à cette occasion un mauvais branchement, et le rétablissement a lieu - si tout va bien ! -.<br />
<br />
En pratique, il faut compter un bon mois, parfois moins, parfois plus.<br />
<br />
Et ce n'est pas normal.<br />
<br />
Dans le meilleur des cas, on parlera d'incompétence, mais reste à savoir chez qui. En pratique, la question de la procédure mise en place chez les deux sociétés (et on peut imaginer qu'il en est de même avec d'autres opérateurs tiers) a pour résultat une distortion claire des règles du jeu : si vous êtes chez l'opérateur historique de bout en bout, vous êtes rétabli en 2 jours. Dans le cas contraire, chacun se renvoit la balle pendant un bon mois...<br />
<br />
<b>Free </b>n'ouvre un <b>GAMOT</b> qu'après avoir vérifié l'équipement, très certainement à cause des coûts facturés par l'opérateur pour le traitement du <b>GAMOT</b>, dans les cas où le problème viendrait du matériel ou d'un problème de connection au domicile. Pourquoi pas, sauf qu'il faut compter une bonne semaine pour avoir un rendez-vous avec un technicien...<br />
L'opérateur historique va de son côté faire le minimum, à savoir tester la synchro, puisque généralement cela suffit pour détecter un pb de connection, bien évidemment sans régler votre problème de débit !<br />
<br />
La question qui se pose à ce point, c'est de savoir s'il n'y a pas dans ce protocole d'intervention une volonté active ou passive de favoriser les clients de l'operateur historique ? On ne parle pas évidemment de l'incapacité de l'opérateur alternatif à fournir un service après-vente digne de se nom, faute de disposer du personnel suffisant...<br />
<br />
A ce point, après un mois sans service, il convient de se poser la question du recours en justice, éventuellement dans le cadre d'une <b>"action de groupe"</b> - puisque c'est aujourd'hui chose possible en France - pour sortir de ces parties de ping-pong infernales ! Mais sauf à condamner lourdement les opérateurs, pour les forcer à réduire ces délais inaceptable, je ne vois pas comment les choses pourraient évoluer.<br />
<br />
Mais ne rêvez pas, même dans cette hypothèse, la procédure prendra des années... Il faudra d'abord s'adresser à une société de défense des consommateurs agréée (<a href="http://www.economie.gouv.fr/dgccrf/Liste-et-coordonnees-des-associations-nationales">il y en a 17</a>), et espérer qu'elles acceptent de lancer la procédure. Cela ne préjuge en rien des délais d'obtention d'un jugement - sans compter qu'il peut être rendu en faveur des opérateurs -, sachant que ces derniers peuvent évidemment faire appel, se pourvoir en cassation...<br />
<br />
Cela dit, il y a un moment où l'inaction vaut acceptation...Emmanuel Lécharnyhttp://www.blogger.com/profile/00606458715529159834noreply@blogger.com0tag:blogger.com,1999:blog-27773736.post-51989131250107100252014-04-13T04:08:00.000+02:002014-04-13T04:08:05.010+02:00Building castles in the sand...Now that the fury about <b>OpenSSL</b> is gone, and that we realize first it was not that critical (only 7% of the web sites seemed to be at risk, not two third), and second that it could have been used for two years, but we don't know if it has been (we are waiting for a new <b>Snowden</b>), we can think about what the lessons we can get from this tragic episod.<br />
<br />
There are a few, IMHO.<br />
<br />
1) <b>OpenSSL</b> is a group of <a href="http://www.openssl.org/about/">17 persons</a>, all volunteers. I'm not sure that all of them are active. This is a small bunch of people, for a software that is used at wild. Do people realize that most of the components they are using daily, that they *trust*, are written by such a few developpers?<br />
<br />
What if the group decides it's enough ? That family is more important than spending hours on debugging some code, on testing it, and on documenting it ? All of that for the simple feeling of writing good, useful code ?<br />
<br />
2) It took 2 years, 2 freaking years, before a company called <b>Google</b> was able to find the issue. What does that mean ? Simply that companies like <b>Yahoo!</b>, which were one of the big IT companies <a href="http://www.ibtimes.co.uk/yahoo-among-millions-websites-vulnerable-heartbleed-openssl-security-bug-1443918">being hit hard</a> by the HeartBleed bug, just didn't do their due diligence. <br />
<br />
It's insane to think that those companies are spending BILLIONS of $ buying crappy other companies, trying to improve their load of turd^H^H^H social tools, when they are too cheap to spend a few hundred of thousands dollars to get some expert looking at the code they are using.<br />
<br />
Shame on them. <br />
<br />
3) Low level components are just left alone. Those days, it's all about the big frameworks, nobody cares about the bricks that are at the very base of our IT.<br />
<br />
And that scares the shit out of me, as it should scare any one of you.<br />
<br />
We are all expecting that the bricks we are using every day are safe. We are ignoring the risks we are taking, just because we can't check everything. But again, when you look at the commits, you realize you are depending on very few people... <br />
<br />
<br />
<b>Bottom line</b> : we are building castles in the sand. And I don't even know how we could do any better... Emmanuel Lécharnyhttp://www.blogger.com/profile/00606458715529159834noreply@blogger.com0tag:blogger.com,1999:blog-27773736.post-16387189487364309812014-03-26T15:38:00.002+01:002014-03-26T15:38:33.050+01:00Les développeurs, un atout pour la France ?Il y a quinze jour, quand j'ai appris que <b>Tariq Krim</b> avait pondu une liste des cents meilleurs développeurs français, je me suis dit - et j'ai dit - que c'était totalement crétin.<br />
<br />
Je le pense toujours. Tout d'abord parce qu'il y a officiellement 600 000 informaticiens en France (plus ou moins) et que je ne vois pas comment <b>Tariq</b> a pû tous les rencontrer pour constituer sa liste...<br />
<br />
Comme le disait <b>Jean-Laurent Morlhon</b> en réponse à un de ses contacts : <i>"Mais qu'est-ce que tu en as à foutre de pas faire partie de cette liste? Tu l'a jamais rencontré, ce gars..."</i>, alors, il y a effectivement de fortes chances qu'il s'agisse d'une liste des 100 meilleurs développeurs que <b>Tariq</b> a rencontrés...<br />
<br />
Mais, bon, ne nous arrêtons pas à cette aspect bassement marketing, après tout, ça donne de la visibilité. "Dites-en du bien, dites-en du mal, mais surtout parlez-en autour de vous" !<br />
<br />
<b>Tariq</b> a également pondu un rapport à destination de <b>Mme Pellerin</b> (dont on ne sait pas aujourd'hui si elle sera encore ministre dans une semaine, mais c'est une autre histoire ;-). Le contenu de ce rapport est intéressant, et mérite qu'on s'y attarde.<br />
<br />
Si on met de côté quelques erreurs factuelles (non, <b>Be Inc</b> n'a pas inventé le <i>Journaled File System</i>, <b>IBM</b> a sorti <b>JFS</b> <i><b>avant</b></i> que Be Inc soit créé.), et ce côté <i>"petit village gaulois qui résiste"</i> qui devient agaçant quand ce n'est pas en BD, certains constats et propositions sont pertinents.<br />
<br />
Mais revenons deux minutes sur le <i>"village gaulois"</i>. Même <b>Asterix</b> essaye de comprendre le monde dans lequel il vit, au lieu de se focaliser sur ce qui se produit <i>"au village"</i>. Il faudra un jour qu'on m'explique en quoi un cerveau français est supérieur - ou inférieur - à un cerveau guatemaltèque ou coréen... Surtout que le petit français qui a bossé sur le projet X n'a très certainement pas travaillé tout seul ou qu'avec des français ! Et qu'il y a certainement autant de petits finlandais, allemands, espagnols, etc qui participent aux projets que tout le monde utilise... l'intelligence est distribuée, et peut même agir à distance (même quand des crétins^H^H^Hpremiers ministres décident de couper <b>Twitter</b> ou internet!).<br />
<br />
Cela étant dit...<br />
<br />
<ul>
<li>Un immense marché linguistique : c'et absolument clair. 400 millions de clients potentiels, sans <b>Loi Toubon</b>, ça aide...</li>
<li>Sur le rôle des VCs, c'est assez ambigu. Voir une boîte qui développe un jeu à la con pour mobile toucher 10M$ de capital risque, ça m'en touche une sans en bouger l'autre. Est-ce que ça favorise l'innovation ? Pas sûr... Quelle est la valeur ajoutée de ce type d'investissement ?</li>
<li>Le CIR : franchement, c'est la plus grosse arnaque^H^H^Hmartingale de ces 20 dernières années : http://fr.wikipedia.org/wiki/Cr%C3%A9dit_d%27imp%C3%B4t_recherche#Critiques. En dehors d'être une ENORME usine à gaz qui enrichit les banques et leurs conseillers (qui n'hésitent pas à vous proposer une aide pour remplir les dossiers, moyennant jusqu'à 25% du montant de cette aide !!!), c'est également une aide dont bénéficient principalement les banques et les assurances et les très grosses entreprises...</li>
<li>Les réussites françaises : ok, il y en a peu (<b>Catia</b> ? what else ?). En même temps, combien de leaders mondiaux allemand ou anglais dans le logiciel, à part <b>SAP</b> ?</li>
<li>Les opportunités d'affaire : là, je suis 100% en accord avec ce qu'écrit <b>Tariq</b>. Les grosses entreprises françaises sont viscéralement attachées à la notion de ROI et de centre de coûts. Sauf à être le fils de X ou le neveu de Y, qui a fait polytechnique et qui est en poste assez haut dans une grosse entreprise, vous ne trouverez pas d'entreprise pour prendre le pari de vous verser 500K€ pour utiliser votre proto, simplement sur votre gueule et 5 slides. Ca n'existe pas. La prise de risque est simplement une notion étrangère pour les grosses entreprises en France.</li>
<li>La commande publique... Quiconque a rempli les nombreux documents (DC1, DC2, etc) sait que c'est un enfer administratif. Si vous êtes une PME, laissez tomber. De toutes façon, vous serez payé avec 6 mois/un an de retard, si vous êtes sélectionné, bien sûr (et qu'on ne vienne pas me dire que la sélection n'est pas biaisée...)</li>
<li>La politique des grands groupes vis à vis de l'open source. Alors c'est simple : pour eux, c'est GRA-TUIT. S'ils ont besoin d'une assistance sur un composant et qu'un français est un des développeurs de la solution, et bien si une SSII peut proposer un développeur "spécialiste", pas de soucis : la SSII sera choisie, parce que le service achat a enregistré la grosse SSII ! Parceque ça se passe comme ça : on demande au service achat à qui on peut s'addresser pour du support sur un composant X ou Y, et on a une liste de contacts (liste pré-établie après négociation annuelle). </li>
<li>Les développeurs non reconnus ? Oui. Si a 30 ans, tu n'es pas chef de projet, ta <b>Rolex</b>, tu peux aller la chercher chez <b>Swatch</b>...</li>
<li>Concernant le <i>"grand tournant"</i> technologique à prendre, ou ce qui est appelé <i>"feuille de route technologique"</i>, désolé <b>Tariq</b>, mais les technos changent toutes les 3 ans, donc il faut pas venir nous raconter qu'il faut lancer un plan quinquénal sur <b>Node.js</b> ! Par contre, qu'il y ait des centres d'expérimentation avec retour d'expérience au sain de l'administration française, oui, ce serait une super idée...</li>
<li>Un Github français ? Mais quelle drôle d'idée... Cela dit, ce n'est pas forcément idiot, c'est juste totalement impossible d'imaginer une structure étatique à même de gérer cette infrastructure de façon assez souple et intelligente. Et si on confiait le boulôt à <b>Cloudwatt</b> ??? Je plaisaaaante...</li>
<li>Je suis 100% d'accord avec l'idée de promouvoir les développeurs dans l'administration. je suis intimement convaincu qu'il y a des milliers de développeurs frustrés dans les services administratifs qui feraient mieux que les prestataires payés à prix d'or. Mais il faudrait aussi laisser percoler vers le haut les meilleurs d'entre eux, sachant qu'ils ne sortent pas tous de X ou de l'ENA ! Une gageure...</li>
<li>Concernant les <i>"startup disruptives"</i>, ça relève du secteur privé. Que les investisseurs français ne souhaitent pas risquer l'argent qu'ils ont planqué à Jersey, ce n'est pas le problème de l'état. De toutes façon, ce ne sont pas les développeurs qui vont toucher le pactole au final...</li>
<li>La formation... Si on évitait de saboter l'université à coup de coupes budgétaires, déjà... Un maître de conférence de 40 ans va gagner grosso-modo ce que gagne un ingénieur junior avec 2 ans d'expérience. Et il faut s'étonner de la médiocrité de l'enseignement ? (En fait, ce qui est miraculeux, c'est que le niveau de l'enseignement ne soit pas si faible : il faut tenir compte de la passion et de l'abnégation de tout ces enseignants chercheurs, qui se font <b>CHIER</b> toute l'année durant à se faire rembourser avec 9 mois de retard leur chambre d'hôtel à 45€ pour la conférence qu'ils ont donnée l'année dernière, avant que les budgets soient coupés...)</li>
<li>Visa de travail : why not... C'est vrai que c'est l'enfer d'employer un travailleur qui ne vient pas de la CEE !</li>
</ul>
Voilà, il y a du boulot mais je ne sais pas pourquoi, j'ai comme m'impression qu'en terme de timing, ce rapport arrive au plus mauvais moment.<br />
<br />
Je le trouve tout de même globalement intéressant. Emmanuel Lécharnyhttp://www.blogger.com/profile/00606458715529159834noreply@blogger.com1tag:blogger.com,1999:blog-27773736.post-77121884254505784682014-03-12T11:52:00.003+01:002014-03-12T11:52:45.053+01:00Courteline, 2014...Cela fait bientôt dix ans que je paye mes impôts sur internet. A part les premières années, où c'était compliqué - surcharge du serveur, mise en place de certificat, etc -, tout fonctionne.<br />
<br />
Le gouvernement a lancé ce qu'il appelle un "<a href="http://www.modernisation.gouv.fr/"><b>choc de simplification</b></a>". <br />
<br />
On en voit les conséquences au fur et à mesure. Par exemple, le recensement peut se faire sur Internet.<br />
<br />
Mais c'est lent. Très lent...<br />
<br />
Typiquement, si vous organisez une conférence en France, et que vous voulez faire venir des intervenants de pays "exotiques" - l'Inde par exemple..., il vous faudra passer par toute une série de mesures vexatoires, mais surtout inutiles, pour bien vous faire sentir que quand même, il y a un énorme risque que l'intervenant demande l'asile politique ou simplement décide de rester en France, ce pays merveilleux où les écoutes téléphoniques sont légales (mais c'est une autre histoire).<br />
<br />
Typiquement, vous devez produire la preuve que :<br />
<ul>
<li>vous avez de quoi héberger la personne chez vous si vous vous proposez de l'accueillir</li>
<li>vous gagnez assez d'argent pour assurer sa présence (comptez 50€ par jour, amenez votre feuille d'imposition)</li>
<li>vous habitez bien là où vous prétendez habiter (prévoir au moins 2 justificatifs de domicile)</li>
</ul>
Par ailleurs, il vous faudra acquitter la modique somme de 30€ pour ces démarches terriblement utiles, et bien sûr, sous la forme d'un timbre fiscal. Oui, un <b>TIMBRE</b> en papier...<br />
<br />
Du côté de l'intervenant, c'est encore pire :<br />
<ul>
<li>demande de visa au moins 1 mois à l'avance</li>
<li>visite au consulat le plus proche (compter 600km en moyenne en Inde, il n'y a que 3 consulats français en Inde)</li>
</ul>
Bref...<br />
<br />
Ce matin, je décide de faire établir une procuration pour les élections municipales qui arrivent à grand pas. Je n'ai jamais raté une élection, mais là, je serai aux Etats-Unis. Qu'à cela ne tienne...<br />
<br />
Donc, hop, <a href="http://vosdroits.service-public.fr/particuliers/F1604.xhtml">choc de simplification</a> en action, suite à une campagne de publicité sur toutes les radios publiques (<i>"Oui, vous pouvez vous simplifier la vie en remplissant votre procuration sur internet"</i>. Mon cul !)<br />
<br />
Déjà, impossible de le faire en ligne. Il faut se rendre au commissariat de police (ils n'ont que ça à foutre, j'imagine !) ou au tribunal d'instance. En même temps, il y a 2.5 millions fonctionnaires d'état, il faut bien les occuper. Ok, pourquoi pas...<br />
<br />
Mais arrivé là-bas avec mon <a href="https://www.formulaires.modernisation.gouv.fr/gf/cerfa_14952.do">formulaire</a> rempli, on me dit qu'il faut remplir à la main la fiche cartonnée qui n'est que l'exacte reproduction de ce que j'ai apporté.<br />
<br />
La raison ? Aucune. "<b>Une circulaire nous interdit d'accepter les formulaires CERFA imprimés mais remplis à la main...</b>".<br />
<br />
Ben voyons...<br />
<br />
Et me voilà en train de remplir <b>A LA MAIN</b> le formulaire cartonné...<br />
<br />
2014... Relire <b>Courteline</b>...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKFCBCw66vZMho1WxRDn4GI5HQWrspWi7uYP_AWqLUSw2egHGAjcaT098DAkPpAm5C7Yqy2pOJu4C3wDuC0Us4XhncHxGskMn_rjXkCHaT7CIz5fImXj42SNhVtyD5TRiuvBhrzQ/s1600/facepalm_implied.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKFCBCw66vZMho1WxRDn4GI5HQWrspWi7uYP_AWqLUSw2egHGAjcaT098DAkPpAm5C7Yqy2pOJu4C3wDuC0Us4XhncHxGskMn_rjXkCHaT7CIz5fImXj42SNhVtyD5TRiuvBhrzQ/s1600/facepalm_implied.jpg" height="248" width="320" /></a></div>
<br />Emmanuel Lécharnyhttp://www.blogger.com/profile/00606458715529159834noreply@blogger.com1tag:blogger.com,1999:blog-27773736.post-10905167222026684642013-07-08T19:20:00.001+02:002013-07-08T19:20:11.584+02:00LDAPCon 2013, November 18-19 in Paris, FranceThe <a href="http://ldapcon.org/"><b>fourth International Conference on LDAP (LDAPCon)</b></a> will take place in November 18-19 in Paris, France.<br />
<br />
<center>
<a href="http://ldapcon.org/"><img alt="" class="alignnone size-full wp-image-111" height="99" src="http://www.iktek.com/blog/wp-content/uploads/2013/07/ldapcon_2013_logo_line_date.png" title="LDAPCon 2013" width="500" /></a></center>
<br />
<br />
The International Conference on LDAP is a technical forum for IT professionals interested in LDAP and related topics like directory servers, directory management applications, directory integration, identity and access management, and meta directories.
<br />
<br />
It focuses on implementation and integration of LDAP servers and LDAP-enabled client applications. The event will bring together vendors, developers, active and prospective LDAP practitioners to share their experiences about deployment strategies, service operations, interoperability, discuss LDAP usage in new projects and learn about upcoming trends and developments.
<br />
<br />
A <a href="http://ldapcon.org/#cfp"><b>Call for Papers</b></a> has been raised. You have up to September 8th 2013 to submit your talk. You can find all details, important dates or topic ideas on the<a href="http://ldapcon.org/#cfp"><b> LDAPCon CFP page</b></a>.Emmanuel Lécharnyhttp://www.blogger.com/profile/00606458715529159834noreply@blogger.com0tag:blogger.com,1999:blog-27773736.post-28189477364840675962012-02-07T23:24:00.002+01:002012-02-07T23:27:47.802+01:00Clueless...Sometime, when moderating some Apache mails, you find jewels like this one :<br /><br /><pre style="font-weight: bold;" wrap=""><br />LinkedIn <br />------------ <br /><br />Apache, <br /><br />I'd like to add you to my professional network on LinkedIn. <br /> <br />- Chris <br /><br />Chris XXX Lead XXXXXX Technical Recruiter at YYYYY <br />San Francisco Bay Area </pre>Emmanuel Lécharnyhttp://www.blogger.com/profile/00606458715529159834noreply@blogger.com0tag:blogger.com,1999:blog-27773736.post-46275458576754837582011-06-21T18:06:00.003+02:002011-06-21T18:12:11.712+02:00Release issue...We are facing this issue for months (years ?), and I still don't understand why...<br /><br />One upon a time, we cut a release on one of my favorite projects (Apache MINA, Apache Directory Server, Apache LDAp API, Apache LDAp Studio), and we regularly get a message like :<br /><br />#mvn release:prepare<br />...<br />[ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.1:prepare (default-cli) on project project: Unable to tag SCM<br />[ERROR] Provider message:<br />[ERROR] The svn tag command failed.<br />[ERROR] Command output:<br />[ERROR] svn: No such revision 1138066<br /><br />which is simply a nonsense. We have a workaround, it's a mater of running :<br />svn up<br />and replay the release command, which will succeed.<br /><br />However, this is just an annoyance that I would like to see removed from our path.<br /><br />Does anyone has a clue about what's going on ? I would be grateful (even if I just have an explanation like "it's a referenced bug in SVN").Emmanuel Lécharnyhttp://www.blogger.com/profile/00606458715529159834noreply@blogger.com6tag:blogger.com,1999:blog-27773736.post-20265340896114259222011-04-09T08:17:00.000+02:002011-04-09T08:18:53.327+02:00LDAPCon 2011 : Call for papers !<h2 class="art-postheader"> LDAPCon 2011 </h2> <h4>The third International Conference on LDAP (LDAPCon) will take place in<br />October 10 – 11 in Heidelberg, Germany.</h4> <p>The International Conference on LDAP is a technical forum for IT professionals interested in LDAP and related topics like directory servers, directory management applications, directory integration, identity and access management, and meta directories.</p><br /> <p>It focuses on implementation and integration of LDAP servers and LDAP-enabled client applications. The event will bring together vendors, developers, active and prospective LDAP practitioners to share their experiences about deployment strategies, service operations, interoperability, discuss LDAP usage in new projects and learn about upcoming trends and developments.</p> <br /><p>The conference language is english.</p><p><br /></p><p>Call for papers : http://www.daasi.de/ldapcon2011/index.php?site=cfp<br /></p>Emmanuel Lécharnyhttp://www.blogger.com/profile/00606458715529159834noreply@blogger.com0tag:blogger.com,1999:blog-27773736.post-60455062089580095602011-01-21T18:16:00.002+01:002011-01-21T18:24:59.254+01:00La SNCF, non, ce n'est pas possible...Pourquoi les voyageurs préfèrent-ils prendre une voiture plutôt que le train ?<br /><br />Dire que la SNCF fait des efforts pour rendre le voyage en train plus facile et moins coûteux, c'est simplement une vue de l'esprit, au mieux.<br /><br />Aujourd'hui, dans le cadre d'un week-end de geeks au mois d'avril, nous nous sommes mis d'accord pour réserver 4 places dans un TGV, 2 mois à l'avance. 3 d'entre nous sont pères de famille nombreuse, donnant le droit à 30% ou 40% de réduction.<br /><br />Prix unitaire du billet Paris/Grenoble ? 22€ à l'aller.<br />Prix pour 4 places ? 140 € ...<br />Prix unitaire pour le même billet mais en indiquant une remise Famille Nombreuse ? 35 € !!!<br /><br />Alors je pose la question : de la gueule de qui se fout-on à la SNCF?<br /><br />C'est bien la peine de passer à Drupal si c'est pour offrir des tarifs aussi totalement débiles !Emmanuel Lécharnyhttp://www.blogger.com/profile/00606458715529159834noreply@blogger.com4tag:blogger.com,1999:blog-27773736.post-71365316417022746032010-12-10T02:11:00.002+01:002010-12-10T03:30:17.987+01:00Oracle, Javacle et l'ASF, ma vision du problème.Donc <span style="font-weight: bold;">The Apache Software Foundation</span> a décidé <a href="https://blogs.apache.org/foundation/entry/the_asf_resigns_from_the">de quitter l'Executive Community du JCP </a>, conformément à sa position clairement <a href="https://blogs.apache.org/foundation/entry/statement_by_the_asf_board1">exprimée en novembre</a>.<br /><br />La raison? Oracle a décidé unilatéralement de ne pas respecter les termes du contrat qui le lie à l'ASF (le fameux <span style="font-weight: bold;">JSPA</span>), et plus spécifiquement le paragraphe 5.C :<br /><br /><span style="font-style: italic;">"Other than as set forth above, the Spec Lead agrees not to impose any contractual condition or</span><span style="font-style: italic;"> covenant that would limit or restrict the right of any licensee to create or distribute such Independent Implementations."</span><br /><br />En clair, ne pas fournir à l'ASF l'accès au TCK sans y ajouter une restriction d'usage (FOU) est une violation de ce contrat.<br /><br />On peut bien évidemnt arguer que OpenJDK couvre le besoin d'un Java libre, puisque GPL et disposant d'un TCK sans FOU.<br />Sauf que si vous forkez OpenJDK, Oracle se réserve le droit de faire un procès pour violation de Patent (bien sûr, Oracle n'est pas assez stupide pour attaquer une fondation comme l'ASF, cela ne lui rapporterai rien, quand il suffit de pratiquer à grande échelle le FUD, en menaçant implictement les utilisateurs de ce fork).<br /><br />Tout cela est bien résumé (en anglais) dans ce post : http://skife.org/java/jcp/2010/12/07/the-tck-trap.html.<br /><br />Alors, <span style="font-weight: bold;">OpenJDK</span>, une issue de secours? Non. Un miroir aux alouettes, un cache-sexe. En tant que tel, OpenJDK est effectivement une solution <span style="font-weight: bold;">temporaire</span> pour ceux qui travaillent sur un Mac, par exemple. Le problème, c'est qu'il n'y a <span style="font-weight: bold;">aucune</span> garantie sur le long terme qu'Oracle et ses affidés ne laissent pas OpenJDK dépérir, au profit d'une version bien évidement plus puissante du langage, mais payante.<br /><br />Procès en sorcellerie ? Certainement pas. Il faut ouvrir les yeux : Oracle n'est pas une entreprise philantropique, elle ne respcte aucune règle, elle les créés ! Pourquoi se priver d'exercer son pouvoir quand il n'y a pas de shérif ?<br /><br />Cela touche du doigt l'origine du problème : la confusion entretenue par ces sociétés sur la signification de l'Open Source. Pour elles, <span style="font-weight: bold;">Open Source = Source - IP</span>. Vous pouvez regarder, utiliser, éventuellement contribuer, mais tous les bénéfices reviennent à la société qui gère le projet.<br /><div style="text-align: center;"><span style="font-size:180%;">C'est la privatisation du profit et la mutualisation du travail. </span><br /></div><br />L'open source, c'est d'abord une question de gouvernance, et c'est ce pour quoi l'ASF se bat. Il n'y a pas de liberté sans une gouvernance partagée. En politique, ça s'appelle la démocratie, en opposition à la dictature, la ploutocratie, l'oligarchie ou tout autre système de captation de pouvoir. Ce n'est pas pour rien que la devise de l'ASF est :<br /><br /><div style="text-align: center;"><span style="font-size:180%;">Community over code</span><br /></div><br />Qu'est-ce que cela signifie pour Java ? Pour l'instant, pas grand chose. Tout un chacun peut l'utiliser, mais cela ne durera pas. Mais il est temps de penser la suite, et cette suite devra être totalement indépendante de sociétés comme Oracle.<br /><br />L'ASF peut-elle être force de proposition ? <span style="font-weight: bold;">Harmony</span> peut-il devenir la base universelle et <span style="font-weight: bold;">réellement open-source</span> que Java aurait dû être? Sans aucun doute. Mais il y a du travail.<br /><br />Alors, laissont agir la communauté :<br /><br /><div style="text-align: right;"><span style="font-size:180%;">3000 committers Apache ne peuvent pas se tromper !</span><br /></div>Emmanuel Lécharnyhttp://www.blogger.com/profile/00606458715529159834noreply@blogger.com0tag:blogger.com,1999:blog-27773736.post-35690848781182731272010-10-31T02:01:00.002+02:002010-10-31T02:14:49.189+01:00Bye bye summer time...So we switched (in Europe) from summer time to winter time. At 3am, it's 2 am again. So what ?<br /><br />Well, I was running some tests on my computer before crashing, and I was quite surprised to get an error in a part I didn't modified today and which was running fine this afternoon. What was wrong ?<br /><br />We use some class to generate <span style="font-weight: bold;">CSN</span> (Change Sequence Number), and obviously we have some tests for this class. One of them failed for one hour...<br /><br />Here is the test :<br /><br /><span style="font-family: courier new;">public class CsnTest</span><br /><span style="font-family: courier new;">{</span><br /><span style="font-family: courier new;"> private SimpleDateFormat sdf = new SimpleDateFormat( "yyyyMMddHHmmss.123456'Z'" );</span><br /><br /><span style="font-family: courier new;"> @Test</span><br /><span style="font-family: courier new;"> public void testCSN()</span><br /><span style="font-family: courier new;"> {</span><br /><span style="font-family: courier new;"> long ts = System.currentTimeMillis();</span><br /><br /><span style="font-family: courier new;"> Csn csn = new Csn( sdf.format( new Date( ts ) ) + "#123456#abc#654321" );</span><br /><br /><span style="font-family: courier new;"> assertEquals( ts/1000, csn.getTimestamp()/1000 ); <<---- This assert fails. </span><br /><br />Why did I get an error ? Because the way we create the CSN is simply wrong : we don't take into account the fact that the computer is not necessarily always using the same time zone, and that some operation assumes that it got a GMT based time, when other uses the Locale. <span style="font-weight: bold;"><br /><br />Be extremely cautious when dealing with dates and time zones : </span><span>you may get a very bad surprise in production, instead of experimenting those errors by chance, just because you are running tests at 2:30 am a Saturday before going to bed !</span>Emmanuel Lécharnyhttp://www.blogger.com/profile/00606458715529159834noreply@blogger.com0tag:blogger.com,1999:blog-27773736.post-85543415841954946922010-09-20T16:03:00.003+02:002010-09-20T16:33:03.708+02:00Maven community is sometime a strange world ...3 years ago, I submitted a patch for the Maven antlr plugin. Something quite simple that took me 1 hour to whip, test and to send as a JIRA [1]<br /><br />It took 6 months for this patch to be applied, something I can understand.<br /><br />However, 3 years after the code has been patched, I can't get the plugin from the Apache repository, where it was before. Why ? Because the project has been moved from Apache to Mojo. The reason ?<br /><br />"A release could be done shortly but I would like to move the maven-antlr-plugin and maven-antlr3-plugin (in sandbox) to Mojoproject. <br /><br />During the last year, I am the main committer on this project. Recently, David Holroyd provided a new plugin that supports Antlr v3, and submitted some patches. Unfornately, he is not an ASF committer. I could take care of David's patches but I think it should be good to give a new life of this project in the Mojo land. It would be more easy to give access to David, so he could maintain it as he wants. " [2]<br /><br />What's wrong in the Maven community if they can't make someone who is obviously proposing patches and is a wanna-be committer if they have to move the project out of Apache to get this guy working on the project ? Voting process is too complex ?<br /><br />Seriously, I don't get it ...<br /><br />PS : of course, I can get the plugin from the Apache repo, but not at the same place. It's now available on [3]. <br /><br /><br />[1] http://jira.codehaus.org/browse/MANTLR-14<br />[2] http://maven.40175.n5.nabble.com/vote-Move-the-maven-antlr-plugin-to-the-mojo-project-td204608.html#a204608<br />[3] http://repo1.maven.org/maven2/org/codehaus/mojo/antlr-maven-plugin/2.1/Emmanuel Lécharnyhttp://www.blogger.com/profile/00606458715529159834noreply@blogger.com0tag:blogger.com,1999:blog-27773736.post-79592197949400263972010-06-22T16:54:00.002+02:002010-06-22T16:58:33.171+02:00Twitter failures...It seems that Twitter has reached is limits a few weeks ago, with daily failures since then.<br /><br />I'm just wondering if Twitter's developpers are french, with a project manager named Domenech, and a top developper named Anelka.<br /><br />Or maybe I'm mixing failures : in any case, if we use the french soccer team as a base to measure other teams failure, then Twitter is just experiencing small bumps on the road atm...Emmanuel Lécharnyhttp://www.blogger.com/profile/00606458715529159834noreply@blogger.com0tag:blogger.com,1999:blog-27773736.post-18902819018490767852010-06-01T13:37:00.003+02:002010-06-01T13:58:32.359+02:00Microsoft is shooting itself in the footSo today I received a phone call from the <b>Microsoft</b> 'client support' (so called) entity.<div><br /></div><div>It's pretty clear that they are more into following a process, even if it's totally stupid, than helping customers. (remind me <b>Dr Strangelove</b>, when the guy can break a CocaCola machine to get the 10 cents he needed to give a phone call that would have saved the world ...).</div><br /><div>Instead of solving my simple issue with a simple solution (namely, providing me the KEY that is associated with the installed product, which is different from the product we bought - a <b>Windows</b> 7 premium. Probably because the DVD was badly stamped before being put into the box), they keep going insisting that we install a new version, losing 2 more hours plus having to reinstall all the side products.</div><div><br /></div><div>Seriously, it's time to think about switching to some more friendly system, people. <b>Ubuntu</b> is quite usable, so is <b>Mac OSX</b> (but you might face the exact same problem). In any case, making 25% margin is just a shame when the <b>UQOS</b> (unquality of service) provided is so high : basically, <b>you are on your own</b>. </div><div><br /></div><div>Coupled to the fact that they have delegated the first level support to external companies in low cost countries (profits, it's all about profits), it makes it pretty obvious that <b>Microsoft</b> is equivalent to what IBM was back in the 1990. </div><div><br /></div><div><br /></div><div>The butterfly is now just an elephant, not a dancing one... Sea elephant on the shore.</div>Emmanuel Lécharnyhttp://www.blogger.com/profile/00606458715529159834noreply@blogger.com0tag:blogger.com,1999:blog-27773736.post-9060377641316184402010-05-31T14:56:00.002+02:002010-05-31T15:14:13.455+02:00Maven release failuresSo today I had to generate the <b>MINA</b> 2.0.0 packages in order to launch a vote. We have a full page on <b>MINA</b> web site explaining how to cut a release : http://mina.apache.org/developer-guide.html#DeveloperGuide-ReleasingaPointRelease%2528CommittersOnly%2529<div><br /></div><div>I must say that Maven Release plugin is either totally dumb, or that what it does is totally counter-intuitive, and broken, IMHO.</div><div><br /></div><div>What is the problem ? The maven release:prepare follows the steps :</div><br />1) Check that there are no uncommitted changes in the sources <span class="Apple-style-span"><b><span class="Apple-style-span" style="color:#006600;">: OK</span></b></span><br /><br />2) Check that there are no SNAPSHOT dependencies <span class="Apple-style-span"><b><span class="Apple-style-span" style="color:#006600;"> : OK</span></b></span><br /><br />3) Change the version in the POMs from x-SNAPSHOT to a new version (you will be prompted for the versions to use)<span class="Apple-style-span" style="color: rgb(255, 0, 0); "><b> <span class="Apple-style-span" style="color:#006600;">: OK</span></b></span><br /><i>(here, we went from 2.0.0-RC2-SNAPSHOT to 2.0.0)</i><div><i><br /></i>4) Transform the SCM information in the POM to include the final destination of the tag<span class="Apple-style-span" style="color: rgb(255, 0, 0); "><b> <span class="Apple-style-span" style="color:#006600;">: OK</span></b></span><br /><i>(the SCM info is now <connection>scm:svn:http://svn.apache.org/repos/asf/mina/tags/2.0.0</connection>, as expected)</i></div><div><i><br /></i>5) Run the project tests against the modified POMs to confirm everything is in working order<span class="Apple-style-span" style="color: rgb(255, 0, 0); "><b> <span class="Apple-style-span" style="color:#006600;">: OK</span></b></span><br /><br />6) Commit the modified POMs <span class="Apple-style-span" style="color: rgb(255, 0, 0); "><b> : KO!!!</b></span></div><div><span class="Apple-style-span" style="color: rgb(255, 0, 0); "><b><br /></b></span></div><div><span class="Apple-style-span">What's wrong here ? Everything has been committed </span><b>in the trunk</b><span class="Apple-style-span"> instead of the expected mina/tags/2.0.0 !</span></div><div><span class="Apple-style-span"><br /></span></div><div><span class="Apple-style-span">Why is the maven release plugin modifying the SCM tag if it's to commit everything in a place which should store the next version, ie 2.0.1-SNAPSHOT ?</span></div><div><span class="Apple-style-span"><br /></span></div><div><span class="Apple-style-span">I could understand that this is done on purpose (don't see a single reason for that, but who knows...), but at least, can't it </span><b>*ask*</b><span class="Apple-style-span"> the user before messing with the trunk ?</span></div><div><span class="Apple-style-span"><br /></span></div><div><span class="Apple-style-span">Sometime, the Maven Way Of Doing Things (tm) is completely broken, and this explains the complaints found on the blogsphere...</span></div>Emmanuel Lécharnyhttp://www.blogger.com/profile/00606458715529159834noreply@blogger.com13tag:blogger.com,1999:blog-27773736.post-21469087027823035102010-05-28T19:14:00.002+02:002010-05-28T19:40:13.052+02:00Why I will find a key for Windows 7 on internet to install it on a computer<span style="font-weight:bold;">Microsoft</span> forces me to be a pirat today.<br /><br />From time to time, I'm helping the cheese shop owner down my street, because he is a great guy and he knows almost nothing about computer, but uses it everyday to manage his stock of cheeses and bank account.<br /><br />Today, he told me that he has an issue with the computer he bought last september, with <span style="font-weight:bold;">Vista(ss)</span> on it. As he is using a Account Management system which is not compatible with <span style="font-weight:bold;">Vista(ss)</span>, he decided to bought an upgrade to <b>Windows 7</b>.<br /><br />So far, so good. He paid <span style="font-weight:bold;">119€</span> for the <b>Windows 7 familly Premium</b> upgrade from <b>Vista(ss) Home Premium</b>. Quite expensive, but, hey, you have to pay the price when you don't know that <b>Linux</b> is a pretty decent alternative.<br /><br />After having installed the POS^H^H^Hsoft, he had to activate the key. But then a message said <span style="font-weight:bold;">'the key is not valid for this version of the product'<span style="font-style:italic;"></span></span>. WTF ??? So he called me.<br /><br />One hour on the internet, no help. I have to say that <b>Microsoft</b> web sites are probably some of the worst ever when it comes to find a valuable piece of information. In fact, there is *no* information available.<br /><br />So I decided to call the Activation Center, because, hey, it's The Activation, Stupid !<br /><br />I spend almost <b><i>2 hours</i></b> being thrown like a ball from one person to another one, from <b>Microsoft</b> to <b>HP</b> and back, from the useless phone center somewhere in north africa, because it's probably cheaper to pay people there than in France (poor guys, being paid around 300€ a month to pick the phone and hear someone like me yelling ...).<br /><br />At least, we were able to discover that the package labeled "Windows Premium" contains in fact a DVD labeled Premium but containing the Extended edition. Of course, the key is the Premium one, not the extended one.<br /><br />At this very moment, I thought that the solution was damn easy : they just have to give me the extended edition key, and voilà.<br /><br />Fuck me ! No way ! Those guys are so stuck in the middle of a huge swamp of bureaucracy, combined with a large dose of idiocy and fear about the consequences of breaking the rules to help a <span style="font-weight:bold;">CUSTOMER</span> (I emphasize this word, because, hey, you know what Microsoft, we are not only USERS, we also are CUSTOMERS !) that they can't provide me with those 24 chars and 4 hyphens (and UUID for those who know what it's all about).<br /><br />So I told the guy (the manager of the manager of the technical guy I was talking to) that I have a better solution : go on the internet, get a hacked key and that will do the trick.<br /><br /><div style="text-align: center;"><b><span class="Apple-style-span" style="font-family:arial;">"But that would be piracy !!!"</span></b> he replied.</div><br />You know what ? *<b>yes*</b>. And you forced me to do that, <b>Microsoft</b>.<br /><br />Last thing : my fellow Cheese seller will buy a <b>Mac</b> next time. He saw mine, and found it quite wonderful.<br /><br /><br /><br /><div style="text-align: center;"><span class="Apple-style-span" style="font-family: arial; "><b>Losers !</b></span></div><div style="text-align: center;"><span class="Apple-style-span" style="font-family: arial; "><b><br /></b></span></div><div style="text-align: left;"><span class="Apple-style-span" style="font-family: arial; "><br /></span></div><div style="text-align: left;"><span class="Apple-style-span" style="font-family: arial; ">PS : If anyone from Microsoft read this, feel free to contact me to help me to help this poor guy. I won't charge you more than 125 € an hour to get it working. I already wasted 2hours of my precious time btw. Prove me that you are smarter than the system you are now stuck into. Remember USSR ? </span></div><div style="text-align: left;"><span class="Apple-style-span" style="font-family: arial; "><br /></span></div><div style="text-align: left;"><span class="Apple-style-span" style="font-family: arial; ">PS2: feel free to re-post.</span></div>Emmanuel Lécharnyhttp://www.blogger.com/profile/00606458715529159834noreply@blogger.com0tag:blogger.com,1999:blog-27773736.post-35914414320822145672010-04-19T22:31:00.003+02:002010-04-19T23:05:29.072+02:0010 ans de Glénans !(Exceptionnellement en français, mais je pense que cela ne concerne que les lecteurs francophones.)<div><br /></div><div>Donc cela fait 10 ans que j'ai fait mon premier stage de voile aux Glénans. Il s'agissait de deux semaines de croisière semi-embarqué (moitié à terre, avec découverte de la voile sur petit quillard, et une semaine à bord d'un confortable Dufour 30). </div><div><br /></div><div>Cassont les mythes : non, Les Glénans, ce n'est pas une école de voile militaire, ni comme on l'entend encore, les 'fachos de la voile'... En fait, je ne crois pas avoir passé de meilleures vacances - mais à l'époque j'avais besoin de changer d'horizon -, et depuis, je renouvelle cette expérience chaque année (voire autant de fois que possible). </div><div><br /></div><div>Cela fait maintenant 7 ans que je suis moniteur, ayant encadré 14 stages différents (soit 2 semaines par an), sur des supports tels que le Glénas 5.7, Open 5.70, Sprinto, Dufour 30, Sun Fast 43, Sun Fast 32, Dufour 325, et Elan 31. </div><div><br /></div><div>J'ai au l'occasion de découvrir des lieux magiques, comme le golfe du Morbihan au lever de soleil, l'Aber Wrach au coucher de soleil, le Ras de sein par pétole, Belle île, Houat et sa plage et Hoëdic, Groix, Brehat la mangifique, Batz, l'ile d'Yeu, l'Odet et le Belon, Pot Blanc, Porquerolles, les îles du Frioul, les calanques de Cassis, Sète, le détroit de Messine, les canaries, Cascais, et les îles Scilly. </div><div><br /></div><div>J'ai à peine touché le fond deux fois : une au mouillage (calcul de marée foireux, et pourtant refait 3 fois, avec réveil à 2h59 du matin pour replanter la 'pioche' 50 mètres plus loin, et envasement bien collant à force de rester dans le secteur rose d'un feu à secteur ...)</div><div><br /></div><div>Pas de spi explosé, quelques petites blessures, quelques départ au tas (spi en drapeau en tête de mat, départ au lof avec spi en coquetier et GV qui tombe, taquet défait par l'écoute de spi baladeuse, et gros vrac avec voile d'avant déroulée par force 8...) mais rien de grave.</div><div><br /></div><div>Quelques frayeurs aussi, comme ce coup de 50 noeuds de vent soudain en baie de Loctudy (7 noeuds de vitesse à sec de toile avec 43 noeuds de vent réel...) "Vous avez eu peur ? Non, t'étais super calme, on a juste trouvé bizarre que tu prennes la barre pour ne plus la lacher..." (dixit mes stagiaires).</div><div><br /></div><div>Et des rencontres assez étonnantes. Un chanteur d'opéra, un réalisateur de cinéma, une ancienne serveuse de café passant son aggregation de lettre à 50 ans, un éleveur d'oies, et même un prêtre ! ( et oui, les voies du seigneurs sont plus impénétrables que la coque de son navire, ce qui l'a conduit à étudier la navigation et les marées !)</div><div><br /></div><div>Cela m'a aussi donné l'occasion de rencontrer Romain, skipper (<a href="http://www.globe-skipper.com/fr/index.html">http://www.globe-skipper.com/fr/index.html</a>), que je salue au passage, qui me fait le plaisir de me convier à des convoyages me coupant du monde pour quelques jours : France-Cannaries ou France-Grèce, plus quelques trajets en méditerranée sur un voilier de 27 mètres (ex-bateau de course, assez monstrueux avec son mat de 37 mètres...)</div><div><br /></div><div>Pour ceux que ça intéresse : <a href="http://www.glenans.asso.fr/">http://www.glenans.asso.fr/</a></div><div><br /></div><div>N'hésitez pas à me contacter pour plus d'information !</div>Emmanuel Lécharnyhttp://www.blogger.com/profile/00606458715529159834noreply@blogger.com2tag:blogger.com,1999:blog-27773736.post-69455669762401586502010-02-16T13:03:00.002+01:002010-02-16T13:13:58.910+01:00Some new LDAP browsersToday, <span style="font-weight:bold;">Stefan Seelmann</span> pointed out that a couple of free LDAP browsers have been launched.<br /><br />The first one is delivered by <a href="http://symlabs.com/products/ldap-browser/">Symlabs</a> (no clue about the license though) and the other one is a <a href="http://code.google.com/p/nb-ldap-explorer/">NetBeans plugin</a>.<div><br /></div><div>I can understand that the <b>NetBeans</b> team develops a specific plugin, but I don't get the reason why a private company develops something that is already available for years, actively developed and used by a hundred of thousands people. I mean, isn't it a waste of time and resources ? </div><div><br /></div><div>Guys, there is room for you to join The Apache Software Foundation if you think you can give an hand, instead of playing in your own sandbox !</div><div><br /></div><div>PS: none of those two projects come close to the functionalities we deliver with <a href="http://directory.apache.org/studio">Apache Directory Studio</a>.</div>Emmanuel Lécharnyhttp://www.blogger.com/profile/00606458715529159834noreply@blogger.com1tag:blogger.com,1999:blog-27773736.post-6310442518679837982010-02-16T12:11:00.002+01:002010-02-16T12:44:18.660+01:00Useful toolFrom time to time, I need to get a clue about what some code is doing. Of course, I can - and do - read the code. But when it's highly concurrent, and the stack is deep, I would like to get an immediate vision of the stack trace for a complete execution.<div><br /></div><div>I'm using a small tool called <b><a href="http://jiprof.sourceforge.net/">JIP</a></b> : Java Interactive Profiler. I'm not sure why they added <i>interactive</i> in the name, because there is nothing interactive once you have launch your program, but anyway...</div><div><br /></div><div>So how does it work ? Simple : you add some instruction in your command line, run your program, and get back some trace. Let's see with an exemple. Yesterday evening, I did some debugging session with <a href="http://mina.apache.org/">MINA</a> and I wanted the trace generated for the server initialization, and a simple client call. I added this argument in the server command line : </div><div><br /></div><div><span class="Apple-style-span" style="font-family:'courier new';"> -javaagent:/Users/elecharny/jip-1.1.1/profile/profile.jar -Dprofile.properties=/Users/elecharny/jip-1.1.1/profile/profile.properties</span></div><div><span class="Apple-style-span" style="font-family:arial;"><br /></span></div><div><span class="Apple-style-span" style="font-family:arial;">and run my server. The </span><span class="Apple-style-span" style="font-family:'courier new';">profile.properties</span><span class="Apple-style-span" style="font-family:arial;"> has just been modified slightly to fit my need :</span></div><div><span class="Apple-style-span" style="font-family:arial;"><br /></span></div><div><span class="Apple-style-span" style="font-family:'courier new';">profiler=on</span></div><div><span class="Apple-style-span" style="font-family:'courier new';">remote=off</span></div><div><span class="Apple-style-span" style="font-family:'courier new';">port=15599</span></div><div><span class="Apple-style-span" style="font-family:'courier new';">ClassLoaderFilter.1=com.mentorgen.tools.profile.instrument.clfilter.StandardClassLoaderFilter</span></div><div><span class="Apple-style-span" style="font-family:'courier new';">thread-depth=-1</span></div><div><span class="Apple-style-span" style="font-family:'courier new';">thread.compact.threshold.ms=1</span></div><div><span class="Apple-style-span" style="font-family:'courier new';">max-method-count=cw-1compact</span></div><div><span class="Apple-style-span" style="font-family:'courier new';">method.compact.threshold.ms=1</span></div><div><span class="Apple-style-span" style="font-family:'courier new';">file=/Users/elecharny/jip-1.1.1/profile.txt</span></div><div><span class="Apple-style-span" style="font-family:'courier new';">exclude=org.eclipse,org.junit,org.slf4j,org.apache.log4j,org.apache.commons</span></div><div><span class="Apple-style-span" style="font-family:'courier new';">track.object.alloc=on</span></div><div><span class="Apple-style-span" style="font-family:'courier new';">output=text</span></div><div><span class="Apple-style-span" style="font-family:'courier new';">output-method-signatures=yes</span></div><div><span class="Apple-style-span" style="font-family:'courier new';">clock-resolution=ms</span></div><div><br /></div><div>Basically, I just set a file name to store the trace, filter some classes, extended the thread depth to infinite. The property file itself is quite well documented, and it should not be a problem to run the tool with a very minimum RTFming.</div><div><br /></div><div>Here is a sample of the trace I got :</div><pre>+------------------------------<br />| Thread: 1<br />+------------------------------<br /> Time Percent<br /> ----------------- ---------------<br />Count Total Net Total Net Location<br />===== ===== === ===== === =========<br /> 1 422.1 96.1 100.0 22.8 +--Server:main (mina.test2)<br /> 1 106.8 23.9 25.3 5.7 | +--NioSocketAcceptor:<init> (org.apache.mina.transport.socket.nio)<br /> 1 82.7 16.1 19.6 3.8 | | +--AbstractPollingIoAcceptor:<init> (org.apache.mina.core.polling)<br /> 1 24.4 0.0 5.8 | | | +--SimpleIoProcessorPool:<init> (org.apache.mina.core.service)<br /> 1 24.4 11.1 5.8 2.6 | | | | +--SimpleIoProcessorPool:<init> (org.apache.mina.core.service)<br /> 1 13.1 6.4 3.1 1.5 | | | | | +--NioProcessor:<init> (org.apache.mina.transport.socket.nio)<br /> 1 6.7 6.5 1.6 1.5 | | | | | | +--AbstractPollingIoProcessor:<init> (org.apache.mina.core.polling)<br /> 1 30.9 0.8 7.3 0.2 | | | +--AbstractPollingIoAcceptor:<init> (org.apache.mina.core.polling)<br /> 1 30.0 0.1 7.1 | | | | +--AbstractIoAcceptor:<init> (org.apache.mina.core.service)<br /> 1 29.9 11.9 7.1 2.8 | | | | | +--AbstractIoService:<init> (org.apache.mina.core.service)<br /> 2 15.7 13.8 3.7 3.3 | | | | | | +--NioSocketAcceptor:getTransportMetadata (org.apache.mina.transport.socket.nio)<br /> 1 1.8 1.7 0.4 0.4 | | | | | | | +--DefaultTransportMetadata:<init> (org.apache.mina.core.service)<br /> 1 16.1 0.1 3.8 | +--IoBuffer:wrap (org.apache.mina.core.buffer)<br /> 1 16.1 0.0 3.8 | | +--IoBuffer:wrap (org.apache.mina.core.buffer)<br /> 1 16.0 15.9 3.8 3.8 | | | +--SimpleBufferAllocator:wrap (org.apache.mina.core.buffer)<br /> 1 8.3 8.1 2.0 1.9 | +--BufferCodec:<init> (mina.test2)<br /> 1 1.3 1.1 0.3 0.3 | +--DefaultIoFilterChainBuilder:addLast (org.apache.mina.core.filterchain)<br /> 1 17.3 0.0 4.1 | +--AbstractIoAcceptor:bind (org.apache.mina.core.service)<br /> 1 17.3 0.1 4.1 | | +--AbstractIoAcceptor:bind (org.apache.mina.core.service)<br /> 1 16.9 1.0 4.0 0.2 | | | +--AbstractPollingIoAcceptor:bindInternal (org.apache.mina.core.polling)<br /> 1 4.2 1.5 1.0 0.4 | | | | +--AbstractPollingIoAcceptor:startupAcceptor (org.apache.mina.core.polling)<br /> 1 2.6 0.1 0.6 | | | | | +--AbstractIoService:executeWorker (org.apache.mina.core.service)<br /> 1 2.6 2.3 0.6 0.5 | | | | | | +--AbstractIoService:executeWorker (org.apache.mina.core.service)<br /> 1 11.1 11.1 2.6 2.6 | | | | +--NioSocketAcceptor:wakeup (org.apache.mina.transport.socket.nio)<br />+------------------------------<br />| Thread: 11<br />+------------------------------</init></init></init></init></init></init></init></init></init></init></init></pre><div><span class="Apple-style-span" style="font-family:'courier new';"><span class="Apple-style-span" style="font-family:arial;"><br /></span></span></div><div>This first stack trace is the server bind() method execution.</div><div><br /></div><div>Here is the stack trace for a message being processed :</div><div><br /><pre><br />+------------------------------<br />| Thread: 14<br />+------------------------------<br /> Time Percent <br /> ----------------- ---------------<br /> Count Total Net Total Net Location<br /> ===== ===== === ===== === =========<br /> 1 1115.2 0.1 100.0 +--NamePreservingRunnable:run (org.apache.mina.util)<br /> 1 1115.1 0.6 100.0 | +--AbstractPollingIoProcessor$Processor:run (org.apache.mina.core.polling)<br /> 6 1048.9 1048.9 94.1 94.1 | | +--NioProcessor:select (org.apache.mina.transport.socket.nio)<br /> 6 2.1 0.1 0.2 | | +--AbstractPollingIoProcessor:access$6 (org.apache.mina.core.polling)<br /> 6 2.0 0.0 0.2 | | | +--AbstractPollingIoProcessor:handleNewSessions (org.apache.mina.core.polling)<br /> 1 2.0 0.1 0.2 | | | | +--AbstractPollingIoProcessor:addNow (org.apache.mina.core.polling)<br /> 1 1.2 0.6 0.1 | | | | | +--IoServiceListenerSupport:fireSessionCreated (org.apache.mina.core.service)<br /> 6 24.2 0.1 2.2 | | +--AbstractPollingIoProcessor:access$9 (org.apache.mina.core.polling)<br /> 6 24.2 0.1 2.2 | | | +--AbstractPollingIoProcessor:flush (org.apache.mina.core.polling)<br /> 3 20.8 0.0 1.9 | | | | +--NioProcessor:getState (org.apache.mina.transport.socket.nio)<br /> 3 20.8 20.7 1.9 1.9 | | | | | +--NioProcessor:getState (org.apache.mina.transport.socket.nio)<br /> 3 3.2 0.2 0.3 | | | | +--AbstractPollingIoProcessor:flushNow (org.apache.mina.core.polling)<br /> 2 2.3 0.1 0.2 | | | | | +--AbstractPollingIoProcessor:writeBuffer (org.apache.mina.core.polling)<br /> 6 2.5 0.1 0.2 | | +--AbstractPollingIoProcessor:access$10 (org.apache.mina.core.polling)<br /> 6 2.4 0.0 0.2 | | | +--AbstractPollingIoProcessor:removeSessions (org.apache.mina.core.polling)<br /> 1 2.3 0.0 0.2 | | | | +--AbstractPollingIoProcessor:removeNow (org.apache.mina.core.polling)<br /> 1 1.6 0.1 0.1 | | | | | +--IoServiceListenerSupport:fireSessionDestroyed (org.apache.mina.core.service)<br /> 1 1.5 0.0 0.1 | | | | | | +--DefaultIoFilterChain:fireSessionClosed (org.apache.mina.core.filterchain)<br /> 1 1.2 0.0 0.1 | | | | | | | +--DefaultIoFilterChain:callNextSessionClosed (org.apache.mina.core.filterchain)<br /> 1 1.1 0.0 0.1 | | | | | | | | +--IoFilterAdapter:sessionClosed (org.apache.mina.core.filterchain)<br /> 1 1.1 0.0 0.1 | | | | | | | | | +--DefaultIoFilterChain$EntryImpl$1:sessionClosed (org.apache.mina.core.filterchain)<br /> 1 1.1 0.0 0.1 | | | | | | | | | | +--DefaultIoFilterChain:access$2 (org.apache.mina.core.filterchain)<br /> 1 1.1 0.0 0.1 | | | | | | | | | | | +--DefaultIoFilterChain:callNextSessionClosed (org.apache.mina.core.filterchain)<br /> 1 1.0 0.0 0.1 | | | | | | | | | | | | +--ProtocolCodecFilter:sessionClosed (org.apache.mina.filter.codec)<br /> 4 36.0 0.1 3.2 | | +--AbstractPollingIoProcessor:access$8 (org.apache.mina.core.polling)<br /> 4 35.9 0.2 3.2 | | | +--AbstractPollingIoProcessor:process (org.apache.mina.core.polling)<br /> 4 34.7 0.1 3.1 | | | | +--AbstractPollingIoProcessor:process (org.apache.mina.core.polling)<br /> 2 34.3 0.2 3.1 | | | | | +--AbstractPollingIoProcessor:read (org.apache.mina.core.polling)<br /> 3 2.3 0.0 0.2 | | | | | | +--NioProcessor:read (org.apache.mina.transport.socket.nio)<br /> 3 2.2 2.2 0.2 0.2 | | | | | | | +--NioProcessor:read (org.apache.mina.transport.socket.nio)<br /> 1 31.2 0.0 2.8 | | | | | | +--DefaultIoFilterChain:fireMessageReceived (org.apache.mina.core.filterchain)<br /> 1 31.0 0.0 2.8 | | | | | | | +--DefaultIoFilterChain:callNextMessageReceived (org.apache.mina.core.filterchain)<br /> 1 30.9 0.0 2.8 | | | | | | | | +--IoFilterAdapter:messageReceived (org.apache.mina.core.filterchain)<br /> 1 30.9 0.0 2.8 | | | | | | | | | +--DefaultIoFilterChain$EntryImpl$1:messageReceived (org.apache.mina.core.filterchain)<br /> 1 30.9 0.0 2.8 | | | | | | | | | | +--DefaultIoFilterChain:access$5 (org.apache.mina.core.filterchain)<br /> 1 30.9 0.0 2.8 | | | | | | | | | | | +--DefaultIoFilterChain:callNextMessageReceived (org.apache.mina.core.filterchain)<br /> 1 30.8 0.1 2.8 | | | | | | | | | | | | +--ProtocolCodecFilter:messageReceived (org.apache.mina.filter.codec)<br /> 1 1.3 1.2 0.1 0.1 | | | | | | | | | | | | | +--ProtocolCodecFilter:getDecoderOut (org.apache.mina.filter.codec)<br /> 1 28.6 0.0 2.6 | | | | | | | | | | | | | +--ProtocolCodecFilter$ProtocolDecoderOutputImpl:flush (org.apache.mina.filter.codec)<br /> 1 28.6 0.0 2.6 | | | | | | | | | | | | | | +--DefaultIoFilterChain$EntryImpl$1:messageReceived (org.apache.mina.core.filterchain)<br /> 1 28.5 0.0 2.6 | | | | | | | | | | | | | | | +--DefaultIoFilterChain:access$5 (org.apache.mina.core.filterchain) 1 28.5 0.0 2.6 | | | | | | | | | | | | | | | | +--DefaultIoFilterChain:callNextMessageReceived (org.apache.mina.core.filterchain)<br /> 1 28.5 0.0 2.6 | | | | | | | | | | | | | | | | | +--DefaultIoFilterChain$TailFilter:messageReceived (org.apache.mina.core.filterchain)<br /> 1 28.3 0.3 2.5 | | | | | | | | | | | | | | | | | | +--Server$MyIOHandler:messageReceived (mina.test2)<br /> 1 27.9 0.0 2.5 | | | | | | | | | | | | | | | | | | | +--AbstractIoSession:write (org.apache.mina.core.session)<br /> 1 27.9 1.4 2.5 0.1 | | | | | | | | | | | | | | | | | | | | +--AbstractIoSession:write (org.apache.mina.core.session)<br /> 1 26.1 0.0 2.3 | | | | | | | | | | | | | | | | | | | | | +--DefaultIoFilterChain:fireFilterWrite (org.apache.mina.core.filterchain)<br /> 1 26.1 0.0 2.3 | | | | | | | | | | | | | | | | | | | | | | +--DefaultIoFilterChain:callPreviousFilterWrite (org.apache.mina.core.filterchain)<br /> 1 26.0 0.0 2.3 | | | | | | | | | | | | | | | | | | | | | | | +--DefaultIoFilterChain$TailFilter:filterWrite (org.apache.mina.core.filterchain)<br /> 1 26.0 0.0 2.3 | | | | | | | | | | | | | | | | | | | | | | | | +--DefaultIoFilterChain$EntryImpl$1:filterWrite (org.apache.mina.core.filterchain)<br /> 1 26.0 0.0 2.3 | | | | | | | | | | | | | | | | | | | | | | | | | +--DefaultIoFilterChain:access$7 (org.apache.mina.core.filterchain)<br /> 1 25.9 0.0 2.3 | | | | | | | | | | | | | | | | | | | | | | | | | | +--DefaultIoFilterChain:callPreviousFilterWrite (org.apache.mina.core.filterchain)<br /> 1 25.9 21.3 2.3 1.9 | | | | | | | | | | | | | | | | | | | | | | | | | | | +--ProtocolCodecFilter:filterWrite (org.apache.mina.filter.codec)<br /> 1 2.3 2.2 0.2 0.2 | | | | | | | | | | | | | | | | | | | | | | | | | | | | +--ProtocolCodecFilter:getEncoderOut (org.apache.mina.filter.codec)<br /> 1 1.2 0.5 0.1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | +--ProtocolCodecFilter$ProtocolEncoderOutputImpl:flushWithoutFuture (org.apache.mina.filter.codec)<br /></pre></div>Emmanuel Lécharnyhttp://www.blogger.com/profile/00606458715529159834noreply@blogger.com0tag:blogger.com,1999:blog-27773736.post-33370081985315248092010-01-26T16:59:00.002+01:002010-01-26T17:10:44.767+01:00Pick good names for your methods/data structures...I had hard some time today, trying to get a clue about what is what in Apache Directory Server project.<div><br /></div><div>When Alex Karasulu started to work on the project back in 2001, he had to design a brand new ASN/1 codec, producing LDAP messages. He named those messages and this codec "Snickers", just because he has used the "Snacc" ASN/1 compiler before (Snacc couldn't be used by the project, because it was not free of use).</div><div><br /></div><div>So we had our Snickers codec, and SnickersXXX messages.</div><div><br /></div><div>When I joined the project in 2005, I was crazy enough to think that I can improve this portion of code performances. Sure I did, but I picked some other funny names, "Twix" Codec and TwixMessageXXX messages. </div><div><br /></div><div>Great ! It was funny, we laugh a lot, and congratulate each others, thinking how funny we were ... What I don't say is that I had to write a converter from Snickers to Twix messages, as Twix messages are used in the front end, and Snickers messages are manipulated all over the back end. So converting back and forth was mandatory.</div><div><br /></div><div>Damn asses ...</div><div><br /></div><div>5 years later, when I come back into this crap, I have *no* bloody idea about what is what. Is Twix for the frontend or the backend ?</div><div><br /></div><div><i>When you pick a name, and when you think it's funny, just think about those, and probably you, who will not have fun at all when it'll be time to fix some code in this area, with no clue about what Twix and Snickers are...</i></div><div><i><br /></i></div><div><i>A Pale is a Pale. Don't name it Chair because it sounds funny..</i></div>Emmanuel Lécharnyhttp://www.blogger.com/profile/00606458715529159834noreply@blogger.com1tag:blogger.com,1999:blog-27773736.post-45202589314241255432010-01-22T13:55:00.003+01:002010-01-23T11:03:44.940+01:00Fixing performance issues in your applicationI was lucky enough to assist to a presentation done by <span style="font-weight: bold;">Kirk Pepperdine</span> last Wednesday. I won't present Kirk (you can check his résumé <a href="http://www.linkedin.com/ppl/webprofile?vmi=&id=333895&pvs=pp&authToken=32Ig&authType=name&locale=en_US&trk=ppro_viewmore&lnk=vw_pprofile">here</a> ), it's enough to say that he is well known as a java performance Guru.<br /><br />The presentation was conducted in two parts, the first one was a Q & A session, the second part was about debugging live an application that was carefully slowed down by introducing bugs in it.<br /><br /><span style="font-size:180%;"><span style="font-weight: bold;">Preamble</span></span><br />Let me talk about the application first : the guys who invited Kirk (AFAIK, it was an 'extra', provided as a bonus following an internal presentation they paid for. Thank to <a style="font-weight: bold;" href="http://www.xebia.fr/">Xebia</a> for having shared this presentation with external people) have prepared the application (the well known and useless <span style="font-weight: bold;">Pet Clinic</span>) by adding some of the anti-pattern they have met when doing consulting for many of their clients. Kirk had no clue about the bugs that have been injected.<br /><br /><first part=""><br /><span style="font-size:180%;"><span style="font-weight: bold;">Q&A</span></span><br />It was asked us to provide some questions when we registered, and Kirk answered them extensively. Here are some of the Q and A I remember of :<br /><br /><span style="font-weight: bold;">Q</span> : Which GC should we use ?<br /><span style="font-weight: bold;">A </span>: The one which works. Usually, just focus on your application, you'll not need to pick a specific GC .<br /><br /><span style="font-weight: bold;">Q</span> : What do you think about other languages like <span style="font-weight: bold;">Groovy</span>, <span style="font-weight: bold;">Scala</span>, wrt performance ?<br /><span style="font-weight: bold;">A</span> : It's irrelevant. Picking a language to develop your application should not be a matter of performance only. 'Whatever works' is the way to go. If you want to build an application fast, and if it's not expected to be heavily loaded, then even php is a good choice.<br /><br /><span style="font-weight: bold;">Q</span> : What tools to you use to check for performance bottlenecks<br /><span style="font-weight: bold;">A</span> : A few : a system monitor, <a href="https://h20392.www2.hp.com/portal/swdepot/displayProductInfo.do?productNumber=HPJMETER"><span style="font-weight: bold;">HP-JMeter</span></a>, an <a href="https://visualvm.dev.java.net/"><span style="font-weight: bold;">VisualVM</span></a><br /><br /><span style="font-weight: bold;">Q</span> : How can you best write an application which depends heavily on concurrent code ?<br /><span style="font-weight: bold;">A</span> : Don't use any synchronization. There are ways to avoid synchronization, based on state machine theory. <span style="font-style: italic;">(pointers needed here ...)</span><br /><br /><span style="font-weight: bold;">Q</span> : What is the ratio of GC problems you have to deal with when working for a client ?<br /><span style="font-weight: bold;">A</span> : Around 40%. Assuming that I'm the last hope for many of my clients, it's may be an irrelevant number. Usually, people successfully fix easier issues themselves.<br /><br /><span style="font-weight: bold;">Q</span> : Do you check the code when you start tracking some performance issue ?<br /><span style="font-weight: bold;">A</span> : Never. I'm not a coder, I don't have time to go through thousands of line of code. I just spot the place in the code which has problem.<br /><br /><span style="font-weight: bold;">Q</span> : Managers don't let me adding some traces in the application on production… What should I tell them ?<br /><span style="font-weight: bold;">A</span> : Managers know the difference between a slow application and a dead application. Do what you have to do, or find another client. (in other words : you don't cure cancer with aspirin...)<br /><br /><span style="font-weight: bold;">Q</span> : Which profiler do you use, or prefer ?<br /><span style="font-weight: bold;">A</span> : <a href="http://yourkit.com/"><span style="font-weight: bold;">YourKit</span></a>: it's simple and efficient.<br /><second part=""><br />The most interesting presentation I have seen in years. I actually learn things in an area I thought I was efficient…<br /><br /><span style="font-size:180%;"><span style="font-weight: bold;">Live demo</span></span><br /><br />What was the crux about this part was the processes Kirk adopted to point out the problems in the code.<br /><br /><span style="font-size:130%;"><span style="font-weight: bold;">Step 1</span></span><br /><br />First, he asked for a baseline to work on. Namely, you should have a scenario which demonstrates the kind of <span style="font-style: italic; font-weight: bold;">real</span> performances issues a <span style="font-weight: bold; font-style: italic;">real</span> client perceives. Improving some application which is already perceived as working is a waste of time, energy and money. Without a base line, you also have no way to check that you have improved the application. Last, not least, define your expectations, otherwise, you won't meet them ! So here, the team has defined a <a href="http://jakarta.apache.org/jmeter/"><span style="font-weight: bold;">JMeter</span></a> test, and defined the expected response time for each page.<br /><br /><span style="font-size:130%;"><span style="font-weight: bold;">Step 2</span></span><br /><br />Second, run the baseline scenario, and measure the response time, plus a few other counters :<br />- CPU (users and system)<br /><br />That's it, nothing more. Here, the code has not been even checked. The only thing Kirk did was to remove all the tuning for the JVM, like the memory min and max size, and every other premature configurations.<br /><br />The rational is that you have no idea at this point if those parameters have any effect, but they for sure have an impact, probably polluting the results.<br /><br />Looking at the CPU consumption and response time (90%CPU, around 5% system), with an average of 10s per page, it was clear the application has a performance issue, but there was no clue about what's going on yet.<br /><br /><span style="font-size:130%;"><span style="font-weight: bold;">Step 3</span></span><br /><br />Then he checked the way the GC was running. He added some instruction on the JVM setting to generate some GC traces, run the application for a few minutes, then checked the logs (<span style="font-style: italic;">"You have to be patient ! Memory leaks may take a while to be noticed."</span>)<br /><br />A quick look at the metrics shown that the GC was eating 13% of the whole CPU. Way too much.<br /><br /><span style="font-size:130%;"><span style="font-weight: bold;">Step 4</span></span><br /><br />Kirk now decided to connect to the running application, using <a href="https://visualvm.dev.java.net/"><span style="font-weight: bold;">VisualVM</span></a>. The idea was to check the way objects were allocated. After a few minutes of tests, the allocated objects graph shown that we have a linear increase over time, which means a memory leak.<br /><br />Finding the memory leak was a matter of minutes : find an application object (no need to check a Java object like byte[] or String : <span style="font-style: italic;">"Java collection objects don't leak…"</span>). What is the key for Kirk is the number of generations an object survived : the higher this number, the more likely this object is leaking. Very new to me.<br /><br /><span style="font-style: italic;">As a side note, he also said that many of the existing tools don't provide this generation number. They base the detection of leaking object on delta between snapshots. Not convenient.</span><br /><br />Then you can check where the object was allocated checking the stack trace, an now, look at the code.<br /><br />At this point, the important lesson is : <span style="font-weight: bold;">just look at the code when you know in which method you have a problem.</span><br /><br />(the application had another memory leak he found too, using the very same approach)<br /><br />Another lesson : he asked to remove the caches in the code, instead of blind-guessing what was wrong with those caches (they were leaking). His moto was : <span style="font-style: italic;">"Why would you optimize your code by adding cache when you have no idea about what's going wrong in your code ?"</span><br /><br /><span style="font-size:130%;"><span style="font-weight: bold;">Step 5</span></span><br /><br />Once this initial problem was fixed, he re-runs the test, and he saw that the CPU was not going any upper than 50%. Very wrong when the response time was still awful. In this case, the System CPU was high (the ration between user and system should be around 5-10%/90-95%).<br /><br />What does it mean ? Contention. How to find where we have contention ? Easy : generating a thread-dump.<br /><br />No fancy profiler, no long source reading, just a thread-dump.<br /><br />It immediately shown that only two threads were used to deal with 50 concurrent clients requesting the application.<br /><br />A quick tuning on Tomcat (number of threads accepting requests), and we moved to the next step.<br /><br /><span style="font-size:130%;"><span style="font-weight: bold;">Step 6</span></span><br /><br />One last measure shown now that we had much better performances, but with a very high CPU system usage : around 20%.<br /><br />Same action here : thread dump, look at the blocking threads, go to the portion of code where the thread was waiting. A bad thread.sleep( 100 ) was found in the code.<br /><br />And it was over for the demonstration : 2 hours to fix bugs that would have took days and days for most of us!<br /><br /><span style="font-size:180%;"><span style="font-weight: bold;">Conclusion</span></span><br /><br />In two hours, he made the application running way faster, simply by using a couple of tools, and without reading the code.<br /><br />Impressive.<br /><br />Thanks to <span style="font-weight: bold;">Kirk Pepperdine</span>, <span style="font-weight: bold;">Cyrille Le Clerc</span> and <span style="font-weight: bold;">Xebia</span> !<br /><br /><span><span></span></span><b><span class="Apple-style-span" style="font-size: x-large;">Follow up </span></b></second></first><div><first part=""><second part=""><b><span class="Apple-style-span" style="font-size: x-large;"><span class="Apple-style-span" style="font-weight: normal;"><span class="Apple-style-span" style="font-size: medium;">I have forgotten a few things :</span></span></span></b></second></first></div><div><ul><li><b><span class="Apple-style-span" style="font-size: x-large;"><span class="Apple-style-span" style="font-weight: normal; font-size: medium;">at some point after stet 4, GC went up to 65%. Kirk suspected that some part of the code was calling the GC. You bet ! </span></span></b></li><li><span class="Apple-style-span" style="font-size: medium;">after the presentation, Kirk said that the very first step is really to catch all the GC problems first, as they will probably hide other problems. </span></li></ul><first part=""><second part=""><br /></second></first></div>Emmanuel Lécharnyhttp://www.blogger.com/profile/00606458715529159834noreply@blogger.com3