Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Team System Web Access SP1 est sorti

Première nouveauté: Work Item Web Access est directement inclu dans cette version. Donc plus besoin de garder la CTP!

D'autres nouveautés disponibles: la possibilité de créer des work items avec des valeurs via URL:

 

image

En cliquant sur le bouton, j'obtiens l'URL suivante:

http://tfsrtm08:8090/wi.aspx?pname=AWC-Online&wit=Bug&[System.Title]=Test&[System.AssignedTo]=Larry

Ce qui est très pratique pour préparer des work items à l'avance!

 

 

Pour une liste complète des nouveautés, le billet de l'annonce est ici :http://blogs.msdn.com/edhintz/archive/2008/08/29/team-system-web-access-2008-sp1-power-tool.aspx

Et pour le télécharger, c'est là: Download TSWA 2008 SP1

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

StyleCop SDK disponible

Le SDK (en fait un CHM) est disponible sur Code Gallery : http://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=sourceanalysis&ReleaseId=1425

 

Pour les utilisateurs de Vista, il ne faut pas oublier de débloquer le Chm avant de l'ouvrir:

 

image

 

Voici le post officiel sur le blog de StyleCop: http://blogs.msdn.com/sourceanalysis/archive/2008/08/29/stylecop-4-3-sdk.aspx

Plusieurs points sont abordé en plus de la documentation: l'intégration avec MSBuild et l'utilisation de StyleCop dans le cadre d'un développement de règles.

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

Mais où est passé l'attribut "DataWebKeyAttribute" ?

Lorsqu'on parcourt le MSDN à la recherche de ressources sur la création de "Data Model" autre que EDM on arrive rapidement sur cette page:

http://msdn.microsoft.com/en-us/library/cc668799.aspx

 

On y apprend qu'il faut que les entités devant être publiées doivent posséder l'attribut "DataWebKeyAttribute" sur leur propriété clé. Sans cet attribut, l'accès au service génère une erreur.

Mais cet attribut, comme nous l'explique Mike Taulty, est introuvable, Il faut en fait utiliser l'attribut "DataServiceKey" au niveau de la déclaration de la classe:

    [DataServiceKey("URL")]

    public class Photo

    {

 

        public string URL { get; set; }

        public string Description { get; set; }

    }

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

Sortie du SDK 1.1 de Visual Studio 2008

Cette nouvelle version met à jour le SDK par rapport au dernier Service Pack 1 de Visual Studio:

 

Pour plus d'information, voici l'annonce officielle: http://blogs.msdn.com/vsxteam/archive/2008/08/19/visual-studio-2008-sdk-1-1-has-been-released.aspx

Voici une liste des nouveautés tirée de l'annonce:

  • Significant reduction in size for Visual Studio Shell redistributable packages.
  • Support for progress feedback in a chained installation.
  • Visual Studio Shell development now supports normal user.
  • New XML Tree Editor and TFS sample.
  • DSL Print Preview
  • Updated shell documentation.

 

Et ici le lien pour le téléchargement: http://www.microsoft.com/downloads/details.aspx?FamilyID=59ec6ec3-4273-48a3-ba25-dc925a45584d&DisplayLang=en

StyleCop 4.3 est sorti

La nouvelle version de StyleCop, anciennement "Source Analysis" est disponible. En plus de nouvelles règles, on y retrouve aussi leur documentation. Un SDK permettant de créer nos propres règles est en cours de finalisation chez MS.

 

Voici le lien pour le téléchargement: http://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=sourceanalysis&ReleaseId=1425

Et le lien vers l'annonce:

http://blogs.msdn.com/sourceanalysis/archive/2008/08/19/stylecop-4-3-is-released.aspx

 

Il faut par contre désinstaller la version antérieure avant d'installer celle-ci et renommer les anciens fichiers "*.SourceAnalysis" en ".StyleCop".

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

SQL Server Management Studio 2008 et sauvegardes des modifications de tables

Pour l'écriture de mon prochain article sur THB, j'ai eu besoin de créer une base de donnée simple: une table, une date, et un ID. J'ai donc utilisé SQL Server Management Studio :

image

Lorsque je ne suis rendu compte que les champs "Allow Nulls" étaient cochés, j'ai voulu changer leurs valeurs et re-sauvegarder. Sous SQL Management Studio 2005, je n'aurais pas eu de soucis, mais là, ce fut différent:

image

Pour résumer Management Studio me refuse la modification car cela va lui demander une recréation de la table. D'un coté il a bien raison de nous avertir, mais bon dans ce cas-ci, je ne risque rien avec cette manipulation. Alors comment s'en sortir? C'est simple: il suffit d'aller dans les options de Management Studio et de désactiver cette protection:

image

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

.NET Framework 3.5 Enhancements Training Kit

Envie de vous découvrir par vous-même l'ensemble des nouveautés du SP1 du Framework 3.5? Alors il faut télécharger le ".NET Framework 3.5 Enhancements Training Kit". Il est disponible à cette adresse: http://www.microsoft.com/downloads/details.aspx?FamilyID=355c80e9-fde0-4812-98b5-8a03f5874e96&displaylang=en

 

Il est conçu comme le training kit de Visual Studio 2008:

 

image

 

Coté labs, on y retrouve:

  • ADO.NET Data Services
  • ASP.NET MVC
  • ASP.NET Dynamic Data
  • ADO.NET Entity Framework
  • ASP.NET AJAX 3.5 SP1
  • WCF/REST Services
  • .NET Framework Client Profile

Pour la partie ASP.Net MVC, il vous faut télécharger la preview 4 de l'API: http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=15389

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

Une nouvelle version des TFS Power tools est disponible

Brian Harry l'indique sur son blog: http://blogs.msdn.com/bharry/archive/2008/07/16/july-08-power-tools-are-available.aspx.

A noter en plus des traditionnelles corrections de bugs: le nouveau moteur d'abonnements aux alertes. Une série d'écrans est disponible ici: http://blogs.msdn.com/bharry/archive/2008/07/08/july-08-tfs-power-tool-preview.aspx

 

Bon téléchargement!

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

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 :
Plus de Messages Page suivante »


Les 10 derniers blogs postés

- Dell Inspiron Mini 9 - Enfin en vente !!! par The diary of EBArtSoft le il y a 11 heures et 7 minutes

- Solution Template et Project Template dans Visual Studio par Atteint de JavaScriptite Aiguë [Cyril Durand] le il y a 13 heures et 49 minutes

- PocketIE et Assignation du SRC d'un Element IMG par Jerome Laban le il y a 14 heures et 41 minutes

- Conversion de fichiers RAW en fichier JPEG avec WPF par Perspective le il y a 15 heures et 17 minutes

- Mise à Jour du Moteur de Recherche des Arrêts de Bus de Montréal par Jerome Laban le il y a 16 heures et 1 minutes

- [WPF] XPSReader v0.2 par Blog Technique d'Audrey PETIT le il y a 17 heures et 2 minutes

- Entity Framework : providers Oracle, MySQL et PostgreSQL par Matthieu MEZIL le il y a 23 heures et 37 minutes

- [WPF] Nouvel article sur c2i.fr par Richard Clark le 09-06-2008, 17:33

- F# nouvelle CTP 1.9.6.2 (update) par Pierrick's Blog le 09-06-2008, 13:27

- La suite ...Proposition de collaboration rédactionnelle entre les communautés de développeurs et Microsoft France par LucasR le 09-05-2008, 17:45