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.

MongoDB avec C#

A-propos de l’article

On constate un intérêt grandissant pour l’utilisation de couches de données noSQL. L’article ici présente l’utilisation d’un des systèmes les plus connus du marché MongoDB et notamment la version 3.

Présentation de MongoDB

Qu’est-ce que MongoDB?

MongoDB est une base de données orientée document sponsorisée par 10gen. Elle est utilisée notamment chez Foursquare, SourceForge et Bit.ly.
Mongo stocke les documents au format BSON (JSON binaire supportant un peu plus de types de valeur) et fournit un shell javascript pour accéder aux données et faire les opérations d’administration. De nombreux drivers sont implémentés notamment pour Java, .Net, PHP, Javascript
La notion de base orientée document signifie que les objets stockés sont représentés sous la forme d’un document BSON (pas seulement une map de style clef/valeur) permettant facilement de se mapper sur les objets que l’on manipule dans nos programmes. On pourrait le comparer à un stockage d’une représentation XML d’une grappe d’objets.

Schemaless : Comparaison entre NoSQL MongoDb et les bases relationnelles classiques

Lorsqu’on développe une couche d’accès aux données, nous allons souvent devoir soit utiliser un ORM, soit utiliser un mapper qu’on aura développé nous-même, mais les deux feront le même travail à savoir la transformation et le mapping d’objet en relation.
De plus comme les bases de données classiques relationnelle ne permettent pas le stockage des données complexes (entité avec des tableaux, imbrication, collection), nous devons effectuer différentes requêtes SQL pour obtenir nos données ou les mettre à jour.
En vue de ces 2 points, le développement d’une couche d’accès aux données beaucoup de travail. Ces jours que nous perdons à implémenter une réponse technique et non fonctionnelle, nous pourrions les affecter au développement métier et ainsi satisfaire d’avantage notre client. 
Pour cela une seule solution, stocker les objets .NET telle qu’ils sont et demander à notre moteur de persistance de gérer pour nous ce travail.
Un rêve que MongoDB et les bases de données NoSQL permettent de tenir. C’est ce qu’on appelle le schemaless.

Qu’apporte Le sharding avec MongoDB ?

MongoDB depuis sa version 1.2 intègre une gestion de sharding. L’application de cette gestion permet d’avoir une scalabilité plus importante. Nos données sont toutes cohérentes, car on accède toujours à tout. Le concept du sharding n’est pas d’avoir plusieurs bases de données en master/master, mais une seule base de donnée qui répartie ses propres données dans les différentes instances. On se retrouve ainsi à posséder certaines données sur une instance et les autres sur une autre. Cet aspect n’est pas détaillé dans cet article.

Qu’apporte le GridFS ?

MongoDB embarque avec lui un système de fichiers complet. Ce système est GridFS. MongoDB est limité par document à 4Mo, mais on a vite besoin de stocker des documents plus importants. GridFS permet ça. On stocke donc tout document supérieur à 4 Mo sur le système de fichier GridFS. GridFS permet ainsi d’avoir le sharding sur ses fichiers. On a donc besoin de rsync entre plusieurs machines. GridFS fait le boulot pour soi. On pourrait facilement rapprocher GridFS à Hbase.

Un système de requêtes évolué

Enfin le vrai intérêt de MongoDB selon moi, surtout par rapport à Riak ou CouchDB, c’est sa gestion de requêtage. On peut requêter de façon très fine grâce à une grande quantité de mots-clé. On peut donc faire des requêtes aussi riches qu’en SQL, mais tout ça sur une base de données orientée Documents.
On peut par exemple chercher tous les documents qui possèdent plusieurs éléments dans un tableau
db.things.find( { a: { $all: [ 2, 3 ] } } );
Alors qu’en SQL on aurait plus fait un
select * from things where a LIKE ‘%2%’ AND a LIKE ‘%3%’ 
Mais cette dernière est finalement incomplète car ça marchera pour un champ « A » contenant un array [32] en SQL mais ne fonctionnera pas dans le cas de la requête MongoDB.
On peut aussi faire de la recherche en donnant une fonction Javascript
db.myCollection.find( { $where: « this.a > 3 » } );
C’est très modulaire et le nombre de mot clé ne cesse d’augmenter.

Prise en main sous .NET 4.5

Il existe de nombreux utilitaire, librairie pour communiquer avec MongodB, je vous conseille de rester au standard et d’utiliser le driver fournit par le projet MongoDB même.

Nous utiliserons le mécanisme classique des autres DAL. A savoir 
La connectionstring dans le web.config pour définir le serveur

Installation de MongoDB sur votre machine (instance unique)

  1. Avant de pouvoir commencer l’installation, il faut télécharger la dernière version de MongoDB. Pour ce faire, aller à l’adresse suivante : http://www.mongodb.org/downloads et choisissez le type d’installation que vous désirez.
  2. Pour lancer l’installation, il vous suffit de double-cliquer sur le paquet msi et de suivre les instructions affichées à l’écran
  3. Créez le dossier qui contiendra vos bases de données c:\data\db et un dossier log c:\data\log
  4. Créez un fichier de paramétrage vous permettant de configurer mongodb : mongod.conf
  5. Vous pouvez démarrer mongod en utilisant le programme mongod.exe se trouvant dans le dossier bin : mongod –config mongod.conf
  6. Vous pouvez également configurer mongod pour l’utiliser comme un service : mongod –config mongod.conf –install
  7. Configurez le mode de démarrage de mongod en automatique ou en manuelle : sc config mongod start=auto

Hébergement d’une base MongoDB avec réplication sur Windows Azure

Windows Azure ne supporte plus nativement MongoDb, vous disposez des services SAAS exemple mongolab, mais cela est payant, pour vous permettre de prendre en charge un cluster MongoDB gratuitement, vous devez créer 2 VM de base

    1. Créez une VM nommez la <votresociete>mgdb1
    2. Créez une autre VM nommez la <votresociete>mgdb2
    3. Associez un disque à chacune de vos VM de 30 Gb et associez la lettre f:

Répetez l’opération suivante sur chaque VM

      1. Connectez-vous sur votre première machine
      2. Formatez votre disque data
      3. Désactivez le contrôle IE.
      4. Ajoutez le site http://*.mongodb.org à la liste des sites de confiance
      5. Téléchargez la version 64bits
      6. Installez le msi
      7. MongoDb par défaut est installé dans le dossier C:\Program Files\MongoDB\Server\3.2\bin, créez une variable d’environnement Path pointant vers ce dossier
      8. Téléchargez OpenSSL et installez le, cela vous permettra de créer un certificat pour votre replication : https://slproweb.com/download/Win64OpenSSL_Light-1_0_2f.exe
      9. Créez 2 dossiers sur votre lecteur f : data et log
      10. Créez 1 dossier conf
      11. Ajoutez un fichier mongod.conf
      12. Ajoutez les paramètres nécessaires :
        • Port : numéro du port sur le quel écouté par défaut 27017
        • Dbpath : chemin d’accès aux données
        • replSet=rs0 : indique qu’on va utiliser une réplication
        • logpath : indique le chemin d’accès au fichier de log
        • logaappend indique la rotation
      13. si le nœud n’est pas le premier, créez le dossier keys et copiez le fichier mongodb-keyfiles du premier nœud.
      14. Installez mongodb en service mongod –config f:\conf\mongod.conf –install
      15. Démarrez le service mongdb net start mongodb
      16. Si c’est le premier nœud, Connectez-vous au serveur mongo et démarrez la réplication rs.initiate()
      17. Ouvrez un port au niveau du firewall pour pouvoir vous connecter au service MongoDB
      18. Configurez un endpoint au niveau de Windows azure pour la machine virtuelle sur le port TCP 27017
      19. Si c’est le premier nœud, Créez les utilisateurs administratifs sur le master
      20. Arrêtez l’instance de mongodb
      21. Créez sur le premier nœud uniquement un fichier clé pour être utilisé par chaque membre d’une réplication
        • Je vous conseille d’utiliser openssl mais vous pouvez utiliser d’autre mécanisme.
        • Copiez le fichier key généré sur chaque membre
        • Modifiez le fichier de configuration pour spécifier le fichier de clé à utiliser. keyFile
        • Refaire l’opération sur le premier serveur

Ajoutez un nœud à une réplication

      1. Depuis la machine host du nouveau nœud,
      2. Connectez-vous au nœud premier mongo -u siteRootAdmin –p –authenticationDatabase admin
      3. Utilisez la méthode rs.add(« nomdelamachine :27017 ») pour ajouter le nœud

Vérifiez la configuration d’une réplication.

      1. Depuis n’importe quel host
      2. Connectez-vous au premier nœud mongo -u siteRootAdmin –p –authenticationDatabase admin
      3. Utilisez la méthode rs.conf()

Développement de la couche d’accès aux données sous Visual Studio 2015

    1. Reprenez les librairies créées précédemment dans nos article 1 et 2,
    2. Dans le projet STPVideoPlayer.DataLayer, ajoutez les classes suivantes
      • EpisodeModel: pour décrire un épisode
      • LocalVideoModel : Pour décrire un fichier vidéo local
      • YoutubeModel : Pour décrire une vidéo ou une playlist hébergée sur youtube
      • TimeLineModel : Pour décrire une planification
    3. Installez le driver MongoDB depuis nuget au projet STPVideoPlayer.Data.MongoProvider
    4. Créez une classe TvPlayerRepository
    5. Implémentez le code nécessaire à notre fournisseur en implémentant l’interface ITvPlayerRepository