Suite à des besoins personnels je me suis mis en tête de reconstruire en WPF un contrôle approchant du PropertyGrid de WinForm.
Je vous livre donc aujourd'hui la toute première version en beta :
Vous pourrez retrouver un zip contenant la dll et l'exe de la démo ici : http://www.william-pottier.fr/docs/DemoPropertyGrid.zip
Pour l'utiliser rien de plus simple. Vous l'ajouter dans votre xaml :
(On remarque d'ailleurs une propriété AfficherDescription qui permet d'afficher ou de masquer le zone de description)
Ensuite vous créez une classe métier :

Vous disposez d'ailleur d'un attribut "PropertyGridDescriptionAttribute" qui vous permet de spécifier la description d'un champ.
Enfin il vous reste à attribuer votre instance à la PropertyGrid, puis de récupérer au moment voulu :
Pour toutes questions, suggestions, rapport de bug,... merci d'utiliser les commentaires de ce post en attendant que je mette le projet sur CodePlex.
Happy Coding!
[Je republie ce billet qui n'était pas passé correctement la première fois]
Pour continuer sur WPF voici une petite note à propos du Binding et des Thread avec WPF.
Le binding est une technique très puissante permettant de ne pas avoir à se préoccuper de l'écriture de dizaines de lignes de code pour effectuer la liaison entre l'interface (wpf) et une couche métier (gestion réseau, base de donnée,.......). Un des grand avantage est que vous pouvez faire que votre interface soit mise à jour alors que la modification de l'objet métier lié ce fait dans un autre thread. Et ce sans aucune ligne de code supplémentaire.
Mais cependant il convient de porter une attention particulière à l' instance de l' objet métier que vous utilisez comme DataContext : en effet l'instance de cette objet doit être crée dans le même thread que celui qui héberge votre UI. Cela peut être gênant quand on travail sur une application avec des thread bien séparé (par exemple : le modèle MVC avec un thread par couche).
A noter aussi que ceci ne provoque pas d'exception (ou tout du moins pas directement intercepté par vs2008) mais par contre quand vous stopper le débuggage vous aurez le droit à un crash pur et simple de votre IDE préféré (VS 2008 SP1 pour ma part).
Si cette note permet de vous évitez des heures de recherche et d' interrogation elle aura remplie sa mission.
Je suis tombé aujourd'hui sur un article que je voulais vous faire partager au sujet des nullable dans c#2.0 (cela reste valide pour c#3).
Vous pouvez retrouver cet article ici : http://dotnet.developpez.com/articles/types-nullables/
Pour ceux qui ne maitrisent pas encore cette notion on y apprend aussi bien l'utilisation standart mais aussi quelque détails quand au comportement du compilateur, l'usage du "null coalescing operator",...
Bon lecture et Happy Coding!
Les utilisateurs peuvent se connecter dès maintenant à ce nouveau service gratuit pour stocker, modifier et partager en ligne leurs documents Microsoft Office depuis n’importe quel ordinateur.
Les Ulis - le 20 mai 2008 - Après l’annonce de la sortie de la béta en langue anglaise en mars dernier, Microsoft annonce aujourd'hui la disponibilité gratuite de la bêta en langue française de Microsoft Office Live Workspace (http://workspace.officelive.com). Ce nouveau service web permet aux utilisateurs d’accéder à leurs documents Microsoft Office et de collaborer en ligne. C’est une étape complémentaire de Microsoft dans sa stratégie Software + Services. Microsoft présente également plusieurs nouvelles fonctionnalités d’Office Live Workspace, telles que le volet d’activité, les notifications, les liens directs, et le téléchargement multi-fichiers.
Office Live Workspace est à présent disponible en anglais, en français, en espagnol, en allemand, et japonais (http://workspace.officelive.com).
Accès en tout lieu, partage et extension de l’expérience Microsoft Office
Avec Office Live Workspace, les utilisateurs organisent leurs documents et leurs projets en ligne et les utilisent à partir de l’ordinateur de leur choix. Ils peuvent enregistrer plus d’un millier de documents Microsoft Office vers un emplacement unique en ligne, et les partager via le Web. Ils peuvent visualiser et faire des commentaires sur les documents, à partir du navigateur, créer des listes et des notes Web simples, et partager leurs documents en temps réel grâce à l’intégration avec Microsoft SharedView. L’intégration avec Microsoft Office est complète grâce à des composants additionnels qui permettent d’ouvrir, de modifier et d’enregistrer en ligne des documents Word, Excel, PowerPoint directement à partir de son poste de travail.
Enfin, Office Live Workspace offre la possibilité de synchroniser son agenda, ses contacts et ses tâches avec Microsoft Outlook.
Par ailleurs, à la suite des commentaires des premiers utilisateurs de la version bêta, Microsoft a ajouté plusieurs nouvelles fonctionnalités au service :
- Volet d'activité. Un nouveau volet d’activité affiche en un coup d’œil toutes les opérations de l’espace de travail.
- Notifications. Les utilisateurs peuvent désormais recevoir des notifications par courrier électronique sur les changements apportés à leur espace de travail ou à leurs documents.
- Liens directs. Les utilisateurs peuvent créer un signet pour leur espace de travail, ou un élément de leur espace, via une URL unique dans une fenêtre de navigation.
- Importation multi-fichiers. Cette fonctionnalité permet aux utilisateurs d’importer plusieurs fichiers par simples opérations de glisser-déposer à partir de leur poste de travail.
- Partage amélioré. Les nouvelles fonctions de partage incluent une interface utilisateur simplifiée et la suggestion automatique des adresses de messagerie électronique.
Bonne journée
Pour avoir récemment eu la question voici un petit rappel quand à l'utilisation de switch en c#.
Tout d'abord il convient de rappeler le principe d'un switch. Un switch est un structure permettant de spécifier un comportement en fonction d'une variable donnée. Ainsi les deux codes suivant sont équivalent en comportement :
Fig. 1
switch(maVariable)
{
case 0:
// Action à réaliser
break;
case 1:
// Autre action à réaliser
break
default:
// Action par defaut
break;
}
Fig. 2
if(maVariable == 0)
{
// Action à réaliser
}
else if(maVariable == 1)
{
// Autre action à réaliser
}
else
{
// Action par defaut
}
Ces 2 exemples ont le même comportement. Néanmoins il est important de noter qu'une structure en switch (figure 1) est plus performant qu'une structure en if (figure 2). Ceci s'explique aisément par le fait que lors d'un structure en if chacune des condition (les unes à prés les autres bien entendu) doivent être évalué jusqu'à trouvé une correspondance. Le switch utilisant un label celà permet un accés plus rapide.
Contraintes pour maVariable :
- maVariable doit être uniquement d'un type primitif (ex : string, int); Si vous avez besoin d'utiliser d'autre type (ex : float, double,...) vous devez utiliser une structure en if (comme figure 2).
- Les label de case doivent être une expression constante (ex : 42, "toto"). Si vous voulez calculer les valeurs ou utiliser des variables vous devez utiliser une structure en if (comme figure 2)
- Chaque label de case doit être unique.
- Chaque case contenant du code ne doit pas passer au case suivant implicitement (voir plus bas)
Il est à noter qu'un switch peut utiliser un type nullable dés l'instant qu'il respecte les règles ci-dessus.
Fig. 3
int? maVariable = null
switch(maVariable)
{
case null:
Console.WriteLine("Aucune valeur");
break;
default:
Console.WriteLine(maVariable);
break;
}
Maintenant abordons le saut de case en case dans notre structure. Contrairement à d'autre langage le c# ne supporte pas le passage implicite d'un case à l'autre à moins que celui-ci soit vide. Concrètement ce code ne compilera pas :
Fig. 4
switch(maVariable)
{
case 0:
Console.WriteLine(maVariable);
case 1:
Console.WriteLine("1");
}
Par contre celui-ci compilera correctement :
Fig. 5
switch(maVariable)
{
case 0:
Console.WriteLine(maVariable);
break;
case 1:
case 2:
Console.WriteLine("1");
break;
}
Mais alors comment obtenir le comportement souhaitez à la figure 4?
Tout simplement en spécifiant explicitement qu'il faut effectuer le saut par l'intermédiaire de l'instruction "goto".
Fig. 6
switch(maVariable)
{
case 0:
Console.WriteLine(maVariable);
goto case 1;
case 1:
Console.WriteLine("1");
goto default:
default:
Console.WriteLine("default");
break;
}
Happy Coding!
Si comme moi vous avez un peu de mal à mémoriser certaine structure de connectionString, ce site est fait pour vous : http://www.connectionstrings.com/
Ce site regroupe toute les chaînes de connexion aux fournisseurs de données allant de SQL Server à Exchange en passant par Oracle, MySQL ou encore DB2.
Happy Coding :)
Bon cette fois c'est la toute dernière ligne droite pour les techdays 2008. Mes collègue du guwhose on préparer le stand,
mes billet sont prêt et je décolle de Caen à 6h13 pour arriver à Paris à 8h26.
Bref rendez vous demain ;)
On me fait signe en coulisse que j'allais oublier de vous parler du jeu-concours organiser par le GUWHoSe :pendant 3 jour nous vous fesons gagner un logiciel toutes les heures. N'hésitez pas à passer nous voir.
Moi je serais au TechDays 2008. Pour rappel les retardataire peuvent encore s'inscrire ici : S'inscrire au TechDays .
Sinon pour ceux qui y seront vous pourrez probablement me retrouvez soit au conférence (quand même ^^), soit du cotés des stands communautés (MSP, GUWHoSe, GUWiV, GUWiSe,...)
Rendez vous là bas donc!
Voici une petite annonce à quelques semaines de l'ouverture du salon Tech-Days.
Quelques MSP (dont je fait partit) emmené par Christopher MANEU ont décidé d'ouvrir un blog pour convrir l'évenement des TechDays.
Intitulé "MSP @ TechDays 2008" ce blog est accessible à l'adresse
http://www.blogtechdays.fr .
Rendez-vous est donc pris pour le 11 février.
Bonjour à tous.
Juste un petit message pour inaugurer une nouvelle année de blogging et pour vous annoncer la publication de la version béta 2 de NetAccess sur csharpfr : http://www.csharpfr.com/codes/NETACCESS-BETA-LIBRAIRIE-APPLICATION-CLIENTS-SERVEUR_44032.aspx
Au menu de cette nouvelle version on pourra noter l'apparition notable du cryptage des transactions ainsi que l'amélioration de l'algorithme d'envoi/réception des données.
La version 2 entre donc ainsi dans sa dernière ligne droite qui devrait s'achever aux TechDays ;).
Fonctionnalités :
- Gestion clients/serveur threadés (oui on s'en serait douté);
- Gestion des clients améliorée depuis le serveur
- possibilité de forcer la déconnection d'un client et de lui transmettre un message d'explication
- transmission d'information aux clients lors de l'arrêt du serveur
- gestion de la capacité en place du serveur (-1 pour illimité)
- possibilité de refuser explicitement la connexion d'un client
- vérification de la compatibilité entre le client et le serveur
- Compression des données utilisant l'algorithme GZip;
- Cryptage à la demande des transactions client <-> serveur en utilisant RSA combiné à Rijndael
- Ping client <-> serveur
- Log avec différents niveaux de rapport (les logs sont désormais basés sur la librairie externe log4net disponible ici : http://logging.apache.org/log4net/)
- Système de gestion des échanges réseau permettant une bonne montée en charge (correction de plusieurs bugs de la version précédente)
Prochaine Version :
La prochaine version (numérotée 2.1) intégrera la gestion de l'envoi de packets en UDP à la demande. Ainsi l'utilisation de NetAccess dans les jeux vidéo nécessitant la transmission de certains types de messages de façon très fréquente (exemple : refresh de position) sera améliorée. Bien entendu cette amélioration ne se limite pas au seul domaine du jeu vidéo puisque d'autres types d'applications pourront y trouver leur compte (transmission de vidéo,...).
Information Complémentaire :
S'agissant encore d'une version béta, je vous invite bien entendu à me laisser vos impressions, avis, idées, rapport de bug,... Dans les commentaires de ce post ou dans ceux de la source sur csharpfr.
Happy Coding ;)
Comme celà fait quelques temps que je n'ai pas posté sur le développement je vais vous faire part ici d'une petite étude que je viens de faire concernant la sérialisation binaire de tableaux d'object.
Tout d'abord de quoi parle-ton?
Imaginer dans une application que vous ayez besoin de stocker des données de types trés variés (ou inconnu au moment de la conception : dans une library par exemple). Vous avez la possibilité d'utilisé principalement trois types :
- List<object>
- ArrayList
- object[]
Les deux premiers ayant l'avantage d'être dynamique (il est possible de rajouter/enlever des éléments à souhaits)
Mettons maintenant que pour une raison x ou y, vous aillez besoin de sérializer binairement votre tableau. Je pense qu'un des facteurs de choix pourra alors être la taille de l'objet une fois sérialisé. Notamment si celui-ci doit être transmit par le réseau par exemple.
J'ai donc réalisé un petit bench pour mesurer la taille prise par des tableaux de dimensions identique (et contenant les mêmes données).
Voici le tableau récapitulatif (données affichées en octets) :
| | 4 els. | 16 els. | 64 els. | 256 els. | 1024 els. | 2048 els. |
| List<object> | 236 | 524 | 932 | 2564 | 9092 | 17796 |
| ArrayList | 137 | 425 | 833 | 2465 | 8993 | 17696 |
| object[] | 59 | 347 | 755 | 2387 | 8915 | 17619 |
On peut donc noter que :
List<object> prend 99 octets de plus que ArrayList, ArrayList prend 78 octets de plus que object[]. Et enfin List<object> prend 177 octets de plus que object[].
Bien entendu ce facteur n'est pas le seul à prendre en compte de la cadre de la conception d'un logiciel. Il faut aussi tenir compte des coûts en temps pour le traitement et l'utilisation des différents types en fonction de leurs contraintes.
Sur ce, Happy Coding!
Suite au post de themit, voici un petit lien que je voulais faire découvrir (ou redécouvrir) à tous les amoureux des domaines du grand massif et des portes du soleil.
http://www.vivehc.com/
Avec notamment des webcam des deux domaines : http://vivehc.free.fr/ski2/inter.php?dom=GM&stat=&RM=webcam (pour le grand massif par exemple)
Il y a quelque temps hasbro avait organiser un concours pour choisir les prochaines villes de l'édition français du monopoly (remplacant donc la rue de la paix et ses conseurs).
Ceux souhaitant connaitre le résultat on à attendre jusque vendredi prochain (9 novembre) et à vous rendre sur ce site : http://www.monopoly.fr
Je viens de tomber presque par hasard sur un article de Benjamin Roux via developpez.com expliquant clairement comment réaliser un Chat en silverlight. Je recommande vivement la lecture de cette article qui peut représenter un bon cas pratique d'application de silverlight.
Lien : Réaliser un chat en silverlight
Depuis quelques heures certains on pu voir l'arrivé d'une nouvelle partie sur le site étudiant. Accessible à cette adresse :
http://www.microsoft.com/france/etudiants/lepo/
Elle propose notamment un test de "Controle de dopage au P.O." ainsi qu'un quizz permettant de gagner 3 xbox 360 et 10 jeux Halo 3.
L'annonce du prix nobel de physique 2007 à été faites aujourd'hui.
Il à donc été attribue à une français et un allemand : Albert Fert et Peter Grünberg.
Il ont été récompensé pour leur travaux sur les nano-technologies et notamment leur découverte de la magnétorésistance géante qui à permit la miniatirusation croissante de nos disques dur.
On vous en avait parlé il y a quelques jours microsoft devait lancer une campagne de promotion d'office 2007 à destination des étudiants. C'est donc désormait officiel les étudiants français pourront obtenir office 2007 édition intégrale pour la modique somme de 18€ par an ou en achat pour la somme de 52€.
Plus de renseignement ici : http://www.officepourlesetudiants.fr/
Une bonne nouvelle n'arrivant jammais seule un concours vient d'être lancé à cette adresse : http://www.logitheque.com/concours_inscriptions.asp
Et qui a pour objet de récompenser les meilleur création faite avec office 2007. Le premier prix étant la somme de 5000€.
Avis aux amateurs...
PS : si quelqu'un sait comment corriger les soucis de caractères spéciaux entre Live Writer et le blog qu'il me fasse signe.
Suite au post de Thomas sur le déploiement des addins Office avec clickOnce je me permettrais ce petit message d'intérrogation vis à vis de clickOnce. Loin de moi l'envie de réaliser un post purement critique mais plutôt l'envie de poser des questions que certains ont probablement rencontrée au sein de leur développement.
Tout d'abord un petit rappel : ClickOnce est un système intégré au framework .NET à partir de la version 2.0. Il s'occupe de gérer le déploiement vers différentes cible (site web, répertoire,...), l'installation, les mise à jours automatisé (ou pas) de nos applications, la gestion des prérequis (par exemple l'installation du framework .NET),...
Vous me direz à première vus que tu tout bon. Oui sauf que voilà il manque certain "truc".
Ainsi récemment il m'a fallut concevoir une application disposant de plusieur centaine de méga octets de ressource. Le problème que ma posé clickOnce (au delà du fait qu'il à un peu de mal avec les ressources externe) c'est que lors de son installation, celle-ci ne se fait que pour l'utilisateur courant. Si tous les utilisateurs d'un poste ont besoin de cette application on se retrouve donc à déployer une copie par utilisateur (ce qui n'est pas économe en place et peut devenir rébarbatif pour un administrateur système).
La question que l'on pourrait se poser serait donc : à quand une fusion des technologie MSI, et ClickOnce pour permettre d'obtenir un solution de déploiement gérant les différents cas de figure (personalisation des raccourci, choix du dossier d'installation, association de fichier, et déploiement par le web, mise à jour automatisé,...). D'autant qu'avec l'arrivé de windows vista on à par exemple pu voir aparaitre un explorateur des jeux installé (par exemple) il pourrait donc être intérréssant de pouvoir s'en servir lors de nos déploiement.
Voilà le débat est lancé. A vos avis.
(Private Joke : mince je viens de faire de post aujourd'hui, comme dirait
Cristopher je commence à être atteint de
schapiromanie)
Certain d'entre vous l'ont peut être déjà aperçu, j'ai publié il y a quelques jours la version alpha de ma librairie de gestion d'application Client/Serveur.
Au menu des nouveautées :
- Réorganisation interne des classes et Namespace;
- Nouveau système de configuration;
- Ajout d'un système de log;
- Réorganisation des transaction client/serveur (et réciproquement);
- Ajout de la possibiliter pour le serveur de refuser la connexion d'un client;
- Ajout de la gestion du nombre de place sur le serveur;
- Ajout d'un système de compression des flux;
- Ajout de l'identification du serveur par le client (avec impossibilité pour un client de se connecter à un serveur n'ayant pas le même "ApplicationIdentifier");
- Nouveau système d'implémentation des clients et serveur avec l'utilisation de classe abstraite;
D'ici la version beta deux fonctionnalité doivent encore être implémentées :
- Traitement des envoi et récéption de donnée "lourde" (taille importante);
- Ajout d'une possibilité de cryptage des flux via l'algorythme RSA;
La librarie est actuellement disponible ici : [NetAccess 2.0 alpha]
Pour ceux qui ne l'aurait pas encore remarqué, les inscription à la session 2008 de l'imagine cup sont ouverte depuis fin août.
Pour ma part ma prémière participation aura lieu dans la catégorie Project Hoshimi. L'inscription est faite, la team crée (enfin pour l'instant suis tout seul), il ne reste plus qu'a attendre des nouvelle de Richard pour la sdk 2008 du round 1.
Bonne chance à tous les participants et que les meileurs gagnent (les français bien sûr ^^)
Les 10 derniers blogs postés
-
[Silverlight] En attendant Silverlight 2 RTW par
Blog Technique d'Audrey PETIT le il y a 21 heures et 7 minutes
-
Le nouveau Gojira, c’est pour lundi… par
CoqBlog le 10-11-2008, 01:18
-
SharePoint : nouvel article sur la mise en place des Scopes dans MOSS Searchs par
Blog Technique de Romelard Fabrice le 10-10-2008, 17:52
-
Hello CS par
Le Blog de julz le 10-10-2008, 12:26
-
MSDN/TechNet/Microsoft Days Tour 2008 à Lille les 13 et 14 Octobre ! par
RedoBlog - The .NET Gentleman !!! le 10-10-2008, 09:35
-
MVC Pratique #07 - Un projet concret et le transfert des objets avec les ModelBinders par
#Rui le 10-09-2008, 23:39
-
SQL Server 2008 : Certifié - TS Admin (70-432) par
SQL Server vu par Christian Robert le 10-09-2008, 10:58
-
[WPF] Comment changer la couleur utilisée pour sélectionner les éléments d’un ItemsControl ? par
Thomas Lebrun le 10-09-2008, 10:49
-
Hello World! par
Hamid's Place le 10-08-2008, 23:38
-
SQL Profiler - Configuration pour un développeur - tracer les requêtes SQL de votre application par
Atteint de JavaScriptite Aiguë [Cyril Durand] le 10-08-2008, 15:52