Bienvenue sur mon blog

Ici, je parle de mes projets, de .Net, et de travail.

23 Avr, 15

Récupérer l’ID unique du CPU en C#


Hello World !

Quelle galère ! Durant le développement de PasswordZanager, j’ai eu besoin de récupérer l’ID unique du processeur.

Il y a peut-être d’autres solutions que la mienne, mais c’est le plus simple trouvé sans être obligé d’ajouter 36000 dépendances et DllImport.
Pour cela, on va ajouter la référence System.Management à notre projet et faire une requête WMI (Windows Management Instrumentation) avec la classe ManagementObjectSearcher :

Résultat :

cpuId

 

Voilà, pas plus compliqué en fait. 🙂

28 Mar, 15

Ouverture de mon GitHub


Oui, je sais ce que vous allez me dire, il était temps. En réalité cela fait depuis 2013 que j’ai un compte GitHub, mais seulement depuis quelques jours que j’y ai envoyé certains de mes projets. Vous y retrouverez pour le moment ma guirlande connecté faite à l’arrache, Loop, mon moteur de recherche académique de l’an passé, et ZolyFramework, un ensemble de librairies permettant d’avoir un joli design style Metro en WPF.

Bref, voici mon GitHub.

GitHub
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 :

Lire la suite
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 🙂

 

19 Oct, 12

Gérer les bugs avec SoftwareZator 2012


Je constate de plus en plus que beaucoup de personnes utilisent le débogueur de SoftwareZator 2012 à tord et à travers sans réellement savoir l’utiliser. Cet article a pour but de vous initier au débogueur de SoftwareZator.

Comme souvent dans mes articles, on va commencer par de la théorie avant d’attaquer la pratique.

Qu’est-ce qu’un bogue?

Pour faire le plus simple possible : c’est quand un programme ne s’exécute pas comme nous le voulons, comme nous l’avons prévu, ou quand il nous retourne une erreur au moment de son exécution.
Lorsque vous ne parvenez pas à générer un projet, cela n’est pas considéré comme un bogue.

Qu’est-ce qu’un débogueur?

Ce n’est pas un outil miracle qui va vous corriger automatiquement vos erreurs. En revanche il peut vous aider à les résoudre. Lancer un projet « en mode débogue » a pour but d’identifier la partie d’une fonction qui ne répond pas à nos attentes, qui ne s’exécute pas comme nous l’avions imaginé. Concrètement, le débogueur a pour unique but d’identifier une erreur d’exécution dans votre projet, de vous afficher où cette erreur a été rencontrée, et de vous afficher des informations « pouvant » vous aider à identifier la cause exacte du problème et comment le résoudre.

Qu’est-ce qu’un point d’arrêt?

Un point d’arrêt permet, en mode débogue, de mettre en pause votre projet en cours d’exécution afin d’avoir accès aux fameuses « informations pouvant vous aider à identifier la cause d’un problème » à un moment choisi dans vos fonctions. Nous verrons dans la pratique son utilisation, qui vous éclaircira sur l’utilité de ces points d’arrêts.

Présentation des outils de débogage de SoftwareZator 2012

SoftwareZator 2012 (édition professionnelle uniquement) est constitué de plusieurs outils constituant le débogueur. Tout d’abord, le menu « Débogage ». Ce sont les commandes les plus importantes du débogueur. Vous pourrez lancez vos projet en mode débogue, les mettre en pause, les arrêter ou les reprendre.

Lire la suite