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.

# 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
Search
Archive
<May 2010>
SunMonTueWedThuFriSat
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345
Statistics
Total Posts: 98
This Year: 28
This Month: 1
This Week: 1
Comments: 17
Sign In