Skip to content

Blogs de Développeurs: Aggrégateur de Blogs d'Informatique sur .NET, Java, PHP, Ruby, Agile, Gestion de Projet

Forum Logiciel

Forum Logiciel : diffusion de connaissance et d’informations sur toutes les activitĂ©s liĂ©es au dĂ©veloppement d’applications informatiques en entreprise.

Agrégateur de flux

Détecter les versions dépassées de vos dépendances Node.js

L’écosystĂšme Node.js est non seulement trĂšs jeune, mais Ă©galement trĂšs dynamique. Les versions des librairies que vous utilisez ont tendance Ă  changer trĂšs vite. Pour vous Ă©conomiser la recherche permanente des versions de librairies les plus rĂ©centes pour mettre Ă  jour votre fichierpackage.json,npm met Ă  disposition l’outil npm-outdated qui se charge d’analyser vos dĂ©pendances et de vous indiquer celles qui ne sont plus Ă  jour.

npm-outdated

L’outil npm-outdated s’utilise trùs simplement en l’appelant de la façon suivante:

npm outdated --depth=0

Et produira la sortie ci-dessous:

Les versions plus anciennes de l’outil ne produiront pas de sortie colorisĂ©e, il est donc intĂ©ressant de monter de version. La version de npm utilsĂ©e ici est la 1.4.9.
npm-outdated analysera aussi bien vos dépendances standards que les dépendances de développement sans faire de distinction.
La sortie retournĂ©e par l’outil ne montre que les dĂ©pendances ayant une version dĂ©passĂ©e. Vous ne verrez donc pas les dĂ©pendances ayant une version Ă  jour.
3 versions différentes sont renseignées: Current, Wanted et Latest. Ces versions représentent respectivement la version courante, puis la derniÚre version à jour correspondant au pattern de version déclaré pour votre dépendance dans le fichier package.json, et enfin la derniÚre version disponible de la librairie.

Option depth

Le paramĂštre –depth=0 permet de se limiter aux dĂ©pendances directes sans se soucier des dĂ©pendances tirĂ©es par les librairies elles-mĂȘme tirĂ©es par vos dĂ©pendances directes.

Si nous utilisons le paramĂštre –depth=2, les dĂ©pendances indirectes commenceront alors Ă  ĂȘtre matĂ©rialisĂ©es dans la sortie de l’outil :

Option json

Le paramĂštre –json permet quant Ă  lui d’obtenir une sortie JSON. Cette option est particuliĂšrement pratique pour exploiter l’information produite dans des rapports de build par exemple, ou bien pour ĂȘtre exploiter par d’autres outils.

En exécutant la ligne de commande suivante :

 

npm outdated --depth=0 --json

 

Vous obtiendrez la sortie suivante:

 

{
  "coffee-script": {
    "current": "1.6.3",
    "wanted": "1.6.3",
    "latest": "1.7.1",
    "location": "node_modules/coffee-script"
  },
  "passport-local": {
    "current": "0.1.6",
    "wanted": "0.1.6",
    "latest": "1.0.0",
    "location": "node_modules/passport-local"
  },
  "uglify-js": {
    "current": "2.4.13",
    "wanted": "2.4.14",
    "latest": "2.4.14",
    "location": "node_modules/uglify-js"
  }, ...
}
npm-update

Maintenant que vous connaissez les derniĂšres versions disponibles, vous souhaitez peut-ĂȘtre en mettre certaines Ă  jour. Pour cela, vous pouvez utiliser l’outil npm update.

Pour mettre à jour la librairie request, il faudrait exécuter la commande suivante :

npm update request
Badges pour votre repository GitHub

Le projet David vous permet de générer des badges indiquant si les versions de vos librairies sont à jour ou bien dépassées.

Ce projet est particuliĂšrement intĂ©ressant car, non seulement, il gĂ©nĂšre des rapports pour votre projet sans que vous ayez Ă  lever le petit doigt, mais il gĂ©nĂšre Ă©galement des badges que vous pouvez exposer les pages de votre projet permettant d’indiquer l’état des versions de vos dĂ©pendances.

Pour exemple, pour savoir si le projet gtfs-playground a les versions de ses dépendances à jour, vous pouvez vous rendre sur la page suivante: https://david-dm.org/akinsella/gtfs-playground

L’outil fonctionne exclusivement avec les repositories Github. Pour construire un rapport pour votre projet, il suffit de renseigner votre organization et du nom de votre repository dans l’url suivante avant de l’appeler:

https://david-dm.org/<organization>/<repository>

De mĂȘme, pour obtenir le badge correspondant Ă  votre projet, il suffit de construire la balise img comme suit:

https://david-dm.org/<organization>/<repository>.<extension>

Ce qui donne le résultat suivant pour le format png:

Et pour le format svg:

Conclusion

L’écosystĂšme Node.js Ă©volue rapidement. Les librairies proposent donc rĂ©guliĂšrement de nouvelles fonctionnalitĂ©s ou bien encore des corrections de bug. Il ne faut donc pas hĂ©siter Ă  mettre Ă  jour ses librairies.

Attention cependant Ă  ne pas non plus se prĂ©cipiter et installer une version de librairie qui ne serait plus compatible avec votre code ou bien encore d’installer une version buggĂ©e. Il faut donc penser Ă  faire tourner ses tests pour s’assurer qu’aucune regression n’impacte votre base de code.

Catégories: Blog Société

Xamarin & Android Wear (1/3) : Les bases indispensables pour bien démarrer


 J’ai eu rĂ©cemment l’occasion de crĂ©er une application Android Wear pour un client avec Xamarin. Ce projet, bien qu’intĂ©ressant, ne s’est pas fait sans peine : Android Wear reste aujourd’hui encore en preview et l’est davantage avec Xamarin. Je vous...
Catégories: Blog Société

Le TechTrends Front est Ă  mettre au pied du sapin !

A quelques jours de Noël, vous cherchiez une idée de cadeau à mettre au pied du sapin ?

TechTrends-Front-XebiaLe voici, le TechTrends n°5, dédié au Front-End.

Ces derniÚres années, les applications informatiques ont grandement évolué. Ainsi, une nouvelle « branche » de projets Web est apparue : les applications Front-end.

Ce Techtrends, Ă  travers la gestation d’une application Web – maquettage, dĂ©veloppement et industrialisation – tentera de vous aiguiller dans ce dĂ©dale et de pointer les technologies d’aujourd’hui et de demain afin de crĂ©er des interfaces modernes, ludiques et interactives fluidifiant l’accĂšs des utilisateurs Ă  l’information.

Vous avez manqué les premiers numéros du TechTrends ? Retrouvez-les ici.

Le premier Ă©tait dĂ©diĂ© au BigData, le second au mouvement DevOps, le troisiĂšme Ă  l’agilitĂ© et enfin le 4Ăšme au mouvement Software Craftsmanship.

Joyeuses fĂȘtes !

Catégories: Blog Société

Pattern Command: Undo, variations Compensation/Replay/Memento

Zenika - lun, 12/15/2014 - 17:00

La derniÚre fois je vous avez parlé de quelques patterns d'implémentation avec les enums java et en particulier de l'application des enums au Domain Driven Design grùce à l'inversion de dépendance. Aujourd'hui nous allons parler d'un design pattern classique, le pattern Command. AprÚs un rappel de sa structure et de ses utilisations, nous irons un peu plus loin en analysant en particulier 3 variations permettant d'implémenter l'undo/redo.

Rappels sur le pattern Command Dans le langage commun, un pattern désigne un motif répétitif, tel ceux qui décorent les tapis et le carrelage. En programmation, un pattern désigne une solution fréquente à un problÚme récurrent. Il existe plusieurs types de patterns: Les analysis patterns modélisent des domaines métiers particuliers (mesures et... Read Pattern Command: Undo, variations Compensation/Replay/Memento

Catégories: Blog Société

Leader election avec Cassandra

Ces derniĂšres annĂ©es les architectures horizontales sont devenues la norme. On se retrouve alors bien souvent avec des fermes contenant 5, 10 ou bien plus de serveurs identiques chacun pouvant traiter le mĂȘme type de requĂȘtes.

Que faire si l’on souhaite que l’un de ces serveurs ait un rĂŽle particulier Ă  un instant T ? Il faut alors choisir un leader parmi notre ferme de serveurs. La solution la plus simple est de mettre en dur le nom de la machine leader dans notre code. Mais cette solution est trop simple et introduit un SPOF dans notre infrastructure dans le cas oĂč notre machine maitre est indisponible.

Il nous faut donc un mĂ©canisme permettant d’Ă©lire dynamiquement un leader parmi une ferme de serveurs.

Dans cet article nous utiliserons Cassandra, une base noSQL distribuée sans SPOF.

L’Ă©lection d’un leader revient Ă  l’acquisition d’un lock par un serveur de notre ferme. La machine ayant acquis le lock est alors Ă©lue leader.

Pour mettre en place un lock distribuĂ©, nous allons nous appuyer sur une fonctionnalitĂ© apparue avec Cassandra 2.0, les "Lightweight transactions". Celles-ci permettent d’Ă©crire une requĂȘte du type :

INSERT into locks (lock_name) values ('mon_lock') IF NOT EXISTS;

Ce mĂ©canisme permet d’assurer la crĂ©ation de notre lock de maniĂšre unique au sein de notre cluster Cassandra. Cette fonctionnalitĂ© se base sur le protocole de consensus Paxos permettant Ă  un systĂšme distribuĂ© de s’accorder sur une proposition sans avoir besoin d’un serveur Master. Pour plus d’information sur ce protocole se rĂ©fĂ©rer au document: "Paxos made simple".

Si la ligne a pu ĂȘtre crĂ©Ă©e on obtient alors le rĂ©sultat suivant :

cqlsh:test> INSERT INTO lock (lockname) values ('mon_lock') IF NOT EXISTS;

 [applied]
-----------
      True

Dans le cas oĂč une autre machine a pris le lock on obtient le rĂ©sultat suivant :

cqlsh:test> INSERT INTO lock (lockname) values ('mon_lock') IF NOT EXISTS;

 [applied] | lockname
-----------+----------
 False | mon_lock

Et le schĂ©ma de notre table dans Cassandra, avec un TTL ("time to live") par dĂ©faut permettant de s’assurer qu’une machine ne conservera pas le lock ad vitam aeternam :

CREATE TABLE lock (
  lockname text PRIMARY KEY
) with default_time_to_live = 180

Pour encore plus de facilitĂ© il est facile d’exposer ce service via une interface REST simple :

  • Un PUT sur l’URL /v1/locks/mon_lock renverra un status 201 ("Created") dans le cas oĂč le serveur cible a pu crĂ©er le lock
  • Il renverra un 409 ("Conflict") dans le cas oĂč le lock est pris par un autre serveur.

Et voilĂ  une façon simple de gĂ©rer un lock distribuĂ© sur une infrastructure, plus besoin d’utiliser Zookeeper, etcd ou Redis dans ce but !

Catégories: Blog Société

Sommes-nous tous X, Y, Z ?

ekito people - lun, 12/15/2014 - 11:18

L’alphabet est Ă  la mode. Etre « Y » encore plus. Faut-il se sentir Ă  l’Ă©cart et dĂ©passĂ© lorsqu’on est un pauvre « X » (comme moi) et que les « Z » poussent dĂ©jĂ  vers le marchĂ© de l’emploi ?

Pourquoi parler de caractĂ©ristiques gĂ©nĂ©rationnelles alors que le concept mĂȘme est controversĂ© dans le champ scientifique  [sur ce sujet voir le trĂšs bon article de Claudine Athias-Donfus “Rapports de gĂ©nĂ©ration et parcours de vie” ?]  En effet, au-delĂ  des indĂ©niables influences causĂ©es par la temporalitĂ© et les Ă©vĂ©nements collectifs vĂ©cus en commun, d’autres facteurs, comme le capital social, Ă©conomique, le fait religieux ou politique, semblent pour beaucoup de sociologues plus discriminants que des facteurs uniquement dus Ă  l’Ăąge.

Usage-et-Generations-1024x733

http://elusnumeriques.info/dis-moi-de-quelle-generation-tu-es-je-te-dirais-la-meilleure-facon-de-communiquer-avec-toi/

Pourtant la « GĂ©nĂ©ration Y » apparaĂźt  aujourd’hui,comme un phĂ©nomĂšne de sociĂ©tĂ© qui a envahi  l’intĂ©gralitĂ© de l’espace public, en France comme outre-Atlantique. Fortement mĂ©diatisĂ©e, que ce soit par le biais de la tĂ©lĂ©vision, d’Internet, des rĂ©seaux sociaux ou encore de la presse Ă©crite, la GĂ©nĂ©ration « Why ? » – c’est-Ă -dire les « jeunes » nĂ©s entre 1980 et 1994 environ et aujourd’hui en trĂšs grand nombre sur le marchĂ© du travail – fait “couler beaucoup d’encre”. Dans la blogosphĂšre en particulier (lagenerationy.com ; generationy20.com etc), les praticiens semblent passionnĂ©s par le sujet qui de surcroĂźt fait recette (Bouchez, 2011).

Cependant, comme le montrait dĂ©jĂ  Socrate plus de 400 annĂ©es avant JĂ©sus-Christ, la jeunesse est «incomprise » depuis la nuit des temps. Cette gĂ©nĂ©ration est probablement la plus « fantasmĂ©e » du dĂ©but du XXIĂšme siĂšcle. Les observateurs, journalistes, bloggeurs, DRH, lui attribuent des caractĂ©ristiques spĂ©cifiques Ă  tous les niveaux de vie, mais particuliĂšrement en ce qui concerne les attentes et les comportements de ses membres face au travail : la volontĂ© d’accĂ©der d’emblĂ©e Ă  des postes Ă  responsabilitĂ©s, un rejet de l’autoritĂ©, une vision trĂšs court terme, une focalisation sur les loisirs (“L’intĂ©gration de la gĂ©nĂ©ration Y en entreprise aujourd’hui : Enjeux, opportunitĂ©s et obstacles pour les entreprises et les institutions de formation“De Bovis, Fatien et GlĂ©e, 2009). Certains Ă©voquent aussi leur prĂ©tendue « adaptabilitĂ© » aux nouvelles technologies (“Are you ready for the next generation of workers ?”, Kimberly, 2009) Les mĂ©dias Ă©voquent Ă©galement leur faible loyalisme : un Y serait destinĂ© Ă  changer d’employeur environ 29 fois au cours de sa carriĂšre ( « Talk GenerationY’slanguage », HR Magazine, janvier, 25, Mahoney, 2009). Le monde de la recherche, Ă  l’affĂ»t des tendances sociales se penche de plus en plus sur le sujet, un colloque « comportement de la gĂ©nĂ©ration Y au sein des organisations » lui sera mĂȘme consacrĂ© au printemps prochain Ă  l’UniversitĂ© de Metz.

ob_47d1a5d98d7ba0f5aa30ef84c0cac7b9_rs-vintage

 

Force est de constater que cette affirmation a du « plomb dans l’aile » au regard des trajectoires individuelles et des pratiques collectives dans nombres d’entreprises liĂ©es au secteur de l’innovation. Au sein des startup, par exemple, les modalitĂ©s de rapport dans le travail bouleversent ces prĂ©jugĂ©s et l’on observe plutĂŽt des adhĂ©sions et des rejets collectifs en fonction des centres d’intĂ©rĂȘts et des objectifs fixĂ©s plutĂŽt qu’au regard de l’Ăąge des collaborateurs. Combien de « X » rĂ©pondent en effet Ă  tous les critĂšres supposĂ©s caractĂ©ristiques des Y ? Combien de « Y » ne sont pas compatibles avec l’esprit de crĂ©ation, de contribution, d’autonomie, mais aussi d’incertitude du modĂšle startup ?

e tract_204-1 a

Finalement la question Ă  se poser sur les modes de relation dans l’entreprise ne serait-elle pas plutĂŽt la question de “l’entre-soi” que celui de l’Ăąge. Selon la dĂ©finition du Larousse, l’entre soi est une “situation de personnes qui choisissent de vivre dans leur microcosme (social, politique, etc.) en Ă©vitant les contacts avec ceux qui n’en font pas partie“. Le monde de l’entreprenariat, en particulier celui des startup ne rĂ©pond pas rĂ©ellement, Ă  ce jour, Ă  la nĂ©cessitĂ© vitale d’intĂ©gration pour la sociĂ©tĂ© contemporaine. La crĂ©ation d’accĂ©lerateurs ouverts sur la diversitĂ© des profils et des projets, offrant l’ensemble des accompagnements “sur mesure”, avec un volet de mise en pratique, plutĂŽt qu’axant l’ensemble de sa dĂ©marche sur des garants économiques et des prĂ©-requis sociaux, est sans doute l’une des rĂ©ponses positive Ă  cette prĂ©occupation.

The post Sommes-nous tous X, Y, Z ? appeared first on ekito people.

Catégories: Blog Société

[Devoxx 2014] Notre regard sur le futur de Java


Avec plus de 3500 participants, plus de 200 talks, le tout sur 5 jours, Devoxx est la confĂ©rence majeure sur l’écosystĂšme Java en Europe. DiffĂ©rents types de session s’enchaĂźnent lors de ces 5 jours, allant de sessions longues, comme les...
Catégories: Blog Société

WatchKit : Episode I – À la dĂ©couverte de l’API

watchkit

AprĂšs des mois d’attente et de folles rumeurs, Apple a finalement sorti le 18 novembre dernier son SDK WatchKit, le fameux sĂ©same requis pour le dĂ©veloppement d’applications compatibles avec les futures Apple Watch. Et tout comme pour l’annonce de Swift, la sociĂ©tĂ© de Cupertino n’a pas manquĂ© de nous surprendre avec une vision bien diffĂ©rente de celle adoptĂ©e prĂ©cĂ©demment dans iOS.

À l’aide de cet article, le premier d’une courte sĂ©rie, vous dĂ©couvrirez le fonctionnement et les APIs du SDK, ainsi que les derniĂšres nouveautĂ©s d’iOS 8, telles que Framework Dynamiques et Extensions.

Architecture

WatchKit s’intĂšgre au sein d’un projet iOS via l’utilisation des App Extensions, introduites dans iOS 8. C’est donc un prolongement de votre projet (pbx) comme peuvent l’ĂȘtre les tests unitaires.

Lorsque vous ajoutez une Watch App Ă  votre application, Xcode ajoute deux nouvelles targets Ă  votre projet :

  • WatchKit iOS Extension, qui contient la logique de l’application
  • Watch App, qui contient les ressources (Storyboard, images, …)

Ces deux targets produisent deux nouveaux binaires, qui peuvent ĂȘtre considĂ©rĂ©s comme des mini-applications indĂ©pendantes. Au moment de l’archivage, le processus de build crĂ©e un bundle contenant :

  • Votre Application iOS
  • WatchKit iOS Extension
  • Watch App

Parmi ces deux derniĂšres, seule la Watch App est effectivement installĂ©e sur l’Apple Watch. Par consĂ©quent, toute l’intelligence contenue dans l’Extension est calculĂ©e sur le tĂ©lĂ©phone, qui s’occupera de transmettre les donnĂ©es prĂ©-Ă©laborĂ©es Ă  la Watch App.

Le fonctionnement de cette architecture est expliquĂ©e dans l’image suivante, issue de la documentation officielle Apple.

Interface utilisateur

MalgrĂ© le fait que les Watch App fassent parties de l’eco-systĂšme iOS, Apple nous fait ici sa premiĂšre surprise : rĂ©aliser une interface ne ressemble en rien Ă  ce que l’on fait habituellement sur iOS !

En effet, sachez tout d’abord que vous devez obligatoirement utiliser les storyboard pour mettre en place votre UI. Avec WatchKit vous ne pourrez pas utiliser les NIB ni crĂ©er programmatiquement des objets UIView.

Ce choix se retrouve au final trĂšs peu impactant, Ă©tant donnĂ© que les Watch Apps sont censĂ©es ĂȘtre une version allĂ©gĂ©e de votre application native avec trĂšs peu de vues.

Le systĂšme de layout employĂ© sur les Apple Watch n’est ni de l’AutoLayout ni de l’AutoResizingMask. À la place, Apple a choisi une troisiĂšme solution qui ressemble au LinearLayout Android, sans en ĂȘtre toutefois une copie.

Son fonctionnement est assez simple et basĂ© sur le concept de stack : Ă  chaque fois que vous ajoutez un Ă©lĂ©ment dans la hiĂ©rarchie, celui-ci s’affiche en dessous des prĂ©cĂ©dents, crĂ©ant une pile. Vous pouvez ensuite changer ses attributs pour modifier sa position, ou bien encore ajouter des espaces entre les Ă©lĂ©ments.

Vous avez Ă©galement la possibilitĂ© d’utiliser des Groups qui vous permettront d’organiser plusieurs Ă©lĂ©ments ensemble ou encore de les positionner de maniĂšre horizontale.

MalgrĂ© le fait que ce nouveau systĂšme soit moins puissant que l’AutoLayout, cela ne l’empĂȘche pas d’avoir de nombreuses qualitĂ©s, non nĂ©gligeables :

  1. Une prise en main simple et rapide

  2. RĂ©aliser une UI se veut beaucoup plus rapide qu’avec AutoLayout

  3. La root view est scrollable : quand la taille du contenu est supĂ©rieure au containeur, il est possible de dĂ©filer l’écran sans besoin de mettre en place un UIScrollView

  4. Cacher un Ă©lĂ©ment (via la mĂ©thode setHidden) le retire du flow du layout, exactement comme si celui-ci n’avait jamais existĂ©. Un vrai changement par rapport Ă  AutoLayout !

Ce dernier point est trĂšs important puisque, parmi les points faibles de cette version de WatchKit, on citera le fait qu’on ne puisse pas ajouter ou supprimer d’élĂ©ments au runtime. Vous devrez donc avoir prĂ©vu toute votre UI dans votre storyboard et cacher/afficher les diffĂ©rents Ă©lĂ©ments selon les donnĂ©es reçues.

WKInterface*

Comme pour AutoLayout, Apple a décidé de remplacer UIView et UIViewController par deux autres composants: WKInterfaceObject et WKInterfaceController.

La "disparition" de l’objet s’explique par le fait que WatchKit ne permet pas d’instancier manuellement des objets UIView ; Ă  la place, les composants que l’on manipule depuis l’Extension (boutons, labels, images et autres) sont des proxies sur les UIView allouĂ©es dans Watch App. Ce sont les fameux WKInterfaceObject.

Cette limitation vient du fait que l’UI est gĂ©rĂ©e depuis la montre (par Watch App)  alors que la logique est exĂ©cutĂ©e sur le tĂ©lĂ©phone (par l’Extension).

De la mĂȘme maniĂšre, WKInterfaceController retire toute rĂ©fĂ©rence aux UIView : pas de propriĂ©tĂ© view ni de selector initWithNibNamed:. Seuls les IBOutlet (sur des WKInterfaceObject) sont de la partie. Le rĂŽle d’un WKInterfaceController reste nĂ©anmoins sensiblement le mĂȘme que celui d’un UIViewController:

  • RĂ©cupĂ©rer des donnĂ©es depuis un serveur distant
  • Mettre Ă  jour l’UI via les propriĂ©tĂ©s des WKInterfaceObject
  • ContrĂŽler le cycle de vie d’une view Ă  l’aide des mĂ©thodes willActivate et didDeactivate (analogues aux mĂ©thodes viewWillAppear et viewDidDisappear de UIViewController)
  • GĂ©rer la pile des controller (push/pop). Ce rĂŽle, en partie dĂ©volu Ă  UINavigationController dans iOS, est ici entiĂšrement gĂ©rĂ© par WKInterfaceController
  • DĂ©finir les valeurs initiales des composants. Cette partie est simplifiĂ©e grĂące au constructeur initWithContext: qui permet de passer des donnĂ©es au WKInterfaceController Ă  sa crĂ©ation

Plus d’info sur cette classe dans la doc Apple sur WKInterfaceController 

Conclusion

À l’aide de cet article introductif nous avons dĂ©crit l’architecture et les APIs principales de WatchKit.
Les contenus sont aussi disponibles au format vidéo ou bien sous forme de slides, issus du TechEvent Xebia du 3 décembre dernier.

Dans le prochain article nous vous montrerons comment réaliser une premiÚre application Apple Watch.

Catégories: Blog Société

GĂ©rer les erreurs avec Node.js

Lorsqu’une exception n’est pas gĂ©rĂ©e dans un programme Node.js, cela se termine en gĂ©nĂ©ral par un crash du process de l’application. Il n’y a d’ailleurs pas grand chose Ă  faire pour tenter de rattraper le coup si l’erreur remonte jusqu’à la boucle d’évĂ©nement. C’est pourquoi, il est nĂ©cessaire de traiter les erreurs avec attention.

Si votre programme gĂ©nĂšre une erreur qui remonte jusqu’à la boucle d’évĂ©nement comme suit:

process.nextTick(function() {
  throw new Error("Some Bad Error");
});

Vous aurez le droit au message d’erreur qui suit:

Express listening on port: 9000
Started in 0.073 seconds

/Users/akinsella/Workspace/Projects/gtfs-playground/build/app-test.js:30
    throw new Error("Some Bad Error");
          ^
Error: Some Bad Error
    at /Users/akinsella/Workspace/Projects/gtfs-playground/build/app-test.js:30:11
    at process._tickCallback (node.js:415:13)
    at Function.Module.runMain (module.js:499:11)
    at startup (node.js:119:16)
    at node.js:901:3

Process finished with exit code 8

L’évĂ©nement ‘uncaughtException’

Node.js vous donne une chance d’intercepter les erreurs qui remontent jusqu’à la boucle d’évĂ©nement grace au dispatch l’évĂ©nement de type uncaughtExcpetion.

Contrairement Ă  ce qu’on pourrait penser, l’évĂ©nement n’est pas dispatchĂ© par le process Node.js pour catcher l’erreur et permettre de continuer au programme son exĂ©cution. C’est principalement pour gĂ©rer correctement la libĂ©ration de resources qui auraient Ă©tĂ© ouvertes par le programme, et Ă©ventuellement logger de façon plus prĂ©cise le contexte de l’erreur (Etat de la mĂ©moire, etc
).

Lorsqu’une erreur remonte jusqu’à la boucle d’évĂ©nement, il ne faut plus considĂ©rer l’état du programme comme Ă©tant consistant. C’est pour cette raison qu’il ne faut pas tenter de catcher l’exception dans l’idĂ©e de permettre au programme de continuer Ă  fonctionner.

Si vous souhaitez logger un message d’erreur dans le cas d’une exception remontĂ©e jusqu’à la boucle d’évĂ©nement, vous pouvez ajouter le code suivant Ă  votre programme:

process.on('uncaughtException', function(err) {
  console.log(JSON.stringify(process.memoryUsage()));
  console.error("An uncaughtException was found, the program will end. " + err + ", stacktrace: " + err.stack);
  return process.exit(1);
});
process.nextTick(function() {
  throw new Error("Some Bad Error");
});

Ce qui donne le résultat suivant:

/Users/akinsella/.nvm/v0.10.22/bin/node app-test.js
{"rss":12312576,"heapTotal":4083456,"heapUsed":2153648}
An uncaughtException was found, the program will end. Error: Some Bad Error, stacktrace: Error: Some Bad Error
    at /Users/akinsella/Workspace/Projects/gtfs-playground/build/app-test.js:13:11
    at process._tickCallback (node.js:415:13)
    at Function.Module.runMain (module.js:499:11)
    at startup (node.js:119:16)
    at node.js:901:3

Process finished with exit code 1

Contrairement à la gestion par défaut, nous avons pu retourner un exit code spécifique. Ici le code retour: 1
Le message de log est Ă©galement diffĂ©rent. Nous sommes donc en mesure de maitriser le log d’erreur en cas de crash.
Par ailleurs, les informations de mĂ©moire rendues disponibles dans les logs participeront Ă  faciliter l’analyse du crash.

Administration des Clusters

Dans l’univers Node.js, un Cluster est un processus Node.js du serveur. Par dĂ©faut, un seul Cluster est crĂ©Ă© au lancement du serveur et est considĂ©rĂ© comme Master.
Si ce processus est tuĂ© par une erreur qui provoque un process.exit, le serveur Node.js sera arrĂȘtĂ©.

Afin de parer Ă  ce problĂšme, le Cluster Master a la possibilitĂ© de crĂ©er des Clusters esclaves en fonction du nombre de coeurs du processeur. De cette façon, un Cluster provocant un process.exit sera tuĂ© puis relancĂ© par le Cluster Master sans que le serveur Node.js ne s’arrĂȘte.

Voici un exemple de code permettant le lancement des divers Clusters et de leur gestion en cas d’erreur :

var os = require('os'),
 cluster = require('cluster');

if (cluster.isMaster) {
  var count = os.cpus().length;
  for (var i = 0; i < count; i++) {
    cluster.fork();
  }
  //Permet de relancer les Clusters tués
  cluster.on('exit', function(worker) {
    console.error('worker ' + worker.pid + ' died. spawning a new process...');
    cluster.fork();
  });
}
Express

Si vous utilisez un framework type Express, vous serez dĂ©chargĂ© d’une partie du travail car les erreurs qui interviennent pendant le traitement d’une requĂȘte HTTTP sont catchĂ©es par le framework qui gĂ©rera pour vous l’erreur.

Par dĂ©faut Express se contente de logger un crash qui intervient dans le traitement d’une requĂȘte HTTP via un simple log retournĂ© dans la rĂ©ponse HTTP.

Par exemple, en exécutant le programme suivant:

var express = require('express');
 
var app = express();

app.configure(function() {
  app.set('port', process.env.PORT || 9000);
  return app.use(app.router);
});

app.get("/", function(req, res) {
  throw new Error("Some Bad Error");
});

var httpServer = app.listen(app.get('port'));

process.on('uncaughtException', function(err) {
  console.error("An uncaughtException was found, the program will end. " + err + ", stacktrace: " + err.stack);
  return process.exit(1);
});

console.error("Express listening on port: " + (app.get('port')));

Puis en se rendant sur l’url http://localhost:9000, Express renverra dans la rĂ©ponse HTTP le log suivant:

Error: Some Bad Error
    at /Users/akinsella/Workspace/Projects/gtfs-playground/build/app-test.js:16:11
    at callbacks (/Users/akinsella/Workspace/Projects/gtfs-playground/node_modules/express/lib/router/index.js:164:37)
    at param (/Users/akinsella/Workspace/Projects/gtfs-playground/node_modules/express/lib/router/index.js:138:11)
    at pass (/Users/akinsella/Workspace/Projects/gtfs-playground/node_modules/express/lib/router/index.js:145:5)
    at Router._dispatch (/Users/akinsella/Workspace/Projects/gtfs-playground/node_modules/express/lib/router/index.js:173:5)
    at Object.router (/Users/akinsella/Workspace/Projects/gtfs-playground/node_modules/express/lib/router/index.js:33:10)
    at next (/Users/akinsella/Workspace/Projects/gtfs-playground/node_modules/express/node_modules/connect/lib/proto.js:193:15)
    at Object.expressInit [as handle] (/Users/akinsella/Workspace/Projects/gtfs-playground/node_modules/express/lib/middleware.js:30:5)
    at next (/Users/akinsella/Workspace/Projects/gtfs-playground/node_modules/express/node_modules/connect/lib/proto.js:193:15)
    at Object.query [as handle] (/Users/akinsella/Workspace/Projects/gtfs-playground/node_modules/express/node_modules/connect/lib/middleware/query.js:45:5)

Il est Ă©galement possible d’activer un log plus dĂ©taillĂ©, avec une mise en forme HTML, particuliĂšrement utile en mode dĂ©veloppement en ajoutant les lignes suivantes:

app.configure('development', function() {
  return app.use(express.errorHandler({
    dumpExceptions: true,
    showStack: true
  }));
});

Le résultat sera le suivant:

Express vous permet Ă©galement de renseigner un middleware qui aura la possibilitĂ© d’interagir les erreurs rencontrĂ©es dans le traitement des requĂȘtes HTTP. Ce middleware peut ĂȘtre utile pour logger l’erreur rencontrĂ©e ou bien encore libĂ©rer des resources associĂ©es Ă  la requĂȘte en cours de traitement.

Il permettra Ă©galement de renvoyer une rĂ©ponse adaptĂ©e Ă  l’utilisateur en cas d’erreur non gĂ©rĂ©e. Ce point particuliĂšrement intĂ©ressant dans le cas de l’implĂ©mentation d’API REST. Le serveur devient capable de renvoyer une erreur interprĂ©table par le client mĂȘme en cas d’erreur non gĂ©rĂ©e.

Le middleware prendra la format suivant:

app.use(function(err, req, res, next) {
  console.error("Error: " + err + ", Stacktrace: " + err.stack);
  return res.send(500, "Something broke! Error: " + err + ", Stacktrace: " + err.stack);
});

Les promises

Les promises peuvent vous aider à gérer les erreurs plus efficacement grùce à leur mécanisme de gestion des erreurs.

Un traitement encapsulĂ© dans une promise ne permettra jamais Ă  une erreur de remonter jusqu’à l’event loop, l’erreur sera catchĂ©e par la promise qui sera remontĂ©e dans la fonction fail ou catch selon la librairie ou bien encore dans le callback d’erreur de la fonction then.

Il est donc intĂ©ressant d’encapsuler vos traitements avec des promises, non seulement pour amĂ©liorer la lisibilitĂ© du code, mais Ă©galement pour sa capacitĂ© Ă  rĂ©sister aux crashs.

Les domaines

La notion de domain ne sera pas traitée dans cet article, sachez néanmoins que cette notion a été ajoutée à Node.js en version 0.10.

En bref et pour faire simple, l’idĂ©e est plus ou moins de containeriser des event emitters en les associant Ă  un domain. En cas d’erreur dans le traitement d’un Ă©vĂ©nement gĂ©rĂ© par un domain, l’exception ne fera pas crasher le programme directement, c’est le domain qui sera en charge de traiter l’erreur, mais cela ne vous sauvera pas en gĂ©nĂ©ral d’un redĂ©marrage du process 
 comme en tĂ©moigne la documentation:

Domain error handlers are not a substitute for closing down your process when an error occurs.

By the very nature of how throw works in JavaScript, there is almost never any way to safely « pick up where you left off », without leaking references, or creating some other sort of undefined brittle state.

The safest way to respond to a thrown error is to shut down the process. Of course, in a normal web server, you might have many connections open, and it is not reasonable to abruptly shut those down because an error was triggered by someone else.

The better approach is send an error response to the request that triggered the error, while letting the others finish in their normal time, and stop listening for new requests in that worker.

In this way, domain usage goes hand-in-hand with the cluster module, since the master process can fork a new worker when a worker encounters an error. For node programs that scale to multiple machines, the terminating proxy or service registry can take note of the failure, and react accordingly.

La documentation de Node.js relative aux domains est disponible Ă  l’url suivante:http://nodejs.org/api/domain.html »

Catégories: Blog Société

[ASP.NET] ASP.NET 5 – vNext


ASP.NET vNext a Ă©tĂ© annoncĂ© il y a quelques mois maintenant. Depuis, le futur de la plate-forme web de Microsoft se dessine de plus en plus concrĂštement. Je vous propose, au travers de ce billet et des prochains, d’analyser l’impact...
Catégories: Blog Société

Mes notes sur la key note : CHRONOFLEX par Alexandre GERARD

Au matin d’Agile Grenoble 2014, Alexandre GĂ©rard nous a prĂ©sentĂ© son histoire sans slide et sans les mains :) ! Je suis restĂ© l’heure accrochĂ© Ă  cette histoire fantastique, alors comment ne pas partager mes notes sur cette performance ?

Voici l’histoire de l’entreprise libĂ©rĂ©e CHRONOFLEX : Transformation d’une entreprise porte-avions en une armada de Speed Boat

  • 1995 : entreprise naissante BulleSexy
    1 véhicule, 1 technicien
    DĂ©pannage de flexibles hydrauliques sur site
  • PĂ©riode euphorique :
    • Croissance Ă  3 chiffresPorteAvion
    • L’entreprise double de taille tous les ans pendant 4 ans
    • C’est la mĂ©taphore du porte avion :
      • Nous sommes 3000 personnes
      • Le 1er concurrent est tout petit
  • 2009 : c’est le clash
    • Baisse de 34 % CA
    • Ambiance Ă  la caveCave
    • Il faut virer des gens alors qu’on veut les garder
    • => Une seule obsession : Comment faire pour que ça ne recommence pas ?
  • ConfĂ©rence : L’entreprise du XXI siĂšcle existe ! nous l’avons rencontrĂ© !
    FAVI: Un papy de 65 ans (Jean-François Zobrist) arrive sur scùne, j’ai failli partir au bout de 5 minutes, puis il raconte l’histoire de son entreprise

    • En 30 ans : 22% croissance, Aucune piĂšce livrĂ©e en retard
    • Entreprise basĂ© sur des rĂšgles simples :
      • Confiance
      • Partage
      • Aucun contrĂŽle
      • Aucune hiĂ©rarchie
    • J’essaye d’accĂ©der au mentor, je fais la queue. Quand c’est mon tour je lui demande : dites-moi comment je fais pour mettre en place tout ça ! Pour seule rĂ©ponse j’obtiens un bon « DĂ©merde-toi !»
  • L’analyse :
    • RĂšgles des 3%  de couillons : j’ai gĂ©rĂ© mon entreprise pour les 3% qui trichent, piquent l’essence des vĂ©hicules, achĂštent avec la carte de l’entreprise.
      Chaque fois, j’ai rajoutĂ© une ligne dans le rĂšglement ou le contrat de travail, mis plus de contrĂŽle.
      J’ai construit des murs autour de tout le monde
    • Mon modĂšle : 300 personnes mais un seul dĂ©cideur.
  • L’action : 3 chantiers
    • Reconstruction collaborative de la vision de l’entreprise
    • Écriture des valeurs de l’entreprise sur 4 phrases clĂ©s :
      • Bonheur
      • ConquĂ©rir l’amour du client (un client n’est pas fidĂšle parce qu’il est satisfait, mais parce qu’il vous aime)
      • Equipes respectueuses et responsables
      • Ouverture d’esprit et esprit d’ouverture
    • Nettoyage : retirer les cailloux des chaussures
      Nettoyage des signes de pouvoir : place de parking réservé, CODIR fermés.
      Autre exemple : Internet = 1h/j par personne => 20% de croissance potentielle alors on ferme les robinets, mais pas pour les cadres
.ben oui eux ils doivent rĂ©server des trains 

  • Aujourd’hui :
    • Renouveau du patron :
      • Plus de bonus
      • Plus d’assistante de direction
      • Jamais le premier arrivĂ©, jamais le dernier Ă  partir
    • Entreprise « full web » : rĂ©seaux sociaux = 1er vecteur d’information
  • Livre Izaac Getz
    • Les conseils :
      • Ecoute les collaborateurs
      • Partage ta vision
      • ArrĂȘte d’essayer de motiver les collaborateurs :
        L’homme est programmĂ© pour aller vers plus de bonheur et vers plus de maĂźtrise
    • Le triptyque :
      Schema
    • Le manager a un nouveau job : prĂ©server les espaces de libertĂ©
    • Tous les speed boat vont dans le mĂȘme sens.
    • Attention Ă  ne pas oublier l’accompagnement
    • Les Ă©quipes sont auto-organisĂ©es et cooptent le capitaine.
    • RĂ©munĂ©ration :
      • Suppression de tous les bĂątons et carottes
      • Mars 2013 :
        • 15 % marge => primes individuelles
        • 15 % marge du speed boat => rĂ©parti en part Ă©gales
      • Il n’y a plus de RH qui recrute, ce sont les Ă©quipes qui embauchent
      • Les chefs sont cooptĂ©s
      • La parole est libĂ©rĂ©e
      • L’information n’est plus un enjeu de pouvoir
      • Le volontariat est au centre
      • On a quittĂ© une logique de contrĂŽle pour une logique d’autocontrĂŽle
      • On a crĂ©Ă© une culture de l’erreur
    • 4 phrases :
      • Seul on va plus vite, ensemble on va plus loin
      • Si je veux que ça change, il faut d’abord changer soi
      • Les gens ne sont pas robuste au changement, ils n’aiment pas qu’on les change
      • Il faut faire beaucoup d’effort pour ne pas agir
    • RĂ©fĂ©rences :

The post Mes notes sur la key note : CHRONOFLEX par Alexandre GERARD appeared first on Agilité, Architecture, C++ "in the mix".

Catégories: Blog Individuel

Agile Grenoble 2014 – idĂ©es, liens et mĂ©taphores

FacilitationBientĂŽt un mois depuis la tenue des confĂ©rences Agile Grenoble 2014, voici pĂšle mĂȘle quelques rĂ©fĂ©rences que j’ai ramenĂ©es dans mon sac…

Des liens Des bouquins  ImplementingDDD  content  liberté-et-compagnie Implementing DDD Vaughn Vernon La belle histoire de FAVI, J.F. Zobrist Liberté et Cie, Isaac Getz Des phrases clés
  • Facilitateur = pousse dĂ©cision
  • DĂ©merde-toi !
  • J’ai construit des murs autour de tout le monde
  • Ouverture d’esprit ET esprit d’ouverture
  • Le facilitateur n’est pas le scribe
  • « Pourquoi » : pas pour la cause mais pour le sens Ăš « pour quelles raisons »
  • Les 3%de couillons
  • Les cailloux dans la chaussure
  • Seul on va plus vite ensemble on va plus loin
  • Si je veux que ça change il faut que je change moi
  • Les gens ne sont pas rĂ©sistants au changement, ils n’aiment pas qu’on les change
  • Il faut faire beaucoup d’efforts pour ne pas agir
  • Exemples pour raconter les histoires ET pour raconter le code
  • Jeter les tests inutiles
  • BDD c’est du TDD en mieux
  • Ne jamais s’engager sans le whyArrosoire
  • Le leader est lĂ  pour donner du sens et partager la vision
  • Le manager au service de l’équipe
  • Manager = arrosoir du collaborateur
  • Bas les masques !

Et la BD bien connue du projet oĂč tout le monde s’écoute :

VisionProduit

Et un souvenir incroyable de la keynote du matin !

Merci aux organisateurs, bénévoles et sponsors de faire vivre cet évÚnement !

The post Agile Grenoble 2014 – idĂ©es, liens et mĂ©taphores appeared first on AgilitĂ©, Architecture, C++ "in the mix".

Catégories: Blog Individuel

Jeudi 11 décembre 2014 - Soirée Cassandra et toulibre !

JUG Toulouse, Groupe d'utilisateur Java - jeu, 12/11/2014 - 18:30

Jeudi 11 décembre, nous organisons une soirée en partenariat avec le Cassandra Tour, à partir de 18h30 à l'Epitech, au 40 boulevard de la Marquette (Inscrivez vous).

Présentation de l'association Toulibre L'association Toulibre qui défend les logiciels libres viendront se présenter pendant 30 minutes.

Introduction à Cassandra 2.1 Nous allons présenter Apache Cassandra 2.1 et son architecture. Nous montrerons comment la base de données peut garantir une scalabilité linéaire, une haute disponibilité tout en gardant un niveau de performance constant. Nous présenterons également le modÚle de données sous-jacent et le language CQL pour vous permettre de faire vos premiers pas avec Cassandra.

Drivers et outils pour dĂ©veloppeurs Java sur Cassandra Pour cette deuxiĂšme partie de soirĂ©e, nous prĂ©senterons l'architecture du driver Cassandra, pour montrer comment il simplifie la vie des dĂ©veloppeurs Java et les aide Ă  ĂȘtre plus productif. Une sĂ©lection de quelques frameworks et outils seront montrĂ©s en dĂ©mo live pour illustrer notre propos

Nilanjan Duy Hai est Ă©vangĂ©liste technique pour Datastax, l’entreprise commerciale derriĂšre la solution open-source Apache Cassandra. Il partage son temps entre donner des prĂ©sentations/meetups/talks sur Cassandra, dĂ©velopper sur des projets open-source pour la communautĂ© et aider les projets utilisant Cassandra. Avant Datastax, Duy Hai a Ă©tĂ© dĂ©veloppeur freelance Java/Cassandra

Catégories: Association

Hack.Summit() : des conférences de qualité pour une bonne action

Blog d’Ippon Technologies - jeu, 12/11/2014 - 13:59

DĂ©but dĂ©cembre se sont dĂ©roulĂ©es les confĂ©rences 100% en ligne de hack.summit(). Petit retour sur cet Ă©vĂ©nement qui mĂ©ritait le dĂ©tour…

Le concept

L’accĂšs au live des 37 talks, du 1er au 4 dĂ©cembre, Ă©tait rĂ©servĂ© aux inscrits. Pour s’enregistrer et rĂ©cupĂ©rer son code d’accĂšs, deux possibilitĂ©s : passer le message de la tenue de l’Ă©vĂ©nement sur les rĂ©seaux sociaux ou faire un don d’un montant de son choix.

Car c’Ă©tait bien lĂ  l’objectif principal de hack.summit() : rĂ©colter des dons reversĂ©s par la suite Ă  des associations Ă  but non lucratif visant Ă  favoriser l’accĂšs pour tous Ă  l’informatique.

En termes d’interactions durant la confĂ©rence, l’animateur pouvait lancer des sondages (pour savoir par exemple combien de personnes dans l’assistance dĂ©veloppent dans un langage donnĂ©) et les spectateurs pouvaient poser LA question Ă  laquelle ils voulaient avoir une rĂ©ponse : on pouvait voter pour la “meilleure” question, et celle rĂ©coltant le plus de suffrages Ă©tait posĂ©e en fin de confĂ©rence par l’animateur au confĂ©rencier.

Maintenant place au plat de rĂ©sistance…

Les conférences

Parmi la trentaine de talks proposĂ©s, volontairement orientĂ©s bonnes pratiques, trois m’ont particuliĂšrement plu.

Tutoriel AngularJS / Java / MongoDB par Trisha Gee

La championne a menĂ© un tutoriel trĂšs efficace sur la mise en oeuvre d’une application AngularJS / Java / MongoDB. Elle a dĂ©montrĂ© de belle maniĂšre la rapiditĂ© avec laquelle on peut dĂ©velopper une application web sur ces technologies. Elle a Ă©galement montrĂ© que l’utilisation d’une base NoSQL comme MongoDB est tout Ă  fait adaptĂ©e dans le cadre d’une dĂ©mo de ce type, dans laquelle le modĂšle de donnĂ©es ne se dĂ©finit qu’au fur et Ă  mesure des dĂ©veloppements, Ă©vitant ainsi d’avoir Ă  le modifier sans cesse. En passant, les aficionados d’IntelliJ seront comblĂ©s : l’efficacitĂ© de l’IDE est particuliĂšrement bien mise en avant ;-)

Introduction Ă  Spark par Matei Zaharia

L’inventeur du fameux Apache Spark a proposĂ© un joli tour d’horizon de sa crĂ©ation. Vous noterez au passage que le fameux effet dĂ©mo peut vraiment arriver Ă  tout le monde, mĂȘme aux meilleurs ;-)

Architecture microservices par Chris Richardson

La meilleure conférence selon moi a été celle proposée par le fondateur de Cloud Foundry, qui traitait de la création et du déploiement des microservices.

Chris Richardson a montrĂ© de quelle façon une architecture Ă  base de microservices permet d’éviter les sempiternelles architectures monolithiques.

Il a mis en avant de quelle façon pallier aux limitations des traditionnelles bases de donnĂ©es relationnelles : faire que diffĂ©rents modules d’une mĂȘme application utilisent diffĂ©rents types de bases de donnĂ©es suivant la problĂ©matique traitĂ©e par le module en question (Neo4J, MongoDB, Cassandra, ou CouchDB).

Il a ensuite expliquĂ© comment gĂ©rer les problĂ©matiques de synchronisation liĂ©es Ă  l’utilisation des microservices et des bases de donnĂ©es distribuĂ©es et dĂ©normalisĂ©es en mettant en oeuvre une architecture basĂ©e sur les Ă©vĂ©nements et le pattern CQRS : de maniĂšre gĂ©nĂ©rale, si une donnĂ©e passe d’un Ă©tat A Ă  un Ă©tat B, plutĂŽt que de simplement stocker le nouvel Ă©tat, prĂ©fĂ©rer sauvegarder tous les Ă©vĂ©nements ayant permis de passer de l’état A Ă  l’état B, et diffuser un Ă©vĂ©nement chaque fois qu’un objet d’un domaine donnĂ© change.

En derniĂšre partie ont Ă©tĂ© abordĂ©s l’intĂ©gration des microservices via Jenkins, avec un pipeline par microservice, ainsi que la crĂ©ation d’une image Docker pour les packager et les diffuser.

En bref : vivement la prochaine Ă©dition !

Avec prĂšs de 65000 inscrits, des confĂ©rences de qualitĂ© animĂ©es par de grands noms et un objectif trĂšs louable, cette Ă©dition de hack.summmit() a Ă©tĂ© efficace et en appelle forcĂ©ment d’autres.

Beaucoup d’autres thĂšmes trĂšs variĂ©s ont Ă©tĂ© abordĂ©s durant les quatre jours de l’Ă©vĂ©nement, comme l’enseignement de l’informatique aux enfants ou encore le devops chez Google. N’hĂ©sitez pas Ă  les visionner !

Catégories: Blog Société

Revue de Presse Xebia

logo-revue-presse220
La revue de presse hebdomadaire des technologies Big Data, Cloud et Web, architectures Java et mobilité dans des environnements agiles, proposée par Xebia.

AgilitĂ© Intelligence Collective: pourquoi le pari est bien plus puissant que le vote – bluenove http://www.gravatar.com/6beb8800b1d5d45c22ecc81062e12448http://blog.xebia.fr/author/nlochethttp://twitter.com/nicolaslochetPar Nicolas Lochet

La qualité des estimations est une des préoccupations clés de la gestion de projet.

Les Ă©quipes Agiles, Ă  travers le Planning Poker, s’appuient sur la force de l’intelligence collective pour obtenir de meilleures estimations. Pourtant si l’outil est globalement maĂźtrisĂ© par de nombreuses Ă©quipes, les principes sur lesquels se basent ses estimations sont souvent mal connus.

Cet article vous permet de dĂ©couvrir la valeur de l’estimation collective et plus particuliĂšrement de l’utilisation du pari. Cela peut vous donner de nouvelles idĂ©es pour aborder les notions de prĂ©dictibilitĂ© dans vos projets.

Si Ă  la lecture de l’article vous avez l’envie d’approfondir, vous pouvez aussi vous rĂ©fĂ©rer Ă  cet extrait d’un livre qui parle du « Wisdom of Crowds » et des « Predicting Markets » et contient d’autres pointeurs.

Mobilité Bluetooth passe en version 4.2 http://www.gravatar.com/0eac998a3709ea6d1b7498a49bb73ba9http://twitter.com/valdo404http://github.com/valdo404Par Laurent Valdes

Le Bluetooth SIG vient de publier la spécification de bluetooth 4.2 qui apporte entre autres la gestion de IPv6 et du 6LowPAN.

Comme chacun le sait IPv6 permet d’accĂ©der Ă  internet avec des IPs de 16 octets ce qui s’accorde parfaitement avec les adresses Bluetooth (6 octets).
De plus la spĂ©cification 4.2 apporte la gestion de 6LowPAN (IPv6 Low power Wireless Personal Area Network) ce qui permet de rĂ©aliser l’internet des objets via des rĂ©seaux de type MESH.

Enfin Bluetooth 4.2 supporte une meilleure sécurité dans le contexte des beacons et une vitesse améliorée.

Enfin, la version 1.0.0 d’Android Studio est sortie http://twitter.com/jeremmartinezPar Jeremie Martinez

AprĂšs deux ans de dĂ©veloppement, la version 1.0.0 est finalement sortie. Cette annonce, faite sur le blog Android de Google, devrait finir de convaincre les derniers irrĂ©ductibles dĂ©veloppeurs Android utilisant Eclipse. Cette release d’Android Studio s’accompagne Ă©galement d’une montĂ©e de version des SDK tools en 24.0.0.

Comment n’utiliser que ce dont vous avez besoin dans les Google Play Services ? http://twitter.com/jeremmartinezPar Jeremie Martinez

Suite Ă  la sortie des Google Play Services 6.5 que nous vous avions annoncĂ© dans une revue de presse prĂ©cĂ©dente, Google a mis Ă  jour sa documentation et nous explique sur son blog comment sĂ©lectionner uniquement les dĂ©pendances utiles Ă  notre projet dans les Google Play Services (Maps, Google+, Wear, Wallet…).

Back IoJs: pourquoi NodeJs a été forké

http://www.gravatar.com/b48c1ee560ff6432a574dceb746dff79http://twitter.com/RomainNVhttp://github.com/RNiveauPar Romain Niveau
IoJs est le nom du fork de NodeJs.
Mais pourquoi forker nodeJs ? Qu’est ce qui a poussĂ© des membres de l’Ă©quipe nodeJs Ă  forker la plateforme ?
Mikeal Rogers, créateur de la nodeConf, revient dans cet interview sur les raisons du fork, en particulier sur les problÚmes de gouvernance du projet et sur les développements en cours sur IoJs.

Cloud Numascale et AMD déploient un systÚme à mémoire partagée de 20 Téraoctets.

http://www.gravatar.com/0eac998a3709ea6d1b7498a49bb73ba9http://twitter.com/valdo404http://github.com/valdo404Par Laurent Valdes
Numascale et AMD viennent de déployer un systÚme à mémoire partagée doté de 20 TO de mémoire, pour faire tourner une seule installation de Linux sur 5000 noeuds de calcul.
Le fabric interconnect de l’architecture est basĂ© sur un ASIC permettant de rĂ©aliser la cohĂ©rence des caches de processeur Ă  une trĂšs grande Ă©chelle.

Cela permet d’optimiser les calculs scientifiques de type Ă©lĂ©ments finis et de rĂ©aliser des simulations de Monte Carlo.

DevOps SĂ©rie d’articles sur le Software Defined Networking http://www.gravatar.com/0eac998a3709ea6d1b7498a49bb73ba9http://twitter.com/valdo404http://github.com/valdo404Par Laurent Valdes

Nous avons trouvĂ© une sĂ©rie d’articles plutĂŽt bien Ă©crits sur le SDN, et notamment la norme OpenFlow, expliquant les bases du Software Defined Networking.
Le Software Defined Networking permet d’implĂ©menter une nouvelle maniĂšre de gĂ©rer le rĂ©seau au sein d’une sociĂ©tĂ©.
Cet objectif est atteint en automatisant cette partie sensible.

Cet article vous permettra de rentrer dans le vif du sujet.

Le coin de l’Alliance Thiga : Les outils du Product Manager http://www.gravatar.com/c4ecb7f7be5172c9ae22ae4f56bcf336http://twitter.com/InnoThigaPar Hugo Geissmann

Parce que la vie n’est pas faite que d’Excel, Jira et Powerpoint, la sociĂ©tĂ© SiriusDecisions nous propose son guide des outils pour le Product Manager. Un constat : le nombre et la qualitĂ© de ces outils ne cessent de progresser, c’est bon signe pour l’avenir de notre mĂ©tier !

https://www.siriusdecisions.com/Blog/2014/Dec/Product-Management-Tools-The-2015-SiriusDecisions-Field-Guide.aspx

XebiaLabs : How Startups Became Safe for the Enterprise http://twitter.com/XebiaLabsFrPar Richard Mathis

Article intĂ©ressant sur les raisons pour lesquelles les Start Ups trouvent grĂące aux yeux des grandes entreprises depuis quelques annĂ©es ; Ă©galement une illustration du succĂšs que peut rencontrer XebiaLabs auprĂšs des grands comptes. « How Startups Became Safe for the Enterprise » : http://www.zdnet.com/article/how-startups-became-safe-for-the-enterprise/

XebiaLabs : XebiaLabs se classe 15e au Fast 500 Deloitte EMEA 2013 http://twitter.com/XebiaLabsFrPar Richard Mathis

Autre nouvelle de taille : XebiaLabs se classe 15eme au Deloitte Fast 500 EMEA, le classement des 500 sociétés ayant la plus forte croissance en Europe en 2013 http://www.reuters.com/article/2014/12/08/idUSnMKWWK9kpa+1f0+MKW20141208

Catégories: Blog Société

PerfUG : Phaser et StampedLock Concurrency Synchronizers

Phaser est une barriÚre de synchronisation Java 7 utilisée pour orchestrer, entre plusieurs threads, un lot de tùches répétitives. Le systÚme offre une interface plus simple à utiliser que son prédécesseur CountDownLatch.

StampedLock est un mĂ©canisme de verrou apparu en Java 8 qui peut s’apparenter Ă  un ReadWriteLock avec de meilleures performances et un systĂšme de lecture optimiste inĂ©dit.

 

Avec Java 7, l’introduction de l’API Phaser offrait un usage plus flexible des existants CountDownLatch et CyclicBarrier.

Au cours de cette prĂ©sentation, nous vous exposerons un certain nombre d’exemples d’utilisation de Phaser dans la communication entre Threads et en quoi cela pourra vous simplifier le code ! En Java 8, nous pouvons profiter de la nouvelle construction StampedLock. Ce nouveau type de verrou permet l’accĂšs concurrent Ă  plusieurs lecteurs de maniĂšre plus efficiente qu’un ReadWriteLock grĂące Ă  son « mode » optimiste. A travers la prĂ©sentation, nous vous montrerons comment l’utiliser et dans quels patterns communs ces constructions peuvent s’inscrire.

 

Heinz Kabutz est auteur du Java Specialists Newsletter oĂč il expose ses recherches autour de nouvelles constructions Java. Il Ă©tudie rĂ©guliĂšrement les techniques d’Ă©criture de code Java optimisĂ© pour la concurrence et de meilleure qualitĂ©. Il publie Ă©galement des cours Java, plus particuliĂšrement dans le domaine de la programmation concurrente.

 

La session aura lieu dans les locaux d’OCTO Technology.
Inscriptions et informations sur Meetup. Cette session sera suivie d’un pot dans les locaux d’Octo, puis d’un restaurant aux frais des convives (une invitation Meetup pour le restaurant suivra).

Articles suggested :

  1. Compte-rendu du Performance User Group #3
  2. PerfUG : Hadoop et HDFS : Stockage, RequĂȘtage et Performances
  3. PerfUG : DynaTrace pour monitorer tous vos problĂšmes de performance

Catégories: Blog Société

Migrer un blog de Wordpress vers Jekyll

Barre Verte ! - jeu, 12/11/2014 - 00:00

Suite à la migration de notre blog vers un jekyll hébergé chez github, je vous propose quelques explications sur le sujet. Dans cet article, nous verrons :

  1. comment utiliser Jekyll
  2. comment migrer de Wordpress vers Jekyll
  3. comment héberger son blog (ou tout site statique) chez github

On y va ?

Utilisation de Jekyll

Jekyll est un moteur de génération blog statique créé par (un ancien de chez) github. Il est écrit en ruby, donc cet article fait l'hypothÚse que vous avez déjà ruby et ruby-gem d'installés sur votre poste de travail.

Pour installer jekyll, une commande gem suffit. Ainsi, pour installer jekyll et créer le blog "from scratch" :

Ensuite, la commande jekyll serve vous lance le site en local sur le port 4000 : puis vous ouvrez le lien http://0.0.0.0:4000/ pour voir votre blog en local.

L'utilisation est simple : aprÚs avoir fait le design de votre site (en éditant le fichier index.html et tout ce qui se trouve dans le dossier _layout), la création d'un fichier dans _posts publie un nouvel article.

Il vous faudra respecter plusieurs conventions :

  • le nommage : le fichier doit comporter la date de publication dans son titre, par exemple pour un article publiĂ© le 24 dĂ©cembre 2003, le fichier devra se nommer 2003-12-24-mon-article.md
  • le fichier devra commencer par le front matter. Il s'agit de meta-informations dĂ©crivant l'article et doit comporter au minimun les champs layout et title. Pour un article de blog, utilisez le layout post (qui sera mis en forme selon les indications donnĂ©es dans le fichier _layouts/post.html) :
---
layout: post
title: Titre de votre article
--

Ici, le contenu de votre article, dans votre format préféré à choisir parmi Markdown ou Texile
(personnellement, j'ai choisi markdown)

Si vous voulez travailler sur un brouillon, vous créez votre fichier dans le dossiers _drafts : ces fichiers ne sont pas publiés. Vous pouvez en revanche les lire avant publication en local en lançant jekyll avec l'option drafts :

L'option watch ordonne à jekyll de surveiller le répertoire du site et de le regénérer à chaque changement de contenu.

Ainsi, la publication d'un article se résume à déplacer un fichier de _drafts vers _posts tout en respectant les normes de nommage.

Migrer un Wordpress vers Jekyll Récupérer les anciens articles

Dans notre cas, nous avions déjà un blog depuis 2010. Nous voulions donc migrer tous les articles existants en conservant le maximum de contenu et sans changer les URL des articles pour des raisons évidentes de compatibilité des bookmarks ou références à nos articles.

J'avais déjà tenté une migration 1 an auparavant, mais j'étais ressorti de cette expérience avec un goût de "pas fini" dans la bouche : gros soucis d'encodage de tous les articles, imports partiels, processus trÚs compliqué.

Mais les choses avancent ! Depuis, le processus de migration depuis un Wordpress auto-hébergé s'est grandement simplifié. Tout est documenté dans le site Jekyll Import. Des tas de types de blog sources sont possibles (Blogger, Joomla, Typo...), mais ici nous allons nous intéresser à la migration depuis un Wordpress autohébergé : http://import.jekyllrb.com/docs/wordpress/

Pour la migration depuis un Wordpress auto-hébergé, nous avons la possibilité de nous connecter au MySQL et d'en extraire tous les articles publiés. Notez-cependant que les brouillons en cours ne seront pas importés, il faudra le faire à la main (ou proposer un patch).

Comme jekyll, jekyll-migration est Ă©crit en ruby. Il y a donc quelques gems Ă  installer sur votre poste, en particulier la gem MySQL :

Et c'est lĂ  que les choses se compliquent ! Je ne sais pas si vous ĂȘtes tous dans mon cas, mais j'ai toujours rencontrĂ© les pires difficultĂ©s pour installer la gem mysql. Ici, il y a mĂȘme la gem mysql2... En tout cas, il faut que vous ayez de quoi parler MySQL depuis votre poste. Sous Ubuntu, il faut installer le paquet libmysqlclient-dev avant d'installer la gem mysql/mysql2.

Ensuite, pensez Ă  ouvrir le port MySQL vers votre machine. Avec iptable, cela s'Ă©crit ainsi :

Je vous invite Ă  tester la connexion vers le MySQL de votre blog depuis votre machine en utilisant le client mysql en local.

Ensuite, il faut lancer une commande magique. La commande est magique, car la documentation n'est pas à jour, certaines options sont devenues obligatoires, d'autres ont carrément disparu. Je suis arrivé (de mémoire) à la commande suivante :

Tous vos articles sont présents ! Ils sont au format HTML ; vous attendrez d'écrire un nouvel article pour utiliser un langage de Markup plus simple, comme Markdown par exemple.

RĂ©glages fins

Il vous reste à résoudre le problÚme des URL. Par défaut, jekyll met la date de l'article dans l'URL, contrairement à ce que faisait Wordpress. C'est un point qui m'angoissait particuliÚrement, car j'avais peur de ne pouvoir y parvenir, et des URL incompatibles avec les anciennes était synonyme de "no go" comme on dit : tous les liens pointant vers notre sites cassés, tout l('excellent) référencement de nos articles chez les moteurs de recherche cassé... bref ! une catastrophe.

Mais je me suis noyé dans un verre d'eau.

En fait, c'est tellement bĂȘte que j'ai failli en pleurer : Ă  la racine du blog se trouve un fichier dont l'importance est capitale : _config.yml. C'est le fichier qui regroupe toute la configuration du blog. Il faut changer la ligne :

permalink: /:year/:month/:title

en

permalink: /:title

Et tout est l'avenant ! Configurer un compte Google Analytics ? La variable gaaccount est là pour ça ! Mettre en place des commentaires avec disqus ? Il y a aussi une variable pour cela (nommée... disqus).

Pour les commentaires disqus, il faut ajouter un comments: true dans le front matter.

On peut aller beaucoup plus loin, en fouillant un peu dans le code source si vous ĂȘtes dĂ©veloppeur. À titre d'exemple, c'est assez immĂ©diat de faire apparaĂźtre des tags et des catĂ©gories en fin d'article.

HĂ©berger son blog chez Github

Enfin, héberger votre blog chez github est élémentaire. Par héberger, j'entends "c'est github qui sert le contenu de votre blog".

Pour cela, vous avez 2 options :

Voyons cela point par point :

Utiliser une URL en github.io

Il faut respecter quelques conventions et cela marche tout seul (chapeau bas aux Ă©quipes de github) :

  • votre repository doit s'appeller monuser.github.io
  • le site doit ĂȘtre dans la branche master
  • c'est tout !

À chaque git push sur votre branche master, github gĂ©nĂšre le site statique et le rend disponible partout.

Notez que github permet d'héberger également un site statique pour votre projet open source. Dans ce cas, le code de votre site doit se situer dans une branche nommée gh-pages. Ainsi, pour un utilisateur nommé monuser et un projet nommé monprojet, le site sera disponible à l'adresse http(s)://monuser.github.io/monprojet. Voir par exemple http://jpcaruana.github.io/presentation_buildr/.

Utiliser une URL personnelle

Pour cette option, c'est un petit peu plus compliqué, mais pas tellement :

  • toutes les rĂšgles prĂ©cĂ©dement Ă©nnoncĂ©es s'appliquent :
    • votre repository doit s'appeller monuser.github.io
    • le site doit ĂȘtre dans la branche master
  • il faut crĂ©er Ă  la racine de votre projet un fichier nommĂ© CNAME qui ne contient que l'URL de votre site, sans wildcard
  • il faut ajouter dans votre DNS un enregistrement de type CNAME qui pointe vers monuser.github.io
  • attendre que le DNS se propage.

Dans notre cas, le fichier CNAME est accessible à tous pour vous en inspirer et le DNS est configuré ainsi (le point final est trÚs important : il représente le serveur DNS racine, et cela ne fonctionnera pas sans) :

www 10800 IN CNAME barreverte.github.io.

Une fois tout ceci en place, votre site ne sera plus accessible sur l'URL monuser.github.io : par exemple, http://barreverte.github.io/ redirige vers http://www.barreverte.fr/

Conclusion

Ouf ! Nous sommes arrivés au bout !

Ce n'Ă©tait finalement pas trĂšs difficile, mĂȘme si j'ai trouvĂ© la documentation souvent Ă©parpillĂ©e et parfois imprĂ©cise ; c'est pourquoi j'ai voulu rĂ©diger cette page pour permettre Ă  d'autres de gagner du temps si ils dĂ©sirent ouvrir un blog gratuitement. J'espĂšre que cela pourra rendre service.

N'hésitez pas à me suggérer des corrections, améliorations, que ce soit en commentaires en fin d'article ou en proposant une pull request.

Références
Catégories: Blog Individuel

LCC 114 - Les quatre mousquetaires

Les quatre mousquetaires comme les cinq doigts de la main discutent de la vie, des billets d’humeur sur Java et JavaScript, de la bérézina Docker, et de la position au travail. Sans oublier notre armée de l’ombre, j’ai nommé les crowdcasteurs. Merci à eux.

Enregistré le 5 décembre 2014

Téléchargement de l’épisode LesCastCodeurs-Episode–114.mp3

News

Dashlane
Teaser Star Wars, z’en pensez quqoi ?
Teaser Terminator

Langages

Java ne pue pas par James Ward
L’état de JavaScript en 2015
.Net pas mal open sourcé
Groovy 2.4 beta 4

Infrastructure

Le fork de Docker
Réponse de Docker Inc
Docker Machine, Swarm et Compose
CoreOS vs Project Atomic
Mesos et Docker pour faire sa propre infra containerisée
Scaling Docker with Kubernetes

Middleware

Camel par Pierre-Alban Dewitte
http://www.davsclaus.com/2014/09/66th-apache-camel-release-is-out-its.html
http://stackoverflow.com/questions/8845186/what-exactly-is-apache-camel

JPA entity graphs par John Schoonheydt

Spring Integration Java DSL
Prezi

Sortie de Restlet Studio pour designer ses API REST en ligne
Introduction to Functional Reactive Programming
ElasticSearch devient plus Groovy encore

Big Data

Apache Spark par Alexis Seigneurin
Site officiel de Spark
Spark officially sets a new record in large-scale sorting
Spark sur le blog d’Ippon

Integration des données chez LinkedIn

Outillage

Quelques racourcis claviers d’IntelliJ IDEA expliqués
JUnit 4.12

Web

GWT par Benoit Sautel
Going under the hood of Inbox
Google signe le retour en force de Java sur le client Web
J2ObjC - A Java to iOS Objective-C translation tool and runtime
GWT 2.7.0
NPAPI
Les implémentations HTTP/2
Apprendre HTML, JS, … en s’amusant avec Coder Projects

People

James Gosling chez Jelastic
Richard Stallman en France
Les JavaPosse arrêtent

Autre

Crier dans les licences
Accepter le pire
Perspective intéressante sur les hackathons

Outils de l’épisode

Benerator

Débat

Pourquoi les programmeurs codent la nuit

Conférences

Conférences en ligne par John Schoonheydt
vjug
hacksummit
Parleys

Devoxx France: le CFP Le CFP fermera le samedi 17 janvier

Nous contacter

Contactez-nous via twitter http://twitter.com/lescastcodeurs
sur le groupe Google http://groups.google.com/group/lescastcodeurs
ou sur le site web http://lescastcodeurs.com/
Flattr-ez nous (dons) sur http://lescastcodeurs.com/
En savoir plus sur le sponsoring? sponsors@lescastcodeurs.com

Catégories: Blog Individuel

DockerCon Europe #1

Containers, Docker, Consul, Mesosphere, Fig, micro-services… Tous ces buzzwords qui semblaient rĂ©servĂ©s aux Grands Du Web Âź (Twitter, Ebay et consorts) dĂ©barquent aujourd’hui sur nos projets et dans les datacenters. Nous avons dĂ©gustĂ© les vidĂ©os de la DockerCon de San Francisco, c’est pourquoi nous sommes particuliĂšrement excitĂ©s d’ĂȘtre prĂ©sent Ă  la toute premiĂšre confĂ©rence Docker sur le sol europĂ©en, Ă  Amsterdam. Nous espĂ©rons en ramener des scoops croustillants (3 slots mystĂšres ont Ă©tĂ© annoncĂ©s aprĂšs la keynote !), mais aussi et surtout y trouver une puissante source d’inspiration pour les architectures Ă  venir.

Voici un petit rĂ©sumĂ© de ce qu’on a rĂ©ussi Ă  capter au milieu du port d’Amsterdam.

 

Panorama

rubegoldberg.jpg

Pour commencer, parlons un peu du lieu. Nemo, l’Ă©quivalent du Palais de la DĂ©couverte Ă  Paris, Ă©tait le lieu idĂ©al pour cette confĂ©rence. Il suffisait de voir le nombre de confĂ©renciers prĂ©sents Ă  la dĂ©monstration de la machine de Rube Goldberg, il y avait plus de geeks adultes que d’enfants ! Ensuite, l’assistance : des passionnĂ©s, venus de toute l’Europe, voire mĂȘme de plus loin, animĂ©s par une mĂȘme foi dans ce projet open source, et convaincus qu’il peut apporter une rĂ©volution dans les SI dans les annĂ©es qui viennent. Un intervenant a bien rĂ©sumĂ© la tendance durant une keynote :

En 2014, personne ne s’intĂ©ressait Ă  Docker. En 2015, il est au programme de toutes les entreprises.

En parlant d’enthousiasme, un fait est rĂ©vĂ©lateur : lors de la keynote de Solomon Hykes, jeudi soir, on se serait cru Ă  une keynote de Steve Jobs annonçant le premier iPhone.

Docker et Docker inc

Une grande partie de la confĂ©rence a tournĂ© autour de Docker et de ses nouveautĂ©s, mais aussi beaucoup autour de la formidable communautĂ© qui s’est bĂątie autour du produit. Les annonces de produits en bĂȘta ont dĂ©jĂ  Ă©tĂ© largement relayĂ©es, concentrons nous sur la matiĂšre vivante (The Human Stack), qui fait de Docker ce qu’il est aujourd’hui.

Nous avons beaucoup apprĂ©ciĂ©, dans toutes les interventions des employĂ©s de Docker Inc, la volontĂ© farouche de mettre la communautĂ© en avant, et de sĂ©parer le produit et l’entreprise.

Les chiffres officiels sont relativement Ă©loquents : en 20 mois, plus de 700 contributeurs et 5000 pull requests (PR)… En revanche, ce qui est plus Ă©tonnant est que le board sĂ©pare ces chiffres officiels en deux catĂ©gories : les PR provenant de Docker Inc, et les PR provenant de la communautĂ©. D’aprĂšs Solomon, un projet sain est un projet oĂč les reviewers ne privilĂ©gient pas les contributions en provenance directe de leur entreprise. Les temps de traitement d’une Pull Request, ainsi que le % de Pull Request acceptĂ©es devraient, Ă  terme, ĂȘtre Ă©quilibrĂ©es.

L’ensemble des keynotes portait un accent fort sur l’attachement portĂ© Ă  faire de Docker une innovation communautaire, en conservant Ă  tout prix son design ouvert et sa gouvernance partagĂ©e. L’initiative n’est pas nouvelle, mais les moyens dont les fondateurs du projet se dotent, et les rĂšgles srictes qu’ils s’imposent, devraient – espĂ©rons le – les garder sur la bonne voie.

Un Disneyland DevOps

Le ton a Ă©tĂ© donnĂ© trĂšs rapidement : dĂšs la deuxiĂšme confĂ©rence, Henk Kolk, chief architect d’ING lĂąche :

En 2009, nous avons dĂ©cidĂ© de supprimer les postes de testeurs, de chef de projets. Chez nous, aujourd’hui, tout le monde doit ĂȘtre ingĂ©nieur.

Le reste de la confĂ©rence est Ă  l’avenant : les 500 applications du groupe ont Ă©tĂ© refactorĂ©es pour ĂȘtre compatibles avec une approche micro-services. Les approches ESB ont Ă©tĂ© Ă©radiquĂ©es. Les Dev et les Ops ne sont plus deux entitĂ©s sĂ©parĂ©es mais une seule et mĂȘme fonction. L’entreprise s’est complĂštement rĂ©ogarnisĂ©e pour tourner autour de 180 Ă©quipes DevOps. Chez ING, tout le monde doit maintenant savoir dĂ©velopper, mĂȘme le CEO, qui s’est auto-formĂ© Ă  Java, pour un rĂ©sultat, et je cite : « pas si catastrophique ». Pour finir : « IT is the bank and the bank is IT ». Comme dirait mon voisin : « C’est pas tous les jours qu’un banquier m’arrache une larme… ».

Micro services

Durant toute la confĂ©rence, nous avons eu droit Ă  des sessions sur les micro-services. A tel point que parfois l’amalgame entre contenairisation et micro-services Ă©tait explicite.

Adrian Cockcroft, l’ancien architecte en chef de Netflix, nous a prĂ©sentĂ© 4 architectures micro services, qui prĂ©sentaient toutes des caractĂ©ristiques transverses, qu’on peut rĂ©sumer dans ce tableau :

image2014-12-10-112451.png

 

En revanche, dĂ©solĂ© pour les gens chargĂ©s de maintenir les diagrammes d’architecture technique, votre travail va devenir infernal, en voici pour preuve le schĂ©ma d’architecture de Netflix.

NĂ©anmoins, mĂȘme si il est parfois difficile de faire la part des choses, un des participants de la table ronde finale a trĂšs bien rĂ©sumĂ© le point : contenairisation, micro-services, architectures composables, tout cela n’a qu’un but : donner le pouvoir aux dĂ©veloppeurs de faire du logiciel de qualitĂ©, rapidement.

 

 

Les slots de conférenciers

Deux thĂšmes principaux ont Ă©mergĂ© lors des confĂ©rences : la contenairisation de l’usine logicielle et l’orchestration autour de Docker.

Depuis la mise en place de l’agilitĂ©, les Ă©quipes IT dĂ©veloppent plus rĂ©guliĂšrement des versions du logiciel. Afin de pouvoir livrer ces versions en production, plusieurs sociĂ©tĂ© se sont positionnĂ©es sur du « continious delivery », avec l’aide de Jenkins et Docker. C’est le cas de la SGIB (cocoricoooo) et de la BBC, qui ont chacune prĂ©sentĂ© leur dĂ©marche d’isolation d’une infrastructure complĂšte Ă  l’intĂ©rieur de leur usine logicielle.

Pour cela, ils encouragent les pratiques inspirĂ©es du mouvement software craftmansship (TDD, BDD) et DevOps. Docker rentre dans le cadre de ces bonnes pratiques. Il permet de s’assurer de l’immutabilitĂ© du livrable, et donc que le comportement de l’applicatif sera le mĂȘme sur l’ensemble des environnements.

Le second grand thĂšme qui a Ă©mergĂ© est, comme attendu, l’orchestration. La totalitĂ© des annonces de Docker Inc. tournait autour de ce sujet. S’il est simplissime de faire communiquer des containers sur un mĂȘme hĂŽte, l’exercice est plus dĂ©licat si ceux-ci sont sur des hĂŽtes diffĂ©rents. De nombreuses confĂ©rences ont donc tournĂ© autour de ce sujet. Que ce soit des hacks plus ou moins propres (le vainqueur du Global Hack Day a prĂ©sentĂ© une solution « customisĂ©e » de Fig pour dĂ©ployer en multihost), des projets open source, ou des sociĂ©tĂ©s qui tentent de conquĂ©rir ce marchĂ©, le constat est le mĂȘme : tant que Swarm ne sera pas sorti, il faudra s’appuyer sur des outils externes pour rĂ©ellement dĂ©ployer Docker en production. Nous allons zoomer sur trois de ces outils qui nous tiennent Ă  coeur.

Consul et Terraform

Mitchell Hashimoto, participant dĂ©jĂ  Ă  des projets comme Vagrant ou serf, nous a prĂ©sentĂ© Consul et Terraform. Le premier (Consul) se base sur une base de donnĂ©e distribuĂ©e type clef / valeur (comme etcd), pour fournir les services suivants : service discovery, health Checking et stockage, le tout fonctionnant sur un ou plusieurs datacenter. Pour le service discovery, Consul propose deux approches, soit Ă  l’aide d’un DNS, soit Ă  l’aide d’une interface HTTP. Le DNS a l’avantage de ne pas impacter les anciennes applications, qui peuvent ainsi fonctionner sans mĂȘme savoir que consul existe, tandis que l’interface HTTP permet d’accĂ©der Ă  des metadata supplĂ©mentaires, et « de s’abonner » Ă  des Ă©vĂšnements qui notifieront l’application, par exemple de l’arrivĂ©e d’un nouveau service sur le cluster.

Terraform est un outil qui permet de construire et de gĂ©rer son infrastructure. Vagrant permet facilement de se crĂ©er son cluster de machine virtuelle, Terraform permet de faire la mĂȘme chose sur un cluster rĂ©el. Vous pouvez par exemple crĂ©er votre cluster sur amazon en spĂ©cifiant le type de machine, le nombre d’instances, 
 La configuration est faite par type de machines (base de donnĂ©es, service web, 
), et vous pouvez facilement rajouter une ou plusieurs instances d’un serveur web. Il est Ă©galement possible de lancer le provisionning de ces machines Ă  l’aide d’outils comme puppet ou ansible.

Building web scale apps with docker & mesos Alex Rukletsov, de la sociĂ©tĂ© Mesosphere, nous a prĂ©sentĂ© le projet Apache Mesos. Il s’agit, pour rĂ©sumer, d’un OS distribuĂ© pour datacenter. C’est un OS dans la mesure oĂč Mesos est chargĂ© de l’attribution de ressources aux tĂąches que vous souhaitez lancer sur votre ensemble de machines. Mesos proposait – avant Docker – une approche container-like, pour faire tourner divers plateformes sur les noeuds d’un cluster, en s’assurant de l’isolation des ressources et de la haute disponibilitĂ© des jobs. Parmi les diffĂ©rents types de jobs, le support des images Docker ne s’est pas fait attendre. Dans ses diffĂ©rentes annonces, Docker a annoncĂ© un partenariat avec Mesosphere, qui va devenir un des orchestrateurs officiel de la solution Docker. C’est donc Mesos qui pilotera docker-swarm pour assurer la bonne distribution et la cohĂ©rence des dĂ©ploiements Ă  travers des Vrais Cluster Âź.

Mesosphere apporte, autour de Mesos, les projets Marathon, pour avoir une GUI et une API REST pour dĂ©ployer sur Mesos, ainsi que fournir du Service Discovery. Le projet Chronos, initiĂ© par AirBnb, s’ajoute Ă  l’Ă©cosystĂšme et assure lui l’Ă©quivalent d’un cron, distribuĂ© sur un cluster Mesos.

Alex a passé en revue les différents apports de Mesos et Mesosphere au projet Docker, puis a décrit plusieurs topologies de cluster applicables. Une excellente introduction au sujet. Pour ceux qui souhaiteraient creuser le sujet, sachez que les tutoriels de chez Mesosphere sont assez bien écrits.

Clocker

Clocker, sous licence Apache, a pour ambition de manager des « Clouds » Docker. Le projet repose intĂ©gralement sur Apache Brooklyn, qui permet, comme Marathon, de gĂ©rer des « Blueprints » de dĂ©ploiement. Clocker y ajoute la gestion des containers. Le dĂ©ploiement multi-hosts et multi-containers est pris en charge, sans avoir Ă  se soucier du rĂ©seau. Mais, car il y a un mais, Clocker prĂ©sente une faiblesse en ce qui concerne son utilisation en production. En effet, pour abstraire la complexitĂ© de monter un rĂ©seau multi-hĂŽtes, le projet repose sur Weave, qui a l’avantage de la simplicitĂ©, mais qui prĂ©sente des soucis de performance sous charge. Les leaders du projet envisagent de passer Ă  une implĂ©mentation rĂ©seau plus solide, qui permettrait un passage en production.

Il faut noter que Clocker est d’ores et dĂ©jĂ  en production, puisqu’il est l’implĂ©mentation sous jacente qui permet Ă  IBM de proposer le service BlueMix.

Conclusion

Parfois les confĂ©rences ont pu paraitre dĂ©cevantes : en effet, un grand nombre des participants Ă©tait dĂ©jĂ  convaincu du bien fondĂ© de Docker, et Ă©tait dĂ©jĂ  allĂ© beaucoup plus loin que le simple HelloWorld parfois prĂ©sentĂ© par les confĂ©renciers. Pour rĂ©sumer, nous n’avons pas appris grand chose lors de cette confĂ©rence. NĂ©anmoins, et comme souvent, les Ă -cotĂ©s Ă©taient passionnants. La communautĂ© est riche, vibrante, pleine d’idĂ©es et les Ă©changes, jusque tard dans la nuit, sont extrĂȘmement intenses.

De plus, les organisateurs avaient eu l’excellente idĂ©e de convier deux scientifiques (un gĂ©nomiste et un astrophysicien) qui ont exposĂ© leur utilisation de Docker dans des contextes totalement inattendus. AprĂšs ces deux confĂ©rences, nous Ă©tions en droit de nous interroger : Docker (ou son successeur) va rĂ©volutionner la façon de dĂ©velopper, dĂ©ployer et consommer des applications informatiques. Il se pourrait que cette rĂ©volution impacte bien plus largement d’autres secteurs, comme celui de la recherche, oĂč certaines publications passeront du papier au conteneur !

Catégories: Blog Société

nFeed : an Expert review by Ambientia

Le blog de Valiantys - mer, 12/10/2014 - 11:25

The Atlassian Summit is always a great opportunity to meet customers and Expert partners, listen to their organisations’ needs, learn how they use our add-ons and share our vision for nFeed, Spreadsheets, PowerReport and Exocet. I am always amazed by how JIRA admins and Expert consultants use nFeed to improve the way teams work with JIRA. Thus […]

The post nFeed : an Expert review by Ambientia appeared first on Valiantys Blog.

Catégories: Blog Société

Partagez la connaissance

Partagez BlogsdeDeveloppeurs.com sur les réseaux sociaux