Register Login

 

Welcome to the Coach Factor blog. Here you will find all of our ideas on software development. Subscribe at  http://blog.nventive.net.

# Thursday, July 22, 2010

La revue du web pars en vacances et reviendra le 6 septembre, si vous avez des remarques, des choses que vous aimeriez voir plus (ou d’autres moins) n’hésitez pas à nous contacter ou à laisser un commentaire !

Thursday, July 22, 2010 2:00:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
.net | Revue du Web
# Monday, July 19, 2010

Les tweets de la semaine

https://twitter.com/PDCEvent/status/18358350630 Finalement il y aura une PDC … à Redmond c’est moins sexy que L.A. mais on pourra visiter la cafétéria de Microsoft

http://twitter.com/WindowsAzure/status/18358737473 Qui veut son petit cloud “Maison” ?

http://twitter.com/zubairdotnet/status/18507840532 SQL CE 4 aime NHibernate et Entity Framework

La question Stackoverflow

http://stackoverflow.com/questions/282099/whats-the-hi-lo-algorithm l’algorithme Hi-Lo est utilisé par NHibernate pour générer des clés primaires, mais son application est intéressante pour toute application travaillant en mode déconnecté ou asynchrone.

Actualités Microsoft

On en parle beaucoup sur le Tweetosphère, la CTP4 de Entity Framework Feature (une sorte d’intermédiaire entre le SP et le patch) apporte une vraie expérience Code-First au Framework ORM de la firme de Seattle : on peut maintenant mapper par convention, par une API Fluent ou enfin par attribut.

Actualités “Alt.NET”

On a tous plus ou moins utilisé le concept d’adresse, après le Hello World c’est peut-être l’exemple type de classe avec le ShoppingCart sur un site web. Sur le groupe de discussion DDD est intervenue une discussion sur le concept d’Adresse (http://tech.groups.yahoo.com/group/domaindrivendesign/message/18941)

De l’autre côté

Pour la plupart nous sommes plutôt des “software guy”, on connaît un peu le hardware soit parce qu’on a construit son PC ou parce qu’on doit réparer le réseau wifi de papa. Mike Bailey nous parle dans ce billet de TCP avec notamment la session de John Rauser à la conférence Velocity 2010. Il s’en passse des choses sur le résau quand on consulte une page web, et pas seulement sur le serveur. Dans un autre billet il nous parle de la latence, mesure importante pour lui étant basé en Australie, pays en périphérie des grands réseaux de fibres.

Un Projet

Pour l’été votre revue du web passe en bas régime, pas de rubrique “Un projet” avant la rentrée. Si vous avez des applications ou Framework préférés que vous aimeriez voir présentés dans cette rubrique, n’hésitez pas à nous contacter !

Monday, July 19, 2010 2:00:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
.net | Revue du Web
# Monday, July 12, 2010

Les tweets de la semaine

http://twitter.com/SyntaxC4/status/17918097961 Microsoft fait une offre d’introduction à Azure avec du temps gratuit, une base de données etc. Mais est-ce vraiment suffisant pour séduire les développeurs ?

http://twitter.com/skillsmatter/status/17856765757 une newsletter de SkillMatters autour de DDD.

http://twitter.com/scottgu/status/18055922575 une conférence sur ASP.NET MVC

La question Stackoverflow

http://stackoverflow.com/search?q=webmatrix stackoverflow est un bon outil pour apprécier une nouvelle technologie comme l’ensemble des outils derrière WebMatrix

Actualités Microsoft

Bien qu’on entend déjà quelques rumeurs sur Windows 8 (dont un AppStore, oui oui …) on apprend que Windows 7 est le premier des systèmes d’explotations dont la version 64-bit a presque 50% de part de marché. Vista n’était qu’à 11% et XP moins de 1 %.

Actualités “Alt.NET”

Microsoft a eu plusieurs initiatives “Open Source” ces dernières années. Miguel de Icaza en parle de façon très factuelle dans ce billet où il cite les bibliothèques intégrées dans Mono qui proviennent de Microsoft. Instructif.

Mary-Jo Foly nous parle de la prochaine version de Windows Home Server (codename “Vail”) et d’une nouvelle variante destinée aux petites entreprises : Aurora.

Ah sinon on avait presque oublié, il paraît maintenant que votre maman ou votre papa font pouvoir coder grâce à WebMatrix, le nouvel IDE .NET, attention aux questions lors des repas de famille …

De l’autre côté

Dans un long article, InfoQ nous introduit à la toute dernière version de Tomcat, le container web de la fondation Apache, qui entre en beta.  On peut rappaocher Tomcat 7 d’un serveur ASP.NET en .NET. Il a connu une grosse popularité quand les containers lourds (i.e. web et aussi EJB) comme WebSphere, WebLogic ont croulé sous la complexité des EJB2. Il est devenu aussi une brique de l’offre de Spring. La version 7 apporte le support de l’API Servlet 3.0 (annotations, généeriques dans les classes de l’API) mais aussi JSP et EL (Expression language) 2.2  mais aussi un mode “allégé” pour être incoporé dans des applications. Une fonctionnalité manquante toutefois : la spécifications du profile web de Java 6 EE qui incorporait WeBeans (alias Seam).

Un Projet

Pour l’été votre revue du web passe en bas régime, pas de rubrique “Un projet” avant la rentrée. Si vous avez des applications ou Framework préférés que vous aimeriez voir présentés dans cette rubrique, n’hésitez pas à nous contacter !

Monday, July 12, 2010 2:00:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
.net | Revue du Web
# Monday, June 28, 2010

Les tweets de la semaine

http://twitter.com/andreasohlund/status/16764086585 NServiceBus avec d’autres systèmes de messaging que MSMQ ? C’est possible et officiellement supporté dans la prochaine version.

http://twitter.com/fabiomaulo/status/16766319840 une liste des fonctionnalités de NHibernate

http://twitter.com/mskkpr/status/16897746315 notre premier tweet en japonais pour annoncer la 3ème preview d’Internet Explorer 9

La question Stackoverflow

 http://stackoverflow.com/questions/2427015/how-to-do-pythons-zip-in-c Un nouvel opérateur Linq de C# 4.0 : Zip pour associer les élèments de deux listes.

Actualités Microsoft

Cette semaine cela fait 10 ans que Microsoft donnait un nom au publique pour son prochaine Framework de développement : .NET Framework. Les versions beta sont arrivées pendant l'été 2000 et la première release s'est faite en février 2002. Et 8 ans après on fêtait la quatrième version, que de chemin parcouru !

Actualités “Alt.NET”

Norway Developers Conference (NDC 2010) s’est tenue la semaine dernière à Oslo. Les vidéos sont disponibles. On y a parlé autant de C# avec John Skeet et Eric Lippert, ASP.NET MVC avec Rob Conery, Domaine Driven avec EF par Julie Lerman, Mono et EC2 avec Jackson Harper, IronRuby par Shay Friedman. Plein de choses pour alimenter les journées à la plage au lieu de prendre dans la glacière un mauvais roman policier.

De l’autre côté

Avec l’arrivée prochaine de Windows Phone 7 qui va avoir son magasin d’applications à l’image de ce qu’on trouve sur les autres plates-formes comme iPhone et Androïd, les développeurs commencent à coder des prototypes pour le prochain système d’exploitation. Dans ce (long) billet Tomi T Ahonen, consultant dans le domaine des services mobiles et ancien de Nokia, essaie de démystifier le hype autour du succès des applications mobiles pour iPhone en terme financier. Depuis 2008 5 milliards d’applications ont été téléchargées pour un revenu de 1.4 milliards de dollars et le rythme des ventes annuelles augmentent beaucoup. 73% des applications sont payantes mais 85 % des téléchargements sont des applications gratuites. Mais derrière ces chiffres se cache une réalité un peu moins rose : le revenu annuel moyen par application est de 3.000 $ et la médiane se situe à 682 $. L’analyste termine en mentionnant que malgré le succès du cornet acoustique de El Jobso, celui-ci ne représente “que” 13% du marché des téléphones et que des applications visant un facteur plus commun comme le SMS ont beaucoup plus de succès.

Cela ne va pas rassurer les futurs développeurs de Windows Phone 7, car en fragmentant le marché les applications stores (changer de téléphone aujourd’hui veut aussi dire racheter des logiciels pour la nouvelle plateforme) n’ont pas forcément rendu service aux entreprises. Toutefois le marché des applications mobiles étaient presque inexistants avant l’arrivée de l’iPhone et beaucoup d’entreprises ont développées leur première stratégie mobile autour de cet appareil. D’autres systèmes et d’autres technologies vont sans doute apparaître pour abaisser le coût de développement multi-plateformes (comme le fait MonoTouch ou HTML5).

Monday, June 28, 2010 2:00:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
.net | Revue du Web
# Monday, June 21, 2010

Les tweets de la semaine

http://twitter.com/WindowsAzure/status/16250215822 6 mois après le lancement commercial de Windows Azure, Microsoft a présenté à la TechEd les nouveautés

 http://twitter.com/#search?q=%23ndc2010 La conférence NDC 2010 semble avoir été un succès par le nombre de tweets générés

http://twitter.com/SamVanhoutte/status/16375233855 Workflow dans le Cloud, la dernière tentative pour donner un peu d’amour à WF.

La question Stackoverflow

 http://stackoverflow.com/questions/2349378/new-programming-jargon-you-coined une série de termes inventés par des développeurs, on retrouvera sans doute des situations de sa propre vie de codeur.

Actualités Microsoft

Office 2010 est sorti aussi pour le grand public et dans la foulée la version de Word, Excel, Power Point et OneNote en ligne a été publiée pour les USA, le Canada, l’Irlande et la Grande-Bretagne.

WordWebApps

powetpoint

La version mobile (par exemple avec l'iPhone ci-dessous) permet de visualiser un rendu graphique ou textuel des documents, ainsi que la recherche à l’intérieur.

IMG_0052IMG_0051

IMG_0053IMG_0054

Les éditeurs seront intégrés dans la prochaine version Hotmail qui est en train d’être déployée et celle-ci a de bonnes critiques, même de la part de lifehacker

Actualités “Alt.NET”

Skills Matters a encore frappé fort avec DDD eXchange 2010 une conférence d’une journée consacrée au thème du Domain Driven-Design avec Eric Evans, Udi Dahan, Greg Young, Ian Copper et Gojko Adzic. Ce dernier a écrit un compte-rendu intéressant sur cette journée.

De l’autre côté

On a déjà parlé ici de Python et de son Framework star, Django, et des bases de données non relationnelles. Il semblerait que les deux se marient bien. Django a une version qui supportent des bases de données “NoSQL”: Django-nonrel. Pour l’instant MongoDb est le backend le plus documenté avec AppEngine. Ceci est intéressant car si le monde des moteurs de stockage non relationnel a fait beaucoup de bruit, celui-ci était très lié à des systèmes très très particuliers comme Twitter, Facebook etc. Ici Django est un framework web “comme les autres”. Le début de la popularisation du NoSQL ?

Un projet

Nhibernate Workbench est la dernière application qui essaie d’améliorer l’outillage autour de NHibernate, notamment le requêtage par HQL, le langage propriétaire du Framework ORM.

Après avoir téléchargé et décompressé l’application, il nous faut créer un nouveau projet et y ajouter un fichier de configuration (on peut reprendre son app.config/web.config existant) et une dll/exe contenant le mapping (sous forme de fichier hbm, Fluent NHibernate ne semble pas supporter pour le moment).

assemblies_config

L’éditeur offre la complétion du code sur les types des objets persistés :

intellisense

La requête SQL générée est aussi affichés avec les résultats:

resultat

L’expérience est somme toute basique mais satisfaisante. Sachant que le HQL peut-être parfois dur à maîtriser, cet outil peut-être pratique pour apprendre pas à pas le langage.

Monday, June 21, 2010 2:00:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
.net | Revue du Web
# Monday, May 17, 2010

Les tweets de la semaine

 http://twitter.com/navin_l/status/13724890104 un tour d’horizon rapide des outils de Build en .NET

http://twitter.com/garethky/status/13808692076 savoir lire entre les lignes de la documentation NHibernate

http://twitter.com/TheDotNetMan/status/13870021633 une liste de choses à surveiller quand on utilise LinqToSql et IQueryable en général

http://twitter.com/shanselman/status/13941544036 ah les erreurs du passé …

La question Stackoverflow

http://stackoverflow.com/questions/40090/is-overloading-the-only-way-to-have-default-function-arguments-in-c la surcharge de méthode en C# et les impacts de la version 4 du langage

Actualités Microsoft

Microsoft doit présenter aujourd’hui d’après VentureBeat une nouvelle version de son service en ligne de courrier électronique : Windows Live Hotmail. Le premier service de messagerie sur Internet s’est endormi sur son succès au profit de GMail (un peu comme Internet Explorer l’a fait avec Firefox). Microsoft a donc pour cette nouvelle version mis les bouchées doubles : vitesse, vue conversation, tagging, version mobile améliorée, intégration des réseaux sociaux (attention à l’effet Buzz …) et intégration avec les applications Office 2010 Web. Ces dernières seront disponibles avec la sortie grand publique de la suite logicielle au mois de juin mais la sortie pour les entreprises a eu lieu la semaine dernière.

Actualités “Alt.NET”

Andreas Öhlund, un des développeurs de NServiceBus a posté une présentation d’introduction au Framework de messaging. Ceci n’est qu’un survol mais il est complet : rôle dans une architecture, configuration, utilisation basique possible, la gestion des processus longs, etc. 

De l’autre côté

Dans une interview (fait très rare pour Larry Ellison) le nouveau PDG d’Oracle-SUN parle (en bien) de la compétence technique de l’éditeur de logiciel et en (très) mal de l’équipe dirigeante et notamment de Jonathan Schwartz, le dernier président de SUN avant son rachat. Schwartz était très connu et surtout très populaire auprès d’une certaine population de bloggeurs. Les piques de Larry Ellison peuvent être vues comme une réponse aux commentaires de Schwartz après son départ, commentaires quelques peu arrogants à la lumière des performances de l’entreprise. On peut retrouver sur InformationWeek quelques bons extraits de l’interview.

Un projet

Pas de projet cette semaine et la revue du web fait une pause de quelques semaines le temps de préparer un évènement spécial organisé par nVentive ici à Montréal …

Monday, May 17, 2010 2:00:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
.net | Revue du Web
# Monday, May 10, 2010

Les tweets de la semaine

http://twitter.com/WindowsAzure/status/13342352480 quand Windows Azure rencontre CQRS

http://twitter.com/innovimax/status/13413675316 une librairie .NET pour manipuler des documents inDesign cherche des testeurs

 http://twitter.com/webwizo/statuses/13505951473 le meilleur et le pire dans la même phrase ?

La question Stackoverflow

http://stackoverflow.com/questions/280751/what-is-the-best-practice-for-copy-local-and-with-project-references la gestion des références peut être ardue quand le nombre de librairies externes et  de projets augmentent. Cette question et les réponses apportées abordent la gestion des librairies Visual Studio.

Actualités Microsoft

Une nouvelle version alpa de Internet Explorer 9 est sortie, on y trouve de nouveaux tests et fonctionnalités. Brad Abrams un des développeurs les plus connus chez Microsoft vient de quitter l’éditeur pour un autre mastodonte : Google. Son blog sur MSDN était très actif sur des sujets variés comme la BCL, RIA Services, MEF ou encore Internet Explorer. Son dernier billet résume bien un parcours exceptionnel.

Et puisque tout le monde est content de Windows 7 voici un guide complet de lifehacker.com sur les fonctionnalités de la TaskBar.

Actualités “Alt.NET”

Allez encore une fois on va parler CQRS mais on vous promets d’autres sujets pour les prochaines revues du web. En plus aujourd’hui on aborde une mise en garde sous la forme d’un billet de Udi Dahan. On entend beaucoup parler de cette architecture au point où on pourrait croire qu’elle va résoudre le problème de la faim dans le monde.En abordant le classique problème de la différence de perspective entre les développeurs et les usagers d’une solution, Udi revient sur la façon de poser les bonnes questions et cite celles que CQRS soulève : une architecture avec une utilisation très collaborative, une vue non exclusivement par entité et une fraîcheur des données moins pressante.

De l’autre côté

HTML5 on en parle beaucoup. Si vous êtes un développeur ASP.NET (MVC ou pas) ou si tout simplement vous vous intéressez aux technologies web vous pouvez consulter ce site : A List Apart. C’est une référence dans le domaine de l’intégration web, ce secteur à la croisée entre le design graphique, la technique (CSS, HTML, Javascript) et l’accessibilité. C’est sur ce site par exemple qu’on trouve les premiers articles sur les techniques que le CSS Sprite ou un résumé de HTML 5

Un projet

La mode des API “fluent” avec une utilisation des expressions lambda est vraiment partout dans le monde .NET (Fluent Nhibernate, Moq). Le projet de cette semaine est dans la même lignée : NBuilder. Il y a beaucoup de défis pour pouvoir exécuter des tests unitaires en dehors du contexte normal de l’application. La pratique du mocking est une des solutions pour isoler le système. NBuilder se situe dans la phase Arrange de la fameuse trilogie AAA (Arrange, Act, Assert), il faut avoir des données de test et ce travail peut être fastidieux.

Voici un exemple pour construire une liste de 10 objets de type Individual :

   1: var toCreate = Builder<Individual>
   2:                .CreateListOfSize(10);
   3: var data = toCreate.Build();

les objets feront les propriétés primitives publiques valorisées avec une valeur générée.

On peut aussi initialiser certains champs (ici les 5 individus auront une propriété Birthday valorisée à la valeur donnée) :

   1: var toCreate = Builder<Individual>
   2:                 .CreateListOfSize(10)
   3:                 .WhereTheFirst(5)
   4:                 .Have(i => i.Birthday = new DateTime(1978, 1, 24));    

individual

Les méthodes AndTheNext() permettent de valoriser les éléments suivants dans la liste.

On peut appliquer des méthodes sur les objets créés :

   1: var toCreate = Builder<Individual>
   2:                 .CreateListOfSize(10)
   3:                 .WhereTheFirst(5)
   4:                 .Have(i => i.Birthday = new DateTime(1978, 1, 24))
   5:                 .HaveDoneToThem(i => i.Emails.Add(Builder<Email>.CreateNew().Build()));
   6: var data = toCreate.Build();

ou choisir un élément au hasard :

   1: HaveDoneToThem(i => i.Emails.Add(Pick<Email>.RandomItemFrom(emails)))

Le objets peuvent être persistés (par exemple dans le cas de test d’intégration via la couche de persistance de l’application) :

   1: BuilderSetup.SetCreatePersistenceMethod<Individual>(repositoryIndividual.Save);
   2: var data = toCreate.Persist();

une API spécifique aux dates existe :

   1: var arriveeQuebec = The.Year(2009).On.May.The1st.At(15, 00);
   2: //ou par génération
   3: .Have(i => i.Birthday = generator.Next(March.The10th,April.The17th))

Enfin lors de la configuration le framework nous laisse spécifier une classe de PropertyNaming  pour un type donné ou pour l’ensemble des appels.

Monday, May 10, 2010 2:00:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
.net | Revue du Web
# Tuesday, May 04, 2010

Les tweets de la semaine

 http://twitter.com/ganshani/status/12951748647 une application ebay silverlight 4

http://twitter.com/gridshore/status/12810788065 un framework CQRS, java mais avec une documentation intéressante

http://twitter.com/escobar5/status/13131896774 les spécifications de C# 4.0

La question Stackoverflow

http://stackoverflow.com/questions/2745076/what-is-the-difference-between-git-commit-and-git-push Git a attiré beaucoup l’attention de la communauté. La question de la semaine nous permet d’explorer la différence entre Commit (action locale) et Push (action remote). On trouve aussi un diagramme expliquant les différentes commandes. Ces deux questions  peuvent vous aider à mettre un pied dans le monde merveilleux de la gestion de configuration distribuée : http://stackoverflow.com/questions/315911/git-for-beginners-the-definitive-practical-guide et http://stackoverflow.com/questions/507343/using-git-with-visual-studio

Actualités Microsoft

Steve Ballmer a présenté la nouvelle version de MSN Messenger qui va comporter les conversations en onglet, l’intégration avec Facebook (status et chat), la vidéo HD et une version iPhone. En plus de MSN Messenger, ce sont les services en ligne Live qui vont connaître aussi leur vague numéro 4, Liveside.net revient dessus et on apprend par exemple qu’Hotmail va supporter Exchange ActiveSync (c’est-à-dire qu’on pourra enfin utiliser un compte Hotmail sur iPhone pour avoir ses emails, contacts et calendriers), la vue conversation, l’édition en ligne de document et une version mobile beaucoup plus évoluée. Cette vidéo permet de voir les fonctionnalités de Windows Live pour l’íPhone.

Côté développement le nouveau blog IronRuby-Rocks.com permet d’explorer le langage et l’intégration avec .NET ou Windows (utilisation des génériques, intégration avec Office).

Actualités “Alt.NET”

On a parlé au début de l’existence de cette revue de PSake, un outil simple mais très efficace pour construire ses logiciels à partir d’un script PowerShell. Il a lui aussi passé à la version 4.0 : support de .NET 4.0, x64,  . Il s’agrémente aussi d’un wiki pour aider les développeurs à commencer avec cet outil.

Dans un autre registre on peut visionner sur le site de Skill Matters l’intervention de Greg Young à Londres sur CQRS – Event Sourcing du point de vue métier.

De l’autre côté

Cet article nous introduit à une librairie Python (neo4j) utilisée en Java pour manipuler des données en graphe (modélisation de catégories, de réseau)  plus facilement qu’avec un modèle relationnel. L’exemple abordé est celui d’un catalogue de produits classifiés en catégories et chaque catégorie a un ensemble d’attributs. Le concept de noeuds corresponds aux entités (ici Catégories, Produits et Attributs), tandis que les relations permet de typer un lien (catégorie – produit, catégorie – attributs). L ‘intérêt de ce type d’API réside dans la capacité à traverses le graphe pour avoir les attributs par exemple d’une catégorie et de toutes ses catégories facilement. Le site fait état d’une API REST associée au framework et de modèles exemples

Un projet

JSON (JavaScript Object Notation) est bien connu des développeurs Ajax. Ce format d’échange tiré du monde JavaScript a su se positionner comme le standard de facto pour les API Ajax ou REST étant aussi lisible que XML tout en étant plus simple. Dans le monde .NET il existe quelques librairies pour parser ou générer du JSON, comme par exemple celle intégrée à WCF via un binding spécifique (webHttpBinding)et/ou en accédant directement au sérialiseur dédié : DataContractJsonSerializer.

Mais pour des scénarios plus avancés on peut se tourner vers d’autres implémentations comme Json.NET qui en est à sa version 3.5 qui offre une liste de fonctionnalités intéressante :

  • Linq to Json
  • Conversion vers/de XML
  • Support de Silvelight

Voici un exemple trivial de sérialization/désérilization (Contact a une collection d’Emails qui référence aussi le Contact, cet référence bidirectionnelle est gérée via une des nombreuses options)

   1: var contact = new Individual()
   2:                   {
   3:                       FirstName = "Matthieu",
   4:                       LastName = "Duluc",
   5:                       Birthday = DateTime.Now
   6:                   };
   7: contact.Emails.Add(new Email{ Address = "info@nventive.net"});
   8:  
   9: var jsSettings = new JsonSerializerSettings
  10:                      {
  11:                          ReferenceLoopHandling = ReferenceLoopHandling.Ignore
  12:                      };
  13:  
  14: string json = JsonConvert.SerializeObject(contact, Formatting.Indented, jsSettings);
  15:  
  16: var deserializedContact = JsonConvert.DeserializeObject<Individual>(json, jsSettings);

et le json généré avec l’option pour indenter les chaînes de caractères :

le Json généré

Elle est assez flexible pour s’adapter avec du code personnalisé par exemple avec NHibernate et ses fameuses collections lazy-loadées.

Le fournisseur Linq peut être utilisé pour transformer du Json vers un type personnalisé autre que celui d’origine :

   1: //json est une chaîne de caractères
   2: JObject individuJson = JObject.Parse(json);
   3:  
   4: var listEmails = from email in individuJson["Emails"].Children()
   5:                   select email["Address"];
Tuesday, May 04, 2010 2:20:00 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
.net | Revue du Web
# Monday, April 26, 2010

Les tweets de la semaine

http://twitter.com/jonguymer/status/12460353845 un article intéressant sur F# et sa place dans Visual Studio 2010

http://twitter.com/jbevain/status/12421787463 un billet d’humeur sur C# 4.0, les paramètres et les arguments

http://twitter.com/shanselman/statuses/12542909805 un créateur de thèmes pour Visual Studio en Javascript, il est temps de redonner un peu d’amour à votre IDE favori

La question Stackoverflow

http://stackoverflow.com/questions/733809/how-did-you-sign-a-contract-to-an-agile-project-not-how-you-think-you-would-ho On aime bien SCRUM ici, mais comment vendre un projet qui utilise cette méthodologie quand on fait un développement au forfait. Une petite liste de retours d’expérience sur cet épineux problème.

Actualités Microsoft et Actualités “Alt.NET”

Où l’on reparle de la fondation Codeplex. Il y a deux mois  le projet MvcContrib était intégré dans la fondation CodePlex et ce fut le premier projet complètement indépendant de Microsoft à le faire. ASP.NET MVC est ainsi le Framework chez Microsoft qui reçoit beaucoup d’attention dans la communauté de développeurs au sens large.

On en profite pour annoncer une conférence virtuelle autour de ASP.NET MVC qui se déroulera au mois de juillet.

De l’autre côté

Ce n’est pas la première fois qu’on essaie d’optimiser les machines virtuelles avec des cartes matérielles dédiées. InfoQ a interrogé Cliff Click de Azul Systems sur leur machines avec des processeurs dédiés aux applications JAVA avec des exigences très fortes en termes de volume de données. Java 7 verra un nouveau Garbage Collection, Garbage First, un système dit « low-pause garbage collector ». Du côté .NET la version 4 de CLR fournit un nouveau mode « background garbage collection » (non disponible pour la version serveur) on trouvera des informations pertinentes sur le blog de Tess Ferrandez

Un projet

L’ordinateur de l’auteur de la revue du web ayant connu un  nettoyage de printemps, il n’y aura pas de projet cette semaine. On vous laisse avec deux petites vidéos très “eye candy” de Windows Phone 7 et Office :

Monday, April 26, 2010 4:00:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
.net | Revue du Web
# Monday, April 19, 2010

Les tweets de la semaine

http://twitter.com/atheken/statuses/12038918061 un framework de DAL pour Mono en C# marchant avec SqlLite, c’est notre projet de la semaine

http://twitter.com/ufukkilic/statuses/12037707645 dotCover un nouvel outil de JetBrains

http://twitter.com/Pete_Brown/statuses/12055857669 les nouvelles fonctionnalités de WPF 4

La question Stackoverflow

http://stackoverflow.com/questions/1879672/what-exactly-is-the-windows-appfabric beaucoup de personnes se posent : AppFabric c’est quoi ? Une tentative de clarification. On regrette juste la disparition de Velocity en tant que module de cache indépendant.

Actualités Microsoft 

Avril, le quatrième mois de l’année aura été aussi le mois du chiffre 4 chez Microsoft : 4ème version du framework mais aussi Silverlight 4 et bien sûr Visual Studio 2010. On retrouvera une impressionnante série de vidéos sur les nouveautés du framework sur Channel 9 :

VS2010

Actualités “Alt.NET”

On évoquait dans la revue de la semaine dernière les “Domain Events” et depuis Greg Young a mis en ligne des documents détaillant l‘architecture autour de l’“Event Sourcing”. Après avoir rappelé les limites des architectures typiques autour de services et les avantages de l’utilisation des events comme mécanisme de stockage, il décrit plus en détails les principes de cette architecture comme la simplicité du stockage, l’historique exhaustif des modifications ou encore le concept de “Rolling Snapshots”. En effet si on ne stocke plus l’état courant d’un objet mais l’ensemble des évènements qu’il a connu, quand on requête la base pour le retrouver il faut rejouer ceux-ci. Pour optimiser cette lecture on peut alors passer par des clichés de l’objet à certains moments. Enfin il termine par analyser les interfaces utilisateurs contruites autour de tâches à effectuer (corriger une adresse, soumettre une demande de prêt, …) en lieu et place de nos habituels CRUD.

De l’autre côté 

L’équipe de développement de The Onion explique le passage de Drupal (CMS en PHP) à Django (Python). Il semble que la migration s’est faite par un souci de simplifier la base de code dispersée entre PHP et Python. Un gain en vitesse, maintenance et stabilité semble donner raison à cette migration. On retiendra l’utilisation de la partie administration de Django souvent mise en avant, pour cause elle a sauvé deux mois de développement à l’équipe. L’architecture utilise maintenant PostgrSql en lieu et place de MySql, haproxy comme Load Balancer et nginx comme reverse proxy. Enfin l’équipe est composée de 4 personnes en télé-travail.

Les développeurs .NET peuvent utiliser IronPython, Google a un site regroupant des cours gratuits sur le langage.

Un projet

Entify est un projet issu du travail d’un développeur finlandais, Lauri Taimila, qui est un framework ORM un peu particulier dans le sens où il ne vise pas le marché des applications d’entreprises mais celui des applications de bureau et mobile. Il utilise SQLite comme moteur de base de données, il tourne sous la CLR de Microsoft et Mono, une version compatible MonoTouch est disponible (on peut donc l’utiliser dans le développement iPhone), enfin un designer pour MonoDevelop est fourni.

On doit se procurer Mono et MonoDevelop. Le binaire prend la forme d’une dll de 61 Ko sans dépendances externes à part SqlLite de Mono, comme le confirme un petit tour dans Reflector :

Entify dans Reflector

On peut installer MonoDevelop dans une image virtuelle VMWare OpenSuse fournie par Novell pour un autre produit (Mono Tools for Visual Studio).

Voici notre application de test :

MonoDevelop IDE

le formulaire de test

Un designer permet de spécifier les entités (une classe partielle peut être générée pour ajouter du code), on y trouve aussi la définition des associations et des propriétés sur lesquelles on peut définir des règles de validation (personnalisées ou non) :

la diagramme de classe

Un zoom sur la définition des règles de validation :

 définition de règles de validation Voici un exemple d’utilisation de l’API :

//on utilise sqllite en local
EntityContextSettings settingsEntify = new EntityContextSettings()  
{  
    PersistentStoreLocation = "/home/rupert/myFormDB.entifydb",  
    EnforceValidationRules = true,
	ContextName = "Main",
	InMemory = false
}; 
//creation du contexte entify
EntityContext context = EntityContextFactory.GetContext(settingsEntify);
var customer = new Customer();
customer.Id = Guid.NewGuid();
customer.Birthday = datbirthDate.Date;
customer.Firstname = firstNameTxtBX.Text;
customer.Lastname = lastNameTxtBX.Text;
customer.Email = emailTxtBX1.Text;	
try  
{  
	//prend un snapshot avan modification
	long snapshotAfter = context.TakeSnapshot();
	//on peut pas ajouter une nouvelle adresse directement
	//il faut passer par le Add au context
	//customer.Adresses.Add(new Address{ City= "Montreal" });
	
	var address = new Address{ Id= Guid.NewGuid() ,City= "Montreal" };
	context.Add(address);
	customer.Adresses.Add(address);
	
	//ajoute l' entite => validation
    context.Add(customer);			
	//autres actions sur le context
	//(...)
	var customers = context.GetAll<Customer>();
}  
catch(ValidationException exe)  
{  
    ValidationResults r = exe.ValidationResults; 
	var dialog = new MessageDialog(this,
	                               DialogFlags.Modal,
	                               MessageType.Error,
	                               ButtonsType.Ok,
	                               exe.Message);
	dialog.Show();	
	//context.RevertToSnapshot(snapshotAfter);
}

Le framework gère aussi une API simple de requêtage avec filtre et pagination. La possibilité de prendre des cliché de la base est intéressante dans le cadre de suivi de modifications avant un renvoi vers un serveur. Cette librairie est certes simple mais pour des utilisations bien ciblées (iPhone, applications de bureau indépendantes) elle reste séduisante.

Monday, April 19, 2010 2:00:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
.net | Revue du Web
# Monday, April 12, 2010

Les tweets de la semaine

http://twitter.com/rajkaimal/statuses/11681362631 les Threads et ASP.NET, une longue histoire qui ne se finit pas.

http://twitter.com/carlodiban/statuses/11681569277 Enterprise Library 5 est sorti

http://twitter.com/Elsheimy/statuses/11877201716 Marshaling, un livre.

La question Stackoverflow

http://stackoverflow.com/questions/1596158/good-introduction-to-the-net-reactive-framework on parlait la semaine dernière de Reactive Framework pour Javascript mais certains l’aborderont sans doute plus dans le cadre de développement .NET, voici une liste de ressources sur l’API avec un tutorial qui fournit une très bonne vue d’ensemble.

Actualités Microsoft 

Nous en parlions la semaine dernière, le lancement d’office 2010 arrive bientôt et si on connaît déjà bien les produits de base, CNET nous indique que la version gratuite dite “Starter” fera bien partie de l’offre de l’éditeur. Cette version ne contiendra que Word et Excel avec des publicités mais non contextuelles (heureusement, rendez-vous compte si Microsoft commence à lire vos documents, quelle menace sur la vie privée …). Les particuliers font sans doute faire un mélange de cette version et des futures éditions en ligne. Celles-ci sont même installables sur des serveurs privées : il est vrai que certaines entreprises sont réticentes à mettre des documents sensibles en ligne (voir le problème de Twitter) mais pouvoir partager. éditer facilement des documents à travers un simple navigateur est devenu presque une nécessité.

Actualités “Alt.NET”

Une des plus grandes conférence ouverte s’est déroulée ce week-end à Seattle : Alt.Net Seattle Conference 2010. D’une durée de 3 jours, l’évènement commence par une journée classique avec des ateliers sur des sujets connus d’avance comme F#, TDD ou Javascript. Le planning des deux autres jours se décide par un processus de suggestion/vote.

De l’autre côté 

La blogosphère des développeurs est en émoi après la publication de la version beta du SDK de l’íPhone 4.0. Le nouvel accord de licence contient une restriction sur les applications dont le code a été généré. Ceci mets en péril les outils de développement qui permettent de coder dans un autre langage qu’Objective-C et de générer un binaire “iPhone” (MonoTouch avec C#, Titanium avec HTML/JS et Adobe avec Flash). Ars Technica a très bien résumé la situation : Apple est allé trop loin pour contrer Adobe (et fait des dommages collatéraux). Certains invoquent la protection de la plateforme contre des applications médiocres car ciblant plusieurs plates-formes (MonoTouch permet de générer aussi un binaire pour Androïd) mais on sait tous que toutes les applications natives ne sont pas elles-mêmes parfaites.

On espère que Microsoft qui a une plus longue expérience avec des développeurs externes (il faut rappeler qu’Apple a publié un SDK contre son gré presque puisque seule les applications web étaient autorisées pour le premier iPhone) saura tirer parti du comportement presque tyrannique d’Apple avec ses partenaires tout en conservant une plate-forme cohérente (un défaut d’Androïd). Ceci n’est pas un compromis facile.

Un projet

On a déjà évoqué Noda Time, le portage d’une librairie Java en C#. Cette API permet de manipuler des concepts temporels plus facilement qu’avec les classes de base du framework (DateTime, TimeSpan etc.). La librairie n’est pas encore disponible mais on peut déjà accèder au code source sur le site internet dédié.

En regardant le projet on peut voir que les choses avancent vite, heureusement le projet de tests est là pour nous éclairer un peu :

vue d'ensemble de Noda time

En regardant les tests sur les fuseaux horaires on peut voir des problèmes non triviaux comme la gestion des changements d’heure d’été/hiver au cours du temps :

// Make sure we deal with the uncached time zone
private static readonly IDateTimeZone Paris = DateTimeZones.ForId("Europe/Paris").Uncached();
// Until 1911, Paris was 9 minutes and 21 seconds off UTC.
private static readonly Offset InitialOffset = Offset.Create(0, 9, 21);
[Test]
public void FirstTransitions()
{
	// Paris had a name change in 1891, and then moved from +0:09:21 to UTC in 1911
	var nameChangeInstant = Instant.FromUtc(1891, 3, 14, 23, 51, 39);
	var utcChangeInstant = Instant.FromUtc(1911, 3, 10, 23, 51, 39);
	var beforeNameChange = Paris.GetZoneInterval(nameChangeInstant - Duration.One);
	var afterNameChange = Paris.GetZoneInterval(nameChangeInstant);
	var afterSmallChange = Paris.GetZoneInterval(utcChangeInstant);
	Assert.AreEqual("LMT", beforeNameChange.Name);
	Assert.AreEqual(InitialOffset, beforeNameChange.Offset);
	Assert.AreEqual("PMT", afterNameChange.Name);
	Assert.AreEqual(InitialOffset, afterNameChange.Offset);
	Assert.AreEqual("WET", afterSmallChange.Name);
	Assert.AreEqual(Offset.Zero, afterSmallChange.Offset);
}

Les principaux concepts sont :

  • Calendrier : système de temps dont celui respectant la norme ISO8601 ou celui basé sur le système Grégorien
  • Chronology : un calendrier avec un fuseau horaire
  • Instant : représente un instant dans le temps
  • Interval : un intervalle entre deux instants
  • Duration : le TimeSpan, une durée exprimée en Ticks
Duration test = Duration.FromStandardDays(1);
  • Period : permet d’exprimer une duration dans des unités différentes comme mois, année etc.
var eightWeeks = Weeks.From(8);
var twoWeeks = Weeks.Two;
var sixWeeks = eightWeeks - twoWeeks;

Un exemple de calcul avec ses différents concepts

// 2002-06-09
long TestTimeNow =
(Y2002Days + 31L + 28L + 31L + 30L + 31L + 9L - 1L) * NodaConstants.MillisecondsPerDay;
// 2002-04-05
long TestTime1 =
(Y2002Days + 31L + 28L + 31L + 5L - 1L) * NodaConstants.MillisecondsPerDay
+ 12L * NodaConstants.MillisecondsPerHour
+ 24L * NodaConstants.MillisecondsPerMinute;
var debut = new Instant(TestTime1);
var fin = new Instant(TestTimeNow);
var interval = new Interval(debut, fin);
var dureeInterval = interval.Duration;
var period = Period.From(dureeInterval);

Les tests ne sont pas encore très parlants et la documentation non existante mais on suivra ce projet avec intérêt.

Monday, April 12, 2010 2:00:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
.net | Revue du Web
# Monday, April 05, 2010

Les tweets de la semaine

http://twitter.com/AdaTheDev/statuses/11296750619 un podcast sur NServiceBus

http://twitter.com/neilkilbride/statuses/11303426526 on en parlait dans la revue du web il y a un moment, .LESS un framework de CSS dynamique pour .NET semble plaire

 http://twitter.com/webtopics/statuses/11478950321 un nouveau monde de debugging s’ouvre à ASP.NET

La question Stackoverflow

http://stackoverflow.com/questions/2443697/tdd-exercise-ideas Des idées de TDD pour s’exercer ou donner l’envie à ses collègues de s’essayer avant de plonger dans le vrai TDD.

Actualités Microsoft 

Une semaine très calme dans le Monde MS, sans doute parce que tout le monde se prépare pour la sortie conjointe de Visual Studio 2010 et de la version 4 du framework le 12 avril prochain. Un mois après, le 12 mai exactement, intervient la sortie officielle d’Office 2010 et Sharepoint 2010 (les particuliers devront attendre le mois de juin). Dans l’article de Marie Jo Foley  consacré aux futures conférences on peut apprendre aussi qu’il n’y aura sans doute pas de PDC cette année.

Actualités “Alt.NET”

Eric Evans auteur du livre Domain-Driven Design: Tackling Complexity in the Heart of Software propose une newsletter sur l’actualité de sa société mais aussi sur son travail depuis la sortie de son livre en 2003. Dans sa dernière édition il parle des “Domain Events”. Il les considère comme un pattern à part entière aux côtés des entités, des “value objects” etc.  Autant il est facile de représenter l’état courant de nos objets du domaine, il est plus difficile d’accéder à l’historique  des évènements qui ont amené à cet état. Cela peut être pour répondre à des exigences légales ou tout simplement pour repérer dans le temps l’apparition d’un erreur. Les évènements sont généralement marqués dans le temps et sont immutables. Il cite enfin CQRS étant une architecture mettant les évènements au centre des préoccupations – on pourra consulter aussi le blog de Greg Young sur “Event Sourcing” qui pousse le concept encore plus loin en supprimant le stockage d’un état courant pour ne retenir seulement que les évènements.

De l’autre côté 

 Matt Raible, célèbre bloggeur du monde web Java, a fait une chronologie des frameworks web qu’on peut retrouver sur flickr :

History of Web Frameworks

crédit : Matt Raible

Dans sa présentation on peut entrevoir cette évolution depuis MVC (Struts 1) vers Component (Flex, GWT) et les nouveaux défis qu’apporte HTML5 pour les technologies RIA. On y trouvera aussi un  comparatif Flex/GWT qu’on peut aussi bien appliquer à Silverlight.

Un projet

On connait tous notre bonne vieille “Output window” de Visual Studio qui nous permet d’accéder à la sortie standard des programmes. Mais parfois cela n’est pas suffisant comme par exemple avec les applications ASP.NET et log4net. Logview4net peut vous servir énormément.

log4viewnet arrive avec un écran prêt pour configurer un UDP Appender très utilisé avec AS.NET par exemple (n’oubliez pas d’utiliser l’IP 127.0.0.2 pour les PC sous Vista/Windows 7 c’est un bug de log4net 1.2.10). Ici une configuration typique pour NHibernate :

 <log4net>
   <appender name="udpLogAppender" type="log4net.Appender.UdpAppender" >
      <encoding value="utf-16" />
      <remoteAddress value="127.0.0.2" />
      <remotePort value="8888" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date %level [%thread] %type.%method - %message%n%exception" />
      </layout>
    </appender>   
    <root>
      <level value="ERROR" />
      <appender-ref ref="udpLogAppender" />
    </root>
    <logger name="NHibernate" additivity="false">
      <level value="ERROR"/>
      <appender-ref ref="udpLogAppender" />
    </logger>
    <logger name="NHibernate.SQL" additivity="false">
      <level value="DEBUG"/>
      <appender-ref ref="udpLogAppender" />
    </logger>
</log4net>

et la configuration de l ‘application :

configuration de logview4net

et l’application en action :

action

Vous pouvez changer les couleurs des différents niveaux (INFO, WARNING, DEBUG, ERROR), faire des recherches (l’utilisation d’expressions régulières est en cours de développement), faire une pause etc.

On n’est pas limité à l’utilisation d’UDP, une grande variété d’appenders est disponible : Fichier, Dossiers, SQL, EventLog ou encore RSS :

session RSS et SQL Server

Monday, April 05, 2010 2:00:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
.net | Revue du Web
# Monday, March 29, 2010

Les tweets de la semaine

http://twitter.com/marktucker/statuses/10890277413 l’extension à l’oeuvre dans Blend avec MEF

http://twitter.com/MWillemse/statuses/10892517988 Si WCF était un monstre de jeu de rôle, on perdrait 20 points de santé mental rien qu’en le voyant

http://twitter.com/kmckelvin/statuses/10972370963  C’est beau et c’est utile. Le vectoriel a une place dans les applications métier finalement.

La question Stackoverflow

http://stackoverflow.com/questions/2285045/what-scalability-problems-have-you-solved-using-a-nosql-data-store on vous parlait la semaine dernière de db4o, une des applications souvent citées dans le mouvement NoSQL (même si strictement parlant elle se trouve plutôt à la marge). Voici une question comme on les aime : les réponses proviennent de projets réels où l’utilisation d’une base de données non relationelle fait du sens.

Actualités Microsoft 

Quand on parle des trois W dela version 3 de .NET tout le monde arrive à citer WPF et WCF mais on oublie souvent Windows WorkFlow. Dans ce billet Soma Segar essaie de donner un peu de visibilité à la version 4 de l’API qui n’a rien à voir avec la version 3.

Le designer a été ré-écrit en WPF ce qui pourra sans doute améliorer son intégration dans des applications tiers, la définition de processus étant souvent un travail effectué par une personne loin de savoir manipuler Visual Studio (et le code). Les workflow sont aussi définis en XAML (une porte ouverte pour des outils externes ?). Un nouveau type de process existe : FlowChart qui expose des process pouvant connaître un retour en arrière et/ou des conditions simples comme le switch ou decision.

Le modèle de programmation a été simplifié : fini l’obligation d’avoir un runtime pour exécuter un workflow, ceci peut se faire plus facilement notamment dans les tests. Enfin l’intégration avec WCF a été aussi revue avec de nouvelles activités pour interagir avec un service (dont une gestion de la corrélation de plusieurs messages) et une configuration plus déclarative.

Le designer en mode “hosté” :

le designer de WF en mode hosté

 

Actualités “Alt.NET”

Décidémment Mono fait beaucoup parler de lui en ce moment. Mais cette fois-ci ce n’est pas technique. Etant à l’intersection des mondes Open Source Linux et de Microsoft il y a parfois des frictions des deux bords comme par exemple quand Miguel de Icaza a reçu le titre de MVP ou quand Mono a été inclu dans les package de base de Ubuntu. Aujourd’hui c’est encore une nouvelle qui est allée trop vite : une allégation d’un article du SD Times sur une déclaration du leader du projet sur la gestion par Microsoft de la communauté.NET. L’interessé a éclairci les choses dans un billet très intéressant. Il reconnaît que Microsoft fournit avec le .NET framework un produit excellent mais regrette qu’il est fermé la porte à une plus grande communauté quand Java avec la fondation Apache par exemple offre un choix d’outils, frameworks plus grands . Dans un dernier point il dit avoir espoir car la nouvelle équipe aux commandes de Microsoft a déjà changé pas mal de choses avec les projets comme ASP.NET MVC, le changement de licence sur certaines parties du framework ou encore la nouvelle fondation codeplex.org.

De l’autre côté 

Adobe a publié cette semaine une nouvelle version de ses outils de développement Flex Builder renommé Flash Builder. La quatrième incarnation de l’IDE RIA est toujours basée sur Eclipse. Cette publication coïncide aussi avec le SDK – gratuit et open source- Flex SDK.  Flash Catalyst le nouveau outil de design permet de profiter du nouveau système de composants (Spark) en exportant des designs vectoriels vers un format compatible de Flex. Les composants ont donc leur comportement séparé de leur rendu (penser au couple Button.cs et Themes\generic.xaml en WPF).

Flex est basé sur un langage déclaratif XML pour définir son interface utilisateur (MXML) et ActionScript comme langage de programmation. Un autre langage existe (FXG) qui rend compatible des artefacts créés dans d’autres outils d’Adobe. La plateforme a enrichi son databinding aussi en rendant plus facile la définition de databinding bi-directionelle.

Outre les nouveautés de l’outil comme une meilleure génération (getter, setter, event handler), la possibilité d’ajouter des breakpoints conditionnels.

Un projet

Reactive Extensions (Rx) est un projet de devlabs chez Microsoft qui a connu une certaine notoriété car Erik Meijer, le créateur de Linq, fait partie de l’équipe à l’origine de cette nouvelle API. Il est apparu d’abord dans Silverlight puis a été promu dans le framework et enfin une version pour Javascript est apparue après la conférence MIX10.

Rx se propose de simplifier le modèle de programmation asynchrone et événementielle en renversant la relation que nous avons d’habitude entre une série d’appels ou d’évènements et les fonctions de callbacks associées. Pour cela il utilise un patron de conception connu : Observable/Oberserver et l’applique aux Collections. Si on décompose le concept cela donnerait cet enchaînement : un évènement donné (MouseOver) peut-être vu comme une série (une collection) et cet ensemble peut être observé. A chaque fois qu’une nouvelle instance est créée (un mouseover x y) i.e. un élèment ajouté, le sujet (l’observé) appelle la fonction OnNext sur les observeurs. Certains l ‘appréhendent aussi comnme le relation inverse de l’énumerator où c’est votre code qui va chercher un par un les élèments de la collection. Rx expose aussi OnError pour gérer les cas d’erreur et Completed pour être prévenu lorsque le sujet n ‘est plus.

L’installation par un package msi fournit un fichier de documentation des classes et une page html d’exemple. On y trouve une version pour ScriptSharp et une version Javascript (sans intellisense pour Visual Studio pour le moment) :

Rx Installer

Les fichiers installés pour la version Javascript :

Installation

Il faut aussi passer par un petit hack si on veut la complétion automatique dans Visual Studio (en espérant que cela soit résolu pour la version finale).

Voici un exemple sur l’évènement click où à chaque occurence nous imprimons dans une div les coordonnées :

//element cible
var element = $("#maDivClickable").get(0);
//observable à partir de l'élèment et de l'event
var observable = Rx.Observable.FromHtmlEvent(element, "click");
//ajout d'un observer
 observable.Subscribe(function (clickEvent) {
      var result = $("#resultat");
      result.html("vous avez cliqué à la position : " 
            + clickEvent.clientX + " , " + clickEvent.clientY);
 });

le rendu de l'exemple

Rien de vraiment particulier mais Rx contient quelques méthodes bien pratiques comme Throttle(dueTime) qui permet de réguler les cliques successifs par exemple en fixant une limite minimale avant de relancer un autre event :

observable.Throttle(1000).Subscribe(..)

ou Skip(1).Zip(prev, next) par exemple pour recevoir l’avant-dernière et la dernière valeur ou SkipUntil() pour utiliser une condition.

Avant de s’intégrer facilement avec les API “Web 2.0” Rx fournit une méthode pour faire des appels asynchrones successifs et transformer les résultats en sujet/observable :

Rx.Observable.XmlHttpRequest(url)

Matthew Podwysocki a écrit une série très intéressante sur Rx pour Javascript et ses usages.

Monday, March 29, 2010 2:00:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
.net | Revue du Web
# Monday, March 22, 2010

Les tweets de la semaine

 http://twitter.com/Mix10French/status/10577773952 quand on vous dit que c’est une version “developper preview”

http://twitter.com/MSDN_Forum/statuses/10613210551 chercher des failles potentielles de sécurité à travers le code décompilé de composants.

http://twitter.com/snaveen/status/10544872113 tracer des informations de bas niveau en Silverlight, attention “hack ahead”

La question Stackoverflow

http://stackoverflow.com/questions/2461319/c-inconsistent-math-operation-result-on-32-bit-and-64-bit on pensait ne plus avoir à tenir compte des différents machines quand on développe … sauf dans certains cas. Une réponse par Eric Lippert, un des designer de C#. On pourra consulter une autre réponse plus précise.

Actualités Microsoft 

La conférence MIX10 a bien tenu ses promesses :

  • Silverlight 4 en release candidate :  Visual Studio 2010 RC est enfin compatible avec cette version.
  • Silverlight (sans nom  mais c’est une version mini entre le 3 et le 4) pour le future système d’exploitation des Windows Phone Series 7 avec un site web dédié, des outils gratuits en beta et déjà pleins de clients Twitter en préparation
  • Une version preview de Internet Explorer 9 qui montre le support de HTML 5, CSS3, le nouveau moteur Javascript
  • Microsoft annonce aussi une contribution plus importante dans jQuery (après l’ajout dans Visual Studio et certains templates) : contribution de code et de ressources de tests. Que devient ASP.NET AJAX ? Les réponses de Microsoft ne sont pas rassurantes pour le projet.
  • OData, le protocole de Astoria-ADO.NET Data Servcices-WCF Services (vous êtes toujours là ?) se voit doter d’un SDK. On sait aussi que SharePoint et SQL Server Reporting services exposeront leur contenu via OData. Mais le catalogue des données publiques se construit aussi avec Netflix, Nasa, l’ONU etc.

Avec ce billet de Scott Hanselman on peut avoir l’essentiel des liens officiels, on attendra quelques jours pour avoir le retour de la communauté.

Actualités “Alt.NET”

On connaisait Mono sur linux depuis plusieurs années. Souvent considéré plus comme une preuve de concept plus qu’un vrai runtime, les versions se sont succédées et commencent à trouver une place dans un mouvement plus vaste. Là on trouverait une architecture .NET “classique” avec par exemple ASP.MET MVC, Unity, Entity Framework sur un Windows Server 2008, l’alternative Linux (Mono, Ninject, FubuMVC, NHibernate) n’est plus un concept. Mais c’est vraiment du côté du développement mobile que Mono nous a surpris avec MonoTouch, l’environnement .NET pour des applications iPhone/iPod Touch/iPad. Novell récidive avec Androïd : MonoDroid.

De l’autre côté

Certains essaient de nous convaincre que maintenant il est préférable d’utiliser un serveur d’application “full fledge” comme JBoss ou GlassFish plutôt qu’un serveur Tomcat “tuné”. Il est vrai que le temps des containers EJB2 où les applications J2EE prenaient du temps à se déployer (en plus du développement pas facile) est bien loin. JBoss et GlassFish font partis de ces produits qui ont fait table rase du passé afin de proposer un container qui offre les mêmes services mais de façon plus “agile”. DZone fait un très bon résumé du nouveau stack de référence Java EE6 dont le package “web”. 

Un projet

Il n’est pas facile de tester les interfaces utilisateurs. TDD a bien révolutionné la façon de coder (et de tester) notre code de composant (quel est son contrat externe, qu’est-ce que j’attends en entrée, quelle sont les cas passants, non passants etc.) mais s’attaquer à la couche de présentation avec les outils de tests unitaires n’est pas le plus approprié d’après Steve Sanderson. Dans ce billet il présente SpecFlow un framework de BDD pour .NET avec une application ASP.NET MVC.

L’intégration dans Visual Studio via le plugin (2008 et 2010) semble bien faite. Les fichier .features contiennent les spécifications de test :

les fichiers de tests

Si on prend pour exemple le test “browsing”  avec un breakpoint:

exemple de breakpoint

SpecFlow génère une dll de test NUnit que vous pouvez utiliser pour générer les squelettes de vos “steps” de votre test en C# :

géneration des steps

Ici compléter avec le framework WatiN pour simuler le navigateur :

implémentation des test en C#

On peut alors rejouer les test dans NUnit ou avec votre plugin VS préféré (en mode administrateur) :

pass

Monday, March 22, 2010 1:00:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
.net | Revue du Web
# Monday, March 15, 2010

Les tweets de la semaine

 http://twitter.com/gpoune/statuses/10182612504 ah le monde déconnecté :) la consultation de ce document sur la gestion viewstate en ASP.NET est en soit un rappel des difficultés du monde web

 http://twitter.com/marcjohnson/statuses/10190244953 QCon a toujours eu une bonne réputation, on en reparle dans un instant

 http://twitter.com/TigerHasse/statuses/10361767261 les nouveaux jouets pour architectes dans Visual Studio 2010

La question Stackoverflow

 http://stackoverflow.com/questions/2432281/get-sum-of-two-columns-in-one-linq-query On est toujours étonné par la puissance de Linq pour ces petites requêtes de la vie de tous les jours, on en serait où si on avait pas l’opérateur FirstOrDefault() ? La réponse la plus adaptée utilise un opérateur peu utilisé : le groupby.

Actualités Microsoft 

Après avoir lancé son offre commerciale autour des technologies “cloud” sous le nom Azure au mois de janvier dernier, Microsoft la complète maintenant avec une offre “serveur d’application”: Azure App Fabric. Cette dernière vient rejoindre Windows Azure (offre “computing” simple avec des rôles web et/ou services et un stockage non relationnel) et SQL Azure (base de données relationelle).

AppFabric se décompose en deux grandes fonctionnalités :

Un Bus de services pour permettre à des applications d’entreprises (souvent derrière des pare-feux) de communiquer via Azure :

diagramme ServiceBus

et un composant de gestion d’identité ou fédération et y associer des règles d’accès :

AccessControl

On trouvera aussi les prix associés dans ce billet. Un SDK est publié.

Actualités “Alt.NET”

QCon est une conférence (une édition à Londres et l’autre en Novembre aux USA) sur le développement informatique organisée par InfoQ, un site d’ínformations sur le monde de l’informatique de l’entreprise (un theserverside.com des années 2000 pour les plus anciens d’entre nous). Ce qui distingue QCon des autres conférences ce sont  la qualité des présentateurs et les sujets sur des technologies, méthodes innovante et/ou sur des questions d’architectures peu discutées autre part. On y trouve des classiques Robert C. Martin mais aussi des sessions sur des architecture atypiques comme Skype ou Facebook,  ou des technologies en particulier (comme .NET). La liste des tracks en elle-même est assez alléchante.

De l’autre côté

http://highscalability.com/blog/2010/2/8/how-farmville-scales-to-harvest-75-million-players-a-month.html

Vous avez tous vu dans votre flux de nouvelles sur Facebook ces messages d’amis qui ont eu telle ou telle récompense dans le jeu FarmVille. Luke Rajlich réponds ici à quelques questions sur la façon dont on rend disponible une application web utilisée par 75 millions d’utilisateurs. Le jeu a un ratio de lecture/écriture très différents d’une application web classique où les utilisateurs passent plus de temps à lire (site de journal par exemple) qu’à écrire (laisser un commentaire). On y apprend que l’utilisation de cache est primordiale (classique dans ce genre d’architecture mais ici ils doivent aussi mettre en cache les données de Facebook), de considére chaque composant (Facebook, les SGBD, le serveur de cache) comme un point de latence et de pouvoir les isoler en cas d’incident.

Un projet

Les bases de données relationelles ont la vie dure en ce moment (voir le mouvement NoSQL) mais est-ce dire que c’est au bénéfice des bases de données orientées objets ? Un de systèmes OODBMS qui connaît un certain succès est db4o de Versant. La version .NET fournie un plugin d’administration pour Visual Studio 2005 et 2008 :

la manager db4o dans visual studio

Le moteur peut s’utiliser en local (fichier) ou pour une connection à un serveur :

IObjectContainer db = 
Db4oEmbedded.OpenFile(Db4oEmbedded.NewConfiguration(), YapFileName);

IObjectContainer sera notre UnitOfWork pour dialoguer avec la base de données (il fournit ainsi les méthodes pour le Commit ou le RollBback) pour  :

- Insérer des données :

Pilot pilot1 = new Pilot("Michael Schumacher", 100);
db.Store(pilot1);

- Retrouver des données :

IList<Pilot> result = 
        db.Query<Pilot>(p => p.Name == "Michael Schumacher");

- Mettre à jour :

IObjectSet result = db.QueryByExample(new Pilot("Michael Schumacher", 0));
var found = (Pilot)result.Next();
found.AddPoints(11);
db.Store(found);

Les classes sont des POCOS.

Un founisseur Linq existe (bien qu’il souffre de certaines limitations du fait qu’il traduit les requêtes en un langage interne, SODA) :

IEnumerable<Pilot> result = from Pilot p in db
                            where p.Name.StartsWith("Michael")
                            select p;

Pour gérer la profondeur en mise à jour et en lecture (opérations en cascade et lazy-loading) on doit modifier la configuration par défaut qui ne cascade pas les mises à jour sur les types référence :

IEmbeddedConfiguration config = Db4oEmbedded.NewConfiguration();
config.Common.ObjectClass(typeof(Car)).CascadeOnUpdate(true);

En plus des propriétés de types primitifs (string, int etc.), les références sur Car seront mises à jours (Pilot par exemple). Pour la lecture la profondeur par défaut est de 5 niveau, on peut modifier ce paramétrage : c’est le concept d’Activation dans db4o. Pour rendre systématique ce processus vos classes doivent implémenter une interface (IActivatable) ou vous devez activer faire cette décoration au moment de la compilation via une tâche MSBuild ou en utilisant l’outil fourni par db4o.

Les concepts objet comme l’héritage sont bien sûr supportés. Il existe un langage bas niveau pour requêter (SODA) mais il est assez verbeux et repose beaucoup sur les chaînes de caractères. On utilisera plutôt Linq ou le langage natif de requête (en plus du requêtage par exemple déjà vu ) :

var result = db.Query<Pilot>(pilot => pilot.Points > 99
		                  && pilot.Points < 199
		                  || pilot.Name == "Rubens Barrichello");

 

Une version silverlight existe en beta. On pourra consulter le compte github de James Hicks pour avoir des exemples d’applications utilisant db40 : une abstraction de db4o à travers le concept de Session, une application avec une implémentation du pattern CQRS-Event Sourcing et l’utilisation de db4o avec NServiceBus.

Monday, March 15, 2010 2:00:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [2] -
.net | Revue du Web
# Monday, March 01, 2010

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).

Monday, March 01, 2010 3:00:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
Revue du Web
# Monday, February 22, 2010

Les tweets de la semaine

 http://twitter.com/cadred/statuses/9242655924 une revue du web .NET quotidienne, elle va très bien avec le café du matin

http://twitter.com/romainverdier/status/8922567409 la conversion de delegate, Func<T,bool> == Predicate<T> ?

http://www.alexatnet.com/content/net-memory-management-and-garbage-collector un petit rappel sur le Garbage collector en .NET

La question Stackoverflow

 http://stackoverflow.com/questions/129453/net-eventhandlers-generic-or-no les bonnes pratiques officielles concernant les events en .NET peuvent être rébarbatives, cette question se concentre sur la classe représentant les arguments des évènements et sa version générique. 

Actualités Microsoft 

Windows Phone 7 Series a été annoncé, enfin les détails “grand public”, concernant les développements il faudra attendre un peu : on parle d’une version de Visual Studio gratuite et dédiée pour le début de l’été et un environnement de développement autour de Silverlight ou XNA pour le jeux. En attendant voici un graphique intéressant qui donne la répartition des profits de Microsoft selon les lignes de produits – on y voit bien l’effet de Windows 7 :

Actualités “Alt.NET”

On vous indiquait dans une édition précédente de la revue du web les présentations de SkillsMatter, celle de Udi Dahan sur Command Query Responsibility Segregation est maintenant en ligne : http://skillsmatter.com/podcast/open-source-dot-net/udi-dahan-command-query-responsibility-segregation/rl-311

De l’autre côté

Hibernate, un des plus anciens ORM, continue son bonhomme de chemin et devient avec la version 3.5 conforme à la version 2 de la spécification JPA (un standard Java pour la persistance des données). Quelques nouveautés : Les annotations (équivalent des attributs en C#) sont incorporées dans le projet général, support de JDBC 4, la possibilité de décrire des schémas de chargement (Fetch Profiles). Cette dernière fonctionnalité est intéressante car si un ORM vous débarasse de l’écriture d’une couche d’accès aux données fastidieuse, le lazy loading a un effet pervers : on ne contrôle plus la granularité du graphe d’objets récupérés et on se retrouve vite avec des problèmes comme le Select N+1.

Un projet 

ELMAH est un projet qui permet de gérer l’audit des erreurs dans une applications ASP.NET. Les exceptions sont sauvegardées dans une base de données (Sql Server, Oracle, SQlite, un fichier XML).

La configuration consiste à ajouter un certain nombre de section pour paramétrer les différents aspects : logging, reporting, notifications etc. :

<sectionGroup name="elmah">
  <section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah" />
  <section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" />
  <section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah" />
  <section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah" />
</sectionGroup>

Ainsi que les handler et le httpmodule dans les sections respectives :

<add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>
On configure le datastore, ici SQLite : 
<elmah>
   <errorLog type="Elmah.SQLiteErrorLog, Elmah" connectionStringName="Elmah.SQLite" />
</elmah>
<connectionStrings>
    <add name="Elmah.SQLite" connectionString="data source=~/App_Data/Elmah.SQLite.db" />
</connectionStrings>

On peut aussi specifier une notification par email (ou Twitter):

 <errorMail from="elmah@example.com"    
             to="admin@example.com"    
             cc="carboncopy@example.com"    
             subject="..."  
             async="true|false"  
             smtpPort="25"  
             smtpServer="smtp.example.com"    
             userName="johndoe"  
             password="secret" />  

La page permet de voir une liste des erreurs survenues et de voir le détail de la requête HTTP à l’origine du problème. On peut alors téleécharger le log et s’abonner à un flux RSS des erreurs :

copie d'écran de la page d'erreur

 

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.

Monday, February 22, 2010 3:00:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
.net | Revue du Web

Les tweets de la semaine

 http://twitter.com/cadred/statuses/9242655924 une revue du web .NET quotidienne, elle va très bien avec le café du matin

http://twitter.com/romainverdier/status/8922567409 la conversion de delegate, Func<T,bool> == Predicate<T> ?

http://www.alexatnet.com/content/net-memory-management-and-garbage-collector un petit rappel sur le Garbage collector en .NET

La question Stackoverflow

 http://stackoverflow.com/questions/129453/net-eventhandlers-generic-or-no les bonnes pratiques officielles concernant les events en .NET peuvent être rébarbatives, cette question se concentre sur la classe représentant les arguments des évènements et sa version générique. 

Actualités Microsoft 

Windows Phone 7 Series a été annoncé, enfin les détails “grand publics”, concernant les développements il faudra attendre un peu : on parle d’une version de Visual Studio gratuite et dédiée pour le début de l’été et un environnement de développement autour de Silverlight ou XNA pour le jeux. En attendant voici un graphique intéressant qui donne la répartition des revenus de Microsoft selon les lignes de produits :

Actualités “Alt.NET”

On vous indiquait dans une édition précédente de la revue du web les présentations de SkillsMatter, celle de Udi Dahan sur Command Query Responsibility Segregation est maintenant en ligne : http://skillsmatter.com/podcast/open-source-dot-net/udi-dahan-command-query-responsibility-segregation/rl-311

De l’autre côté

 

Un projet 

 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.

Monday, February 22, 2010 3:00:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
.net | Revue du Web
# Monday, February 15, 2010

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.

Monday, February 15, 2010 3:00:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
Revue du Web
# Monday, February 08, 2010

Les tweets de la semaine

http://twitter.com/pm5links/statuses/8498715256 on a tous utilisé Reflector au moins une fois dans notre vie de développeur .NET. La version PRO payante de RedGate est prometteuse

http://www.lesnikowski.com/blog/index.php/testing-datetime-now/ utiliser DateTime,Now dans du code semble inoffensive  jusuqu’au moment où vous écrivez votre test

 http://twitter.com/Saucerdk/statuses/8670557833 Symbian est devenu open source il y a quleques temps, on peut maintenant développer en .NET pour ce système d’explotation. Un peu trop tard ?

La question Stackoverflow

http://stackoverflow.com/questions/1704487/algorithm-to-flatten-peak-usage-over-time Comment répartir de façon égale une quantité dans un contenant subdivisble, voici une réponse qui fait intervenir une classe que nous connaissons tous mais utilisons peu : HashTable.

Actualités Microsoft 

Microsoft a présenté ses résultats financiers en ce début 2010, et Windows 7 en plus d’être un système d’exploitation fini et réussi apporte un souffle financier signatificatif à l’éditeur. Comme l’explique ArsTechnica  les 60 millions de copies vendues lors ce trimestre sont sans doute pour beaucoup dans l’augmentation de 14% du chiffres d’affaires de Microsoft par rapport à l’année précèdente. Mais cet éditorial dans le New York Times d’un ancien vice-président de Microsoft sur les problèmes internes qui empêchent de faire emerger des produits innovants va sans doute un peu assombrir le tableau.

Actualités “Alt.NET”

 Sharp architecture est un projet qui se propose de faciliter le développement d’architecture en couches avec NHibernate. Commencé après un article sur codeproject (il y a presque 4 ans !), le projet est maintenant une application à part entière avec son site internet et un forum très actif.

On pourrait penser que ce ne sont que des bonnes pratiques d’architectes sans réelle application dans la vraie vie mais dans ce billet Billy McCafferty (créateur du projet) présente des applications en production qui utilisent ce “framework” dont Fancy Dress Outfitters http://www.fancydressoutfitters.co.uk/ . Ils lancent une autre application didactique cette fois-ci mais qui utilise les mêmes outils qu’une application réelle : http://who-can-help.me/ dont le code source est disponible.

De l’autre côté

On parle design cette semaine ! La signature email, c’est un peu les sites web personnels, on a tout vu : le gif animé, les polices de caractères de couleur fluo ou qui changent à chaque syllabe sans parler de celles qui font 20 lignes et s’entassent lors des échanges. Smahing Magazine nous présente une étude détaillée et nous livre quelques bons conseils.

Un projet 

Fluent Migrator est issu d’une amélioration de Migrator.NET un outil pour migrer des données entre différentes SGBD mais surtout entre différentes version d’un schéma. La gestion de configuration des bases de données n’est pas chose aisée il est agréable de voir des outils pour y remédier.

En Migrator.NET on utilise des attributs pour versionner des actions à exécuter contre un schéma :

[Migration(20080805151231)]
public class AddCustomerTable : Migration
{
        public override void Up()
        {
                Database.AddTable("Customer",
                          new Column("name", DbType.String, 50),
                          new Column("address", DbType.String, 100),
                          new Column("age", DbType.Int32, 100)
                         );
        }
        public override void Down()
        {
                Database.RemoveTable("Customer");
        }
}

L'attribut peut contenir un numéro version avec un entier ou un timestamp. Les actions possibles sont varíées : clés étrangères, du code SQL pour un SGBD particulier :

[Migration(5)]
public class AddForeignKeyToTheBookAuthor : Migration
{
        private const string FK_NAME = "FK_Book_Author";
        public override void Up()
        {
                Database.AddForeignKey(FK_NAME, "Book", "authorId", "Author", "id");
        }
        public override void Down()
        {
                Database.RemoveForeignKey(FK_NAME);
        }
}
Une application console, des tâches Nant et MSBuild existent pour exécuter et automatiser des migrations.

L’interface Fluent rajoutée par Sean Chambers simplifie l’API :

[Migration(1)]
public class TestCreateAndDropTableMigration: Migration
{
	public override void Up()
	{
		Create.Table("TestTable")
			.WithColumn("Id").AsInt32().NotNullable().PrimaryKey().Identity()
			.WithColumn("Name").AsString(255).NotNullable().WithDefaultValue("Anonymous");
		
		Create.Index("ix_Name").OnTable("TestTable2").OnColumn("Name").Ascending()
			.WithOptions().NonClustered();
		
		Create.ForeignKey("fk_TestTable2_TestTableId_TestTable_Id")
			.FromTable("TestTable2").ForeignColumn("TestTableId")
			.ToTable("TestTable").PrimaryColumn("Id");
		Insert.IntoTable("TestTable").Row(new { Name = "Test" });
	}
	public override void Down()
	{
		Delete.Table("TestTable2");
		Delete.Table("TestTable");
	}
}

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.

Monday, February 08, 2010 3:00:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
.net | Revue du Web
# Monday, February 01, 2010

Les tweets de la semaine

http://twitter.com/MrWaz/statuses/8198003333 WCF avec Mono sur Solaris, si si c’est possible

http://twitter.com/colinsurprenant/statuses/8203661366 un autre jour, un autre système de stockage clé-valeur

http://twitter.com/webAgencyFAIL une sorte de Daily What the Fuck pour web agencies.

La question Stackoverflow

 http://stackoverflow.com/questions/1204309/force-lazy-entity-to-load-real-instance Les framework modernes d’ORM gèrent  les associations polymorphiques de façon transparente pour le développeur mais il faut être conscient que cette magie peut vous jouer des tours (voir aussi le billet d’un des développeurs de NHIbernate sur ce sujet).

Actualités Microsoft 

vs2010perf

On dirait que l’équipe de développement de Visual Studio a bien travaillé sur les performances de la dernière version de l’éditeur de code. Dans un billet l’équipe nous mets l’eau à la bouche avec le résultat d’un sondage fait auprès des utilisateurs d’une version beta privée comportant les améliorations.  Cela ressemble à un feu vert pour la Release Candidate ?

 

 

 

 

Actualités “Alt.NET”

Voici une série de podcasts autour des projets open-source ou des méthodes agiles du monde .NET (Architecture MVC, F#, Command Query, etc)  et si vous habitez pas très loin de Londres vous pouvez assister à deux évènements gratuits sous la forme de discussion avec Udi Dahan (créateur de NServiceBus) et Ayende Rahien sur NHibernate.

De l’autre côté

Pendant que nous développons (et livrons) avec des technologies comme Silverlight, Flex ou ASP.NET MVC, HTML 5 fait son bonhomme de chemin (en octobre 2009 la dernière phase du processus - initié en 2007- de validation de la spécification a commencé). Mais ce chemin n’est pas si paisible que ça : la dernière contreverse concerne le nouvel élèment <video> qui permet de présenter un média sans passer par un plug-in propriétaire. Or les premières implémentations de YouTube ou Vimeo utilisent des codecs supportant H.264 (non libre) et d’autres Ogg comme Firefox. Il faudra donc sans doute founir plusieurs versions du même média. Les explications sur le site de Robert Nyman.

Un projet

 DejaVu se propose de fournir une bibliothèque légère gérant un système de commandes, leurs objets et l’enregistrement de l’état des données pour revenir en arrière (undo / redo).Un des principaux arguments pour l’utilisation de DTO en lieu et place d’objets métiers (POCO) dans la couche de présentation vient du souhait de ne pas les polluer avec les préoccupations de cette couche : notification de changement (la famause interface INotifyPropertyChanged), des validations de premier niveau, et la gestion des modifications. Cet article sur codeproject est une bonne introduction à cette bibliothèque. Bien qu’on puisse sans doute améliorer son utilisation, elle fait réfléchir sur le problème sous-jacent.

Voici un exemple où on explicite le début de l’enregistrement des modifications et leur commit ou rollback :

UndoRedoManager.Start("My Command"); // start point
data.Name = "Name1";
data.Weight = 33;
data.MyList.Add(other);
UndoRedoManager.Commit(); 
//ou
UndoRedoManager.Undo();

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.

Monday, February 01, 2010 3:00:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
.net | Revue du Web
# Monday, January 25, 2010

Les tweets de la semaine

 http://twitter.com/MichelSchep/statuses/7986002678 une vue d’ensemble des API du .NET Framework 4 avec DeepZoom

http://twitter.com/ReedCopsey/statuses/7959294663 Toujours .NET Framework 4, une série d’articles pour aborder le parallélisme

http://twitter.com/jschmiede/statuses/7912861843 On connaît TFS, Cruise Control et PSake, voici Rake pour .NET en vidéo

La question Stackoverflow

 http://stackoverflow.com/questions/2040924/best-way-to-communicate-between-net-1-1-and-net-3-5 Comment faire communiquer une application basée sur la version 1.1 du Framework avec une application qui utilise la version 3.5 ? Socket, Remoting, WebServices tout y passe.

Actualités Microsoft et Actualités “Alt.NET”

Nous essayons d’avoir le contenu le plus original possible mais il est difficile de passer sous silence ce billet d’Ian Cooper sur la communauté Alt.Net. Il est certain que la philosophie derrière ce mouvement (qui tourne autour de l’agilité, du TDD, des principes S.O.L.I.D. de développement) a fait du chemin dans la communauté .NET en général. Il est intéressant de voir les réactions / actions entre Microsoft et cette communauté dans divers domaines : ORM (Nhibernate, Entity- Framework, Subsonic etc.), IoC (Unity, StructureMap, Autofac) et le web: FubuMVC existerait-il si ASP.NET MVC n’avait pas été développé par Microsoft ? On espère que cette saine compétition continuera et s’étendra à d’autres domaines comme par exemple les ESB (on parle encore peu de AppFabric/Dublin, NServiceBus ou MassTransit).

De l’autre côté

 Google Collections est un projet comme il en existe beaucoup : compléter le framework Java dans un domaine bien particulier. Apache Commons est un autre exemple : client HTTP, Codecs, Emails etc… Il se sert du JDK 1.5 et des génériques pour apporter plus flexibilité, moins de friction dans l’usage des API de base. Par exemple faire un join

Joiner.on(", ").join(iterable);
Joiner.on(", ").skipNulls().join(iterable);
Joiner.on(", ").useForNull("<null>").join(iterable);

Voici un article concis qui montre les fonctionnalités de la bibliothèque.

Un projet

 HTML Agility Pack est une bibliothèque pour parser du code HTML, une tâche des plus ingrates qui puisse exister pour un développeur (après écrire une documentation peut-être). Les navigateurs pardonnant beaucoup il existe beaucoup de pages qui ne respectent pas les schémas sans parler des pages générées qui rendent le code des plus exotiques.

Ce projet qui a connu en fin d’année dernière un renouveau grâce à une série de patchs et maintenant un nouveau lead technique a encore rendu son utilisation plus agréable : requête de type XPath avec l’usage de Linq, Extraction facile du texte nettoyé des balises html etc.

var atts = _doc.DocumentNode.SelectNodes("//*[@background or @lowsrc or @src or @href]");
var hrefs = _doc.DocumentNode.SelectNodes("//a[@href]");
var nodes = from node in hrefs
            where node.Attributes["target"].Value == "_blank"
	    select node;

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.

Monday, January 25, 2010 3:00:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
.net | Revue du Web
# Monday, January 18, 2010

Les tweets de la semaine

http://twitter.com/csharp_tan/status/7857602895 une liste des frameworks MVVM (Model View VierwModel – un des patrons de conception pour la couche de présentation)

http://twitter.com/wanswins/status/7793053854 on vous parlait la semaine dernière de Script# un compilateur C# vers Javascript, il en existe d’autres comme sharpkit

http://twitter.com/dotnettv/statuses/7745427907 Event Driven architecture en vidéo

La question Stackoverflow

Nous allons parler d’une méta-question aujourd’hui : Quelle API doit avoir Stackoverflow ? Le projet a été annoncé sur le blog et déjà une liste de possibles applications est apparue. Une application web n’est une application web sans une API externe : quels formats supportés, le mode d’authentification, lecture seulement etc. ?

Actualités Microsoft

La saison des conférences va commencer dans quelques semaines : Mix 2010 où on devait parler de Visual Studio mais on entendra plus parler de Silverlight 4 et on espère de Internet Explorer 9 et Windows Mobile 7. Le lancement de Visual Studio sera annoncé le 12 avril lors de la conférence Devconnections Visual Studio 

Actualités “Alt.NET”

S’il y a bien un domaine où le monde .NET est actif c’est celui des frameworks de mapping objet-relationnel (et on dirait que cela se transpose dans le développement de frameworks de présentation WPF ou même du côté  web avec MVC). Voici un billet d’humour qui résume bien les relations entre eux. Un classique mais toujours efficace.

De l’autre côté

ToughtWorks édite Mingle qui est une application de gestion de projet supportant les méthodes agile. Ce dernier utilise une base de données : Mysql, Postgresql ou Oracle. L’éditeur a décidé d’abondonner le support de Mysql. C’est un SGBD très flexible : il y a une multitude d’autres moteurs de stockage que ISAM ou Innodb (livrés en standard) pour couvrir des besoins telle que les gros volumes. Mais il semblerait que certains se tournent vers des applications plus spécialisées (voir le mouvement Nosql (MongoDb, CouchDb etc ) ou plus orientées “entreprise”comme Postgresql.

Un projet

Pas un projet mais une liste de projets cette semaine : C# open source (base de données, PDF, CRM). Comme son l’indique ce site répertorie les projets open-source du monde .NET par catégorie. On pourra consulter aussi SharpToollbox qui est plus orienté outils de développement.

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.

Monday, January 18, 2010 3:00:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
.net | Revue du Web
# Tuesday, January 12, 2010

Les tweets de la semaine

http://twitter.com/penderi/statuses/7514754215 Souvent cité comme l’outil indispensable de Visual Studio, Resharper 5 est en beta et la dernière version semble prometteuse

http://twitter.com/dougcunha/status/7496302216 un aide-mémoire sur les principaux opérateurs Linq sous la forme de 101 exemples.

http://twitter.com/escobar5/statuses/7406606555 attention long article sur les fondamentaux de Linq

La question Stackoverflow

 http://stackoverflow.com/questions/2030636/c-read-only-calculated-properties-should-they-be-methods les propriétés calculées en .NET : doit-on coder une méthode ou une propriété en lecture seule ?

Actualités Microsoft

C’est peut-être une des nouvelles fonctionnalités de Silverlight 4 les moins discutées : l’incorporation de MEF dans le runtime. MEF est un framework open-source soutenu par Microsoft pour construire des applications extensibles en fournissant un système de plug-ins. Voici une série de vidéos pour aborder le nouveau couple MEF et Silverlight.

Actualités “Alt.NET”

Une des évolutions du TDD, BDD (Behaviour Driven Design) se propose de fournir une définition des tests en langage presque naturel et surtout très proche du domaine métier (c’est en cela qu’on présente le BDD comme étant du TDD + DDD). Cucumber est un framework BDD ruby mais qui supporte .NET et Java, Gojko Adzic en donne un exemple dans un billet.

De l’autre côté

Django est un framework web fondé sur le langage Python. Il a fait à Python ce que Ruby on Rails a fait à Ruby : démocratiser l’usage d’un langage pas très populaire. Ce développeur parle de son expérience en mettant en avant les fonctionnalités souvent citées : ORM, templating, interface d’administration. De plus le langage a connu un regain d’intérêt quand Google l’a choisi pour sa plate-forme cloud Google App Engine (depuis complétée avec Java).

Un projet

Script# est peu reconnu car c’est plus un outil qu’un Framework web classique comme ASP.NET MVC. Son développeur, Nikhil Kothari, est connu dans la communauté .NET pour fabriquer beaucoup de choses dans son “garage”. Script# est un compilateur C# vers Javascript pour être utilisé dans des applications web ou des gadgets Vista par exemple. L’une des applications de Microsoft qui l’utilise est Office Web, la version en ligne des applications bureautiques.

L’expérience de codage en C# :

scriplet

Le debug :

debug

Script# permet aussi la communication avec le serveur (JSON), incorpore une bibliothèque de composants graphiques de base comme la textbox mais aussi des textboxes avec des comportements auto-complétion ou watermaquée  etc.

Pour avoir une idée plus précise des possibilités et des limitations n’oubliez pas de parcourir le fichier PDF readme (40 pages) qui est une vraie documentation.

Tuesday, January 12, 2010 5:02:00 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
.net | Revue du Web
# Monday, December 14, 2009

Les tweets de la semaine

http://twitter.com/thierry_n/statuses/6581723672 : une nouvelle version de Mono, qui voit son offre commerciale prendre forme avec Mono Touch (développement pour l’iPhone), Mono Tools for Visual Studio et la plateforme serveur avec support (Suse Linux). Au passage le compilateur Mono devient aussi “C# 4.0 compatible”.

http://twitter.com/EdgarSanchez/statuses/6566426910 on parlait la semaine dernière de GWT, Volta, voici un produit open source commercial, SharpKit, qui permet de travailler en C# et compiler vers Javascript et vice versa.

La question Stackoverflow

 http://stackoverflow.com/questions/1681546/custom-wpf-control-dependency-property-not-binding-to-external-dp/1681624#1681624 Les “dependency properties” de WPF sont un des aspects les plus puissants du framework mais aussi un des plus difficiles à appréhender. Ici un exemple qui met en lumière l’importance des metadata associées aux DP.

Actualités Microsoft

Bien que certains pensent qu’une beta 3 ou une RC pour Visual Studio 2010 serait la bienvenue, la date de sortie (22 mars 2010) approche (moins de 100 jours maintenant). Dans cet article, Somasegar présente les nouveautés autour du développement d’add-in pour Visual Studio :

  • un SDK de 10 MB au lieu de 100 MB (= documentation en ligne) 
  • WPF comme framework de base
  • facilité d’extension autour de l’éditeur
  • un site renouvelé pour découvrir les extensions existantes

On pourra consulter aussi les nombreuses vidéos issues de la conférence “Development Tools Ecosystem”

Actualités “Alt.NET”

DDDFrance est un site francophone qui propose des ressources autour du Domain Drivern Design en français. Par exemple le livre DDD Quickly a été traduit : DDD vite fait.

Au passage, en suivant les principes du DDD dont l’utilisation au plus proche du langage du domaine métier, doit-on coder en anglais ou dans sa langue maternelle ?

De l’autre côté

VirtualBox est une application de virtualisation rachetée par SUN il y a maintenant un peu plus d’un an. La version 3.1 sortie fin novembre apporte des fonctionnalités telle que la migration “live’” d’une instance d’un hôte à un autre ou encore la restauration à partir d’un snapshot (arbitraire et non le dernier). Un projet communautaire fournit une console web pour administrer les machines virtuelles.

Un projet

StatLight.logo.home Statlight est un framework de tests automatisés pour Silverlight. Vous pouvez le penser un peu comme le Nunit de Silverlight. Dans la définition de xUnit et du TDD en général il faut que l’outil fournisse un moyen de :

 

  • définir les tests (attributs)
  • les exécuter
  • vérifier les résultats (méthodes d’assertions)
  • et les assembler en suite

Il faut d’abord se procurer le template de projet de tests unitaires pour Silverlight et le code source du framework de test unitaires (on le trouvera dans le sous-répertoire source code du toolkit : C:\Program Files (x86)\Microsoft SDKs\Silverlight\v3.0\Toolkit\Jul09\Source par exemple, extraire les dlls du répertoires binaries du dossier compressé). Vous devez arriver à cette structure

setup

Voici un test sur l’interface :

[TestClass]
public class Test : SilverlightTest
{
  private MainPage sut;
 [TestInitialize]
 public void Setup()
 {
    sut = new MainPage();
    //pour nettoyer les pages entre chaque TU
    this.TestPanel.Children.Add(sut);
 }
 [TestMethod]
 public void TestButton()
 {
    Assert.AreEqual(300, sut.Width);
    //no automation
    //visible with the [assembly: 
    //InternalsVisibleTo("MySLApplication.Tests")] 
    sut.Button_Click(this, null);
    Assert.AreEqual(Visibility.Visible, sut.childrenPanel.Visibility);
 }
}

Le changement de visibilité sur les contrôles et l’assembly vient du manque d’automation dans le Framework de test. Quand vous lancez le test une page apparaît avec les résultats :

resultat du test

Statlight permet d’automatiser cette démarche et est compatible avec TeamCity ou MSBuild par exemple. Ici on ajoute l’appel à l’outil dans un post-build (à exécuter avec un compte admnistrateur) :

C:\StatLight.v0.9\StatLight.exe -x='C:/Projects/MySLApplication.Tests/Bin/Debug/MySLApplication.Tests.xap"

résultat du test dans VS

La version de Visual Studio 2010 de Web Testing devrait être compatible Silverlight mais en attendant et/ou vous êtes sur une plateforme moins récente, StatLight est l’outil à évaluer.

Monday, December 14, 2009 5:26:07 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
.net | Revue du Web
# Tuesday, December 08, 2009

Les tweets de la semaine

 http://twitter.com/sbohlen/statuses/6236293827 les vidéos de la NotAtPdc sont en lignes.

http://twitter.com/programmingjoy/status/6296011683 Mono everywhere ? Un projet qui le rend disponible pour Android.

http://twitter.com/thbonk/status/6235070045 Windows Mobile n’a pas peut-être pas l’interface utilisateur qu’il mérite mais il a tous les atouts d’un système d’entreprise dont la présence d’un système de messaging comme MSMQ

La question Stackoverflow

 http://stackoverflow.com/questions/1855211/how-to-store-several-states-in-one-variable on connaît tous les énumérations mais leur utilisation en tant que flag (combinaison de plusieurs valeurs) est moins évidente même si souvent rencontrée dans le Framework lui-même.

Actualités Microsoft

Une des nouveautés du .NET Framework 4 sont les API autour du parallélisme. Afin de profiter des processeurs à cœurs multiples Microsoft ajoute des classes de base pour simplifier le développement de traitements en parallèle. On a beaucoup entendu parler de PLinq qui permet d’appliquer des traitements parallélisés à des ensembles d’objets. Task Parallel Library (TPL) est moins connue, un article au format PDF permet de découvrir les tâches parent-enfant, leur utilisation et leur debugging.

Actualités “Alt.NET”

Un nouveau site qui dépasse le monde .NET : http://www.algorithmatic.com/browse pour apprendre, découvrir et contribuer à un répertoire d’algorithmes, le site est en ASP.NET MVC et l’éditeur de code en Silverlight.

De l’autre côté

La spécification de JavaEE a été votée cette semaine.  Le vote (non) de la fondation Apache reflète une inquiétude grandissante chez les membres du comité d’après TheServideSide.com sans parler du débat sur le processus même d’évolution, certains militant pour un abandon du JCP (Java Community Process) pour un modèle complètement Open Source.

Un projet

logo de wix

Dans ce monde d’applications web ou SAAS (Software As A Service) on en oublierait presque les programmes d’installation…

Wix est un projet que Microsoft a arrêté de développer et l’a mis à disposition de la communauté qui l’a fait vivre depuis : la version 3 est sortie cet été.

Wix est un outil pour packager les applications. Comme l’illustre le tutorial très riche, les fonctionnalités de Wix sont riches. Basé sur XML il vous permet de gérer les dépendances comme le .NET Framework, les raccourcis ou encore les fichiers d’aide etc. Le support de Visual Studio 2008 prend la forme de plusieurs types de projets dont les customs actions pour étendre l’installation avec des étapes personnalisées. La mise à jour d’application est aussi gérée.

wixProjetcs

Déclaration d’une dépendance avec le .NET Framework :

<PropertyRef Id="NETFRAMEWORK35_CLIENT"/>
<Condition Message='This setup requires the .NET Framework 3.5 client profile installed.'>
  <![CDATA[Installed OR NETFRAMEWORK35_CLIENT]]>
</Condition>

Installation d’une base de données :

<sql:SqlDatabase Id='SqlDatabase' Database='Foobar' User='SQLUser' Server='[SQLSERVER]'
              CreateOnInstall='yes' DropOnUninstall='yes' ContinueOnError='yes'>
 <sql:SqlScript Id='CreateTable' BinaryKey='CreateTable' ExecuteOnInstall='yes' />
</sql:SqlDatabase>
 ou encore configurer le firewall.
Tuesday, December 08, 2009 5:44:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
.net | Revue du Web
# Tuesday, December 01, 2009

Les tweets de la semaine

 http://twitter.com/pedeveloper/statuses/6046161616 les index en base de données, on connaît mais les index clustérisés ? Un rapide et intéressant tour d’horizon des index sous SQL Server.

http://twitter.com/prodotnet pour apprendre (ou ré-apprendre) .NET un tweet à la fois.

La question Stackoverflow

 http://stackoverflow.com/questions/129389/how-do-you-do-a-deep-copy-an-object-in-net-c-specifically Copier un objet de type valeur est facile, copier un objet de type référence l’est moins car il a souvent lui même des références vers d’autres objets d’où le concept de “deep copy”, “deep”car on doit gérer un graphe d’objets.

Actualités Microsoft

C’est le grand calme après la tempête PDC. Que retenir de cette édition ? D’après Keith Elder dans un post sur dzone il faut faire le pari de Silverlight 4 et Entity Framework. Il est vrai qu’avec la version 4 de Silverlight on arrive au WPF/E (Everywhere) annoncé lors de sa première incarnation. De son côté le framework de mapping objet relationnel semble être le plus stable des investissements fait dans  ce domaine et son orientation “POCO” est un très bon signe.

Actualités “Alt.NET”

Depuis que Volta a été abandonné par Microsoft, il y a une place pour un framework comme GWT en .NET. Script# est similaire mais incomplet. Un message sur la liste de discussion altnet parle d’un effort par un développeur, Frank, de répondre à ce besoin. Est-ce qu’il y une place entre Silverlight et le couple ASP.NET MVC + jQuery ? Si cela ne vient pas de Microsoft peut-être que la communauté délivrera, appel à contribution lancé donc.

De l’autre côté

 La beta d’Adobe Air 2 est sortie en même temps que celle de Silverlight 4. Flash a connu 4 grandes étapes :

  • la création du plugin en 1996-97 qui a permis d’utiliser (et d'abuser) des animations vectorielles
  • le codec vidéo qui a révolutionné le streaming de vidéo sur le web (et de perdre beaucoup de temps sur youtube.com)
  • Flex : peu connu du grand public (sauf pour les 10.000 clients Twitter), c’est avec Flex et ActionScript (le langage) que Macromedia a fait son entrée dans le monde du développement d’entreprise (avec un back-end en Java)
  • Air : qui permet d’exécuter un programme en dehors du navigateur.

On compare souvent Air et Silverlight car ils se positionnent comme la plate-forme “smart client” (et sont souvent cités comme les concurrents de HTML5). Silverlight a l’avantage d’offrir une expérience de développement unifiée (client et serveur en .NET), Flash/Flex/Air celui du pourcentage de déploiement sur les postes des particuliers. Dans sa dernière incarnation Adobe fournit dans la suite un nouvel outil Catalyst qui permet de passer plus facilement d’un design de contrôle purement vectoriel à un “skin”réutilisable dans l’environnement de développement. 

Un projet

logo

dotlesscss (.less{}) se propose de moderniser la manipulation et la définition  des feuilles de styles (CSS). Il existe des techniques pour optimiser les styles en utilisant les bons sélecteurs mais il est vrai que la maintenance peut être fastidieuse.

dotlesscss supporte par exemple la déclaration de variables globales, ici une couleur :

@brand_color: #4D926F;
 
#header {
  color: @brand_color;
}
 
h2 {
  color: @brand_color;
}

ou encore les propriétés calculées :

@the-border: 1px;
@base-color: #111;
 
#header {
  color: @base-color * 3;
  border-left: @the-border;
  border-right: @the-border * 2;
}
 
#footer { 
  color: (@base-color + #111) * 1.5; 
}

Autopromotion (juste un peu)

nVentive sera présente lors des TechDays à Montréal : Erik Renaud animera une présentation d’introduction sur le Test-Driven Development (TDD).

Tuesday, December 01, 2009 1:18:23 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0] -
.net | Revue du Web
# Tuesday, November 24, 2009

Les tweets de la semaine

Voici un site intéressant pour suivre les tweets de la communauté .NET : http://managedassembly.com/twitter C’est seulement un groupe sélectionné, certains se transforment en “drama queen” parfois mais l’essentiel est là : le partage de connaissances au sens large dans la communauté .NET

La question Stackoverflow

http://stackoverflow.com/questions/289176/how-is-duck-typing-different-from-the-old-variant-type-and-or-interfaces Avec les fonctionnalités de C# 4 comme le mot-clé dynamic, on parle de duck-typing, mais que recouvre ce terme ? Une explication avec exemple dans la question de la semaine.

Actualités Microsoft

La PDC 2009 ne restera sans doute pas dans les annales comme une des plus importantes. Sauf peut-être pour les conférenciers qui ont reçu un PC portable Tablet PC gratuitement.

Comme on le pressentait dans cette chronique les semaines précédentes, les sessions et annonces ont tourné autour de Azure, Dublin, Office 2010 et Silverlight 4 avec aussi un bilan de Windows 7.

Azure : en plus de l’offre commerciale qui démarre en 2010, l’éditeur a annoncé un AppStore de Azure sous le nom de code Dallas qui sortira en beta dans le courant de l ‘année prochaine. Mais aussi des outils comme ce Power Pack de synchronisation de base de données SQL Server vers Azure.

Dublin : Le projet a au moins un nom : Windows Server AppFabric et une beta. Et Velocity, le cache distribué, est aussi absorbé dans ce projet qui permet manager WCF et le nouveau WF dans IIS. 

Silvelright 4 : en plus des nouvelles API autour de la webcam et l’accès au système de fichiers local, on assiste au un rattrapage (attendu) du framework avec la CLR classique : présence des ICommand et IDataeErrorInfo chères aux développeurs WPF, compatibilité des binaires (i.e. plus de projets spécifiques Silverlight pour les composants communs), Tim Heuer a comme toujours un billet qui détaille ces nouveautés.

Divers : sortie de ASP.NET MVC 2 Beta, des renommages de produits : RIA Services et ADO.NET Data Services tombent dans l’ombrelle de WCF, un protocole d'accès aux données basé sur Atom : OData , la sortie de Geneva ou Windows Identity Foundation … Ah si on oubliait : l’annonce de IE9 mais à part un Power Point repris partout les informations intéressantes seront divulguées lors de MIX2010 en mars prochain.

Actualités “Alt.NET”

Finalement la PDC virtuelle alternative (NotAtPdc) a connu un certain succès avec une vingtaine de sessions sur ASP.NET MVC, Entity Framework, les bonnes pratiques de développement et même Javascript :) Espérons que les enregistrements soient disponibles.

De l’autre côté

Terracotta a annoncé le rachat de Quartz (version java) après celui de EhCache durant l’été. C’est une tendance, beaucoup d’entreprises fondées sur un projet Open Source phare rachète des projets connexes pour bâtir une offre plus complète. JBoss, Spring en sont les exemples les plus cités. Terracotta a connu un vrai succès en simplifiant la distribution d’applications. En utilisant la manipulation de byte code au runtime, l’application permet à des threads sur des JVMs différentes (CLR en .NET) de communiquer comme si elle appartenait à la même. Les cas d’utilisation les plus courants sont la distribution de cache, la réplication de sessions ou le clustering de POJO ou Spring Bean.

Un projet

PostSharp est une librairie AOP pour .NET. Cette librairie ajoute le code de l’aspect après la compilation. On utilise souvent l’AOP pour des considérations techniques comme l’audit, le cache, les exceptions ou encore la démarcation des transactions sur des couches comme le fait Spring.NET.

Le projet est basé sur les attributs .NET, en héritant de OnMethodBoundaryAspect par exemple on développe un composant qui sera exécuté à l’entrée et à la sortie de la méthode :

public sealed class MyAttribute : OnMethodBoundaryAspect

On peut alors surcharger les méthodes pertinentes :

public override void OnEntry( MethodExecutionEventArgs eventArgs )
{
	Trace.WriteLine(
	string.Format( "Entering {0}.{1}.",
				   eventArgs.Method.DeclaringType.Name,
				   eventArgs.Method.Name ),
	this.category );
}
public override void OnExit( MethodExecutionEventArgs eventArgs )
{
	Trace.WriteLine(
	string.Format( "Leaving {0}.{1}.",
				   eventArgs.Method.DeclaringType.Name,
				   eventArgs.Method.Name ),
	this.category );
}

et appliquer cet attribut sur notre méthode :

[Trace]
private static void ToBeTraced()
{
    Console.WriteLine("Hello, world." );
}
 
PostSharp travaille sur les assembly compilées, au niveau du MSIL, il est donc compatible avec tous les langages .NET
Tuesday, November 24, 2009 3:00:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [2] -
.net | Revue du Web
Search
Archive
<July 2010>
SunMonTueWedThuFriSat
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567
Statistics
Total Posts: 98
This Year: 28
This Month: 3
This Week: 0
Comments: 17
Sign In