Je relais assez peu souvent les infos glanées sur tel ou tel site, préférant vous montrer un peu de code :)
Ceci dit ce soir je fais une exception, en vous encourageant vivement a jeter un coup d’œil au benchmark des technos de mise en réseau que nous, développeurs .NET, avons à notre dispositions.
Le bench, étudie de manière approfondie chaque techno, et la compare dans un scenario viable et réaliste de leurs utilisations.
Je ne peux m’empêcher de vous donner une idée de ce qu’il en ressort :
To summarize the results, WCF is 25%—50% faster than ASP.NET Web Services, and approximately 25% faster than .NET Remoting. Comparison with .NET Enterprise Service is load dependant, as in one case WCF is nearly 100% faster but in another scenario it is nearly 25% slower. For WSE 2.0/3.0 implementations, migrating them to WCF will obviously provide the most significant performance gains of almost 4x.
Donc , lorsque vous entamerez un nouveau projet, sans contraintes techniques spécifiques sur la partie mise en réseau, il n’y a plus d’excuse… c’est WCF ou rien :p
Suite à la demande d’un utilisateur sur Codeplex de pouvoir utiliser Claymore avec le Compact Framework, j’ai ajouté cette feature dans la librairie; Plus précisément, il existe désormais une assembly qui vise spécifiquement cette version du Framework.
Les classes du Namespace Configuration n’existant pas dans le Compact Framework, j’ai donc du ajouter une API permettant de configurer par code, le fonctionnement de la librairie, tout comme il est possible de le faire en passant par une configuration dans le fichier app.config ou web.config.
J’en ai profité pour designer l’API de configuration en suivant les conventions des Fluent interfaces; Ce type d’écriture semblant être de plus en plus apprécié des développeurs que nous sommes.
Bon téléchargement, et n’hésitez pas à me dire ce que vous en pensez.
Non non non, vous ne rêvez pas… non non je ne suis pas mort!
Ça faisait bien longtemps que je n’avais pas eu et pas pris le temps de mettre à jour ce blog… Qui as dit que les enfants n’était pas chronophages? :)
Depuis près de deux ans, les missions sur lesquelles j’interviens sont très souvent liées au développement Winform et malheureusement à chaque fois c’est le même constat; les forms et/ou usercontrol sont un joli mélange de code métier et de gestion d’interface graphique, sans parler des cas ou l’on retrouve même le code d’accès aux données fourré au beau milieu de ce jolie petit monde.
Pourtant, cela fait bien longtemps que l’on connait les patterns MVC, MVP et depuis quelques temps le MVVM qui prend son essor avec Silverlight.
En demandant aux architectes ou Lead techniques de ces projets, ce qui avait justifié de ne pas appliquer un des ces patterns, la réponse est presque toujours la même :
L’implémentation de ces modèles dans les applications rallonge (parfois beaucoup) les temps de développement, demande des compétences un peu plus high level de la part des développeurs, et la montée en compétence sur les frameworks existants est parfois très lente.
Entre nous, avant de pouvoir appréhender et amortir le temps d’apprentissage d’un framework comme Smart Client - Composite UI Application Block de Microsoft, le projet à intérêt à s’étaler sur un an au minimum.
Afin de rester impartial, je ne m’étendrais pas sur les autres framework MVP qui peuvent se trouver sur la toile.
Bref, il me semblait qu’il serait intéressant d’avoir un framework MVP simple d’utilisation dans mon escarcelle pour les prochains projets.
J’ai donc commencé à écrire ça dans mon coin; Aujourd’hui Claymore me semble assez mûre pour le mettre à disposition des autres, et je l’ai donc publié sur codeplex. Évidemment, Claymore fonctionne avec les projets Winform mais je n’ai pu m’empêcher d’ajouter aussi le support des projets ASP.NET.
J’espère que ce framework saura vous aider à découpler les couches métiers des couches UI…
Cela fait plus d’un an et demi que le site Microsoft Reference Source Code Center à vu le jour. Rappelons que ce dernier à pour but de mettre à disposition le code source des assembly suivantes :
Mscorlib.DLL
System.DLL
System.Data.DLL
System.Drawing.DLL
System.Web.DLL
System.Web.Extensions.DLL
System.Windows.Forms.DLL
System.XML.DLL
WPF (UIAutomation*.dll, System.Windows.DLL, System.Printing.DLL, System.Speech.DLL, WindowsBase.DLL, WindowsFormsIntegration.DLL, Presentation*.dll, et quelques autres…)
Microsoft.VisualBasic.DLL
Depuis lors Visual Studio 2008 à été mis à jour afin d’offrir la possibilité de debugger en direct les sources du framework .NET.
Pour ceux qui aurait loupé l’info au moment de la sortie (peut-être que l’info n’a pas été assez bien relayée), voici un tutoriel de Shawn Burke qui vous permettra de configurer votre IDE préféré.
Pour les utilisateurs de VS2005 ou bien des version Express de Visual Studio, alors .NET Mass Downloader est l’outil qu’il vous faut car il vous permettra de remplir le cache de code source utilisé par l’IDE et en prime vous autorisera de travailler même lorsque vous n’êtes pas connecté à Internet.
Voila donc quelques cas ou vous pourrez vous permettre d’oublier Reflector :D.
Voila! après quelques nuits plutôt courtes je suis heureux de mettre en ligne ce nouveau thème pour mon blog.
Certains lecteurs m’ayant dit que sur l’ancienne version la fonte était trop petite et sombre, j’ai essayé de trouver un compromis entre la mode du flashy qui sévit de plus en plus sur la toile et mon penchant pour le gothisme… Finalement, je suis reparti sur un autre concept… Bref, vos yeux devraient moins saigner si vous lisez ces lignes sur le blog directement. Quand à ceux qui trouvent que le blog a basculé dans le mode Hacker (comprenez fonte blanche sur fond noir) et bien il vous reste toujours Google Reader :)
Il y a aussi quelques améliorations au menu :
Passage à la version 1.3.1 de dojo sur le CDN fournit par Google
Passage à la version 2.0.320 de SyntaxHighlighter
Mise en place d’un style pour les blockquote sans l’utilisation d’image; Cela ne fonctionne qu’avec les navigateurs de dernière génération.
J’espère que vous aimerez autant que j’ai pris de plaisir a le mettre en place.
Un billet rapide pour annoncer la release 0.2.2 de SMDBehavior.
Cette version fixe un bug qui causait un disfonctionnement lors de l’appel de Web Services en utilisant le verbe GET. Merci à Andrew Cave qui m’a gentillement remonté ce bug.
J’ajouterais également cette semaine quelques exemples supplémentaires.
Mon petit ORM chouchou monte de version, et on le retrouve désormais en version 3.0 avec tout un tas de nouveautés.
Depuis la sortie de la version 2.2 en avril dernier, certain pensaient que le projet Subsonic était mort; Rob Connerry ayant été embauché par Microsoft, et le manque de communication sur le site concernant l’avancement m’arrangeant rien.
Mais c’était sans compter sur Rob qui nous préparait dans sa cave une mouture qui n’a sans doute plus grand chose à voir avec la version 2.2.
En effet, ciao le langage à base d’expressions pointées pour requêter la base de données, qui par ailleurs faisait sans doute toute la force de Subsonic face aux autres ORM, et bienvenu à Linq to SQL.
De plus le système de templating à complètement été réécrit lui aussi; Subsonic utilise désormais T4.
Alors que peut-on en penser?
Historiquement je ne suis pas fan de Linq to SQL, surement car je n’ai pas pris assez le temps de faire joujou avec, cela sera surement la bonne occasion. Ceci dit faudrait penser à dire à l’équipe de Linq que l’instruction Select c’est en début de requête que ca se place ;)
Qu’en a T4, ca c’est une vrai bonne grosse nouvelle c’est tout simplement la killer feature à mes yeux; Le système est assez simple a prendre en main, ouvert, et donne accès a l’ensemble des possibilités de la plateforme .NET
Au niveau des Templates fournis en standard, on retrouve le très bon, mais controversé pattern ActiveRecord, et le tout nouveau SimpleRepository pour les amateurs de POCO.
Finalement, on sent bien l’influence corporate de Microsoft tout de même dans les choix de techno, mais c’est surement le meilleur choix qui s’offrait à l’équipe en terme de pérennité.
Je tacherais de vous faire une présentation un peu plus technique de cette version 3 dans un prochain article.
Pour une fois qu’il ne parle pas de Data Mining (quelqu’un comprend ce qu’il raconte au moins sur le DMX), je vais me permettre d’intervenir/compléter sur un point. J’espère que ca ne te dérange pas François. > François à dit : … SSIS est optimisé en mémoire donc à vous de l’économiser! Déjà, sélectionnez uniquement les colonnes utiles…
Dans les Data Flow Sources, il est effectivement conseillé de ne sélectionner que les colonnes qui seront effectivement utilisées par la suite. Cependant, dans la suite de votre flux de données, certaines transformations (ex : Derived Column, Data Conversion etc…) vont dupliquer les colonnes les premières ne servant vraisemblablement plus.
Une solution souvent mise en place afin d’enlever les colonnes inutiles, est d’utiliser la tache Union All. En supprimant les Output Column inutiles, on pense réduire à juste titre la mémoire utilisée. La pire solution, serait d’utiliser des taches synchrones aggregate ou sort pour supprimer ces mêmes colonnes.
Mais alors si je conviens que cela réduit bel et bien l’utilisation de la mémoire, pourquoi n’est tout de même pas une bonne idée? Tout simplement de par le fait que supprimer une colonne induit la copie des buffers du pipeline vers de nouveaux buffers. Et malheureusement l’expérience prouve que cette action de copie est bien trop couteuse en terme de cycle CPU pour contrebalancer la réduction de la mémoire utilisée.
Darren Green - 10 Mai 2007 à dit :
Something that people, including me get a bit worried about, is the fact that you end up with these big wide buffers. The classic scenario is when you need to convert between string and Unicode string or visa versa. You end up duplicating all your columns, which seems really horrid. Well it may not be great, but the alternative is even worse. Data Conversion and Derived Column transforms can do the conversion, but are synchronous, so we have duplicate columns in effect. Would it be better to have a custom component that worked asynchronously, so you didn’t end up with two columns for all your strings? The short answer is no. I wrote a test component, cunningly named DeUnicodeAsynchTestComponent, and simply put it was 2 - 2.5 times slower than a data conversion transform. The cost of copying data between buffers for the asynchronous nature is far more expensive than the extra baggage of the “duplicate” columns.
Voila François, j’espère que cette petite précision intervention ne te dérangera pas trop… promis je te laisse tranquille tant que tu parle de Data Mining…. Quand à moi, je retourne à mon code C#.
Dernièrement en étudiant les possibilités offertes par T4 (un prochain billet y sera consacré), j’ai été confronté une fois de plus a un problème bien connu de la Refection : L’impossibilité de décharger un assembly de l’AppDomain l’ayant chargé; La seule solution étant de décharger tout l’AppDomain.
Dans mon cas, l’AppDomain chargeant l’assembly était hosté par Visual Studio, ma seule solution était donc de fermer Visual Studio 2008… sniff sniff un peu violent!
En fouillant mes bookmarks non traités, je retombe sur Mono.Cecil, un Framework d’introspection écrit par Jean-Baptiste Evain.
Qu’est ce que Mono.Cecil? Je dirais que c’est de la reflexion sous stéroïde car non soumis aux mêmes limitations que la reflexion, et qu’en prime on peut aussi créer/modifier du code CIL avec.
Alors comment choisir entre les deux ? Je vous laisse découvrir l’excellent article Mono.Cecil vs. System.Reflection de Patrick Smacchia un des auteurs de NDepend
Pour ne pas déroger à la règle un petit bout de code afin de mettre le pied a l’étrier.
AssemblyDefinition myLibrary = AssemblyFactory.GetAssembly("MyLibrary.dll");
foreach (TypeDefinition typeDef in myLibrary.MainModule.Types){
if (!typeDef.IsClass)
continue;
Console.WriteLine(typeDef.FullName);
}
Lors des deux derniers billets, je vous ai présenté les possibilités offertes par le format SMD (simple method description) qui n’est autre qu’un JSON permettant de décrire un service web tout comme wsdl le fait en xml.
Pour rappel, certain Framework Ajax comme Dojo et Yahoo UI, savent interpréter ce JSON et généré automatiquement la classe proxy qui permettra de travailler facilement en Javascript avec les WebService.
Bref, tout ca pour vous annoncer que j’ai dernièrement travaillé sur une extension WCF qui génére automatiquement le SMD de vos services; et que le fruit de ce travail est disponible sur Codeplex à l’adresse suivante : SMDBehavior.
Evidemment, pas besoin de modifier vos services, il suffit d’ajouter quelques lignes de configuration dans le fichier web.config ou app.config pour que cela fonctionne.
Sur le site du projet SMDBehavior vous pourrez télécharger le binaire, une solution de démo et si vous avez un identifiant Codeplex, vous pourrez aussi obtenir les sources. Je ne m’étendrais pas ce soir sur la mise en oeuvre de cette extension WCF, car tout est explique sur la page SMDBehavior.