Another .NET Blog

To content | To menu | To search

Thursday 21 January 2010

Rx Framework

Ça fait quelques temps que je vois fleurir sur internet des références de plus en plus nombreuses aux Reactive Extensions, plus communément appelé Rx. Je ne savais pas trop ce que c'était (j'en sais un peu plus maintenant, mais le sujet a l'air d'être... disons, vaste), et c'est 2 posts (ici et ) sur le blog de Jon Skeet qui m'ont enfin décidé à aller voir sur devlabs de quoi il en retournait.

Et je dois bien dire que je suis bluffé. Mais vraiment. Je crois bien que l'on a ici un framework qui devrait radicalement changer notre manière de travailler. Alors bien sûr j'en ai vu trop peu pour être réellement objectif et constructif sur le sujet, et je vais regarder quelques vidéos sur Channel9 sur le sujet avant de m'en faire une idée précise, mais je suis déjà sous le choc.

Pour vous faire une idée de ce qu'est la "bête", je vous recommande plus que chaudement de commencer par cette vidéo, où l'un des développeurs de la librairie (accessoirement aussi l'un des co-fondateurs de LINQ, ça aide) nous explique grossièrement l'objectif de Rx. Et avant de regarder la pléthore de vidéos disponibles sur Channel9 ( ce que je dois encore faire également), jetez tout de suite un oeil à cette vidéo, qui est un cas concret du fonctionnement de Rx, et où on se rend compte de sa puissance à travers un exemple concret: comment implémenter du drag 'n drop d'un contrôle WPF dans une fenêtre au runtime.

Mais je dois vous laisser, j'ai encore BEAUCOUP de vidéos à aller regarder, là, maintenant ;)

Thursday 14 January 2010

VS2010 et .NET 4 pour le 12 Avril prochain?

Vu sur developpez.com, les sorties de Visual Studio 2010 et .NET 4 prévues pour le 12 Avril prochain, une RC en Février ?

Le compte à rebours est désormais lancé!

Nouvelle release de Code Contracts

Hier soir est sortie une nouvelle release de Code Contracts, à télécharger ici.

Pour info, la release note:

Release 1.2.30113.1 (Jan 13, 2010) Contracts

  • Silverlight 4 support added, Silverlight2 dropped.
  • We now have a set of contract reference assemblies for the different target frameworks (3.5, 4.0, Silverlight 3.0, Silverlight 4.0). This allows contracts on newer APIs and avoids problems where the rewriter added the wrong references to the target assembly.
  • Contract invariant methods now must be private.
  • Invariants on auto properties are turned into pre and post conditions of the corresponding setter and getter. This permits using auto properties with contracts.
  • Added more contracts to System.Linq, System.Net, System.Collections, System.Data, System.Math namespaces
  • Fixed issues of referencing v3.5 assemblies with contracts from v4.0 projects
  • Tweaks to extraction of contracts from VB constructors

Runtime Checker

  • Makes sure contract invariant methods are not called directly
  • Object invariants are now delayed until the end of the constructor to avoid checking them prematurely
  • Fixes to contract inheritance that would generate bad IL.
  • Avoid FxCop warnings about catching all exceptions in OldValue expressions
  • Initial support for ContractIgnoredAttribute added (see documentation)
  • Fix in rewriting attributes with arrays of enums
  • Fixed codegen issues when removing Assert/Assumes from code

Documentation Generation

  • Fixed path problems
  • Fixed inheritance problems

Static Checker

  • Improved handling of IsNan
  • Improved error messages now include the condition in all cases (not just for other assemblies)
  • Improved interval analysis
  • Improved handling of box operations
  • Squigglies now work in VS2010
  • Fixed handling of unicode error messages in the output
  • Better handling of IntPtr and UIntPtr
  • Better handling of inferred mutations at method calls
  • Masking of warnings at the assembly level using SuppressMessage now supported for global warnings

Monday 21 December 2009

Go go PEX et Code Contracts !!!

Si vous ne connaissez pas PEX ou Code Contracts, bonne nouvelle! Il existe un podcast en français (oui oui!) qui présente très succinctement ces 2 nouveaux outils prévus pour .NET 4.0 qui vous permettront de faciliter vos développements en TDD.

En effet, Code Contracts vous permet de définir dans le corps de vos fonctions des contrats (étonnant non?) qui vont porter sur les valeurs d'entrée et de sortie de vos fonctions. Ça vous permet d'éviter toutes ces séries de tests rébarbatives vérifiant par exemple que ArgumentNullException est bien lancée quand vous passez un null, ou qu'une fonction ne retourne jamais null. De quoi alléger un peu les test.

PEX quant à lui va vous permettre d'automatiser l'appel des fonctions avec des valeurs plus ou moins aléatoires, ce qui va vous permettre de voir dans quelle mesure vos tests unitaires couvrent bien l'intégralité des possibilités d'erreur (ou non) lorsque vous utilisez ces fonctions.

2 nouveaux outils que je trouve vraiment très intéressant et pour lesquels je pense faire prochainement des articles lorsque je commencerai à les utiliser.

Via Coq Blog.

Friday 18 December 2009

VS 2010 RC en février 2010

Finalement il y aura bien une nouvelle version intermédiaire de VS2010 avant la version finale:

In October, we shipped Beta 2 of Visual Studio 2010 and .NET Framework 4. Since then, we have received a lot of helpful, constructive feedback from you all. Thank you.

A lot of you have given us very positive feedback on the new capabilities of VS 2010 and .NET Framework 4 and are very happy with the breadth of value that we are poised to deliver in this release.

At the same time, you have also given us feedback around performance issues, specifically in a few key scenarios including virtual memory usage. As you may have seen, we significantly improved performance between Beta 1 and Beta 2. Based on what we’ve heard, we clearly needed to do more work. Over the last couple of months, our engineering team has been doing a push to improve performance. We have made significant progress in this space since Beta 2.

With these improvements in the product, we do want to make sure that they truly address the performance issues while continuing to maintain a high quality bar. As a result, we are going to extend the beta period by adding another interim checkpoint release, a Release Candidate with a broad “go live” license, which will be publicly available in the February 2010 timeframe.

Since the goal of the Release Candidate is to get more feedback from you, the team will need some time to react to that feedback before creating the final release build. We are therefore moving the launch of Visual Studio 2010 and .NET Framework 4 back a few weeks.

Please continue to send us your feedback. It truly has an impact on the product development process and helps us to deliver a high quality product.

On ne peut que s'en féliciter, vu le nombre de grognements de plus en plus importants des utilisateurs de l'actuelle Beta2 quant aux problèmes de performance de l'IDE.

La source originale se trouve ici.

Exécuter une tâche sur le même thread que celui de l'UI

Le problème est classique: vous créez un thread pour réaliser une opération, et vous voulez que ce thread modifie un composant graphique (comme une ProgressBar par exemple). La solution, que vous devez sûrement connaître, consiste à exécuter l'action en question sur le même thread que celui de l'UI, c'est à dire, en WPF, utiliser la fonction BeginInvoke de la propriété Dispatcher de votre contrôle. Si vous avez un grand nombre de modifications de votre interface utilisateur qui sont effectués depuis une ou plusieurs tâches, plutôt que d'appeler BeginInvoke de multiples fois, il existe une solution toute simple, qui consiste à créer et lancer vos tâches en utilisant une TaskFactory à laquelle vous aurez donné comme TaskScheduler celui chargé de gérer l'UI.

Pour cela, c'est très simple:

public partial class MyUserControl : UserControl
{
    private TaskFactory _ui;

    public MyUserControl()
    {
        InitializeComponent();

        _ui = new TaskFactory(TaskScheduler.FromCurrentSynchronizationContext()); 
        _ui.StartNew(() => { Width = 100; } );
    }
}

Et donc toutes les tâches que vous créerez depuis cette TaskFactory seront "schedulées" (je ne sais pas trop comment traduire ça au mieux) sur le thread de l'UI, et donc vous dispensera d'utiliser Dispatcher.BeginInvoke à tout va.

A noter que le code suivant fonctionne tout aussi bien:

public partial class MyUserControl : UserControl
{
    private TaskScheduler _ts;

    public MyUserControl()
    {
        InitializeComponent();

        _ts = TaskScheduler.FromCurrentSynchronizationContext();
        Task.Factory.StartNew(() => { Width = 100; }, _ts);
    }
}

Thursday 17 December 2009

TPL et téléchargement: suite et fin

Après le précédent article d'introduction à la TPL et l'exemple de code de téléchargement d'un fichier sur internet, voici la suite, et fin, avec l'implémentation de la reprise, de la progression et de la fin (par annulation, ou à cause d'une erreur) du téléchargement.

Continue reading...

Introduction aux Parallel Extensions : Télécharger un fichier en asynchrone

Voici mon tout premier article sur les tant attendues (du moins par moi) Parallel Extensions, la librairie de threading .NET 4.0 qui va tout révolutionner (ceci est un avis hautement subjectif j'en conviens).

Au menu de cet article, un cas concret: télécharger un fichier sur internet, de manière asynchrone. Avec en plus la possibilité de stopper le téléchargement, de connaître la progression, et de pouvoir reprendre un téléchargement interrompu.

Continue reading...

Friday 11 December 2009

Liste et description des exemples de Parallel Programming en .NET 4.0

A voir sur le blog de l'équipe en charge du développement du parallel programming pour le .NET 4.0, la description de tous les exemples liés à l'utilisation de leur librairie (téléchargeables ici)

Et pour bientôt, un article ici-même sur une utilisation de cette librairie avec un exemple pratique.