Docker et .NET Core

Si vous avez déjà entendu parler de docker sans savoir ce que c’était exactement : cet article va vous permettre de faire en sorte que vos doutes se dissipent… Je pendrais l’exemple d’une application .NET Core pour illustrer cela.

Docker, qu’est ce que c’est?

Docker est une plateforme logicielle permettant de regrouper des logiciels dans des conteneurs.

Pour comprendre plus simplement, il suffit de comparer Docker à un porte-conteneurs.

blog ai3 280px-Container_ships_President_Truman_%28IMO_8616283%29_and_President_Kennedy_%28IMO_8616295%29_at_San_Francisco Docker et .NET Core

Dans l’image ci-dessus, vous pouvez vous apercevoir que ce porte conteneurs contient un nombre important de conteneurs avec à l’intérieur de la marchandise. D’un point de vue logiciel, cela fonctionne de la même façon: Docker va héberger des conteneurs logiciels avec à l’intérieur ce que vous souhaitez.

Si une VM est en mesure d’émuler une infrastructure matériel, un conteneur lui sera en mesure d’émuler un système d’exploitation.

Les conteneur et les images

  • Une Image va être composé d’un système de fichier contenant l’OS, l’application, la base de données etc.. bref tout ce que vous souhaitez intégrer dans votre conteneur.
  • On l’a vu au dessus : un conteneur est un réceptacle. Celui-ci va être alimenté par l’image crée préalablement par vos soins.

Tout image Docker que l’on voudra crée où utilisé (en récupérant par exemple l’image d’un repository) sera obligatoirement mis dans un conteneur.

Docker, .NET Core et VS Code

Pour vous montrer l’utilisation de Docker, je vais prendre le cas d’une application .NET Core MVC en utilisation Visual Studio Code.

  • Création du projet .NET Core

Depuis une invite de commande, lancer les commandes suivantes

mkdir dockerapp
cd dockerapp
dotnet new mvc -o DockerApp

blog ai3 image-3-1024x487 Docker et .NET Core
  • Publication de notre application

Dans la même invite de commande, lancer la commande suivante

dotnet publish -o ./publish

blog ai3 image-10-1024x229 Docker et .NET Core

Cette commande permet de compiler l’application sous forme d’exécutable optimisé. Tout cela se trouve dans le répertoire publish.

cd publish

  • Exécution de l’application

Dans la même invite de commande, lancer la commande suivante

dotnet DockerApp.dll

blog ai3 image-11-1024x264 Docker et .NET Core
blog ai3 image-6-1024x406 Docker et .NET Core
  • Maintenant, on va dockeriser cette application 🙂

On va ouvrir le code source de cette application avec Visual Studio Code

blog ai3 image-12-1024x213 Docker et .NET Core

Nous allons ensuite créer un dockerfile : c’est un fichier sans extension avec le nom dockerfile où sont décrit les opérations étapes par étapes de création de conteneur.

blog ai3 image-7 Docker et .NET Core
  • On va remplir ce fichier dockerfile en ajoutant les lignes ci-dessous dans ce fichier.

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base

WORKDIR /app

COPY /publish .

ENTRYPOINT [« dotnet », « DockerApp.dll »]

  1. Première ligne : va récupérer l’image d’ASP.NET Core 2.1 depuis un repository pour l’inclure dans notre conteneur.
  2. Deuxième ligne : va récupérer le répertoire de travail de notre appli pour l’inclure dans notre conteneur.
  3. Troisième ligne : va copier tout le contenu du répertoire publish
  4. Quatrième ligne : cette dernière ligne est le point d’entrée. Cela indique à Docker que l’on doit exécuter la dotnet command avec DockerApp.dll en paramètre.
  • On va construire l’image myimage qui se trouvera à l’intérieur du conteneur.

Depuis le terminal VS Code, lancer la commande suivante

blog ai3 image-13-1024x478 Docker et .NET Core
blog ai3 image-14-1024x668 Docker et .NET Core
  • On va indiquer à Docker d’exécuter l’image myimage dans un conteneur.

Dans la console vsCode, lancer la commande suivante

blog ai3 image-15-1024x28 Docker et .NET Core
  • Vous pouvez vous apercevoir que l’application s’est lancée normalement. Seule grosse différence : elle est maintenant encapsulée dans un conteneur.
blog ai3 image-16-1024x419 Docker et .NET Core

Les pieds de pages dans les sites de communication Modern UX

Les pieds de page sont une fonctionnalité personnalisée très utilisée pour faciliter la navigation dans les sites Web et les portails. Les sites de Communication SharePoint auront bientôt un contrôle de pied de page prêt à être inséré. Ce contrôle prend en charge soit un logo, soit une étiquette ou un ensemble de liens (jusqu’au huit liens).

En cliquant sur « Modification de l’apparence », on trouve le lien pour modifier le pied de la page.

blog ai3 image-8 Les pieds de pages dans      les sites de communication Modern UX

Dans le contrôle de pied de page, on a la possibilité d’activer/désactiver cette fonctionnalité d’une façon directe et simple. On peut aussi ajouter un logo et des liens (maximum 8).

blog ai3 image-9 Les pieds de pages dans      les sites de communication Modern UX

Ajout d’un lien:

blog ai3 image-7 Les pieds de pages dans      les sites de communication Modern UX

Apparence du pied de la page de l’exemple:

blog ai3 image-10-1024x233 Les pieds de pages dans      les sites de communication Modern UX

Little Big Details, les détails qui font la différence

Le design d’interface (Web, applications diverses, intranet…), on le sait, est constitué de micro détails qui doivent former un tout cohérent. Ces détails font un bon design…

À l’initiative de Toni Romero, un jeune graphiste américain de 22 ans, voici un blog visuel qui parlera tout particulièrement à tous les UI designers : Little Big Details. On le sait, le design d’interfaces d’application est peu considéré dans la grande famille du Web design. Bien que cela évolue (un peu). Les web agencies qui en constituent le noyau dur, sont souvent nées d’anciennes anciennes agences de com voir de publicité, conservant au passage le pire de l’ancien monde : jeunes stagiaires au physique intelligent, directeur artistique senior d’au moins 22 ans, attitude, mépris et frime derrière des Ray-Ban Wayfarer II, total look noir. Octave, héro dandy de 99 francs, à la peau dure. Seuls les sites grands publics, façon communication de masse, trouvent grâce aux yeux de ces nouveaux créatifs de l’âge numérique. Laissant de côté les travaux ressentis de « labeur » aux laborieux de la création. 99% du design numérique implique pourtant une vraie connexion avec l’ergonomie, les usages et la technique. Tout ça pour dire que créer une interface « usable » n’est pas donnée à n’importe quel graphiste sorti d’école spécialisée. Il est aussi question de technicité, créativité et maturité. Le design d’interface d’applications, enfin, est affaire de détails. Et pour reboucler sur Little Big Details, ce blog américain met le focus sur une multitude de détails qui font la différence et –  tout en subtilité – amène de la plus-value aux interfaces qui nous entourent. En une image et un (petit) commentaire, tout est dit et l’on peut s’y approvisionner en bonnes idées pour ses futurs designs.

Implémenter un service Windows avec TopShelf

Un article de Benoit Benardin

Lors de l’implémentation d’une tache de fond, se pose toujours la question Console App + Schedule ou Service Windows. L’un est plus facile développer car plus facile à débugger, l’autre apparait plus propre et plus en accord avec une solution d’entreprise.

Mais saviez-vous que ce choix est obsolète avec des librairies comme TopShelf ?

blog ai3 astonished Implémenter un service Windows avec TopShelf

Le but de ce post sera justement de vous montrer cela avec un petit tuto.

  • On commence par créer un projet Visual Studio de type Console Application

blog ai3 topshelf1-300x240 Implémenter un service Windows avec TopShelf

  • On ajoute les package Nugget suivant:
    • TopShelf
    • TopShelf.Log4Net   

blog ai3 topshelf2-300x116 Implémenter un service Windows avec TopShelf

blog ai3 topshelf3-300x80 Implémenter un service Windows avec TopShelf

  • On crée une classe pour héberger notre service Windows : MyService.cs
    • Puis on rajoute 2 méthodes: Start() et Stop().
    • Ce sont ces méthodes qui seront appelées au démarrage et à l’arrêt du service.

blog ai3 topshelf4-300x150 Implémenter un service Windows avec TopShelf

  • Ensuite on crée une classe statique pour héberger la configuration de TopShelf : ConfigureService.cs
    • Il faut rajouter une méthode Configure().
    • C’est dans cette méthode que l’on décide du nom du service, du compte utilisé et qui appeler au démarrage et à l’arrêt du service
    • Il est donc normal de l’on fasse appel à notre classe de service aux méthodes Start() et Stop() créées précédemment.

 

blog ai3 topshelf5 Implémenter un service Windows avec TopShelf

  • Reste à rajouter dans le Program.cs de notre console application, l’appel à la configuration de notre service dans la méthode Main.

blog ai3 topshelf6-300x89 Implémenter un service Windows avec TopShelf

A ce niveau, nous avons un service fonctionnel et pour le tester, nous avons 2 choix :

  • Presser F5 pour le débugger comme l’importe quelle Console App

blog ai3 topshelf7-300x199 Implémenter un service Windows avec TopShelf

  • Le déployer en service Windows en ouvrant une commande (CMD) en administrateur local et en naviguant vers le .exe de notre app compilée :

blog ai3 topshelf9-300x63 Implémenter un service Windows avec TopShelf

  • Puis :
    • Utiliser la Commande « DemoTopshelf.exe install » pour créer le service windows et l’installer

blog ai3 topshelf8-300x159 Implémenter un service Windows avec TopShelf

    • Ou « DemoTopshelf.exe uninstall » pour le retirer

blog ai3 topshelf10-300x195 Implémenter un service Windows avec TopShelf

Voila ! Le meilleur des 2 mondes servi sur un plateau : il y a rien de plus facile que de débugger une console APP et lors du déploiement la commande pour transformer notre projet en service windows est des plus simples !

 

*Applaudissement*, *Standing Ovation*, *Jet de fleurs*

 

Mais on ne va pas s’arrêter là… On va pousser un peu plus loin. Il nous faut de quoi logguer (obligatoire pour un service Windows et tous les projets en général…. hein….. à bon entendeur …. )

blog ai3 suitknockout Implémenter un service Windows avec TopShelf

Vous avez remarqué qu’on a rajouté le package nugget TopShelf.Log4Net ? Il s’agit du package d’une des solutions de log les plus connue, adaptée à TopShelf. Et vous allez voir, l’intégration est vraiment simple:

  • Pour notre exemple, on commence par rajouter un fichier à notre projet : log.config. Ce fichier va héberger la configuration de Log4net. C’est pour l’exemple, vous êtes pas obligé de faire comme cela chez vous.

blog ai3 topshelf11-300x183 Implémenter un service Windows avec TopShelf

  • N’oubliez pas dans les propriétés du fichier de configuration de dire à Visual Studio de copier le fichier dans le dossier d’Output

 

  • Reste à retourner dans la classe de configuration de notre service : ConfigureService.cs et rajouter la ligne pour configurer Log4Net via notre fichier log.config

blog ai3 topshelf12-300x174 Implémenter un service Windows avec TopShelf

  • Et enfin de faire notre petite classe de logger.

blog ai3 topshelf13-300x133 Implémenter un service Windows avec TopShelf

Done ! Vous avez un console app facile à débugger, qui se transforme en service Windows à la demande. Le tout avec le mécanisme de log qui va bien.

blog ai3 topshelf14 Implémenter un service Windows avec TopShelf

Si besoin, la petite application de démo est disponible ICI

Docker, buller c’est l’avenir !

Le 30 Mai dernier, Gabriel Ivanes (consultant chez Ai³) organisait une Tech’ Session sur Docker. Selon Wikipedia : « Docker est un logiciel libre qui automatise le déploiement d’applications dans des conteneurs logiciels. Selon la firme de recherche sur l’industrie 451 Research,  » Docker est un outil qui peut empaqueter une application et ses dépendances dans un conteneur isolé, qui pourra être exécuté sur n’importe quel serveur Linux » ». Ce concept révolutionne le monde du développement et de l’applicatif. Pour en savoir plus, voici cette Tech’ Session co-animée par Stéphane (de Docker).

Microservices : KISS for all !

Le 14 Mai dernier, Gabriel Ivanes (consultant Ai3) nous a présenté les Microservices, lors d’une Tech Session. Mais, les Microservices, c’est quoi ? D’après Wikipedia : «  les microservices sont un style d’architecture logicielle à partir duquel un ensemble complexe d’applications est décomposé en plusieurs processus indépendants et faiblement couplés, souvent spécialisés dans une seule tâche. Les processus indépendants communiquent les uns avec les autres en utilisant des API langage-agnostiques. » Cette nouvelle approche du développement est une vraie révolution. D’ailleurs, certains grands noms de l’IT (Netflix, Amazon, Azure…) l’ont adopté depuis longtemps. Pour en savoir plus, je vous invite à suivre cette Tech Session !

Découvrir DevOps

D’après Wikipedia : « Le devops est un mouvement visant à l’alignement de l’ensemble des équipes du système d’information sur un objectif commun, à commencer par les équipes de dev ou dev engineers chargés de faire évoluer le système d’information et les ops ou ops engineers responsables des infrastructures (exploitants, administrateurs …« .  Le 13 Avril dernier, lors d’une Tech Session, Gabriel Ivanes (consultant chez Ai3) nous en disait plus sur ce mouvement qui change fondamentalement  la façon de collaborer dans les équipes de développement.

Exchange 2016 Series – Certificat SSL

Bonjour tous le monde ! Dans ce nouvel article, je vous propose d’aborder le sujet sensible qu’est le choix des certificats SSL et des bonnes pratiques à suivre lors d’un déploiement Exchange 2016.

Exchange 2016 communique avec les clients, applications et les autres serveurs sur une variété de protocoles réseau tels que http, SMTP, IMAP et POP. La plupart de ces communications, particulièrement les clients et applications, impliquent une authentification basée sur l’identification par nom d’utilisateur et mot de passe. Lorsque les informations d’identification sont envoyées sur le réseau, elles sont envoyées « en clair », signifiant que ces informations peuvent potentiellement être interceptées et lues par une personne malintentionnée. D’autres informations transmises durant la session peuvent être également sensibles et enclin à être utilisées si l’interception est possible.

Pour sécuriser ces communications Exchange 2016 utilise les certificats SSL pour crypter le trafic réseau entre le serveur, les clients et les applications. Ceci inclus :

  • Outlook se connectant via Outlook Anywhere (RPC-over-HTTP) ou MAPI-over-HTTP
  • Les navigateurs Web se connectant à Outlook sur le Web (OWA)
  • Les appareils mobiles se connectant via ActiveSync pour accéder aux boîtes aux lettres et calendriers.
  • Les applications se connectant aux services Web Exchange (EWS) pour consulter les disponibilités et autres
  • Les clients de messagerie se connectant en POP ou IMAP
  • Le trafic SMTP cryptés en TLS entre les serveurs Exchange et les autres serveurs de messagerie

Lors de la première installation d’Exchange 2016, il génère un certificat SSL auto-signé qui est alors activé pour IIS (les services HTTPS comme OWA, EWS et ActiveSync), SMTP, POP et IMAP. Le certificat auto-signé permet au serveur d’être « sécurisé par défaut » et de commencer à crypter les communications réseau de suite après son démarrage, mais il est seulement censé être utilisé temporairement jusqu’à que vous provisionniez les certificats SSL pour votre environnement.

Lors du déploiement d’Exchange 2016 vous devez planifier de remplacer le certificat auto-signé par un certificat SSL valide pour votre scénario de déploiement. Ceci implique un investissement allant d’une centaine de dollars (ou €) à plusieurs milliers de dollars (ou €) dépendant de votre scénario d’espace de noms d’accès client, le type de certificat que vous achetez, et le type de d’autorité de certification auquel vous vous adressez.

Il fortement recommandé de ne pas conserver le certificat auto-signé ou de désactiver SSL pour les services Exchange.

Certificat SSL – Prérequis

Il y a trois prérequis basiques pour un certificat SSL dans un déploiement Exchange 2016.

  • Noms de serveur/domaine correct – le certificat SSL doit contenir les espaces de noms (aka, URLs, alias, noms de domaines) correspondant au nom auquel les clients tentent de se connecter (par exemple, les utilisateurs tapant « webmail.contoso.com » dans leur navigateur web pour pouvoir accéder à Outlook web app)
  • Période de validité du certificat – chaque certificat SSL a une période de temps fixée durant laquelle il est considéré comme valide. Lorsque le certificat SSL atteint sa date d’expiration il devra être renouvelé pour continuer à fonctionner.
  • Une autorité de certification de confiance – les clients feront uniquement confiance aux certificats qui sont issues d’une autorité de certification de confiance. C’est une des raisons pour laquelle le certificat auto-signé ne correspond généralement pour une utilisation en production, parce que vos clients ne feront pas confiance au certificat publié par votre serveur Exchange. Il existe un large panel d’autorités de certification publiques auprès desquelles vous pouvez acquérir des certificats.

Choisir une autorité de certification est assez simple, et la période de validité sera déterminé par la durée pour laquelle vous achetez le certificat (en général minimum 12 mois). Cela signifie que le point de décision pour la planification de vos certificats SSL se reposera sur le choix de vos espaces de noms.

Espace de noms pour les certificats SSL

L’approche la plus simple pour les espaces de noms Exchange 2016 Server est d’utiliser un seul espace de noms pour tous les services HTTPS.

En plus de l’espace de noms HTTPS, il est courant d’utiliser un espace de noms séparé pour chacun des services SMTP, POP et IMAP, bien qu’il ne soit pas nécessaire de le faire. Il y a également le CNAME de l’Autodiscover à considérer et le domaine racine également.

Par exemple, dans un environnement simple où le nom de domaine utilisé pour les adresses de messagerie est contoso.com, et en prenant en compte toutes les considérations citées précédemment, les espaces de noms pourraient être planifiées comme :

  • Webmail.contoso.com (pour HTTPS, SMTP, POP et IMAP)
  • Autodiscover.contoso.com (pour le CNAME de l’Autodiscover)
  • Contoso.com (pour le domaine racine des recherches autodiscover)

La pratique recommandée est d’inclure uniquement les alias en tant qu’espace de noms sur les certificats SSL et pas le FQDN des serveurs.

Note : Concernant la présence du ou des FQDNs des serveurs dans les certificat SSL, il est clair que cela est supporté mais ce n’est cependant pas une bonne pratique car dans les grands environnements il est important de réduire les coûts et les frais généraux administratifs. De plus, dans les grands environnements les services sont configurés avec des espaces de noms qui résolvent des adresses IP Virtuelles (Load Balancing) et utiliser un nom de serveur dans les URLs peut amener à vous causer des problèmes lors de future migration.

En raison des récents changements apportés aux règles d’émission de certificat, vous pouvez également vous trouver dans l’impossibilité de demander un certificat SSL pour un nom de domaine qui n’est pas routable sur Internet ou que vous ne possédez pas légitimement (par exemple, domain.local).

Quel type de certificat acquérir ?

Les autorités de certification tels que Digicert peuvent vous vendre une variété de types de certificat, et certaines autorités de certification différents noms pour ce qui est sensiblement la même chose.

  • Le certificat SSL standard contient un seul nom et est généralement le moins cher à acquérir, cependant ils ne sont pas adaptés même avec une conception d’espace de noms la plus simple.
  • Le certificat SSL Wildcard vous permet de sécuriser de multiple noms sur un domaine sans avoir à spécifier les noms exacts dans le certificat. Bien que qu’ils soient souvent une option à moindre coût, les certificats Wildcard peuvent poser des problèmes de compatibilité avec certains scénarios d’intégration avec d’autres systèmes, ainsi que de ne pas être adapté aux configurations POP et IMAP sécurisées.
  • Le certificat SAN ou UC (Unified Communications) est le type de certificat recommandé. Le certificat SAN peut contenir de multiple noms. Par exemple, un certificat UC peut inclure jusqu’à 4 noms à un prix normal, avec en option la possibilité d’ajouter jusqu’à un total de 25 noms avec un coût supplémentaire. Bien que le coût d’un certificat SAN/UC soit plus important qu’un certificat Wildcard, vous rencontrerez moins de problème de compatibilité avec le certificat SAN/UC, aussi longtemps que le certificat contienne les bons noms. Si toutefois lors de votre planification d’espace de noms vous faite une erreur ou, vous rencontrez le besoin de modifier l’espace de noms, la plupart des fournisseurs vous permettrons de republier le certificat gratuitement. Pour certain cette opération à un coût J.

La pratique recommandé est de provisionner le moins de certificat SSL possible et ce, pour simplifier l’administration ainsi que de réduire le plus possible les coûts à l’achat. Donc bien qu’il soit possible d’avoir des certificats pour chacun des services (http, SMTP, POP et IMAP), il est recommandé d’utiliser qu’un seul certificat contenant tous les noms à moins que vous ne soyez dans un scénario bien spécifique. De même qu’il est recommandé d’utiliser le même certificat pour tous les serveurs Exchange qui seront configuré avec le même espace de noms.

C’est ainsi que se termine cet article. J’espère que les informations fournies tout au long de ce post pourront vous être utiles lors de vos prochains déploiement d’Exchange 2016 !

Génération Y : comportement inné ou une posture ?

Vous avez du certainement entendre beaucoup de choses et participer à plusieurs discussions sur la génération Y. Mais qu’est-ce que représente véritablement cette génération Y ? Qu’est-ce qu’on connait véritablement sur cette génération ? Et la génération Z, qu’est-ce qu’elle représente par rapport à son prédécesseur ? Est-ce seulement une question de génération ou un état d’esprit ?

Je me suis posé cette multitude de questions en regardant quelques vidéos d’intervention d’Emmanuelle Duez, le nouveau gourou de l’intégration de la génération Y dans les grandes entreprises. Bref, elle compte changer le monde de l’entreprise en expliquant aux dirigeants pourquoi ils ont besoin de la génération Y au sein de leur entreprise et comment cette génération fonctionne dans sa tête.

 

Mais depuis le temps que l’on parle de la génération Y, une nouvelle génération, la génération Z a surgi et l’enjeu dans quelques années sera leur intégration au sein de ces mêmes entreprises. Aura-t-on un autre leader sur la question de la génération Z (ne me demandez pas pourquoi Z, j’en sais rien J) ? Y aurait-il un gourou pour chaque génération ? Et si ce n’était pas une question de génération mais d’état d’esprit et d’époque ?

Pour plus d’info : https://www.youtube.com/watch?v=0Yx1r0PgV8c  (avancez jusqu’à la 28 eme minute pour voir le discours d’Emmanuelle Duez)

Qu’est-ce que la génération Y ?

 

« La génération Y regroupe des personnes nées approximativement entre le début des années 1980 et le milieu des années 19901. » (Source Wikipedia).

Les médias ont fait couler beaucoup d’encre sur le sujet. La plupart du temps, cette génération est mal perçue par les médias et par les entreprises. On parle de fainéants, des personnes qui ne savent pas s’ennuyer, des personnes instables, ou bien on dit juste « atypiques » et sortant de la bouche de certains ce n’est pas vraiment un compliment, croyez-moi.

 #FromWhereIStand : une question de point de vue.

 

Lorsque j’étais en première année de Master en Communication et Information stratégique, j’ai rédigé un mémoire sur la transformation numérique au sein d’une entreprise de CAC 40. Et dans ce mémoire, j’ai évidemment parlé de la génération Y comme un fédérateur de ce changement. Dans un chapitre j’ai décrit les caractéristiques de la génération Y et lors de ma soutenance, mon professeur m’a dit : « Vous avez eu l’intelligence de montrer que la génération Y n’était pas si bien que cela, qu’ils étaient capricieux ». Il s’agissait d’un compliment et cela ne lui arrivait pas souvent d’en faire, du coup je l’ai accepté humblement. Mais en fait, il s’agissait d’une mauvaise interprétation : je n’avais pas l’intention de dénigrer ou bien de critiquer cette génération. Pour moi, les caractéristiques que je venais d’énumérer n’étaient ni des défauts, ni des qualités, mais des caractéristiques de cette génération, c’était un fait. Il s’agissait juste d’un point de vue, de quel côté on se trouvait. Mais bon, je ne peux pas dire que ma responsable de Master était quelqu’un de très ouvert d’esprit non plus.

D’un autre côté, lorsque j’ai effectué mon alternance, j’avais une tutrice qui était la digne représentante de la génération Y même si elle était née avant les années 80. Elle adorait twitter, gérait les réseaux sociaux parfois mieux que moi, avait une imagination et une créativité débordante, elle était impatiente et hyper active, bref cette femme avait plusieurs vies en même temps.

Comment comprendre ce phénomène de la génération Y alors qu’on peut apporter pleins d’exemples de ce genre ? De même, toutes les personnes nées entre 80 et 90 ne sont pas fan des jeux vidéo, TOUS ne veulent pas changer de boîte ou de métier tous les 3 ans.

Je pense, que ce n’est pas une question de génération mais de vision et d’état d’esprit. De sensibilité ou même tout simplement une question d’intelligence émotionnelle (ça sera le sujet du prochain billet… peut être J).

 

blog ai3 Y-vs-Z Génération Y : comportement inné ou une posture ?

Alors reprenons quelques clichés que l’on peut trouver sur la génération Y dans les médias et même dans les manuels, pour les défaire un par un avec un esprit pragmatique :

LA GENERATION Y EST IMPATIENTE

J’assume, je suis impatiente. La plupart du temps j’ai l’impression de ne pas avancer assez rapidement, que les gens autour de moi ne sont pas assez rapides, que cela soit dans ma vie personnelle ou dans ma vie pro. Et c’est normal ! le monde d’aujourd’hui va trop vite, la période d’innovation est seulement de 6 mois, tous les ans nous avons des dizaines de nouveaux modèles de téléphone. Il faut s’adapter à ce rythme effréné et donc comme on est habitué que tout aille vite, lorsque l’on rencontre une « lenteur », bah on s’impatiente.

LA GENERATION Y NE SAIT PAS S’ENNUYER

J’ai entendu cette phrase venant d’une femme de cinquantaine d’années. Elle avait l’air de dire que s’ennuyer parfois c’était bien. Je crois que m’ennuyer est la pire des punitions qui puisse m’arriver. Surtout au travail.

Ce n’est pas normal de s’ennuyer au travail. Aujourd’hui les femmes travaillent de plus en plus (et heureusement), occupent de plus en plus de postes à responsabilités (même s’il y a encore beaucoup de chemin à parcourir sur ce sujet…) et il est hors de question de ne pas s’épanouir au travail. Auparavant les hommes occupaient des postes pas forcément épanouissants car il fallait nourrir la famille et bien souvent ils étaient les seuls à le faire. Mais aujourd’hui, lorsqu’une personne ne s’épanouit pas au travail elle cherche à s’échapper ailleurs même dans un contexte de crise comme ce que nous vivons actuellement.

LA GENERATION Y VEUT AVOIR UNE VIE EN DEHORS DE SON TRAVAIL

Aujourd’hui, la société a évolué. Depuis, peu les hommes sont autorisés à avoir des jours de congés paternité à la naissance de leur bébé. La parentalité ne relève plus exclusivement de la femme. Donc, l’équilibre vie privée/vie pro devient extrêmement important. Et justement le contexte difficile du marché du travail, l’instabilité des emplois fait que les personnes se posent de plus en plus de questions sur leur vie au quotidien et se disent que si demain on risque de perdre notre job, autant s’amuser en même temps, car on ne sait pas ce que la vie va nous réserver demain. Donc oui, on a besoin de nos WE prolongés  du mois de Mai pour se faire du bien J

LA GENERATION Y EST UNE BANDE DE FAINEANTS

Non. C’est juste que les horaires de 9h à 17h ne font plus de sens.  La génération Y a vu leurs parents travailler beaucoup et souvent au détriment de leur vie privée. On ne veut plus vivre de cette sorte. Les nouvelles technologies et nouveaux modes de travail permettent de travailler à distance à n’importe quelle heure, d’être mobile et joignable à tout moment. Si on n’arrive pas à dormir la nuit on peut toujours ouvrir notre petit tableau Excel pour travailler dessus et le Manager n’est plus sur notre dos derrière pour comptabiliser nos horaires. Le principe de travail a changé : tout ce qui compte c’est le résultat.

LA GENERATION Y NE RECONNAIT PAS L’AUTORITE

Nuance : la génération Y ne reconnaît pas l’autorité illégitime, je m’explique. Le temps où un dirigeant en était un parce qu’il avait fait une des grandes écoles de Paris, c’est fini et heureusement. Aujourd’hui, les personnes talentueuses se trouvent partout, car le savoir est universel. Donc, ce qui a vraiment de l’importance aujourd’hui dans les entreprises, c’est une possession de certaines caractéristiques de personnalités (v. intelligence émotionnelle). Le leadership est le mot d’ordre. Nous sommes capables de nous former de manière autonome sur plusieurs sujets juste en suivant des MOOCs, les diplômes ne veulent pas dire grand-chose aujourd’hui. Seul le leadership compte.

blog ai3 Boss-vs-Leader Génération Y : comportement inné ou une posture ?

Pour conclure, la génération Z qui arrivera bientôt sur le marché du travail sera différente et aura ses propres caractéristiques. Et cela sera tout à fait normal : ils n’ont pas connu l’URSS, ni la fusée Soyouz, les francs, les frontières entre les pays européens, la disquette et ni la cassette. Forcément, ils vont réfléchir différemment, car leur passé culturel, sociologique, politique et personnel ne sera pas le même que le nôtre. Vive nos diversités, nos différences et nos divergences d’opinion. Il faut que nous nous adaptions au changements perpétuels, y compris les entreprises pour pouvoir attirer les nouveaux talents et pour permettre à la nouvelle génération de repenser le monde à leur manière, avec les moyens de l’époque.

blog ai3 Gen-Z Génération Y : comportement inné ou une posture ?

 

 

 

 

 

 

 

Raspberry Pi : Piloter un robot en C# via le port GPIO

Le robot

blog ai3 pi2go-lite-front-300x232 Raspberry Pi : Piloter un robot en C# via le port GPIO  blog ai3 pi2go-lite-rear-300x246 Raspberry Pi : Piloter un robot en C# via le port GPIO  blog ai3 pi2go-lite-top-300x255 Raspberry Pi : Piloter un robot en C# via le port GPIO

Le raspberry pi 2 dispose d’un port GPIO (General-purpose input/output) avec lequel il est possible de piloter toute sorte de périphériques, par exemple un robot comme le Pi2Go Lite. Le robot est motorisé et est possède un ensemble de capteurs. Lors du montage, le raspberry pi 2 est monté sur le robot avec 6 piles afin qu’il se déplace en toute autonomie.

Le port GPIO est composé de 40 pins et mis à part les pins dédiées à un usage spécifique, elles peuvent toutes être utilisées pour lire ou écrire les valeurs high (1) ou low (0).

D’un point de vue logiciel, le Pi2Go est livré avec une API écrite en Python. Le défi posé dans le cadre de ce billet est de porter l’ensemble de l’API ainsi que toutes les couches inférieures vers notre langage favori : le C#.

L’ensemble des points abordés dans ce billet ont été implémentés et les sources sont disponibles sur le Github du projet.

 

Voyons un peu plus en détail les composants du Pi2Go Lite. Vous allez voir qu’il est un bon cas d’école pour apprendre à contrôler le port GPIO du Pi parce qu’il dispose de composants posant chacun des problématiques différentes de programmation. En voici la liste :

  • 4 LEDs (2 à l’avant et 2 à l’arrière), Ecriture de High pour allumer une LED et Low pour l’éteindre.
  • 2 capteurs infrarouges : Si un obstacle proche est détecté, alors une valeur High est lue sur la pin concernée.
  • 2 moteurs permettant de propulser le rover. Afin de faire varier la vitesse de rotation des moteurs il est nécessaire d’implémenter la modulation de largeur d’impulsion (PWM en anglais).
  • Un sonar ultrasonique pour mesurer la distance de l’obstacle devant le robot. Le principe du sonar ultrasonique est de lancer une impulsion (écriture), puis d’attendre l’écho en retour (lecture). Plus la distance entre le rover et l’obstacle est grande, plus l’écho est longue à revenir. Connaissant la vitesse du son, il est facile de calculer la distance de l’obstacle.
  • Le module additionnel Pan and Tilt permet d’ajouter une caméra (compatible avec le pi 2) qu’il est possible d’orienter verticalement et horizontalement grâce à 2 servos. Les servos peuvent être positionnés de 0 à 90° en envoyant un signal selon une certaine fréquence qui indique la position souhaitée.

 

Nous allons maintenant voir quels sont les logiciels chargés de piloter tous ces composants.

Les logiciels livrés avec le Pi2Go Lite

Outre le matériel, le Pi2Go Lite est livré avec des logiciels qui sont conçus pour s’exécuter sur le Pi 2 via une distribution Linux. Pour ma part j’utilise Raspbian, qui est une Debian spécialement préparée pour le Pi 2.

Les logiciels fournis sont principalement destinés à être utilisés par le langage Python :

  • RPi.GPIO : Il s’agit d’une librairie qui permet de piloter le port GPIO. Cette librairie est développée en Python, mais les fonctions bas niveau son écrites en C. Outre l’activation – désactivation des pins et la lecture des pins, elle gère aussi le PWM qui régule la vitesse des moteurs des roues.
  • ServoBlaster : Un programme écrit en C, dédié au pilotage des servos moteurs permettant de changer la position de la caméra.
  • Une librairie Pyhton écrite par les concepteurs du Pi2Go qui repose sur RPi.GPIO et ServoBlaster pour proposer des fonctions haut niveau comme : allumer les LEDs, avancer / reculer, tourner à droite / gauche, mesurer la distance de l’obstacle le plus proche, orienter la caméra (haut, bas droite, gauche).
  • Le programme qui est chargé de faire l’interface homme  / machine. Il s’agit d’un script Python qui s’exécute en ligne de commande. Il permet de piloter le robot grâce aux touches du clavier.

Voici une vue d’ensemble de la stack logicielle à réécrire en C# :

blog ai3 Pi2Go-Lite-Original-Software-stack1-300x181 Raspberry Pi : Piloter un robot en C# via le port GPIO

Diagramme représentatif de la stack logicielle fournie avec le robot

 

Réécriture de la stack en C#

Heureusement, il est possible d’exécuter un programme .Net  sous Linux grâce à Mono, le pendant Open Source du framework .Net. Mono s’exécute parfaitement sur Raspbian. Il fait même partie des packages de base que l’on peut installer grâce au gestionnaire de paquets « APT » !

 

Au passage : pourquoi ne pas avoir utilisé Windows 10 IoT ?

J’ai bien tenté de porter le programme sur Windows 10 IoT, et l’implémentation est nettement plus simple que sous Linux, mais l’API de Windows ne permet pas d’utiliser certaines pins qui sont nécessaires au Pi2Go Lite 🙁

 

L’un des principal défaut de l’architecture logicielle originale, est qu’elle repose sur un assemblage d’outils et de librairies peu cohérentes et non unifiées. Par exemple, la commande des servos fait appel à un outil nommé « ServoBlaster » qui est lancé en ligne de commande via le script Python.

Dans cet article, nous avons pour objectif de développé un framework unifié et capable de prendre en compte l’ensemble des problématiques en évitant la duplication de code.

Ainsi l’architecture cible retenue est découpée en 4, chaque couche reposant sur la couche de niveau inférieur :

  1. Gestion bas niveau du port GPIO
  2. Pilotes (PWM pour les moteurs, Servos, Sonar etc.)
  3. Libraire haut niveau de contrôle du robot
  4. Programme IHM

Dans le cadre de ce post, je décrirai uniquement le fonctionnement de la gestion du port GPIO. Les autres composants seront détaillés ultérieurement dans d’autres posts qui seront publiés sur ce blog.

 

Gestion du port GPIO

Le fonctionnement du port GPIO est simple. Avant toute opération sur une pin, il est nécessaire de définir le mode d’accès : Input ou Output et ensuite on peut procéder à la lecture ou à l’écriture de d’une valeur.

Sous Linux, il existe plusieurs méthodes pour accéder au port GPIO :

  • En écrivant dans les fichiers du sysfs

Cette méthode a pour avantage d’être très simple et est accessible à tout langage capable de lire ou écrire dans des fichiers. Chaque pin est présentée sous la forme d’un fichier dans lequel on lit ou écrit pour communiquer.

Même si les performances sont suffisantes dans la majorité des cas, elle ne permet pas d’envoyer un signal à une fréquence suffisante pour, notamment, commander les servos de la caméra.

Elle est implémentée dans la classe SysfsLinuxGpioPort du projet.

 

  • Accès direct à la mémoire (DMA)

Avec le noyau Linux, il est possible d’activer un device « /dev/mem » qui est une représentation de l’ensemble de la mémoire RAM de l’ordinateur sous la forme d’un fichier. Dans le cas d’un usage classique d’un ordinateur ce device n’a pas lieu d’être activé et si c’était le cas cela représenterait une énorme faille de sécurité.

Dans le cadre d’un OS dédié au pilotage d’un robot, c’est très intéressant car cela permet d’accéder directement aux registres des périphériques sans librairie intermédiaire. Toutes les librairies C qui ont besoin de performances optimales, comme par exemple ServoBlaster, utilisent cette méthode.

Pour implémenter cette méthode, il est nécessaire de mapper le fichier « /dev/mem » dans la mémoire du processus courant en utilisant mmap. Après cette opération le processus peut librement écrire n’importe où dans la mémoire… et ensuite on peut commencer l’arithmétique des pointeurs. Ce qui n’est pas chose aisé après plusieurs années de C#, mais l’exercice est intéressant.

Je vous laisse découvrire le code de cette implémentation dans la classe DmaLinuxGpioPort.

 

Suite…

Nous avons vu comment est implémenté la gestion du port GPIO. Dans un prochain post, je décrirai comment sont implémentés les pilotes de chaque composant ainsi que l’écriture d’un contrôle à distance grâce aux WebSockets.