Revue du web du 15 mars

by matthieu 3/14/2010 11:00:00 PM

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.

Categories : coding Tags: | Permalink | commentsComments (0) | Post RSSRSS comment feed

Revue du web du 8 Mars

by matthieu 3/7/2010 7:00:00 PM

Les tweets de la semaine

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

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

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

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

La question Stackoverflow

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

Actualités Microsoft 

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

Actualités “Alt.NET”

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

De l’autre côté

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

Un projet

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

HLSL

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

image

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

ShaderGenerated

Categories : coding Tags: | Permalink | commentsComments (0) | Post RSSRSS comment feed

Revue du Web du 1er Mars

by matthieu 2/28/2010 8:00:00 PM

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

Categories : coding Tags: | Permalink | commentsComments (0) | Post RSSRSS comment feed

Revue du web du 15 février

by matthieu 2/14/2010 10:41:00 PM

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.

Categories : coding Tags: | Permalink | commentsComments (0) | Post RSSRSS comment feed

Revue du web .NET du 8 février

by matthieu 2/7/2010 8:00:00 PM

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.

Categories : coding Tags: | Permalink | commentsComments (0) | Post RSSRSS comment feed

Revue du web .NET du 25 janvier

by matthieu 1/25/2010 1:22:03 AM

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.

Categories : coding Tags: | Permalink | commentsComments (0) | Post RSSRSS comment feed

Revue du web .NET du 18 janvier

by matthieu 1/18/2010 1:16:00 AM

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.

Categories : coding Tags: | Permalink | commentsComments (0) | Post RSSRSS comment feed

Revue du web .NET du 11 janvier

by matthieu 1/11/2010 10:02:00 AM

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.

Categories : coding Tags: | Permalink | commentsComments (0) | Post RSSRSS comment feed

Revue du web .NET du 21 décembre

by matthieu 12/21/2009 11:24:53 AM

Les tweets de la semaine

http://twitter.com/jrguay/statuses/6797869877 SharePoint 2010 offre une nouvelle expérience de développement et maintenant le monde fancy du web (jQuery) peut rencontrer le monde de l’entreprise.

http://twitter.com/willyxoft/statuses/6772998114 Spring 1.3.0 est sorti, les changements majeurs sont le support de NHibernate 2.1. (avec en plus un byte code provider), et la disponibilité de template de projets pour Visual Studio. Plein d’autres choses à découvrir dans la documentation exhaustive : http://www.springframework.net/docs/1.3.0/reference/html/index.html La version 2.0 est déjà en développement, elle apportera une simplification de la configuration.

http://twitter.com/silverlightblog/statuses/6800040893 le moment des fêtes est toujours un peu plus calme, de quoi tuer le temps avec un jeu … simple.

La question Stackoverflow

 http://stackoverflow.com/questions/1935726/best-way-to-send-message-to-thread-c-net-inter-thread-communication .NET 4.0 apporte de nouvelles classes autour de la concurrence et des collections qui  peuvent se rendre utiles pour certains patterns de communication entre Threads.

Actualités Microsoft

Non on ne vous parlera pas du retard d’un certain logiciel pour régler certains problèmes de performance :)

IronRuby est une implémentation du langage Ruby pour .NET. On en a beaucoup entendu parlé avec la DLR (Dynamic Language Runtime) récemment et avec l’arrivée du mot-clé dynamic dans .NET 4.0. La DLR a permis la naissance de projets comme IronPython et IronRuby en fournissant un ensemble de services au-dessus de la CLR. Dans cet article Jimmy Schementi présente la version RC1 du projet.

Actualités “Alt.NET”

Récemment sur le blog officiel de NHibernate, deux billets donnent un aperçu de la verion 3.0 du framework de mapping objet-relationnel :

Le premier donne un état du portage de Linq to NHibernate vers la nouvelle version qui ne base plus sur l’API Criteria et utilise le nouveau parseur de la version 2.1. Les fonctionnalités du fournisseur actuel sont implémentées et testées, il ne “reste” plus que les fonctionnalités autour de requêtes imbriquées ou encore les unions.

Le deuxième billet aborde la nouvelle API de Criteria : QueryOver. L’API criteria était basée sur l’utilisation d’objets pour requêter (Query, Expressions, Alias) mais reposait aussi sur des chaînes de caractères pour passer le nom des propriétés par exemple. Le billet passe en revue les expressions lambdas et les méthodes d’extensions introduites par la nouvelle version.

De l’autre côté

On parle souvent des nouveaux langages comme Ruby ou de la renaissance de certains comme Python mais certains ne sont que des noms vaguement entendu lors d’un cours d’informatique. Erlang fait partie de ces derniers. Eugene Letuchy nous parle de l’utilisation de Erlang dans l’infrastructure de “chat”de Facebook. N’oubliez pas de consulter le fichier pdf en bas de billet, on y apprend des chiffres intéressants.

Un projet

WPF Reports est un projet open source de technologie de rapports se basant sur WPF. Bien qu’au début de son existence il supporte aussi les en-têtes/pieds de page que le databinding et des choses moins courantes comme les codes barres et l’export XPS.

barcodereport chartreport

Le projet se base beaucoup sur le XAML, le langage utilisé par WPF pour déclarer les objets d’interface et en particulier l’API autour des documents comme le FlowDocument. Voici un exemple de template qui définit un pied de page :

 <xrd:SectionReportFooter PageFooterHeight="2" Padding="10,0,10,10" FontSize="12">
        <Table CellSpacing="0">
            <Table.Columns>
                <TableColumn Width="*" />
                <TableColumn Width="*" />
            </Table.Columns>
            <TableRowGroup>
                <TableRow>
                    <TableCell>
                        <Paragraph>
                            <Image Tag="dpd.jpg" Height="0.5cm" />
                        </Paragraph>
                    </TableCell>
                    <TableCell>
                        <Paragraph TextAlignment="Right">
                            Page
                            <xrd:InlineContextValue PropertyName="PageNumber" FontWeight="Bold" /> of
                            <xrd:InlineContextValue PropertyName="PageCount" FontWeight="Bold" />
                        </Paragraph>
                    </TableCell>
                </TableRow>
            </TableRowGroup>
        </Table>
    </xrd:SectionReportFooter>

Voici l’initialisation du rapport :

var reportDocument = new ReportDocument();
StreamReader reader = new StreamReader(
   new FileStream(@"Templates\ComplexReport.xaml", FileMode.Open, FileAccess.Read));
reportDocument.XamlData = reader.ReadToEnd();
reportDocument.XamlImagePath = Path.Combine(Environment.CurrentDirectory, @"Templates\");
reader.Close();

On utilise ensuite des objets de type ReportData pour fournir les données du rapport via des propriétés ou des DataTables pour remplir des grids :

List<ReportData> listData = new List<ReportData>();
for (int i = 0; i < 5; i++) // generates five reports
{
	ReportData data = new ReportData();
	// set constant document values
	data.ReportDocumentValues.Add("PrintDate", dateTimeStart); // print date is now
	data.ReportDocumentValues.Add("ReportNumber", (i + 1)); // report number
	// sample table "Ean"
	DataTable table = new DataTable("Ean");
	table.Columns.Add("Position", typeof(string));
	table.Columns.Add("Item", typeof(string));
	table.Columns.Add("EAN", typeof(string));
	table.Columns.Add("Count", typeof(int));
	Random rnd = new Random(1234 + i);
	int count = rnd.Next(20) * (rnd.Next(2) + 1);
	for (int j = 1; j <= count; j++)
	{
		// randomly create some articles
		table.Rows.Add(new object[] { j, "Item " + (j + (1000 * (i + 1))).ToString("0000"), "123456790123", rnd.Next(9) + 1 });
	}
	data.DataTables.Add(table);
	listData.Add(data);
}
XpsDocument xps = reportDocument.CreateXpsDocument(listData);
documentViewer.Document = xps.GetFixedDocumentSequence();

Pause

La revue du web fait une petite pause de deux semaines. Nous serons de retour le 11 janvier.

Categories : coding Tags: | Permalink | commentsComments (0) | Post RSSRSS comment feed

Revue du web .NET du 1er décembre

by matthieu 12/1/2009 1:25:58 AM

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

Categories : coding Tags: | Permalink | commentsComments (0) | Post RSSRSS comment feed