Le Cloud de Vincent

Découvertes, astuces et curiosités de l'ère du cloud
    • 4/7/2018

    Je ne suis plus MVP Office Servers and Services et deviens MVP Office development


    Renouvelé en tant que MVP et changé de catégorie

    J’ai le plaisir de vous annoncer que j’ai été renouvelé en tant que Microsoft MVP, pour la cinquième année consécutive (le temps passe, je me fais vieux). Un petit changement cependant, mon titre est dans la catégorie Office development.

    Au cours des dernière années j’ai été MVP SharePoint, Office Servers and services et maintenant Office development.

    Originellement Microsoft avec organisé ses MVPs par produits, ce qui était sensé dans un mode « on prem » qui demandé une profonde connaissance de quelque chose en particulier. De plus cela permettait aux MVP’s d’être directement en relation avec les équipes Microsoft liées à leur produit. Cependant, depuis les dix dernière années l’industrie a migré vers un modèle principalement infonuagique et quelqu’un qui travaillait à la base sur SharePoint (ou Exchange, Skype…) est susceptible de travailler désormais plus largement sur Office 365(avec un peu d’Azure aussi).

    Il y a quelques années (3 ?) Microsoft a décidé de réorganiser le programme MVP en catégories (Azure, Office servers and Services, Visual Studio and Team Services…) qui regroupent des sous-catégories de contribution (ex open source, SharePoint, Exchange, Office 365…).

    Le seul aspect négatif de cette réorganisation étant que le focus était maintenant orienté bien plus vers les « IT pros » et « usagers avancés », avec peu ou pas d’attention donnée aux développeurs (ces gars-là ne font pas que du Azure maintenant de toute manière ?) alors qu’à l’époque la catégorie SharePoint incluait toutes les populations.

    Après un an Microsoft a réalisé le problème et a décidé de créer une catégorie Office dev (qui regroupe le dev SharePoint, Office 365, Excel, les addins office…) et d’une a réparti de manière assez obscure les MVPs dans cette catégorie.

    Je ne vais pas entrer dans les détails (je ne suis même pas sûr d’en avoir le droit) mais pour rester simple, la catégorie dans laquelle vous êtes dicte le contenu auquel vous avez accès, les équipes produits qui vous « écoutent » et ainsi de suite. Pendant le dernier MVP Summit, le contenu auquel j’avais accès ne correspondait que très peu à mes centres d’intérêts et j’ai passé la semaine à demander à mes amis de la « bonne » catégorie « hey, dans quelle salle on va ensuite ? »

    Cette nouvelle catégorie devrait bien mieux correspondre à mes intérêts et me permettre d’avoir une meilleure relation avec les différentes équipes produits chez Microsoft.

    A propos du blog

    J’ai démarré ce blog il y a huit ans maintenant (le temps passe, je me fais vraiment vieux), à l’époque j’étais étudiant (bien Microsoft Student Partner) et les raisons principales d’être du blog étaient de combler les trous de la documentation de Microsoft et/ou mes trous de mémoire.

    L’idée était simple, dès lors que j’avais un problème pour lequel la documentation ne donnait pas de réponse claire et que je ne voulais pas oublier la solution, je le documentais. Et au lieu de garder l’information pour moi-même je la publiais sur un blog pour la rendre disponible au plus grand nombre.

    Au cours des dernière années beaucoup de choses ont changé :Microsoft est bien plus actif sur leurs plateformes de blogs (le focus a un peu changé cependant), ils sont passé massivement à l’open source, même la documentation est open source nous permettant d’y effectuer des corrections de manière beaucoup plus simple que dans le passé, les gens regardent plus de vidéos et lisent moins et des plateformes pluri-technologies sont apparues (stack overflow, github…).

    Considérant cela, il est à mon avis bien plus productif de contribuer à l’effort global sur ces plateforms publiques qui bénéficient à tout le monde (même ceux qui ne connaissent pas du tout tel ou tel blog) et qui permettent une révision communautaire, des mises à jour….

    Au-delà d’investir plus de temps sur ces formats de contribution, j’ai aussi beaucoup changé, à l’époque je mettais un point d’honneur à faire du développement et de l’administration système, et je me suis rendu compte que le développement me passionnait profondément (avec une philosophie DevOps bien sûr).

    Enfin, je passe bien plus de temps à donner des sessions en personne qu’il y a quelques années. C’est pour toutes ces raisons qu’il y a un peu moins de contenu sur ce blog qu’il y a quelques années, et ce pour notre bénéfice à tous :)

    Pour terminer ce post, je voudrais remercier tous mes pairs (MVP ou non), ceux qui m’inspirent/me suivent/me challengent et finalement Simran Chaudhry qui était jusqu’il y a peu un MVP lead Canadien d’exception pour mes quatre premières années en tant que MVP !

     

    Bonus pour les Francophones, l’enregistrement de ma première session « sérieuse » aux Techdays 2012, devant une salle comble de 200 personnes, vraiment nerveux à l’époque. En espérant que je me sois amélioré depuis ;-)

    https://www.youtube.com/watch?v=q3P042bkt-Y

    • 15/5/2018

    Moins de trois semaines avant le #SPSMontreal 2018 !

    Cette année encore j’ai la chance de faire partie du comité organisateur du SharePoint Saturday Montréal 2018 qui se tiendra le 2 Juin au Cégep du vieux Montréal.

    C’est gratuit, c’est l’occasion d’apprendre plein de choses non seulement sur SharePoint mais aussi sur Office 365 et Azure.

    Cette année en quelque chiffres :

    • 25 Sessions (en Anglais et en Français)
    • 1 Keynote par le célèbre Serge Tremblay
    • 16 Microsoft MVP (Most Valuable Professional)
    • 1 MSP (Microsoft Student Partner)
    • 5 MCT (Microsoft Certified Trainers)
    • 9 partenaires
    • 200 participants (prévus)

    Au-delà du contenu c’est aussi l’occasion de développer votre réseau, manger Schwartz (smoked meat) et participer à la SharePint !

    En espérant vous voire sur place dans quelques semaines !

    Inscriptions : http://www.spsevents.org/city/montreal/montreal2018/_layouts/15/spsevents/registrations/registrationform.aspx

    • 16/4/2018

    Le mode de compatibilité Internet Explorer de SharePoint Online change

    Un peu d’histoire…

    Internet Explorer est le navigateur d’entreprise proéminant depuis plus de vingt ans maintenant. Nombre d’entre nous se souviendront de l’époque où nous devions avoir du code « compatible IE » et du code « compatible web ».

    Parce qu’un nombre important d’entreprises avaient investi lourdement dans le navigateur en bâtissant des outils qui fonctionnaient uniquement avec une version spécifique du navigateur, Microsoft a fourni depuis bientôt dix ans un mode de compatibilité. Ce mode permet au navigateur de se comporter de la « même manière » qu’une de ses anciennes versions afin de rester compatible avec des sites qui n’auraient pas été mis à jour.

    Vous pouvez définir ce mode de compatibilité depuis votre site web et depuis SharePoint 2013, ce mode était défini à la version 10.

    Cela s’avérait nécessaire au départ puisque SharePoint contenait une part importante de code historique qui avait besoin d’être mis à jour avant de pouvoir s’exécuter correctement sous IE11.

    Cependant, au fur et à mesure que les années ont passé, cela devenait de plus en plus pénible et avait un impact négatif sur les performances, la compatibilité avec les frameworks modernes et produisant certains comportements étranges.

    …Ce qui a changé récemment

    Chez 2toLead nous avons commencé à remarquer que certains tenants ont changé du mode de compatibilité « 10 » vers « edge » (IE11, le nom vient du fait que cette version a été développée lors d’une période de transition) avec des tenant version 16.0.0.7604 et plus.

    Vous pouvez vérifier la version de votre tenant en utilisant les outils de développeur de votre navigateur. Chaque requête faite à SharePoint aura un en-tête de réponse MicrosoftSharePointTeamServices contenant la version.

    Il faut vous attendre principalement à un gain de performances, une meilleure compatibilité avec les frameworks web modernes et un meilleur rendu. Cependant il est possible que certains de vos développements contiennent des solutions spécifiques pour fonctionner avec IE10 et que celles-ci se mettent à se comporter/s’afficher de manière différente.

    Soyez attentifs au changement du mode de compatibilité et n’hésitez pas à effectuer des tests en avance en changeant le mode de compatibilité d’internet explorer à l’aide des outils de développement !

     

    Une autre solution pour limiter l’impact de cette mise à jour de manière administrative serait de pousser vos sites SharePoint dans une liste de compatibilité, mais cela peut avoir des résultats néfastes sur les fonctionnalités natives de SharePoint et devrait être utilisé uniquement de manière temporaire.

    https://docs.microsoft.com/en-us/internet-explorer/ie11-deploy-guide/turn-on-enterprise-mode-and-use-a-site-list

    Rappel : IE11 est la seule version supportée sur les systèmes d’exploitation clients.

    https://support.microsoft.com/en-us/help/17454/lifecycle-faq-internet-explorer

    Ressources liées.

    https://techcommunity.microsoft.com/t5/SharePoint/IE9-IE10-users-in-SPO-Time-to-move-to-modern-browsers/td-p/36692

    https://docs.microsoft.com/en-us/internet-explorer/ie11-deploy-guide/fix-compat-issues-with-doc-modes-and-enterprise-mode-site-list

    • 21/3/2018

    Git : fork/importer/copie manuelle, bonnes pratiques

    En tant que développer à 2toLead une de mes tâches récurrentes consiste à définir des bonnes pratiques de gestion du code source en interne ou pour nos clients. Une des questions qui revient souvent est la suivante : Si je veux partir d’une base de code existante et la modifier, devrais-je forker ce repo ou bien faire quelque chose d’autre ?

    Il n’est aujourd’hui pas facile de trouver des explications simples et claires sur le web, aussi me suis-je dit que j’aller m’y essayer.

    Comme nous utilisons Visual Studio Team Services, mes exemples et captures d’écran seront basés dessus, mais cela s’applique à n’importe quel service git comme Github ou même des serveurs en interne.

    Les options dont vous disposez

    De mon point de vue, lorsque vous avez un repo existant quelque part, vous disposez des options suivantes pour le déplacer/copier dépendamment de votre scenario :

    • Copie manuelle: comme son nom l’indique, prendre les fichiers et les copier autre part, puis exécuter un git init ou quelque chose de similaire pour démarrer sur des bases fraiches. Si cette option semble attirante aux premiers abords, vous le regretterez rapidement en perdant l’historique ainsi que la capacité de rapidement rapatrier des changements vers la source.
    • Option d’import : cette option est fournie par VSTS sur les nouveaux repos. Cela importera l’historique et les branches d’un autre repo. Et c’est une bonne solution pour les scénarios de migration simples. Utilisez là si vous comptez supprimer la source ensuite ou bien si la source n’est pas sur le même service (ie : github => VSTS).
    • Fork de repo : (depuis la source) c’est probablement la meilleure option si vous prévoyez que la source et la copie coexistent après cette opération. Cela vous permettra de porter vos commits d’un repo à un autre facilement (via des pull requests). Ce choix devrait probablement être votre approche par défaut.

    Capture: créer une pull request entre différents repos.

    Capture: importer un repo existant

    Se sortir d’une situation compromettante

    Admettons que vous soyez arrivé(e) sur cet article car la situation est déjà hors de contrôle. Vous avez le « même » ensemble de sources dans plusieurs repos, et cela n’a pas été mis en place de la manière la plus recommandée, comment faire pour réparer ça ?

    Avant de commencer laissez-moi vous avertir que cette opération est sujette à erreurs, peut vous faire perdre du travail accompli, va impliquer une « interruption de service » pour vos développeurs (même courte) et est fournie sans aucune garantie. Aussi, avant de commencer, assurez-vous que l’ensemble des modifications en attentes sont commises et poussées, pour chaque développeur.

    Vous êtes probablement face à un de ces deux cas :

    • Vos différents repos ont un arbre de commits en commun à un certain point (ils ont été forkés ou importés). Git va « comprendre » ce qu’il s’est passé et pouvoir vous aider.
    • Vos repos n’ont pas de commits en commun (car il s’agît probablement d’une copie manuelle), vous allez devoir rejouer les changements à la main, bonne chance.

    Scenario avec un arbre en commun

    Supposons que vous avez la structure suivante :

    ProjetA/RepoSource

    ProjetB/ReposImporte

    Le second étant un import du premier et le premier n’ayant pas subi de mises à jour depuis que le second a été créé. Et désormais vous souhaitez être capable de propager les modifications de ReposImporté vers la source sans avoir à le faire localement.

    Commencez par forker le RepoSource vers ProjetB/RepoForke

    Clonez le repo forké sur votre machine et exécutez les lignes de commande suivantes.

    https://gist.github.com/baywet/0373d9a298bbb5f4cbd0ae6df6326872#file-bringimportedrepobranchesbacktoforked-sh

    Assurez-vous de bien remettre en place les « stratégies de branches », définitions de build, release etc. Profitez-en pour exécuter un outil de comparaison branche à branche entre le RepoImporté et le RepoForké.

    Pour les autres développeurs de la compagnie, demandez-leur d’exécuter ce srcipt.

    https://gist.github.com/baywet/0373d9a298bbb5f4cbd0ae6df6326872#file-updatedevelopersrepoaftermigration-sh

    Ma demande à l’équipe produit VSTS

    Serait-il possible d’avoir la capacité de déplacer les repos git de projet en projet de manière simple ? et que les liens de fork suivent ?

    https://visualstudio.uservoice.com/forums/330519-visual-studio-team-services/suggestions/17189462-make-it-easier-to-move-a-git-repo-from-one-team-pr

    Conclusion

    J’espère que cet article aura apporté un peu de clarté sur le sujet et aidé certains d’entre vous à se sortir d’un mauvais pas.

    • 8/1/2018

    Nouveaux exemples SharePoint Framework PnP disponibles : utiliser le SDK Web Skype UCWA pour afficher le statut d’une personne

    En Bref

    J’ai ajouté deux nouveaux exemples de WebParts SharePoint Framework qui démontre l’utilisation du SDK JavaScript pour l’API « Unified Communication Web API » de Skype for Business. Ce SDK vous permet vous abonner au statut d’une personne, démarrer une conversation skype, des appels…

    Les exemples :

    Version longue

    J’ai récemment eu l’occasion d’effectuer ma première contribution à PnP (au-delà de rapporter et aider à résoudre des problèmes). Dans ces deux nouveaux exemples je vous montre comment utiliser le SDK Skype UCWA pour vous abonner à et afficher le statut Skype d’un usager.

    Ce statut Skype va se mettre à jour s’il change (ie : si l’utilisateur change son statut dans Skype ou se connecte/déconnecte).

    Cette approche est meilleure que les approches précédentes que nous avions l’habitude d’utiliser dans SharePoint telles que l’intégration Office avec ActiveX ou le statut d’auteur de fichier dans SharePoint car :

    • C’est multi-plateformes (pas besoin d’activeX, Internet Explorer ou de configuration de zones de sécurité)
    • C’est indépendant d’une installation d’Office sur la machine ou du fait d’avoir Skype for business démarré
    • Ça se met à jour si le statut change
    • Il n’y a pas besoin de créer de fichier et cela peut être utilisé n’importe où sur la page
      • (l’indicateur de présence d’auteur de fichier SharePoint communique directement avec le serveur Skype en arrière-plan et fournit à SharePoint le HTML à afficher, mais cela se fait uniquement pour les librairies de documents)

    La UCWA

    Cette API est un peu spéciale et différente des « API standards » (OAuth + REST). Les différences principales étant :

    • Elle vous permet de vous abonner à certains objets du modèles (statut, conversations, flux audio/video…)
    • L’authentification est un peu (trop) complexe
      • Non standard et s’attend à ce que vous receviez un 403 afin d’obtenir l’adresse du fournisseur d’identité
      • Le serveur de découverte agit comme un « relais » et l’API est segmentée en plusieurs ressources (au-delà des permissions) ce qui demande d’effectuer plusieurs cycles d’autorisation.
    • N’est pas compatible OData (Microsoft nous a habitués à pouvoir utiliser OData sur ses APIs)

    Toutes ces différences impactent les quelques SDK’s disponibles et le SDK JavaScript (celui utilisé dans l’exemple) est un peu « vieux jeu ». Je pense que ce serait bénéfique s’ils passaient un peu de temps pour :

    • Passer d’une variable globale à un UMD
    • Fournir les packages npm et non uniquement un bundle sur un CDN
    • Fournir des définitions de types
    • Fournir de meilleures informations de versions (+ semver)
    • Permettre aux développeurs d’utiliser leurs propres librairies « d’auth » (comme helloJS ou msal) au lieu de l’implémentation qu’ils ont fournie dans le bundle.

    Pour toutes ces raisons l’exemple charge le SDK par injection et n’inclue pas le script comme dépendance externe.

    Pour terminer, la documentation est assez éparse, je vous suggère de corréler l’information, même si elle provient d’une source officielle car il semble qu’elle est loin d’être à jour. Voici quelques points d’entrée :

     

    Microsoft Teams vs Skype

    Les API’s de Skype for business ne sont toujours pas disponibles via le Graph de Microsoft. Et Microsoft a déjà annoncé que Microsoft Teams sera la voie du futur pour les communication unifiées, la messagerie instantanée et bien plus. Cependant Skype for business serveur restera toujours l’infrastructure qui supportera tout cela (et fournira au moins certaines des APIs) pour au moins quelques années.

    • 3/1/2018

    La version complète de lodash est disponible avec le SharePoint Framework

    TL ; DR ;

    Microsoft a remplacé @types/es6-collections par la librairie native es2015.collection dans la version 1.4.0. Cette librairie contenait une version conflictuelle de weakmap qui posait problème avec des packages comme lodash.

    Version longue

    Microsoft a récemment livré la version 1.4.0 du SharePoint Framework et de ses dépendances. Cette version contient beaucoup d’améliorations dont une en particulier qui a est passée inaperçue pour pas mal d’entre nous.

    @types/es6-collections a été remplacé par la librairie es2015.collection (native, fournie par le compilateur et les moteurs JS). Ce package avait une définition « spéciale » de WeakMap (entre autres) qui causait des problèmes pour de nombreux packages, incluant un de mes favoris : lodash.

    Pour contourner ce problème Microsoft avait dû fournir dans des versions précédentes @microsoft/sp-lodash-subset qui, comme son nom l’indique, fournit un sous-ensemble de lodash sans certaines méthodes très utiles telles que map.

    Quelle version utiliser ?

    C’est une question complexe pour le moment Microsoft n’ayant pas fourni de directives, je vais vous fournir les pour et contre de l’utilisation du sous-ensemble au lieu de répondre directement à la question.

    Pour :

    • Le subset est plus léger, ce qui signifie des temps de chargement plus rapide pour vos usagers.
    • Le subset est maintenu par Microsoft, ce qui signifie qu’il est moins probable qu’il brise le SPFX avec une mise à jour.

    Contre :

    • Le subset ne contient pas l’ensemble des fonctionnalités de lodash, ce qui signifie que vous allez probablement faire plus de choses à la main.
    • Le subset est maintenu par Microsoft, ce qui signifie que de futures améliorations de lodash mettront pus de temps à en être disponibles.
    • Le subset n’est pas disponible sur un CDN, ce qui peut impacter négativement vos temps de chargement dépendamment d’autres considérations (support HTTP2, qualité de votre CDN…)
    • Le subset sera peut-être amené à disparaître, considérant que cela représente du travail additionnel de peu de valeur pour Microsoft, ils décideront peut-être de se concentrer sur d’autres choses.

    Tout cela étant dit, rien ne vous empêche de travailler avec les deux dès lors que votre solution basée sur SPFX >= 1.4.0 et la mise à jour (du subset vers la version complète) est assez facile : quelques remplacements à effectuer.

    • 20/11/2017

    Entrevue avec le Visual Studio Talk Show - SonarQube

    Depuis de nombreuses années, Guy Barrette et Mario Cardinal animent le Visual Studio Talk show avec brio.
    Ce podcast traite principalement de sujets liés au développement .NET en parlant des outils, solutions, languages, services etc.

    J'ai eu l'honneur d'être invité sur le show avec eux pour parler de SonarQube sujet que j'ai pu approfondir ces deux dernières années via des séries de blogs, sessions et autres interventions.

    Au programme:

    • Nouvelles des hôtes
    • Présentation de ma personne
    • Introduction à la dette technique
    • Introduction au types d'outils
    • Introduction à SonarQube
    • Intégration avec la méthodologie DevOps
    • Approfondissement de certaines notions

    Cliquez ici pour écouter l'enregistrement et si vous n'êtes pas encore abonnés au podcast, je vous le recommande vivement!
    A très bientôt!

    • 29/9/2017

    Utiliser PnP PowerShell avec Visual Studio Team Services (VSTS) et l'agent hébergé

    Visual Studio Team Services (VSTS) fournit des fonctionnalités d'intégration continue (CI) et de déploiement continu (CD) assez intéressant que vous pouvez utiliser au sein de vos pipelines DevOps et vos séquences automatisées pour vos développements.

    Si vos solutions se reposent sur PnP PowerShell durant leurs phases de build et/ou de déploiement, vous aurez besoin d'avoir PnP PowerShell installé sur l'agent.
    Malheureusement l'agent hébergé n'a pas PnP PowerShell installé par défaut.
    Note: Cette documentation s'applique uniquement à l'agent hébergé 2017 et l'agent hébergé, l'agent hébergé base linux n'est pas supporté pour l'instant.

    Installation de PnP PowerShell

    Ajoutez une tâche au début de votre définition to build/release (type PowerShell). Dans le champ Type sélectionnez Inline Script.
    Dans le champ Inline Script copiez ce script

    Install-PackageProvider -Name NuGet -Force -Scope "CurrentUser"
    Install-Module SharePointPnPPowerShellOnline -Scope "CurrentUser" -Verbose -AllowClobber -Force
    

    Note: vous pouvez aussi installer une version spécifique en spécifiant le paramètre -RequiredVersion à la ligne 2.
    Note: vous pouvez aussi adapter ce script à vos besoins et/ou l'inclure dans un fichier faisant partie de votre contrôle de code source au besoin pour mieux correspondre à votre processus devops.
    Note: cette tâche doit être incluse à chaque phase d'agent avant l'utilisation de PnP PoweeShell

    Utilisation de PnP PowerShell

    Dans vos scripts faisant utilisation de PnP PowerShell, avant de faire appel aux commandes dépendantes de ce module, assurez vous d'inclure la ligne suivante.

    Import-Module SharePointPnPPowerShellOnline -Scope "Local"
    

    Désinstallation de PnP PowerShell

    Note: cette étape est optionnelle si vous utilisez l'agent hébergé et est uniquement fournie aux personnes utilisant un agent personnalisé et pour lequel ils ne veulent/peuvent pas installer PnP PowerShell de manière globale.
    Afin d'éviter les conflits si votre script requiert une version spécifique de PnP PowerShell, la bonne pratique est de désinstaller le module à la fin de la séquence.
    A cette fin, simplement ajouter une tâche PowerShell à la fin de la séquence et copier ce script.

    get-installedmodule SharePointPnPPowerShellOnline | ? {$_.InstalledLocation -like "*"+$home+"*"} | Uninstall-Module  -Force

    Cet article est une traduire d'un wiki que j'ai ajouté au repo GitHub PnP PowerShell récemment
    
    
    • 7/9/2017

    Mise à jour du repo SonarQube

    Il y a maintenant quelques temps que j'ai publié une série d'articles pour SonarQube.

    Pour rappel SonarQube est un outil d'analyse centralisé du code et ce de manière automatisée.
    Il vous permet de vérifier que le code est bien structuré, propose des solutions et résolutions et permet d'effectuer un suivit des problèmes dans le code.

    Cerise sur le gateau, la majeure partie de la solution est open-source.

    Il m'aurai fallu plus d'un an (conférences, autres articles, etc n'aidant pas), mais j'ai fini par traduire la série pour publication sur mon blog en Anglais.
    A cette occasion j'ai pu réviser le code et la documentation que j'avais fournis et les améliorer.
    N'hésitez pas à y jeter un oeuil (voir lien en pièce jointe)

    • 10/7/2017

    Renouvelé MVP pour l’année 2017-2018

    Vous ne le savez peut-être pas, mais la façon dont Microsoft organise le programme MVP a changé au cours des dernières années.
    Auparavant Microsoft nommait des nouveaux MVP’s tous les 3 mois, et renouvelait les anciens chaque année à la date anniversaire.
    Un des changements du programme concerne les cycles de renouvellement et de nomination. Les nouveaux MVP sont nommés chaque mois et les anciens sont tous renouvelés en Juillet après un an d’ancienneté.
    Étant à la base un « MVP d’avril » j’avais pris l’habitude d’annoncer mon renouvellement en Avril.
    J’ai le plaisir de vous annoncer que j’ai été renouvelé pour l’année 2017-2018 sur la catégories Office Servers and Services.
    C’est donc reparti pour un an de plus :)
    • 7/7/2017

    Conférencier au SharePoint Saturday Paris 2017

    J’ai le plaisir de vous annoncer que j’ai été sélectionné comme conférencier pour le SPS Paris 2017. J’animerai une session autour du développement d’applications avec le Graph « Quoi de neuf avec le Microsoft Graph ?».
    Si vous êtes dans le coin le Samedi 14 Octobre n’hésitez pas à vous inscrire et à participer. Pour rappel les SPS ce sont des évènements gratuits organisés par la communauté avec des sessions de qualité. Une très bonne occasion de réseauter, d’apprendre plein de choses et de passer une bonne journée.
    En espérant vous voir là-bas.
    • 20/6/2017

    SharePoint framework dans mes propres mots

    Si vous suiviez déjà @andrewconnell guru de SharePoint depuis quelques années déjà, vous avez probablement déjà connaissance de la séries de vidéos qu'il a commencée il y a quelques semaines "SharePoint framework dans les mots de machin".

    L'idée est de partager la vision de la communauté et de personnes qui font du développement SharePoint depuis quelques années. Si vous n'avez pas encore visionné des épisodes de la série, je vous encourage à aller voir. J'espère aussi quel l'équipe produit derrière le SharePoint Framework suit les épisodes et prend note du très bon retour d'expérience qui y est partagé.

    Lorsque j'étais au Techorama en Belgique il y a quelques semaines, j'ai eu la chance de passer un peu de temps avec Andrew. Au delà de sonner des sessions et goûter les bières, j'ai eu l'honneur d'enregistrer un épisode pour la série.

    Vous pouvez visionner l'épisode depuis son blog http://vtns.io/spfxinownwords-vincentbiret

    • 19/6/2017

    Mise à jour des définitions de types pour _spPageContextInfo - nouvelles propriétés disponibles

    Si vous développez des composants pour SharePoint de manière moderne (en utilisant ou pas le framework), il y a de fortes chances que vous utilisez TypeScript.

    Dans ce cas, vous utilisez probablement @types/SharePoint afin de bénéficier de l'auto-complétion ainsi que pour fournir une certaines compréhension de ce qu'il se passe au compilateur.

    Il y a un objet en particulier que SharePoint nous fournit afin d'avoir une compréhension d'où se trouve l'usager et de ce qu'il/elle est en train de faire: _spPageContextInfo.

    De nombreuses propriétés étaient manquantes dans cette définition de type, d'anciennes telles que le web id ou bien des nouvelles fournies par SharePoint Online comme canUserCreateMicrosoftForm.

    J'ai créé il y a quelques jours une pull request pour ajouter ces propriétés manquantes pour que vous n'ayez plus à faire quelque chose comme (_spPageContextInfo as any).webId pour que la compilation se passe bien.

    La liste complète des nouvelles propriétés se trouve ici https://github.com/DefinitelyTyped/DefinitelyTyped/pull/17089/commits/4f8942e318d76352cf0e2e9a68e72ba4b21cee55 et vous pouvez les obtenir juste en mettant à jour @types/SharePoint.

    Bon développement!

    • 23/5/2017

    Personnalisation de page layouts, master pages et image renditions dans SharePoint Online

    Microsoft a récemment mis en place des modifications vis-à-vis de la personnalisation graphique dans SharePoint Online.

    Si vous provisionnez une nouvelle collection de sites et que vous tentez de modifier un page layout, une page maitre ou bien même les paramètres d’image renditions, vous obtiendrez une erreur d’accès refusé. Ceci même si vous êtes administrateur de la collection de sites.

    En investiguant un peu plus et en vérifiant les permissions sur la galerie de page maitre, vous remarquerez que tout utilisateur a une permission refusée de type « ajouter et personnaliser des pages ». Ce niveau de permission ne fait pas partie des niveaux traditionnels auxquels nous sommes habitués dans SharePoint.

    Ceci provient en fait des paramètres de tenant qui fournissent désormais une option à l’administrateur de tenant pour verrouiller la possibilité de mettre en place des personnalisations graphiques de type « traditionnel ».

    Vous disposez de deux options pour déverrouiller la situation : PowerShell ou l’interface d’administration.

    Vous allez avoir besoin que « SharePoint Online Management Shell » soit installé sur votre machine.

    Ensuite simplement exécuter le script suivant

    Connect-SPOservice -Url https://tenant-admin.sharepoint.com 

    Set-SPOsite https://tenant.sharepoint.com -DenyAddAndCustomizePages 0

    Note : le script déverrouille une collection de sites à la fois mais a le mérite de s’appliquer de manière instantanée.

    Si jamais vous ne voulez pas manipuler de PowerShell, rendez-vous sur l’interface d’administration du tenant, dans le menu sélectionnez l’administration SharePoint. Rendez-vous dans paramètres, déroulez un peu la page et cochez « Autoriser les utilisateurs à créer des pages personnalisées ».

    Si vous être en train d’effectuer des modifications avancées, il est possible que vous vouliez aussi cocher « Autoriser les utilisateurs à exécuter des scripts » ainsi que « autoriser les utilisateurs à exécuter des scripts sur les sites créés en libre-service » ce qui vous permettra d’exécuter des scripts PowerShell sur ces sites.

    Merci à Mike qui m’a informé de ce paramètre alors que j’étais en train de m’arracher les cheveux.

    Bonnes personnalisations de SharePoint.

    • 25/4/2017

    Conférencier au SharePoint Saturday Monaco 2017

    J’ai le plaisir de vous annoncer que j’ai été sélectionné comme conférencier pour le SPS Monaco 2017. J’animerai une session autour de l’ALM des développements SharePoint/Office 365 avec Azure « Mise en place de votre processus DevOps Office/Office 365/SharePoint » (aka DevOps).

    Si vous êtes dans le coin le Samedi 3 Juin n’hésitez pas à vous inscrire et à participer. Pour rappel les SPS ce sont des évènements gratuits organisés par la communauté avec des sessions de qualité. Une très bonne occasion de réseauter, d’apprendre plein de choses et de passer une bonne journée.

     

    En espérant vous voir là-bas.

    http://www.spsevents.org/city/monaco/monaco2017

    • 20/4/2017

    Global Azure Bootcamp 2017 – Edition de Montréal

    Chaque année Microsoft organise in évènement mondial sur Azure. La particularité de cet évènement c’est qu’il dure 24h et est représenté localement dans le monde entier par les groupes usagers.

    Le groupe MSDevMtl en organise un chez Microsoft Montréal (2000 McGill College) le 22 Avril (Samedi).

    Au programme :

    -          Le portail Azure

    -          Web Apps

    -          Stockage

    -          Fonctions

    -          Cognitive Services

    -          DocumentDB

    -          Application Insights

     

    La journée est animée par des conférenciers de Microsoft et des MVP et sera en Français

    J’aurais la chance de présenter la partie sur Azure Functions ou comment mettre à disposition des services web en se concentrant uniquement sur le code.

    Pour s’inscrire, c’est par ici https://www.meetup.com/fr-FR/msdevmtl/events/237451600/

    Pour avoir plus d’informations sur le sujet c’est par là https://global.azurebootcamp.net/

    En espérant vous y voire.

    • 20/4/2017

    Publier des Image renditions pour SharePoint à l’aide de PnP Provisioning

    Il y a quelques jours, j’ai dû travailler à nouveau avec les « images renditions » de SharePoint. Nous sommes en train de développer un intranet pour l’un de nos clients qui dépend partiellement des fonctionnalités de publication.

    Court rappel : les « image renditions » ont été introduites en 2013 pour vous aider à utiliser une version optimisée d’une image sans que les créateurs de contenu aient besoin de se soucier de la taille des images ou autres ou bien que vous ailliez à redimensionner les images vous-même en implémentant du code.

    Si vous n’avez pas déjà lu les excellents blogs pots introductifs sur le sujet, je vous invite à y jeter un œil.

    http://www.eliostruyf.com/provision-image-renditions-to-your-sharepoint-2013-site/

    https://www.eliostruyf.com/image-renditions-december-cumulative-update-sharepoint-2013/

    Dans notre cas nous utilisons PnP provisioning de manière intensive afin de simplifier les opérations de déploiement telles que créer des colonnes de sites, types de contenu, fichiers, etc… D’où la question : est-il possible de configurer les « image renditions » en utilisant PnP provisioning ?

    C’est en effet possible, vous pouvez configurer vos renditions sur votre tenant de développement depuis les paramètres du puis récupérez le fichier situé à cette adresse ~/SiteCollection/_catalogs/masterpage/PublishingImageRenditions.xml

    La dernière action à effectuer consiste à mettre à jour votre template pnp pour qu’il déploie ce fichier pour vous à l’aide de cet exemple :

    <pnp:Files>

            <pnp:File Src="PublishingImageRenditions.xml" Folder="{SiteCollection}/_catalogs/masterpage" Overwrite="true" Level="Published">

            <pnp:Properties>

                <pnp:Property Key="ContentTypeId" Value="0x01010012BCF119622FF14793A8A38D5831F25C" />

                <pnp:Property Key="ContentType" Value="Document" />

              </pnp:Properties>

            </pnp:File>

          </pnp:Files>

     

    Bonus : les « image renditions » se reposent sur les fonctionnalités de publication, il est préférable de s’assurer que ces fonctionnalités sont activées avant de les utiliser et voici un exemple pour pnp.

    <pnp:Features>

            <pnp:SiteFeatures>

              <pnp:Feature ID="f6924d36-2fa8-4f0b-b16d-06b7250180fa" Description="SharePoint Server Publishing Infrastructure" />

            </pnp:SiteFeatures>

            <pnp:WebFeatures>

              <pnp:Feature ID="94c94ca6-b32f-4da9-a9e3-1f3d343d7ecb" Description="SharePoint Server Publishing" />

            </pnp:WebFeatures>

          </pnp:Features>

     

    • 5/1/2017

    Conférencier au Aos Tours Montréal et Québec

    J’aurai le privilège d’être conférencier aux prochains AOS (Azure, Office 365, SharePoint) de Québec (6 Février) et de Montréal (7).

    J’aurai le privilège de présenter en Français : Introduction à Azure Fonctions et Flow

    Flow et Azure Functions sont deux outils de développement rapides qui viennent changer le paradigme d’architecture des applications modernes. Au lieu de livrer les solutions d’un seul bloc ce qui peut prendre plusieurs mois, nous allons voir comment livrer des solutions par fonctionnalités.

    Lors de cette session nous ferons une introduction aux deux services et verrons à l’aide de démonstrations pratiques et de cas concrets comment les utiliser.

     

    Pour vous inscrire à l’évènement c’est par ici http://canada.aos.community/

    Au plaisir de vous voir là-bas !

    • 23/12/2016

    Je rejoins 2ToLead

    Une page se tourne en cette fin d’année 2016 puisque j’ai pris la décision de quitter Negotium pour rejoindre 2ToLead.

    Au revoir Negotium

    Entre le moment où je suis arrivé chez AlphaMosaik il y a plus de 4 ans (parti pour 18 mois à la base hein…), le rachat par Negotium et aujourd’hui mon environnement de travail et la société dont je faisais partie ont beaucoup évolué.

    Cette structure m’a aussi permis de beaucoup grandir et d’apprendre sur un plan culturel, personnel et professionnel. J’en profite pour remercier l’ensemble des personnes avec qui j’ai pu collaborer durant cette période.

    Bonjour 2ToLead

    Je rejoins donc une structure jeune, innovante, à forte croissance en tant que « Office 365 and Azure Developer ». J’aurais la chance de travailler avec de nombreuses personnes brillantes que j’ai déjà eu l’occasion de côtoyer au sein des communautés.

    Ces gars sont justes impressionnants, whitepapers avec des dizaines de milliers de téléchargements, sessions à l’ignite, croissance forte… J’espère être à niveau.

    Je serais le 3eme MVP à faire partie de la compagnie aussi composée d’anciens de Microsoft.

    Au-delà de mon expertise technique directe, je souhaite aussi pouvoir faire bénéficier ma nouvelle famille de mes connaissances autour des processus devops.

    A très bientôt, et merci d’être aussi nombreux à me lire.

    • 15/12/2016

    Update : SonarQube : Endpoints et tâches

    Peu après la fin de la publication des articles à propos de SonarQube sur mon blog, Microsoft et SonarQube ont décidé d’effectuer des modifications.

    Les tâches VSTS d’analyse SonarQube avaient été conçues par Microsoft avant que le Markeplace pour Visual Studio Team Services existe.

    Ils ont récemment décidé que ce serait SonarQube qui maintiendrait les tâches maintenant pour plus de flexibilité. Quel impact pour vous :

    -          Si vous avez déjà mis en place de l’analyse statique en suivant mes posts, il va falloir mettre à jour vos définitions de build

    -          Si vous n’avez pas encore commencé, il faudra installer une extension avant de commencer

     

    Installation de l’extension

    Je n’en avais pas encore parlé mais Visual Studio Team Services bénéficie d’un marketplace qui permet à des éditeurs tiers ou à la communauté d’étendre ses fonctionnalités.

    Certaines sont payantes, la plupart sont gratuites.

    L’extension SonarQube va ajouter les définitions de tâches dont nous auront besoin et la définition de type de endpoint pour SQ.

    Pour l’installer il suffit de se rendre ici et de cliquer sur next next next… https://marketplace.visualstudio.com/items?itemName=SonarSource.sonarqube

    Création du endpoint

    Vous le savez déjà mais pour accéder au serveur SQ, VSTS va avoir besoin d’un endpoint. Pour cela rendez-vous dans la section paramètres, services et ajoutez un nouveau point de type SonarQube.

    Vous pouvez voir que ça fonctionne maintenant à l’aide de token et non plus de compte de services comme je l’avais expliqué auparavant. C’est meilleur en termes de sécurité.

    Pour savoir comment générer un token vous pouvez vous référer à l’article sur la configuration de SonarLint.

    http://microsofttouch.fr/default/b/vincent/posts/determinez-votre-dette-technique-a-l-aide-de-sonarqube-13---bonus-configuration-de-l-extension-sonarlint

     

    Remplacement des tâches

    Au moment où je rédige l’article j’ai donc 5 tâches SQ disponibles :

    -          2 anciennes dépréciées

    -          3 nouvelles

    Le but est simplement de remplacer les anciennes dans vos définitions de build par les nouvelles.

     

    Le tour est joué ! Bonne analyse statique !

     

    Note : cet article met à jour les suivants :

    http://microsofttouch.fr/default/b/vincent/posts/determinez-votre-dette-technique-a-l-aide-de-sonarqube-12---mise-a-jour-de-votre-definition-de-build

    http://microsofttouch.fr/default/b/vincent/posts/determinez-votre-dette-technique-a-l-aide-de-sonarqube-10---creation-d-un-compte-de-service-et-referencement-dans-vsts

    • 13/12/2016

    Diagnotiquer les problèmes de load balancing sous SharePoint

    Il y a quelques semaines j’ai eu l’occasion d’intervenir sur une ferme cliente qui posait des problèmes de performances. Il y avait aussi des problèmes de consistances des données affichées entre plusieurs appels.

    J’ai très rapidement suspecté un problème de configuration du load balancer qui répartissait les appels entre les différents serveurs. Cependant n’ayant accès uniquement à la ferme SharePoint, j’ai dû fournir une preuve à l’équipe réseau pour qu’ils déclenchent un incident.

    La question suivante s’est donc posée, comment entre deux appels http peut-on déterminer quel serveur a répondu ?

    La plupart de la documentation propose de mettre un fichier texte contenant le nom du serveur à la racine des applications web. Cependant je n’aime pas cette solution pour plusieurs raisons:

    -          Ajouter/supprimer des fichiers à SharePoint n’est pas une chose à faire à la légère, surtout si on connait mal SharePoint

    -          Il est possible, selon la configuration du load balancer, qu’un serveur réponde à une requête, et un autre à la suivante (justement s’il est mal configuré). Il faudrait donc déterminer le serveur répondant pour chaque requête.

    Je fais évidemment l’impasse sur les solutions de types « déployer une solution contenant un webpart qui l’affichera ».

    J’ai donc choisi d’ajouter un en-tête http de réponse qui sera envoyé par le serveur à chaque requête http.

    L’unique inconvénient de ce genre de solution c’est que ça induit un recyclage du pool applicatif, et donc une interruption de service.

    Pour cela rendez-vous dans la console IIS et sélectionnez l’application web qui vous intéresse.

    Cliquez ensuite sur « http response headers »

    Ajoutez en un avec le nom que vous voulez et le nom du serveur en valeur.

     

    (répétez l’opération pour chacun des serveurs)

    A l’aide de n’importe quel navigateur, si vous ouvrez les outils de développeur (généralement F12), que vous activez le suivit des requêtes et que vous allez dans la section en-tête de réponse, vous pourrez voir votre en-tête.

    Une fois que vous avez terminé, n’oubliez pas d’enlever votre en-tête pour deux raisons :

    -          Les en-tête http, avant HTTP2 (qui n’est pas implémenté dans la plupart des cas), ne sont pas compressé, le trafic réseau va donc augmenter

    -          Pour des raisons des sécurité, vous ne devriez pas exposer les noms de vos serveurs

     

    Bon troubleshooting de load balancers.

    • 2/12/2016

    Déterminez votre dette technique à l’aide de SonarQube : 14 - Conclusion

    L’installation et la mise en place de SonarQube peut paraitre assez complexe et fastidieuse.

    J’espère que cette suite d’articles et les scripts que je vous ai fournis vous ont permis d’aller plus vite dans sa mise en place.

    Vous avez maintenant la capacité de déterminer clairement votre dette technique et d’y remédier pour améliorer la qualité de vos développements.

    Il est évident que voir apparaitre un millier de problèmes dans le code peut être décourageant, gardez simplement cela en tête :

    -          Il y a des faux positifs, faites une première passe pour les exclure

    -          Essayez d’avoir une politique du genre « aucun commit ne doit empirer la situation » ou même mieux « chaque commit doit corriger l’ensemble des problèmes sur les fichiers modifiés ». Ce qui vous permettra d’améliorer la situation au fur et à mesure.

    -          Certaines organisations préféreront faire un ou deux sprints de résolution de dette pour partir sur des bases saines

     

    Et vous ? est-ce que vous trouvez ça utile ? n’hésitez pas à commenter.

    • 30/11/2016

    Déterminez votre dette technique à l’aide de SonarQube : 13 - Bonus configuration de l’extension SonarLint

    TL ; DR

    Vous avez la possibilité d’afficher les résultats d’analyse SonarQube en direct dans la console erreur et informations de Visual Studio avec la même base de règles configurées pour le projet d’analyse que sur le serveur.

    Installation de l’extension

    Simplement se rendre sur http://www.sonarlint.org/visualstudio/index.html et procéder à l’installation.

    Liaison de la solution Visual Studio au Projet d’analyse

    Depuis le Team Explorer cliquer sur SonarQube

    Cliquer sur connecter.

    (si vous avez une erreur de certificats, il vous faudra installer le certificat auto-signé de la machine)

    Pour gérer un token (à entrer dans la case username) allez sur Soanrqube en vous connectant avec votre compte Azure AD Negotium.

    Depuis le coin supérieur droit cliquer sur « My Account »

    Aller sur l’onglet sécurité puis générer un token.

    Entrer le token dans l’invite de connexion sonarqube

    Double cliquez ensuite sur le projet d’analyse qui vous intéresse pour le lier à la solution Visual Studio

    Les erreurs d’analyses SonarQube apparaissent maintenant dans en tant qu’avertissement dans Visual Studio ainsi que dans l’intellisense.

    Projets JavaScripts

    Si comme nous vous avez des projets JavaScript pour lesquels vous utilisez Visual Studio Code et non Visual Studio, l’analyse JavaScript se base sur eslint et tslint. Il vous suffit d’installer les extensions compatibles pour votre éditeur et de pointer le même fichier de règles. De cette manière vous bénéficierez de la même analyse côté serveur et côté client, même sans Visual Studio et SonarLint.

    • 28/11/2016

    Déterminez votre dette technique à l’aide de SonarQube : 12 - Contrôle des résultats

    TL ; DR

    Les erreurs d’analyse statique vont apparaitre comme des warnings dans la section compilation. Un badge d’état de l’analyse statique va apparaitre sur la page de rapport de la build et vous aurez des résultats visibles dans SonarQube.

    Résultats affichés avec la build

    Lorsque vous lancez une build au résultat vous trouverez un encart supplémentaire pointant vers les résultats de l’analyse statique

     

    Résultats visibles dans SonarQube

    Sur votre instance de SonarQube vous trouverez des résultats d’analyse qui indiqueront la progression ou la regression du code. A l’aide de SonarQube vous pourrez vous bâtir des tableaux de bord qui vous aideront à avoir une vision claire sur votre dette technique et comment la corriger.

    • 25/11/2016

    Déterminez votre dette technique à l’aide de SonarQube : 12 - Mise à jour de votre définition de build

    TL ; DR

    L’analyse statique va s’effectuer au moment où vous buildez votre projet. Notez que pour le moment seule une intégration avec msbuild (la tâche Visual Studio Build) existe.

    Si vous buildez des projets avec node/npm ou autres, il  est possible que la configuration requise soit différente ainsi que les outils (tâches gulp par exemple).

    Ajout des tâches à la définition

    Nous partirons du principe que vous avez déjà une build 2015 en place

    Ajoutez deux étapes SonarQube, placez la begin analysis avant le build visual studio et la end analysis après l’exécution des tests unitaires. (comme ça, si vous avez des résultats de couverture de code, ils apparaitront dans SonarQube).

    Renseignez le endpoint, nom de projet, clef du projet, version ainsi que les paramètres optionnels de l’étape de début.

    Dans mon cas j’ai mis /d:sonar.exclusions=**/*.min.js,**/*.min.css en paramètres optionnels pour exclure les fichiers minifiés de l’analyse.

    Note : ces paramètres peuvent aussi être spécifiés dans les paramètres globaux de SonarQube ou dans les paramètres de projet SonarQube.

    Note : java doit être installé sur les machines de build si vous avez vos propres machines de build

    Note : je vous conseille d’ajouter une variable « SonarQubeAnalysisTimeoutInSeconds » à la définition de build avec la valeur suivante « 600 ». Cela va étendre le délai d’expiration de l’analyse statique, des fois que votre machine ait plusieurs résultats à importer à la fois.