Afficher des bulles de notification dans la barre des tâches en C#

icon Tags de l'article : , ,

Avril 16, 2015
Hello,

Un besoin qui revient souvent en C#, pour des appli Winforms simples : pouvoir afficher des notifications dans la barre des tâches en C#.

Pour cela, j'utilise toujours la même méthode : un notifyIcon et l'appel à la méthode ShowBalloonTip :

this.notifyIconFormMain.Visible = true;
this.notifyIconFormMain.BalloonTipIcon = ToolTipIcon.Info;
this.notifyIconFormMain.BalloonTipTitle = "Relax your eyes";
this.notifyIconFormMain.BalloonTipText = string.Format("You will have to relax your eyes in {0} minutes.", minutes);
this.notifyIconFormMain.ShowBalloonTip(4); // 4 = le nombre de secondes d'affichage du message

Et voilà, une bulle apparaitra dans le coin de votre écran pour afficher votre message pendant 4 secondes !



Bon dev à tous !

Verrouiller une session en C#

icon Tags de l'article : , , ,

Avril 15, 2015
Hello,

Juste un mini article : comment verrouiller une session en C#.

La réponse est simple, à l'aide de ce petit morceau de code qui utilise user32.dll :

private const int WmSyscommand = 0x0112;
private const int ScMonitorpower = 0xF170;
private const int HwndBroadcast = 0xFFFF;
private const int ShutOffDisplay = 2;
[DllImport("user32.dll")]
private static extern void LockWorkStation();
[DllImport("user32.dll", SetLastError = true)]
private static extern bool PostMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam);

Voilà, vous n'avez plus qu'à appeler la jolie méthode LockWorkStation qui s'occupera de verrouiller la session utilisateur ! Pensez juste à faire attention quand vous testez, car si vous mettez ça dans une boucle vous risquez d'être bloqué... [oui, ça sent le vécu]

Bon dev!

source

Comment stocker ses mots de passe en .Net

icon Tags de l'article : , ,

Novembre 24, 2014
Il existe de nombreuses façons de stocker les mots de passe pour une application ou un site web. La triste nouvelle, c'est que la majorité des sites et des applications n'utilisent pas les bonnes.

Aujourd'hui nous allons voir comment bien faire les choses.

Déjà, voici les différentes façons de faire, de la plus ridicule à la plus paranoïaque :

  • Niveau 0 : tout en clair. Rien de bien compliqué, aucune sécurité, la moindre fuite de données et on doit demander à nos utilisateurs de changer de mots de passe... Vraiment pas top pour l'image. Sécurité : 0%

  • Niveau 1 : mots de passe hashés avec une clef en dur. Pourquoi pas, sauf que... ça ne sert à rien. Le hacker n'aura qu'à générer des rainbow tables à partir de votre clef, et il aura les correspondances en clair pour tous les mots de passe hashés en base. Sécurité : 1%

  • Niveau 2 : on hashe les mots de passe avec un sel, généré aléatoirement pour chaque utilisateur. Un petit peu mieux. Seul bémol : il suffit de régénérer des Rainbow Tables, une par utilisateur, et ... on a tous les mots de passe. Sécurité : 5%

  • Niveau 3 : on hashe les mots de passe avec un sel, généré aléatoirement pour chaque utilisateur, à l'aide d'un algorithme lent : BlowFish. Ici on corrige le principal problème du niveau 2 : générer des Rainbow Tables pour chaque utilisateur peut prendre des jours, voire des mois... Sécurité : 80%

  • Niveau 4 : on utilise un module physique pour hasher les mots de passe. Si quelqu'un essaye de le déplacer ou d'y accéder, il effacera automatiquement toutes les données. Vous l'avez compris, il s'agit du mode paranoïaque ! Sécurité : 99%

Vous l'aurez compris, on va surtout s'intéresser au niveau 3, facilement réalisable et ne demandant pas, lui, d'investissements financiers. La clef repose sur le fait d'avoir un sel généré unique par utilisateur, et d'utiliser l'algorithme lent BlowFish. A l'échelle d'un site web, le temps de hash de l'algorithme est court. Mais lorsqu'on fait du bruteforce, le temps pour générer un dictionnaire entier de mots de passe est gigantesque !

La mise en place est plutôt simple :

Il faut d'abord créer deux entrées dans notre base, une pour le mot de passe hashé, et une pour le sel. Il ne faut jamais stocker ni déplacer le mot de passe non hashé. Si vous voulez bien faire les choses, utilisez HTTPS et stockez le sel ailleurs.



Ensuite, il faut ajouter BCrypt.Net à notre projet (via NuGet) :



Cette implémentation de l'algorithme BlowFish offre 2 méthodes : GenerateSalt et HashPassword, à utiliser comme suit :



Maintenant vous n'avez plus qu'à implémenter la bonne logique dans votre code :
  • Lorsque l'utilisateur s'inscrit, on génère et stocke un salt aléatoire pour lui, puis on se sert de ce salt pour hasher son mot de passe.
  • Lorsqu'il se connecte, on récupère le salt, et on hashe le mot de passe saisi à l'aide du salt pour ensuite comparer les deux hashs générés.
  • Lorsqu'il a perdu son mot de passe, on génère un mot de passe et un salt aléatoires, pour ensuite lui envoyer un mail avec son nouveau mot de passe.

Voilà, j'espère que ce petit article vous a plu,

Bonne soirée à tous !

Un petit outil pour gérer ses fichiers de traduction en PHP

icon Tags de l'article : , ,

Septembre 17, 2014
Hello,

Juste pour ceux que ça intéresse, voici un petit outil très simple que j'ai développé pour moi afin de gérer les traductions dans mes applications en PHP.

Resmanager (sur Github)

Le fonctionnement est très simple :
  • on remplit le fichier resources.lng avec nos traductions
  • on lance le petit exécutable ResourcesSplitter.exe
  • ce dernier va générer automatiquement des fichiers PHP avec nos traductions, un fichier par langue
  • on n'a plus qu'à inclure/utiliser ces fichiers dans nos applications

Le petit exe est fait en .Net, il est très simple et son code source est également présent sur le repository (fichier ResourcesSplitter.cs).

Voilà, on ne sait jamais, ça vous servira peut-être ! Si vous avez des questions n'hésitez pas !

Bon développement à tous !

(Et oui, pour ceux qui se demandent, je m'en sert pour la nouvelle version à venir de MyCryptoChat :)

Les raccourcis clavier incontournables de Visual Studio

icon Tags de l'article :

Mars 03, 2014
Logo Visual Studio

Comme je me suis dit que ça pourrait vous intéresser... Du moins certains d'entre vous :

Voici la liste de tous les raccourcis Visual Studio que j'utilise presque tous les jours.

A apprendre par coeur quand vous passez du temps sur Visual Studio :

F12 : accéder à la référence
SHIFT + F12 : trouver toutes les références
F5 : lancer le DEBUG
CTRL + F5 : lancer l'application sans DEBUG
F6 : lancer le build
CTRL + PAUSE : arrêter l'opération en cours (build, déploiement, etc.)
SHIFT + F5 : arrêter le débug

CTRL + ; : faire apparaître le menu des types pour ensuite ajouter automatiquement un using (en faisant entrée)
CTRL + SHIFT + F : rechercher dans tous les fichiers
CTRL + , : accéder directement à une classe ou à un fichier en tapant son nom (ou un morceau de son nom)
CTRL + K + D ou CTRL + E + D : réindenter le fichier courant
CTRL + K + C ou CTRL + E + C : commenter la sélection
CTRL + K + U ou CTRL + E + U : décommenter la sélection
CTRL + M + O : plier toutes les méthodes et régions du fichier courant
CTRL + M + L : déplier toutes les méthodes et régions pliées

ALT + SHIFT + flèches ou sélection à la souris : sélectionner un bloc de texte sur plusieurs lignes
ALT + SHIFT + ENTREE : réduire les panels pour mieux voir le fichier courant
CTRL + F3 : recherche le terme sélectionné (F3 pour voir le terme suivant, etc.)
CTRL + SHIFT + V : remonter dans l'historique du presse-papier
CTRL + D + Q : espion express

En débug :

F10 : avancer d'un cran (on ne rentre pas dans un éventuel sous-traitement)
F11 : avancer d'un cran (on rentre dans un éventuel sous-traitement)
F5 : reprendre le déroulement normal (jusqu'au prochain point d'arrêt)
CTRL + SHIFT + F9 : supprimer tous les points d'arrêt

Bon dev à tous !

Un bon développeur restera un bon développeur, même sur d'autres langages

icon Tags de l'article : ,

Janvier 17, 2014


Ceux qui me connaissent un peu savent que je suis développeur .Net depuis maintenant... 4 ans. Avant cela, je développais beaucoup... en PHP. J’adorais ce langage. Je l'ai utilisé pendant presque 3 ans sur de nombreux projets : personnels, école, stages, etc.

Puis, j’ai découvert le .Net avec C#, Visual Studio et ASP.Net.
Smooth, efficace, programmer-friendly, le meilleur IDE du moment, des performances à tomber... tout ce qu’il fallait pour que je succombe et que je me plonge dans ce langage à fond.

Sauf que voilà, les projets en ASP.Net n'ont jamais été simples à héberger ni à partager... Et comme je voulais rendre MyCryptoChat utilisable par le plus grand monde, il fallait que je développe une version en PHP, le langage que je n’avais pas utilisé depuis 4 ans...

Et bien vous savez quoi ? Je suis bien meilleur en PHP aujourd’hui que je ne l’étais il y a 4 ans.

En effet, même si la syntaxe du langage change énormément du C#, je suis meilleur à plein de niveaux aujourd’hui :
* POO,
* Architecture,
* Algorithmie et logiques de conception,
* Optimisations et réflexions autour des performances,
* Analyse,
* Debug,
* ...

Au final je n’aurais galéré que deux jours pour porter mon projet ASP.Net MVC en PHP. Deux jours.

Le temps de rentrer dans le langage, de retrouver toutes les méthodes dont j'avais besoin, de faire des tests de performances, de tester, de corriger la majorité des bugs, de redécouvrir les limites du langage...

Deux jours.

Le langage change, mais les compétences restent.

Je ne suis pas un développeur .Net, je suis un développeur tout court.


Je ne connais peut-être pas *tout* le framework ni les méthodes, mais la doc est là pour ça.

Seulement deux jours, et je sais développer en PHP. Combien de jours me faudrait-il avant de commencer à être vraiment à l’aise avec le langage ? Seulement quelques jours de plus probablement...

C’est triste qu’en France nous ne soyons jugés qu’à notre niveau dans un langage. Développeur .Net et vous voulez faire du Java ? Mais vous êtes dingue !

Bref, je m’appelle Tommy et je suis développeur. Et toi, à quoi tu joues ?

Photo Credit: Wikipedia

MyCryptoChat, version 0.1 et code source en ligne

icon Tags de l'article : ,

Décembre 13, 2013


Bonjour à tous ! Comme promis il y a quelques jours, je viens juste de publier le code source de MyCryptoChat !

Ceux qui suivent déjà mes liens savent déjà de quoi je parle, alors voici un petit récapitulatif pour les autres...

MyCryptoChat est une petite application de chat très simple, sécurisée à la ZeroBin. C’est-à-dire que les conversations sont intégralement chiffrées côté client.

Vous créez une conversation, vous donnez le lien à un ami, et hop, vous pouvez converser en toute sécurité.
Les seules personnes qui peuvent accéder à la conversation sont celles qui ont eu l’url de la conversation et la clef de chiffrement contenue dans l’ancre (après le # dans l’url).

Les fonctionnalités en détail :
  • Ultra simple car seulement 2 boutons : “créer une salle de chat” et “envoyer le message”.
  • Les chiffrements et déchiffrements sont intégralement réalisés par le navigateur. Le serveur ne sait absolument pas ce que vous dites.
  • Chaque salle de chat a une durée de vie (de 15 minutes à 24 heures). A la fin, toute trace de la conversation aura disparu.
  • Les données sont chiffrées avec AES 256bits.
  • 1 minute après avoir quitté le chat, le serveur ne sait déjà plus qui vous étiez ni quelle était votre adresse IP (même les pseudos sont chiffrés !)
  • Vous pouvez changer vous-même la clef de chiffrement en modifiant l’ancre dans l’url (la partie après le #) avant d’envoyer votre premier message.
  • Le nombre de personnes qui suivent la conversation est affiché.
  • Génération d’avatars pour chaque utilisateur (afin d’éviter l’usurpation d’identité).

Vous trouverez toutes les informations ainsi que le code source sur la page du projet chez codeplex : http://mycryptochat.codeplex.com/

Sinon vous pouvez tester en live sur http://mycryptochat.azurewebsites.net/

Et si vous avez la moindre question, les commentaires sont là pour ça.

Allez, bon weekend à tous !

Photo Credit: rpongsaj

Créer un processus d'arrière-plan en ASP.Net

icon Tags de l'article :

Décembre 12, 2013
Clavier

Lorsqu'on travaille en ASP.Net, on a parfois besoin de créer un processus d’arrière-plan pour certains traitements.
Dans l’idéal, on devrait passer par une application externe (application console ou service Windows), mais malheureusement, il y a certaines situations dans lesquelles on ne peut pas… Par exemple : avoir à régulièrement faire le ménage dans nos variables d’application Web.

Du coup, nous allons donc devoir coder ça nous même.

Pour cela, nous allons jouer avec le Global.asax, et les méthodes Application_Start et Application_End.

Tout d’abord, dans Application_Start, nous allons créer un nouveau Thread, en arrière-plan (background) et le démarrer :

protected void Application_Start()
{
	// on crée notre objet thread qui pointe vers notre méthode MyBackgroundMethod
	Thread myBackgroundThread = new Thread(MyBackgroundMethod);
	// on spécifie qu’il s’agit d’un thread d’arrière-plan
	myBackgroundThread.IsBackground = true;
	// on le démarre
	myBackgroundThread.Start();

	// on le stocke dans une variable d’application
	Application["myBackgroundThread"] = myBackgroundThread;
}

Ensuite, nous arrêterons ce thread lorsque le service web s’arrêtera (donc dans Application_End) :

protected void Application_End()
{
	try
	{
		// on essaie de récupérer notre thread depuis la variable d’application
		Thread myBackgroundThread = (Thread)Application["myBackgroundThread"];
		// s’il tourney encore, on le coupe
		if (myBackgroundThread != null && myBackgroundThread.IsAlive == true)
		{
			myBackgroundThread.Abort();
		}
	}
	catch
	{

	}
}

Enfin, voici ma méthode MyBackgroundMethod avec mon code métier :

private void MyBackgroundMethod(object obj)
{
    while (true)
    {
        System.Threading.Thread.Sleep(60000);

        // Mon
        // code
        // métier
    }
}

Je pense que le code parle de lui-même, mais si vous avez des questions, n’hésitez pas !

Bon dev !

Source

Visual Studio Express 2013

icon Tags de l'article : ,

Décembre 11, 2013


Peu de gens le connaissent et l’utilisent, même parmi ceux qui développent en .Net.

J’ai testé cet IDE ces derniers jours, et je dois bien avouer que j’ai été bluffé. En effet, depuis quelques années, je travaille avec Visual Studio Pro / Premium / Ultimate, et j’étais persuadé que la version express (la version 100% gratuite) de cet IDE était une version édulcorée, sans saveur, avec laquelle il n’était pas possible de travailler sur de vrais projets.

Et bien pas du tout !

En 4 jours d’utilisation intensive (création de plus de 50 projets), la seule fonctionnalité qui m’a manqué était … l’espion express ! Et oui !

Le reste des fonctionnalités que j’utilise tous les jours dans le cadre professionnel est présent, qu’il s’agisse de l’indentation automatique, de la complétion, de la navigation dans le code, du debugging, de la publication simplifiée, de la gestion des services, des performances, …

Visual Studio Express est un EXCELLENT IDE.

Vous avez toujours voulu essayer le développement .Net ? Vous voulez développer des applications Web, Windows ou Windows Store très facilement, avec un IDE gratuit, puissant et efficace ? Ne cherchez plus, installez Visual Studio Express.

De plus tout ce que vous développez avec VOUS APPARTIENT. Vous n’avez aucun compte à rendre à Microsoft, et vous pouvez parfaitement vendre vos applications ou vos services. La croyance populaire qui veut que les applications développées avec Visual Studio Express ne peuvent être vendues est FAUSSE.

Ah, et pour ceux qui se demandent pourquoi je développe toujours sur du Microsoft : à cause de Visual Studio. Cet IDE est le meilleur de tous ceux sur lesquels j’ai travaillé. Tout est simplifié, performant, et efficace. Créer un web service qui permet de gérer les données d’une table ? 3 minutes. Créer un site web permettant de gérer une base de données de 10 tables ? Moins d’une heure. Créer un moteur de blog qui fonctionne ? 30 minutes. Je suis 10 fois plus productif sur Visual Studio lorsque je fais du .Net que sur Sublime lorsque je fais du PHP. (Bon, après il y a l’habitude du langage qui joue, mais bon. ;)

Parfois, je me demande si je ne devrais pas rédiger quelques tutoriels (ou tourner quelques vidéos) pour initier les gens au développement en .Net. C'est tellement simple et rapide... Ca vous intéresserait ?

Je tiens enfin à préciser que cet article n’est pas du tout sponsorisé. C’est juste l’avis d’un développeur qui adore cet IDE qu’est Visual Studio. Microsoft a réussi peu de choses bien ces dernières années, mais C#, Visual Studio et Windows Azure sont les exceptions qui montrent que Microsoft peut toujours envoyer du rêve :)

Du coup, pour ceux qui veulent le télécharger : http://www.microsoft.com/france/visual-studio/essayez/express.aspx

Bonne journée à tous !

Minification et compression de fichiers en ASP.Net MVC

icon Tags de l'article :

Octembre 31, 2013
Lorsqu'on travaille dans le web, on entend souvent parler de minification et de compression de fichiers. Principalement de fichiers JS & CSS.

De quoi s'agit-il ? Comment ça marche ? Comment faire ça avec ASP.Net ?

Vous trouverez toutes les réponses à ces questions dans ce petit article de votre serviteur, publié sur le blog de ma société :

La compression JS & CSS ? Rien de plus simple en ASP.Net MVC 4

Bonne lecture et bon dev à tous !