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.

Vu sur le blog de Brad Adams, un nouvel outil dans une première version beta nommé "Framework Design Studio" (publié sur le tout frais MSDN Code Gallery) qui permet de faire un peu d'introspection sur les librairies afin les analyser et les comparer.

Il permet de les analyser avec la possibilité de lister les API exposées, de les commenter (et même, via plugin, sauver ces commentaires en tant que dans une base de bugs) et d'exporter ces commentaires sur word.

Autre fonctionalité intéressante, celle de pouvoir comparer 2 versions d'une assembly et voir quelles ont été les méthodes ajoutées/supprimées/modifiées.

Un bon complément pour détecter les "breaking changes" dans des librairies critiques et faire de la revue d'architecture.

Je vous renvoie vers les messages originaux pour des petites captures d'écrans.

Changement de look

02 janv. 2008 Classé sous : ,

Un petite mise à jour à l'occasion du passage à la nouvelle année. J'ai converti un thème présenté par Smashing Magazine et créé par Design Disease, pour Wordpress.

J'ai donc pu me frotter à la création de thèmes avec Community Server 2007, et j'ai été, au final, assez agréablement supris par la souplesse de l'engin.

Forcément, la doc quasi inexistante sur les objets manipulables et leurs propriétés (dommage quand on veut faire du binding) ne facilite pas les choses. Mais un passage par l'éternel Reflector m'a permis de trouver toutes les informations nécessaires assez facilement ensuite.

Je tâcherai de rendre le thème téléchargeable une fois que je serais sur qu'il ne contient pas de problème.

Ah, et j'allais oublier : bonne année à tous.

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 !).

Et oui, depuis ce matin, Google Reader supporte la recherche dans les flux RSS auxquels on est abonné !

Capture

Je n'utilisais plus RSS Bandit car j'ai besoin de pouvoir lire mes flux chez moi et au boulot, j'avais abandonné FeedDemon car son système de classement est relativement naze (une seule profondeur de dossier, pas de possibilité de mettre un flux dans plusieurs dossiers), NewsGator Online ne m'avait pas convaincu non plus.

Bref, il ne manquait à Google Reader que cela (et la fonctionnalité était demandée depuis la sortie du produit), et le seul moyen de retrouver un article était d'espérer que l'on avait eu la présence d'esprit de le passer en "Starred" ou "Shared".

La journée commence bien :)

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 serveur est de retour après une nuit calme.

Le site était verrouillé en raison d'une protection des mots de passe laissée avec le paramétrage par défaut sur notre serveur : le mot de passe du compte sql était simplement marqué comme expiré.

Tout est maintenant rentré dans l'ordre, le problème ne devrait plus se reproduire.
 

Ca tease sec depuis que Scott Guthrie a répondu à un commentaire de son blog en indiquant (9ème commentaire) que la beta 2 était prévue pour cette semaine, et qu'elle serait "feature complete".

Si, et je l'espère, cette beta permet de se connecter sur TFS, il s'agira certainement de la première version que je tenterai d'utiliser sur nos projets.

miam.

Edit : ça n'aura finalement pas trop tardé. ScottGu a d'ailleurs posté à ce propos en ajoutant des notes importantes sur l'installation. 

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.

Pourquoi développer...

26 mars 2007 Classé sous :

... quand on peut acheter ?

C'est ce que se sont certainement dit les financier de chez Microsoft quand il ont vu le travail de DevBiz.

Résultat : Rachat et distribution automatique, de manière gratuite, de leur produit TeamPlain Web Access à tous les clients Team Foundation Server.

Great \o/

Je suis déçu

09 févr. 2007 Classé sous :

Par ça.

Parce que modifier dans une telle proportion la licence d'un produit, je ne trouve pas ça correct du tout.

Petit rappel des faits :

Community Server est un produit qui a d'abord été communautaire, avec une seule version, gratuite. Bon, forcément, cela n'était qu'une première étape pour proposer ensuite un vrai business pour permettre à la boite derrière tout ça de gagner sa croûte.

Des versions payantes sont donc sorties, et la version gratuite s'est retrouvée limitée à "tout usage non-commercial". Je comprends très bien. Le système d'hébergement de fichiers était par ailleurs limité pour la même occasion à 50 fichiers dans le cas d'une licence communautaire. Soit. Ca me va, de toute manière une communauté ne dépend pas de ça.

Mais là, maintenant, c'est sacrément différent.

Ainsi, la prochaine version (tant louée, et tant espérée) "personnelle/usage non lucratif" (comprenez, celle qui concerne donc coldwire) se retrouve bridée à : 3 blogs, 10 forums et 3 galeries.

On se trouve donc dans une version castrée, utilisable, non plus pour une communauté, mais bien pour une personne unique.

Conclusion : il n'existe plus de place pour les communautés sans revenus dans cette grille.

J'ose espérer que je ne serais pas le seul à trouver ça très limite.

Si ça reste ainsi, on peut déjà commencer à songer au plan b. Grmbl, le week-end commence bien.

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.