Mitsu Furuta

Another .Text Powered Blog

  Home :: Syndication  :: Login
  51 Posts :: 0 Stories :: 0 Comments :: 5524 Trackbacks

Archives

Categories

Centres de développement

Les mercredis du développement

lundi 6 novembre 2006 #

A vos carnets d'adresse ! Mon blog français déménage sur la plate-forme Msdn à l'adresse suivante: http://blogs.msdn.com/mitsufu

Une dernière petite surprise sur ce blog, je vous laisse cliquer sur l'image suivante :).

Mitsu

posted @ 15:00 | Feedback (1)

jeudi 2 novembre 2006 #

Bonjour à tous,

Comme vous l'avez peut-être vu sur la home de MSDN France, nous accueillons mercredi 15 novembre deux spécialistes français du développement d'applications DirectX.
Ces sessions seront purement orientées développement et David CATUHE nous présentera son framework 3D Nova. Si vous voulez en avoir plein les mirettes sans attendre, je vous conseille les vidéos disponibles sur son site avant de venir les voir en vrai bien entendu.
http://www.vertice.fr
http://www.vertice.fr/Files/Demoreel2_150.wmv 

Le lien d'inscription: http://www.microsoft.com/france/msdn/evenements/mercredis_developpement/directx.mspx

Mitsu

posted @ 00:06 | Feedback (3)

mardi 31 octobre 2006 #

Aujourd'hui, une nouvelle CTP d'Orcas est sortie:
http://www.microsoft.com/downloads/details.aspx?FamilyId=C09B5A2D-EB6A-44B6-8BBD-3764A2FDA9CE&displaylang=en

Pour rappel, ces CTP initiées en septembre dernier vous fournissent une image VPC d'une configuration complète (4 Go environ). Ces CTP vous offrent quasiment la build du moment et seront délivrées mensuellement. Aussi le but n'est pas de vous offrir une version stable et testée mais la version en cours afin de vous permettre de commencer à tester ce nouvel outil. Une première béta digne de ce nom "devrait" être disponible en début d'année 2007.

Bon tests à vous tous,

Mitsu

posted @ 09:38 | Feedback (3)

lundi 23 octobre 2006 #

A la une du centre de développement C#: http://www.microsoft.com/france/msdn/vcsharp/default.mspx

Bon visionnage à tous,

Mitsu

posted @ 20:00 | Feedback (3)

vendredi 13 octobre 2006 #

J'ai eu la chance et l'honneur lors de mon dernier passage à Redmond de faire une rencontre très intéressante.
Antoine Cote est responsable du développemet du designer de DLinq. Cerise sur le gateau, l'interview est en français puisqu'Antoine est...Québéquois !
Le designer de DLinq offre une fonctionnalité décisive dans la productivité qu'apportera DLinq.

Bonne lecture à tous,

Mitsu

http://www.microsoft.com/france/vision/db/msdn/P00974/

posted @ 22:48 | Feedback (3)

jeudi 12 octobre 2006 #

Charlie Calvert a intégré l'équipe C# à Redmond et gère désormais les relations avec les communautés.
Voici la liste des blogs des équipes C# qu'il maintient sur son blog: http://blogs.msdn.com/charlie/archive/2006/09/06/c-bloggers.aspx

A retenir pour tous les curieux des avancées de C# et de Linq

Mitsu

posted @ 20:34 | Feedback (1)

dimanche 8 octobre 2006 #

Ceux qui sont venus au mercredi du développement sur "C# 2.0, un an après" ou qui ont lu mon rapide article http://blogs.microsoft.fr/mitsufu/archive/2006/09/30/48145.aspx, pourront aprécier une suite du dernier exemple sur les Enums. Pour ceux qui viennent d'arriver, je vous rassure, l'article ne demande pas de prérequis :-).

http://blogs.msdn.com/mitsu/archive/2006/10/08/Linq-to-bits-_2100_.aspx

Bonne lecture à tous,

Mitsu

posted @ 20:24 | Feedback (1)

Bonjour à tous,

Je viens de créer un nouveau blog qui ne remplacera pas celui-ci mais qui le complètera.
Mon blog actuel traite principalement des actualités techniques et de l'évènementiel Microsoft France.

Mon blog http://blogs.msdn.com/mitsu/ viendra compléter cette tâche avec une approche plus technique.
Comme vous pourrez le voir, je tiendrais ce blog à jour en anglais, :-) ou :-(, à vous de voir...

Bonne lecture à tous,

Mitsu

posted @ 20:20 | Feedback (2)

samedi 30 septembre 2006 #

Bonjour à tous,

Le mercredi du développement sur C# 2.0 s'est bien déroulé mercredi dernier et les webcasts sont en cours de mise en ligne (ce qui devrait prendre une dizaine de jours car nous avons quelques problèmes techniques).
Pour nous faire pardonner et vous faire patienter, je vous propose deux petits extraits dans ce post.

Bonne lecture et donc à très bientôt pour les webcasts dont j'annoncerai la disponibilité sur ce même blog.

Mitsu

1- Factoriser des instructions de bloc.

L'idée est la suivante, imaginons que nous voulions factoriser une gestion d'erreur pour toute notre application avec un traitement d'erreur centralisé. Dans bon nombre de cas existants (comme les apis win32), un modèle classique consiste à implémenter des méthodes qui renvoient un entier. Il devient alors assez simple de créer une méthode ShowError(int errorCode) qui centralise la gestion d'erreur. Ce modèle impose la convention qui consiste à renvoyer un entier et ne factorise pas le try...catch que nous devons implémenter dans toutes les méthodes.

private int AddCustomer(string param)
{
  try
  {
    int i = Convert
.ToInt32(param);
  }
  catch
  {
    return
1;
  }
  return
0;
}

private void ShowError(int value)
{
 
if
(value != 0)
   
switch
(value)
   
{
     
case
1:
     
case
2:
     
default
:
       
MessageBox.Show("Une erreur s'est produite: n°"
+ value.ToString());
       
break
;
    }
}

L'appel ressemble alors à:

ShowError(AddCustomer("blabla"));

L'idée en C# 2.0 est d'utiliser les méthodes anonymes pour retarder l'exécution du code critique afin de prendre le temps d'encadrer l'appel par un bloc try...catch. Nous aurons besoin d'un délégué le plus simple possible afin d'être générique. Le code des méthodes anonymes ayant accès aux membres accessibles depuis la méthode hôte, nous de déclarerons aucun paramètre.

public delegate void SimpleDelegate();

Nous pouvons alors implémenter une unique méthode de gestion des exceptions incluant le bloc try...catch.

private void SafeCall(SimpleDelegate d)
{
 
try
 
{
   
if (d != null
)
      d();
  }
 
catch (Exception
e)
  {
   
MessageBox.Show("Une erreur s'est produite:"
+ e.Message);
  }
}

L'appel devient alors très simple:

string s = "blabla";
SafeCall
(
delegate
{
 
int i = Convert
.ToInt32(s);
});

Nous pouvons également imaginer utiliser ce même pattern pour centraliser les transactions.

InTransaction(delegate
{
  AddCustomer();
});

1- Enumerer des énumérations ..?!?!

Les types enum de .Net permettent de stocker un ensemble de valeurs en utilisant la vue binaire de l'entier sousjacent de l'énumération.
Ce pattern est très connu et est largement utilisé à la fois dans le framework .Net et dans l'api win32.

Exemple:

[Flags]
public enum Day { None = 0, Lundi = 1, Mardi = 2, Mercredi = 4, Jeudi = 8, Vendredi = 16, Samedi = 32, Dimanche = 64 };

Récupérer la liste des valeurs stockées dans l'énuméré demande donc un parcours binaire de l'ensemble des bits en utilisant un 'et' binaire (&) pour tester les différentes valeurs.
L'idée est alors d'accèder à cette liste de valeurs via une énumération (IEnumerable). Nous utiliserons les itérations de C# 2.0 pour faciliter cette implémentation (yield return).

private IEnumerable<T> GetEnumeration<T>(T values) where T : struct
{
 
if (!typeof(T).IsSubclassOf(typeof(Enum
)))
   
throw new Exception("n'est pas un Enum"
);
 
int[] allValues = (int[])Enum.GetValues(typeof
(T));
 
int intValues = Convert
.ToInt32(values);
 
foreach (int i in
allValues)
  {
   
if
((i & intValues) != 0)
     
yield return (T)Enum.ToObject(typeof
(T), i);
 
}
}

L'appel devient alors:

Day d = Day.Samedi | Day.Jeudi;
foreach (Day d2 in GetEnumeration<Day>(d))...

Essayons d'implémenter cette fonctionnalité de façon plus intégré. Nous pouvons utiliser le pattern des nullables.

public struct MyEnum<T> : IEnumerable<T> where T : struct
{
 
public
MyEnum(T value)
  {
    _value = value;
  }
 
private
T _value;
 
public static implicit operator T(MyEnum
<T> e)
  {
   
return
e._value;
  }
 
public static implicit operator MyEnum
<T>(T e)
  {
   
return new MyEnum
<T>(e);
  }
 
public static MyEnum<T> FromEnumerable(IEnumerable
<T> e)
  {
   
int
value = 0;
   
foreach (T t in
e)
    {
      value |=
Convert
.ToInt32(t);
    }
   
return (T)Enum.ToObject(typeof
(T), value);
  }

  #region IEnumerable<T> Members
 
IEnumerator<T> IEnumerable
<T>.GetEnumerator()
  {
   
if (!typeof(T).IsSubclassOf(typeof(Enum
)))
     
throw new Exception("n'est pas un enum"
);
   
int[] allValues = (int[])Enum.GetValues(typeof
(T));
   
int intValues = Convert
.ToInt32(_value);
   
foreach (int i in
allValues)
    {
     
if
((i & intValues) != 0)
       
yield return (T)Enum.ToObject(typeof
(T), i);
    }
  }
 
#endregion

  #region IEnumerable Members
 
IEnumerator IEnumerable
.GetEnumerator()
  {
   
return (this as IEnumerable<T>).GetEnumerator() as IEnumerator
;
  }
 
#endregion

  public override string ToString()
  {
   
return
_value.ToString();
  }
}

L'utilisation est alors fortement simplifiée:

MyEnum<Day> d = Day.Samedi | Day.Jeudi;

foreach (Day d2 in d) ...

Day d3 = d;

L'énumération ainsi crée profitera des fonctions ensemblistes de C# 3.0:

d.Intersect(d2);

 

posted @ 21:41 | Feedback (5)

mercredi 13 septembre 2006 #

Vous n'avez pas rêvé et je ne me suis pas non plus trompé dans le titre.
Bien qu'ayant hésité avec "C# 2.0, trucs et astuces" ou encore "Tout ce que vous avez toujours voulu savoir sur C# 2.0", nous parlerons bien de la version 2.0 de ce langage.
Je voulais répondre à plusieurs demandes de contenu sur les versions actuelles de nos produits et pas toujours sur les versions futures.
Je vous propose donc de venir partager à la fois un appronfondissement de C# 2.0 mais également des cas d'utilisation du quotidien que j'ai pu rencontrer après un an de développement.

Utilisateur de C# 2.0 de la première heure ou non, cette présentation est pour vous. Generics, Nullables ou autres méthodes anonymes seront au programme dans des présentations inédites qui je pense vous surprendront.

En guise de conclusion, je finirai par quelques démonstrations C# 3.0.

En espérant vous voir nombreux,

Mitsu

Inscription:  http://www.microsoft.com/france/events/event.aspx?EventID=1032309328

posted @ 17:05 | Feedback (7)