
Présentation en avant première du 1er Baromètre 2012 sur le Marketing Digital.
Nous vous invitons à découvrir en avant première les résultats de l’étude sur les enjeux et les meilleures pratiques du Marketing Digital en entreprise lors de la conférence Marketing Digital le 3 juillet dans les locaux de Valtech. Cette étude, conduite par Valtech et Adobe, et réalisée auprès de plus 250 directeurs et responsables marketing, apporte des éléments de réponse autour des thèmes suivants :
- Quels sont les leviers à privilégier pour créer des campagnes web performantes ?
- Comment améliorer les taux de conversion et optimiser le budget marketing ?
- Quelle stratégie de fidélisation mettre en place en multicanal ?
A l’issue de cette conférence, vous recevrez un exemplaire du nouveau livre blanc “Marketing agile™. Un nouvel impératif.” rédigé par Valtech en partenariat avec Adobe.
- Introduction
- Présentation des résultats du Baromètre
- Cas pratiques pour améliorer l’Acquisition, la Conversion et la Fidélisation
- “Marketing agile™. Un nouvel impératif.” Présentation du livre blanc Valtech / Adobe
Inscription & Accès :
- Lieu : Paris, 103 rue de Grenelle, 75007
- Date : Mardi 3 juillet 2012
- Horaire : 09:00 – 11:30
- Inscription : via le site web
Par ailleurs, si vous souhaitez participer au Baromètre, il vous reste encore quelques jours pour le faire : Participer au Baromètre
Au plaisir de vous rencontrer lors de cette conférence,
En tant que développeur .Net dans l’immense majorité des cas, lorsque nous avons un site web à développer, nous ne nous posons pas la question du choix du serveur applicatif : c’est tout naturellement vers IIS que nous allons nous tourner… restera juste à trancher entre le framework ASP.NET classique et le framework ASP.NET MVC.
Depuis maintenant plus de 10 ans que ASP.NET existe, avouons le, nous développeurs .Net, nous nous sommes largement laissés bercer par les améliorations continues apportées par Microsoft que ce soit au niveau du langage C# (4 version depuis 2002 où l’on a vu apparaître les types génériques, LINQ, les expressions lambda, le typage dynamique des variables, …) ou au niveau du framework ASP.NET (Master Pages, ASP.NET AJAX, ASP.NET MVC, …).
<troll>Pendant ces 10 années où nous, développeurs .Net étions satisfaits à 120% de nos outils et hyper productifs, d’autres développeurs étaient beaucoup moins satisfaits de leurs outils et en ont donc créés de nouveaux</troll>. C’est ainsi que l’on a vu apparaître de nombreux serveurs web légers comme lighttpd ou nginx qui permettent d’héberger des sites développés avec le framework Ruby On Rails par exemple. Des développeurs sont allés encore plus loin et ont créé Sinatra qui est un framework ruby minimaliste.
Un serveur web léger, oui mais pour quoi faire ?
Les disciples d’Aristote, me diront “qui peut le plus peut le moins” et tout ce qui peut être fait avec un serveur léger peut être fait avec IIS. C’est pas faux (comme le dirait Perceval), mais est-ce que dans certains cas on ne se sert pas d’un marteau pour écraser une mouche.
Imaginons par exemple que l’on veuille afficher les {x} derniers tweets de l’utilisateur {twittos} en utilisant l’url suivante : http://www.monsupersite.com/tweet/{twittos}/{x}
Si vous voulez faire ceci avec de l’ASP.NET “classique”, il va falloir créer une WebForm (page aspx pour laquelle vous n’aurez pas une maîtrise complète du html généré) qui prendra les paramètres {twittos} et {x} en GET ou en POST et ensuite créer un module http qui se chargera de faire le lien entre l’url demandée (à la mode REST) et votre WebForm. Au final, vous allez devoir travailler sur 4 fichiers (la vue et le Code-Behind de votre WebForm, le module http et le fichier de configuration de votre site web pour y déclarer le module).
Si vous voulez faire ceci avec de l’ASP.NET MVC, cela sera un peu plus simple (et surtout beaucoup plus propre), mais il vous faudra quand même créer un contrôleur, éventuellement un modèle (si vous voulez être très propre), une vue et ajouter une nouvelle route dans le fichier Global.asax.cs (la route qui existe par défaut étant /{controller}/{action}/{id}) soit entre 3 et 4 fichiers à manipuler.
Esssayons de voir si l’on ne peut pas faire la même chose mais d’une manière un peu plus legère. Nous allons pour cela utiliser Nancy qui est un framework léger très fortement inspiré de Sinatra. Dans notre démo nous allons auto-héberger Nancy dans une application console, mais sachez qu’il est tout à fait possible d’héberger ce que nous allons écrire dans IIS (pour les disciples d’Aristote très têtus).
#region Namespaces
using System;
using Nancy;
using Nancy.Hosting.Self;
#endregion
namespace NancyFirstDemo
{
internal class Program
{
private static void Main()
{
var nancyHost = new NancyHost(new Uri("http://localhost:1234"));
nancyHost.Start();
Console.ReadLine();
nancyHost.Stop();
}
}
public class TweetModule : NancyModule
{
public TweetModule()
{
Get["/tweet/{twittos}/{x}"] = parameters => string.Format(
"Ici on doit afficher les {0} derniers tweets de l'utilisateur {1}",
parameters["x"],
parameters["twittos"]);
}
}
} |
Est-il nécessaire de devoir commenter ce code ? On voit qu’avec quelques lignes de code, il est possible d’instancier un serveur web et faire en sorte qu’il réponde correctement à une certaine catégorie d’urls. Pour ce qui veulent aller plus loin, il n’est pas bien compliqué d’enrichir le module pour qu’il fonctionne avec autre chose que du GET, et de renvoyer autre chose que du html (un fichier ou du json par exemple).
Le domaine des serveurs légers est actuellement en pleine ébullition dans le monde .Net tant au niveau des Hosts (Kayak, Gate,…) que des Frameworks (Nancy, SignalR). Ces outils ont l’avantage par rapport à d’autres d’être compatibles avec OWIN (Open Web Interface for .Net) qui est une spécification qui a pour but de définir des interfaces entre les différentes briques qui composent un serveur web. Je vous conseille de lire un billet publié par Louis DeJardin pour en savoir plus sur le sujet.
Le 7 juin, Valtech accueillait la 9ième réunion de Paris-DevOps. Une soirée autour de 2 présentations de 30 mn réalisées pour Devoxx France.
Devops illustré : la jungle de la configuration d’une application
Dans la première partie de soirée, Gilles Di Guglielmo et Dimitri Baeli, nous ont présenté un pattern de gestion des configurations applicatives qu’ils utilisent sur leur projet chez Lesfurets.com (comparateur d’assurances).
L’objectif est de tracer les variables de configuration dans le code et de permettre leur initialisation par différents moyens, le contexte du process mis à jour depuis un Shell, les propriétés de la JVM passés par la ligne de commande, une fichier de configuration voire la surcharge au démarrage de l’application.
Chaque niveau surcharge le précédent. Les variables de configuration sont clairement identifiées dans le code et lorsque l’application est packagée, il est possible de gérer un fichier de configuration exemple et une documentation des paramètres à modifier pour faciliter les mises à jour en production.
Leur pattern s’appuie sur leur expérience de situation que l’on vit dans le déploiement d’application comme par exemple les données à modifier directement dans le web.xml qui est dans le .war, un fichier archive qui est installé tel quel. Cela génère des demande de documentation, de scripts de mise à jour des paramètres et des échanges plus ou moins sereins. Même dans les cas où les gens se montrent raisonnables, les risques de variables ignorées en raison de typo dans une clé de fichier de configuration ou d’information maintenue à plusieurs endroits par erreur existent toujours.
Il faut noter que même s’il est appliqué ici à Java le principe est portable dans d’autres langages. L’idée est de centraliser l’acquisition des paramètres dans la l’application. En Java, l’implémentation mime les méthodes java.lang.System.getProperty qui ne travaillent que sur des fichiers clé-valeur pour les rendre plus générales.
Les variables de configuration sont déclarées dans un fichier XML et peuvent avoir des propriétés comme le scope dans lequel elles sont traitées. Ce scope lui même est un défini dans un fichier de configuration.
Le pattern est mis en oeuvre par un bout de code qui est lancé depuis le ContextListener. Il vérifie la cohérence de la configuration, acquiert les paramètres et garde de la trace de la source de la configuration. Ce mécanisme peut arrêter le démarrage si des paramètres de configuration sont déclarés plusieurs fois sous le même nom ou ne se conforment pas à certaines contraintes supplémentaires comme l’obligation de les changer sur des environnements non dev (devPurposeOnly).
L’état des variables et la source de leur valeur peut être consulté via une page HTML. Cette page affiche aussi les compteurs d’accès que l’on peut activer pour s’assurer qu’une variable est effectivement utilisée.
Plusieurs démo ont été présentées, en test unitaires depuis un IDE ou en déploiement dans un tomcat.
Ce n’est pas une librairie mais un modèle de code. Il est donc possible de le modifier pour avoir plus de scopes ou ajouter des fonctions utiles sur un projet. Un plugin Maven a été développé pour générer la configuration exemple et sa documentation.
Les slides de la présentation et le code.
Continuous deployement : Rackspace, Chef et capistrano en action
Dans la seconde partie de la soirée Stéphane Rios de Fasterize et Bertrand Paquet d’Octo nous ont présenté la solution mise en place chez Fasterize pour le déploiement continu des serveurs de la solution d’optimisation des pages HTML.
Fasterize est un service de proxy qui optimise les pages HTML à la volée pour qu’elles s’affichent plus vite et soient notamment référencées.
Dès le début Fasterize a voulu une solution de déploiement qui couvre l’ensemble de la plate-forme, l’installation des noeuds, des OS, des applications et des services de surveillance. En effet, cette société utilise un IaaS pour ne pas être limité par les fonctions fournies par un PasS, mais la contrepartie est que la construction et la maintenance des environnements est plus complexe. Il y a beaucoup d’outils différents pour gérer toute la stack et les différents services.
Une autre demande est de déployer le plus souvent possible, d’avoir un processus totalement automatisé pour les opérations courantes et supervisé, d’aller vite.
L’outillage de déploiement mis en place installe l’ensemble des composants en utilisant les dépôts de packages et le dépôt Git des projets, teste et met en place les sondes de monitoring. La plate-forme utilise Rackspace, mais elle est agnostique et prévue pour fonctionner en multi-cloud.
La solution s’appuie sur Chef, un outil de gestion de configuration, Capistrano, un outil de déploiement d’applications, Fog, une gem Ruby qui fourni une abstraction des API de Cloud, Jenkins, un serveur d’intégration continue. Les 3 premiers sont en Ruby, le dernier en Java.
- Jenkins gère l’intégration continue et permet aussi de lancer des commandes Capistrano sur l’environnement choisi (intégration, Production …).
- Chef n’est pas utilisé comme on s’y attend. Le déploiement est piloté via Capistrano et non Chef, soit par des commandes cap en ligne de commande, soit via l’intermédiaire d’un job freestyle dans Jenkins.
- Capistrano est utilisé pour sa fonction principale de déploiement applicatif. Il clone l’application depuis le dépôt github et redémare les composants. Mais Capistrano est aussi utilisé pour ses fonctions de parallel ssh, pour lancer les mêmes commandes sur plusieurs machines en même temps, et pour l’exécution de scripts externe via HTTPS, comme par exemple l’accès est interfaces de configuration des Cloud.
- Capistrano fait appel à Chef pour la gestion des configurations (installation et configuration des packages, paramétrage).
Chef est utilisé en mode chef-solo, il n’y a pas de serveur central et de client qui tourne en démon, Chef est simplement lancé en ligne de commande. Fasterize voulait un système qui reconstruise la machine à partir des packages plutôt qu’utiliser des images qu’il faut maintenir. Mais ils voulaient garder le contrôle sur le déclenchement des déploiements et des changements de configuration. En effet, Chef en mode démon peut redémarrer un process s’il voit sa configuration changer. Sur une architecture complexe, les composants ne sont pas toujours redémarrés dans le bon ordre alors que Capistrano utilise un processus impératif qui démarre les composants de l’application dans le bon ordre après la mise à jour de tous les composants.
Ce partage des responsabilités implique de partager les informations de configuration dans un système externe à l’un ou l’autre de ces outils. C’est ZooKeeper, un service de gestion de configuration centralisé, qui est utilisé pour conserver les informations de topologie réseau, les données de configuration des environnements et des applications, les rôles des machines, et les recettes Chef à appliquer pour chaque environnement. Il y a 3 instances, le minimum pour obtenir une redondance. ZooKeeper permet de consulter ces informations, mais aussi de s’abonner aux changement de configuration.
L’ensemble de l’outillage de déploiement est géré en configuration dans git, les recettes Chef, l’application à déployer, la configuration Jenkins (via un plugin). L’ensemble fait 3000 lignes de Ruby et quelques centaines de lignes de Perl et Shell.
Bertrand a fait plusieurs démos via Jenkins
Dans les deux premières démos, nous avons pu consulter la liste des noeuds et les versions d’OS et d’applicatif, puis mettre à jour un noeud, c’est à dire lancer Chef, aller chercher les recettes à jour sur Github, les appliquer, c’est à dire dans ce cas aller chercher les nouveaux packages via apt-get, les installer et finaliser la configuration. L’ensemble de la démo deux a pris 35s pour 15 noeuds en parallèle (mais sans changement à apporter)
A partir de la démo 3, on est rentré dans des processus un peu plus longs, déployer l’application Rails. Ce processus va chercher l’application sur Github, met à jour le code et applique les scrips d’upgrade comme db:migrate. Depuis la version 3.2 de Rails le processus est devenu plus long et l’instance micro peinait un peu aussi. La mise à jour a été arrêtée pour continuer la démo. Mais ça n’est pas grave, l’environnement est dans un état incomplet et sera remis en état lors du prochain lancement de la commande.
Le déploiement est fait en Production le plus rapidement possible après la disponibilité de la fonction et jusqu’à 3 ou 4 fois par jour. En production, les machines sont mises à jour avec un processus plus contrôlé. Les machines sont sorties du cluster une par une pour être mises à jour, le monitoring est désactivé car il tente lui aussi de modifier la configuration en réponse à ses alertes.
La démo 4, a créé un noeud sur Rackspace. Afin de limiter les paramètres à passer, l’outillage utilise le principe de convention over configuration, le nom de la machine indique son usage et donc le set de recette Chef à appliquer. Après obtention de la machine via les API Rackspace, le DNS local est reconfiguré, Chef prend le relais pour installer les packages système, les socles applicatifs, les sondes de monitoring (Monit) et le client de l’aggrégateur de logs (Splunk). Ici c’est un cache donc aucun applicatif n’est déployé. Il ne reste plus qu’à intégrer manuellement le noeud dans le cluster via une ligne de commande.
Ce processus est testé souvent car les machines de test sont reconstruites toutes les nuits afin de passer les tests de non-régression sur l’infrastructure et les tests fonctionnels, ainsi que les tests de performance.
L’ensemble du scripting et du développement des bindings entre outils est évalué à une quarantaine de jours/homme sur la durée du projet en plus de la mise en place des systèmes et de l’intégration par les équipes Fasterize.
Fasterize a construit une solution qui répond bien à ses besoins : une grande facilité d’adaptation de l’infrastructure, car il suffit de modifier quelques scripts et reconstruire, la gestion de l’élasticité est simplifiée, même si elle n’est pas automatique, car les opérations requises sont scriptées.
Les slides de la présentation et un article sur Chef de Bertrand.

L’agilité a fait son apparition en France depuis près de 10 ans. En tant que précurseur, Valtech a très vite adopté SCRUM sur ses projets onshores mais également offshores, et a développé une plateforme agile spécifique. Aujourd’hui, les choses ont changé et de nombreux clients comme Valtech en son temps, adoptent les pratiques agiles SCRUM et XP tout en consolidant leurs environnements de développement et de test pour une meilleure productivité des équipes.
A l’occasion d’un séminaire à Toulouse le 14 juin 2012, les experts de Valtech aborderont des sujets moins techniques du point de vue du développement, mais beaucoup plus sensibles du point de vue de l’organisation, de la difficulté d’adoption de nouvelles pratiques agiles (processus et outils) et du management habilité à décider de l’opportunité ou non d’adopter ces pratiques.
- Adoption de l’agilité et retour sur investissement
- Le pôle architecture dans un monde agile
- Une plateforme agile pour quoi faire ?
- Innovation Game : Gadget futile ou outil redoutable ?
Inscription & Accès :
- Lieu : Toulouse ( Le lieu sera communiqué prochainement )
- Date : 28 juin 2012
- Horaire : 09:00 – 12:30
- Inscription : via le site web
L’équipe de Valtech Toulouse sera heureuse de vous accueillir pour cette matinée d’échanges.


L’Entreprise Agile de demain : l’Agilité au-delà des projets…
Alors que nous venons de fêter les dix ans du Manifeste Agile, et que de nombreuses entreprises s’y sont essayées, l’Agilité prend un nouvel essor. L’Agilité sort de la sphère projet pour transformer l’Entreprise et les Hommes. Elle ouvre de nouvelles perspectives sur le management, l’innovation et l’accélération du retour sur investissement. Au programme de cette journée…
Vous aurez l’occasion de choisir vos sessions animées par les experts de Valtech venus de nos différents sites dans le monde parmi les formats suivants :
- Quel ROI pour ma transformation Agile ?
- Dans la peau du Manager Agile : un peu d’humanité dans un monde de brutes !
- How to measure Agility and deliver business goals
- Agile inception : how to start an agile project ?
- Discovering the servant in yourself
- Are you ready for the Product Owner role?
- L’agilité au service du marketing, une révolution en marche
- Quelle place pour le département Architecture dans l’entreprise agile ?
- Kanban Game, pour apprendre à livrer de la valeur en continu
- Agile Innovation Games
- Leadership challenge value cards : Où sont vos valeurs ?
- Petit Outil de facilitation à l’usage des honnêtes gens
- Objectif Mars: qui pourra m’aider à peindre ma fusée ?
- Innovation needs waste
- Outside in Design: the BDD way
Inscription & Accès :
- Lieu : 103 rue de Grenelle, 75007, Paris
- Prix : Gratuit
- Date : 19 juin 2012
- Horaire : 08:30 – 18:30
- Inscription* : via le site web
L’équipe de Valtech sera heureuse de vous accueillir pour cette journée d’échanges.
* Cet événement est réservé aux décideurs en entreprise. Valtech se réserve donc le droit de refuser l’inscription aux sociétés de conseil et de formation, indépendants et étudiants.
Organisé par Valtech Training le 5 Juin dernier, j’ai eu la chance de participer au séminaire gratuit “optimisez vos interventions en public” animé par Gérald Garutti dans l’auditorium de Valtech Paris, rue de Grenelle. Ce séminaire tout public au titre évocateur proposait durant quatre heures une réflexion en profondeur de la structuration de notre pensée et ayant pour finalité sa présentation devant un public à l’aide des techniques développées par les acteurs professionnels.
Savant mélange entre pédagogie, rigueur et décontraction nous avons (re)découvert avec plaisir le sens de mots tels que “Théatre”, “Drame”, “Performance”, “Perspective” examinant au passage le rôle de la logique mathématique, de la rhétorique et de la politique dans l’élaboration du discours. Si dense fut elle, jamais la présentation ne fut rébarbative, Gérald Garutti mêlant habillement la théorie et la mise en pratique afin de maintenir un taux d’écoute élevé parmi ses auditeurs. Marcher aléatoirement dans une pièce en offrant un “bonjour” aux personnes regardées dans les yeux, assigner un partenaire pour simuler un miroir peut, pour un observateur extérieur, laisser assez perplexe mais sont très instructifs et ludiques pour qui y participe.
Un constat s’impose alors à nous durant la session : s’il est vrai que l’Homme aime qu’on lui narre des histoires, il l’est encore plus que bien peu le font correctement sans un travail minutieux en amont. La maîtrise d’un sujet n’est aucunement la garantie d’une présentation captivante bien au contraire…
L’accessoire et l’essentiel s’entremêlent, la gestuelle trahit les émotions du moment et chacun d’eux se répondent l’un l’autre tel un larsen, entraînant bien souvent confusion, gêne de l’intervenant et perte d’écoute de l’auditoire. Une des causes principales en est notre perception du corps. Nous négligeons ce dernier, vecteur puissant de communication et attachons trop d’importance à l’esprit.
Il est alors assez fascinant de voir à quel point le propos d’un intervenant devient limpide et presque évident dans la bouche de Gérald Garutti lorsqu’il propose quelques axes d’amélioration “simples” que sont la recherche de mots clefs les plus pertinents, la stabilisation du corps, la pose du regard…Cette évidence ne l’est plus dès que l’on se penche à nouveau sur la feuille blanche de notre sujet qui nous renvoie à l’ampleur de la tâche à accomplir pour s’approcher de la solution proposée par le formateur.
Cette initiation m’a donc clairement donné envie de participer aux formations de deux jours dont cette demi journée n’était que l’introduction. Partageant les valeurs agiles prônées par Valtech, je ne conçois pas uniquement mon métier sous l’aspect technique. Notre but est la qualité logicielle et cette qualité naît de la relation avec le client et les différents acteurs du projet. Nous devons écouter et convaincre quotidiennement pour donner un vrai sens à la notion de service. Le contenu de ces formations vous y aidera à n’en pas douter.
Organiser sa pensée et construire son discours
Prendre la parole en public : utiliser les arts oratoires et les techniques d’acteur
Gérer l’oral et convaincre ses interlocuteurs grâce aux techniques d’acteur