Retour sur 2019, articles et posts

Le post “Comment Devenir un Expert Microsoft” est certainement celui qui a eu le plus de succès. Je vous joint le dossier complet paru dans Programmez n°234 de Novembre 2019. Download sur : http://netazurerangers.com/Articles/Article234.pdf

Le post “Comment devenir un Expert Windows” a aussi eu sont petit succès. Il est prévu d’en faire un article pour Programmez. A suivre.

Le post “Code review le diable se cache dans le détail” aussi a des visiteurs.

Le poste “C++ unsafe et unsecure ?” a aussi eu de l’impact…

Liste de mes derniers articles dans le magazine Programmez :

  • N°234: Comment devenir un expert Microsoft ? – PDF
  • N°233: Windows Subsystem for Linux 2 (WSL 2) – PDF
  • N°232: Docker et Containers : Introduction et Concepts – PDF
  • N°231: Reverse Engineering et analyse de virus – PDF
  • N°230_1: XAML Islands : incorporez les contrôles XAML Windows 10 dans vos Apps WinForms et WPF – PDF
  • N°230_2: Introduction à ASP.Net Core 3.0 – PDF
  • N°229: C++ et Containers Docker sur Azure – PDF
  • N°228: LMDB : la base NoSQL la plus rapide du monde – PDF
  • N°227: Détection et reconnaissance faciale avec OpenCV4 en C++– PDF
  • N°226: Rootkit Partie II : Module Command & Control – PDF
  • N°225: Rookit key Logger – PDF
  • N°224: Space Invaders 1978 en C/C++ avec SFML – PDF
  • N°223: Windows Le Multithreading en C/C++ – PDF
  • N°222: Linux Le Multithreading en C++ – PDF
  • N°221: Au coeur d’un Service Windows NoSQL – PDF
  • N°220: Créer un service Windows – PDF
  • N°218: Migrer son code C/C++ en 64 bits – PDF
  • N°217: Les Tests en C++ – PDF
  • N°216: La Programmation Orientée Objet en C++ – PDF
  • N°215: Utiliser shared_ptr<T> en C++ pour la gestion des ressources – PDF
  • N°214: Développez un IDE en C++ Partie II – PDF
  • N°213: Développez un IDE en C++ Partie I – PDF
  • N°212: Un serveur REST Web API en C++ – PDF
  • N°211: Pourquoi C++ en 2017 ? – PDF

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

C++ unsafe et unsecure ?

Mes collègues du monde Microsoft et autres me disent que C++ est dépassé, trop difficile, trop vieux, trop dur à maîtriser et y en a même qui me dise qu’il est unsafe et unsecure !

Je rigole.

Si C++ était porteur de tous ces défauts, Microsoft ne ferait pas 95% de ces produits avec. Je vais revenir sur unsafe et unsecure car c’est très intéressant. Mais avant un rappel: TOUT CE QUE VOUS AVEZ SUR VOS PC et MAC EST FAIT EN C++. Windows, Office (Word, Excel, PowerPoint, Outlook), IE, Chrome, VLC, Notepad++, Calc, MSPaint, Photoshop, File Explorer, Process Explorer, etc…

Pour vendre .NET le Marketing a essayé de décrédibiliser C++ car trop riche, trop puissant et qui n’a pas besoin de publicité ni de marketing, lui. Dans les années 2000, le marketing a essayé de vendre l’idée qu’un langage qui manipule finement la mémoire est susceptible de planter et que la panacée c’était le Garbage Collector. Ce raisonnement est une arnaque intellectuelle.

Ce n’est parce que un langage comme C ou C++ permettent de manipuler la mémoire finement à l’octet près que cela signifie plantage ou corruption de mémoire. Le Marketing, qui est un contingent de personnes qui sortent d’écoles de commerce ne connait rien à la technique et donc ces gens font des raccourcis grossiers. Il faut le dire.

Pour ceux qui sont curieux, la machine virtuelle NET ou CLR (Common Langage Runtime) est faite en C++ donc voilà, la boucle est bouclée. Si C++ était si pourri que ça, le CLR ne serait pas fait en C++. Le garbage collector et le JIT non plus ! Le problème c’est que NET doit luter contre un adversaire qui était là avant lui, à savoir Java et que la concurrence fait rage. Java est beaucoup plus implanté en entreprises que NET et cela malgré des milliards investis en marketing et publicité.

Donc je pose la question: est-ce que d’essayer de décrédibiliser C++ a été une bonne méthode pour vendre NET au monde des développeurs ? Je ne crois pas. C++ est standardisé à l’ISO et compte des millions de développeurs. Le langage C++ n’a pas besoin de publicité, c’est le langage de l’industrie, du médical, de l’édition logicielle, des jeux, etc. C++ est là depuis 40 ans et s’est renouvelé en profondeur. Ce n’est plus le C++ à Papa, le fameux C++98 ou C+03. On est passé au C++ Moderne, celui qui libère la mémoire automatiquement via les pointeurs intelligents ou smart pointers, celui des lambdas, celui de la move semantic. Le Marketing n’en parle pas, bien sur… Le marketing ce n’est pas des mathématiques, ce n’est pas scientifique et c’est pour cela qu’il faut s’en méfier.

Dans le domaine de la conception logicielle, il ne faut jamais croire le marketing et toujours s’en remettre à un raisonnement scientifique. Il faut tester les technologies et se faire sa propre opinion et toujours être factuel.

Moi j’ai accès au code source de Windows et tout est fait en C/C++. C’est du C++ moderne et c’est clean. Windows sera toujours écrit en C++.

La dernière news du moment c’est de pousser Rust comme langage kernel pour résoudre les problèmes mémoire. C’est un faux débat car le kernel comprend un Memory Manager (mm) qui gère la mémoire virtuelle et seule C++ permet d’écrire un tel module. Certains chercheurs n’ont aucune connaissance des systèmes d’exploitation et essaient de faire le buzz autour de Rust avec une démarche marketing… ça y est, ils remettent le couvert. Laissons les parler, Microsoft ne réécrira jamais Windows en Rust. Il y a des millions de ligne de code. Et contrairement à ce que disent les journaux pour les managers comme 01 Informatique, Microsoft ne réécrit pas les OS from scratch. Cela se saurait. Microsoft fait évoluer Windows depuis 25 ans. Et c’est du C++. N’en déplaise au Marketing.

Les grands logiciels sont faits en C++. Un Nième exemple ? Chrome et NodeJS. On ne peut pas saluer la révolution JavaScript sans penser à C++. NodeJS c’est du pur C++ et Chrome aussi. Microsoft en a fait son nouveau browser avec Chromium. Chrome est un logiciel (browser) qui équipe des milliards d’ordinateurs et c’est rapide, fiable et puissant. Vive C++ !

C++ RENAISSANCE

POWER AND PERFORMANCE

“THE WORLD IS BUILT ON C++”, Herb Sutter.

Envoyez moi vos commentaires sur mon email: christophep@cpixxi.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…