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

<channel>
	<title>Blog personnel de Jérémy TRUFIER &#187; Application</title>
	<atom:link href="http://www.jeremy-trufier.net/category/web/application/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jeremy-trufier.net</link>
	<description>Un blog utilisant WordPress</description>
	<lastBuildDate>Fri, 01 Apr 2011 16:50:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>Google Storage</title>
		<link>http://www.jeremy-trufier.net/2011/01/21/google-storage/</link>
		<comments>http://www.jeremy-trufier.net/2011/01/21/google-storage/#comments</comments>
		<pubDate>Fri, 21 Jan 2011 11:36:02 +0000</pubDate>
		<dc:creator>Jérémy TRUFIER</dc:creator>
				<category><![CDATA[Application]]></category>
		<category><![CDATA[Informatique]]></category>
		<category><![CDATA[Réseaux et Sécurité]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[acl]]></category>
		<category><![CDATA[amazon S3]]></category>
		<category><![CDATA[bucket]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[google storage for developpers]]></category>
		<category><![CDATA[gsutil]]></category>
		<category><![CDATA[hébergement]]></category>
		<category><![CDATA[host]]></category>
		<category><![CDATA[storage]]></category>

		<guid isPermaLink="false">http://www.jeremy-trufier.net/?p=262</guid>
		<description><![CDATA[Il y a quelques semaine, j&#8217;ai fait une demande d&#8217;un accès google Storage, j&#8217;ai reçu ce matin le lien d&#8217;invitation de ce service. Je vais vous en faire une petite présentation aujourd&#8217;hui. Google Storage for Developpers fournit un espace de stockage illimité et hautement disponible, ainsi qu&#8217;une interface RESTFull, ce n&#8217;est pas la peine de [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.jeremy-trufier.net/wp-content/uploads/2011/01/Google-Code-Labs.gif" rel="lightbox[262]"><img class="alignleft size-full wp-image-278" title="Google Code Labs" src="http://www.jeremy-trufier.net/wp-content/uploads/2011/01/Google-Code-Labs.gif" alt="" width="167" height="40" /></a>Il y a quelques semaine, j&#8217;ai fait une demande d&#8217;un accès google Storage, j&#8217;ai reçu ce matin le lien d&#8217;invitation de ce service. Je vais vous en faire une petite présentation aujourd&#8217;hui.</p>
<p>Google Storage for Developpers fournit un espace de stockage illimité et hautement disponible, ainsi qu&#8217;une interface RESTFull, ce n&#8217;est pas la peine de le comparer avec Dropbox, mais avec le service d&#8217;amazon : Amazon S3 (que dropbox utilise).</p>
<p><span id="more-262"></span></p>
<h2>Organisation</h2>
<p><a href="http://www.jeremy-trufier.net/wp-content/uploads/2011/01/42b.jpeg" rel="lightbox[262]"><img class="alignleft size-medium wp-image-286" title="chess" src="http://www.jeremy-trufier.net/wp-content/uploads/2011/01/42b-300x255.jpg" alt="" width="240" height="204" /></a></p>
<p>Chaque fichier envoyé sera stocké sur le Cloud Google, c&#8217;est à dire sur une multitude de serveurs répartis à travers le monde. Chaque fichier pourra donc être accessible de n&#8217;importe, le serveur sera choisit de manière transparente en fonction de son temps de réponse. Les données étant répliquées sur plusieurs serveur, plus besoin de sauvegarde, si un des serveurs tombe, le fichier sera toujours disponible grâce aux autres serveurs.</p>
<p>Comme sur Amazon, des répertoires racines doivent être créés. Appelés Bucket, ces répertoires doivent avoir un nom en minuscule selon le principe d&#8217;un alias de nom de domaine. Ce bucket pourra en effet être atteint depuis un alias de l&#8217;url de google storage : nom_du_bucket.commondatastorage.googleapis.com .</p>
<p>Chaque bucket peut ensuite contenir :</p>
<ul>
<li>des fichiers</li>
<li>des dossiers</li>
<li>des buckets</li>
</ul>
<p>Une gestion des ACL (Access Control List ou encore gestion des droits) fait également partie intégrante du système de fichiers, il existe 3 droits pouvant être appliqués à des domaines mails ou encore des comptes google spécifiés explicitement.</p>
<ul>
<li>READ : droit de lecture uniquement</li>
<li>WRITE : droit de lecture et d&#8217;écriture</li>
<li>FULLCONTROL : ce droit permet d&#8217;attribuer tout les droits à un fichier, y compris les droits de modification des ACL</li>
</ul>
<p>Une fonctionnalité interessante est la possibilité de reprendre un envoi ou un téléchargement, imaginons qu&#8217;un envoi d&#8217;un très gros fichier de plusieurs centaines de Mo ai été interrompu par une coupure de connection, il est possible de reprendre l&#8217;upload exactement où la coupure c&#8217;est produite.</p>
<p>Par contre, c&#8217;est dommage (mais en même temps très dur à gérer), mais un fichier sur le serveur ne peut être modifié. Ainsi, lors de la modification d&#8217;un fichier, ce fichier est supprimé, puis renvoyé. Il est considéré comme un fichier totalement différent du premier, et sa date de &laquo;&nbsp;modification&nbsp;&raquo; devient donc sa date de création, le libéllé dans l&#8217;explorateur est &laquo;&nbsp;Last upload&nbsp;&raquo;.</p>
<p>La compression du flux est également gérée, en envoyant un fichier, il est possible d&#8217;utiliser la compression gZip, le temps de transfert sera réduit, la bande passante (BP facturée ^^)  sera également réduite.</p>
<p>Lors de l&#8217;envoi d&#8217;un fichier, ce fichier est considéré comme inexistant, et n&#8217;apparait donc pas dans notre bucket. Dès que le serveur a entièrement reçu le fichier, il apparait instantanément, et est immédiatement disponible. De la même façon, une fois supprimé, il n&#8217;apparait plus et renvoi une 404 immédiatement.</p>
<p>Google storage utilise le protocole HTTPS pour l&#8217;échange de fichier, nos données sont donc sécurisées (relativement bien) pendant toute la durée du transit.</p>
<h2>Interface Web</h2>
<p>Mieux vaut une petite démonstration avec quelques screenshot que des explications imbuvables :</p>
<p><a href="http://www.jeremy-trufier.net/wp-content/uploads/2011/01/Capture-2011-01-21-à-11.49.47.png" rel="lightbox[262]"><img class="size-medium wp-image-266 alignnone" title="Google Storage - Interface" src="http://www.jeremy-trufier.net/wp-content/uploads/2011/01/Capture-2011-01-21-à-11.49.47-300x197.png" alt="" width="300" height="197" /></a><a href="http://www.jeremy-trufier.net/wp-content/uploads/2011/01/Capture-2011-01-21-à-11.50.09.png" rel="lightbox[262]"><img class="size-medium wp-image-267 alignnone" title="Google Storage - Nom de bucket déjà utilisé" src="http://www.jeremy-trufier.net/wp-content/uploads/2011/01/Capture-2011-01-21-à-11.50.09-300x194.png" alt="" width="300" height="194" /></a></p>
<p><a href="http://www.jeremy-trufier.net/wp-content/uploads/2011/01/Capture-2011-01-21-à-11.50.35.png" rel="lightbox[262]"><img class="size-medium wp-image-268 alignnone" title="Google Storage - Bucket créé" src="http://www.jeremy-trufier.net/wp-content/uploads/2011/01/Capture-2011-01-21-à-11.50.35-300x196.png" alt="" width="300" height="196" /></a><a href="http://www.jeremy-trufier.net/wp-content/uploads/2011/01/Capture-2011-01-21-à-11.51.00.png" rel="lightbox[262]"><img class="size-medium wp-image-269 alignnone" title="Google Storage - Dans le bucket" src="http://www.jeremy-trufier.net/wp-content/uploads/2011/01/Capture-2011-01-21-à-11.51.00-300x195.png" alt="" width="300" height="195" /></a></p>
<p><a href="http://www.jeremy-trufier.net/wp-content/uploads/2011/01/Capture-2011-01-21-à-11.51.00.png" rel="lightbox[262]"></a><a href="http://www.jeremy-trufier.net/wp-content/uploads/2011/01/Capture-2011-01-21-à-11.52.48.png" rel="lightbox[262]"><img class="size-medium wp-image-270 alignnone" title="Google Storage - Folder et fichier envoyé" src="http://www.jeremy-trufier.net/wp-content/uploads/2011/01/Capture-2011-01-21-à-11.52.48-300x173.png" alt="" width="300" height="173" /></a><a href="http://www.jeremy-trufier.net/wp-content/uploads/2011/01/Capture-2011-01-21-à-11.53.51.png" rel="lightbox[262]"><img class="size-medium wp-image-271 " title="Google Storage - Affichage d'un fichier public" src="http://www.jeremy-trufier.net/wp-content/uploads/2011/01/Capture-2011-01-21-à-11.53.51-300x97.png" alt="" width="300" height="97" /></a></p>
<h2>Ligne de commande</h2>
<p><img class="alignleft size-medium wp-image-284" title="5" src="http://www.jeremy-trufier.net/wp-content/uploads/2011/01/5-300x225.jpg" alt="" width="240" height="180" /></p>
<p>Là une partie un tout petit peu plus technique&#8230; Google fournit un utilitaire développé en Python qui est un client RESTFull pour Google Storage.</p>
<p>L&#8217;avantage par rapport à l&#8217;interface Web est que nous avons accès à la quasi-totalité des fonctions REST, notamment la gestion des ACL que nous n&#8217;avons pas encore sur l&#8217;interface Web.</p>
<p>Cet utilitaire s&#8217;appelle GSUtil et son utilisation est plutôt simple :</p>
<p>Pour reprendre le même exemple que ci-dessus :</p>
<p>Création d&#8217;un bucket : gsutil mb gs://jeremy</p>
<p>Création d&#8217;un dossier : gsutil mb gs://jeremy/test</p>
<p>Envoi d&#8217;un fichier : gsutil cp Lorem\ Ipsum.txt gs://jeremy/</p>
<p>Liste du dossier : gsutil ls -l gs://jeremy</p>
<p>Affichage du fichier : gsutil cat gs://jeremy/Lorem\ Ipsum.txt</p>
<p>Suppression de fichier : gsutil rm gs://jeremy/Lorem\ Ipsum.txt</p>
<p>Gestion des acls :</p>
<ul>
<li>Tout d&#8217;abord récupérer la configuration acl existante : gsutil getacl gs://jeremy/Lorem\ Ipsum.txt &gt; acl.txt</li>
<li>Ensuite éditer ce fichier en fonction des nouvelles ACL</li>
<li>Puis renvoyer le fichier : gsutil setacl acl.txt gs://jeremy/Lorem\ Ipsum.txt</li>
</ul>
<h2>Prix</h2>
<p><a href="http://www.jeremy-trufier.net/wp-content/uploads/2011/01/54a.jpeg" rel="lightbox[262]"><img class="alignright size-medium wp-image-282" title="54a" src="http://www.jeremy-trufier.net/wp-content/uploads/2011/01/54a-300x225.jpg" alt="" width="240" height="180" /></a>Je vous ai dit en début d&#8217;article que l&#8217;espace de stockage était illimité ? oui, mais pas sans coût.</p>
<p>Voici le tableau de prix donné par google, la facturation se fait en fonction de la taille des données transitants entre l&#8217;utilisateur et les serveurs, et de l&#8217;espace de stockage utilisé.</p>
<ul>
<li>Utilisation d&#8217;espace de stockage : $0.17/Go/mois</li>
<li>Réseau
<ul>
<li>Envoi des données
<ul>
<li>$0.10/Go</li>
</ul>
</li>
<li>Téléchargement des données
<ul>
<li>$0.15/Go pour l&#8217;Amerique, l&#8217;Europe, le Moyen-Orient et l&#8217;Afrique</li>
<li>$0.30/Go pour l&#8217;Asie-Pacifique</li>
</ul>
</li>
</ul>
</li>
<li>Requêtes
<ul>
<li>PUT, POST, LIST—$0.01 pour 1,000 requêtes</li>
<li>GET, HEAD—$0.01 pour 10,000 requêtes</li>
</ul>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.jeremy-trufier.net/2011/01/21/google-storage/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Doc Spreadsheets &#8211; Requêter une table</title>
		<link>http://www.jeremy-trufier.net/2010/09/23/google-doc-spreadsheets-requeter-une-table/</link>
		<comments>http://www.jeremy-trufier.net/2010/09/23/google-doc-spreadsheets-requeter-une-table/#comments</comments>
		<pubDate>Thu, 23 Sep 2010 14:00:00 +0000</pubDate>
		<dc:creator>Jérémy TRUFIER</dc:creator>
				<category><![CDATA[Application]]></category>
		<category><![CDATA[Informatique]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[base de données]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[google spreadsheets]]></category>
		<category><![CDATA[query]]></category>
		<category><![CDATA[requêtes]]></category>
		<category><![CDATA[tableur]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.jeremy-trufier.net/?p=109</guid>
		<description><![CDATA[Aujourd&#8217;hui nous allons parler un petit peu de Google Doc Spreadsheets et des possibilités qu&#8217;il donne. Il est possible de faire une base de donnée en google doc spreadsheet&#8230; &#171;&#160;Hein que quoi ?! on m&#8217;aurait caché des choses ?&#160;&#187; Yep yep, et c&#8217;est super simple. Bien entendu nous parlons d&#8217;une base de donnée locale utilisable [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.jeremy-trufier.net/wp-content/uploads/2010/09/google_docs_logo.png" rel="lightbox[109]"><img class="alignright size-full wp-image-110" title="google_docs_logo" src="http://www.jeremy-trufier.net/wp-content/uploads/2010/09/google_docs_logo.png" alt="" width="231" height="218" /></a>Aujourd&#8217;hui nous allons parler un petit peu de Google Doc Spreadsheets et des possibilités qu&#8217;il donne.</p>
<p>Il est possible de faire une base de donnée en google doc spreadsheet&#8230; &laquo;&nbsp;Hein que quoi ?! on m&#8217;aurait caché des choses ?&nbsp;&raquo;</p>
<p>Yep yep, et c&#8217;est super simple. Bien entendu nous parlons d&#8217;une base de donnée locale utilisable uniquement dans notre document, nous ne pourrons pas la requêter facilement de l&#8217;extérieur.</p>
<p>Cette fonction est super utile pour gérer des plannings et connaitre approximativement le coût final sachant que chaque tâche peut être un type de travail différent.</p>
<p><span id="more-109"></span></p>
<h2>Pratique</h2>
<p>Tout d&#8217;abord nous allons nous créer une feuille de tableur toute simple récapitulant nos différents prix (faux les prix <img src='http://www.jeremy-trufier.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  ) :</p>
<div id="attachment_112" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.jeremy-trufier.net/wp-content/uploads/2010/09/tarifs.jpg" rel="lightbox[109]"><img class="size-medium wp-image-112" title="Feuille Tarifs" src="http://www.jeremy-trufier.net/wp-content/uploads/2010/09/tarifs-300x130.jpg" alt="Feuille Tarifs" width="300" height="130" /></a><p class="wp-caption-text">Feuille Tarifs</p></div>
<p>Puis maintenant notre planning de base, trois colonne Nom de la tache, Type de la tache correspondant à la référence dans la page Tarif, et la durée horaire de chaque tâche :</p>
<div id="attachment_113" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.jeremy-trufier.net/wp-content/uploads/2010/09/planning1.jpg" rel="lightbox[109]"><img class="size-medium wp-image-113" title="Planning étape 1" src="http://www.jeremy-trufier.net/wp-content/uploads/2010/09/planning1-300x183.jpg" alt="Planning étape 1" width="300" height="183" /></a><p class="wp-caption-text">Planning étape 1</p></div>
<p>A présent comme vous l&#8217;aurez deviné le but du jeu est de faire remplir la 4e colonne avec les bons montants en utilisant la feuille Tarifs.</p>
<p>Pour cela nous allons utiliser la fonction QUERY(). Le premier paramètre est la plage de donnée que nous voulons requêter, c&#8217;est donc ici la plage A:C (les collonnes A à C) de la page Tarifs, donc la plage : Tarifs!A2:C10 par exemple, mais il faut rajouter nos $ pour ne pas modifier ces valeurs lorsque nous allons répliquer la formule : <strong>Tarifs!$A$2:$C$10</strong></p>
<p>Le deuxième paramètre est notre requête, ici nous voulons récupérer le tarif horaire correspondant à la référence dans la colonne B de notre feuille Planning. Notre requête pour la tâche 1 va donc être :</p>
<blockquote>
<pre>SELECT B WHERE A=B2</pre>
</blockquote>
<p>Et oui mais petit problème, on mixe deux pages là, on veut bien récupérer le contenu de la colonne Tarifs!B lorsque Tarifs!A=Planning!B2, mais comment google spreadsheets saura que B2 fait partie de la feuille planning ???</p>
<p>Il nous suffit de concaténer :</p>
<blockquote>
<pre>CONCATENATE("SELECT B WHERE A='",B2,"'")</pre>
</blockquote>
<p>Notre requête finale sera donc :</p>
<blockquote>
<pre>=QUERY(Tarifs!$A$2:$C$10,CONCATENATE("SELECT B WHERE A='",B2,"'"))*C2</pre>
</blockquote>
<p>Vous remarquez le petit *C2 pour prendre en compte le nombre d&#8217;heures.</p>
<p>Maintenant appliquons la requête dans une cellule et dupliquons là dans les autres et cela nous donne :</p>
<div id="attachment_114" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.jeremy-trufier.net/wp-content/uploads/2010/09/planning2.jpg" rel="lightbox[109]"><img class="size-medium wp-image-114" title="Feuille planning - Etape 2" src="http://www.jeremy-trufier.net/wp-content/uploads/2010/09/planning2-300x212.jpg" alt="Feuille planning - Etape 2" width="300" height="212" /></a><p class="wp-caption-text">Feuille planning - Etape 2</p></div>
<h2>Conclusion</h2>
<p>Vous avez maintenant appris à requêter en google spreadsheets, les possibilités sont impressionnantes et seulement une d&#8217;entre elle est survolée par cet article. J&#8217;avais cependant envie de vous la faire découvrir étant donné le gain de temps apporté.</p>
<p>Si vous voulez plus d&#8217;infos, je vous invite à consulter la page de google concernant ce langage de requêtage :<a href="http://code.google.com/intl/fr/apis/visualization/documentation/querylanguage.html" target="_blank"> http://code.google.com/intl/fr/apis/visualization/documentation/querylanguage.html</a></p>
<p>A bientôt !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jeremy-trufier.net/2010/09/23/google-doc-spreadsheets-requeter-une-table/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->