Welcome to my blog

Here, I talk about my projects, .Net, and work.

25 Juin, 14

Gestion des threads (file d’attente) en C++


Le C++… J’en ai déjà fait il y a quelques années, mais je m’y suis réellement mis à fond cette année. C’est cool, j’aime bien, enfin bref. Dans un de mes précédents articles je vous parlais d’exécuter plusieurs « await » (façon de parler) à la fois en C# (ici). Aujourd’hui, je vous propose de quelque chose de plus poussé en C++ natif.

Cette année dans mon école, SUPINFO, on a eu à réaliser un moteur de recherche en projet de fin d’année. Dans ce projet, le back-end devait être impérativement être fait en C++ natif. On a passé 5 mois sur le projet au complet, en appliquant une sorte de SCRUM simplifié pour s’adapter à nos horaires académiques. J’ai vraiment adoré ce projet, toujours bonne ambiance, aucun stress, projet bouclé avec 3 semaines d’avance, bref, un scénario idéal.

Ma Dream Team

 

THE Search Engine

Oui ça fait très « Apple » 🙂

Problématique

Lorsque l’on s’est occupé du back-end, on s’est fait la réflexion suivante : lorsque l’on indexera un site internet, on va détecter des url à indexer dans chacune des pages au fur et à mesure. Histoire de gagner en vitesse, on va utiliser des Threads pour analyser plusieurs pages internet à la fois. Seulement voilà, si je prends l’un de mes sites préférés (MSDN ? \o/), je vais trouver 200 url par pages. 200 Threads exécutés à la fois, c’est juste impensable ! Le CPU va souffrir, selon les traitements, la RAM va en prendre un coup également. Bref, on ne peut pas laisser faire le programme ainsi.
Ainsi, deux solutions s’ouvraient à nous :

Read more
8 Mar, 14

SoftwareZator 2014 (4.0.0.0)


Ça fait longtemps que je n’ai pas donné de nouvelles de ce projet. Presque 1 an déjà ! Je viens vous apporter quelques nouvelles dans cet article, et j’espère, de bonnes nouvelles.

WinRT

Bonnes nouvelles, bonnes nouvelles… Mouai, on va commencer par une (unique) mauvaise nouvelle : le support de WinRT n’est finalement pas disponible. Vous avez sûrement vu dans ma vidéo de présentation de l’an dernier que l’on pouvait réaliser des applications pour l’environnement tactile de Windows 8. La technologie avançant plus vite que ce que je suis capable de donner sur un aussi gros projet, j’ai pris du retard, et ai décidé de reporter cette fonctionnalité à une prochaine version. Je m’excuse donc auprès de mes nombreux utilisateurs qui souhaitaient pouvoir exploiter cette fonctionnalité, il faudra attendre encore. Mettez ça sur la faute du grand manitou qui a refusé de me cloner pour être plus productif, ou bien sûr le fait que je travaille seul sur ce projet.

Du coup, SoftwareZator 2014, c’est quoi?

Disons que c’est une version intermédiaire à celle qui supporterait WinRT. Elle contient belle et bien des nouveautés 🙂

Compatibilité

Tout d’abord, et c’est une première en 4 versions de SoftwareZator : tous les projets développés avec SoftwareZator 2012 sont entièrement compatibles avec SoftwareZator 2014.

Read more
9 Jan, 14

J’ai passé un entretien à Microsoft Corp


Ceux qui me connaissent le savent déjà : Microsoft est la société que je souhaite de tout cœur intégré depuis déjà de nombreuses années. Récemment, j’ai eu la chance de pouvoir passer des entretiens, le 3 Décembre 2013, au QG de Microsoft à Redmond, près de Seattle aux Etats-Unis, afin de décrocher un stage d’été.

On m’a beaucoup demandé quelles questions on m’a posé là-bas, j’écris donc cet article pour vous le faire partager.

Je ne remercierais jamais assez les personnes qui m’ont soutenu et aidés à obtenir ces entretiens. Ils se reconnaîtront j’en suis sûr.
Voici ci-dessous comment s’est déroulé mon entretien pour un stage (c’est apparemment légèrement différent pour un job).

Arrivé au campus

J’étais attendu à 10h au bâtiment 111 du campus de Microsoft, un bâtiment de recrutement. J’y ai rencontré les autres étudiants qui venaient passer des entretiens. Nous étions une vingtaine. D’après ma recruteuse j’étais le seul Européen ce jour-là. Tous les autres étaient canadiens ou américains.

On a commencé par nous offrir un petit déjeuner, puis on nous a expliqué comment allait se dérouler la journée. J’ai ensuite été appelé par ma recruteuse pour passer un simple entretien purement Ressources Humaines : on m’a demandé de me présenter, quelle est mon école, en quel année je suis, quand se déroule mes stages habituellement et qu’est-ce que je fais en France en tant que Microsoft Student Partner et Ambassadeur Microsoft.

La recruteuse m’a ensuite présenté les différents entretiens que j’allais avoir et let’s go !

Premier entretien technique

Avant d’arriver aux Etats-Unis, j’ai dû expliquer par email quel domaine m’intéresse le plus, en l’occurrence, être SDE (Software Development Engineer Intern) et de préférence dans la division Visual Studio, qui demeure m’a plus grande source d’inspiration pour développer SoftwareZator.
Par conséquent, je me suis retrouvé à passer tous mes entretiens techniques dans la division Visual Studio, qui regroupe le logiciel Visual Studio, le .Net Framework, le site visualstudio.com et TFS (Team Foundation Service).

Read more
10 Oct, 13

Assurer la rétrocompatibilité dans une application Desktop utilisant les APIs WinRT


Bonjour/Bonsoir à toutes et à tous !

Récemment, dans deux de mes projets personnels, j’ai eu besoin d’utiliser des APIs WinRT dans une application bureautique. Avec quelques manipulations, ça fonctionne, mais je me suis très vite rendu compte que l’on perdait alors la rétrocompatibilité de l’application avec Windows Vista et 7. Je vais donc donner une petite astuce toute bête et très rapide qui permet d’assurer la rétrocompatibilité.

Pour cela vous aurez besoin :

– D’un projet type Application Windows.
– Du SDK Windows 8 ou 8.1 selon les APIs que vous souhaitez utiliser.
– 125gr de beurre.
– Et 2 œufs.

Configuration du projet

Tout d’abord, vous aurez besoin du fichier « Windows.winmd », fournit par le SDK de Windows 8/8.1. Vous trouverez ce fichier à l’emplacement suivant : « C:\Progam Files (x86)\Windows Kits\8.0 (ou 8.1)\References\CommonConfiguration\Neutral\Windows.winmd ».

Essayez d’ajouter ce fichier aux références de votre projet Application Windows, vous rencontrerez une erreur.

Résolvons le soucis : Déchargez votre projet dans Visual Studio, puis faîtes clic-droit sur le projet, Modifier le fichier de projet. Sous la ligne :

[csharp]<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>[/csharp]

Ajoutez la ligne :

[csharp]<TargetPlatformVersion>8.0</TargetPlatformVersion>[/csharp]

Rechargez le projet, puis essayez d’ajouter « Windows.winmd » aux références du projet; cette fois-ci, ça passe. Vous pouvez désormais utiliser les APIs WinRT dans un projet bureautique.

Le problème de compatibilité

C’est super de pouvoir utiliser les APIs WinRT, mais si on ne fait un petit peu attention, on perd bêtement la rétrocompatibilité du projet car ce fichier est exploitable exclusivement sous Windows 8 et 8.1, même avec une condition « Suis-je exécuté sous Windows 8? ». Cette rétrocompatibilité est perdue au moment ou notre programme tente de charger « Windows.winmd » en mémoire (rappelons que notre programme ne charge pas toutes les références à son démarrage).
Il y a UN unique point à retenir pour éviter de charger une référence avant d’en avoir réellement besoin : ne pas tenter par quelque moyen un accès à la Class contenant un membre susceptible de faire appel à cette fameuse référence.

Autrement dit : tant que vous n’instanciez pas ou n’appelez pas un membre statique d’une Class utilisant « Windows.winmd », celui-ci ne sera pas chargé, donc la rétrocompatibilité est assurée.

La solution

Du coup, vous l’aurez sûrement devinez, la solution est assez simple :

– Créez une Class « MyClassWinRT » qui sera chargé d’utiliser les APIs WinRT (de préférence non statique)
– Utilisez le code suivant, à l’extérieur de cette Class, pour tester si votre application tourne sous Windows 8 ou supérieur :
[csharp]private bool RunningOnWindows8OrHigher()
{
return (Environment.OSVersion.Version.Major == 6 && Environment.OSVersion.Version.Minor >= 2);
}[/csharp]

Voila, il ne reste plus qu’à exploiter la Class :

[csharp]private void OkButton_Click(object sender, RoutedEventArgs e)
{
if (RunningOnWindows8OrHigher())
{
var winRt = new MyClassWinRT();
winRt.ShowToas(); // Une fonction qui affichera un ToastNotifcation par exemple.
}
else
{
// Afficher une InfoBulle
}
}[/csharp]

C’est tout 🙂

Avec cette méthode, SoftwareZator 4.0 est capable, par exemple, de récupérer la liste des applications Windows Store installés, et la prochaine mise à jour de ClipboardZanager sera capable d’afficher des ToastNotifications tout en préservant la rétrocompatibilité avec Windows Vista et Windows 7.

Alternative

Une autre solution est possible, mais je l’apprécie beaucoup moins : chargez « Windows.winmd » au Runtime et utilisez les fonctions par réflexion. Ca vous évite de passer par une Class, mais le code devient beaucoup moins propre, voir dégueulasse ! A éviter donc 🙂

 

8 Août, 13

Veler Software, c’est fini, mais pourquoi?


C’est à la fois avec le sourire et un petit pincement au cœur que j’ai publié cet article et mon nouveau site internet ce matin, sur lequel je planchais depuis Février quand j’avais le temps, que vous découvrez actuellement. Et oui, comme vous le constatez, Veler Software, c’est fini ! Cette belle aventure aura durée 6 ans et 6 mois. Beaucoup se demanderons pourquoi un tel changement? Les explications sont ci-dessous.

Premier point : pourquoi?

Le changement, c’est maintenant ! Aussi brutal qu’une mouche écrasée ou qu’un câble Ethernet débranché par sa copine (je suis sûr que c’est déjà arrivé à certains) !
Il y a 4 raisons à ce changement :

Read more