Bienvenue sur mon blog

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

5 Août, 18

BaZic – Un langage de programmation fait maison


Hello world à tous !

Il y a deux ans, en 2016, j’avais fait un petit interpréteur d’algorithme en C# pour m’amuser. Ca fonctionnait plutôt bien mais ça ressemblait plus à un PoC qu’autre chose.

Plus récemment, j’ai repris ce projet pour en faire quelque chose de plus complet et de plus propre. Le but est toujours de m’amuser et d’apprendre. Le but n’est pas de proposer une nouvelle technologie ou de rivaliser quoi que ce soit.

BaZic

Bref, prenons un langage simple, au hasard, le Basic, faisons-le à notre sauce, mettons un « Z » au milieu du nom (comme dans tous mes projets, je ne vous apprend rien), et PAF, voici BaZic !

BaZic est un langage procédural semi-dynamique orienté objet avec une syntaxe simple permettant d’exécuter des petits programmes pouvant en partie exploiter les APIs .Net.

Lire la suite
15 Oct, 17

Générer tous les T4 Text Templates à la compilation


Hello World à tous !

Si comme moi vous utilisez du T4 Text Templates (fichiers .TT) dans vos projets avec Visual Studio et avez besoin de les générer avant chaque compilation, cet article est pour vous.

Depuis un certain temps, je me suis mis en tête d’avoir une numéro de version d’Assembly qui correspond à « Année.Mois.Jour.NombreDeBuildDansLaJournée ». Pour générer celà, rien de tel qu’un peu de méta-programmation avec du T4. Et comme je suis un fénéant, j’ai envie de faire en sorte de générer automatiquement tous mes fichiers T4 avant la compilation.
Ces dernières années, j’ai utilisé plusieurs façons de faire dans divers projets sous Visual Studio 2013, 2015 et maintenant 2017, souvent bancales. Entre les lignes de commandes en Pre-Build, les chemins qui n’existent plus d’une version à une autre de Visual Studio voir d’une machine à une autre, et bien j’étais gâté.

Lire la suite
18 Oct, 16

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 :

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.

Lire la suite
3 Mar, 16

[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.

Lire la suite
26 Avr, 15

Simulateur d’algorithme cross-plateform en C#


Hello World !

Dans le cadre de mes travaux actuels, hier, j’ai rapidement développé un prototype permettant de simuler un algorithme en C#, le tout cross-plateforme. L’architecture du projet ressemble un petit peu à ce que j’ai déjà fait dans SoftwareZator (Action, ActionTools, CodeDom…etc pour ceux qui l’utilise).

Le Concept

Le concept est d’être capable de simuler et de déboguer un algorithme à l’exécution en utilisant du C#. Histoire d’avoir un challenge encore plus élevé, on veut que ça soit cross-plateforme.

Cela implique plusieurs choses :

– Il me sera impossible d’utiliser CodeDom ou Roslyn pour compiler et exécuter du code au runtime.

– Il me sera également impossible d’utiliser le Débogueur Windows car il est impossible d’y faire appel depuis une application WinRT par exemple.

– Ainsi, je vais donc créer ma propre architecture ressemblant à CodeDom, que je vais appeler « AlgorithmDom ».

– Et je vais créer un interpréteur qui va analyser l’AlgorithmDom et réaliser des actions en fonction de ça.

Lire la suite