Saturday, 19 June 2010

Quelques extensions pour Visual Studio 2010

Dans un article précédent, j’avais déjà parlé de « Visual Studio Color Theme Editor », pas utile mais permet de faire l’interface de VS2010 à vos couleurs. Un « Must have » pour moi c’est « CodeRush » de Devexpress, j’en parle ici.

J’utilise aussi « Collapse Selection In Solution Explorer » qui permet dans la fenêtre « Solution Explorer » de refermer l’ensemble des projets.

Via un Tweet de Scott Hanselman, j’ai découvert (ou redécouvert) :

  • « VS2010 Pro Power Tools » permet les changements suivants :
    • Gestion des différents onglets (documents) ouverts : onglet vertical, fixe un onglet à une position,  ajout d’un bouton de fermeture sur les onglets
    • Tri des onglets : par projet, par ordre alphabétique, …
    • Attribuer une couleur aux onglets suivants le projet auquel le fichier appartient, …
  • « PowerCommands for Visual Studio 2010 », je le connaissais déjà sous VS2008 et 2005 (disponible sur Codeplex), je le redécouvre sous VS2010 et c’est toujours aussi bien !
    • Insertion des « Guid Attribute »
    • « Show All Files » dans le « Solution Explorer »
    • La function « Copy Reference » et « Paste References » qui permet d’ajouter un projet comme référence à un autre via un copy/paste
    • Permet de nettoyage la liste des fichiers récemment ouverts
  • « CodeCompare » permet de comparer deux fichiers, de voir les différences et copier des morceaux de code d’un fichier

CodeCompare1 CodeCompare2 PowerCommandsVS2010

Monday, 7 June 2010

La journée “Agile” c’est le 16/06/2010

Pour la première fois en Wallonie et en Français, le 16 juin 2010, une journée complète dédiée à “Agile”. Cet évènement est organisé par « DotNetHub ». L’inscription se passe ici et le programme se trouve là-bas.

Nous espérons vous y voir nombreux !

Sunday, 30 May 2010

Livre : “Pro C# 2010 and the .NET 4 Platform”

Alors que Amazon.co.uk me disait devoir attendre jusqu’au 16 juin pour le recevoir, il est arrivé ce vendredi 28 mai, preuve en image. :) Il est arrivé et il est lourd, très lourd …. 2,655kg, 1712 pages dont 129 pour l’index, 34 chapitres. D’ailleurs, j’ai dû aller vite pour faire la photo ;-) Comme d’habitude, je dirais c’est du « Andrew Troeslen », c’est bien expliqué, il couvre l’ensemble du framework .NET 4.0, les nouvelles fonctionnalités et les anciennes, il se destine aussi bien aux débutant qu’aux moins débutants. Le tout pour un prix de +/- 28€ c’est vraiment pas onéreux pour une telle brique, il est aussi possible via un lien que l’on peut trouver dans le livre d’obtenir la version PDF pour 10$.

Pour les amateurs, une version « Pro VB.NET 2010 » est prévue dans les prochaines semaines.

Bonne lecture,

APress Pro C# 2010

Wednesday, 12 May 2010

Windows 7 : lancer une application comme administrateur depuis la barre des tâches

Si vous travaillez avec Windows 7, et que vous avez placé un raccourci sur la barre des tâches. Vous pouvez lancer l’application « comme administrateur » via le raccourci CTRL + Shift + cliquer sur l’icône. Il n’est donc plus nécessaire de trouver la dite application dans le menu « Démarrer ».

Sunday, 25 April 2010

Thème pour Visual Studio 2010

Dans la catégorie « Choses pas spécialement utiles mais que tout le monde voudra faire », il y a la personnalisation de l’éditeur et principalement les couleurs de l’éditeur. Cette personnalisation est devenue plus « simple » par le fait que Visual Studio 2010 (VS2010) est développé en WPF et non plus en Winforms comme les versions précédentes de Visual Studio.

L’installation est simple, il suffit de se rendre sur la page de téléchargement, cliquer sur «Download» et autoriser l’ouverture du fichier « .vsix » avec Visual Studio 2010. Une fois l’installation terminée, une nouvelle entrée « Theme » sera présente dans le menu de VS2010.

Cette extension permet :

  • De créer autant de thèmes personnalisables que vous désirez. Un nouveau thème est toujours au départ une copie d’un thème prédéfini
  • Edition des thèmes
  • Copier / Coller des couleurs
  • Undo / Redo les changements
  • Je ne peux que vous conseiller cette extension qui se trouve ici. Il y a 8 thèmes prédéfinis (Aero, Classic, Silver, …) On peut créer autant de thèmes que l’on veut et ajuster les pas moins de 250 paramètres !
  • Importer et exporter vos thèmes

VS2010Theme1 VS2010Theme2 VS2010Theme3

VS2010Theme4 VS2010Theme5 VS2010Theme6

Saturday, 17 April 2010

Liste des raccourcis (shortcuts) de Visual Studio 2010

Visual Studio 2010 est disponible depuis le 12 avril 2010 pour les abonnés MSDN. L’information n’est pas nouvelle sauf si vous revenez de vacances au fin fond de la forêt amazonienne ;-) Depuis quelques jours, la liste des raccourcis de Visual Studio 2010 est aussi disponible au format PDF.
 
Pour télécharger c’est içi.
 
C#
C# Shortcuts
C# Shortcuts
 
VB
 VB Shortcuts
VB Shortcuts
 
F#
 F# Shortcuts
F# Shortcuts
 
C++
C++ Shortcuts
C++ Shortcuts

Thursday, 18 March 2010

Les certifications pour .NET 4.0 sont disponibles et gratuites !

Depuis quelques jours, il est possible de s’inscrire pour passer les certifications .NET relatives au framework 4.0. Il s’agit des certifications « beta » :

  • C’est vraiment un examen, c’est vraiment une certification !
  • Ouvertes à tous et gratuites. Il suffit de s’enregistrer via Prometric. Ne soyez pas effrayé par les 140€ habituel, à la fin de la procédure, sur l’écran permettant de saisir le mode de paiement, on peut introduire un code promotionnel (ci-dessous).
  • La pondération des questions n’est pas encore faite. Par conséquent,  vous n’aurez pas les résultats de suite mais sous 8 à 10 semaines. Si vous avez réussi, vous obtenez votre certification comme si vous l’aviez passée avec les questions finales.
  • Il y a plus de questions. De manière générale, il y a entre 40 et 45 questions. Pour une beta c’est de l’ordre de 120 à 150.
  • Le nombre de place est limité.
  • Les enregistrements commencent le 17 mars 2010 et se déroulent entre le 5 et 30 avril 2010.

Voici les examens qui font partie du programme « beta » avec le coupon de réduction d’une valeur de 140€.

Examen Coupon
Exam 71-511, TS: Windows Applications Development with Microsoft .NET Framework 4 511BC
Exam 71-515, TS: Web Applications Development with Microsoft .NET Framework 4 515AA
Exam 71-513: TS: Windows Communication Foundation Development with Microsoft .NET Framework 4 513CD
Exam 71-516: TS: Accessing Data with Microsoft .NET Framework 4 516B1
Exam 71-518: Pro: Designing and Developing Windows Applications Using Microsoft .NET Framework 4 518PE
Exam 71-519: Pro: Designing and Developing Web Applications Using Microsoft .NET Framework 4 519ZS

Wednesday, 10 March 2010

Historique des versions de C#, de la CLR et de Visual Studio

Alors que la version C# 2010 (4.0) est presque en version finale (date de sortie de la RTM prévue le 12/04/2010 pour les abonnés MSDN), nous allons faire le point sur les différentes versions de C#, de la CLR et de Visual Studio car il y a souvent de la confusion.
 
Historique des versions de C#
  • C# 1.0 : .NET 1.0 et Visual Studio 2002 (janvier  2002)
  • C# 1.2 : .NET 1.1 et Visual Studio 2003 (en avril 2003). C’est la première version qui appelle Dispose sur IEnumerators qui implémente IDisposable, c’est la principale nouveauté.
  • C# 2.0 : .NET 2.0 et Visual Studio 2005 (novembre 2005). Version considérée comme une évolution majeure avec un grand nombre de nouveautés majeures :

    • Generics
    • Partial classes
    • Anonymous methods
    • Nullable typesIterator blocks
  • C# 3.0 : .NET 3.5 et Visual Studio 2008 (novembre 2007), Visual Studio qui permet maintenant de créer des projets en .NET : 2.0, 3.0 ou 3.5. Les nouveautés principales :

    • Lambda expressions
    • Extension methods
    • Expression trees
    • Anonymous types
    • Implicit typing (var)
    • LINQ (LINQ to Objects, LINQ to XML, LINQ to SQL)
  • C# 4.0 : .NET 4.0 et Visual Studio 2010 (avril 2010), Visual Studio 2010 a été complètement remanié et tire maintenant parti de la technologie WPF. Cette version de .NET est considérée comme une évolution majeure avec un grand nombre de nouveautés majeures :

    • Late binding (dynamic)
    • Delegate and interface generic variance
    • Support for IronPython, IronRuby et F#
    • Support  de “Code Contracts”
    • more COM support
    • named arguments and optional parameter
Vous remarquerez que je ne parle pas de C# 3.5, la confusion vient du fait que la CLR et le framework .NET sont numérotés de manière indépendante. D’ailleurs, la version de la CLR utilisée pour le framework 3.5 est toujours la 2.0. Ci-dessous, deux tableaux, le premier (Table 1) représente les versions de Visual Studio avec le CLR et le framework livré. Le second (Table 2) montre l’évolution de la CLR au fil des différentes mises à jour. J’espère ne pas trop me tromper (car la numérotation chez Microsft ce n’est pas toujours simple).
 
Table 1
Visual Studio Version CLR .NET Framework
Visual Studio .NET 7.0.? 1.0.3705.0 1.0
Visual Studio .NET SP1 7.0.? 1.0.3705.209 1.0
Visual Studio .NET SP2 7.0.? 1.0.3705.288 1.0
Visual Studio .NET SP3 7.0.? 1.0.3705.6018 1.0
Visual Studio 2003 7.1.? 1.1.4322.573 1.1
Visual Studio 2003 SP1 7.1.? 1.1.4322.2032 (1.1.4322.2300 Windows Server 2003 x86) 1.1
Visual Studio 2005 8.0.5072.42 2.0.50727 2.0
Visual Studio 2005 SP1 8.0.5072.42 2.0.50727 2.0, 3.0
Visual Studio 2008 9.0.21022.8 2.0.50727 2.0 SP1, 3.0 SP1, 3.5
Visual Studio 2008 SP1 9.0.30729.1 2.0.50727 2.0 SP2, 3.0 SP2, 3.5
Visual Studio 2010 10.???? 4.0.?? 4.0

Table 2
Framework CLR et Assemblies New assemblies Disponible avec
1.0 RTM 1.0.3705.0   VS.NET
1.0 SP1 1.0.3705.209    
1.0 SP2 1.0.3705.288    
1.0 SP3 1.0.3705.6018    
1.1 RTM 1.1.4322.573   VS.NET 2003
1.1 SP1 1.1.4322.2032    
1.1 SP1 1.1.4322.2300   Windows Server 2003 x86
2.0 RTM 2.0.75727.42   VS.NET 2005 RTM
2.0 SP1 2.0.75727.1433   VS.NET 2008 RTM et .NET 3.5 RTM
2.0 SP2 2.0.75727.3053   VS.NET 2008 SP1 et .NET 3.5 SP1
3.0 RTM 2.0 RTM 3.0.4506.30  
3.0 SP1 2.0 SP1 3.0.4506.648 VS.NET 2008 RTM et .NET 3.5 RTM
3.0 SP2 2.0 RTM 3.0.4506.2152 VS.NET 2008 SP1 et .NET 3.5 SP1
3.5 RTM 2.0 SP1 3.5.21022.8 VS.NET 2008 RTM et .NET 3.5 RTM
3.5 SP1 2.0 SP2 3.5.30729.1 VS.NET 2008 SP1

Thursday, 4 March 2010

NHibernate : faire un don

Depuis le 27 février 2010 a lieu une campagne de donation au profit de NHibernate qui est de loin le plus répandu des ORM. Cette campagne a pour but de récolter des fonds pour supporter les développeurs qui font cela bénévolement et depuis très longtemps. Cette campagne a été lancée par Oren Eini (plus connu sous le pseudo de « Ayende » ) qui contribue à NHibernate et est le père de NHProf, EFProf et L2SProf.  Vous pouvez donner selon votre capacité financière via le bouton ci-dessous.

Click here to lend your support to: NHibernate and make a donation at www.pledgie.com !

Wednesday, 24 February 2010

Spécifications techniques du fichier .PST et des autres fichiers de Microsoft Office

C’est sans doute, un des types de fichier le plus répondu pourtant l’utilisateur lambda ne le connait pas ! Mais aussi le moins documenté,  c’est le fichier .PST,  c’est dans ce type de fichier que Microsoft Outlook sauvegarde vos email, contacts, notes, agendas, tâches, ... Cette documentation va  réjouir les sociétés concurrentes qui pourront par exemple créer des outils pour importer les différentes données vers leurs produits.  Je pense par exemple à Thunderdbird (de la société Mozilla) qui pourrait créer un outil pour importer les mails, … On peut aussi penser à GMail qui pourrait faire quelque chose pour importer les contacts de Microsoft Outlook.

La société de Redmond vient donc de publier deux documents concernant :
Les spécifications du fichier .PST et les spécifications des différents protocoles sont sur le site de Microsoft au format PDF au total 5.2MB + 102MB … soit 107,2MB de lecture. Dans le fichier .zip de 102Mb, il y a la documentation pour :  Excel (.xls et .xsls), PowerPoint ( .ppt),  OnNote, Word (.doc, .docx)… au total 37 fichiers de documentations sur les différents formats.

Bonne lecture ;-)

Monday, 22 February 2010

CodeRush 10.1 (beta) pour Visual Studio 2010 est disponible !

J’utilise la version 10.1 de CoreRush, par période, depuis maintenant quelques semaines sur mes différentes machines afin de le tester de remonter des bugs vers le support de DevExpress.  Cette version « beta » est maintenant publique. Elle est donc assez stable que vous être présentée à « monsieur tout le monde » mais elle reste une beta et donc avec des bugs qu’ils faut remonter vers le support de DevExpress. Pour  vous la procurer, il suffit donc de vous enregistrer, de vous connecter sur le site et de télécharger.

Cependant :
  • Il faut VS2010RC installé
  • Le module « Code Issues » n’est pas encore disponible
  • Dans la dernière version privée que j’ai pu testé, les « effets » sur le curseur n’était pas encore implémenté
  • Date d’expiration : 30 mai 2010
 Il suffit de vous enregistrer sur cette page

Sunday, 21 February 2010

Déplacer les fenêtres de VS2010 sous Windows 7 avec deux moniteurs

Si vous utilisez Visual Studio 2010 sous Windows 7 et que vous utilisez deux moniteurs, la combinaison des touches « Win » + Shift + flèche gauche/droite permet de déplacer la fenêtre qui a le focus vers le second moniteur.

Comment migrer une application ASP.NET MVC en ASP.NET MVC2

La mise à jour se fait facilement et sans le moindre problème si vous suivez les instructions qui suivent. Je vais installer la RC1 et non la RC2. La raison est simple. Depuis quelques jours, la version RC de Visual Studio 2010 est disponible. Cette version de VS2010 intègre ASP.NET MVC RC1 et non RC2. Si j’installe la RC1 il est possible d’utiliser VS2008 et VS2010. Si vous n’utilisez que VS2008, alors vous pouvez installer ASP.NET MVC RC2. La méthode à suivre est la même.

  • Fermer VS2008, télécharger et installer ASP.NET MVC RC2
  • Faire un backup de votre projet
  • Avec votre éditeur (comme Notepad++) de texte préféré, ouvrir votre fichier projet (.csproj) et remplacer {603c0e0b-db56-11dc-be95-000d561079b0} par {F85E285D-A4E0-4152-9332-AB1D724D3325}
  • Dans le fichier web.config, remplacer la ligne :
    <add assembly="System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    par
    <add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
  • Dans le fichier web.config dans la section “configuration”, ajouter ceci :
    <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
          <assemblyIdentity name="System.Web.Mvc" 
              publicKeyToken="31bf3856ad364e35"/>
          <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/>
        </dependentAssembly>
      </assemblyBinding>
    </runtime>
    
    pour obtenir ceci :
    <configuration> 
    .....
    <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
     <dependentAssembly>
       <assemblyIdentity name="System.Web.Mvc" 
        publicKeyToken="31bf3856ad364e35"/>
       <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/>
     </dependentAssembly>
      </assemblyBinding>
    </runtime>
    </configuration>
    
  • Créer un nouveau projet, temporaire, « web » basé sur ASP.NET MVC2. Une fois créé prendre l’ensemble des fichiers du répertoire « scripts » et les copier dans l’application que vous êtes en train de migrer. Ce projet temporaire peut-être supprimé
  • Compiler votre application, c’est fini !

Thursday, 28 January 2010

Exécuter vos tests unitaires avec CodeRush !

C’est sans doute la fonctionnalité qu’il manquait (et sans doute la plus demandée aussi) à « CodeRush/Refactor Pro ! » de la société DevExpress, un « Test Runner » c’est à dire pouvoir exécuter vos tests unitaires. C’était déjà possible de le faire via d’autres produits comme « TestDriven .NET ». C’est maintenant possible depuis la version 9.3.2 de CodeRush sortie fin décembre 2009, sans la moindre augmentation de prix, c’est aussi à signaler. Cette option n’est pas disponible sur la version gratuite « CodeRush Xpress ».

D’un point de vue présentation, la fenêtre du « TestRunner » est une fenêtre flottante classique et peut-être attachée n’importe où, elle se compose de 4 parties :

  • Une barre avec différents boutons comme :
    • « Run »
    • « Run All »
    • « Debug »
    • « Repeat Last Test » et aussi un filtre permettant de voir uniquement les tests défectueux.
  • Liste des méthodes de test
  • Une second partie qui peut-être cachée. Cette partie comporte 3 onglets
    • Détails
    • Console output
    • Console errors
  • Une barre d’états permettant de connaitre le nombre de tests, le nombre de tests réussis, en échecs ou ignorés.
TestRunner1

Voici quelques images supplémentaires pour faire une idée plus précise :

 TestRunner2 TestRunner3

Au niveau de Visual Studio, les différentes méthodes de tests sont accompagnées de nouvelles icônes (très sobres) qui permettent de signaler que le test pour être lancé, soit sur une méthode spécifique, soit sur l’ensemble de la classe de test. Dans ce dernier cas, l’ensemble des méthodes de tests seront exécutées. L’intégration à Visual Studio est vraiment parfaite.

Les différents tests peuvent être lancés également via le menu contextuel de Visual Studio.

TestRunner4

Cet exécuteur de tests, supporte par défaut les framework suivant :

  • NUnit

  • MbUnit (c’est celui que j’utilise)

  • VS Test

Il a été construit sur base de DXCore (gratuit) et permet donc de l’améliorer comme bon vous semble. C’est déjà le cas pour Coderush en général avec la « Community Plugins » disponible sur Google Code. Bien entendu, si vous n’êtes pas intéressé par cette fonctionnalité, il est toujours possible de la désactiver via les options de « CodeRush ».

Une toute petite présentation vidéo, vous remarquerez que je n’ai pas l’habitude ;-)


Saturday, 23 January 2010

GitHub : Comment récupérer le code source avec Git-Gui

Qu’est ce que “Github” ? C’est un espace de stockage (gratuit pour les projets Open-Source) où l’on peut publier le code source des applications, librairies, … c’est plus que ça, c’est aussi un gestionnaire de version qui permet de faire ce que les autres gestionnaires de versions font, à savoir, travailler en équipe, faire des “branch”, “patch”, …

Officiellement “Github” supporte uniquement l’utilisation de “Cygwin”. Cependant, j’ai découvert un autre outil qui fonctionne très bien aussi, il s’agit de “Git-Gui” qui est disponible sur Google Code.

La première chose a faire est de créer un compte, gratuit, sur “Github”.

Dans un premier temps, il faut récupérer “Git-Gui” compilé sur Google Code

msysgit1  Cliquer pour agrandir

Ensuite, suivre, la procédure d’installation pas à pas

msysgit2

msysgit3

msysgit4

La procédure d’installation est simple et rapide. Nous allons maintenant configurer “Git-Gui” pour qu’il puisse communiquer avec “Github”.  Démarrons la configuration :

msysgit5

msysgit6

La première chose a faire est de générer une clé SSH qui va permettre de sécuriser votre connexion avec “Github”, il suffit de faire “Aide” et “Montrer la clé SSH”.

msysgit7

Générer la clé SSH en appuyant sur le bouton “Générer une clé”. Il sera demandé de saisir (par deux fois) une “passphrase”. Il suffit de laisser blanc et faire ok. Si vous décidez d’y mettre quelque chose, il faut :

  1. ne pas l’oublier, il y a Keepass pour ça
  2. elle sera demandée lors des connexions

J’ai personnellement laissé la “passphrase” vide.

msysgit8

msysgit9

La clé générée est sauvegardée sous la forme de deux fichiers, un public, l’autre privé qui se trouvent sous Window 7 ici : C:\Users\NomUtilisateur\.ssh

Via une fenêtre de commande vous pouvez donner à “Git_Gui” votre nom et email

msysgit10

Une fois terminé, vous pouvez ouvrir le fichier “id_rsa.pub” avec un n’importe quel éditeur Notepad, Notepad++ ou autre faire un copier et ensuite un coller dans la section appropriée sur “Github”. Cette section se trouve dans “Account Settings”, onglet “SSH Public Keys”.

Pour récupérer les sources, mais vous n’avez PAS l’intention de contribuer au projet, il y a deux options :

  1. Via un “Download” sur “Github”, sur la page du projet
  2. Faire un clone du repository localement avec la commande suivante

msysgit11

Monday, 18 January 2010

DotNetHub, la communauté .NET francophone

Au mois de décembre 2009 est né DotNetHub créé par 6 belges francophones. Il était temps que les belges francophones se mouillent un peu … c’est fait !

Le but de DotNetHub est de partager connaissances et retours d'expérience autour de 2 pôles:

  • Un pôle technologique
    • Les technologies et outils liées à la plateforme Microsoft .NET (par ex. WCF, WF, Silverlight, Windows Azure, Visual Studio, Team Foundation Server, ...) 
  • Et un pôle Méthodologique
    • Les méthodologies Agiles : eXtreme Programming, Scrum et Lean

Nous nous voulons ouvert à tous (débutant comme expert, développeur, chef de projet ou responsable produit) et nous ciblerons les territoires francophones : Wallonie, nord de la France, Luxembourg, Suisse.

Plus d’infos sur le site de la communauté ….

Je ne peux que vous conseiller de vous inscrire, peut-être, nous recontrerons nous ! :)

Saturday, 9 January 2010

Mes liens : jQuery … toute une série de scripts !

Je vous propose une série de liens relatifs à jQuery classés par catégories. Cette page sera mise à jour régulièrement au fur et à mesure des mes trouvailles.

1. LightBox

La “lightBox” est devenue en quelques années, sans doute un des scripts le plus utilisée dans le développement web. Une “LightBox” permet, suivant le script, de montrer dans une fenêtre “popup” des images, des vidéos, du flash, de l’ajax, soumettre des formulaires, avoir des effets de transition entre les images, différents thèmes de présentation.

  • CeeBox est fortement pesonnalisable. Ce script permet d’afficher les “iframes”, les éléments “inline”, ajax, flash et vidéo
  • ColorBox, tout comme CeeBox est fortement personnalisable, il possède également une série de transition et des thèmes prédéfinis
  • Facebox, ce script affiche une seule image sans légende, c’est exactement le même type d’affichage que sur Facebook
  • FancyZoom, permet d’afficher une seule image, contenu flash ou un contenu “inline”
  • FancyBox est une simple gallerie de photos qui ne permet pas d’afficher du flash ni de la vidéo. Il possède une série de transition
  • Graybox Redux est une version simplifiée de GreyBox, il peut uniquement afficher le contenu d’iframe
  • ImageBox, spécialisé uniquement dans l’affichage d’images
  • jQuery LightBox, ne permet également que l’affichage d’images
  • nyroModal, il permet d’afficher un grand nombre de types, permet de soumettre des formulaires
  • piroBox, permet d’ajouter un lien spécifique par image, thème, slideshow
  • prettyPhoto supporte l’affichage de photos, de vidéos, flash, inline, …
  • Sexy Lightbox2, permet d’être utilisé avec jQuery ou MooTools. Il est livré avec 2 thèmes.
  • Slightly ThickerBox, permet d’afficher images et ajax
  • Thickbox est l’un des plus ancien script basé sur jQuery
  • TopUp est basé sur jQuery et jQuery UI et possède différents thèmes. Il permet d’afficher des images et des vidéos.

2. Layout

Collection de scripts qui permettent de créer des onglets, de faire des effets, d’utiliser des thèmes, de montrer des barres de progression, ….

  • jQuery UI framework qui permet de faire facilement des '”widgets”, des effets visuels, support de thème, …
  • jQuery Masonry, par défaut jQuery arrange les éléments horizontalement. Masonry permet de le faire verticalement. Par conséquent, il n’y a pas d’espaces variables en fonction de la hauteur
  • UI.Layout, permet de créer une application simple avec “headers” et “sidebars” jusqu’a une application complexe avec des barres d’outils, barre de status, …
  • jLayout, la librairie fournit 3 algorithmes (border, grid, flex-grid)
  • Columnizer, permet de convertir n’importe quel contenu en “column journal”. Une valeur par defaut pour la largeur et le nombre de colonne peut-être défini
  • EqualHeights, permet de créer des zones de hauteurs identiques 

3. Outils

  • jQuery Tools incroyable collection de
    • Tabs (onglet)
    • Tooltips
    • Overlay

4. Tables

  • jqGrid, sans doute LA référence en matière de tables (tri, filtre, paging, localisation, supporte les thèmes de jQuery UI, …) Je vous laisse découvrir toutes les fonctionnalités sur la page “Démo”.
  • Tablesorter, tri sur plusieurs colonnes, supporte le “hidden sorting”, rowspan et colspan, …

5. Notifications

  • Dmitri Smirnov, très simple à utiliser, permet d’afficher pendant un certain temps un message qui disparait automatiquement. Ce message apparait en haut de l’écran de votre navigateur.

6. CheckBox

7. Calendrier

  • jQuery Week Calendar, est un calendrier qui fonctionne de la même manière que “Google Calendar”, vraiment bien fait.

8. Horloge

  • Une horloge, très colorée, un peu “design” basé sur jQuery et CSS

 

Dernière modification : 09/01/2010, première publication 01/01/2010 

Sunday, 27 December 2009

NHibernate : créer une relation one-to-many

Dans les articles précédents, nous avons vu comment sélectionner, insérer, mettre à jour des enregistrements avec NHibernate. Cependant, dans 99% des cas, une table n’est pas isolée dans une base de données, il y a la plupart du temps une (ou plusieurs) clé étrangère (Foreign key) donc un lien avec d’autres tables. C’est ce qui va nous occuper dans cet article.

Nous allons créer un objet (Table) “Produit” qui peut être attribué à plusieurs '”Catégorie”, nous allons donc créer deux objets “Product” et “Cateogry”, créer le relation au niveau des fichiers de mapping et ensuite créer une méthode de test qui va nous permettre de vérifier le bon fonctionnement. Pour être honnête étant un adepte du TDD (Test Driven Development), j’ai d’abord commencé par écrire la méthode de test, ensuite les classes et pour terminer les fichiers de mapping.

Voici la classe et le fichier de mapping de l’entité “Product”

public class Product
{
 public virtual Guid Id { get; set; }
 public virtual string Name { get; set; }
 public virtual string Code { get; set; }
 public virtual bool IsActive { get; set; }
 public virtual float Price { get; set; }
 public virtual IList<Category> Categories { get; set; }

 public Product()
 {
  Categories = new List<Category>();
 }

 public virtual void AddCategory(Category category)
 {
  category.Product = this;
  Categories.Add(category);
 }
}
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Core.DomainModel"  namespace="Core.DomainModel">
  <class name="Product" table="Product">
    <id name="Id" column="Id" type="Guid">
      <generator class="guid.comb"/>
    </id>
    <property name="Name" length="50" not-null="true"/>
    <property name="Code" length="50" />
    <property name="IsActive" type="boolean"/>
    <property name="Price" type="float"/>

    <bag name="Categories" inverse="true" cascade="all" table="Category">
      <key column="Product" foreign-key="FK_Product_Category"/>
      <one-to-many class="Category"/>
    </bag>
  </class>
</hibernate-mapping>

On peut trouver quelques propriétés dont une est une liste de “Categgory” '(d’ou le nom “Categories”). Dans le constructeur, on initilise cette liste. La méthode “AddCategory” permet d’ajouter une catégorie à la list. Dans cette methode on constatera que la propriété “Product” de l’objet “Category” est assignée via le mot réservé “this”.

Voici la classe et le fichier de mapping de l’entité “Category”

public class Category
{
 public virtual Guid Id { get; set; }
 public virtual string Name { get; set; }
 public virtual string Code { get; set; }
 public virtual bool IsActive { get; set; }
 public virtual Product Product { get; set; }
}
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="MonApplication"  namespace="MonApplication">
  <class name="Category" table="Category">
    <id name="Id" column="Id" type="Guid">
      <generator class="guid.comb"/>
    </id>
    <property name="Name" length="50" not-null="true"/>
    <property name="Code" length="50" />
    <property name="IsActive" type="boolean"/>
    <many-to-one name="Product" class="Product" />
  </class>
</hibernate-mapping>

Pas la peine de s’étendre, il n’y a vraiment rien de spécial dans ce code que se soit au niveau du fichier de mapping que de la classe

Notre méthode de test :

[Test]
public void Test()
{
 ISession session = GetSession();
 using (ITransaction tx = session.BeginTransaction())
 {
  Product product = new Product() { Name = "Nouveau", Code = "XYZ" };
  product.AddCategory(new Category() { Name = "NouvelleCategorie", Code = "NewCat" });
  session.Save(product);
  tx.Commit();
 }
}

Nous allons dans cette methode, ouvrir une session (3), créer une transaction (9),  ajouter une catégorie au produit (16) et sauvegarder le produit. La sauvegarde du produit va provoquer l’insertion au niveau de la base de données de la nouvelle catégorie et de l’assignation de celle-ci au produit.

Ci-dessous le code généré, on peut constater les deux INSERT un dans la table “Product” et l’autre dans la table “Category”. Les captures d’écran proviennent de NHProf qui est un debugger en temps réel que je ne peux que vous conseiller. Il a été conçu par Oren Eini plus connu sous le nom de “Ayende” et aussi un des développeurs de NHibernate.

NH-OneToMany23012010-1 

NH-OneToMany23012010-2 

NH-OneToMany23012010-3

Cliquer pour agrandir

Thursday, 24 December 2009

Visual Studio 2010 Beta 2 disponible en machines virtuelles

Brian Keller (Technical Evangelist of Team System) a publié un poste sur son blog disant que la version virtuelle de Visual Studio 2010 beta 2 est disponisble. Les machines virtuelles disponiblent sont :

  • Hyper-V
  • Windows 7 Virtual PC
  • Virtual PC 2007 SP1

Plus d’infos sur la page de Brian. Je l’ai personnellement installé sur une image VMWare de Windows 7 Ultimate.

Wednesday, 23 December 2009

Joyeux Noël et Bonne Année !

Joyeux Noël et Bonne Année à tous. L’année 2010 s’annonce assez folle point de vue .NET avec la sortie de Visual Studio 2010 (vers le 15 avril).


Cliquer pour voir en grand

Thursday, 17 December 2009

C# 4.0 : Comment retourner plusieurs valeurs en utilisant “Tuple” au lieu de “out”

En C#, il n’y a pas de problème pour retourner une valeur. Il n’y a pas de problèmes pour en retourner plus que une, une méthode reçoit en paramètre un entier et en retourne deux. Nous avons donc une méthode qui ressemble à ceci :
public class MaClass
{
    private void MethodeAvecOut(int input, out int valeurA, out int valeurB)
    {
        valeurA = 5;
        valeurB = 6;
    }

    private void OnUtiliseLaMethodeAvecOut()
    {
        int valueA = 0;
        int valueB = 0;
        MethodeAvecOut(1, out valueA, out valueB);
    }
}
Vous comprendrez facilement que plus nous voulons de valeurs en retour plus le code sera lourd mais pas plus complexe. On aurait pu aussi utiliser un type spécifique (une classe) pour retourner les valeurs, c’est plus clair mais encore plus lourd.
public class MaClassReturnType
{
    private ReturnType MethodeRetourneType(int input)
    {
        return new ReturnType() { ValueA = 5, ValueB = 6 };
    }

    private void OnUtiliseLaMethodeAvecOut()
    {
        ReturnType retour = MethodeRetourneType(1);
    }
}

public class ReturnType
{
    public int ValueA { get; set; }
    public int ValueB { get; set; }
}
L’équipe de développement du framework .NET a trouvé une solution qui permet de retourner jusqu’à 8 valeurs. Au-delà de 8, il y a selon moi un problème de conception de votre méthode ou de votre manière de travailler.
public class MaClassReturnTuple{
    private Tuple<int,int> MethodeRetourneTuple(int input)
    {
        return new Tuple <int,int>(5, 6);
        //ou Tuple.Create(5,6);
    }

    private void OnUtiliseLaMethodeRetourneTuple()
    {
        Tuple<int,int> retour = MethodeRetourneTuple(1);
        //Accès aux valeurs
        //retour.Item1, retour.Item2
    }
}
Le  « Tuple » en retour contient donc deux valeurs, deux « int » que l’on peut retrouver par un nom générique (Item1 et Item2). Vous pouvez tester avec Visual Studio 2010 Beta 2 disponible pour le grand public.

Wednesday, 9 December 2009

Sauvegarder la sélection d'un RadioButton dans une variable session en ASP.NET

Récemment, j'ai été amené à devoir sauvegarder la sélection faite via un RadioButton dans une variable session, donc dans le code-behind. Le problème c'est que le RadioButton ne possède pas d'évènement "OnClick". Pour info le "OnClick" même s'il n'existe pas officiellement fonctionne sous Firefox mais c'est clairement une mauvaise idée de l'utiliser.

La solution est de faire une requête asynchrone qui lors d'un "Click" sauvegardera la Radiobutton sélectionné. On va donc utiliser jQuery pour détecter le "Click" sur l'un des RadioButton. Une méthode javascript sera appelée pour faire la sauvegarde au niveau de la session.

Nous avons besoin de :

  1. De créer un groupe de 2 RadioButton (code HTML)
  2. Du code jQuery qui va permettre de capturer le "click" sur l'un des choix
  3. De deux méthodes javascript dont une va faire le POST et l'autre afficher le résultat
  4. D'une classe de base "BaseHttpHandler"
  5. D'un "Generic Handler" (qui est un des templates de Visual Studio) dérivé de "BaseHttpHandler

Le code HTML



Choix A
Choix B


Le code jQuery permettant de déterminer le RadioButton sélectionné

Le code javascript permettant de faire l’appel asynchrone
function AsyncGetError(xhr, statusText, errorThrown) {
//alert(statusText);
//alert(errorThrown);
}

function DoAsyncRequest(url, successCallback) {
$.ajaxSetup({ cache: false });
$.ajax({
type: "POST",
url: url,
data: {},
contentType: "application/json; charset=utf-8",
dataType: "text/html",
success: successCallback,
error: AsyncGetError
});
}

Le classe de base “BaseHttpHandler”
public abstract class BaseHttpHandler : IHttpHandler, IRequiresSessionState
{

public abstract string Content { get; }

public NameValueCollection QueryParameters { get; set; }

public NameValueCollection FormParameters { get; set; }

public HttpContext Context { get; set; }

public void ProcessRequest(HttpContext _context)
{
FormParameters = _context.Request.Form;
QueryParameters = _context.Request.QueryString;
Context = _context;
_context.Response.ContentType = "text/html";
_context.Response.Write(Content);
}

public bool IsReusable
{
get { return false; }
}
}


Le “Generic Handler” dérivé de “BaseHttpHandler” 
public class SaveMonChoix : BaseHttpHandler
{
public override string Content
{
get
{
Context.Session["MonChoixSession"] = QueryParameters["MonChoix"];
return "Ok";
}
}
}

Vous pouvez télécharger le projet complet (45ko).

Zip

Saturday, 5 December 2009

Scott Guthrie au Kinépolis de Bruxelles …

… j’y étais, je suis même sur la photo, la seule chose que je peux dire c’est que je porte un t-shirt rouge :)


Thursday, 3 December 2009

NHibernate : Simplification des fichiers de mapping

Lorsque l'on débute (et même par la suite) avec NHibernate, les développeurs ont une fâcheuse tendance à mettre trop dans le fichier de mapping. Il ne faut pas mettre trop mais juste le nécessaire. Les fichiers de mapping peuvent vite devenir complexes, il faut donc éviter d'y mettre du code non nécessaire. Le code superflu est source de :

  • perte de temps
  • d'erreurs
  • manque de lisibilité 

Le résultat des deux exemples ci-dessous, point de vue comportement, est le même pour les deux fichiers et pourtant, il y a une différence assez flagrante non ? :)

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="MyApp" namespace="MyApp">

  <class name="MyApp.Customer,MyApp" table="Customer">

    <id name="Id" column="Id"  type="e="color: blue">Int32" unsaved-value="0">

      <generator class="native"></generator>

    </id>

    <property name="LastName" column="LastName" type="string" length="50" not-null="true"></property>

    <property name="FirstName" column="FirstName" type="string" length="50" not-null="false"></property>

    <property name="Email" column="Email" type="string" length="50" not-null="false"></property>

    <property name="Code" column="Code" type="string" unique="true" length="50" not-null="true"></property>

    <property name="IsCompany" column="IsCompany" type="Boolean" length="1" not-null="true"></property>

    <property name="DateAdded" column="DateAdded" type="Date" not-null="true"></property>

    <property name="IsEnable" column="IsEnable" type="Boolean" length="1" not-null="true"></property>

  </class>

</hibernate-mapping>


<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="MyApp" namespace="MyApp">
  <class table="Customer">

    <id name="Id">

      <generator class="native"></generator>

    </id>

    <property name="LastName" length="50" not-null="true" />

    <property name="FirstName" length="50" />

    <property name="Email" length="50" />

    <property name="Code" unique="true" length="50" not-null="true" />

    <property name="IsCompany" type="Boolean" length="1" not-null="true" />

    <property name="DateAdded" type="Date" not-null="true" />

    <property name="IsEnable" />

  </class>

</hibernate-mapping>

 

Une base de données pour tester un ORM

Si vous n’avez pas envie de vous cassez la tête pour créer une base de données, pas trop simple mais pas trop compliquée non plus, il existe “Chinook” qui est disponible sur CodePlex et est une bonne alternative à “Northwind”. Vous pourrez y trouver le script pour les bases de données suivantes :

  • SQL Server
  • SQL Server Compact
  • Oracle
  • MySQL

Cette base de données représente le schéma nécessaire à la vente en ligne de musique avec gestion des clients, des commandes, des artistes, des albums ainsi que des pistes de ceux-ci.

Tuesday, 1 December 2009

Comment réaliser le prototype des écrans d'une application

Avant de se lancer dans la grande aventure du développement de l’interface graphique d’une application, web ou non, il est bon d’y réfléchir avant et de présenter un prototype au client, histoire de ne pas trop “faire et défaire”. On peut toujours utiliser la bonne vieille methode papier et crayon, ou encore Microsoft Visio. Il existe cependant des outils conçus pour la “prototypage” d’interface graphique (UI). Voici une petite liste, il y a des outils “online” et des outils clients :

Ils sont “open source”, souvent payants, mais vraiment pas onéreux au vue du gain en temps et de la facilité d’emploi. MockFlow est gratuit pour un nombre limité de pages. Ci-dessous une très courte démo que j’ai réalisé avec Mockflow.