Retour sur .NET Micro Framework et Gadgeteer à Alt.NET Montréal

logoFooter[1] Wow, une belle soirée: une audience attentive et intéressée. Voici quelques liens qui ont été discutés lors de la soirée:

Vous pouvez télécharger les fichiers et la présentation sous format zip ici et sur le site du groupe .Net Montréal.

J’ai oublié des autocollants Gadgeteer à la maison, alors si vous en voulez faites moi signe et on s’arrangera pour vous les envoyer!

Merci, si vous avez des questions n’hésitez pas à me contacter et j’ai hâte de voir vos projets!

Microsoft Gadgeteer, le début

À la fin de l’année dernière, j’avais publié que Microsoft Research travaillait sur un prototype de plateforme électronique roulant sous NETMF nommée Gadgeteer. Et bien il semble maintenant qu’il soit sorti de la phase de recherche pour “commercialiser” cette plateforme: Microsoft .NET Gadgeteer.

GHI Electronics ont sorti le premier kit Gadgeteer nommée GHI FEZ Spider Starter Kit. Celui-ci vous permet de coder vous-même à partir de votre langage préféré (et je parle ici du C# ;) ) un module électronique sans connaitre les bases de l’électronique. En fait, c’est une abstraction matérielle pour permettre aux hobbyiste en herbes de commencer sans apprendre comment souder ou connecter les divers éléments électroniques.

Vous pouvez voir les 2 premières applications démonstrateurs:

Arcade Console

Flipbook maker

Alors, cela vous intéresse?

Un substitut pour .Net Reflector de Red Gate

Si vous êtes comme moi, vous avez déjà utiliser .Net Reflector pour décompiler quelques classes .Net. Le produit est depuis quelques années une propriété de Red Gate qui gentiment éliminer la version gratuite pour la rendre payante. Je suis tombé cet article de Corey Roth où il parle que même la dernière version de Reflector contient une Time Bomb, donc que vous seriez obligé de mettre à jour vers la version payante à partir du 1er juin.

Dans son article, Corey offre une alternative très intéressante et gratuite, qui est en fait une réponse directe à la décision de Red Gate: ILSpy.

Bon espionnage ;)

Dévoilement de Microsoft LightSwitch

Microsoft vient de dévoiler LightSwitch, un outils de développement d’application d’entreprise sans avoir à toucher au code. Jason Zander en fait une excellente introduction sur son site.

Il y aura un template pour C# et pour VB. A première vue, l’application générée semble roulez sous WPF pour la version Desktop, et surement Silverlight ou XBAP pour la version web.

Le beta sera disponible le 23 aout prochain.

À suivre

Comment créer vos règles StyleCop

StyleCop est un outil gratuit de Microsoft permettant de vérifier le style de votre code (ou celui des autres). De plus, StyleCop est maintenant offert en Open Source (sur Codeplex), donc je vous conseille fortement de regarder l’implémentation des règles par défaut pour vous aider à créer les vôtres.

Créer vos règles

Voici quelques étapes pour créer vos règles personnalisées StyleCop:

  • Installer la dernière version de StyleCop
  • Télécharger le SDK de StyleCop (fichier .chm de documentation)
  • Démarrer Visual Studio
  • Créer un nouveau projet de type “Class Library”
  • Ajouter les références suivantes
    • Microsoft.StyleCop
    • Microsoft.StyleCop.CSharp
    • Microsoft.StyleCop.CSharp.Rules

StyleCop_SolutionExplorer

Débogage

Puisque les règles de StyleCop sont dans le répertoire de celui-ci et que StyleCop est intégré à Visual Studio, voici quelques configuration pour vous aider (Changer les répertoires au besoin):

  • Dans les propriétés du projet/Build Events :
    • Post-build event command line: xcopy "$(TargetDir)BHRules*.*" "C:\Program Files\Microsoft StyleCop 4.3.3.0" /y
  • Dans les propriétés du projet/Debug:
    • Start external program: C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe
    • Command line arguments (optionnel): Chemin d’une solution que vous désirez valider avec vos nouvelles règles.

Si vous avez des questions, utiliser les commentaires ou via le formulaire de contact.

Métadonnées de fichiers Multimédia

En récupérant une liste de fichiers multimédia, je me suit retrouvé avec une liste de fichiers à 4 caractères et qui ne signifiait rien. Grrr.... J'ai alors décidé de faire un petit utilitaire pour me permettre de renommer les fichiers selon un pattern que j'avais déjà sur ma machine selon l'artiste, l'album et du titre de la chanson.

Mais une problématique surgit rapidement: Comment récupérer ces métadonnées (principalement des fichiers MP3)?

J'ai donc fait ce que je fais souvent lorsque j'ai une question, je fais une petite recherche. Et j'ai trouvé sur ce résultat de StackOverflow un lien vers le TagLib# (Fonctionnant aussi sur Mono)! Cette librairie de Novell fait tout le boulot pour moi! Il me permet d'accèder au métadonnées et ce pour de nombreux type de fichiers différents. Voici l'exemple basique parmi plusieurs fournit sur leur site:

try
{
   TagLib.File file = TagLib.File.Create ("/path/to/music/file.mp3");
   
   // Read some information.
   string    title   = file.Tag.Title;
   uint      track   = file.Tag.Track;
   string    album   = file.Tag.Album;
   string [] artists = file.Tag.Artists; // Remember, each song can have more than one artist.
   
   ... // Do stuff to title, album, artists.
   
   // Store that information in the tag.
   file.Tag.Title   = title;
   file.Tag.Track   = track;
   file.Tag.Album   = album;
   file.Tag.Artists = artists;
   
   file.Save ();
}
catch {...}

 

Donc si jamais vous avez besoin de métadonnées, je vous suggère grandement celle-ci!

Collection observable surveillant les modifications aux items

J'ai été confronté à une situation lors d'un développement d'une application WPF qui utilisait la classe ObservableCollection, voici la description:

Problème:

Collection d'items qui comporte plusieurs items (qui eux implémente l'interface INotifyPropertyChanged). Je dois faire certains calculs: Total des items à complétés, total des items complétés, items restants, etc. Mais lorsque qu'un de ces items changeait de statut et devenait complété, impossible de pousser l'information (push) à un niveau supérieur.

Solution proposée:

Utilisation d'un thread qui à chaque intervalle X, allez valider les totaux et mettre à jour les données sur l'interface, de façon tirer (pull). N'aimant pas vraiment cette idée et essayant de diminuer au minimum les pull pour privilégier les push, j'ai fait une petite recherche sur le sujet.

Solution implémentée:

J'ai trouvé la une solution sur StackOverflow, qui dérivait de ObservableCollection et implémentait l'interface INotifyPropertyChanged, soit la classe  ObservableCollectionEx<T>. Voici la classe en tant que telle:

 

public class ObservableCollectionEx : ObservableCollection where T : INotifyPropertyChanged 
  { 
    public ObservableCollectionEx() 
      : base() 
    { 
    } 
 
    protected override void OnCollectionChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs e) 
    { 
      Unsubscribe(e.OldItems); 
      Subscribe(e.NewItems); 
      base.OnCollectionChanged(e); 
    } 
 
    private void Subscribe(System.Collections.IList iList) 
    { 
      if (iList != null) 
      { 
        foreach (T element in iList) 
          element.PropertyChanged += (x, y) => ContainedElementChanged(y); 
      } 
    } 
 
    private void Unsubscribe(System.Collections.IList iList) 
    { 
      if (iList != null) 
      { 
        foreach (T element in iList) 
          element.PropertyChanged -= (x, y) => ContainedElementChanged(y); 
      } 
    } 
 
    private void ContainedElementChanged(PropertyChangedEventArgs e) 
    { 
      OnPropertyChanged(e); 
    }
}

Très simple et surtout générique. Pour l'utilisation, soren.enemaerke (l'auteur original) propose ce petit bout de code:

ObservableCollectionEx collection = new ObservableCollectionEx(); 
((INotifyPropertyChanged)collection).PropertyChanged += (x,y) => ReactToChange();

Ce que je n'ai pas encore expérimenté, c'est d'étendre cette classe pour offrir un peu plus de fonctionnalités qui serait très utile, ce sera pour une prochaine fois.