About Sebastien Warin

Issue de l'école SUPINFO, vainqueur en 2008 et 2009 de la finale française de l'Imagine Cup, gagnant du « British Telecom Innovation Award » et du « Live Services Award » lors des finales mondiale de 2008 et 2009, Sébastien Warin est actuellement Creative Technologist chez Publicis ETO et enseignant à l'ISEN (école d'ingénieur).

Ses compétences couvrent aussi bien les domaines de l’électronique, du développement (technologies .NET) et de l'IT (Infrastructure et Cloud Computing) reconnues par différentes certifications (MCP, MCTS, MCPD, CCNA) et comme Microsoft MVP (Most Valuable Professionnal) en 2011 sur la technologie Windows Azure. Speaker pour Microsoft et auteur dans des magazines spécialisés, ses centres d'intérêts portent sur le Cloud, l'intelligence artificielle, la domotique, la cryptologie, la robotique et plus généralement les nouvelles technologies.

Depuis 2014, il travaille activement sur la plateforme Constellation, plateforme d'interconnexion des applications, services et objets connectés.

Oct.09

[Atlas] Appeller une fonction JS après un UpdatePanel

J’ai passé ma journée d’hier a chercher comment appeler une fonction JS (coté client donc) après l’update d’un UpdatePanel avec un rendu partiel du ScriptManager (enablepartialrendering= »True »).

J’ai enfin trouvé et en fait c’est vraiment tout bête. Il suffit d’ajouter dans votre Page_Load la ligne :

Exemple :

Et surtout n’oubliez pas le dernier parametre à True dans le cas d’un enablepartialrendering= »True » à votre ScriptManager, car c’est lui que j’avais oublié et qui m’a fait chercher de longues heures 🙂

Dev,Atlas

Sep.16

NDepend : Analysez votre code

C’est en lisant le blog de Patrice (encore bon anniversaire à toi au passage ^^) que j’ai découvert l’outil NDepend de Patrick Smacchia.

Pour reprendre la description officielle :

NDepend is a tool for .NET developers and architects. It analyses assemblies and source code of .NET applications and generates reports which contain design quality metrics, warnings and advices and diagrams.

En d’autre terme, c’est un outil d’analyse d’ assembly .NET 🙂

Vous trouverez 3 executables :

  • NDepend.Console.exe : le moteur d’analyse
  • NDepends.Project.exe : application de gestion des projets NDepend pour configurer les options d’analyse, les assembly à analyser, etc..
  • VisualNDepend.exe : outils de visualisation de l’analyse en mode graphique et d’interrogation de résultat grâce à son langage QCL

Votre assembly sera analysé selon plus d’une 50aines de metriques classés en 6 catégories :

  • Métriques sur l’application
  • Métriques sur les assembly
  • Métriques sur les namespaces
  • Métriques sur les types
  • Métriques sur les champs
  • Métriques sur les methodes

La liste complète et documentations associées : http://www.ndepend.com/Metrics.aspx

A cela est rajouté un langage d’interrogation un peu comme le SQL : le QCL dont les specs sont à l’adresse : http://www.ndepend.com/CQL.htm.
Par exemple, pour afficher la liste des methodes dont le nombre d’instructions IL est supérieur à 200 triée de manière décroissante on passera la requete :

Je l’ai testé et franchement cet outil est vraiment génial et super bien foutu. Il m’est surtout d’une très grande aide pour mon projet SimImmuno II dont le projet a commencé depuis près d’un an ^_^

Alors n’hésitez pas, la beta 2 est gratuite jusque fin Janvier 2007 🙂

.NET

Sep.14

MSP : Microsoft Student Partner

J’ai eu le grand plaisir de recevoir un appel sur mon GSM de Microsoft cet après midi, pour m’annoncer mon titre de MSP pour Microsoft Student Partner 🙂

En gros MSP c’est quoi ?

Le programme Microsoft Student Partners est un programme de reconnaissance internationale vis-à-vis des étudiants passionnés par les nouvelles technologies.

MVS devient MSP ! Explication de Microsoft :

Le programme MVS était un programme pilote en France qui marche très bien et qui a ainsi été étendu au niveau mondial. Cette nouvelle ambition internationale du programme nous a amené à s’accorder sur un nouveau nom.

Le titre n’est actuellement pas très connu car ils ont devoilés tout cela de maniere officielle hier seulement.

Alors voila ca y est, j’y suis ou plutôt je le suis ;p Au programme un super WelcomeKit (MSDN Premium, certifs gratuites, 2 jeux Xbox/PC gratuits, et plein d’autre cadeau), pleins d’évenements, une opportunité de faire de bonnes rencontres et de découvrir plein de choses 🙂

Pour cela, merci MS, et vivement le 27 octobre chez MS France que je decouvre tout cela 🙂

Perso

Sep.13

S’amuser avec MSN et .NET : DotMSN

DotMSN est un projet OpenSource proposé par la socièté Xih Solutions disponnible à l’adresse : http://www.xihsolutions.net/dotmsn/.
DotMSN est une assembly .NET écrite en C# qui implémente la quasi-totalité du protocole MSN dans sa version 9.
Vous pourrez grâce à DotMSN:

  • gérer les connexions à MSN, les status, données personnels et images perso
  • gérer la ContactList (ajout, suppression, bloquer, autoriser)
  • gérer de multiples conversations, les emoticones, texte décoré, etc…
  • interface avec Hotmail (connexion, avertissement des nouveaux mail, etc..)
  • gestion des transferts (fichiers, emoticones, images perso des contacts)

Bref, grâce à DotMSN vous pouvez redevelopper entierement votre propre client MSN. La seule chose à la limite qu’il manque, c’est la gestion du Wizz 🙂

Toutes les specs de l’assembly sont disponnible à l’adresse: http://www.xihsolutions.net/dotmsn/api
DotMSN contient 3 espaces de nom :

  • XihSolutions.DotMSN : classes de base pour la connexion/deconnexion, conversation, parametres persos, etc…
  • XihSolutions.DotMSN.Core : c’est le moteur, là où se trouve toute l’implémentation du protocole. Nous n’avons pas besoin d’utiliser les classes qu’il renferme.
  • XihSolutions.DotMSN.DataTransfer : toutes les classes en rapport avec le transfert de fichiers, images, emoticones, etc..

Pour démarrer, commencez par instancier la classe Messenger (dans XihSolutions.DotMSN) puis remplir la propriété Credentials avec comme Account et Password votre compte MSN et le ClientID = « msmsgs@msnmsgr.com » et ClientCode = « Q1P7W2E4J9R8U3S5 » pour enfin lancer la méthode Connect

Vous êtes maintenant connecté au service MSN mais pas encore en ligne. Pour cela abonnez-vous à l’évenement SignedIn dans Nameserver de votre objet MSN (AddHandler msn.Nameserver.SignedIn, AddressOf ….). L’évenement sera appellé dès que votre connexion sera effective. En reponse à l’appel de cet evenement, placez le code :

Le code aura pour but de définir votre pseudo ainsi que votre status.

La proprièté Owner permet donc de definir votre profil, nom, image perso, status, etc… Vous trouverez aussi la propriété ContactList pour la liste de vos contacts. Exemple pour afficher votre ContactList :

Il faudra aussi vous abonnez à l’évenement ConversationCreated de la classe Messenger qui averti qu’une nouvelle conversation est crée. Vous recuperez alors l’objet Conversation qui contient la propriété Switchboard pour pouvoir lire les messages, en envoyer, lancer des invitations de transfert de fichiers, etc… A ce titre, dès qu’une conversation est crée, n’oubliez pas aussi de vous abonnez à l’événement Conversation.Switchboard.TextMessageReceived permettant d’être averti de l’arrivée d’un message.

Enfin pour finir, après la connexion du service MSN, oubliez pas non plus de vous abonnez à l’évenement TransferInvitationReceived de l’objet Messenger permettant d’être averti de l’envoi d’une invitation de transfert. Vous pourrez alors l’accepter en mettant True à la propriété Accept de MSNSLPInvitationEventArgs et démarrer le transfert dans TransferSession.StartDataTransfer(False) (False pour un transfert non direct et True pour direct).
Encore une fois, il faudra vous abonnez à l’évenement TransferFinished de la propriété TransferSession pour être averti de la fin du téléchargement.
Pour enregistrer le fichier transferé en dur dans un fichier :

Voila, vous êtes maintenant paré pour ecrire votre propre client MSN ^_^ Le mieux, pour bien comprendre, est de regarder les specs de l’assembly pour trouver tous les evenements et methodes dont vous aurez besoin. Vous trouverez de toute facon, un client de démo avec les sources fournis en téléchargeant l’assembly DotMSN. Si avez des soucis, n’hesitez pas à me contacter 🙂

Dev,.NET

Sep.06

C’est la Rentrée :)

Bon ok, c’etait lundi, il y a déjà deux jours, mais bon je n’ai pas trouvé le temps de poster avant 🙂

Fini les belles vacances à Monaco à dorer sous le soleil, entre temps j’ai eu mes 20ans et hop retour chez Wygwam pour encore deux mois avec de supers projets en vue, mais c’est secret-défense donc CHUT 🙂

J’ai corrigé mon dernier post sur les HandleExternalEvent&CallExternalMethod pour la mise en page et j’ai enfin publié les sources du projet à la demande de certain.. Ce soir je reposterai la mini webcast sur YouTube car elle ne marche plus 🙁

J’ai aussi ajouté un billet que j’avais ecrit en même temps sur la Persistance&Tracking que j’avais oublié de mettre de ligne avant de partir en vacances 🙂

J’ai vu qu’il y avait des problèmes d’affichage/mise en page sous IE 🙁 J’essayerai de le corriger au plus vite (cad dans le mois ^_^), en attendant passez sous Firefox 😀

Bon courage à tous pour cette rentrée @Bientot

(ps: la photo, c’est la vue que j’avais depuis la loggia 🙂 Certe on ne vois pas Monaco, mais c’était sympa hihi)

Perso

Aug.06

Persistance&Tracking avec Workflow Foundation

Windows Workflow Foundation propose deux services fort utile qui sont le Tracking et la Persistance.

La persistance va permettre d’enregistrer l’instance d’un workflow en dur dans un serveur SQL. On va pouvoir grace a cela, demarrer une instance de workflow depuis une application host, la quitter, puis la reprendre a tout moment. La persistance devient alors très utile, imaginez un workflow de gestion d’article qui demarre au moment où un article serait posté et attendrait la validation des admins pour etre publié. Il serait alors fort utile de pouvoir enregistrer et reprendre le workflow quand on le souhaite pour que les admins puissent donner leur reponse à tout moment.

La persistance sous WF est très simple a mettre en oeuvre :
Il faut d’abord préparer la base de données en executant les scripts SQL qui se trouvent dans C:\WINDOWS\WinFX\v3.0\Windows Workflow Foundation\SQL\EN. Il y a 4fichiers : 2 pour les schémas et 2 pour la logique pour la persistance et le tracking. Executez les schémas en 1er biensûr 🙂
Ensuite pour activer la persistance dans votre workflow, ajoutez le service SqlWorkflowPersistenceService à votre runtime. ex:

A tout moment vous allez pouvoir recuperer les instances persistées par le code :

Vous recuperez une collection de SqlPersistenceWorkflowInstanceDescription où vous allez pouvoir recuperer des informations comme son status, son ID d’instance, etc…
Enfin pour récupérer une instance :

_instanceID est un Guid qui correspond à l’ID de l’instance à resumer.

Le Tracking quant à lui, permet de « traquer » un workflow en enregistrant des tas de parametres sur son déroulement. Pour le mettre en place, c’est aussi facile que pour la persistance. Assurez-vous d’avoir bien créé les tables (scripts Tracking_Logic et Tracking_Shema). Ensuite tout comme la persistance, il faudra ajouter le service tracking à la runtime par le code :

Vous pourrez ensuite recuperer un tas de parametres pour toutes les instances par le code :

Ce code vous retournera une List(Of SqlTrackingWorkflowInstance) (autopub: explication des List ici) :))

L’objet SqlTrackingQueryOptions permet quant à lui, d’imposer des conditions de recherche. L’exemple ci-dessous permet de recuperer seulement les instances en cours (running) :

L’objet SqlTrackingWorkflowInstance contient toutes les informations sur une instance de Workflow. On y trouve les propriètés ActivityEvents (evenement des Activity), Status, UserEvents (evenement des utilisateurs comme par exemple les traces laissées par les TrackData dans le workflow), WorkflowInstanceId, etc…

Toutes les specs du SqlTrackingWorkflowInstance : http://windowssdk.msdn.microsoft.com/en-us/lib…

Conclusion : ca devient un vrai jeu d’enfant, sous WF, de persister et tracer un workflow. Moi j’adore 🙂

Dev,Workflow Foundation

Aug.06

HandleExternalEvent & CallExternalMethod sous Workflow Foundation

Les Activity HandleExternalEvent & CallExternalMethod, sont tout deux indispensable dans le developpement de workflow. Ce sont en quelque sorte les entrées-sorties entre le workflow et le programme host.

Le HandleExternalEventActivity va pemettre de marquer une pause dans le deroulement d’un workflow en attendant le déclement d’un evenement. Le CallExternalMethodActivity va quand à lui effectuer en quelque sorte l’opération inverse, à savoir, déclencher l’appel d’une methode externe au workflow.

Les methodes et evenement vont devoir etre défini dans une interface marquée par l’attribut ExternalDataExchange. Le programme host, lui, devra ajouter le service ExternalDataExchangeService

Mission 1 : Création du projet DTO pour les objets communs

1) Créons donc un nouveau projet de type Class Library en VB.net. Nous allons commencer tout d’abord par ajouter une référence au Workflow Foundation qui est : System.Workflow.Activities

2) Ensuite créons une classe nommé MyEventArgs qui nous pemettra de passer des arguments dans notre evenement. Nous allons, dans cette classe, stocker un petit message, il faudra donc créer un champ et une propriété de type String nommé Message.
Cette classe doit être Serializable et doit hériter de la classe System.Workflow.Activities.ExternalDataEventArgs. Il faudra donc dans le code du constructeur ajouter un MyBase.New(instanceId) avec comme instanceId, l’instance de notre workflow en Guid pour que l’evenement puisse etre mappé sur la bonne instance de workflow.
Notre classe pourrait ressembler à cela :

3) Créons maintenant notre Interface de communication que l’on nommera dans notre exemple : ICommunication.
L’interface doit être marquée par l’attribut System.Workflow.Activities.ExternalDataExchange().
Nous allons définir une methode nomme MaMethode qui prendra en argument un message en string et un evenement nommé MonEvenement de type MyEventArgs créé juste avant :). Le code pourrait être :

4) Pour finir, compiler votre projet DTO et passons à la création du workflow

Mission 2 : Création du workflow

1) Commencons par créer un nouveau projet dans notre solution de type Sequential Workflow Library et ajouter la référence au projet DTO.

Notre workflow va ressembler à ca :

Au démarrage, il attend l’evenement MonEvenement (Activity HandleExternalEvent) qui contient un message via la classe MyEventArgs , puis quand l’evenement est recu, appel MaMethode (Activity CallExternalMethod) en passant en parametre le message contenu dans notre evenement.

Plutot qu’un long baratin, la démo en video :

Mission 3 : Création de la couche service

Il ne vous plus qu’a créer la couche service qui s’occupera de démarrer le runtime et les instances de votre workflow. C’est elle aussi qui implémentra l’interface ICommunication.

Ici, notre couche service sera tres simple. Elle disposera des methodes StartRuntime et StartInstance pour demarrer le runtime du WF et l’instance de notre workflow. La methode DeclencherEvent s’occupera de declencher l’evenement. De plus, elle implementra notre interface ICommunication (methode MaMethode et evenement MonEvenement). A noter que lors de la creation de notre runtime, nous avons ajouter le service ExternalDataExchangeService pour pouvoir communiquer avec notre workflow via notre Interface.

Mission 4 : Création de la GUI

Ici dans notre projet notre GUI sera en mode console. Elle doit juste faire reference à notre couche service et l’instancier. Le code peut être :

Ce qui donne à l’ecran :

Conclusion

C’est certe un exemple très simple et qui ne sert a rien, mais j’espere avoir pu vous donner quelques tips pour l’utilisation des HandleExternalEvent & CallExternalMethod au sein d’un workflow sous Worfkflow Foundation.

**UPDATE** : les sources du projet ICI

Dev,Workflow Foundation