Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Depuis ce début d'après-midi, on peut aussi profiter des Minidrones de Parrot avec une tablette Windows 8.1 !

Contrairement à la version Windows Phone, cette version n'est pas en beta.

L'ensemble des fonctionnalités déjà présentes sur iOS, Androïd et Windows Phone sont disponibles, exception faite de la partie sociale. L'application a exactement la même ergonomie que sur les autres plateformes. On peut donc passer de la tablette au téléphone sans se poser de questions.

Je viens de tester avec un Rolling Spider et ma tablette Asus Vivota. On retrouve les mêmes comportements qu'avec un Windows Phone. C'est aussi bon. J'ai tout de même préféré utiliser le mode de pilotage dit « manette » , car utiliser le gyroscope de la tablette pour déplacer le drone m'a semblé trop étrange (voir inutilisable du fait de la taille de la tablette 10pouces). Il y a une option associée à bing map, mais cela ne semble pas marché comme convenu. Il y a un petit problème de compte développeur Bing Map ;) (en tout cas, c'est ce que j'ai constaté sur ma tablette)

Pour le téléchargement, cela diffère d'une machine à l'autre. Par exemple mon PC portable n'a pas accès à l'application (Dell XPS 17)

Belle exemple d'application universelle adaptée ;)

Maintenant, il me reste à m'acheter une seconde batterie pour mon drone. 10 minutes de jeux, c'est court quand on reste un grand gamin..

Depuis ce matin, on peut enfin profiter des Minidrones de Parrot avec un Windows Phone !

L'application est en beta pour le moment, mais l'ensemble des fonctionnalités déjà présentes sur iOS et Androïd semblent disponibles. D'ailleurs l'application a exactement la même ergonomie.

Je viens de tester avec un Rolling Spider et mon Lumia 1520 (Windows Phone 8.1 Cyan) et c'est bon, c'est même très bon ;)

Pour le téléchargement, cela se passe par ici.

Heureux propriétaire de SSD Samsung 840 EVO, j'ai une bonne nouvelle pour vous. Disposant moi-même de deux de ces SSD pour mes serveurs de test, j'ai testé l'utilitaire « Samsung SSD 840 EVO Performance Restoration Software » destiné à résoudre les récents problèmes de performance découverts sur ce modèle.

http://www.samsung.com/global/business/semiconductor/minisite/SSD/global/html/support/downloads.html

 

L'utilitaire fonctionne parfaitement sur Windows 2012 R2 en version Core. Je l'ai exécuté sur mes deux serveurs Core sans la moindre difficulté. Il faut cependant noter que le processus nous oblige dans un premier temps à arrêter le serveur pour appliquer la mise à jour. Il faudra donc être près de la machine pour pouvoir la relancer. Après redémarrage, l'utilitaire se relance de lui-même et termine les opérations d'optimisation. Rien à redire, cela fonctionne parfaitement bien et depuis je n'ai pas constaté le moindre problème.

Juste un petit mot pour partager avec vous la joie de m'être vu décerner un nouveau MVP Award dans la spécialité Microsoft Integration.

 

L'information date du 1er octobre, mais ce n'est qu'aujourd'hui que j'ai enfin pris le temps de déposer le dernier disque reçu. Cela commence à avoir de l'allure.

 

Merci à Microsoft pour cette reconnaissance et bravo à tous les nouveaux MVP et à tous les MVP renouvelés ;)

Depuis l'arrivée des rubans dans SharePoint, il m'a de nombreuses fois été remonté des difficultés pour naviguer dans une librairie utilisant des dossiers. Avec le temps, je me suis rendu compte qu'il y avait une commande que les utilisateurs ne trouvaient pas naturellement « Naviguer vers le haut ».

Celle-ci se trouve dans le ruban « Bibliothèque » groupe « Gérer les affichages ». Bien entendu la commande est grisée si l'on ne se trouve pas dans un dossier.

Petite perle constatée lors du déploiement de IIS8, la Technical Preview de Windows Server conserve la compatibilité avec IIS6. Au vu du nombre de produits qui en ont encore besoin aujourd'hui pour la MetaBase, WMI ou les scripts, il n'y a pas de quoi être surpris. La petite bizarrerie vient du fait de garder la console de gestion II6. Pourquoi supporter une console pour un serveur IIS6 (donc 2003R2) qui n'est plus supporté ? Cela sent la feature qui n'a pas encore été revisitée.

Cela devrait en réjouir plus d'un. Mais gardon tout de même à l'esprit qu'il ne s'agit pas là de la version finale du produit, et que tout peut changer d'ici là.

En voulant activer l'interface de gestion de Windows Defender sur un Windows Server Technical Preview, je suis tombé sur une petite perle : un feature nommé « Soft Restart ».

Qui n'a jamais rêvé rebooter un serveur sans avoir à étendre le reboot du bios et de tous ses contrôleurs ?!!!

Si le titre ne vous dit rien ou que l'affirmation vous semble étrange, il y a des chances que le contenu qui suit vous concerne.

De manière générale, pour les services ou un site web on utilise des certificats pour sécuriser des échanges ou authentifier un tiers. À plusieurs reprises déjà, j'ai été confronté à de mauvais usages de certificats, mais très récemment j'ai été confronté à un cas qui dépasse tout. Cela n'est pas la première fois que j'observe cette situation. Je profite donc de cet article pour tenter d'endiguer cette pratique qui compromet la sécurité de vos applications.

  1. L'objectif visé (mais non atteint) consiste à vouloir authentifier les applications autorisées à se connecter à un service. Pour se faire, les applications clientes doivent disposer de certificats signés par une autorité de certificat (CA).
  2. Dans le cas présent, les certificats sont fournis par les administrateurs en charge de l'hébergement des services.
  3. Chaque équipe de développeurs reçoit le certificat public du CA pour le reconnaitre comme une autorité de certificat de confiance + un certificat qui lui est propre.
  4. Les développeurs de l'application cliente 1 doivent utiliser le certificat 1
  5. Les développeurs de l'application cliente 2 doivent utiliser le certificat 2
  6. … etc…

En soi, la chose est classique.

Note : Je ne sais pas pourquoi, cette démarche est confondue avec l'utilisation de certificats d'authentification mutuelle. Pour rappel, dans le cas de certificats d'authentification mutuelle, il faut que chaque partie (client et serveur) fournisse un certificat pour s'identifier. Rien à voir donc avec ce cas. Une présentation propre du sujet peut se trouver ici.

Là où le bât blesse, c'est que les développeurs n'arrivent pas à s'authentifier quand ils utilisent leurs certificats d'applications. Et là on me sort la solution folle qui marche : « utiliser le certificat de l'autorité de certificat »… oui, le certificat public que tout le monde connait et qui sert à dire « en tant que client je fais confiance aux certificats fournis par ce serveur », (oui, le fameux certificat avec CA dans son nom !)…. Mais cela ne choque personne… (hors mis moi...peut être...)

Une erreur de configuration a certainement été opérée sur le serveur.

Les conséquences sont énormes :

  • On ne peut plus interdire une application ou une autre.
  • Il suffit de fournir le certificat du CA pour se connecter.

À partir du moment que quelqu'un connait l'autorité de certificat, il a le droit de se connecter. C'est fou !

Certains défendront la chose en disant « oui, mais il faut déjà connaitre le certificat ». À ceux-ci je répondrai :

  • Imaginer dans le cas d'une autorité de certificat d'entreprise, toutes les machines d'un AD peuvent utiliser le service !
  • Pour faciliter l'administration, le certificat du CA est généralement public et fourni via un site web (que ce soit sous Apache ou IIS)

D'autre diront, « il y a peu de chance que quelqu'un essai d'utiliser ce certificat comme cela ». Pour ceux-ci mes réponses seront basées sur l'expérience.

  • Une chance de contourner la sécurité, c'est une chance de trop.
  • Cela fait déjà 3 fois que je suis confronté à ce cas et qu'aucun développeur n'est choqué par ce qu'il fait en utilisant un certificat CA comme ClientCredential.

Moralité : Attention lors de vos développements, ce qui fonctionne n'est pas forcément bon. Et une information publique comme ce certificat public de CA ne doit surtout pas être utilisée de la sorte. On doit toujours utiliser une information « privée, valide », et donc un certificat non révoqué généré par une autorité de certificat de confiance.

L'annonce de Windows 10 a déjà fait couler beaucoup d'encre. Ce qui ferait presque croire qu'il n'y a pas de version Server de l'OS. Heureusement, il n'en est rien.

Il y a même une liste de nouveautés très alléchante What's New in the Windows Server Technical Preview :

Pour le moment, seuls les heureux détenteurs d'un abonnement MSDN peuvent en profiter. Pour y accéder, il leur faudra taper les mots magiques «Windows Server Technical Preview » ou cliquer sur le premier lien de la section Server. 

Petite surprise si vous utilisez le premier lien : en plus des habituelles ISOs, on peut télécharger un VHD de la bête.

Faites chauffer les routeurs, ça va télécharger dur !

Supprimer un projet créé dans Visual Studio Online n'a rien de bien compliqué. L'opération est la même pour une TFS on premise. Il faut juste se souvenir que la collection de projets porte le nom « DefaultCollection ».habituellement, celui-ci n'est pas visible dans nos URL Visual Studio Online.

À partir du moment où l'on utiliser l'option /collection:"https://VotreNomPerso.visualstudio.com/defaultcollection", presque toutes les commandes passent.

Pour supprimer un site il faut donc aller dans le répertoire contenant les exécutables pour piloter TFS :

cd "%programfiles(x86)%\Microsoft Visual Studio 12.0\Common7\IDE"

On demande ensuite la suppression via la commande suivante :

TFSDeleteproject /force /collection:"https://VotreNomPerso.visualstudio.com/defaultcollection" "LeNomDuProjetASupprimer"

On confirme, et le tour est joué.

Dans le cadre de démos TFS et SharePoint, j'ai souvent besoin de reproduire des environnements complet (ou presque). Forcément, toute bonne démo n'a pas toujours lieu dans un contexte réel. À force de galère avec SharePoint Foundation 2013 (même avec le SP1), j'en suis arrivé à avoir une liste de problèmes qui varient en fonction des versions d'OS, de SQL Server, des langues des packages, maque de ressources … etc …

Pire : dans un certain nombre de cas, j'ai utilisé des VM sans domaine. (On ne peut pas tous avoir un portable avec 32Go de RAM)

Aujourd'hui pour un petit lab/démo minimaliste avec un seul serveur incluant TFS 2013 / SharePoint Foundation 2013 / Reporting, je suis arrivé à un déploiement fiable à 100% et des performances acceptables dans le contexte suivant :

  • 2 CPU
  • 8Go de RAM (on peut descendre à 4Go lors du déploiement SQL+TFS, 6Go lors du déploiement SharePoint, mais pas lors des démos)
  • Tous les produits sont des packages et ISO anglais (en-US)
  • Windows 2012 R2 en workgroup
  • SharePoint Foundation 2013 avec SP1
  • SQL 2012 pour l'instance TFS et le Reporting
  • SQL 2008 R2 pour l'instance SharePoint (en workgroup, malheureusement, il faut laisser SharePoint le déployer)

Je garde deux instances SQL pour ne pas mélanger les bases TFS et SP. Cela me permet aussi de garder les collations conseillées pour chaque produit (oui cenne sont pas les mêmes). Je ne fais pas la migration de l'instance SQL SharePoint vers 2012, car je n'en ai pas l'utilité ici.

Note pour les petits malins : Quand on ne dispose que d'un seul serveur avec très peu de ressources, il ne faut pas espérer déployer celui-ci comme contrôleur de domaine, SharePoint Foundation n'aime pas (mais alors pas du tout).

 

Pour un déploiement en workgroup qui fonctionne à tous les coups, je ne fais aucune configuration durant le déploiement.

L'ordre du déploiement a lui aussi un impact sur le résultat final (théoriquement, on peut installer SP avant TFS mais j'ai eu des surprises il y a quelques mois en faisant dans cet ordre):

  • Installation de l'OS.
  • Changement de nom de la machine (pas de configuration IP car la machine va peut-être passer d'un réseau à l'autre pour les démos).
  • Application de toutes les updates Windows critiques disponibles jusqu'à ne plus en avoir (surtout pas d'optionnelles, cela peut briser le fonctionnement de SharePoint Foundation… entre autres la recherche).
  • Reboot obligatoire
  • Installer SQL 2012 avec Service pack.
  • Appliquer les updates Windows critiques
  • Reboot obligatoire
  • Installer TFS 2013 avec Update 3
  • Appliquer les updates Windows critiques
  • Reboot obligatoire
  • Installer les prérequis SharePoint 2013
  • Reboot obligatoire
  • Important : Vérifier que tous les prérequis sont déployés
  • Important : Appliquer les updates Windows critiques
  • Reboot obligatoire
  • Installer SharePoint Foundation 2013+SP1
  • Appliquer les updates Windows critiques
  • Reboot obligatoire

Ensuite, on peut procéder à la configuration

  • Lancement le Wizard de configuration SharePoint
  • Lancement de la configuration du Reporting Services
  • Lancement de la configuration du tiers applicatif TFS uniquement sans collection par défaut (si non, il faudra reconfigurer les parties SP et Reporting ultérieurement)
  • Déploiement des compléments TFS pour SharePoint via la console TFS (webparts, dahsbords)
  • Configuration de la connexion TFS / Reporting
  • Configuration de la connexion TFS / SharePoint via la console TFS.
  • Créer une première collection TFS

Profiter de l'environnement, il devrait être ok pour faire des démos !

Et pour ceux qui ne verraient pas pourquoi je décris cette méthode ainsi, vois l'écran que vous révérez d'avoir si vous installez votre environnement à l'arrache :

Dans le cadre d'une ferme SharePoint 2013 + Office Web Apps, j'ai été obligé de changer la DNS de la ferme Office Web Apps. Dans la MSDN, il n'existe pas de page décrivant la procédure, j'ai donc été obligé d'improviser.

Pour commencer, sur le serveur qui a les Office Web Apps, il faut mettre à jour l'URL interne

Set-OfficeWebAppsFarm –InternalURL "http://ma-nouvelle-url.lan"

 

Sur l'un des serveurs de la ferme SharePoint, il faut mettre à jour l'URL de la ferme Office Web Apps. J'ai été un peu surpris de découvrir qu'il n'existait pas une commande unique pour cela.

Soit un change les types de documents un à un, soit on supprime le binding et on l'ajoute ensuite. Je n'avais pas trop avait de me taper l'ensemble des types de fichiers un à un, j'ai donc opté pour la suppression puis l'ajout. Ce qui donne :

Remove-SPWOPIBinding -All:$true

New-SPWOPIBinding -ServerName " ma-nouvelle-url.lan" -AllowHTTP

 

Le reste de la configuration n'a pas besoin d'être changée. Il ne faut donc pas reprendre toute la configuration du SharePoint et de son Binding.

Ça y est enfin, mon projet « KISS Workflow Foundation » est lancé ! Celui-ci a pour vocation de vous faire partager un maximum d'échantillons de codes.

Pour le moment, il contient une bonne vingtaine de solutions. Celles-ci reprennent les bases de Workflow Foundation, de la création d'activités à l'update dynamique en passant par des joyeusetés comme le rehosting et le versionning. Je ne manquerai pas de faire évoluer les codes.

En gros, « il y a tout ce qu'il faut pour ce lancer ».

Prochaine étape : La création de scénarios d'usages évolués ;)

Mon dernier article pour MSDN est disponible : "Utiliser l'approche Contract First avec Workflow Foundation 4.5".

Vous pourrez y trouver tout le nécessaire pour utiliser les contrats WCF avec WF4 (implémentations, astuces, limites…)

On parle souvent des nouvelles fonctionnalités Azure, mais il y a parfois des améliorations qui passent inaperçues. Entre autres, l'amélioration du débit quand il faut télécharger des ISO de la MSDN à partir d'une VM.

Je crois qu'une capture d'écran est plus parlante qu'un long discours :

Rien à voir avec le débit très réduit que l'on pouvait constater au lancement de l'offre ;)

Dans mon précédent article, je décrivais une procédure plus ou moins fastidieuse pour simuler un Break. Cette manipulation peut très vite devenir rébarbative quand il faut la reproduire plisseurs fois dans un même projet. Heureusement, Workflow Foundation permet de coder des fabriques qui produisent des déclarations de workflows à partir d’un template.

Pour ceux qui ont du mal à comprendre cette dernière phrase :

Oui on part encore dans un grand délire à la mode WF (sans T au milieu, j’insiste), ou l’on va créer un code pour générer des activités en mode design et non en exécution. On n’est pas dans de la meta-programmation, mais comme souvent avec WF on a l’impression que l’on n’en est pas loin.

Pour coder une fabrique, il faut :

  • Créer une classe qui implémente IActivityTemplateFactory.
  • Coder la méthode Create qui va créer l’activité qu’il faut générer.

Si on veut reprendre mon exemple pour simuler un Break, on doit coder le Template suivant (pas forcément évident à écrire vu que l’on a une activité déléguée générique) :

/// <summary>
/// Template to include a break in ParallelForEach
/// </summary>
/// <typeparam name="T"></typeparam>
public class ParallelForEachBreak<T > : IActivityTemplateFactory
{
    public Activity Create(DependencyObject target)
    {
        return new TryCatch
        {
            Try = new ParallelForEach<T >
            {
                Body = new ActivityAction<T >
                {
                    Argument = new DelegateInArgument<T >("item"),
                    Handler = new Sequence
                    {
                        Activities = { new Break()}
                    }
                }
            },
            Catches =
            {
                new Catch<BreackException >()
            }
        };
    }
}

Celui-ci va retourner un TryCatch contenant un ParallelForEach et son Break (on ajoute une Sequence pour faciliter la vie de l’utilisateur final), ainsi qu’un catch capturant les exceptions de type BreakException.

Si on compile le projet, la fabrique est présente dans la toolbox, comme si il s’agissait d’une activité normale.

01_TemplateFactory

Si on la glisse dans un workflow, on se voit demander de choisir le type à utiliser pour notre activité générique :

02_TemplateFactory

Et pour finir les activités tant attendues:

03_TemplateFactory

Simple, efficace, mais tellement peu connu Clignement d'œil

Note: Voici un article qui m’a été demandé il y a bien longtemps et qui malheureusement s’est perdu dans ma boite à idées... désolé Triste

 

De base, il n’existe pas de notion de break dans Workflow Foundation (et par chance il n’y a pas non plus de GoTo). Pour disposer d’un break, il faut donc ruser. L’astuce consiste à utiliser la seule activité TryCatch et de lui faire capturer une exception particulière.

Pour l’occasion, j’ai une exception simple (autant dire qu’elle ne sert à rien seule):

public sealed class BreackException : Exception
{
}

Et une activité Break (ne pas oublier l’attribut DebuggerHidden pour ne pas bloquer le debugger)

/// <summary>
/// Throw a BreackException
/// </summary>
public sealed class Break : CodeActivity
{
    /// <summary>
    /// Execute
    /// </summary>
    /// <param name="context"></param>
    [DebuggerHidden()]
    protected override void Execute(CodeActivityContext context)
    {
        throw new BreackException();
    }

    /// <summary>
    /// Cache
    /// </summary>
    /// <param name="metadata"></param>
    protected override void CacheMetadata(CodeActivityMetadata metadata)
    {
        // Nothing to register
    }
}

Pour utiliser cet ensemble, il suffit d’ajouter une activité TryCatch. On utilise le lien “Add new catch”

01_BreakSimulation

 

On choisit ensuite de parcourir la liste des types d’exceptions disponibles

02_BreakSimulation

 

On choisit l’exception custom “BreakException” citée un peu plus haut. Dans mon exemple, elle se trouve dans le même projet (ne pas oublier de compiler le projet avant)

03_BreakSimulation

 

On revient ensuite au bloc Try en utilisant le lien “Add an activity” (en haut à droite du TryCatch)

05_BreakSimulation

On peut alors glisser son activité “Break”. Libre à vous de glisser ce que vous voulez autour du break.

06_BreakSimulation

 

Pour l’occasion, j’ai réalisé un exemple complet avec une boucle ParallelForEach :

07_BreakSimulation

L’énumération “items” contient par défaut l’expression C# suivante “new[] { 1,2,3,4,5,6}”.

Ce qui donne à l’exécution :

08_BreakSimulation

 

Lorsqu’item à la valeur 4, le break a lieu. La solution est simple et efficace. Ai passage, on prouve bien qu’un ParallelForEach  peut être interrompu sans problèmes et sans risquer de briser la persistance si elle est utilisée (détail auquel il faut toujours faire attention quand on fait du Workflow Foundation).

A priori, si on tente de créer un service Workflow Foundation 4.5 et un contrat, l'utilisation de deux SendReply pour un Receive n'est pas supportée.

Depuis la sortie de WF4.5, cette situation a été rapportée comme connue et le Contract First n'est pas utilisable de la sorte. On recommande de n'avoir qu'une activité SendReply en dehors de l'activité If.

Dans les faits, le problème n'est pas là. C'est la commande qui sert à créer le second SendReply qui ne sait pas qu'il faut respecter un contrat.

Si on compare les deux activités SendReply on constate les points de divergences suivants :

Activité créée par le Template Code First

Activité créée via la commande « Create SendReply »

 

Pour résumer :

  • La propriété action n'est pas bonne.
  • Les paramètres du message ne sont pas bons.

Si on corrige ses deux éléments, le service respecte à nouveau le contrat. Il y a donc bien un petit bug du côté de la commande « Create SendReply ». Mais si on comprend ce bug, on peut y remédier.

Lors de l'utilisation des activités de messages de WF, il peut arriver que l'on supprime par mégarde une activité du Template :

ReceiveReply pour le Template SendAndReceiveReply

SendReply pour le Template ReceiveEndSendReply

 

Les activités ReceiveReply et SendReply devant être liées à un Send ou un Receive, elles ne sont pas disponibles seules. Si le reste du Template n'a pas été modifié, on peut facilement tout supprimer et ajouter à nouveau le Template. Dans le cas contraire, il existe heureusement une commande sur les activités Send et Receive pour ajouter l'activité manquante.

 

Create ReceiveReply pour le Template SendAndReceiveReply

Create SendReply pour le Template ReceiveEndSendReply

 

Il est même possible d'avoir plusieurs ReveiceReply ou SendReply.

Exemple pour un ReceiveAndSendReply :

Seule ombre au tableau pour WF4.5 : ces activités ne respectent pas les contrats dans le cas d'un Contract First (ce sera l'objet d'un prochain article)

Microsoft a poussé une extension pour Visual Studio 2013 afin d'ajouter le support des projets d'installation (type de projet perdu dans Visual Studio 2012 en beta, puis réapparu et à nouveau perdu dans 2013). Pour le moment, il s'agit d'une preview. On peut croiser les doigts pour que la version finale pointe son nez rapidement.

L'annonce se trouve ici.

L'extension ici.

Petite annonce, qui semble-t-il n'a pas fait grand bruit, mais qui a tant d'importance pour ceux qui ont beaucoup d'anciens projets à maintenir.

Plus de Messages Page suivante »


Les 10 derniers blogs postés

- L’application des MiniDrones Parrot est aussi disponible pour Windows 8.1 par Blog de Jérémy Jeanson le 10-28-2014, 15:01

- L’application des MiniDrones Parrot est enfin disponible pour Windows Phone par Blog de Jérémy Jeanson le 10-27-2014, 09:49

- Mise à jour Samsung 840 EVO sur core server par Blog de Jérémy Jeanson le 10-27-2014, 05:59

- MVP Award 2014 ;) par Blog de Jérémy Jeanson le 10-27-2014, 05:42

- « Naviguer vers le haut » dans une librairie SharePoint par Blog de Jérémy Jeanson le 10-07-2014, 13:21

- PowerShell: Comment mixer NAGIOS et PowerShell pour le monitoring applicatif par Blog Technique de Romelard Fabrice le 10-07-2014, 11:43

- ReBUILD 2014 : les présentations par Le blog de Patrick [MVP Office 365] le 10-06-2014, 09:15

- II6 Management Compatibility présente dans Windows Server Technical Preview avec IIS8 par Blog de Jérémy Jeanson le 10-05-2014, 17:37

- Soft Restart sur Windows Server Technical Preview par Blog de Jérémy Jeanson le 10-03-2014, 19:43

- Non, le certificat public du CA n’est pas un certificat client !!! par Blog de Jérémy Jeanson le 10-03-2014, 00:08