Articles pour le magazine Programmez de Juin 2019

Nous avons écrit 5 articles pour le magazine n°230 Programmez de Juin 2019:

  • la première partie du Dossier .NET Core 3
  • un article sur SQL Server
  • la deuxième partie sur Azure Dev Ops

La suite du Dossier .NET Core 3 avec C# 8 et EF Core dans prochaine numéro de Juillet-Août 2019.

Aussi à paraitre en Juillet-Août un article sur “les techniques de Reverse Engineering”.

Welcome Léger D.

Bienvenue à Léger Djiba. Il est spécialiste en développement logiciel et est notre 26ème Ranger.

Originaire de Côte d’Ivoire, Léger est un développeur logiciel expérimenté.

Il maîtrise les sujets suivants:

  • BI
  • Biometrics
  • e-commerce
  • Microsoft. NET
  • JAVA
  • N-tier architecture
  • UML
  • AGILE(XP, Scrum, Lean)
  • open source technologies
  • Xamarin
  • Arduino 
  • Windows Phone

Welcome John D.

Bienvenue à John Dennison. Il est spécialiste en développement logiciel et est notre 25ème Ranger.

Originaire d’Irlande, John est un développeur confirmé qui possède de nombreuses années d’expériences dans le domaine du développement logiciel. Ses centres d’intérêts sont :

  • Performance
  • Fiabilisation
  • CI / CD
  • NoOps
  • BDD (Specflow)
  • micro services
  • DDD

Dossier .NET Core 3 pour Programmez de Juin 2019

La communauté des NET Azure Rangers contribue activement au dossier NET Core 3 de programmez de Juin 2019. En théorie, on partirait sur les bases suivantes:

  • Hamza : C# 8
  • Jean-Pierre : Support WinForms et WPF
  • Cédric M. : EF Core
  • Christophe P : ASP.NET Core
  • Christophe P : XAML Islands

Les NET Azure Rangers participent aussi sur 2 autres articles:

  • Laurent G. : Serverless
  • Jean-Nicolas B. : SQL Server, les indexes

A suivre…

Création logiciel, Hiérarchie et libre-arbitre

En réaction au post précédent Nous sommes tous des Architectes, j’ai reçu un commentaire sur LinkedIn qui disait cela:

<< Sébastien L. : Il y a un temps pour tout et une autorité pour tout. Le libre arbitre n’est pas possible dans une chaine hiérarchique car celle-ci serait rompue. La hiérarchie porte les responsabilités et décide. Il en est ainsi. >>

J’avais commencé de faire une réponse puis mon browser s’est fermé suite à une mauvaise manip et j’ai perdu mon texte. Voici la synthèse mieux écrite…

En matière de construction logiciel moderne, la notion d’autorité au sens primaire avec responsabilité et décision et relation maître-esclave n’existe pas. Construire un logiciel, c’est un travail d’ingénierie collaboratif. Ce n’est pas un travail à la tâche avec un patron et des ouvriers presse-boutons. L’armée ne sait pas faire et ne saura jamais faire un grand logiciel. Un logiciel est une construction de l’esprit fait par un ou plusieurs individus de manière collaborative. Cela peut être créatif ou scientifique mais cela reste un art. Le coup du “y a une chaîne hiérarchique qui porte responsabilités et décide !” est représentatif du système français et des SSII… Ce modèle est stupide. Avec cela, on fait de mauvais logiciels, sans qualité et sans âme que personne en veut utiliser… Les développeurs quittent le navire, le travail est médiocre et on tombe dans la caricature.

Un logiciel moderne, c’est une construction en légo. Il y a des centaines de briques. La responsabilité de la construction logicielle appartient aux Architectes et à eux seuls. Les design et le codage des briques est le domaine de développeurs. Comme vous le savez, un développeur est aussi un architecte.

Chaque développeur est autonome via:

  • sa capacité à designer les composants
  • sa manière d’implémenter les composants
  • sa vision de l’utilisation des composants qu’il veut donner

Ce n’est pas une personne qui possède le titre de chef de projet qui va expliquer au développeur comment il doit procéder, sur combien de temps, etc. Dans le monde du développement logiciel moderne, le terme de chef de projet n’existe plus ! Il a des gens qui coordonnent les réunions, s’occupe du planning mais n’ont aucune responsabilité dans l’architecture et le développement logiciel. Il ne fait pas autorité au sens propre. Cette notion de chef est bâtarde. Que ce soit dans les chiffrages ou dans les choix d’architecture, le développeur est autonome et se fait respecter. Ce n’est pas quelqu’un sorti de nul part qui va imposer un développement en x jours. Non non non ! Le développeur fait une estimation et c’est sur cette base que le planning se fait. Il peut y avoir des réajustements ou le chiffrage peut être optimisé mais ce n’est pas une relation hiérarchique: “code moi ça en x jours !”. Le chef de projet n’apporte aucune valeur ajoutée dans la construction logicielle contrairement aux architectes et développeurs. On lui demande bien parler et de bien communiquer mais il n’est pas le responsable hiérarchique de l’équipe. Il n’est pas qualifié pour cela.

La construction moderne d’un logiciel est orientée objet. Ce n’est pas simple et cela demande aux membres de l’équipe de modéliser et manipuler des quantités importantes de classes regroupées sous formes de hiérarchies et de savoir prendre du recul pour implémenter tous ses éléments sachant que des modifications dans une construction orientée objet alias OOP (interfaces, méthodes virtuelles, héritage de classes) peuvent être complexes et douloureuses…

La qualité dans le monde moderne n’est pas un option. Si un développeur réalise une construction de classes et que son utilisation est trop complexe, il doit y rajouter des choses, casses des choses, transformer et cela peut avoir des effets boules de neige. Seule la maturité du développeur permet de s’assurer qu’une implémentation est correcte la première fois sans avoir à y revenir après. Ceci n’est pas prévisible. La création de Test Unitaires via la conception permet de gérer cela. Cela veut dire qu’il faut prévoir ce temps de TUs.

Construire un logiciel via l’OOP c’est le fruit d’un travail scientifique de mise en relations d’éléments concrets issus d’abstractions et implémentés via des comportements dans des classes. On joue aux légos.

Y a ceux qui construisent les briques et y a ceux qui utilisent les briques. Ces deux catégories de développeurs ne font pas le même métier. Celui qui fait une brique réalise un travail de modélisation et met sa casquette d’Architecte et créé des classes. L’autre développeur ne fait que les utiliser… La travail collaboratif induit une communication permanente par exemple sur le confort d’utilisation des classes. Les interactions sont permanentes et un utilisateur de classe peut remonter un problème qui va nécessité au créateur de celle-ci de faire un fix ASAP et mettre à disposition une nouvelle version… cela peut provoquer des blocages.. Encore une fois, c’est un problème d’Architecture.

Quand une équipe est constitué d’éléments remarquables, il n’y a pas de hiérarchie. C’est la meilleur idée qui gagne. C’est le design le plus performant et le plus élégant qui l’emporte. Priorité à l’ingénierie.

Sans briser mon NDA avec Microsoft et mon accès au code source Windows, je peux vous dire que le code source de Windows, malgré son immensité est un travail d’orfèvre. On y trouve du C++ Moderne, des abstractions en pagailles, du code clean. Power & Peformance. Built on the metal !

Nous sommes tous des Architectes

Un bon développeur est aussi un architecte. On ne code pas n’importe quoi n’importe comment. Et pour cela, faut être formé. Dès que je vois une conférence chez Microsoft par exemple ou un nouveau book, j’invite mes connaissances professionnelles à y aller ou à lire cet ebook. Dernièrement, on me dit Pic, je peux pas lire ton ebook au bureau mon patron m’a fait la remarque… Là tu te dis, OK le monde fabuleux des PME a encore frappé… Par devant je suis Gold Partner Microsoft, un pure player mais la réalité c’et que tu dois pisser du code sans valeur ajoutée à la chaîne et que tu dois te former sur ton temps libre. Tu demandes un accès Pluralsight, c’est non. Tu lis des ebooks, c’est non. C’est quoi ces boites de m**** ? Au bureau, un consultant se doit de se former régulièrement, ça fait partie du métier. Tu veux être vendu à 350 € la journée ou à 1000 € ? Tu veux faire du .NET/C# à la pointe ? De la modernisation des Appz dans le cloud Azure ou du cloud-native ? Ah Oui Pic, la formation chez MS elle me servirait bien mais je peux, je suis en retard sur mon projet et si je m’absente, tu vois… Non je vois pas! Si ton patron qui ne te forme déjà pas, refuse que t’aille en séminaire, c’est un idiot. Change de job. Vite ! Améliore ton quotidien.

Les Rangers MVP

Microsoft MVP

Voici la liste des MVPs Microsoft:

  • [MVP Developer Technologies] Anthony Giretti
  • [MVP Azure] Cédric GEORGEOT
  • [MVP FoxPro] Frédéric Steczycki
  • [MVP Azure] Laurent Grangeau
  • [MVP Azure] Cédric Leblond
  • [MVP Azure] Cédric Derue
  • [MVP Developer Technologies] Gora LEYE
  • [MVP Developer Technologies] Christophe Pichaud

Welcome Gora L.

Welcome Gora LYEE. Il est MVP Developer Technologies, passionné de Docker, Kubernetes et des architectures micro-services  et nous nous sommes croisé au MVP Summit 2019 grâce à Anthony G.

IBM z/OS DB2 Cobol vers RedHat Linux DB2 Cobol

Notre Ranger Jean-Baptiste Bron fait un travail révolutionnaire pour le compte d’une grande banque française : du replatforming IBM z/OS (Mainframe) vers du RedHat Linux.

Le contexte, ces sont des applications Cobol avec un IBM DB2. Le cobol est compilé sur RedHat avec Microfocus Cobol et ce projet pourrait bien redessiner le paysage IT des banques si cela fait des émules. A moins que IBM ne décide de baisser de 80% le prix de ses infras mainframe pour garder son monopole…

A suivre.

Modern Applications by Devoteam recrute !

Modern Applications, une société de Devoteam est un nouveau pure-player Microsoft. Vous voulez travailler dans des grands comptes sur des projets innovants, rejoignez-nous ! Nos consultants sont formés, éduqués, suivis, coachés via des events internes ou chez Microsoft. Ils passent des certifications. La formation et le coaching sont nos engagements les plus précieux. Nous faisons des articles technique pour Programmez via le partenariat avec la communauté technique des NET Azure Rangers, nous organisons des évents internes, nous sommes sur les salons avec Microsoft via les “Ask the Expert” via le programme MVP. Nous bénéficions du référencement Devoteam dans le CAC40. Cela fait une énorme différence avec les autres pure-players qui sont des PMEs… Faites la différence entres les différents acteurs, choissiez le dynamisme de Modern Applications by Devoteam. Venez tenter l’aventure ! Tentez votre chance. Site: https://lnkd.in/etPKZcg Vos contacts: Romain Kaninski, Maxence MAMY et Stanislas Wynen. hashtag#devoteamhashtag#microsofthashtag#cloudhashtag#technologyhashtag#mvpbuzz

L’ADN des Rangers

NET Azure Rangers, attractif pour les hauts potentiels

Les Rangers passent une partie de leur temps en mission dans les entreprises pour capturer et délivrer leur expertise. « On ne peut pas se prétendre expert si l’on ne va pas sur le terrain, si l’on ne mène pas des projets, rappelle François Merand. Mais en même temps, et c’est la nouveauté du concept, nous leur libérons du temps pour qu’ils puissent écrire leurs livres, communiquer, former des collaborateurs en interne et participer à l’écosystème de Microsoft ». Fonction intéressante s’il en est, propre à attirer les hauts potentiels. Mais ne devient pas Dotnet Azure Ranger qui veut. « Le critère d’entrée est très sélectif, confirme François Merand. Ils ont un rôle de coaching par rapport à bon nombre de collaborateurs dans d’autres societes. Nous leur demandons de cultiver leur expertise et de rayonner ».

Notre communaute des NET Azure Rangers se revendique de l’heritage des Rangers historiques de l’US Army et de leurs valeurs et de leur courage.

Competence. Courage. Sacrifice.

Meeting du 11 Avril 2019

Hier soir à Paris s’est réunie la Core Team des Rangers à savoir Keelan de Lyon et Pic de Paris. Il manquait notre président d’honneur François et notre star nationale JBB… et Cédric G. Note Rangers Laurent G. de Paris n’a pas pu se joindre à nous.

Après la remise à Keelan du goodies de Redmond, un stylo bleu Microsoft à $3.95 super joli, nous avons ouvert le bal au Murphy’s à Opéra. Nous avons continué à l’Hyppopo de Capucines-Bld des Italiens dans le 9e avec un St Emilion Grand Cru. Ensuite, nous avons fini au Gramont. avec un petit Rhum.

Nous avons évoqué les sujets suivants:

  • Le succès de la marque Rangers
  • Le MVP Summit 2019 à Redmond
  • Acté que nous avions besoin d’un blog, d’un wiki et d’une home page
  • Les nouveaux arrivants Rangers et les MVPs Microsoft
  • Les articles techniques en cours de rédaction et réalisés pour Programmez
  • Le come-back aux affaires du Président d’honneur ; la fameuse mission de Nantes…
  • Le futur meeting des Rangers de Lyon : Cédric T, JNB, LouisN, Cédric D et Keelan
  • Notre prochain meeting à Montparnasse chez JC avec JBB…

Le meeting s’est terminé à 1h30 AM. Bien.

Fait à Fontenay-sous-Bois, HQ des NET Azure Rangers LLC, le 12/04/2019

Anniversaire de Cédric Michel

Happy B, Cédric…

void hb()
{
    std::vector<std::string> Rangers = {
        "[MVP Developer Technologies] Anthony Giretti <anthony.giretti@gmail.com>",
        "[MVP Azure] Cédric GEORGEOT <cgeorgeot@e-novatic.fr>",
        "Cédric TUMELAIRE <tumelaire@gmail.com>",
        "Eva Delord <eva.delord@gmail.com>",
        "François Merand <fmerand@hotmail.fr>",
        "Jean Noel GERARD <jeannoel.gerard@prymarys.com>",
        "Jean - Baptiste Bron <diveandbytes@gmail.com>",
        "Keelan CLECH <keelan.clech@gmail.com>",
        "Michel Foucault <mmarsu@gmail.com>",
        "Alexis Delee <alexisdelee@protonmail.com>",
        "[MVP FoxProx] Frédéric Steczycki <frederic@steczycki.net>",
        "Guilhem Mares <g.mares@live.fr>",
        "Jean - Nicolas Berger <jnberger@sqlserver.fr>",
        "Jean - Remy Durafour <jr.durafour + dotnetrangers@gmail.com>",
        "[MVP Azure] Laurent Grangeau <laurent.Grangeau@gmail.com>",
        "Louis GERARD <contact@lgerard.com>",
        "Jean - Pierre Gervasoni <jean.pierre.gervasoni@gmail.com>",
        "Hamza Azzouz <hamza_azzouz@outlook.com>",
        "Alain Metge <alain.metge@hotmail.fr>",
        "Cédric Michel <cedric.michel@outlook.be>",
        "[MVP Azure] Cédric Leblond <c.leblond@libertysurf.fr >",
        "[MVP Azure] Cédric Derue <cedric.derue@gmail.com>",
        "[MVP Developer Technologies] Christophe Pichaud <christophepichaud@hotmail.com>"
        };

    std::for_each(Rangers.begin(), Rangers.end(), [](const std::string& ranger) {
        std::cout << "Happy B. une fois, Cédric Michel from " << ranger << std::endl;
    });
}

Cours gratuits sur les nouveautés Visual Studio 2019

visual_studio_purple-840x500Vous voulez connaître les nouveautés VS 2019 tout en restant chez vous? Sur le blog .Net MS j’ai trouvé ce passage intéressant, dont les liens sont extraits plus bas:

To help kick-start your experience with Visual Studio 2019, we’ve partnered with Pluralsight and LinkedIn Learning to bring you new training content. Pluralsight has a new, free, Visual Studio 2019 course (available until April 22, 2019). A path and skill assessment are also available, so you can dive right in. On LinkedIn Learning you’ll find a new course (free until May 2nd) covering the highlights in Visual Studio 2019.

https://go.microsoft.com/fwlink/?linkid=2084935

https://go.microsoft.com/fwlink/?linkid=2084757

Et si toutefois vous préférez réseauter en même temps, un meetup est organisé chez SOAT le 10 avril:

https://www.meetup.com/fr-FR/TechLabs-by-SOAT/events/259392196/

Dossier .NET Core 3 pour Programmez Juin 2019

La communauté des Azure NET Rangers est fier de vous annoncer que pour le magazine Programmez de Juin 2019, nous allons faire un dossier .NET Core 3 avec la participation de 5 Rangers:

  • Anthony : ASP.NET Core
  • Jean Pierre : WinForms, WPF
  • Hamza : C# 8
  • Cedric M : EF Core
  • Christophe : XAML Islands

 

RangersRegiment

Lancement de Visual Studio 2019

Hier soir s’est tenu le lancement de Visual Studio 2019 en live depuis Redmond, WA sur le campus Microsoft.

Les grandes nouveautés sont :

  • Amélioration du support Git
  • Support Azure DevOps et GitHub
  • Debugging Live Share entre Visual Studio et aussi Visual Studio Code !
  • Prise en main à distance de l’environnement de développement
  • Gestion d’assistance Intellicode avec AI intégrée
  • Nouveaux outils de recherche et de déplacement dans le code Visual Studio
  • Debugging en 64 bits separated process
  • Productivité C++ et compliance C++17
  • Nouveautés Xamarin Forms et Essentials

Fonctionnalités incontournables dans ASP.NET Core 2.2 WebApi: Validation

Introduction

La validation des entrées utilisateur est un scénario courant dans une application Web. Pour les applications de production, les développeurs consacrent souvent plus de temps et de code à développer que nous le souhaiterions. Lors de la création d’une WebAPI ASP.NET Core avec FluentValidation, il est important d’essayer de rendre la tâche de validation beaucoup plus facile que par le passé.

FluentValidation est une bibliothèque populaire .NET pour la construction de règles de validation fortement typées.

Configurer le projet

Télécharger le package Nuget FluentValidation.AspNetCore

PM> Install-Package FluentValidation.AspNetCore -Version 8.0.100

Ajouter FluentValidation dans Startup.cs

public void ConfigureServices(IServiceCollection services) 
{ 
   // mvc + validating
   services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1).AddFluentValidation();
}

Créer un validateur

FluentValidation propose plusieurs validateurs intégrés. Dans le prochain exemple, vous verrez comment en utiliser deux parmi toute une panoplie:

  • NotEmpty
  • Must (permet de créer un validateur customisé)

Création d’un modèle a valider

Exemple avec une classe User:

public class User
{
   public string Gender { get; set; }
   public string FirstName { get; set; }
   public string LastName { get; set; }
   public string SIN { get; set; }
}

Création du squelette du validateur

Notez que votre validateur doit hériter de la classe abstraite nommée AbstractValidator.

public class UserValidator : AbstractValidator<User>
{
   public UserValidator()
   {
      // Règles ici
   }
}

Création des règles

public static class Utilities
{
   public static bool IsValidSIN(int sin)
   {
      if (sin < 0 || sin > 999999998) return false;

      int checksum = 0;
      for (int i = 4; i != 0; i--)
      {
         checksum += sin % 10;
         sin /= 10;

         int addend = 2 * (sin % 10); if (addend >= 10) addend -= 9;
         checksum += addend;
         sin /= 10;
      }
         return (checksum + sin) % 10 == 0;
   }
}

Dans cet exemple, nous nous assurerons que FirstName, LastName et SIN ne sont ni nuls ni vides, mais également que le numéro SIN est un SIN valide.

Assemblage final des règles de validation

Voici maintenant le résultat final, après assemblage des règles dans la classe de validation:

public class UserValidator : AbstractValidator<User>
{
   public UserValidator()
   {
      RuleFor(x => x.FirstName)
      .NotEmpty()
      .WithMessage("FirstName is mandatory.");

      RuleFor(x => x.LastName)
      .NotEmpty()
      .WithMessage("LastName is mandatory.");

      RuleFor(x => x.SIN)
      .NotEmpty()
      .WithMessage("SIN is mandatory.")
      .Must((o, list, context) =>
      {
         if (null != o.SIN)
         {
            context.MessageFormatter.AppendArgument("SIN", o.SIN);
            return Utilities.IsValidSIN(int.Parse(o.SIN));
         }
         return true;
      })
     .WithMessage("SIN ({SIN}) is not valid.");
   } 
}

Déclaration et activation des règles dans le Startup.cs

public void ConfigureServices(IServiceCollection services) 
{ 
   // Validateurs
   services.AddSingleton<IValidator<User>, UserValidator>();
   // mvc + validatiion
   services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2).AddFluentValidation();
}

Manage your validation errors in Startup.cs

ASP.NET Core 2.2 nous permet de remplacer le comportement par défaut de la gestion de ModelState avec la configuration d’ApiBehaviorOptions. Nous disposons maintenant d’une alternative aux attributs MVC. Dans cet exemple nous configurons ApiBehaviorOptions pour renvoyer au client une réponse de type BadRequestObjectResult (Http 400) avec un objet contenant le code d’erreur, le message d’erreur global et la liste des erreurs rencontrées lors de la validation.

public void ConfigureServices(IServiceCollection services) 
{ 
   // Validators
   services.AddSingleton<IValidator<User>, UserValidator>();
   // mvc + validating
   services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1).AddFluentValidation();

    // override modelstate
    services.Configure<ApiBehaviorOptions>(options =>
    {
       options.InvalidModelStateResponseFactory = (context) =>
       {
          var errors = context.ModelState.Values.SelectMany(x => x.Errors.Select(p => p.ErrorMessage)).ToList();
          var result = new
          {
             Code = "00009",
             Message = "Validation errors",
             Errors = errors
          };
          return new BadRequestObjectResult(result);
       };
    });
}

Quand une validation échoue, cette partie du code est donc exécutée (ModelState est false).

Validation en action!

Nous y voilà! Voyons comment cela fonctionne maintenant avec une démo.

Il est très facile d’utiliser un validateur après sa création.
Il nous suffit de créer votre action qui prend en paramètre votre modèle à valider.
En raison du service de validation ajouté à votre configuration, FluentValidation détectera automatiquement votre modèle lorsque vous l’utiliserez dans une action et activera le validateur!

Exemple de Controller:

[Route("api/[controller]")]
[ApiController]
public class DemoValidationController : ControllerBase
{
   [HttpPost]
   public IActionResult Post(User user)
   {
      return NoContent();
   }
}

Tests avec Postman:

validation-with-fluentValidation-fails

Conclusion

C’était un exemple de la vie courante d’implémentation de la validation dans un WebAPI Core ASP.NET 🙂.
Le code source complet peut être trouvé ici.