Parcourir par tags

Tous les tags » Développement (RSS )

Inspiré de ce message, qui m'a rappellé que je n'avais pas parlé de ce problème qui m'était pourtant arrivé.

Il arrive que vous ayez besoin d'avoir une application web située sous un autre (répertoire virtuel).

Problème : votre application située virtuellement en dessous héritera automatiquement du web.config de l'application parente. Avec tous les problèmes qui en découlent : déclaration de paramètres en doublons (chaînes de connexions, appSettings, etc.), déclaration de types dont l'assembly n'est pas présente, etc.

Exemple (pompé sur l'autre message) :

<httpModules>

  <add name="UrlRewriteModule" type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter"/>

  <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

</httpModules>

Avec une telle déclaration dans votre site racine, toutes les applications descendantes se retrouveront avec les extensions ajax déclarées. (Peu importe la version du framework d'ailleurs)

Première solution trouvée : celle consistant à supprimer les anciennes déclarations à l'aide d'un <clear /> (là où c'est supporté).

<httpModules>

  <clear/>

</httpModules>

Sauf qu'il y a une autre solution, liée à cette fameuse balise <location /> que l'on utilise souvent pour spécifier des droits sur une page spécifique.

Il suffit en fait d'utiliser l'attribut inheritInChildApplications="false" sur une balise location avec path="." dans votre web.config racine pour pouvoir ainsi y insérer des éléments de configuration qui ne seront pas hérités par les applications descendantes.

<location path="." inheritInChildApplications="false">

  <system.web>
    <httpModules>

      ...

    </httpModules>

  </system.web>
</location>

Ainsi, si vous avez des sections dont vous ne souhaitez surtout pas que les applications descendantes héritent (par prévention), il vous suffit de les déclarer dans cette section.

Emacs.net ?

27 déc. 2007 Classé sous : ,

Tiens tiens... Il semblerait que MS s'intéresse au développement d'un IDE light, vu qu'il est question d'embaucher quelqu'un pour un projet pouvant être décrit comme un "Emacs.net".

Affaire à suivre.

Dans la famille "on en apprend tous les jours", aujourd'hui, l'utilisation des colonnes de type IDENTITY comme compteur dans une table.

Je ne le savais donc pas (la faute, je trouve, à la documentation totalement inexistante à ce propos), mais l'incrémentation des valeurs des colonnes IDENTITY sous Sql Server est totalement déconnectée de toute notion de transaction.

Conséquence directe : si vous effectuez un rollback après une insertion dans une table avec une colonne identité, la valeur du compteur sera consommée et perdue pour la ligne suivante (vous aurez donc un trou dans votre séquence).

Autant la documentation semble parler de trous pouvant survenir lorsque l'on efface des lignes (ce que je conçois tout à fait), autant il m'a fallu me retrouver devant le fait accompli pour constater cette limitation.

Conclusion (on avait déjà quelques tables se servant d'un compteur interne pour générer la séquence, donc on va juste accélérer la migration vers ce mécanisme), n'utilisez pas les colonnes IDENTITY si vous souhaitez avoir une vrai séquence sans trous (même si vous n'effacez pas vos lignes !).

Le titre pourrait laisser penser que je ne connais pas la doc xml déjà proposée par C#, qui permet, par l'intermédiaire des balises <see /> de faire des liens vers des membres.

Non, là je souhaiterai parler d'un nouvel AddIn, HyperAddin, qui permet, dans des commentaire classiques, d'insérer des liens vers d'autres membres directement utilisables depuis Visual Studio.

La syntaxe est relativement simple, comme expliqué dans ce billet : il suffit de précéder le nom du membre recherché par le mot clé "code:".

// Comportement similaire à celui codé dans la méthode code:AutreClasse::Unlock.

Il est aussi possible de créer un lien en commentaire à l'aide d'un #, comme en html

// #exemple

//

// Pour faire un lien, il suffit d'utiliser code:#exemple

Si vous souhaitez référencer un lien nommé d'un autre fichier source, il vous faudra préfixer le nom du lien par le nom d'une classe se trouvant dans le même fichier source.

Je teste ça de suite.

Je viens tout juste de lire ce billet de Scott Hanselman (et suivi par celui de Scott Guthrie) à propos de la sortie de Silverlight 1.0 officiellement aujourd'hui. Il vous suffira de visiter une page hébergeant un contrôle Silverlight pour que la mise à jour vous soit proposée.

Le point le plus intéressant, à mon avis, dans cette annonce est le partenariat officiel de Microsoft et Novell à propos de Moonlight, l'équivalent Mono de Silverlight. Moonlight permettra donc aux utilisateurs de Linux de pouvoir afficher les pages hébergeant des objets Silverlight. Certaines personnes de Microsoft devraient donc participer au développement du projet.

C'est une très bonne chose que Microsoft reconnaisse le boulot fait par les contributeurs de Mono, et ça présage une belle perçée possible pour Silverlight. Personnellement, j'attends surtout la 1.1 pour le support des langages autres que javascript, mais il reste semble-t-il encore pas mal de boulot.

Dommage, à quelques mois près, j'aurais pu proposer à Lasombras de coder le nouveau projet secret sous cette plate-forme :D Peut-être pour la v2...

Le problème des applications et de leurs fichiers ressources est que bien souvent, on souhaiterait que d'autres personnes puissent les modifier. Que ce soit pour corriger des fautes ou modifier la tournure de certaines phrases, voir tout simplement pour traduire l'application.

Comment, donc, permettre à une autre personne de travailler sur cet aspect, sans qu'il ne soit nécessaire de le former à visual studio et toutes les subtilités des fichiers de ressources ?

Je vais faire un petit topo ici des outils que j'ai découverts, étant donné que j'en ai trouvé un de plus aujourd'hui encore, et qu'il me semble être temps de les noter quelque part.

Les éditeurs ResX autonomes

Il s'agit là de simplement permettre d'éditer les fichiers de ressources sans devoir passer par Visual Studio. L'outil "de base" donc pour simplifier le travail d'édition.

  • Resourcer, créé par Ludz Roeder, le créateur de Reflector. Il permet d'éditer les fichiers .resx et .resources (texte et images). Plutôt orienté développeur.
  • Resx Editor, un autre outil dans la même veine, disponible en français mais ne gèrant pas les resources autres que les chaînes.
  • ResEx, un outil qui semble être le plus abouti, plus particulièrement ciblé sur la traduction de resources. Il permet notamment de travailler en mode "side-by-side" entre le fichier en langue originale et la version traduite. Il ajoute des contrôles sur les chaînes formattées (contrôle la présence des {0} dans la version traduite). Celui que je conseillerai le plus à une personne n'était pas développeur.

Les outils pour Visual Studio

  • ResX File Public Code Generator. Il s'agit d'un custom tool qui permet de générer des classes de ressources publiques, au contraire du custom tool de base qui ne génère que des classes internes. Il est ainsi possible d'avoir un .resx dont les ressources seront ensuite accessible depuis d'autres librairies.
  • Resources Refactoring Tool. Un petit AddIn pour visual studio pour permettre d'extraire une chaîne de caractère de votre code directement dans une resource, en remplaçant les autres occurances dans votre projet par cette ressource. Pratique pour repasser derrière du code mal écrit.

Les autres outils (conversion, import/export)

  • Resx To Word est un autre outil de la même société que Resx Editor (PeopleWords) qui permet de transformer un .resx en fichier word, et inversement. Je ne l'ai pas testé personnellement.
  • ResX To Xls (la découverte du jour) permet, lui, d'exporter tous les fichiers ressources d'un projet dans un fichier excel. Le gros avantage est qu'il rassemble tous les fichiers .resx d'un projet dans un seul fichier excel. Il permet ensuite de mettre à jour les fichiers .resx à partir du fichier excel. A tester absolument.

Si vous connaissez d'autres outils, n'hésitez-pas à m'en faire part.

CodeProject : Best of May

31 mai 2007 Classé sous :

Je profite de la nouvelle version de Live Writer pour démarrer un petit billet sur les articles les plus intéressants trouvés sur CodeProject pour ce mois-ci. Je tâcherai de partager ainsi quelques trouvailles.

Le système de drafts aidant, j'ai pu noter quelques remarques au fur et à mesure de la publication des articles sur codeprojet.

A noter que je ne parlerai à priori pas d'asp.net dans cette section, tout simplement car je bosse trop peu dessus en ce moment pour m'intéresser à ce qui se fait, même si silverlight me chatouille un peu.

Wizard Control

On commence avec un contrôle d'assistant, pour winforms. Il en existe déjà depuis un moment, mais celui-ci ressemble pas mal à celui que j'ai développé pour nos besoin. Il semble fournir une excellente intégration en mode design, avec un smart menu complet.

Dessin sur document

Un autre framework intéressant (il en existe tellement peu), nommé BizDraw, permettant de créer une interface pour dessiner sur un document (texte, lignes, rectangles, dessin à main levée, etc.) et ensuite l'éditer (impression sur plusieurs pages, mosaique de document). Tellement rare que j'estime indispensable d'en parler.

Création d'un langage pour analyser des expression

Une librairie qui pourra intéresser tous ceux qui se sont un jour frotté à la définition d'un langage et l'analyse d'expressions, ou qui aimeraient en savoir plus en quelques pages. Grammaire, parsers, lexers et toute la petite famille : State of the Art Expression Evaluation.

De la définition de la grammaire au format BNF, suivi de son analyse, de ton test avec des exemples d'AST, et l'implémentation de quelques fonctionnalités pour cette résolution d'expression mathématiques (fonctions mathématiques, fonctions de type IF, etc.)

Un excellent moyen de découvrir ce type de développement si spécifique, très bien illustré ici.

Thème Aero pour tous les contrôles winforms

Pour ceux qui commencent développent des applis winforms pour vista, vous avez certainement remarqué que les thèmes aero ne sont pas systématiquement appliqués aux contrôles, et lorsqu'ils le sont, c'est souvent partiellement.

On revient à la nécessité de renseigner la propriété FlatStyle à System : c'est par exemple nécessaire sur les boutons pour que l'effet de transition soit appliqué lors du survol avec la souris.

Mais certains aspects nécessitent l'appel de SendMessage pour forcer l'activation des thèmes, d'autres l'appel de méthodes de uxtheme.dll, etc.

Cet article permet de se familiariser avec la manipulation des thèmes windows sur les contrôles en passant par du P/Invoke. L'article est développé afin de vous permettre de créer vos contrôles héritant des contrôles de base en ajoutant la gestion complète des nouveautés sur les thèmes de vista.

Utile en attendant de basculer sur WPF (hein mim ?)

Articles mis à jours

Et quelques articles intéressants qui ont été mis à jour ce mois-ci.

A quoi ressemble votre Identicon ?

22 janv. 2007 Classé sous :

Je viens de tomber sur une idée qui m'a d'abord semblée farfelue et inutile, mais dont le résultat m'a finalement agréablement surpris.

C'est une fois de plus le blog de Jeff Atwood qui m'a permis de découvrir cette idée.

Le concept ? Générer une image aléatoire, fonction de votre ip, permettant "d'iconifier" celle-ci et de la rendre mémorisable.

La construction des images est assez simple et les sources (Java) sont fournies. Jeff s'est chargé de porter le code sous .net.

Une belle manière d'afficher l'identifiant unique d'un visiteur, plus agréable qu'une simple ip.

Une question somme toute bête, mais qui pose pas mal de problèmes.

Lorsque vous proposez une couleur de fond dynamique (en particulier pour les pages web), il est parfois difficile de calculer une couleur suffisament contrastée pour le texte.

Voici donc un tout petit morceau de code sensé trouver un résultat convenable dans la majorité des cas.

A noter que les coefficients peuvent être modifiés pour tenter d'obtenir de meilleurs résultats (et oui, l'oeil est plus sensibles aux nuances de vert, les joies de l'évolution).

Pour ceux qui ont déjà eu l'occasion de s'intéresser à l'excellent Enterprise Library, ils seront content d'apprendre que des détails ont été publiés par Tom Hollander sur les Validation Application Block, prévus pour la v3 des Enterprise Library.

Cet outil devrait permettre de définir des contraintes de validation sur vos objets ou leur propriétés, agissant comme des prédicats testés avant exécution du code.

Des espèces d'assert automatisés, définis sur vos classe ou vos propriétés.

A noter que comme les autres composants de EntLib, vous aurez la possibilité de tout piloter via les fichiers de configuration, si vous recherchez ce type de dynamique.

Je suis curieux de voir de quelle manière les problèmes de validation seront remontés à l'appellant, en imaginant que cela devrait permettre de mettre en place d'excellents outils pour garantir la robustesse de votre code métier.

Miam.

Mono Migration Analyzer

28 nov. 2006 Classé sous :

Parce qu'il n'est pas forcément évident de savoir si un programme que l'on a fait pourra être facilement migré vers Mono, Jonathan Pobst vient de publier un outil, Mono Migration Analyzer.

Cet application se charge d'inspecter vos assemblies pour vous fournir une compte rendu indiquant, en 4 chiffres, quelle sont le nombre de méthodes qui pourront poser problème avec l'implémentation actuelle de Mono.

Un exemple d'écran de résultats :

Source : blog de Miguel de Icaza.

Encore une folie en provenance de la team chargée de la vNext de C#, l'ajout d'un nouvel opérateur pour lequel j'ai encore du mal à saisir le réel intérêt.

Il s'agit donc de l'opérateur because, dont la notation est "!!".

L'utilisation est la suivante : on ajoute cet opérateur à la suite d'un prédicat afin de justifier (dans un nouveau prédicat)pourquoi notre premier prédicat est vrai. Si le prédicat "justifiant" est vrai, alors le premier est forcément considéré comme vrai.

Je reprendrais l'exemple du blog d'où je tiens l'info : prenons un prédicat simple :

1 + 1 == 2

On applique l'opérateur because pour confirmer cette assertion.

1 + 1 == 2 !! 2 - 1 == 1

Dans un tel cas, où l'on n'utilise que des constantes, on ne voit pas trop l'intéret d'une telle expression. Maintenant essayez de deviner quel sera le retour de l'évaluation de cette expression :

1 + 1 == 3 !! true

Etrange ? Et bien oui, elle renverra vrai. (A noter que !! true peut être simplement remplacé par !!, on appelle cette notation le "just because").

Je vous laisse vous amuser pour essayer de trouver un cas concret où ce mot-clé pourrait être utile (à part pour redéfinir la vérité).

Y'en a qui s'ennuient :D

On en apprend tous les jours

22 sept. 2006 Classé sous :

Une nouvelle découverte dans les specs du langage c# : l'opérateur ??.

Je connaissais l'opérateur ?:, que j'utilise parfois (même si je m'en méfie dans les codes trop complexes par sa difficulté de lecture), mais je suis tombé sur cette notation en recherchant des infos sur un "singleton par requête".

Bon, je ne suis pas sur qu'il soit raisonnable de l'utiliser en lieu et place d'un bon if classique :

if(toto == null)

  toto = new MaClasse();

return toto;

Surtout que c'est ce qu'il cherche à faire dans son exemple "si telle variable vaut null, l'initialiser ; ensuite renvoyer la variable".

(Pour la petite anecdote, je suis tombé sur ces histoires de ThreadStatic, CallContext, HttpContext car je cherche à mettre en place pour une appli serveur sensée fonctionner à la fois en ASP.NET et en service, donc indépendante de ce fameux HttpContext.Current. Et bien c'est au final loin d'être simple).

Je viens de voir passer ce site sur le blog d'améthyste, et j'y ai trouvé quelques outils sympas que je recommande à tout utilisateur de VS.

Je pense au regex visualizer par exemple, qui plaira sûrement beaucoup à vko :p 

Sinon, une astuce qui m'a beaucoup plu et que je ne connaissais pas :

Projet et solution/Général, dans le menu des options : On peut activer le pointeur dans l'explorateur de projet pour qu'il se synchronise avec le fichier ouvert dans un projet ASP (Suivre un élément actif dans l'explorateur de solution)

Un Web Service pour MSDN

21 juin 2006 Classé sous :

Voici un projet de plus dont je ne connaissais pas l’existence : la présentation, sous forme d’un web service, de l’intégralité de la doc MSDN (msdn2 pour être exact).

Ce projet, nommé MTPS Content Service, permet donc aux développeurs d’intégrer la documentation MSDN à l’intérieur de leur application en accédant directement au contenu des webservices.

Quelques labs ont été publiés pour montrer une application de ces webservices : le premier utilise la beta 2 de WinFX (pardon, .net 3), le second, nommé judicieusement msdnman, est une application en ligne de commande pour consulter la doc.

Et voici enfin un lien vers l’annonce sur le blog de Craig Andera, qui est à l’origine de ce web service.

Plus de Messages Page suivante »