Planet Valtech Alumni

March 09, 2010

March 08, 2010

Revue du web du 8 Mars

Les tweets de la semaine

 http://twitter.com/rcravens/status/9824210272 Hudson est un serveur d’intégration continu (et populaire), si vos poches ne sont pas assez profondes pour TFS, Hudson peut être une bonne alternative.

http://twitter.com/craighead/statuses/9837013687 Java vs C#, maintenant en version Robots

http://twitter.com/UdiDahan/status/9858485324 on en parlait dans notre première revue du web : NServiceBus passe en version 2

http://twitter.com/gruuf/statuses/10073663444 un sondage autour des frameworks d’inversion de contôle / injection de dépendances dans le monde .NET

La question Stackoverflow

 http://serverfault.com/questions/45516/recommended-logparser-queries-for-iis-monitoring Nous allons faire un petit tour sur serverfault.com cette semaine. Ce dernier est la première spin-off de SO (il existe une version en marque blanche même). On y trouve des questions sur la gestion des systèmes informatiques en général : installation serveur, les systèmes d’exploitation, les bases de données etc. La question de la semaine énumère des requêtes possibles contre les fichiers de log de IIS : fichier le plus demandé, user-agent le plus présent etc. Nécessaire quand on a fini sa belle application et qu’on la rend disponible sur le grand Interweb.

Actualités Microsoft 

Les MVP se réunissent chaque année sur le campus de Microsoft, dans cet article Dzone fait un résumé. Ce qui est toujours surprenant c’est que cet évènement réuni des centaines de participants mais qui sont tous rendu nuets par un accord de non divulgation (les fameux “NDA”). En attendant MIX approche et Microsoft confirme du bout des lèvres que la migration vers Windows Phone 7 ne sera pas possible pour les téléphones actuels. On pourra consulter la liste des sessions consacrées au nouveau système d’exploitation.

Actualités “Alt.NET”

Le groupe Alt.net virtual européen organise un session spéciale  le 6 avril 2010 sur le mouvement “Software Craftsmanship”avec du beau monde. On pourra aussi écouter la série de podcast “Ignite your coding” organisée par le groupe d’évangélistes de Microsoft Canada dont le premier invité est Andy Hunt, co-auteur du livre The Pragmatic Programmer.

De l’autre côté

Flash, la descente aux enfers continue. L’enfant chéri des années 2000 n’en finit plus d’être traité comme le nouveau vilain. Après avoir révolutionné l’accès aux contenus vidéos puis connu une percée significative dans le monde des applications d’entreprise avec Flex, la technologie est maintenant vue comme un handicap. Tout cela provient du succès de l’íPhone qui a accentué les défauts du runtime propriétaire. Il est  ironique de voir Apple qui a dû founir un SDK natif car les applications web n’étaient pas suffisantes faire “cause commune”avec les défenseurs du standard HTML contre Flash. The Register rapporte que Virgin America abondonne Flash pour HTML dans ses sites internet (70 % du revenu). Il est intéressant toutefois de remarquer que Flash restera utilisé dans les systèmes comme les kiosques “Touch Screen ”dans les aéroports. Finalement on revient aux basiques : un internet standard pour du contenu à destination d’appareils multiples (navigateurs différents avec des plateforme différentes) et des frameworks plus puissants pour des applications en environment plus contrôlé.

Un projet

Shazzam est un outil pour générer des Pixels Shaders. Le code source est disponible sur codeplex. Il existe des bibliothèques d’effets 3D existants mais cet outil vous permet de générer le code pour vos propres créations. Basé sur HLSL (High Level Shading Language) Microsoft vous permet d’ajouter des directives de transformations de pixels et un compilateur DirectX permet de générer le code machine nécessaire. Il suffit d’un wrapper C# pour les utiliser ensuite dans vos applications. Après avoir installé l’utilitaire et le SDK DirectX vous pouvez modfiier le code des effets via le langage HSLSL :

HLSL

Ici l’effet bloom est appliqué sur une image de test :

image

Le code C# généré expose les Dependecy Properties qui vont bien pour paramétrer les effets :

ShaderGenerated

by Matthieu Guyonnet-Duluc at March 08, 2010 12:00 PM

March 05, 2010

March 03, 2010

March 01, 2010

Revue du Web du 1er Mars

Les tweets de la semaine

 http://twitter.com/loiane/statuses/9694669388 Travailler pour la NASA en programmant du Silverlight.

http://twitter.com/veryfancy/statuses/9582184256 On utilise régulièrement System.Uri sans vraiment y faire attention, voici un petit rappel de son contenu

http://twitter.com/dataartist/statuses/9575476761 une requête Linq peut compliquer le code

La question Stackoverflow

 http://stackoverflow.com/questions/2346394/should-i-use-byte-or-int Pouquoi utilsier un type int plutôt qu’un byte (ou un short) ? Un dilemme entre performance (ou sur-optimisation) et sémantique.

Actualités Microsoft 

Avec la dernière version de Visual Studio (2010 RC) on peut dire que le développement WPF/Silverlight est devenu une expérience plaisante. Le mode prévisualisation fonctionne pour les deux technologies et l’intellisense autour des expressions de binding a été améliorée. Mais une des nouveautés intéressantes réside dans le support au design time des types d’objets bindés aux contrôles. Les propriétés du namespace d: permettent de spécifier des valeurs ignorées au moment de la compilation et donc du runtime. On les connaît déjà pour la hauteur et la largeur des UserControl. Karl Shifflett introduit d:DataContext et d:DesignInstance qui permet de spécifier son type pour ensuite voir les propriétés dans les boîtes de dialogue de databindig.

En parlant de Silverlight, la prochaine que vous en faites une démo et que tout le monde baille, montrer cette vidéo de Bing à la conférence TED par Blaise Aguera y Arcas (aux alentours de 4:45) :

image de la vidéo montrant un prototype de réalité augmentée avec Visual Studio

Oui c’est bien une “House View” à l’intérieur d’un bâtiment avec un flux direct de vidéo en sur-impression. Street View est tellement 1996.

Actualités “Alt.NET”

On connaît tous NHibernate ce framwork de mapping objet-relationnel qui semble être là depuis toujours et même avant si on considère sa version Java. Il fait aussi parti des projets phares dans le monde .NET car il est un des premiers  projets open source ayant un grand succès. Son développement a été financé dans le passé par  la passion de certains développeurs, des entreprises ont aussi donné du temps de développent par exemple sur le founisseur Linq.

Voux pouvez faire un don directement en cliquant sur ce lien :

Click here to lend your support to: NHibernate and make a donation at www.pledgie.com !

De l’autre côté

Pour envoyer des messages entre systèmes on connaît MSMQ (Microsoft Message Queuing). Un des équivalents dans le monde Java est JMS (Java Message Service), un standard implémenté par différents produits dont les plus connus sont IBM MQ, TibCo. Dans ce billet Xebia nous introduit à AMQP (Advanced Message Queuing Protocol). Ce protocole initié par JP Morgan se concentre sur la performance et propose les différents cas d’utilisation d’un systèmes de messages (Store and Forward, Point to Point etc). Les deux implémentations connues sont RabbitMQ en Erlang et  OpenAMQ en C++. La spécification 1.0 est attendue pour cette année et on apprend aussi que Microsoft a collaboré avec QPid (projet Apache autour de AMQP).

Un projet 

Enterprise Library va bientôt connaître une nouvelle version, la beta de la version 5 est déjà disponible et une beta 2 doit sortir le 15 mars pour une version finale attendue juste après la sortie de Visual Studio 2010. Dans le framework on trouve Unity 2, le framework d’injection des dépendances de Microsoft. Comme pour la version précédente il existe deux modes : par fichier de configuration ou par code. Le premier offre maintenant un outil (en WPF BTW):

outil de configuration de UNity

ajout d'un mapping

Mais Unity offre aussi une API fluent :

var container = new UnityContainer();
container.RegisterType<IRepository<>, Repository<>()
.RegisterType<IContactRepository, ContactRepository>();
Avec de nouvelles méthodes comme IsRegistered pour vérifier l’existance d’un mapping,

Les deux nouveaux lifetime managers (les objets qui déclarent quand instancier ou réutiliser une instance au moment de la résolution du type) sont HierarchicalifetimeManager (les containes enfants ne partagent pas les instances des containers parents qui sont singleton) et PerResolveLifetimeManager (même instance dans un graphe donné : mon IRepository est utilisé comme propriété à deux endroits différents dans deux objets liés à une instance construite par Unity, j’aurai la même référence pour une résolution).

by Matthieu Guyonnet-Duluc at March 01, 2010 01:00 PM

February 25, 2010

Soirée anniversaire du French Scrum User Group le 30 mars, inscriptions ouvertes :-)

Le French Scrum User Group a déjà un an !

Cette année a été riche et a montré que Scrum commençait à connaitre une adoption massive. A tel point, qu'il faut plutôt parler de transition vers Scrum avec des demandes de plus en plus forte d'accompagnements à l'échelle non plus d'une équipe de développement mais plutôt à l'échelle d'organisations complètes.

Ce phénomène de transition a un impact

  • non seulement côté équipes logicielles avec des interrogations sur le rôle de chacun et sur la façon de collaborer en équipe,
  • mais aussi côté équipes "business" avec des échanges plus réguliers pendant les phases de développement logiciel,
  • et même côté services achats, RH, ...

Bref, la valeur d'une démarche agile étant de plus en plus reconnue et les organisations souhaitant bénéficier de plus en plus vite de cette valeur, la demande en termes de formation, de coaching, d'outillage et d'échanges de pratiques entre utilisateurs se développe fortement.

Profitons de cette soirée pour échanger sur l'ensemble de ces sujets ! Pour information, 4 tracks parallèles seront proposés :

Track 1 : Product Owner & Contractualisation : La contractualisation des projets agiles, rôle et position des "Product Owners", des MOAs, du “business”, etc. Track 2 : Managers et Agilité : Challenges et enjeux pour les chefs de projet : quel est mon rôle dans un projet avec Scrum ? Scrum Master ? Le nouveau rôle des middle managers d'équipes agiles ? Track 3 : Equipes : Les techniques et pratiques qui marchent pour les équipes agiles ? Track 4 : Outils : Quels outils pour soutenir une démarche agile/Scrum ? Retours d'expériences, innovations, produits, ...

Rendez-vous ici pour les inscriptions !

Consulter le site du French Scrum User Group pour prendre connaissance du programme détaillé (très bientôt disponible).



by Xavier Warzee at February 25, 2010 05:00 PM

February 22, 2010

February 21, 2010

My wikispaces site will close at the end of February


My Wikispaces subscription will expire at the end of February, 2010, and I am planning to let it lapse. If you have any links or bookmarks to the site, at http://davenicolette.wikispaces.com/, please be aware the links will stop working when the subscription expires.

I have no complaints about the Wikispaces service. They do a fine job, and if you need a hosted wiki I would gladly recommend Wikispaces. They have very good availability, editing content is easy, the site is responsive, and pricing is reasonable.

Unfortunately, over the years I've accumulated content on multiple hosted sites and I have material scattered all over the place, including a good deal of obsolete and redundant content. I need to get it consolidated and organized for logistical and cost reasons.

Some of the material from my wikispaces site will appear online again eventually. In the meantime, please feel free to download anything you want from the wikispaces site while it is still available.

by Dave Nicolette at February 21, 2010 03:51 PM

February 19, 2010

February 18, 2010

February 17, 2010

A little Scala parser

package myparser;

import scala.util.parsing.combinator._

//
// Arithmétique: un petit parser
// Thierry
//
class Arithmétique extends JavaTokenParsers {
def expr: Parser[Double] = term ~ rep("plus" ~ term | "minus" ~ term) ^^ (evaluate(_))
def term: Parser[Double] = numb ~ rep("multiply" ~ numb | "divide" ~ numb) ^^ (evaluate(_))
def numb: Parser[Double] = fact ~ rep("expo" ~ fact) ^^ (evaluate(_))
def fact: Parser[Double] = floatingPointNumber ^^ (_.toDouble) | "(" ~> expr <~ ")"

def evaluate(value: ~[Double, List[~[String, Double]]]) : Double = value match {
case lhs~ops => (
(lhs /: ops)((acc, op) => op match {
case "plus"~rhs => acc + rhs
case "minus"~rhs => acc - rhs
case "multiply"~rhs => acc * rhs
case "divide"~rhs => acc / rhs
case "expo"~rhs => Math.pow(lhs, rhs)
})
)
}

def parse(data: String) = parseAll(expr, data)
}

object MyParser extends Arithmétique {
def main(args: Array[String]) {
val expr1 = "1 plus 2 expo 2"
val res1 = parse(expr1)
println(expr1 + " => " + res1.get)

val expr2 = "2 multiply (3 plus 7)"
val res2 = parse(expr2)
println(expr2 + " => " + res2.get)

val expr3 = "2 multiply (3 plus 7) multiply 3.14 divide 3.0"
val res3 = parse(expr3)
println(expr3 + " => " + res3.get)

val expr4 = "((2 multiply (3 plus 7)) plus 4) divide 2"
val res4 = parse(expr4)
println(expr4 + " => " + res4.get)

val expr5 = "10 expo 10"
val res5 = parse(expr5)
println(expr5 + " => " + res5.get)

val expr6 = "10 expo (5 divide 2)"
val res6 = parse(expr6)
println(expr6 + " => " + res6.get)
}
}

by Thierry Janaudy at February 17, 2010 04:10 PM

February 15, 2010

Revue du web du 15 février

Les tweets de la semaine

http://twitter.com/tormodfj/statuses/8900636543 une nouvelle version de l’éditeur de code est arrivée, non non, ce n’est pas ce que vous pensez

http://twitter.com/darthpanda/statuses/8905432346 une liste de méthodes d’extension pour toutes les situations de la vie

http://twitter.com/ManningBooks/statuses/8912372298 Un article d’introduction sur l’intégration continue en .NET par les auteurs d’un livre qui sort prochainement sur le sujet

La question Stackoverflow

http://stackoverflow.com/questions/2237275/what-does-default-keyword-mean-in-c Un peu d’humour aujourd’hui : cela part mal on dirait pour cet utilisateur de Visual Studio.

Actualités Microsoft 

Depuis la semaine dernière les rumeurs les plus folles courent sur la (très attendue) prochaine version de Windows Mobile : Windows Phone Series 7. Dans ce billet on trouve quelques hypothèses dont un SDK basé sur Silvelright version mobile (un mix de 3 et 4), une version de Visual Studio Express dédiée et la fin du multitasking. On en sera sans doute plus au cours de la semaine avec la conférence Mobile Wolrd Congress qui se tient à Barcelone.

Actualités “Alt.NET”

 GIT est en passe de supplanter Subversion le système de gestion de configuration alternatif au composant dédíé de TFS. Dans un webcast du groupe Europe Virtual Alt.NET James Gregory nous parle de l’utilisation de l’outil. On pourra consulter l’excellent add-in GIT Extensions pour les utilisateurs de Visual Studio.

De l’autre côté

La version 3.2 d’Open Office est sortie. Est-ce devenue une anomalie dans un monde de plus en plus tourné vers les applications web (Google Docs, la future version web d’Office, Zoho…). Certains regrettent aussi la communuaté de développeurs peu dynamique, le fait que C++ soit le langage principal n’a pas joué en sa faveur (bien qu’Apple soit arrivé à rendre sexy le développement avec pointeur, mais Open Office n’est pas un iPhone). Le récent rachat de Sun par Oracle a fait beaucoup coulé d’encre à cause de Mysql mais peu sur Open Office. Peut-on s’attendre à une mort lente ?

Un projet 

 MongoDB est un système de stockage orienté document. Ces documents sont stockés au format binaire et les requêtes utilisent un langage similaire au JSON pour dialoguer avec le système de base de données. Contrairement aux systèmes relationnels les SGBD document n’ont pas de structure fixe, deux documents peuvent partager un certain nombre de champs mais ce n’est pas obligatoire.

Dans ces deux billets Daniel Wertheim nous montre comment utiliser MongoDB dans un environnment C#. Après télécharger MongoDB la console nous permet d’ajouter des données :

db.Notes.save({ Title: "The first document", Body: "My first document stored in MongoDB.",

Tags: ["MongoDB", "Getting started"]})

le requêtage :

db.Notes.find({Tags : "Getting started"})

Il existe un pilote c# pour interagir avec la base de données à travers une interface JSON (avec des litérales ou en sérialisant des objets vers JSON) :

var firstNote = new Note {
	Title = "First note using Serialization",
	Tags = new string[] { "MongoDB", "Getting started" },
	Body = "Some nice text." };
//Convert Note to Document and insert it
var firstNoteDocument = json.DocumentFrom(firstNote);
notes.Insert(firstNoteDocument);

et le requêtage :

var noteDocument = notes.FindOne(new Document { { "Tags", MongoDBNull.Value } });
25
var note = json.ObjectFrom<Note>(noteDocument);
Daniel montre ensuite l’utilisation de classes proxy générées avec Castle pour simplifier la sérialisation. 

Auto-promotion

nVentive organise une série de bootcamps sur des sujets très variés comme WPF, TDD ou encore NHibernate.Tous ces ateliers sont orientés développement d’applications d’affaires et font une large place aux labs.

Voici une liste des formations et leur description plus complète.

by Matthieu Guyonnet-Duluc at February 15, 2010 03:41 PM

Merging the developer and tester roles, part 2


A few days ago, I wrote about the idea of merging the roles of developer and tester, and touched on some of the ways this could improve software delivery processes. That post considered resistance to the idea on the part of people who self-identify as testers. What about resistance on the part of people who self-identify as developers?

Naresh Jain posted an interesting tweet the other day that is relevant to this topic. It reads as follows:

Software developer means "person who writes code" while the English word developer implies EVERYTHING required to build something.

The well-known testing specialist Michael Bolton, in a response to a comment on his blog, recently wrote:

But when it's not universally practiced, practiced at varying levels of quality, and addressed towards discovering solutions rather than discovering problems, I don't see any reason to relax vigilance.

In context, "it" refers to test-driven development, or more generally, good software development practices that are not widely used at present. By "vigilance" he means vigilance in looking for the kinds of bugs developers really ought to be embarrassed to deliver to testers in the first place, but (strangely) aren't.

Personally, I've been quite astonished at some of the things developers have said to me with respect to testing and code quality in the past few years. In 2008, I spent a day visiting development teams and IT management at a fairly large company, as a sort of extended interview process pursuant to a coaching opportunity. I asked the developers how they ensured their code was sound before handing it off to the testing group. I expected they would say they did a bit of ad hoc manual testing, at least, before proudly showing their code to anyone else. They didn't. They found the question puzzling. They felt that it was the responsibility of the testing group to find bugs in their code. Quite honestly, I did not understand how they could be satisfied with that; how they could look themselves in the bathroom mirror every morning and feel that they were really professionals. I asked them, What do you do, then? Do you just compile the code and throw it over the wall? They found that question puzzling, too. They glanced at one another for moral support, and shrugged. And that is not the only example of this attitude that I've encountered over the years. I can't help but wonder, if a developer doesn't bother to make sure his/her code works, then what function does he/she serve in the organization?

If I were one to theorize on the basis of very little data (and I am, as it happens), I would theorize that this attitude is largely the result of two influences:

  1. Behavioral conditioning. Developers have produced crap for so many years, and testers have ferretted out trivial programming errors for so many years, that everyone assumes this is the way things must be. We have become so accustomed to the problem that we accept it as normal. We don't even see it as a "problem."
  2. The lure of the next challenge. Most developers enjoy figuring out a design that solves a problem. Once they've figured out how to solve a problem, following up to tie off all the loose ends just isn't as much fun. They want to move on to the next problem. It takes a certain amount of self-discipline to finish up all the little details of the current problem before moving on. If you have a handy excuse, like "it's the testing group's job to find my bugs for me," then it's easy to succumb to the lure of the next interesting problem.

 

For the very simplest of applications, it may be feasible to promote code directly from development to production. But what about software that runs in enterprise IT environments that have stringent non-functional requirements? What about embedded software that has to be tested with the hardware before the product can be mass produced? Depending on the domain and context, additional testing may be required in between development and production; testing that the development team may not be set up to perform. This is where testing specialists can add significant value. I think this will remain true even when (or if) my vision of development generalists becomes a reality.

For context, let's assume an enterprise IT organization with certain characteristics. This picture will be familiar to those who work in large IT shops. The organization has a SOA environment that provides an ESB for accessing shared technical assets, back-end legacy applications, and externally-hosted services. The SOA environment provides single sign-on support, most of the -ilities, and supports multiple classes of service with an appropriate charge-back structure for internal departments that use IT resources. Typically, business applications are based on Web technologies, even though they are internal applications. The technical infrastructure comprises different network subdomains with different security profiles. The internal webapps use the familiar MVC-based layered architecture and may be deployed in multiple subdomains on various configurations of real and virtual servers, depending on operational requirements.

For development, business application development teams work in a technical environment that is far different from the production environment. Let's assume the company uses Java and one of the popular Java-based webapp frameworks for these internal business apps. For development and basic testing purposes, people may deploy their code to a single instance of a container such as Jetty or Tomcat. This may be embedded in an IDE, such as Eclipse or JetBrains, or it may run in standalone mode on the developer's workstation and/or on a test server or continuous integration server. Nearly all the development and testing work in this environment uses a monolithic deployment of the application; that is, all architectural layers are deployed together under one instance of the server or container, and there is one instance of each layer.

In the production environment, different layers of the application may be deployed in different subdomains. For instance, the presentation layer may be deployed to the outer DMZ, the business layer to the inner DMZ, and the persistence layer also to the inner DMZ, where it interacts with the ESB and not directly with database systems or other back-end resources that may reside in the core subdomain. Presentation and business layer application components may not run under the same container, and neither may run under the containers used in the development environment. Client-side niceties such as Web 2.0 scripts actually live outside the corporate network perimeter altogether. The presentation layer code is subject to various mechanisms external to the application, such as single sign-on support, reverse proxies, load-balancing switches, or what-have-you. To support changing workloads, operations may redeploy portions of the application to more or fewer virtual server instances. To support availability, recoverability, and performance requirements, operations may move the application from one server cluster to another (and no application can depend on "owning" a server), add or remove hardware resources, and so forth. All the business applications publish events that feed logging, audit trail, chargeback, fraud detection, license management, and business intelligence facilities. None of this is directly testable in the development environment, and yet new or modified applications must not cause problems in the production environment.

That means there is another level of testing to be done in between development and deployment. This is where testing specialists can add the most value.

The purpose of this level of testing is not to "find bugs." The purpose is to gather information about the operational parameters of the software, to be used in capacity planning, workload balancing, hot failover site configuration, quality of service management, and other matters above and beyond the basic functionality of the application. To do this, testers must be given software that works; not software so full of trivial bugs that it won't even run.

Development teams have the professional responsibility to deliver code that meets all functional requirements and as many of the non-functional requirements as are feasible to test in the development environment. Testing teams have the right to expect the applications they receive already work. Otherwise, they cannot perform the level of testing they need to perform for the benefit of the enterprise.

Some developers choose not to "believe in" contemporary software engineering techniques that help us deliver working code with relatively little personal stress. That's fine. Everyone has the right to "believe in" whatever they please. As long as the developers deliver code that meets all functional requirements and as many of the non-functional requirements as possible, they are free to use any methods; even methods that make their own lives harder than necessary, if they insist. The only thing they are not free to do is to continue delivering crap, as in the previous century.

One of the most straightforward ways developers can learn to deliver working code effectively is to learn the skills of testing. Those of us who pursue a generalizing specialist path in our career development have found that there is a sort of mental "switch" to be flipped; we shift ourselves from development mode to testing mode. Thinking as developers, our goal is to ensure our code performs its intended functions and handles "normal" error conditions gracefully. Thinking as testers, our goal is to find the cracks in the wall; find the ways our code can be broken. This is something that requires awareness and practice, but is not such a great mental leap that it actually calls for two different individuals on the team, not to mention all the waste inherent in silos, hand-offs, WIP inventories, and back-flows between the two specialists. More than anything else, though, it requires us to accept our professional responsibility to deliver working code, and stop depending on testers to find our trivial programming errors for us. They have better things to do than that.

by Dave Nicolette at February 15, 2010 02:28 PM

February 12, 2010

Entretien avec Gojko Adzic sur les tests d’acceptation en mode agile

Pendant la conférence CITCON'09, j'ai particulièrement apprécié l'intervention de Gojko Adzic sur les tests fonctionnels. Nous avons alors convenu d'un entretien. En voici une retranscription : An Interview With Gojko Adzic about Agile Acceptance Testing


by Xavier Warzee at February 12, 2010 10:14 PM