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

<channel>
	<title>Tordek &#187; Web</title>
	<atom:link href="http://blog.tordek.com.ar/category/web/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.tordek.com.ar</link>
	<description>Linux, Programación, Diseño Web, y todo lo bueno de la Internet.</description>
	<lastBuildDate>Sun, 10 Jul 2011 12:51:09 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>No sé tu password. Pero podría averiguarlo.</title>
		<link>http://blog.tordek.com.ar/2008/08/no-se-tu-password-pero-podria-averiguarlo/</link>
		<comments>http://blog.tordek.com.ar/2008/08/no-se-tu-password-pero-podria-averiguarlo/#comments</comments>
		<pubDate>Mon, 18 Aug 2008 17:44:48 +0000</pubDate>
		<dc:creator>Tordek</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[contraseña]]></category>
		<category><![CDATA[hotmail]]></category>
		<category><![CDATA[password]]></category>
		<category><![CDATA[seguridad]]></category>

		<guid isPermaLink="false">http://blog.tordek.com.ar/?p=198</guid>
		<description><![CDATA[No, no te &#8216;hackearon&#8217; el password. Y, probablemente, tampoco te lo robaron. Casi seguro, vos se los diste. Vos no te enteraste. Probablemente estás totalmente seguro de no habérselo dicho a nadie. Aún así, si vamos por lo más probable, es tu culpa. Primero una corta explicación. Prometo que no va a doler. Cuando vos [...]]]></description>
			<content:encoded><![CDATA[<p>No, no te &#8216;hackearon&#8217; el password. Y, probablemente, tampoco te lo robaron. Casi seguro, vos se los diste.</p>
<p>Vos no te enteraste. Probablemente estás totalmente seguro de no habérselo dicho a nadie. Aún así, si vamos por lo más probable, es tu culpa.</p>
<p>Primero una corta explicación. Prometo que no va a doler.</p>
<p>Cuando vos entrás a tu mail, sea cual sea tu proveedor (aunque, si te &#8216;hackearon&#8217;, todavía estás usando Hotmail<sup class='footnote'><a href='#fn-198-1' id='fnref-198-1'>1</a></sup>), les mandás dos datos: tu nombre de usuario, y tu contraseña.</p>
<p>Obviamente, en algún lugar está guardado todo eso; ahí entran las bases de datos. Puede ser algo tan simple como un archivo de texto con un usuario y una contraseña en cada uno, o servidores dedicados para almacenar tus datos protegidos y copiados mil veces, y en varios lugares del mundo, para que si uno se rompa, tus datos sigan ahí.</p>
<p>Pero esos detalles no nos importan.</p>
<p>Lo único que importa es que la máquina sabe si la contraseña que le pasaste es la tuya.</p>
<p>Pero, claro, ahora tenemos que confiar en que nadie va a conseguir una copia de ese archivo, y robar tu preciada contraseña (claro que, si se llevan el archivo, tienen tres millones más, pero por algún motivo, sólo les importa la tuya).</p>
<p>La versión corta, es que aunque tengan el archivo, no les sirve. (Bueno, si entraron en un servidor, probablemente se bajaron todo tu correo, no sólo tu contraseña.)</p>
<p>La versión larga involucra encriptación. Encriptación indescifrable.</p>
<p>En un sentido muy estricto, no existe tal cosa. Todo código se puede romper. Lo importante es que sea muy, muy, muy difícil.</p>
<p>Tu contraseña no está guardada. Tampoco, si vamos al caso, una versión encriptada de tu contraseña. Lo único que Hotmail guarda es un <em>hash</em>. No, no la droga. Un <em>hash</em> es un valor derivado de tu contraseña. Con la característica particular que éste sí es irreversible. Esto tiene una parte buena, y una mala: la buena es que no pueden adivinar tu contraseña. La mala es que, matemáticamente hablando, hay infinitos valores que devuelven el mismo <em>hash</em>.</p>
<p>Por dar un ejemplo trivial, supongamos un <em>hash</em> que consiste en asignar un valor (de 1 a 26 &#8212;sin la ñ&#8212;) a cada letra del alfabeto, reemplazar cada letra en la palabra por el valor, y sumarlos. Para &#8220;Tordek&#8221;, sería (20, 15, 18, 4, 5, 11), que da 73.</p>
<p>Entonces, el hash de Tordek es 73, pero a partir de 73 es imposible deducir &#8220;Tordek&#8221;. La suma es conmutativa, así que el orden de las letras es irrelevante. También puedo cambiar letras en grupos, de manera que el cambio se equilibre (ejemplo: T+1 = U, O &#8211; 1 = N, +1 &#8211; 1 = 0), que me da &#8220;Unrdek&#8221;, cuyo <em>hash</em> da igual.</p>
<p>Claro que, un hash de verdad (SHA-1, MD5) es un poco más complicado que eso. Pero el principio es el mismo.</p>
<p>Pero&#8230; con infinitas contraseñas para el mismo valor, ¿no se vuelve trivial encontrar una contraseña con el mismo hash?</p>
<p>No.</p>
<p>Incluso MD5, que ya se considera obsoleto, devuelve valores de 128 bits, 3,4 x 10^38 valores diferentes. Infinito dividido por eso, sigue dando infinito&#8212;pero no podés crear las infinitas contraseñas posibles. Y aunque pudieras, tarda mucho (si creamos cien millones cada segundo, tardamos 3 x 10^30 segundos, casi 10^23 años, y el universo solo tiene 1.4 x 10^10). La probabilidad de encontrar una contraseña que devuelva el mismo hash que otra que conocemos es 2,9 x 10^-39. Muy, muy, muy difícil.</p>
<p>Si somos paranóicos, podemos guardar tanto el MD5 como el SHA1 de una contraseña, y esperar que ambas coincidan, y ahí tenemos 128 + 160 bits. Eso es mucho. En serio. Si además agregamos una sal &#8212;un valor aleatorio, con el proposito de hacer el password todavía más largo (aunque sólo dentro de la base de datos)&#8212; bueno, digamos que lo más fácil es creerme que no se puede.</p>
<p>Por eso están desapareciendo los sitios que te mandan tu password al mail. Si pueden hacer eso, es porque se puede desencriptar (o, peor, ni siquiera se encripta). Y en ese caso sí te pueden &#8216;hackear&#8217;. No confíes en esos sitios.</p>
<p>Entonces, si no te pueden hackear, ¿cómo consiguen tu contraseña?</p>
<p>Ya te dije: se la diste. Ingeniería social es el nombre técnico. Mentir es más fácil.</p>
<p>Varios sitios ofrecen &#8220;exploits&#8221;; uno clásico es el mensaje de «(alguien) te mandó una tarjeta. Ingresá tu contraseña para abrirla.». Es tu culpa si caíste.</p>
<p>La otra es que tenés una &#8220;pregunta de seguridad&#8221; muy fácil. O que tu contraseña lo sea.</p>
<p>Mi contraseña más común tiene 12 caracteres. Algunos números. La saben, al menos, 3 personas. Nunca me robaron nada.</p>
<p>Y como última opción, sí, te pueden &#8220;hackear&#8221; (a vos, no a Hotmail). Mediante dos ataques, principalmente: uno es instalarte un keylogger, un programa que guarda cada tecla que apretás; el otro se llama &#8220;man in the middle&#8221;, que consiste en ocupar alguna máquina ubicada &#8216;en el medio&#8217;, entre vos, y el servidor, como, por ejemplo, el servidor de un cyber.</p>
<p>Hay formas de protegerse de cada uno de estos ataques, y eso queda para la próxima.</p>
<div class='footnotes'>
<div class='footnotedivider'></div>
<ol>
<li id='fn-198-1'>Y, no, no es culpa de Hotmail <span class='footnotereverse'><a href='#fnref-198-1'>&#8617;</a></span></li>
</ol>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.tordek.com.ar/2008/08/no-se-tu-password-pero-podria-averiguarlo/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Contenido y Otras Cosas</title>
		<link>http://blog.tordek.com.ar/2008/06/contenido-y-otras-cosas/</link>
		<comments>http://blog.tordek.com.ar/2008/06/contenido-y-otras-cosas/#comments</comments>
		<pubDate>Mon, 23 Jun 2008 20:01:24 +0000</pubDate>
		<dc:creator>Tordek</dc:creator>
				<category><![CDATA[Meta]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[contenido]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>

		<guid isPermaLink="false">http://blog.tordek.com.ar/?p=166</guid>
		<description><![CDATA[Vuelvo a hablar de Ryan Tomayko. Primero por su post de REST, y ahora por el de diseño. A él lo acompañan James Bennett, y Mark Pilgrim. Los tres artículos discuten el mismo tema: Hay muchas cosas que ponemos en los diseños, que no tienen una verdadera razón para estar ahí. Y si agregamos que [...]]]></description>
			<content:encoded><![CDATA[<p>Vuelvo a hablar de Ryan Tomayko. Primero por su post de REST, y ahora por el de <a href="http://tomayko.com/writings/administrative-debris">diseño</a>. A él lo acompañan <a href="http://www.b-list.org/weblog/2008/jun/15/minimal/">James Bennett</a>, y <a href="http://diveintomark.org/archives/2008/06/21/minimalism">Mark Pilgrim</a>.</p>
<p>Los tres artículos discuten el mismo tema: Hay muchas cosas que ponemos en los diseños, que no tienen una verdadera razón para estar ahí. Y si agregamos que los navegadores modernos pueden ayudar a simplificar, y que esto ayuda con la <abbr class="uttInitialism" title="Search Engine Optimization">SEO</abbr>, no tenemos realmente razones para oponernos.</p>
<p>Citando a Ryan: &#8220;&#8216;Mantengo que la simplicidad es el factor más importante del diseño&#8217;, es lo que digo. A lo que Tufte respondería, &#8216;No, no lo hacés.&#8217;&#8221;.</p>
<p>La simplicidad es el factor más importante del diseño, por eso mi blog tiene esa apariencia, pero el post de Tomayko me hace ver detalles importantes de cosas que son innecesarias en el blog.</p>
<p>Entre ellas:</p>
<ul>
<li>Cajas de búsqueda: Google hace un mejor trabajo que cualquier plugin.</li>
<li>Links a Feeds RSS: Para eso esta el ícono en la barra de navegación.</li>
<li>Links a posts anteriores y siguientes: Raramente tienen algo que ver, y además existen los tags link, con el atributo rel=prev/next</li>
<li>Blogrolls, links a archivos: Igual que arriba.</li>
</ul>
<p>Voy a ir sacando en grupos estas cosas, mientras que voy poniendo más cosas en el <a href="http://tordek.com.ar">dominio base</a>, como ser links a los 10 últimos posts, y algo sobre mis proyectos actuales, supongo.</p>
<p>Ah, eso sí, ningún argumento sobre simplicidad me va a convencer de remover mi header.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.tordek.com.ar/2008/06/contenido-y-otras-cosas/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>IRC</title>
		<link>http://blog.tordek.com.ar/2008/06/irc/</link>
		<comments>http://blog.tordek.com.ar/2008/06/irc/#comments</comments>
		<pubDate>Mon, 09 Jun 2008 05:12:24 +0000</pubDate>
		<dc:creator>Tordek</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[chat]]></category>
		<category><![CDATA[irc]]></category>
		<category><![CDATA[Rol]]></category>

		<guid isPermaLink="false">http://blog.tordek.com.ar/?p=163</guid>
		<description><![CDATA[Hace poco apareció en Reddit un artículo sobre el IRC, y que aún después de 20 años sigue siendo tan útil como cuando apareció. Yo adoro el IRC. Tuve muchas incursiones al mundo del Chat desde chico. Algunas malas (#chaco-corrientes), y algunas geniales (#rol, #la_guarida, #umbría, y tantas otras). Combinado con mi relativo desprecio con [...]]]></description>
			<content:encoded><![CDATA[<p>Hace poco apareció en <a href="http://www.reddit.com/">Reddit</a> un artículo sobre el <abbr class="uttInitialism" title="Internet Relay Chat">IRC</abbr>, y que <a href="http://www.atalasoft.com/cs/blogs/rickm/archive/2008/05/30/20-years-later-irc-is-still-useful-are-you-taking-advantage-of-it.aspx">aún después de 20 años sigue siendo tan útil como cuando apareció</a>.</p>
<p>Yo adoro el <abbr class="uttInitialism" title="Internet Relay Chat">IRC</abbr>. Tuve muchas incursiones al mundo del Chat desde chico. Algunas malas (#chaco-corrientes), y algunas geniales (#rol, #la_guarida, #umbría, y tantas otras). Combinado con mi relativo desprecio con el MSN hace que esté casi constantemente evangelizando su uso.</p>
<p>El <abbr class="uttInitialism" title="Internet Relay Chat">IRC</abbr> es simplemente un protocolo, pero uno genial en lo que hace: Pasar mensajes de un lado a otro.</p>
<p>El problema principal por el que no logro convencer a demasiada gente de que entre, es que, en esta zona, el uso del chat iniciaba así:</p>
<ol>
<li>Bajarse e instalar <a href="http://www.mirc.com">mIRC</a> e <a href="http://www.ircap.net">IRcap</a>;</li>
<li>Entrar en chat.clarin.com (ya muerto);</li>
<li>Entrar a #chaco-corrientes;</li>
<li>Ver dos segundos de líneas constantes, sin sentido, llenas de combinaciones de colores enceguecedoras, recibir mensajes privados de tres hombres (uno de los cuales sigue mandando, a pesar de explicarle que no esta buscando&#8230; algo de&#8230; ese estilo<sup class='footnote'><a href='#fn-163-1' id='fnref-163-1'>1</a></sup>);</li>
<li>Odiar el <abbr class="uttInitialism" title="Internet Relay Chat">IRC</abbr> para siempre.</li>
</ol>
<p>Está claro que tener esa primera impresión no es lo más conductivo a apreciar el <abbr class="uttInitialism" title="Internet Relay Chat">IRC</abbr> y darse cuenta de todo para lo que puede servir.</p>
<p>El momento en que aprendí a dejar de preocuparme y amar al <abbr class="uttInitialism" title="Internet Relay Chat">IRC</abbr>, fue cuando, después de un par de horas de jugar al Baldur&#8217;s Gate 2<sup class='footnote'><a href='#fn-163-2' id='fnref-163-2'>2</a></sup> entré a una página de soluciones, y había un documento con las reglas de AD&amp;D 2da (el sistema en el que el BG2 estaba basado). Ahí conocí el Rol, y eventualmente entré en #rol, en el <a href="http://www.irc-hispano.org"><abbr class="uttInitialism" title="Internet Relay Chat">IRC</abbr>-Hispano</a>, y conocí a varias personas que lo jugaban. Entre ellas, Aixa, una chica de Corrientes, la primera que conocía de la zona.</p>
<p>De ahí puedo partir a dos historias: la del Rol, y la del <abbr class="uttInitialism" title="Internet Relay Chat">IRC</abbr>. La segunda es la más corta, y la relevante: Empecé a conocer gente en el canal, fundé uno (#rolvampiresco &#8212;es lo que nace de conocer como primer juego a Vampiro&#8212;), y empecé a entrar en muchos (entre ellos, #edad-media, #rol, #umbría, #la_guarida, #bajomontaña, #dnd-es, #linux, #c&#8230; y eso sólo en el Hispano).</p>
<p>Las comunidades son amplias, y con cerca de 100 personas por canal (entre los relativamente interesantes, al menos), no es difícil encontrar respuestas a cualquier pregunta que hagamos.</p>
<p>A cualquiera que tenga un rato para probarlo, le recomiendo encontrarse una red (el <a href="http://www.irc-hispano.org"><abbr class="uttInitialism" title="Internet Relay Chat">IRC</abbr>-Hispano</a>, <a href="http://www.efnet.org">EFnet</a>, y <a href="http://www.freenode.net">Freenode</a> &#8212;las dos últimas en inglés&#8212; son las mejores, en mi opinión), visitar un canal de un tema que nos interese, lurkear un rato (esperar en silencio, para aprender las costumbres del canal), leerse las reglas &#8212;si las hay&#8212;, y empezar a conversar. Puedo garantizar a todos los que se animen a entrar, que no se van a arrepentir.</p>
<div class='footnotes'>
<div class='footnotedivider'></div>
<ol>
<li id='fn-163-1'>No es que tenga nada de malo <span class='footnotereverse'><a href='#fnref-163-1'>&#8617;</a></span></li>
<li id='fn-163-2'>Genial juego <span class='footnotereverse'><a href='#fnref-163-2'>&#8617;</a></span></li>
</ol>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.tordek.com.ar/2008/06/irc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Usando CSS: CSS estructural 1</title>
		<link>http://blog.tordek.com.ar/2008/05/usando-css-css-estructural-1/</link>
		<comments>http://blog.tordek.com.ar/2008/05/usando-css-css-estructural-1/#comments</comments>
		<pubDate>Mon, 26 May 2008 04:49:04 +0000</pubDate>
		<dc:creator>Tordek</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[div]]></category>
		<category><![CDATA[estilo]]></category>
		<category><![CDATA[margen]]></category>
		<category><![CDATA[tamaño]]></category>

		<guid isPermaLink="false">http://blog.tordek.com.ar/?p=160</guid>
		<description><![CDATA[Si hiciste todo como te dije en el post anterior, deberías tener una más o menos estructura definida con el HTML &#8212;y más importante: bien definida en tu cabeza&#8212;. Selectores Para que el navegador sepa a qué elementos aplicar un estilo, tiene que saber cómo encontrarlo. Para hacer referencia los elementos mediante sus ids, usamos [...]]]></description>
			<content:encoded><![CDATA[<p>Si hiciste todo como te dije en el post anterior, deberías tener una más o menos estructura definida con el <a href="http://www.w3.org/MarkUp/" class="ubernym uttInitialism"><abbr class="uttInitialism" title="HyperText Markup Language">HTML</abbr></a> &#8212;y más importante: bien definida <em>en tu cabeza</em>&#8212;.</p>
<h3>Selectores</h3>
<p>Para que el navegador sepa a qué elementos aplicar un estilo, tiene que saber cómo encontrarlo.</p>
<p>Para hacer referencia los elementos <em>mediante sus <code>id</code>s</em>, usamos el prefijo <code>#</code>. Un elemento con id header recibe sus estilos de reglas con el nombre <code>#header</code>.</p>
<p>Si queremos hacer referencia a <em>todos los tags de un cierto tipo</em> (por ejemplo, todos los links), usamos simplemente su nombre (en este caso, <code>a</code>).</p>
<p>Y para hacer referencia a <em>todos los descendientes<sup class='footnote'><a href='#fn-160-1' id='fnref-160-1'>1</a></sup> de un elemento</em>, separamos los selectores correspondientes con un espacio. Para elegir a todos los links del menú, usaríamos <code>#menu a</code>.</p>
<p>Y ahora podemos aplicar&#8230;</p>
<h3>Tamaños</h3>
<p>Un <em>elemento de bloque</em>, como <code>div</code>, por defecto, es tan ancho como pueda para llenar su contenedor (su padre), y tan alto como para que todo su contenido quepa.</p>
<p>Para hacer que el cuerpo de nuestro diseño sea más angosto, aplicamos una regla como</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;"><span style="color: #cc00cc;">#cuerpo</span> <span style="color: #00AA00;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span> <span style="color: #933;">500px</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>Si quisieramos definir la altura de un elemento, usaríamos la propiedad height.</p>
<p>Ahora, si quisieramos que nuestra cabecera aparezca centrada, primero le definimos un ancho como antes (el alto no es necesario, por ahora), y para centrar usamos márgenes automáticos. Agregamos las reglas <code>margin-left: auto; margin-right: auto;</code> a las anteriores, y, magia &#8212;excepto en IE&#8212;, ahora tenemos un lindo <code>div</code> centrado.</p>
<p>Pero aunque el <code>div</code> está centrado, el texto en su interior, no. Si quisiéramos eso, bastaría con <code>text-align: center;</code>.</p>
<p>Si usaste un<em> <abbr class="uttInitialism" title="Cascading Style Sheets">CSS</abbr> reset</em>, como recomendé, ahora verás que las cosas están muy pegadas. La solución es fácil: <strong>márgenes</strong>.</p>
<p>La propiedad margin puede tomar entre 1 y 4 argumentos, aunque para hacerlo fácil, vamos con los dos casos extremos: un argumento aplica el mismo margen a los cuatro bordes, y 4 argumentos permiten especificar un valor para cada uno. Igual que antes, simplemente ponemos el selector, seguido por las reglas encerradas entre llaves.</p>
<p>Un par de detalles, antes de dejarlos a la espera del próximo post:</p>
<p><abbr class="uttInitialism" title="Cascading Style Sheets">CSS</abbr> significa &#8220;Hojas de Estilo en Cascada&#8221;, y lo de <em>Cascada</em> significa que si dos reglas se aplican dos veces a un mismo elemento, la última sobreescribe a las anteriores.</p>
<p>Además, hay otras unidades que podemos usar: el em, que (en teoría) es igual al ancho de una M, y a la altura de la fuente es la más común (por ejemplo, para separar los párrafos, lo normal es agregarle un <code>margin-bottom: 1em;</code>). El problema del em es que este <em>depende del tamaño del texto del elemento</em> (que definimos con <code>font-size</code>). Es decir, si le damos un margen de 1em a un texto de 10px de alto, este medirá el doble que un margen de 1em en un texto de 5px de alto.</p>
<p>Y, finalmente, la separación entre <em>cada línea</em> del texto definimos line-height, que no necesita una unidad (si no la tiene, su valor se multiplica por el tamaño del texto). (Valores que quedan bien son entre 1.2 y 1.5 para fuentes <em>sans-serif</em> &#8212;como Verdana&#8212;, y entre 1.4 y 1.7 para fuentes <em>serif</em> &#8212;como Times New Roman&#8212;.)</p>
<div class='footnotes'>
<div class='footnotedivider'></div>
<ol>
<li id='fn-160-1'>No sólo hijos, sino también nietos, bisnietos y demás. <span class='footnotereverse'><a href='#fnref-160-1'>&#8617;</a></span></li>
</ol>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.tordek.com.ar/2008/05/usando-css-css-estructural-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Usando CSS: HTML es para contenido</title>
		<link>http://blog.tordek.com.ar/2008/05/usando-css-html-es-para-contenido/</link>
		<comments>http://blog.tordek.com.ar/2008/05/usando-css-html-es-para-contenido/#comments</comments>
		<pubDate>Mon, 12 May 2008 03:09:12 +0000</pubDate>
		<dc:creator>Tordek</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[markup]]></category>

		<guid isPermaLink="false">http://blog.tordek.com.ar/?p=158</guid>
		<description><![CDATA[Estoy hasta las pelotas de los comentarios de &#8220;Diseñar con CSS es difícil&#8221;. Para hacer un diseño con CSS, hay que entender la separación de contenido y presentación: HTML es para contenido. CSS es para presentación. Es obvio que es imposible que estén absolutamente separados &#8212;para algo están las classes y los ids&#8212; pero hay [...]]]></description>
			<content:encoded><![CDATA[<p>Estoy hasta las pelotas de los comentarios de &#8220;Diseñar con <abbr class="uttInitialism" title="Cascading Style Sheets">CSS</abbr> es difícil&#8221;.</p>
<p>Para hacer un diseño con <abbr class="uttInitialism" title="Cascading Style Sheets">CSS</abbr>, hay que entender la separación de contenido y presentación: <a href="http://www.w3.org/MarkUp/" class="ubernym uttInitialism"><abbr class="uttInitialism" title="HyperText Markup Language">HTML</abbr></a> es para contenido. <abbr class="uttInitialism" title="Cascading Style Sheets">CSS</abbr> es para presentación. Es obvio que es imposible que estén absolutamente separados &#8212;para algo están las <code>class</code>es y los <code>id</code>s&#8212; pero hay que empezar por separar lo que se puede.</p>
<h3>El contenido es Rey</h3>
<p>Empezá por imaginarte que no existe el <abbr class="uttInitialism" title="Cascading Style Sheets">CSS</abbr>, que no existen los atributos style, y que tenes que pagar $100 cada vez que usas una tabla (no, usar tablas no está mal, pero usarlas para lo que no se debe está mal).</p>
<p>Tus tags: h1-h7, p, strong, em, a, ul, ol, li y opcionalmente hr.<sup class='footnote'><a href='#fn-158-1' id='fnref-158-1'>1</a></sup> Poné tus títulos en h1, subtítulos en h2, etc. Cada parrafo envuelto en &lt;p&gt;&lt;/p&gt;. Listas con ul/ol y li. Si querés resaltar una palabra, em o strong. Dado que un menú es una &#8220;lista de links&#8221;, obviamente, usá una lista. Y, obviamente, head y title para el título de la página, body envolviendo todo el contenido, y un html encerrando todo.</p>
<p>Listo. Con eso tendrías que hacer TODA tu página. Hay muy pocas excepciones para esa regla.</p>
<p>Obviamente que no es lo más lindo del mundo. Pero el punto, ahora mismo, no es que sea lindo; es que tenga sentido. Los títulos son títulos porque los envolviste en h1/2/lo que sea, no porque &#8220;tienen una fuente más grande&#8221;. Las cosas marcadas tienen sentido cuando las marcas así. Eso es el HTML: un lenguaje de MARCAS (Markup).</p>
<p>¿Y ahora? Ahora creas tu <abbr class="uttInitialism" title="Cascading Style Sheets">CSS</abbr>.</p>
<h3>Estructurando</h3>
<p>El primer paso es armar tu estructura. Tu página hasta ahora no se presta demasiado para la estructura, así que te presento un nuevo elemento: <code>div</code>. Este elemento sirve para determinar las áreas de tu página: Envolve en divs (uno por seccion) a lo que sea tu encabezado, tu pie, el contenido principal, menúes, etc., mientras a cada uno le ponés el atributo id correspondiente a su sección.<sup class='footnote'><a href='#fn-158-2' id='fnref-158-2'>2</a></sup></p>
<p>Con tus areas definidas, podés empezar a definir la estructura.<sup class='footnote'><a href='#fn-158-3' id='fnref-158-3'>3</a></sup> Y eso queda para el próximo artículo.</p>
<div class='footnotes'>
<div class='footnotedivider'></div>
<ol>
<li id='fn-158-1'>Seguro me olvido de alguno. <span class='footnotereverse'><a href='#fnref-158-1'>&#8617;</a></span></li>
<li id='fn-158-2'><code>div</code> no hace magia. Reducí su uso sólo para donde sea útil y necesario. <span class='footnotereverse'><a href='#fnref-158-2'>&#8617;</a></span></li>
<li id='fn-158-3'>En este momento yo recomendaría mucho usar un <abbr class="uttInitialism" title="Cascading Style Sheets">CSS</abbr> reset, para evitar dolores de cabeza porque los márgenes son cualquiera. <a href="http://meyerweb.com/eric/thoughts/2007/05/01/reset-reloaded/">Reset Reloaded</a>, de Eric Mayer es bueno, pero también toca cosas como el tamaño de los headers, así que ojo. <span class='footnotereverse'><a href='#fnref-158-3'>&#8617;</a></span></li>
</ol>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.tordek.com.ar/2008/05/usando-css-html-es-para-contenido/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>1 de Mayo: Día de la concientizacion de RSS</title>
		<link>http://blog.tordek.com.ar/2008/04/1-de-mayo-dia-de-la-concientizacion-de-rss/</link>
		<comments>http://blog.tordek.com.ar/2008/04/1-de-mayo-dia-de-la-concientizacion-de-rss/#comments</comments>
		<pubDate>Mon, 28 Apr 2008 10:49:17 +0000</pubDate>
		<dc:creator>Tordek</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[suscripcion]]></category>

		<guid isPermaLink="false">http://blog.tordek.com.ar/?p=156</guid>
		<description><![CDATA[DailyBlogTips nos informa que sólo cerca del 5% de la gente que usa Internet usa lectores RSS1 para sus noticias, y propone postear en nuestros blogs (entre otras cosas) para informar a la gente ed los beneficios de usar lectores RSS. Mis lectores (los dos) sabrán que hice algunos posts sobre el tema (algunos más [...]]]></description>
			<content:encoded><![CDATA[<p><strong>DailyBlogTips</strong> nos informa que sólo <a href="http://www.dailyblogtips.com/may-1st-rss-awareness-day-get-involved/">cerca del 5% de la gente que usa Internet usa lectores <abbr class="uttInitialism" title="Really Simple Syndication">RSS</abbr></a><sup class='footnote'><a href='#fn-156-1' id='fnref-156-1'>1</a></sup> para sus noticias, y propone postear en nuestros blogs (entre otras cosas) para informar a la gente ed los beneficios de usar lectores <abbr class="uttInitialism" title="Really Simple Syndication">RSS</abbr>.</p>
<p>Mis lectores (los dos) sabrán que hice algunos <a href="http://blog.tordek.com.ar/2007/06/blogs-links-y-rss/">posts</a> <a href="http://blog.tordek.com.ar/2007/06/imagen-del-feed/">sobre</a> el tema (algunos más relacionados que <a href="http://blog.tordek.com.ar/2007/12/mi-feed-rss/">otros</a>), y que soy más o menos vicioso (tengo 87 suscripciones en Google Reader).</p>
<p><strong>DBT</strong> también está preparando un sitio específicamente para el proyecto: <a href="http://rssday.org/">RSSDay.org</a></p>
<p>Aparte de los que me leen obligados desde CodeAr, ¿Cuantos de uds usan <abbr class="uttInitialism" title="Really Simple Syndication">RSS</abbr>, y publican su contenido (puntos extra si no son blogs) con <abbr class="uttInitialism" title="Really Simple Syndication">RSS</abbr>?</p>
<div class='footnotes'>
<div class='footnotedivider'></div>
<ol>
<li id='fn-156-1'>Según reporta FeedBurner, al menos <span class='footnotereverse'><a href='#fnref-156-1'>&#8617;</a></span></li>
</ol>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.tordek.com.ar/2008/04/1-de-mayo-dia-de-la-concientizacion-de-rss/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Optimizar WordPress para posicionamiento</title>
		<link>http://blog.tordek.com.ar/2008/04/optimizar-wordpress-para-posicionamiento/</link>
		<comments>http://blog.tordek.com.ar/2008/04/optimizar-wordpress-para-posicionamiento/#comments</comments>
		<pubDate>Tue, 08 Apr 2008 00:56:01 +0000</pubDate>
		<dc:creator>Tordek</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Add new tag]]></category>
		<category><![CDATA[posicionamiento]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wp]]></category>

		<guid isPermaLink="false">http://blog.tordek.com.ar/?p=152</guid>
		<description><![CDATA[La duplicación de contenido es uno de los problemas más grandes para el posicionamiento. En un blog en WordPress default, esto es muy notable, porque el contenido de cada post se encuentra en varias páginas: en la principal, en la página individual de ese post, y en cada página de archivo por fecha, categoría, o [...]]]></description>
			<content:encoded><![CDATA[<p>La duplicación de contenido es uno de los problemas más grandes para el posicionamiento.</p>
<p>En un blog en WordPress <em>default</em>, esto es muy notable, porque el contenido de cada post se encuentra en varias páginas: en la principal, en la página individual de ese post, y en cada página de archivo por fecha, categoría, o tag que corresponda a ese post. Yo pongo muchos tags, y una o dos categorías por post; esos son <strong>de 6 a 10 copias del mismo contenido</strong>.</p>
<p>Esta repetición causa varias cosas: por un lado, los buscadores no saben cuales son las páginas más correctas, y puede mandar a cualquiera en la que aparece el post. Por el otro, algunos dicen, que el contenido se repita tanto se ve un poco spammer y la posición empeora.</p>
<p>Para los que pueden acceder a su hosting (mediante <em>ftp</em>, <em>ssh</em>, etc.), lo primero es hacer un robots.txt que contenga lo siguiente:</p>
<p><code>User-agent: *<br />
Disallow: /wp-admin/<br />
Disallow: /wp-content/plugins/<br />
Disallow: /wp-content/themes/<br />
Disallow: /wp-includes/<br />
Disallow: /category/<br />
Disallow: /tag/<br />
Disallow: /feed/</code></p>
<p><strong>OJO</strong>: algunas de esas líneas pueden cambiar según el blog, según el directorio que uses para las categorías y los tags.</p>
<p>Esto, claro, asumiendo algo obvio: tenés activados los permalinks con un formato &#8220;lindo&#8221;. Yo uso la fecha seguida del título de post, pero en <strong><a href="http://www.dotateca.com.ar/">DotAteca</a></strong> pongo la categoría seguida del título, dándole una apariencia más jerarquizada. (Esto, para los motores, es irrelevante, pero para los usuarios es muy útil.)</p>
<p>También sirve modificar el archivo header.php de nuestro diseño, y agregar la línea</p>
<p><code lang="php">&lt;? if(is_archive()) { ?&gt;&lt;meta name="robots" content="noindex,follow" /&gt;&lt;?} ?&gt;</code></p>
<p>dentro del elemento <code>head</code>, para que las páginas de archivo no aparezcan en los buscadores (aunque sí sigan sus links).</p>
<p>Y una última mejora, que muchos dicen es muy importante, es acostumbrarse a usar el tag <code>&lt;!--more--&gt;</code> después de uno o dos párrafos de apertura, para que en la página principal sólo aparezcan fragmentos de los posts.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.tordek.com.ar/2008/04/optimizar-wordpress-para-posicionamiento/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Blogs y comentarios</title>
		<link>http://blog.tordek.com.ar/2008/03/blogs-y-comentarios/</link>
		<comments>http://blog.tordek.com.ar/2008/03/blogs-y-comentarios/#comments</comments>
		<pubDate>Mon, 31 Mar 2008 07:53:23 +0000</pubDate>
		<dc:creator>Tordek</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[blogs]]></category>
		<category><![CDATA[comentarios]]></category>
		<category><![CDATA[comunidad]]></category>
		<category><![CDATA[online]]></category>

		<guid isPermaLink="false">http://blog.tordek.com.ar/?p=145</guid>
		<description><![CDATA[El otro día en el feed del codear vi un post de algún blog, y como me pareció interesante quise comentar&#8230; pero este blog no tiene espacio para comentarios. Yo tengo el blog para &#8220;hacer sociedad&#8221;, conocer gente de este mundo que nos encanta pero en el que en mi zona estoy prácticamente solo (si [...]]]></description>
			<content:encoded><![CDATA[<p>El otro día en el feed del codear vi un post de algún blog, y como me pareció interesante quise comentar&#8230; pero este blog no tiene espacio para comentarios.</p>
<p>Yo tengo el blog para &#8220;hacer sociedad&#8221;, conocer gente de este mundo que nos encanta pero en el que en mi zona estoy prácticamente solo (si alguien vive en Resistencia, que me pegue un grito), y ver un blog sin comentarios es como&#8230; no sé, una PC sin disco rígido&#8230; funca, pero me limita demasiado.</p>
<p>Para mi, un blog tiene que tener comentario, y adoro los comentarios; me da bronca cuando no los recibo&#8230; ¿Ustedes?</p>
<p>P.D.: Estoy probando publicar con fechas futuras, para esos días en que la inspiración me pega y escribo más de un post&#8230;</p>
<p>Edit: WTF El spam me hijackea los posts&#8230; si ven en otros, avísenme.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.tordek.com.ar/2008/03/blogs-y-comentarios/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Como le expliqué REST a mi esposa</title>
		<link>http://blog.tordek.com.ar/2008/03/como-le-explique-rest-a-mi-esposa/</link>
		<comments>http://blog.tordek.com.ar/2008/03/como-le-explique-rest-a-mi-esposa/#comments</comments>
		<pubDate>Sat, 22 Mar 2008 12:12:01 +0000</pubDate>
		<dc:creator>Tordek</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[roy fielding]]></category>
		<category><![CDATA[web service]]></category>
		<category><![CDATA[ws]]></category>

		<guid isPermaLink="false">http://blog.tordek.com.ar/2008/03/como-le-explique-rest-a-mi-esposa/</guid>
		<description><![CDATA[En realidad, cómo Ryan Tomayko le explicó REST a su esposa&#8230; Yo solo lo traduje. Esposa: ¿Quién es Roy Fielding? Ryan: Un tipo. Es inteligente. Esposa: ¿En serio? ¿Qué hizo? Ryan: Ayudó a escribir los primeros servidores web, y después hizo un montón de investigaciones, explicando por qué la web funciona como funciona. Su nombre [...]]]></description>
			<content:encoded><![CDATA[<p>En realidad, <a href="http://tomayko.com/writings/rest-to-my-wife">cómo Ryan Tomayko le explicó REST a su esposa</a>&#8230; Yo solo lo traduje.</p>
<p><strong>Esposa:</strong> ¿Quién es <a href="http://www.ics.uci.edu/~fielding/">Roy Fielding</a>?</p>
<p><strong>Ryan:</strong> Un tipo. Es inteligente.</p>
<p><strong>Esposa:</strong> ¿En serio? ¿Qué hizo?</p>
<p><strong>Ryan:</strong> <a href="http://1997.webhistory.org/www.lists/www-talk.1994q2/1072.html">Ayudó a escribir los primeros servidores web</a>, y después <a href="http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm">hizo un montón de investigaciones</a>, explicando por qué la web funciona como funciona. <a href="http://www.w3.org/Protocols/rfc2616/rfc2616.html">Su nombre aparece en la especificación</a> del protocolo que se usa para pasar páginas de los servidores a tu navegador.</p>
<p><strong>Esposa:</strong> ¿Cómo funciona?</p>
<p><strong>Ryan:</strong> ¿La web?</p>
<p><strong>Esposa:</strong> Sí.</p>
<p><strong>Ryan:</strong> Eh&#8230; es todo bastante sorprendente, realmente. Y lo gracioso es que está muy subestimado. El protocolo del que estaba hablando, <abbr class="uttInitialism" title="HyperText Transfer Protocol">HTTP</abbr>, es capaz de un montónazo de cosas que la gente ignora por algún motivo.</p>
<p><strong>Esposa:</strong> ¿http como lo que escribo en la dirección en el navegador?</p>
<p><strong>Ryan:</strong> Sí. La primera parte le dice al navegador qué protocolo usar. Eso que escribís ahí es uno de los descubrimientos más importantes en la historia de la computación.</p>
<p><strong>Esposa:</strong> ¿Por qué?</p>
<p><strong>Ryan:</strong> Porque puede describir la ubicación de algo en cualquier lugar del mundo, desde cualquier lugar del mundo. Es la base de la web. Podrías decir que son las coordenadas GPS del conocimiento y la información.</p>
<p><strong>Esposa:</strong> ¿Para páginas web?</p>
<p><strong>Ryan:</strong> Para cualquier cosa, realmente. Ese tipo, Roy Fielding, habla mucho acerca de a qué apuntan esas cosas en la investigación que te dije. La web está armada en un estilo arquitectural llamado <a href="http://en.wikipedia.org/wiki/Representational_State_Transfer">REST</a>. REST provee una definición de un recurso, que es a lo que apuntan esas cosas.</p>
<p><strong>Esposa:</strong> ¿Una página web es un recurso?</p>
<p><strong>Ryan:</strong> Casi. Una página es una representación de un recurso. Los recursos son solo conceptos. Las URLs&#8212;eso que escribís en el navegador…</p>
<p><strong>Esposa:</strong> Sé lo que es una <abbr class="uttInitialism" title="Uniform Resource Locator">URL</abbr>&#8230;</p>
<p><strong>Ryan:</strong> Ah, cierto. Eso le dice al navegador que hay un concepto en algún lado. Un navegador puede, entonces, pedir una representación específica del concepto. Específicamente, un navegador pide la representación de página web de ese concepto.</p>
<p><strong>Esposa:</strong> ¿Qué otros tipos de representación hay?</p>
<p><strong>Ryan:</strong> Realmente, las representaciones son una de esas cosas que no se usan tanto. En la mayoría de los casos, un recurso tiene una única representación. Pero esperamos que las representaciones se usen más en el futuro, porque hay un montón de formatos nuevos apareciendo por todos lados.</p>
<p><strong>Esposa:</strong> ¿Por ejemplo?</p>
<p><strong>Ryan:</strong> Mmm&#8230; Bueno, está este concepto que la gente llama Servicios Web. Significa un montón de cosas diferentes a un montón de gente diferente, pero el concepto básico es que las máquinas pueden usar la web igual que la gente.</p>
<p><strong>Esposa:</strong> ¿Esto es otra de esas cosas de robots?</p>
<p><strong>Ryan:</strong> No, no realmente. No quiero decir que las máquinas se van a sentar en el escritorio y navegar la web, pero las computadoras podrían usar esos protocolos para mandarse mensajes las unas a las otras. Hemos estado haciendo eso por mucho tiempo, pero ninguna de las técnicas que usamos hoy en día funcionan bien cuando necesitas hablar a todas las computadoras en todo el mundo.</p>
<p><strong>Esposa:</strong> ¿Por qué?</p>
<p><strong>Ryan:</strong> Porque no fueron diseñados para usarse así. Cuando Fielding y sus amigos empezaron a armar la web, poder hablar con cualquier máquina en cualquier lugar del mundo era de suma importancia. La mayoría de las técnicas que usamos en el trabajo para hacer que las computadoras se hablen entre sí no tenían esos requerimientos; sólo necesitabas hablar con un pequeño grupo de computadoras.</p>
<p><strong>Esposa:</strong> ¿Y ahora necesitas hablar con todas las máquinas?</p>
<p><strong>Ryan:</strong> Sí, y más. Necesitamos ser capaces de hablar con todas las máquinas acerca de todas las cosas que están en todas las otras máquinas. Necesitamos una forma de hacer que una máquina le diga a otra acerca de un recurso que puede estar en una tercera máquina.</p>
<p><strong>Esposa:</strong> ¿Qué?</p>
<p><strong>Ryan:</strong> Imaginate que estás hablando con tu hermana, y ella te pide prestada tu escoba o algo, pero vos no la tenés, la tiene tu mamá. Entonces le decís a tu hermana que se la pida a ella. Esto pasa todo el tiempo en la vida real, y pasa todo el tiempo cuando las computadoras empiezan a hablar también.</p>
<p><strong>Esposa:</strong> ¿Y cómo se dicen las computadoras dónde están las cosas?</p>
<p><strong>Ryan:</strong> La <abbr class="uttInitialism" title="Uniform Resource Locator">URL</abbr>, claro. Si todo sobre lo que las máquinas necesitan hablar tiene una <abbr class="uttInitialism" title="Uniform Resource Locator">URL</abbr> asociada, creaste el equivalente para una máquina de un sustantivo. Que vos y yo y el resto del mundo nos pongamos de acuerdo en hablar sobre sustantivos de una cierta manera es bastante importante, ¿no?</p>
<p><strong>Esposa:</strong> Sí.</p>
<p><strong>Ryan:</strong> Las máquinas no tienen un sustantivo universal; por eso son un asco. Cada lenguaje de programación, base de datos, u otro tipo de sistemas tiene una forma distinta de hablar de sustantivos. Por eso la <abbr class="uttInitialism" title="Uniform Resource Locator">URL</abbr> es tan importante; permite a todos estos sistemas hablar entre sí acerca de sus sustantivos.</p>
<p><strong>Esposa:</strong> Pero cuando estoy navegando, no pienso en eso.</p>
<p><strong>Ryan:</strong> Nadie lo hace. Excepto Fielding y un puñado de otras personas. Por eso las máquinas siguen siendo un asco.</p>
<p><strong>Esposa:</strong> ¿Y qué de verbos y pronombres y adjetivos?</p>
<p><strong>Ryan:</strong> Gracioso que preguntes, porque ese es otro gran aspecto del REST. Bueno, al menos los verbos.</p>
<p><strong>Esposa:</strong> Era un chiste.</p>
<p><strong>Ryan:</strong> Era un chiste gracioso, pero realmente no era un chiste. Los verbos son importantes. Hay un concepto poderoso en programación y la teoría ciencia de la computación llamado polimorfismo. Es una forma geek de decir que el mismo verbo se puede aplicar a diferentes sustantivos.</p>
<p><strong>Esposa:</strong> No entiendo.</p>
<p><strong>Ryan:</strong> Bueno&#8230; mirá la mesa. ¿Cuales son los sustantivos? Taza, bandeja, diario, control remoto. Ahora, ¿Qué son algunas de las cosas que podés hacer con todas esas cosas?</p>
<p><strong>Esposa:</strong> No la agarro&#8230; [N.d.T.: Soy un capo con los juegos de palabras (?)]</p>
<p><strong>Ryan:</strong> Podés agarrarlos, ¿ciero? Podes levantarlos, podés tumbarlos, podés quemarlos. Podés usar esos verbos exactamente en cualquiera de los objetos de ahí. [N.d.T: Está difícil tumbar un diario, pero... bueno.]</p>
<p><strong>Esposa:</strong> Bueno&#8230; ¿y?</p>
<p><strong>Ryan:</strong> Bueno, eso es importante. ¿Qué si en vez de poder pedirte “agarrá la taza” y “agarrá el diario” y “agarrá el control remoto” tuviera que usar un verbo distinto para cada sustantivo? No podría usar la palabra “agarrar” universalmente, sino que tendría que pensar en una nueva para cada combinación de verbo y sustantivo.</p>
<p><strong>Esposa:</strong> ¡Guau! ¡Eso es raro!</p>
<p><strong>Ryan:</strong> Sí, lo es. Nuestros cerebros son de alguna manera suficientemente inteligentes como para saber que los mismos verbos pueden aplicarse a muchos sustantivos diferentes. Por ejemplo, no puedo conducir una taza ni beber un auto, pero algunos verbos son casi universales, como <code>GET</code> [agarrar/pedir], <code>PUT</code> [poner], y <code>DELETE</code> [borrar].</p>
<p><strong>Esposa:</strong> No podés borrar una taza&#8230;</p>
<p><strong>Ryan:</strong> Bueno, claro, pero la podés tirar a la basura. ¿Ese era otro chiste, no?</p>
<p><strong>Esposa:</strong> Sip.</p>
<p><strong>Ryan:</strong> Entonces, <abbr class="uttInitialism" title="HyperText Transfer Protocol">HTTP</abbr> &#8212;este protocolo que Fielding y sus amigos crearon&#8212; es todo acerca de aplicar verbos a sustantivos. Por ejemplo, cuando entrás en una página, el nevegador hace un <abbr class="uttInitialism" title="HyperText Transfer Protocol">HTTP</abbr> <code>GET</code> en la <abbr class="uttInitialism" title="Uniform Resource Locator">URL</abbr> que escribís, y lo que vuelve es una página web</p>
<p>Las páginas web suelen tener imágenes, ¿no? Esos son recursos separados. La página sólo especifica las URLs a las imágenes y el navegador hace más <abbr class="uttInitialism" title="HyperText Transfer Protocol">HTTP</abbr> GET en ellas hasta que todos los recursos se obtienen y se muestra la página. Pero lo importante acá es que sustantivos muy diferentes pueden ser tratados de la misma manera. Sea el sustantivo una imagen, texto, video, un MP3, una presentación de diapositivas, o lo que sea, puedo obtener con <code>GET</code> todas esas páginas de la misma forma, dada una <abbr class="uttInitialism" title="Uniform Resource Locator">URL</abbr>.</p>
<p><strong>Esposa:</strong> Parece que <code>GET</code> es un verbo importante.</p>
<p><strong>Ryan:</strong> Lo es. Especialmente cuando usas un navegador, porque los navegadores más que nada solo piden las cosas. No hacen muchas otras interacciones con los recursos. Esto es un problema, porque hizo que mucha gente asuma que <abbr class="uttInitialism" title="HyperText Transfer Protocol">HTTP</abbr> es solo para lectura. Pero <abbr class="uttInitialism" title="HyperText Transfer Protocol">HTTP</abbr> es en realidad un protocolo de propósito general para aplicar verbos a sustantivos.</p>
<p><strong>Esposa:</strong> Lindo. Pero sigo sin ver cómo esto cambia nada. ¿Qué tipo de sustantivos y verbos querés?</p>
<p><strong>Ryan:</strong> Bueno, los sustantivos están ahí, pero no en el formato apropiado.</p>
<p>Imaginate cuando estabas navegando en amazon.com buscando cosas para comprarme para navidad. Imaginate que cada producto es un sustantivo. Ahora, si estuvieran disponibles en una representación que una máquina pudiera entender, podrías hacer un montón de cosas interesantes.</p>
<p><strong>Esposa:</strong> ¿Por qué una máquina no entiende una página web normal?</p>
<p><strong>Ryan:</strong> Porque las páginas web están diseñadas para ser comprendidas por la gente. A una máquina no le importa la disposición y el estilo del contenido. Las máquinas básicamente sólo necesitan los datos. Idealmente, todas las URLs deberían tener una representación legible por humanos, y otra para máquinas. Cuando un navegador hace <code>GET</code> para pedir un recurso para un humano, pedirá la legible por humanos.</p>
<p><strong>Esposa:</strong> Entonces. ¿Todos tendría que hacer formatos máquina de todas sus páginas?</p>
<p><strong>Ryan:</strong> Si fuera valuable.</p>
<p>Mirá, estuvimos hablando de esto con un montón de abstracción. ¿Qué tal si tomamos un ejemplo real? Sos una maestra. En una escuela, me imagino que tendrás un gran sistema informático, o tres o cuatro sistemas, más seguramente, que te dejan manejar a tus estudiantes: en qué clases están, qué notas tienen, contactos de emergencia, información acerca de los libros que usás en el aula, etcétera. Si los sistemas están basados en web, probablemente hay una <abbr class="uttInitialism" title="Uniform Resource Locator">URL</abbr> para cada uno de los sustantivos involucrados: alumno, maestro, clase, libro, aula, etcétera. Ahora mismo, pedir la <abbr class="uttInitialism" title="Uniform Resource Locator">URL</abbr> mediante un navegador te devuelve una página web. Si hubiera una representación legible por la máquina para cada <abbr class="uttInitialism" title="Uniform Resource Locator">URL</abbr> sería trivial agregar nuevas herramientas al sistema, porque toda esa información sería consumible de forma estándar. También haría bastante más fácil que cada sistema se hable entre sí. O, podrías construir un sistema estatal o nacional que pueda hablar con cada uno de los sistemas escolares para obtener las calificaciones de las pruebas. Las posibilidades son ilimitadas.</p>
<p>Cada sistema obtendría información de los demás usando un simple <abbr class="uttInitialism" title="HyperText Transfer Protocol">HTTP</abbr> <code>GET</code>. Si un sistema necesitara agregar algo a otro, usaría <abbr class="uttInitialism" title="HyperText Transfer Protocol">HTTP</abbr> <code>POST</code>. Si quisiera actualizar algo, usaría <abbr class="uttInitialism" title="HyperText Transfer Protocol">HTTP</abbr> <code>PUT</code>. Lo único que falta averiguar es qué forma tienen los datos.</p>
<p><strong>Esposa:</strong> ¿Entonces en esto es lo que vos y toda la gente de computadoras está trabajando? ¿Decidir la forma que los datos deberían tener?</p>
<p><strong>Ryan:</strong> Desgraciadamente, no. Por el contrario, la mayoría está trabajando escribiendo capas de especificaciones complejas para hacer cosas de una forma diferente que no es ni remotamente tan útil o elocuente. Los sustantivos no son universales ni los verbos polimórficos. Estamos tirando a la basura décadas de cosas que de verdad se usan y técnicas demostradas, y empezando de nuevo con algo que se parece mucho a otros sistemas que fallaron en el pasado. Usamos <abbr class="uttInitialism" title="HyperText Transfer Protocol">HTTP</abbr>, pero sólo porque nos ayuda a hablar menos con los encargados de redes y seguridad. Cambiamos simplicidad por herramientas llamativas y diseñadores automáticos.</p>
<p><strong>Esposa:</strong> ¿Por qué?</p>
<p><strong>Ryan:</strong> No tengo idea.</p>
<p><strong>Esposa:</strong> ¿Por qué no decís algo?</p>
<p><strong>Ryan:</strong> Quizá lo haga.</p>
<p>De paso, los N.d.T. no son &#8220;Nota del Traductor&#8221;, sino &#8220;Nota del Tordek&#8221;.</p>
<p><a href="http://tomayko.com/writings/rest-to-my-wife">Original</a> [<a href="http://www.reddit.com">Via</a>]</p>]]></content:encoded>
			<wfw:commentRss>http://blog.tordek.com.ar/2008/03/como-le-explique-rest-a-mi-esposa/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>¿Se puede arreglar el RSS?</title>
		<link>http://blog.tordek.com.ar/2007/09/%c2%bfse-puede-arreglar-el-rss/</link>
		<comments>http://blog.tordek.com.ar/2007/09/%c2%bfse-puede-arreglar-el-rss/#comments</comments>
		<pubDate>Fri, 28 Sep 2007 06:50:50 +0000</pubDate>
		<dc:creator>Tordek</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[blogs]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[rss]]></category>

		<guid isPermaLink="false">http://blog.tordek.com.ar/2007/09/%c2%bfse-puede-arreglar-el-rss/</guid>
		<description><![CDATA[Hace poco leí un artículo en Reddit (y ni me acuedo del link) que decía que el RSS nació para arreglar un problema que nunca existió, y crear otro en su lugar: desperdiciar ancho de banda. Según dice, demasiado tráfico se desperdicia por el hecho de que, como la Internet es anónima, &#8220;Suscribirse&#8221; a un [...]]]></description>
			<content:encoded><![CDATA[<p>Hace poco leí un artículo en Reddit (y ni me acuedo del link) que decía que el <abbr class="uttInitialism" title="Really Simple Syndication">RSS</abbr> nació para arreglar un problema que nunca existió, y crear otro en su lugar: desperdiciar ancho de banda.</p>
<p>Según dice, demasiado tráfico se desperdicia por el hecho de que, como la Internet es anónima,  &#8220;Suscribirse&#8221; a un <abbr class="uttInitialism" title="Really Simple Syndication">RSS</abbr> NO ES suscribirse a un <abbr class="uttInitialism" title="Really Simple Syndication">RSS</abbr>. Suscribirse quiere decir que alguien te lo manda, pero al <abbr class="uttInitialism" title="Really Simple Syndication">RSS</abbr> se lo pide. (Hay algo para decir con respecto a los &#8220;pings&#8221; sobre esto, pero no viene al caso.)</p>
<p>Entonces, cada 2 minutos, alguien hace click en su botón de actualizar, y manda varios paquetes a todas las URLs donde está &#8220;suscrito&#8221;. Cada una procede, entonces, a mandarle sus últimos 10 posts, que, digamos, son de 1kB cada uno. 10kB * 10 posts * 50 URLs * 1000000 de usuarios, y se nota para donde va esto.</p>
<p>En uno de mis momentos de ideas repentinas (estúpidas e inútiles, casi siempre, pero repentinas), pensé: Y&#8230; ¿por qué no mandar una simple cadena: un GET del tipo <code>?latestpost=1190961528</code>.  Si no está, bueno, se mandan los 10 posts. No arreglamos nada, pero al menos no rompemos nada. Es compatible con lo que ya existe&#8230; ¿Y si está? y si está, simple: <code>$query .= " WHERE date &gt;". date("Y-m-d",$GET['latestpost']);</code>.</p>
<p>Supongamos que ponemos eso en nuestro feed RSS:</p>
<p>Ventajas: ahorrar ancho de banda (asumiendo que alguien lo aplique).</p>
<p>Desventajas potenciales:</p>
<ul>
<li>Seguridad:  el date() solo va a morirse si la cadena llega a tener algo más que números&#8230; y si no? /[^0-9]/.</li>
<li>Tiempo de procesador: dos palabras: Un. If.</li>
<li>Retraso en el acceso a la base de datos: Idem: Un. Where.</li>
<li>Pedir una fecha demasiado vieja: Uhm&#8230; LIMIT?</li>
</ul>
<p>¿Y del lado de los clientes <abbr class="uttInitialism" title="Really Simple Syndication">RSS</abbr>? Para aplicar, lo único que tienen que guardar es la fecha del último post recibido&#8230;</p>
<p>La verdad que esto es tan estúpido que, si no existe ya, guau&#8230; y si existe&#8230; ¿por qué el problema de &#8220;mucho ancho de banda&#8221;?</p>]]></content:encoded>
			<wfw:commentRss>http://blog.tordek.com.ar/2007/09/%c2%bfse-puede-arreglar-el-rss/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

