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.

Blog d’Ippon Technologies
Syndiquer le contenu
Les experts Java EE, Portail et SOA
Mis à jour : il y a 13 heures 12 min

Java EE 7, plus qu’un nouveau numĂ©ro de version ?

mar, 06/18/2013 - 17:03
Java EE 7, c’est parti !

La semaine derniĂšre Oracle a annoncĂ© la sortie de Java EE 7, en nous promettant (je cite) “le support de HTML5, plus de productivitĂ© pour les dĂ©veloppeurs et la rĂ©ponse aux besoins les plus exigeants des entreprises”.

Qu’en est-il vraiment ?

Etat des lieux de Java EE

Si Java est aujourd’hui le principal language utilisĂ© en entreprise, Java EE n’a pas eu le mĂȘme succĂšs, la plupart des gens n’en utilisant qu’un sous-ensemble (JSP, Servlet, JPA, etc.) et non pas l’ensemble des APIs (EJBs, JMS…).

Les premiĂšres versions de la plateforme, mal conçues, ont Ă©tĂ© rapidement concurrencĂ©es par des frameworks tels que Spring : au bout de quelques annĂ©es de concurrence, J2EE est devenu Java EE et a repris les principes majeurs de Spring tels que l’injection de dĂ©pendance par annotation ou les intercepteurs (encore qu’on pourrait argumenter que les intercepteurs Java EE sont nettement moins puissants que l’AOP fourni par Spring).

Cependant, entre-temps, notre monde a bougĂ© : la productivitĂ© ou la satisfaction des dĂ©veloppeurs n’est plus simplement limitĂ© Ă  avoir un framework d’injection de dĂ©pendance ! Nous voulons pouvoir dĂ©velopper des applications REST, HTML5, dans le cloud, avec la stack ayant le plus de buzzwords possibles. Et j’oubliais la mobilitĂ© et le Big Data, sur des architectures distribuĂ©es :-)

Que ce soit sur Google Trends (tendances des recherches Google) ou Indeed (tendances des offres d’emploi aux US), on retrouve les mĂȘmes courbes :

On voit bien ici que l’intĂ©rĂȘt des dĂ©veloppeurs pour Java EE n’a pas dĂ©collĂ©, par rapport Ă  des frameworks concurrents (node.js) ou des technologies NoSQL/Big Data.

C’est donc sur ces thĂšmes que Java EE doit se battre, en particulier contre Spring ou Node.js, qui sont des stacks ayant pris depuis longtemps le chemin des applications HTML5, REST, NoSQL, mobiles, dans le cloud, etc. Et c’est ce que nous allons donc Ă©tudier tout au long de cet article.

Le support de HTML5, 1Ăšre partie : les Websockets

Le support de HTML5 m’a personnellement plutît fait sourire : quel rapport entre Java EE et le HTML5 ? Pour Oracle, dans sa “press release”, cela signifie supporter les Websockets !

Quiconque ayant dĂ©jĂ  fait des Websockets se mĂ©fie en voyant ce type d’annonce :

  • Utiliser des Websockets est une problĂ©matique bien plus compliquĂ©e que d’avoir simplement une implĂ©mentation sur son serveur d’application. Il est clair que la solution proposĂ©e par Java EE va poser des problĂšmes de portabilitĂ© et de gestion des erreurs (que faites-vous si un serveur proxy ou un navigateur client ne supporte pas Websocket ?).
  • Les Websockets changent radicalement la maniĂšre dont on conçoit une application, car l’idĂ©e est de pouvoir faire du “push” depuis le serveur, ce qui est trĂšs diffĂ©rent d’une architecture classique oĂč l’on rĂ©pond Ă  des requĂȘtes envoyĂ©es par un client HTTP. La seule solution en Java EE consiste Ă  utiliser JMS 2.0 pour faire ces envois (mĂ©canisme dĂ©taillĂ© dans ce blog), ce que je trouve plutĂŽt lourd. Sortir un serveur JMS pour faire des Websockets, c’est quand mĂȘme bien compliquĂ© !

Pour utiliser Atmosphere depuis pas mal de temps, un excellent framework qui résout tous ces problÚmes de maniÚre performante et élégante, je vois mal quiconque utiliser Java EE 7 directement.

La press release d’Oracle met donc en avant une avancĂ©e technique nĂ©cessaire et intĂ©ressante, mais dont l’implĂ©mentation reste simpliste.

Le support de HTML5, 2Ăšme partie : JAX-RS 2 et JSON

Faire une application HTML5 avec un framework MVC JavaScript moderne, de type backbone.js ou angular.js, c’est surtout consommer des services REST, et s’échanger des donnĂ©es au format JSON.

La mise à jour de l’API JAX RS est donc particuliùrement bienvenue, et permet :

  • D’avoir des intercepteurs sur ses services REST
  • De pouvoir avoir des services asynchrones
  • D’avoir une API cliente (il Ă©tait en effet assez incroyable de constater qu’il y avait une API serveur mais pas d’API cliente !)

De mĂȘme nous disposons maintenant d’une API JSON standardisĂ©e, avec JSON-P (plus de dĂ©tails sur cet article). Une nouveautĂ© intĂ©ressante est l’ajout d’une API fluente permettant de crĂ©er du JSON (personnellement je n’ai encore jamais eu ce besoin, mais cela peut toujours ĂȘtre utile).

Toutes ces fonctionnalitĂ©s Ă©tant prĂ©sentes dans les stacks concurrente (par exemple Spring MVC REST + Jackson 2), il s’agit donc lĂ  d’une mise Ă  jour nĂ©cessaire.

Un regret cependant : cette stack ne propose pas de support pour rĂ©aliser des tests unitaires avec des mocks, comme nous en disposons dans Spring. C’est une fonctionnalitĂ© que j’apprĂ©cie particuliĂšrement, par exemple dans Tatami (voici en exemple), et qui devrait bientĂŽt faire l’objet d’un nouvel article sur ce blog.

Le support de HTML5, 3Ăšme partie : JSF 2.2

De maniĂšre plus discrĂšte, Java EE 7 amĂšne Ă©galement les “passthrough attributes” dans JSF 2.2, ce qui permet enfin d’utiliser HTML5 avec JSF 2.2.

Jusqu’à prĂ©sent, on ne pouvait utiliser que les tags reconnus par sa librairie de composants : or, en HTML5, vous pouvez ajouter et dĂ©finir vos propres attributs, que vous utilisez ensuite en JavaScript.

Les “passthrough attributes” sont en fait assez basiques : la librairie de composant va simplement rendre ces attributs cĂŽtĂ© client. Elle fait alors juste “passe plat” entre le code JSF et le HTML gĂ©nĂ©rĂ©. Mais cela change tout, car nous pouvons maintenant avoir nos propres attributs cĂŽtĂ© client !

Pas de cloud dans Java EE 7

L’objectif de Java EE 7 Ă©tait le cloud : comme prĂ©sentĂ© l’annĂ©e derniĂšre par Oracle (les slides sont encore ici), nous devions pouvoir dĂ©velopper “dans le cloud” avec Java EE 7, et plus prĂ©cisĂ©ment :

  • Avoir des APIs pour gĂ©rer le provisionning, l’élasticitĂ©, la qualitĂ© de service, etc.
  • Avoir des applications modulaires, avec Jigsaw
  • Avoir du “vrai” multi-tenancy sur les serveurs d’app
  • Enfin, JCache allait renaĂźtre de ses cendres et nous aurions une API de cache digne de ce nom

Au final, tout cela a été abandonné.

Pour avoir participĂ© Ă  la spĂ©cification JMS 2, je peux vous confirmer que cet abandon a Ă©tĂ© volontaire : aucun vendeur de serveur d’application ne souhaite voir ces fonctionnalitĂ©s ĂȘtre intĂ©grĂ©es dans Java EE. Cela fait plus de 10 ans que l’ajout de ces fonctionnalitĂ©s “avancĂ©es” dans Java EE sont sabordĂ©es par une grande partie des acteurs du JCP, car ce sont grĂące Ă  elles que les entreprises clientes achĂštent des serveurs en “version entreprise” au lieu de se contenter d’un simple Tomcat.

C’est donc un grand gĂąchi, mais ce n’est que partie remise. Comme en son temps l’arrivĂ©e de Spring a fait bouger le JCP, l’arrivĂ©e du cloud va nĂ©cessairement faire bouger les lignes. A titre d’exemple, les ventes de serveurs d’Oracle (les anciens serveurs Sun, que Oracle a rachetĂ©) ont chutĂ© de 27,2% ce trimestre ! Il est donc probable que le JCP, Ă  nouveau, soit forcĂ© de s’adapter.

Focus sur JMS 2

L’un des succĂšs de Java EE 7 est l’arrivĂ©e de JMS 2. Plus de 10 ans aprĂšs la norme prĂ©cĂ©dente, et toujours sans support du clustering (cf. le point prĂ©cĂ©dent), JMS 2 propose une API modernisĂ©e, qui vous permettra de vous passer de la fameuse JmsTemplate de Spring.

JMS 2, heureusement, garde quand mĂȘme l’un des grands bĂ©nĂ©fices de JMS 1, qui Ă©tait de pouvoir ĂȘtre utilisĂ© en dehors d’un serveur d’application : en effet, les vendeurs de serveurs d’applications voulaient lier JMS 2 Ă  CDI, de maniĂšre Ă  obliger les utilisateurs Ă  avoir un serveur d’application pour envoyer un message. Au final, nous restons donc sur une API proche de l’originale, mais modernisĂ©e et simplifiĂ©e.

Cette nouvelle API a été trÚs bien décrite dans ce blog, nous en retiendrons principalement :

  • La suppression de beaucoup de code inutile
  • La fin de l’API connection.createSession(true,Session.SESSION_TRANSACTED), dont les deux paramĂštres Ă©taient une curiositĂ© Ă©tonnante
  • L’ajout d’une API “fluente”, de type context.createProducer().setPriority(1).setProperty(“foo”, “bar”).send(demoQueue, textMessage);
La bonne surprise de Java EE 7 : l’intĂ©gration de Spring Batch

LancĂ© par IBM, l’intĂ©gration des batchs dans Java EE est enfin une rĂ©alitĂ© ! Dans la pratique, il s’agit d’une intĂ©gration du code Spring Batch dans Java EE :

  • L’API est la mĂȘme
  • Les fichiers de configuration sont les mĂȘmes
  • MĂȘme dans les slides d’Oracle, on retrouve des schĂ©mas copiĂ©s/collĂ©s du site de Spring Batch :-)

D’autre part, SpringSource a fait le maximum pour que Spring Batch puisse ĂȘtre utilisĂ© dans Java EE (avec CDI), mais sans que l’on soit obligĂ© de dĂ©pendre de ses APIs.

Depuis le nombre d’annĂ©es que l’on attendait une solution pour faire des batchs en Java EE, c’est donc une excellente nouvelle, d’autant plus que Spring Batch est une solution trĂšs largement reconnue.

Reste Ă  voir quelles implĂ©mentations seront disponibles dans les diffĂ©rents serveurs d’applications :

  • Est-ce que les vendeurs de serveurs d’applications se contenteront tous de copier/coller le code de Spring Batch, ou certains feront-ils des implĂ©mentations spĂ©cifiques ?
  • Est-ce que nous aurons enfin des stratĂ©gies performantes de partitionning des batchs ? Les versions disponibles sur Spring Batch sont en effet en cours de dĂ©veloppement depuis longtemps, sans grande avancĂ©e.

Cette nouvelle devrait également permettre de faire revivre Spring Batch, qui est un projet qui ne progressait plus beaucoup ces derniÚres années, en particulier depuis que Accenture en avait abandonné le co-développement avec SpringSource.

En conclusion

Cette montĂ©e de version de Java EE, tant attendue, n’a pas tenue ses promesses. L’objectif “cloud” a Ă©tĂ© totalement ratĂ©, de mĂȘme qu’un certain nombre d’API qui devaient ĂȘtre mises Ă  jour (JCache en particulier).

Heureusement, un travail minimal a Ă©tĂ© rĂ©alisĂ© sur les HTML5 et sur JMS 2, et nous avons eu la bonne surprise de voir l’intĂ©gration de Spring Batch dans la spĂ©cification. En 2013, nous n’en attendions pas moins !

Catégories: Blog Société

La vidĂ©o de l’IppEvent “ElasticSearch”, avec David Pilato, est en ligne

ven, 06/14/2013 - 09:42

Plus d’une heure et demi de vidĂ©o sur ElasticSearch, encore un IppEvent d’une grande qualitĂ© technique avec David Pilato, qui nous prĂ©sente le moteur de recherche Open Source le plus avancĂ© du moment.

Je profite de ce billet pour vous annoncer deux nouvelles en relation avec l’Ă©vĂšnement :

Elasticsearch – Le moteur de recherche Ă©lastique pour tous, pour David Pilato from Ippon Technologies on Vimeo.

Catégories: Blog Société

Résolvez vos problÚmes de Hashbangs grùce au PushState en HTML5

ven, 06/07/2013 - 11:03

Au dĂ©but du web nous n’avions que des pages statiques, nous entrions une adresse et le serveur nous retournait une page HTML. Puis nous avons voulu dynamiser un peu nos sites avec du Javascript et de l’AJAX, jusqu’à avoir des applications complĂštes dans nos navigateurs. Ce que nous appelons maintenant des “Single-Page-Application”.

Une des problĂ©matiques lors du dĂ©veloppement d’application de type “single-page” est que nous chargeons une page, puis nous modifions le contenu de celle-ci au grĂ© des clicks de l’utilisateur sans modifier visiblement l’URL de la page. Ceci est logique, car nous restons toujours sur la mĂȘme page, mais ne suit pas la philosophie de Web oĂč un contenu est identifiĂ© de maniĂšre unique.

Pour rĂ©soudre ce problĂšme et avoir un identifiant unique pour chaque ressource, il existait jusqu’à maintenant une solution : Ajouter des hash pour avoir des adresses comme ceci http://monsite/#article/0/spring_c_est_bien

Le hash apporte une solution partielle, car si cette technique permet d’avoir un identifiant unique pour une ressource, celle-ci est connue uniquement du navigateur, mais pas du serveur. Alors oui, nous pouvons mettre l’adresse en favori et lorsque l’utilisateur rechargera cette page, il l’aura bien la page dans le bon Ă©tat, mais il reste des problĂšmes.

Tout d’abord,  l’affichage de la page n’est pas optimale, car la remise dans le bonne Ă©tat de la page se fait forcĂ©ment cĂŽtĂ© sur le client via Javacript, car le serveur n’ayant pas l’intĂ©gralitĂ© du nom de la ressource, il ne peut pas gĂ©nĂ©rer la page dans son Ă©tat final. Pour l’utilisateur ça veut dire attendre que tous les scripts soient chargĂ©s, puis que le javascript s’exĂ©cute. Sur une machine peut puissante ou si vous utilisez 90 % votre CPU pour lire une vidĂ©o avec flash, un temps plus ou moins long est nĂ©cessaire pour que la page s’affiche et donc l’expĂ©rience utilisateur est dĂ©gradĂ©e.

L’autre problĂšme d’avoir le nom de la ressource uniquement sur le client est que si le serveur doit faire une redirection, il la fera uniquement vers le dĂ©but de l’adresse. Par exemple si vous devez vous authentifier, vous serez rediriger vers la page d’accueil et non vers la page que vous avez appelez initialement.

Mais ça c’était avant, maintenant avec HTML5, il est possible d’avoir des vrais adresses comme ceci http://monsite/article/0/spring_c_est_bien tout en continuant Ă  utiliser de l’Ajax. Pour rĂ©aliser ce miracle, nous utilisons la nouvelle fonction pushstate de l’objet History. Alors quand je dis nous utilisons, c’est vrai, le pushstate a Ă©tĂ© mis en place sur la prochaine version de Tatami. Nous ne sommes pas les seuls Twitter utilise cette technique pour accĂ©lĂ©rer son affichage, comme indiquĂ© ici.

Compatibilité

Avec HTML5, nous ne savons jamais quel navigateur supporte quelle fonctionnalité, voici un tableau des navigateurs supportant le pushstate

IE

Firefox

Safari

Chrome

Opéra

iPhone

Android

-

4.0+

5.0+

8.0+

11.50+

4.2.1+

Navigation via du hash

Nous allons créer les liens de la maniÚres suivantes :

Lorsqu’un utilisateur clique sur un lien, le serveur n’est pas appelĂ© puisque nous restons sur la mĂȘme page. Pour modifier le contenu de la page, il ne reste plus qu’à ajouter un Ă©vĂ©nement sur le changement du hash.

Attention, l’évĂ©nement n’est pas lancĂ© au chargement de la page, il faut appeler la fonction de modification du contenu au chargement de la page.

Navigation via pushstate

Pour ce type de navigation, nous utilisons les liens suivants avec des vrais URLs :

Lorsque l’utilisateur clique sur un lien, il est nĂ©cessaire de supprimer le comportement par dĂ©faut du navigateur, sinon le serveur sera appelĂ©. Nous allons ensuite changer l’url et appeler la fonction modifiant le contenu de la page

Il est nĂ©cessaire d’ajouter l’évĂ©nement suivant pour que le contenu de la page soit modifiĂ© lors de la navigation via les boutons “prĂ©cĂ©dent” et “suivant”

Attention le comportement par dĂ©faut de cet Ă©vĂ©nement est diffĂ©rent entre les navigateurs Webkit et Firefox. Sous Webkit l’évĂ©nement est appelĂ© lors du chargement de la page, alors qu’il ne l’est pas sous Firefox

Pushstate dans les frameworks MVC

Il est possible dĂšs maintenant d’avoir le support du pushstate dans certains frameworks MVC. L’utilisation des ces frameworks permet de dĂ©tecter le support de la fonctionnalitĂ© par le navigateur et d’utiliser la mĂ©thode du hash pour les vieux navigateurs.

Backbone

Pour l’utiliser, il suffit de l’activer au moment du lancement de la gestion des routes

Il est également possible de passer en paramÚtre de start, la propriété  silent: true, qui permet de ne pas déclencher la route lors du chargement initial de la page.

AngularJS

Il suffit de le dĂ©clarer dans la configuration de l’application

Il n’y a pas d’équivalent au silent: true de backbone.js, pour ne pas avoir de dĂ©clenchement d’une route lors du premier chargement, ce qui peut s’avĂ©rer gĂȘnant dans certains cas.

GWT

Gwt ne supporte pas cette fonctionnalitĂ© pour le moment, mais il existe l’extension https://github.com/jbarop/gwt-pushstate/

Pourquoi le pushstate c’est gĂ©nial ?

L’intĂ©rĂȘt t’utiliser Ajax sur un site Web ou une application n’est plus Ă  dĂ©montrer. Consommation de bande passante rĂ©duite, fluiditĂ©, possibilitĂ©s ergonomiques Ă©tendues. NĂ©anmoins, ils posent certaines problĂ©matiques qu’il est possible de rĂ©soudre avec cette nouvelle possibilitĂ©

Site Web

Sur un site Web la principale problĂ©matique est la complexitĂ© d’indexation des contenus affichĂ©s en Ajax. Pour l’indexation par Google, la mĂ©thode est la suivante :

  • Ajouter avant le hash un ! pour avoir une url de ce type http://monsite/#!article/0/spring_c_est_bien. Google comprend alors qu’il s’agit d’un contenu Ajax et pas d’une navigation d’ancre
  • Sur ce type de contenu Google va appeler l’url suivante http://monsite/?_escaped_fragment_=article/0/spring_c_est_bien qui devra retourner le contenu html complet

Avec pushstate, il n’est plus nĂ©cessaire de faire ce type de configuration, mais il est nĂ©cessaire qu’un appel direct aux adresses gĂ©nĂ©rĂ©es via pushstate retourne le code HTML complet.

Dans ce cas le mode silent de backbone est intĂ©ressant, le contenu de la page Ă©tant gĂ©nĂ©rĂ© complĂštement par le serveur lors d’un appel direct, il n’a pas Ă  ĂȘtre gĂ©nĂ©rĂ© par le client. Ce procĂ©dĂ© est utilisĂ© par Twitter.

Si nous accĂ©dons Ă  un “Trending-topic” directement depuis la barre d’adresse via cette url https://twitter.com/search?q=%23RolandGarros&src=tren, nous obtenons la page HTML complĂšte :

Capture d’écran 2013-06-03 à 11.35.25

Mais si nous accĂ©dons Ă  la page en cliquant depuis le bloc “tendance”. L’url est la mĂȘme, mais il entraĂźne un appel AJAX avec une rĂ©ponse en JSON :

Capture d’écran 2013-06-03 à 11.34.37

Application Web

Dans une application Web, la problĂ©matique lorsque l’on utilise la mĂ©thode des hash est que tout ce qui se trouve aprĂšs le hash n’est pas envoyĂ© au serveur, donc lors d’une redirection cette information n’étant pas prĂ©sente, celle-ci est faite sur l’adresse jusqu’au hash, donc la page d’accueil de l’application.

Le cas fonctionnel oĂč ce comportement est gĂȘnant est lorsque nous mettons l’adresse en favori oĂč lorsque nous l’envoyons par e-mail. Si pour accĂ©der Ă  la page, ne devons passer par processus d’authentification, nous serons dirigĂ© vers la page d’accueil de l’application plutĂŽt que vers le contenu intĂ©ressant.

Pour une application Web, qui n’a pas vocation Ă  ĂȘtre indexĂ©e par les moteurs de recherche,  il n’est pas nĂ©cessaire que le serveur retourne le HTML complet de la page. Il suffit qu’il rĂ©ponde Ă  toutes les ressources, le client se chargeant de mettre Ă  jour le contenu en AJAX.

Nous avons fait ceci sur Tatami, lorsque nous accĂ©dions Ă  “Trending topic” sans ĂȘtre authentifiĂ© :

Avant , nous Ă©tions redirigĂ© vers l’accueil lorsque nous saisissions l’url https://tatami.ippon.fr/tatami/#/tags/TatamiV3

Capture d’écran 2013-06-03 à 11.48.06

Capture d’écran 2013-06-03 à 11.48.32

Maintenant, nous sommes bien redirigĂ© vers le “Trending topic” lorsque nous saisissons  l’url https://tatami.ippon.fr/tatami/new/tags/TatamiV3

Capture d’écran 2013-06-03 à 11.49.02

Capture d’écran 2013-06-03 à 11.49.32

Catégories: Blog Société

Les vidĂ©os de l’IppEvent AngularJS sont disponibles en ligne

mer, 06/05/2013 - 13:41

Vous ĂȘtes intĂ©ressĂ© par AngularJS mais vous n’avez pas pu venir Ă  notre dernier IppEvent consacrĂ© au sujet ? Heureusement, Ippon Technologies a filmĂ© l’Ă©vĂ©nement et vous propose les vidĂ©os gratuitement en ligne !

Nous vous proposons donc 3 vidéos :

SĂ©bastien LetĂ©liĂ© nous montre le fonctionnement d’AngularJS via une session de “live coding”

ANGULARJS & le futur du développement web from Ippon Technologies on Vimeo.

Thierry Lau et les filtres sur AngularJS

Focus sur les filtres ANGULARJS from Ippon Technologies on Vimeo.

Patrick Aljord sur AngularJS et Firebase

ANGULARJS & le futur du développement web from Ippon Technologies on Vimeo.

Catégories: Blog Société

IppEvent “Utiliser les nouvelles APIs Cassandra”, le 20 Juin 2013

lun, 06/03/2013 - 17:00

L’Ippevent sur les APIs Cassandra change de date en raison d’un appel Ă  la grĂšve lancĂ© par plusieurs syndicats de la SNCF

RDV LE JEUDI 20 JUIN Ă  Partir de 19h00

MERCI POUR VOTRE COMPRÉHENSION

Chez Ippon Technologies, nous utilisons Hector depuis plusieurs années, que ce soit chez nos clients ou pour nos applications Open Source, comme par exemple Tatami.

Hector est un driver trĂšs fiable, assez performant, mais qui possĂšde une API complexe, et qui est sans doute trop “bas niveau”. RĂ©sultat : le code d’accĂšs Ă  Cassandra est verbeux, ce qui ne facilite pas les dĂ©veloppements.

Cette soirĂ©e va ĂȘtre l’occasion d’assister Ă  deux retours d’expĂ©rience sur les nouvelles APIs Cassandra : sont-elles vraiment simples d’utilisation ? Sont-elles mures ? Que peut-on faire avec ?

1Ăšre partie de soirĂ©e : “Cassandra-Java-Driver : vers cassandra 1.2 et au-dela” - Par Vincent BERETTI, manager technique chez Ippon Technologies

Les Ă©quipes de DataStax ont releasĂ© rĂ©cemment un tout nouveau driver pour exploiter pleinement CQL3 et le “Binary Protocol” introduit dans Cassandra 1.2. Pendant cette session, nous prĂ©senterons rapidement les concepts et fonctionnalitĂ©s de ce nouveau driver qui pose les bases de l’avenir de Cassandra.

2Ăšme partie de soirĂ©e : “JPA avec Cassandra ? Mission pas impossible!” - Par Duy Hai DOAN, dĂ©veloppeur indĂ©pendant

Vous avez toujours voulu vous mettre Ă  Cassandra mais vous n’avez pas encore l’occasion de sauter le pas ? Vous le connaissez dĂ©jĂ , mais le code bas niveau vous rebute ? Venez dĂ©couvrir Achilles, un Entity Manager pour Cassandra qui est lĂ  pour vous faciliter la vie.
Durant cette présentation, nous allons créer un clone de Twitter pas à pas avec Achilles en toute simplicité.

Inscrivez-vous Ă  cet IppEvent, qui est comme d’habitude gratuit, sur http://ippevent-cassandra.eventbrite.fr/?ref=etckt

Ou par mail, en demandant une invitation Ă  marketing@ippon.fr

Catégories: Blog Société

Embarquez pour une croisiĂšre Agile le 26 Juin !

mar, 05/28/2013 - 07:45

Le French Scrum User Group organise le 26 Juin prochain une “croisiĂšre Agile” sur la Seine.Logo French SUG
Retrouvez d’autres agilistes sur une pĂ©niche amarrĂ©e en face de la Tour Eiffel Ă  Paris, Ă  l’occasion d’une rencontre organisĂ©e dans la droite ligne des dĂ©sormais fameuses “Scrum Nights” !

Au programme de la soirée :

  • point rapide sur l’actualitĂ© du French Scrum User Group
  • prĂ©sentation du nouveau sponsor annuel de l’association : France TĂ©lĂ©visions expliquera leur dynamique interne de transition vers l’agilitĂ© et les raisons de leur implication dans la communautĂ© agile par le biais du soutien au French Scrum User Group.
  • 4 ateliers, sĂ©lectionnĂ©s par la communautĂ© parmi les propositions Ă©mises sur Ideascale. N’hĂ©sitez pas Ă  voter pour les sessions auxquelles vous souhaiteriez assister Ă  cette occasion !

La soirĂ©e se terminera par un cocktail doublĂ© d’une croisiĂšre sur la Seine qui nous permettra de profiter d’une vue pittoresque sur “Paris by night”.

Vous trouverez toutes les informations concernant la soirée ici.

Ippon Technologies est trĂšs impliquĂ© dans la communautĂ© agile, notamment par le biais de son soutien au French Scrum User Group en tant que sponsor annuel et sponsor rĂ©gulier d’Ă©vĂ©nements tels que le Scrum Day. A ce titre nous serons bien Ă©videment prĂ©sents lors de cette soirĂ©e. N’hĂ©sitez pas Ă  venir nous  rencontrer pour de discuter de Scrum, de l’AgilitĂ© en gĂ©nĂ©ral, voire mĂȘme de bien d’autres sujets !

Péniche L'Evénement

Péniche L’ÉvĂ©nement

Catégories: Blog Société

Ippon, Sponsor du Liferay Symposium le 6 juin 2013

mar, 05/28/2013 - 07:30

Ippon sera partenaire Platinum de la 3Úme édition du Symposium Liferay France, organisé à Paris.

Rendez-vous le 6 juin pour tout savoir sur les nouvelles fonctionnalitĂ©s de la premiĂšre plateforme pour le dĂ©veloppement d’applications web innovantes.

Venez rencontrer les experts Liferay d’Ippon et de l’hĂ©bergeur Atomes Hosting, les dirigeants de Liferay, les utilisateurs et les membres de la communautĂ© !

Au programme : retours d’expĂ©rience clients, prĂ©sentations techniques sur les meilleurs usages de la solution de portail et zoom sur les nouveautĂ©s Liferay.

Yann Vigara, Responsable de l’Offre Cloud Liferay Ippon animera une confĂ©rence “Liferay en production”  :

“Petit kit de survie pour la mise en production de votre portail Liferay. Vous dĂ©couvrirez les bonnes pratiques qui ont fait leurs preuves dans les environnements de production que nous gĂ©rons. Vous apprendrez comment sĂ©curiser et optimiser votre Liferay. Nous explorerons les enjeux et les solutions liĂ©s au dĂ©ploiement d’un portail dans le Cloud.”

Horaires et lieu :  de 14h00 à 14h35 dans le Salon Bonaparte.

Vous pourrez aussi rencontrer les Ă©quipes Ippon et Atomes Hosting sur le Stand dans l’espace Partenaires.

Pour tout savoir sur l’évĂ©nement et vous inscrire, cliquez ici

Catégories: Blog Société

Une application HTML5 “desktop” en mode offline

jeu, 05/23/2013 - 21:30

html5

Durant une de mes rĂ©centes missions j’ai eu la chance de dĂ©velopper une application HTML5 en mode offline. Cette application a pour coeur de mĂ©tier le calcul de structures dans le bĂątiment. En gros, l’ingĂ©nieur bĂątiment va sur un chantier avec son laptop ou sa tablette, ouvre l’application et rentre des donnĂ©es de mesures physiques pour voir si Ă  tout hasard le bĂątiment ne risque pas de s’Ă©crouler ^^. Toute la logique mĂ©tier est donc cĂŽtĂ© client et une connexion au serveur web permet juste de tĂ©lĂ©charger l’application une premiĂšre fois, puis de faire des mises Ă  jour.

La grande question est pourquoi avoir choisi des technos Web pour faire une application “desktop” offline ? Tout d’abord c’Ă©tait un pari sur l’avenir et ensuite plusieurs devices clients Ă©taient ciblĂ©s, notamment des laptops et des tablettes, et ça HTML5 sait bien faire. L’argument rĂ©current contre HTML5 est la compatibilitĂ© navigateur. Pour une application interne Ă  l’entreprise, on aurait pu cibler un seul navigateur mais ça n’a pas Ă©tĂ© notre cas. Le client voulait de la compatibilitĂ© Firefox, Chrome et mĂȘme IE8 ! Heureusement ils ont bien voulu de Google Chrome Frame.

Dans cet article, je vous prĂ©senterai donc les diffĂ©rentes technos, APIs que j’ai utilisĂ© pour dĂ©velopper cette application mais surtout je vous dĂ©voilerai les 20% d’Ă©cueils qui ont pris 80% de mon temps !

Mode Offline

Mon ingĂ©nieur en bĂątiment, il n’aura pas forcĂ©ment de connexion internet sur les chantiers. Il lui faut donc une application capable de fonctionner en mode offline. HTML5 a introduit l’interface ApplicationCache qui va permettre de mettre en cache l’application web et ainsi de se passer d’une connexion internet les fois suivantes.

Le fichier cache manifest

Le fichier cache manifest est un simple fichier texte qui va rĂ©fĂ©rencer tous les fichiers de votre application qui doivent (ou ne doivent pas) ĂȘtre mis en cache. Voici un exemple de fichier manifest qui demande Ă  mettre en cache les fichiers index.html et css/style.css :

CACHE MANIFEST
index.html
css/style.css

Ce fichier (“manifest.appcache” par exemple mais vous pouvez lui donner n’importe quel nom ou extension) doit ĂȘtre rĂ©fĂ©rencĂ© par votre page dans la balise <html> :

<html manifest="manifest.appcache">
...
</html>

Voilà rien de plus simple. Mais on peut faire un peu plus compliqué. Le fichier cache manifest peut se décomposer en 3 sections :

  • La section CACHE : c’est la section par dĂ©faut, celle qui va rĂ©fĂ©rencer les fichiers Ă  mettre en cache
  • La section NETWORK : c’est l’opposĂ© de la section CACHE, ici on va rĂ©fĂ©rencer les fichiers qui nĂ©cessiteront toujours un accĂšs rĂ©seau
  • La section FALLBACK : dans cette section on peut proposer des pages de “secours” si des ressources ne sont pas accessibles.

En exemple :

CACHE MANIFEST
# on peut omettre cette ligne car CACHE: est la section par défaut
CACHE:
index.html
css/style.css
# Ressources qui nécessitent que l'utilisateur soit online
NETWORK:
img/logo.png
# offline.html sera utilisé si online.html n'est pas accessible
# offline.html sera utilisé à la place des autres fichiers html si ils ne sont pas accessibles
FALLBACK:
online.html offline.html
*.html offline.html

Ecueils Pas de Wildcards dans la section CACHE

On peut utiliser des wildcards dans les sections NETWORK et FALLBACK mais pas dans la section CACHE ! Si vous avez beaucoup de fichiers dans votre application ça peut ĂȘtre ennuyeux. Je vous conseille d’utiliser un petit script pour gĂ©nĂ©rer une premiĂšre fois votre fichier, sous Unix par exemple :

echo "CACHE MANIFEST" > manifest.appcache; find . -type f | sed "s#^\./##" >> manifest.appcache

Type MIME du fichier cache manifest

Une erreur frĂ©quente est d’oublier de vĂ©rifier que votre serveur web sert le fichier cache manifest avec le bon type MIME. Un fichier cache manifest doit avoir le type MIME “text/cache-manifest”. Par exemple dans Apache, vous pouvez rajouter cette ligne dans le fichier de configuration :

AddType text/cache-manifest .appcache

Mise Ă  jour du cache

Tiens bizarre, vous avez modifiĂ© votre fichier index.html mais lorsque vous rechargez la page, vous ne voyez pas vos modifications !? C’est normal si vous avez mis en cache votre fichier index.html ! C’est bien lĂ  le principe du cache :) Du coup si vous voulez que votre navigateur mette Ă  jour son cache avec votre nouveau fichier, vous devez modifier le fichier cache manifest.
Je vous conseille d’utiliser une ligne de commentaire avec un numĂ©ro de version que vous incrĂ©menterez lorsque vous dĂ©ploierez une nouvelle version de votre application.

CACHE MANIFEST
# Version 2
index.html
...

(note: le cache peut Ă©galement ĂȘtre mis Ă  jour programmatiquement via l’api ou lorsque vous effacez le cache du navigateur)

C’est trop bien le cache HTML5 mais en mode dĂ©veloppement c’est pas pratique

Effectivement, c’est pas pratique car pour voir vos modifications vous devez en permanence modifier votre fichier cache manifest ! LĂ  plusieurs solutions s’offrent Ă  vous :

  • configurez votre serveur web pour que vos fichiers expirent tout de suite
  • ne pas utiliser de cache en dĂ©veloppement
Ne pas mettre en cache le fichier cache manifest lui-mĂȘme

Car si vous le faites, votre fichier cache manifest sera en cache et votre navigateur ne verra pas les modifications apportĂ©es au fichier cache manifest et ne mettra donc pas Ă  jour son cache ! Il faudra attendre le temps d’expiration du fichier.

Double Rechargement

Lors du tĂ©lĂ©chargement d’une nouvelle version de votre application, il faut reloader 2 fois la page : une fois pour mettre Ă  jour son cache, une 2Ăšme fois pour vraiment charger la nouvelle version en cache. Pour Ă©viter ce double rechargement Ă  votre utilisateur, vous pouvez utiliser un peu de code Javascript qui va faire ce boulot pour vous :

// On vérifie si un nouveau cache est disponible au chargement de la page
window.addEventListener('load', function(e) {

  window.applicationCache.addEventListener('updateready', function(e) {
    if (window.applicationCache.status == window.applicationCache.UPDATEREADY) {
      // Là le navigateur a téléchargé un nouveau cache
      // On change le cache et on recharge la page
      window.applicationCache.swapCache();
      window.location.reload();
    } else {
      // Le cache Manifest n'a pas changé, on ne fait rien
    }
  }, false);

}, false);
Api Localstorage

Robert, mon ingĂ©nieur en bĂątiment, il avait l’habitude avec son logiciel desktop de sauvegarder son travail, de revenir sur son chantier le lendemain et de reprendre lĂ  oĂč il s’Ă©tait arrĂȘtĂ©. Si on Ă©tait sur une application Web classique, on sauvegarderait notre travail dans une base de donnĂ©es. Mais en offline, il faut composer avec ce que le navigateur nous propose. Il y a les cookies, mais bon la taille maximale d’un cookie est de 4ko, ça fait pas beaucoup. Ce qu’il nous faut c’est donc un espace de stockage :

  • de grande capacitĂ©
  • sur le client
  • qui persiste au-delĂ  d’un rechargement de page
  • qui n’est pas transmis au serveur

Dans un premier temps on va utiliser le Web Storage et plus particuliÚrement le LocalStorage qui se comporte simplement comme une Map clé-valeur. Celui-ci répond à tous nos besoins. Par exemple, sa limite de stockage est de 5Mo par nom de domaine. Cette limite est évoquée dans la spécification mais ce nombre peut différer selon les implémentations.

Ecueils String-String

Le principal problĂšme est que le LocalStorage ne propose qu’un mapping clĂ©-valeur oĂč clĂ© et valeur ne peuvent ĂȘtre que des chaines de caractĂšres ! Si vous sauvegardez un int ou un objet, celui-ci sera transformĂ© en chaine de caractĂšres. Lorsque vous voudrez le charger, il faudra coder une petite Ă©tape intermĂ©diaire pour retrouver votre objet initial (parseInt() ou JSON.parse() par exemple). Mais si vous ne voulez pas vous embĂȘter, vous pouvez utiliser le petit framework Locache qui possĂšde une API simple de cache et qui permet notamment de sauvegarder vos objets dans le LocalStorage et de le rĂ©cupĂ©rer en tant que tel.

Api File, Filesystem

Robert, qui dĂ©pose tous les matins ses enfants Ă  l’Ă©cole, il est content de pouvoir sauvegarder son travail dans son navigateur. Mais avant il le faisait dans des fichiers qu’il pouvait voir en vrai sur son disque dur. En plus, ça lui arrivait d’envoyer son fichier Ă  son collĂšgue Miguel pour qu’il y jette un oeil. Ok… pas de problĂšme…
Dans une application web classique, c’est le serveur qui envoie un binaire Ă  votre navigateur et ce dernier vous propose de le sauvegarder quelque part sur le filesystem. Mais lĂ  je vous rappelle, on travaille en mode offline.

HTML5 introduit plusieurs APIs permettant de gérer des fichiers :

  • l’API File permet de lire des fichiers provenant de votre systĂšme de fichiers au niveau OS
  • les APIs FileWriter et FileSystem permettent de gĂ©rer un systĂšme de fichier Ă  l’intĂ©rieur de votre navigateur. Ce systĂšme de fichier est cantonnĂ© Ă  un nom de domaine et Ă©videmment vous ne pouvez pas y accĂ©der en dehors de votre navigateur courant. Mais le W3C a tout prĂ©vu et l’interface FileWriter possĂšde une mĂ©thode saveAs(data, filename) permettant de sauvegarder le fichier sur votre filesystem au niveau OS. Malheureusement cette mĂ©thode n’est supportĂ© que dans Chrome. Heureusement, il existe un polyfill pour les autres browsers : FileSaver.js.
Ecueils Support des navigateurs

Ici le principal Ă©cueil est le support disparate des navigateurs des APIs de fichiers. D’une part, les APIs fichiers de HTML5 sont compliquĂ©s car scindĂ©s en diffĂ©rentes API et de l’autre cĂŽtĂ©, certains navigateurs supportent une Api mais pas l’autre. C’est facile de s’y perdre. Je vous conseille d’utiliser le site caniuse pour se tenir au courant des diffĂ©rentes compatibilitĂ©s navigateurs.

Modélisation 2D

Autre truc sympa que l’application doit faire, c’est modĂ©liser les diffĂ©rentes structures (poteaux, dalles, …) des bĂątiments. Oui, Robert comprend mieux avec des schĂ©mas et des dessins. Pas vous ?

Canvs_vs_SVG

:) Bon ici on était confronté à deux choix : Canvas ou SVG. On a essayé les deux :

et Ă  vrai dire on Ă©tait plutĂŽt satisfait des deux. En ce qui nous concerne, ce qui a fait la diffĂ©rence, c’est que SVG c’est du vectoriel. D’une, l’application prĂ©cĂ©dente utilisait du vectoriel et de deux, ces modĂ©lisations devaient ĂȘtre imprimĂ© pour ĂȘtre incorporĂ© dans un rapport.

Framework Javascript, CSS

Bien sĂ»r au-delĂ  de HTML5, nous avons utilisĂ© plĂ©nitude d’outils et framework Javascripts, CSS. Je ne vais pas les dĂ©tailler ici, surtout que mes collĂšgues s’y sont dĂ©jĂ  attelĂ©s :

Conclusion

J’ai oubliĂ© de prĂ©ciser que ce dĂ©veloppement n’Ă©tait pas un dĂ©veloppement de zĂ©ro mais une migration d’application desktop Ă©crite en C++ vers une application web offline Ă©crite en HTML Javascript ! On commence Ă  voir des entreprises de moins en moins frileuses par rapport Ă  ces nouvelles technologies Web et tant mieux ! Le Web existe maintenant depuis plus de 20 ans et est utilisĂ© partout, par tout le monde et tout le temps.

Je pense que HTML5 a de beaux jours devant lui et notamment dans le dĂ©veloppement d’applications d’entreprise dites desktop. Les APIs sont lĂ , les implĂ©mentations ne suivent pas toujours mais la communautĂ© HTML/Javascript/CSS est tellement bouillante que de nombreux frameworks Ă©mergent pour combler les trous. La convergence applications web, applications desktop et applications mobiles sera sans doute HTML5 (ou HTML6 ^^). Seul l’avenir nous le dira.

HTML5_sticker

Catégories: Blog Société

Big Data : La jungle des différentes distributions open source Hadoop

mar, 05/14/2013 - 08:30
L’Ă©cosystĂšme Hadoop

En 2004, Google a publiĂ© un article prĂ©sentant son algorithme de calcul Ă  grande Ă©chelle, MapReduce, ainsi que son systĂšme de fichier en cluster, GoogleFS. Rapidement (2005) une version open source voyait le jour sous l’impulsion de Yahoo.

Aujourd’hui il est difficile de se retrouver dans la jungle d’Hadoop pour les raisons suivantes :

  1. Ce sont des technologies jeunes.

  2. Beaucoup de buzz et de communication de sociétés qui veulent prendre le train Big Data en marche.

  3. Des raccourcis sont souvent employĂ©s (non MapReduce ou un Ă©quivalent n’est pas suffisant pour parler d’Hadoop).

  4. Beaucoup d’acteurs diffĂ©rents (des mastodontes, des spĂ©cialistes du web, des start-up, 
).

Dans une distribution Hadoop on va retrouver les Ă©lĂ©ments suivants (ou leur Ă©quivalence) HDFS, MapReduce, ZooKeeper, HBase, Hive, HCatalog, Oozie, Pig,  Sqoop, …

Ces solutions sont des projets Apache et donc disponibles mais l’intĂ©rĂȘt d’un package complet est Ă©vident : compatibilitĂ© entre les composants, simplicitĂ© d’installation, support, …

Dans cet article on évoquera les trois distributions majeures que sont Cloudera, HortonWorks et MapR, toutes les trois se basant sur Apache Hadoop.

On peut toutefois les distinguer en fonction de la distance qu’elles prennent avec cette base :

  • MapR : noyau Hadoop mais repackagĂ© et enrichi de solutions propriĂ©taires.

  • Cloudera : fidĂšle en grande partie sauf pour les outils d’administration.

  • HortonWorks : fidĂšle Ă  la distribution Apache et donc 100% open source.

Il existe d’autres distributions, voire des offres cloud, mais qui n’offrent pas l’ensemble des fonctionnalitĂ©s d’une plate forme Hadoop ou ne sont pas open source (ou a minima gratuites) comme Intel Distribution for Hadoop ou bien Greenplum (Pivotal HD).

Le cƓur : Hadoop kernel

Hadoop est le framework le plus utilisé actuellement pour manipuler et faire du Big Data.

Apache Hadoop est un framework qui va permettre le traitement de donnĂ©es massives sur un cluster allant de une Ă  plusieurs centaines de machines, c’est un projet open source (Apache v2 licence).

Hadoop est écrit en Java et a été créé par Doug Cutting et Michael Cafarella en 2005 (Doug, travaillait alors pour Yahoo sur son projet de crawler web Nutch).

C’est lui qui va gĂ©rer la distribution des donnĂ©es au cƓur des machines du cluster, leurs Ă©ventuelles dĂ©faillances mais aussi l’agrĂ©gation du traitement final.

L’architecture est de type « Share nothing » : aucune donnĂ©e n’est traitĂ©e par deux noeuds diffĂ©rents mĂȘme si les donnĂ©es sont rĂ©parties sur plusieurs noeuds (principe d’un noeud primaire et de noeuds secondaires). 

HDFS (Hadoop Distributed File System)

HDFS est un systÚme de fichiers Java utilisé pour stocker des données structurées ou non sur un ensemble de serveurs distribués.

HDFS s’appuie sur le systĂšme de fichier natif de l’OS pour prĂ©senter un systĂšme de stockage unifiĂ© reposant sur un ensemble de disques et de systĂšmes de fichiers hĂ©tĂ©rogĂšnes.

La consistance des données est basée sur la redondance. Une donnée est stockée sur au moins n volumes différents.

ÉlĂ©ments importants :

Node (Master/slave) : Dans une architecture Hadoop chaque membre pouvant traiter des donnĂ©es est appelĂ© node (Noeud). Un seul d’entre eux peut ĂȘtre master mĂȘme s’il peut changer au cours de la vie du cluster.

Il est responsable de la localisation des données dans le cluster (il est appelé Name Node). Les autres sont des slaves appelés Data Nodes.

Bien qu’il puisse y avoir plusieurs Name Nodes, la “promotion” doit se faire manuellement (Hadoop 2.0, actuellement en version alpha, introduit un failover automatisĂ©).

Le Name Node est donc un Single Point Of Failure (SPOF) dans un cluster Hadoop.

Au sein du cluster, les données sont découpées et distribuées en blocks selon les deux paramÚtres suivants :

  • Blocksize : Taille unitaire de stockage (gĂ©nĂ©ralement 64 Mo ou 128 Mo). C’est Ă  dire qu’un fichier de 1 Go (et une taille de block de 128 Mo) sera divisĂ© en 8 blocks.

  • Replication factor : C’est le nombre de copies d’une donnĂ©es devant ĂȘtre rĂ©parties sur les diffĂ©rents noeuds du cluster (souvent 3, c’est Ă  dire une primaire et deux secondaires).

Enfin, un principe important d’HDFS est que les fichiers sont de type “write-once” car dans des opĂ©rations analytiques on lit la donnĂ©e beaucoup plus qu’on l’Ă©crit. C’est donc sur la lecture que les efforts ont Ă©tĂ© portĂ©s.
Ce qui signifie que l’on ne modifie pas les donnĂ©es dĂ©jĂ  prĂ©sentes.

Un principe liĂ© est qu’Ă  partir du moment ou un fichier HDFS est ouvert en Ă©criture, il est verrouillĂ© pendant toute la durĂ©e du traitement.
Il est donc impossible d’accĂ©der Ă  des donnĂ©es ou Ă  un rĂ©sultat tant que le job n’est pas terminĂ© et n’a pas fermĂ© le fichier (et un fichier peut ĂȘtre trĂšs volumineux avec Hadoop).

HDFS

Alternatives MapR

En mai 2011, MapR a annoncĂ© une alternative au systĂšme HDFS. Ce systĂšme permet d’Ă©viter le SPOF qu’est le Name Node. Ce systĂšme n’est pas inconnu car il s’agit de HBase, dont elle propose une version propriĂ©taire.

HBase (Apache)

HBase est un sous-projet d’Hadoop, c’est un systĂšme de gestion de base de donnĂ©es non relationnelles distribuĂ©, Ă©crit en Java, disposant d’un stockage structurĂ© pour les grandes tables.

HBase est inspirĂ©e des publications de Google sur BigTable. Comme BigTable, c’est une base de donnĂ©es orientĂ©e colonnes.

HBase est souvent utilisé conjointement au systÚme de fichiers HDFS, ce dernier facilitant la distribution des données de HBase sur plusieurs noeuds.

Contrairement à HDFS, HBase permet de gérer les accÚs aléatoires read/write pour des applications de type temps réel.

Cassandra (Facebook)

Cassandra est une base de donnĂ©es orientĂ©e colonnes dĂ©veloppĂ©e sous l’impulsion de Facebook.

Cassandra supporte l’exĂ©cution de jobs MapReduce qui peuvent y puiser les donnĂ©es en entrĂ©e et y stocker les rĂ©sultats en retour (ou bien dans un systĂšme de fichiers).

Cassandra comparativement à HBase est meilleur pour les écritures alors que ce dernier est plus performant pour les lectures.

Offre Cloud

Le cloud est un complément idéal au monde Hadoop, en offrant des possibilités de stockage et de traitement extensibles.

Il est donc possible d’utiliser un systĂšme de fichiers situĂ© dans le cloud pour le stockage des donnĂ©es et l’exĂ©cution des traitements.

Solutions supportées :

  • Amazon S3.

  • Kosmix’s CloudStore.

  • IBM GPFS (General Parallel File System).

MapReduce

A l’origine crĂ©e par Google pour son outil de recherche web.

C’est un framework qui permet le dĂ©composition d’une requĂȘte importante en un ensemble de requĂȘtes plus petites qui vont produire chacune un sous ensemble du rĂ©sultat final : c’est la fonction Map.

L’ensemble des rĂ©sultats est traitĂ© (agrĂ©gation, filtre) : c’est la fonction Reduce.

MR

Alternatives YARN (HortonWorks)

YARN (Yet-Another-Resource-Negotiator) est aussi appelĂ©  MapReduce 2.0, ce n’est pas une refonte mais une Ă©volution du framework MapReduce.

YARN apporte une séparation claire entre les problématiques suivantes :

  • Gestion de l’Ă©tat du cluster et des ressources.
  • Gestion de l’exĂ©cution des jobs.

YARN est compatible avec les anciennes versions de MapReduce (il faut simplement recompiler le code).

Les extensions RequĂȘtage des donnĂ©es : Hive (Facebook)

Hive est Ă  l’origine un projet Facebook qui permet de faire le lien entre le monde SQL et Hadoop.

Il permet l’exĂ©cution de requĂȘtes SQL sur un cluster Hadoop en vue d’analyser et d’agrĂ©ger les donnĂ©es.

Le langage SQL est nommĂ© HiveQL. C’est un langage de visualisation uniquement, c’est pourquoi seules les instructions de type “Select” sont supportĂ©es pour la manipulation des donnĂ©es.

Dans certains cas, les développeurs doivent faire le mapping entre les structures de données et Hive.

Hive utilise un connecteur jdbc/odbc.

Scripting sur les données : Pig (Yahoo)

Pig est Ă  l’origine un projet Yahoo qui permet le requĂȘtage des donnĂ©es Hadoop Ă  partir d’un langage de script.

Contrairement à Hive, Pig est basé sur un langage de haut niveau PigLatin qui permet de créer des programmes de type MapReduce.

Contrairement Ă  Hive, Pig ne dispose pas d’interface web.

Intégration SGBD-R : Sqoop (Cloudera)

Sqoop permet le transfert des données entre un cluster Hadoop et des bases de données relationnelles.

C’est un produit dĂ©veloppĂ© par Cloudera.

Il permet d’importer/exporter des donnĂ©es depuis/vers Hadoop et Hive.

Pour la manipulation des données Sqoop utilise MapReduce et des drivers JDBC.

Ordonnanceur : Apache Oozie (Yahoo)

Oozie est une solution de workflow (au sens scheduler d’exploitation) utilisĂ©e pour gĂ©rer et coordonner les tĂąches de traitement de donnĂ©es Ă  destination de Hadoop.

Oozie s’intĂšgre parfaitement avec l’écosystĂšme Hadoop puisqu’il supporte les types de jobs suivant :

  • MapReduce (Java et Streaming).

  • Pig.

  • Hive.

  • Sqoop.

  • Autres tels que programmes Java ou scripts de type Shell.

Gestion des clusters Hadoop Clustering Apache ZooKeeper

ZooKeeper est un service de coordination des services d’un cluster Hadoop.

En particulier, le rÎle de ZooKeeper est de fournir aux composants Hadoop les fonctionnalités de distribution.

Pour cela il centralise les éléments de configuration du cluster Hadoop, propose des services de clusterisation et gÚre la synchronisation des différents éléments (événements).

ZooKeeper est un élément indispensable au bon fonctionnement de HBase. 

Supervision Apache Ambari (HortonWorks)

Ambari est un projet d’incubation Apache initiĂ© par HortonWorks et destinĂ© Ă  la supervision et Ă  l’administration de clusters Hadoop.

C’est un outil web qui propose un tableau de bord. Cela permet de visualiser rapidement l’état d’un cluster.

Ambari dispose d’un tableau de bord dont le rĂŽle est de fournir une reprĂ©sentation :

  • De l’état des services.

  • De la configuration du cluster et des services.

  • Des informations issues de Ganglia et de Nagios.

  • De l’exĂ©cution des jobs.

  • Des mĂ©triques de chaque machine et du cluster.

De plus Ambari inclue un systĂšme de gestion de configuration permettant de dĂ©ployer des services d’Hadoop ou de son Ă©cosystĂšme sur des clusters de machines.

Ambari se positionne en alternative à Chef, Puppet pour les solutions génériques ou encore à Cloudera Manager pour le monde Hadoop.

Ambari ne se limite pas Ă  Hadoop mais permet de gĂ©rer Ă©galement tous les outils de l’écosystĂšme.

Les outils annoncés sont :

  • Hadoop

  • HDFS

  • MapReduce

  • Hive, HCatalog

  • Oozie

  • HBase

  • Ganglia, Nagios

Autres Apache Flume (Cloudera)

Flume est une solution de collecte et d’agrĂ©gation de fichiers logs, destinĂ©s Ă  ĂȘtre stockĂ©s et traitĂ©s par Hadoop.

Il a Ă©tĂ© conçu pour s’interfacer directement avec HDFS au travers d’une API native.

Flume est Ă  l’origine un projet Cloudera, reversĂ© depuis Ă  la fondation Apache.

Alternatives : Apache Chukwa.

Apache Mahout

Apache Mahout est un projet de la fondation Apache visant Ă  crĂ©er des implĂ©mentations d’algorithmes d’apprentissage automatique et de datamining.

MĂȘme si les principaux algorithmes d’apprentissage se basent sur MapReduce, il n’y a pas d’obligation Ă  utiliser Hadoop. Apache Mahout ayant Ă©tĂ© conçu pour pouvoir fonctionner sans cette dĂ©pendance. 

Apache Drill (MapR)

InitiĂ© par MapR, Drill est un systĂšme distribuĂ© permettant d’effectuer des requĂȘtes sur de larges donnĂ©es. Il implĂ©mente les concepts exposĂ©s par le projet Google Dremel.

Drill permet d’adresser le besoin temps rĂ©el d’un projet Hadoop. MapReduce Ă©tant plutĂŽt conçu pour traiter de larges volumes de donnĂ©es en batch sans objectif de rapiditĂ© et sans possibilitĂ© de redĂ©finir la requĂȘte Ă  la volĂ©e.

Drill est donc un systĂšme distribuĂ© qui permet l’analyse interactive des donnĂ©es, ce n’est pas un remplacement de MapReduce mais un complĂ©ment qui est plus adaptĂ© pour certains besoins.

Apache HCatalog (HortonWorks)

HCatalog permet l’interopĂ©rabilitĂ© d’un cluster de donnĂ©es Hadoop avec des systĂšmes externes.

HCatalog est un service de management de tables et de schéma des données Hadoop :

  • Permet d’attaquer les donnĂ©es HDFS via des schĂ©mas de type tables de donnĂ©es en lecture/Ă©criture.
  • Permet d’opĂ©rer sur des donnĂ©es issues de MapReduce, Pig ou Hive.
Apache Tez (HortonWorks)

Tez est un nouveau framework en incubation chez Apache.

Utilisant YARN il remplace MapReduce afin de fournir des requĂȘtes dites “temps rĂ©el”. La faible latence est en effet un prĂ© requis Ă  l’exploration interactive des donnĂ©es stockĂ©es sur un cluster Hadoop.

C’est un concurrent d’Apache Drill (MapR) ou de Cloudera Impala.

Vue d’ensemble de la plate forme Hadoop

Apache Hadoop

Les distributions HortonWorks Présentation

HortonWorks a Ă©tĂ© formĂ© en juin 2011 par des membres de l’équipe Yahoo en charge du projet Hadoop.

Leur but est de faciliter l’adoption de la plate forme Hadoop d’Apache, c’est pourquoi tous les composants sont open source et sous licence Apache.

Le modĂšle Ă©conomique d’HortonWorks est de ne pas vendre de licence mais uniquement du support et des formations.

Cette distribution est la plus conforme à la plate forme Hadoop d’Apache et HortonWorks est un gros contributeur Hadoop.

Parmi les projets reversés il y a :

  • YARN,

  • HCatalog,

  • Ambari,

Composants de la plate forme HDP

Les éléments suivants composent la plate forme HortonWorks :

  1. CƓur Hadoop (HDFS/MapReduce).

  2. NoSQL (Apache HBase).

  3. Méta-données (Apache HCatalog).

  4. Plate forme de script (Apache Pig).

  5. RequĂȘtage (Apache Hive).

  6. Planification(Apache Oozie).

  7. Coordination (Apache Zookeeper).

  8. Gestion et supervision (Apache Ambari).

  9. Services d’intĂ©gration (HCatalog APIs, WebHDFS, Talend Open Studio for Big Data, Apache Sqoop).

  10. Gestion distribuée des logs (Apache Flume).

  11. Apprentissage (Apache Mahout).

Vision d’ensemble de la distribution

Horton

DĂ©ploiement de la plate forme Machine Virtuelle prĂȘte Ă  l’emploi

HortonWorks met à disposition une machine virtuelle ou sont pré installés les composants de la plate forme Hadoop.

C’est l’idĂ©al pour l’apprentissage de la plate forme mais incompatible avec les exigences de production ou mĂȘme celles d’un POC.

Installation automatique avec Ambari

En plus de la gestion du cluster, Ambari permet le dĂ©ploiement de l’ensemble des composants Hadoop de maniĂšre centralisĂ©e.

Installation manuelle avec Linux RPM

HortonWorks met Ă  disposition des packages RPM.

En utilisant le principe des RPM Linux il est possible d’installer les composants HDP manuellement.

Cloudera Présentation

Cloudera se veut comme la compagnie commerciale Hadoop.

Fondée par des experts Hadoop en provenance de Facebook, Google, Oracle et Yahoo.

Si leur plate forme est en grande partie basĂ©e sur Hadoop d’Apache, elle est complĂ©tĂ©e avec des composants maison essentiellement pour la gestion du cluster.

A noter aussi que la version d’Apache Hadoop distribuĂ©e est la derniĂšre version stable complĂ©tĂ©e de patchs critiques ainsi que de quelques fonctionnalitĂ©s de la version de dĂ©veloppement.

Le modÚle économique de Cloudera est la vente de licences mais aussi du support et des formations. 

Cloudera propose une version entiĂšrement open source de leur plate forme (Licence Apache 2.0).

Composants de la plate forme CDH (Cloudera’s Distribution including Apache Hadoop)

Composants Apache :

  • HDFS : File System distribuĂ©.

  • MapReduce : Framework de traitement parallĂ©lisĂ©.

  • HBase : Base de donnĂ©es NoSQL (accĂšs read/write alĂ©atoires).

  • Hive : RequĂȘtage de type SQL.

  • Pig : Scripting et requĂȘtage Hadoop.

  • Oozie : Workflow et planification de jobs Hadoop.

  • Sqoop : IntĂ©gration de bases SQL.

  • Flume : Exploitation de fichiers (log) dans Hadoop.

  • ZooKeeper : Service de coordination pour les applications distribuĂ©es.

  • Mahout : Framework d’apprentissage et de datamining pour Hadoop.

Composants d’origine Cloudera :

  • Hadoop Common: Un ensemble d’utilitaires.

  • Hue : SDK permettant de dĂ©velopper des interfaces utilisateur pour les applications Hadoop.

  • Whirr : Librairies et scripts pour l’exĂ©cution d’Hadoop et de services liĂ©s dans le cloud.

Composants non Apache Hadoop :

  • Cloudera Impala : Moteur temps rĂ©el de requĂȘtage SQL parallĂ©lisĂ© de donnĂ©es stockĂ©es dans HDFS ou HBase. Contrairement Ă  Hive de Hadoop, Impala n’utilise pas le framework MapReduce qui exige que les rĂ©sultats de recherche soient Ă©crits sur le disque, ce qui lui permet d’exĂ©cuter les requĂȘtes plus rapidement. La consultation des donnĂ©es peut ĂȘtre interactive. Licence : ASLv2.

  • Cloudera Manager : DĂ©ploiement et gestion des composants Hadoop.

A noter que Cloudera Manager n’est pas entiùrement Open Source mais dispose d’une version gratuite avec quelques restrictions :

  • La version gratuite est limitĂ©e Ă  50 noeuds.

  • Certaines fonctionnalitĂ©s sont uniquement disponibles sur la version commerciale (comme le monitoring, les sauvegardes et les mises Ă  jour automatiques).

  • Support uniquement pour la version payante.

Vision d’ensemble de la distribution

Cloudera

Déploiement de la plate forme Automatique avec Cloudera Manager

Cloudera Manager permet l’installation des composants de la plate forme sur une machine (y compris distante).

Cloudera Manager permet la configuration centralisée des composants du cluster.

Enfin Cloudera Manager permet de finaliser l’installation en vĂ©rifiant le bon fonctionnement de chacun des composants.

Manuel avec les packages

Récupération des archives tarball (tgz) contenant la distribution.

Configuration et installation à l’aide des scripts fournis.

MapR Présentation

MapR a Ă©tĂ© fondĂ©e en 2009 par d’anciens membres de Google.

Bien que son approche soit commerciale, MapR contribue à des projets Apache Hadoop comme HBase, Pig, Hive, ZooKeeper et surtout Drill. 

MapR se distingue surtout de la version d’Apache Hadoop par sa prise de distance avec le cƓur de la plate-forme. Ils proposent ainsi leur propre systĂšme de fichier distribuĂ© ainsi que leur propre version de MapReduce : MapR FS et MapR MR.

Trois versions de leur solution sont disponibles :

  • M3 : version open source.

  • M5 : Ajoute des fonctions de haute disponibilitĂ© et du support.

  • M7 : Environnement HBase optimisĂ©.

MapR a remporté de beaux succÚs commerciaux depuis sa création.

  • Un partenariat avec EMC pour une la crĂ©ation et le support d’une version spĂ©cifique Ă  la plate forme Hadoop d’EMC.

  • MapR est Ă  l’origine de la version cloud de MapReduce d’Amazon : Elastic Map Reduce (EMR).

  • Enfin ils ont Ă©tĂ© retenu par Google pour l’offre Big Data de Google Compute Engine (GCE).

Contenu de la distribution MapR M3

Composants Apache :

  • HBase,

  • Pig,

  • Hive,

  • Mahout,

  • Cascading,

  • Sqoop,

  • Flume

MapR propose son propre systĂšme en remplacement de HDFS :

  • Une version maison de HBase (performance et fiabilitĂ© amĂ©liorĂ©es).

Avantages :

  • SystĂšme plus adaptĂ© au mode read/write que HDFS.

  • MapR intĂšgre un serveur NFS (Network File System) pour l’intĂ©gration au SI de l’entreprise.

  • Simplification de mise en oeuvre (surcouche du File System de l’OS et non remplacement comme HDFS).

  • Plus de Single Point Of Failure.

MapR FS reste compatible avec les API MapReduce/HDFS et HBase.

MapR propose son propre systùme en remplacement de MapReduce d’Apache.

Avantages :

  • MapR annonce de meilleures performances.

  • EntiĂšrement optimisĂ© pour HBase.

MapR Control System (MCS)

MCS permet la gestion et la supervision du cluster Hadoop. C’est un outil web permettant à la fois les ressources du cluster (CPU, Ram, Disque) que les services et les jobs.

MCS permet de dĂ©finir des alarmes sur des seuils ou des quotas …

La visualisation des informations est assurée par le composant HeatMap.

Autres spécificités :

Apache Cascading

Cascading est un framework Java dĂ©diĂ© Ă  Hadoop. Il permet Ă  un dĂ©veloppeur Java de retrouver ses marques (JUnit, Spring, etc…) et de manipuler les concepts d’Hadoop avec un langage de haut niveau sans en  connaĂźtre les API.

Apache Vaidya

Hadoop Vaidya est un outil d’analyse des performances des jobs MapReduce.

Son principe de fonctionnement est basĂ© sur des rĂšgles qu’il confronte aux statistiques d’exĂ©cution des jobs et aux fichiers de configuration.

Le rapport est produit au format XML.

Apache Drill

MapReduce a la rĂ©putation d’ĂȘtre puissant mais complexe Ă  manipuler (il faut en maĂźtriser l’API).

De plus, il est impossible de redĂ©finir les requĂȘtes Ă  la volĂ©e.

Drill vient complĂ©ter MapReduce et se prĂ©sente sous la forme d’une API permettant de crĂ©er plus rapidement des requĂȘtes en se basant sur le modĂšle SQL.

SQL plutĂŽt qu’une nouvelle API, c’est donc le choix de la capitalisation fait par Drill.

Vision d’ensemble de la distribution

MapR 

Déploiement de la plate forme Machine virtuelle

MapR fourni une machine virtuelle avec un seul noeud et l’ensemble des composants installĂ©s.

C’est l’idĂ©al pour une prise en main de la plate-forme mais incompatible avec les exigences de production.

Manuelle avec les packages

MapR ne fournit pas de systÚme de déploiement Hadoop.

L’installation est donc essentiellement manuelle avec des automatisations possibles.

Tout d’abord il faut rĂ©cupĂ©rer les composants Ă  installer :

  • Depuis le repository internet

  • Depuis un repository local

  • Avec des packages Debian/Linux

AprÚs édition de la configuration il faut ensuite exécuter les scripts fourni pour installer les composants MapR sur chaque machine.

A noter que la distribution ne contient pas les composants Apache et qu’il faut les installer manuellement.

Conclusion

Les trois distributions ont une approche et un positionnement diffĂ©rent en ce qui concerne la vision d’une plate forme Hadoop (open source, modĂšle Ă©conomique…).

Le choix se portera sur l’une ou l’autre solution en fonction des exigences :

  • Solution open source.

  • MaturitĂ© de la solution.

  • Partenariats et compatibilitĂ© avec les produits satellites. 

Le choix d’une distribution est d’autant plus difficile que l’avenir d’Hadoop est loin d’ĂȘtre tout tracĂ©.

En effet des virages technologiques importants sont d’ores et dĂ©jĂ  annoncĂ©s :

  1. Hadoop est né afin de répondre à la problématique suivante : comment traiter des téra-octets de données simplement ?

La rĂ©ponse proposĂ©e alors, un systĂšme de fichier distribuĂ©, est arrivĂ©e Ă  un moment oĂč il Ă©tait impossible de traiter de tels volumes de donnĂ©es en mĂ©moire. Maintenant le coĂ»t de la RAM a fortement baissĂ© et avec la gĂ©nĂ©ralisation des architecture 64 bits ce n’est plus tout Ă  fait exact.

  1. La sécurité : elle est encore balbutiante malgré quelques initiatives comme Apache Knox.

  1. L’intĂ©gration avec le SI, une plate forme Hadoop isolĂ©e et non intĂ©grĂ©e au systĂšme d’information ne sera plus possible dans le futur (en tout cas certains besoins exigeront une interaction plus grande).

  1. Un support direct des transactions ce qui a toujours été un challenge trÚs important dans le monde des données distribuées.

Cloudera

Le vĂ©tĂ©ran ce qu’il lui donne une lĂ©gitimitĂ© et un nombre de clients supĂ©rieur Ă  ces concurrents.

Un autre avantage est de disposer dans ses rangs de Doug Cutting le crĂ©ateur d’Hadoop.

Cloudera est trùs prompt à sortir les derniùres versions d’Hadoop (les premiers à sortir une distribution compatible Hadoop 2.0).

Les principaux partenaires sont IBM, HP, Oracle.

MapR

La plus Ă©loignĂ©e d’Apache Hadoop car elle intĂšgre leur propre vision de MapReduce et HDFS. AprĂšs Cloudera c’est la solution la plus mature.

C’est aussi la solution la plus simple à  installer grñce à leur utilisation du file system natif.

Beaucoup de partenariats de haut niveau et trÚs stratégiques sur le cloud (Amazon Elastic MapReduce et Google Compute Engine).

HortonWorks

C’est la seule plate forme 100 % Apache Hadoop.

La stratĂ©gie assumĂ©e d’HortonWorks est de se baser sur les versions stables et testĂ©es d’Apache Hadoop plutĂŽt que sur les derniĂšres versions.

Leur solution de gestion du cluster, Ambari, n’est pas aussi mature que la concurrence : Cloudera Manager et HeatMap.

Malgré sa relative jeunesse, HortonWorks a signé des partenariats importants avec IBM, Microsoft, Teradata et Talend. Ils ont notamment signé avec Microsoft un accord pour le déploiement de leur plate forme sur Azure.

Catégories: Blog Société

Des portlets Ă  la sauce Ember.js

mar, 05/07/2013 - 11:00
Le revival du Javascript

ember-logoIl y a une poignĂ©e d’annĂ©es, prononcer le mot Javascript face Ă  un dĂ©veloppeur JavaEE, c’Ă©tait comme parler de la valeur du ticket restaurant lors d’un premier entretien d’embauche
 Juste un truc pas complĂštement Ă  cĂŽtĂ© de la plaque, mais plutĂŽt Ă  Ă©viter, un aspect de la rĂ©alisation qu’il fallait mieux cacher comme la poussiĂšre qu’on pousse sous le tapis


Et puis, progressivement, une rĂ©volution a eu lieu : le HTML5 s’est prĂ©cisĂ©, l’outillage s’est raffinĂ© (merci Firebug et Chrome !) et surtout des frameworks de plus en plus puissants et faciles Ă  utiliser ont fleuri (en commençant par JQuery), permettant d’exploiter Ă  fond les capacitĂ©s impressionnantes de ce langage. Et petit Ă  petit, les technologies Front ont retrouvĂ© grĂące auprĂšs des dĂ©veloppeurs JavaEE.

Dernier acte Ă  ce jour, la parution de plusieurs solutions dites de MVC javascript, telles que BackBone.js (qui fait dĂ©jĂ  figure d’ancĂȘtre !), Angular.js et Ember.js (pour ne citer que les plus populaires).

Ember.js : mon petit prĂ©fĂ©rĂ©…

Dans ce post, nous nous intĂ©resserons uniquement Ă  Ember.js, qui est Ă  mon goĂ»t, la solution la plus complĂšte et la plus “Ă©lĂ©gante” (en tout cas de celles que j’ai pu aborder
)

Ember est un framework Javascript issu du projet SproutCore, grandement utilisĂ© par Apple notamment pour ses applications Web. Contrairement Ă  Backbone.js, Ember est directement conçu pour ĂȘtre couplĂ© Ă  Handlebars pour les aspects templating, et offre immĂ©diatement des possibilitĂ©s de binding bi-directionnelles. Il est dĂ©pendant de JQuery.

Son apprentissage est relativement rapide, grĂące Ă  un site Web plutĂŽt didactique et Ă  une bonne documentation de l’API (en tout cas, tant qu’on ne touche pas Ă  Ember-data qui fera sĂ»rement l’objet d’un autre post…). Je recommande cependant l’excellent article d’Andy Matthews (http://www.adobe.com/devnet/html5/articles/flame-on-a-beginners-guide-to-emberjs.html) pour une premiĂšre plongĂ©e. C’est clairement cet article qui m’a permis d’Ă©crire le mien ! Il y a Ă©galement un trĂšs bon tutoriel vidĂ©o directement disponible sur le site.

Étant un amateur de portail (j’ai prononcĂ© un gros mot ?), je me suis dit qu’il serait intĂ©ressant de voir dans quelle mesure il pourrait ĂȘtre possible d’utiliser Ember dans le cadre particulier d’une portlet. Il n’y a rien d’Ă©vident Ă  cela, sachant que ce type de framework est gĂ©nĂ©ralement conçu pour manipuler une page Web, alors mĂȘme qu’une portlet ne produira qu’un fragment de la page
 La cible retenue est l’inusable Liferay.

Maven et Liferay : c’est possible !

Depuis la version 6.1 du portail Liferay, il est possible d’abandonner le plugin sdk de l’Ă©diteur pour une structure plus classique de projet Maven. Liferay publie en effet Ă  la fois les artefacts du portail et les plugins de construction ou de dĂ©ploiement sur des repositories publics.

Pour aller plus loin, vous aurez donc besoin :

  • De tĂ©lĂ©charger et de dĂ©zipper un bundle Liferay/tomcat (disponible Ă  l’URL http://www.liferay.com/downloads/liferay-portal/available-releases),
  • D’avoir une installation Maven opĂ©rationnelle sur votre station.

Pour plus de simplicitĂ©, il est prĂ©fĂ©rable de dĂ©finir au prĂ©alable un profile spĂ©cifique Ă  l’installation locale de son portail Liferay dans le fichier settings.xml du rĂ©pertoire .m2. Ce profile est du type :

  <profile>
    <id>emberlf</id>
    <properties>
       <liferay.version>6.1.1</liferay.version>
       <liferay.auto.deploy.dir>%path to liferay bundle%/Liferay6.1/liferay-portal-6.1.1-ce-ga2/deploy</liferay.auto.deploy.dir>
    </properties>
  </profile>

Démarrer votre portail et lancer la création du squelette de projet de portlet par la commande suivante :

  mvn archetype:generate -DarchetypeArtifactId=liferay-portlet-archetype -DarchetypeGroupId=com.liferay.maven.archetypes -DarchetypeVersion=6.1.0 -DgroupId=fr.ippon.liferay.ember -DartifactId=ember-portlet -Dversion=1.0-SNAPSHOT -DinteractiveMode=false

Charger le projet dans votre Ă©diteur, et vous avez alors une magnifique portlet qui ne fait rien
 On peut mĂȘme la dĂ©ployer sur le portail Ă  l’aide d’une commande :

  mvn -Pemberlf package liferay:deploy

Ah si, elle affiche “This is the ember-portlet.”.

Le reste de cet article va vous montrer comment faire rapidement bien mieux !

IntĂ©gration d’Ember Ă  la portlet

Avant toute chose, il faut bien entendu rĂ©cupĂ©rer la distribution d’Ember.js et les frameworks associĂ©s. Cet article se base sur la version 1.0.0-rc3.

La premiĂšre chose Ă  faire est de recopier les ressources ember dans le projet

  •  ember-1.0.0-rc.3.js, handlebars-1.0.0-rc3.js et jquery-1.9.1.min.js dans le rĂ©pertoire ember-portlet/src/main/webapp/js

Une fois ces ressources copiĂ©es, il convient de les dĂ©clarer Ă  la portlet. Cette dĂ©claration s’effectue au travers du fichier liferay-portlet.xml en y ajoutant les lignes :

        <footer-portlet-javascript>/js/jquery-1.9.1.min.js</footer-portlet-javascript>
        <footer-portlet-javascript>/js/handlebars.js</footer-portlet-javascript>
        <footer-portlet-javascript>/js/ember-1.0.0-rc.1.js</footer-portlet-javascript>

On va Ă©galement ajouter dans le fichier main.js dĂ©jĂ  prĂ©sent (créé par dĂ©faut par Liferay), la dĂ©claration de l’application Ember.js, plus quelques petites subtilitĂ©s permettant de valider le fonctionnement d’Ember.js :

  App = Ember.Application.create({
    rootElement: $('section#portlet_emberportlet_WAR_emberportlet')
  });

  App.ApplicationView = Ember.View.extend({
    click: function(evt) {
      alert("Well done ! En plein sur la View Ember de la portlet !");
    }
  });

  App.ApplicationController = Ember.Controller.extend({
    templateName: 'Ember portlet',
    people: [
      {firstName: "Kitien", lastName: "Laroutte"},
      {firstName: "Sophie", lastName: "Fonsec"},
      {firstName: "Igor", lastName: "Saherseize"}
    ]
  });

Le point le plus important (et peu documenté ) est que l’on initialise l’application en lui passant un ‘rootElement’ correspondant au contenu de la portlet. Cela permet de limiter et de positionner les actions sur le DOM effectuĂ©es par le framework, qui est ainsi restreint au fragment de page servi par la portlet.

Le reste est assez standard :

  • On crĂ©e une vue, dans laquelle on dĂ©finit un Ă©vĂ©nement sur le clic,
  • On crĂ©e un contrĂŽleur qui se contente pour le moment de dĂ©finir des donnĂ©es pour affichage dans la JSP


Rien de trĂšs dynamique pour le moment.

vous pouvez alors modifier votre fichier view.jsp de la façon suivante :

<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>

<portlet:defineObjects />

<script type="text/x-handlebars">

    <h3>{{templateName}} </h3>
    <ul>
        {{#each people}}
            <li>Hello {{firstName}}</li>
        {{/each}}
    </ul>
</script>

AprÚs déploiement de la portlet par un mvn -Pember-liferay clean package liferay:deploy et placement dans une page du portail, on obtient la vue de la liste des personnes déclarées précédemment.

Et un clic sur le fragment de page affichant la portlet produit l’affichage d’une boĂźte d’alerte.

Il est maintenant temps d’aller un cran plus loin !

Service Liferay et JSON

Liferay est un portail offrant une architecture de services particuliĂšrement ouverte. On bĂ©nĂ©ficie ainsi de nombreux services SOAP ou REST/JSon permettant de manipuler les principaux objets créés au travers du “service builder”.

Pour consulter (et tester !) ces services JSON, il suffit de se rendre sur la page suivante de son portail local :


http://localhost:8080/api/jsonws

ember-logo

L’appel suivant, une fois les valeurs de repositoryId et de token d’authentification fixĂ©s permet par exemple de rĂ©cupĂ©rer les fichiers stockĂ©s dans le rĂ©pertoire de la bibliothĂšque :

http://localhost:8080/api/secure/jsonws/dlapp/get-file-entries?repositoryId=<repoId>&folderId=0&p_auth=<token secu>

On va donc mettre Ă  profit cette capacitĂ© pour construire une petite interface permettant de lister les rĂ©pertoires de la bibliothĂšque Liferay et les fichiers qu’ils contiennent.

C’est beau la mĂ©canique Ember !

Dans toute application Ember.js, l’essentiel de l’interface et de la cinĂ©matique applicative est rĂ©parti entre les fichiers HTML et Javascript. Les deux sont intimement liĂ©s et doivent normalement s’aborder simultanĂ©ment, ce qui est assez difficile dans le cas d’un post de Blog, vous en conviendrez… On va donc commencer par s’intĂ©resser Ă  la partir JSP de notre portlet. Pour cela, il convient de remplacer le contenu de view.jsp par le code suivant :

<%@ page import="com.liferay.portlet.documentlibrary.model.DLFolderConstants" %>
<%@ page import="com.liferay.portal.kernel.util.WebKeys" %>
<%@ page import="com.liferay.portal.theme.ThemeDisplay" %>
<%@ page import="com.liferay.portal.security.auth.AuthTokenUtil" %>

<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<%@ taglib prefix="liferay-portlet" uri="http://liferay.com/tld/portlet" %>

<portlet:defineObjects />
<%
    String auth= AuthTokenUtil.getToken(request);
    ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY);
    long defaultRepoId = DLFolderConstants.getDataRepositoryId(themeDisplay.getScopeGroupId(), DLFolderConstants.DEFAULT_PARENT_FOLDER_ID);
%>

<script language="javascript">
     var repoId = <%=defaultRepoId%>;
</script>

<script type="text/x-handlebars">
    <div id="selector">
        <div id="file-entries-frm">
            <b>Select File Directory: </b>
            {{view Ember.Select
            contentBinding="App.fileDirectoriesSelector.content"
            optionLabelPath="content.folderName"
            optionValuePath="content.id"
            valueBinding="App.fileDirectoriesSelector.selectedFolderId"
            prompt="Select a folder :"
            }}
        </div>
    </div>
    <hr/>
    <div id="filelist">
        {{view App.FileListView}}
    </div>
</script>

<script type="text/x-handlebars" data-template-name="filelist">

    <div id="file-entries-content">
        <div id="file-entries">
            <ul>
                {{#each App.fileEntriesController}}
                <li>
                    <span>{{size}} octets</span>
                    <h3>{{name}}-{{title}}</h3>
                    <p>{{description}}</p>
                </li>
                {{/each}}
            </ul>
        </div>
    </div>

</script>

Évidemment, ce code, mĂȘme assez concis mĂ©rite quelques explications. Explorons le ligne par ligne :

  • Lignes 11 Ă  19 : Un premier point Ă  rĂ©soudre, purement Liferay, consiste Ă  rĂ©cupĂ©rer l’identifiant du repository par dĂ©faut du portail.On doit pouvoir faire mieux, mais cette partie de la JSP n’existe que pour cela…
  • Lignes 21 : On pose le template d’affichage de la vue Ember. Ce template ne dispose pas d’attribut data_template_name (on peut aussi fixer cette attribut Ă  “application”).
  • Ligne 25 : Introduction d’un sĂ©lecteur Ember avec toute la magie de ce framework ! Ainsi on binde non seulement les valeurs affichĂ©es sur une variable Javascript (contentBinding), mais Ă©galement le rĂ©sultat d’une action de sĂ©lection (valueBinding). Tout cela sera plus clair en analysant le fichier Javascript
  • Ligne 35 : On intĂšgre la vue dĂ©finie par App.FileListView. On verra que cette vue s’appuie sur le template dĂ©fini en ligne 40
  • Ligne 45 : On utilise les capacitĂ©s de boucle du framework pour afficher autant de blocs HTML qu’il y a de fichiers prĂ©sents dans le rĂ©pertoire sĂ©lectionnĂ©. Libre Ă  vous d’afficher d’autres informations, liĂ©es Ă  l’objet App.FileEntry

Comme dĂ©jĂ  prĂ©cisĂ© plus haut, le seul fichier JSP est largement insuffisant pour comprendre la mĂ©canique Ember, l’essentiel de l’application Ă©tant dans le fichier javascript. Pour cela, on va modifier le fichier main.js pour qu’il contienne le code suivant :

/**************************
* Application
**************************/
var App;

App = Ember.Application.create({
  rootElement: $('section#portlet_emberportlet_WAR_emberportlet'),
  LOG_TRANSITIONS: true
});

/**************************
* Models
**************************/
App.FileEntry = Em.Object.extend({
  companyId: null,
  createDate: null,
  custom1ImageId: null,
  custom2ImageId: null,
  description: null,
  extension: null,
  extraSettings: null,
  fileEntryId: null,
  fileEntryTypeId: null,
  folderId: null,
  groupId: null,
  largeImageId: null,
  mimeType: null,
  modifiedDate: null,
  name: null,
  readCount: null,
  repositoryId: null,
  size: null,
  smallImageId: null,
  title: null,
  userId: null,
  userName: null,
  uuid: null,
  version: null,
  versionUserId: null,
  versionUserName: null
});

/**************************
* Views
**************************/
App.FileListView = Ember.View.extend({
  templateName: 'filelist',
  classNames: ['filelist']
});

App.FileDirectoriesSelector = Ember.Object.extend({
  selectedFolderName: "",
  selectedFolderId: -1,
  selectedFolderIdChanged: function(){
  App.fileEntriesController.loadFileEntriesBySelect();}.observes('selectedFolderId')
});

App.fileDirectoriesSelector = App.FileDirectoriesSelector.create({
  content: getFolders()
});

function getFolders() {
  var url = 'http://localhost:8080/api/secure/jsonws/dlapp/get-folders/repository-id/%@/parent-folder-id/0?p_auth=%@'.fmt(repoId,Liferay.authToken);
  // Push Default folder by default
  folders = Ember.ArrayProxy.create({content:[Ember.Object.create({folderName: "Root Folder", id: 0})]});
  $.getJSON(url,function(data){
    $(data).each(function(index,value){
      folders.addObject(Ember.Object.create({folderName: value.name, id: value.folderId}));
    })
  });
  return folders;
  }

/**************************
* Controllers
**************************/
App.fileEntriesController = Em.ArrayController.create({
  content: [],
  loadFileEntriesBySelect: function() {
    var me = this;
    if (App.fileDirectoriesSelector.selectedFolderId != null) {
      var url = 'http://localhost:8080/api/secure/jsonws/dlapp/get-file-entries?repositoryId=%@'.fmt(repoId);
      url += '&folderId=%@&p_auth=%@'.fmt(App.fileDirectoriesSelector.selectedFolderId, Liferay.authToken);
      $.getJSON(url,function(data){
        me.set('content', []);
        $(data).each(function(index,value){
          var t = App.FileEntry.create({
            description: value.description,
            extension: value.extension,
            largeImageId: value.largeImageId,
            mimeType: value.mimeType,
            modifiedDate: value.modifiedDate,
            name: value.name,
            readCount: value.readCount,
            size: value.size,
            smallImageId: value.smallImageId,
            title: value.title,
            userId: value.userId,
            userName: value.userName
          });
          me.pushObject(t);
        })
      });
    }
  }
});

Voici quelques explications concernant le contenu du fichier javascript :

  • Lignes 6 : On dĂ©clare l’application Ember. Le premier paramĂštre permet de restreindre la portĂ©e du framework Ă  la section dĂ©finissant la portlet, le second est optionnel et permet de logguer les transitions dans la console Javascript (peu utile dans notre cas oĂč l’unique transition amĂšne sur la page par dĂ©faut).
  • Ligne 14 : On dĂ©finit un objet Ember.js qui est le symĂ©trique de l’objet manipulĂ© par Liferay pour dĂ©crire les FileEntry. J’y ai mis tous les attributs, mĂȘme si la plupart d’entre eux ne sont pas utilisĂ©s ici.
  • Ligne 46 : La vue intĂ©grĂ©e dans le template par dĂ©faut est dĂ©finie et pointe vers le template du mĂȘme nom. Ember permet de faire plus court en utilisant des conventions de nommage. Mais pour ĂȘtre plus clair, j’ai prĂ©fĂ©rĂ© faire de la sorte.
  • Ligne 51 Ă  58 : On dĂ©clare ici un objet qui va jouer un rĂŽle prĂ©pondĂ©rant dans le fonctionnement de l’application. Il s’agit en effet de la vue javascript du sĂ©lecteur de rĂ©pertoire affichĂ© dans le template. Cette dĂ©claration se fait en deux temps : par extend() puis par create, car on utilise un ‘observateur’ sur la variable selectedFolderId qui ne peut porter que sur un objet Ă©tendu (Attention, cette information est trĂšs mal documentĂ©e et n’est valable que sur les distributions rĂ©centes d’Ember.js). A noter Ă©galement que la variable content s’appuie sur le retour d’une fonction
  • Ligne 62 : Cette fonction s’appuie sur les services REST de Liferay et sur JQuery pour construire la liste des rĂ©pertoires prĂ©sents dans la bibliothĂšque Liferay de premier niveau.
  • Ligne 71 : On crĂ©e un contrĂŽleur Ember.js qui va contenir le rĂ©sultat de l’appel aux services REST Liferay listant les fichiers prĂ©sents dans le rĂ©pertoire passĂ© en argument. Ce contrĂŽleur pourra ensuite ĂȘtre exploitĂ© dans le template d’affichage filelist

En synthÚse, selectedFolderId est directement lié à la valeur du sélecteur HTML et toute modification de sa valeur provoquera un appel à la fonction liée à la propriété selecteFolderIdChanged. Elégant, non ?

Pour teminer et uniquement pour des aspects purement esthétiques, on va utiliser le fichier main.css suivant, qui va décorer les boites correspondant à chacun des fichiers trouvés :

  #p_p_id_emberportlet_WAR_emberportlet_ {
    font-family: 'tahoma', sans-serif;
    background: #eeeeee;
  }

  #file-entries-frm {
    margin: 0 auto 15px auto;
    text-align: center;
  }

  #file-entries-content {
    border: 1px solid blue;
    margin: 0 auto;
  }

  #file-entries ul {
    padding: 0;
    border: 1px solid #999999;
  }

  #file-entries ul li {
    text-align: left;
    margin: 0;
    padding: 10px;
    list-style: none;
    border-bottom: 1px solid #999999;
    min-height: 50px;
    background: #eeeeee; /* Old browsers */
    background: -moz-linear-gradient(top, #eeeeee 0%, #dddddd 100%); /* FF3.6+ */
    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#eeeeee), color-stop(100%,#dddddd)); /* Chrome,Safari4+ */
    background: -webkit-linear-gradient(top, #eeeeee 0%,#dddddd 100%); /* Chrome10+,Safari5.1+ */
    background: -o-linear-gradient(top, #eeeeee 0%,#dddddd 100%); /* Opera 11.10+ */
    background: -ms-linear-gradient(top, #eeeeee 0%,#dddddd 100%); /* IE10+ */
    background: linear-gradient(top, #eeeeee 0%,#dddddd 100%); /* W3C */
    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#eeeeee', endColorstr='#dddddd',GradientType=0 ); /* IE6-9 */
  }

  #file-entries ul li:hover {
    background: #cfe7fa; /* Old browsers */
    background: -moz-linear-gradient(top, #cfe7fa 0%, #6393c1 100%); /* FF3.6+ */
    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#cfe7fa), color-stop(100%,#6393c1)); /* Chrome,Safari4+ */
    background: -webkit-linear-gradient(top, #cfe7fa 0%,#6393c1 100%); /* Chrome10+,Safari5.1+ */
    background: -o-linear-gradient(top, #cfe7fa 0%,#6393c1 100%); /* Opera 11.10+ */
    background: -ms-linear-gradient(top, #cfe7fa 0%,#6393c1 100%); /* IE10+ */
    background: linear-gradient(top, #cfe7fa 0%,#6393c1 100%); /* W3C */
    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#cfe7fa', endColorstr='#6393c1',GradientType=0 ); /* IE6-9 */
  }

  #file-entries ul li span {
    float: right;
    font-size: 8pt;
    color: #888888;
  }

  #file-entries ul li img {
    float: left;
    margin: 0 10px 0 0;
    width: 48px;
    height: 48px;
  }

  #file-entries ul li h3 {
    font-size: 11pt;
    margin: 0;
  }

  #file-entries ul li p {
    margin: 0;
    font-size: 10pt;
  }
Lancement de la compilation et du déploiement

Reste maintenant à compiler et déployer le tout, par une commande du type :

  mvn -Pemberlf package liferay:deploy

ATTENTION, la portlet est relativement simpliste et ne fonctionne que pour un utilisateur logguĂ©. Donc, placez la sur une page secondaire et identifiez-vous avant d’y accĂ©der.
Pour que la dĂ©monstration soit pertinente, il faut Ă©galement que la bibliothĂšque contiennent des rĂ©pertoires et des documents, histoire d’avoir des choses Ă  afficher !

Vous devez dorénavant obtenir une portlet du type :
ember-logo

Pour information, voici la vue Back-office standard de Liferay sur ma bibliothĂšque de document, pour le mĂȘme rĂ©pertoire :
ember-logo

En moins de 200 lignes de code et avec une lisibilitĂ© trĂšs correct, on arrive donc Ă  mettre en place un fonctionnement AJAX Ă©voluĂ© sans gros effort. C’est beau le Javascript, non ?

Catégories: Blog Société

DevopsDays 2013

dim, 05/05/2013 - 09:47

Le printemps des conférences informatiques parisiennes se poursuit, aprÚs Devoxx puis le Scrum Day place aux DevopsDays qui ont eu lieu le 18 et le 19 avril dernier.

Le format de ces journées est assez atypique car elles sont découpées en deux parties distinctes :

  • Des confĂ©rences le matin concernant la culture devops

  • Des “open spaces” l’aprĂšs-midi afin de favoriser les Ă©changes entre les participants.

Différents types de profils étaient présents : les 100% ops qui cherchent à en savoir plus sur le monde du dev, les devops (50% dev, 50% ops) qui viennent parfaire leurs connaissances et trouver de nouvelles idées, les 100% devs qui cherchent quant à eux, à en savoir plus sur le monde des ops (je me range dans cette catégorie). Vous verrez, en lisant la suite, que le contenu de ces deux jours comblera les attentes des différents profils.

 

Les conférences

 

1Úre présentation : CustomerOps ou le devops appliqué au service client.

Cette premiĂšre prĂ©sentation nous explique comment la culture devops permet d’amĂ©liorer le service client et la qualitĂ© de support chez Datadog. Leur dĂ©finition du devops tient en 4 Ă©lĂ©ments :

  • Culture – Tous les dĂ©veloppeurs se succĂšdent sur les tĂąches de support client afin de parfaire leur connaissance du produit.

  • Automatisation – Automatiser un maximum de processus pour gagner et rĂ©activitĂ© et mĂȘme pouvoir ĂȘtre pro-actif. Automatiser Ă©galement les sources de retour d’utilisation de l’application (email, rĂ©seaux sociaux etc …)

  • Mesure – Utilisation de diffĂ©rentes mĂ©triques afin de mesurer tout ce qui se passe sur le produit.

  • Partage – Exposer ces mĂ©triques


2Úme présentation : Améliorer ses développements grùce aux devops

https://speakerdeck.com/skade/how-devops-improved-my-dev

Ici le speaker nous explique avec un cas concret comment la culture devops lui a permis d’amĂ©liorer la qualitĂ© et l’organisation de ses dĂ©veloppements.

Grùce à la communication avec les ops il a pu rendre son application plus maintenable et plus facilement déployable en production.

Il a ensuite insistĂ© sur le besoin d’avoir des mĂ©triques et du log dans chacune des applications que l’on dĂ©veloppe afin d’avoir un maximum de retour sur son utilisation.

Le dernier point important Ă  ses yeux est la polyvalence des dĂ©veloppeurs; ils doivent pouvoir passer facilement d’un rĂŽle de dev front Ă  personne en charge du dĂ©ploiement de l’application.

 

3Úme présentation : Projet ou produit ?

https://speakerdeck.com/elpicador/how-products-can-improve-projects

Cette prĂ©sentation nous montre tout d’abord les diffĂ©rences entre un produit (totalement orientĂ© client) et un projet plus gĂ©rĂ© en fonction de son coĂ»t et des dĂ©lais impartis.

Ensuite le speaker nous prĂ©sente quels sont Ă  ses yeux les clĂ©s du succĂšs d’un produit :

  • Construire rapidement un MVP : Minimum Viable Product

  • Mesurer en ayant des feedbacks rĂ©guliers sur son produit

  • Apprendre de ses erreurs afin de construire un produit meilleur

Ces Ă©lĂ©ments ne sont pas valables seulement pour un produit mais aussi pour un projet : “Think product, do project”

 

4Úme présentation : Transformer des devs en devops

Fabrice Bernhard nous présente les éléments mis en place chez Theodo pour former ses développeurs junior à la culture devops.

La clĂ© est d’intĂ©resser ces nouveaux dĂ©veloppeurs aux problĂ©matiques des ops en les confrontant Ă  la production et en organisant du “pair devopsing” lors des phases de dĂ©veloppement et de dĂ©ploiement de l’application. Il faut ensuite les sensibiliser Ă  l’utilisation des bons outils (mise en place de bacs Ă  sable pour effectuer des tests) et aux problĂ©matiques de performances.

Cependant cela ne fait pas tout et un bon dev ne devient pas devops grĂące Ă  des outils. L’expĂ©rience et la responsabilitĂ© de la plateforme sont des bons leviers pour devenir devops.

 

5Úme présentation : How we release software for gov.uk

Retour d’expĂ©rience sur  la “success story” anglaise du moment : la refonte du site du gouvernement.

Tout part d’un rapport intitulĂ© “Revolution not evolution” qui prĂ©conise de crĂ©er un centre d’excellence pour rationaliser les services existants puis mettre en place les nouveaux services numĂ©riques du gouvernement. S’en suit une une accĂ©lĂ©ration des cycles de livraison (4h pour envoyer un dĂ©veloppement en production, 20 dĂ©ploiements par jour),  une simplification des interfaces, une plus grande transparence (publication sur GitHub, ouverture des API), une refonte graphique (titre de “Design of the year 2013”). Leur mot d’ordre pour dĂ©velopper ce site est “digital services so good that people prefer to use them”.

Le site est effectivement, clair, pratique et utilisable depuis d’autres applications car toutes les donnĂ©es sont accessibles via une API ou en JSON. Exemple de question simple d’utilisation : Quand s’effectue le prochain changement d’heure ? https://www.gov.uk/when-do-the-clocks-change ou https://www.gov.uk/when-do-the-clocks-change.json

Toujours dans un esprit de transparence et de partage leur façon de travailler est expliquĂ©e sur ce mĂȘme site : https://www.gov.uk/service-manual

 

6Úme présentation : Map & Territory: A story of visibility

Cette prĂ©sentation part du principe qu’une fois un produit ou projet en production on passe la majeure partie de son temps Ă  effectuer des corrections. Si l’on veut rĂ©duire ces temps de corrections on a besoin d’extraire des informations qui ont un sens depuis des sources de donnĂ©es hĂ©tĂ©rogĂšnes (logs, base de donnĂ©es, …). Ces informations nous permettront de mieux comprendre l’utilisation faite du produit.

Avant de les extraire il faut définir des métriques clés qui indiqueront quels sont les éléments à surveiller aussi bien techniques que métiers.

Le speaker explique ensuite l’approche “event stream” : “Plenty of small producers, few big consumers”. Tout ce qui bouge doit ĂȘtre loggĂ© pour ĂȘtre ensuite agrĂ©gĂ© puis corrĂ©lĂ© avec les autres mĂ©triques. Suite Ă  cela, une dĂ©cision peut ĂȘtre prise sur le plan d’action Ă  mener pour corriger ou enrichir une fonctionnalitĂ©.

L’ensemble de ces mĂ©triques forme donc une carte de l’application qui nous permet de surveiller le territoire (application).

 

7Ăšme prĂ©sentation : Les 10 piĂšges Ă  Ă©viter lors d’une transition devops

Dans cette prĂ©sentation les speakers nous indiquent les piĂšges dans lesquels il ne faut pas tomber lors de la mise en place d’une approche devops dans un projet.

Ces quelques conseils rĂ©sument bien l’ensemble de ces deux jours :

  • Devops ce n’est pas que de l’outillage mais un ensemble outil + processus + culture

  • Il ne faut pas penser qu’au dĂ©ploiement de l’application mais plutĂŽt Ă  la vie de l’application dans son ensemble.

  • Il ne suffit pas de dĂ©signer des Ă©quipes devops, la transition doit ĂȘtre faite par les Ă©quipes elles mĂȘme. L’utilisation d’un coach Devops peut ĂȘtre nĂ©cessaire pour les aider.

  • Les aspects culturels ne sont pas Ă  nĂ©gliger et certains Ă©lĂ©ments de la transition agile peuvent ĂȘtre utilisĂ©s :

  • AmĂ©lioration continue

  • Collaboration entre les Ă©quipes

  • Transparence

  • Il faut mesurer un maximum de choses afin d’évaluer les progrĂšs effectuĂ©s

  • Ne pas oublier l’amĂ©lioration continue


Suite aux conférences quelques Ignite Talks (présentations de 5 min chronométrées) ont eu lieu. Dur de creuser un sujet en ce court laps de temps mais quelques slides sympas :


Les openspaces

 

Les openspaces sont des espaces de discussion libres oĂč les rĂšgles suivantes s’appliquent :

  • Les personnes qui se prĂ©sentent, sont les bonnes.

  • Ce qui arrive, est la seule chose qui pouvait arriver.

  • Ça commence quand ça commence.

  • Quand c’est fini, c’est fini.

Les thĂšmes des diffĂ©rents openspaces sont proposĂ©s au prĂ©alable par les personnes prĂ©sentes aux DevopsDays, puis chacun s’inscrit aux discussions de son choix. Les participants aux openspaces ne sont pas obligĂ©s de rester tout le long de la discussion et sont mĂȘme invitĂ©s Ă  aller de salle en salle pour assister Ă  diffĂ©rentes discussions.

Ce format est assez intĂ©ressant car il permet de recueillir et d’échanger rapidement et facilement des idĂ©es assez variĂ©es sur un mĂȘme sujet. Cependant les discussions Ă©taient parfois dĂ©cousues ou s’éloignaient assez rapidement du sujet de base. Dur pour un pur dev de rentrer dans certaines discussions mais nĂ©anmoins quelques discussions intĂ©ressantes oĂč l’on sentait que les ops veulent mieux comprendre le monde des devs afin d’amĂ©liorer la qualitĂ© de leur travail et inversement.

 

Conclusion

Ces deux jours ont Ă©tĂ© trĂšs intĂ©ressants et plutĂŽt surprenants. Je m’étais prĂ©parĂ© (man page sur les genoux) Ă  assister Ă  des confĂ©rences trĂšs techniques qui parleraient de virtualisation, de configuration rĂ©seaux, de scripts de dĂ©ploiement, etc … Pas du tout, les confĂ©rences Ă©taient parfaitement accessibles et trĂšs orientĂ©es cycle de vie du projet.

L’élĂ©ment le plus souvent citĂ© est le fait de mesurer un maximum de choses sur une application. De ces mesures dĂ©couleront un meilleur retour sur l’utilisation et une meilleure rĂ©activitĂ© des Ă©quipes en charge de la maintenance du produit.

D’autres Ă©lĂ©ments prĂ©sentĂ©s rejoignent aussi des arguments dĂ©jĂ  entendus dans des confĂ©rences agiles : amĂ©liorer la communication entre les Ă©quipes, rĂ©duire les silos, apprendre en continue de ses erreurs, chercher Ă  s’amĂ©liorer, partager ses connaissances, 


Suite Ă  ce printemps de l’informatique, on se rapproche donc tout doucement de la recette magique pour dĂ©velopper rapidement une application de qualitĂ© : des Ă©quipes impliquĂ©es, une grande dose de communication, une cuillĂšre d’agilitĂ© le tout agrĂ©mentĂ© de mĂ©triques permettant d’avoir un retour constant.

 

En bonus quelques bons mots des devopsdays :

“I don’t want to be woken up at night, so I call myself a developper”, Florian Gilcher

“Speed is important but momentum is everything”, Kushal Pisavadia

“It’s not the big that eat the small, it’s the fast that eat the slow”, Fabrice Bernhard

“Think product, do project”, RĂ©my-Christophe Schermesser

Catégories: Blog Société

Ippevent AngularJS le 16 mai prochain Ă  19h

lun, 04/29/2013 - 14:21

Au pays des frameworks JavaScript MVC, AngularJS est une valeur montante. En rutpture avec les autres frameworks MVC, Anugular est fondé sur une approche déclarative et la mise en oeuvre de composants pour concevoir les IHM web. Il adapte et étend le HTML traditionnel pour servir le contenu dynamique via un mécanisme de data-binding permettant la synchronisation automatique des modÚles et des vues. Bref, AngularJS réduit considérablement le besoin de manipuler le DOM HTML et produit du code plus concis et facile à tester.

Lors de cet Ippevent, nous n’aurons pas 1 mais 3 speakers :

  • SĂ©bastien LetĂ©liĂ© (dĂ©velopeur Web depuis 15 ans et CTO chez Intuitive) nous fera fera une dĂ©mo de live coding sur AngularJS
  • Thierry Lau (DĂ©veloppeur front end chez Sfeir) fera une prĂ©sentation sur les modules $http et $resource du Framework.
  • Et enfin Patrick Aljord (indĂ©pendant et ancien d’IsoHunt) fera une intervention sur AngularJS et Firebase
Une soirée chargée et riche en perspective. Pour vous inscrire comme à chaque fois, utilisez le bandeau ci-dessous.

Gestion d’un Ă©vĂ©nement pour Ippevent AngularJS rĂ©alisĂ© par Eventbrite
Catégories: Blog Société

Un job en or

mer, 04/24/2013 - 17:00

Une fois n’est pas coutume, il ne s’agit ni d’un post technique ni d’une annonce concernant les Ippevents, mais ayant publiĂ© une quarantaine d’articles sur ce blog depuis 2009 je me suis permis de l’utiliser pour vous dire au revoir.
Le 27 mai prochain je quitterai le monde de l’ESN (avant on disait SSII mais ça, c’Ă©tait avant) pour commencer une nouvelle aventure en tant que “Senior Software Engineer” chez Red Hat. Conscient de ce que je dois Ă  Ippon, je souhaitais revenir sur mon parcours et donner une idĂ©e de comment une carriĂšre peut se dĂ©rouler au sein de la sociĂ©tĂ©.

Quarante cinq mois intenses

Je suis arrivĂ© chez Ippon en Septembre 2009 avec le rĂŽle de “Manager Technique en charge de la capitalisation des savoirs faire”. En plus d’un poste de consultant classique je disposais d’un mi-temps pour recenser l’expertise au sein de la sociĂ©tĂ© et communiquer sur cette expertise pour la faire connaĂźtre Ă  l’extĂ©rieur et contribuer au rayonnement de l’entreprise. Deux rĂŽles pour le mĂȘme poste, en somme.
Dans mon premier rĂŽle de consultant au sein du pĂŽle conseil, j’ai Ă©tĂ© servi : prĂšs de 20 missions en 3 ans et demi comportant des prestations critiques (audit technique ou d’architecture) ou dĂ©cisives (conseil au choix d’outils ou de frameworks). Il s’est donc agit en majoritĂ© de conseil Ă  haute valeur ajoutĂ©e des missions courtes aux enjeux importants : ouverture de compte, dĂ©cisions engageantes.
Dans mon deuxiĂšme rĂŽle, Ippon m’a laissĂ© carte blanche, me permettant d’expĂ©rimenter un certain nombre de choses. Pour mener Ă  bien cette tĂąche de capitalisation j’ai repris en main le blog (en incitant et aidant mes collĂšgues Ă  contribuer), créé et animĂ© les comptes Twitter et Facebook de la sociĂ©tĂ© et testĂ© des approches diffĂ©rentes pour le recrutement des nouveaux collaborateurs.
L’annĂ©e 2011 a Ă©tĂ© celle de la crĂ©ation des Ippevents qui rencontrent toujours un beau succĂšs (et qui permettent Ă  des consultants Ippon de faire leur premiĂšres armes de confĂ©rencier) et en 2012 mes premier pas de speaker dans les Jugs puis Ă  Devoxx.

Les projets Open Source et le JCP

C’est grĂące Ă  Ippon, que je me suis rendu Ă  Devoxx en novembre 2010 et que j’ai rencontrĂ© mes premiers contacts chez Red Hat. Soucieux de rester crĂ©dible dans mes missions de conseil, je cherchais un moyen de garder le contact avec le dĂ©veloppement (tĂąche difficile quand on effectue des missions courtes sur des aspects conseils) et la contribution open source m’est apparue comme la meilleure solution pour ne pas me rouiller sur le dĂ©veloppement. C’est ainsi qu’avec le soutien d’Ippon je commençais Ă  travailler sur le projet Seam Social devenu Agorava depuis, et participer au JCP sur CDI 1.1 et une tentative de JSR avortĂ©e avec Java Social (JSR 357)

Alors pourquoi partir ?

Tout cela aurait pu durer encore longtemps si je n’avais pas eu cette opportunitĂ© qui fait partie des quelques rares susceptibles de me faire quitter Ippon. En fait, c’est plus le monde du service (dans lequel j’évolue depuis 17 ans) que je quitte, qu’Ippon Technologies pour aller donner dans le dĂ©veloppement open source professionnel.
Et une chose est sĂ»re, sans Ippon je n’aurai certainement pas pu accĂ©der Ă  cette nouvelle carriĂšre. Les nombreuses missions internes et externes m’ont permis d’apprendre plein de choses et de nouer les contacts qui me permettent aujourd’hui de tourner cette page. J’ai clairement bĂ©nĂ©ficiĂ© de l’excellence d’Ippon pour dĂ©crocher ce job.

Place Ă  prendre

Je m’en vais donc vers de nouvelles aventures en laissant un poste vacant au sein d’Ippon Technologies. Ce poste de manager en charge de la capitalisation des savoir faire possĂšde suffisamment de facettes pour que chacun s’y retrouve. Il comporte quelques figures imposĂ©es pas forcĂ©ment dĂ©sagrĂ©ables (blog, organisation des Ippevents) et pas mal de figures libres (contribution Ă  des projets Open Sources, relation avec la communautĂ©, organisation d’ateliers internes, etc…) et un mi-temps pour le faire. Si tout ça vous tente (et j’espĂšre vous avoir donnĂ© envie) contactez Julien Dubois (jdubois {at} ippon.fr) notre directeur du pĂŽle conseil.
Pour ma part, je dis “au revoir Ippon et merci !”

Catégories: Blog Société

Partagez la connaissance

Partagez BlogsdeDeveloppeurs.com sur les réseaux sociaux