Skip to content

Methods & Tools

Le blog d'OCTO Technology, cabinet d'architectes en systĂšmes d'information
Syndiquer le contenu
Le blog d'OCTO Technology, cabinet d'architectes en systĂšmes d'information
Mis à jour : il y a 3 heures 17 min

DoD – DĂ©boire & Pouvoir

jeu, 09/02/2010 - 09:19


Un outil pour l’amĂ©lioration continue du standard

DĂ©solĂ© pour les gamers, mais non je ne vais pas vous parler du dernier Day of Defeat. Par DoD comprenez plutĂŽt « Definition of Done », c’est Ă  dire l’ensemble des critĂšres Ă  respecter pour considĂ©rer une tĂąche terminĂ©e. Par exemple, avant de soumettre son code, un dĂ©veloppeur doit s’assurer de respecter le critĂšre: « tests unitaires OK ».

En quoi un outil aussi « low-tech » et aussi simpliste qu’une check-list peut nous aider Ă  l’ùre de Google et de l’iPhone ? À une rĂ©volution dans le niveau de qualitĂ© fournie. Pour preuve emblĂ©matique, les initiatives rĂ©centes dans le milieu hospitalier. Cet extrait parle de la pose d’un cathĂ©ter (voie veineuse centrale).

« In 2001, though, a critical care specialist at Johns Hopkins Hospital named Peter Pronovost decided to give a doctor checklist a try. [...] Doctor are supposed to (1) wash their hands with soap, (2) clean the patient’s skin with chlorhexidine antiseptic, (3) put sterile drap over the entire patient, (4) wear a mask, hat, steril gown, and gloves, and (5) put a steril dressing over the insertion site once the line is in. [...]

In the Keystone initiative’s first eighteen months, the hospitals saved an estimated $175 million in costs and more than fifteen hundred lives.« 

Et ce seulement dans le Michigan !

Avant mĂȘme de parler des DoD, je rappelle que ceux-ci sont au service de l’amĂ©lioration continue du standard.

Qu’est ce qu’un ( bon ) standard ?

Je vous propose cette définition :
« Un standard est la meilleure pratique constatĂ©e Ă  ce jour, Ă©noncĂ© explicitement, avec une finalitĂ© affichĂ©e, et dont on sait mesurer les Ă©carts. »

Celui-ci au sens Lean se doit de respecter certaines grandes caractĂ©ristiques, il doit ĂȘtre :

  • issu du terrain
  • Ă©voluĂ© sur la base de l’amĂ©lioration continue et de la rĂ©solution de problĂšme
  • simple
  • supportĂ© au maximum par du management visuel
  • remis en cause sur la forme et sur le fond lorsqu’il n’est pas appliquĂ©

Les DoD sont des éléments de ce standard, ils se doivent donc eux aussi de respecter ces caractéristiques. Appliquons donc celles-ci à nos DoD :

Issu du terrain

C’est sur le terrain que devra ĂȘtre appliquĂ© le standard et c’est bien lĂ  que les problĂšmes sont rencontrĂ©s et encore lĂ  que le standard sera remis en cause et amĂ©liorĂ©.

Voici un autre extrait tirĂ© du mĂȘme livre qui relate l’Ă©chec de la premiĂšre version de cette check-list. Cette premiĂšre version ayant Ă©tĂ© rĂ©digĂ©e par des chirurgiens, non pas au bloc, mais lors de rĂ©unions en omettant la plupart des acteurs, infirmiĂšres, anesthĂ©sistes, …

« I gave the checklist to Dee, the circulating nurse, and asked her to run through the first section with us at the right time. Fifteen minutes later, we were about to put the patient under general anesthesia, and I had to say, Wait, what about the checklist?
« I already did it, » Dee said. She showed me the sheet. All the boxes were checked off.
No, no, no, I said. It’s supposed to be a verbal checklist, a team checklist.
« Where does it say that? » she asked. I looked again. She was right. It didn’t say that anywhere.
Just try it verbally anyway, I said.
Dee shrugged and started going through the list. But some of the checks were ambiguous. [...]. And after a few minutes of puzzling our way through the list, everyone was becoming exasperated. Even the patient started shifting around the table.
« Is everything okay? » she asked.
Oh yes, I told her. We ‘re only going through our checklist. Don’t worry.
But I was getting impatient, too.  The checklist was too long. It was unclear. And past a certain point, it was starting to feel like a distraction from person we had on the table.
By the end of the day, we had stopped using the checklist. Forget making this work around the table. It wasn’t even working in one operating room. »

Dans cet extrait il est clair que l’infirmiĂšre Dee aurait dĂ» ĂȘtre consultĂ©e pour l’Ă©laboration de la check-list. Les propositions d’amĂ©liorations doivent ĂȘtre Ă©mises par ceux qui rencontrent le problĂšme et qui ont la meilleure vision de toutes les contraintes. Mais c’est loin d’ĂȘtre suffisant.

Un exemple issu de nos mĂ©tiers : Jean dĂ©veloppeur dĂ©cide qu’Ă  partir de maintenant le passage dans un formateur de code est obligatoire avant tout commit. C’est donc un nouveau DoD pour terminer une tĂąche de dĂ©veloppement.

C’est sans doute une bonne initiative, mais elle est vouĂ©e Ă  l’Ă©chec. Pourquoi ?

Évoluant sur la base de l’amĂ©lioration continue et de la rĂ©solution de problĂšme

Le standard ne pourra ĂȘtre respectĂ© que si il est partagĂ© par toute l’Ă©quipe. Pour y arriver, le Lean nous met Ă  disposition l’amĂ©lioration continue et la rĂ©solution de problĂšme via, dans le cas des mĂ©thodes agiles, les rĂ©trospectives.

Revenons au formateur de code de Jean. C’est une nouvelle contrainte pour les dĂ©veloppeurs qui ne la comprennent pas forcĂ©ment ( « c’est pour faire joli ? », « moi j’aime pas les accolades Ă  droite ! « , etc…).

En effet, les autres membres n’Ă©prouveront pas le besoin puisqu’ils n’y voient pas de solution Ă  un problĂšme donnĂ©.

Pourquoi ne pas se servir de la rétrospective ?

Si des actions d’amĂ©lioration ont Ă©tĂ© trouvĂ©es lors d’une rĂ©trospective, il est trĂšs probable que des DoD puissent s’en dĂ©duire. De plus, c’est un moment privilĂ©giĂ© oĂč toute l’Ă©quipe est concentrĂ©e Ă  l’amĂ©lioration du process.

Comment ce cas aurait pu ĂȘtre traitĂ© en rĂ©tro ?

Jean : « Je n’ai pas pu finir ma user story pour la recette, le merge Ă©tait trop difficile avec la US de RenĂ©. »

RenĂ© : « Mais on ne travaillait pas sur les mĂȘmes mĂ©thodes ? »

Jean : « J’ai eu pleins de conflits parce que tu mets toutes tes accolades Ă  la ligne… »

RenĂ© : « Mais c’est beaucoup plus lisible au niveau de l’indentation, non ? »

Jean : « C’est pas le standard le plus rĂ©pandu ! »

RenĂ© : « C’est toi le stand… »

La vache Octo : « Meuuuuuuuuuuuuuuuuuuuuuuh »

Le coach Octo : « Ca vous dit de traiter le point au calme et en rĂ©trospective technique ? »

Dans cette retro spĂ©cifique aux dĂ©veloppeurs le coach (ou team leader) va aider l’Ă©quipe Ă  clore ce dĂ©bat « passionnant » de l’indentation et convenir d’un formateur unique ainsi que de l’ajout au standard d’un DoD « FORMATEUR DE CODE APPLIQUÉ ».

On a maintenant deux fervents défenseurs de cette partie du standard, Jean qui appréhende un nouveau merge difficile et René qui aime ses accolades !

C’est donc bien le processus d’amĂ©lioration continue qui nourrit et fait Ă©voluer le standard.

Simple

Le but final est de construire le meilleur standard applicable. Qui dit applicable dit simple. Cela implique que les DoD qui le composent soient le plus simples possibles.

Ainsi, la formalisation d’un DoD doit respecter quelques rĂšgles :

  • univoque pour toute l’Ă©quipe :
    • « BUILD OK » peut ne pas ĂȘtre suffisant, c’est en local ? en environnement sandbox ?
    • « BUILD OK SUR MACHINE TOTO » lĂšve le doute.
  • en nombre limitĂ© :
    • Cette liste de DoD devra ĂȘtre appliquĂ©e et contrĂŽlĂ©e pour chaque tĂąche Il faut donc limiter leur nombre (entre 1 et 10 critĂšres pour passer une tĂąche d’un Ă©tat Ă  un autre)
  • concis :
    • Le nombre de DoD pour l’ensemble du process peut devenir consĂ©quent, il ne faut pas noyer l’information. À « VĂ©rifier que le build d’intĂ©gration continue sur la machine TOTO n’a pas Ă©tĂ© mis en Ă©chec par notre commit », on prĂ©fĂ©rera « BUILD OK SUR MACHINE LP32″ qui reste malgrĂ© tout parlant pour l’Ă©quipe.

Management visuel

Toujours dans le but de rendre notre standard applicable le plus simplement possible, nous allons cette fois ci nous appuyer sur le management visuel.

Rendre les DoD visuels les rendra plus accessibles et donc plus facilement utilisables.

Comme ils ne seront qu’une source d’informations parmi d’autres, il convient de les rendre clairs et normĂ©s. Par exemple Post-It vert clair /  marqueur noir / en majuscule.

Je vous laisse apprécier la différence :

En agile, les Ă©tapes du processus sont reflĂ©tĂ©es par les colonnes du scrumboard / kanban board. Les DoD doivent ĂȘtre contrĂŽlĂ©s au changement d’Ă©tat. Celui-ci se matĂ©rialise par le dĂ©placement du Post-It de la colonne A vers la colonne B. Le meilleur endroit pour afficher les DoD est donc, Ă  mon sens, au dessus (ou en dessous) de celles-ci.

Remis en cause sur la forme et sur le fond lorsqu’il est non appliquĂ©

L’un des grands principes d’un standard, tel que le Lean le dĂ©finit, est qu’il est vivant. La dĂ©finition d’un standard donnĂ©e en dĂ©but d’article parlait bien d’un instant T. Si Ă  T+1 on observe que le standard n’a pas Ă©tĂ© appliquĂ©, il faut le remettre en cause.

Si un critĂšre du DoD n’est pas appliquĂ© il est nĂ©cessaire de se poser les questions suivantes :

  • le critĂšre n’a pas Ă©tĂ© vĂ©rifiĂ© car il n’est plus pertinent ?
  • le critĂšre n’a pas Ă©té vĂ©rifiĂ© car il n’est pas assez « ergonomique » et clair dans le DoD ?
  • le critĂšre n’a pas Ă©tĂ© vĂ©rifiĂ© car la personne n’a pas regardĂ© le DoD ?
  • le dĂ©veloppeur en charge de vĂ©rifier le critĂšre a pensĂ© Ă  tort/Ă  raison qu’il s’agissait d’un cas particulier non encore explicitĂ© dans le standard de l’équipe ?

Dans le cas oĂč le critĂšre a Ă©tĂ© mal compris il convient de le modifier. Par exemple si le critĂšre « TEST FONCTIONNEL OK » ne suffit pas car le test peut passer en local mais Ă©chouer en environnement sandbox, le reformuler en « TEST FONCTIONNEL OK EN SANDBOX ».

Mais que faire quand on découvre que le DoD a été contourné à tort ?

Déboires

Dans la pratique il s’avĂšre que, mĂȘme avec des dĂ©veloppeurs pleins de bonne volontĂ©, l’application des DoD n’est pas toujours rĂ©alisĂ©e.

Et pourtant… C’est trĂšs frustrant de voir Ă  une rĂ©trospective une US KO, la vĂ©locitĂ© chuter, alors que le remĂšde Ă©tait lĂ , en majuscules et visible partout dans l’openspace :

Jean, en charge de la US Ă  KO : « Ca marchait en local. »

L’Ă©quipe : …

Comment garantir le respect des DoD

Quelque chose de simple mais qui fonctionne : le binĂŽmage dans le dĂ©placement des Post-It. Un dĂ©veloppeur souhaitant faire avancer sa tĂąche doit avertir un autre dĂ©veloppeur. Le but Ă©tant de responsabiliser deux personnes sur le respect du DoD mis en place pour ce changement d’Ă©tat.

De maniĂšre gĂ©nĂ©rale, il faut Ă  tout prix responsabiliser l’équipe au respect des DoD : « c’est votre standard, c’est-Ă -dire la meilleure façon que vous avez trouvĂ© jusqu’ici pour rĂ©aliser l’objectif. Soit vous l’appliquez Ă  la lettre si il est pertinent soit vous le remettez en cause en Ă©quipe».

Un autre outil qui peut dĂ©ranger mais qui peut fonctionner dans certaines Ă©quipes, le « wall of shame ». TrĂšs simple… un Post-It gĂ©ant avec le nom de chaque dĂ©veloppeur. Le non respect d’un DoD entrainant un bĂąton Ă  cotĂ© du nom du dĂ©veloppeur concernĂ©.

Il suffit d’en faire un jeu plus qu’un outil de « flicage » et c’est Ă  mon avis le meilleur moyen de garantir le respect des DoD. L’Ă©quipe est responsable des DoD donc Ă  l’Ă©quipe elle-mĂȘme de fixer, dans un cadre pro, la consĂ©quence du non respect du standard. Le but n’Ă©tant pas de sanctionner mais de faire prendre conscience des DoD.

Comment en faire un jeu ?

  • 5 bĂątons = un fond d’Ă©cran « Dora l’exploratrice » pendant 2 jours
  • 10 bĂątons = des croissants pour l’Ă©quipe

Enfin, quelque chose que je n’ai pas encore pu essayer mais qui me semble prometteur, les cases Ă  cocher. De la mĂȘme maniĂšre que pour une check-list classique, il faudrait possĂ©der sur les Post-It matĂ©rialisant les User-Stories une case Ă  cocher par DoD. Ainsi un oubli de DoD est clairement visible de tous. Et tout le monde peut participer au respect du standard. Si vous avez des retours d’expĂ©riences la dessus, je suis preneur !

Conclusion

On peut maintenant définir un DoD :
« ElĂ©ment visible de tous, concis et univoque dĂ©finissant les conditions permettant de passer une tĂąche d’un Ă©tat Ă  un autre. Leur ensemble dĂ©finissant le standard d’un processus ».

Avec l’utilisation des DoD, il devient possible de partager tous les standards d’une Ă©quipe sur l’outil que tout le monde utilise et voit en permanence, le scrumboard / kanban board.

Autrement dit, la meilleure façon d’apporter de la valeur au projet connue Ă  ce jour est visible par tous et Ă  tout instant.

Catégories: Blog Société

Réussir votre SOA : Un guide pratique en 10 questions (1/3)

mer, 09/01/2010 - 16:37


L’un des facteurs clĂ© pour la rĂ©ussite de la mise en place d’une architecture orientĂ©e services, c’est de parvenir Ă  identifier et mettre en Ɠuvre des services Ă  forte valeur ajoutĂ©e. Cet article synthĂ©tise, sous forme de questions pratiques, les principaux Ă©lĂ©ments et concepts Ă  considĂ©rer pour rĂ©ussir cette transformation du SI.

Cet article sera publié en 3 parties :
Partie 1 – Questions 1 et 2
Partie 2 – Questions 3 Ă  6
Partie 3 – Questions 6 Ă  10

1) Qu’est-ce qu’un service ?
Dans le domaine informatique, un service est tout programme exposant une ou plusieurs fonctionnalités à des tierces applications en environnement distribué

2) Comment émergent les services ?
Pour qu’on puisse parler de service, il faut un client et un fournisseur de service.

Dans un processus « Bottom up », un service Ă©merge d’une dĂ©marche « Push » initiĂ©e par un fournisseur ou « Pull » initiĂ©e par un consommateur.

Dans un processus « Top-down », il est la rĂ©sultante d’une Ă©tude plus globale et systĂ©mique du SI ou d’un bloc du SI.

Processus Bottom-Up

- Processus « push» – par le fournisseur (Le fournisseur fournit un service le plus « gĂ©nĂ©rique » possible)

C’est une dĂ©marche initiĂ©e par un fournisseur qui expose un service et le propose Ă  ses partenaires. Le fournisseur essaie de proposer un service le plus gĂ©nĂ©rique possible qui rĂ©pond au besoin de tous ses partenaires (exemple : les services exposĂ©s par ViaMichelin, Amazon, Google, etc.)

- Processus « Pull» – par le client (Le client demande un service)

Cette dĂ©marche est initiĂ©e par un consommateur qui exprime le besoin pour un ou plusieurs service(s) lui permettant d’échanger avec des tierces applications. Dans ce cas, le fournisseur essaie de rĂ©pondre au besoin du consommateur sans forcĂ©ment prendre en compte des perspectives de rĂ©utilisation du service. Cela s’explique par le fait que ce genre de demande se conjugue gĂ©nĂ©ralement avec des impĂ©ratifs « Time To market » imposĂ©s par le client du service.

Processus Top-Down (Le service est identifé)

Certains services de ce processus Ă©mergent d’une dĂ©marche d’urbanisation ou de refonte du SI. Le besoin d’échanges est prĂ©alablement Ă©tudiĂ© et une dĂ©finition des services est proposĂ©e.

Il est vrai que cette dĂ©marche garantit une cohĂ©rence globale de l’ensemble des services, nĂ©anmoins, sa mise en place s’avĂšre un challenge inintelligible dont les bĂ©nĂ©fices sont loin d’ĂȘtre acquis.

Quelle démarche favoriser?
Dans l’absolu, il n’y a pas de dĂ©marche Ă  favoriser en particulier. Les 3 peuvent co-exister selon le contexte et l’offre de services existante. NĂ©anmoins, en phase de conception et de mise en Ɠuvre du service, il est primordial de prendre en considĂ©ration les points suivants:
1) Favoriser une démarche itérative et collaborative entre clients(s) et fournisseurs de services.

Pourquoi? Parce qu’un service est un processus dont le rĂ©sultat ne prĂ©existe pas Ă  la demande du client, cela signifie que le client va devoir s’engager vis-Ă -vis d’un fournisseur avant que la service ne soit rĂ©alisĂ©e, c’est-Ă -dire avant qu’il puisse Ă©valuer la qualitĂ© de ce rĂ©sultat, puisque celle-ci ne pourra ĂȘtre Ă©valuĂ©e qu’une fois le service rĂ©alisĂ©. Ce dĂ©calage temporel entre l’engagement de la transaction client/fournisseur et la rĂ©alisation du service crĂ©e une situation d’incertitude. D’oĂč l’importance des mĂ©thodologies de mise en Ɠuvre projet concernant ce type de besoin.
2) Penser un service donnĂ© en tant qu’offre de services, plutĂŽt qu’un mono-service qui essaie de rĂ©pondre Ă  tous les besoins
3) Ne pas considĂ©rer l’Ă©tude d’urbanisation, s’il y en avait une, comme une cible en elle mĂȘme, mais plutĂŽt comme un fil conducteur pour la cible.

Suggestion d'articles :

  1. Le tour des ESB en 10 questions
  2. SOA par la pratique

Catégories: Blog Société

Lancement d’OCTO Academy

mer, 09/01/2010 - 09:00


Suite Ă  un certain nombre de demandes de la part de nos clients, nous avons dĂ©cidĂ© d’ouvrir, Ă  titre expĂ©rimental, nos parcours de formation OCTO Ă  des participants extĂ©rieurs. C’est ainsi qu’OCTO Academy est nĂ© ! ConcrĂštement, il s’agit d’ouvrir la cinquantaine de jours de formation que nous animons tout au long de l’annĂ©e dans nos locaux.

Ces formations destinĂ©es Ă  nos architectes sont la meilleure illustration de notre devise « Apprendre Ă  jouer l’excellence ».

Elles sont animées par :

Elles couvrent 4 thématiques :

  • Management de SI
  • Architecture et technologies
  • MĂ©thodologies et conduite du changement
  • Accompagnement de projets

Le site OCTO Academy (en bĂ©ta) prĂ©sente un petit catalogue formation avec un formulaire d’inscription.
Le catalogue va s’Ă©toffer progressivement dans les mois Ă  venir…

Suggestion d'articles :

  1. Session ALT.NET avec Greg Young ce mercredi Ă  OCTO
  2. 4 Formations OCTO Technology – 2 et 3 juillet 2008
  3. OCTO propose une formation ScrumMaster le 7 et 8 février 2008

Catégories: Blog Société

Multicanal, innovations et SI

ven, 08/27/2010 - 09:44


A l’Ă©poque de la bulle Internet, les « brick-and-mortar » Ă©taient destinĂ©s tout simplement Ă  disparaĂźtre face Ă  l’Ă©mergence des « pure-players » internet. Il Ă©tait alors vital pour toute sociĂ©tĂ© « classique » souhaitant survivre de disposer d’un site web, si possible marchand. Un crack et 10 ans plus tard, nombre de pure players ont disparu, certains sont maintenant des gĂ©ants, et les « brick-and-mortars » sont bien prĂ©sents sur le marchĂ©.

Une nouvelle rĂ©volution est entamĂ©e avec la mobilitĂ© et l’ubiquitĂ© d’internet, portĂ©es en particulier par l’avĂšnement de l’iPhone et autres smartphones. Internet s’est dĂ©mocratisĂ© et l’homme de la rue a appris Ă  se servir des outils que ce medium met Ă  portĂ©e de sa main. La possibilitĂ© de consulter le web Ă  tout moment et en toute occasion vient modifier l’importance accordĂ©e Ă  ce medium. Au delĂ  d’offrir un simple site marchand, il s’agit maintenant de tirer partie des synergies possibles entre ces diffĂ©rents canaux et des utilisations faites d’Internet. Le ROPO (Research Online, Purchase Offline) devient par exemple un service nĂ©cessaire pour toutes les enseignes pour attirer les clients qui souhaitent s’assurer de la disponibilitĂ© de l’article avant de se dĂ©placer ou qui ne veulent pas payer de frais de livraison.

Or du cĂŽtĂ© des anciens « brick-and-mortar », la mise en ligne d’un site marchand s’est rarement accompagnĂ©e d’une rĂ©flexion sur les relations entre le canal web et les magasins physiques. Des silos opĂ©rationnels et SI sĂ©parent souvent la gestion du site web et celle des magasins physiques. Pourtant, c’est le tissage de liens Ă©troits entre le web et le monde physique qui doit permettre non seulement d’accompagner un client sur l’ensemble de son parcours, qu’il soit sur internet ou dans la rue (et donc Ă  le suivre sur diffĂ©rents canaux), ou de lui offrir de nouveaux services tels que le ROPO, mais aussi de dĂ©gager de nouvelles synergies dans les organisations. Ainsi, pour commander en magasin un article en rupture de stock et le faire livrer, l’utilisation d’une plate-forme logistique spĂ©cialisĂ©e dans l’expĂ©dition, par exemple la plate-forme adossĂ©e au site marchand, se rĂ©vĂšle plus efficace qu’une gestion des livraisons par chaque magasin.

Cette capacitĂ© Ă  tirer des synergies entre les diffĂ©rents canaux de vente est un facteur de dĂ©veloppement majeur. En effet, un distributeur US, Nordstrom, a fait le calcul qu’un client « multi-canal » dĂ©pense quatre fois plus qu’un client « mono-canal » et que le recours au stock magasin pour rĂ©pondre aux ruptures de stock sur le site marchand a permis de doubler le taux de conversion des recherches en ventes (Source : article du International Herald Tribune).

Du point de vue du SI, cette capacitĂ© demande en gĂ©nĂ©ral une rĂ©volution copernicienne pour passer d’une orientation purement « produits » historique Ă  une orientation « clients » et mettre en place une gestion des donnĂ©es en temps rĂ©el dans un systĂšme centralisĂ©. Elle implique donc, non seulement des projets d’organisation, mais Ă©galement des refontes majeures dans la rĂ©partition des systĂšmes d’information et dans leur mise en oeuvre, avec une gestion dĂ©licate du dĂ©ploiement de ces nouveaux outils. Elle exige Ă©galement une attention particuliĂšre Ă  l’arrivĂ©e de nouveaux canaux ou Ă  de nouvelles utilisations des canaux existants. Pour ce faire, le systĂšme d’information doit bien sĂ»r rester maĂźtrisĂ© mais aussi ouvert et Ă©volutif. Plus qu’adaptĂ©, on lui demande surtout d’ĂȘtre adaptable. Et sur ce dernier point, les « pure players » ont pris une longueur d’avance sur les « brick-and-mortar » aussi bien dans leurs mĂ©thodes de dĂ©veloppement que dans la gestion de leur SI

Catégories: Blog Société

Configuration de WCF

mer, 08/18/2010 - 15:19


J’ai constatĂ© Ă  de nombreuses reprises que des problĂšmes de montĂ©e en charge revenaient souvent dĂšs lors qu’on utilisait WCF. WCF, pour Windows Communication Foundation, est le protocole liĂ© au framework .Net qui permet la communication distante. Cela est, la plupart du temps, du Ă  une vision « magique » de WCF, qui est censĂ© fonctionner tout seul, sans configuration. Sauf qu’en rĂ©alitĂ©, cela ne marche pas. Voici donc quelques clefs pour comprendre comment configurer et utiliser WCF.

Configuration

WCF possĂšde plusieurs paramĂštres de configuration qui dĂ©terminent sa maniĂšre de gĂ©rer les requĂȘtes. Une analogie qui permet de bien comprendre leur rĂŽle est celle de Theme Hospital, un jeu datant d’un certain nombre d’annĂ©es.

Parcours d’un malade

Dans cette mĂ©taphore, un appel WCF est comparĂ© Ă  un malade qui va se faire soigner. Tout d’abord il dĂ©termine comment se rendre Ă  l’hĂŽpital, s’il y a plusieurs moyens, puis se prĂ©sente Ă  l’accueil pour crĂ©er un dossier, va ensuite en salle d’attente en attendant que soient libre Ă  la fois une salle de consultation et un mĂ©decin pour le recevoir. Il va alors Ă  cette consultation, qui reprĂ©sente le traitement effectif de la demande. Les diffĂ©rents Ă©lĂ©ments de ce parcours sont guidĂ©s par des paramĂštres de configuration, que nous allons dĂ©tailler.

MaxConcurrentInstance

Ce paramĂštre reprĂ©sente le nombre de moyens d’accĂšs Ă  votre hĂŽpital (routes, hĂ©licoptĂšre, ambulance, tĂ©lĂ©portation,
). Selon la maniĂšre dont est configurĂ© un autre paramĂštre, InstanceContextMode, la stratĂ©gie des patients sera diffĂ©rente.

  • InstanceContextMode=Single : Tout le monde emprunte la mĂȘme voie d’accĂšs. Le paramĂštre MaxConcurrentInstance ne sert donc Ă  rien
  • InstanceContextMode=PerSession : Tous les patients venant du mĂȘme endroit (i.e. toutes les requĂȘtes venant du mĂȘme client) empruntent la mĂȘme voie d’accĂšs. Il y a donc besoin d’autant de voie d’accĂšs que de clients diffĂ©rents
  • InstanceContextMode=PerCall : Chaque patient emprunte sa voie propre. Il faut donc prĂ©voir un nombre important de voies d’accĂšs, et donc une valeur Ă©levĂ©e pour le paramĂštre MaxConcurrentInstance
MaxConcurrentSessions

Ce paramĂštre reprĂ©sente le nombre de salles de consultation, et donc le nombre de requĂȘtes qu’il est possible de traiter en parallĂšle. Attention cependant, une salle de consultation sans mĂ©decin est inutile. Ce paramĂštre doit donc avoir une valeur proche de MaxConcurrentCalls, bien que lĂ©gĂšrement infĂ©rieure, afin de ne pas avoir de salle vide. Il faut Ă©galement noter que, les malades Ă©tant quelque peu Ă©litistes, ils souhaitent une salle de consultation dĂ©diĂ©e Ă  eux et aux malades provenant du mĂȘme endroit. Une session est donc créée par client se connectant.

MaxConcurrentCalls

Ce paramĂštre reprĂ©sente le nombre de mĂ©decins. Il y en faut un peu plus que de salles de consultation, parce qu’il arrive qu’un mĂ©decin fasse une pause. Techniquement, cela signifie qu’une fois la session créée, il faut libĂ©rer du temps processeur pour traiter l’appel, et que cela se base sur le nombre de threads allouĂ©es par le ThreadPool (sur lequel nous allons revenir). Il faut donc prĂ©voir les temps de switch et de concurrence entre threads qui peuvent conduire Ă  la « pause » prise par les mĂ©decins.

MaxConnections

Ce paramĂštre reprĂ©sente la taille de la salle d’attente. Cela est quelque peu biaisĂ© dans la mesure oĂč sont comptabilisĂ©s aussi bien les malades en attente que ceux en consultation. Ainsi, l’augmentation de ce paramĂštre fournira une plus grande possibilitĂ© de mise en tampon des requĂȘtes.

ListenBacklog

Ce paramĂštre reprĂ©sente le nombre de siĂšges devant l’accueil. Les patients ne sont pas encore enregistrĂ©s auprĂšs de l’hĂŽpital et attendent qu’une charmante secrĂ©taire veuille bien s’occuper d’eux. De la mĂȘme maniĂšre que dans le monde rĂ©el, ce paramĂštre doit ĂȘtre maintenu assez bas. Le patient n’est en effet pas encore dans le systĂšme et perdra vite patience. Cela correspond Ă  une connexion TCP en Ă©tat Half-open et se traduit par un timeout assez court au niveau du systĂšme. Augmenter ce paramĂštre conduit donc simplement Ă  dĂ©layer la remontĂ©e d’erreur au client, et Ă  changer la nature de l’erreur qui passe de « il n’y a plus de place » Ă  « j’ai attendu trop longtemps », ce qui complique le dĂ©bogage.

Préconisations

Bien qu’il soit impossible de donner des valeurs idĂ©ales pour ces paramĂštres, puisqu’elles dĂ©pendent bien Ă©videmment du contexte applicatif, il est possible de donner des relations entre ces paramĂštres :

  • MaxConcurrentInstance doit ĂȘtre dimensionnĂ© en fonction de la stratĂ©gie dĂ©finie par le paramĂštre InstanceContextMode et du nombre de clients.
  • MaxConcurrentSessions doit ĂȘtre dimensionnĂ© en fonction du nombre de clients.
  • MaxConcurrentCalls doit ĂȘtre lĂ©gĂšrement supĂ©rieur Ă  MaxConcurrentSessions.
  • MaxConnections doit ĂȘtre supĂ©rieur aux deux prĂ©cĂ©dents et dimensionnĂ© en fonction des timeout positionnĂ©s. Il faut en effet Ă©viter que les malades en salle d’attente perdent patience, lĂ  encore dans l’optique de remonter au plus vite les erreurs.
  • ListenBacklog doit ĂȘtre bas.

À part pour ce dernier, il est Ă  noter que sur dimensionner les paramĂštres n’a que trĂšs peu d’influence sur les  performances. En effet, il s’agit de maximums, le systĂšme ne crĂ©ant les ressources qu’à la demande. Il faut cependant tenir compte des pics de communication, afin d’éviter que la crĂ©ation et le maintien des ressources liĂ©es Ă  WCF ne prenne tout le temps de processeur disponible.

Autres éléments ThreadPool

Tout est configurĂ©, les paramĂštres sont bons, et pourtant, cela ne fonctionne toujours pas ? Normal, vous n’avez pas assez de threads dans votre ThreadPool. Avec lĂ  encore, l’effet baguette magique, qui pousse Ă  croire que le ThreadPool va fonctionner pour vous dans sa configuration par dĂ©faut. Pour comprendre l’influence du ThreadPool, il faut savoir que d’une part, chaque appel WCF est traitĂ© dans un thread d’I/O asynchrone, gĂ©rĂ©e par le ThreadPool, et d’autre part, que le ThreadPool Ă  un fonctionnement particulier.

En effet, l’objectif ultime du ThreadPool, sa raison d’ĂȘtre, est d’amener ou de ramener le nombre de worker threads et de thread d’I/O asynchrones Ă  son idĂ©al, qui est par dĂ©faut Ă©gal au nombre de cƓurs logiques de la machine. Par ailleurs, il est cadencĂ© Ă  500ms, et obĂ©it Ă  l’algorithme suivant :

Sur un appel :

Si nombre_de_threads < idéal
Alors créer un thread
Sinon mettre en attente

Sur déclenchement du timer interne (500ms)

Si il y a au moins un demande en attente
Alors créer un thread
Sinon supprimer un thread

Pour illustrer son fonctionnement, prenons un cas d’école. Imaginons que chacune de vos threads peut traiter 10 appels par 500 ms, que vous recevez 50 appels par 500 ms et que vous avez 2 cƓurs. On obtient le graphe suivant :

Figure 1 Évolution des traitements WCF dans le temps

On s’aperçoit que le fonctionnement du ThreadPool le fait osciller autour de l’idĂ©al. Dans la pratique, le ThreadPool Ă©tant optimisĂ©, on finit par arriver Ă  l’idĂ©al de traitement (dans notre cas, 5 threads), mais on s’aperçoit que cela peut prendre du temps et que, pendant cette pĂ©riode de ‘calibration’, les requĂȘtes entrantes peuvent patienter un temps trĂšs long, au point mĂȘme parfois de dĂ©clencher des timeouts.

La solution consiste Ă  rĂ©gler manuellement l’idĂ©al du ThreadPool. Cela se fait par l’appel Ă  la mĂ©thode System.Threading.ThreadPool.SetMinThreads, en dimensionnant les paramĂštres de l’appel en fonction de la capacitĂ© de traitement de vos services WCF. Attention cependant Ă  ne pas trop relever ce paramĂštre, puisque cela conduit Ă  la crĂ©ation de nombreux threads, ce qui peut ĂȘtre dommageable (temps de switch + taille mĂ©moire de chaque thread)

Dans la pratique, ce nombre est largement supĂ©rieur au nombre de cƓurs logiques de la machine. Il ne faut donc pas hĂ©siter Ă  monter jusqu’à une cinquantaine de threads par cƓurs, sans que cela n’impacte rĂ©ellement les performances, tout en gardant en tĂȘte que le dimensionnement idĂ©al est « au plus juste » et se dĂ©couvre par essais successifs.

Conclusion

Il n’y a pas de baguette magique ! MĂȘme si WCF est plus simple Ă  utiliser que ses ainĂ©s, il demeure cependant qu’il faut savoir le configurer correctement afin d’en tirer le plein potentiel.

Catégories: Blog Société

Post-Its ou Dashboard Online ?

mar, 08/17/2010 - 20:18


Dans les projets agile, on utilise souvent des dashboards ou des tableaux Kanban. On les retrouve, soit sous forme de Post-its au murs :

Exemple de dashboard

soit sous forme électronique :

image de kanban electronique est une image de greenhopper prise sur http://www.atlassian.com/software/greenhopper/

La forme électronique présente plusieurs avantages :
- pas de post-its qui se décollent
- possibilitĂ© d’interagir entre Ă©quipes distantes
- possibilitĂ© de suivre automatiquement le temps de rĂ©alisation d’une tache
- etc.

Mais on leur reproche de perdre au moins deux gros intĂ©rĂȘts :
1) Être visible Ă  tout moment par l’Ă©quipe
2) Pouvoir interagir directement avec les Post-Its

Un simple vidéo-projecteur peut suffire a résoudre le premier point.

Le deuxiÚme semble plus compliqué, la vidéo suivante vous montre le contraire.

Suggestion d'articles :

  1. Comment concevoir vos applications iPhone ? Avec le post-it OCTO !

Catégories: Blog Société

ERP et agilité

mar, 08/17/2010 - 17:56


Aujourd’hui les grands groupes industriels font face Ă  une multiplication des solutions de gestion dans leurs filiales avec un constat, plus on s’éloigne du centre et plus les solutions se font hĂ©tĂ©rogĂšnes et exotiques. Ces diffĂ©rentes solutions vont de SAP, leader du marchĂ© pour lequel les processus sont presque gravĂ©s dans le code jusqu’Ă  un simple ensemble d’outils de bureautique : un tableur pour suivre les commandes et un Ă©diteur de texte pour Ă©mettre des factures. Entre ces deux extrĂȘmes il existe quelques acteurs majeurs : Oracle EBS, SAGE, NAVISION… et de nombreux Ă©diteurs locaux.

Comment rationaliser un écosystÚme aussi diversifié ?

Au niveau du groupe les gains d’une solution uniforme sur l’ensemble des entitĂ©s sont Ă©vidents :

  • reporting simplifiĂ©
  • Ă©conomies rĂ©alisĂ©e sur la formation aux outils
  • capitalisation des Ă©quipes IT
  • rationalisation du SI

D’un autre cotĂ©, les filiales en devenir veulent ĂȘtre capables d’évoluer rapidement sans ĂȘtre contraintes par un outil mais en ayant la possibilitĂ© d’informatiser un processus qui Ă©merge de leur organisation. Et cela passe donc par des choix diffĂ©rents de ce qui est proposĂ© par la maison mĂšre. Il sera souvent prĂ©fĂ©rĂ© une solution ERP intermĂ©diaire au core model pour de nombreuses raisons dont :

  • des coĂ»ts moindres
  • une maĂźtrise du pĂ©rimĂštre des processus implĂ©mentĂ©s
  • la rapiditĂ© de mise en Ɠuvre

Ces points se rĂ©sument Ă  un choix entre simplicitĂ© et complexitĂ© qui est proposĂ© par le centre. Or le coeur est complexe parce qu’il est riche et cette richesse est intrinsĂšquement lourde, ce qui est un atout au centre mais deviendra un frein dans les jeunes filiales.

Certains Ă©diteurs essaient de pallier Ă  cette problĂ©matique en proposant des solutions distinctes pour des BU de tailles diffĂ©rentes, c’est le cas par exemple avec SAP Business One, mais ce modĂšle ne fonctionne pas. Les synergies entre les solutions sont dĂ©truites au fur et Ă  mesure que l’on essaie d’adresser les besoins de l’une ou l’autre des cibles.

Alors comment faire ? Et surtout, comment bien faire ?

A l’approche top-down qui dĂ©finit une cible au centre, nous allons prĂ©fĂ©rer l’approche bottom-up. Construire une application qui rĂ©ponde aux besoins des petites entitĂ©s, puis augmenter le pĂ©rimĂštre avec des entitĂ©s plus importantes jusqu’à rejoindre le core model
 peut-ĂȘtre.
Nous allons donc nous inspirer de la méthodologie agile, itérative, pour construire le coeur de cet ERP de façon incrémentale.

La base doit ĂȘtre acceptable par de toutes petites structures et solide afin de pouvoir grandir. Pour cela les critĂšres de choix vont ĂȘtre les suivants :

  • des coĂ»ts rĂ©duits
  • une technologie Ă©prouvĂ©e
  • un pĂ©rimĂštre fonctionnel qui couvre 80% des besoins

C’est donc naturellement que nous allons chercher des candidats du cotĂ© des projets open source matures : OpenERP, Compiere, Neogia, ERP5…. Souples et robustes, ils sont modulaires ce qui est l’empreinte d’un dĂ©veloppement communautaire au niveau de l’architecture logicielle. Cette modularitĂ© est la garantie d’une Ă©volutivitĂ© future. De plus, les projets open source nous apportent des technologies ouvertes et standardisĂ©es facilitant l’intĂ©gration avec d’autres systĂšmes.

Et c’est un point important, l’approche d’OCTO n’est pas de crĂ©er un second core model dĂ©corĂ©lĂ© du centre, en concurrence avec le centre. Il s’agit de rĂ©aliser un systĂšme qui soit potentiellement une marche vers le systĂšme central, une marche qui rapproche du centre. Ainsi cette solution apporte de la valeur Ă  la filiale ET au centre.

Le choix d’une approche incrĂ©mentale pour la rationalisation du SI est diffĂ©renciante dans le sens oĂč il s’agit d’accompagner la crĂ©ation de valeur depuis le dĂ©but d’une activitĂ©. Le systĂšme qui va ĂȘtre implĂ©mentĂ© doit aider l’organisation cible sur un cycle court en terme de rĂ©alisation de « business » et sur un cycle long en l’aidant Ă  s’intĂ©grer dans le core model du centre. Et ceci de façon progressive. La mĂ©thode agile va nous permettre de faire Ă©voluer en douceur l’ERP retenu vers les limites fixĂ©es : couvrir X% des processus, supporter une charge maximum de X utilisateurs…

Bien que les notions d’ERP et d’agilitĂ© puissent paraĂźtre antinomiques, il s’avĂšre possible de profiter du meilleur des deux mondes dans ces projets souvent rĂ©putĂ©s pour ĂȘtre trĂšs lourds Ă  cadrer, Ă  rĂ©aliser et Ă  mettre en oeuvre.

Dans un prochain article, nous verrons comment aborder ce type de projet d’un point de vue organisationnel et fonctionnel. Les projets ERP forment intrinsĂšquement un ensemble de fonctionnalitĂ©s fortement imbriquĂ©es et nous verrons comment, avec une approche agile / incrĂ©mentale, nous allons pouvoir segmenter ces projets dans des livraisons frĂ©quentes et fonctionnelles apportant de la valeur aux mĂ©tiers rĂ©guliĂšrement.

Suggestion d'articles :

  1. Agilité et SOA ?

Catégories: Blog Société

DevOps : le mouvement qui tend à “Agilifier” votre DSI

ven, 08/13/2010 - 13:00


La communautĂ© « DevOps » nous invite Ă  repenser la frontiĂšre classique de nos organisation, sĂ©parant d’un cĂŽtĂ© les Ă©tudes, i.e. ceux qui Ă©crivent le code (le “Build”) et de l’autre cĂŽtĂ© la production, i.e. ceux qui dĂ©ploient et exploitent ces applications (le “Run”).

2 groupes se retrouvent dans le mouvement DevOps et apportent un peu de fraicheur dans ces réflexions aussi anciennes que les DSIs :

  • les agilistes qui ont levĂ© la « contrainte » cĂŽtĂ© dĂ©veloppement, et sont maintenant capable de « livrer » beaucoup plus souvent du logiciel valorisĂ© par le client…mais regrettent que « la prod ne suive pas »
  • des experts ou des managers de la « prod » des grands du web (Amazon, Facebook, LinkedIn…) partageant leurs retours d’expĂ©rience sur leur façon d’envisager cette frontiĂšre

  • Au delĂ  des fractures organisationnelles, les prĂ©occupations des Ă©tudes et de la production sont bien distinctes et respectivement louables.
    Les Ă©tudes recherchent plus de rĂ©activitĂ© (sous la pression du mĂ©tier et du marchĂ© notamment) : il faut aller vite, ajouter de nouvelles fonctionnalitĂ©s, rĂ©adapter les directions, refactorer, upgrader les frameworks, dĂ©ployer rapidement pour tester…La nature mĂȘme du code (“Soft”) est celle ci : malĂ©able, adaptable.
    A l’inverse, la production a besoin de stabilitĂ© et de standardisation. StabilitĂ© car il est souvent difficile d’anticiper quels impacts auront telles modifications de l’infrastructure : un disque local qui devient un disque rĂ©seau mais impacte les temps de rĂ©ponses, ou bien un changement de code qui impacte fortement la consommation CPU et par la mĂȘme le “capacity planning”. Standardisation enfin car la production veut s’assurer que certaines rĂšgles (sĂ©curitĂ© rĂ©seaux, configuration des fichiers de logs…) sont uniformĂ©ment respectĂ©es.

    TrĂšs souvent, la frontiĂšre entre ces deux populations se concrĂ©tise par la phase de dĂ©ploiement oĂč les Ă©tudes “livrent” ou parfois se « dĂ©barrassent » de leur code et oĂč ce dernier va suivre un long chemin au travers des couloirs de Mise En Production. Et ce point prĂ©cis cristallise la divergence d’objectifs. Les Ă©tudes voudraient la main sur une partie de l’infrastructure, pouvoir dĂ©ployer rapidement, Ă  demande et simplement sur les environnements (a minima ceux de “tests” au sens large). A l’inverse, la production a le souci des environnements, de l’utilisation des ressources, de la consommation de bande passante et de la fiabilitĂ© en gĂ©nĂ©ral. Ce que veut la production : des fichiers de log standards, une configuration du serveur HTTP identique…

    Sauf que ces deux groupes ont un objectif commun : faire fonctionner le systĂšme…et finalement le dĂ©ploiement n’est pas le plus important dans cette problĂ©matique mĂȘme si c’est certainement une des activitĂ©s les plus consommatrices en ressource : la moitiĂ© du temps de la production est ainsi consommĂ©e par le dĂ©ploiement ou des problĂšmes liĂ©s au dĂ©ploiement.

    C’est donc certainement le premier levier d’amĂ©lioration mais non l’unique. Damon Edwards et John Allspaw nous rappellent :

    • qu’il s’agit de partager des mĂ©triques et d’ĂȘtre capable de transformer des variables techniques (augmentation des temps de rĂ©ponse…) en variables business (baisse du CA gĂ©nĂ©rĂ©…). Et qu’une des clĂ©s du succĂšs d’interprĂ©tation de ces mĂ©triques est la collaboration entre les Ă©tudes (la comprĂ©hension du code) et la production (la comprĂ©hension des serveurs, du rĂ©seau…)
    • “qu’agilifier” le processus de dĂ©veloppement c’est bien mais que le vĂ©ritable enjeu c’est l’agilitĂ© « business » qui passe par la rĂ©duction du dĂ©lai global “from concept to cash”, de l’idĂ©e Ă  la mise au production. Cela passera entre autres par des dĂ©ploiements plus “agiles”, sur l’exemple de Flickr, qui rĂ©alise 10 dĂ©ploiements quotidiens

    Atteindre cet objectif ne se fera pas sans douleur et trouve des leviers d’amĂ©lioration dans 4 axes :

    • de l’outillage qui permettra d’industrialiser l’infrastructure et de rassurer la production sur la façon dont cette infrastructure est utilisĂ©e par les Ă©tudes. C’est un des gĂšnes du cloud : le self service. Les offres de cloud public sont matures sur le sujet mais certaines offres (VMWare par exemple) visent Ă  reproduire ces modes de fonctionnement en interne. Mais sans forcĂ©ment aller Ă  ces niveaux de maturitĂ©, on peut imaginer l’utilisation d’outils type Puppet, Chef ou CFEngine…
    • de l’architecture qui peut permettre de dĂ©corrĂ©ler les cycles de dĂ©ploiements, de dĂ©ployer du code sans pour autant dĂ©ployer la fonctionnalitĂ©…
    • de l’organisationnel qui vous amĂšnera peut-ĂȘtre Ă  vous aussi implĂ©menter les patterns d’Amazon “two pizzas team” et “you build it, you run it”
    • du processus qui permettra de fluidifier tous ces Ă©changes. Comment dĂ©ployer plus souvent ? Comment limiter ses risques en dĂ©ployant progressivement ? Comment appliquer les leçons de « flux » tirĂ©es de Kanban Ă  la production ? Comment repenser les mĂ©canismes de communication et de coordination Ă  l’oeuvre sur la frontiĂšre Ă©tudes/production ?

    En dĂ©finitive ces 4 axes nous permettront d’atteindre les objectifs supĂ©rieurs de DevOps : amĂ©liorer la collaboration, la confiance et l’alignement d’objectifs entre les Ă©tudes et la production.

    Catégories: Blog Société

    Transactions et traitement métier en Grails

    jeu, 08/12/2010 - 13:03


    DĂ©velopper en Groovy et Grails simplifie grandement le dĂ©veloppement d’une application Web. PassĂ©e l’Ă©tape du prototype, les simplifications apportĂ©es par Grails ne vous Ă©pargneront pas de devoir vous plonger dans les frameworks sous-jacents afin de rĂ©soudre des problĂ©matiques plus complexes.

    Qu’en est-il des transactions en Grails ? Sur un sujet aussi sensible, il est important de comprendre quel est ce comportement par dĂ©faut choisi par Grails.

    La documentation de Grails est un peu sommaire, ne traitant vraiment que de oĂč et comment les dĂ©clarer mais pas vraiment de comment les utiliser. Les premiers points ne seront pas rĂ©-expliquĂ©s ici, vous pouvez vous rĂ©fĂ©rer Ă  la documentation.

    L’article complet, en anglais uniquement, aborde les points suivants :

    • le modĂšle transactionnel de Grails, par dĂ©faut dans la couche de Services
    • les risques et piĂšges de ce modĂšle, Ă  savoir un traitement mĂ©tier en dehors d’une transaction ou rĂ©parti sur plusieurs transactions
    • les bonnes pratiques pour gĂ©rer et dĂ©clarer les transactions en Grails
    • les interactions parfois Ă©tranges entre les transactions et la session Hibernate
    • une alternative au modĂšle transactionnel de Grails pour simplifier la gestion des transactions et supprimer les risques identifiĂ©s auparavant. L’article inclus le code nĂ©cessaire Ă  cette modification et explique les impacts d’une telle modification.

    Vous pouvez retrouver le code et les tests mentionnés dans cet article dans notre repo SVN .

    Suggestion d'articles :

    1. GRAILS et FitNesse : au service de l’innovation mĂ©tier
    2. Grails Maven Plugin 0.3
    3. Architecture Dynamique basée sur la solution Grails

    Catégories: Blog Société

    DĂ©ploiement d’une application sur l’infrastructure AMAZON (3/3)

    mer, 08/11/2010 - 09:53


    Dernier article de la sĂ©rie consacrĂ©e aux services web AMAZON, celui-ci se veut avant tout un retour d’expĂ©rience.

    Alors AWS ?

    Pour rappel dans l’étude menĂ©e, nous devions Ă©tudier l’offre d’AMAZON sur trois axes : facilitĂ© de mise en Ɠuvre, coĂ»ts et montĂ©e en charge.

    FacilitĂ© de mise en Ɠuvre

    L’application que nous avons dĂ©ployĂ©e repose sur un certain nombre de services AWS. Sans rentrer dans les dĂ©tails, l’application de test assurait les fonctions suivantes :

    • Stockage : Transfert de fichiers mĂ©dias depuis le poste client
    • Serveur Web : Navigation au sein d’une bibliothĂšque de fichiers mĂ©dias
    • Conversion : Conversion de fichiers mĂ©dias dans diffĂ©rents bitrates
    • Streaming : Lecture de fichiers mĂ©dias

    Pour répondre à ces besoins, nous avons utilisé les services AMAZON suivants :

    • Elastic Compute Cloud (EC2) pour la conversion et la logique de navigation.
      • CloudWatch qui permet de monitorer une application
      • Auto Scaling pour permettre l’allocation dynamique de nouvelles machines virtuelles
      • Simple Queue Service (SQS) : le service de messagerie middleware de type MOM pour la communication entre machines virtuelles
      • Simple Storage service (S3) : stockage de type clĂ©/valeur pour l’accĂšs en streaming aux fichiers mĂ©dia
      • Relational Database Service (RDS) : stockage de type SGBDR basĂ© sur MySQL pour la gestion des utilisateurs et des arborescences de fichiers

    De nombreux services AWS (CloudFront, SimpleDB, VirtualPrivateCloud 
) n’ont pas Ă©tĂ© mis en oeuvre. NĂ©anmoins, nous pouvons tirer les conclusions suivantes pour ceux utilisĂ©s :

    • La comprĂ©hension des diffĂ©rents concepts et possibilitĂ©s des AWS nĂ©cessitent un ticket d’entrĂ©e non nĂ©gligeable. Maitriser la terminologie, les cas d’utilisations, les possibilitĂ©s de chaque service 
 demande du temps. Ce point est Ă  moduler en fonction du background technique plus ou moins important de l’architecte. Les nĂ©ophytes en infrastructure y seront d’autant plus sensibles.
    • Les ressources liĂ©es aux AWS sont nombreuses, qu’il s’agisse de la documentation officielle, claire et complĂšte, des diffĂ©rents projets open source ou encore de la communautĂ© d’utilisateurs. Vous n’ĂȘtes pas seul et las AWS ne sont pas des boites noires.
    • Enfin, cela peut paraitre Ă©vident mais ce ne l’est pas toujours : les services AWS fonctionnent tels qu’annoncĂ©s. Nous n’avons pas eu de surprise, que ce soit des bugs ou des comportements Ă©tranges.
    Coûts

    Le calcul des coĂ»ts par anticipation est quelque chose d’assez complexe, c’est sans doute pourquoi AMAZON propose d’utiliser un outil pour vous aider. La tarification se fait par service mais pour la plupart des services, la bande passante utilisĂ©e intervient dans le calcul du prix. Qui plus est, ces donnĂ©es qui traversent les firewalls des data centers d’AMAZON ont des tarifs dĂ©gressifs en fonction de leur volumes !

    Attardons nous sur cette notion de données entrantes et sortantes des data centers.

    • Il n’y a pas de surcoĂ»t lors de l’interaction de services AWS au sein d’une mĂȘme rĂ©gion. Par exemple, l’accĂšs Ă  un bucket S3 situĂ© en Irlande depuis une instance EC2 exĂ©cutant elle aussi en Irlande, ne gĂ©nĂšrera pas de frais liĂ©s au transfert de donnĂ©es.
    • Entre des instances EC2 situĂ©es dans diffĂ©rentes zones de disponibilitĂ©s mais dans la mĂȘme rĂ©gion, le transfert de donnĂ©es sera facturĂ© Ă  un prix dit Regional Data Transfer.
    • Le transfert de donnĂ©es entre des services AWS basĂ©s dans diffĂ©rentes rĂ©gions est facturĂ© au prix dit Internet Data Transfer pour chaque cotĂ© du transfert (entrĂ©e et sortie).

    Eléments ayant un impact sur le prix

    Sans rentrer dans la tarification détaillée des AWS, voici quelques indications

    • La rĂ©gion d’utilisation a un impact sur la plupart des coĂ»ts des services.
    • Pour les services associĂ©es Ă  des instances (EC2, RDS), chaque heure dĂ©butĂ©e est intĂ©gralement facturĂ©e, que l’instance soit sollicitĂ©e ou non.
    • Pour les prix des instances EC2, il est important de signaler qu’une distinction est faĂźte entre les OS Linux et Windows. La diffĂ©rence de prix peut selon la configuration s’élever jusqu’à 40 % de plus pour une instance Windows. Ensuite, comme indiquĂ© lors du premier article, le  configuration matĂ©rielle bas de gamme est 25 fois moins chĂšre que la plus chĂšre (de 0.10$/heure contre 2.88$/heure). Enfin, AMAZON propose diverses offres pour rĂ©duire le coĂ»t horaire :
      • Reserved Instances – l’utilisateur rĂ©serve une instance pour une ou trois annĂ©es (230$ pour un an ou 350$ pour trois ans dans le cas d’une instance d’entrĂ©e de gamme), et bĂ©nĂ©ficie ainsi de prix horaires rĂ©duits (environ 50% de moins).
      • Spot instances – en fonction de la charge du data center, AMAZON Ă©tablit toutes les 30 minutes un Spot price. Dans ce systĂšme d’enchĂšres, l’utilisateur dĂ©finit un prix maximum, une rĂ©gion, une configuration matĂ©rielle et un nombre d’instances. Si le Spot price correspond Ă  l’offre faite par l’utilisateur, celui-ci se voit attribuer les instances demandĂ©es.
    • CloudWatch ajoute environ 0.015$/heure/instance
    • Le coĂ»t d’une instance RDS va de 0.12$/heure Ă  3.10$/heure en fonction de la configuration matĂ©rielle. L’espace de stockage est facturĂ© 0.10 $/Go/mois et l’espace supplĂ©mentaire pour les backups vaut 0.15 $/Go/mois. 0.10$ donne droit Ă  1 million de requĂȘte SQL. L’activation de la rĂ©plication entre zones de disponibilitĂ©s double les prix prĂ©cĂ©dents sauf pour le stokcage des backups et la facturation par requĂȘtes
    • S3 de 0.15$ Ă  0.055$/Go/mois en fonction du volume de stockage. La facturation par requĂȘte est dĂ©coupĂ©e en deux catĂ©gories : les requĂȘtes PUT, COPY, LIST facturĂ©es 0.01$ pour 1000  et les autres requĂȘtes dont GET facturĂ©es 0.01$ pour 10 000
    • Les coĂ»ts de transfert des donnĂ©es sont communs aux diffĂ©rents AWS :
      • Regional Data Transfer : 0.01$/Go/mois pour le trafic entrant et sortant
      • Internet Data Transfer gratuit jusqu’au 1 novembre 2010, les donnĂ©es entrantes seront facturĂ©es 0.10$ /Go/mois. Pour les donnĂ©es sortantes, le premier Go par mois est gratuit, ensuite il vous en coutera 0.15$/Go/mois pour les 10 premiers To oĂč un tarif dĂ©gressif s’applique jusqu’à atteindre 0.08$/Go/mois si vous utilisez plus de 150 To/mois

    Cette complexitĂ© tarifaire impose d’avoir une grande connaissance de l’application qui va ĂȘtre dĂ©ployĂ©e. Cela peut ne pas poser de trop gros problĂšmes dans le cas d’une application existante, dĂ©jĂ  en exĂ©cution au sein d’un SI interne puisque l’obtention de mĂ©trique pourra se faire par une instrumentation sommaire si elle n’est pas dĂ©jĂ  faite. En revanche, dans le cas d’une conception « from scratch » cela peut ĂȘtre moins aisĂ©. En outre, on notera que la tarification peut impacter les choix d’architecture : comment grouper les services au sein d’une mĂȘme rĂ©gion pour les limiter les coĂ»ts tout en ayant un dĂ©ploiement sur plusieurs sites ? Quelle granularitĂ© pour les messages SQS sachant que la facturation est faite par requĂȘte ? 


    Pour conclure cette partie, comme soulignĂ© dans l’article suivant, il est clair que comparĂ©e Ă  une solution d’hĂ©bergement classique, une offre d’IaaS comme celle d’AMAZON n’est pas avantageuse si l’on souhaite exĂ©cuter des instances en permanence. La vraie force de l’IaaS, c’est l’élasticitĂ©, le dimensionnement automatique pour suivre la montĂ©e en charge.

    Montée en charge

    Ce point Ă©tait l’un des plus important pour notre Ă©tude. Le service AutoScaling fourni par AMAZON fonctionne correctement : lorsque les critĂšres sont atteints la taille d’un groupe de machines.

    NĂ©anmoins, il est important de souligner que la pĂ©riode selon laquelle un groupe d’instances EC2 est dimensionnĂ©, doit ĂȘtre dĂ©terminĂ©e avec attention, au risque de lancer de multiples instances et donc de voir les coĂ»ts s’envoler. Supposons qu’un site web ait une courbe d’utilisation qui associĂ©e Ă  certains paramĂštres d’AutoScaling (typiquement la pĂ©riode de dimensionnement d’une heure) produise le diagramme de vie des instances EC2 suivant :

    Diagramme de vie des instances

    Ainsi, nous aurons consommĂ© : 12 heures pour l’instance 1, 6 heures pour l’instance 2, 4 heures pour l’instance 3 et 2 heures pour les instances 4, 5 et 6. Soit un total de 28 heures machines.

    Supposons maintenant que l’échelle de temps du graphique prĂ©cĂ©dent ne soit pas l’heure, mais la minute. Nous avons alors 6 heures machines Ă  payer – car chaque heure consommĂ©e est pleinement facturĂ©e – pour seulement 12 minutes de fonctionnement. Notons au passage que 4 instances auraient suffi. Cet exemple s’applique sur quelques minutes et quelques machines, imaginons maintenant que cela concerne des dizaines de machines pendant une annĂ©e…

    Dans une premiĂšre approche, on souhaite disposer d’un systĂšme trĂšs rĂ©actif et donc d’une pĂ©riode de dimensionnement trĂšs courte -  de l’ordre de quelques minutes. Or ce choix peut s’avĂ©rer ruineux.

    Donc

    Tout d’abord, et c’est positif, AMAZON WS existe depuis un certain temps et fonctionne bien : aucun plantage ou message d’erreur, une documentation claire et une communautĂ© importante font qu’il est assez agrĂ©able de travailler sur l’infrastructure AMAZON. Par ailleurs la portabilitĂ© est là : envie de rapatrier l ‘application chez vous ? C’est faisable.

    Par ailleurs, le cotĂ© ‘infra’ plus que ‘appli’ peut avoir son importance dans le choix du fournisseur car contrairement Ă  GOOGLE qui annonce : « ne vous inquiĂ©tez pas, nous gĂ©rons votre appli », AMAZON donne les outils pour gĂ©rer et maitriser son soft : nous savons oĂč sont les machines, les donnĂ©es, nous avons la possibilitĂ© de rester maĂźtre de notre soft. Le revers de la mĂ©daille est la quantitĂ© de facteurs Ă  gĂ©rer.

    Le premier de ces facteurs est la rĂ©activitĂ© de l’élasticitĂ©. Cette Ă©lasticitĂ© est la raison d’ĂȘtre du cloud computing IaaS, sinon autant aller chez un hĂ©bergeur. Voulez-vous dimensionner votre infrastructure toutes les 10 minutes, toutes les heures ou bien tous les jours ? La rĂ©ponse Ă  cette question passe par une maĂźtrise avancĂ©e de l’application Ă  dĂ©ployer.

    Par ailleurs, et c’est aussi vrai pour Microsoft et GOOGLE, les diffĂ©rents Ă©lĂ©ments Ă  prendre en compte pour une estimation budgĂ©taire et plus spĂ©cifiquement les volumes de donnĂ©es entrants et sortants des data centers AMAZON, nĂ©cessitent une maitrise de la volumĂ©trie de  son application. L’idĂ©al Ă©tant une application existante qu’il ne reste plus qu’Ă  outiller. En outre, l’aspect financier (volumĂ©trie, nombre de requĂȘtes 
) peut impacter l’architecture de l’application.

    AMAZON est la solution si il s’agit de faire une externalisation d’infra privĂ©e vers le Cloud – normal puisqu’il n’y a presque rien Ă  faire ! Pour du dĂ©veloppement from scratch, AMAZON se prĂȘte mieux Ă  du web-service, du batch ou du site web statique lĂ  ou on peut supposer que GOOGLE et MICROSOFT sont meilleurs pour des applis web, mais attention dans ce cas aux problĂšmes de portabilitĂ©. Rien ne vous empĂȘche de dĂ©ployer une archive WAR sur un TOMCAT au sein d’une instance EC2 mais le niveau d’abstraction offert par les solutions GOOGLE et MICROSOFT permet de faciliter grandement le dĂ©ploiement, vous avez beaucoup moins de questions Ă  vous poser. Par ailleurs, il est tout Ă  fait possible d’intĂ©grer AMAZON avec une autre solution.

    Pour terminer, il faut garder Ă  l’esprit que les choses Ă©voluent trĂšs vite dans le monde du Cloud Computing. Ainsi, GOOGLE supporte maintenant le SQL pour les App Engine Business alors que le principal point nĂ©gatif de GAE Ă©tait son systĂšme de Base de DonnĂ©es non SQL.

    De mĂȘme l’offre AMAZON a encore Ă©voluĂ© entre la fin du projet prĂ©sentĂ© ici (mars 2010) et la rĂ©daction du prĂ©sent document (Juin 2010) : le service de load balancing gĂšre les sessions http (sticky-sessions) tandis que cloud front supporte le protocole HTTPS

    Suggestion d'articles :

    1. DĂ©ploiement d’une application sur l’infrastructure AMAZON (2/3)
    2. DĂ©ploiement d’une application sur l’infrastructure AMAZON (1/3)
    3. Panorama des différentes offres de cloud computing : Amazon Web Services

    Catégories: Blog Société

    Retour sur le Green Challenge

    jeu, 08/05/2010 - 14:40


    Le Green Challenge Ă©tait un concours, ouvert lancĂ© dans le cadre de l’UniversitĂ© du SI 2010.
    Il avait pour objectif de faire Ă©merger des patterns de dĂ©veloppement permettant d’amĂ©liorer la sobriĂ©tĂ© des logiciels, ou “Green Patterns”. Il a mobilisĂ© 15 Ă©quipes, soit une cinquantaine de dĂ©veloppeurs, pendant 2 mois. Les gagnants

    Le concours s’est terminĂ© dĂ©but juillet et les gagnants ont Ă©tĂ© dĂ©signĂ©s lors d’une session USI 2010 dĂ©diĂ©e au challenge (voir vidĂ©o).

    Le jury du Green Challenge était composé de :

    • FrĂ©dĂ©ric Bordage, expert du Green IT ( animateur de greenit.fr)
    • Lionel LaskĂ©, directeur de l’innovation chez C2S (Groupe Bouygues)
    • Guillaume Plouin, en charge du projet chez OCTO Technology

    Il a désigné 3 équipes lauréates :

    • Julien  LAMANDE / Paul ELISE
    • Gabriel LANDAIS / Julien ADAM
    • Mickael Robert / Maxime RAMEAU / Florent DAVID

    Ces Ă©quipes ont rĂ©ussi Ă  faire baisser la consommation en Watts de l’application de 20% cĂŽtĂ© serveur (Google App Engine), et de 80% cĂŽtĂ© navigateur (mesure par l’AddOn GreenFox).

    Les graphiques suivants prĂ©sentent les Ă©conomies en Watts qu’ils ont rĂ©ussi faire au travers de leur application. Leurs rĂ©sultats sont comparĂ©s Ă  ceux de l’application de rĂ©fĂ©rence livrĂ©e au dĂ©but du challenge. Il y a un facteur 100 entre les unitĂ©s de mesures de GreenFox et celle d’AppEngine. Le gain maximum Ă©tait donc obtenu en travaillant sur la partie client de l’application.

    Les Green Patterns

    Les Green Patterns issues du Challenge sont présentées en détail dans cette page. Voici une synthÚse rapide :

    • RĂ©aliser le maximum de traitements cĂŽtĂ© serveur quitte Ă  rĂ©duire l’ergonomie Ă  l’essentiel
    • Profiler l’application pour identifier les traitements fortement consommateur de CPU
    • Optimiser ces traitements pour limiter le nombre d’opĂ©rations rĂ©alisĂ©es ou remplacer ces traitements par des librairies plus efficaces
    • PrĂ©-gĂ©nĂ©rer les affichages sur le serveur et Ă©viter le code interprĂ©tĂ© (JavaScript ou JSP)
    What’s next ?

    Nous allons publier GreenFox, l’AddOn Firefox dĂ©veloppĂ© pour mesurer les consommations CPU, dans l’écosystĂšme Mozilla.

    Nous aimerions diffuser les Green Patterns.
    Votre aide est la bienvenue pour relayer l’information et pointer vers cette page.
    Et si vous connaissez un site communautaire pertinent pour les publier, nous sommes preneurs…

    Suggestion d'articles :

    1. Participez au Green Challenge !
    2. Retour sur le BarCamp Java du Mardi 30 Septembre
    3. Retour d’expĂ©rience BPMN

    Catégories: Blog Société

    Revivez les sessions USI 2010 en video

    jeu, 07/29/2010 - 14:25


    L’Ă©dition USI Paris 2010, qui a eu lieu au Pavillon d’Armenonville les 1er et 2 juillet derniers, est certes terminĂ©e….

    Mais les premiers Webcasts sont enfin disponibles !

    Participants USI et lecteurs du blog OCTO vous pouvez maintenant revivre les sessions et les keynotes USI en allant sur le site de l’Ă©vĂ©nement : www.universite-du-si.com

    Suggestion d'articles :

    1. Revivez la keynote de Michel Serres Ă  USI 2008
    2. DĂ©couvrez l’Agenda des confĂ©rences USI Paris 2010
    3. USI 2009 : toutes les sessions disponibles dans le coffret DVD

    Catégories: Blog Société

    Xcode 3.2.3 , IOS4 et OCMock

    mer, 07/28/2010 - 09:30


    Afin de tester nos dĂ©veloppements iPhone nous utilisons largement les frameworks Google-Toolbox-for-Mac et OCMock (cf Tests unitaires et tests d’interface sur iPhone : État des lieux)
    AprĂšs la mise Ă  jour du SDK4 et le passage Ă  Xcode 3.2.3 nous avons eu une dĂ©sagrĂ©able surprise : nos frameworks de tests ne compilaient plus et jusqu’Ă  aujourd’hui on trouve trĂšs peu d’information sur la façon de rĂ©gler ce problĂšme.
    Voici comment nous nous y sommes pris :

    L’erreur de build rencontrĂ©e est la suivante :

    Undefined symbols:
    "_OBJC_CLASS_$_OCMockObject", referenced from:
    objc-class-ref-to-OCMockObject in WebServiceTest.o
    ld: symbol(s) not found

    Jusqu’Ă  maintenant nous ajoutions la bibliothĂšque OCMock.framework Ă  la phase de build « Link Binary With Libraries ». Il semble que l’on ne peut plus utiliser la version prĂ©compilĂ©e du Framework disponible dans la section tĂ©lĂ©chargement du site d’OCMock.

    Pour faire fonctionner OCMock avec Xcode 3.2.3 vous devez :

    • Effacer ocmock.framework, ainsi que la phase « copy files » du build et toutes les rĂ©fĂ©rences aux header de OCMock dans les « search path » de votre target.
    • Faire un check out de la derniĂšre version sur le repository svn de OCMock : http://svn.mulle-kybernetik.com/OCMock/trunk
    • Faire un build de la target OCMockPhoneSim
    • Copier le fichier libOCMock.a et le rĂ©pertoire Headers dans votre projet
    • Ajouter libOCMock.a aux framework de votre projet et ajouter un lien vers le rĂ©pertoire Headers dans les « search path » de votre target de test

    Vous buildez Ă  nouveau et… rien ne se passe.

    Apres OCMock c’est maintenant le script de Google-Toolbox-for-Mac qui reste bloquĂ© indĂ©finiment sur cette erreur :

    SBSetAccelerometerClientEventsEnabled failed: (ipc/
    send) invalid destination port

    LĂ  encore la solution est de rĂ©cupĂ©rer les sources de GTM sur le trunk du repository, puis de remplacer tous les fichiers nĂ©cessaires aux tests iPhone comme indiquĂ© dans le guide d’installation :

    http://code.google.com/p/google-toolbox-for-mac/wiki/iPhoneUnitTesting

    Maintenant vous pouvez enfin relancer vos tests !

    Suggestion d'articles :

    1. Tests unitaires et tests d’interface sur iPhone : État des lieux

    Catégories: Blog Société

    Créer un écosystÚme ouvert ?

    mer, 07/21/2010 - 09:42


    Les grands acteurs de l’Internet font souvent le “pari de la confiance” en proposant des API ouvertes, accessibles depuis le Web. Ces APIs permettent Ă  d’autres acteurs, entreprises ou dĂ©veloppeurs indĂ©pendants, d’innover en les exploitant, et d’inventer de nouveaux modĂšles Ă©conomiques.

    On peut citer en exemple les plateformes suivantes : Google Maps API, Facebook Graph API, SalesForce AppExchange, Twitter API, etc. Et plus prĂšs de nous, il existe des Ă©cosystĂšmes issus d’acteurs français : Mappy API, Netvibes UWA, Nabaztag API, etc.

    Cette dĂ©marche permet la constitution d’un Ă©cosystĂšme fĂ©cond, tant pour l’entreprise qui met Ă  disposition les APIs, que pour celles qui les exploitent. Cette mise Ă  disposition permet en particulier de :

    • CrĂ©er des revenus directs, en les facturant. Exemple : Google Maps devient payant pour plus de 1M de transactions /an.
    • Étendre une communautĂ©, et donc recruter des utilisateurs. Exemple : grĂące aux applications dĂ©rivĂ©es de sa plateforme, Twitter a atteint 200M d’utilisateurs et fait figure de grand du Web.
    • Faire Ă©merger de nouveaux usages pour sa plateforme et donc faire Ă©voluer son modĂšle de revenu. Exemple : En 2009, Apple a constatĂ© que les dĂ©veloppeurs d’applications souhaitaient vendre non seulement des applications, mais aussi des contenus pour leurs applications. Le modĂšle de l’AppStore a donc Ă©voluĂ© pour intĂ©grer cette possibilitĂ©.
    Les 3 modĂšles d’Ă©cosystĂšme

    Marc Andreessen (ancien fondateur de Netscape) distingue 3 types de plateformes ouvertes (voir ce billet) :

    • Niveau 1   »Access API » : ces plateformes permettent l’appel Ă  un traitement mĂ©tier sans fourniture d’interface homme/machine. Exemples : recherche de livres chez Amazon, geocoding chez Mappy.
    • Niveau  2   »Plug-In API » : Ces plateformes permettent d’intĂ©grer une application Ă  l’interface du fournisseur. Exemple : les applications Facebook, les Widgets Netvibes.
    • Niveau  3   »Runtime Environment » : Ces plateformes fournissent non seulement une API, une interface, mais aussi un environnement d’exĂ©cution. Exemple : les applications AppExchange ou l’iPhone.

    Il est clair que l’investissement du fournisseur de l’API va croissant du niveau 1 au 3. Il est donc frĂ©quent de commencer au niveau 1, avant d’envisager les niveaux supĂ©rieurs.

    L’outillage destinĂ© aux dĂ©veloppeurs

    Le succĂšs d’un Ă©cosystĂšme ouvert est fortement dĂ©pendant de l’enthousiasme des dĂ©veloppeurs. Pour les conquĂ©rir, il est crucial de leur fournir un langage facile Ă  prendre en main et, si possible, des outils de productivitĂ©.
    CĂŽtĂ© langage, il existe un large consensus autour des APIs REST/JavaScript, simples Ă  prendre en main, et adaptĂ©es Ă  des dĂ©veloppeurs connaissant mal les langages objets. Exemples : API Google, Yahoo, Mappy, etc. Proposer un langage simple est particuliĂšrement recommandĂ© aux nouveaux entrants qui n’ont pas le pouvoir de persuasion d’Apple (qui a rĂ©ussi Ă  convaincre des milliers de dĂ©veloppeurs de se former Ă  ObjectiveC…).

    Pour ce qui concerne l’outillage, on peut distinguer 3 niveaux d’offres :

    • Niveau 1 “zĂ©ro outillage” : les dĂ©veloppeurs Ă©crivent leur code dans l’environnement  de leur choix, puis font appel Ă  la plateforme pour le tester. Exemple : Google Maps API.
    • Niveau 2 “IDE” : on fournit un environnement de dĂ©veloppement, souvent sous la forme de PlugIn Eclipse, pour donner un peu de productivitĂ© aux dĂ©veloppeurs : coloration syntaxique, autocomplĂ©tion, bouton de publication, etc. Exemple : Flash Builder.
    • Niveau 3 “Emulateur” : en plus de l’environnement de dĂ©veloppement, on fournit un Ă©mulateur aux dĂ©veloppeurs. Exemples : Google App Engine, iPhone.

    Là encore, le niveau 3 représente un investissement beaucoup plus conséquent que le 1 ou le 2.

    Le lancement de la communauté

    La publication d’une documentation claire, simple Ă  prendre en main, et d’exemples de code rĂ©utilisables est incontournable pour satisfaire les dĂ©veloppeurs. L’animation de la communautĂ© passe aussi par la mise en oeuvre de forums de discussions et autres outils participatifs (par exemple, ZenDesk).
    Il peut ĂȘtre intĂ©ressant de se raccrocher Ă  une communautĂ© existante plutĂŽt que d’en crĂ©er une Ă  partir de rien. Par exemple, Android a recrutĂ© dans les communautĂ©s Java.
    Enfin, il est classique d’organiser un concours avec des prix à la clef, pour initier le mouvement communautaire. Voir par exemple, l’Android Developer Challenge.

    Un dernier point est essentiel : le modĂšle d’accĂšs aux APIs. Certaines plateformes nĂ©cessitent une inscription prĂ©alable Ă  leur usage (c’était le cas pour Google Maps jusqu’à mai 2010). D’autres plateformes vont mĂȘme jusqu’à valider les applications dĂ©veloppĂ©es (c’est le cas de la trĂšs polĂ©mique validation par Apple des applications iPhone).

    Je pense qu’imposer le minimum de contraintes aux dĂ©veloppeurs est un signe trĂšs positif, Ă  mĂȘme de crĂ©er un climat de confiance, et d’élargir la communautĂ©. La modĂ©ration Ă  postĂ©riori me parait ĂȘtre la meilleure pratique.

    Comment démarrer ?

    Il est relativement simple de démarrer avec une plateforme / un outillage de niveau 1. Par exemple, la Ville de Rennes a récemment lancé une expérimentation en ouvrant des API sur les données de ses transports publics.
    On pourra ensuite monter en puissance de maniÚre itérative vers une plateforme de niveau 2/3 et un outillage plus avancé.

    Je vous propose quelques pistes par secteurs d’activitĂ©. Ces pistes sont largement issues de mes envies en tant qu’utilisateur :

    • Banque : ouvrir la liste des opĂ©rations de chaque client en les sĂ©curisant via le protocole OAuth
    • OpĂ©rateurs tĂ©lĂ©coms et fournisseurs d’énergie : ouvrir les encours de consommation de chaque client en les sĂ©curisant via OAuth
    • MĂ©dias & culture : ouvrir les programmes de tĂ©lĂ©vision/radio/musĂ©es/salles de cinĂ©ma
    • Industriels : ouvrir les catalogues produits
    • Administration : ouvrir les donnĂ©es publiques Ă  la maniĂšre de data.gov

    Alors, quand pensez-vous lancer votre écosystÚme ouvert ?

    Catégories: Blog Société

    NTIC : Comprendre les enjeux pour l’entreprise et l’individu


    lun, 07/19/2010 - 22:18


    Depuis les 5 derniĂšres annĂ©es, on assiste Ă  une intensification de l’usage des Nouvelles Technologies de l’Information et de la Communication (NTIC) dans le monde professionnel : tĂ©lĂ©phonie mobile, courrier Ă©lectronique, plateformes collaboratives, partage documentaire en ligne, solutions de messageries instantanĂ©es, AccĂšs internet mobile, voix sur IP, etc. Tout cela a Ă©tĂ© possible grĂące Ă  la gĂ©nĂ©ralisation et la banalisation de la connexion internet et Ă  la standardisation et la modernisation des rĂ©seaux filaires et sans fil (wifi, Bluetooth, connexion internet 3G, etc.).

    Conscientes de l’importance de ces technologies et outils, la plupart des entreprises se sont pressĂ©es Ă  les adopter, chacune Ă  son rythme, et ses besoins, offrant aux collaborateurs de nouveaux canaux de communication et d’échanges. L’arrivĂ©e de solutions mobiles et de systĂšmes d’exploitation Ă  interfaces ergonomiques (iPhone, Ipad, Android, Windows Mobile, etc.) dote les technologies de l’information et de la communication d’un bel avenir.

    Par ailleurs, les NTIC constituent un facteur d’évolution des rapports sociaux, des emplois et des mĂ©tiers. Elles accompagnent une sĂ©rie de transformations concernant la stratĂ©gie de l’entreprise, l’organisation du travail, les formes de management, la concertation et la nĂ©gociation.

    Cet article porte sur le positionnement des NTIC, ses apports et ses impacts sur l’entreprise et sur la vie quotidienne des collaborateurs et l’environnement de travail. Il donne Ă  nos dĂ©cideurs (DSI, R&D, stratĂ©gie, marketing, etc) une premiĂšre grille de lecture leur permettant de viser la bonne politique NTIC Ă  adopter en adĂ©quation avec l’histoire et la culture de l’entreprise et un aperçu des challenges Ă  relever aujourd’hui et demain.

    NTIC et l’ « Entreprise » OpportunitĂ©s 1) Augmenter la rĂ©activitĂ© de l’entreprise

    Les outils de communication permettent l’accĂšs Ă  l’information Ă  tout moment, Ă  tout endroit. La multiplication des canaux de communication (tĂ©lĂ©phone, connexion internet mobile, messagerie) Ă  la portĂ©e des diffĂ©rents collaborateurs, dote l’entreprise d’une capacitĂ© de rĂ©activitĂ© non nĂ©gligeable face aux besoins de plus en plus oppressants du marchĂ© et des clients. Cela permet Ă  l’entreprise de rĂ©pondre Ă  des opportunitĂ©s et des demandes, de conclure des contrats en un temps optimal grĂące Ă  l’accessibilitĂ© des collaborateurs Ă  l’information et aux donnĂ©es d’aide Ă  la dĂ©cision (disponibilitĂ© des ressources, niveaux stocks, seuils de rentabilitĂ©, etc.) leur permettant de prendre les bonnes orientations.

    2) Communication peu onéreuse mais porteuse

    Plusieurs solutions ont vu le jour permettant Ă  n’importe qui de communiquer et Ă©changer plus facilement ses idĂ©es. En plus du site internet institutionnel, de plus en plus d’entreprises proposent des outils communautaires rapprochant collaborateurs et internautes.

    Les objectifs sont multiples :

    • Apporter une attention particuliĂšre aux clients en leur permettant d’échanger sur leur projets et problĂšmes tout en partageant leurs expĂ©riences.
    • Communiquer sur les nouveaux produits, offres, Ă©vĂ©nements, etc.
    • Guider, renseigner le client/consommateur pour faire son choix
    • Partager la connaissance avec les internautes tout en recueillant leurs retours, commentaires, critiques.
    • Afficher la maĂźtrise d’un tel ou tel sujet ou domaine permettant Ă  l’entreprise de gagner plus facilement des parts de marchĂ©.

    Cela dit, ce canal de communication permet aussi de tester des concepts, comme le Customer Driven Design ou le Crowd Sourcing privilĂ©giant l’ouverture de l’entreprise vers l’extĂ©rieur via des pratiques bottom-up qu’internet va continuer Ă  favoriser. Dans ce registre, vous pouvez apprĂ©cier par exemple l’initiative innovante d’Asus concernant ses produits du futur wepc, qui a mis Ă  disposition des utilisateurs un site internet trĂšs novateur leurs permettant d’exprimer leurs imaginations et leurs besoins pour les futurs produits.

    3) Formalisation du savoir faire

    Les outils collaboratifs et de gestion des connaissances (wiki, blog, etc.) permettent de formaliser le savoir-faire, son partage et sa transmission. Un Ă©norme de gain de temps et d’efficacitĂ© permettant d’augmenter la rĂ©activitĂ© et la rentabilitĂ© de l’entreprise.

    Risques

    Mais ces opportunités définies précédemment, comme les usages évoqués en premiÚre partie, font ressortir des inquiétudes et des risques variés.

    1) Changements incessants et Ă©volutifs du cƓur de mĂ©tier de l’entreprise

    Il y a quelques annĂ©es, l’information au sens large Ă©tait moins prĂ©sente sur internet. En mĂȘme temps l’accĂšs Ă  cette information Ă©tait moins gĂ©nĂ©ralisĂ©. Aujourd’hui, avec la gĂ©nĂ©ralisation de la connexion internet et la multiplication des sites d’échange d’expĂ©rience, d’idĂ©e, de solutions techniques, on assiste Ă  l’explosion des sources d’information et la facilitĂ© Ă  y accĂ©der. ÉnormĂ©ment d’entreprises voient leurs mĂ©tiers changer ou se transformer au fil du temps se sentant de plus en plus oppressĂ©es Ă  s’adapter pour survivre. Quelques exemples de domaines les plus marquants : L’édition papier, la distribution, le conseil au sens large, etc.

    La R&D, l’innovation, l’expĂ©rience, la veille concurrentielle deviennent les maĂźtres mots pour survivre

    2) Exposition Ă  la concurrence

    Avec l’explosion des blogs et le partage du contenu avec les internautes, la veille concurrentielle n’a jamais Ă©tĂ© aussi facile. Toute diffĂ©rentiation sur un domaine donnĂ© peut ĂȘtre facilement copiĂ©e, ce qui nĂ©cessite de l’entreprise des efforts financiers lourds et une diffĂ©rentiation de l’offre produits/services plus marquĂ©e afin de garder une longueur d’avance sur les concurrents.

    3) Exposition au pillage

    Un risque qui peut nous paraĂźtre improbable mais reste tout de mĂȘme important Ă  mentionner concerne la confidentialitĂ© et la sĂ©curitĂ© des donnĂ©es de l’entreprise. Les diffĂ©rents canaux (web, terminaux mobiles dont on dispose) multiplient les risques de pillage et le piratage des donnĂ©es. Il serait important par exemple de dĂ©finir diffĂ©rentes politiques de sĂ©curitĂ© selon la criticitĂ© de la donnĂ©e pour l’entreprise.

    4) Risque de baisse de la productivité

    MĂȘme si ses outils augmentent la rĂ©activitĂ© de l’entreprise, leur multiplication excessive risque d’engendrer Ă  l’échelle de l’entreprise une baisse de son rendement : rĂ©daction excessive de courriers et de messages Ă©lectroniques, alimentation de divers outils de l’entreprise (blog, wiki, outils de reporting, etc.), navigation prolongĂ©e sur internet, etc. Des campagnes de sensibilisation et de communication ne pourraient-elles pas ĂȘtre suffisantes pour limiter ce risque sans franchir la frontiĂšre de la rĂ©pression et la restriction Ă  l’usage?

    5) Risque de bouleversement des relations hiérarchiques

    La gĂ©nĂ©ration d’indicateurs de performance et de rentabilitĂ© en temps rĂ©el, accessibles peu importe le lieu et l’heure risque de rythmer la relation entre managers et collaborateurs vers le meilleur comme vers le pire.

    NTIC et l’ « Individu » OpportunitĂ©s 1) Acquisition facile du savoir et de l’information

    D’un point de vue individuel, tous ces outils permettent aux collaborateurs d’avoir plus d’autonomie dans la rĂ©alisation de leur travail au quotidien et un accĂšs facilitĂ© Ă  l’information. On assiste vraiment Ă  la dĂ©mocratisation du savoir, quelque soit la formation de l’individu et ses diplĂŽmes. Seul le manque d’initiative personnelle peut ĂȘtre un frein.

    2) Liberté du collaborateur

    Plus besoin d’ĂȘtre prĂ©sent sur le de travail pour bien accomplir les tĂąches au quotidien. Du moment oĂč chaque collaborateur soit joignable Ă  tout moment de la journĂ©e et qu’il ait accĂšs aux outils et Ă  l’information, le tĂ©lĂ©travail devient une option qui prend pleinement son sens. Une flexibilitĂ© et une libertĂ© non nĂ©gligeable pourraient ĂȘtre offertes aux collaborateurs pour conjuguer contraintes de la vie privĂ©e et exigences professionnelles sans impacts sur les dĂ©lais et la qualitĂ© du travail fourni. Bien Ă©videmment, cet impact n’est valable que pour les domaines et les tĂąches qui se prĂȘtent au tĂ©lĂ©travail.

    Risques 1) Bouleversement de l’espace/temps de travail

    Avec les moyens NTIC dont on dispose aujourd’hui, il est de plus en plus difficile de faire le distinguo entre temps de travail et temps personnel et de tracer une frontiĂšre entre la sphĂšre professionnelle et la sphĂšre privĂ©e. MĂȘme si pas mal d’entreprises se sont pressĂ©es Ă  dĂ©ployer des politiques d’accĂšs aux ressources internet trĂšs restrictives et sĂ©lectives, la prolifĂ©ration des solutions mobiles personnelles Ă  interfaces ergonomiques et la banalisation de la connexion internet mobile rendent ce genre de politique obsolĂšte.

    2) Réduction de la sphÚre privée

    Au-delĂ  de l’environnement professionnel, l’omniprĂ©sence des NTIC entraine une rĂ©duction de la sphĂšre privĂ©e des individus tout en accĂ©lĂ©rant leur popularisation. L’accĂšs et l’alimentation des rĂ©seaux sociaux professionnels ou personnels sort les individus de l’anonymat et trace leur histoire. Quand un collaborateur intervient sur un blog, peu importe lequel, commente un post, forcĂ©ment, n’importe qui peut en porter un jugement, positif soit-il ou nĂ©gatif.

    3) Impact sur la culture

    De plus en plus de contenu est produit sur internet, indexĂ© par des moteurs de recherche occupant une place prĂ©pondĂ©rante dans notre quotidien. Ce constat nous mĂšne Ă  se poser les questions suivantes : aujourd’hui, vaut-il la peine de tout apprendre par cƓur? Cela risque t-il d’appauvrir la culture individuelle Ă  terme, ou au contraire de l’enrichir? Un premier Ă©lĂ©ment de rĂ©ponse nous a Ă©tĂ© donnĂ© par le philosophe Michel Serres dans ce podcast qui nous Ă©claire sur le fait qu’il faut se libĂ©rer l’esprit, en s’appuyant sur internet et l’informatique d’une façon gĂ©nĂ©rale, pour se focaliser sur l’innovation…

    Les challenges d’aujourd’hui et de demain…

    Les NTIC sont en train de transformer profondĂ©ment le monde du travail, d’abord en interne des entreprises avec l’émergence d’équipes complĂštement transversales, elles, basĂ©es sur la facilitĂ© de l’échange et la collaboration au regard des organisations hiĂ©rarchiques traditionnelles, qui elles, Ă©taient cantonnĂ©es et cloisonnĂ©es. Cependant la rĂ©volution rĂ©side plus dans la mise Ă  disposition et le partage d’une information riche renforçant le sentiment d’autonomie et permettant Ă  chacun de rester en contact permanent avec l’entreprise.

    Quelques soient les risques et les opportunitĂ©s pour les entreprises, leur adoption deviennent inĂ©luctables et tout le challenge aujourd’hui est : comment conjuguer risques et opportunitĂ©s pour bĂ©nĂ©ficier de l’apport des NTIC dans la rentabilitĂ© et le dĂ©veloppement de l’entreprise.

    MalgrĂ© tout, plusieurs challenges restent Ă  relever par les NTIC. D’abord, la multiplication des outils et la prolifĂ©ration d’internet a conduit Ă  l’utilisation de plus en plus de serveur de stockage, Ă  la construction d’ordinateurs de plus en plus puissants. C’est le dĂ©veloppement durable et la green IT qui seront Ă  terme au cƓur du provisionnement des NTIC dans l’entreprise.

    Un autre challenge Ă  relever aussi concerne la sĂ©curitĂ© des systĂšmes d’information et la protection de la vie privĂ©e.

    Pour finir, Ă  force de voir la frontiĂšre disparaĂźtre entre temps de travail et temps personnel, l’organisation de travail actuelle aura-t-elle un sens Ă  terme? Ou bien, tendons nous vers le travail Ă  la demande, peu importe le jour de la semaine, l’heure de la journĂ©e.

    Suggestion d'articles :

    1. Alfresco est il une solution pour votre entreprise ?
    2. Article : ParallĂ©lisation, distribution : de nouveaux enjeux pour les applications d’entreprise?
    3. Nantes JUG – Apache Maven, mise en Ɠuvre en entreprise

    Catégories: Blog Société

    Le SI, une boĂźte de LEGO ?

    jeu, 07/15/2010 - 17:39


    RĂ©cemment, j’ai Ă©tĂ© amenĂ© Ă  participer Ă  plusieurs Ă©tudes d’évolution de SI. Ce qui m’a personnellement frappĂ© dans ces diffĂ©rentes missions c’est l’image commune qu’utilisaient nos interlocuteurs pour dĂ©crire leur SI idĂ©al. Cette image est celle de la boĂźte de « LEGO » ! En effet, pour rationaliser les coĂ»ts et diminuer les dĂ©lais des projets, ils souhaitaient avoir des briques applicatives gĂ©nĂ©riques qu’ils pourraient combiner Ă  souhait comme les briques de « LEGO ». Je me suis alors interrogĂ© sur les raisons qui font que ces personnes, d’horizons diffĂ©rents, partagent cet idĂ©al commun.

    L’excellente prĂ©sentation de Luc De Brabandere Ă  l’USI 2009 intitulĂ© « Les dix paradoxes de la crĂ©ativitĂ© »  m’a Ă©clairĂ© sur le sujet. En effet, Luc De Brabandere explique que la crĂ©ativitĂ© des individus est conditionnĂ©e par la perception qu’ils ont de leur environnement. Dans notre cas, la vision rĂ©pandue des SI est hĂ©ritĂ©e du monde des BTP. Pour s’en rendre compte, il suffit de regarder les termes que nous utilisons : maĂźtrise d’ouvrage, maĂźtrise d’Ɠuvre, briques, architectes
 En consĂ©quence, il est totalement naturel que le SI idĂ©al soit une boĂźte de « LEGO » gĂ©ante !

    Changer de vision pour changer le SI

    A OCTO nous constatons que cette vision boĂźte de « LEGO » n’est pas efficace. D’une part, le 100% rĂ©utilisable est un mythe qu’aucune entreprise n’a rĂ©ussi Ă  atteindre (nous sommes plutĂŽt dans une fourchette de 5-10%). D’autre part, les composants rĂ©utilisables coĂ»tent trĂšs cher et, lorsqu’un projet veut en bĂ©nĂ©ficier, des adaptations s’avĂšrent souvent nĂ©cessaires.

    Alors comment faire pour atteindre les objectifs initiaux qui sont la rationalisation des coûts et la diminution des délais des projets ?

    La premiÚre étape consiste à nous ouvrir de nouvelles perspectives en dépassant le cadre mental que nous nous sommes imposés en regardant le SI comme

    Un systÚme évolutif et non comme un systÚme figé comme le sous-entend la vision BTP

    Une fois ce nouveau cadre Ă©tabli, il faut commencer Ă  repenser notre approche des projets informatiques. Pour Ă©tayer cette idĂ©e, je vais prendre l’exemple des briques rĂ©utilisables.

    Des briques réutilisables évolutives

    L’approche classique des projets informatiques consiste Ă  vouloir dĂ©finir en totalitĂ© et dans le dĂ©tail une application tout en amont du projet (projet en cascade). Pour les briques rĂ©utilisables cette approche nous conduit Ă  vouloir dĂ©finir, en amont, une brique qui rĂ©pond Ă  tous les besoins actuels et futurs.

    A contrario, en partant du principe que le SI est en Ă©volution constante, il devient naturel d’opter pour une approche incrĂ©mentale. En effet, au lieu de vouloir rĂ©pondre Ă  tous les besoins en mĂȘme temps, nous allons rĂ©pondre aux besoins avĂ©rĂ©s des projets un par un en enrichissant continuellement les fonctionnalitĂ©s du composant. Et pour rendre possible une Ă©volution continue dans le temps, il faut prĂ©server un temps de traitement des demandes stable, malgrĂ© l’inexorable montĂ©e en complexitĂ©. Dans ce but, deux Ă©lĂ©ments peuvent ĂȘtre mis en place :

    • Un harnais de tests automatisé afin de garantir la non-rĂ©gression fonctionnelle durant la phase de croissance
    • Une Ă©quipe pluridisciplinaire dĂ©diĂ©e pour garder un niveau Ă©levĂ© d’expertise sur le sujet et faciliter le traitement des demandes

    Cette approche prĂ©sente plusieurs avantages. D’abord, le composant dĂ©veloppĂ© est adaptĂ© aux besoins des projets et il est directement utilisable. Ensuite, la complexitĂ© du composant est rĂ©duite considĂ©rablement puisqu’il n’embarque que les fonctionnalitĂ©s nĂ©cessaires aux projets (Ă©vite le sur-design qui a pour but d’embarquer des besoins futurs non avĂ©rĂ©s). De plus, le harnais de tests permet d’accĂ©lĂ©rer la dĂ©tection les problĂšmes (tests qui ne passent plus). Enfin, la flexibilitĂ© offerte par le modĂšle incrĂ©mental permet de tenir compte des nouveaux besoins qui n’ont pas Ă©tĂ© prĂ©vu au dĂ©but du projet.

    Conclusion

    Changer notre vision du SI n’est pas chose facile. En effet, ce changement implique le changement de nos mĂ©thodes et notre organisation du travail. Cependant, il faut prendre conscience que pour dĂ©passer les limites actuelles auxquelles nous sommes confrontĂ©s, ce changement est nĂ©cessaire.

    RĂ©cemment, j’ai Ă©tĂ© amenĂ© Ă  participer Ă  plusieurs Ă©tudes d’évolution de SI. Ce qui m’a personnellement frappĂ© dans ces diffĂ©rentes missions c’est l’image commune qu’utilisaient nos interlocuteurs pour dĂ©crire leur SI idĂ©al. Cette image est celle de la boĂźte de « LEGO » ! En effet, pour rationaliser les coĂ»ts et diminuer les dĂ©lais des projets, ils souhaitaient avoir des briques applicatives gĂ©nĂ©riques qu’ils pourraient combiner Ă  souhait comme les briques de « LEGO ». Je me suis alors interrogĂ© sur les raisons qui font que ces personnes, d’horizons diffĂ©rents, partagent cet idĂ©al commun.
    L’excellente prĂ©sentation de Luc De Brabandere Ă  l’USI 2009 intitulĂ© « Les dix paradoxes de la crĂ©ativitĂ© » (http://usi2009.universite-du-si.com/webcast-5-31-Luc.De.Brabandere.html) m’a Ă©clairĂ© sur le sujet. En effet, Luc De Brabandere explique que la crĂ©ativitĂ© des individus est conditionnĂ©e par la perception qu’ils ont de leur environnement. Dans notre cas, la vision rĂ©pandue des SI est hĂ©ritĂ©e du monde des BTP. Pour s’en rendre compte, il suffit de regarder les termes que nous utilisons : maĂźtrise d’ouvrage, maĂźtrise d’Ɠuvre, briques, architectes
 En consĂ©quence, il est totalement naturel que le SI idĂ©al soit une boĂźte de « LEGO » gĂ©ante !
    Changer de vision pour changer le SI
    A OCTO nous constatons que cette vision boĂźte de « LEGO » n’est pas efficace. D’une part, le 100% rĂ©utilisable est un mythe qu’aucune entreprise n’a rĂ©ussi Ă  atteindre (nous sommes plutĂŽt dans une fourchette de 5-10%). D’autre part, les composants rĂ©utilisables coĂ»tent trĂšs cher et, lorsqu’un projet veut en bĂ©nĂ©ficier, des adaptations s’avĂšrent souvent nĂ©cessaires.
    Alors comment faire pour atteindre les objectifs initiaux qui sont la rationalisation des coûts et la diminution des délais des projets ?
    La premiÚre étape consiste à nous ouvrir de nouvelles perspectives en dépassant le cadre mental que nous nous sommes imposés en regardant le SI comme
    Un systÚme évolutif et non comme un systÚme figé comme le sous-entend la vision BTP
    Une fois ce nouveau cadre Ă©tabli, il faut commencer Ă  repenser notre approche des projets informatiques. Pour Ă©tayer cette idĂ©e, je vais prendre l’exemple des briques rĂ©utilisables.
    Des briques réutilisables évolutives
    L’approche classique des projets informatiques consiste Ă  vouloir dĂ©finir en totalitĂ© et dans le dĂ©tail une application tout en amont du projet (projet en cascade). Pour les briques rĂ©utilisables cette approche nous conduit Ă  vouloir dĂ©finir, en amont, une brique qui rĂ©pond Ă  tous les besoins actuels et futurs.
    A contrario, en partant du principe que le SI est en Ă©volution constante, il devient naturel d’opter pour une approche incrĂ©mentale. En effet, au lieu de vouloir rĂ©pondre Ă  tous les besoins en mĂȘme temps, nous allons rĂ©pondre aux besoins avĂ©rĂ©s des projets un par un en enrichissant continuellement les fonctionnalitĂ©s du composant. Et pour rendre possible une Ă©volution continue dans le temps, il faut prĂ©server un temps de traitement des demandes stable, malgrĂ© l’inexorable montĂ©e en complexitĂ©. Dans ce but, deux Ă©lĂ©ments peuvent ĂȘtre mis en place :
    -    Un harnais de tests automatisé afin de garantir la non-régression fonctionnelle durant la phase de croissance
    -    Une Ă©quipe pluridisciplinaire dĂ©diĂ©e pour garder un niveau Ă©levĂ© d’expertise sur le sujet et faciliter le traitement des demandes
    Cette approche prĂ©sente plusieurs avantages. D’abord, le composant dĂ©veloppĂ© est adaptĂ© aux besoins des projets et il est directement utilisable. Ensuite, la complexitĂ© du composant est rĂ©duite considĂ©rablement puisqu’il n’embarque que les fonctionnalitĂ©s nĂ©cessaires aux projets (Ă©vite le sur-design qui a pour but d’embarquer des besoins futurs non avĂ©rĂ©s). De plus, le harnais de tests permet d’accĂ©lĂ©rer la dĂ©tection les problĂšmes (tests qui ne passent plus). Enfin, la flexibilitĂ© offerte par le modĂšle incrĂ©mental permet de tenir compte des nouveaux besoins qui n’ont pas Ă©tĂ© prĂ©vu au dĂ©but du projet.
    Conclusion
    Changer notre vision du SI n’est pas chose facile. En effet, ce changement implique le changement de nos mĂ©thodes et notre organisation du travail. Cependant, il faut prendre conscience que pour dĂ©passer les limites actuelles auxquelles nous sommes confrontĂ©s, ce changement est nĂ©cessaire.

    Catégories: Blog Société

    ProblÚmes courants: Imprécision des calculs mathématiques (2e partie)

    jeu, 07/15/2010 - 14:00


    Nous avons déterminé dans la premiÚre partie que les nombres à virgule flottante sont à proscrire.

    Nos armes seront donc le BigDecimal en Java, le type decimal en .Net. Malheureusement, d’autres piĂšges pavent notre chemin.

    Notes:

    • Sous Oracle, le type NUMBER(p,s) peut ĂȘtre soit dĂ©cimal si p (et optionnellement s) est spĂ©cifiĂ© et sera Ă  virgule flottante sinon. Conclusion, toujours spĂ©cifier p (et s pour avoir des dĂ©cimales).
    • Pour un Web Service, la valeur d’un type xs:decimal sera sous forme texte (ie. « 123.456″) et sera donc prĂ©cis et mappĂ© sans problĂšme vers un BigDecimal (Java) ou decimal (.Net).

    Utilisation des décimaux Littéraux

    J’ai souvent le commentaire suivant: « J’aime pas les BigDecimal, on ne peut pas utiliser les opĂ©rateurs du langage avec ». C’est vrai, mais en attendant que Java supporte la surcharge d’opĂ©rateur (et c’est pas demain la veille), vous n’avez pas le choix, il faut utiliser les mĂ©thodes de la classe BigDecimal.

    Le respect de la premiĂšre rĂšgle ci-haut proscrit les choses suivantes:

    BigDecimal d = new BigDecimal(1.0); // initialisation par un double
    BigDecimal d = BigDecimal.valueOf(1.0); // aussi une initialisation par un double
    boolean b = (d.doubleValue() == 0.0); // comparaison avec un double
    BigDecimal d = BigDecimal.valueOf(d1.doubleValue() * d2.doubleValue()); // passage par un double pour calcul mathématique

    remplacer tout cela par

    BigDecimal d = new BigDecimal("1.0"); // crée trÚs précisément un BigDecimal de mantisse 10 et d'échelle 1
    BigDecimal d = BigDecimal.valueOf(10, 1); // MĂȘme rĂ©sultat que la ligne prĂ©cĂ©dente
    boolean b = (d.signum() == 0); // signum compare avec zéro et retourne -1, 0 ou 1. Pour une valeur différente de zéro, faire un compareTo
    BigDecimal d = d1.multiply(d2); // tout le calcul se fait en type décimal
    Échelle

    L’Ă©chelle (scale) indique le nombre de chiffres Ă  droite de la virgule. Il faut bien comprendre que deux chiffres apparemment identiques peuvent ĂȘtre en fait diffĂ©rents de par leur Ă©chelle. C’est pour cette raison qu’en Java, dans l’exemple ci-dessous, b sera faux

    BigDecimal d1 = new BigDecimal("1.0");
    BigDecimal d2 = new BigDecimal("1.00");
    boolean b = d1.equals(d2); // false

    L’Ă©chelle a aussi un impact lors d’opĂ©rations mathĂ©matiques.

    Note: L’affichage d’un BigDecimal (d.toString()) affichera toujours l’Ă©chelle en entier et non uniquement les zĂ©ros significatifs.

    Additions et soustractions

    L’Ă©chelle du rĂ©sultat d’une addition ou soustraction sera la plus grosse Ă©chelle des deux opĂ©randes.

    BigDecimal d1 = new BigDecimal("1.0"); // échelle de 1
    BigDecimal d2 = new BigDecimal("2.00"); // échelle de 2
    BigDecimal r = d1.add(d2); // résultat d'échelle 2
    System.out.println(r); // affiche 3.00
    Multiplications

    L’Ă©chelle du rĂ©sultat d’une multiplication sera la somme des Ă©chelles des opĂ©randes (car mathĂ©matiquement, le rĂ©sultat ne sera jamais sur plus).

    BigDecimal d1 = new BigDecimal("1.0"); // échelle de 1
    BigDecimal d2 = new BigDecimal("2.00"); // échelle de 2
    BigDecimal r = d1.multiply(d2); // résultat d'échelle 3
    System.out.println(r); // affiche 2.000
    Divisions

    Tout se complique pour les divisions. En effet, l’Ă©chelle thĂ©orique du rĂ©sultat d’une division est potentiellement infinie (si le rĂ©sultat de la division est un nombre pĂ©riodique par exemple). C’est trĂšs diffĂ©rent de l’arithmĂ©tique en virgules flottantes qui stockera, dans sa taille finie, la valeur la plus proche du rĂ©sultat rĂ©el. Vous aurez donc les rĂ©sultats suivants:

    BigDecimal d1 = new BigDecimal("1.0");
    BigDecimal d2 = new BigDecimal("3.0");
    System.out.println(d1.divide(d2, RoundingMode.HALF_UP)); // affiche 0.3
    System.out.println(d1.divide(d2, 4, RoundingMode.HALF_UP)); // affiche 0.3333
    System.out.println(d1.divide(d2)); // ArithmeticException

    Si la rĂšgle d’arrondi n’est pas spĂ©cifiĂ©, comme le BigDecimal ne peut dĂ©cider comment arrondir par lui-mĂȘme, il retourne une exception *et c’est une bonne chose*. En effet, il ne faut jamais arrondir au hasard. Si vous ne savez pas comment arrondir, demandez Ă  votre MOA. L’arrondi est systĂ©matiquement liĂ© Ă  une rĂšgle mĂ©tier (ex.: arrondir Ă  la prĂ©cision de la monnaie). Je vous recommande d’ailleurs de mettre dans vos tests unitaires des chiffres testant l’arrondi pour prĂ©venir les problĂšmes.

    Comparaison

    C’est l’un des comportements laissant le plus perplexes les dĂ©veloppeurs. Nous en avons parlĂ© plus haut, le equals
    du BigDecimal compare aussi l’Ă©chelle. Il ne faut donc jamais l’utiliser si l’on souhaite comparer la valeur du BigDecimal. C’est lĂ  oĂč compareTo vient Ă  notre secours. Il se comporte comme nous le voudrions intuitivement.

    BigDecimal d1 = new BigDecimal("1.0");
    BigDecimal d2 = new BigDecimal("1.00");
    int i = d1.compareTo(d2); // 0, ce qui veut dire de mĂȘme valeur selon le contrat de compareTo

    À noter: Comparativement Ă  la comparaison entre nombres Ă  virgule flottante, il n’est pas nĂ©cessaire d’ajouter un delta lors des comparaisons. Le dĂ©cimal Ă©tant toujours prĂ©cis, la comparaison sans delta le sera donc aussi.

    Conversion

    Il faut prendre quelques prĂ©cautions lors de la conversion d’une BigDecimal vers une valeur entiĂšre. En effet, celui-ci arrondira Ă  l’unitĂ©. Il est souvent plus sĂ©curitaire de vĂ©rifier s’il y a des dĂ©cimales lors de la conversion. Les mĂ©thodes xxxValueExact() ont donc Ă©tĂ© mise Ă  disposition pour faire trĂšs exactement ceci. Une ArithmeticException sera lancĂ©e si une conversion sans arrondi est impossible.

    BigDecimal d1 = new BigDecimal("1.1");
    System.out.println("i: " + d1.intValue()); // affiche 1
    System.out.println(d1.intValueExact()); // lance une ArithmeticException
    .NET

    L’article s’est pour l’instant beaucoup penchĂ© sur Java. L’Ă©quivalent .Net du BigDecimal est le decimal. De mĂȘme qu’en Java, il doit ĂȘtre utilisĂ© en tout temps au lieu du float et double.

    Littéraux

    Le type decimal Ă©tant un type primitif de .Net, C# fournit une syntaxe littĂ©rale pour ce dernier (suffixe m). Les zĂ©ros non significatifs sont utiles pour dĂ©terminer l’Ă©chelle.

    decimal d = 99.9m; // le m indiquant qu'il s'agit d'un décimal
    decimal b = 9.00m; // decimal d'échelle 2
    

    Il est d’ailleurs judicieusement nĂ©cessaire de convertir explicitement d’une virgule flottante Ă  un dĂ©cimal.

    decimal a = (decimal) 9.0; // conversion explicite nĂ©cessaire et perte de prĂ©cision potentielle. À ne pas faire!
    
    Calculs mathématiques

    Être un type primitif a d’autres avantages, les calculs mathĂ©matiques sont plus Ă©lĂ©gants qu’en Java.

    decimal d = 1.0m * 2.0m; // +, -, /, * et % sont utilisables
    decimal b = decimal.Multiply(1.0m, 2.0m); // l'équivalent en méthode statique est aussi disponible

    La division n’a pas besoin et ne peut avoir de rĂšgle d’arrondi. Elle fera au mieux dans les 96 bits d’espace. Il ne faut toutefois pas oublier qu’un arrondi sera Ă©ventuellement nĂ©cessaire et sera comme toujours guidĂ© par une rĂšgle mĂ©tier.

    Comparaison

    Comparativement Ă  Java, le compare et le equals donne le mĂȘme rĂ©sultat peut importe l’Ă©chelle. C’est beaucoup plus intuitif, mais implique qu’il est impossible de comparer en voulant considĂ©rer l’Ă©chelle.

    Console.WriteLine(decimal.Compare(1.00m, 1.0m)); // affiche 0, donc égal
    Console.WriteLine(1.0m.CompareTo(1.00m)); // autre façon de comparer, retourne aussi 0
    Console.WriteLine(1.0m.Equals(1.00m)); // affiche true

    Il est d’ailleurs impossible de connaĂźtre l’Ă©chelle d’un dĂ©cimal facilement en .Net. Pour avoir l’Ă©chelle, il faut faire ceci:

    int scale = (System.Decimal.GetBits(monDecimal)[3] >> 16) & 31; // oui oui, ça s'invente pas

    ou passer par un ToString, trouver le séparateur décimal (en fonction de la culture) et compter le nombre de chiffres à sa droite.

    Conversion

    Au niveau conversion, il existe des mĂ©thodes ToXXX permettant la conversion vers un autre type. Le concept de ToXXXExact n’existe pas. Il faut donc s’assurer au prĂ©alable qu’il n’y aura pas de perte de prĂ©cision. Une solution possible est ceci:

    decimal toInt = 1.1m;
    int i = decimal.ToInt32(toInt);
    Console.WriteLine(toInt.Equals(new decimal(i))); // n'est pas égal, car nous avons perdu les décimales
    Conclusion

    Le but n’est pas de comparer, mais vous l’aurez compris

    • La version Java demande de bien comprendre son implĂ©mentation, mais sĂ©vi en cas de mauvaise utilisation
    • La version .Net se veut plus conviviale, mais est donc plus permissive et rend plus compliquĂ©s certaines opĂ©rations.

    Mais peu importe le langage, les choses importantes à retenir se résument à

    • Ne pas utiliser de types Ă  virgule flottante pour reprĂ©senter des dĂ©cimaux
    • Avoir en tĂȘte qu’en informatique de gestion tous les nombres ou presque sont des dĂ©cimaux
    • Penser aux arrondis et les faire suivant une rĂšgle mĂ©tier
    • Bien avoir en tĂȘte les spĂ©cificitĂ©s du langage avant utilisation

    Une seule nuance Ă  ces rĂšgles. Il est possible que pour des raisons de performance vous deviez utiliser des nombres Ă  virgule flottante. Par exemple, dans le cadre du simulation de Monte-Carlo. Je ne peux dans ce cas que vous recommander de bien vous documenter sur la manipulation des nombres Ă  virgule flottante. Il existe de nombreuses mĂ©thodes pour minimiser les problĂšmes mais le tout reste relativement complexe et sors du cadre de cet article.  Ne les utilisez donc qu’en dernier recours.

    En conclusion, appliquez ces rĂšgles religieusement et vous devriez ĂȘtre parĂ©s pour Ă©viter les soucis de calcul de vos futures applications d’entreprise. Je vous souhaite de prĂ©cis calculs et vous dis Ă  la prochaine.

    Suggestion d'articles :

    1. ProblÚmes courants: Imprécision des calculs mathématiques (1Úre partie)
    2. Refactoring .NET avec UML, 1Ăšre partie
    3. Construire ses parsers ANTLR avec Maven – Partie 3/3 – Testez vos grammaires

    Catégories: Blog Société

    Industrialisation des développements Android

    jeu, 07/15/2010 - 09:24


    Avec la croissance de la plateforme Android et l’annonce de Google sur le nombre de terminaux activĂ©s chaque jour, le nombre de projets Android a de bonnes chances de progresser Ă©galement. Avec cette augmentation, la question de l’industrialisation des dĂ©veloppements se pose donc. Pourquoi industrialiser ? Comment ? Des questions auxquelles nous allons rĂ©pondre dans ce billet


    Pourquoi industrialiser ?

    Autant sur une application de gestion, la question ne se pose quasiment pas, autant sur une application Android, on est en droit de se demander si cela vaut le coup.

    Effectivement, alors que les projets java se dĂ©roulent gĂ©nĂ©ralement sur plusieurs mois avec des Ă©quipes un peu consĂ©quentes, les projets d’applications mobiles sont gĂ©nĂ©ralement plus courtes, avec des Ă©quipes plus petites. Les applications doivent ĂȘtre innovantes et rapidement mises sur le Market pour arriver avant la concurrence. Cela vaut-il donc le coup d’investir dans tous les moyens habituels (build, intĂ©gration continue, 
) qui peuvent paraĂźtre lourds et dĂ©mesurĂ©s pour un tel projet ?

    A fortiori, le versionning du code est indispensable, peu importe la nature et la taille du projet. Je ne vais pas m’étendre sur le sujet, cela fait des annĂ©es que cette pratique s’est gĂ©nĂ©ralisĂ©e. Concernant le build et l’intĂ©gration continue, cela a un intĂ©rĂȘt dĂšs lors que l’équipe de dĂ©veloppement est constituĂ©e de plus d’une personne. Cela facilitera le travail des dĂ©veloppeurs et permettra d’avoir une version rapidement montrable au marketing ou la MOA, indispensable pour avoir du feedback rapide.

    MalgrĂ© la taille rĂ©duite de ces projets, il ne faut donc pas hĂ©siter Ă  investir un minimum pour faciliter le travail des dĂ©veloppeurs d’une part et dans une optique de maintenance d’autre part. L’application doit certes sortir rapidement, mais elle devra continuer de vivre et d’évoluer et donc la qualitĂ© incombe.

    Maven, la bonne solution ?

    Maven a ses dĂ©tracteurs mais est globalement trĂšs rĂ©pandu en entreprise pour construire les projets java. Concernant Android, je ne suis pas sĂ»r qu’on puisse en dire autant pour le moment


    AprĂšs l’avoir utilisĂ© sur l’application Sinistres de Generali, plusieurs constats :

    • Les jar Android n’Ă©taient disponibles dans aucun repo central. J’ai contactĂ© Romain Guy pour avoir des infos sur le sujet mais aucune rĂ©ponse. Ils sont disponibles depuis quelques jours sur le repo central. Enfin ! Par contre, il manque encore google maps.
    • Le plugin mosabua, dĂ©crit dans le livre Maven Definitive Guide, censĂ© remĂ©dier Ă  cela en installant les jar dans le repo local, nĂ©cessitait il y a encore peu de temps de modifier les pom.xml pour concorder avec les versions du SDK Android (1.5 pour la 3, 1.6 pour la 4
). Cela semble aujourd’hui rĂ©solu mais nous a fait perdre pas mal de temps.
    • Une fois installĂ©, le plugin fonctionne plutĂŽt bien et permet de compiler, tester, packager, dĂ©ployer sur un Ă©mulateur
 depuis sa ligne de commande mvn.
    • Par contre, n’espĂ©rez pas trop utiliser le trio Eclipse – Maven – Android, y compris avec m2eclipse. Les trois s’entendent assez mal : les projets Android sous Eclipse ont un format un peu particulier (rĂ©pertoire gen gĂ©nĂ©rĂ© lors des modifications de ressources, rĂ©fĂ©rencement du sdk Android). Lorsque m2 est activĂ© sur le projet ou simplement avec eclipse:eclipse, plus rien ne fonctionne : On perd le type Android du projet et il s’emmĂȘle les pinceaux avec le rĂ©pertoire gen donc impossible de travailler depuis Eclipse, fĂącheux. Il existe un plugin eclipse supplĂ©mentaire pour tenter d’intĂ©grer les trois mais ca n’a pas fonctionnĂ© pour moi…

    Au final beaucoup de temps perdu pour avoir un environnement de dĂ©veloppement un peu bancal et la question : est ce que Maven est vraiment utile dans notre cas ? On pense tout de suite Ă  Maven lorsqu’il s’agit de builder notre application mais n’est-ce pas un peu too much ?

    L’un des principaux bĂ©nĂ©fices de Maven est la gestion des dĂ©pendances. Hors, dans une application Android, le nombre de dĂ©pendances est somme toute assez ridicule. Vous aurez gĂ©nĂ©ralement l’api google maps, Ă©ventuellement une librairie pour faire du soap, et en poussant le bouchon admob ou google analytics. Aucune dĂ©pendance transitive. Bref, pas de quoi sortir la grosse artillerie. D’autant plus qu’aucune de ces librairies n’est dispo dans un repo central et il vous faudra donc les installer manuellement dans un repo d’entreprise ou local.

    Pour le reste, toutes les commandes disponibles grĂące au plugin Maven le sont Ă©galement avec ant, qui semble ĂȘtre l’outil prĂ©conisĂ© par Google.

    Ant, la solution fournie en standard

    Lorsque vous crĂ©ez un projet via la ligne de commande (android create project --target 8 --name AndroidAnt --path ./AndroidAntProject --activity AndroidAntActivity --package com.octo.android.androidant), un fichier build.xml est gĂ©nĂ©rĂ©, contrairement aux projets créés dans Eclipse. Ce build.xml minimaliste (quasiment vide) fourni toutefois l’essentiel des tĂąches nĂ©cessaires :

    • clean, pour nettoyer le projet
    • compile, pour compiler le code et gĂ©nĂ©rer les classes
    • debug, pour gĂ©nĂ©rer le package (apk) avec le keystore de debug (gĂ©nĂ©ralement dans $HOME/.android/debug.keystore)
    • release, pour gĂ©nĂ©rer le package avec votre keystore (gĂ©nĂ©ralement celui que vous allez utiliser pour publier sur le market)
    • install, pour installer l’application sur un Ă©mulateur (dĂ©marrĂ©) ou un device connectĂ©.
    • uninstall, pour dĂ©sinstaller l’application prĂ©cĂ©demment installĂ©e.

    C’est assez confortable car vous n’avez pas Ă  Ă©crire ces tĂąches, elles sont dĂ©finies dans le fichier {SDK}/platforms/{platform}/templates/android_rules.xml. ComparĂ© Ă  toutes les tĂąches plus ou moins manuelles Ă  effectuer avec Maven, on y gagne franchement au dĂ©part.

    Par contre, la solution Ant souffre Ă©galement de l’intĂ©gration avec Eclipse. En effet, les tĂąches Ă©tant dĂ©finies dans un fichier externe, elles ne sont pas disponibles dans la vue Ant. La solution alternative consiste Ă  utiliser les external tools avec une des commandes ci-dessus.

    Intégration continue

    Si les deux outils vu prĂ©cĂ©demment sont un peu en dĂ©saccord avec l’IDE, ils n’en restent pas moins tout Ă  fait utilisable en dehors via la ligne de commande et donc Ă©galement via un outil d’intĂ©gration continue comme Hudson.

    Aussi simplement que sur un projet Java standard, vous pouvez configurer un build (maven ou ant) et la commande souhaitĂ©e. Mais Hudson va plus loin puisque via le plugin Android Emulator Plugin, vous pouvez dĂ©marrer l’émulateur au dĂ©but du build et l’éteindre Ă  la fin. Vous pouvez Ă©galement installer l’application sur diffĂ©rentes configurations (version d’Android, rĂ©solution d’Ă©cran, densitĂ© d’Ă©cran, locale) afin de valider l’application sur les diffĂ©rentes plateformes cibles.
    Si vous ne testez que sur une plateforme, mieux vaut laisser un émulateur fonctionner, ca évite de perdre plus de 5 minutes à chaque build.

    Pour le reste, tout se passe comme pour un build standard, la seule particularitĂ© Ă©tant d’avoir le SDK installĂ© sur le serveur d’intĂ©gration continue.

    Conclusion

    Maven Ant Simplicité / Prise en main 2/5
    (plugins diverses pas encore opérationnels) 4/5
    (par défaut avec Android) Gestion de dépendances 3.5/5
    (les jars android sont enfin sur central, manque encore maps) 2/5
    (pas besoin de préciser les jars android) Intégration IDE 2.5/5
    (utiliser les external tools) 2.5/5
    (utiliser les external tools) Intégration continue 4/5
    (plugin hudson) 4/5
    (plugin hudson) TOTAL 12 / 20 12.5 / 20

    Alors, Ant ou Maven ? AprĂšs nos dĂ©boires avec Maven sur le projet Generali, j’aurai conseillĂ© Ant sans hĂ©siter. L’arrivĂ©e (trĂšs) rĂ©cente des jars dans le repo central me laisse Ă  penser qu’on pourra bientĂŽt travailler avec Maven, Android (et Eclipse) plus sereinement.

    Android a l’avantage d’ĂȘtre basĂ© sur le langage Java. On bĂ©nĂ©ficie ainsi des outils existants pour construire nos applications. Si l’intĂ©gration n’est pas totale entre l’IDE, le SDK et ces outils de builds, ils sont indispensables sur un serveur d’intĂ©gration continue. C’est aujourd’hui leur principal intĂ©rĂȘt, car Eclipse et le plugin Android (AJDT) restent Ă  mon sens incontournable sur le poste du dĂ©veloppeur pour ĂȘtre productif.

    Dans un prochain article, nous aborderons les problĂ©matiques de qualitĂ© du code et des tests…

    Suggestion d'articles :

    1. 5 minutes pour : Quels sont les ateliers de développements, IDE disponibles en PHP ?
    2. Développer une application parallÚlement sur iPhone et Android
    3. IntĂ©grez vos dĂ©veloppements d’applications grails avec maven

    Catégories: Blog Société

    Pourquoi les Websockets ?

    jeu, 07/15/2010 - 08:19


    AprĂšs la dĂ©mocratisation d’Ajax (ie. requĂȘtes HTTP asynchrones en Javascript), plusieurs techniques ont Ă©tĂ© Ă©laborĂ©es afin de permettre le push de donnĂ©es depuis le serveur toujours en utilisant HTTP. C’est grĂące Ă  ces techniques que l’on reçoit nos mails dans une application web sans avoir Ă  cliquer sur le bouton « Refresh », que les applications de chat sont possibles sans plugin tierce (Flash, Java, …), etc. Le W3C et l’IETF ont spĂ©cifiĂ© une API Javascript et un protocole nommĂ© Websocket. Ce protocole connectĂ© est adaptĂ© Ă  l’envoi de donnĂ©es dans les deux sens et Ă©vite de dĂ©tourner HTTP de son usage initial (ie. un protocole dĂ©connectĂ© sans Ă©tat).

    Le protocole Websocket, HTTP et les proxys

    Websocket n’est donc pas une spĂ©cification des techniques de push sur HTTP (long polling, HTTP Streaming, …), ni une surcouche Ă  HTTP mais bien un protocole Ă  part entiĂšre.
    Il reste pourtant liĂ© Ă  HTTP en rĂ©utilisant l’architecture rĂ©seau de celui-ci. En effet, l’ouverture d’une connexion Websocket s’effectue avec une requĂȘte HTTP qui demande au serveur « de mettre Ă  jour la connexion » en connexion Websocket.

    GET /demo HTTP/1.1
    Host: example.com
    Connection: Upgrade
    Sec-WebSocket-Key2: 12998 5 Y3 1  .P00
    Sec-WebSocket-Protocol: sample
    Upgrade: WebSocket
    Sec-WebSocket-Key1: 4 @1  46546xW%0l 1 5
    Origin: http://example.com
    
    ^n:ds[4U
    

    Le serveur, s’il supporte le protocole Websocket, peut ainsi terminer l’ouverture de la connexion et la suite du dialogue entre le client et le serveur s’effectuera avec le protocole Websocket.

    HTTP/1.1 101 WebSocket Protocol Handshake
    Upgrade: WebSocket
    Connection: Upgrade
    Sec-WebSocket-Origin: http://example.com
    Sec-WebSocket-Location: ws://example.com/demo
    Sec-WebSocket-Protocol: sample
    
    8jKS'y:G*Co,Wxa-
    

    Ce type d’ouverture de connexion permet de rĂ©utiliser le port HTTP (ou HTTPS) classiquement utilisĂ© et de passer les proxys comme une simple requĂȘte HTTP. Cependant, certains proxy n’autorisant pas les connexions longues risquent de poser problĂšme en coupant les connexions Websocket.
    Avec la démocratisation du protocole Websocket, on peut cependant espérer que ce type de proxy disparaßtra peu à peu.
    L’utilisation de Websocket sĂ©curisĂ© (wss:// dans l’URL au lieu de ws://) permet d’augmenter les chances de passer Ă  travers ces proxys peu coopĂ©ratifs. En effet, si un proxy est explicitement configurĂ© dans le navigateur, les implĂ©mentations actuelles de Websocket utilisent des tunnels via HTTP CONNECT de la mĂȘme façon que HTTPS. La connexion n’est ainsi plus diffĂ©rentiable d’une connexion HTTPS du point de vue des proxys.

    Le support des Websockets Le support par les navigateurs

    Comme pour les autres fonctionnalités qui viennent avec HTML5, les Websockets ne sont pas supportées par tous les navigateurs :

    • Chrome les supporte depuis sa version 4.0.429
    • Safari depuis la version 5.0

    Quant aux autres navigateurs, ils ne les supportent tout simplement pas encore.

    Pour pallier à ce manque temporaire, deux approches ont été implémentées :

    • un wrapper Javascript client qui bascule sur une implĂ©mentation Flash (qui est capable d’ouvrir des sockets TCP). Cette solution permet de garder tous les avantages des Websockets mais ajoute une dĂ©pendance vers le Player Flash,
    • un wrapper Javascript client qui bascule sur du long polling ou HTTP Streaming. Cette fois-ci, plus de dĂ©pendance vers le Player Flash mais on revient vers une Ă©mulation du push avec HTTP.
    Le support cÎté serveur

    CÎté serveur, il faut distinguer deux types de composants (dans le monde Java) :

    • les implĂ©mentations du protocole Websocket comme Netty, Grizzly, Jetty 7 (l’article de Xavier montre comment utiliser les Websockets avec Jetty 7), JWebSocket (et son implĂ©mentation TCP), Kaazing, … Ces implĂ©mentations proposent une API plus (Jetty) ou moins (Kaazing) bas niveau pour exploiter les fonctionnalitĂ©s du push serveur.
    • les frameworks qui proposent une API de plus haut niveau et qui s’appuient sur les implĂ©mentations prĂ©cĂ©dentes. On retrouve ainsi Atmoshpere, Cometd (en version 2) ou encore JWebSocket. Ces frameworks proposent donc une API indĂ©pendante de l’implĂ©mentation WebSocket sous-jacente (d’ailleurs, Atmosphere Ă©tait avant tout une implĂ©mentation de Comet).

    Cette distinction ne veut cependant pas dire que les frameworks implĂ©mentant le protocole Websocket sont forcĂ©ment de plus bas niveau que Atmosphere ou JWebSocket. Par exemple, Kaazing propose des fonctionnalitĂ©s et une API d’au moins aussi haut niveau que celle de JWebSocket.

    Pourquoi (pas) les Websockets ?

    Au-dela de pouvoir pousser des donnĂ©es du serveur vers le client, encore faut-il pouvoir l’exploiter sans passer son temps dans la plomberie. C’est bien de pouvoir rĂ©agir Ă  une connexion, un message, une dĂ©connexion, … mais il faut gĂ©rer les clients connectĂ©s, les timeouts des connexions (le client ne connait pas le timeout aprĂšs lequel le serveur coupe la connexion), savoir quels messages renvoyer lorsqu’une coupure de connexion survient et autres limitations du fait de la jeunesse du protocole Websocket.

    LĂ  encore les frameworks comme Kaazing, JWebsocket ou Cometd sont bien utiles pour s’occuper de ces problĂ©matiques bas niveau mais aussi pour proposer des fonctionnalitĂ©s utilisant tout le potentiel des Websockets.

    Parmi celles-ci, on peut trouver :

    • du publish subscribe
    • du RPC (Remote Procedure Call) et RRPC (Reverse Remote Procedure Call) pour que le serveur puisse appeler des services du client
    • des passerelles vers des protocoles connectĂ©s comme JMS, JDBC, Jabber, IMAP, …
    • bus Ă©vĂ©nementiel

    Enfin, il est légitime de se dire que toutes ces fonctionnalités sont envisageables avec des techniques comme Comet sur HTTP. Alors pourquoi préférer les Websockets alors que leur support par les navigateurs est encore limité et que les proxys risquent de ne pas toujours jouer le jeu ?

    Tout d’abord, lorsqu’on utilise du polling ou tout autre technique sur HTTP, on utilise forcĂ©ment une connexion dĂ©diĂ©e pour recevoir des donnĂ©es poussĂ©es du serveur vers le client et une autre connexion pour envoyer des donnĂ©es depuis le client (via une requĂȘte HTTP classique). Une connexion Websocket, quant Ă  elle, est full duplex. C’est Ă  dire que la mĂȘme connexion est utilisĂ©e pour recevoir et envoyer des donnĂ©es. Le serveur gĂšre donc moins de connexions ouvertes et moins d’ouvertures et fermetures de connexions ponctuelles. Il faut cependant souligner que les implĂ©mentations serveur doivent ĂȘtre adaptĂ©es Ă  la gestion d’un grand nombre de connexions simultanĂ©es et continues (utilisation d’un pool de threads plutĂŽt qu’un thread par socket ouverte, entrĂ©es-sorties non bloquantes, notifications par l’OS de l’activitĂ© des sockets, …), que ce soit en utilisant Comet ou les Websockets.

    Ensuite, en terme de bande passante, la taille du message minimum du protocole WebSocket est de 2 octets (0×00 pour le dĂ©but du message et 0xFF pour la fin). Avec HTTP, il faut compter au moins 200 octets pour un header. Quand il s’agit d’envoyer des messages de maintient de connexions (ou de rĂ©ouverture de connexion avec Comet), avec un nombre important de clients connectĂ©s, l’occupation de la bande passante avec Comet devient non nĂ©gligeable.

    Conclusion

    Le protocole Websocket est donc un moyen de rĂ©pondre au besoin de push de donnĂ©es depuis le serveur qui Ă©tait jusque-lĂ  implĂ©mentĂ© en dĂ©tournant HTTP de son usage prĂ©vu initialement. Il permet ainsi d’optimiser l’usage des resources cĂŽtĂ© serveur et de faire le pont entre une architecture web (ie. centrĂ©e autour de HTTP et des navigateurs Internet) et les autres protocoles connectĂ©s (JMS, IMAP, Jabber, …) ouvrant ainsi la porte au web « temp rĂ©el ».

    Suggestion d'articles :

    1. Jetty & HTML 5: les WebSockets sont lĂ  !
    2. Des téléphones mobiles connectés à internet. Pourquoi faire ?

    Catégories: Blog Société

    ProblÚmes courants: Imprécision des calculs mathématiques (1Úre partie)

    mer, 07/14/2010 - 18:00


    J’inaugure aujourd’hui une nouvelle chronique que j’ai appelĂ©e problĂšmes courants. J’y traiterai l’une aprĂšs l’autre les erreurs classiques rencontrĂ©es Ă  travers mes annĂ©es d’informatique.

    Ce premier article de la sĂ©rie visera Ă  dĂ©mystifier les calculs mathĂ©matiques et Ă  Ă©tablir de bonnes pratiques au sein d’une application d’entreprise. Par application d’entreprise, nous entendons une application gĂ©rant des montants d’argent, des prix, des quantitĂ©s. Il a Ă©tĂ© coupĂ© en deux, la premiĂšre partie expliquant le problĂšme, la deuxiĂšme montrant comment le gĂ©rer en Java et .Net.

    Bill travaille sur un logiciel de paiement de commissions. Il doit ajouter une commission de 1,2$. Il se fait donc une petite méthode faisant cette opération et le petit test unitaire qui va avec.

     @Test
     public void testAddCommission() {
      double actual = addCommission(1000000.1);
      assertEquals(1000001.3, actual, 0);
     }
    
     public static double addCommission(double nominal) {
      return nominal + 1.2f;
     }

    java.lang.AssertionError: expected:<1000001.3> but was:<1000001.3000000477>

    « Ah ben zut alors! C’est pas le bon rĂ©sultat ».

    Qu’est-ce qui se passe?

    Virgules flottantes vs décimaux

    Les nombres Ă  virgule flottante (floating point numbers) ont Ă©tĂ© introduits pour des raisons de performance (et uniquement pour ça) dans les ordinateurs. Ils sont devenus omniprĂ©sents depuis l’arrivĂ©e du Intel 80486 et son coprocesseur de virgules flottantes. Cela permet de faire une multiplication ou une division en 1 cycle de processeur. Il s’agit des types float, double et quad (leur prĂ©cision respective dĂ©pend du langage mais chacun double la prĂ©cision du prĂ©cĂ©dent).

    Avec des dĂ©cimaux, c’est plus lent (en gros autant d’opĂ©rations que quand vous posiez une multiplication au primaire, sauf qu’heureusement un ordinateur va plus vite et fait moins de fautes…). Par dĂ©cimaux nous entendons le type decimal (en .Net) et BigDecimal (en Java).

    Pourquoi utilisez de dĂ©cimaux dans ce cas me direz-vous? Car ils n’utilisent pas la mĂȘme reprĂ©sentation.

    Dans les deux cas, nous avons une mantisse et un exposant. Toutefois, la mantisse d’un dĂ©cimal est un entier. Celle de la virgule flottante, un nombre entre 0 et 1 en base 2. Il faut bien comprendre que les chiffres Ă  droite de la virgule sont donc puissance de fraction de 2, car nous sommes en base 2. Par exemple, 0,1 en base 2 vaut 0,5 en base 10.

    Un autre exemple: 7.5, s’Ă©crit 75E-1 en dĂ©cimal, la mantisse est de 75 et l’exposant sera -1. Pour la virgule flottante, nous aurons 0.75E1 en base 10, ce qui donne 0.11 en base 2 ((1/2)^1 + (1/2)^2) pour la mantisse et 1 pour l’exposant. En gros, il s’agit d’une sĂ©rie de puissance d’1/2 au lieu d’un sĂ©rie de puissance de 1/10. C’est ce changement de reprĂ©sentation qui permet des calculs si rapide, car comme on le sait, les ordinateurs aiment bien le binaire.

    C’est un problĂšme de base

    Les problĂšmes surviennent quand le nombre se reprĂ©sente parfaitement en base 10, mais ne peut l’ĂȘtre en base 2. L’exemple courant est 0.1. Sa valeur en base 2 est pĂ©riodique (0.000110011001100…). Nous ne pouvons par le reprĂ©senter prĂ©cisĂ©ment. La norme IEEE 754 rĂ©gissant l’arithmĂ©tique des nombres Ă  virgule flottante s’efforce donc de les exprimer au mieux et de gĂ©rer les arrondis, mais la perte de prĂ©cision reste.

    Il est trÚs important de comprendre que les problÚmes dont on parle sont des problÚmes de représentation et non pas des problÚmes de précision.
    Les problĂšmes de prĂ©cision, on sait les gĂ©rer. Il suffit d’augmenter la prĂ©cision. La prĂ©cision n’est pas suffisante dans un double et hop, on passe Ă  un quad. Mais notre 0,1 ne pourra toujours pas ĂȘtre reprĂ©sentĂ© prĂ©cisĂ©ment. À noter, ce n’est pas dĂ©pendant du langage. Tous les reprĂ©sentent de la mĂȘme façon et utilisent le coprocesseur de virgules flottantes pour leurs calculs.

    L’exemple de 0.1 en plus dĂ©taillĂ©:

    float f = 0.1f;
    System.out.println(f); // affiche 0.1
    BigDecimal d = new BigDecimal(f);
    System.out.println(d); // affiche 0.100000001490116119384765625

    On pourrait croire que le passage vers le BigDecimal dĂ©truit le chiffre. Et non. Pour compliquer l’histoire, c’est l’affichage du float qui est faux. La vraie valeur du float est celle affichĂ©e par le BigDecimal. Mais l’algorithme d’affichage des virgules flottantes est d’afficher autant de bits que nĂ©cessaire pour faire la diffĂ©rence entre deux valeurs adjacentes. Donc, en fait, l’affichage tronque la vraie valeur.

    Conclusion

    Comme nous avons briĂšvement vu plus haut, le type dĂ©cimal est diffĂ©rent. Il est composĂ© d’une mantisse et d’une Ă©chelle, mais la mantisse est sous forme d’entier. La valeur dĂ©crite est donc dans tous les cas parfaitement reprĂ©sentĂ©e et n’a pas besoin d’ĂȘtre arrondie. Cette prĂ©cision est essentielle dans le cadre d’une application manipulant des montants d’argent par exemple.

    D’ailleurs, nos ancĂȘtres le savaient. Aucun programmeur Cobol de l’Ă©poque n’utiliserait une virgule flottante. Malheureusement, le savoir s’est perdu en chemin. Le plus cuisant exemple est Java qui n’avait mĂȘme pas de type dĂ©cimal (BigDecimal) lors de sa crĂ©ation.

    Cette erreur a Ă©tĂ© rĂ©parĂ© et en prime, le BigDecimal java n’a virtuellement pas de restriction de taille (et donc de problĂšme de prĂ©cision). Le decimal .Net est de son cĂŽtĂ© sur 128 bits. C’est largement suffisant pour prĂ©venir les erreurs de prĂ©cision Ă©tant donnĂ©e l’Ă©chelle des montants des applications d’entreprise.

    PremiĂšre rĂšgle: Ne jamais utiliser de nombres Ă  virgule flottante dans vos applications de type entreprise. Dans aucun cas! MĂȘme pour vos littĂ©raux. Mettez une rĂšgle Checkstyle s’assurant que personne ne les utilise.

    Il y a bien sûr des exceptions à cette rÚgle (performance), mais elles sont rarissimes.

    La suite de cet article dĂ©taillera l’usage des types dĂ©cimaux (BigDecimal et decimal) en Java et .Net. En effet, mĂȘme s’ils prĂ©viennent les problĂšmes de reprĂ©sentation, d’autres erreurs vous attendent Ă  l’orĂ©e du bois.

    Suggestion d'articles :

    1. ProblÚmes courants: Imprécision des calculs mathématiques (2e partie)
    2. SĂ©curitĂ© des services web – 1Ăšre partie
    3. Refactoring .NET avec UML, 1Ăšre partie

    Catégories: Blog Société