Comment devenir un Expert Docker/Kubernetes dans le monde Microsoft ?

Ce post part d’une réflexion relatée à mon boss et à mes anciens collègues de différentes sociétés suite à la réception d’une newsletter Microsoft Azure….

Microsoft nous spam avec kubernetes… Y a pas à dire, Microsoft s’est converti à k8s.

En tant que MVP (Most Valuable Pipiche), je vous donne un feedback from the field sur Docker/Kubernetes. On m’a poussé à apprendre Docker & Azure en 2017 chez Neos-SDI et j’ai galéré… Mais ça a changé ma vie depuis 3 ans.

Après des semaines d’expérimentations avec ses choses-là (Docker, Azure et maintenant Kubernetes) , je suis arrivé à un constat : on a du boulot pour 10 ans sans forcer. Et donc qui dit boulot du business !

Par contre, le challenge c’est de faire évoluer les gens et là, ça va changer les habitudes des Devs NET traditionnelles. Comme disait Aimé Jacquet, sélectionneur de France 98, « Faut que tu muscules ton jeu sinon tu vas au-devant de sévères déconvenues ! ».

NET pour Windows, c’est mort. Faut faire de l’Azure, du Linux, du Docker/Kubernetes.

La recette à Pic :
Il faut vous mettre aux architectures micro-services (View on the web, Download pdf)
Il faut que vous maitrisiez la modernisation des applications .NET vers Azure (Download pdf)
Il faut faire des applications Web Modernes avec ASP.NET Core  et Azure (View on the web, Download pdf)
Il faut mettre en éveil l’Architecte qui est en vous:
Il faut regarder les samples officiels Microsoft comme eShopOnContainers, eShopWeb, SmartHotels360 et décortiquer la doc
Récupérer le code sur GitHub:
https://github.com/mspnp/microservices-reference-implementation
https://github.com/dotnet-architecture/eShopOnContainers
https://github.com/dotnet-architecture/eShopOnWeb
https://github.com/microsoft/SmartHotel360

Synthèse :

La solution est multi-plateformes (Windows, Linux) et multi-technologies:

  • Shipping/Delivery est en ASP.NET Core Web API avec support Redis
  • Shipping/DroneScheduler est fait en ASP.NET Core Web API avec support CosmosDB (ils ont pas pu s’empêcher…)
  • Shipping/injection est fait en Java/springframework
  • Shipping/package est fait en TS/node avec support MongoDB

Il y a le dev et le Ops : le YAML & co.

Le code des DockerFile est dense (limite complexe)

=> Il faut former les gens à Docker : c’est indispensable. Docker/Windows, Docker/Linux => mettre le paquet sur Docker

  • On peut d’ailleurs se servir de ce sample training officiel Docker/K8s.

Microsoft demande aux développeurs d’avoir des skills :

  • Windows, Linux
  • Docker, Kubernetes
  • Node, TS, Java, C#
  • MongoDB, Redis, CosmosDB

Le monde est de plus en plus complexe. Qui comme moi va passer son week-end à lire des books pour se former… ? Tout le monde n’est pas passionné. La barre est haute au niveau des skills .Je suis conscient que cela va nous donner du boulot pour les 10 ans à venir par contre la question reste posée : (hier, j’ai vu 2 cv asp.net qui m’ont pas fait rêver…) => on en fait quoi de ces gens-là ? Déjà que quand tu leur dit arrêter de faire EF, ils couinent…

On va leur demander de faire autre chose que du Web API bête et méchant : on leur demande d’être des architectes et de vrai développeurs avec un mindset open. Fini de jouer…

La clé de tout ça : la formation. Il est difficile de recruter des gens prêt à l’emploi : c’est très rare. Ils sont déjà en poste ou coûte très cher. Il faut former les gens. C’est la clé.

Mon avis personnel :

Aujourd’hui, tout existe, repos GitHub, Microsoft Learn, Microsoft Doc, les books gratuits MS Press, ceux qu’on rippe, ceux qu’on achète : on a tout ! La Technologie marche bien. Ce n’est pas le problème. Mais le problème c’est l’humain. Il faut faire prendre la mayonnaise, le faire adhérer, lui faire prendre conscience que c’est son intérêt d’upgrader ses skills.

Ça va être long et douloureux. Déjà que pour faire du Windows Server/IIS/SQL Server, le développeur Microsoft standard est léger… alors là, avec du Docker, Azure, NET Core, Linux, je suis pessimiste. On va ramer. On va essayer.

Informations technique :

Regardons le code du service Delivery, c’est pas dur :

Regardons le code que GetAsync :

On a un wrapper Redis : c’est le assuré via le package Nuget StackExchange.Redis

IDatabase est le wrapper Redis :

La conclusion de ce post est la suivante:

Formez vous à Docker/Kubernets, c’est l’avenir. Utilisez les samples de référence comme canevas de départ dans vos projets.

La newsletter Microsoft du jour: Lien: https://docs.microsoft.com/en-us/azure/architecture/reference-architectures/microservices/aks

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

Comment devenir un Expert Windows ?

Cet article est la suite de Comment devenir un Expert Microsoft ?(http://netazurerangers.com/blog/comment-devenir-un-expert-microsoft/)

Windows est le fleuron technologique de Microsoft depuis 25 ans. Vous allez me dire, oui mais maintenant il y a Azure. OK mais Azure c’est quoi ? C’est ; si je fais abstraction de la partie Linux; Windows Server et Service Fabric… et ça, c’est Windows. C’est du C/C++. Et oui, encore ! Y a pas de secret. ça doit marcher vite et bien. Cela doit être fiable, robuste rapide et sécurisé.

Dans un de mes derniers post “C++ unsafe et unsecure ?” (http://netazurerangers.com/blog/c-unsafe-et-unsecure/), j’explique pourquoi C/C++ est le meilleur et pourquoi Microsoft fait 95% de ses produits avec. Microsoft est la société n°1 de l’industrie logicielle. Ce n’est pas une régie publicitaire comme Google ou Facebook, c’est de la Tech pure jus. Microsoft vend des produits et du Services. Bref passons…

Comment devenir un expert Windows ? La question est posée. Premièrement, on se renseigne sur les principes du système d’exploitation via Microsoft Docs (ex: MSDN LIbrary) sur https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/overview-of-windows-components

Ensuite, on lit le passage sur le mode User et le mode Kernel via https://docs.microsoft.com/en-us/windows-hardware/drivers/gettingstarted/user-mode-and-kernel-mode

A partir de là, on connait l’architecture de base de Windows. maintenant, on attaque les éléments sur système d’exploitation à savoir le kernel et le Scheduler de threads. Windows ordonnance des threads, Linux ordonnace des processus. Ces deux systèmes ne fonctionnent pas de la même façon. La doc sur les Processes & Threads est ici : https://docs.microsoft.com/en-us/windows/win32/procthread/about-processes-and-threads

Ensuite on passe à la pratique, comment créer un thread, un processus, atteindre la fin, etc. la doc des API appelée aussi doc de référence est ici: https://docs.microsoft.com/en-us/windows/win32/procthread/process-and-thread-reference

Les exemples les plus faciles sont visualisables via https://docs.microsoft.com/en-us/windows/win32/procthread/process-and-thread-functions#process-and-thread-functions et plus particulièrement la fonction CreateThread: https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createthread?redirectedfrom=MSDN et son exemple: https://docs.microsoft.com/en-us/windows/win32/procthread/creating-threads

Pour tester cela, il faut installer Visual C++ disponible dans Visual Studio 2019 par exemple, Community Edition ou Pro 30 day trial. Si vous avez touché de l’argent de Papa Noël, achetez les livres suivants:

  • Windows via C/C++ de Jeffrey Richter et Christophe Nasarre

Moi j’ai acheté Inside Windows NT en 1992 et j’ai eu le virus.

Windows c’est énorme. C’est puissant. Vous lisez le livre Windows Internals et vous aurez la vision ; vous comprendrez comment marche l’OS. C’est très intéressant et vous n’aurez aucun mal à comprendre les nouvelles technologies Microsoft avec ça. Microsoft NET, le CLR, la BCL, c’est fait avec un peu de C++ et du C#/PInvoke sur l’API Windows alias Win32. Regardez le code sur GitHub du CoreCLR (https://github.com/dotnet/runtime) et du CoreFX.

Il y a des légendes urbaines selon lesquelles Microsoft réécrit Windows from scratch; ça c’est pour les managers et le 01 Informatique. Pour les techniciens, la vérité c’est que Windows est assis sur le même code et évolue depuis 25 ans. Le code est amélioré et régulièrement remanié en C++ Moderne. Je peux vous le certifier car j’ai le code source de Windows NT 4, Windows 2000 et accès au dernier code source de Windows 190x. Le code est fait en :

  • C pour le kernel et les drivers
  • en C/C++ pour le reste.

Le C++ Moderne c’est quoi ?

  • de la libération automatique de la mémoire avec les points intelligents (smart pointers)
  • utilisation de la bibliothèque standard STL (Standard Template Library)
  • utilisation du C++11/14/17 avec auto, les lambdas, etc.

Windows utilise beaucoup la technologie COM. Un composant COM est enregistré dans la base de registres et est invoqué via des API ( https://docs.microsoft.com/en-us/windows/win32/api/_com/)

Un composant COM est une classe avec AddRef, Release, QueryInterface et des méthodes:

La création du composant COM est faite via CoCreateObject et la factory COM:

Pour plus d’informations sur les composants COM, j’ai réalisé en 200x une traduction de certains éléments de “Inside COM+ Base Services”: Apartments | Threads | Apartments types | Threading for In-Proc components | Apartment and languages

Pour plus d’informations sur COM, mettre la main sur Inside COM+ Base Services ( http://www.windowscpp.com/Books/MSPress-InsideCOMBaseServices.zip ) ou sur docs mais sur docs, la doc est spartiate.

Les années 201x ont vu Microsoft se tourner vers l’open-source donc vous pouvez trouver des composants Windows en open-source:

Faites comme moi, étudiez ces deux modules et essayez de contribuer dans GitHub. Et qui sait, un jour, vous travaillerez peut-être pour Microsoft !

Chiche !

Christophe | www.christophepichaud.com

Le code source de Windows (C++)

Windows est fait en C/C++.

A partir de là, on peut rentrer dans le détail. Les plus jeunes pourraient penser que Windows utilise NET mais il n’en ai rien. La lutte entre l’ancienne Windows Division et la Developer Division n’est pas terminée. Pour ceux qui veulent des détails, voici l’article qu’il faut lire:

https://arstechnica.com/information-technology/2011/06/windows-8-for-software-developers-the-longhorn-dream-reborn/

Windows est entièrement fait en C/C++ avec une légère précision:

  • le kernel est fait en C
  • le reste est fait en C++

Pourquoi ?

Pour Microsoft et ce depuis 25 ans, le C++ c’est naturel, c’est l’électricité. On veut faire un logiciel, un produit, on utilise C++. Microsoft fait 95% de ses produits en C++ car c’est fiable, robuste, puissant et rapide.

En tant que MVP, j’ai signé avec Microsoft un NDA pour avoir accès au code source de Windows 10 et Windows Server 2019. le code est clean, truffé de C++ Moderne et ce n’est pas près de s’arrêter.

C++ renaissance dixit Channel 9. https://channel9.msdn.com/Shows/Going+Deep/Craig-Symonds-and-Mohsen-Agsen-C-Renaissance

Avec l’avènement des technologies dites productives comme NET ou Java, les légendes urbaines se multiplient. Windows fait en NET, Linux en Java… Des foutaises ! Linux est faite en C/C++. Windows est fait en C/C++. Le reste c’est de la littérature.

Les grands logiciels sont faits en C++ ! Vive C++ !

J’étudie le code de Windows depuis 2001 date à laquelle j’ai mis la main sur le leak de Windows NT4 puis en 2003 sur le leak de Windows 2000. 2GB de source code, la mine d’or. Puis j’ai eu accès au Windows Research Kernel XP et Windows Server 2003. j’ai rebuildé le kernel et monté une VM Windows Server 2003. Génial!

Windows Research Kernel était une initiative pour les universités qui faisaient des cours sur les systèmes d’exploitation. Fabuleux. Et livré avec Windows Internals, la bible.

Le job de mes rêves : Développeur Windows chez Corp. Mais bon je suis français, faut pas rêver ! 🙂

MyDesktop : un autre menu Démarrer pour Windows

Voici mon nouveau développement: MyDesktop. Cet outil permet de visualiser les applications installées sur le poste. Sur la partie gauche, on y trouve les différents groupe et les liens. La première partie droite présente le lien en détail avec son icone. Le deuxième panneau présente la totalité des applications. L’autre visualisation permet de voir les applications sous forme de carrés de couleur. Il y a une fonctionnalité de recherche aussi.

Le code est disponible sur GitHub: https://github.com/ChristophePichaud/MyDesktop

L’application est réalisée en C++ avec les MFC. Pourquoi les MFC ? Parce que les MFC permettent de développer rapidement et de manière efficace. De plus, j’avais des classes de dessin à réutiliser d’un autre projet. En effet, les carrés de couleur sont des “shapes” graphiques qu’il est possible de déplacer et de retailler en dimension. Ces classes tirent parties des MFC.

Il ne me reste plus qu’une fonctionnalité à ajouter : le lancement des applications. Ce n’est pas très dur, il suffit de faire un CreateProcess du lien…

Stay tuned.

Contribution Windows/Terminal en C++

Le projet Windows/Terminal est disponible sous GitHub en early alpha stage… Les contributions open-source sont les bienvenues. J’ai décidé de contribuer.

J’ai rempli une issue avec des trucs à faire : https://github.com/microsoft/terminal/issues/1058

et puis on m’a affecté une branche, après discussion, et puis une fois le code effectué (8j de dev), j’ai fait un Pull Request: https://github.com/microsoft/terminal/pull/1161

Après la phase de code review (Microsoft est très exigeant) et les tests unitaires, mon PR a été accepté et mergé.

Je suis officiellement contributeur sur le code source de Windows.

Fier. Content. Heureux. 🙂

La suite ? Il y a encore pleins de // TODO MSFT, je rempile…