Monday, July 18

Reverse order StackPanel for Silverlight

I needed a StackPanel that orders element Vertically from bottom to top, but couldn’t find one. Setting VerticalAlignment="Bottom" on the elements as suggested on many sites doesn’t do the trick, since the Z-order is not modified (this shows true if your elements overflow like in a 3D stack).

So here’s the code I created for a bottom-top StackPanel, free for you to use:

public class ReverseStackPanel : Panel
{
    protected override Size MeasureOverride(Size availableSize)
    {
        foreach (FrameworkElement child in Children)
        {
            child.Measure(availableSize);

        }

        return availableSize;
    }

    protected override Size ArrangeOverride(Size finalSize)
    {
        double bottom = finalSize.Height;
        foreach (var child in Children)
        {
            child.Arrange(new Rect(0, bottom-child.DesiredSize.Height, finalSize.Width, child.DesiredSize.Height));
            bottom -= child.DesiredSize.Height;
        }
        return finalSize;
    }

}

Reverse order StackPanel for Silverlight

I needed a StackPanel that orders element Vertically from bottom to top, but couldn’t find one. Setting VerticalAlignment="Bottom" on the elements as suggested on many sites doesn’t do the trick, since the Z-order is not modified (this shows true if your elements overflow like in a 3D stack).

So here’s the code I created for a bottom-top StackPanel, free for you to use:

public class ReverseStackPanel : Panel
{
    protected override Size MeasureOverride(Size availableSize)
    {
        foreach (FrameworkElement child in Children)
        {
            child.Measure(availableSize);

        }

        return availableSize;
    }

    protected override Size ArrangeOverride(Size finalSize)
    {
        double bottom = finalSize.Height;
        foreach (var child in Children)
        {
            child.Arrange(new Rect(0, bottom-child.DesiredSize.Height, finalSize.Width, child.DesiredSize.Height));
            bottom -= child.DesiredSize.Height;
        }
        return finalSize;
    }

}

Tuesday, September 28

HTML5 et Silverlight / Flash

LogoSilverlight Depuis quelque temps, j’entends dire ça et là que HTML5 pourrait remplacer Flash et Silverlight. Soit. Que ça serait une raison pour ne pas faire de Silverlight. Alors là, c’est tout faux.

La première question à se poser est: votre application riche, quand doit-elle tourner dans la majorité des navigateurs déployés? Aujourd’hui ou dans 4 ans?

Je parie que votre projet n’attendra pas 4 ans. Alors, s’il est de bon ton d’aider à avoir une norme pour HTML5 (la RFC est à l’état de Working Draft au W3C, c’est le moment d’y collaborer), il faut tout de même comprendre qu’adopter HTML5 aujourd’hui c’est condamner l’application à ne fonctionner que dans quelques rares navigateurs, et encore, au prix de nombreux “if navigateur==Firefox4.0 ne pas faire ça”. Aucun navigateur n’implémente complètement HTML5 aujourd’hui, et ça ne sera pas le cas demain. Pour une raison bête: la norme HTML5 n’existe pas encore. Pire: si une application est faite en HTML5 aujourd’hui, il faudra la corriger quand la norme finale sortira et que les navigateurs devront la respecter.

La deuxième question est: voulez-vous utiliser un standard à tout prix, ou est-ce que la fourniture d’une bonne expérience utilisateur compte pour vous? Silverlight est une technologie unique en son genre, car elle permet depuis le début (ça faisait partie de son cahier des charges) la collaboration ergonome-graphiste-développeur. Expression Blend et son SketchFlow sont la quintessence de ce qu’on peut faire de mieux pour offrir à l’utilisateur l’application de ses rêves. En HTML5, point d’outil de ce genre. Le but est d’avoir une norme, pas un workflow axé sur la satisfaction utilisateur.

La dernière question est: pourquoi parle-t-on autant de HTML5 aujourd’hui alors que ce n’est qu’un embryon? Il faut savoir que depuis quelques mois la guerre des RIA fait rage. Certains analystes ont prédit que les RIAs seraient le prochain succès, et du coup tout le monde veut avoir le sien. Adobe a amélioré le développement Flash avec Flex, Microsoft a créé et bien diffusé Silverlight, Oracle s’est cassé les dents avec son JavaFX. Et Google dans tout ça? Eux qui sentent qu’ils doivent absolument fournir toutes les technologies Web même s’ils ont 2 ans de retard et aucune légitimité (c.f. Google Wave, par exemple), que proposent-ils? Pas de lecteur RIA. Alors dire qu’on est gentil parce qu’on veut proposer un standard et expliquer à tous les internautes qu’il vaut mieux avoir dans 4 ans l’expérience utilisateur qu’on pourrait avoir aujourd’hui, c’est une tactique qui peut marcher quand on n’a rien de mieux.

Reste que dans la série “on est des gentils parce qu’on aime les standards”, je trouve un peu trop facile de taper sur Microsoft comme se plaît à le faire la communauté (Googlienne?) HTML5. Mon expérience de .NET ces 10 dernières années m’a montré que Microsoft a respecté et même soutenu les standards du Web que sont SOAP, WS-I 1.1, XML, JSON, et j’en passe.

Alors, mes clients et moi, nous offrons aujourd’hui à l’utilisateur l’expérience que certains lui promettent pour demain. Et nous passerons à HTML5 dans 4 ans, quand il deviendra légitime. Ou pas, si Silverlight conserve son avance.

Wednesday, December 9

Silverlight for Windows Mobile announced on march 2010?

I’m just guessing, LogoSilverlightbut Gerry O’Brien writes on his blog that the Las Vegas March 2010 Mix 2010 will be about “Microsoft's web platform and tools such as Windows Mobile, Silverlight, Expression, and ASP.NET”.

The fact is Mix 2010 usually is a Web-centric event. Plus Silverlight for Windows Mobile has been under developement (and late) for quite a while. One might guess that Mix 2010’s big announcement could be Silverlight for Windows Mobile.

We’ll see on March 15 whether that was a smart guess... :-)

Edit: Christophe Lauer tells me that Scott Guthrie already twitted about that past yersterday. Worse even: I wasn’t following Scott on Twitter. I feel ashamed!

Thursday, April 30

Standard deviation in Silverlight using LINQ

For a security feature in a Silverlight project I needed to compute the standard deviation of a series. Googling for it I quickly found a code sample, but it dates from the days before LINQ, which makes it 70 lines-long.

Thanks to LINQ, you can write a method that computes a standard deviation with only 3 lines. It works with Silverlight 2 (and 3) and with whatever .NET 3.5 application (WPF, ASP.NET, ...). Here’s my code:

using System;
using System.Data.Linq;

public static class SecurityMaths
{
    public static double StandardDeviation(this IEnumerable<double> data)
    {
        double average = data.Average();
        var individualDeviations = data.Select(num => Math.Pow(num - average, 2.0));
        return Math.Sqrt(individualDeviations.Average());
    }
}

Note that I defined my method as an extension method, so that it can be used just like the Average LINQ method. Which means you can use it that way:

double[] numbers = new double[] { 2,4,4,4,5,5,7,9 };
double average = numbers.Average();
double standardDev = numbers.StandardDeviation();

What a clean code: it’s almost as obvious as the mathematical definition of the standard deviation. Thanks a ton, LINQ!

Tuesday, February 24

MCPD Windows Developer 3.5

Here are another two in my passed certifications series: MCDP Windows Developer 3.5 and MCTS Windows Forms 3.5. My full list of certifications is there.

6 certifications .NET 3.5 passed in a year right from their first day out, so now I can show off my expertise.

MCTS4 MCPD2 MCT2

Thursday, January 29

MCPD ASP.NET 3.5

MCPD(rgb)I’m now a Microsoft Certified Professional Developer, ASP.NET 3.5 Applications. Together with my previous certifications, that makes it up to prove my proficiency in ASP.NET 3.5, AJAX, WPF, Silverlight 2, ADO.NET and Windows Forms.

What makes me especially proud is that I had to answer the questions for this certification in half the time allowed since I did it during TechEd Barcelona and had to go back and take my shift.

Want to see which certifications I have? It’s on my site – or just go and grab my Microsoft official transcript.