<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>#Rui</title>
	<atom:link href="http://www.rui.fr/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.rui.fr</link>
	<description>on { .Net, Sql Server, Asp.Net MVC, jQuery} &#38; More...</description>
	<lastBuildDate>Tue, 13 Dec 2011 10:59:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Conference &#8211; Alt.Net Paris ?</title>
		<link>http://www.rui.fr/event/conference-alt-net-paris/2011/12/09/</link>
		<comments>http://www.rui.fr/event/conference-alt-net-paris/2011/12/09/#comments</comments>
		<pubDate>Fri, 09 Dec 2011 08:00:07 +0000</pubDate>
		<dc:creator>Rui</dc:creator>
				<category><![CDATA[Event]]></category>
		<category><![CDATA[Alt.Net]]></category>
		<category><![CDATA[Discussions]]></category>

		<guid isPermaLink="false">http://www.rui.fr/?p=426</guid>
		<description><![CDATA[<div style="display:inline;float:right;margin-left:1em"><g:plusone href="http://www.rui.fr/event/conference-alt-net-paris/2011/12/09/"></g:plusone></div>
Une conférence. Alt.Net. Paris. La conférence, c&#8217;est le cadre, la forme. Alt.net, c&#8217;est le contexte, le fond, l&#8217;esprit. Paris, c&#8217;est le lieu. C&#8217;est trois choses là n&#8217;ont aujourd&#8217;hui rien à faire ensembles. Néanmoins, je dois vous avouer que cela fait bien longtemps que l&#8217;utilité d&#8217;un tel évènement me parait une évidence. J&#8217;aime communiquer, écrire, partager, [...]]]></description>
			<content:encoded><![CDATA[<div style="display:inline;float:right;margin-left:1em"><g:plusone href="http://www.rui.fr/event/conference-alt-net-paris/2011/12/09/"></g:plusone></div>
<p>Une conférence. Alt.Net. Paris.</p>
<blockquote><p>La conférence, c&#8217;est le cadre, la forme.<br />
Alt.net, c&#8217;est le contexte, le fond, l&#8217;esprit.<br />
Paris, c&#8217;est le lieu.</p></blockquote>
<p>C&#8217;est trois choses là n&#8217;ont aujourd&#8217;hui rien à faire ensembles. Néanmoins, je dois vous avouer que cela fait bien longtemps que l&#8217;utilité d&#8217;un tel évènement me parait une évidence.</p>
<p>J&#8217;aime communiquer, écrire, partager, voire des gens, discuter et une conférence est certainement l&#8217;un des moments les plus propices à tout ça. J&#8217;aimerai qu&#8217;on puisse organiser une conférence à laquelle ont aimerai tous aller et se faire plaisir. Avec du web, du .NET dedans, des bonnes pratiques et plein d&#8217;autres choses! C&#8217;est d&#8217;ailleurs, exactement ce que sont en train d&#8217;organiser les copains développeurs Java avec le <a title="Devoxx" href="http://www.devoxx.fr/display/FR12/Accueil" target="_blank">Devoxx france</a>pour 2012. Et vous savez quoi? Ce n&#8217;est pas parce que je suis un dev .NET que je n&#8217;irais pas! Ca a l&#8217;air très sympa, j&#8217;irais très certainement et je vous invite franchement à y jeter un oeil.</p>
<p>Mais avant tout ça, pour voir comment mettre tout ça en place, nous avons préparé un petit formulaire avec quelques questions. Je vous invite donc à prendre 5 minutes &#8211; pas plus promis &#8211; pour remplir ce questionnaire et 30 secondes de plus pour le partager avec vos amis afin que l&#8217;on aie un maximum d&#8217;avis!</p>
<p>Vous pouvez retrouver aussi avec des notes un peu moins personnes sur le <a href="http://www.altnetfr.org/2011/12/09/et-si-on-faisait-une-conference/" target="_blank">blog d&#8217;Alt.Net paris ici</a> et n&#8217;oubliez pas aussi notre prochaine <a title="Alt.Net – Présentation Git" href="http://www.rui.fr/event/alt-net-presentation-git/2011/12/02/" target="_blank">présentation Alt.Net paris sur GIT le 14 décembre</a>, il reste encore quelques places.</p>
<p>Si le formulaire ci-dessous ne s&#8217;affichait pas correctement vous pouvez accéder directement à <a title="Alt.net paris conférence form" href="https://docs.google.com/spreadsheet/viewform?formkey=dFZpbmpwYnJRMEVZd0s2ekhEeDIzelE6MA" target="_blank">la page du questionnaire</a>.</p>
<p>Merci et bon questionnaire!</p>

<!-- powered by Iframe plugin ver. 1.7 (wordpress.org/extend/plugins/iframe/) -->
<iframe class="iframe-class" width="760" height="4433" src="https://docs.google.com/spreadsheet/embeddedform?formkey=dFZpbmpwYnJRMEVZd0s2ekhEeDIzelE6MA" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" allowtransparency="true"></iframe>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rui.fr/event/conference-alt-net-paris/2011/12/09/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Alt.Net &#8211; Présentation Git</title>
		<link>http://www.rui.fr/event/alt-net-presentation-git/2011/12/02/</link>
		<comments>http://www.rui.fr/event/alt-net-presentation-git/2011/12/02/#comments</comments>
		<pubDate>Fri, 02 Dec 2011 10:00:08 +0000</pubDate>
		<dc:creator>Rui</dc:creator>
				<category><![CDATA[Event]]></category>
		<category><![CDATA[Alt.Net]]></category>
		<category><![CDATA[altnetfr]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[Sources]]></category>

		<guid isPermaLink="false">http://www.rui.fr/?p=422</guid>
		<description><![CDATA[<div style="display:inline;float:right;margin-left:1em"><g:plusone href="http://www.rui.fr/event/alt-net-presentation-git/2011/12/02/"></g:plusone></div>
Les sessions se suivent et ne se ressemblent pas et c&#8217;est ça qui est bon! La dernière session sur Roselyn de Jean Baptiste Evain s&#8217;est super bien passée et je tiens encore à remercier tous les participants, Jean-baptiste et surtout a Mick de chez Octo pour tout ce dont il s&#8217;est occupé! En essayant de [...]]]></description>
			<content:encoded><![CDATA[<div style="display:inline;float:right;margin-left:1em"><g:plusone href="http://www.rui.fr/event/alt-net-presentation-git/2011/12/02/"></g:plusone></div>
<p>Les sessions se suivent et ne se ressemblent pas et c&#8217;est ça qui est bon!</p>
<p>La <a title="Alt.Net – Roslyn presentation par JB" href="http://www.rui.fr/event/alt-net-roslyn-presentation-par-jb/2011/11/08/" target="_blank">dernière session sur Roselyn de Jean Baptiste Evain</a> s&#8217;est super bien passée et je tiens encore à remercier tous les participants, Jean-baptiste et surtout a Mick de chez <a title="OCTO" href="http://www.octo.com/" target="_blank">Octo</a> pour tout ce dont il s&#8217;est occupé!</p>
<p>En essayant de rester dans cette bonne dynamique de fin d&#8217;année, voici venir une nouvelle présentation Alt.Net d&#8217;ici 15 jours.</p>
<p>Le sujet sera GIT et la session sera présentée par Sébastien Douche (twitter <a title="Twitter sdouche" href="http://twitter.com/#!/sdouche" target="_blank">@sdouche</a>). Sébastien est le fondateur du site GitFR, spécialiste du sujet et bien sur speaker. C&#8217;est un vrai plaisir de l&#8217;accueillir sur ce sujet car les vrais spécialistes sont rares et nous sommes beaucoup trop à utiliser mal l&#8217;outil ou tout du moins de manière très parcellaire&#8230;Et puis il y en a beaucoup qui ne l&#8217;utilisent pas aussi, surtout dans un environnement Microsoft où les solutions maison sont en général préférées.</p>
<p>Bref, cette session est l&#8217;occasion d&#8217;approfondir un sujet très intéressant puisque le sujet fait partie des choses les plus importantes pour nous développeurs au quotidien!</p>
<p>Pour le détail, je vous laisse ci-dessous l&#8217;intro de la session:</p>
<blockquote><p>Utilisateur de SVN pendant de nombreuses années, j&#8217;avais la sensation croissante de me battre avec mon outil de travail. Pire, il s&#8217;adaptait très mal à mes exigences collaboratives. De guerre las, nous en avons choisi un outil de gestion de source décentralisé (Hg puis Git) début 2008. La différence était flagrante, je me sentais comme libéré d&#8217;un poids qui me ralentissait, et la production de l&#8217;équipe s&#8217;est fortement améliorée (quantitativement et qualitativement).</p>
<p>Cette soirée vous donnera la compréhension nécessaire pour aborder sereinement l&#8217;utilisation de Git (et aux DVCS en général) : La première partie sera consacrée à la théorie, en passant en revue tous les concepts nécessaires avec l&#8217;aide de nombreux schémas didactiques. Nous mettrons en pratique nos nouvelles connaissances dans la seconde partie, en abordant les commandes qui font la «différence», les workflows, l&#8217;utilisation de GitHub, le tout saupoudré de conseils pour bien démarrer. Nous aborderons également mais succinctement la philosophie Devops avec un retour d&#8217;expérience dans mon entreprise.</p></blockquote>
<p>La session se passera chez <a href="http://www.valtech.fr/fr/index.html" target="_blank">Valtech</a> qui nous a très gentiment fourni une très grande salle, donc malgré la diffusion de l&#8217;annonce sur notre liste alt.net depuis 2 jours, il reste encore pas mal de places, profitez-en! De plus cette session sera suivie d&#8217;une autre début janvier pour la mise en pratique sous forme d&#8217;atelier (avec priorité à ceux qui sont venus à cette première session).</p>
<p>Pour les inscriptions c&#8217;est par ici:</p>
<p><a href="http://www.eventbrite.com/event/2421871884" target="_blank">http://www.eventbrite.com/event/2421871884</a></p>
<p>&nbsp;</p>
<p>Nous sommes en train d&#8217;essayer de re-dynamiser le groupe en ce moment, et il y a pas mal de choses en préparation, donc n&#8217;hésitez pas à nous contacter pour proposer des choses! Il y a beaucoup de manières différentes d&#8217;échanger, vous n&#8217;avez pas besoin d&#8217;être un expert mondialement reconnu pour venir présenter quelque chose! Cela peut être plusieurs courtes présentations, des discussions, des retours d&#8217;expériences, bref, c&#8217;est ouvert et on est là pour le partager ensembles! Contactez moi directement si vous avez un doute ou que vous ne voulez pas poser une question à toute la liste, n&#8217;hésitez pas</p>
<p>Learn it, share it!</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rui.fr/event/alt-net-presentation-git/2011/12/02/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Transmedias &#8211; Computing the human experience</title>
		<link>http://www.rui.fr/life/transmedias-computing-the-human-experience/2011/12/02/</link>
		<comments>http://www.rui.fr/life/transmedias-computing-the-human-experience/2011/12/02/#comments</comments>
		<pubDate>Fri, 02 Dec 2011 09:00:08 +0000</pubDate>
		<dc:creator>Rui</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[capital]]></category>
		<category><![CDATA[Projets]]></category>
		<category><![CDATA[transmedia]]></category>

		<guid isPermaLink="false">http://www.rui.fr/?p=421</guid>
		<description><![CDATA[<div style="display:inline;float:right;margin-left:1em"><g:plusone href="http://www.rui.fr/life/transmedias-computing-the-human-experience/2011/12/02/"></g:plusone></div>
&#160; Kickstarter Kickstarter porte de nombreux projets très intéressants et c&#8217;est d&#8217;ailleurs une superbe manière de se faire aider sur un projet sans passer par des traditionnels investisseurs qui ne s&#8217;intéressent pas toujours au bien fondé du contenu. Parmis les derniers en date un projet du bien nommé Grady Booch qui fait partie des légendes de notre [...]]]></description>
			<content:encoded><![CDATA[<div style="display:inline;float:right;margin-left:1em"><g:plusone href="http://www.rui.fr/life/transmedias-computing-the-human-experience/2011/12/02/"></g:plusone></div>
<p>&nbsp;</p>
<h2>Kickstarter</h2>
<p><a href="http://www.kickstarter.com/">Kickstarter</a> porte de nombreux projets très intéressants et c&#8217;est d&#8217;ailleurs une superbe manière de se faire aider sur un projet sans passer par des traditionnels investisseurs qui ne s&#8217;intéressent pas toujours au bien fondé du contenu.</p>
<p>Parmis les derniers en date un projet du bien nommé Grady Booch qui fait partie des légendes de notre petit univers informatique. Ce projet se nomme &#8220;Computing the human experience&#8221;.</p>
<h2>Pourquoi ce projet est sympatique?</h2>
<p>Tout d&#8217;abord parce qu&#8217;il est porté par une personnalité importante et reconnue pour la qualité de son travail. Cela n&#8217;engage pas toujours à la réussite absolue mais c&#8217;est déja en soit un bon gage pour s&#8217;attendre à quelque chose de bon.</p>
<p>Parce qu&#8217;il s&#8217;agit d&#8217;une histoire que l&#8217;on va nous raconter en profitant des différents supports qui s&#8217;offrent à nous (transmedia powered), cette histoire c&#8217;est aussi celle de l&#8217;humanité qui a cherché depuis longtemps l&#8217;appui des machines. Et puis moi j&#8217;aime bien les histoires&#8230;</p>
<p>Parce que c&#8217;est aussi un travail d&#8217;archive et qu&#8217;il faut participer à cette construction.</p>
<p>Parce que beaucoup avec peu fait beaucoup au final et que ce n&#8217;est pas le genre de projet qui sera financé par des capitaux traditionnels de toute façon.</p>
<h2>So, What&#8217;s up?</h2>
<p>La page du projet est ici:</p>
<p><a title="Computing the human experience" href="http://www.kickstarter.com/projects/1747241049/computing-a-documentary-of-the-human-experience" target="_blank">http://www.kickstarter.com/projects/1747241049/computing-a-documentary-of-the-human-experience</a></p>
<p style="text-align: center;"><img class="aligncenter" title="transmedia intro" src="http://computingthehumanexperience.com/public/wp-content/gallery/introduction/introduction-5.jpg" alt="" width="702" height="417" /></p>
<p>Et bien sur je vous encourage a jeter un oeil à ce type de sites car beaucoup de jeunes projets sympa y voient le jour!</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rui.fr/life/transmedias-computing-the-human-experience/2011/12/02/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Participez à la conférence Sql Server de l&#8217;année en france!</title>
		<link>http://www.rui.fr/event/participez-a-la-conference-sql-server-de-lannee-en-france/2011/11/25/</link>
		<comments>http://www.rui.fr/event/participez-a-la-conference-sql-server-de-lannee-en-france/2011/11/25/#comments</comments>
		<pubDate>Fri, 25 Nov 2011 18:27:52 +0000</pubDate>
		<dc:creator>Rui</dc:creator>
				<category><![CDATA[Event]]></category>
		<category><![CDATA[Pass]]></category>
		<category><![CDATA[Sql Server]]></category>
		<category><![CDATA[sqlrally]]></category>

		<guid isPermaLink="false">http://www.rui.fr/?p=420</guid>
		<description><![CDATA[<div style="display:inline;float:right;margin-left:1em"><g:plusone href="http://www.rui.fr/event/participez-a-la-conference-sql-server-de-lannee-en-france/2011/11/25/"></g:plusone></div>
Les conférences sont de formidables occasions d&#8217;apprendre de nouvelles choses et les occasions ne sont pas si nombreuses que ça! On en a déjà parlé ici mais les conférences sont l&#8217;occasion de rencontrer des gens, de discuter et poser des questions à des experts, de s&#8217;informer sur des technos en vrai et avec du temps [...]]]></description>
			<content:encoded><![CDATA[<div style="display:inline;float:right;margin-left:1em"><g:plusone href="http://www.rui.fr/event/participez-a-la-conference-sql-server-de-lannee-en-france/2011/11/25/"></g:plusone></div>
<p>Les conférences sont de formidables occasions d&#8217;apprendre de nouvelles choses et les occasions ne sont pas si nombreuses que ça! On en a déjà parlé ici mais les conférences sont l&#8217;occasion de rencontrer des gens, de discuter et poser des questions à des experts, de s&#8217;informer sur des technos en vrai et avec du temps dédié à ça (le concept de je verrais le screencast j&#8217;en ai plein les tiroirs de non visionnées&#8230;).</p>
<p>&nbsp;</p>
<p><img class="aligncenter" title="SQL RALLY FR" src="http://blogs.codes-sources.com/blogs/christian/112211_2326_LesjournesS1.jpg" alt="" width="756" height="149" /></p>
<p>Je reviens donc sur les journées Sql Serveur organisée par le GUSS qui auront lieu chez Microsoft les 12 et 13 décembre. C&#8217;est le premier PASS Sql Rally francophone et ça c&#8217;est une super news! Malgré son nom, Les journées Sql Serveur, qui est peut être marketingment plus parlant au plus grand nombre, n&#8217;en est pas moins porté par l&#8217;organe officiel en france de l&#8217;association de pro du Sql Server.</p>
<p>Pour avoir déjà assisté à ce type d&#8217;évènements à l&#8217;étranger, c&#8217;est vraiment quelque chose de très sympa que d&#8217;avoir des journées entières consacrées à la techno. Les conférences comme les techdays sont trop généralistes et sont plus l&#8217;occasion de présenter des produits ou de découvrir rapidement une techno. Là, vous avez 2 jours sur Sql Serveur avec toutes les briques prises en compte.</p>
<p>Il y a de plus des speakers parmis les meilleurs en france sur le sujet de la data et vous aurez rarement l&#8217;occasion de voir tout ce petit réuni: <a title="SPEAKERS" href="http://www.guss.fr/accueil/les-journ%C3%A9es-sql-server/speakers.aspx" target="_blank">http://www.guss.fr/accueil/les-journées-sql-server/speakers.aspx</a></p>
<p>Pour le détail du programme, c&#8217;est ici: <a title="programme des sessions" href="http://www.guss.fr/accueil/les-journées-sql-server/agenda.aspx" target="_blank">http://www.guss.fr/accueil/les-journées-sql-server/agenda.aspx</a></p>
<p>et pour l&#8217;inscription c&#8217;est ici: <a title="inscriptions" href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032496260&amp;Culture=fr-FR" target="_blank">https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032496260&amp;Culture=fr-FR</a></p>
<p>C&#8217;est en tout cas une super initiative et j&#8217;espère qu&#8217;elle sera reconduite les années prochaines!</p>
<p>Je serai là bas les deux jours, donc n&#8217;hésitez pas à me faire signe, j&#8217;essaierai de vous faire un débrief des sessions auxquelles je vais assister.</p>
<p>Bonne conférence!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rui.fr/event/participez-a-la-conference-sql-server-de-lannee-en-france/2011/11/25/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Web 2.5  &#8211; Ajax push with Asp.Net &#8211; part 1</title>
		<link>http://www.rui.fr/developpement/web-2-5-ajax-push-with-asp-net-part-1/2011/11/21/</link>
		<comments>http://www.rui.fr/developpement/web-2-5-ajax-push-with-asp-net-part-1/2011/11/21/#comments</comments>
		<pubDate>Mon, 21 Nov 2011 15:00:41 +0000</pubDate>
		<dc:creator>Rui</dc:creator>
				<category><![CDATA[Developpement]]></category>
		<category><![CDATA[Asp.Net]]></category>
		<category><![CDATA[Asp.Net Mvc]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[push]]></category>
		<category><![CDATA[Web 2.5]]></category>

		<guid isPermaLink="false">http://www.rui.fr/?p=403</guid>
		<description><![CDATA[<div style="display:inline;float:right;margin-left:1em"><g:plusone href="http://www.rui.fr/developpement/web-2-5-ajax-push-with-asp-net-part-1/2011/11/21/"></g:plusone></div>
Pourquoi tu push? Comme je l&#8217;ai dit dans mon précédent post, je suis très attaché à cette notion de plateforme de développement web intégrée et au fait de pouvoir concevoir aujourd&#8217;hui des applications complètes sur une base de html. Parmis les points essentiels de cette manière de concevoir les choses, il y a la notion [...]]]></description>
			<content:encoded><![CDATA[<div style="display:inline;float:right;margin-left:1em"><g:plusone href="http://www.rui.fr/developpement/web-2-5-ajax-push-with-asp-net-part-1/2011/11/21/"></g:plusone></div>
<p><span class="Apple-style-span" style="font-size: 20px; font-weight: bold;">Pourquoi tu push?</span></p>
<p><img class="alignleft size-full wp-image-412" title="comet" src="http://www.rui.fr/wp-content/uploads/2011/11/comet.png" alt="" width="159" height="159" /></p>
<p>Comme je l&#8217;ai dit dans <a title="Web 2.5 – Real Time Web Platform" href="http://www.rui.fr/article/web-2-5-real-time-web-platform/2011/11/18/" target="_blank">mon précédent post</a>, je suis très attaché à cette notion de plateforme de développement web intégrée et au fait de pouvoir concevoir aujourd&#8217;hui des applications complètes sur une base de html. Parmis les points essentiels de cette manière de concevoir les choses, il y a la notion de temps réel. Cette notion est toute relative et subjective du point de vue utilisateur.</p>
<p>Par exemple, on considère habituellement que toute action de moins de 100ms peut être considérée comme instantanée d&#8217;un point de vue de l&#8217;interface utilisateur, ou encore que la seconde est la limite acceptable dans une application pour que l&#8217;utilisateur ait cette sensation de fluidité qui fait qu&#8217;une application est agréable à utiliser.</p>
<p>Dans les applications web, la communication a été globalement depuis le début à sens unique.</p>
<pre>Le client effectue une requête &gt; le serveur y répond &gt; la communication est coupée.</pre>
<p>Depuis quelques années maintenant, l&#8217;évolution de la technologie aidant ainsi que l&#8217;expérience que l&#8217;on a des applications web, nous avons eut l&#8217;envie et le besoin de pousser de l&#8217;information depuis le serveur vers le client. Des technologies et spécialistes sont arrivés sur ce segment, avec notamment Comet qui désigne globalement aujourd&#8217;hui la notion de push ajax. Néanmoins, les implémentations aussi diverses que variées ne sont pas toujours pratiques, les solutions custom pas forcément évidentes et surtout, elles fonctionnent en général très bien sur unix et pas sous Windows.</p>
<h2>Et sur Asp.Net?</h2>
<p>Comme je l&#8217;ai déjà mentionné, c&#8217;est certainement cette fonctionnalité qui a attiré en premier les développeurs sur la plateforme Node.js. Après avoir joué pas mal de temps avec, je me suis rendu que l&#8217;on avait au final souvent sous-estimé ce paradigme fonctionnel et appliqué une mauvaise implémentation. J&#8217;ai trouvé le fonctionnement et l&#8217;apport au sein d&#8217;une application vraiment top, mais qu&#8217;en est-il en Asp.Net?</p>
<p><img class="alignleft size-full wp-image-414" title="asp-net" src="http://www.rui.fr/wp-content/uploads/2011/11/asp-net.gif" alt="" width="311" height="208" />J&#8217;ai par le passé, déjà implémenté cette pseudo notion de push temps réel dans des applications web mais toujours au travers d&#8217;un classique polling ajax (qui s&#8217;avère suffisamment efficace la plupart du temps). Néanmoins qu&#8217;est-ce qui nous empêche d&#8217;avoir de longues connexions persistantes et de faire du long polling ou du streaming en Asp.net?</p>
<p>Pas grand chose en fait, à par peut être une mauvaise interprétation des problématiques.</p>
<p>Faire du long polling et avoir donc quelque chose sur le serveur qui attend pour rien fait peur en général et ont se dit que l&#8217;on va rapidement atteindre les limites du raisonnable. D&#8217;où le simple polling ajax.</p>
<p>Il répond au même paradigme que les connexions aux bases données:</p>
<p>&nbsp;</p>
<blockquote><p>use it late, release it fast</p></blockquote>
<p>Donc, en théorie je m&#8217;en sors mieux si je fais plein de petite requêtes que une seule longue&#8230;Oui, mais ce n&#8217;est pas fondamentalement comme cela que cela se passe.</p>
<p>Déjà, il faut voir l&#8217;ajout de traffic réseau, un echange de messages toutes les secondes (en partant sur un polling raisonnable à la seconde) n&#8217;a pas le même coût qu&#8217;un ping de présence toutes les 30 secondes.</p>
<p>Ensuite, il y a les problématiques liées en elles-même à ce choix d&#8217;infrastructure applicative. Même si votre polling effectue de requêtes approchées dans le temps, à la seconde, les évents sur le serveur sont eux instantanés! Ce qui implique donc de gérer des buffers, des timestamp qui vont vous permettre de stocker temporairement  les derniers événements et savoir quoi renvoyer à chaque requête utilisateur, ce qui n&#8217;est pas forcément trivial à intégrer.</p>
<p>Enfin il faut aussi comprendre le cycle de vie des requêtes http sur IIS et Asp.net. Nous avons à notre disposition depuis .net 2, des handler http asynchrones qui permettent justement un découplage entre les requêtes et les traitements. Je ne vais pas rentrer dans les détails, ce n&#8217;est pas le sujet ici et je ne suis pas non plus le mieux qualifié pour en parler, mais lors qu&#8217;une requête sur le serveur, celle-ci est prise en compte par un thread de communication. Il y a un pool commun de thread de communication et leur nombre est assez limité. Le traitement peut être réalisé directement de manière synchrone par celui-ci mais peut aussi, dans le cas d&#8217;un handler asynchrone, être délégué à un thread de traitement, rendant par la même occasion le thread de communication à nouveau disponible pour servir de nouvelles requêtes.</p>
<p><a href="http://www.rui.fr/wp-content/uploads/2011/11/figure002.gif"><img class="aligncenter size-full wp-image-413" title="polling versus long polling" src="http://www.rui.fr/wp-content/uploads/2011/11/figure002.gif" alt="" width="580" height="229" /></a>Cette manière de faire colle donc parfaitement de manière performante avec la notion de long polling!</p>
<ol>
<li>J&#8217;envoie une requête ajax sur le serveur</li>
<li>un thread de communication prend en charge cette requete</li>
<li>il la transfère à un thread de traitement</li>
<li>le thread de communication est à nouveau immédiatement disponible pour servir d&#8217;autres clients</li>
<li>le thread de traitement se met en attente d&#8217;un signal (une action ou un timer)</li>
<li>quand il a fini il reprend un thread de communication dans le pool et lui donne la main</li>
<li>le thread de communication répond au client</li>
<li>celui-ci reçoit la réponse, la traite et renvoie à nouveau immédiatement une nouvelle requête au serveur.</li>
</ol>
<p>Au final, toutes les techniques nécessaires à faire cela sont belles et bien disponibles depuis longtemps, c&#8217;est vraiment plus une question de pratiques et d&#8217;expériences qui fait que l&#8217;on s&#8217;y penche un peu plus aujourd&#8217;hui.</p>
<p>&nbsp;</p>
<h2>Ok, let&#8217;s do it!</h2>
<p>Le principe de base est d&#8217;avoir un bus d&#8217;événements qui va recevoir les notifications et les repousser vers ses abonnés. Lorsque le handler asynchrone reçoit une requête il donne la main à un traitement annexe et repasse dans le thread pool de connexion. Ce traitement commence par s&#8217;abonner au bus d&#8217;événements puis s&#8217;abonne à un autre événement de type timer. Le premier des deux qui envoie un signal, provoque la poursuite de la séquence et génère la réponse, la main est ensuite rendue au thread de réponse.</p>
<p>J&#8217;ai regardé plusieurs types d&#8217;implémentations, principalement en passant par les nouvelles classes Task&lt;&gt; ou encore en passant par le framework Reactive Extensions. En parallèle, mon ami Zied a lui voulu faire un test simple sans aucun autre framework avec le bon vieux pattern utilisant le IAsyncResult. Sachant que l&#8217;intérêt principal était de faire un test basique et simple, je suis revenu moi aussi vers cette méthode en partant de sa solution. Comme, je voulais un exemple utilisable de bout en bout, j&#8217;ai démarré la construction d&#8217;un petit framework permettant de faire simplement du long polling.</p>
<p>Vous trouverez donc dans ce framework une manière de faire du long polling. Je n&#8217;ai pas la prétention de dire que c&#8217;est la meilleure, mais elle fonctionne. J&#8217;ai ajouté aussi tout une couche d&#8217;infrastructure de manière à rendre cela simple d&#8217;utilisation. Vous avez a votre disposition des bus d&#8217;événements (que vous mettez en place déclarativement par type et nom), puis des helpers pour accéder à aux send/push simplement. Je vais continuer à travailler sur ce petit framework car je pense qu&#8217;il y a un besoin d&#8217;avoir quelque chose de simple à comprendre et à mettre en place. Ceci étant, si vous voulez quelque chose d&#8217;un peu plus mature aujourd&#8217;hui, je vous invite vraiment à utiliser SignalR qui est vraiment très bien (et à regarder le source aussi).</p>
<p>&nbsp;</p>
<h2>Welcome to Mediator framwork</h2>
<p><a href="https://github.com/rhwy/Mediator"><img class="alignleft size-full wp-image-416" title="mediator framework" src="http://www.rui.fr/wp-content/uploads/2011/11/mediator-logo-1x120.png" alt="" width="120" height="119" /></a></p>
<p>Ceci est un framwork permettant donc d&#8217;envoyer des messages par push dans une page web en asp.net. Les messages sont transportés par une enveloppe contenant un timestamp et l&#8217;objet du message en lui-même. Les bus de messages sont identifiées par un type (d&#8217;objet) et un nom. La création de ces bus se fait par configuration au démarrage de l&#8217;application. Un buffer est aussi intégré pour garder en mémoire les X derniers messages pour chaque bus (afin par exemple de les afficher au moment du chargement d&#8217;une page). Coté client, il n&#8217;y a rien de particulier, définissez vos requêtes ajax comme d&#8217;habitude, partez de l&#8217;exemple si vous avez des doutes.</p>
<h3></h3>
<p><strong>NOTE</strong> :</p>
<p>Pour ceux qui n&#8217;ont pas la patience d&#8217;aller plus loin, vous pouvez aller directement à la page github du projet:</p>
<p><a href="https://github.com/rhwy/Mediator" target="_blank">https://github.com/rhwy/Mediator</a></p>
<p>&nbsp;</p>
<h3></h3>
<h3>1. Configuration</h3>
<p>1) Importez la librairie Mediator.dll dans votre projet/site</p>
<p>2) Adaptez votre web.config si besoin. Par défaut tous les modules managés sont chargés (ce qui sera donc le cas du notre):</p>
<div>
<pre><code>&lt;modules runAllManagedModulesForAllRequests="true"/&gt; </code></pre>
<p>si ce n&#8217;est pas le cas, ajoutez notre module à l&#8217;intérieur de cette balise modules</p>
</div>
<p>3) Définissez la route pour l&#8217;envoi des messages:</p>
<pre><code>
routes.Add(
   "mediator",
   new Route(
      "mediator/{type}/{name}",
      new RouteValueDictionary(new { type = "string", name = "default" }),
      new EventBusRouteHandler()));
</code></pre>
<p>Pour l&#8217;intant, ce handler ne prend en charge que la propagation des messages aux abonnés, l&#8217;envoi des messages se faisant à votre convenance (pour moi préférablement dans un contrôler dédié, voir ci-dessous)</p>
<h3>2. Server code</h3>
<p>Dans notre exemple nous partirons donc sur un controller dédié dont on pourra par exemple déclarer la route comme ceci:</p>
<pre><code>
//Message send
routes.MapRoute(
   "Send",
   "MediatorNotifier/{action}",
   new { controller = "MediatorNotifier", action = "Index" } );
</code></pre>
<p>C&#8217;est la manière la plus simple de centraliser les éléments liés à la notification temps réel dans votre application si il n&#8217;y a pas beaucoup de types de messages différents (ce qui est vrai dans la plupart des cas). Si jamais vous aviez une architecture plus conséquente, il vaut mieux ajouter ces actions spécifiques à chaque controller avec un regroupement plutôt fonctionnel.</p>
<p>Pour ce qui est de l&#8217;action en charge de la notification, cela peut facilement être réalisé comme dans l&#8217;exemple ci-dessous:</p>
<pre><code>
[HttpPost]
public ActionResult NotifyChatMessage(string name, ChatMessage message)
{
   MediatorBus.Send&lt;ChatMessage&gt;(this, message);
   return Json(new { saved = "ok" });
}
</code></pre>
<p>L&#8217;intéret initial de passer par une action de controller standard au lieu d&#8217;intégrer la notification dans le framework avec la distribution des messages  est juste de pouvoir simplement profiter du DefaultModelBinder des actions d&#8217;Asp.Net Mvc&#8230;On peut donc passer en ajax des objets complexes et fortement typés, et les passer simplement au bus grâce à notre helper MediatorBus.</p>
<p>Le framework embarque aussi une petite mécanique pour avoir une sorte de tampon des derniers messages (pour chaque bus) afin de pouvoir imprimer simplement ce qui est en cours. Ceci est particulièrement utile lors du chargement d&#8217;une page pour afficher ce qu&#8217;il y a en cours. Il est évident que dans une application ayant un minimum de fonctionnalités, vous auriez tout intérêt à gérer vous même cette fonctionnalité avec une gestion propre et personnelle des évènements et de la persistance. Néanmoins, la mécanique en place vous permet d&#8217;avoir une solution simple de suite.</p>
<p>Pour utiliser cette mécanique, j&#8217;aurais tendance à passer par une action partielle (souvent les besoins de remontée d&#8217;infos de push dans une page, sont plutôt liées à l&#8217;application en elle-même et pas à une page en particulier, utiliser cette méthode en simplifie le découplage):</p>
<pre><code>
[ChildActionOnly]
public ActionResult BufferOfChatMessage()
{
   ViewBag.Message = "Welcome to long polling demo!";
   var messageBuffer = MediatorBus.BufferOf&lt;ChatMessage&gt;();
   return PartialView(messageBuffer);
}
</code></pre>
<p>Puis pour l&#8217;appeler dans la vue parente:</p>
<pre><code>
   &lt;h2&gt;Simple message exchange&lt;/h2&gt;
   &lt;p&gt;
      @Html.Action("BufferOfChatMessage","MediatorNotifier")
   &lt;/p&gt;
</code></pre>
<p>Voici un exemple de vue allant de pair avec ce modèle:</p>
<pre><code>
@model IEnumerable
@{
   Layout = null;
   var messages = Model.Cast&lt;MessageOf&lt;ChatMessage&gt;&gt;();
}
&lt;ul id="messages"&gt;
@foreach (var item in messages) {
   &lt;li&gt;@item.MessageItem.User : @item.MessageItem.Message&lt;/li&gt;
}
&lt;/ul&gt;
</code></pre>
<h3>3. Code client</h3>
<p>Pour envoyer les notifications, il n&#8217;y a rien de particulier, c&#8217;est au choix de chacun. Pour la partie abonnement, voici un exemple de fonction javascript simple, utilisant jQuery:</p>
<pre><code>
function getMessages() {
   $.post("/mediator/string", null, function (data, s) {
      if (data.MessageItem != "" &amp;&amp; data.MessageItem != undefined) {
         var $msg = $('&lt;li/&gt;');
         $msg.html(data.MessageItem);
         $msg.prependTo('#messages');
      } else {
         console.log(data.TimeStamp);
      } 

      setTimeout(function () { getMessages(); }, 10000);
   });
}
</code></pre>
<p>C&#8217;est une fonction récursive qui se rappelle elle-même au moment ou elle a fini.</p>
<h3>4. Aller plus loin</h3>
<p>Ce petit framework a principalement été initié pour montrer la mise en place du long polling en asp.net sans librairie externe autre. Il n&#8217;a pas la prétention de garantir un niveau de qualité de code pour des applications d&#8217;entreprise mais peu néanmoins assez sereinement être utilisé en production.</p>
<p>Je vous invite donc à aller voir la page github du projet pour récupérer les soures:</p>
<p><a href="https://github.com/rhwy/Mediator" target="_blank">https://github.com/rhwy/Mediator</a></p>
<p>Je mettrai ça sur auget dès que possible!</p>
<p>Faites moi part de vos retours, forkez le code, remontez vos patches et suggestions! Faites des commentaires, tout cela est plus que bienvenu!</p>
<pre><code>Learn, share, enjoy!</code></pre>
<p>Bon push!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rui.fr/developpement/web-2-5-ajax-push-with-asp-net-part-1/2011/11/21/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Web 2.5 &#8211; Real Time Web Platform</title>
		<link>http://www.rui.fr/article/web-2-5-real-time-web-platform/2011/11/18/</link>
		<comments>http://www.rui.fr/article/web-2-5-real-time-web-platform/2011/11/18/#comments</comments>
		<pubDate>Fri, 18 Nov 2011 07:30:38 +0000</pubDate>
		<dc:creator>Rui</dc:creator>
				<category><![CDATA[Article]]></category>
		<category><![CDATA[Developpement]]></category>
		<category><![CDATA[buzz]]></category>
		<category><![CDATA[Html5]]></category>
		<category><![CDATA[Node.js]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[Web 2.5]]></category>
		<category><![CDATA[Web 3.0]]></category>

		<guid isPermaLink="false">http://www.rui.fr/?p=402</guid>
		<description><![CDATA[<div style="display:inline;float:right;margin-left:1em"><g:plusone href="http://www.rui.fr/article/web-2-5-real-time-web-platform/2011/11/18/"></g:plusone></div>
Posons nous quelques instants pour regarder un peu ce qui se passe dans les grandes lignes du web en ce moment,  en dehors des phénomènes de communication sur des mots dont on a perdu le sens ou et en sortant d&#8217;un cadre purement technique. Une chose est très claire pour moi aujourd&#8217;hui. Nous avons eut [...]]]></description>
			<content:encoded><![CDATA[<div style="display:inline;float:right;margin-left:1em"><g:plusone href="http://www.rui.fr/article/web-2-5-real-time-web-platform/2011/11/18/"></g:plusone></div>
<p><img class="size-full wp-image-404 alignright" title="Web 2.0 (wikipedia)" src="http://www.rui.fr/wp-content/uploads/2011/11/320px-Web_2.0_Map.svg_.png" alt="" width="320" height="240" /></p>
<p>Posons nous quelques instants pour regarder un peu ce qui se passe dans les grandes lignes du web en ce moment,  en dehors des phénomènes de communication sur des mots dont on a perdu le sens ou et en sortant d&#8217;un cadre purement technique.</p>
<p>Une chose est très claire pour moi aujourd&#8217;hui. Nous avons eut la vague web 2.0, qui même si elle à été plus un buzzword qu&#8217;autre chose, nous a apporté des sites à l&#8217;ergonomie plus sympathique, au design plus agréable et surtout un niveau de socialisation qu&#8217;il n&#8217;y avait pas avant. Bien. On parle souvent du prochain Web 3.0 comme étant l&#8217;âge de l&#8217;internet sémantique et de l&#8217;internet des choses. Bien aussi. C&#8217;est très important et c&#8217;est certainement la tendance pour un futur plus ou moins proche, mais on est loin d&#8217;en être là aussi bien techniquement, que dans l&#8217;approche projet ou business.</p>
<p>Cela fait aussi pas loin de 2 ans que je me bats contre les petits copains qui font du Flash et du Silverlight sur le bien fondé du Html5 (c&#8217;est pour être gentil, car en général les discussions étaient plus houleuses que ça <img src='http://www.rui.fr/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> . Je pense qu&#8217;avec le temps (et une poussée massive de Microsoft vers le Html5 qui prend bien train en marche finalement), ils seront de plus en plus à venir se ranger de mon coté, et, je vais en profiter pour revenir un peu dessus aussi.</p>
<p>&nbsp;</p>
<p>Entre les deux n&#8217;y a-t-il donc rien? Est-ce que le web d&#8217;aujourd&#8217;hui (toujours 2.0 donc) est-il le même que celui de 2004 quand ces évolutions ont commencé à prendre forme dans les médias? En fait il y a pas mal de choses qui se trament en ce moment si on y regarde de plus près. La démocratisation plus que l&#8217;arrivée d&#8217;Html5 commence à porter ses fruits. Pour la première fois, réellement, avec Html5, nous avons à notre disposition une plateforme (html) qui est réellement prévue pour concevoir des applications multimédias et connectées! On a l&#8217;impression que cela ne change pas grand chose, que html4+javascript+css2 ne font pas moins, mais si, la différence est primordiale!</p>
<p>&nbsp;</p>
<p><img class="alignright size-full wp-image-405" title="Norton Commander (wikipedia)" src="http://www.rui.fr/wp-content/uploads/2011/11/Norton_Commander_5.51.png" alt="" width="512" height="280" /></p>
<p>Remontons de 20 ou 30 ans. A cette époque les interfaces graphiques étaient en mode texte (pour faire simple). Une console qui affiche du texte, n&#8217;est pas du tout la même chose qu&#8217;une interface graphique qui affiche du texte (ou même une console à l&#8217;intérieur d&#8217;une interface graphique qui affiche du texte).</p>
<p>Dans ces interfaces texte, la gestion de l&#8217;affichage et de la console étaient très basiques et très simplement gérées en mémoire. En gros 1 caractère = 1 octet en mémoire pour l&#8217;affichage et on le place dans la cellule où se trouve le curseur. Les interfaces graphiques en mode texte, telles que ce bon vieux Norton Commander, ne sont qu&#8217;une extrapolation de cette affichage texte avec beaucoup d&#8217;artifices pour avoir un semblant d&#8217;ergonomie et d&#8217;amélioration de l&#8217;expérience utilisateur (ou pas suivant les avis&#8230;). Avec cette interface graphique quasi séquentielle (prompt), l&#8217;interaction utilisateur aussi s&#8217;en ressent, on a de quoi interagir pour une action à la fois.</p>
<p>Ca c&#8217;est le html 1 à 4.  Le html est initialement un standard servant échanger simplement des documents textes au travers de liens hypertexte. On a une plateforme pour présenter des documents, point. Ce que l&#8217;on en fait aujourd&#8217;hui c&#8217;est du bricolage, cela peut être du beau bricolage certes, mais si vous faites autre chose que présenter de l&#8217;information avec cette plateforme c&#8217;est du bricolage (arg, moi même je me choque en écrivant cela &#8230;)</p>
<p>&nbsp;</p>
<p><img class="alignleft size-medium wp-image-407" title="Apple_Macintosh_Desktop (wikipedia)" src="http://www.rui.fr/wp-content/uploads/2011/11/Apple_Macintosh_Desktop-300x200.png" alt="" width="300" height="200" />Puis sont apparues les interfaces de MacOs, Windows 3 et autres (Zappons qui a l&#8217;antériorité de quoi et l&#8217;échelle de temps, hein?). Là on décide point par point comment va s&#8217;afficher une lettre. Ceci va nous permettre d&#8217;utiliser des polices aussi différentes que l&#8217;on veut mais aussi les tailles que l&#8217;on veut. Mais on va pouvoir aussi dessiner des choses à l&#8217;écran.</p>
<p>Quand je parle de dessiner je ne parle pas de programmes de type Paint mais bien du fait que l&#8217;on peut par exemple avoir cette notion de fenêtres graphiques qui nous est chère! On va aussi pouvoir simplement gérer 2 taches et affichages en même temps (une fenêtre en avant plan que j&#8217;utilise et une autre en background qui fait autre chose). On va pouvoir aussi avoir des notifications sur le bureau (l&#8217;heure qui s&#8217;affiche dans une barre des taches c&#8217;est déjà une notification sur le bureau&#8230;).</p>
<p>Puis avec le temps, on s&#8217;est dits qu&#8217;il fallait ajouter un peu d&#8217;interactivité et est apparu le javascript (non, non, va t&#8217;en vilain applet java). Puis on s&#8217;est dits qu&#8217;avoir des feuilles de style ce serait pas mal aussi pour définir un peu plus finement comment les choses devaient s&#8217;afficher à l&#8217;écran.</p>
<p>C&#8217;est un peu tout ça que nous ont apportés dans un premier temps les interfaces riches des applets java/activeX (même combat), puis de Flash puis enfin Silverlight. Néanmoins ces ajouts ne sont pas natifs au sein du document original. Pour repartir sur mon analogie avec la console, c&#8217;est un peu comme à l&#8217;époque du Dos, vous lanciez un beau jeu tout graphique mais qui reposait sur ses propres librairies d&#8217;affichage, sans profiter des accélérations ou facilités du système, et à la fin duquel vous retourniez quoi qu&#8217;il arrive à votre bonne vieille ligne de commande.</p>
<p>C&#8217;est là l&#8217;intéret de l&#8217;Html5, il s&#8217;agit d&#8217;une plateforme prévue pour!</p>
<p>Nous avons du dessin bitmap (canvas), du svg (dessin vectoriel), les websockets (communication full duplex bas niveau possible donc), du LocalDB et autres (données structurées en local), des webworkers (va y, fait péter ton thread en tâche de fond), etc&#8230;bref, de quoi penser des vrais applications.</p>
<p>Mais Html5, ce n&#8217;est pas que ça, c&#8217;est aussi, et surtout pour moi, l&#8217;apport de la sémantique dans le balisage de l&#8217;information.</p>
<p>Elle se situe à deux niveaux:</p>
<ul>
<li>Les balises de présentation structurantes (section, navigation, article,&#8230;)</li>
<li>Les micro-data</li>
</ul>
<p>Mais l&#8217;utilisation massive de tout ça va prendre un peu temps et on rangera ça plutôt dans la catégorie Web 3.0</p>
<p>&nbsp;</p>
<p>Aujourd&#8217;hui nous sommes donc dans une phase d&#8217;appropriation d&#8217;une plateforme pour le web. Je parle d&#8217;appropriation car les changements prennent du temps, la nouvelle manière des applications prend du temps aussi, l&#8217;utilisation en masse des nouveaux navigateurs prend du temps aussi. Mais c&#8217;est en marche! Ne croyez pas que tout ceux qui font du Html5 le font pour suivre une mode (pas que)! Mais ne faites pas non plus l&#8217;erreur de faire du Html5 pour suivre la mode alors que la seule modification de votre application à été de changer la balise html de votre document&#8230;</p>
<p>On voit d&#8217;ailleurs que beaucoup de librairies javascript commencent à prendre en compte ces nouveautés avec une rétro-compatibilité des anciens navigateurs au détriment éventuellement de certaines fonctionnalités. De même, on voit bien aujourd&#8217;hui que les notions de push dans les applications web ne sont pas uniquement accessibles au html5 et websockets, cela s&#8217;implémente très bien avec du long polling ou du streaming par exemple. Des librairies comme <a href="http://socket.io" target="_blank">Socket.io</a> illustrent très bien cet exemple avec des compatibilités ascendantes et des implémentations différentes suivant les clients.</p>
<p>Je mettrais aussi en avant l&#8217;apparition et l&#8217;utilisation de plus en plus courante de frameworks MVC coté client (knockout.js, backbone.js, javascriptMvc&#8230;). Cela est significatif de la prise en compte d&#8217;un réel modèle de développement orienté application au sein de pages web. Ces dernières servant principalement de support d&#8217;échange.</p>
<p>&nbsp;</p>
<p><a href="http://www.rui.fr/wp-content/uploads/2011/11/nodejs-S.png"><img class="alignleft size-medium wp-image-410" title="nodejs-S" src="http://www.rui.fr/wp-content/uploads/2011/11/nodejs-S-300x102.png" alt="" width="300" height="102" /></a>C&#8217;est pour toutes ces raisons aussi qu&#8217;il faut regarder et comprendre une plateforme comme Node.js.</p>
<p>En dehors de tout le buzz qu&#8217;il a pu y avoir autour de cette plateforme, c&#8217;est certainement celle qui incarne aujourd&#8217;hui le mieux les changements en cours.</p>
<p>Pourquoi les gens sont arrivés tout d&#8217;abord sur Node.js? Parce qu&#8217;il y avait enfin la promesse de faire du push web de manière simple et performante!</p>
<p>Pourquoi les gens continuent de l&#8217;utiliser et pourquoi il y a de plus en plus d&#8217;adeptes? Parce que la solution est simple, elle est globalement performante, elle permet de coder simplement avec le même langage coté serveur et coté client.</p>
<p>Enfin, elle utilise parfaitement un paradigme dont les gens commencent seulement à prendre réellement conscience aujourd&#8217;hui qui est le <a href="http://en.wikipedia.org/wiki/Single_responsibility_principle" target="_blank">SRP</a> appliqué aux applications : mieux vaut utiliser plein de petites librairies qui font bien une chose, que plusieurs grosses dont on ne se sert pas complètement ou qui se recoupent&#8230;C&#8217;est aussi une plateforme très dynamique et les applications comme les frameworks vivent de l&#8217;usage que les gens en font, c&#8217;est donc important&#8230;</p>
<p>&nbsp;</p>
<p>Nous ne sommes donc pas encore au web 3, mais on ne pas non plus dire qu&#8217;il n&#8217;y a pas d&#8217;évolutions depuis les débuts du web 2&#8230;Nous sommes donc pour moi, dans une phase de Web 2.5 correspondant à la mise en place d&#8217;applications web structurées et temps réel. Une fois ça en place et avec l&#8217;adoption massive des sémantiques issues de Html5 nous serons en bonne voie pour la prochaine génération du web.</p>
<p>Bon Web 2.5 et n&#8217;hésitez pas à laisser vos commentaires et votre vision des choses!</p>
<p>&nbsp;</p>
<p><span class="Apple-style-span" style="font-size: 26px;"><strong><br />
</strong></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rui.fr/article/web-2-5-real-time-web-platform/2011/11/18/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Alt.Net &#8211; Roslyn presentation par JB</title>
		<link>http://www.rui.fr/event/alt-net-roslyn-presentation-par-jb/2011/11/08/</link>
		<comments>http://www.rui.fr/event/alt-net-roslyn-presentation-par-jb/2011/11/08/#comments</comments>
		<pubDate>Tue, 08 Nov 2011 08:09:15 +0000</pubDate>
		<dc:creator>Rui</dc:creator>
				<category><![CDATA[Event]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[CLR]]></category>
		<category><![CDATA[Generation]]></category>
		<category><![CDATA[Services]]></category>

		<guid isPermaLink="false">http://www.rui.fr/?p=398</guid>
		<description><![CDATA[<div style="display:inline;float:right;margin-left:1em"><g:plusone href="http://www.rui.fr/event/alt-net-roslyn-presentation-par-jb/2011/11/08/"></g:plusone></div>
Toute l&#8217;équipe Alt.Net Paris essaie de se re-dynamiser en ce moment pour organiser plus de présentation ou même simplement des réunions pour discuter. N&#8217;hésitez pas à nous contacter si vous voulez parler ou présenter quelque chose, si il y a des sujets que vous voudriez que l&#8217;on aborde, etc&#8230; C&#8217;est dans ce cadre là que [...]]]></description>
			<content:encoded><![CDATA[<div style="display:inline;float:right;margin-left:1em"><g:plusone href="http://www.rui.fr/event/alt-net-roslyn-presentation-par-jb/2011/11/08/"></g:plusone></div>
<p>Toute l&#8217;équipe Alt.Net Paris essaie de se re-dynamiser en ce moment pour organiser plus de présentation ou même simplement des réunions pour discuter. N&#8217;hésitez pas à nous contacter si vous voulez parler ou présenter quelque chose, si il y a des sujets que vous voudriez que l&#8217;on aborde, etc&#8230;</p>
<p>C&#8217;est dans ce cadre là que <span style="color: #888888;"><a href="http://evain.net/blog/" target="_blank">Jean-Baptiste Evain</a></span> est venu nous proposer une présentation de Roslyn, le futur compilateur as a service de Microsoft. Fraichement sorti de l&#8217;équipe mono chez Novell et créateur de SyntaxTree, JB est surtout connu par la création de Mono.Cecil, le décompilateur utilisé par tout le monde. Il est certainement l&#8217;un des plus indiqués pour nous présenter cette nouvelle plateforme.</p>
<p>vous trouverez tous les détails de la présentation sur le site d&#8217;Alt.Net:</p>
<p><a href="http://www.altnetfr.org/2011/11/07/alt-net-presentation-de-roslyn-par-jean-baptiste-evain/" target="_blank">http://www.altnetfr.org/2011/11/07/alt-net-presentation-de-roslyn-par-jean-baptiste-evain/</a></p>
<p>La présentation aura lieu mardi 29 Novembre 2011 chez Cellenza/Xebia. Attention la salle n&#8217;est pas très grande et les places sont très limitées! il ne doit pas rester plus de 15 places à l&#8217;heure qu&#8217;il est donc dépéchez vous!</p>
<p><span style="color: #ff0000;"><strong>Update 10/11/2011: </strong></span></p>
<p>Au vu de l&#8217;affluence, nous avons décidé de migrer pour une salle plus grande chez Octo. Merci à eux et merci encore à Cellenza pour leur accueil initial!</p>
<p>Voici la nouvelle adresse:</p>
<address>Octo</address>
<address>50 Avenue des Champs-Elysées </address>
<address>75008 Paris</address>
<p>&nbsp;</p>
<p>bonne pres!</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rui.fr/event/alt-net-roslyn-presentation-par-jb/2011/11/08/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Dennis Ritchie</title>
		<link>http://www.rui.fr/life/dennis-ritchie/2011/10/13/</link>
		<comments>http://www.rui.fr/life/dennis-ritchie/2011/10/13/#comments</comments>
		<pubDate>Thu, 13 Oct 2011 07:26:56 +0000</pubDate>
		<dc:creator>Rui</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[people]]></category>

		<guid isPermaLink="false">http://www.rui.fr/?p=396</guid>
		<description><![CDATA[<div style="display:inline;float:right;margin-left:1em"><g:plusone href="http://www.rui.fr/life/dennis-ritchie/2011/10/13/"></g:plusone></div>
Après Steve Jobs le 6, ce mois d&#8217;octobre est aussi marqué par la disparition d&#8217;un autre grand homme de l&#8217;informatique. Même si il n&#8217;a pas marqué les esprits du grand public comme l&#8217;a fait le fondateur d&#8217;Apple, Dennis Ritchie n&#8217;en est pas moins aussi important pour l&#8217;informatique. C&#8217;est l&#8217;un des pionniers de l&#8217;informatique moderne au [...]]]></description>
			<content:encoded><![CDATA[<div style="display:inline;float:right;margin-left:1em"><g:plusone href="http://www.rui.fr/life/dennis-ritchie/2011/10/13/"></g:plusone></div>
<p>Après Steve Jobs le 6, ce mois d&#8217;octobre est aussi marqué par la disparition d&#8217;un autre grand homme de l&#8217;informatique. Même si il n&#8217;a pas marqué les esprits du grand public comme l&#8217;a fait le fondateur d&#8217;Apple, Dennis Ritchie n&#8217;en est pas moins aussi important pour l&#8217;informatique. C&#8217;est l&#8217;un des pionniers de l&#8217;informatique moderne au début des années 70 au sein de ce formidable laboratoire de développement qu&#8217;étaient les Bell Labs. Il a créé le C et est l&#8217;un des piliers d&#8217;Unix, sans compter ses nombreuses contributions.</p>
<p><strong>Dennis MacAlistair Ritchie</strong> (<a title="9 septembre" href="http://fr.wikipedia.org/wiki/9_septembre">9</a> <a title="Septembre 1941" href="http://fr.wikipedia.org/wiki/Septembre_1941">septembre</a> <a title="1941" href="http://fr.wikipedia.org/wiki/1941">1941</a> - 8 ou <a title="9 octobre" href="http://fr.wikipedia.org/wiki/9_octobre">9</a> <a title="Octobre 2011" href="http://fr.wikipedia.org/wiki/Octobre_2011">octobre</a> <a title="2011" href="http://fr.wikipedia.org/wiki/2011">2011</a><sup id="cite_ref-0"><a href="http://fr.wikipedia.org/wiki/Dennis_Ritchie#cite_note-0">1</a></sup>)</p>
<p><a href="http://en.wikipedia.org/wiki/Dennis_Ritchie"><img class="alignnone" title="Dennis Ritchie photo" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/01/Dennis_MacAlistair_Ritchie_.jpg/225px-Dennis_MacAlistair_Ritchie_.jpg" alt="" width="225" height="260" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rui.fr/life/dennis-ritchie/2011/10/13/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nodejs &#8211; Https services</title>
		<link>http://www.rui.fr/article/nodejs-https-services/2011/10/07/</link>
		<comments>http://www.rui.fr/article/nodejs-https-services/2011/10/07/#comments</comments>
		<pubDate>Fri, 07 Oct 2011 13:26:54 +0000</pubDate>
		<dc:creator>Rui</dc:creator>
				<category><![CDATA[Article]]></category>
		<category><![CDATA[Developpement]]></category>
		<category><![CDATA[Node.js]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://www.rui.fr/?p=392</guid>
		<description><![CDATA[<div style="display:inline;float:right;margin-left:1em"><g:plusone href="http://www.rui.fr/article/nodejs-https-services/2011/10/07/"></g:plusone></div>
Node.js a beaucoup de bons cotés mais aussi beaucoup de mauvais. Le principal reproche quand on vient du monde .Net est sans doute le manque d&#8217;outillage et de support. Ce qui nous amène parfois a perdre du temps avec des choses qui ne sont pas réellement des problèmes mais pour lesquelles on manque juste d&#8217;information. [...]]]></description>
			<content:encoded><![CDATA[<div style="display:inline;float:right;margin-left:1em"><g:plusone href="http://www.rui.fr/article/nodejs-https-services/2011/10/07/"></g:plusone></div>
<p>Node.js a beaucoup de bons cotés mais aussi beaucoup de mauvais. Le principal reproche quand on vient du monde .Net est sans doute le manque d&#8217;outillage et de support. Ce qui nous amène parfois a perdre du temps avec des choses qui ne sont pas réellement des problèmes mais pour lesquelles on manque juste d&#8217;information.</p>
<p>J&#8217;ai voulu récemment accéder à un service REST en https avec Node.js. On regarde quelques exemples, on adapte son code et quand on pense que tout est bien on se prend une erreur non explicite. Le pb est ici que tout le code est correct, sauf qu&#8217;il faut utiliser la librairie https au lieu de la librairie http. </p>
<p>C&#8217;est logique me direz-vous? Si on veut oui, sauf que d&#8217;habitude on importe un framework qui fait du http au sens large et qui possède des options pour utiliser le protocole de manière sécurisée ou pas, via un proxy ou pas, etc&#8230;</p>
<p>Pour illustrer mon propos, voici comment utiliser un service rest https fourni par Google pour la réduction d&#8217;url que nous allons invoquer via un script en ligne de commande pour la démo: </p>
<pre name="code" class="javascript">
var querystring = require('querystring');
var https = require('https');

//sample data:
var g_data = JSON.stringify({
  "longUrl": "http://www.artofnet.com"
});

//définition de notre configuration de services
var googleApisConfig = {
    Host : 'www.googleapis.com',
    Key : '!!! votre clé api google a changer sous peine d erreur !!!',
    Services : {
	Url : '/urlshortener/v1/url?pp=1&amp;key='
    }
}

//définition de nos options d'appel:
var post_options = {
      host: googleApisConfig.Host,
      port: '443',
      path: googleApisConfig.Services.Url+googleApisConfig.Key,
      method: 'POST',
      headers: {
           'Content-Type': 'application/json'
           ,'X-JavaScript-User-Agent':'node.js'
	   ,'Connection':'close'
      }
  };
//définition de l'appel
var req = https.request(post_options, function(res){
    if(res.statusCode === 200)
		{
			res.setEncoding('utf-8');
			var data = {};
			res.on('data',function(chunk){
				data = eval('(' + chunk + ')');
				console.log("Shortened URL => " + data.id);
			});
		} else {
        console.log("bad status code: " + res.statusCode);
    }
});

req.on('error',function(e){
   console.log(e);
});

req.write(g_data);
req.end();
</pre>
<p>Soit à l&#8217;exécution:</p>
<pre name="code" class="bash">
>> node test-url-shrink-https.js
Shortened URL => http://goo.gl/OlL2z
</pre>
<p>Donc voila, rien de particulier, on voit que les appels se font de la même manière qu&#8217;une requête classique. Note: Ceci est un exemple extrait et simplifié pour un test one-shot en ligne de commande, ce n&#8217;est pas à utiliser tel quel.</p>
<p>Et encore une fois, on voit bien là toute la puissance du système mais aussi ses pièges. Node.js est une belle plateforme mais attention à ce qu&#8217;elle ne devienne pas un php v2 10 ans après. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.rui.fr/article/nodejs-https-services/2011/10/07/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Stream, string, strong</title>
		<link>http://www.rui.fr/article/stream-string-strong/2011/09/28/</link>
		<comments>http://www.rui.fr/article/stream-string-strong/2011/09/28/#comments</comments>
		<pubDate>Wed, 28 Sep 2011 22:13:56 +0000</pubDate>
		<dc:creator>Rui</dc:creator>
				<category><![CDATA[Article]]></category>
		<category><![CDATA[Developpement]]></category>

		<guid isPermaLink="false">http://www.rui.fr/?p=389</guid>
		<description><![CDATA[<div style="display:inline;float:right;margin-left:1em"><g:plusone href="http://www.rui.fr/article/stream-string-strong/2011/09/28/"></g:plusone></div>
Si il y a bien un truc dont je ne me souvienne jamais correctement au niveau de la syntaxe en .net, c&#8217;est la manipulation des streams. C&#8217;est dommage car c&#8217;est plutôt bien fournit et bien fait mais malheureusement mal pensé en termes de design d&#8217;api. Du coup, c&#8217;est très peu intuitif. Je ne sais pas [...]]]></description>
			<content:encoded><![CDATA[<div style="display:inline;float:right;margin-left:1em"><g:plusone href="http://www.rui.fr/article/stream-string-strong/2011/09/28/"></g:plusone></div>
<p>Si il y a bien un truc dont je ne me souvienne jamais correctement au niveau de la syntaxe en .net, c&#8217;est la manipulation des streams. C&#8217;est dommage car c&#8217;est plutôt bien fournit et bien fait mais malheureusement mal pensé en termes de design d&#8217;api. Du coup, c&#8217;est très peu intuitif.</p>
<p>Je ne sais pas pour vous mais moi j&#8217;ai souvent un string sous la main quand une interface que je veux utiliser ne prend que des streams en entrée et vice-versa.</p>
<p>Donc pour faire très simple si on vous demande un Stream:</p>
<pre>string initial_string = "toto";
byte[] bytes = Encoding.ASCII.GetBytes(initial_string);
Stream result = new MemoryStream(bytes);</pre>
<p>De même si on vous fourni un stream que vous voulez consommer tout de suite en mémoire sous forme de string:</p>
<p>&nbsp;</p>
<pre>
Stream s = File.OpenRead("monfichier");
StreamReader sr = new StreamReader(s);
string result = sr.ReadToEnd();
</pre>
<p>&nbsp;<br />
Avec ça comme base bien en tête, on peut à peu près tout faire <img src='http://www.rui.fr/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.rui.fr/article/stream-string-strong/2011/09/28/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

