Les analogies en informatique, partie 2

Comme je l’avais promis lors de mon dernier poste à propos de l’avenir de ce blog, je viens de publier un nouveau tutoriel sur zeste de savoir. Cette fois-ci c’est la programmation asynchrone qui est à l’honneur.

Ce tutoriel est dans les bacs depuis pas mal de temps mais si je lui consacre un article qui s’appelle “les analogie en informatique”, en écho au premier article qui tentait d’expliquer le fonctionnement d’un ordinateur, c’est avant tout parce que la rédaction de ce tutoriel a été fortement conditionnée au fait de trouver la bonne analogie.

Continue reading

Tutoriel sur asp.net disponible en béta

Bonjour à tous !

Avant toute chose, bonne rentrée à ceux qui commencent aujourd’hui, bon courage à ceux qui ont déjà commencé et que les autres (comme moi ^^) profitent au maximum de leur journée !

Pour ma part, mes vacances ont été plutôt productives. Avec plusieurs PR sur le dépôt git de zeste de savoir et surtout la mise en béta d’un tutoriel complet sur ASP.NET MVC 5.

Le tutoriel est encore en cours de rédaction, mais il y a déjà de quoi faire pas mal de belles choses avec ce que mes coauteurs (BlueShark et Zyhou) et moi même avons écrit.

Notamment, vous pourrez découvrir :

  • Ce qu’est ASP.NET, les différentes possibilités que ce framework offre
  • Comment créer un site de base avec ASP.NET MVC5
  • Comment créer votre maquette graphique
  • Comment utiliser les formulaires avec ASP.NET MVC 5

Nous n’avons que deux tout petits prérequis : Savoir utiliser le duo HTML5/CSS3 et connaître la syntaxe de base de C# ou VB.NET.

L’avenir du tutoriel sera divisé en deux parties distinctes :

  • la rédaction des parties pour l’instant vides de contenu
  • la création de vidéo de démonstration et d’explication qui viendront soutenir le texte du tutoriel.

A noter que le contenu vidéo ne représentera pas plus de 10% du contenu total du  tutoriel et devrait surtout se composer de screencast commentés (vous ne verrez donc pas ma tronche). Ce n’est pas par pudeur mais parce que je ne possède pas de camescope, donc si une personne habitant sur lille lit ce message et se send opé pour une séance de tournage (si possible si vous avez un fond vert ^^), je serai heureux de vous accueillir chez moi. Et puis à Lille on peut trouver des bars sympa avec de la bonne bière ^^.

Programmation asynchrone et barre de progression

Le Framework .NET 4.5 a apporté une nouveauté assez géniale : await/async.

Cette nouveauté permet de manipuler les tâches asynchrone d’une manière facilitée, et surtout sécurisée.
Facilité parce qu’il suffit de ne retenir que trois mots Task, async, await.
Sécurisé car il est presque impossible d’avoir un deadlock quand on utilise les décorateurs async/await alors qu’on fait du multithread.

Le code de base est celui-ci :

Il est absoluement nécessaire d’avoir dans votre fonction un await quelque part.
L’effet de await est globalement de lancer la tâche, attendre qu’elle finisse, prendre son résultat et le retourner sans se soucier de l’encapsulation sous forme de Task.
L’avantage principal, c’est que le temps qu’il passe à attendre… il n’utilise pas de ressource processeur.
Ce qui peut s’avérer une très bonne chose si votre tâche demande beaucoup d’attente (communication avec une BDD, un service web…)
Continue reading

SignalR : les websockets façon ASP-principe de fonctionnement

Parcourant depuis quelques temps la Virtual Academy de Microsoft pour me former à l’architecture système, je suis passé par leur Jump Start sur la création d’application web avec ASP.NET.

Outre l’intérêt très fort que j’ai pour ce framework qui permet de faire des sites mais aussi des API web, j’ai pu y découvrir un outil assez formidable : SignalR.

Le problème que tente de résoudre SignalR est celui très connu du partage en temps réel. Faire un chat en javascript avec la technologie AJAX (ou tout simplement de l’asynchrone) est une problématique qui est apparue depuis longtemps. Pourtant un problème se pose : comment on fait communiquer les mises à jours à tous les membres?

Une technique est le long polling, c’est à dire qu’on va demander sans cesse au serveur des mises à jours. Cette méthode a pour principal inconvénient d’être gourmande en bande passante et surtout en bande passante inutile : dans la plupart de vos requêtes c’est l’entête qui prend le plus de place, ce qui est ridicule.

Autre technique, l’infinite frame. On met une balise iframe mais le serveur n’envoie jamais le message de fin de page. ainsi la frame charge sans cesse et affiche au fur et à mesure les données. Outre que ça utilise les iframe (souvent déconseillé), cela demande un rafraichissement de la page en cas d’interruption du service. En outre certains navigateurs au nom onni ne supporte pas cette technique.

Mais est venu l’HTML5 qui est plus que de l’HTML. HTML5, c’est une API pour plein de choses (vidéo, dessin…) et entre autre les websocket.

fonctionnement d'une websocket

fonctionnement d’une websocket

SignalR est une technologie open source qui partage un développement .NET côté serveur et un plugin JQuery pour le côté client pour utiliser ces websocket et faire du temps réel.

L’avantage de cet outil c’est qu’il comprend que votre utilisateur n’a pas un navigateur de dernière génération et, de manière totalement transparente, va utiliser une des deux techniques citées au dessus en cas de non support des websockets.

En réel, ça donne quoi?

Côté serveur vous allez créer un ou plusieurs hubs. Un hub c’est un ensemble de fonctionnalité autour d’un thème. Par exemple, si vous avez deux outils en temps réel dans votre site, un paint et un chat, vous aurez un hub pour chaque outil. Le hub paint permettant de dessiner des choses et le hub chat d’ajouter, retirer, modifier des messages. Les méthodes du hub sont appelées à chaque communication client vers serveur.

Côté client, vous allez créer des “proxy” en javascript. Ces proxys seront les méthodes appelées par le script à chaque communication serveur vers client.

Dans le prochain poste, je me consacrerai au code afin de montrer la puissance de l’outil.

 

 

 

Auto apprentissage

S’il y a un concept qui me plait beaucoup avec l’ère numérique, c’est l’auto apprentissage.
Pourquoi l’air numérique en particulier? Eh bien parce que cela multiplie à  l’infini les documents intéressants qui vous dirigent vers cet auto apprentissage. Mais en plus, grâce aux blogs (j’ai une préférence toute personnelle pour mageekbox et http://www.geek-directeur-technique.com/ ) on peut profiter d’expériences de personnes qu’on ne connait ni d’Eve ni d’Adam et ça me plait.

Je ne reviendrait pas sur l’éternel cauchemar des professeurs qu’est wikipédia (quoique certains des miens soient des contributeurs apparemment très appréciés). Ce débat est, je trouve, stérile, tout a été dit à  ce propos.

Par contre, pour quelqu’un, comme moi, qui se dirige vers une carrière de développeur, a un rêve aéronautique, et une expérience en développement web, l’auto formation, ça signifie surtout engranger un savoir, voire un savoir faire technique ou humain.
Et quand vient la technique, en premier lieu viennent les langages et les framework.

Soyons clair, je ne donne aucune valeur au nombre de langage que je sais utiliser, que je “maîtrise” (il paraît qu’il ne faut pas avoir peur de ce mot, mais moi, je ne l’envisage qu’encadré de guillemets) ou dans lesquels je n’ai que des notions.
Par contre, j’aime beaucoup obtenir des expériences avec les différentes technologies que je teste.
J’ai pu utiliser code igniter (même si ce ne fut que pour migrer une application de CI vers Symfony), j’ai eu des projets intéressants mais qui ne se sont pas concrétisés (trop long à développer, manque de motivation du groupe au départ) sur Symfony et c’est ça qui me plait le plus. Et qui pose aussi le plus de problèmes.

Il y a peu, j’affirmais haut et fort “J’aime le PHP et je le vis bien”. C’est toujours vrai. Mais j’avais aussi toujours eu envie de tester le C# et, en ce qui concerne le web, l’ASP.NET qui me paraissait un monde merveilleux.

Mais, si apprendre comment faire un getter en C#, comment ajouter un contrôleur ASP MVC, comment personnaliser une route est très simple, je n’avais simplement pas eu l’occasion ni l’intérêt de le faire. Et ça c’est un sacré frein.

Mais, heureusement, j’ai eu envie de m’engager dans une association étudiante, en l’occurrence, le Club Informatique ISEN. Et puisque mon point faible c’était la timidité quand il s’agit de demander des ressources, des autorisations… aux autres, j’ai choisi de devenir leur responsable évènementiel histoire de vraiment me remettre en question en étant au pied du mur.
Le président du club me disait “bah, c’est pas compliqué, tu fais la paperasse pour 3 ou 4 LAN, une vente de Noël et puis c’est tout”. Si c’était sensé être simple au départ, en fait les membres du bureaux, le président en tête, ont décidé de revoir les ambitions du club à  la hausse et m’incombe l’organisation d’un concours de programmation.

Là  ça fait peur, car il faut non seulement prévoir un règlement, des sponsors, des lots, un suivi des candidats, un moyen de les classer… Mais surtout, il faut une idée de concours.

Encore une fois, c’est une “idée” qui manque à  l’appel. Heureusement j’en ai eu une et elle est l’occasion pour moi de me mettre à  cet auto apprentissage que je désirais tant à  propos de C# et d’ASP.
Et je m’amuse pas mal en fait ! Bon, OK, je n’utilise pas toute les technos .NET, notamment à cause de limitations de ressources. En effet, tant que je n’aurais pas mes sponsors, la seule solution que j’aurai sera ma solution de repli qui est un serveur kimsufi OVH basé sur Debian et que je loue avec des amis. Donc si j’ai une certaine souplesse dans la configuration de MONO (car sur Debian, pas d’IIS), je suis par contre, pour des raisons qui sont propres à  notre groupe d’amis l’obligation d’utiliser MySQL. Ensuite, mon système étant très simple, je n’avais pas envie de passer par des outils plus complexes tels que Entity Framework (même si j’avoue que j’aime beaucoup ce que j’ai pu en voir dans les différents livres et tutoriels) ou LINQ to SQL. Je sais que c’est dommage, mais c’est un choix que j’assume.
En attendant, je démarche auprès de Microsoft France et peut être d’OVH pour obtenir, peut être, des ressources du type IIS pour, peut être, si j’en ai le temps, finir par migrer vers des solutions plus “orientées Microsoft” puisqu’après tout, j’ai fait cela pour utiliser des technos microsoft et commencer à  m’y familiariser.

Oh et puis côté affect, C# et ASP.NET montent largement dans mon estime, JAVA, que j’apprends en tant que cours de mon cursus scolaire (ISEN) avec un enseignant passionné (et c’est peu de le dire) lui me rebute un peu quand même, même si les quelques essais que j’ai fait en développement Androïd m’ont plu. (tiens, encore une idée qui est tombée du ciel en commun avec les amis dont je parlais plus haut. C’est une autre histoire)