Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Nouveau blog sur Entity Framework

La V1 n'est pas encore sorti mais savoir ce qu'il y aura dans la  V2 vous intéresse? Il suffit de lire ce nouveau blog:

http://blogs.msdn.com/efdesign/

A consulter pour rester "aware" :)

Posté le par Miiitch | 1 commentaire(s)
Classé sous :

Checkin policy pour Source Analysis

Je rebondis sur le post de Coq en ajoutant qu'il existe une politique de checkin (avec code source disponible) qui s'interface avec. On peut la trouver ici sur le blog de Eugene Zakhareyev. Personnellement je ne l'ai pas utilisé tel quel: je l'ai modifié pour qu'elle prenne en compte le fichier de setting déjà présents à la racine de la solution. Cela permet de synchroniser le résultat de la fenêtre d'analyse de l'outil et du résultat que donne la politique de checkin.

Voici ma modification dans le fichier policy.cs:

 

private static string CreateSettingsFile(string solutionPath, string settingsContents)

{

    string solutionDirectory = Path.GetDirectoryName(solutionPath);

    string defaultSettingFilePath = Path.Combine(solutionDirectory,"Settings.SourceAnalysis");

    if (File.Exists(defaultSettingFilePath))

    {

        return defaultSettingFilePath;

    }

 

    // try to create file next to solution (<solution file name>.sln.SourceAnalysis)

    string settingsFilePath = solutionPath + ".SourceAnalysis";

Posté le par Miiitch | 0 commentaire(s)
Classé sous : ,

Nouvelle version de Fissum (0.7) en ligne

Voici la liste complète des nouveautés. La release est téléchargeable ici: http://www.codeplex.com/fissum/Release/ProjectReleases.aspx?ReleaseId=9746

Pensez bien à desinstaller la version précedente. Pour plusieurs raisons, je n'ai pas pu assurer la compatibilité de la configuration, donc Fissum va repartir d'une configuration vierge.

Multi version:

Fissum est maintenant livré en 2 versions: une version pour le Team Explorer 2005 et le Team Explorer 2008. 

Mode de démarrage

Fissum possède 2 modes de démarrage: un mode standart dans lequel il va seulement se connecter aux serveurs dont il a besoin, et un autre ("discovery") dans lequel il va tenter de se connecter à tous les serveurs disponibles. Le mode "Discovery" était le mode de fonctionnement dans les précédentes versions.

image_thumb18

 

 

Hierarchical queries

Vous pouvez afficher de façon hiérarchique les queries en choisissant un token de séparation:

image_thumb21

 

image_thumb24

 

Fissum API Preview

L'API n'est pas encore terminé, mais vous pouvez en avoir un aperçu en l'installant. Je posterai pas mal de fois sur le blog de Fissum (http://www.fissum.com/) pour expliquer comment elle fonctionne. En particulier le provider linq et le générateur de modèles.

 

image_thumb15

 

Sauvegarde des positions et de la taille des fenêtres.

Tout est dans le titre!

 

Work item history

Les work items précedemment modifiés et ouverts sont accessible dans une fenêtre spécifique via le menu contextuel.

image_thumb12

 

Recherche textuelle dans la "quick goto"

 

image_thumb6

Le résultat s'affiche comme une query:

image_thumb9

Posté le par Miiitch | 2 commentaire(s)

MVP Summit : "1 pour 2"

Si l'on ne devait garder qu'une chose de ce Summit, c'est le nombre d'employés de Microsoft Corp engagés dans l'évènement. Pour à peu près 1800 MVP, Microsoft à déployé par moins d’un millier de personnes, pour un évènement de 4 jours, c’est assez énorme : le campus vivait au rythmes des sessions, avec des allez-retours de MVP entre les bâtiments.

Après ces 4 jours d’échanges avec les équipes produits et les interventions de Steve Ballmer et Ray Ozzie, nous avons eu dans l’ensemble l’impression d’être écoutés. Maintenant à nous de surveiller si ils mettent en pratiques nos « Great Feedbacks » :)

Demain retour en avion : décollage 14h et arrivée à 9h du matin : la nuit va être longue !

Posté le par Miiitch | 0 commentaire(s)
Classé sous :

MVP Summit - Premier jour

 

Plein de MVP viennent de débarquer à Seattle! Comme disait Philippe, Winwise arrive en force cette année: 7 MVP et 1 RD pour couvrir l'ensemble des 4 jours du summit. Check in au Westin à peine fait, voici déjà une photo de la ville.

P1020384

Posté le par Miiitch | 2 commentaire(s)
Classé sous :

Linq To WIQL

Pour ceux qui ne connaissent pas les entrailles de Team Foundation Server, WIQL est l'abréviation  de "Work Item Query Language". La prochaine version de Fissum en cours de finalisation va faire apparaître une grosse nouveauté: la possibilité d'utiliser l'API de Fissum et de bénéficier de l'ensemble de ses fonctionnalités pour vos propres programmes. La plus parlante sans aucun doute est l'API Linq pour WIQL qui permet d'intérroger le référenciel de Work Item en Linq. Par exemple la requête suivante va rechercher l'ensemble des work items contenant le mot "fissum" soit dans le titre, la description ou l'historique:

string searchString = "fissum";

 

var q = (from wi in server.WorkItems()

        where

            wi.Title.Contains(searchString) ||

            wi.History.Contains(searchString) ||

            wi.Description.Contains(searchString)

        orderby wi.CreatedDate descending

        select new { Id = wi.Id, Title = wi.Title, CreatedDate = wi.CreatedDate }

        ).ToList();

 

Le WIQL généré est le suivant:

SELECT [System.Id]
FROM WORKITEMS
WHERE ((([System.Title] contains @P0 OR [System.History] contains @P1) OR [System.Description] contains @P2))
ORDER BY [System.CreatedDate] desc

Vous remarquerez que la requête renvoie dans sa clause select que l'ID du work item: pour l'instant cette partie là de la requête n'est nécessaire que pour transposer un wiql à une requête visible dans l'éditeur de requête de visual studio. Quels que soient les paramètres de la clause select (il en faut au moins un) l'API renvoie toujours un workitem.

D'autres nouveautés sont aussi en cours. Il y a plus de détail dans d'autres billets.

Posté le par Miiitch | 3 commentaire(s)

Vendredi c'est Expression Tree :)

Que les puristes de la performance soient rassurés, le reste du post n'est que pour le fun :) En discutant avec Matthieu, du post d'Alex James et du sien, j'ai voulu aller un peu plus loin.

Retour en arrière. Voici mes 3 classes:

public class Person

{

    public Address Addr { get; set; }

}

 

public class Address

{

    public string City { get; set; }

}

 

public class Car

{

    public Person Owner {get;set;}

}

 

Gràce à Alex, nous pouvons maintenant écrire la ligne suivante pour récupérer City sans forcement tester la nullité des propriétés intermédiaires:

 

string city = car.Maybe(p => p.Owner).Maybe(p => p.Addr).Maybe(p => p.City);

 

Mon idée est de vouloir directement écrire:

 

string city = car.Maybe2(p => p.Owner.Addr.City);

 

 

La méthode Maybe est une méthode d'extension qui se base sur une signature de délégué. La méthode Maybe2, quant à elle, va travailler sur l'arbre d'expressions de la lambda. La manipulation de l'arbre permet de reconstruire une série d'appels de la méthode Maybe en replaçant les appels aux membres en appel de Maybe. Le gros du travail est situé dans la méthode ConvertMemberToMethodCall:

 

 

    public static class MaybeClass

    {

        public static V Maybe<T, V>(this T t, Func<T, V> selector)

            where T : class

            where V : class

        {

            if (t == null) return null;

            return selector(t);

        }

 

        public static V Maybe2<T, V>(this T t, Expression<Func<T, V>> ex)

            where T : class

            where V : class

        {

 

            // On ne gère que le cas de la démo

            if (ex.Body is MemberExpression)

            {

                MethodCallExpression memberEx = ConvertMemberToMethodCall(ex.Body as MemberExpression);

 

                LambdaExpression lambda = Expression.Lambda(memberEx, new ParameterExpression[] { ex.Parameters[0] });

 

                return lambda.Compile().DynamicInvoke(new object[] { t }) as V;

            }

            else

            {

 

                throw new NotSupportedException("");

            }

 

        }

 

        /// <summary>

        /// Cette méthode convertit un appel de membre en appel de méthode. En gros:

        /// '.MaProp' devient '.Maybe(p => p.MaProp)'

        /// </summary>

        /// <param name="memberExpression"></param>

        /// <returns></returns>

        private static MethodCallExpression ConvertMemberToMethodCall(MemberExpression memberExpression)

        {

            Expression ex = null;

 

            // L'appel récursif est réalisée ici

            if (memberExpression.Expression is MemberExpression)

            {

                ex = ConvertMemberToMethodCall(memberExpression.Expression as MemberExpression);

            }

            else

            {

                ex = memberExpression.Expression;

            }

 

            // Un récupère la méthode Générique "Maybe"

            MethodInfo methodInfo  = typeof(MaybeClass).GetMethod("Maybe",BindingFlags.Public | BindingFlags.Static);

 

            // Pour la démo, nous supposons que le membre est une propriété

            PropertyInfo prop = memberExpression.Member as PropertyInfo;

 

            if (prop != null)

            {

                // Passage obligatoire: récupèrer une version type de la méthode "Maybe"

                methodInfo = methodInfo.MakeGenericMethod(new Type[] { memberExpression.Member.DeclaringType, prop.PropertyType });

            }

            else

            {

                throw new NotImplementedException("");

            }

            // Création d'un paramètre pour la lambda passé en paramètre de Maybe

            ParameterExpression p = Expression.Parameter(memberExpression.Member.DeclaringType, "p");

 

            // Création de la lambda

            LambdaExpression maybeLamba = Expression.Lambda(

                    Expression.MakeMemberAccess(p, memberExpression.Member),

                    new ParameterExpression[] { p });

 

            // Création de l'appel à Maybe

            MethodCallExpression result = Expression.Call(

                null,

                methodInfo,

                new Expression[] { ex, maybeLamba});

            return result;

        }   

 

 

Nous pouvons tester cela de cette façon:

 

   class Program

    {

        static void Main(string[] args)

        {

            Car car1 = new Car() { Owner = new Person() { Addr = new Address() { City = "Paris" } } };

            Car car2 = new Car() { Owner = new Person() { Addr = new Address() } };

            Car car3 = new Car() { Owner = new Person() };

            Car car4 = new Car();

 

            List<Car> carList = new List<Car> { car1, car2, car3, car4 };

 

            foreach (var car in carList)

            {

                string city1 = car.Maybe2(p => p.Owner.Addr.City);

                string city2 = car.Maybe(p => p.Owner).Maybe(p => p.Addr).Maybe(p => p.City);

                Console.WriteLine("City: {0} - {1}", city1??"NULL",city2??"NULL");

            }

 

            Console.ReadLine();

        }

    }

 

Et l'on obtient le résultat suivant:

City: Paris - Paris
City: NULL - NULL
City: NULL - NULL
City: NULL - NULL

 

Comme je disais au début, ce n'est par ce que l'on peut le faire que l'on doit le faire: ) Coté performance c'est forcément par bon du tout. Par contre ce genre de manipulation est un bon exemple de ce que les "expression trees" permettent de faire. Merci à Matthieu pour la relecture  :)

 

 

Posté le par Miiitch | 5 commentaire(s)
Classé sous : ,

Un nouvel outil dans la galaxie TFS: "TFS Spotlight"

 

Le projet vient à peine de démarrer, et il ne demande qu'à grandir. N'hésitez pas à donner votre feedback à son auteur.

http://www.codeplex.com/tfsspotlight

Screen.png

Vista Service Pack 1 disponible !

 

Ca y est, j'ai pu télécharger et installer le service pack de vista à partir de l'abonnement MSDN: http://msdn2.microsoft.com/en-us/subscriptions/default.aspx

 

image

 

Un conseil: bien mettre à jour son PC avec les derniers téléchargements de Windows Update, cela vous évitera une erreur à l'installation. Prévoir aussi 1 bonne heure!

Posté le par Miiitch | 1 commentaire(s)
Classé sous :

Hello Secure World!

Annoncé sur ce blog, Microsoft sort un nouveau site dédié à la sensibilisation sur la sécurité avec ASP.Net. Voici le site: www.HelloSecureWorld.com.

image

 

En plus de quelques concepts autour de la sécurité, des webcasts présentent certains exemples de failles de sécurité comme l'injection SQL, où plus simplement comment ajouter de la sécurité sur vos sites. Vous pouvez même jouer les pirates en herbe sur des sites virtuels!

 

image

Posté le par Miiitch | 0 commentaire(s)
Classé sous : ,

Fissum 0.6

La version 0.6 de Fissum vient juste d'être mise en ligne : https://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=fissum&ReleaseId=6221

Au menu des nouvelles fonctionnalités:

  • Le "Go to..." pour ouvrir un Work Item à partir de son Id:

image

  • Il y a aussi le quick goto, plus discrèt :

image 

Elle disparaît légèrement lorsqu'elle n'a plus le focus:

image

  • Les modèles de Work Items: on peut sauvegarder une partie d'un Work Item pour en recréer un avec certains champs préremplis :

image 

Voici le résultat dans le menu de Fissum:

image

  • Dernière fonctionnalité: l'historique du work item. Via le bouton "History" du Work Item, on peut voir l'état du Work Item à chaque étape de sa vie:

image

 

Dans les prochaines fonctionnalités, il y a déjà de prévu: un affichage des "Queries" en cascade dans le menu de Fissum, ainsi que un historique des opérations pour retrouver un Work Item utilisé récemment.

 

Bon téléchargement!

Mots clés Technorati : ,,
Posté le par Miiitch | 5 commentaire(s)

Team Explorer 2008 : gestion des documents

Ceux qui manipulent des documents dans les workitems ont du remarquer qu'il n'y a pas moyen de sauvegarder directement un document attaché. C'est enfin résolu avec la version 2008 du Team Explorer. Ouvrons un work item sur la partie documentation avec les versions 2005 et 2008 du Team Explorer:

En 2005, seulement open/add/delete:

image 

En 2008, le bouton "Save..." est apparu:

image

C'est peut-être anodin, mais cela fait gagner énormément de temps! Seul détail bizarre, les tailles des documents qui ne sont pas identiques.Cela me fait penser que le Team explorer 2005 calcule mal. Si l'on suppose que 129KO version 2005 vaut 129*1000 Octets (au lien de 129*1024) et que l'on divise tout cela par 1024 on retombe sur 125,9765625 KO ou 126KO en arrondissant, c'est à dire le montant dans Team Explorer 2008!

Posté le par Miiitch | 0 commentaire(s)
Classé sous :

Team Explorer 2008: Mode Offline/Online

Depuis que je suis passé sur VS 2008, je découvre quelques différences assez intéressantes entre la version 2008 et 2005 du Team Explorer.

 

Commençons avec le mode Offline. Lorsque j'ouvre un projet dont le serveur n'est pas disponible j'obtiens le message suivant:

image

Visual Studio me propose de travailler en mode offline. La différence la plus significative est au moment de passer du mode Offline au mode Online via une nouvelle entrée dans le menu du "source control":

image

L'avantage est de passer online même si la solution est déjà ouverte. Après le Click que "Go Online", Visual Studio nous propose les différences qu'il a détecté lors du travail offline:

 

image

La solution est ensuite ouverte comme si nous n'avions jamais été déconnectés du serveur:

image

Posté le par Miiitch | 1 commentaire(s)
Classé sous :

Visual Studio 2008 Image Library

Avec la version 2008, cette archive d'images s'étoffe. Pour ceux qui ne connaissent pas cette bibliothèque d'image et si vous avez installé Visual Studio 2008, elle est déjà sur votre ordinateur. Chez moi elle se trouve dans :

C:\Program Files\Microsoft Visual Studio 9.0\Common7\VS2008ImageLibrary\1033

En plus des images déjà founies dans la VS2005 Library, cette fois ci nous avons droit à beaucoup plus. Par exemple :

  • Un ensemble d'images utilisées dans VS 2008 appellées "Common Elements":
  •  

image

  • Un ensemble d'iconographie (en ico ou png) de Windows Vista:
  •  

image

Que de belles applications en perceptive :)

Mots clés Technorati :
Posté le par Miiitch | 4 commentaire(s)

ReaderWriterLock vs ReaderWriterLockSlim

Une nouveauté dans la gestion de la synchronisation est disponible dans le Framework 3.5 : la classe System.Threading.ReaderWriterLockSlim. Elle propose des API supplémentaires qui permettent entre autres des locks récursifs.Son rôle est de remplacer l'actuel System.Threading.ReaderWriterLock.  Mais la nouveauté la plus importante est le gain de performance. Voici des résultats pour 1 millions de lock/unlock en lecture et en écriture:

image

Pour reprendre les résultats:

  • ReaderWriterLock Read: 3,5062679 sec
  • ReaderWriterLockSlim Read: 1,3421074 sec
  • ReaderWriterLock Write: 3,324763 sec
  • ReaderWriterLockSlim Write: 1,3041847 sec

Comme l'on peut le voir, ReaderWriterLockSlim est au moins 2,5 fois plus rapide sur cet exemple que son compère ReaderWriterLock! Il ne faut donc pas hésiter à l'utiliser!

Technorati tags:
Posté le par Miiitch | 1 commentaire(s)
Classé sous : ,

Work Item et historique

Pour ceux qui utilisent tous les jours Team Foundation Server, le work item est l'élément central du travail de l'équipe. Chaque personne travaille de son coté sur un jeu de work items qui lui est attribué, puis chaque work item va ensuite changer de main. Voyons comment nous pouvons suivre la vie de ces Work Items.

Prennons  un bug par exemple:

  • Le bug est créé par le chef de projet, il ajoute ces commentaires,et l'assigne au développeur,
  • Le développeur corrige le bug, ajoute aussi ses commentaires et l'assigne ensuite à la personne en charge de la validation de la correction
  • ...

A chaque étape, le work item subit des modifications, des changements d'états, et sa signification change (Bug en cours, bug corrigé...) Pour suivre cette vie, il faut aller dans la fenêtre history:

 image

Cet onglet nous donne une vision de toutes les modifications du Work Item depuis sa création, révision par révision. Pour chaque révision, on retrouve le différentiel entre les anciennes valeurs (colonne "Old Value") et la nouvelle valeur (colonne "New value"). Par contre, elle ne donne pas une vision de l'état antérieur d'un Work Item, ou plus précisement,  l'état visuel où il était à une révision donnée. J'en arrive donc à mon idée, pouvoir afficher un work item comme il l'était visuellement dans une révision antérieure. Cette fonctionnalité  sera livrée avec la prochaine version de Fissum. Voici le même Work Item dont on voit l'historique plus haut. Voici la révision 2:

 

image

Et la révision 3:

image

Encore quelques réglages et cette fonctionnalité sera terminée. J'espère qu'elle vous sera aussi utile à vous qu'à moi!

Posté le par Miiitch | 1 commentaire(s)

Fissum 0.5.1

Cette version corrige les crashs sur système 64 bits et quelques bugs mineurs.

Pour la télécharger c'est ici: http://www.codeplex.com/fissum/Release/ProjectReleases.aspx?ReleaseId=6355

Posté le par Miiitch | 0 commentaire(s)

Blend 2 August CTP Refresh

Une nouvelle version de Blend 2 est disponible depuis aujourd'hui. Elle resout des soucis lors de la création de projets en silverlight 1.1.

Pour d'info, il suffit d'aller voir le blog de Todd Mancini. Sinon la CTP est ici.

 

Posté le par Miiitch | 0 commentaire(s)
Classé sous :

Fissum 0.5 est sorti

Je viens de mettre en ligne la nouvelle version de Fissum:

En plus de l'accès au site (voir mon ancien post), la nouvelle version de fissum simplifie la saisie de work items en masse:

image

 

Un nouveau bouton apparait dans la barre d'outil d'une fenêtre de work item: "Create/Save & New". Il permet de créer un work item du même type que celui qui est actuellement ouvert et de sauvegarder le work item courant en une seule opération.

Si on s'arrête là, à chaque nouveau work item, il faut ressaisir les champs en commun avec le work item précédent. C'est justement pour éviter cela que les 2 autres nouveaux boutons sont présents:

image 

Le bouton "Locked Fields" permet d'afficher/cacher un panneau latéral qui permet de selectionner les champs qui seront recopiés dans le work item suivant. Il suffit de cocher les champs qui nous interessent:

image

Comme certains champs ne sont pas très clair. Le bouton "Record" lorsqu'il est activé, permet de marquer automatiquement les champs que vous modifiez comme étant à sauvegarder pour le prochain work item. Le bouton "Record" se désactive de lui-même lorsque l'on change de work item.

 

Bon téléchargement!

Technorati tags: ,
Posté le par Miiitch | 0 commentaire(s)

Vista: patchons!

Les 2 grosses mise à jours tant attendues viennent de sortir. En résumé:

KB938979 : Performances et fiabilité

  • Amélioration des performances lorsqu’un utilisateur quitte l’écran de veille Photo ou Windows Energy
  • Résolution d’un problème avec les pages web sécurisées qui, selon les technologies employées, n’étaient pas affichées dans Internet Explorer 7
  • Résolution d’un problème avec les imprimantes réseau qui, si elles sont connectées sur un PC sous Windows XP ou Server 2003, pouvaient ne pas être affichées sous Vista en cas de désactivation de l’UAC
  • Résolution d’un problème qui pouvait entraîner la corruption de fichiers AVI lors de la création de ces derniers
  • Amélioration des performances lors du calcul du temps estimé restant pendant la copie ou le déplacement d’un ou plusieurs fichiers
  • Amélioration des performances lors du réveil d’un ordinateur depuis le mode Hibernation
  • Résolution d’un problème qui pouvait entraîner la corruption des données lors de la synchronisation de fichiers hors-ligne avec un serveur
  • Résolution d’un problème de compatibilité avec les images RAW créées par les appareils photo numériques Canon EOS 1D et 1DS Digital SLR, pouvant entraîner une perte de donnée. Il s’agit d’un problème spécifique qui ne concerne que ces deux modèles
  • Résolution d’un problème qui pouvait mener à la perte de l’adresse de la passerelle réseau lorsque l’ordinateur sortait du mode veille
  • Amélioration des performances lors de la copie ou du déplacement de répertoires entiers contenant une vaste quantité de données et/ou de fichiers
  • Amélioration des performances du Memory Manager pour certains cas précis et prévention de quelques problèmes qui pouvaient entraîner la corruption des données
KB938194 : Compatibilité et fiabilité
  • Améliore la compatibilité et la fiabilité de Vista lors de l’utilisation de certaines nouvelles cartes graphiques dans certains cas et dans certaines configurations
  • Amélioration de la fiabilité lors du branchement d’écrans secondaires sur un ordinateur portable
  • Amélioration de la compatibilité avec un grand nombre de pilotes de cartes graphiques
  • Amélioration de la qualité vidéo lors de la lecture des disques Blu-ray et HD-DVD sur de très grands écrans
  • Amélioration de la fiabilité d’Internet Explorer 7 lorsque des barres d’outils sont installées
  • Amélioration de la fiabilité de Vista lors de certains cas de configurations réseau
  • Amélioration de la fiabilité du Calendrier
  • Amélioration de la fiabilité des systèmes ayant migré de Windows XP vers Vista (mise à jour)
  • Amélioration de la compatibilité avec un grand nombre de pilotes d’imprimantes
  • Amélioration de la fiabilité et des performances lors de l’entrée et de la sortie du mode veille

Source : PC Inpact

Voici les liens :

Posté le par Miiitch | 1 commentaire(s)
Classé sous : ,
Plus de Messages Page suivante »


Les 10 derniers blogs postés

- ssdl view et TPT par Matthieu MEZIL le il y a 22 heures et 16 minutes

- L'injection SQL n'est PAS un problème QUE pour les développeurs web ! par CoqBlog le il y a 23 heures et 12 minutes

- Un outil pour réaliser des animations WPF basées sur des équations de Bézier par Perspective le 07-04-2008, 21:45

- Sandcastle et CodePlex : le verdict par CoqBlog le 07-04-2008, 20:53

- ssdl view et TPH par Matthieu MEZIL le 07-04-2008, 19:12

- Webcasts sur le Parallel Framework disponibles par Matthieu MEZIL le 07-04-2008, 17:26

- [Silverlight] - Comprendre et Débuter avec Silverlight par Danuz le 07-04-2008, 12:41

- SharePoint : Nouvel article sur l'exportation et Importation de sites SharePoint par Blog Technique de Romelard Fabrice le 07-04-2008, 01:00

- ImagineCup 2008 Final in Paris: Day 1 par Richard Clark le 07-03-2008, 22:48

- PowerShell : Comment utiliser un ENUM .NET dans un script PowerShell par Blog Technique de Romelard Fabrice le 07-03-2008, 18:09