<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>hack en stock &#187; web</title>
	<atom:link href="http://frederic.logier.org/category/web/feed/" rel="self" type="application/rss+xml" />
	<link>http://frederic.logier.org</link>
	<description>les aventures d&#039;un gouiker au pays du logiciel libre</description>
	<lastBuildDate>Tue, 17 Jan 2012 21:18:51 +0000</lastBuildDate>
	<language>fr</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='frederic.logier.org' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>hack en stock &#187; web</title>
		<link>http://frederic.logier.org</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://frederic.logier.org/osd.xml" title="hack en stock" />
	<atom:link rel='hub' href='http://frederic.logier.org/?pushpress=hub'/>
		<item>
		<title>Nodecast : évolution d&#8217;une architecture web</title>
		<link>http://frederic.logier.org/2011/02/27/nodecast-evolution-dune-architecture-web/</link>
		<comments>http://frederic.logier.org/2011/02/27/nodecast-evolution-dune-architecture-web/#comments</comments>
		<pubDate>Sat, 26 Feb 2011 23:32:28 +0000</pubDate>
		<dc:creator>fredix</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[MondeLibre]]></category>
		<category><![CDATA[nodecast]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[AMQP]]></category>
		<category><![CDATA[mongodb]]></category>
		<category><![CDATA[Qpid]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://frederic.logier.org/?p=356</guid>
		<description><![CDATA[Après ces quelques mois sans nouvelle, voici un article de mes dernières avancées sur mon projet Nodecast. En effet depuis mon dernier article Nodecast : architecture d&#8217;une application web il y a eu quelques changements d&#8217;implémentation. Constat et évolution Tout d&#8217;abord Gearman qui était idéal sur le papier s&#8217;est avéré très instable à l&#8217;usage, comme [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=frederic.logier.org&amp;blog=3098224&amp;post=356&amp;subd=fredix&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Après ces quelques mois sans nouvelle, voici un article de mes dernières avancées sur mon projet <a href="http://nodecast.net" target="_blank">Nodecast</a>. En effet depuis mon dernier article <a href="http://frederic.logier.org/2010/07/21/nodecast-architecture-dune-application-web/" target="_blank">Nodecast : architecture d&#8217;une application web</a> il y a eu quelques changements d&#8217;implémentation.</p>
<h2>Constat et évolution</h2>
<p>Tout d&#8217;abord <a href="http://gearman.org/" target="_blank">Gearman</a> qui était idéal sur le papier s&#8217;est avéré très instable à l&#8217;usage, comme l&#8217;ont constaté d&#8217;autres développeurs sur la liste de diffusion. Ils ont l&#8217;air malgré tout d&#8217;avoir confiance en leur produit car ils vont ouvrir un service d&#8217;hébergement de files d&#8217;attente basé sur German : <a href="http://www.gearmanhq.com/" target="_blank">GearmanHQ</a>.</p>
<p>Après quelques recherches je me suis finalement dirigé vers un serveur de files qui implémente le protocole <a href="http://www.amqp.org/" target="_blank">AMQP</a> ce qui permet de ne pas dépendre d&#8217;un serveur en particulier. Plusieurs serveurs libres l&#8217;implémentent, comme <a href="http://www.rabbitmq.com/" target="_blank">RabbitMQ</a> (racheté par VMware), <a href="http://activemq.apache.org/" target="_blank">ActiveMQ</a> ou <a href="http://qpid.apache.org/" target="_blank">Qpid</a>.</p>
<p>L&#8217;autre problème est venu des workers qui traitent les données envoyées par le client desktop ( <a href="http://gitorious.org/nodecast/nodecast-gui" target="_blank">nodecast-gui</a> ). Le code Ruby était tellement lent qu&#8217;il fallait parfois plus de 1 minute pour effectuer un traitement de parsing et insertion dans <a href="http://www.mongodb.org/" target="_blank">MongoDB</a>. Je pense que le problème venait de la pile Ruby / Mongoid / Mongodb ruby driver et non de Ruby seul, mais il n&#8217;est tout simplement pas concevable que le worker qui intègre dans la base les <a href="http://www.nodecast.net/report/processus/ca049db6-8dff-11df-a587-c80aa903263a" target="_blank">processus utilisateur</a> met plus ou moins 2 minutes pour effectuer 1 traitement avec une charge CPU maximale.</p>
<p>J&#8217;ai donc décidé de récrire les workers ainsi que le dispatcher, en C++ avec l&#8217;aide de Qt. Mes tests en développement sont passés à moins de 1 seconde sur le worker process, le plus lourd&#8230;. Evidemment l&#8217;effort de développement est certes plus conséquent mais les résultats sont largement payant pour que cet investissement technique paye.</p>
<p>Qpid quant à lui s&#8217;est pour l&#8217;instant imposé de lui même, car il est le seul à proposer une API C/C++ fonctionnelle. Des plugins permettent de lui ajouter une persistance sur disque, des fonctionnalités de cluster, du support SSL et XML en natif. Il fait d&#8217;ailleurs partie du coeur de la solution de <a href="http://www.redhat.com/mrg/" target="_blank">Red Hat Enterprise MRG</a>. Cette architecture représentée par le schéma plus bas reste tout de même à valider par l&#8217;épreuve du feu de la production.</p>
<h2>Ingénierie</h2>
<p>Néanmoins il est à mes yeux évident qu&#8217;un service web ayant pour objectif à moyen/long terme la prétention de monter en charge, se doit d&#8217;avoir une architecture <a href="http://en.wikipedia.org/wiki/Scalability" target="_blank">scalable</a> et cela dès sa conception. C&#8217;est toute la différence entre créer un site web et créer une architecture web, ou bien entre le développement logiciel et l&#8217;ingénierie logicielle. Cette dernière implique une réflexion sur les méthodes de travail, les outils à utiliser, qu&#8217;ils soient ceux utilisés par les développeurs que ceux à utiliser dans l&#8217;architecture;  la veille techno, etc. En somme tout ce qui permet d&#8217;optimiser sa productivité, l&#8217;architecture mise en place n&#8217;en sera que le reflet, réussi ou pas, de ces choix&#8230;</p>
<p>Voici un exemple du résultat de l&#8217;ingénierie logiciel avec cette présentation de l&#8217;<a href="https://linuxfr.org/news/architecture-logicielle-de-la-nouvelle-version-de-linuxfrorg" target="_blank">architecture logicielle de la nouvelle version de LinuxFR.org</a> l&#8217;un des plus gros site technique francophone.</p>
<h2>Implémentation</h2>
<p>Pour revenir à Nodecast, les workers utilisent les drivers natifs de memcached, pour invalider le cache dont la page a été mise à jour, de MongoDB et de Qpid, ce qui permet, en ayant aucune couche d&#8217;abstraction intermédiaire d&#8217;obtenir les performances maximales. Le framework <a href="http://qt.nokia.com/products/">Qt</a> permet d&#8217;obtenir une certaine simplification du développement, grâce entre autre aux signaux, même si en effet la bibliothèque Boost intègre cette fonctionnalité.</p>
<p>J&#8217;ai développé <a href="http://gitorious.org/nodecast/nodecast-worker">nodecast-worker</a> de manière relativement générique afin qu&#8217;il instancie la bonne classe worker selon le paramètre &#8211;worker-type fourni en argument :</p>
<pre>nodecast-worker --memcached-ip=127.0.0.1 --memcached-port=11211 
--mongodb-ip 127.0.0.1 --mongodb-base=nodecast_prod --qpid-ip=127.0.0.1 
--qpid-port=5672 --worker-type=process</pre>
<p>L&#8217;usage du serveur de file Qpid, permet outre le fait de rendre les traitements asynchrones, de monter un cluster de worker d&#8217;un même type sans développement particulier. En effet chaque worker s&#8217;abonne à la même file d&#8217;attente Qpid de type <a href="https://svn.apache.org/repos/asf/qpid/trunk/qpid/cpp/examples/pub-sub/">pub/sub</a> (amq.topic). Une routing key appliquée par le <a href="http://gitorious.org/nodecast/nodecast-dispatcher" target="_blank">dispatcher</a> sert à taguer chaque message envoyé dans la file d&#8217;attente. Ainsi les workers filtrent les messages qui leur sont destiné, par exemple le tag <em>worker.cpu</em> pour le worker qui va traiter les messages qui contiennent les données de CPU envoyées par le client desktop <a href="http://gitorious.org/nodecast/nodecast-gui" target="_blank">nodecast-gui</a>.</p>
<p>Comme il est possible de lancer plusieurs instances worker du même type, chacun des worker dépile la même file taguée ce qui permet de répartir la charge sur plusieurs processus, voir aussi de la répartir sur des machines physiques différentes puisque les workers utilisent des connexions TCP &#8230; !</p>
<p>Pour comprendre les rouages et le potentiel d&#8217;une telle architecture, je conseille la lecture de ces 2 excellents articles sur l&#8217;utilisation d&#8217;un serveur AMQP : <a href="http://blog.zenika.com/index.php?post/2010/12/19/Introduction-a-RabbitMQ-AMQP">Introduction à RabbitMQ &#8211; AMQP Partie I</a> et <a href="http://blog.zenika.com/index.php?post/2010/12/26/Introduction-%C3%A0-RabbitMQ-AMQP-Partie-II">Introduction à RabbitMQ &#8211; AMQP Partie II</a></p>
<p>Pour finir sur cet épisode, ce développement me met de plus en plus la puce à l&#8217;oreille sur la nécessité de développer un framework / service qui permettrait le développement rapide de workers, de les enchaîner, les monitorer en temps réel et de les administrer. Ce framework / service proposerait en outre l&#8217;accès à une multitude de bibliothèques et d&#8217;API vers des services externes afin de pouvoir implémenter n&#8217;importe quelle idée, de manière rapide, stable et scalable. Cela éviterait de devoir redévelopper la roue et de devoir gérer toutes les exceptions inhérente à l&#8217;utilisation d&#8217;API bas niveau (timeout, déconnexion, reprise, exception, start/stop, &#8230;). En quelque sorte un <a href="http://tarpipe.com/" target="_blank">tarpipe</a> OpenSource mais qui permettrait d&#8217;utiliser n&#8217;importe quel langage script ou langage compilé. Comme on dit, je dis ça, je dis rien <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Workflow</h2>
<p>Le schéma suivant montre l&#8217;architecture en court de développement du backend de Nodecast. On y voit les 3 paliers asynchrones par lesquelles transite le traitement d&#8217;un message.</p>
<div id="attachment_358" class="wp-caption alignnone" style="width: 610px"><a href="http://fredix.files.wordpress.com/2011/02/architecture.png"><img class="size-full wp-image-358" title="nodecast architecture" src="http://fredix.files.wordpress.com/2011/02/architecture.png?w=620" alt=""   /></a><p class="wp-caption-text">nodecast architecture</p></div>
<h3>Palier 1</h3>
<p>Le premier palier nécessite 7 étapes.</p>
<ol>
<li>Le client nodecast extrait les données système de la machine, génère un XML et l&#8217;envoie par un POST (ajout) ou un PUT (update) HTTP.</li>
<li>le serveur web Nginx fait suivre la requête vers le cluster web Thin.</li>
<li><a href="http://code.macournoyer.com/thin/" target="_blank">Thin</a> exécute via <a href="http://rack.rubyforge.org/" target="_blank">rack</a> le DSL <a href="http://www.sinatrarb.com/intro" target="_blank">Sinatra</a> qui sert à créer simplement l&#8217;<a href="http://gitorious.org/nodecast/nodecast-api" target="_blank">API REST de nodecast</a>.</li>
<li>Ce dernier vérifie dans MongoDB les droits d&#8217;accès (couple email / token) grâce à un auth basic request HTTP transmis par le client,</li>
<li>Si l&#8217;autorisation a réussie, le code Sinatra stocke le XML dans le <a href="http://www.mongodb.org/display/DOCS/GridFS+Specification" target="_blank">GridFS mongoDB</a>, génère une collection de hash et transmet la charge dans queue dédiée au dispatcher.</li>
<li>Le code sinatra génère un XML de réponse au client.</li>
<li>NGinx le fait suivre au client, ce qui termine du point de vue utilisateur le traitement.</li>
</ol>
<p>L&#8217;objectif de ce palier est d&#8217;être le plus minimaliste possible afin qu&#8217;une autre requête puisse être traité avec le moins d&#8217;attente possible. L&#8217;auth, la conception de la charge, sa transmission et la réponse au client sont malgré tout chacune nécessaire. Dans cette architecture asynchrone il n&#8217;est pas possible de signaler dans la même passe, la bonne fin du traitement à moins de revenir à une architecture synchrone non scalable&#8230; A vrai dire il n&#8217;est de toute manière pas nécessaire de le signaler puisque le service tourne en arrière plan sur le poste utilisateur.</p>
<h3>Palier 2</h3>
<p>La transmission de la charge utilise 2 canaux AMQP direct : <em>dispatcher.update</em> ou d<em>ispatcher.add. </em>Le dispatcher est lancé selon cette ligne de commande :</p>
<pre> nodecast-dispatcher --mongodb-ip 127.0.0.1 --mongodb-base=nodecast_prod 
--qpid-ip=127.0.0.1 --qpid-port=5672</pre>
<ol>
<li>Il écoute les 2 files d&#8217;attente puis lors de la réception d&#8217;une charge, il vérifie l&#8217;existence de l&#8217;hôte à mettre à jour si c&#8217;est un update ou bien créé l&#8217;hôte si c&#8217;est un ajout.</li>
<li>Il injecte ensuite le XML extrait du GridFS dans un QHash Qt. Il sérialise ce QHash et envoie par AMQP la partie dédiée à chaque file de chaque worker concerné (hash["network"] pour le worker network par exemple). En clair, le XML est découpé et chaque morceau est envoyé dans la file d&#8217;attente de chacun des workers.</li>
</ol>
<h3>Palier 3</h3>
<ol>
<li>Tous les workers sont lancés et écoutent la file d&#8217;attente <em>amqp.topic</em> sur leur tag respectif (<em>worker.cpu</em>, <em>worker.load</em>. <em>worker.uptime</em>, <em>worker.network</em>, <em>worker.memory</em>, <em>worker.process</em>).</li>
<li>A réception d&#8217;un message, ils le sérialisent, mettent à jour la base de donnée puis invalident le cache de leur page web associée.</li>
<li>Ils transmettent via syslog leurs statuts et leurs exceptions.</li>
</ol>
<h2>Avenir</h2>
<p>A ce jour les workers process et cpu ont été réécrit et fonctionnent. Il reste l&#8217;implémentation des logs vers syslog ou AMQP afin de tracer les traitements des workers via des streams <a href="http://www.graylog2.org/" target="_blank">Graylog2</a>.</p>
<p>Je souhaite remplacer Memcached par <a href="http://redis.io/" target="_blank">Redis</a> pour profiter de ses très intéressantes fonctionnalités. Migrer le frontal web de Rails 2 vers la version 3. Stabiliser le client desktop et lui ajouter toutes les fonctionnalités de la lib <a href="http://support.hyperic.com/display/SIGAR/Home" target="_blank">SIGAR</a>. Développer un client Android. Terminer le <a href="http://www.entreprise20.fr/2010/09/29/rework-le-manifeste-pour-reapprendre-a-travailler-et-a-gerer/" target="_blank">rework</a> et Dominer le Monde <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<br />Classé dans:<a href='http://frederic.logier.org/category/code/'>code</a>, <a href='http://frederic.logier.org/category/mondelibre/'>MondeLibre</a>, <a href='http://frederic.logier.org/category/nodecast/'>nodecast</a>, <a href='http://frederic.logier.org/category/web/'>web</a> Tagged: <a href='http://frederic.logier.org/tag/amqp/'>AMQP</a>, <a href='http://frederic.logier.org/tag/mongodb/'>mongodb</a>, <a href='http://frederic.logier.org/tag/qpid/'>Qpid</a>, <a href='http://frederic.logier.org/tag/qt/'>Qt</a>, <a href='http://frederic.logier.org/tag/ruby/'>ruby</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/fredix.wordpress.com/356/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/fredix.wordpress.com/356/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/fredix.wordpress.com/356/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/fredix.wordpress.com/356/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/fredix.wordpress.com/356/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/fredix.wordpress.com/356/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/fredix.wordpress.com/356/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/fredix.wordpress.com/356/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/fredix.wordpress.com/356/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/fredix.wordpress.com/356/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/fredix.wordpress.com/356/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/fredix.wordpress.com/356/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/fredix.wordpress.com/356/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/fredix.wordpress.com/356/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=frederic.logier.org&amp;blog=3098224&amp;post=356&amp;subd=fredix&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://frederic.logier.org/2011/02/27/nodecast-evolution-dune-architecture-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0fc8e5d51ed3c0726b2826e8caeb8017?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fredix</media:title>
		</media:content>

		<media:content url="http://fredix.files.wordpress.com/2011/02/architecture.png" medium="image">
			<media:title type="html">nodecast architecture</media:title>
		</media:content>
	</item>
		<item>
		<title>De la webification d&#8217;Internet ou la renaissance des applications natives ?</title>
		<link>http://frederic.logier.org/2010/10/24/de-la-webification-dinternet-ou-la-renaissance-des-applications-natives/</link>
		<comments>http://frederic.logier.org/2010/10/24/de-la-webification-dinternet-ou-la-renaissance-des-applications-natives/#comments</comments>
		<pubDate>Sun, 24 Oct 2010 11:48:22 +0000</pubDate>
		<dc:creator>fredix</dc:creator>
				<category><![CDATA[MondeLibre]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://frederic.logier.org/?p=336</guid>
		<description><![CDATA[Grande nouvelle, Apple a annoncé enfin un App Store pour les MacOSX. C&#8217;est une des fonctionnalités qui ont fait le succès de l&#8217;iPhone et il est heureux de voir que cela est pris en compte pour les ordinateurs de bureau. Je n&#8217;ai pas retourné ma veste, je suis toujours un inconditionnel de GNU/Linux et je [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=frederic.logier.org&amp;blog=3098224&amp;post=336&amp;subd=fredix&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Grande nouvelle, <a href="http://www.apple.com/fr/mac/app-store/" target="_blank">Apple a annoncé enfin un App Store</a> pour les MacOSX. C&#8217;est une des fonctionnalités qui ont fait le succès de l&#8217;iPhone et il est heureux de voir que cela est pris en compte pour les ordinateurs de bureau.<br />
Je n&#8217;ai pas retourné ma veste, je suis toujours un inconditionnel de GNU/Linux et je ne suis pas prêt de changer, hormis de distribution ou lorsque <a href="http://www.haiku-os.org" target="_blank">Haiku</a> intégrera un gestionnaire de dépôts.<br />
Je suis heureux car un des arguments qui ont poussé le web à remplacer petit à petit les applications natives est l&#8217;absence d&#8217;installation. Or le succès de l&#8217;Apple Store sur iPhone démontre que les utilisateurs sont plus attirés par les applications natives que web. Je ne vais pas me répéter, cette démonstration est détaillée dans mon précédent billet <a href="http://frederic.logier.org/2010/06/25/desktop-2-0/" target="_blank">Desktop 2.0</a>.<br />
Il reste à Microsoft de sortir de sa grotte dans laquelle il est entré en 1990, pour enfin proposer leur dépôt de logiciels.<br />
Je suis heureux de ces avancés chez les concurrents, car j&#8217;ai l&#8217;espoir que cela facilite le téléchargement et donc l&#8217;usage des applications natives. En effet je déplore la systématisation du web d&#8217;autant plus sur des domaines où il n&#8217;est clairement pas adapté.<br />
Par effet de bord cela pousse au remplacement des ports dédiés par l&#8217;usage systématique des ports 80 et 443. Exemple l&#8217;assèchement des newsgroups vers des forums web.Utiliser le port 80 fourni un semblant de sécurité à l&#8217;administrateur système, ayant moins de ports à gérer sur ses firewall. Mais c&#8217;est un très mauvais usage, car de fait la gestion de la qualité de service (QoS) et éventuellement du filtrage devient très compliqué à effectuer.<br />
Pour l&#8217;utilisateur c&#8217;est une régression totale. L&#8217;application native offre une parfaite intégration au bureau et permet la communication avec d&#8217;autres applications lancées par lui. En web rien de tout cela, l&#8217;application tourne dans un onglet du navigateur, ce qui est au final beaucoup moins pratique pour la retrouver. Il faut oublier l&#8217;intéraction avec le bureau, il y a bien quelques gadgets comme les notifications en HTML5 qui est encore très loin d&#8217;être utilisé, ou bien via des extensions ce qui revient à &#8230; télécharger des applications !<br />
Dernier point important, ces markets facilitent l&#8217;achat d&#8217;applications. En centralisant le paiement, l&#8217;utilisateur peut acheter et télécharger l&#8217;application en 2 ou 3 clics. Inutile de sortir d&#8217;une grande école de commerce pour y voir l&#8217;avantage sur l&#8217;ancien modèle physique où il faut se rendre chez un distributeur y acheter sa boite&#8230; De même pour les achats numérique ou il faut se rendre sur le site de l&#8217;éditeur et soit lui donner ses informations de carte bleue soit avoir un compte Paypal, on est loin de la facilité et la sécurité d&#8217;un store centralisé. Le succès du store dédié au jeux, <a href="http://store.steampowered.com/" target="_blank">Steam</a> est aussi un autre exemple de l&#8217;intérêt de ce sytème pour les éditeurs et les utilisateurs.<br />
Canonical est le seul éditeur GNU/Linux qui souhaite développer un marché basé sur des applications payantes. En effet même si techniquement GNU/Linux possède depuis de nombreuses années des dépôts rien a été fait pour le transformer en &#8220;market&#8221; afin d&#8217;y développer un marché économique. Il faut bien avouer que les Linuxiens ont un rapport particulier avec l&#8217;argent, proche du tabou sexuel&#8230;Canonical, dont Mandriva aurait bien fait de s&#8217;inspirer il y a lontemps, souhaite donc démontrer qu&#8217;une économie de marché est possible dans un environnementGNU/Linux et je souhaite très fortement qu&#8217;ils y arrivent. D&#8217;une part pour qu&#8217;il y ait des éditeurs sur ce marché, donc des emplois, et des logiciels natifs. Même si ces nouveaux logiciels ne seront pas dans leur majorité libre, quelle importance si cela intéresse des utilisateurs ? De plus rien ne dit que des développeurs de logiciels libres ne puissent pas bénéficier de donations par le biais de cet app store et pourquoi pas en vivre ! On peut également rêver que Canonical fournisse une API afin de pouvoir effectuer des dons directement depuis le logiciel, avec un prélèvement moindre que <a href="http://www.flattr.com" target="_blank">Flattr</a> ou <a href="http://www.paypal.com" target="_blank">Paypal</a><br />
Pour finir voici l&#8217;annonce de <a href="http://www.guildsoftware.com/" target="_blank">Guild software</a>, éditeur du jeux propriétaire et multiplateforme <a href="http://www.vendetta-online.com/" target="_blank">Vendetta Online</a>, qui va utiliser l&#8217;app store d&#8217;Ubuntu. Par contre aucune information sur la possibilité de payer l&#8217;abonnement mensuel directement depuis l&#8217;app store.</p>
<pre>- Vendetta Online on Ubuntu Linux -
For the last few months we've been working with Canonical, the company behind 
Ubuntu Linux, to be one of their featured products in the new Software Center 
being rolled out as part of the Ubuntu 10.10 "Maverick Meerkat" release. This Software 
Center will basically bring app-store type functionality to Linux, something that could 
greatly help the platform in gaining acceptance as a desktop OS, and allow easy access 
to a variety of software that exists outside the open-source world 
(such as commercial videogames).
Vendetta Online should appear in the new Software Center sometime next week. 
We were intended to be a debut partner with the OS launch (on10/10/10), but a few 
delays popped up here and there; those have now been addressed and we're confident 
you'll see our title appear there in the near future.</pre>
<br />Classé dans:<a href='http://frederic.logier.org/category/mondelibre/'>MondeLibre</a>, <a href='http://frederic.logier.org/category/web/'>web</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/fredix.wordpress.com/336/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/fredix.wordpress.com/336/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/fredix.wordpress.com/336/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/fredix.wordpress.com/336/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/fredix.wordpress.com/336/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/fredix.wordpress.com/336/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/fredix.wordpress.com/336/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/fredix.wordpress.com/336/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/fredix.wordpress.com/336/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/fredix.wordpress.com/336/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/fredix.wordpress.com/336/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/fredix.wordpress.com/336/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/fredix.wordpress.com/336/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/fredix.wordpress.com/336/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=frederic.logier.org&amp;blog=3098224&amp;post=336&amp;subd=fredix&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://frederic.logier.org/2010/10/24/de-la-webification-dinternet-ou-la-renaissance-des-applications-natives/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0fc8e5d51ed3c0726b2826e8caeb8017?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fredix</media:title>
		</media:content>
	</item>
		<item>
		<title>De l&#8217;innovation physiquement décentralisée</title>
		<link>http://frederic.logier.org/2010/10/21/de-linnovation-physiquement-decentralisee/</link>
		<comments>http://frederic.logier.org/2010/10/21/de-linnovation-physiquement-decentralisee/#comments</comments>
		<pubDate>Thu, 21 Oct 2010 09:09:50 +0000</pubDate>
		<dc:creator>fredix</dc:creator>
				<category><![CDATA[MondeLibre]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://frederic.logier.org/?p=325</guid>
		<description><![CDATA[On parle beaucoup depuis ces dernières années de logiciel décentralisé par opposition au logiciel de type Minitel 2.0. Une simple recherche rappellera les défauts d&#8217;une telle architecture propriétaire et centralisée, façon Facebook, Twitter ou Google. Je faisais parti d&#8217;une association, RubyFrance , dont le but est la promotion du langage Ruby dans la francophonie et [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=frederic.logier.org&amp;blog=3098224&amp;post=325&amp;subd=fredix&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>On parle beaucoup depuis ces dernières années de logiciel décentralisé par opposition au logiciel de type Minitel 2.0. Une simple recherche rappellera les défauts d&#8217;une telle architecture propriétaire et centralisée, façon Facebook, Twitter ou Google.</p>
<p>Je faisais parti d&#8217;une association, <a href="http://www.rubyfrance.org" target="_blank">RubyFrance</a> , dont le but est la promotion du langage Ruby dans la francophonie et localement. Or je réalise l&#8217;énorme erreur du combat qui était le mien. En effet je réalise qu&#8217;essayer de promouvoir une technologie moderne et innovante tel que Ruby et Rails est une perte de temps dans une région qui a 10 ans de retard sur Paris et où il n&#8217;y a aucune startup ou presque qui s&#8217;y développe !</p>
<p>Avant de vouloir décentraliser le Web il faudrait avant penser à décentraliser le travail. Pourtant le constat à faire est simple, les entreprises et startups dans la capitale ont beaucoup de mal à dénicher des développeurs, or il faudrait peut être réaliser que le coût du logement ne fait qu&#8217;augmenter que ce soit en location ou en achat, les transports qui ne font que se dégrader, le cadre de vie au final est de moins en moins attrayant pour tout le monde à Paris.</p>
<p>J&#8217;ai dans mon réseau de nombreux développeurs et administrateurs systèmes extrêmement compétant qui ne vivent pas dans la capital, et pourtant les startups française s&#8217;entête à ne recruter physiquement que sur Paris, façon 20ème siècle. Etrange façon de voir l&#8217;innovation &#8230;</p>
<p>Il existe pourtant au moins 2 manières de &#8220;dé-Minitiliser&#8221; le travail. Par le télétravail bien entendu, qui n&#8217;a cure des grèves des transports lui&#8230; Il faut cependant que l&#8217;entreprise intègre ce mode de travail, en possédant les outils et l&#8217;organisation adéquate et que cela convienne aux employés concernés. L&#8217;autre solution est de n&#8217;avoir que des bureaux commerciaux sur la capital, et de décentraliser les bureaux techniques en province. Cette 2ème solution n&#8217;offre que des avantages et peut de plus y associer le télétravail pour certains employés.</p>
<p>Cependant comment promouvoir des technologies productive, Méthodes Agiles / Redmine / Git / Ruby on Rails / NoSQL / Linux / &#8230;, lorsque l&#8217;environnement professionnel local reste figé sur des architectures synchrones d&#8217;un autre siècle en PHP / Java / DotNet / SqlServer,  avec comme méthode de développement le cycle en V &#8230; ?</p>
<p>Pour illustrer, j&#8217;avais rencontré à Lyon début 2010, un entrepreneur qui se prenait pour un techos, et qui souhaitait monter un site de recrutement avec webcam (rien de révolutionnaire sauf pour lui). Le tout en PHP / MySQL, ce qui déjà n&#8217;est pas d&#8217;une grande innovation et inutile de parler framework web type <a href="http://www.symfony-project.org/" target="_blank">Symfony</a> ou <a href="http://rubyonrails.org/" target="_blank">Ruby on Rails</a>, inconnus &#8230; J&#8217;ai bien compris que c&#8217;était pour des questions de coût, et qu&#8217;il sous entendait migrer ensuite sur DotNet / SqlServer, parce que c&#8217;est plus sérieux quand même &#8230; De plus monter un tel site n&#8217;était pour lui qu&#8217;un assemblage de briques OpenSource existante, sans grande difficulté&#8230;</p>
<p>Quand on atteint un tel niveau de nullité, il y a quoi à espérer ? Inutile de dire que le site ne verra sans doute jamais le jour, et surtout pas le succès escompté.</p>
<p>Je réalise que j&#8217;ai pris le problème à l&#8217;envers, il est nécessaire de pousser la création d&#8217;un écosystème local d&#8217;entreprises innovantes avant de pousser les technologies associées. Un équivalent Lyonnais de <a href="http://paris.startupweekend.org/" target="_blank">http://paris.startupweekend.org</a> serait le bienvenu !</p>
<br />Classé dans:<a href='http://frederic.logier.org/category/mondelibre/'>MondeLibre</a>, <a href='http://frederic.logier.org/category/web/'>web</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/fredix.wordpress.com/325/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/fredix.wordpress.com/325/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/fredix.wordpress.com/325/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/fredix.wordpress.com/325/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/fredix.wordpress.com/325/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/fredix.wordpress.com/325/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/fredix.wordpress.com/325/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/fredix.wordpress.com/325/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/fredix.wordpress.com/325/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/fredix.wordpress.com/325/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/fredix.wordpress.com/325/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/fredix.wordpress.com/325/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/fredix.wordpress.com/325/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/fredix.wordpress.com/325/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=frederic.logier.org&amp;blog=3098224&amp;post=325&amp;subd=fredix&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://frederic.logier.org/2010/10/21/de-linnovation-physiquement-decentralisee/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0fc8e5d51ed3c0726b2826e8caeb8017?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fredix</media:title>
		</media:content>
	</item>
		<item>
		<title>Nodecast : architecture d&#8217;une application web</title>
		<link>http://frederic.logier.org/2010/07/21/nodecast-architecture-dune-application-web/</link>
		<comments>http://frederic.logier.org/2010/07/21/nodecast-architecture-dune-application-web/#comments</comments>
		<pubDate>Wed, 21 Jul 2010 15:20:07 +0000</pubDate>
		<dc:creator>fredix</dc:creator>
				<category><![CDATA[rails]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[gearman]]></category>
		<category><![CDATA[mongodb]]></category>
		<category><![CDATA[nodecast]]></category>
		<category><![CDATA[sinatra]]></category>

		<guid isPermaLink="false">http://frederic.logier.org/?p=300</guid>
		<description><![CDATA[Certains le savent peut-être, je travaille depuis quelques mois sur mon projet personnel Nodecast. Pour résumer, ce projet a l&#8217;ambition de proposer un outil de monitoring simple à mettre en œuvre mais aussi un outil de recensement façon Linux counter. Il n&#8217;a cependant pas pour objectif de concurrencer un logiciel de type Nagios. Outre le [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=frederic.logier.org&amp;blog=3098224&amp;post=300&amp;subd=fredix&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Certains le savent peut-être, je travaille depuis quelques mois sur mon projet personnel <a href="http://www.nodecast.net" target="_blank">Nodecast</a>. Pour résumer, ce projet a l&#8217;ambition de proposer un outil de monitoring simple à mettre en œuvre mais aussi un outil de recensement façon <a href="http://counter.li.org/" target="_blank">Linux counter</a>. Il n&#8217;a cependant pas pour objectif de concurrencer un logiciel de type Nagios. Outre le challenge du développement de la partie web, il y a également celui du client desktop en Qt, mais qui fera peut-être l&#8217;objet d&#8217;un futur billet.</p>
<p><span id="more-300"></span></p>
<p>Lors d&#8217;une précédente expérience professionnelle en 2007 (<a href="http://www.af83.com/" target="_blank">AF83</a>) j&#8217;avais mis en oeuvre des techniques de <a href="http://dev.af83.com/ruby/de-la-repartition-de-charge-en-ruby-on-rails-12/2008/01/22" target="_blank">répartition de charge </a>via des <a href="http://dev.af83.com/ruby/de-la-repartition-de-charge-en-ruby-on-rails-22/2008/01/22" target="_blank">traitements asynchrones </a>pour le développement d&#8217;un microblog/chat web. Je cherchais depuis à réutiliser ces technologies, ce qui m&#8217;a poussé au développement de Nodecast.</p>
<p>Or si à l&#8217;époque le domaine des serveurs de message queues était encore balbutiant, il a nettement évolué depuis. En effet à l&#8217;époque après en avoir testé quelques uns, j&#8217;avais fini par me résoudre à utiliser le protocole XMPP via un serveur Jabber. Il faut bien avouer que la mise en œuvre a été plutôt ardu. XMPP est un bon protocole mais il est au final peu adapté pour un simple système de file d&#8217;attente, trop verbeux et la librairie Ruby XMPP4R faiblarde, à l&#8217;époque en tout cas.</p>
<p>Depuis les serveurs de file d&#8217;attente ont poussé comme des champignons, et certains sont même dérivés de serveur type clé/valeur.  J&#8217;ai pour ma part choisi <a href="http://gearman.org" target="_blank">Gearman</a> qui me parait une bonne technologie depuis sa réécriture en C, et c&#8217;est un bon compromis fonctionnalités / simplicité / performances. Avant d&#8217;aller plus loin je préfère présenter le schéma de l&#8217;architecture du site, ce qui rendra plus aisé les explications.</p>
<h2>Architecture</h2>
<p><a href="http://fredix.files.wordpress.com/2010/07/architecture.png"><img class="alignnone size-full wp-image-302" title="architecture" src="http://fredix.files.wordpress.com/2010/07/architecture.png?w=620" alt=""   /></a></p>
<p>La partie droite en orange représente le site web. Nginx transmet les requêtes HTTP vers un pool de services <a href="http://code.macournoyer.com/thin/" target="_blank">Thin</a> qui est un serveur web applicatif, il est en charge d&#8217;exécuter l&#8217;application en Ruby on Rails. Pour des raisons de performances et efficacité, j&#8217;ai choisi d&#8217;utiliser une base de données NoSQL, <a href="http://www.mongodb.org/" target="_blank">mongoDB</a>.</p>
<p>La partie intéressante est celle à gauche représentée par le nuage gris. En effet il représente les services en charge de l&#8217;API.</p>
<h2>API asynchrone</h2>
<p>L&#8217;API est ici une API REST. Le client en Qt effectue donc simplement des requêtes HTTP afin de communiquer avec le service web. Il fait des POST pour l&#8217;ajout de données, des PUT pour la modification et des GET pour la consultation.</p>
<p>Plus le client envoi des données sur un court délai, plus les statistiques seront détaillées. Le problème est que cela génère une multitude de connexions et donc de traitement. Et plus il y en a, plus la réponse au client sera longue, ce qui va dégrader la qualité de service. Bien entendu la solution est de rendre asynchrone les traitements afin que la réponse au client soit la plus rapide possible.</p>
<p>Cela est représenté par l&#8217;échange 1 et 2 entre le serveur Nginx et le serveur thin.</p>
<h3>Client &lt;-&gt; serveur</h3>
<p>Lors d&#8217;un POST, le client va demander la création d&#8217;une donnée au service. Ici il s&#8217;agit de la création d&#8217;une nouvelle machine (host) à monitorer. Le workflow est le suivant :</p>
<ol>
<li>client Qt POST les datas</li>
<li>serveur sinatra authentifie le client</li>
<li>serveur sinatra génère un identifiant unique (UUID)</li>
<li>serveur sinatra sérialize les datas, et transmet la charge à Gearman dans la file d&#8217;attente du dispatcher</li>
<li>serveur sinatra renvoi au client un XML contenant l&#8217;identifiant unique</li>
<li>le client stocke cet identifiant et l&#8217;utilisera pour tous les prochains échanges</li>
</ol>
<p>Le principe ici est que le serveur sinatra ne fasse que le strict minimum, afin de répondre le plus rapidement et d&#8217;être disponible pour une prochaine requête. Ainsi même sous une charge importante, les requêtes transmises par les clients Qt, seront empilé et mise en attente au chaud dans le serveur de file Gearman.</p>
<p>Pour une requête PUT le workflow est plus simple puisque l&#8217;étape 3 est supprimée. Le serveur sinatra renvoi dans tous les cas un XML contenant le status &#8220;proceed&#8221; afin de signaler au client que sa requête a été prise en compte.</p>
<p>L&#8217;intérêt de Sinatra est qu&#8217;il est très simple à mettre en oeuvre ce qui en fait à mon avis un candidat idéal pour servir une API. Le code du serveur tiens d&#8217;ailleurs dans un seul fichier :</p>
<pre>#!/usr/bin/env ruby
require 'rubygems'

require 'gearman'

require "bundler"
Bundler.setup
Bundler.require(:default)

RAILS_ENV="production"

#Gearman::Util.debug = true
SERVERS = ['localhost:4730']

@@logger = Logger.new('log/server.log', 'daily')
@@logger.debug("Created logger")

File.open(File.join('../config/database.mongo.yml'), 'r') do |f|
 @settings = YAML.load(f)[RAILS_ENV]
end

Mongoid.configure do |config|
 name = @settings["database"]
 host = @settings["host"]
 config.use_object_ids = @settings["use_object_ids"]
 @@logger.info "database : #{name}"
 @@logger.info "host : #{host}"
 config.master = Mongo::Connection.new.db(name)
 # config.slaves = [
 #                Mongo::Connection.new(host, @settings["slave_one"]["port"], :slave_ok =&gt; true).db(name)
 #               ]
end

require 'models_mongoid/user.rb'
require 'models_mongoid/profil.rb'
require 'models_mongoid/host.rb' 

set :logging, true

helpers do
 def protected!
 unless authorized?
 response['WWW-Authenticate'] = %(Basic realm="Nodecast HTTP Auth")
 throw(:halt, [401, "Not authorized\n"])
 end
 end

 def authorized?
 @auth ||=  Rack::Auth::Basic::Request.new(request.env)
 @current_user = User.where(:email =&gt; @auth.credentials.first, :authentication_token =&gt; @auth.credentials.last).first
 @auth.provided? &amp;&amp; @auth.basic? &amp;&amp; @current_user
 end
end

post '/hosts.xml' do
 protected!
 xml = Crack::XML.parse(request.body.read)
 @@logger.info("#{Time.now} : RECEIVE CREATE")

 uuid = UUIDTools::UUID.timestamp_create.to_s

 host = {
 :user =&gt; @current_user.email,
 :uuid =&gt; uuid,
 :timestamp =&gt; Time.now.utc,
 :datas =&gt; xml
 }

 payload('dispatcher_add', host)

 builder do |xml|
 xml.instruct!
 xml.host do
 xml.uuid host[:uuid]
 end
 end
end

put '/host/update/:id' do
 protected!
 xml = Crack::XML.parse(request.body.read)
 @@logger.info("#{Time.now} : RECEIVE UPDATE")

 host = {
 :user =&gt; @current_user.email,
 :uuid =&gt; params[:id],
 :timestamp =&gt; Time.now.utc,
 :datas =&gt; xml
 }

 payload('dispatcher_update', host)

 builder do |xml|
 xml.instruct!
 xml.host do
 xml.status "proceed"
 end
 end
end

private

def payload(worker, data)

 client = Gearman::Client.new(SERVERS)
 taskset = Gearman::TaskSet.new(client)

 #task = Gearman::Task.new('update', Marshal.dump(host), :background =&gt; true, :poll_status_interval =&gt; 1)
 task = Gearman::Task.new(worker, Marshal.dump(data))
 task.on_complete {|d| @@logger.info "complete : #{d}" }  

 task.on_warning {|w| @@logger.info "[client] warn: #{w}" }
 task.on_fail {|f| @@logger.info "[client] calculation failed : #{f}" }
 taskset.add_task(task)  
end</pre>
<p>On voit bien ici que &#8220;post &#8216;/hosts.xml&#8217; do&#8221; et &#8216;put &#8216;/host/update/:id&#8217; do&#8221; permettent de répondre très simplement aux requêtes POST et PUT des clients. Pour le reste on voit bien que le serveur ne fait que préparer un Hash avec l&#8217;XML transmis par le client, un timestamp, l&#8217;uuid du host et l&#8217;id de l&#8217;utilisateur. Ce Hast est ensuite sérialisé puis la charge est envoyée dans la file d&#8217;attente du dispatcher.</p>
<h3>Dispatcher &lt;-&gt; workers</h3>
<p>Comme on le voit dans le code les traitements sont envoyés dans la file d&#8217;attente sur 2 canaux : &#8220;dispatcher_update&#8221; et &#8220;dispatcher_add&#8221;. Il y a donc un processus Ruby qui attend des traitements sur ces canaux afin de les préparer puis les transmettre à chaque worker. J&#8217;avais tout d&#8217;abord un seul worker, mais il est beaucoup plus intéressant de le découper en plusieurs workers spécifiques à une tâche. En effet des utilisateurs peuvent décider de ne pas envoyer les informations relatives au CPU ou bien au réseau. De fait les worker auront la charge qui correspond au contenu des requêtes transmises.</p>
<p>Le dispatcher ne dépend pas des traitements à effectuer, son rôle est de découper le traitement en de multiples sous-traitement qu&#8217;il transmet dans le canal de chaque worker. Si les traitements sont lourds il peut malgré tout continuer à les répartir dans chacun des canaux, quelque soit la charge en cours.</p>
<p>Les traitements se font réellement dans chaque worker. Ils désérialisent les données reçues de leur file d&#8217;attente, puis les stocke dans mongodb. Voici un des workers dédié au traitement des load :</p>
<pre>#!/usr/bin/env ruby
require 'rubygems'

gem 'mongoid', '1.9.0'

require 'mongoid'
gem 'gearman-ruby', '3.0.1'
require 'gearman'
require 'uuidtools'

require 'logger'
require 'yaml'
require 'optparse'
require "pp"

options = {}

optparse = OptionParser.new do |opts|
 opts.on('-w', '--work WORK', 'path to the work directory') do |work|                                        
 options[:work] = work
 end
 opts.on('-m', '--mongo MONGO', 'path to the mongo file') do |mongo|                                        
 options[:mongo] = mongo
 end
 opts.on('-e', '--env ENV', 'rails environment') do |env|                                        
 options[:env] = env
 end
end

begin
 optparse.parse!
 mandatory = [:work, :mongo, :env]
 missing = mandatory.select{ |param| options[param].nil? }
 if not missing.empty?
 puts "Missing options: #{missing.join(', ')}"
 puts optparse
 exit
 end
rescue OptionParser::InvalidOption, OptionParser::MissingArgument
 puts $!.to_s
 puts optparse
 exit
end

puts "Performing task with options: #{options.inspect}"            

#Gearman::Util.debug = true if options[:env] == "development"

servers = ['localhost:4730']
@@worker = Gearman::Worker.new(servers)

logger = Logger.new("#{options[:work]}/log/worker_stats_load.log", 'daily')
logger.debug("Created logger")

File.open(File.join("#{options[:mongo]}/database.mongo.yml"), 'r') do |f|
 @settings = YAML.load(f)[options[:env]]
end

Mongoid.configure do |config|
 name = @settings["database"]
 host = @settings["host"]
 config.use_object_ids = @settings["use_object_ids"]
 logger.info "database : #{name}"
 logger.info "host : #{host}"
 config.master = Mongo::Connection.new.db(name)
 # config.slaves = [
 #                Mongo::Connection.new(host, @settings["slave_one"]["port"], :slave_ok =&gt; true).db(name)
 #               ]
end

require "#{options[:work]}/models_mongoid/user.rb"
require "#{options[:work]}/models_mongoid/profil.rb"
require "#{options[:work]}/models_mongoid/host.rb"
require "#{options[:work]}/models_mongoid/osystem.rb" 

require "#{options[:work]}/models_mongoid/host_ram.rb"
require "#{options[:work]}/models_mongoid/host_cpu.rb"
require "#{options[:work]}/models_mongoid/host_network.rb"
require "#{options[:work]}/models_mongoid/host_last_comment.rb"
require "#{options[:work]}/models_mongoid/host_stats_uptime.rb"
require "#{options[:work]}/models_mongoid/host_stats_load.rb"
require "#{options[:work]}/models_mongoid/host_stats_network.rb"
require "#{options[:work]}/models_mongoid/host_stats_cpu.rb"
require "#{options[:work]}/models_mongoid/host_stats_memory.rb" 

require "#{options[:work]}/models_mongoid/load_statistic.rb" 

########## JOB UPDATE STAT ############
@@worker.add_ability('update_load') do |data,job|

 dump = Marshal.load(data)

 xml = dump[:push]
 host = Host.where(:uuid =&gt; dump[:uuid]).first

 host_load = {
 :created_at =&gt; dump[:timestamp],
 :updated_at =&gt; dump[:timestamp],
 :loadavg0 =&gt; xml[:loadavg0],
 :loadavg1 =&gt; xml[:loadavg1],
 :loadavg2 =&gt; xml[:loadavg2]
 }    

 begin

 ls = host.load_statistics.create(host_load)
 logger.info "LOAD stats created"

 loadavg0 = 0.0
 loadavg1 = 0.0
 loadavg2 = 0.0

 host.load_statistics.each do |stat|
 loadavg0 += stat.loadavg0
 loadavg1 += stat.loadavg1
 loadavg2 += stat.loadavg2
 end

 if !host.stats_load
 host.create_stats_load(
 :created_at =&gt; dump[:timestamp],
 :updated_at =&gt; dump[:timestamp],
 :number =&gt; 1,
 :loadavg0 =&gt; ls.loadavg0,
 :loadavg1 =&gt; ls.loadavg1,
 :loadavg2 =&gt; ls.loadavg2,
 :max0 =&gt; ls.loadavg0,
 :max1 =&gt; ls.loadavg1,
 :max2 =&gt; ls.loadavg2
 )
 else      
 host.stats_load.updated_at = dump[:timestamp]
 host.stats_load.number += 1

 host.stats_load.max0 = ls.loadavg0 if ls.loadavg0 &gt; host.stats_load.max0
 host.stats_load.max1 = ls.loadavg1 if ls.loadavg1 &gt; host.stats_load.max1
 host.stats_load.max2 = ls.loadavg2 if ls.loadavg2 &gt; host.stats_load.max2

 host.stats_load.average0 = loadavg0 / host.stats_load.number
 host.stats_load.average1 = loadavg1 / host.stats_load.number
 host.stats_load.average2 = loadavg2 / host.stats_load.number

 host.stats_load.loadavg0 = ls.loadavg0
 host.stats_load.loadavg1 = ls.loadavg1
 host.stats_load.loadavg2 = ls.loadavg2

 host.save
 end

 logger.info "Embedded host load stats updated"

 rescue =&gt; e
 logger.info "failed on update : #{e}"
 raise Exception.new("failed on update : #{e}")
 end

end

loop do
 @@worker.work
end</pre>
<h2>Avantages</h2>
<p>En cas de soucis sur les workers, ceux-ci pourront être stoppé sans problème même en production. Grâce au découplage mis en place, les traitements sont tous simplement en attente dans leur file d&#8217;attente. Il y a intérêt à avoir un serveur d&#8217;API très basique (ici le code dans Sinatra) afin d&#8217;éviter au maximum les éventuels plantages ou corruption des données, et de plus cela le rend, comme je l&#8217;ai déjà dis, plus rapide.</p>
<h2>Evolution</h2>
<p>Cette architecture est encore basique car ne tourne que sur une seule machine. Cependant les technologies employées permettront de la répartir sur plusieurs machines très simplement. Tout d&#8217;abord au niveau de mongoDB via des slaves. Puis en démarrant plusieurs démons Gearman. Les workers pourront ainsi dépiler leurs jobs sur l&#8217;un des serveurs Gearman du cluster.</p>
<p>Ensuite il pourra être intéressant que chaque worker log dans mongoDB ses tâches et ses temps de traitement afin de détecter les éventuels bottleneck. Gearman possède également une multitude d&#8217;options comme pouvoir rendre prioritaire un job.</p>
<p>Enfin il est bien entendu approprié que le front web puisse utiliser l&#8217;API afin d&#8217;effectuer des traitements lourds demandés par l&#8217;utilisateur.</p>
<br />Classé dans:<a href='http://frederic.logier.org/category/rails/'>rails</a>, <a href='http://frederic.logier.org/category/web/'>web</a> Tagged: <a href='http://frederic.logier.org/tag/gearman/'>gearman</a>, <a href='http://frederic.logier.org/tag/mongodb/'>mongodb</a>, <a href='http://frederic.logier.org/tag/nodecast/'>nodecast</a>, <a href='http://frederic.logier.org/tag/sinatra/'>sinatra</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/fredix.wordpress.com/300/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/fredix.wordpress.com/300/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/fredix.wordpress.com/300/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/fredix.wordpress.com/300/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/fredix.wordpress.com/300/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/fredix.wordpress.com/300/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/fredix.wordpress.com/300/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/fredix.wordpress.com/300/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/fredix.wordpress.com/300/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/fredix.wordpress.com/300/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/fredix.wordpress.com/300/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/fredix.wordpress.com/300/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/fredix.wordpress.com/300/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/fredix.wordpress.com/300/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=frederic.logier.org&amp;blog=3098224&amp;post=300&amp;subd=fredix&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://frederic.logier.org/2010/07/21/nodecast-architecture-dune-application-web/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0fc8e5d51ed3c0726b2826e8caeb8017?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fredix</media:title>
		</media:content>

		<media:content url="http://fredix.files.wordpress.com/2010/07/architecture.png" medium="image">
			<media:title type="html">architecture</media:title>
		</media:content>
	</item>
		<item>
		<title>Desktop 2.0</title>
		<link>http://frederic.logier.org/2010/06/25/desktop-2-0/</link>
		<comments>http://frederic.logier.org/2010/06/25/desktop-2-0/#comments</comments>
		<pubDate>Fri, 25 Jun 2010 19:55:35 +0000</pubDate>
		<dc:creator>fredix</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[MondeLibre]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://frederic.logier.org/?p=243</guid>
		<description><![CDATA[Suite à cet article sur ownCloud je souhaite à nouveau écrire sur ce sujet qui me tient à coeur, l&#8217;avenir du Desktop. Par ce titre ironiquo-buzzien je souhaite présenter ce que cela me représente. Qu&#8217;est-ce que le desktop 2.0 ? Historiquement le desktop est composé de logiciels installés sur une machine et qui au mieux [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=frederic.logier.org&amp;blog=3098224&amp;post=243&amp;subd=fredix&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Suite à cet article sur <a href="http://linuxfr.org/2010/06/24/27055.html" target="_blank">ownCloud</a> je souhaite à nouveau écrire sur ce sujet qui me tient à coeur, l&#8217;avenir du Desktop. Par ce titre ironiquo-buzzien je souhaite présenter ce que cela me représente.</p>
<p><span id="more-243"></span></p>
<h2>Qu&#8217;est-ce que le desktop 2.0 ?</h2>
<p>Historiquement le desktop est composé de logiciels installés sur une machine et qui au mieux dans certains cas communiquent entre eux. On télécharge le logiciel, on l&#8217;installe, on le paramètre si nécessaire et on l&#8217;utilise. Cette description n&#8217;a pas changé depuis environ 25 ans. Pour une mise en perspective, le web qui est venu bien après, qui est complexe à faire évoluer techniquement et administrativement, a régulièrement évolué et fait un bond en avant avec HTML5 : <a href="http://slides.html5rocks.com/#slide3">http://slides.html5rocks.com/#slide3</a></p>
<p>Le desktop 2.0 pourrait être un desktop qui utilise Internet afin de proposer des fonctionnalités supplémentaires. A priori ca existe déjà, par exemple iTunes qui permet de consulter le store d&#8217;Apple et d&#8217;y faire des achats depuis une interface native. Sauf que iTunes n&#8217;est qu&#8217;un logiciel qui intègre le moteur d&#8217;un navigateur web afin de présenter de manière un peu mieux intégré au desktop le store et surtout de gérer les DRM sur les fichiers achetés&#8230;</p>
<p>L&#8217;intérêt d&#8217;Internet est essentiellement de pouvoir partager et communiquer, consommer n&#8217;étant qu&#8217;une forme particulière de partage sous contrainte.</p>
<p>Mais pour moi il ne représente en aucun cas un but final. Dans les années 2000 on disait &#8220;il FAUT être sur Internet&#8221;. C&#8217;est une perception complètement erronée de l&#8217;outil ce qui a à mon avis complètement pervertie notre conscience. En effet, à l&#8217;époque le contexte était qu&#8217;il fallait y être en ayant un site web. Maintenant en 2010 il FAUT y être en ayant des suites bureautiques en web, des systèmes d&#8217;exploitation en web, et toute une suite de logiciels, en web &#8230;</p>
<p><a href="http://www.joost.com/" target="_blank">Joost</a> le fameux logiciel de vidéo en P2P par les créateurs de Kazaa est mort soit disant car il fallait installer un logiciel&#8230; Bullshit !!! La version full web est tout aussi morte. Joost est mort car il n&#8217;y avait pas de contenu. Et il y en avait pas car le seul contenu autorisé venait que des partenaires &#8230; Ca s&#8217;appelle la télévision ça, ce n&#8217;est pas Internet.</p>
<p>De fait la vision que nous avons d&#8217;Internet n&#8217;a pas changé depuis ses premiers pas ! Une vision très restrictive de l&#8217;outil.</p>
<p>Si le desktop 2.0 ne ressemble pas aux iTunes like, si ce n&#8217;est pas des applications web, qu&#8217;est-ce qu&#8217;il est ?</p>
<h2>Le desktop 2.0 existe déjà</h2>
<p>Plutôt que de décrire la chose avec des métaphores et des descriptions techniques autant prendre l&#8217;exemple parlant du seul gars qui a compris ce que c&#8217;était, qui l&#8217;a même pratiquement inventé et industrialisé à grande échelle : Steve Jobs.</p>
<p>Quoi encore lui ! bin oui &#8230; l&#8217;iPhone c&#8217;est quoi ? C&#8217;est un <strong>ordinateur</strong> (de poche) capable d&#8217;aller sur <strong>Internet</strong> (comme un ordinateur avec un abonnement Internet), et un <strong>kit de développement,</strong> le tout suffisamment bien conçu pour rendre n&#8217;importe quelle application web2 ridicule.</p>
<p>Attention tous les mots de cette phrase ont leur importance, notez d&#8217;ailleurs l&#8217;absence du mot téléphonie, car ne m&#8217;intéresse pas dans le contexte de ce billet. Et d&#8217;ailleurs le <strong>succès</strong> de l&#8217;iPad en rajoute une couche puisqu&#8217;il ne fait pas téléphone &#8230;</p>
<p>l&#8217;iPhone et maintenant l&#8217;iPad implémententent le desktop 2.0, car :</p>
<ul>
<li>Les applications sont <strong>natives</strong>. Ce qui rend &#8220;l&#8217;expérience utilisateur&#8221; (comme on dit), beaucoup plus fun, car cela apporte :
<ul>
<li>La réactivité</li>
<li>L&#8217;intégration au bureau</li>
<li>L&#8217;accès aux extensions matériel actuelles et à venir (3D, GPS, gyroscope, accéléromètre, &#8230;)</li>
</ul>
</li>
</ul>
<p>Et qui dit fun, dit j&#8217;utilise plus facilement qu&#8217;une application web qui ne peut pas avoir ces avantages. Qui dit j&#8217;utilise dit je suis potentiellement prêt à payer.</p>
<ul>
<li>Les applications utilisent <strong>Internet</strong>. Et je parle bien des applications pas uniquement du navigateur web !</li>
<li>Les applications sont faciles à trouver, à installer et à mettre à jour grâce à <strong>l&#8217;AppStore</strong>.</li>
</ul>
<h2>NATIF, INTERNET, STORE</h2>
<p>Ces 3 termes définissent bien la chose. On peut faire un paquet de reproches justifiés à Jobs, par contre on ne peut pas lui enlever la vision qu&#8217;il a eu. Car il ne suffit pas de dire je vais faire un téléphone qui peut aller sur Internet, ca existait déjà avant l&#8217;iPhone. Il faut imaginer ces 3 concepts, faire fabriquer le matériel qui tient la route, développer les logiciels et les services, et intégrer le tout de manière cohérente.</p>
<p>Google a d&#8217;ailleurs bien compris la leçon, et le confirme avec le succès d&#8217;Android.</p>
<h2>Et le PC ?</h2>
<h3>NATIF ?</h3>
<p>De manière historique les applications sont natives, mais pour diverses fausses bonnes raisons (déploiement et mise à jour) beaucoup d&#8217;applications &#8220;professionnelles&#8221; sont uniquement en web (IE6).</p>
<h3>INTERNET ?</h3>
<p>Depuis le début d&#8217;Internet les PC y accèdent. Sauf qu&#8217;ici dans la description du desktop 2.0 je parle des applications. Or il faut bien avouer qu&#8217;à part le navigateur web il n&#8217;y a pas beaucoup d&#8217;applications qui exploitent Internet, même en 2010 !!!</p>
<h3>STORE ?</h3>
<p>Gros point d&#8217;avance pour Linux qui possédait un &#8220;store&#8221; depuis la naissance de Debian au moins, dans les années 90 (et voui). Nous parlons de dépôts. De nos jours toutes les distributions en possèdent un et il permet de plus de mettre à jour tout le système et pas uniquement les applications utilisateurs !</p>
<p>Hormis Linux point de salut du côté de Windows et MacOS, même si des rumeurs d&#8217;appstore pour MacOS X ont circulé.</p>
<h2>Arguments</h2>
<h3>NATIF !</h3>
<p>Parmi les arguments en faveur d&#8217;une application native qui aboutissent à une &#8220;expérience utilisateur&#8221; agréable, il y en a une autre loin d&#8217;être négligeable pour le développeur, la facilité de développement. Il faut certes maitriser la technologie nécessaire à développer une application native, mais d&#8217;une part le choix est vaste sur un PC, et d&#8217;autres part une application web &#8220;équivalente&#8221; va nécessiter la maitrise d&#8217;un paquet de technologies côté client (Javascript, HTML, XML, CSS) pour un résultat bien inférieur et la maîtrise de plusieurs boites à outils nécessaires à débuger tout ça.</p>
<p>Pourquoi est-ce si pénible ? Tout simplement parce que le web n&#8217;a jamais été prévu pour développer des applications mais simplement pour afficher des pages &#8230; Bien sûr l&#8217;HTML5 vise à remédier à ces lacunes, mais cela restera malgré tout en deçà de n&#8217;importe qu&#8217;elle application native correctement développé et intégré. Et ne parlons même pas de l&#8217;exploitation de périphériques matériel ou même de la 3D, webgl commence à peine à être intégré à certains navigateurs web, en 2010 &#8230;</p>
<p>Enfin une botte secrète du web est la compatibilité de l&#8217;application quel que soit l&#8217;OS. Je balaie cela d&#8217;un revers de la main, car du coup on a renvoyé vers le développeur la complexité de la chose ainsi que vers le navigateur, on se rappelle tous des années de lutte à faire respecter les standards afin d&#8217;afficher et pouvoir utiliser correctement une application web&#8230; De plus une bibliothèque comme Qt est multi-plateforme, il n&#8217;y a qu&#8217;à voir Skype ou Opera. Et bien entendu Java (Eclipse, &#8230;)</p>
<p>Pour en revenir au faux exemple de Joost, devoir installer une application n&#8217;est pas une contrainte. Les succès de <a href="http://www.skype.com" target="_blank">Skype</a>, <a href="https://www.dropbox.com" target="_blank">Dropbox</a>, <a href="http://www.spotify.com" target="_blank">Spotify</a>, <a href="http://www.apple.com/fr/itunes/download/" target="_blank">iTunes</a>, &#8230; le prouvent. Le frein est simplement la nullité d&#8217;une mauvaise application.</p>
<h3>INTERNET !</h3>
<p>Un des avantages d&#8217;une application web et ce qui a entre autre expliqué leur explosion est le fait de pouvoir tout stocker côté serveur. L&#8217;utilisateur a ainsi qu&#8217;à se rappeler de son login et mot de passe pour retrouver toutes ses données. Or rien empêche une application native de faire de même ! Elle peut même faire en sorte de stocker en local si une coupure au réseau survient.  C&#8217;est précisément ce que vient combler l&#8217;HTML5 pour les applications web &#8230;..</p>
<p>Les développeurs d&#8217;applications natives pour iPhone ont eux bien compris l&#8217;intérêt et ne s&#8217;en prive pas. Internet devient de fait ce pour quoi il est bon : <strong>stocker, présenter et partager des données</strong>. L&#8217;application native se contente elle de faire ce pour quoi elle est bonne : faire l&#8217;acquisition des données via l&#8217;utilisateur et/ou des extensions matériels (GPS, accéléromètre, gyroscope, &#8230;) et rendre cela agréable en exploitant au maximum les capacités du matériel.</p>
<p>Alors peut être qu&#8217;il y aura un jour une version d&#8217;HTML qui va permettre d&#8217;accéder au GPS &#8230; laule&#8230;</p>
<p>Un exemple concret de l&#8217;intérêt d&#8217;Internet ? Prenons un logiciel natif comme un client mail qui propose des fonctionnalités complémentaires comme la lecture de flux RSS. La personnalisation de ces flux comme l&#8217;ajout et leur catégorisation nécessite un certain temps. Or si vous avez un laptop comme ordinateur secondaire, ou bien celui du boulot, vous devrez refaire ce travail redondant de paramétrage, et je ne parle même pas qu&#8217;un article lu depuis son travail sera marqué non lu chez soi&#8230; Si ce logiciel pouvait sauvegarder sa configuration et ses données sur Internet, il suffirait d&#8217;une simple synchronisation pour se faciliter là vie.</p>
<p>A remarquer que la Mozilla Fondation a très bien compris cela puisque qu&#8217;elle propose l&#8217;extension Firefox sync, ainsi que Google chrome qui gère ça nativement. A leur avantage ces 2 entités ont de très forte compétences en développement client et serveur, ce que n&#8217;a pas forcément le développeur d&#8217;une application desktop lambda. Remarque importante pour la suite de cet article.</p>
<p><strong>STORE !</strong></p>
<p>L&#8217;autre avantage d&#8217;une application web était sur les déploiements et les mises à jour. Cependant grâce aux stores cet argument s&#8217;efface, et pour les OS préhistorique qui ne gère pas encore cette fonctionnalité, il parait trivial d&#8217;ajouter cela au sein même de l&#8217;application &#8230;</p>
<p>De plus un store permet de faciliter la vente de son application, ce qui est loin d&#8217;être négligeable. Côté Linux seul Canonical semble le comprendre et faire un pas dans ce sens. Il semble que le &#8220;petit&#8221; milliard de dollars reversé par Apple aux développeurs iPhone, ait fini par convaincre, il était temps !</p>
<h2>QUEL AVENIR</h2>
<h3>du Desktop</h3>
<p>D&#8217;un côté il va y avoir le fameux Chrome OS qui est là pour renforcer la présence des applications Google. Le truc drôle c&#8217;est qu&#8217;eux ont bien compris les limitations du web, aussi compétent soient-ils, et aussi bien HTML5 soit-il. Donc afin de rendre les applications web plus agréable et pour pouvoir développer tout type d&#8217;application, ce qui est important lorsqu&#8217;on a la prétention de faire un OS grand public, ils proposent le plugin <a href="http://code.google.com/p/nativeclient/" target="_blank">Chrome nativeclient</a> qui va permettre de développer des applications &#8230; natives &#8230; à l&#8217;intérieur de Chrome ! On marche sur la tête ?!</p>
<p>Ou quand le web réinvente le natif afin de combler ses propres lacune tout adaptant à son monde ce qui fait le succès d&#8217;Apple&#8230; Et bien entendu Google étant loin d&#8217;être bête va proposer son &#8220;store&#8221; market pour son OS.</p>
<p>De l&#8217;autre, il est heureux de constater certains réveil, encore une fois via Canonical avec son <a href="https://one.ubuntu.com/" target="_blank">Ubuntu One</a>. Ce service permet de stocker et synchroniser ses données sur Internet via les programmes qui supporte <a href="http://www.freedesktop.org/wiki/Specifications/desktopcouch" target="_blank">desktopcouch</a>. Et ceci est la réponse aux programmeurs qui n&#8217;ont pas les compétences ou l&#8217;envie de développer eux mêmes ces fonctionnalités. Il était temps qu&#8217;un éditeur d&#8217;OS propose ce type d&#8217;API à ses développeurs !</p>
<p>Pour pousser le concept un peu plus loin, je rêverais d&#8217;un OS qui me permette, suite à son installation, de télécharger automatiquement tous les logiciels que j&#8217;utilise sur mon PC principal ainsi que toutes les préférences associées à ces logiciels.</p>
<p>Ces informations personnelles mais pas vraiment critique, pourrait même être partagée via un réseau social si l&#8217;utilisateur le souhaite.</p>
<h3>du Réseau Social</h3>
<p>Ce secteur à la mode a ceci de particulier qu&#8217;il est le révélateur flagrant de cette dualité web / desktop. Par exemple, au départ ces applications web de type Facebook étaient complètement fermées et uniquement accessible depuis un navigateur web. Avec la mode web2, ils se sont ouvert via des API ce qui a permis de faire émerger une multitudes d&#8217;applications natives pour mobile, puis pour PC.</p>
<p>Quand le web redécouvre l&#8217;intérêt du bon vieux client natif&#8230; Cependant on en est toujours sur du vertical, une application dédié à un service.</p>
<p>C&#8217;est ici que débarque le très intéressant <a href="http://socialdesktop.org" target="_blank">social desktop</a> et son <a href="http://socialdesktop.org/ocs/" target="_blank">OCS API</a>, une API qui doit permettre l&#8217;accès des applications natives à des réseaux sociaux. En effet il est complètement aberrant qu&#8217;il faille utiliser une application en particulier pour faire du social ! Cette pratique est complètement transverse est de fait n&#8217;importe quelle application est capable de présenter un intérêt social ! Que cela soit d&#8217;intégrer le service Gitorious dans un IDE, comme QtCreator qui le fait, ou bien intégrer l&#8217;API d&#8217;un site de recettes de cuisine à des logiciels de gestion des courses&#8230;.</p>
<p>Le social est transverse, il est ridicule de devoir utiliser un client dédié ou bien même un serveur en particulier&#8230; Côté serveur le très intéressant microblog décentralisé <a href="http://status.net/" target="_blank">statusnet</a> montre le voie, ainsi que la plateforme sociale décentralisée <a href="http://www.movim.eu/" target="_blank">movim</a>.</p>
<p>A moins que l&#8217;on souhaite que le futur du desktop ne tourne que dans l&#8217;onglet d&#8217;un navigateur web, ce qui est déjà le cas avec Chrome OS, Jolicloud, etc, il reste aux éditeurs d&#8217;OS et de bureaux de proposer des services web décentralisés et des API, afin que n&#8217;importe application desktop puisse enfin sortir des années 1990&#8230;</p>
<p>Pour finir je tiens à poser une question qui peut résumer ce débat.</p>
<p>Les acteurs et organisations du web travaillent à faire évoluer leurs technologies afin de proposer des fonctionnalités les plus proches d&#8217;une application native. Les éditeurs de logiciels natifs et développeurs d&#8217;environnement de bureau travaillent à proposer des fonctionnalités permettant le développement d&#8217;applications qui exploitent les capacités offertes par Internet (web services, cloud, &#8230;).</p>
<p>Entre ces 2 visions quelle est celle qui a le plus court chemin à faire et laquelle est la plus à même de répondre aux <del datetime="2010-06-26T15:10:29+00:00">besoins</del> envies des utilisateurs ? <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<br />Classé dans:<a href='http://frederic.logier.org/category/internet/'>Internet</a>, <a href='http://frederic.logier.org/category/mondelibre/'>MondeLibre</a>, <a href='http://frederic.logier.org/category/web/'>web</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/fredix.wordpress.com/243/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/fredix.wordpress.com/243/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/fredix.wordpress.com/243/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/fredix.wordpress.com/243/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/fredix.wordpress.com/243/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/fredix.wordpress.com/243/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/fredix.wordpress.com/243/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/fredix.wordpress.com/243/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/fredix.wordpress.com/243/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/fredix.wordpress.com/243/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/fredix.wordpress.com/243/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/fredix.wordpress.com/243/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/fredix.wordpress.com/243/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/fredix.wordpress.com/243/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=frederic.logier.org&amp;blog=3098224&amp;post=243&amp;subd=fredix&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://frederic.logier.org/2010/06/25/desktop-2-0/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0fc8e5d51ed3c0726b2826e8caeb8017?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fredix</media:title>
		</media:content>
	</item>
		<item>
		<title>Du modèle économique du libre : status.net wordpress.com shapado.com</title>
		<link>http://frederic.logier.org/2010/06/10/du-modele-economique-du-libre-status-net-wordpress-com-shapado-com/</link>
		<comments>http://frederic.logier.org/2010/06/10/du-modele-economique-du-libre-status-net-wordpress-com-shapado-com/#comments</comments>
		<pubDate>Thu, 10 Jun 2010 22:23:25 +0000</pubDate>
		<dc:creator>fredix</dc:creator>
				<category><![CDATA[MondeLibre]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://frederic.logier.org/?p=203</guid>
		<description><![CDATA[Lors de mes pérégrinations récentes à chercher un microblog libre sans limitation du nombre de caractères, on me fit découvrir http://unlimited.status.net/. J&#8217;ai bien sûr un compte http://identi.ca/ mais la mode de la limitation de caractères lancées par Twitter m&#8217;exaspère au plus au point (c&#8217;est plutôt stressant de limiter sa prose pour gagner 3 caractères afin [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=frederic.logier.org&amp;blog=3098224&amp;post=203&amp;subd=fredix&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Lors de mes pérégrinations récentes à chercher un microblog libre sans limitation du nombre de caractères, on me fit découvrir <a href="http://unlimited.status.net/" target="_blank">http://unlimited.status.net/</a>. J&#8217;ai bien sûr un compte <a href="http://identi.ca/" target="_blank">http://identi.ca/</a> mais la mode de la limitation de caractères lancées par Twitter m&#8217;exaspère au plus au point (c&#8217;est plutôt stressant de limiter sa prose pour gagner 3 caractères afin de pouvoir poster&#8230;). Bien que répondant à mon besoin, ce sous-domaine est plutôt laid, et les autres sites utilisant le moteur de status.net plus joli comme <a href="http://brainbird.net/" target="_blank">http://brainbird.net/</a> limitent malgré tout à 300 caractères&#8230;</p>
<p>C&#8217;est alors que la lumière fut lorsque je découvris l&#8217;offre de &#8220;cloud&#8221; de StatusNet <a href="http://status.net/signup" target="_blank">http://status.net/signup</a> En effet nul besoin de s&#8217;auto-héberger (mon temps est précieux), cette offre me permet d&#8217;avoir mon propre sous-domaine chez status.net et de l&#8217;administrer selon mon bon vouloir, notamment de faire sauter cette stupide limitation de caractères : <a href="http://fredix.status.net/" target="_blank">http://fredix.status.net/</a></p>
<p>Elle permet aussi d&#8217;héberger sa propre communauté <a href="http://status.net/whos-using-statusnet" target="_blank">http://status.net/whos-using-statusnet</a>, ouverte ou pas, Mozilla ne s&#8217;en est d&#8217;ailleurs pas privé : <a href="http://mozilla.status.net/" target="_blank">http://mozilla.status.net/</a> On dépasse largement avec tout ça le peu que propose Twitter. Cependant si je souhaite des services complémentaires comme les SMS ou XMPP, Status.net va proposer ce mois-ci une offre premium ajoutant un certain nombre d&#8217;options : <a href="http://status.net/cloud" target="_blank">http://status.net/cloud</a> (SMS, XMPP, fichiers, &#8230;) J&#8217;espère que le prix sera abordable !</p>
<p>Je trouve cela très intelligent de leur part, et c&#8217;est une copie du modèle de <a href="http://wordpress.com/" target="_blank">http://wordpress.com/</a>. Un logiciel que l&#8217;on peut s&#8217;installer et héberger soit même, ou bien simplement utiliser la version gratuite, ou la version avec des options payantes. Tout cela avec la garantie de pouvoir récupérer et exploiter ses données à tout instant grâce au code libre téléchargeable.</p>
<p>Cette 3ème voie me semble parfaite pour les logiciels libres qui souhaitent trouver un modèle économique. Il est dommage que pas mal de libristes feignent de l&#8217;ignorer, et préfèrent sacrifier le soutient financier du libre sur l&#8217;autel de l&#8217;auto-hébergement &#8220;pure et pas minitel 2.0&#8243; &#8230;..</p>
<p>J&#8217;estime d&#8217;ailleurs que certaines organisations à but non lucratif devraient s&#8217;en inspirer afin de financer leurs actions et pourquoi pas même leurs développeurs &#8230; Et bien même soyons fou pour financer le développement de services concurrentiels à Google, l&#8217;éthique et la confiance accordées à des organisations type <a href="http://www.fsf.org/" target="_blank">FSF</a> , <a href="http://www.eff.org/" target="_blank">EFF</a> ou <a href="http://foundation.gnome.org/" target="_blank">GNOME Foundation</a> sont d&#8217;une valeur inestimable face à n&#8217;importe quelle entreprise suspecte par définition. Mais ceci est un autre débat <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Pour terminer, en plus de status.net et wordpress.com il existe aussi l&#8217;excellent <a href="http://shapado.com/plans" target="_blank">http://shapado.com/</a> logiciel libre de question/réponse qui propose un hébergement avec des options payantes (plutôt chères <img src='http://s0.wp.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />   )  : <a href="http://shapado.com/plans" target="_blank">http://shapado.com/plans</a> Voici un exemple avec un shapado consacré à android : <a href="http://android.shapado.com/" target="_blank">http://android.shapado.com/</a></p>
<br />Classé dans:<a href='http://frederic.logier.org/category/mondelibre/'>MondeLibre</a>, <a href='http://frederic.logier.org/category/web/'>web</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/fredix.wordpress.com/203/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/fredix.wordpress.com/203/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/fredix.wordpress.com/203/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/fredix.wordpress.com/203/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/fredix.wordpress.com/203/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/fredix.wordpress.com/203/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/fredix.wordpress.com/203/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/fredix.wordpress.com/203/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/fredix.wordpress.com/203/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/fredix.wordpress.com/203/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/fredix.wordpress.com/203/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/fredix.wordpress.com/203/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/fredix.wordpress.com/203/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/fredix.wordpress.com/203/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=frederic.logier.org&amp;blog=3098224&amp;post=203&amp;subd=fredix&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://frederic.logier.org/2010/06/10/du-modele-economique-du-libre-status-net-wordpress-com-shapado-com/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0fc8e5d51ed3c0726b2826e8caeb8017?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fredix</media:title>
		</media:content>
	</item>
		<item>
		<title>Juick</title>
		<link>http://frederic.logier.org/2009/08/09/juick/</link>
		<comments>http://frederic.logier.org/2009/08/09/juick/#comments</comments>
		<pubDate>Sun, 09 Aug 2009 11:31:10 +0000</pubDate>
		<dc:creator>fredix</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[jabber]]></category>
		<category><![CDATA[juick]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://frederic.logier.org/?p=105</guid>
		<description><![CDATA[Après avoir lu l&#8217;article de Nÿco sur Juick j&#8217;ai couru tester ce surprenant service de blogging (et non pas micro). Et là surprise c&#8217;est exactement ce que j&#8217;avais imaginé comme alternative à Twitter. En effet pas de stupide limitation à 140 caractères, Juick peut donc faire office de blog. Support des photos intégré et non [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=frederic.logier.org&amp;blog=3098224&amp;post=105&amp;subd=fredix&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Après avoir lu l&#8217;<a href="http://nyco.wordpress.com/2009/08/05/juick-com-reseau-social-temps-reel-xmpp/" target="_blank">article de Nÿco sur Juick</a> j&#8217;ai couru tester ce surprenant service de blogging (et non pas micro). Et là surprise c&#8217;est exactement ce que j&#8217;avais imaginé comme alternative à Twitter. En effet pas de stupide limitation à 140 caractères, Juick peut donc faire office de blog. Support des photos intégré et non pas via un autre site (twitterpic). Et surtout support complet du service par Jabber : inscription et post.</p>
<p>Pour compléter l&#8217;article de Nÿco je trouve qu&#8217;il manque juste une passerelle vers les salons Jabber. Cela serait tout simplement énorme qu&#8217;un salon jabber puisse être associé à un groupe Juick. On aurait ainsi tout l&#8217;historique du salon sur le groupe. Par contre il manque pour gérer cela, le support des groupes dans Juick et le fait de pouvoir poster via l&#8217;interface web. J&#8217;avais pensé à ce type de fonctionnalité pour Noumba, mais le profil des utilisateurs ne permettait pas de l&#8217;envisager. Le site est très jeune mais comme il est complètement pensé autour de Jabber cela serait stupide de ne pas implémenter les salons.</p>
<p>Autre surprise, le business model. Enfin un site qui ne se base pas sur la pub ! Il est nécessaire de payer 9.95$ afin de pouvoir poster plus d&#8217;une image par 24 heures. On espère le support de la vidéo bien sûr. Comme l&#8217;indique Nÿco il suffit d&#8217;envoyer l&#8217;image au bot Juick depuis son client Jabber. Par contre les proxy de transfert par défaut dans Gajim ne fonctionnent pas et j&#8217;ai du ajouter celui de jabberfr (proxy.jabberfr.org). Une fonctionnalité qui permet de remplacer <a href="http://imageshack.us/" target="_blank">imageshack</a> !</p>
<p>A propos de Jabber on peut constater que cela va limiter le service aux connaisseurs. Pour y remédier il faudrait a mon avis pouvoir poster via l&#8217;interface web et <span style="text-decoration:line-through;">ouvrir une API</span> (UPDATE : l&#8217;<a href="http://juick.com/help/api/xmpp/" target="_blank">API existe bien ici</a> décrite en Russe :p , et on me signale l&#8217;existence d&#8217;un <a href="http://juick.rubyforge.org/" target="_blank">client Juick</a> ,  il n&#8217;utilise pas une API mais parse simplement un <a href="http://api.juick.com/messages.xml" target="_blank">XML des derniers messages</a>, ). Quant aux tags appelés hash tags sur Twitter, ils servent à compenser l&#8217;absence flagrante des groupes. J&#8217;y vois personnellement  l&#8217;intérêt que sur  des termes génériques. Exemple un groupe juick au lieu d&#8217;un simple tag, par contre un tag pour définir une humeur ou décrire un média. De plus sur un groupe ou un salon à la jabber on peut y définir des droits d&#8217;accès et de multiples propriétés qu&#8217;on ne peut envisager avec un simple tag. De la même manière dans un blog les tags et les catégories sont complémentaires.</p>
<p>D&#8217;après Nÿco, Juick est écrit en Perl/C++ et cela se ressent à la réactivité immédiate du bot et du site. Certes le nombre d&#8217;inscrit est encore très faible, cela sera à confirmer. Je regrette juste l&#8217;aspect propriétaire du site.</p>
<p>Pour résumer, voilà donc un site très prometteur où l&#8217;on sent que l&#8217;auteur a un peu plus de 2 de QI, car il faut vraiment être stupide pour avoir laissé des services tiers compléter les manques flagrants de Twitter&#8230; Pour l&#8217;avenir de ce type de service, je me demande juste si Google Wave ne mettra pas tout le monde d&#8217;accord, car outre des fonctionnalités étonnantes, il sera OpenSource et permettra à chacun d&#8217;utiliser son propre serveur à la manière de Jabber.</p>
<br />Publié dans Internet, web Tagged: jabber, juick, twitter <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/fredix.wordpress.com/105/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/fredix.wordpress.com/105/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/fredix.wordpress.com/105/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/fredix.wordpress.com/105/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/fredix.wordpress.com/105/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/fredix.wordpress.com/105/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/fredix.wordpress.com/105/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/fredix.wordpress.com/105/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/fredix.wordpress.com/105/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/fredix.wordpress.com/105/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/fredix.wordpress.com/105/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/fredix.wordpress.com/105/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/fredix.wordpress.com/105/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/fredix.wordpress.com/105/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=frederic.logier.org&amp;blog=3098224&amp;post=105&amp;subd=fredix&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://frederic.logier.org/2009/08/09/juick/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0fc8e5d51ed3c0726b2826e8caeb8017?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fredix</media:title>
		</media:content>
	</item>
		<item>
		<title>Le big switch 2</title>
		<link>http://frederic.logier.org/2009/07/02/le-big-switch-2/</link>
		<comments>http://frederic.logier.org/2009/07/02/le-big-switch-2/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 16:46:32 +0000</pubDate>
		<dc:creator>fredix</dc:creator>
				<category><![CDATA[fredix]]></category>
		<category><![CDATA[MondeLibre]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://frederic.logier.org/?p=99</guid>
		<description><![CDATA[11 jours après avoir migré mon blog de mon serveur Typo vers Blogger je viens à nouveau de switcher cette fois-ci vers WordPress.com ! Je parle bien d&#8217;un hébergement chez WordPress.com, il ne s&#8217;agit pas pour moi de revenir vers un auto-hébergement&#8230; Voici les différentes raisons : WordPress fait parti des blogs les plus avancés [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=frederic.logier.org&amp;blog=3098224&amp;post=99&amp;subd=fredix&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>11 jours après avoir migré mon blog de mon serveur <a href="http://typosphere.org">Typo</a> vers <a href="http://www.blogger.com">Blogger</a> je viens à nouveau de switcher cette fois-ci vers <a href="http://fr.wordpress.com/">WordPress.com</a> ! Je parle bien d&#8217;un hébergement chez WordPress.com, il ne s&#8217;agit pas pour moi de revenir vers un auto-hébergement&#8230; Voici les différentes raisons :</p>
<ol>
<li>WordPress fait parti des blogs les plus avancés techniquement, et il dépasse de loin le service Blogger qui ne gère toujours pas les pages et le menu par onglet sans bricoler la CSS&#8230;</li>
<li>Il est Opensource : <a href="http://wordpress.org/">WordPress.org</a></li>
<li>L&#8217;hébergement chez WordPress.com me permet de m&#8217;affranchir de l&#8217;administration et des mises à jour.</li>
<li>L&#8217;import  (articles, commentaires et catégories) d&#8217;un blog Blogger en 2 clics.</li>
<li>L&#8217;export XML.</li>
<li>3 Go d&#8217;espace disque gratuit.</li>
<li>widgets.</li>
<li>Statistiques de blog sans passer par un service tiers à la Google Analytics.</li>
<li>Leurs services payant propose le <a href="http://support.wordpress.com/domain-mapping/">Domain mapping</a> pour un coût extrêmement modique (9.97$ /an ce qui revient à 7.27€ /an) ce qui me permet d&#8217;utiliser mon propre domaine.</li>
<li>Le paiement via ce type de service est un excellent moyen de financer le libre. Ce dernier point est pour moi prioritaire car il est à mes yeux indispensable d&#8217;encourager les business modèles Opensource d&#8217;autant plus lorsqu&#8217;ils atteignent ce niveau de qualité technique.</li>
</ol>
<p>Dans de précédent billets j&#8217;ai critiqué le fait que le Libre se focalisait sur le logiciel sans penser à fournir de services. J&#8217;avoue avoir sauté chez Google sans penser à regarder mon vieux compte WordPress. La faute est réparée.</p>
<br />Publié dans fredix, MondeLibre, web  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/fredix.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/fredix.wordpress.com/99/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/fredix.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/fredix.wordpress.com/99/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/fredix.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/fredix.wordpress.com/99/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/fredix.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/fredix.wordpress.com/99/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/fredix.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/fredix.wordpress.com/99/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/fredix.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/fredix.wordpress.com/99/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/fredix.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/fredix.wordpress.com/99/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=frederic.logier.org&amp;blog=3098224&amp;post=99&amp;subd=fredix&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://frederic.logier.org/2009/07/02/le-big-switch-2/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0fc8e5d51ed3c0726b2826e8caeb8017?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fredix</media:title>
		</media:content>
	</item>
		<item>
		<title>Répartition de charge avec une architecture asynchrone</title>
		<link>http://frederic.logier.org/2009/02/28/repartition-de-charge-avec-une-architecture-asynchrone/</link>
		<comments>http://frederic.logier.org/2009/02/28/repartition-de-charge-avec-une-architecture-asynchrone/#comments</comments>
		<pubDate>Sat, 28 Feb 2009 13:49:00 +0000</pubDate>
		<dc:creator>fredix</dc:creator>
				<category><![CDATA[MondeLibre]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://fredix.wordpress.com/2009/02/28/repartition-de-charge-avec-une-architecture-asynchrone/</guid>
		<description><![CDATA[Avec ce titre pompeux je voulais depuis longtemps écrire un article sur ce thème. Je l’avais un peu abordé avec ce billet sur beanstalkd, cependant je désirais en parler de manière plus généraliste. Finalement le Grand Ternet a encore une fois encouragé ma feignantise car j’ai trouvé cette suite de 3 petits excellents articles sur [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=frederic.logier.org&amp;blog=3098224&amp;post=90&amp;subd=fredix&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div class="post-body">
<p>Avec ce titre pompeux je voulais depuis longtemps écrire un article sur ce thème. Je l’avais un peu abordé avec ce billet sur <a href="http://frederic.logier.org/2008/05/05/beanstalkd-premiere-approche">beanstalkd</a>, cependant je désirais en parler de manière plus généraliste.</p>
<p>Finalement le Grand Ternet a encore une fois encouragé ma feignantise car j’ai trouvé cette suite de 3 petits excellents articles sur <a href="http://haute-disponibilite.net/">haute-disponibilite.net</a> qui expliquent très bien ce domaine :</p>
<ul>
<li><a href="http://www.haute-disponibilite.net/2009/01/16/communiquer-par-file-de-message-1/">Communiquer via une file d’attente de message, 1</a></li>
<li><a href="http://www.haute-disponibilite.net/2009/01/19/communiquer-par-file-de-message-2/">Communiquer via une file d’attente de message, 2</a></li>
<li><a href="http://www.haute-disponibilite.net/2009/01/31/communiquer-via-une-file-attente-de-message-3/">Communiquer via une file d’attente de message, 3</a></li>
</ul>
<p>A compléter avec cet article très riche d’un co-fondateur de <a href="http://last.fm/">last.fm</a> : <a href="http://www.metabrew.com/article/anti-rdbms-a-list-of-distributed-key-value-stores/">Anti-RDBMS: A list of distributed key-value stores</a>. Il faut ajouter à cette liste déjà imposante l’étonnant <a href="http://tokyocabinet.sourceforge.net/index.html">Tokyo cabinet</a> ainsi que <a href="http://github.com/ezmobius/nanite/tree/master">nanite</a> basé sur RabbitMQ et cela démontrera aux plus incrédules l’importance d’un bon backend asynchrone et les énormes avantages que cela apporte en terme de réactivité pour l’utilisateur.</p>
<p>Cependant la tentation sera certainement de plus en plus grande d’utiliser les technologies clés en main de cloud computing offertes par Google et Amazon… A quand un <strong>service</strong> de cloud computing opensource à disposition uniquement, bien sûr, des sites opensource ? <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> <br />Pour finir, à lire également l’excellent article de Greg, <a href="http://www.algorithmique.net/2009/02/19/key-value/">{key, value}</a> qui comporte des détails techniques et des exemples (attention par contre sur la partie memcached, car <a href="http://memcachedb.org/">memcachedb</a> ou <a href="http://memcachedb.org/memcacheq/">memcacheq</a> seront plus pertinent pour cet usage).</p>
</p></div>
<br />Publié dans MondeLibre, web  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/fredix.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/fredix.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/fredix.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/fredix.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/fredix.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/fredix.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/fredix.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/fredix.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/fredix.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/fredix.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/fredix.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/fredix.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/fredix.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/fredix.wordpress.com/90/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=frederic.logier.org&amp;blog=3098224&amp;post=90&amp;subd=fredix&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://frederic.logier.org/2009/02/28/repartition-de-charge-avec-une-architecture-asynchrone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0fc8e5d51ed3c0726b2826e8caeb8017?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fredix</media:title>
		</media:content>
	</item>
		<item>
		<title>Le libre et les services web</title>
		<link>http://frederic.logier.org/2008/06/06/le-libre-et-les-services-web/</link>
		<comments>http://frederic.logier.org/2008/06/06/le-libre-et-les-services-web/#comments</comments>
		<pubDate>Fri, 06 Jun 2008 14:01:00 +0000</pubDate>
		<dc:creator>fredix</dc:creator>
				<category><![CDATA[MondeLibre]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://fredix.wordpress.com/2008/06/06/le-libre-et-les-services-web/</guid>
		<description><![CDATA[Je suis très fan de l’interaction Web Desktop, qui représente à mon sens l’avenir du Desktop. Même si le sujet est redondant avec de précédents billets, voici de la nouvelle matière, On constate depuis un moment de plus en plus d’outils à installer sur son bureau ou son navigateur, qui sont en liaison avec des [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=frederic.logier.org&amp;blog=3098224&amp;post=71&amp;subd=fredix&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div class="post-body">
<p>Je suis très fan de l’interaction Web Desktop, qui représente à mon sens l’avenir du Desktop. Même si le sujet est redondant avec de précédents billets, voici de la nouvelle matière,</p>
<p>On constate depuis un moment de plus en plus d’outils à installer sur son bureau ou son navigateur, qui sont en liaison avec des services web. Que ce soit les widgets de Vista, Apple, Adobe Air, ou ceux de Google disponibles depuis peu sur Linux (<a href="http://code.google.com/p/google-gadgets-for-linux/">Google Gadgets for Linux</a>). Mais <span class="caps">QUID</span> du Libre ?</p>
<p>Tout d’abord <a href="http://labs.mozilla.com/2007/12/introducing-weave/">Weave</a>, le <a href="http://www.google.com/tools/firefox/browsersync/">Google Browser Sync</a> de la Fondation Mozilla. Il permet de synchroniser en temps réel ses bookmarks, son historique, et surtout depuis la dernière version ses mots de passe vers un serveur Mozilla, le tout chiffré bien entendu.</p>
<p>Quand on possède un PC de bureau et un laptop, c’est vraiment la première extension à installer. Celle de Google est intéressante mais stocker chez eux des infos aussi privées est à mon avis très inquiétant, il y a des limites que je n’ai pas envie de franchir surtout s’il existe une alternative libre.<br />Pour la petite anecdote <a href="http://frederic.logier.org/articles/2007/10/24/jdll-2007">j’avais demandé</a> à Tristan Nitot aux <span class="caps">JDLL 2007</span> si la MoFo pensait un jour proposer un Google sync like. Il ne s’est pas étendu sur le sujet trouvant l’idée intéressante, alors qu’il avait cité Weave à sa conférence sans fournir de détail. J’aime bien les surprises de ce genre moi <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Ensuite sur le desktop, RedHat sponsorise le réseau social <a href="http://mugshot.org/">Mugshot</a> (un <a href="http://friendfeed.com/">friendfeed</a> avant l’heure) et propose le client natif éponyme disponible dans Fedora (oui j’ai migré ! next billet peut être). Ce client se fait discret dans la barre de tâche <span class="caps">GNOME</span> et affiche dans une popup les news de ses contacts. Le site est en lien direct avec <a href="http://online.gnome.org/">GnomeOnline</a> , il suffit d’y créer un compte pour se connecter ensuite sur MugShot. Ce site surfe sur la vague réseau social web2, donc l’intérêt est limité aux adeptes, mais il inaugure l’avenir du desktop libre connecté à des services web.</p>
<p>J’attends cependant plus utile et je pense que Jabber a toute sa place dans la compétition. D’ailleurs pour faire suite au précédent billet, j’ai ajouté sur le wiki de jabberfr.org une <a href="http://wiki.jabberfr.org/Portail:Utilisateur/ServicesWeb">page</a> qui recense quelques sites utilisables depuis son client Jabber. Sachant que Jabber commence à être implémenté à l’intérieur de client desktop (abiword, &#8230;) la boucle sera bouclée <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>On parle souvent du modèle économique du libre, qui tourne essentiellement autour du service. Proposer des services web payant est à mon avis un excellent modèle d’avenir pour financer le développement du logiciel libre. Personnellement si j’ai le choix entre des services web payant mais libres et hébergés par une communauté en qui j’ai confiance, et des équivalents propriétaires même gratuits mon choix est vite fait.</p>
<p>Aussi je suis ravi que le libre commence à suivre cette voie, et c’est sans nul doute la prochain défi qu’il faudra réussir.</p>
</div>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/fredix.wordpress.com/71/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/fredix.wordpress.com/71/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/fredix.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/fredix.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/fredix.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/fredix.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/fredix.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/fredix.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/fredix.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/fredix.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/fredix.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/fredix.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/fredix.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/fredix.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/fredix.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/fredix.wordpress.com/71/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=frederic.logier.org&amp;blog=3098224&amp;post=71&amp;subd=fredix&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://frederic.logier.org/2008/06/06/le-libre-et-les-services-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0fc8e5d51ed3c0726b2826e8caeb8017?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fredix</media:title>
		</media:content>
	</item>
	</channel>
</rss>
