18 octobre
0

Récupérer la vraie résolution d’un écran en C# ou comment Windows m’a écarté l’Anus

Hello World à tous !

Tu essayes de récupérer la résolution d’écran de tous tes moniteurs en C# et tu t’arraches les cheveux ? Tu es au bon endroit.

Je viens de passer l’après-midi à tenter de récupérer la résolution de tous mes écrans (internes + externes) sans que la taille du texte, apps et autre de Windows, que l’écran principal ou que la rotation d’un écran externe ne vienne me faire démouler un cake.

Le scénario

Dans le cadre d’un projet personnel, je dois développer une application WPF. Je souhaite faire en sorte qu’une même fenêtre de cette application soit ouverte sur chaque écran du PC et prenne une certaine dimension en fonction de la résolution de l’écran ciblé. Il ne me faut donc pas juste récupérer la résolution de l’écran principal (primaire) ou la résolution global (somme de tous les écrans), mais bien récupérer la résolution de tous les écrans connectés au PC.

Pour cela, rien de plus simple, il me suffit d’utiliser l’API suivante :

var allScreens = System.Windows.Forms.Screen.AllScreens;

Oui mais ! Ceux qui ont fait cette API (et je pense que j’irais leur dire bonjour la prochaine fois que je retourne à Redmond) ont dû trouver que c’était trop facile.

6 octobre
0

Stage a Microsoft 3.0 – Retrospective – Visual Studio 15′ Prev 5

Hello World !

Ça y est, l’été, c’est terminé. Contrairement à l’an dernier, je n’ai pas fait un article par semaine, car tout simplement il n’y a pas d’intérêt à tout répéter. J’ai déjà raconté une bonne partie de ce qu’il y a à dire sur un stage à Microsoft, du moins tout ce que j’ai le droit de dire. Je vais donc en parler de manière plus réduite en essayant de parler de ce qui a été nouveau et plus globalement, ce que j’ai été amené à réaliser.

Le job

J’ai donc travaillé durant 12 semaines avec l’équipe VS IDE Project & Telemetry de Visual Studio. C’est en fait deux petites équipes en une, constituées de 5-6 personnes à chaque fois, avec un seul manager. Les deux parties sont donc :

  1. Telemetry, qui travaille sur le développement des apis et outils internes concernant la télémétrie de Visual Studio. C’est en fait l’équipe dans laquelle j’étais il y a deux ans.
  2. Project, là où je suis cette année, travail sur les fonctionnalités de Visual Studio qui permettent de gérer les projets et solutions au niveau global. Ça signifie qu’on ne va pas rentrer dans les détails des projets dédiés au C# par exemple, il y a une autre équipe pour ça, celle qui réalise les outils de développement spécifique au C#.

Dans cette équipe, comme à chaque fois, j’ai fait face à des nationalités diverses et variées. Un chilien, trois américains, deux russes, un bulgare, un indien, un ukrainien, deux chinois.

Dans la partie de l’équipe avec laquelle j’ai travaillé, on y fait du SCRUM (contrairement à l’an dernier ou, avec l’équipe Chakra, ça ressemblait plus à de l’Extreme Programming sans en être à fond). Daily meeting, démonstration en fin de sprint, rétrospective, etc. J’aime bien cette façon de travailler personnellement.

J’étais situé au bâtiment 18, dans un Open Space avec fenêtre. Il y a encore quelques années, à Microsoft, les jeunes employés avaient des bureaux fermés sans fenêtre, et plus on montait en grade/expérience, plus on avait la possibilité d’avoir une fenêtre à son bureau. Aujourd’hui, Microsoft rénove la plupart des bâtiments (certains n’ayant pas changés depuis leur construction dans les années 1990-2000). Désormais, l’idée est que tout le monde ou presque sera en Open Space avec des fenêtres. Je dis « ou presque » car il existe aussi une sorte de bunker pour les projets très critiques ou la confidentialité fait que l’on ne préfère pas mettre de fenêtres.

Comme chaque année, il y a un meeting hebdomadaire entre l’employé et son manager, le « 1 : 1 » (One to one). J’adore toujours autant ce meeting ou l’on en profite pour raconter comment s’est passé la semaine : ce que l’on a accompli, les difficultés que l’on a rencontrées, comment les éviter à l’avenir, ou tout simplement discuter de tout et n’importe quoi et pourquoi pas vider son sac. J’aime bien comparer ce meeting une visite chez le psy.

L’an dernier, je travaillais principalement en C++ et JavaScript, seul sur mon projet de stage. Cette année, j’ai principalement fait du C#, ai travaillé en binôme, et ai eu la chance de pouvoir participer à quelques prises de décisions importantes sur l’UX du projet sur lequel je travaillais, en discutant avec des Program Managers et un Designer, ce qui est tout nouveau dans ma courte carrière. Mais ce projet, qu’en est-il ?

Visual Studio – Open Folder

Une des nouvelles fonctionnalités de Visual Studio 15, beaucoup demandées par les développeurs web et C++, est la possibilité d’ouvrir un dossier, et non une solution/projet. Cette fonctionnalité existe déjà dans Visual Studio Code et bien d’autres IDE, mais n’était pas encore intégrée à Visual Studio. Elle a donc pour but de laisser l’utilisateur ouvrir et explorer un dossier entier dans Visual Studio, le tout en conservant l’auto-complétion, le débogueur, la possibilité de compiler…etc.

Mon sujet de stage a été de travailler sur l’UX et l’optimisation de cette fonctionnalité. Visual Studio 15 Preview 5 intègre la majeure partie de ma contribution de ces 12 dernières semaines (il y a « presque » tout), et je vais enfin pouvoir dire « Tu vois ce bouton ? C’est moi qui l’ai fait ! 😀 Quoi ? Il bug ? Finalement ce n’est pas moi… ».

Open Folder

Je ne vais pas rentrer dans les détails techniques du pourquoi du comment, mais pour faire simple j’ai dû recoder la plupart des fonctionnalités existantes de l’Explorateur de Solution pour que l’UX y soit similaire. Cela inclut les éléments suivant :

  1. Copier
  2. Coller
  3. Couper
  4. Ouvrir le dossier dans l’explorateur de fichier
  5. Ouvrir une invite de commande
  6. Copier le chemin
  7. Glisser/Déposer dans l’explorateur de dossier
  8. Limiter à (Scope to this)
  9. Le tout nouveau bouton dans la barre d’outils qui permet de permuter entre la vue dossier et la solution de notre choix, si une solution est disponible dans le dossier que l’on a ouvert. Inversement, passer de la vue solution à la vue dossier.

Coté optimisations, ceux qui utilisent déjà cette fonctionnalité dans les précédentes Preview de Visual Studio ont dû remarquer que l’indexation du dossier que l’on ouvre était lente. Cette indexation permet de lister les fichiers du dossier ouvert et de créer des liens entre eux afin que l’utilisateur puisse avoir, par exemple, l’auto-complétion, les références aux méthodes…etc. J’ai travaillé en binôme à optimiser en vitesse cette partie d’Open Folder. Pour vous donner un exemple, si l’on prend le repository de « msbuild » sur GitHub, avant, ça prenait 5 à 6min à être indexer. A présent, ça ne prend plus qu’une vingtaine de secondes. Mon manager et nos supérieurs sont très satisfait de ce résultat, mais nous sommes toujours à l’écoute des feedbacks des utilisateurs (go go go !).

La vie à Microsoft en tant que stagiaire

Il faut reconnaître que l’on est chouchouté. Il faut dire que la concurrence est rude. La plupart des stagiaires ici font également des stages chez Google, Apple, Amazon, Facebook, Twitter. Ainsi la barre est haute pour tenter de recruter.

Ça passe par le salaire, les évènements et la région principalement. Par exemple, cette année j’ai eu l’occasion d’aller faire de la randonnée avec des stagiaires et RH, nous avons eu un concert privé de Ellie Goulding et une Surface Book en cadeau, et j’ai même put rencontrer le papa de SharePoint et One Drive, Jeff TEPER, avec lequel j’ai pu déjeuner. Je l’avais rencontré dans mon école, SUPINFO, à Paris en Mai dernier. Il a donc été un peu plus facile de garder le contact vu que j’arrivais à Redmond un mois plus tard. Mais évidemment, Mr.TEPER n’a pas la même valeur que le sésame, le CEO, le Dieu, Satya NADELLA.

Selfie avec le CEO

Un beau jour, je reçois dans mes emails une invitation à un meeting : « Coffee with Satya ». Les RH ont sélectionné 20 stagiaires sur 1500 pour boire un café le lendemain avec le patron de Microsoft, Satya NADELLA.

C’est la gorge un peu sèche que je suis arrivé au bâtiment 34 de Microsoft, a un point de rendez-vous ou un employé a vérifié mon identité pour être sûr que je ne m’étais pas invite moi-même a l’évènement. J’entre dans la salle. Je me suis assis parmi les autres invités, majoritairement féminin (qui a dit que les femmes n’étaient pas de bons ingénieurs ?). C’est une salle de réunion comme tant d’autres à Microsoft, mais un petit peu plus design il faut le reconnaître, et puis avec une Surface Hub, il n’y en a pas encore partout sur le campus !

Après un petit peu d’attente et un briefing des RH, Satya NADELLA entre dans la pièce. On va faire une séance de question réponse.

Ce fut donc 30 minutes de discussion avec Satya et 20 stagiaires. On lui posait des questions, et il nous en posait également.

Pour ma part, j’ai eu l’occasion de lui poser une question plus ou moins improvisée : j’ai commencé par me présenter, dire que j’étais Français et que nous avons quelques soucis liés au terrorisme. J’ai fait remarquer que nos produits, Windows en particulier, est utilisé par les terroristes contre nous, pour, par exemple, télécommander une voiture à distance qui irait exploser quelque part. Ma question était donc de savoir comment nous pourrions épauler les services anti-terroristes (la CIA notamment, en leur permettant « peut-être » d’espionner/identifier ces personnes au travers de nos produits) tout en respectant la vie privée et la sécurité de nos utilisateurs. La question est complexe, je le conçois, et n’attendais pas de réponse miracle, mais plutôt son point de vue sur le sujet.

Il a ainsi répondu qu’il faudrait faire un nouveau package de lois, en commençant par les Etats-Unis puis dans le reste du monde, afin de modérer davantage la façon dont on récupère et conserve les données anonymes des utilisateurs à travers leurs écrans. Puis l’on pourra créer des législations qui permettront à ces services gouvernementaux de forcer une entreprise à récupérer des données beaucoup plus personnelles d’un utilisateur ciblé. D’où l’intérêt de faire des lois qui protègeront la façon dont l’on récupèrerait et gèrerait ces données personnelles.

Évidemment, tout cela n’est qu’une réponse a une question. « Quel votre point de vue/idée là-dessus monsieur ? ». Je ne pense pas qu’on l’appliquera dans les 5 prochaines années. Les utilisateurs ne sont pas prêts à céder leurs données pour une meilleure sécurité car au contraire ils ne se sentiraient pas en sécurité.

Je n’ai malheureusement pas encore eu l’autorisation de ma RH de publier la photo de groupe que l’on a eu avec ce monsieur. Je peux la montrer en privé, c’est tout pour le moment. 🙂

Conclusion

Quel été ! Le reste du séjour et de l’expérience est très similaire à mes précédents stages. Il serait donc inutile de me répéter encore.

Ce fut un privilège de pouvoir contribuer à Visual Studio, un outil que j’utilise depuis 11 ans maintenant, et qui a été une immense source d’inspiration pour SoftwareZator.

Je vais retourner à Redmond à partir d’Avril pour mon stage de fin d’étude. Cette fois-ci probablement dans l’équipe XAML Expérience (qui travaille sur le designer XAML et Blend principalement), VS IDE Editor (qui travaille sur l’éditeur de code de Visual Studio) ou bien VS Debugger (qui travaille sur les outils de débogages de Visual Studio). Le placement dans les équipes se fait en fonction de nos préférences et des places disponibles dans les bureaux.

N’hésitez pas à me poser des questions si ça vous vient.

A bientôt !

30 mai
2

Stage à Microsoft 3.0

Hello World !

Ca y est, Juin approche, et c’est l’occasion de dire que je repars pour un troisième stage à Microsoft cet été, tout près de Seattle aux Etats-Unis, du 25 Juin au 23 Septembre.

Cette année, mes parents viendrons en Juillet et ma copine en Août, pour visiter la région. Ca va être sympa. J’ai déjà prévu d’aller à Vancouver au Canada avec cette dernière début Septembre.

Je serais encore et toujours dans la division développeur (DevDiv). J’avais demandé les équipes qui travaillent sur les systèmes d’exploitation (OSG, Operating System Group) mais ma RH a dû oublier ce détail. Je change tout de même d’équipe. J’intègre l’équipe Visual Studio IDE Project & Telemetry. Ce n’est pas la même équipe que lors de mon tout premier stage en 2014, mais le hasard fait que mon manager est le même qu’en 2014. Ca fait plaisir de retrouver tout de suite un visage connu.
Je sais déjà sur quoi je travaillerai exactement, et comme l’an dernier je ne pourrai pas beaucoup en parler avant une sortie officielle. Je sais également que dans cette équipe on fait principalement du C++ et du C#, encore deux langages que j’apprécie. J’ai hâte de me remettre au boulot à Corp.

Je ne vais sûrement pas faire d’articles hebdomadaires comme l’an dernier, ça sera sûrement plus ponctuel. D’ailleurs, je vous invite à me poser des questions dans les commentaires sur des points que vous aimeriez connaître autour du sujet « faire un stage à Microsoft ». Je ne sais pas moi, le visa, la vie avec les autres stagiaires, ce que vous voulez tant que j’ai le droit d’en parler librement.

Articles précédents :

  1. Stage à Microsoft 1.0
  2. Stage à Microsoft 2.0

À bientôt !

4 mars
8

[SoftwareZator] This Is It

TL;DR

Bonjour,

Suite à une évolution de mon parcours personnel et professionnel, je souhaite mettre fin au support de SoftwareZator. La version 2012 (3.0.0.3) est donc la dernière version stable à ce jour (mais n’est pas supportée par Windows 10).

Merci de votre compréhension.


Hello World à tous !

Quel triste nouvelle j’annonce aujourd’hui, mais en même temps, on s’y attendait.

Voici 4 ans que SoftwareZator 2012 a vu le jour. C’était de loin la version la plus aboutis de ce projet. Il a été mon projet le plus ambitieux : donner la possibilité à n’importe qui de développer. Je le considère encore comme un petit bébé. Il a été un tremplin à ma carrière.

Mais toute bonne chose à une fin. J’avais 14 ans quand j’avais commencé ce projet. J’en ai 23 aujourd’hui. Les gens changes, le parcours professionnel aussi, et le temps personnel aussi.

3 mars
0

[MSIL] Désassembler, modifier, recompiler un Assembly .Net / WinRT

Hello World à tous !

Voici quelques mois que je n’ai pas écrit d’article. Aujourd’hui nous allons voir comment désassembler, modifier et recompiler un EXE ou une DLL précédemment compilé en .Net ou en WinRT.

Avant toute chose, une petite mise en garde au cas où : désassembler un programme peut s’avérer être illégal selon la licence associée au composant que vous allez exploiter.

Voilà, je me sens beaucoup mieux. 🙂
Qu’allons-nous voir plus précisément ?

ILDASM et ILASM

Je m’attaque à un cas de figure particulier. Généralement nous désassemblons un Assembly grâce à des outils comme JustDecompile ou .Net Reflector. Ces deux outils ont l’avantage de nous afficher du code C# compréhensible de tous, et même de l’exporter sous forme de projet pour Visual Studio. Seulement quelquefois, ça ne fonctionne pas très bien. Et c’est pire quand l’Assembly a été obfusqué auparavant (là en général c’est un désassemblage totalement illégal…) car ça ne compile même pas et il faudrait des jours voir des semaines pour obtenir un code qui compile correctement sans avoir changé le comportement du programme.

Du coup, la solution que je propose est de mettre la main dans le MSIL (Microsoft Intermediate Language). C’est un langage intermédiaire généré lors de la compilation et qui est converti par la suite en code natif. L’avantage est que même obfusqué, il est compilable.