May.31

MySudoku

Et voila, ce sur quoi je travaillé ces derniers temps MySudoku est enfin « releasé » et vient d’être publié sur SUPINFO Project comme projet chef d’oeuvre !

MySudoku est un petit jeu du Sudoku développé en C# sous .NET 2 qui reprend les « bases » de mes Sudoku’ Days (n°1n°2) 😉

Fonctionnalités :

  • Chargement/Enregistrement des grilles
  • Génération automatique de grille
  • Création manuelle de grille
  • Résolveur de grille de tout niveau
  • Fonctions de verification de grille
  • Capture et Impression de grille
  • Application Anglais/Francais
  • Programme d’installation (en francais uniquement) avec installation des codes sources.

Prérequis :

  • Framework .NET 2.0

Le programme d’installation : click here
Les codes sources : click here

C’est bon maintenant je rompe définitivement avec le sudoku 😀

Perso,Dev,.NET

May.25

Newsletter au Laboratoire Microsoft

Mon cher ami Benuts et moi même sommes fier de vous annoncer en exclusivité la sortie prochaine (fin de semaine?) de la Newsletter au Laboratoire Microsoft (www.labo-microsoft.com) !!! 😀

Benuts se sera occupé de faire la « template », en gros le design et la forme de la Newsletter (le coté visible) et moi comme à mon habitude, la partie background, soit non visible, bref le systeme de génération et d’envoi de la newsletter…

La 1er newsletter sera envoyé à plus de 30.000 destinataires (inscrit sur le site) en fin de semaine théoriquement…

Coté technologique, j’ai utilisé l’ASP.NET 2 pour faire l’application de génération et d’envoi ! J’attire votre attention sur le fait que maintenant, en ASP.NET 2, les classes pour le Mail ne se trouvent plus dans le namespace System.Web.Mail (enfin si, mais le compilo nous informe que cela est obsolete) mais sur le namespace System.Net.Mail !

On y trouve notamment, la classe SmtpClient pour l’envoi et surtout la classe MailMessage pour la génération de l’email. Les propriétés To, CC et Bcc sont maintenant des collections de la classe MailAddress !
De plus, la fonction SendAsync() de la classe SmtpClient fait son apparition, nous permettant d’envoyer le mail de facon asynchrone, donc de facon détaché au thread qui l’appel, bref, comme dirait Redo : QUE DU BONHEUR 😀 !

Pour les curieux : la bible MSDN sur le System.Net.Mail
Et biensûr le labo ICI !!!!

Have a nice night 🙂

Dev,.NET

Apr.21

Les Complexes, pas complexe !!!

Très souvent en Informatique, on a besoin des maths. Les Complexes en font partie, on les utilisent beaucoup quand on travaille sur des applications graphique 2d/3d ! Personnellement, je les utilisent nottament dans mon simulateur d’immunologie (SimImmuno). Malheuresement, ma plateforme adorée .NET ne comporte pas de classe lié a l’utilisation des Complexes d’où mon idée de faire une structure pouvant manipuler les bases des complexes (operations de base, module, argument, etc..) pour pouvoir jouer avec les complexes dans n’importe quelle application !
La structure que j’ai ecrite nommé Complexe comporte :

  • 1 constructeur pour créer de nouveau complexe :

  • 2 accesseurs en get/set pour pouvoir recuperer ou modifier les parties Reelles et Imaginaires du complexe

  • 4 accesseurs en lecture seule (get seulement) pour récupérer le Conjugué, le module, l’argument et le carré d’un complexe :

  • 1 méthode : Rotation qui retourne un nouveau complexe de la rotation du complexe par un angle (en double) et d’un centre (Complexe)

  • 4 surcharges d’operateurs pour les operations +, -, *, / respectivement addition, soustration, multiplication, division :

  • Et pour finir 1 surcharge de la methode ToString() afin de pouvoir recuperer le complexe en string sous la forme a+ib :

Bref il y a toutes les fonctions de bases sur les complexes pour pouvoir les utiliser très facilement dans vos développements 🙂

Screenshot du programme de Demo en mode Console :

Code source du programme console de Demo
Code source de ma structure complexe (v1.0)
UPDATE :
Code source de ma classe complexe (v1.1 du 22/02/07)

Pas si complexe les complexes maintenant 😀

Perso,Dev,.NET

Feb.09

La galère des Threads sous .NET 2.0 :-)

On s’est retrouvé, ben et moi, lors de l’ecriture de notre logiciel Skin.be dans une petite galère avec l’utilisation des Threads sous le .NET 2.0 !

C’est quoi un thread ?
Lorsque vous démarrez une application, Windows crée automatiquement un nouveau « thread » d’exécution spécialement pour votre application. Ce « thread » permet d’isoler votre application dans son propre environnement unique, bien séparé de tout autre application. Attention, il ne faut pas les confondre avec les AppDomain ! Un thread est une « unité d’execution » alors qu’un domaine d’application et une « unité d’isolation d’execution » !! J’eclaircirai tout cela plus tard…

A quoi ca sert un thread ?
Les threads permettent d’effectuer plusieurs taches dans votre programme en même temps : le multi-tache ! Imaginez un serveur web mono-thread où 2 clients se connecte en meme temps : 1er arrivé, 1er servi : 1 seul client à la fois ce qui n’est pas super !! Hors avec les threads, dès qu’un client se connecte, un nouveau thread est lancé independement des autres pour pouvoir « s’occuper » de nouveau client !

Rapport entre Skin.be et les threads
Dans notre petit logiciel, quand vous cliquez sur « Télécharger », une fonction est appellée et vient faire une boucle pour télécharger toutes les images. Seulement cette fonction étant très gourmande et étant executée dans le meme thread fige l’interface graphique !
Notre programme devient donc tout « blanc » (plus de rafraichissement graphique) et on peut plus le controler a moins d’attendre la fin du téléchargement ! Pas génial hein !
Donc pour remedier a cela, nous executons la fonction de téléchargement dans un autre thread ce qui permet de garder le contrôle sur notre GUI (interface graphique du programme).

La où ca devient galère !
Le probleme dans notre cas, c’est qu’a chaque image téléchargée, notre fonction de Telechargement rafraichit la GUI au moyen d’une ProgressBar (10%..20%..30%…) et d’un petit label: « Telechargement de la photo 2/8 ».
Seulement sous .NET 2.0, si vous modifiez un controle d’un autre thread vous aurez un beau message de votre compilateur :

Illegal cross-thread operation: Control ‘ProgressBar’ accessed from a thread other than the thread it was created on

Le .NET framework 2.0 détecte lui même que l’on cherche a modifier une propriété du label dans un autre thread que le thread principal ce qui provoque cette erreur !

Comment fait on alors ?
Il faut en fait demander au contrôle d’effectuer lui même la resynchronisation ! Pour cela on va utiliser des délégués.
Déclarons-le au debut de notre programme :

Puis dans votre code, créez une fonction pour la mise a jour de votre contrôle (ou vos contrôles) :

Dans notre cas la fonction UpdateControlProgress récupérera l’avancement dans l’objet sender qui sera convertie en Integer, puis on viendra mettre a jour notre ProgressBar et label en fonction.
Il ne reste plus qu’a appeler cette fonction par notre délégué dans le code de votre Thread :

(nb: i est un Integer representant l’avancement du téléchargement dans notre application !)

C’etait simple non ? 🙂

Dev,.NET

Feb.09

AppDomain

Je m’étais intérressé il y a quelques semaines aux AppDomain sous .NET donc je vous en touche quelques mots 🙂

Les AppDomain ou domaines d’application sont des environnements dans lequelles vont s’executer votre programme. Ce sont en gros des processus mais au niveau du CLR .net !

Dés que vous lancez un programme .net il est chargé dans un nouveau domaine d’application qui contient votre programme .net (assembly) ainsi que les assembly qu’il a besoin pour fonctionner (réferences) ! .NET offre la possibilité, par System.AppDomain, de les controler.

Cela à 2 avantages :

  • la securite car le programme .net est dans un espace clos : le domaine.
  • les performances : tres utile dans le cas d’une application à plugins. On peut charger chaque plugins dans un domaine different du principal pour voir les décharger (tuer) a la volée !!

Pour plus d’infos, je vous conseille vivement 2 très bons articles et en francais s’il vous plaît :

Et sur ceux, bonne nuit 🙂

.NET

Feb.07

MacroSeb.GenererProprietes()

Je vous présente ma petite macro pour VS 2005 que j’ai ecris la semaine derniere en cours de prog. evenementielle avec Rédo!
Elle permet très rapidement de créer des propriètes (champs et accesseurs associés) en VB.net ou C# (detection automatique !). Une petite approche de la RAD de type bruteforce ^^

Exemple en C#:

J’écris dans mon fichier source:

J’execute ma macro, et elle me remplace le tout par :

Ce qui me fait gagner énormement de temps dans mes developpements… Et elle le fait aussi bien en VB.net (elle detecte au préalable l’extention du fichier source ! « .cs » = code c# ou « .vb » = code VB)

Niveau code, rien de bien compliqué, moins de 150lignes, elle commence par récupérer l’extention du fichier pour choisir le langage à generer en sortie, puis elle enregistre dans un tableau a 2 dimensions le nom de la propriete et son type, elle efface tout puis ecrit dans le bon langage, les champs (privés) et les accesseurs (get/set public).

A noter: pour que la macro fonctionne, vous devez ecrire une seule propriete par ligne de la facon suivante : <nom> <type> (ex: nom string)

Télécharger la macro ici

Perso,Dev,.NET

Feb.05

Un escargot dans une matrice !!!

Titre un peu surprenant je vous l’accorde 🙂

Dans le cadre de mon projet SimImmuno II, j’ai besoin de connaître quelles sont les cellules qui avoisine une cellule donnée. Pour cela, chaque cellule est placée dans une matrice (tableau à deux dimensions !).

Le but de l’algorithme est de parcourir cette matrice à partir d’un point donnée (la position de la cellule) en tournant autour comme un escargot.

Petit exemple illustré :

Pour ne penser qu’à l’algorithme oublions les histoires de cellule. Prenons un tableau de 100×100 avec un point de référence aux coordonnées 50;50.

Nous voulons juste récupérer les coordonnées des positions autour de notre point de référence qu’empruntera notre escargot (Il suffira après de tester si aux coordonnées visitées il y a ou pas la présence d’une cellule).

Dans notre cas, les coordonnées à visiter sont : 50;49, 51;49, 51;50, 51;51, 50;51, 49;51, 49;50, 49;49, etc…

Si l’on illustre ça par le schéma :

On peut observer que l’on avance de x cases suivant notre avancement par multiple de 2 : 2 fois 1case, 2fois 2cases, 2fois 3cases, 2fois 4 cases, etc… L’on appellera cela le nombre de pas qui s’incrémentera tous les 2 avancement. Puis l’on « tourne » : Haut->Droit->Bas->Gauche->Haut->etc…

Pour coder ca en c#, définissions tout d’abord une énumération pour la direction :

Nous allons maintenant créer une fonction Tourner qui prend en argument la direction précédente et retourne la nouvelle direction de cette maniere : Haut->Droit->Bas->Gauche->Haut->etc.. Ce qui nous ammene à écrire :

Maintenant, il nous faut une fonction nous permettant de nous renvoyer les coordonnées de la prochaine position en fonction de la position précédente, du nombre de pas et de la direction (a noter que les positions sont matérialisés par l’objet Point possédant les propriétés X et Y) :

Une fois tout cela créé, il nous reste plus qu’a créer la fonction principale du programme composée de 3 boucles :

  • La 1er, boucle de 0 au nombre de pas (nommé jump) et calcule les prochaines positions.
  • La 2eme, boucle de 0 a 2 et appelle la 1er boucle, incrémente jump puis appelle la fonction Tourner
  • Enfin la dernière, de 0 a X où X le point d’arrêt.

Le code donne :

Et voila le tour est joué ! Si l’on s’amuse a mettre le code :

à l’endroit de Insérer le code voulu ! nous obtenons :

Facile non ? 🙂

Dev,Algo,.NET