dimanche 31 janvier 2010

Quelques lectures en prévision

J'ai récemment reçu quelques chèques livre de Jyce que je remercie chaleureusement au passage.
Ce week-end, je me suis donc rendu dans ma librairie préférée pour les convertir en papier à grignoter :-)
Dans un premier temps, je voulais remettre la main sur un excellent dictionnaire des créatures légendaires, mythiques et fantastiques (peut-être celui-ci ou celui-là).
Malheureusement, il ne s'y trouve plus! Il me faudra retrouver la référence de l'ouvrage :-|

Je n'ai rien perdu au change car ma librairie regorge d'excellents ouvrages.
A défaut de mon dictionnaire (ce sera pour une prochaine fois), je suis ressorti avec des ouvrages qui me feront passer d'agréables moments:
Voila, avec cela, ma liste de lecture passe à 42 ouvrages.

jeudi 28 janvier 2010

Créer le script "Create Table" d'une table

Introduction
Il est quelque-fois nécessaire de déplacer ou dupliquer recréer plusieurs tables d'une DB à l'autre.

La technique la plus simple consiste en obtenir le script sql de création (Create Table) et de l'appliquer sur l'autre base de donnée.
Cette opération peut être effectuée manuellement ou automatiquement.

Option manuelle
Cette option est idéale lorsque l'opération doit être exécutée une seule fois et sur un nombre restreint de table (object).
A cette fin, l'on utilise les fonctionnalités du "Sql Management Studio" pour recréer ce script.
Ce procédé largement répandu est décris sur d'autres articles tel que "SQL SERVER – 2005 – Create Script to Copy Database Schema and All The Objects – Stored Procedure, Functions, Triggers, Tables, Views, Constraints and All Other Database Objects" publié sur Sql Authority.

Si cette solution est intéressante au cas par cas, elle à l'énorme inconvénient de nécessiter l'intervention humaine.

Option automatique
L'option automatique (à l'aide de code exécutable comme des stored procedure) à l'avantage de répéter une opération de façon systématique. C'est encore plus avantageux si la tâche est répétitive.
Bien qu'ayant déjà fureté un peu sur le net, il n'existe pas de "stored procedure" ou "extended procedure" permettant d'obtenir un tel script depuis Sql Server lui-même.
Pour le moment, seul SMO semble offrir une alternative intéressante.

Getting CREATE SCRIPT with SMO
Une solution possible pour obtenir le script de création d'un objet (table) est d'écrire un bout de code en VB ou .Net qui utilise l'API SMO (Sqlserver Management Object) pour obtenir les script en question.
Pour rappel, SMO est également l'API utilisée par "Sql Server Management Studio".


La discussion de cet article "Dynamic Stored Proc to generate Create Table Script ,taking table_name as parameter" fournit déjà un bout de code à partir duquel il est possible d'élaborer une solution.
SQL DBA Tip publie également l'article "Getting Started with SMO in SQL 2005" (avec code de démonstration).

Programmer le port parallèle et touch devices avec .Net

Programmation du port parallèle en .Net
En guise de détente, voici deux articles qui expliquent comment contrôler l'état du port parallèle de votre PC.
Pour les bricoleurs et les débrouillards, voici quelques images des l'articles publiés sur "The Code Project".





Devices tactiles en .Net
Dans la même veine des articles un peu différent, voici un article qui s'attarde sur la capture tactile en .Net.
Encore une fois un article "The Code Project". 

mercredi 27 janvier 2010

Documentation C# - C#3, C#4, Tutoriel techniques, mem leaks, Trace et Debug

Voici une série d'articles dignes d'intérêts...

Eviter les memory & ressource leaks en .Net
Contrairement à ce que beaucoup de développeurs pourraient penser, la mise en place d'un "Garbage Collector" dans le FrameWork .Net ne met pas le développeur à l'abri du memory (& ressource) leak.
L'article "How to detect and avoid memory and resources leaks in .NET applications" parut sur MSDN nous explique qu'il existe toujours des cas et situations où les memory leaks (et/ou ressources leaks) sont possibles.
Il montre également comment les détecter et les éviter.

Debug &  Trace
Excellent article que "CodeProject A Treatise on Using Debug and Trace classes, including Exception Handling. Free source code and programming help".
Il explique pourquoi il faut utiliser Trace.Assert & Debug.WriteLine!
Il montre également comment implémenter un "Custom Debug Class" pour obtenir des fonctionnalités précises et en Debug et en Release (histoire de facilité la vie des développeurs).
Finalement, il montre comment implémenter un "ExceptionHandler" (InitializeUnhandledExceptionHandler, DbgExceptionHandler) pour capturer les exceptions remontant jusqu'au framework (afficher des messages d'erreurs plus professionnel).

Tutoriels Technique .Net
Elise dupont publie une série de tutoriel sur www.dotnet-tech.com depuis 2003.
Voici une liste des documents PDF (aux noms déjà évocateurs) disponibles depuis la page principale.
Application-blocks
Asp_net_2_securite
AspNet_Excel_2
Assemblies
Config&Custom_asp
Controle_wysiwyg_part1, 2 et 3
Intro_remoting
ldap
localisation
Office&WebServices
premiers_controls_web
procstock&VS.net (gestion de stored procedure avec VSS)
RepportsExcel_Asp.net
rss
Security_partie1 et 2
Securitedotnettech
serialisation
serialisation_complexe
service_windows
TransparenceModeUnsafe
webparts
Windows XP 1
wsattach

Nouveauté C#3
Quelques articles concernant les nouveautés C#3 (disponibles sur Developer.com).
Nouveauté C#4
Pour le moment, il n'y a qu'une entrée... mais cela va certainement se combler très vite.

lundi 25 janvier 2010

Dix outils que tous les developpeurs .Net devraient avoir

En juillet 2004, MSDN Magazine à publié l'excellent article "Ten Must-Have .NET Tools Every Developer Should Download Now" de James Avery.

Cet article est un excellent point de départ pour découvrir quelques outils très utiles pour l'environnement .Net.
En voici quelques-uns...

Snippet Compiler
C'est une petite application qui permet d'écrire et compiler rapidement des petits bouts de code .Net.
Plus besoin de démarrer Visual Studio et de commencer un nouveau projet pour faire quelques tests ou écrire un petit bout de code "démo"
Snippet Compiler sait se montrer terriblement efficace.
Parmi les éléments non mentionner dans l'article, il est possible d'ajouter des références au snippet en cours d'écriture. Bien pratique pour tester et mettre à mal un assembly fraîchement livré :-) .
Info sur Snippet Compiler.

Regulator et Regulazy
Régulator est un outil pour écrire et tester facilement des expressions régulière (wikipedia, Learn - Test regular expression with regulator).
L'initiateur du projet regulator à également initié Regulazy, un outil permettant d'écrire plus facilement des expressions régulières à partir de vos propres exemples.
De vrais petits bijoux pour les développeurs.
Plus d'information ici.

.Net Reflector
Outil red-gate qui utilise la réflexion pour analyser, décompiler et explorer les classes & méthodes d'un assembly.
Un incontournable pour les développeurs .Net.
Plus d'information sur la page d'accueil de Reflector.

NUnit
Outil permettant de d'écrire et automatiser des sessions de Unit Testing (wikipedia).
L'article "Test-Driven C#: Improve the Design and Flexibility of Your Project with Extreme Programming Techniques" de MSDN Magazine aborde d'ailleurs ce sujet. 
Voir le site officiel pour plus d'information.
A noter que l'environnement Visual Studio dispose d'un plug-ins developpé sur SourceForge.

NDoc
Il est possible, en C#, de rapidement et facilement documenter son code (methodes, arguments, classes, etc) à l'aide des balise xml summary (///).
A la compilation, ces informations peuvent être utilisées pour générer des fichiers Xml contenant la documentation du code.
NDoc récupère ces fichiers mais utilise également la réflexion sur les assembly pour (re)constituer une document précise.
La force de NDoc réside principale dans les formats de documentation qu'il est capable de produire (Html, Chm, etc). 
Plus d'information à propos de NDoc sur SourceForge.

samedi 23 janvier 2010

Les livres lus en 2009

Livres lus :


  • 15 ans après de Alexandre Jardin du 08 décembre au 02 janvier 2010 
  • Fanfan de Alexandre Jardin du 30 novembre au 07 décembre 2009
  • Le prédicateur de Camilla Lackberg du 12 novembre au 29 novembre 2009  
  • Das System de Karl Olsberg du 6 novembre au 11 novembre 2009  
  • La promesse des Ténèbres de Maxime Chattam du 25 octobre au 6 novembre 2009 
  • La conspiration du temple de Steve Berry du 13 septembre au 24 octobre 2009
  • Tintin-King Ottokar's Sceptre de Hergé du 29 Aout 2009 au 27 septembre 2009
  • Théatre (volume1) de E.E. Schmitt du 16 Août 2009 au 28 Août 2009 
  • Troie (volume 1) de David Gemmell du 21 juillet 2009 au 18 Août 2009
  • L'énigme Alexandrie de Steve Berry du 26 mai 2009 au 19 juillet 2009
  • Meurtre.com de Jeffery Deaver du 06 mai 2009 au 25 mai 2009 
  • Autre Monde (vol 1) - L'alliance des trois de Maxime Chattam du 25 avril au 05 mai 2009
  • La Proie de Michael Crichton du 13 avril au 24 avril 2009
  • Les manipulateurs sont parmis nous de Isabelle Nazarre-Aga du 23 mars au 12 avril 2009
  • BD - Calvin & Hobbes - integral vol 2 de Bill Watterson 27 mars 2009 ??
  • Petits crimes conjugaux de Eric Emmanuel Schmitt du 17 mars au 22 mars 2009
  • L'héritage des Templiers de Steve Berry du 10 février au 16 mars 2009
  • BD - Tintin & the land of black gold de Hergé 07 février 2009
  • BD - Calvin & Hobbes - integral vol 1 de Bill Watterson 27 janvier 2009
  • Les pommes d'Or du Soleil (nouvelles) de Ray Bradbury du 08 janvier au 01 février 2009
  • Millénium 3 - La reine dans le palais des courants d'air de Stieg Larsson du 14 décembre 2008 au 07 janvier 2009

jeudi 21 janvier 2010

Support des Sets et test d'inclusion en C#

Au cours d'une séance d'exploration sur la classe XmlReader en C#, je suis arrivé à un point où il me fallait écrire un traitement conditionnel dépendant du type de noeud xml (XmlReader.NodeType).

Dans un tout premier temps, j'ai voulu tester si le type de noeud en cours de lecture était une entité Element ou CData.
Cependant, je m'attendais également à devoir rallonger la liste des éléments à supporter dans mon test.
Je me suis donc attardé sur les test d'inclusion.

Coding standard en C#
Le test d'inclusion pouvait s'écrire:
if ((myReader.NodeType == XmlNodeType.Element) || (myReader.NodeType ==XmlNodeType.CDATA) )
doTraitement1();
else
doTraitement2();
Cependant, cette option (tout comme le switch) aura le désavantage de dégrader la lisibilité s'il faut étendre le test pour supporter de nouvelles valeurs.

Coding en Delphi
Delphi (tout comme Sql ou Python) supporte la notion d'ensemble (les Sets).
Delphi offre par ailleurs la possibilité d'effectuer des tests d'inclusion sur un paramètre à l'aide de ces ensembles.
C'est ainsi que le test d'inclusion suivant est tout à fait valable en Delphi.
if FieldType in [DataType_Numeric, DataType_Text] then 
doTraitement1()
else
doTraitement2() 

Une approche LinQ en C#
Je n'ai malheureusement pas encore trouvé d'écriture similaire à celle de Delphi pour C#.
Cependant, LinQ et les generics offrent la possibilité d'écrire des tests d'inclusion.
Le but étant de construire une collection contenant les valeurs admises et de vérifier si cette collection contient le paramètre à tester.
L'exemple ci-dessous démontre ce principe.
...
XmlTextReader myReader = new XmlTextReader(myFile);

if (
   (new List<XmlNodeType>(){ XmlNodeType.Element, XmlNodeType.CDATA }).Contains( myReader.NodeType ) )
  Console.WriteLine("myReader.ReadContentAsString = " + myReader.ReadContentAsString() );

Ajouter le support des Set à C#
Parmi tous les dérivés des collections, C# (jusqu'à la version 3.5 du Framework) ne dispose pas de structure de type Set.
Un set dispose des fonctionnalités suivantes:
  • Un set contient une liste d'élément (chaque élément étant présent une seule fois).
  • Le traitement des Set est rapide.
  • Les Set disposent d'opération d'inclusion, union, intersection, de test, etc.
  • Les Set disposent d'opérateurs permettant un codage clair et efficace.
Si C# manque cruellement de Set, l'article "Add Support for "Set" Collections to .NET" sur "The Code Project" essaye de résoudre ce problème avec un certain brio.
A côté des développement sur "The Code Project", il existe également la collection de classe C5.

Support des Set pour .Net 3.5
En information de dernière minute, il semblerait qu'il existerait une classe HashSet() à partir de la version 3.5 du framework
Je vais me pencher un peu la dessus...