Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

SoMVC (logo)Le métier de développeur est rempli de tâches répétitives et rébarbatives, avec notamment la création de formulaires pour la création, la lecteur, la mise à jour et la suppression, communément appelé CRUD (Create, Read, Update et Delete).

Ainsi, au démarrage d'un projet ASP.net MVC3, il faut créer tous les modèles, les controleurs, les vues et le DbContext Entity Framework permettant de lire les données.

Dans la lignée de mon dernier post et de ma dernière source sur CSharpFR, j'ai donc, créé un template de projet pour Microsoft Visual Studio 2010 se connectant à une base de données (SQL Server) et générant automatiquement tous les controleurs, modèles (avec Primary et Foreign Keys), vues en quelques secondes ! En prime, les vues Index sont triables et paginées en jQuery !

Je vous invite donc à télécharger et à tester ce template sur Codeplex : http://somvc.codeplex.com.
Prochainement ce template évoluera et incluera les tests unitaires.

Cet utilitaire permet de créer toutes les classes métiers d'une application ASP.net MVC 3 à partir d'une connection à une base de données (testé avec SQL Server, SQL Server Express et SQL Server CE).

En quelques secondes vous pourrez créer tous les modèles de votre application ASP.net MVC 3 : toutes les propriétés possédant déjà les attributs nécessaires à MVC et à Entity Framework !

Les classes sont crées via un Template T4 et donc, il est très facile de créer d'autres templates pour d'autres types de projets.

Rendez-vous sur CSharpFR : Création de classes métiers à partir d'une base de données.

 La création d’application multi langues en ASP.net est rendue assez simple par l’utilisation des fichiers de ressources. Cependant en ASP.net MVC3, il n’existe aucune solution permettant d’utiliser la souplesse du modèle MVC.

A travers ce court article, je vous propose de mettre en œuvre une technique que je considère comme simple et rapide : simple car elle s’appuie sur l’implémentation du modèle MVC d’ASP.net et rapide car elle ne nécessite pas la refonte complète de votre application.

Lire la suite...

Windows Forms est une technologie « ancienne » basée sur win32 et inspirée de Visual Basic. Elle a l’avantage d’être facile à apprendre et rapidement performante. Malheureusement, il arrive souvent lorsque l’on cherche à construire des formulaires complexes d’être « limité ».

Microsoft a introduit Windows Presentation Foundation (WPF) avec la version 3.0 du Framework .net, cette spécification graphique permet à l’aide du langage XAML, un langage basé sur XML, de spécifier vos formulaires à la manière d’ASP.net : c’est à la fois très facile… et déroutant !

WPF abandonne GDI+ et s’appuie désormais sur DirectX qui lui permet d’offrir en plus un support de la 3D et surtout un rendu vectoriel, il est donc possible très facilement d’effectuer des zooms, des rotations, des flips…

Si comme moi vous avez fait beaucoup de Windows Forms, la transition vers WPF peut vous faire peur car tout semble différent… voire étrange ! Nous allons donc découvrir comment, à partir de notre expérience Windows Forms, il est possible (je n’ai pas dit simple) de se mettre à WPF. Commençons donc par quelques banalités et voyons les containers.

Lire la suite

So@t contribue à l’aventure de la Communauté Silverlight France par deux de ses consultants Cyril Cathala et Nathanael Marchand. Ils seront présents sur scène lors du lancement dans les locaux de Microsoft. Mais quelle est cette communauté ?

 

Je vous invite à lire la suite sur le blog de Nathanael

Le DataBinding est un moyen de lier une structure de données à des contrôles d’un formulaire sans avoir à se soucier des mises à jour effectuées par les 2 parties. Toutes les propriétés des contrôles peuvent être liées, mais traditionnellement on associe les propriétés Text ou Value.
Nous allons voir dans cet article les différents types de liaisons et les sources de données supportées par Windows Forms, puis nous continuerons avec un rapide aperçu des interfaces qui permettent au DataBinding de fonctionner. Pour finir, nous étudierons un cas pratique et mettrons en place un formulaire consommant une source de données personnalisée.

Lire la suite...

Voilà, après trop de temps passé dans l'ombre... je reviens avec l'obtention de la certification TS 75-515... c'est un début, je compte passer les autres rapidement !

En attendant, j'ai l'intention d'écrire une série d'articles dont le premier devrait être publié à la fin du mois de juillet !

Stay tuned !

Je suis heureux de vous annoncer la publication de mon application sur le MarketPlace de Windows Phone 7 :).

"Mon Coffre Fort" est une application permettant de stocker en toute sécurité vos informations confidentielle tels que vos numéros de cartes bancaires, vos mots de passe, vos codes PIN (code de portes...). Pour cela, les informations sont stockés sur votre téléphone au moyen d'un mot de passe que vous aurez défini et de l'identifiant unique qui identifie votre WP7. Ainsi, toute personne mal intensionnée voulant récupérer vos informations sera déboutée.

L'application est disponible en français et en anglais, mais sera prochainement mise à jour pour intégrer l'espagnol, l'allemand et peut-être l'italien. Plus quelques petites améliorations.

Pour l'acheter (0,99€) vous pouvez suivre le lien suivant : http://social.zune.net/redirect?type=phoneApp&id=89ac82f4-641d-e011-9264-00237de2db9e

      

Visual NDepend est un outil développé par Patrick Smacchia, MVP Visual C# français reconnu pour la qualité de ses ouvrages sur .net et C#.

A partir de l’analyse statique d’une assembly, NDepend permet d’établir un ensemble de statistiques facilitant l’évaluation de la qualité d’une bibliothèque, d’une application ou tout autre résultat d’une compilation en .net. Nous verrons un peu plus loin les différentes formes de statistiques et de leurs représentations.

 

Vous trouverez attaché à cet article le fichier PDF

Patrick Smacchia a publié ces derniers jours une nouvelle version de NDepend incluant une nouvelle fonctionnalité : une aide contextuelle.

Cette aide survient uniquement lorsque l'utilisateur survolera un panel avec sa souris et fournit une information claire sur l'élément pointé.

 

Cette fonctionnalité aidera surement les personnes qui débutent avec NDepend.

Référence : Software learnability increased with Context-Sensitive Help (Patrick Smacchia)

Télécharger NDepend

Bonjour à tous,

Après quelques semaines de silence, je vais reprendre petit à petit les mises à jour de ce blog.

 

Je vous prépare actuellement un article sur la nouvelle version de NDepend.

 

En attendant, je vous invite à venir voir mes photos sur Flickr.

Et oui, tout comme Richard, je ne suis pas renouvelé au titre de MVP C#.

Bien sûr à la vue de la qualité et de la quantité de mes participations communautaires de cette année, j'avoue que je m'y attendais ! Je remercie Martine de m'avoir averti par téléphone avant la missive officielle !

 

Une page se tourne... peut-être un nouveau départ ? non ?

En attendant un éventuel retour au premier plan sur les technologies Microsoft, j'ai décidé de me consacrer un peu à la photo et la musique.

 

Merci pour tout.

Voila... ça faisait un moment que j'hésitais à poster cette source... je l'ai développé suite à une overdose de création de contrôles !

Parmis les choses qui me rebutent, celle qui consiste à recopier 10 fois le même bloc de code me donne envie de tout plaquer... tout arrêter !
Alors, j'ai eu l'idée d'une classe qui permettrait de décorer mes propriétés avec des attributs de manières à éviter la longue et fastidieuse tâche de déclaration des DependencyProperties.

Je vous propose donc ce bout de code déposer sur www.csharpfr.com (chapeau pour la V11 !).

Source mise à jour en tenant compte des remarques de Romain.

Il y a des jours où l'on passe trop de temps à s'arracher les cheveux !

Depuis quelques temps l'application sur laquelle je travaille remonte de manière aléatoire l'erreur suivante :

Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that <machineKey> configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.

Problème : cette application ne tourne pas sur un cluster !

Après quelques recherches sur l'Internet, il s'agirait d'un problème connu et il existerait un patch dans le SP1 du Framework 3.5. (Nous utilisons le Framework 2.0 pour notre application... oui, oui... je sais c'est vieux, mais l'immobilisme des grands groupes n'est pas une légende !)

J'ai aussi trouvé le pansement suivant qui consiste à surcharger la méthode Render des pages :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
protected override void Render(HtmlTextWriter writer)
{
StringWriter stringWriter = new StringWriter();
HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter);

base.Render(htmlWriter);

string html = stringWriter.ToString();
string[] aspnetFormelems = new string[5];
aspnetFormelems[0] = "__EVENTTARGET";
aspnetFormelems[1] = "__EVENTARGUMENT";
aspnetFormelems[2] = "__VIEWSTATE";
aspnetFormelems[3] = "__EVENTVALIDATION";
aspnetFormelems[4] = "__VIEWSTATEENCRYPTED";
foreach (string elem in aspnetFormelems)
{
//Response.Write("input type=""hidden"" name=""" & abc.ToString & """")
int startPoint = html.IndexOf(string.Format(@"<input type=""hidden"" name=""{0}""", elem));
if (startPoint < 0)
{
continue;
}
//does __VIEWSTATE exist?
int endPoint = html.IndexOf("/>", startPoint) + 2;
string viewStateInput = html.Substring(startPoint,
endPoint - startPoint);
html = html.Remove(startPoint, endPoint - startPoint);
int formStart = html.IndexOf("<form");
int endForm = html.IndexOf(">", formStart) + 1;
if (endForm >= 0)
{
html = html.Insert(endForm, viewStateInput);
}
}

writer.Write(html);
}

Pour le moment, je n'ai pas eu le temps de tester la mise à jour du Framework... Par contre, le pansement ci-dessus donne des résultats satisfaisant : le bug surgit beaucoup moins souvent... mais il est toujours là !

Question : Rencontrez-vous ce problème ? Avez-vous des pistes ?

J'utilise Windows depuis la version 3.1 et j'ai acquis certaines habitudes plutôt tenaces !

Parmi elles se trouvent une fonctionnalité bien connue de tout le monde : le double clic sur la barre de titre des applications pour les agrandir/restaurer.

  • lorsque vous glissez votre fenêtre vers la bordure supérieur de votre écran, celle-ci se maximise ;
  • lorsque vous glissez votre fenêtre vers l'une des bordures droite ou gauche de votre écran, celle-ci se maximise en hauteur ;
  • lorsque vous pointez votre fenêtre et faites apparaitre le curseur de redimensionnement vertical (la double flèche verticale) et que vous double-cliquez, votre fenêtre se maximisera en hauteur ;
  • si vous secouer votre fenêtre en l'attrapant par la barre de titre, toutes les autres fenêtres se replient (et inversement) ;
  • lorsque que votre fenêtre est maximisée, si vous essayez de la déplacer en l'attrapant par la barre de titre, elle retrouve la taille qu'elle avait avant d'être maximisée.

J'espère que tout est clair !

Bon test !

Tout d'abord : je vous adresse, à vous, votre famille, vos amis, vos proches, chiens, chats... mes voeux de réussite, de santé et de bonheur pour l'année 2009.

Vous avez sans doute remarqué que depuis quelques mois, je suis moins "bavard" sur les forums et sur mon blog... la raison est simple : j'avais atteins malgré moi un niveau de saturation qui se ressentait sur les forums et dans mon job... je me suis donc mis au vert quelques temps !

Ceux qui me connaissent savent que je suis musicien (j'ai donc reformé un groupe) et dans le même temps, je me suis jeté corps et âme dans une discipline qui m'attire depuis que je suis tout gamin (à l'époque avec beaucoup de raté Big Smile) : la photo !

Je vous invite donc à visiter ma galerie sur Flickr -> http://www.flickr.com/photos/sebmafate/


Grande Arche, Paris

Je reviendrais très prochainement avec un nouvel article sur SilverLight !

Et oui... j'ai appris la semaine dernière alors que j'atterrissais à l'aéroport de JFK à New York que Microsoft me renouveler pour 1 an comme Microsoft Visual C# MVP !

A par ça... NYC est une ville impressionnante sur bien des points... je vous ferez un feedback rapidement le temps pour moi de "développer" mes photos !

Ah oui, une chose en passant... pour ceux qui utilise Live Search, j'ai eu une agréable surprise en me connectant là-bas, jugez plutôt : http://www.live.com/?scope=web&mkt=en-US (et l'image change tous les jours).

Attention, un mail avec le contenu ci-dessous circule actuellement sur l'Internet :

Download the latest version!
About this mailing:
You are receiving this e-mail because you subscribed to MSN Featured Offers. Microsoft respects your privacy. If you do not wish to receive this MSN Featured Offers e-mail, please click the "Unsubscribe" link below. This will not unsubscribe you from e-mail communications from third-party advertisers that may appear in MSN Feature Offers. This shall not constitute an offer by MSN. MSN shall not be responsible or liable for the advertisers' content nor any of the goods or service advertised. Prices and item availability subject to change without notice.

Microsoft Corporation, One Microsoft Way, Redmond, WA 9805

Méfiez-vous, ceci est une arnaque !Il s'agit probablement d'un virus.

Microsoft annonce un support gratuit et illimité concernant l'installation et la compatibilité pour tous les clients utilisant Windows Vista SP1, jusqu'au 18 mars 2009.

3 manières de contacter le support :

  • Par téléphone : partout dans le monde ;

  • Par chat *;

  • Par email *


* Pour la France, la Belgique et la Suisse


Pour plus d'information, rendez vous à la page suivante : http://support.microsoft.com/common/international.aspx?rdpath=1&prid=11274&gprid=500921

Windows Vista a apporté pas mal de choses au niveau de la gestion des réseaux, notamment grâce au “Centre Réseau et Partage”. Windows reconnait automatiquement le réseau sur lequel vous le connecter et configure la sécurité en fonction du type d’environnement que vous lui précisez.
Cependant, il est parfois intéressant de pouvoir exploiter ces informations au sein d’une application .net pour automatiser à notre tour des tâches : configurer l’imprimante par défaut, les montages réseaux…

Voici donc comment je m’y suis pris pour récupérer ces informations.

Existe-t-il une API ?

Ma première recherche s'est tournée vers les APIs : après tout si Microsoft utilise  cette fonctionnalité dans son OS, c'est que derrière, ils ont développés une API ! Et bien, soit j'ai mal cherché... soit elle n'existe pas !
Si vous avez des infos là dessus, contactez moi !

La base de registre ?

Là par contre, ça devient intéressant ; dans la base de registre se trouve une branche intéressante : HKLM\Software\Microsoft\Windows NT\CurrentVersion\NetworkList. Elle contient la liste complète des réseaux auxquels vous avez connecté votre machine ! Et elle peut être longue, pour moi, on y trouve pas loin de 40 références ! Entre les hotspots gratuits, les réseaux d'entreprises, la maison..!
Maintenant que l'on possède la liste des réseaux, il faut être capable de l'exploiter et surtout de faire le lien entre le réseau courant et l'un de ceux enregistrer... en gros, comprenez : retrouver les informations sur le réseau auquel votre machine est connecté. Pour cela, la signature des réseaux contient l'adresse MAC de la passerelle... Un bon moyen d'identifier le réseau !
Maintenant que nous avons tous les éléments, voyons comment nous allons procéder :

  • Récupération de la liste des réseaux depuis la base de registre
  • Identification du réseau sur lequel on se trouve
  • Matching entre le réseau identifié et la liste des réseaux

Récupération de la liste des réseaux : lecture de la base de registre

ATTENTION : Cette branche n'est accessible que par les profiles administrateurs.

Commençons par créer une classe qui contiendra les informations de nos réseaux :

   1: public class NetworkInformation { 
   2:    private Guid guid; 
   3:    public string Description {get; internal set;} 
   4:    public string FirstNetwork {get; internal set;} 
   5:    public Guid ProfileGuid {get; internal set;} 
   6:    public byte[] DefaultGateway {get; internal set;} 
   7:    public int Source {get; internal set;} 
   8:    public int CategoryType {get; internal set;} 
   9:    public DateTime DateCreated {get; internal set;} 
  10:    public DateTime DateLastConnected {get; internal set;} 
  11:    public ProfileDescription {get; internal set;} 
  12:    public int IconType {get; internal set;} 
  13:    public bool Managed {get; internal set;} 
  14:    public int NameType {get; internal set;} 
  15:    public string ProfileName {get; internal set;} 
  16: } 


Puis, recherchons les informations dans la base de registre :

   1: private static string baseKey = @"SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList";
   2:  
   3: public static List<NetworkInformation> GetNetworkList() {
   4:     List<NetworkInformation> ret = new List<NetworkInformation>();
   5:     RegistryKey sKey;
   6:  
   7:     RegistryKey key = Registry.LocalMachine.OpenSubKey(baseKey + @"\Signatures\Managed");
   8:     foreach (string name in key.GetSubKeyNames()) {
   9:         sKey = key.OpenSubKey(name);
  10:         // Récupération de la signature des réseaux Managés
  11:         ret.Add(GetNetworkSignature(sKey));
  12:     }
  13:  
  14:     key = Registry.LocalMachine.OpenSubKey(baseKey + @"\Signatures\Unmanaged");
  15:     foreach (string name in key.GetSubKeyNames())
  16:     {
  17:         sKey = key.OpenSubKey(name);
  18:         // Récupération de la signature des réseaux non Managés
  19:         ret.Add(GetNetworkSignature(sKey));
  20:     }
  21:  
  22:     foreach(NetworkInformation ni in ret) {
  23:         sKey = Registry.LocalMachine.OpenSubKey(string.Concat(baseKey, @"\Profiles\", ni.guid.ToString("B")));
  24:         if (sKey != null) {
  25:             ni.Category = (int)sKey.GetValue("Category", 0);
  26:             ni.CategoryType = (int)sKey.GetValue("CategoryType", 0);
  27:             // ni.DateCreated = DateTime.FromBinary(BitConverter.ToInt64((byte[])key.GetValue(name), 0));
  28:             // ni.DateLastConnected = DateTime.FromBinary(BitConverter.ToInt64((byte[])key.GetValue(name), 0));
  29:             ni.ProfileDescription = (string)sKey.GetValue("Description", string.Empty);
  30:             ni.IconType = (int)sKey.GetValue("IconType", 0);
  31:             ni.Managed = (int)sKey.GetValue("Managed", 0) == 1;
  32:             ni.NameType = (int)sKey.GetValue("NameType", 0);
  33:             ni.ProfileName = (string)sKey.GetValue("ProfileName", string.Empty);
  34:         }
  35:     }
  36:     return ret;
  37: }
  38:  
  39: private static NetworkInformation GetNetworkSignature(RegistryKey sKey)
  40: {
  41:     NetworkInformation ni = new NetworkInformation();
  42:     ni.FirstNetwork = (string)sKey.GetValue("FirstNetwork");
  43:     ni.DefaultGetawayMac = (byte[])sKey.GetValue("DefaultGatewayMac");
  44:     ni.Description = (string)sKey.GetValue("Description", string.Empty);
  45:     ni.DnsSuffix = (string)sKey.GetValue("DnsSuffix", string.Empty);
  46:     ni.Source = (int)sKey.GetValue("Source", 0);
  47:     ni.guid = new Guid((string)sKey.GetValue("ProfileGuid"));
  48:     return ni;
  49: }

Nous possèdons maintenant l'ensemble des informations sur les réseaux auxquels nous avons accédés. Nous allons maintenant voir comment récupérer les informations sur le réseau courant.

Identification du réseau courant

Comme je l'ai écrit ci-dessus, pour identifier le réseau courant dans la liste que nous venons de récupérer, il va falloir que nous récupérions l'adresse MAC de la passerelle. Nous allons nous y prendre en 2 temps :

  • Récupération de l'adresse IP
  • Récupération de l'identifiant unique

Récupération de l'adresse IP

Le framework étant bien fait dans son ensemble, on y trouve une foultitude de classes très sympa... et NetworkInterface de l'espace de noms System.Net.NetworkInformation fait partie de celles-là. Grace à elle, il est possible de savoir si votre machine est raccordée à un réseau et de connaître (en autres choses) la liste des cartes réseaux. Nous allons donc récupérer la première interface connectée à un réseau et qui possède une passerelle.

   1: public static IPAddress GetDefaultGatewayIP() {
   2:     if (!NetworkInterface.GetIsNetworkAvailable()) {
   3:         return IPAddress.None;
   4:     }
   5:  
   6:     List<NetworkInterface> nics = NetworkInterface.GetAllNetworkInterfaces().Where(nic =>
   7:         nic.NetworkInterfaceType != NetworkInterfaceType.Loopback &&
   8:         nic.NetworkInterfaceType != NetworkInterfaceType.Unknown &&
   9:         nic.OperationalStatus == OperationalStatus.Up).ToList();
  10:  
  11:     if (nics.Count > 0) { 
  12:         // on récupère la première interface trouvée... 
  13:         // on verra après si on trouve mieux
  14:         GatewayIPAddressInformationCollection gateways = nics[0].GetIPProperties().GatewayAddresses;
  15:         if (gateways.Count > 0) {
  16:             return gateways[0].Address;
  17:         }
  18:     }
  19:     return IPAddress.None;
  20: }

Récupération de l'identifiant unique

Cette étape est plus délicate que la précédente... en effet, le framework ne possède aucune méthode pour trouver l'adresse MAC. Il faut donc en passer par une API : SendARP.

   1: internal class NetworkNativeMethods
   2: {
   3:     [DllImport("iphlpapi.dll", ExactSpelling = true)]
   4:     public static extern int SendARP(int DestIP, int SrcIP, byte[] pMacAddr, ref uint PhyAddrLen);
   5: }
   6:  
   7: public static byte[] GetPhysicalAddressFromIP(IPAddress ip) {
   8:     byte[] macAddr = new byte[ 6 ];
   9:     uint macAddrLen = (uint)macAddr.Length;
  10:  
  11:     if (NetworkNativeMethods.SendARP(BitConverter.ToInt32(ip.GetAddressBytes(),0), 0, macAddr, ref macAddrLen) != 0) {
  12:         throw new InvalidOperationException("SendARP failed.");
  13:     }
  14:  
  15:     return macAddr;
  16: }

Conclusion

Voila... nous avons la liste des réseaux et l'adresse MAC de notre passerelle, il ne reste plus qu'à afficher les informations sur le réseau courant :

   1: List<NetworkInformation> networksInformations = NetworkHelp.GetNetworkList();
   2:  
   3: networksInformations.Sort((ni1, ni2) => ni1.ProfileName.CompareTo(ni2.ProfileName));
   4: comboBox1.DataSource = networksInformations;
   5: comboBox1.DisplayMember = "ProfileName";
   6:  
   7: if (SystemInformation.Network)
   8: {
   9:     IPAddress gatewayAddress = NetworkHelper.GetDefaultGatewayIP();
  10:     if (gatewayAddress != IPAddress.None)
  11:     {
  12:         byte[] gatewayMac = NetworkHelper.GetPhysicalAddressFromIP(gatewayAddress);
  13:  
  14:         NetworkInformation ni = this.networksInformations.Find(n => Convert.ToBase64String(n.DefaultGetawayMac).Equals(Convert.ToBase64String(gatewayMac)));
  15:         if (ni != null)
  16:         {
  17:             comboBox1.SelectedItem = ni;
  18:         }
  19:     }
  20:  
  21: }

Si vous avez une autre solution pour arriver au même résultat, profitez-en pour la partager :)
Cette solution sera mise en ligne sur CSharpFR avant la fin de la semaine, le temps de finaliser la version de test.

 

Edit : Merci à Olivier pour l'api "Network List Manager" : http://blogs.codes-sources.com/findufin/archive/2008/06/26/vista-api-pour-r-cup-rer-les-informations-sur-le-r-seau-courant.aspx

Plus de Messages Page suivante »


Les 10 derniers blogs postés

- TechDays Paris 2012 : Session pleinière jour 3 par Blog Technique de Romelard Fabrice le il y a 21 heures et 46 minutes

- Mishra Reader : un lecteur RSS très Zune Style en Open Source ! par Cyril Sansus le 02-09-2012, 08:28

- [framework 4] Les Tasks et le Thread UI par Fathi Bellahcene le 02-09-2012, 00:33

- Workflow Foundation 3 a un pied dans la tombe par Blog de Jérémy Jeanson le 02-08-2012, 22:15

- TechDays Paris 2012 : Nouvelles tendances du poste de travail - Bring Your own PC par Blog Technique de Romelard Fabrice le 02-08-2012, 19:42

- TechDays Paris 2012 : System Center Service Manager 2012 Vue d’ensemble par Blog Technique de Romelard Fabrice le 02-08-2012, 17:32

- TechDays Paris 2012 : Pleinière second jour par Blog Technique de Romelard Fabrice le 02-08-2012, 16:23

- TechDays Paris 2012 : Retour d'expérience sur la mise en place d'un Cloud Privé par Blog Technique de Romelard Fabrice le 02-08-2012, 16:04

- TechDays Paris 2012 : Comment SharePoint a sauvé mes TechDays par Blog Technique de Romelard Fabrice le 02-07-2012, 23:59

- Perspective 3.0 pour Silverlight 5.0 par Perspective le 02-07-2012, 22:39