Mon identité web (sites Web MVP Fr et en-US et blogs)

Pour présenter mes articles techniques (possibilité de télécharger les PDF), mes applications GitHub, mes bouquins et plus généralement mes activités communautaires de MVP, j’ai fait deux sites web:

Ils ont presque la même façace. Voici le site en français. On y trouve :

NET 5, la plateforme unifiée

NET 5 arrive en fin d’année et c’est une révolution dans le monde du développement Microsoft car la plateforme adresse tous les domaines : du desktop au web, du gaming à l’IoT, du Cloud au Mobile :

NET 5

Le développement selon Microsoft

Microsoft envoie des messages parfois complexes sur le développement. En voici les fondamentaux :

  • La technologie utilisée est le Microsoft .NET Framework
  • L’environnement de développement est Visual Studio
  • Le langage phare est C#
  • Le développement mobile se fait avec Xamarin
  • Les API pour le Desktop sont WinForms, WPF, UWP et WinUI
  • Les API pour l’accès aux données sont ADO.NET et Entity Framework
  • La technologie Web est ASP.NET MVC et ASP.NET Web API
  • Microsoft décline .NET en .NET Core et ASP.NET Core pour Windows, Linux et MacOS
  • Le futur du développement est le Cloud Azure et l’intégration des services managés dans les applications

Le support XAML est maintenant inclus dans Windows 10, en natif. La librairie WinUI 3.0 contient les contrôles XAML natif Windows 10 pour l’ensemble des versions de Windows 10 (de 16xx à 1909) :

WinUI 2
WinUI 3

Avec NET 5, il n’y a plus NET Framework et NET Core, tout est fusionné. Il sera temps car sinon c’est la confusion. Microsoft indique que les nouveaux développements doivent se faire en NET Core et les développements existants doivent rester en NET Framework.

Mes résolutions Microsoft pour 2020.

(EMail envoyé à mes anciens collègues Microsoft)

Amis Softies,

Voici mes bonnes résolutions pour 2020…

Je vous fais une annonce: je souhaite retravailler pour Microsoft et plus particulièrement pour Corp. Cela passera peut-être par du Services avant, je ne sais pas mais j’y travaille. Comme je le disais à mes copains Alain et les zEric, travailler chez Microsoft était un rêve mais qui s’est arrêté brusquement. Je ne reviendrais pas sur cet épisode et les raisons de cet arrêt, la page est tournée.

Depuis que je suis MVP, j’ai accès à pleins de choses et c’est génial. Microsoft est the number 1 software company, ça ne fait aucun doute. Vous y travaillez et vous le savez. Cette entreprise est magnifique, les produits sont nickel et surtout la technologie est fantastique. Qui ne se prend pas de passion pour un SDK ou un produit ? Notre métier est fait de passion, de rire et de larmes. Les échecs d’aujourd’hui seront les succès de demain.

Quand je lis le code de Windows, c’est complexe mais c’est beau. Le code C++ contient quelque chose que ne possèdent pas les autres langages. Le style Microsoft à base de COM est très spécial. Le mix entre les types Windows (COM strings, VARIANT, UINT, DWORD, UNICODE LPWSTR, wchar_t et char *) et les types C++ (wstring et string) fait que le code est fait avec plusieurs styles. On trouve le code business fait la plupart du temps en composants COM ou en code C++ ISO et la glue spécifique en API Win32. Don Box disait « COM is love ». C’est vrai. Une coclass d’un composant COM, c’est une classe C++. On a une classe en mode shared_ptr, un ctor ambigu AddRef, un dtor ambigu Release, un cast QueryInterface pour obtenir les différentes interfaces (une classe C++ peut implémenter plusieurs interfaces et peut hériter de plusieurs classes contrairement à C# qui lui ne peut hériter que d’une seule classe).

Dans le code de Windows Terminal, il y par exemple le code WinUI du cadre (tabbed et Window et popup menu et menu) écrit en pure Windows API et XAML Islands, le code du cmd avec son char buffer engine, son interpreter et le code Windows ancestral réécrit en moderne C++. Le code est amélioré. C’est comme un bon Bourgogne, il se bonifie avec le temps. Le code C++98/03 est amélioré en code C++11/14 et progressivement ce Modern C++ fait que le code est nickel, il est beau ! Par exemple, j’ai fait une contribution avec PR (pull-request acceptée le 19 June 2019 https://github.com/microsoft/terminal/pull/1161 ) qui consistait à mettre un shared_ptr sur un raw pointer et à faire la plomberie qui va avec pour y jouer avec une référence derrière. La mémoire est libérée automatiquement via le pointeur intelligent (smart pointer). C’est beau. Il y a plein de TODO et FIXME dans le code pour améliorer le code legacy Windows. J’ai vu que cela fait 4 ans que le code du CMD est refactoré et amélioré. C’est peut-être ma mémoire qui me trahie mais je crois que c’est ça ; vu dans les commentaires de code. On ne se rend pas compte de la puissance des outils de Windows. Rien que l’archive de code GitHub du Windows Terminal (https://github.com/microsoft/terminal) fait 9.3 MB. Il y en a pour 6.3 MB de fichiers .h et .cpp. C’est pas mal déjà. Enorme pour un seul individu à comprendre. Le CMD est un outil complexe qui va au-delà d’un simple dir c:\ ! C’est un pilier de Windows. Nos admins système le savent bien.  Je compte bien continuer de m’investir encore un peu sur Windows Terminal car c’est passionnant. C’est ma première résolution.

Ensuite, il y a le CoreCLR (https://github.com/dotnet/runtime) qui est le runtime NET. Là je m’y mettre à fond car c’est une partie de mon avenir qui se joue la dessus. Je vais apprendre et potasser la bête pour bien comprendre comment ça marche. L’archive fait 99MB et unzipped ça fait 777MB. C’est énorme mais bon, y a les tests unitaire & co mais bon le code C++ fait environ une taille de 76MB sans les tests. Autant vous dire que c’est énorme de chez énorme. OK Windows fait 1 GB de source code mais la on parle juste du folder Windows\NET Framework mscoree.dll et compagnie… avec les DLL de la BCL system.xxx. & co. J’en ai pour 3 mois à naviguer, explorer et comprendre le code. C’est ma seconde résolution. Ensuite, je tente l’Issue… Faut que je me trouve un truc facile au début, un FIXME ou TODO basic pour rentrer dedans.

Ensuite il y a le code de Windows via le NDA Shared Source Initiative et là, c’est mon kiffe régulier : lire le code source de Windows. Pour ceux qui ne connaissent pas le C++, c’est l’occasion de s’y mettre. Achetez mon livre « Aide-Mémoire C++ » et demandez à avoir accès au code source de Windows et admirez la qualité du code des Ingénieurs Windows. J’ai énormément de respect pour le code de Windows. Depuis que j’ai mis la main sur le leak Windows NT4 et Windows 2000 (2 GB de source code) dans les années 2000/2002, j’ai passé de nombreuses heures à étudier ce code. Le kernel, les dlls RTL NTUser & co, le Shell, le File Explorer. C’est un roman de Star Wars en 350 Volumes. C’est beau. C’est complexe mais à la fois subtile et organisé. Putain, c’est bon ! C’est pour cela que je voue une admiration sans faille à Bill Gates. Windows est un fleuron de technologies. OK des fois c’est du bon vieux C/C++ mais ça marche vite et bien.

Quand j’ai découvert Windows Internals (7th edition Part 16th Edition Part 16th Edition Part 2). dans les années 2000, j’ai vu la vierge car cela m’a aidé à comprendre les sources Windows puis quand j’ai découvert les Windows Protocols (https://docs.microsoft.com/en-us/openspecs/protocols/ms-protocolslp/9a3ae8a2-02e5-4d05-874a-b3551405d8f9), ça a été le graal. Quand j’étais au Services en 2017, j’ai été surpris, les gens ne connaissent pas ça. La culture du NET fait que les gens sont très peu cultivés sur Windows alors que c’est le fleuron de la companie. OK, maintenant y a Azure mais bon Azure c’est Windows Server et Service Fabric et tout ça c’est Windows. Je fais abstraction de la partie Linux… Chaque Microsoftie devrait se voir offrir le livrer Windows Internals pour son arrivée dans l’entreprise !

Bref vous l’aurez compris, mon objectif c’est de bosser pour Corp. J’y travaille. Je vais trouver un moyen de tirer mon épingle du jeu via GitHub et mes relations avec l’équipe Visual C++ aux US. Mon pote Simon Brand est bien advocate C++ et vie pourtant à Edinburg, UK. La France c’est très spécial… Le C++ est limité. Les entreprises pour Services font, pour le développement avec les Technologies Microsoft, du C# / NET.

Bonne Année à toutes les copines.

Bises à mon mentor EricV. Bises à EricMitt. Bises à Alain.

Bises à Agnes , ma Directrice de Projet HEXV2 de OBS en 2006…. On se marrait bien avec GGray, PCP, Nicolas. Je suis toujours en relation avec les ex-collègues de OBS pour qui on devait remplacer leur système Linux (700.000) BAL POP/IMAP par Exchange Server via HMC… On se revoit régulièrement autour d’une bière avec Gael Roualland, le petit génie de OBS qui nous donnait du fil à retordre et ses potes de l’époque. Depuis que je suis passé aussi à Debian Linux et Ubuntu (C++ oblige), ils m’acceptent mais me chambrent en me disant que Microsoft est mon meilleur ennemi façon je t’aime moi non plus. Ils me disent de tout plaquer de builder que sur Linux et que j’aurais plus de succès qu’avec Microsoft… Je ne suis pas d’accord. 25 ans de C++ Microsoft, ça ne s’abandonne pas, au contraire, ça se monnaie. Et quand on aime, on ne compte pas ses efforts.

Christophe | www.christophepichaud.com

Mon Prochain Livre sur C#/NET

Prévu pour Juillet 2020, mon prochain livre sera sur C#/NET, à savoir le langage C# 8, NET Framework et NET Core. Mon éditeur est DUNOD.

Le projet est né sur une constatation simple: il n’existe pas beaucoup de livres en français sur C#/NET. La plupart des livre sont en anglais… Avec mon expérience d’écriture d’articles techniques pour la revue Programmez, je me lance dans le défi d’un deuxième livre en 2020. Après “Aide-Mémoire C++ Moderne”, voici “Aide-Mémoire C++/NET”.

Pour moi, ce livre est très important. Il est directement en lien avec mon activité professionnelle, à savoir le conseil en entreprises sur le Microsoft NET Framework (et NET Core). Pour un client, avoir un consultant qui fait autorité, c’est un gage de sécurité. Cela ouvre des portes et pour ma société (Infeeny, groupe Econocom), c’est un moyen de communiquer sur l’expertise de ses consultants. Titulaire du titre MVP Developer Technologies depuis 2 ans, ce livre fera partie de ma contribution au programme MVP pour être éventuellement renouvelé. C’est une motivation supplémentaire.

Voici la couverture que j’ai imaginé:

Ce livre sur C#/NET sera orienté comme un livre de cuisine, un véritable cookbook. Il sera truffé d’exemples de code pour rendre la lecture facile et ludique. Le but est d’être un expert de terrain avec les trucs et astuces essentielles. Cela ne sera pas un pavé de 1000 pages (pour caler une armoire) mais plutôt un ouvrage de 300 pages, dense et concis.

L’important, c’est de maîtriser le langage C# 8. Ensuite, il y a le Framework alias la BCL pour Base Class Library. On va aborder les grands thèmes comme:

  • les classes collections
  • le multithreading
  • la gestion des documents XML et JSON
  • l’accès aux données ADO.NET
  • LINQ
  • le développement Windows avec Windows Forms
  • le développement Web API avec ASP.NET et ASP.NET Core

Le livre fait aussi un focus sur le système CLR (le Common Language Runtime alias le runtime) et WinRT.

Certains thèmes ne seront pas abordés dans le livre:

  • WPF
  • Xamarin

Pourquoi ne pas parler de WPF ? WPF ne fait pas autorité dans le monde NET. WPF est l’objet de plusieurs controverses et le monde XAML n’est pas adopté par l’ensemble des développeurs NET. On préférera aborder la programmation Windows avec Windows Forms, plus standard et plus répandue car elle représente le monde traditionnel Windows avec ses contrôles GDI, sa rapidité et son essence.

Xamarin est aussi un sujet spécial. C’est réservé aux applications mobiles et fait l’objet d’ouvrages spécialisés qui dépassent le cadre de mon livre.

En fin de livre, j’aborderais les librairies tierces et les Frameworks comme DevExpress, SyncFusion ou Infragistics.

A suivre…

Développer comme un pro en France, c’est possible

En tant que développeur C/C++/NET et plus généralement Microsoft, il est possible de participer à des projets open-source tout en restant en France. Il n’y a pas besoin de s’expatrier pour participer à des projets complexes. Exemple:

  • Windows Terminal
  • Microsoft NET CoreCLR
  • Microsoft NET CoreFx
  • Windows UI

Le portail GitHub.com et sa section Microsoft contient des dizaines de projets. De plus, il existe ailleurs de nombreux autres projets open-source de classe internationale comme :

  • Google Chromium
  • Mozilla Firefox

Il y a de quoi étudier et contribuer. Vous allez me dire, ah oui mais il faut du temps pour rentrer dedans ! Ben oui, tout à un prix.

Dans le cadre de mon partenariat avec Programmez, je vais essayer de faire un ou deux articles sur les contributions open-source de ce style. Pour mon MVP, le plus important pour moi est de creuser le projet Microsoft NET CoreCLR. Pour Microsoft c’est un projet important et cela peut permettre d’avoir une bonne visibilité de contribuer. Il y a des étapes à franchir pour NET et la roadmap va nous mener de NET Core 3 à NET 5.0 en 2021. Il va y avoir des évolutions.

L’avantage des projets open-source C++ tient dans le fait que les librairies third-party ne sont jamais deprecated. Les projet grandissent et avancent. Il n’y a pas de Marketing qui impose telle ou telle feature ou telle lib qui change tout. Le langage ISO C++ évolue, la STL évolue mais les fondamentaux sont toujours là. Le style “Modern C++” s’est imposé partout et c’est super pro.

En comparaison dans le monde C#/NET, avant il n’y avait pas Linq, avant il n’y avait pas async/await. Quand vous regardez le code des nouveaux projets .NET, c’est n’importe quoi avec leur async/await. Le Marketing a essayé de nous faire croire que async/await était la panacé car ça exploitait mieux la batterie. C’est une arnaque intellectuelle.

Rappel sur cette arnaque: Pour vendre des tablettes Surface sous ARM, Microsoft nous explique qu’il faut économiser la batterie et que les programmes actuels consomment trop de CPU donc de batterie et que la solution c’est WinRT et les API async. Moralité, on nous bride la possibilité de faire du Win32 en ARM. On a vu le succès de l’effet. Pas de tablettes à la vente, fiasco de WinRT. Ensuite, on nous dit disponibilité que des applications du store mais pas C++. Donc il n’y a que des applications de misère… Résultat: Le fiasco, again. Ensuite on ouvre à Win32. Trop tard, le store et WinRT sont à la ramasse. L’utilisation des API WinRT est de 2% dans les applications Windows. WinRT étant un subset des API Win32 qui n’apportent rien et qui est async/await avec un modèle d’état fini mêlé de threading et de blocage qui est pénible à utiliser et qui ne résout en rien l’usage de la batterie. Oui pour les programmes de bourrin en C# mal écrit, ça peut poser problème mais pour les vrai développeurs C++, on sait ce qu’on fait, on n’a pas besoin de créer un thread à chaque fonction. On sait faire pipi sans en foutre partout sur la cuvette !

Moralité, les petits jeunes y croient et développe de la m…. en barre. Ils créent des fonctions qui créées 3 strings qui se battent en duel et retourne une Task et la méthode est marquée async/await ! C’est n’importe quoi. La programmation C#, c’est devenu un truc très bizzard. Au niveau de la plateforme, les CoreFX et le CoreCLR c’est nickel mais les développeurs C#/NET sont instables. Ils utilisent les nouveautés du langage a chaque nouvelles évolutions, il changent de librairies de bases tous les ans, un coup c’est ADO.NET, un coup c’est Dapper, un coup c’est EF, un coup c’est EF Core ; ils se laissent balader par le Marketing et ne réfléchissent pas par eux-mêmes. Ils font du code jetable qui est réécrit à chaque changement de framework ou de Visual Studio. Y a rien de pérenne. Bref, la roadmap NET va secouer le cocotier j’espère. A croire que ce n’est pas assez technique et compliqué. Il sont besoin ce complexifier les choses. Je vois énormément de développeurs C# qui sont frustrés car il n’y a rien à optimiser en C# ou si peu. Il sont sur une boite noire. Ils ne voit pas l’OS, le processeur. Il ont un Framework et ils jouent avec. Venez faire du C/C++, chez nous on build on the metal, on n’a pas besoin de complexifier le code pour se rendre intéressant.

Pour bien mener sa barque en développement C#/NET, il ne faut pas écouter le marketing et se poser les bonnes questions:

  • ais-je besoin de cette Nème nouvelle fonctionnalité du langage C#
  • ais-je besoin de mettre mon logiciel en risque pour utiliser la dernière libraire à la mode ?
  • qu’elle est l’intérêt de mettre à niveau ces satanés paquets Nuget qui sont tous plus incompatibles les uns que les autres avec leur dépendances foireuses ?
  • est-ce utilise que je mette le doigt dans le monde UWP quand on sait le succès (c’est de l’humour) que cela a ?
  • on me dit que l’avenir c’est le cloud ? Dois-je tout casser et tout réécrire ?
  • j’ai une interface UI faite en WinForms ; on me dit de passer à WPF ; ça casse tout. Dois-je y passer ?
  • j’ai une application UI WinForms ou WPF qui fonctionne nickel. On me dit que Angular c’est la mode ; dois-je y passer ? Angular c’est du TS/JS.

Pour toutes ces questions, il faut s’entourer de gens d’expériences qui sauront pour éviter les pièges. Il faut des experts en développement logiciel : des Architectes.

Le développement logiciel, c’est un métier.

Applications multi-plateformes ? HOWTO ?

Pour développer des applications multi-plateformes, il n’y a pas cinquante choix possibles, il n’y en a qu’un seul qui est gratuit et performant : c’est C++.

Seul le C++ permet de tirer partie des dernières nouveautés des SDK Windows, Linux, Android et iOS car le système et son environnement sont faits avec. L’avantage de C++ est qu’il <<build on the metal>> : il n’y a pas plus rapide. C++ tire partie de l’architecture logicielle des systèmes d’exploitation et matérielle des derniers processeurs x86, x64 et ARM. Cela fait quarante ans que les optimiseurs de code C++ garantissent la meilleur qualité de code possible.

C est le nouvel assembleur. C++ permet l’orientée objet : abstractions, héritage et polymorphisme (fonctions virtuelles), surcharge d’opérateurs, templates. Avec sa librairie STL (Standard Template Library) et conjointement avec une librairie comme Boost (boost.org), le C++ possède une boite à outil universelle qui gère les strings, containers (collections), algorithmes, les I/O, les threads, les smart pointers, les communications, etc.

Passez le pas. Installez Visual C++ sous Windows, GCC sous Linux, XCode sous Mac et partagez du code métier. Réalisez des interfaces graphiques riches et tirez partie du meilleur langage de développement qu’est C++.

Vous allez me dire il existe des solutions hybrides comme NET ou Java ? Ces solutions sont un ensemble de mille feuilles lourds et lents qui ne permettent pas de créer des applications de classe mondiale. En automobile, y a les Fiat 500 et les Ferrari. A prix égal (voir moins cher), vous prenez quoi? Y a pas photo…

Dossier Azure eShopOnContainers 2019 pour Programmez

En partenariat avec Programmez, il est prévu de faire un dossier sur la sample officiel Microsoft eShopOnContainers disponible sur https://github.com/dotnet-architecture/eShopOnContainers :

Sample eShopOnContainers de Microsoft

Il est décidé de faire une introduction à Docker (Septembre 2019) puis de faire des dossiers sur les architectures Micro-services, les APIs management, le code, le code, le code !

Stay tuned.

Le renouvellement des MVP…

Nous attendions tous la date du 1er Juillet avec attention car nous avons su qui était renouvelé MVP ou pas… C’est un moment toujours un peu angoissant de savoir si ses contributions seront suffisantes pour Microsoft pour obtenir de nouveau le titre de MVP.

Une fois l’effervescence retombée, nous reprenons chacun le flot de nos vies respectives. Etre MVP est une distinction qui marque une année de contributions pour une communauté technique Microsoft. Cela demande du temps et de l’investissement. Souvent, les soirées sont longues et les nuits sont courtes et il n’est pas rare de vouloir faire un break de temps en temps.

Continuer à vouloir être nominé MVP demande de l’énergie et surtout du temps. Il faut soit coder, faire des metups & events, faire des podcasts, des articles techniques, du blogging : cela prend du temps. Cela se fait souvent au détriment de la vie familiale ou des loisirs. Il faut être vigilent et conserver à l’équilibre la balance du “personal/profesionnal life” ! C’est un challenge.

Comme on dit entre nous, MVP un jour, MVP toujours. Nous faisons partie du Programme et nous en sommes fier. Grâce à cela, nous rayonnons et savons tirer notre épingle du jeu dans un monde professionnel en constante mutation avec un facteur de complexité en perpétuel expansion.

En France nous sommes 111 MVP dont 31 MVP Developer Technologies et 21 MVP Azure (source mvp search). C’est un honneur de faire partie de cette communauté.

Merci Martine T.