<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>BFG Blog</title>
	<atom:link href="http://thinkcorrectly.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://thinkcorrectly.wordpress.com</link>
	<description>Manuales y tutoriales del mundo GNU/Linux, Analisis de juegos, anecdotas, y cosas mas o menos interesantes que me pasen.</description>
	<lastBuildDate>Tue, 10 Jan 2012 01:45:56 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='thinkcorrectly.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>BFG Blog</title>
		<link>http://thinkcorrectly.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://thinkcorrectly.wordpress.com/osd.xml" title="BFG Blog" />
	<atom:link rel='hub' href='http://thinkcorrectly.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Introducción a AJAX</title>
		<link>http://thinkcorrectly.wordpress.com/2009/06/28/introduccion-a-ajax/</link>
		<comments>http://thinkcorrectly.wordpress.com/2009/06/28/introduccion-a-ajax/#comments</comments>
		<pubDate>Sun, 28 Jun 2009 17:47:08 +0000</pubDate>
		<dc:creator>BerfengeR</dc:creator>
				<category><![CDATA[Articulos]]></category>

		<guid isPermaLink="false">http://thinkcorrectly.wordpress.com/?p=134</guid>
		<description><![CDATA[En posts anteriores hemos visto una introducción a JQuery, un framework reducido de Javascript, y ahora profundizaremos un poco mas en este campo, de forma que podamos crear aplicaciones más ricas con AJAX. AJAX (Asynchronous JavaScript And XML) nos propone una técnica de desarrollo web basada en el cambio de contenido de las páginas de [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thinkcorrectly.wordpress.com&amp;blog=4231698&amp;post=134&amp;subd=thinkcorrectly&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>En posts anteriores hemos visto una introducción a JQuery, un framework reducido de Javascript, y ahora profundizaremos un poco mas en este campo, de forma que podamos crear aplicaciones más ricas con AJAX.</p>
<p>AJAX (Asynchronous JavaScript And XML) nos propone una técnica de desarrollo web basada en el cambio de contenido de las páginas de forma asíncrona, sin necesidad de recargarlas, lo que reduce el trafico con el servidor y nos permite crear aplicaciones interactivas en las que potenciaremos la velocidad y usabilidad de las mismas. La interfaz de estas aplicaciones se ejecutará integramente en el navegador del usuario, de manera que tan solo se comunicará con el servidor para enviar y obtener nueva información.<span id="more-134"></span></p>
<p>Para ello dispondremos de los siguientes elementos:</p>
<ul>
<li>(X)HTML + CSS</li>
<li>Lenguaje interpretado: típicamente Javascript.</li>
<li>Lenguaje de marcas: XML</li>
<li>Interfaz de comunicación asíncrona: XMLHttpRequest</li>
</ul>
<p>El funcionamiento de todo esto es muy simple: cuando se den las circustancias adecuadas o el usuario genere un evento concreto, se enviará una petición HTTP estandar al servidor de manera asíncrona, y cuando tengamos dicha información la procesaremos y pasaremos a actualizar la interfaz como corresponda.</p>
<p>Esto se ve mas claro en el siguiente gráfico:</p>
<div id="attachment_135" class="wp-caption aligncenter" style="width: 520px"><a href="http://EsquemadellamadasAJAX"><img class="size-full wp-image-135" title="ajax1" src="http://thinkcorrectly.files.wordpress.com/2009/06/ajax1.png?w=510&#038;h=162" alt="Esquema de llamadas AJAX" width="510" height="162" /></a><p class="wp-caption-text">Esquema de llamadas AJAX</p></div>
<p>Además, debido a que muchas de estas llamadas se realizan para obtener información actualizada en tiempo real o recoger eventos que ocurrieron en la parte del servidor, deberemos escoger una estrategia adecuada que nos permita tener la información de la aplicación lo mas actualizada posible. Para ello disponemos de 3 estrategias diferentes en cuanto a como y cuando hacer estas llamadas:</p>
<h4>1.- Polling</h4>
<div id="attachment_137" class="wp-caption aligncenter" style="width: 354px"><img class="size-full wp-image-137" title="ajax_polling" src="http://thinkcorrectly.files.wordpress.com/2009/06/ajax_polling1.png?w=510" alt="AJAX: Polling"   /><p class="wp-caption-text">AJAX: Polling</p></div>
<p>Se realizará una petición y el servidor responderá al momento, haya o no haya datos nuevos a aportar. Si se produce un evento en el servidor que provoque que se deba enviar nueva información, el envío de la misma deberá esperar hasta que al cliente AJAX (navegador del usuario) quiera actualizarla, con lo cual se perderá tiempo y se perderá el concepto de tiempo real.</p>
<h4>2.- Long Polling</h4>
<div id="attachment_138" class="wp-caption aligncenter" style="width: 354px"><img class="size-full wp-image-138" title="ajax_long_polling" src="http://thinkcorrectly.files.wordpress.com/2009/06/ajax_long_polling.png?w=510" alt="AJAX: Long Polling"   /><p class="wp-caption-text">AJAX: Long Polling</p></div>
<p>En este caso, al contrario que en el polling simple, el servidor no responderá a la petición hasta que tenga algo que enviar y, en cuanto el navegador reciba dicha respuesta, mandará de nuevo otra petición cuya respuesta esperará a que haya un evento que enviar.</p>
<h4>3.- HTTP Streming (Push)</h4>
<div id="attachment_139" class="wp-caption aligncenter" style="width: 357px"><img class="size-full wp-image-139" title="ajax_http_stream" src="http://thinkcorrectly.files.wordpress.com/2009/06/ajax_http_stream.png?w=510" alt="AJAX: HTTP Streaming"   /><p class="wp-caption-text">AJAX: HTTP Streaming</p></div>
<p>Por último tenemos el llamado HTTP Streaming, en el que abriremos al inicio una conexión enviando una petición y posteriormente iremos recibiendo datos según los vaya generando el servidor, sin necesidad de cerrar la conexión. Esta es la principal diferencia con long polling, en la primera se abre y se cierra una conexión por cada comunicación con el servidor, al contrario que en HTTP Streming donde la primera conexión se reutiliza para enviar los datos a lo largo de toda la sesión. Al mantener la conexión abierta reduciremos el retardo entre la generación del evento y la llegada del mismo a la interfaz, pero por otra parte podemos colapsar el cliente si la información a recibir es muy voluminosa, lo que provocará que la información no se pueda actualizar en tiempo real, con lo cual perdemos la ventaja de la baja latencia.</p>
<p>Por norma general usaremos Polling cuando queramos actualizar la interfaz si no importa que haya un retardo y no sea en tiempo real, y usaremos Long Polling o HTTP Streaming en caso de que queramos información actualizada al momento.</p>
<p>Nada mas por hoy. Proximamente volveré con un breve tutorial de AJAX con JQuery.<br />
Hasta entonces.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thinkcorrectly.wordpress.com/134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thinkcorrectly.wordpress.com/134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thinkcorrectly.wordpress.com/134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thinkcorrectly.wordpress.com/134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thinkcorrectly.wordpress.com/134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thinkcorrectly.wordpress.com/134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thinkcorrectly.wordpress.com/134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thinkcorrectly.wordpress.com/134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thinkcorrectly.wordpress.com/134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thinkcorrectly.wordpress.com/134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thinkcorrectly.wordpress.com/134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thinkcorrectly.wordpress.com/134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thinkcorrectly.wordpress.com/134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thinkcorrectly.wordpress.com/134/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thinkcorrectly.wordpress.com&amp;blog=4231698&amp;post=134&amp;subd=thinkcorrectly&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thinkcorrectly.wordpress.com/2009/06/28/introduccion-a-ajax/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b0cbc8966dc75274cd1e0a144d586d4a?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">BerfengeR</media:title>
		</media:content>

		<media:content url="http://thinkcorrectly.files.wordpress.com/2009/06/ajax1.png" medium="image">
			<media:title type="html">ajax1</media:title>
		</media:content>

		<media:content url="http://thinkcorrectly.files.wordpress.com/2009/06/ajax_polling1.png" medium="image">
			<media:title type="html">ajax_polling</media:title>
		</media:content>

		<media:content url="http://thinkcorrectly.files.wordpress.com/2009/06/ajax_long_polling.png" medium="image">
			<media:title type="html">ajax_long_polling</media:title>
		</media:content>

		<media:content url="http://thinkcorrectly.files.wordpress.com/2009/06/ajax_http_stream.png" medium="image">
			<media:title type="html">ajax_http_stream</media:title>
		</media:content>
	</item>
		<item>
		<title>Introducción a JQuery.</title>
		<link>http://thinkcorrectly.wordpress.com/2009/06/27/introduccion-a-jquery/</link>
		<comments>http://thinkcorrectly.wordpress.com/2009/06/27/introduccion-a-jquery/#comments</comments>
		<pubDate>Sat, 27 Jun 2009 19:01:36 +0000</pubDate>
		<dc:creator>BerfengeR</dc:creator>
				<category><![CDATA[Articulos]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[JQuery]]></category>

		<guid isPermaLink="false">http://thinkcorrectly.wordpress.com/?p=129</guid>
		<description><![CDATA[Vuelvo de nuevo con una pequeña guía de JQuery, que se puede denominar como una extensión simple de Javascript que cambia la forma en la que escribimos las cosas, haciendo todo mucho mas sencillo, es decir, como bien dice su eslogan, &#8220;write less, do more&#8221;. Además, el codigo JS será compatible con la práctica totalidad [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thinkcorrectly.wordpress.com&amp;blog=4231698&amp;post=129&amp;subd=thinkcorrectly&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Vuelvo de nuevo con una pequeña guía de JQuery, que se puede denominar como una extensión simple de Javascript que cambia la forma en la que escribimos las cosas, haciendo todo mucho mas sencillo, es decir, como bien dice su eslogan, &#8220;write less, do more&#8221;.</p>
<p>Además, el codigo JS será compatible con la <a href="http://docs.jquery.com/Browser_Compatibility" target="_blank">práctica totalidad</a> de los navegadores web del momento, con lo que no tenemos que rompernos la cabeza con incompatibilidades entre los mismos, especialmente al emplear la técnica de desarrollo web AJAX.</p>
<p>En esta introducción veremos que cambios ocasiona el uso de JQuery y cómo realizar las tareas más comunes que veniamos realizando con Javascript, incluyendo llamadas asíncronas (AJAX).<span id="more-129"></span></p>
<h4>1.- Selección de elementos</h4>
<p>Comunmente, en JS utilizábamos sentencias tipo &#8220;<em>document.getElementById(&#8216;id_elemento&#8217;)</em>&#8221; para obtener un elemento concreto y posteriormente realizar tareas sobre el mismo u obtener un valor concreto.</p>
<p>Con JQuery esto es muchisimo mas sencillo:</p>
<ul>
<li> Seleccion por id: $(&#8220;#id_elemento&#8221;)</li>
<li> Seleccion por class: $(&#8220;.clase&#8221;)</li>
<li> Seleccion de todos los elementos de un tipo: $(&#8220;p&#8221;), $(&#8220;img&#8221;), $(&#8220;input&#8221;)</li>
<li> Seleccion con filtro por valor de atributo: $(&#8220;input[name='username']&#8220;) (selecciona todos los input cuyo atributo name sea igual a &#8220;username&#8221;).</li>
<li> Podemos combinarlos: $(&#8220;input.clase[name='username']&#8220;)</li>
</ul>
<p><a href="http://docs.jquery.com/Selectors">Guia de selectores de JQuery</a><br />
Todos estos selectores nos devolveran un objeto de tipo Array, por lo tanto podremos recorrelo con un <em>&#8220;.each(function() {})&#8221;</em> pudiendo hacer referencia a cada objeto usando el selector <em>&#8220;$(this)&#8221;</em> u obtener un objeto de JS estandar con un &#8220;.get(int)&#8221;.</p>
<h4>2.- Atributos , Clases y Estilos CSS</h4>
<p>En JS estandar accedemos a los mismos como <em>&#8220;element.attribute&#8221;</em>, sin embargo en JQuery podremos actuar directamente sobre el array devuelto por el selector, aunque solo sobre el primer elemento del mismo.</p>
<ul>
<li>Obtener valor de atributo: $(selector).attr(&#8220;attr_name&#8221;) (devuelve un string).</li>
<li>Establecer valor: $(selector).attr(&#8220;nombre_atributo&#8221;, &#8220;valor&#8221;)</li>
<li>Eliminar atributo: $(selector).removeAttr(&#8220;nombre_atributo&#8221;)</li>
<li>Añadir clase (class): $(selector).addClass(&#8220;nombre_clase&#8221;)</li>
<li>Eliminar clase: $(selector).removeClass(&#8220;nombre_clase&#8221;)</li>
<li>Obtener valor (value): $(selector).val()</li>
<li>Establecer valor (value): $(selector).val(&#8220;valor&#8221;)</li>
<li>Establecer valor de estilo CSS: $(selector).css(&#8220;elemento&#8221;, &#8220;valor&#8221;) ( pj: .css(&#8220;display&#8221;, &#8220;none&#8221;) )</li>
<li>Obtener valor de elemento CSS: $(selector).css(&#8220;elemento&#8221;)</li>
<li>Establecer tamaño CSS: $(selector).width(anchura), $(selector).height(altura)</li>
<li>Obtener tamaño CSS: $(selector).width(), $(selector).height()</li>
</ul>
<p><a href="http://docs.jquery.com/Attributes">Guia de manipulación de atributos en JQuery</a><br />
<a href="http://docs.jquery.com/CSS">Guia de CSS en JQuery</a></p>
<h4>3.- Manipulación de contenido</h4>
<ul>
<li>Obtener contenido HTML: $(selector).html()</li>
<li>Establecer contenido HTML: $(selector).html(&#8220;contenido&#8221;)</li>
<li>Añadir contenido al principio: $(selector).prepend(&#8220;contenido&#8221;)</li>
<li>Añadir contenido al final: $(selector).append(&#8220;contenido&#8221;)</li>
</ul>
<p><a href="http://docs.jquery.com/Manipulation">Guia de manipulación de contenido en JQuery</a></p>
<h4>4.- Eventos</h4>
<ul>
<li>Función de click, se llama al hacer click sobre el elemento: $(selector).click( fn ).</li>
<li>Función de focus, se llama al hacer focus en un elemento: $(selector).focus( fn ).</li>
<li>Función de submit (típica de un formulario, se llama cuando este se envia): $(selector).submit( fn ).</li>
</ul>
<p>Las funciones indicadas como<em> &#8220;fn&#8221;</em> se pueden haber definido antes como <em>&#8220;var fn = function() { &#8230; }&#8221;</em> o bien se puede escribir de forma implicita, pj, <em>&#8220;$(selector).click(function() { alert(&#8220;Me han pulsado <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> &#8220;);  })&#8221;</em>. Al igual que en casos anteriores podemos utilizar<em> &#8220;$(this)&#8221; </em>para referenciar al objeto pulsado.</p>
<p><a href="http://docs.jquery.com/Events">Guía de eventos en JQuery</a></p>
<h4>5.- Efectos</h4>
<p>Llegamos a una de las partes mas sorprendentes de JQuery, ya que con muy poco código podremos realizar animaciones complejas sin despeinarnos. Veamos algunos de los efectos mas comunes:</p>
<ul>
<li>Esconder/Mostrar un elemento: $(selector).hide(), $(selector).show() Esto esconderá/mostrará un elemento al momento, pero podremos animarlo con un simple .hide(velocidad), donde &#8220;velocidad&#8221; puede ser un string de entre &#8220;slow&#8221;, &#8220;normal&#8221; y &#8220;fast&#8221; o bien un valor numérico en milisegundos que durará dicha animación. Ademas podremos añadir una parámetro más en el que definiremos una función que se llamará cuando finalice la animación, ideal para componer animaciones ( .show(&#8220;slow&#8221;, function(){&#8230;})).</li>
<li>Efecto slide (cortina): $(selector).slideUp(velocidad) $(selector).slideDown(&#8230;).</li>
<li>Efecto desvanecimiento: $(selector).fadeIn(velocidad), $(selector).fadeOut(&#8230;)</li>
<li>Parar animación en curso: $(selector).stop()</li>
</ul>
<p>Además, podemos crear nuestros propios efectos de animación de forma simple:</p>
<ul>
<li>$(selector).animate(opciones, duracion) donde &#8220;opciones&#8221; será una serie de parámetros, por ejemplo:</li>
<li>$(selector).animate({width: &#8220;100px&#8221;, height: &#8220;100px&#8221;}, 500): Haremos una animación que dure medio segundo y que vaya cambiando el tamaño actual del elemento a un tamaño de 100&#215;100 pixels.</li>
</ul>
<p><a href="http://docs.jquery.com/Effects">Guía de efectos en JQuery</a></p>
<p>Nada mas, espero que haya ayudado a conocer y comprender el funcionamiento de JQuery, al menos para las operaciones más básicas. No he comentado nada de la parte de AJAX, ya que esto lo dejo para otra ocasión, en la que entraré con más detalle en el uso de AJAX con JQuery, utlizando XML como respuesta de las llamadas asíncronas.</p>
<p> <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Enlaces relevantes:</p>
<p><a href="http://www.jquery.com">JQuery</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thinkcorrectly.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thinkcorrectly.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thinkcorrectly.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thinkcorrectly.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thinkcorrectly.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thinkcorrectly.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thinkcorrectly.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thinkcorrectly.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thinkcorrectly.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thinkcorrectly.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thinkcorrectly.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thinkcorrectly.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thinkcorrectly.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thinkcorrectly.wordpress.com/129/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thinkcorrectly.wordpress.com&amp;blog=4231698&amp;post=129&amp;subd=thinkcorrectly&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thinkcorrectly.wordpress.com/2009/06/27/introduccion-a-jquery/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b0cbc8966dc75274cd1e0a144d586d4a?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">BerfengeR</media:title>
		</media:content>
	</item>
		<item>
		<title>Tutorial/Guia sobre FUSE</title>
		<link>http://thinkcorrectly.wordpress.com/2009/06/26/tutorial-guia-sobre-fuse/</link>
		<comments>http://thinkcorrectly.wordpress.com/2009/06/26/tutorial-guia-sobre-fuse/#comments</comments>
		<pubDate>Fri, 26 Jun 2009 17:45:36 +0000</pubDate>
		<dc:creator>BerfengeR</dc:creator>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[Filesystem]]></category>
		<category><![CDATA[FUSE]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://thinkcorrectly.wordpress.com/?p=122</guid>
		<description><![CDATA[Tras un tiempo de inactividad debido a exámenes, vuelvo con un pequeño tutorial de FUSE, que ayudara a comprenderlo y a crearnos nuestro propio sistema de ficheros. 1.- Introducción Para empezar empezaremos explicando FUSE y sus implicaciones. FUSE (Filesystem in Userspace) como su propio nombre indica, nos permitirá implementar sistemas de ficheros que se ejecuten [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thinkcorrectly.wordpress.com&amp;blog=4231698&amp;post=122&amp;subd=thinkcorrectly&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Tras un tiempo de inactividad debido a exámenes, vuelvo con un pequeño tutorial de FUSE, que ayudara a comprenderlo y a crearnos nuestro propio sistema de ficheros.</p>
<h3><strong>1.- Introducción</strong></h3>
<p>Para empezar empezaremos explicando FUSE y sus implicaciones. FUSE (Filesystem in Userspace) como su propio nombre indica, nos permitirá implementar sistemas de ficheros que se ejecuten en espacio de usuario, de manera que no deberemos tocar código del kernel para implementar un nuevo sistema de ficheros, ademas de que, en caso de fallo, no ocasionaremos inestabilidad alguna en el sistema. Para ello deberemos cargar un modulo de FUSE especifico en el kernel como muestra el siguiente gráfico:<span id="more-122"></span></p>
<div class="wp-caption aligncenter" style="width: 290px"><img title="FUSE arch" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/08/FUSE_structure.svg/280px-FUSE_structure.svg.png" alt="FUSE arch" width="280" height="212" /><p class="wp-caption-text">FUSE arch</p></div>
<p>Como vemos, desde espacio de usuario (programa que usa el FS concreto) accederemos al espacio de kernel (a través de la capa de abstracción VFS) y volveremos al espacio de usuario donde tenemos el modulo FUSE de nuestro sistema de ficheros ejecutándose.</p>
<h3><strong>2.- Funciones de FUSE (VFS)<br />
</strong></h3>
<p>Ya que la interfaz con el kernel sigue siendo basada en VFS (como si lo implementasemos en el nucleo), deberemos conocer las operaciones de VFS y su funcion. La API de FUSE no es exactamente VFS, pero esta basadco en la misma y tienen la mismas operaciones. Pasamos a enumerar y describir las funciones de VFS más comunes:</p>
<ul>
<li>int(* <a href="http://fuse.sourceforge.net/doxygen/structfuse__operations.html#7a4c5d8eaf7179d819618c0cf3f73724">getattr</a> )(const char *, struct stat *)
<ul>
<li>Es llamada a la hora de obtener el estado de cada archivo. Su función es devolver el estado para el archivo dado, para ello deberemos devolver una estructura de tipo &#8220;struct stat&#8221; donde almacenaremos los datos de acceso, tamaño, fechas, etc.ç</li>
<li>El primer parametro indica el path del fichero concreto.</li>
</ul>
</li>
<li>int(* <a href="http://fuse.sourceforge.net/doxygen/structfuse__operations.html#0a38aa6ca60e945772d5d21b0c1c8916">mkdir</a> )(const char *, mode_t)
<ul>
<li>Es llamada cuando se desea crear una carpeta.</li>
<li>Los parámetros indican el path de la carpeta nueva y el modo de creación.</li>
</ul>
</li>
<li>int(* <a href="http://fuse.sourceforge.net/doxygen/structfuse__operations.html#8bf63301a9d6e94311fa10480993801e">unlink</a> )(const char *)
<ul>
<li>Recibe el path de un fichero concreto que se desea eliminar.</li>
</ul>
</li>
<li>int(* <a href="http://fuse.sourceforge.net/doxygen/structfuse__operations.html#c59578d18db12f0142ae1ab6e8812d55">rmdir</a> )(const char *)
<ul>
<li>Recibe el path completo de un directorio que se desea eliminar.</li>
</ul>
<p>int(* <a href="http://fuse.sourceforge.net/doxygen/structfuse__operations.html#a777cbddc91887b117ac414e9a2d3cb5">rename</a> )(const char *, const char *)</p>
<ul>
<li>Llamada cuando se renombra o se mueve un archivo.</li>
<li>Recibe como argumentos el path antiguo y el nuevo.</li>
</ul>
</li>
<li>int(* <a href="http://fuse.sourceforge.net/doxygen/structfuse__operations.html#1465eb2268cec2bb5ed11cb09bbda42f">mknod</a> )(const char *, mode_t, dev_t)
<ul>
<li>Crea un nuevo fichero en el path y con los permisos dados.</li>
</ul>
</li>
<li>int(* <a href="http://fuse.sourceforge.net/doxygen/structfuse__operations.html#8efb50b9cd975ba8c4c450248caff6ed">truncate</a> )(const char *, off_t)
<ul>
<li>Cambia el tamaño de un archivo al numero de bytes dado.</li>
<li>Se llama al guardar un fichero al que se le ha cambiado el tamaño (pj: un fichero de texto).</li>
</ul>
</li>
<li>int(* <a href="http://fuse.sourceforge.net/doxygen/structfuse__operations.html#1813889bc5e6e0087a936b7abe8b923f">opendir</a> )(const char *, struct <a href="http://fuse.sourceforge.net/doxygen/structfuse__file__info.html">fuse_file_info</a> *)</li>
<li>int(* <a href="http://fuse.sourceforge.net/doxygen/structfuse__operations.html#14b98c3f7ab97cc2ef8f9b1d9dc0709d">open</a> )(const char *, struct <a href="http://fuse.sourceforge.net/doxygen/structfuse__file__info.html">fuse_file_info</a> *)
<ul>
<li>Se llama al abrir un directorio (opendir) o  un fichero (open).</li>
<li>Deberemos devolver si se autoriza el permiso o no. Mas tarde veremos los posibles valores a devolver.</li>
</ul>
</li>
<li>int(* <a href="http://fuse.sourceforge.net/doxygen/structfuse__operations.html#2a1c6b4ce1845de56863f8b7939501b5">read</a> )(const char *, char *, size_t, off_t, struct <a href="http://fuse.sourceforge.net/doxygen/structfuse__file__info.html">fuse_file_info</a> *)</li>
<li>int(* <a href="http://fuse.sourceforge.net/doxygen/structfuse__operations.html#897d1ece4b8b04c92d97b97b2dbf9768">write</a> )(const char *, const char *, size_t, off_t, struct <a href="http://fuse.sourceforge.net/doxygen/structfuse__file__info.html">fuse_file_info</a> *)
<ul>
<li>Se llaman al leer/escribir en un fichero.</li>
<li>En el caso de lectura, deberemos escribir en el buffer los datos recuperados del fichero.</li>
<li>En caso de escritura deberemos leer del buffer la información a escribir en el fichero.</li>
</ul>
</li>
<li>int(* <a href="http://fuse.sourceforge.net/doxygen/structfuse__operations.html#0f634deda31d1e1c42664585ae820076">readdir</a> )(const char *, void *, <a href="http://fuse.sourceforge.net/doxygen/fuse_8h.html#e2a2054f9852fd6020c26a1bcc7f1042">fuse_fill_dir_t</a>, off_t, struct <a href="http://fuse.sourceforge.net/doxygen/structfuse__file__info.html">fuse_file_info</a> *)
<ul>
<li>Se llama al listar el contenido de un directorio, por lo tanto deberemos rellenar la lista (void *) con una funcion filler que nos proporcionan de tipo &#8220;fuse_fill_dir_t&#8221;.</li>
<li>Para ello, por cada archivo deberemos llamar al filler:
<ul>
<li>filler (buffer, file-&gt;filename, &amp;file-&gt;stat, 0);
<ul>
<li>Donde &#8220;buffer&#8221; es el buffer que nos proporcionan, &#8220;file-&gt;filename&#8221; es el nombre del fichero y &#8220;&amp;file-&gt;stat&#8221; es la dirección de memoria de una estructura de tipo &#8220;struct stat&#8221; que contendrá el estado del fichero.</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>int(* <a href="http://fuse.sourceforge.net/doxygen/structfuse__operations.html#d4ec9c309072a92dd82ddb20efa4ab14">flush</a> )(const char *, struct <a href="http://fuse.sourceforge.net/doxygen/structfuse__file__info.html">fuse_file_info</a> *)</li>
<li>int(* <a href="http://fuse.sourceforge.net/doxygen/structfuse__operations.html#92bdd6f43ba390a54ac360541c56b528">fsync</a> )(const char *, int, struct <a href="http://fuse.sourceforge.net/doxygen/structfuse__file__info.html">fuse_file_info</a> *)
<ul>
<li>Se llaman al hacer un flush sobre un archivo (flush) o al cerrar un archivo (fsync).</li>
<li>Deberemos confirmar cambios en el FS o realizar otro tipo de acción al cerrar cada archivo.</li>
</ul>
</li>
<li>void(* <a href="http://fuse.sourceforge.net/doxygen/structfuse__operations.html#c41d37ab860204fe4bd7612f9fb036c5">destroy</a> )(void *)
<ul>
<li>Se llama al desmontar un volumen.</li>
<li>Deberemos liberar memoria.</li>
</ul>
</li>
</ul>
<p>Vamos a ver que valores podemos devolver desde estas funciones para hacerlo mas completo:</p>
<ul>
<li>-ENOENT: El fichero/directorio solicitado no existe.</li>
<li>-EPERM: No dispone de los permisos adecuados para realizar la operación solicitada.</li>
<li>-EEXIST: El fichero/directorio ya existe.</li>
<li>-EACCES: No tiene permisos de acceso.</li>
<li>-ENOSPC: No hay espacio disponible.</li>
<li>-EINVAL: Argumento no válido.</li>
<li>0: Operación finalizada con éxito.</li>
</ul>
<p>Y con esto ya podemos implementar un sistema de ficheros simple y completo.</p>
<h3>3.- Ejemplo de estructura</h3>
<p>Veamos un ejemplo de estructura principal de una implementación simple en FUSE:</p>
<blockquote><p>static int readDirectory (const char *path, void *buffer, fuse_fill_dir_t filler, off_t offset, struct fuse_file_info *fi)<br />
{<br />
[........]<br />
}</p>
<p>[...............]</p>
<p>int main(int argc, char **argv) {</p>
<p>static struct fuse_operations _operations;<br />
_operations.getattr = readAttr;<br />
_operations.readdir = readDirectory;<br />
_operations.open = openFile;<br />
_operations.read = readFile;<br />
_operations.write = writeFile;<br />
_operations.statfs = getFSStats;<br />
_operations.destroy = cleanFS;<br />
_operations.unlink = removeFile;<br />
_operations.flush = syncFlushFS;<br />
_operations.fsync = syncFS;<br />
_operations.mknod = createNode;<br />
_operations.rename = renameFile;</p>
<p>return fuse_main (argc, argv, &amp;_operations, NULL);<br />
}</p></blockquote>
<p>Posteriormente lo compilares con un simple:</p>
<blockquote><p>gcc main.c  -o fusexample -lfuse</p></blockquote>
<p>Una vez lo hayamos compilado podremos ejecutarlo como:</p>
<blockquote><p>./fusexample mount_point</p></blockquote>
<p>En caso de que queramos pasarle un parametro propio, como un dispositivo (/dev/sdb1) deberiamos ejecutarlo como:</p>
<blockquote><p>./fusexample /dev/sdb1 mount_point</p></blockquote>
<p>y en el codigo interno deberemos filtrar el primer parametro (/dev/sdb1) para no madnarselo a FUSE a traves de la llamada a fuse_main, por ejemplo usando esto: &#8220;return fuse_main (argc-1, &amp;argv[1], &amp;_operations, NULL);&#8221;.</p>
<p>Nada mas por hoy, espero que haya sido de ayuda y haya ayudado a comprender un poco mas el funcionamiento de FUSE.</p>
<p><strong>Enlaces:</strong></p>
<ul>
<li><a href="http://fuse.sourceforge.net/doxygen/structfuse__operations.html" target="_blank">FUSE Operations API</a></li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thinkcorrectly.wordpress.com/122/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thinkcorrectly.wordpress.com/122/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thinkcorrectly.wordpress.com/122/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thinkcorrectly.wordpress.com/122/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thinkcorrectly.wordpress.com/122/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thinkcorrectly.wordpress.com/122/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thinkcorrectly.wordpress.com/122/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thinkcorrectly.wordpress.com/122/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thinkcorrectly.wordpress.com/122/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thinkcorrectly.wordpress.com/122/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thinkcorrectly.wordpress.com/122/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thinkcorrectly.wordpress.com/122/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thinkcorrectly.wordpress.com/122/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thinkcorrectly.wordpress.com/122/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thinkcorrectly.wordpress.com&amp;blog=4231698&amp;post=122&amp;subd=thinkcorrectly&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thinkcorrectly.wordpress.com/2009/06/26/tutorial-guia-sobre-fuse/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b0cbc8966dc75274cd1e0a144d586d4a?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">BerfengeR</media:title>
		</media:content>

		<media:content url="http://upload.wikimedia.org/wikipedia/commons/thumb/0/08/FUSE_structure.svg/280px-FUSE_structure.svg.png" medium="image">
			<media:title type="html">FUSE arch</media:title>
		</media:content>
	</item>
		<item>
		<title>Cosas que me llaman</title>
		<link>http://thinkcorrectly.wordpress.com/2009/04/22/cosas-que-me-llaman/</link>
		<comments>http://thinkcorrectly.wordpress.com/2009/04/22/cosas-que-me-llaman/#comments</comments>
		<pubDate>Wed, 22 Apr 2009 16:08:21 +0000</pubDate>
		<dc:creator>BerfengeR</dc:creator>
				<category><![CDATA[Post Chorra]]></category>

		<guid isPermaLink="false">http://thinkcorrectly.wordpress.com/?p=110</guid>
		<description><![CDATA[Buenas de new, el otro dia en un momento de inspiración divina, me puse a repasar los nombres, motes, en fin, cosas a las que respondo cuando alguien tiene la osadía de pronunciarlos, y esto es lo que ha salido: Arturo Artu Turo Turito Torito Toro Tori Arthur Arthuri Hart Néno Né Berfenger Berfen Notas [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thinkcorrectly.wordpress.com&amp;blog=4231698&amp;post=110&amp;subd=thinkcorrectly&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Buenas de new,<br />
el otro dia en un momento de inspiración divina, me puse a repasar los nombres, motes, en fin, cosas a las que respondo cuando alguien tiene la osadía de pronunciarlos, y esto es lo que ha salido:<span id="more-110"></span></p>
<ul>
<li>Arturo</li>
<li>Artu</li>
<li>Turo</li>
<li>Turito</li>
<li>Torito</li>
<li>Toro</li>
<li>Tori</li>
<li>Arthur</li>
<li>Arthuri</li>
<li>Hart</li>
<li>Néno</li>
<li>Né</li>
<li>Berfenger</li>
<li>Berfen</li>
<li>Notas</li>
<li>Notario</li>
</ul>
<p>Y dentro de poco &#8220;El de la cara cómica&#8221;, o algo.</p>
<p>Vamos, que si algún dia respondo al nombre de pepe o gumersindo, que nadie se extrañe.</p>
<p>Y hasta aquí el post chorra del&#8230; dia, semana, mes, o cuando cuadre.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thinkcorrectly.wordpress.com/110/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thinkcorrectly.wordpress.com/110/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thinkcorrectly.wordpress.com/110/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thinkcorrectly.wordpress.com/110/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thinkcorrectly.wordpress.com/110/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thinkcorrectly.wordpress.com/110/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thinkcorrectly.wordpress.com/110/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thinkcorrectly.wordpress.com/110/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thinkcorrectly.wordpress.com/110/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thinkcorrectly.wordpress.com/110/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thinkcorrectly.wordpress.com/110/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thinkcorrectly.wordpress.com/110/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thinkcorrectly.wordpress.com/110/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thinkcorrectly.wordpress.com/110/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thinkcorrectly.wordpress.com&amp;blog=4231698&amp;post=110&amp;subd=thinkcorrectly&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thinkcorrectly.wordpress.com/2009/04/22/cosas-que-me-llaman/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b0cbc8966dc75274cd1e0a144d586d4a?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">BerfengeR</media:title>
		</media:content>
	</item>
		<item>
		<title>WBFUSE 0.8.2b (RC1)</title>
		<link>http://thinkcorrectly.wordpress.com/2009/04/17/105/</link>
		<comments>http://thinkcorrectly.wordpress.com/2009/04/17/105/#comments</comments>
		<pubDate>Fri, 17 Apr 2009 18:29:25 +0000</pubDate>
		<dc:creator>BerfengeR</dc:creator>
				<category><![CDATA[Articulos]]></category>

		<guid isPermaLink="false">http://thinkcorrectly.wordpress.com/?p=105</guid>
		<description><![CDATA[Buenas de nuevo, vuelvo para publicar una nueva version de WBFUSE (soporte de WBFS bajo FUSE), que ya debería ser final. Los cambios respecto a la anterior version son: Corregido bug de renombrado cuando se cambiaba la ID. Incluidos parches de usb loader 1.5. Añadido scrubbing por defecto. Añadidas opciones para control de scrubbing. Corregido [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thinkcorrectly.wordpress.com&amp;blog=4231698&amp;post=105&amp;subd=thinkcorrectly&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Buenas de nuevo,<br />
vuelvo para publicar una nueva version de WBFUSE (soporte de WBFS bajo FUSE), que ya debería ser final.</p>
<p>Los cambios respecto a la anterior version son:</p>
<ul>
<li>Corregido bug de renombrado cuando se cambiaba la ID.</li>
<li>Incluidos parches de usb loader 1.5.</li>
<li>Añadido scrubbing por defecto.</li>
<li>Añadidas opciones para control de scrubbing.</li>
<li>Corregido bug de borrado que corrompia el sistema de ficheros WBFS.</li>
</ul>
<p>Para incluir estas funcionalidades se ha añadido opciones:</p>
<p><strong>Uso:</strong> ./wbfuse /dev/sdxy punto_montaje [opciones]</p>
<blockquote><p>Opciones:<br />
-g :Activar Image Scrubbing manteniendo solo la partición de juego.<br />
-n : Desactivar Image Scrubbing.</p>
<p>Por defecto el scrubbing esta activado, manteniendo todas las particiones.</p></blockquote>
<p><strong>Comandos de renombrado:</strong></p>
<ul>
<li>Cambiar ID y/o nombre: Renombrar a &#8220;ABCDEF|Nombre de juego&#8221; (sin comillas).</li>
<li>Scrubear imagen previamente copiada: Renombrar a &#8220;scrub&#8221; (sin comillas).</li>
</ul>
<p>Descarga:</p>
<ul>
<li><a href="http://www.gigasize.com/get.php?d=9c9g556wnrc">Descarga precompilado 32 bits (i386)</a></li>
<li><a href="http://www.gigasize.com/get.php?d=wzk70wgrmld">Descarga precompilado 64 bits (x86_64)</a></li>
<li><a href="http://www.gigasize.com/get.php?d=366nkkwj5yf">Descarga codigo fuente</a></li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thinkcorrectly.wordpress.com/105/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thinkcorrectly.wordpress.com/105/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thinkcorrectly.wordpress.com/105/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thinkcorrectly.wordpress.com/105/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thinkcorrectly.wordpress.com/105/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thinkcorrectly.wordpress.com/105/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thinkcorrectly.wordpress.com/105/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thinkcorrectly.wordpress.com/105/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thinkcorrectly.wordpress.com/105/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thinkcorrectly.wordpress.com/105/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thinkcorrectly.wordpress.com/105/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thinkcorrectly.wordpress.com/105/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thinkcorrectly.wordpress.com/105/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thinkcorrectly.wordpress.com/105/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thinkcorrectly.wordpress.com&amp;blog=4231698&amp;post=105&amp;subd=thinkcorrectly&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thinkcorrectly.wordpress.com/2009/04/17/105/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b0cbc8966dc75274cd1e0a144d586d4a?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">BerfengeR</media:title>
		</media:content>
	</item>
		<item>
		<title>WBFUSE v0.8 (pre-final)</title>
		<link>http://thinkcorrectly.wordpress.com/2009/04/12/wbfuse-v08-pre-final/</link>
		<comments>http://thinkcorrectly.wordpress.com/2009/04/12/wbfuse-v08-pre-final/#comments</comments>
		<pubDate>Sun, 12 Apr 2009 13:38:41 +0000</pubDate>
		<dc:creator>BerfengeR</dc:creator>
				<category><![CDATA[Articulos]]></category>

		<guid isPermaLink="false">http://thinkcorrectly.wordpress.com/?p=102</guid>
		<description><![CDATA[Buenas de nuevo, esta vez vuelvo para publicar la que, espero, sea la version final WBFUSE (soporte de WBFS bajo FUSE), a falta de corregir algun que otro bug que aparezca por ahí. Los cambios respecto a la primera version son: Corrección de bugs menores. Añadido soporte completo para 64 bits (x86_64). Añadido soporte para [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thinkcorrectly.wordpress.com&amp;blog=4231698&amp;post=102&amp;subd=thinkcorrectly&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Buenas de nuevo,<br />
esta vez vuelvo para publicar la que, espero, sea la version final WBFUSE (soporte de WBFS bajo FUSE), a falta de corregir algun que otro bug que aparezca por ahí.</p>
<p>Los cambios respecto a la primera version son:</p>
<ul>
<li>Corrección de bugs menores.</li>
<li>Añadido soporte completo para 64 bits (x86_64).</li>
<li>Añadido soporte para scrubear imagenes (hacer que ocupen menos de 4,4GB).</li>
<li>Añadido soporte para scrubear imagenes previamente añadidas.</li>
</ul>
<p>Para incluir estas funcionalidades se ha añadido una opcion:</p>
<p><strong>Uso:</strong> ./wbfuse /dev/sdxy punto_montaje [opciones]</p>
<blockquote><p>Opciones:<br />
-s :Activar Image Scrubbing.</p></blockquote>
<p><strong>Comandos de renombrado:</strong></p>
<ul>
<li>Cambiar ID y/o nombre: Renombrar a &#8220;ABCDEF|Nombre de juego&#8221; (sin comillas).</li>
<li>Scrubear imagen previamente copiada: Renombrar a &#8220;scrub&#8221; (sin comillas).</li>
</ul>
<p>Aquí os dejo los enlaces de descarga:</p>
<ul>
<li><a href="http://www.gigasize.com/get.php?d=6zy7f1qg4wd">Descarga precompilado 32 bits (i386)</a></li>
<li><a href="http://www.gigasize.com/get.php?d=19wlxbr87qd">Descarga precompilado 64 bits (x86_64)</a></li>
<li><a href="http://www.gigasize.com/get.php?d=rkw4wy1m7zb">Descarga codigo fuente</a></li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thinkcorrectly.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thinkcorrectly.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thinkcorrectly.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thinkcorrectly.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thinkcorrectly.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thinkcorrectly.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thinkcorrectly.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thinkcorrectly.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thinkcorrectly.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thinkcorrectly.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thinkcorrectly.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thinkcorrectly.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thinkcorrectly.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thinkcorrectly.wordpress.com/102/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thinkcorrectly.wordpress.com&amp;blog=4231698&amp;post=102&amp;subd=thinkcorrectly&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thinkcorrectly.wordpress.com/2009/04/12/wbfuse-v08-pre-final/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b0cbc8966dc75274cd1e0a144d586d4a?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">BerfengeR</media:title>
		</media:content>
	</item>
		<item>
		<title>WBFUSE liberado (WBFS para FUSE)</title>
		<link>http://thinkcorrectly.wordpress.com/2009/04/07/wbfuse-liberado-wbfs-para-fuse/</link>
		<comments>http://thinkcorrectly.wordpress.com/2009/04/07/wbfuse-liberado-wbfs-para-fuse/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 20:16:54 +0000</pubDate>
		<dc:creator>BerfengeR</dc:creator>
				<category><![CDATA[Articulos]]></category>

		<guid isPermaLink="false">http://thinkcorrectly.wordpress.com/?p=96</guid>
		<description><![CDATA[Por fin!, tras varios de dias de curre y aprendizaje, que de FUSE no tenia ni la mas minima idea, me dispongo a liberar la primera version de WBFUSE, que no es mas que un modulo para FUSE que permite manejar una partiticon con el sistema de archivos WBFS de menara transparente y totalmente integrada [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thinkcorrectly.wordpress.com&amp;blog=4231698&amp;post=96&amp;subd=thinkcorrectly&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Por fin!, tras varios de dias de curre y aprendizaje, que de FUSE no tenia ni la mas minima idea, me dispongo a liberar la primera version de WBFUSE, que no es mas que un modulo para FUSE que permite manejar una partiticon con el sistema de archivos WBFS de menara transparente y totalmente integrada con el navegador de archivos.</p>
<p><img class="aligncenter size-full wp-image-97" title="screen1" src="http://thinkcorrectly.files.wordpress.com/2009/04/screen1.png?w=510&#038;h=364" alt="screen1" width="510" height="364" /></p>
<p><strong>Caracteristicas:</strong></p>
<ul>
<li>Integracion con todos los navegadores de linux y consola (ext VFS mediante FUSE).</li>
<li>Poder usar la particion como almacenamiento generico.</li>
<li>Poder renombrar tanto archivos como nombre e ID de las isos de Wii (para ello sera necesario renombrarlas como ID|Nombre, pj R64P01|Wii Musica).</li>
<li>Poder conocer espacio total y libre mediante el navegador, asi como borrar archivos o isos de wii.</li>
<li>Poder leer y escribir isos de wii a tamaño completo 4.4GB o 8,75GB.</li>
<li>Poder utilizar la partición WBFS como almacenamiento de isos completas de wii.</li>
</ul>
<p><strong>Desventajas:</strong></p>
<ul>
<li>Escritura y lectura lenta (Al tener que manejar isos a tamaño completo (4.4GB o 8,75GB)).</li>
<li>Solo es posible escribir las ISOs a tamaño completo, no se pueden eliminar particiones ni espacios en blanco. (Limitación de FUSE)</li>
</ul>
<p>En unos dias publicaré un pequeño manual de FUSE donde expondré parte de lo aprendido durante la realización de esta aplicación.</p>
<p>Hasta otra.</p>
<p>Enlaces: <a href="http://www.gigasize.com/get.php?d=qnng50913lc">Descarga</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thinkcorrectly.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thinkcorrectly.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thinkcorrectly.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thinkcorrectly.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thinkcorrectly.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thinkcorrectly.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thinkcorrectly.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thinkcorrectly.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thinkcorrectly.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thinkcorrectly.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thinkcorrectly.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thinkcorrectly.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thinkcorrectly.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thinkcorrectly.wordpress.com/96/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thinkcorrectly.wordpress.com&amp;blog=4231698&amp;post=96&amp;subd=thinkcorrectly&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thinkcorrectly.wordpress.com/2009/04/07/wbfuse-liberado-wbfs-para-fuse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b0cbc8966dc75274cd1e0a144d586d4a?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">BerfengeR</media:title>
		</media:content>

		<media:content url="http://thinkcorrectly.files.wordpress.com/2009/04/screen1.png" medium="image">
			<media:title type="html">screen1</media:title>
		</media:content>
	</item>
		<item>
		<title>Activar Control+Alt+Backspace en Ubuntu 9.04</title>
		<link>http://thinkcorrectly.wordpress.com/2009/03/31/activar-controlaltbackspace-en-ubuntu-904/</link>
		<comments>http://thinkcorrectly.wordpress.com/2009/03/31/activar-controlaltbackspace-en-ubuntu-904/#comments</comments>
		<pubDate>Tue, 31 Mar 2009 19:21:30 +0000</pubDate>
		<dc:creator>BerfengeR</dc:creator>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[jaunty]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[xorg]]></category>

		<guid isPermaLink="false">http://thinkcorrectly.wordpress.com/?p=92</guid>
		<description><![CDATA[Tras un tiempo vuelvo con tutoriales del mundo linux. Hoy mismo me he instalado la nueva version de Ubuntu Jaunty Jackalope (aun en Beta) y me he encontrado con la 1ª metedura de pata: la combinacion Control+Alt+Backspace para reiniciar el servidor X11 viene desactivada por defecto, combinacion que suelo usar bastante a menudo, sobre todo [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thinkcorrectly.wordpress.com&amp;blog=4231698&amp;post=92&amp;subd=thinkcorrectly&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Tras un tiempo vuelvo con tutoriales del mundo linux. Hoy mismo me he instalado la nueva version de Ubuntu Jaunty Jackalope (aun en Beta) y me he encontrado con la 1ª metedura de pata: la combinacion Control+Alt+Backspace para reiniciar el servidor X11 viene desactivada por defecto, combinacion que suelo usar bastante a menudo, sobre todo cuando ando experimentando xD</p>
<p>Para activarlo de nuevo haremos lo siguiente:</p>
<blockquote><p>$ sudo aptitude install dontzap<br />
$ sudo dontzap &#8211;disable</p></blockquote>
<p>Una vez reiniciemos el servidor X11, ya podremos reiniciarlo de nuevo con la magica combinación.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thinkcorrectly.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thinkcorrectly.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thinkcorrectly.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thinkcorrectly.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thinkcorrectly.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thinkcorrectly.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thinkcorrectly.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thinkcorrectly.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thinkcorrectly.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thinkcorrectly.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thinkcorrectly.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thinkcorrectly.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thinkcorrectly.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thinkcorrectly.wordpress.com/92/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thinkcorrectly.wordpress.com&amp;blog=4231698&amp;post=92&amp;subd=thinkcorrectly&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thinkcorrectly.wordpress.com/2009/03/31/activar-controlaltbackspace-en-ubuntu-904/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b0cbc8966dc75274cd1e0a144d586d4a?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">BerfengeR</media:title>
		</media:content>
	</item>
		<item>
		<title>Análisis de Kameo</title>
		<link>http://thinkcorrectly.wordpress.com/2009/03/28/analisis-de-kameo/</link>
		<comments>http://thinkcorrectly.wordpress.com/2009/03/28/analisis-de-kameo/#comments</comments>
		<pubDate>Fri, 27 Mar 2009 23:07:24 +0000</pubDate>
		<dc:creator>BerfengeR</dc:creator>
				<category><![CDATA[Analisis]]></category>
		<category><![CDATA[Kameo]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[xbox360]]></category>

		<guid isPermaLink="false">http://thinkcorrectly.wordpress.com/?p=85</guid>
		<description><![CDATA[Tras terminarme hoy dicho juego, voy a hacer un breve análisis del mismo, un juego que no pierde un ápice de la magia de Rare y que es la primera apuesta de este estudio en la llamada nextgen. El juego nos propone una historia simple, basada en el archiconocido mundo de desaveniencias entre trolls y [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thinkcorrectly.wordpress.com&amp;blog=4231698&amp;post=85&amp;subd=thinkcorrectly&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Tras terminarme hoy dicho juego, voy a hacer un breve análisis del mismo, un juego que no pierde un ápice de la magia de Rare y que es la primera apuesta de este estudio en la llamada nextgen.</p>
<p><img class="aligncenter size-full wp-image-86" title="kameo_54" src="http://thinkcorrectly.files.wordpress.com/2009/03/kameo_54.jpg?w=510&#038;h=287" alt="kameo_54" width="510" height="287" /></p>
<p>El juego nos propone una historia simple, basada en el archiconocido mundo de desaveniencias entre trolls y elfos, con la originalidad, hasta cierto punto, de los guerreros elementales. Es decir, cuando tengamos el poder de uno de estos guerreros, podremos, en cualquier momento, convertirnos en el mismo para usar sus habilidades, de las que no podremos abusar, ya que contamos con una barra de poder que se recarga cada cierto tiempo. Pasemos a describir brevemente aspectos mas concretos del juego.<span id="more-85"></span></p>
<p><strong>Gráficos</strong></p>
<p>En este campo no destaca especialmente, ya que fue uno de los primeros de la actual generacion de consolas. Aunque cabe resaltar los buenisimos efectos de agua y mojado de los personajes, algo que incluso hoy sigue impresionando, y que ya incorporaban otros titulos de Rare como Starfox Adventures para NGC.</p>
<p><strong>Sonido</strong></p>
<p>Este apartado no pasa de correcto, no hay nada que destaque especialmente y las músicas pueden resultar repetitivas por momentos, aunque ayudan a la inmersión en el mundo de fantasía creado para la ocasión. También hay muy poca variedad de voces, que se repiten en zonas concretas (entrada a menús, etc), aunque como punto a favor, diré que para la mayoría de los textos narrados y de personajes, existe una voz doblada al castellano, aunque el doblaje deja bastante que desear; pero al menos se han tomado la molestia de hacerlo.</p>
<p><strong>Jugabilidad</strong></p>
<p>Este es, sin duda, el punto fuerte del juego. Durante el juego iremos liberando guerreros elementales que nos darán nuevas habilidades y tendremos que explorar el escenario de nuevo para encontrar nuevos caminos a desbloquear con nuestro nuevo amigo. En cada situacion deberemos utilizar las habilidades que necesitemos de entre las que poseen nuestros guerreros, lo que da algo de libertad a la hora de afrontar situaciones y enemigos. Ademas, consiguiendo los extras del juego (que no son pocos) conseguiremos nuevas habilidades y movimientos para nuestros guerreos elementales, lo que le da un toque de rol al juego y aumenta mucho las posibilidades del mismo.</p>
<p>En cuanto a la dificultad, está bastante ajustada. En el modo normal no es algo dificil hasta el final, pero sigue siendo facil. En el modo dificil, ya se complica algo mas, aunque por lo general se podria decir que es un juego facilon para todos los publicos.</p>
<p><img class="aligncenter size-full wp-image-87" title="Kameo 2" src="http://thinkcorrectly.files.wordpress.com/2009/03/1128457135.jpg?w=510" alt="Kameo 2"   /></p>
<p><strong>Multijugador</strong></p>
<p>El modo multijugador se ha implementado de la mejor forma posible según mi parecer, esto es, un modo cooperativo online, aunque para ello es necesario descargar una actualizacion gratuita a traves de Xbox live. No lo he probado, asi que no lo puedo analizar con mas profundidad.</p>
<p><strong>Duración</strong></p>
<p>La historia principal es mas bien corta, aunque si queremos conseguir todos los extras, nos llevara bastante más tiempo, ya que son muchos. Recordemos que los extras nos permiten conseguir nuevas habilidades para nuestros guerreros elementales, habilidades generales, etc.</p>
<p><strong>Conclusión</strong></p>
<p>Estamos ante un juego muy grande, tanto en los pequeños detalles, como en ambientación, el numero de extras, la magia que respira todo el titulo, la &#8220;magia Rare&#8221;, que le llame antes. Sin duda un juego recomendable para todos los seguidores de Rare y plataformas que busquen algo de originalidad.</p>
<p><strong>Nombre</strong>: Kameo: Elements of Power<br />
<strong>Estudio de desarrollo</strong>: Rare<br />
<strong>Plataformas</strong>: Xbox 360<br />
<strong>Nota final</strong>: 8.0</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thinkcorrectly.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thinkcorrectly.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thinkcorrectly.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thinkcorrectly.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thinkcorrectly.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thinkcorrectly.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thinkcorrectly.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thinkcorrectly.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thinkcorrectly.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thinkcorrectly.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thinkcorrectly.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thinkcorrectly.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thinkcorrectly.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thinkcorrectly.wordpress.com/85/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thinkcorrectly.wordpress.com&amp;blog=4231698&amp;post=85&amp;subd=thinkcorrectly&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thinkcorrectly.wordpress.com/2009/03/28/analisis-de-kameo/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b0cbc8966dc75274cd1e0a144d586d4a?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">BerfengeR</media:title>
		</media:content>

		<media:content url="http://thinkcorrectly.files.wordpress.com/2009/03/kameo_54.jpg" medium="image">
			<media:title type="html">kameo_54</media:title>
		</media:content>

		<media:content url="http://thinkcorrectly.files.wordpress.com/2009/03/1128457135.jpg" medium="image">
			<media:title type="html">Kameo 2</media:title>
		</media:content>
	</item>
		<item>
		<title>Jailbreakeando un iPod Touch 2G</title>
		<link>http://thinkcorrectly.wordpress.com/2009/03/16/jailbreakeando-un-ipod-touch-2g/</link>
		<comments>http://thinkcorrectly.wordpress.com/2009/03/16/jailbreakeando-un-ipod-touch-2g/#comments</comments>
		<pubDate>Mon, 16 Mar 2009 20:06:56 +0000</pubDate>
		<dc:creator>BerfengeR</dc:creator>
				<category><![CDATA[Articulos]]></category>
		<category><![CDATA[2g]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[cydia]]></category>
		<category><![CDATA[installer]]></category>
		<category><![CDATA[ipod]]></category>
		<category><![CDATA[ipod touch]]></category>
		<category><![CDATA[jailbreak]]></category>
		<category><![CDATA[quickfreedom]]></category>
		<category><![CDATA[redsnow]]></category>

		<guid isPermaLink="false">http://thinkcorrectly.wordpress.com/?p=75</guid>
		<description><![CDATA[De nuevo por aquí , esta vez para explicar el proceso de jailbreak de un iPod Touch 2G con QuickFreedom para Windows (en caso de usar Mac OS X deberéis hacerlo con TyTool) y los primeros pasos posteriores al jailbreak. ¿Por qué quiero jailbreakearlo? (me acabo de inventar un nuevo verbo). Pues por diversas razones, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thinkcorrectly.wordpress.com&amp;blog=4231698&amp;post=75&amp;subd=thinkcorrectly&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>De nuevo por aquí <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> , esta vez para explicar el proceso de jailbreak de un iPod Touch 2G con QuickFreedom para Windows (en caso de usar Mac OS X deberéis hacerlo con TyTool) y los primeros pasos posteriores al jailbreak.</p>
<p>¿Por qué quiero jailbreakearlo? (me acabo de inventar un nuevo verbo). Pues por diversas razones, desde poder acceder al dispositivo por SSH, pasando por poder bajar archivos desde Safari y librarme, por fin, del maldito iTunes, entre otras muchas cosas. Después de leer el post, lo entenderéis <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> <span id="more-75"></span></p>
<p>Empecemos:</p>
<p>1.- Nos descargamos, instalamos y ejecutamos <a href="http://www.quickfreedom.com">QuickFreedom</a></p>
<p>2.- Tras iniciar el programa pulsaremos en &#8220;Jailbreak iPod&#8221;.</p>
<p>3.- Deberemos bajar e instalar libUSB y el firmware 2.2.1 para el iPod. Deberemos asegurarnos que nuestro iPod ya se encuentre con la versión 2.2.1, si no, deberemos actualizar.</p>
<div id="attachment_76" class="wp-caption aligncenter" style="width: 520px"><img class="size-full wp-image-76" title="iPod Touch Jailbreak Tuto 1" src="http://thinkcorrectly.files.wordpress.com/2009/03/tuto1.png?w=510&#038;h=409" alt="Deberemos instalar libUSB y descargar el firmware 2.2.1" width="510" height="409" /><p class="wp-caption-text">Deberemos instalar libUSB y descargar el firmware 2.2.1</p></div>
<p>4.- Seleccionaremos si queremos instalar &#8220;Installer&#8221; o si queremos cambiar la imagen que se muestra al arranque (mientras se enciende), y pulsaremos en &#8220;Create Firmware&#8221;. Puede tardar entre 10 y 15  minutos.</p>
<p>5.- Conectaremos el iPod al PC mediante USB y lo pondremos en modo DFU.</p>
<blockquote><p>Para ponerlo en modo DFU deberemos apagarlo, pulsar y mantener Power+Home y, a los 10 segundos, soltar el botón Power. Seguiremos apretando el botón Home hasta que Windows nos reconozca el dispositivo como Apple DFU Driver (10 segundos mas). La pantalla debería quedarse en negro.</p></blockquote>
<p>Si esta correctamente configurado, nos debería aparecer en QuickFreedom &#8220;iPod is connected in DFU mode&#8221;.</p>
<p>5.- Pulsaremos en &#8220;Start Pre-Jailbreak&#8221; para que aplique el parche redsnow y lo deje listo para el jailbreak.</p>
<div id="attachment_78" class="wp-caption aligncenter" style="width: 520px"><img class="size-full wp-image-78" title="iPod Touch Jailbreak Tuto 2" src="http://thinkcorrectly.files.wordpress.com/2009/03/tuto2.png?w=510&#038;h=409" alt="Haremos un Pre-Jailbreak" width="510" height="409" /><p class="wp-caption-text">Haremos un Pre-Jailbreak (redsnow)</p></div>
<p>6.- Una vez esté en Pre-Jailbreak mode, abriremos el iTunes (si no se nos ha abierto ya) y pulsaremos en &#8220;Restaurar&#8221; mientras mantenemos la tecla &#8220;Mayusculas&#8221; presionada. Seleccionamos el archivos que nos ha generado anteriormente el QuickFreedom y comenzara el proceso de jailbreak. Suele tardar unos 15 minutos.</p>
<p>Tras el próximo arranque, deberemos ver el dispositivo &#8220;pelado&#8221; con Cydia e Installer (si lo hemos seleccionado previamente).</p>
<p>Vale, ya hemos hecho el jailbreak. ¿Y ahora qué?</p>
<p>Lo primero, y mas recomendable, es conectarlo de nuevo, iniciar el iTunes y dejar que este restaure una copia de seguridad del dispositivo, para recuperar Configuracion, Bookmarks, Aplicaciones, Música, Vídeo, etc que teníamos antes. Posteriormente procederemos a la instalación de aplicaciones desde Cydia, de las que recomiendo:</p>
<ul>
<li>Cydia Community Sources: Añade repositorios de la comunidad de Cydia, que nos permitirán bajar la mayoría de las aplicaciones que menciono en este post.</li>
<li>OpenSSH: Nos permite conectarnos al dispositivo por SSH tanto para copiar archivos, como para administrarlo por linea de comandos</li>
<li>Backgrounder: Nos permite mantener aplicaciones en segundo plano. Aunque no es muy recomendable, ya que se funde la batería en nada.</li>
<li>Five Icon Dock: Nos permite tener 5 iconos en el dock del springboard.</li>
<li>Winterboard: Nos permite cambiar por completo la apariencia del springboard y aplicaciones varias.</li>
<li>Mobile Finder: Como el Finder de Mac OS, pero para el iPod.</li>
<li>Mobile Terminal: Un terminal en toda regla. Nos permite tanto ejecutar comandos en local como conectarnos a maquinas remotas por SSH.</li>
<li>Safari Download Plugin: Permite descargar archivos desde Safari (por fin!!!).</li>
<li>Boss Prefs: Permite (des)habilitar los interfaces externos como GPRS, Bluetooth, SSH Server, Wifi, etc. (También se puede usar SBSettings, que integra esta funcionalidad en el Springboard, lo que nos permite acceder al menú en cualquier momento con solo pasar el dedo por la barra de estado (pero consume bastante bateria).</li>
<li>vlc4iphone y mplayer: Ports de estos míticos reproductores de medios, que les queda mucho por mejorar, pero hacen bastante bien su funcion con vídeos pequeños.</li>
<li>MxTube: Descargar vídeos de youtube.</li>
</ul>
<p>En cuanto a juegos tenemos muchas alternativas, sobre todo en cuanto a emuladores se refiere (no vienen en los repositorios por defecto):</p>
<ul>
<li>NES</li>
<li>snes4iphone</li>
<li>ScummVM</li>
<li>Quake 3</li>
</ul>
<div id="attachment_79" class="wp-caption aligncenter" style="width: 496px"><img class="size-full wp-image-79" title="iPod Touch Jailbreak Tuto 3" src="http://thinkcorrectly.files.wordpress.com/2009/03/monkeyphone.jpg?w=510" alt="Monkey Island en un iPod Touch a traves de ScummVM"   /><p class="wp-caption-text">Monkey Island en un iPhone a traves de ScummVM</p></div>
<p>También podremos añadir manualmente a Cydia el repositorio <a href="http://www.xsellize.com">XSellize</a> (http://xsellize.com/cydia/user-pass/) donde user y pass son tu usuario y contraseña de registro en dicha web. Una vez lo hagamos, se nos actualizara la base de datos de Cydia y podremos instalar mas programas como:</p>
<ul>
<li>IPA Prep 2.2: Nos permite instalar aplicaciones sin verificar desde iTunes.</li>
<li>Emuladores y ROMS de NES y SNES.</li>
<li>Hackulo.us&#8217;s Source: Añade un nuevo repositorio, con aplicaciones de dudosa legalidad, de las que no hablare en este post.</li>
<li>iBlueTooth: Desbloquea el Bluetooth del iPhone (inútil para un iPod Touch).</li>
</ul>
<p>Espero que haya sido de ayuda y que disfruteis (los que tengais oportunidad) de este magnifico trasto, sobre todo a partir del jailbreaking.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thinkcorrectly.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thinkcorrectly.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thinkcorrectly.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thinkcorrectly.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thinkcorrectly.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thinkcorrectly.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thinkcorrectly.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thinkcorrectly.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thinkcorrectly.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thinkcorrectly.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thinkcorrectly.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thinkcorrectly.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thinkcorrectly.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thinkcorrectly.wordpress.com/75/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thinkcorrectly.wordpress.com&amp;blog=4231698&amp;post=75&amp;subd=thinkcorrectly&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thinkcorrectly.wordpress.com/2009/03/16/jailbreakeando-un-ipod-touch-2g/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b0cbc8966dc75274cd1e0a144d586d4a?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">BerfengeR</media:title>
		</media:content>

		<media:content url="http://thinkcorrectly.files.wordpress.com/2009/03/tuto1.png" medium="image">
			<media:title type="html">iPod Touch Jailbreak Tuto 1</media:title>
		</media:content>

		<media:content url="http://thinkcorrectly.files.wordpress.com/2009/03/tuto2.png" medium="image">
			<media:title type="html">iPod Touch Jailbreak Tuto 2</media:title>
		</media:content>

		<media:content url="http://thinkcorrectly.files.wordpress.com/2009/03/monkeyphone.jpg" medium="image">
			<media:title type="html">iPod Touch Jailbreak Tuto 3</media:title>
		</media:content>
	</item>
	</channel>
</rss>
