Skip to content

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

Forum Logiciel

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

Agrégateur de flux

Les services sous Cloud Foundry : Partie 1 – kesako?

Blog d’Ippon Technologies - mer, 09/24/2014 - 14:00

Pourquoi implémenter un service ?

Avant de s’attarder sur la création d’un service broker, il convient de comprendre pourquoi il s’agit d’un élément clé et différenciant d’une plateforme Cloud Foundry. Si Cloud Foundry se concentre sur le déploiement et la scalabilité des applications qu’il héberge, il ne faut pour autant pas oublier que, par design, il ne couvre que la composante applicative et en ce sens n’offre aucun mécanisme de persistance de données. Cela signifie :

  • que l’utilisation du système de fichiers local n’a pas de sens
  • que dĂ©ployer un serveur de base de donnĂ©es au dessus de Cloud Foundry en a encore moins
  • qu’il n’est pas possible d’avoir nativement un mĂ©canisme d’indexation fiable – qui requiert soit un système de fichiers, soit une base de donnĂ©es -
  • qu’il est impossible de mettre en place un système de rĂ©plication de sessions sans faire appel Ă  des mĂ©canismes externes
  • qu’il n’est pas possible de mettre en place un système de messagerie fiable

C’est ici que la notion de service intervient : Cloud Foundry permet aux applications hébergées d’accéder à des services. Ces services offrent à vos applications un moyen d’accès à divers types de ressources. Les exemples sont multiples :

  • des mĂ©canismes de persistance : Amazon S3, Hubic, mais aussi MySQL, PostgreSQL, Cassandra…
  • des moteurs d’indexation : ElasticSearch, SolR
  • des systèmes de messagerie : RabbitMQ, Postfix…

L’imagination est la seule limite.

MalgrĂ© ce qu’on pourrait croire, cette notion de service n’est pas liĂ©e directement au type de ressources cibles – MySQL, RabbitMQ, … – mais Ă  une offre basĂ©e sur un type de ressources. Ainsi, ClearDB reprĂ©sente autant une offre MySQL qu’un cluster MySQL privĂ©, Amazon S3 autant une offre de service de stockage que l’Object Storage de Runabove. Point important : 2 offres concurrentes peuvent cohabiter au sein d’une plateforme Cloud Foundry.

Le schéma suivant illustre ce mécanisme d’offre : une instance privée de Cloud Foundry peut mettre à disposition un service MySQL via 3 offres distinctes :

  • ClearDB accessible via Internet
  • GenieDB accessible via Internet
  • un cluster MySQL privĂ©
Exemple d'offre concurrente MySQL sous Cloud Foundry

Exemple d’offre concurrente MySQL sous Cloud Foundry

Cette notion d’offre est Ă  la fois capitale et diffĂ©renciante pour une plateforme PaaS comme Cloud Foundry. De la mise Ă  disposition de ces offres dĂ©pend directement l’attractivitĂ© de la plateforme. Et l’opĂ©rateur de la plateforme est libre d’implĂ©menter ces offres soit en interne via la construction d’infrastructure dĂ©diĂ©e, soit via des partenariats externes comme le fait par exemple Pivotal avec ses Pivotal Web Services. C’est aussi pour cela que le terme de place de marchĂ© – marketplace – revient souvent. Des prĂ©-requis sont cependant nĂ©cessaires pour pourvoir mettre en place et utiliser une offre au sein de Cloud Foundry :

  • La ressource cible doit ĂŞtre accessible Ă  partir de Cloud Foundry. En d’autres termes, une application dĂ©ployĂ©e au dessus de Cloud Foundry devra ĂŞtre capable de contacter les serveurs hĂ©bergeant la ressource distante.
  • Le porteur d’offre doit dĂ©velopper, mettre Ă  disposition et enregistrer un service broker dĂ©diĂ© au sein de Cloud Foundry : sans service broker pas d’interaction possible entre une offre et vos applications. Ici, on est dans le monde du sur-mesure.

Cela induit plusieurs choses :

  • Que Cloud Foundry n’est pas l’offre clĂ© en main qu’on pourrait croire et qu’un travail d’adaptation est nĂ©cessaire pour pouvoir l’utiliser pleinement : une instance Cloud Foundry sans service est certes possible mais ça n’a finalement pas beaucoup de sens.
  • Que l’étape de crĂ©ation et de mise en place d’un service broker est un passage quasi obligĂ©. C’est par ce moyen que vous pourrez par exemple mettre Ă  disposition un cluster MySQL privĂ©e, adressable localement depuis votre propre Cloud Foundry.
Le service broker

Dans le jargon Cloud Foundry, un service broker est un service web permettant aux applications hĂ©bergĂ©es d’interagir avec un service dans le cadre d’une offre. Il n’est pas en charge de l’accès Ă  ce service mais a pour responsabilitĂ© d’associer sur demande une application Ă  une offre. On parle bien ici de service web au sens le plus gĂ©nĂ©ral du terme. Cloud Foundry n’impose aucune contrainte particulière si ce n’est que ce service web doit ĂŞtre accessible depuis Cloud Foundry et implĂ©menter une API spĂ©cifique. Libre Ă  vous de l’implĂ©menter via la stack de votre choix – Java, Ruby, Python, PHP…

Le service broker n’est pas un élément critique dans la communication entre une application et un service. Mais sans service broker vous n’aurez plus la possibilité de provisionner des ressources sur demande. Ainsi, c’est le service broker qui réagira, à travers l’API Cloud Foundry, aux demandes utilisateurs. Le service broker est cependant directement impliqué dans les actions suivantes :

  • Enregistrement d’un nouveau service broker par l’administrateur Cloud Foundry : le service broker fournit le descriptif de l’offre le concernant. C’est ce descriptif qui sera retournĂ© Ă  l’utilisateur sur demande.
  • Demande de crĂ©ation d’une offre : l’utilisateur Cloud Foundry souhaite profiter d’un service. Le service broker sera interrogĂ© directement pour crĂ©er une offre associĂ©e au compte de l’utilisateur
  • Demande d’association – binding – : suite logique de l’action prĂ©cĂ©dente, il s’agit ici d’associer l’offre Ă  une application particulière. En retour, le service broker fournit les informations nĂ©cessaires pour que l’application puisse se connecter.
Topologie d'un service broker MySQL

Topologie d’un service broker MySQL. Le schĂ©ma se veut volontairement simpliste

Prenons un exemple concret : l’offre ClearDB proposĂ©e par les Pivotal Web Services. ClearDB est une offre basĂ©e sur le service MySQL. Cette offre est disponible depuis les Pivotal Web Services, certainement via un partenariat entre Pivotal et Success Bricks, l’entitĂ© derrière ClearDB. Dans le cadre de ce partenariat, un service broker a Ă©tĂ© dĂ©veloppĂ© afin de permettre aux applications hĂ©bergĂ©es par les Pivotal Web Services de provisionner des instances MySQL sur l’offre ClearDB. On peut donc imaginer qu’il est en charge des Ă©lĂ©ments suivants :

  • la crĂ©ation du compte utilisateur chez ClearDB
  • la crĂ©ation de l’instance ou de la base de donnĂ©es MySQL
  • l’attribution des droits
  • la mise Ă  disposition des informations de connexions Ă  travers l’API Cloud Foundry.

Le rôle du service broker s’arrête là : la communication entre votre application et l’offre ClearDB s’effectue via les moyens classiques d’accès à MySQL. Composant sur mesure par excellence, le service broker fait donc figure de passage obligé pour tous opérateurs d’une plateforme Cloud Foundry.

La suite d’ici quelques jours avec une mise en pratique et l’implĂ©mentation d’un service broker Cassandra.

Catégories: Blog Société

Conférences d’Automne 2014

Le blog de Patrick Guimonet - mer, 09/24/2014 - 13:53
Après une session de conférences très chargée au printemps 2014, l’automne 2014 s’annonce également très riche en conférences. Je serais donc présent aux conférences suivantes : SharePoint Saturday Jersey le ...
Catégories: Blog Individuel

La banque face aux enjeux du Digital : « Les Géants du Web » en Edition Spéciale pour BPCE

Autrefois un secteur protĂ©gĂ©, car très rĂ©glementĂ©, l’activitĂ© bancaire est aujourd’hui attaquĂ©e de tous cĂ´tĂ©s par les nouveaux acteurs du digital, les FinTechs [1] et les GĂ©ants du Web. Ceux-ci occupent les avant-postes de cette bataille, Ă  la faveur de la dĂ©rĂ©glementation, des innovations technologiques et de l’Ă©volution des usages.

Le groupe BPCE  fait partie des acteurs bancaires hexagonaux qui ont pleinement pris conscience des dĂ©fis Ă  relever pour les entreprises traditionnelles, aux pratiques managĂ©riales et organisationnelles gĂ©nĂ©ralement orthogonales Ă  celles de ces acteurs modernes du web, comme nous le livrent Richard Valenti, Directeur Informatique et Technologie Groupe, et Gilles Darragi, Responsable Innovation et Prospective DITG, dans leur prĂ©face Ă  l’Ă©dition spĂ©ciale rĂ©alisĂ©e par nos soin pour leur groupe :

« Depuis quelques années, toutes les entreprises bancaires et leur IT ont la conscience de cette nouvelle aventure de société web et digitale qui les attend. Toutes ont cette certitude que les choses ne seront plus à l’identique de l’ère industrielle passée avec son organisation pyramidale, sa logique taylorienne et sa gouvernance managériale.»

Groupe BPCE

En effet, comme nous le rappellent MM. Valenti et Darragi, « le management est apparu au 19ème siècle avec Taylor et H.Fayol (en France) pour faire face Ă  la complexitĂ© de l’entreprise taylorienne, c’est son enjeu principal, toutes les thĂ©ories convergent vers cet achèvement. ».  Mais ce système, qui a accompagnĂ© l’industrialisation des Ă©conomies modernes, n’est plus adaptĂ© au enjeux du XXIe siècle et de la digitalisation qui l’accompagne : ATAWAD, Big Data, Ă©cosystèmes ouverts…

C’est parce que « le contenu de l’ouvrage d’OCTO « Les gĂ©ants du Web » nous Ă©claire sur les choix des pratiques et technologies de ceux qui sont devenus en moins d’une dĂ©cennie des gĂ©ants, pour certains peut-ĂŞtre futurs concurrents, pour d’autres futurs partenaires », que BPCE a souhaitĂ© une Ă©dition spĂ©ciale de l’ouvrage, afin de contribuer Ă  diffuser au sein de ses Ă©quipes la connaissance des pratiques des gĂ©ants du digital.

Ce type d’initiative constitue toujours une grande source de fiertĂ© pour nous, et nous constatons avec un plaisir renouvelĂ© notre contribution Ă  une meilleure comprĂ©hension des enjeux de l’informatique–et du monde–moderne, au travers de notre ouvrage!

"Les Géants du Web" Edition Spéciale BPCE

Pour en savoir plus :

[1] startup opérant dans les services financiers

Articles suggested :

  1. Panorama innovations en banque de détail – Tendances 2014

Catégories: Blog Société

The Open Group – Mexico City 2014

Architecture Forum France (Open Group) - mer, 09/24/2014 - 08:13
Mexico City, 5-7 novembre,
Catégories: Association

Chaque semaine, découvrez un chapitre du livre de Sandro Mancuso sur le Craftsmanship !

livre-Sandro-Mancuso

Il est un terme qui revient de plus en plus souvent dans les tweets, les articles de blog ou les conversations entre dĂ©veloppeurs : le software craftsmanship. C’est un terme fĂ©dĂ©rateur qui regroupe Ă©normĂ©ment de choses. Mais parle-t-on toujours de la mĂŞme chose ? Est-ce qu’un dĂ©veloppeur aura la mĂŞme vision du software craftsmanship qu’un manager, qu’un Product Owner ou qu’un CTO ?

C’est pour tenter de rĂ©pondre Ă  cette question que nous avons rĂ©alisĂ© une expĂ©rience chez Xebia : la lecture participative. Nous avons chacun choisi de rĂ©sumer un ou plusieurs chapitres de l’excellent livre Software Craftsmanship – Professionalism Pragmatism Pride de Sandro Mancuso, nous permettant une lecture synthĂ©tique et une diffusion plus rapide du contenu.

Au dĂ©part seulement destinĂ© Ă  un usage interne, nous vous proposons de retrouver chaque semaine le rĂ©sumĂ© d’un chapitre dans ce blog avec l’accord de Sandro Mancuso. Vous pourrez d’ailleurs le rencontrer chez Xebia lors d’un Ă©vènement exceptionnel mardi 30 septembre. Si ce sujet vous intĂ©resse, il existe Ă©galement une formation dispensĂ©e par Sandro.

Voici donc le premier chapitre : Software Development.

Choose your career path according to your passion, to what you love doing.

Dans ce premier chapitre, Sandro nous explique que le choix le plus important de sa carrière a Ă©tĂ© de redevenir dĂ©veloppeur. Il a suivi un parcours classique de dĂ©veloppeur passionnĂ© : il est devenu sĂ©nior très tĂ´t puis architecte jusqu’Ă  passer son temps Ă  ne rĂ©aliser que des documentations et recommandations Ă  l’intention d’Ă©quipes de dĂ©veloppement. Après une annĂ©e Ă  ce poste, sans Ă©crire une ligne de code, il a pris la dĂ©cision de redevenir dĂ©veloppeur, sa passion. 

Senior compared to whom? Senior in which technology? In which context?

La notion de sĂ©nioritĂ© n’a malheureusement que peu Ă©voluĂ©e ces vingt dernières annĂ©es : elle est dĂ©terminĂ©e en fonction du nombre d’annĂ©es d’expĂ©rience.

En rĂ©alitĂ©, elle est relative. Il semble Ă©vident pour tout le monde qu’une personne ayant 10 annĂ©es d’expĂ©rience sur le mĂŞme projet n’est pas sĂ©nior comme une personne ayant 10 annĂ©es d’expĂ©rience sur 10 projets diffĂ©rents. Les besoins et les technologies Ă©voluent.

Seniority is not just about writing code or being very familiar with a language or framework.

Les dĂ©veloppeurs modernes veulent plus de responsabilitĂ©s. Le temps oĂą ils dĂ©veloppaient des applications suivant des spĂ©cifications dĂ©crites dans un document respectant une nomenclature stricte est rĂ©volu. Aujourd’hui, ils doivent savoir :

  • automatiser les tests et les dĂ©ploiements ;
  • faire des choix techniques impactants pour le produit ;
  • continuer Ă  faire de la veille ;
  • continuer Ă  amĂ©liorer le produit ;
  • conserver un produit de qualitĂ© ;
  • gĂ©rer la qualitĂ© de service ;
  • travailler de manière distribuĂ©e ;
  • aider les stakeholders Ă  dĂ©finir et prioriser leurs besoins ;
  • comprendre les enjeux du produit ;
  • Ă©changer avec les utilisateurs ;
  • suivre la progression du produit (techniquement et fonctionnellement) ;
  • gĂ©rer des changements, qu’ils soient mineurs ou majeurs ;
  • prĂ©senter leur produit Ă  de potentiels clients ;
  • estimer les coĂ»ts de production et de vente ;
  • faire passer des entretiens d’embauche efficaces.

Et pour se faire, il faut adopter les principes agiles, thème du second chapitre qui arrivera dans les prochains jours, alors stay tuned !

Catégories: Blog Société

The Open Group – Sao Paulo 2014

Architecture Forum France (Open Group) - mer, 09/24/2014 - 07:58
Sao Paulo, Brazil 27-28 octobre,
Catégories: Association

Pourquoi certains n’utilisent pas le ; et pourquoi ils ont raison

Mathieu Robin - mar, 09/23/2014 - 13:06

J’adore râler, en fait mĂŞme, carrĂ©ment insulter les dĂ©veloppeurs qui ne mettent pas les points-virgules en fin d’instruction.

Mais il faut dire une chose. D’une certaine façon, ils ont raison.

Tout simplement parce que ça force à une certaine qualité de code.

Ça force Ă  bien dĂ©clarer ses variables, Ă  bien utiliser les accolades et pour faciliter la maintenance Ă  avoir un code qui ressemble Ă  quelque chose. Sinon ça dĂ©conne Ă  toute vitesse et alors vous n’avez plus le choix. Sauf que parmi les premières choses que fait un minifier, c’est de faire sauter les ; qu’il jugera inutile pour mettre d’autres structures de code. Utilisables mais illisibles au quotidien. Lisez du code minifiĂ©, vous allez rire pour le maintenir.

Du coup, quand je vois les mecs sur Github qui codent comme des gros dĂ©gueulasses qui pisseraient dans le rĂ©servoir de leur voiture pour Ă©conomiser de l’essence. Je me dis que c’est un moindre mal de ne pas mettre les ; comme les mecs de Bootstrap. Au moins ça les force Ă  avoir un code plutĂ´t organisĂ©.

Ceci dit, ça ne demande que peu d’efforts pour avoir un code qui ne ressemble pas Ă  un Picasso (dĂ©solĂ©). Ça ne demande pas grand chose et si vous vous faites aider par un IDE, c’est encore plus facile. Par exemple, avec Webstorm, vous pouvez configurer tellement de choses dans le formatage de code que ça mâche le boulot pour 50% environ. 80% si vous n’ĂŞtes pas exigeants. Après JSLint, JSHint ou ESLint donnent d’excellentes indications pour que tout soit propre une bonne fois pour toutes.

J’ai tendance Ă  croire qu’il en va de mĂŞme pour Eclipse ou Netbeans, voire Sublime. DĂ©solĂ© pour les Ă©diteurs de texte par contre, pour vous, ça sera Ă  tout Ă  la main. Après tout c’est votre choix.

Pour rappel et pour terminer, mĂŞme si vous considĂ©rez que ce n’est pas nĂ©cessaire, n’oubliez pas qu’en JavaScript, le ; est obligatoire. Il fait mĂŞme partie de la norme 7.9 d’EcmaScript. Quand vous ne les mettez pas, l’interprĂ©teur, que ce soit votre navigateur ou node ou autre, les rajoute en automatique. Autant les mettre et maĂ®triser ce qu’il se passe avec.

flattr this!

Catégories: Blog Individuel

J’ai testé pour vous : PigUnit

doc
Aujourd’hui, je vais parler d’Apache Pig, un outil de traitement type batch s’appuyant sur Hadoop, et de test unitaire. Le but de cet article est de présenter PigUnit comme potentielle solution pour nos tests et d’automatisation des développements. Sur la fin, je donne quelques tips et contournements aux bugs existants.

Pourquoi tester Pig ?

J’ai cherché un outil de test sur Pig afin de :

  • Gagner du temps dans mon dĂ©veloppement. En effet, Pig demande de la patience, beaucoup de patience pour au final se trouver bien souvent avec une NullPointerException, ce qui ne facilite pas le debug (mĂŞme en environnement local).
  • Ne pas faire de rĂ©gression. On peut en produire rapidement, Ă  partir du moment oĂą l’on commence Ă  travailler Ă  plusieurs sur les scripts, ou tout simplement avec les Ă©volutions qui arrivent. Le pire ? On s’en rend compte Ă  la fin de l’exĂ©cution, c’est-Ă -dire 2 heures après…
  • Etre rassurĂ© au moment du commit, puis de la mise en production. Parce qu’au dĂ©part c’était un POC, mais comme le script marchait bien le client voulait le mettre en PROD.
  • DĂ©velopper en TDD (Test Driven Development). On aime beaucoup le mouvement Software Craftsmanship chez OCTO, on voulait donc apporter les outils et mĂ©thodes de qualitĂ© du code afin de professionnaliser nos dĂ©veloppements Pig.
  • Automatiser les tests, mesurer la performance sur des datasets hĂ©bergĂ©s sur notre usine de dĂ©veloppement. Avec Hadoop, la notion de performance revient au-devant de la scène et il est intĂ©ressant d’avoir des mĂ©triques sur l’exĂ©cution, connaitre le hash du commit qui a tuĂ© les perfs du script.

 

La théorie

PigUnit est un framework de test comme on peut en trouver sur la plupart des plateformes de programmation. Malgré le fait que la peinture ne soit pas sèche, il est possible grâce à celui-ci de commencer à industrialiser nos développements Pig. J’insiste sur le mot « commencer » car il résoudra certaines problématiques, alors que d’autres resteront sans solution, pour l’instant du moins…

Le Framework se présente sous la forme xUnit (à la manière de JUnit pour la plateforme Java) et s’intègre donc bien avec les IDE des java-istes (Eclipse, IntelliJ, Netbeans). Les tests unitaires sont écrits en langage Java à l’aide du Framework JUnit (fonctionne aussi avec TestNG), c’est-à-dire une classe annotée dans laquelle on écrira notre code de test.

pigunit_test_source_code

Note : Par défaut PigUnit ignore les instructions store du script Pig. Le job Pig ne sera jamais lancé.

Mise en pratique

J’ai pris l’exemple d’un fichier contenant une liste de mots ; un par ligne sur lequel je procède à un simple ORDER BY en Pig, qui aura pour effet d’ordonner alphabétiquement ma liste de mots.

Pour suivre le déroulement, j’ai créé un petit projet sur GitHub qui possède trois scripts Pig et trois classes Java de test : https://github.com/BenJoyenConseil/pig-unit

Pig-octo-logo

 

Récupérer automatiquement les dépendances

Pour cette expérience, j’ai choisi maven comme outil de management des dépendances. Maven est un outil largement supporté par la communauté Java. Il bénéficie d’un repository central contenant un catalogue conséquent de bibliothèques dans lequel il existe désormais un artefact pour PigUnit (chance !!).

A la racine du projet, il faut un pom.xml contenant les bonnes dépendances. Ce fût laborieux pour la version 0.12.1 de Pig car la documentation n’est pas du tout complète, donc je voulais l’écrire quelque part afin de ne pas oublier :

DĂ©pendances Maven

groupId artifactId Scope version org.apache.pig pigunit Compile 0.12.1 org.apache.hadoop hadoop-core Test 0.20.2 jline jline Test 0.9.94 joda-time joda-time Test 2.3

 

Testé avec

jdk 1.7.0_60 maven 3.2.1 cygwin (sur Windows) 1.7.30

 

Attention : Sous Windows, il faudra une installation basique de cygwin à ajouter dans le PATH car le framework utilise des directives Unix pour écrire les fichiers temporaires d’Hadoop.

Structure projet

folder

Une structure de projet classique se compose d’un dossier src dans lequel on trouve deux sous-dossiers :

  • main qui contiendra les fichiers script.pig, voir potentiellement les UDF Ă©crites en java.
  • test qui contiendra un sous- dossier java contenant lui-mĂŞme les classes Java de test des scripts. En option, ce dossier pourra contenir Ă  la mĂŞme hauteur que java un dossier resources dans lequel on retrouvera des donnĂ©es de test.
monscript.pig

Une ligne pour charger les données via le loader de Pig, et une ligne pour les ordonnées par ordre alphabétique. La seule logique est donc dans la deuxième ligne. Ce script est volontairement simple pour nous concentrer sur l’aspect test :

data = LOAD 'input' AS (name:chararray);

data_ordered = ORDER data BY name;

Dans mon dossier de test, il existe une classe nommée ScriptPigOrderAlphabetTest.java annotée. Je crée une méthode de test que je nommerais data_ordered_shouldOrderElementsBy_Alphabet() qui définit le comportement voulue de ma deuxième ligne de script.

Mock

PigUnit permet de remplacer (mocker) un alias particulier dans un script, par des données fournies de deux manières différentes.

  • La première manière consiste Ă  fournir de la donnĂ©e sous forme de tableau de String dans le code Java du test (exemple ci-dessous).
String[] input = {
   "yahoo",
   "twitter",
   "facebook",
   "linkedin",
};

test.assertOutput("data", input, "data_ordered", expected);
    • La deuxième manière consiste Ă  donner un fichier de ressources externe dans lequel est dĂ©crit le dataset (un csv par exemple).

 

PigTest.getCluster().update(new Path(« test/data/pigunit/top_queries_input_data.txt »), new Path(« top_queries_input_data.txt »));

 

Ce système de mock offre une grande souplesse ; on privilégiera de mocker les alias de nos scripts et de tester unitairement chaque expression Pig, une par une, dans des méthodes associant l’input et l’assertion. Tandis qu’un test d’intégration récupérant des données beaucoup plus conséquentes dans un fichier externe, testera de son côté toute la chaîne de traitement.

Comment ça se présente dans MonScriptPigUTest.java
public class ScriptPigOrderAlphabetTest {
   private String scriptPath = "./src/main/monscript.pig";

   @Test
   public void data_ordered_shouldOrderElementsBy_Alphabet() throws IOException, ParseException {
       // Given
       PigTest test = new PigTest(scriptPath);
       String[] input = {
           "yahoo",
           "twitter",
           "facebook",
           "linkedin",
       };

       // Then
       test.assertOutput("data", input
   }
}

Vous pouvez constater que le mock est fournie à la méthode assertOutput() afin de lui expliciter ce que nous voulons mocker, c’est-à-dire l’alias data qui contient le résultat du chargement de la donnée par le Loader Pig. On remarque qu’un seul alias ne peut pas être mocker.

On aurait aimé…

L’écosystème Java possède dĂ©jĂ  un grand nombre de frameworks de mock bien aboutis (EasyMock, Mockito). Au final, PigUnit ne nous permet seulement de « mocker » la donnĂ©e d’entrĂ©e.

En regardant les sources je m’aperçois que PigUnit instancie un objet PigServer et copie la donnĂ©e que nous lui spĂ©cifions dans HDFS (si vous ĂŞtes en mode local, il utilisera le File System local. L’instance de PigServer se connecte Ă  une instance de Pig, transforme le script en byte code Java, l’exĂ©cute et rĂ©cupère l’ouput.

Il y a donc quelque chose qui me dĂ©range : le fait que PigUnit se connecte Ă  une instance de Pig et Ă©crive sur le File System. MalgrĂ© son nom, PigUnit n’est pas un framework de test unitaire car il semble beaucoup trop dĂ©pendant de l’environnement sur lequel il s’exĂ©cute et donc que les tests soient agnostiques.

Assertion

Les assertions sont gĂ©rĂ©es directement Ă  l’intĂ©rieur du framework. Via la mĂ©thode « assertOuput ». PigUnit exĂ©cute notre code et procède Ă  la comparaison du rĂ©sultat avec l’expected.

assertOuput() prend donc en paramètre un alias sur lequel faire l’assertion puis un tableau de String en « expected » ou un fichier (objet de type java.io.File) contenant l’ouput espĂ©rĂ©.

L’assertion qui sera utilisĂ©e par le framework est de type « equalTo » c’est-Ă -dire que la ligne d’indice 1 du rĂ©sultat devra ĂŞtre Ă©quivalente au sens String.equalTo() Ă  la ligne d’indice 1 de l’expected.

Comment ça se présente dans MonScriptPigUTest.java

Je choisis de mettre directement l’expected dans mon test :

String[] expected = {
    "(facebook)",
    "(linkedin)",
    "(twitter)",
    "(yahoo)",
};
// When
test.runScript(); 

// Then
test.assertOutput("data", input, "data_ordered", expected);
On aurait aimé

Les assertions sont assez limitĂ©es sur PigUnit. Comme la partie mock, j’aimerais pouvoir dĂ©velopper avec un framework conçu pour (ex : Hamcrest, AssertJ). La seule assertion possible est un « equalTo », ce qui nous oblige Ă  tordre le test (=modifier le tableau de string en expected) quand on est confrontĂ© Ă  un autre cas d’utilisation que un assert.Equal().

MRUnit, le framwork de test unitaire de MapReduce ressemble Ă  PigUnit, mais Ă  la diffĂ©rence il est possible de rĂ©cupĂ©rer l’output brut de l’exĂ©cution afin de gĂ©rer les assertions comme on le souhaite.

Les UDF (User Defined Fonction)

Pour la question des UDF, je vous conseille de ne pas les tester avec PigUnit, mais directement en Java ou en Python puisqu’on les écrit dans ces langages, sur la méthode « exec » car cela vous permettra d’accéder à tout l’écosystème de test de la plateforme :

Code

@Test
public void exec_shouldReturnFalse_WhenStr1ContainsStr2() throws Exception {
    // Given
    Tuple tuple = TupleFactory.getInstance().newTuple();
    tuple.append("blick bluck block");
    tuple.append("black");

    // When
    boolean result = new SimilarityFunc().exec(tuple);

    // Then
    assertThat(result, is(equalTo(false)));
}
Petits tips Mode local ou mode MapReduce

Le mode local est le mode par défaut dans PigUnit, par contre, il est possible de lancer ses tests sur un cluster Hadoop afin de faire des tests d’intégration.

  1. Il faut d’abord que le répertoire de configuration d’Hadoop (HADOOP_CONF_DIR) soit dans le CLASSPATH lors de l’exécution.
  2. Ensuite, il faut spécifier un paramètre système Java (accessible en Java via System.getProperty()) :

-Dpigunit.exectype.cluster=true

Ou directement dans le code

System.getProperties().setProperty("pigunit.exectype.cluster", "true")
Mon script rĂ©fĂ©rence une bibliothèque externe  d’UDF

Parfois (souvent), le cas d’utilisation de Pig est assez particulier pour nous obliger à utiliser des UDF contenues dans un jar externe. Comme pour le mock d’un alias par le biais d’un fichier externe, on va procéder à l’upload du fichier sur HDFS grâce à l’objet cluster et sa méthode update(), pour ensuite l’utiliser dans notre script.

Le script

REGISTER datafu.jar;
DEFINE Median datafu.pig.stats.StreamingMedian();

data = LOAD 'input' using PigStorage() as (val:int);
median = FOREACH (GROUP data ALL) GENERATE Median(data);

 

Le test qui upload avant le jar

public class ScriptWithUDFUTest {
    private String scriptPath = "./src/main/script_with_udf.pig";

    @Test
    public void montest_avec_datafu() throws IOException, ParseException {
        // Given
        PigTest.getCluster().update(new Path("./datafu-1.2.0.jar"), new Path("datafu.jar"));
        PigTest test = new PigTest(scriptPath);
        String[] input = {"1", "2", "3", "2", "2", "2", "3", "2", "2", "1"};
        String[] expected = {"((2.0))"};

        // When
        test.runScript();

        // Then
        test.assertOutput("data", input, "median", expected);
    }
}

Notez que mon JAR est à la racine du projet : ./datafu-1.2.0.jar

Mettre en place un build automatique sur une UDD

Côté UDD, j’ai utilisé Jenkins. Je l’ai installé sur une machine Linux de type Ubuntu Server 14.04. Dessus, il y a l’openjdk7 d’installé, et Git pour récupérer le code source du projet GitHub. Jenkins est configuré avec une installation de maven 3.2.1 (comme ma version locale) ainsi que le Git Plugin.

Si vous cherchez comment installer Jenkins, jetez un œil du côté du Wiki officiel qui est très efficace.

J’ai utilisé l’interface d’administration pour créer un job de type « maven » qui se lance après chaque commit

jenkins

Vous pouvez spécifier que le job Jenkins se lance en local ou en mode mapreduce en ajoutant un paramètre de job de type booléen : -Dpigunit.exectype.cluster=true

Enfin, il est possible d’utiliser un autre plugin Jenkins (par exemple Global Build Stats) afin de suivre l’Ă©volution du temps d’exĂ©cution, et repĂ©rer les Ă©volutions qui tuent les perfs.

Pig en TDD

Les bonnes mĂ©thodes de dĂ©veloppement c’est un sujet important chez nous, on a mĂŞme une tribu dĂ©diĂ©e Ă  son Ă©vangĂ©lisation : Tribu Craftsmanship. Pour ceux qui seraient intĂ©ressĂ©s, voici comment j’ai procĂ©dĂ© :

Sur script_order_alphabet.pig j’ai d’abord écrit le loader que je ne veux pas tester (ce qui reviendrait à tester le framework). Ensuite, mon premier traitement est en réalité un alias égal à un autre alias :

order_by_alphabeth = data;

J’ai écrit mon test en conséquence pour donner mon comportement, puis je l’ai exécuté dans mon IDE. Il était donc normalement rouge avec le diff suivant :

assert_diff

Mon comportement souhaité est un ordre alphabétique. Or, le premier élément se trouve être « yahoo ». La modification du code qui suit est donc très simple :

data_ordered = ORDER data BY name;

green

Issues avec PigUnit

On a eu des problèmes avec PigUnit, le produit n’est pas encore sec alors attendez-vous à avoir quelques surprises.

Nettoyer le cache

Si dans une classe de test il y a plusieurs méthodes de test (ce qui semble assez commun), il faut faire attention car il y aurait des effets de bord liés au fait que l’instance PigServer ne serait pas réinitialisée correctement :

http://www.millennialmedia.com/blog/2014/02/a-solution-to-lengthy-pigunit-tests/

Cygwin pour windows

Si vous avez un environnement de dĂ©veloppement sous Windows et que Cygwin n’est pas installĂ© ou n’est pas ajoutĂ© Ă  la variable d’environnement PATH, une erreur de type « java.io.IOException: Cannot run program « chmod »Â Â» s’affichera.

ORDER BY en mapreduce

Avec mon Jenkins installé sur un cluster Hadoop, j’ai donc lancé mes builds en mode mapreduce afin de recréer un environnement d’exécution proche de la production. Mais voilà, dès qu’un script possédait au moins un ORDER BY, il plantait. Je n’ai pour l’heure pas réussi à résoudre ce problème plutôt gênant, mais il semblerait que ça provienne d’un problème de droit d’accès au fichier temporaire de sample utilisé par le TotalOrderPartitioner.

 

 

Maintenant que vous maîtrisez PigUnit j’espère que vous serez très bientôt tel Robert Redford,  l’homme qui murmurait à l’oreille des cochons.

robert_redford

Récapitulatif Mocker facilement la donnée en spécifiant l’alias auquel se réfère le tableau de String qu’on donne.Le principe est simple et efficace.  4etoiles Assertions : Le seul type d’assertion est « equalTo ».
Non Intégration avec des frameworks spécialisés comme AssertJ ou Hamcrest.  2etoiles La documentation digne d’un README Github (et encore il y en a des bien complets) et non d’un projet Apache.  1etoiles L’intégration avec Maven/Gradle n’est pas du tout abordée dans la documentation et pourtant elle est maintenant « faisable ». Un plus quand il s’agit d’automatiser le build sur une UDD.Il est aussi possible de lancer les tests en mode « cluster » (par défaut en « local), ce que je n’ai pas pu tester malheureusement  2etoiles

 

En conclusion, PigUnit se situe sur un rapport Simplicité / Puissance très proche de la simplicité, mais il n’est pas encore assez flexible et puissant pour couvrir un workflow complexe. Il s’appuie sur JUnit ou TestNG mais ne permet pas l’utilisation de frameworks de mock ou d’assertion, ce qui limite les choses.

Malgré tout, entre mon environnement d’avant et d’après PigUnit, il n’y a pas photo : je suis bien plus performant (et heureux ?) avec et il a justifié les deux jours de veille que je lui avais réservé. Je dirais donc que c’est un bon début. Le temps d’exécution est acceptable (environ 10 secondes par test) en comparaison d’avant (un script mettait 2-3 minutes à s’exécuter).

Si vous vous demandez « est-ce que je pars là-dessus » je vous répondrais que ce n’est pas encore sec et donc qu’il faut s’attendre à quelques surprises. Mais c’est déjà suffisant pour « agilifier » son développement Pig.

Note finale / 5  2.5etoiles

 

Comme ouverture, je vous invite Ă  regarder le projet Nifty Pig Unit sur GitHub que je n’ai pas encore eu la chance de tester. Il promet d’ajouter la possibilitĂ© d’avoir plusieurs inputs pour un test, ajouter un système d’assertion beaucoup plus complet (respectant l’ordre, avec field validator, et personnalisation), et autorise l’utilisation de dump pour le debug. A surveiller !

Références :
Catégories: Blog Société

Fermeture de tickets Redmine depuis un déploiement capistrano

L'actualité de Synbioz - lun, 09/22/2014 - 23:00

Aujourd’hui nous allons nous intéresser à capistrano-redmine. Cette gem permet de changer le status de tickets Redmine lors d’un déploiement via Capistrano.

Nous pouvons configurer capistrano-redmine pour chaque environnement Capistrano, chez synbioz par exemple nous l’utilisons lors d’un déploiement en pré-production.

Lire la suite...

Catégories: Blog Société

Jeudi 25 septembre - Soirées lightning Talks !

JUG Toulouse, Groupe d'utilisateur Java - lun, 09/22/2014 - 23:00

Jeudi 25 septembre, à partir de 18h30, nous organisons à nouveau une soirée grâce à vos propositions. Le CFP organisé il y a quelques semaines nous a permis de vous préparer une soirée intéressante avec des sujets pour tous les goûts ! :-)

L'ordre est encore susceptible d'évoluer, mais voici les différents sujets :

Titre & Speaker Durée prévue Sujet Vos logs sont une mine d'or avec Kibana!, par Leonardo Noleto 30 minutes Apprenez en 20 minutes chrono à faire parler les logs qui dorment au fond de vos disques. Avec la triade Logstash, ElasticSearch et Kibana transformer les logs en insights et pilotez votre activité business ou technique. GWT et son nouveau SuperDevMode, par Arnaud Tournier 15 minutes La fin du DevMode tel qu'on le connait dans GWT est proche. Mais tout est prévu pour continuer à débugger le code Java transformé en Javascript dans notre IDE préféré (Eclipse non ?). Venez découvrir la puissance de ce nouveau mode de fonctionnement. Je donnerai aussi quelques indications sur ce qui attends les développeurs et quand, avec les nouvelles version de GWT (Java 8, JsInterop, Web Components, etc...) Robusta Rest Adapter (Rra), par Stéphanie Pitou, Jean-marc Villatte et Nicolas Zozol 10 minutes Rra est un Work in Progress open source. Quels sont en les objectifs, les doutes et les contraintes ? L'enquête CORS, par Gildas Le Louarn 15 minutes Fier de votre tout nouveau service REST vous décidez de l'invoquer en JavaScript depuis un navigateur en utilisant JQuery. Patatras, alors que JUnit voit tout vert, rien ne se passe comme prévu. Pour vous, j'ai mené l'enquête ;-) Démo Glass FluentHttp, par Vincent Ferries 15 minutes Mini présentation du serveur web développé par David Gageot et Jean Laurent De Morlon, Java 8 style inside et de la toute petite application que j'ai faite dessus pour Google Glass.

Un grand merci l'Epitech qui continue à nous accueillir. MAIS ATTENTION ils ont déménagé : l'Epitech se trouve à présent 40 boulevard de la Marquette, (à Toulouse) quartier Compans Caffarelli.

Catégories: Association

Retour sur la CARA Night de Grenoble

Cara NightLe 11 septembre 2014 s’est tenue la 2ème CARA Night sur les jeux Agiles.

Environ 60 personnes s’Ă©taient inscrites pour cette soirĂ©e qui a dĂ©marrĂ© un peu après 18h00 par une visite de l’exposition « A quoi joues-tu ? » organisĂ©e par la Casemate de Grenoble.

L’ambiance de la soirĂ©e Ă©tait vraiment gĂ©niale et de nombreux petits groupes discutaient de tout et de rien en marge des ateliers de jeux. Il est vrai que la bière proposĂ©e par le CARA avec « unepetitemousse », les pizzas et les tartes aux pommes Ă©taient une invitation Ă  passer un bon moment.

A titre personnel, j’ai animĂ© les jeux suivants :

  • Pompafric : DĂ©couvrir une facette de la systĂ©mique en recrutant des Ă©tudiants pour une startup
  • Petit Oiseau : DĂ©couvrir Scrum en construisant un oiseau en lego
  • Chaises non musicales : DĂ©couvrir la difficultĂ© d’agir en Ă©quipe
  •  Vampire de Strasbourg : DĂ©couvrir notre rĂ©action aux problèmes
  • Système Complexe : DĂ©couvrir la force de l’auto-organisation

Cela m’a occupĂ© toute la soirĂ©e et je n’ai donc pas eu le temps de participer aux autres jeux, ce qui ne m’a pas empĂŞchĂ© de prendre beaucoup de plaisir.

Seul petit bĂ©mol de la soirĂ©e, nous n’avions pas suffisamment d’animateurs de jeux pour tenir toute la soirĂ©e (malgrĂ© un appel Ă  volontaire et une relance, nous avons eu peu de proposition). L’Ă©quipe d’organisation avait dĂ©cidĂ© de maintenir la soirĂ©e malgrĂ© tout, et quelques personnes qui Ă©taient venu « consommer » des jeux, se sont retrouvĂ©es un peu perdu durant la soirĂ©e car elle ne se dĂ©roulait pas suivant le plan affichĂ© … n’est pas « Agile Games France » qui veut :)

Et Ă  propos d’AGF2015 … oĂą est-ce que l’on se retrouve en fĂ©vrier prochain ?

Catégories: Blog Individuel

A remote retrospective Story

Un Chti café - Jérémy Sevellec - lun, 09/22/2014 - 10:09
a bit of context...I'm working as a remote ScrumMaster since approximatively 2 years with the same team. This team is a full remote team even if most of the times we are doing our sprint planning together IRL. I went with my product owner to setup a new team in Vietnam six months ago. This new team is a bit different because, compared to "mine", all team members of the new team are working together on the same office.
It was quiet challenging because it was planned to make both teams working on the same project and same code base.
Now, 6 months and a product release together later, we decided to make a retrospective with the two teams. The goal was to find out what was working and what was not regarding the collaboration with the two teams.
So I was responsible to setup this retrospective.

the setupI wanted to port my usual local retrospective format based on sticky note with a whiteboard using good/bad/questions/suggestions areas.
My needs : - a good communication tool.- a good virtual white board.

We were used to use Google Hangout so we sticked with it as our communication channel. The only problem is the 10 slots limitation that i will have to deal with.
After some googling, i found that google drawing could be my virtual white board. I got some inspiration from here : http://www.iliokb.com/2013/02/facilitating-retrospectives-with-remote.html

So we did end up with this kind of setup and a drawing is better than a long speech :


Due to the quality of the internet connection of the green team and to the google hangout limitation, we decided to use the green team scrumMaster as a proxy of the other teams member and to use only one google hangout slot for the green team.

The plan
Here is what I did :- the week before : 
  • fix the date, not so easy to find a slot which everybody.

- few days before : 
  • had setup of the google drawing white board, made some try.
  • talked to the product owner to explain how it will work.
  • talked to the other scrumMaster to explain how it will work.

- the day before :
  • sent an email to all participants to remind the goal and scope of the retrospective and to ask them to start to think about that.
  • talked again with the other ScrumMaster. As he acted as team's proxy, we discussed together to try to prepare that as better as we can.
- the D day :
  • verified that everybody was able to join the shared google drawing.
  • just dot it!

Here is the result :


It was fun to hear when everybody was filling the white board "hey, who has stoled my sticky?" ;-)

the retro of the retroBad :
  • Hangout Limitation (max 10 slots)
  • The scrumMaster of the green team was the proxy of the whole teams. It was ok because he was already used to do that for others meeting we already had. Anyway It would have been better to have the whole green team at the same "level"

good :
  • It worked well! Using Google drawing as a virtual shared white board was really successful : simple and efficient.
  • It's now decided to do that one time per release.

Notes : 
  • the virtual retrospective was no longer than the local retrospective i was used to do locally.
  • There was more preparation from me compared to a local retrospective.
  • I had to allocate more time than initially planned to allow everybody to fill the google drawing.



Catégories: Blog Individuel

Conversion YUV -> RGB avec Direct2D à l’aide d’un effet personnalisé


Récemment j’ai eu l’occasion de pouvoir travailler auprès de l’équipe de VLC pour le portage de l’application en Universal App. Mon rôle dans l’équipe était de travailler sur le module qui fait le pont entre la librairie de VLC et...
Catégories: Blog Société

La Fabrique Ă  Fanzines

ekito people - lun, 09/22/2014 - 04:51

La Fabrique Ă  Fanzines est un jeu agile sous forme d’atelier permettant l’apprentissage des concepts Kanban par une pratique ludique.

La genèse.

L’idĂ©e est partie du livre “La Fabrique de Fanzines – par ses ouvriers mĂŞmes” aux Ă©ditions Atrabile. Je vous recommande vivement sa lecture pour comprendre le principe de cet atelier. Alors pourquoi “Ă ” Fanzines et pas “de”, bein parce qu’on est dans le sud!

Il s’inspire aussi de l’excellent jeu de plateau Kanbanzine , crĂ©Ă© par l’association MĂ©tis Ă©mergence (dont fait partie Laurent Morisseau), qui aborde le kanban plus en profondeur.

Le problème à résoudre.

Il rĂ©pond Ă  ceux, comme moi, qui trouvent dommage d’avoir dans un mĂŞme espace autant de cerveaux disponibles qui ne produisent rien d’autre que de la discussion. Je cherchais donc une façon de profiter de tous ces neurones pour partager, apprendre, s’amuser et cerise sur le gâteau, laisser une trace de tout ça sous forme de bandes dessinĂ©es.

L’objectif.

Ce jeu a un double objectif:

  •  ApprĂ©hender les pratiques Kanban
  •  S’amuser en dessinant des fanzines synthĂ©tisant les discussions,… pour les diffuser

Les principes mis en Ĺ“uvre.

Les principes mis en Ĺ“uvre sont:

  • Les bases de Kanban (flux, travail en cours, stock, management visuel,…)
  • Le collectif
  • L’auto-organisation
  • L’amĂ©lioration continue
  • Le dessin! Si si , tout le monde sait dessiner. Ou alors apprenez avec Romain

Comment y joue-t-on?

L’atelier se dĂ©roule ainsi:

  • PrĂ©sentation du jeu (20′)
  • Trouver des sujets (15′)
  • Choisir les sujets (10′)
  • Puis pour chaque sujet, produire un fanzine:
    • Produire un original, reliĂ©, que l’on accroche Ă  la corde Ă  linge
    • Produire Une traduction en Anglais
    • Produire des copies reliĂ©es et rangĂ©es prĂŞtes Ă  diffuser
  • Jeu en itĂ©ration (au minimum 5′ et max 30′ + 10 Ă  30′ minutes de rĂ©trospective selon la durĂ©e totale de l’atelier)

Ce dĂ©roulement peut bien Ă©videment ĂŞtre amĂ©nagĂ© en fonction des contraintes de temps ou de matĂ©riel, ou d’objectifs diffĂ©rents. Par exemple, sur une journĂ©e entière, chaque sujet peut faire le thème d’un dĂ©bat entre plusieurs personnes comme lors d’un Forum Ouvert (ou Open Space Technology) avant de produire le fanzine.

  • PrĂ©sentation du jeu.

La prĂ©sentation du jeu est faite par l’animateur qui explique les principes et le dĂ©roulement du jeu.

  • Trouver des sujets.

En reprenant les mĂ©caniques du Forum Ouvert, les participants sont amenĂ©s Ă  proposer des sujets qu’ils souhaitent aborder par la suite. Les sujets sont Ă©crits sur des post-its, un sujet par post-it est mis au mur.

  • Choisir des sujets.

Il y a plusieurs façons de jouer le jeu:

  • Soit une personne fait office de RĂ©dacteur en Chef et dĂ©cide de la valeur attribuĂ©e Ă  chaque sujet
  • Soit l’ensemble des participants procède Ă  un vote au point.

Quelle que soit la technique employée, vous avez une liste ordonnée de sujets par ordre décroissant de valeur.

  • Produire un original, reliĂ©, accrochĂ© Ă  la corde.

D’abord qu’est-ce qu’un fanzine?

D’après wikipedia, “Un fanzine (contraction de l’expression anglaise « fanatic magazine ») est une publication imprimĂ©e pĂ©riodique ou non, institutionnellement indĂ©pendante, crĂ©Ă©e et rĂ©alisĂ©e par des amateurs passionnĂ©s pour d’autres passionnĂ©s. Ce type de publication est fortement ancrĂ© dans la philosophie DIY, popularisĂ©e par le mouvement punk.”

Fanzines

Fanzines (wikipedia)

 

Comment réaliser votre fanzine

  1. Plier la feuille en 4
  2. Mettre les numéros
  3. DĂ©plier la feuille
  4. Dessiner
Pliage

Pliage du fanzine

  • Jeu en itĂ©rations

Au tableau, vous avez donc une liste ordonnĂ©e de sujets Ă  traiter par l’assemblĂ©e.

Et c’est parti pour une première itĂ©ration.

Les participants dĂ©cident de l’organisation qu’ils souhaitent mettre en place pour produire leurs premiers fanzines.

Et ils représentent les étapes de leur processus au tableau Kanban.

A chaque fois qu’une Ă©tape est passĂ©e, le post-it du fanzine est dĂ©placĂ© dans la bonne colonne.

 

En pleine action

En pleine action

Au tableau

Au tableau

A la fin du temps allouĂ© Ă  l’itĂ©ration, les participants font un Ă©tat des lieux et rĂ©flĂ©chissent Ă  la façon d’amĂ©liorer la prochaine itĂ©ration.

L’animateur introduit un Ă  un les concepts Kanban pour aider les participants : fail-fast, boucles courtes d’amĂ©lioration, notion de stock, de flux poussĂ© ou tirĂ©, de chaĂ®ne de valeur, management visuel,… Mais lĂ  je ne vous en dis pas plus, il faut jouer pour voir.

 

Puis une nouvelle itĂ©ration dĂ©marre, et ainsi de suite jusqu’Ă  la fin de l’atelier.

 

A la fin

Comme d’habitude, on dĂ©briefe, on se fait un ROTI, on se dit qu’on s’est bien amusĂ© et qu’en plus on pourra montrer ce que l’on a fait aux collègues, amis, famille, chefs, …

 

Ce jeu a dĂ©jĂ  Ă©tĂ© jouĂ© dans un cadre professionnel pour un client souhaitant communiquer de manière diffĂ©rente son offre de service par exemple. Mais aussi lors d’un atelier de l’association Agile Toulouse.

Et sera joué en grandeur nature sur une journée complète lors du prochain Agile Tour Toulouse le 17 oct prochain.

 

PS:

J’ai Ă  disposition un support d’animation et explication du matĂ©riel nĂ©cessaire pour ceux qui souhaiterai animer ce jeu.

N’hĂ©sitez pas Ă  me le demander : lcarbonnaux at ekito.fr

 

 

 

 

 

 

 

 

 

The post La Fabrique Ă  Fanzines appeared first on ekito people.

Catégories: Blog Société

LCC 109 - Interview sur Microsoft .NET avec Benjamin Guinebertiere, SĂ©bastien Pertus et Mitsuru

Dans cet épisode, on discute du “grand” méchant loup: .NET. On commence par la machine virtuelle, les langages et on remonte les niveaux de couches de la persistance au web et mobile. On y discute également l’écosystème et les évolutions de Microsoft sur la gestion de la plateforme.

Enregistré le 10 septembre 2014

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

Interview introduction

Benjamin Guinebertiere
@bengui
Microsoft
Microsoft Azure

Sébastien Pertus
@sebastienpertus

Mitsuru Furuta
@mitsufu
Sensorit

La machine virtuelle

Anders Heljsberg
Common Language Runtime (CLR)
Intermediary Language (IL)
NGen
Managed / unmanaged

Garbage collection en .NET
Compteur de performance
Volatile

Le langage

Types génériques en C#
Réification vs erasure des types génériques

C#
Visual Basic .NET
F#

Common Language Specification (CLS)
Dynamic Language Runtime (DLR)
IronPython

Les couches classiques et frameworks les approches

Attributs
yield return
LINQ
Methodes d’extension
Autres méthodes d’extension
Lambda

Persistance

ADO.NET
Microsoft Entity Framework
NHibernate
Entity Framework vs NHibernate
LINQ to SQL

System.Runtime.Caching
Output Caching
AppFabric Caching
Redis
RavenDB
Azure DocumentDB

Objet métier et composants

Injection de dépendance
Managed Extensibility Framework (MEF)
Unity Container

Frameworks webs

ASP.NET
IIS
ASP.NET WebForms
ASP.NET MVC
Razor / WebPages
IntelliSense
ASP.NET Web API

KnockOut.js
SignalR

NewtonSoft JSON

OData

ASP.NET vnext
Compilateur Roslyn

Le Mobile et les clients riches

Windows RunTime (RT)
async / await

Des ressources

MSDN
Microsoft Virtual Academy
ch9.ms
.NET foundation
TechDays

Nous contacter

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

Catégories: Blog Individuel

Benchmark ActiveRecord - SQL Partie 2

L'actualité de Synbioz - jeu, 09/18/2014 - 23:00

Le code permettant de faire tourner les exemples est sur notre github.

Dans la première partie de notre benchmark nous avons vu un exemple dans lequel écrire ses requêtes manuellement était plus adapté qu’utiliser ActiveRecord.

En effet, lorsque nous n’avons pas besoin de manipuler le résultat d’une requête sous forme d’objets héritant d’ActiveRecord::Base, autant lancer une requête écrite à la main. C’était le cas de notre génération de données.

Avec ActiveRecord::Base, chaque tour de boucle crée un objet et joue les callbacks. Or c’est la partie initialisation d’objet qui est la plus coûteuse.

Lire la suite...

Catégories: Blog Société

Nouveau blog en anglais / New blog in english !

Le blog de Patrick Guimonet - jeu, 09/18/2014 - 17:42
Pour simplifier la lecture de mes messages, j’ai décidé de séparer mes publications en français et en anglais sur deux blogs distincts. Vous pourrez donc continuer à trouver mes publications en français sur ce blog qui...
Catégories: Blog Individuel

Confluence 5.7 : Collaboration in context

Le blog de Valiantys - jeu, 09/18/2014 - 16:41

Confluence has had a great year : Agile planning, Confluence Questions, Data Center… , but the best is yet to come.  Last week at the Atlassian Summit, Atlassian has unveiled the key features of 5.7 and beyond. Let me tell you that as an extensive Confluence user I feel super enthusiast : these new features […]

The post Confluence 5.7 : Collaboration in context appeared first on Valiantys Blog.

Catégories: Blog Société

[Session PO Dojo] World Café « backlog du bon Product Owner »

Agile Nantes - jeu, 09/18/2014 - 16:39

Pour cette session PO Dojo de rentrĂ©e, nous vous proposons un moment d’Ă©change sur le « Backlog du bon product owner ».

Il prendra la forme d’un world cafĂ© avec 3 ateliers :

- Quel rôle pour le product owner dans les différentes réunions projet ?

- Quels livrables à réaliser par le product owner ? (documents / communication)

- Quelles qualités / comportements attendus du product owner ?

Cet atelier sera donc en mode participatif avec l’apport des connaissances et expériences de chaque participant.

 

OĂą et quand ?

> OĂą: chez EODIM Centre d’affaires EUPTOUYOU, 4 Rue Edith Piaf, 44800 Saint-Herblain

> Quand: mercredi 24 septembre 2014, 19h-21h

> Faut il s’inscrire ? Oui, par ici

 

Vous pouvez Ă©videmment transmettre cette information autour de vous. Un GRAND MERCI Ă  EODIM qui nous accueille !

L’association Agile Nantes

Catégories: Association

Passer d'une application Angular-Bootstrap Ă  Angular-Material Design

Zenika - jeu, 09/18/2014 - 13:30
Material Design : le nouveau Twitter Bootstrap ?

Material design est une spĂ©cification Google pour les interfaces web, orientĂ©e mobile. C’est un langage visuel, qui doit permettre de rĂ©pondre Ă  des attentes plus poussĂ©es des utilisateurs. Le contact physique dont ils ont maintenant l’expĂ©rience avec des interfaces de plus en plus souvent tactiles, est Ă  l’origine de nouvelles attentes : des rĂ©actions elles aussi matĂ©rielles, rĂ©pondant au toucher et rappelant le contact de la feuille de papier.

Figure 1 : le papier, support de base de Material Design. “L’Homme a une longue expérience de communication à partir du papier. (...) On peut interagir de nombreuses différentes manières avec lui” (Matias Duarte, Google I/O) La spécification en ligne de Material Design se présente davantage comme une table de commandement pour les développeurs... Read Passer d'une application Angular-Bootstrap à Angular-Material Design

Catégories: Blog Société

Partagez la connaissance

Partagez BlogsdeDeveloppeurs.com sur les réseaux sociaux