<?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>iXavi</title>
	<atom:link href="http://ixavi.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://ixavi.com</link>
	<description>Open source e intrigas varias</description>
	<lastBuildDate>Sun, 20 Nov 2011 12:27:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Espacios nuevos en iXavi</title>
		<link>http://ixavi.com/blog/2011/11/20/espacios-nuevos-en-ixavi/</link>
		<comments>http://ixavi.com/blog/2011/11/20/espacios-nuevos-en-ixavi/#comments</comments>
		<pubDate>Sun, 20 Nov 2011 12:27:05 +0000</pubDate>
		<dc:creator>Xavi</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[iXavi]]></category>

		<guid isPermaLink="false">http://ixavi.com/?p=820</guid>
		<description><![CDATA[Después de un tiempo (más de dos años ya ) con el mismo formato, he decidido dotar a iXavi de un par de espacios más. Estos dos espacios se pueden encontrar en en.ixavi.com y cat.ixavi.com. El primero de ellos tiene exactamente la misma intención que este espacio pero el contenido va a ser publicado en [...]]]></description>
			<content:encoded><![CDATA[<p>Después de un tiempo (más de dos años ya <img src='http://ixavi.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  ) con el mismo formato, he decidido dotar a iXavi de un par de espacios más.</p>
<p>Estos dos espacios se pueden encontrar en <a title="iXavi en Inglés" href="http://en.ixavi.com">en.ixavi.com</a> y <a title="iXavi en Catalán" href="http://cat.ixavi.com">cat.ixavi.com</a>. El primero de ellos tiene exactamente la misma intención que este espacio pero el contenido va a ser publicado en Inglés (ya era hora de que me animara a ello no?) y el segundo de ellos tiene un objetivo más personal y es el espacio en el que voy a dejar salir mis opiniones sobre el mundo en general y va a sustituir la desaparecida xaviland.com (y como podréis deducir de su nombre, va a estar en Catalán).</p>
<p>Si os pasáis por estos nuevos espacios vais a ver que los cambios respecto al site original van cambiando poco a poco pero por ahora van a tener exactamente el mismo look.</p>
<p>Gracias a todos!!</p>
]]></content:encoded>
			<wfw:commentRss>http://ixavi.com/blog/2011/11/20/espacios-nuevos-en-ixavi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Problemas con tarjetas Wi-fi Broadcom en Ubuntu 11.10 (beta 1)</title>
		<link>http://ixavi.com/blog/2011/09/18/problemas-con-tarjetas-wi-fi-broadcom-en-ubuntu-11-10-beta-1/</link>
		<comments>http://ixavi.com/blog/2011/09/18/problemas-con-tarjetas-wi-fi-broadcom-en-ubuntu-11-10-beta-1/#comments</comments>
		<pubDate>Sun, 18 Sep 2011 12:12:24 +0000</pubDate>
		<dc:creator>Xavi</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Broadcom]]></category>
		<category><![CDATA[Power Management]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Wi-Fi]]></category>
		<category><![CDATA[Wireless]]></category>

		<guid isPermaLink="false">http://www.ixavi.com/?p=806</guid>
		<description><![CDATA[Por un tema de trabajo a largo plazo, este fin de semana he decidido actualizar mi equipo a la primera beta de la versión de Ubuntu que se va a liberar en Octubre. Esta decisión es un poco arriesgada pero espero que en pocas semanas ya estén arreglados todos los pequeños fallos de esta versión, [...]]]></description>
			<content:encoded><![CDATA[<p>Por un tema de trabajo a largo plazo, este fin de semana he decidido actualizar mi equipo a la primera beta de la versión de Ubuntu que se va a liberar en Octubre. Esta decisión es un poco arriesgada pero espero que en pocas semanas ya estén arreglados todos los pequeños fallos de esta versión, Ubuntu casi siempre tiene una versión más que usable unos días antes de la release definitiva. Pero no nos vamos a engañar, una persona sin experiencia en gestionar equipos con GNU/Linux ya se hubiese tirado de un puente con las pequeñas cosas que me he encontrado al hacer el upgrade.</p>
<p>Uno de los principales problemas, como siempre, ha sido el comportamiento de la tarjeta Wireless Broadcom. De hecho, estoy a punto de tirarla al rio, pisarla repetidamente con unas botas, tirarla al Llobregat o al Besòs y comprarme una Intel (sí, de esas que enchufas al equipo y simplemente funcionan) pero Septiembre es un mes muy malo para gastar así que antes de cobrar este mes he tenido que encontrar una solución para seguir conectándome a mi red casera <img src='http://ixavi.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</p>
<p>Por experiencia empírica al final me he dado cuenta de que me puedo conectar a cualquier Wi-fi mientras tenga el portátil conectado a la corriente pero que la conexión se va al traste en el momento en el que lo desconecto de la corriente. Así, leyendo por los foros de Ubuntu, he descubierto que, ya en versiones anteriores del sistema, la gestión de energía de estas tarjetas es bastante proclive a generar desaguisados de este tipo.  Y efectivamente, no hay que ser un experto en BASH para leer el contenido del fichero <strong>/usr/lib/pm-utils/power.d/wireless</strong> y darse cuenta que los cuatro comandos que ahí se especifican no pueden ser suficientes para garantizar una conexión estable.</p>
<p>Entonces qué? os estaréis preguntando, nos pasamos dicho archivo por la piedra? NOOOOO&#8230; hay una solución mucho más elegante y refinada que nos dejará este archivo intacto y nos permite conectarnos a las redes independientemente de la fuente de energía que estemos utilizando. Esta solución se basa en crear un fichero vacío llamado <strong>wireless</strong> en el directorio <strong>/etc/pm/power.d</strong>. En principio esto debería sobreescribir el funcionamiento del anterior fichero y dejar de “liarla parda” con la gestión de energía de la tarjeta de conexiones inalámbricas.</p>
<p>Es posible que este parche (porqué es simplemente un parche) os haga que el equipo consuma un poco más de lo que consume con el control de la tarjeta activado pero yo no he notado un cambio significativo.</p>
<p><img src="http://www.ixavi.com/wp-content/uploads/2011/09/wifi-300x177.png" alt="wifi-logo" title="WI-FI" width="300" height="177" class="aligncenter size-medium wp-image-808" /></p>
]]></content:encoded>
			<wfw:commentRss>http://ixavi.com/blog/2011/09/18/problemas-con-tarjetas-wi-fi-broadcom-en-ubuntu-11-10-beta-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruby on Rails &#8211; Layouts y Hojas de Estilo</title>
		<link>http://ixavi.com/blog/2011/09/12/ruby-on-rails-layouts-y-hojas-de-estilo/</link>
		<comments>http://ixavi.com/blog/2011/09/12/ruby-on-rails-layouts-y-hojas-de-estilo/#comments</comments>
		<pubDate>Mon, 12 Sep 2011 08:00:12 +0000</pubDate>
		<dc:creator>Xavi</dc:creator>
				<category><![CDATA[Programación Web]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Diseño]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[RoR]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[servidor web]]></category>

		<guid isPermaLink="false">http://www.ixavi.com/?p=797</guid>
		<description><![CDATA[Casi todas las aplicaciones web tiene una característica en común (y nótese que he dicho CASI TODAS, no todas) y es que la mayoría de sus páginas responde a un mismo modelo. Esta similitud entre páginas de la misma aplicación no ha pasado por alto a los responsables de desarrollo de frameworks y, actualmente, buena [...]]]></description>
			<content:encoded><![CDATA[<p>Casi todas las aplicaciones web tiene una característica en común (y nótese que he dicho CASI TODAS, no todas) y es que la mayoría de sus páginas responde a un mismo modelo. Esta similitud entre páginas de la misma aplicación no ha pasado por alto a los responsables de desarrollo de frameworks y, actualmente, buena parte de éstos ya incorporan diferentes herramientas que nos ayudan a lidiar con la repetición de código HTML que estas similitudes comportan.</p>
<p><img src="http://www.ixavi.com/wp-content/uploads/2011/09/HLayout.png" alt="layout image" title="layout-web" width="332" height="218" class="aligncenter size-full wp-image-798" /></p>
<p>El nombre escogido bajo el cual se gestionas la repetición de componentes y estructuras entre páginas de una misma aplicación es “layouts”</p>
<h4>Layouts</h4>
<p>Ruby on Rails (o RoR, un acrónimo que es posible que use de aquí en adelante) tiene un sistema de gestión de layouts muy sencillo que se aprende en un periquete. Evidentemente, detrás de este sistema básico se esconde la posibilidad de profundizar en la funcionalidad y realizar tantas piruetas como se quiera con la gestión de los layouts de nuestra aplicación.</p>
<p>Durante la generación de la aplicación, de hecho, ya tenemos una primera pista de por dónde van a ir los tiros pues dentro de la carpeta <strong>app/views</strong> podemos encontrar un subdirectorio llamado <strong>layouts</strong>.</p>
<p>Con un poco de experiencia en el desarrollo web (y más concretamente en Java <img src='http://ixavi.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ) el primer impulso que uno podría tener sería el de pensar: “Oye, seguro que en el controlador puedo definir que layout quiero utilizar asignando el nombre del fichero a una variable o llamando a un método”. Sería lo normal&#8230; es a lo que nos han estado acostubrando desde pequeños&#8230; pues esta vez no nos hará falta; si no se quiere profundizar mucho en el tema, RoR nos permite utilizar un layout simplemente creando un fichero HTML con pedazos de Ruby embebido que se llame como el controlador que lo va a usar. </p>
<p>Por ejemplo, si tenemos un controlador llamado <strong>CondemorController</strong> (el archivo se llamará condemor_controller.rb) simplemente con tener un archivo, con las características que comentábamos en el párrafo anterior, llamado <strong>condemor.html.erb</strong> en la carpeta de layouts éste último será usado por el controlador para generar la página web de respuesta.</p>
<p>A todo esto, los primeros de la clase ya estarán pensado: “pues que co*azo de sistema, mi aplicación utiliza el mismo layout para todos los controladores”. Los que hayáis pensado esto, (podéis mandarme 50 euros y) os perdonaré, básicamente porqué yo mismo lo pensé cuando empezaba a trastear on RoR, pero esta gente se ha adelantado, se ha adelantado y permite que definamos un layout por defecto. En caso de no encontrar un archivo de layout que corresponda al controlador que está preparando la respuesta, se utiliza el layout por defecto de la aplicación para mostrar la respuesta al usuario.</p>
<p>Si lo pensamos bien, este método nos ofrece una gran variedad de combinaciones sin que esto conlleve un aumento en la complejidad de nuestra solución. Por un momento pensad la flexibilidad de este mecanismo para la creación de <em>landing pages</em> personalizadas o simplemente la creación de páginas especiales (como manuales o foros de ayuda) que no siempre necesitan ceñirse a la misma estructura que el resto de la aplicación. Es muy potente y muy simple, y la simplicidad a la hora de gestionar este tipo de estructuras nos puede ayudar mucho a aumentar nuestra productividad.</p>
<h4>Hojas de estilos</h4>
<p>Una herramienta básica en el uso de los layouts son las hojas de estilo. Las hojas de estilo (CSS) nos aportan una gran flexibilidad a la hora de definir el estilo gráfico de nuestras páginas web y bien aplicadas pueden hacer magia <img src='http://ixavi.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>En RoR, las aplicaciones tienen un directorio llamado <strong>public</strong> dónde se deberían almacenar todos sus contenidos estáticos (CSSs, JSs, imágenes y otro tipo de contenido estático). En un primer momento podríamos pensar que, simplemente sabiendo como vamos a desplegar la aplicación, tendríamos suficiente en poner un path relativo en la etiqueta HTML para cargar los archivos CSS y listos; pero, imaginaros que el despliegue de la aplicación acaba siendo en un servidor con unos configuración un tanto peculiar, o que esperábamos que el domino apuntase a la carpeta <strong>public</strong> y de golpe apunta a la raíz de la aplicación (esto no debería pasar nunca&#8230; ehemmm). Para solucionar los problemas que podrían ocasionar situaciones como la anterior tenemos una función que nos permitirá cargar una hoja CSS sin tenernos que preocupar por la ubicación final de los ficheros de la aplicación. Esta función se llama <strong>stylesheet_link_tag</strong> y a continuación os escribo un pequeño ejemplo de como podría utiilzarse en un archivo de layout:</p>
<p><code>...<br />
&lt;head&gt;<br />
	&lt;title&gt;Aplicación con estilo&lt;/title&gt;<br />
	&lt;%= stylesheet_link_tag “style”, :media =&gt; “screen” %&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
	...</code></p>
<p><strong>NOTA</strong>: El archivo que se carga con esta función es <em>style.css</em> y se encuentra en la carpeta <em>public</em> de la aplicación.</p>
<p>En el ejemplo podemos ver como el uso de la función no representa un gran esfuerzo en comparación con los quebraderos de cabeza que puede ahorrarnos. Dadle una oportunidad.</p>
<p>Y con esto terminamos una entrega más de este pequeño paseo por Ruby on Rails!</p>
<p>Me estoy divirtiendo mucho con este mini-proyecto y espero estar en situación de anunciaros la disponibilidad del software dentro de poco; ahora mismo tengo que acabar de añadir las cabeceras de la licencia y avanzar un poco más en el desarrollo, bueno, bastante más para poder ofrecer algo funcional, para que engañarnos <img src='http://ixavi.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Seguid atentos!</p>
]]></content:encoded>
			<wfw:commentRss>http://ixavi.com/blog/2011/09/12/ruby-on-rails-layouts-y-hojas-de-estilo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruby on Rails &#8211; Controladores y Vistas</title>
		<link>http://ixavi.com/blog/2011/09/07/ruby-on-rails-controladores-y-vistas/</link>
		<comments>http://ixavi.com/blog/2011/09/07/ruby-on-rails-controladores-y-vistas/#comments</comments>
		<pubDate>Wed, 07 Sep 2011 08:00:09 +0000</pubDate>
		<dc:creator>Xavi</dc:creator>
				<category><![CDATA[Programación Web]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Routing]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.ixavi.com/?p=780</guid>
		<description><![CDATA[Ruby on Rails es un framework para el desarrollo web que implementa el patrón Modelo-Vista-Controlador orientado a la web (en según que documentación también puede ser que lo encontréis como patrón MVC tipo 2). Esto quiere decir que hay una separación efectiva entre el componente que recibe y gestiona las peticiones realizadas desde el navegador [...]]]></description>
			<content:encoded><![CDATA[<p>Ruby on Rails es un framework para el desarrollo web que implementa el patrón Modelo-Vista-Controlador orientado a la web (en según que documentación también puede ser que lo encontréis como patrón MVC tipo 2). Esto quiere decir que hay una separación efectiva entre el componente que recibe y gestiona las peticiones realizadas desde el navegador (controlador), el componente que se encarga de construir la interfaz que se presentara al usuario (vista) y la capa que gestiona el comportamiento del núcleo de la aplicación (modelo).</p>
<p>A continuación vamos a explicar los controladores y como generarlos automáticamente&#8230;</p>
<h4>Controladores</h4>
<p>Tal y como comentábamos, los controladores son los encargados de recibir las peticiones de los usuarios y disparar las acciones para poder devolver la respuesta a los usuarios. Estos controladores se implementan mediante clases en la carpeta <strong>app/controllers</strong> y necesitan implementar unos métodos que se encargarán de ejecutar lo que llamaremos “acciones”.</p>
<p>Para saber que controlador y que método del controlador tiene que llamar, Rails (por defecto) divide las URL de la manera que vamos a explicar a continuación:</p>
<p>Dada la URL: http://servidor/controlador/acción</p>
<p>Si Rails se está ejecutando en el servidor “servidor”, éste llamará al método “acción“ de la clase <strong>ControladorController</strong>  (en el archivo <strong>controlador_controller.rb</strong>).</p>
<p>Del párrafo anterior podemos deducir que la creación de controladores implica la creación de archivos con nombres concretos. Para evitar problemas con los nombres de los archivos y facilitar la vida a los desarrolladores, la generación de estos componentes está automatizada en el framework que estamos estudiando. Como aun no tenemos ni un sólo controlador (si arráncaramos el servidor web ahora mismo sólo veríamos la página por defecto que incluye Rails en su servidor web) vamos a crear uno desde cero.</p>
<p>Para generar el controlador nos situamos en la raíz del proyecto y ejecutamos el siguiente comando:</p>
<p><code>script/generate controller index index</code></p>
<p>La nomenclatura de los <strong>controladores</strong> y las <strong>acciones</strong> es libre, pero en este ejemplo vamos a utilizar el controlador <strong>IndexController</strong> y la acción <strong>index</strong> para definir la acción que responderá a las peticiones que se realicen a la raíz de nuestra aplicación (veremos como definir que controlador y que acción llamar en las peticiones a la raíz de la aplicación al final de este artículo). La razón por la cual utilizo estos nombres es porqué son los que se utilizan por defecto en el Zend Framework y la implementación del patrón MVC del ZF y Rails son, bajo mi punto de vista, muy parecidas. </p>
<p>La salida de la consola cuando ejecutemos la operación anterior debería ser la siguiente:</p>
<p><img src="http://www.ixavi.com/wp-content/uploads/2011/09/Selection_001.png" alt="script/generate controller index index" title="rails-generate-controller" width="399" height="138" class="aligncenter size-full wp-image-781" /></p>
<p>En la captura de pantalla anterior podemos observar como a parte del fichero <strong>index_controller.rb</strong> también se han creado ficheros para tests, helpers y <em>vistas</em>.</p>
<p>Pero, qué son las vistas? les hechamos un <em>vista</em>zo en un momento. Dejadme que muestre el contenido de nuestro controlador y vamos en seguida <img src='http://ixavi.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>El contenido del fichero del controlador es el siguiente:</p>
<p><code>class IndexController &lt; ApplicationController</p>
<p>  def index</p>
<p>  end</p>
<p>end</code></p>
<p>El código, evidentemente está vacio (el dia que salga un framework que escriba el código de lo que el desarrollador está pensado habremos llegado DEMASIADO lejos <img src='http://ixavi.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' />  ) pero podemos ver como IndexController hereda de una clase llamada ApplicationController (propia de Rails) y que el método <strong>index</strong> ya está también definido.</p>
<p>Ahora que nos hemos cercionado de que nuestro controlador no está haciendo nada, vamos a mirar que secretos nos esconden las vistas&#8230;</p>
<h4>Vistas</h4>
<p>Las vistas, básicamente son ficheros *.erb (Embedded Ruby) que contienen su parte estática en HTML y su parte dinámica en código Ruby. Como bien os podéis imaginar, el resultado de la ejecución de sus partes dinámicas determina la página web que se mostrará al usuario en respuesta a su petición. Para personalizar el pequeño test que estamos realizando vamos a modificar el contenido que el generador automático haya guardado en el fichero <strong>index.html.erb</strong> por el siguiente contenido:</p>
<p><code>&lt;h1&gt;Index Controller&lt;/h1&gt;<br />
&lt;p&gt;Hello World! That's just an static view&lt;/p&gt;</code></p>
<p>Para ver los efectos de este cambio podemos situarnos otra vez en la raíz de nuestro proyecto y ejecutar el comando para ejecutar el servidor de desarrollo que Rails nos proporciona por defecto.</p>
<p><code>script/server start</code></p>
<p>Una vez arrancado el servidor, al visitar la página <a href="http://localhost:3000/index/index">http://localhost:3000/index/index</a> deberíais poder ver una imagen parecida a la siguiente:</p>
<p><img src="http://www.ixavi.com/wp-content/uploads/2011/09/Selection_002.png" alt="" title="indexcontroller-sample" width="462" height="258" class="aligncenter size-full wp-image-783" /></p>
<h4>One more thing&#8230;</h4>
<p>Como en el anterior artículo nos quedamos un poco cortos vamos a tirar un poquito más del carro y vamos a ver muy poquito de lo que Rails ofrece de forma automática. Para ello vamos a tener que definir una variable de clase en el controlador, por ejemplo, en el método index (el único que tenemos hasta ahora) y lo vamos a dejar de la siguiente manera:</p>
<p><code>def index<br />
  @variable = "dynamic";<br />
end</code></p>
<p>Y el contenido de la vista lo vamos modificar para que quede así:</p>
<p><code>&lt;h1&gt;Index Controller&lt;/h1&gt;<br />
&lt;p&gt;Hello World! That's just a &lt;%=@variable%&gt; view&lt;/p&gt;</code></p>
<p>Si no hemos parado el servidor, simplemente recargando la página que hemos consultado antes vamos a ver el resultado de los cambios:</p>
<p><img src="http://www.ixavi.com/wp-content/uploads/2011/09/Selection_004.png" alt="" title="indexcontroller-dynamic" width="463" height="254" class="aligncenter size-full wp-image-786" /></p>
<p>El hecho de que la vista pueda acceder a las variables de las instancias de los controladores es algo que Rails nos provee de forma completamente transparente para los desarrolladores. Este ejemplo puede saber a poco a muchos de los que estéis acostumbrados a la programación y es que, realmente, esto es sólo una minúscula parte de la punta del iceberg de todas las cosas que Rails ha ido automatizando en el proceso de desarrollo de una aplicación web.</p>
<p>A parte de esta simple modificación para hacer la vista un poco más dinámica <img src='http://ixavi.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  también os avanzo como hacer que el controlador “index” y su acción “index” se utilicen para responder las peticiones que se hacen a la raíz del sistema. Esto, implica un cambio en la configuración del comportamiento de la aplicación en si misma y, por lo tanto, vamos a tener que editar el fichero <strong>config/routes.rb</strong>.</p>
<p>El cambio necesario para que la aplicación se comporte como decíamos implica encontrar la línea de código que pone:</p>
<p><code># map.root :controller =&gt; "welcome"</code></p>
<p>Y sustituirla por la siguiente:</p>
<p><code>map.root :controller =&gt; "index", :action =&gt; “index”</code></p>
<p>Sin reiniciar el servidor, visitando http://localhost:3000/ veremos que el resultado de la acción “index” de nuestro IndexController ya se muestra cuando visitamos la raíz del servidor.</p>
<p>Bueno, esto ha sido todo por hoy, en el horizonte tenemos templates, scaffolds y mucho más, no faltéis!</p>
]]></content:encoded>
			<wfw:commentRss>http://ixavi.com/blog/2011/09/07/ruby-on-rails-controladores-y-vistas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Guía rápida de GIT &#8211; Parte II</title>
		<link>http://ixavi.com/blog/2011/09/05/guia-rapida-de-git-parte-2/</link>
		<comments>http://ixavi.com/blog/2011/09/05/guia-rapida-de-git-parte-2/#comments</comments>
		<pubDate>Mon, 05 Sep 2011 08:00:55 +0000</pubDate>
		<dc:creator>Xavi</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programación Web]]></category>
		<category><![CDATA[CVS]]></category>
		<category><![CDATA[GIT]]></category>
		<category><![CDATA[SVN]]></category>

		<guid isPermaLink="false">http://www.ixavi.com/?p=755</guid>
		<description><![CDATA[Siguiendo con la introducción a GIT que se publicó hace unos días, hoy vamos a ver como realizar unas cuantas operaciones más. Si en la primera parte de esta guía introductoria vimos como configurar nuestro usuario, crear un repositorio y enviar nuestras modificaciones a un repositorio remoto en esta vamos a ver cómo descargar todo [...]]]></description>
			<content:encoded><![CDATA[<p>Siguiendo con la <a title="Guía rápida de GIT (a.k.a. GIT for dummies)" href="http://www.ixavi.com/2011/08/guia-rapida-de-git/">introducción a GIT</a> que se publicó hace unos días, hoy vamos a ver como realizar unas cuantas operaciones más.</p>
<p>Si en la primera parte de esta guía introductoria vimos como configurar nuestro usuario, crear un repositorio y enviar nuestras modificaciones a un repositorio remoto en esta vamos a ver cómo descargar todo el contenido de un repositorio remoto, actualizar la copia local y cómo realizar branches y tags.</p>
<p>Manos a la obra!</p>
<h4>Trabajando con un repositorio remoto</h4>
<p>Los sistemas de control de versiones centralizados, como Subversion, tienen en su diseño una gran vocación de trabajar en red y así poder organizar el trabajo en equipo. Justamente por la facilidad a la hora de poner en marcha un repositorio a través de la red, a veces se abusa de estos sistemas y se decide (erroneamente) utilizar este tipo de sistemas para la gestión documental de los proyectos. </p>
<p>GIT provee, al igual que Subversion, una gestión de la descarga inicial y actualización desde repositorios remotos, pero al ofrecer un abanico más amplio de posibilidades es necesario aprender un grupo de comandos adicional. Siguiendo la comparación en paralelao con Subversion, podríamos empezar la revisión de estas funcionalidades de GIT con el equivalente a la operación <strong>checkout</strong> del hermano &#8220;centralizado&#8221;.</p>
<p>Cuando queremos descargar todo el contenido de un repositorio GIT, hace falta disponer del método de acceso (recordemos que generalmente se utiliza el protocolo HTTP o conexiones seguras como SSH pero puede haber otros métodos) y ejecutar el comando <strong>clone</strong></p>
<p><code>git clone http://usuari@servidor/repositorio.git</code></p>
<p>Este comando nos va a generar una copia con lo que en ese momento podamos encontrar en el repositorio alojado en el servidor remoto y debemos tener en cuenta que puede tardar unos minutos.</p>
<p>Si, por el contrario, ya tenemos una copia de un proyecto y queremos actualizar sus contenidos el comando que deberemos usar es el siguiente:</p>
<p><code>git pull</code></p>
<p>En este comando podemos observar que, aunque GIT nos obligue a realizar ciertas operaciones de forma explícita (que en otros sistemas de control de versiones quizá son prescindibles), a veces tiene implementadas pequeñas funcionalidades que nos facilitan la vida cuando tenemos que lidiar con él (como en este caso, que recuerda el servidor remoto del que se descargó el repositorio).</p>
<h4>Tags</h4>
<p>El significado que puede tener la palabra “tag” en un sistema de control de versiones es muy diferente del que puede tener en nuestras redes sociales preferidas <img src='http://ixavi.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> . El concepto de tag, utilizado desde hace tiempo en los sistemas de control de versiones, sirve para marcar un estado concreto del desarrollo que nos interese marcar para facilitar el acceso al mismo. Estos estados normalmente se asocian a hitos de proyectos o a versiones estables que se quieren poner a disposición de los compañeros de desarrollo o público en general.</p>
<p>La creación de tags en Subversión es un proceso prácticamente manual. Para definir uno de estos estados “destacados” se copia todo el código del repositorio en una carpeta destinada a albergar ese tag y se deja ahí hasta el fin de los días. GIT gestiona de forma mucho más eficiente este tipo de operaciones y nos permite definir un tag simplemente con unla ejecución de un comando -y sin una copia masiva de ficheros-.</p>
<p><code>git tag nombretag<br />
git push --tags</code></p>
<p>Estrictamente la creación del tag únicamente requiere la ejecución del primer comando, pero nosotros hemos añadido un segundo comando para enviar el tag al servidor remoto. Hemos añadido este comando porqué este es el funcionamiento habitual de los tags, pero es verdad que usuarios más habituados al uso de sistemas de control de versiones pueden ver en los tags “locales” una oportunidad de mejorar la gestión del desarrollo a nivel personal.</p>
<h4>Branches</h4>
<p>El uso que principalmente se da a los <strong>branches</strong> es el de separar el desarrollo de componentes o funcionalidades de la rama principal del proyecto. Para esto se crea un branch, se desarrolla el componente o funcionalidad correspondiente y posteriormente se juntan las modificaciones del branch con el código en la rama principal. Esta última operación normalmente implica la correción de conflictos surgidos de la evolución del software en paralelo y puede tomar más tiempo de lo esperado.</p>
<p>Siguiendo con la comparación que estamos haciendo con Subversion, encontraremos que con GIT es mucho más sencillo generar branches que los que resultaba hacerlo con SVN. Las diferencias són muy parecidas a las que nos hemos encontrado en el caso de los tags, mientras que en Subversion es necesario copiar todo el código a un directorio destinado a ese branch, en GIT podemos generar uno en el acto y cambiar nuestro árbol de ficheros al nuevo branch en cuestión de segundos.</p>
<p>Vamos a ver un ejemplo de la creación de un branch en GIT:</p>
<p><code>git branch nombrebranch<br />
git checkout nombrebranch</code></p>
<p>Igual que con los tags, el único comando obligatorio es el primero. Pero, hay que tener en cuenta que la creación del branch, en GIT, no implica un cambio del actual árbol de directorios al nuevo branch, simplemente lo crea. Para realizar ese cambio tenemos el comando <strong>checkout</strong> (no confundir con la operación checkout de SVN!).</p>
<p>Hasta aquí ningún problema, los branches son fáciles de crear y GIT permite estar trabajando en uno nuevo en cuestión de segundos pero&#8230; que fácil seria la vida del desarrollador si no tuviesemos que hacer nunca la operación maldita, <strong>EL MERGE</strong>. </p>
<p>La operación <strong>merge</strong> (enemiga natural de los equipos de desarrolladores <img src='http://ixavi.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' />  ) consiste en traspasar los cambios de un branch a otro. Habitualmente esto se hace para enviar los canvios realizados para implementar un nuevo componente a la rama principal y para realizar esta tarea (de forma automática) ejecutamos el comando siguiente: </p>
<p><code>git merge nombrebranch</code></p>
<p><strong>NOTA</strong>: Para realizar esta operación con este número de parámetros, debemos estar trabajando en un branch diferente a “nombrebranch”. Si no es así, hay otras formas de llamar el comando merge pero requieren un poco más de conocimiento de GIT.</p>
<p>Si no existen conflictos entre un branch y otro (yes! I had a dream&#8230; A dream where two branches do not have to conflict with each other!! <img src='http://ixavi.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' />  ) la operación merge habría acabado aquí; pero en el caso de existir (9 de cada 10 desarrolladores se encuentran conflictos cuando hacen un merge, el restante simplemente no ha desarrollado nada), GIT nos marcaría los archivos con conflictos y seríamos nosotros los encargados de editar esos archivos, añadir los cambios al repositorio y confirmarlos.</p>
<p>Añadir los cambios al repositorio y, posteriormente, confirmarlos requiere la ejecución de un par de comandos que ya vimos anteriormente pero que no está de más recordarlos:</p>
<p><code>git add fichero-con-conflictos-resueltos<br />
git commit -m “he resuelto los conflictos”</code></p>
<p>Bueno, y hasta aquí hemos llegado. Pensad que el 90% o más de las funcionalidades que se usan de los sistemas de controles de versiones han sido explicadas con más o menos detalle en esta guía básica repartida en dos partes. Y como creo que he cumplido con el título de la guía (Guía básica), vamos a cerrar aquí esta introducción a GIT. En caso de describir funcionalidades más avanzadas os las comunicaré bajo otros títulos más acordes al nivel de las explicaciones <img src='http://ixavi.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> . </p>
<p>Espero que esta guía os sirva y controlad (vuestras versiones!)</p>
]]></content:encoded>
			<wfw:commentRss>http://ixavi.com/blog/2011/09/05/guia-rapida-de-git-parte-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Primeros pasos con Ruby y Rails</title>
		<link>http://ixavi.com/blog/2011/09/03/primeros-pasos-con-ruby-y-rails/</link>
		<comments>http://ixavi.com/blog/2011/09/03/primeros-pasos-con-ruby-y-rails/#comments</comments>
		<pubDate>Sat, 03 Sep 2011 12:19:33 +0000</pubDate>
		<dc:creator>Xavi</dc:creator>
				<category><![CDATA[Programación Web]]></category>
		<category><![CDATA[Aptana]]></category>
		<category><![CDATA[RadRails]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://www.ixavi.com/?p=742</guid>
		<description><![CDATA[Hace años la programación web tenía mucho más que ver con la artesanía que con la programación. Cualquier pequeño desarrollo requería un número de lineas de código que nunca nadie más volvería a utilizar (y seguramente comprender). Pues bien, para facilitar la vida a los desarrolladores, empezaron a llegar lenguajes de programación más ágiles para [...]]]></description>
			<content:encoded><![CDATA[<p>Hace años la programación web tenía mucho más que ver con la artesanía que con la programación. Cualquier pequeño desarrollo requería un número de lineas de código que nunca nadie más volvería a utilizar (y seguramente comprender). Pues bien, para facilitar la vida a los desarrolladores, empezaron a llegar lenguajes de programación más ágiles para el desarrollo web como PHP y, posteriormente, frameworks que nos facilitaban aun más la vida al traer un gran número de funcionalidades ya implementadas (como en el caso de Zend Framework para PHP o GWT para Java).</p>
<p>De entre todos estas tecnologías de (relativa) reciente aparición, un minoritario lenguaje de programación, Ruby, se encontró por sorpresa con un ligero pero eficiente framework para el desarrollo web (cosas que pasan en la vida <img src='http://ixavi.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ), Rails. Y de este binomio surgió una herramienta que considero que pude ser clave en los próximos años.</p>
<p>Por el interés que me ha suscitado tanto Ruby como Rails, intentaré presentar las operaciones más básicas de este framework junto con el lenguaje de programación que lo hace posible -en un número aun indeterinado de artículos-. El resultado de éstos estarà disponible como software libre en un repositorio público que aun está por decidir (pero que muy probablemente será GitHub).</p>
<p>Empezamos? <img src='http://ixavi.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><img src="http://www.ixavi.com/wp-content/uploads/2011/09/ruby_logo-300x300.png" alt="Ruby Logo" title="ruby_logo" width="300" height="300" class="aligncenter size-medium wp-image-743" /></p>
<p>Antes de empezar a explicar como meternos en Ruby y Rails podría soltar un rollo teórico de unos cuantos párrafos (que si Ruby es un lenguaje completamente orientado a objeto, que si Rails es un framework que implementa el patrón MVC, que si no hace falta relanzar el servidor para probar cambios, etc, etc.) pero prefiero ir comentando este tipo de cosas a medida que vayamos avanzando. Desde mi punto de vista es un poco más ameno y da menos miedo.</p>
<h4>Instalando Ruby y Rails</h4>
<p>Para empezar a desarrollar en Rails es necesario tener instaladas las librerías de Ruby. Para eso deberemos instalar los siguientes paquetes en Linux:</p>
<ul>
<li><em>ruby (o ruby1.8)</em>: Paquete básico que contiene el core de Ruby.</li>
<li><em>rubygems</em>: Nos permitirá utilizar el comando <strong>gems</strong> más adelante, básico para desarrollar en Rails.</li>
<li><em>libopenssl-ruby</em>: Dependencias necesarias para el uso de según que algoritmos de encriptación.</li>
<li><em>ruby1.8-dev</em>: Cabeceras de Ruby.</li>
<li><em>libsqlite3-dev</em>: Sistema ligero y flexible de bases de datos que nos ayudará en el desarrollo en local de nuestra aplicación en Rails. Realmente este paquete no sería necesario pero lo vamos a utilizar.</li>
</ul>
<p><strong>NOTA</strong>: Antes de empezar a discutir sobre versiones voy a dar una explicación sobre el uso de la versiones en este proyecto. He decidido utilizar la rama de Ruby 1.8 y Rails 2.2 porqué son las versiones estables en el momento en que empecé con esto. En cuanto esté un poco más familiarizado ya me animaré a escribir sobre las mejoras que Rails 3.1 o Ruby 1.9 nos pueden aportar.</p>
<p>Para instalar estos paquetes en Ubuntu podemos utilizar <strong>apt-get</strong> o <strong>aptitude</strong> indistintamente pero tened en cuenta que para otras distribuciones de Linux el nombre de estos paquetes puede variar sustancialmente. Una vez hayamos instalado estos paquetes vamos a utilizar el comando <strong>gems</strong> -igual en todas las plataformas-.</p>
<p>Con las dependencias instaladas, vamos a proceder a instalar Rails utilizando el propio gestor de paquetes de Ruby: Gems. Este gestor nos permite instalar diferentes librerías y frameworks de Ruby en nuestro equipo sin tener que sufrir por las diferencias entre plataformas. Así, utilizando este gestor podemos ejecutar el siguiente comando directamente en la consola para instalar Rails:</p>
<p><code>sudo gem install rails --version 2.2.3</code></p>
<p>Si hemos tenido éxito con todas estas operaciones ya nos podemos empezar a crear nuestra aplicación.</p>
<h4>Crear un nuevo proyecto</h4>
<p>El fucionamiento de Rails en cuanto a la creación del proyecto y sus diferentes componentes es bastante parecido al de las herramientas por línea de comando de Zend Framework (os había comentado ya que soy bastante fan del ZF?). De este modo, para crear una nueva aplicación en Rails sólo tenemos situarnos en el directorio dónde vayamos a guardar este proyecto y ejecutar el siguiente comando:</p>
<p><code>rails webapp</code></p>
<p>Esto nos generará un arbol completo de nuestra nueva aplicación. Explorad su contenido minuciosamente y cuando no entedáis nada volved para el siguiente artículo <img src='http://ixavi.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Bueno&#8230; como creo que os dejo con demasiado por hacer os pongo un pequeño resumen de lo que podéis encontrar en el árbol de directorios del proyecto, que no soy tan malo!</p>
<p>Primero los directorios:</p>
<ul>
<li><em>app</em>: Básicamente es el directorio dónde vamos a desarrollar la aplicación, dentro de esta carpeta podemos encontrar las clases correspondientes a modelos, controladores, scripts relacionados con las vistas y todo tipo de archivos relacionados con la aplicación a desarrollar.</li>
<li><em>config</em>: En este directorio se encuentran los archivos dónde vamos a definir a que base de datos nos conectamos, en que entorno nos encontramos (sí, Rails nos permite definir diferentes entornos como &#8220;ddevelopment&#8221;, &#8220;testing&#8221; y &#8220;production&#8221; para facilitarnos la vida) o que routing van a seguir las peticiones HTTP que reciba la aplicación.</li>
<li><em>db</em>: En este directorio vamos a ver el schema de la base de datos que definamos a medida que desarrollemos la aplicación y otros archivos que nos ayudarán con el mantenimiento de la misma (si tienes curiosidad sobre esto último busca información sobre &#8220;migrations&#8221; en la documentación de Rails).</li>
<li><em>doc</em>: Directorio dónde vamos a generar la documentación de nuestra aplicaciónm (esa documentación que todos los desarrolladores amamos generar!).</li>
<li><em>lib</em>: Módulos y librerías externas que podamos necesitar al largo del desarrollo.</li>
<li><em>log</em>: Pues eso, el directorio dónde seguramente van a ir a parar los logs de nuestra apliación (por lo menos en desarrollo).</li>
<li><em>public</em>: Si has trabajado alguna vez con ZF, este directorio actual exactamente igual en Rails que en el framework de PHP. Básicamente se encarga de almacenar los recursos que tienen que ser accesibles por el servidor web (css, imágenes, js adicionales&#8230;).</li>
<li><em>script</em>: Contiene los scripts que se encargan de arrancar el servidor de pruebas y puede almacenar otros scripts útiles para la gestión de la aplicación (despliegue u otras operaciones importantes).</li>
<li><em>test</em>: Todos los tests de la aplicación (unitarios y de otros tipos que ya veremos) van a ir almacenados en esta carpeta.</li>
<li><em>tmp</em>: Archivos temporales. Si tu aplicación genera &#8220;basurilla&#8221; no persistente puedes almacenarla ahí.</li>
<li><em>vendor</em>: Directorio para el almacenamiento del código de Ruby, Rails y gemas que utilices en tu proyecto.</li>
</ul>
<p>Y los dos archivos generados:</p>
<ul>
<li><em>Rakefile</em>: Equivalente del Makefile pero para Ruby.</li>
<li><em>README</em>: Un fichero de readme es un fichero de readme, no le daremos más vueltas pero la lectura de su contenido inicial está muy recomendada.</li>
</ul>
<p>Hoy pretendía empezar a tocar algo de código pero el post estaba empezando a crecer mucho así que espero veros por aquí en unos días.</p>
<p>Cheers and Rubies!!</p>
]]></content:encoded>
			<wfw:commentRss>http://ixavi.com/blog/2011/09/03/primeros-pasos-con-ruby-y-rails/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Guía rápida de GIT (a.k.a. GIT for dummies)</title>
		<link>http://ixavi.com/blog/2011/08/30/guia-rapida-de-git/</link>
		<comments>http://ixavi.com/blog/2011/08/30/guia-rapida-de-git/#comments</comments>
		<pubDate>Tue, 30 Aug 2011 16:30:06 +0000</pubDate>
		<dc:creator>Xavi</dc:creator>
				<category><![CDATA[Programación Web]]></category>
		<category><![CDATA[CVS]]></category>
		<category><![CDATA[GIT]]></category>

		<guid isPermaLink="false">http://www.ixavi.com/?p=720</guid>
		<description><![CDATA[Hay tecnologías que se meten en tu vida, que no las quieres pero se meten en tus estudios, tu trabajo y no hay más remedio de lidiar con ellas con el mejor humor posible; en cambio, hay otras que se te cruzan por delante y te apetece incorporarlas a tu dia a dia desde el [...]]]></description>
			<content:encoded><![CDATA[<p>Hay tecnologías que se meten en tu vida, que no las quieres pero se meten en tus estudios, tu trabajo y no hay más remedio de lidiar con ellas con el mejor humor posible; en cambio, hay otras que se te cruzan por delante y te apetece incorporarlas a tu dia a dia desde el momento en que te enteras de su existencia.</p>
<p><a href="http://www.ixavi.com/wp-content/uploads/2011/08/git.jpg"><img class="aligncenter size-full wp-image-723" title="GIT" src="http://www.ixavi.com/wp-content/uploads/2011/08/git.jpg" alt="GIT logo" width="207" height="125" /></a></p>
<p>Para mi, GIT pertenece a este segundo tipo de tecnologías. Hacía tiempo que tenía ganas de meterme a fondo en este sistema de control de versiones, así que he aprovechado mis primeros pasos en un lenguaje de programación nuevo para escribir esta pequeña guía (me la he escrito para mi pero espero que también os guste a vosotros <img src='http://ixavi.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ).</p>
<h4>Instalación</h4>
<p>Para instalar las herramientas básicas de GIT en Ubuntu (probado en 11.04) sólo hace falta ejecutar el siguiente comando en el terminal.</p>
<p><code>sudo apt-get install git-core git-gui git-doc</code></p>
<p>En principio no vamos a utilizar la interfaz gráfica pero el paquete no ocupa mucho (y no estaba convencido que no tuviese que recurrir a ella durante los primeros días).</p>
<h4>Configuración de usuario</h4>
<p>A nivel de identificación de usuarios GIT no es diferente a otros sistemas de control de versiones. Éste require el envío del usuario que realiza según que acciones para poder implementar un control de acceso fiable (dependiendo del repositorio). Para proporcionar estos datos a todas las operaciones que realicemos desde un mismo equipo podemos ejecutar los siguientes comandos:</p>
<p><code>git config --global user.name "Nombre Apellidos"<br />
git config --global user.email "alias@dominio.com"</code></p>
<p>La alternativa a esto es mandar el autor en cada operación con un parámetro extra peeero&#8230; no lo recomiendo, es mucho más cómodo esto y como tenemos cuidado de no ir revelando la contraseña de nuestro usuario (verdad? <img src='http://ixavi.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ) no vamos a tener problemas.</p>
<h4>Creación del repositorio y primer &#8220;commit&#8221;</h4>
<p>GIT, al ser un sistema de control de versiones distribuído, nos permite trabajar sin la necesidad de estar conectados a un servidor que alberga un repositorio central. De esta manera lo primero que debemos hacer es crear un repositorio en nuestra máquina (más tarde ya nos encargaremos de sincronizarlo con un servidor expuesto a Internet).</p>
<p>Para crear un repositorio en nuestra máquina bastará con la ejecución del siguiente comando. La primera vez recomiendo que esta operación se realice en un directorio vacío para controlar 100% como funciona, cuando hayamos adquirido más experiencia ya nos atreveremos a saltarnos pasos <img src='http://ixavi.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><code> git init</code></p>
<p>Hasta aquí fácil, verdad? Pues vamos a empezar a usar el control de versiones y sincronizarnos con un repositorio remoto.</p>
<h4>Versiones en local y sincronización con servidor remoto</h4>
<p>Una vez en marcha el repositorio local, crearemos un archivo en el directorio (para el ejemplo vamos a usar &#8220;file&#8221; como nombre del archivo) y haremos un commit local en nuestra máquina (no se envían a un servidor remoto de forma automática):</p>
<p><code>git add file<br />
git commit -m "Nuestro primer commit"</code></p>
<p><strong>NOTA</strong>: se sobreentiende que el fichero &#8220;file&#8221; lo tenéis que crear antes de ejecutar estos comandos.</p>
<p>Una vez creada la primera revisión vamos a sincronizarlo con un servidor remoto. Para realizar esta operación primero tenemos que decirle a GIT dónde encontrar este repositorio y que nombre vamos a utilizar para referirnos a él:</p>
<p><code>git remote add central usuario@servidor:path/repositorio.git</code></p>
<p>Antes de seguir vamos a analizar brevemente el comando. &#8220;git remote add&#8221; es el nombre entero del comando puesto que lo que queremos es añadir la dirección de un repositorio remoto a nuestro entorno de desarrollo, &#8220;central&#8221; es el alias que vamos a utilizar para referirnos al repositorio remoto y &#8220;usuario@servidor:path/repositorio.git&#8221; es el método que vamos a utilizar para acceder al repositorio (debemos tener en cuentra que los repositorios GIT son directorios como cualquier otro y que debemos utilizar sistemas como SSH o HTTP para acceder a ellos).</p>
<p>Cuando ya hemos definido como vamos a acceder y referirnos a él, ya podemos intentar sincronizar nuestras modificacione en local con el servidor remoto. Para eso mandaremos todos los cambios de nuestra rama a la rama del repositorio &#8220;central&#8221;.</p>
<p><code>git push -u central master</code></p>
<p>Igual que hemos hecho antes, vamos a analizar este comando por partes. &#8220;git push -u&#8221; básicamente lo que hace es enviar todos los cambios de una rama hacía otra y &#8220;central master&#8221; lo único que define es el destino y el orígen de los cambios que queremos enviar. </p>
<p>Cabe destacar que la rama principal que se crea al ejecutar &#8220;git init&#8221; se llama <strong>master</strong>. Este nombre se puede cambiar en el momento de la creación de repositorio pero es un valor por defecto que por lo que he podido observar se respeta bastante dentro de la comunidad de usuarios de GIT.</p>
<p>Y&#8230; esto es todo por hoy! Espero seguir ampliando esta breve explicación sobre GIT en los siguientes artículos pero no prometo nada. El trabajo, los estudios y otras ocupaciones se podrían entrometer <img src='http://ixavi.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Espero que os haya sido de ayuda!!</p>
]]></content:encoded>
			<wfw:commentRss>http://ixavi.com/blog/2011/08/30/guia-rapida-de-git/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ROM para el Nexus One &#8211; MIUI</title>
		<link>http://ixavi.com/blog/2011/08/24/rom-para-el-nexus-one-miui/</link>
		<comments>http://ixavi.com/blog/2011/08/24/rom-para-el-nexus-one-miui/#comments</comments>
		<pubDate>Wed, 24 Aug 2011 20:50:27 +0000</pubDate>
		<dc:creator>Xavi</dc:creator>
				<category><![CDATA[Móviles y Internet móvil]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[HTC]]></category>
		<category><![CDATA[MIUI]]></category>
		<category><![CDATA[Nexus One]]></category>

		<guid isPermaLink="false">http://www.ixavi.com/?p=706</guid>
		<description><![CDATA[Después de un tiempo con un HTC Desire, del que os he hablado en algún que otro post anterior, he cambiado mi terminal por un Nexus One. No entraré a hacer una reseña del terminal pero sí comentaré que, aunque son dos terminales muy parecidos, me quedo con el Nexus; seguramente se trata de una [...]]]></description>
			<content:encoded><![CDATA[<p>Después de un tiempo con un HTC Desire, del que os he hablado en algún que otro post anterior, he cambiado mi terminal por un Nexus One. No entraré a hacer una reseña del terminal pero sí comentaré que, aunque son dos terminales muy parecidos, me quedo con el Nexus; seguramente se trata de una cuestión de &#8216;feeling&#8217; pero en mi mano luce mucho mejor.</p>
<p><a href="http://www.ixavi.com/wp-content/uploads/2011/08/Selection_001.png"><img src="http://www.ixavi.com/wp-content/uploads/2011/08/Selection_001.png" alt="MIUI" title="MIUI-ICON" width="174" height="87" class="aligncenter size-full wp-image-713" /></a></p>
<p>Dicho esto voy a presentaros una de las ROMs que he probado estos días en el Nexus: <strong>MIUI</strong>. Esta ROM tiene bastante fama y atrae un buen número de las miradas dirigidas al mundo de las ROMs alternativas. </p>
<p>La primera sensación que da esta ROM es de tener los detalles gráficos muy cuidados. La interfaz gráfica es muy limpia y sorprende la fluidez con la que se maneja. En la imágen siguiente podemos ver una captura de pantalla de mi terminal con esta ROM.</p>
<p><a href="http://www.ixavi.com/wp-content/uploads/2011/08/20110824_214007.jpg"><img src="http://www.ixavi.com/wp-content/uploads/2011/08/20110824_214007-180x300.jpg" alt="MIUI Launcher" title="launcher" width="180" height="300" class="aligncenter size-medium wp-image-711" /></a></p>
<p><strong>NOTA</strong>: Las ROMs MIUI permiten tomar capturas de pantalla directamente desde el terminal y sin la instalación de ningún añadido.</p>
<p>A continuación, cuando empezamos a jugar con las configuraciones de esta ROM nos damos cuenta de la flexibilidad de ésta y del potencial que tiene a la hora de personalizar nuestro terminal. Es en este punto donde también se pone de manifiesto una de sus características/defectos que, desde mi punto de vista, le resta punto: el aroma a iPhone que desprenden algunos de sus elementos de diseño. Para ilustrar esto os pongo una captura de los menus de configuración:</p>
<p><a href="http://www.ixavi.com/wp-content/uploads/2011/08/20110824_221441.jpg"><img src="http://www.ixavi.com/wp-content/uploads/2011/08/20110824_221441-180x300.jpg" alt="MIUI settings" title="menu_settings" width="180" height="300" class="aligncenter size-medium wp-image-712" /></a></p>
<p>Sinceramente, el rendimiento de esta ROM me ha sorprendido muy gratamente y detalles como el hecho de que incluya ya la última versión del Market o que se actualice todos los viernes de forma programada me hace otorgarle una muy buena nota. Y alguién más debe pensar lo mismo porqué este mismo año se va a poner a la venta <a href="http://miui.es/2011/08/17/mi-one-esta-entre-nosotros/" title="MIUI one presentado">un terminal con esta ROM</a> de serie. ¡Ah! se me olvidaba, tiene un gran reproductor de música, le da mil vueltas al reproductor de música por defecto en mi opinión.</p>
<p>Y aun así, no será la que se quede en mi terminal, pues no ofrece acceso al código fuente y esa es una de las grandes virtudes de Android. Cada uno que elija su camino <img src='http://ixavi.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<ul>
<li>MIUI Oficial: <a href="http://en.miui.com/" title="Sitio oficial de MIUI">http://en.miui.com/</a></li>
<li>MIUI Reino unido: <a href="http://miuiandroid.com/" title="MIUI Reino Unido">http://miuiandroid.com/</a></li>
<li>MIUI en Castellano: <a href="http://miui.es/" title="MIUI en Castellano">http://miui.es/</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://ixavi.com/blog/2011/08/24/rom-para-el-nexus-one-miui/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Actualizar HBOOT en la HTC Desire (AlphaRev)</title>
		<link>http://ixavi.com/blog/2011/06/18/actualizar-hboot-en-la-htc-desire-alpharev/</link>
		<comments>http://ixavi.com/blog/2011/06/18/actualizar-hboot-en-la-htc-desire-alpharev/#comments</comments>
		<pubDate>Sat, 18 Jun 2011 13:49:30 +0000</pubDate>
		<dc:creator>Xavi</dc:creator>
				<category><![CDATA[Móviles y Internet móvil]]></category>
		<category><![CDATA[AlphaRev]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[CM7]]></category>
		<category><![CDATA[Cyanogenmod]]></category>
		<category><![CDATA[Desire]]></category>
		<category><![CDATA[HBOOT]]></category>
		<category><![CDATA[HTC]]></category>
		<category><![CDATA[ROM]]></category>
		<category><![CDATA[XDADevelopers]]></category>

		<guid isPermaLink="false">http://www.ixavi.com/?p=689</guid>
		<description><![CDATA[ATENCIÓN: Este post puede resultar extremadamente friki para aquellos que no estén dentro del mundillo de Android, ROMs y bootloaders. El euipo de AlphaRev ha publicado recientemente una nueva versión de los HBOOT Oxygen y CyanogenMod7 para la Desire (tienes una Desire y aun no conoces el trabajo de AlphaRev? abre el enlace de su [...]]]></description>
			<content:encoded><![CDATA[<p><strong>ATENCIÓN</strong>: Este post puede resultar extremadamente friki para aquellos que no estén dentro del mundillo de Android, ROMs y bootloaders.</p>
<p>El euipo de AlphaRev ha publicado recientemente una nueva versión de los HBOOT Oxygen y CyanogenMod7 para la Desire (tienes una Desire y aun no conoces el trabajo de AlphaRev? abre el enlace de su <a href="http://alpharev.nl/">página oficial</a> o del <a href="http://forum.xda-developers.com/showthread.php?t=794314">thread en XDA</a> ya!) y comunicaron por Twitter y otros canales la conveniencia de actualizarse.</p>
<p>Las instrucciones para actualizar si ya teníamos el HBOOT de AlphaRev instalado son muy sencillas por lo que no genera ningún tipo de temor el hecho de actualizarlo&#8230; hasta que pasa lo que pasa&#8230; que te quedas sin móvil&#8230; durante los minutos que tardas a llegar hasta aquí. </p>
<p>Para evitar que nos pase esto, primero vamos a repasar los pasos que se describen en la página de AlphaRev:</p>
<ol>
<li>Hacer un backup desde el recovery (Nandroid)</li>
<li>Descargar y verificar (md5) la imagen del HBOOT</li>
<li>&#8220;Flashear&#8221; la imagen del HBOOT (fastboot flash hboot nombre_del_archivo_del_hboot.img)</li>
<li>Ejecutar: fastboot reboot-bootloader (y esperar a que reinicie, tarda muy poco)</li>
<li>Ejecutar: fastboot erase cache</li>
<li>Entrar en el recovery, hacer wipe de todo y restaurar el backup</li>
</ol>
<p>Pues bien, si haces esto con la versión 7 de Cyanogen instalada, la restauración del backup NO funciona y el telefono se queda completamente colgado. Si este es el caso, saca y mete la batería (para devolver la vida a tu móvil) y sigue estos sencillos pasos:</p>
<ol>
<li>Hacemos wipe de todo (aunque no creo que sea imprescindible)</li>
<li>Instala la versión 7 de Cyanogen desde cero (flash .zip from sd), yo utilicé la versión 7.0.3</li>
<li>Ahora sí, intenta restaurar el backup creado antes de que todo esto ocurriera</li>
</ol>
<p>Yo conseguí restaurar el backup sin perder nada de nada, pero la sensación de perder completamente el control de la Desire es muuuy desagradable <img src='http://ixavi.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Evidentemente, no me hago responsable de ladrillos que puedan surgir por culpa de seguir estos pasos. Este procedimiento me ha funcionado a mi (y, en el futuro, quizás a alguna víctima más que encuentre por el trabajo, pero aun no tengo más información que mi experiencia personal).</p>
]]></content:encoded>
			<wfw:commentRss>http://ixavi.com/blog/2011/06/18/actualizar-hboot-en-la-htc-desire-alpharev/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Cambiar el dia de inicio de semana en Gnome</title>
		<link>http://ixavi.com/blog/2011/03/01/cambiar-el-dia-de-inicio-de-semana-en-gnome/</link>
		<comments>http://ixavi.com/blog/2011/03/01/cambiar-el-dia-de-inicio-de-semana-en-gnome/#comments</comments>
		<pubDate>Tue, 01 Mar 2011 08:00:07 +0000</pubDate>
		<dc:creator>Xavi</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Calendar]]></category>
		<category><![CDATA[Gnome]]></category>
		<category><![CDATA[Panel]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.ixavi.com/?p=668</guid>
		<description><![CDATA[Hace tiempo que decidí tener instalados los sistemas operativos en el lenguage en el que son concebidos y, nos guste o no al resto del mundo, este idioma es el inglés (más concretamente el locale en_US). Esto conlleva algunas ventajas pero también algunas desventajas. Una de ellas es ver como en el calendario que se [...]]]></description>
			<content:encoded><![CDATA[<p>Hace tiempo que decidí tener instalados los sistemas operativos en el lenguage en el que son concebidos y, nos guste o no al resto del mundo, este idioma es el inglés (más concretamente el locale en_US).</p>
<p>Esto conlleva algunas ventajas pero también algunas desventajas. Una de ellas es ver como en el calendario que se muestra en la barra del sistema las semanas empieza por domingo. Realmente no se trata de un problema pero&#8230; ya que utilizamos software libre ¿por qué no vamos a adaptarlo al 100% a nuestros gustos y preferencias?</p>
<p><a href="http://www.ixavi.com/wp-content/uploads/2011/02/calendar1.png"><img src="http://www.ixavi.com/wp-content/uploads/2011/02/calendar1.png" alt="" title="calendar1" width="295" height="227" class="aligncenter size-full wp-image-669" /></a></p>
<p>Manos a la obra&#8230;</p>
<p>Primero de todo vamos a editar el fichero &#8220;/usr/share/i18n/locales/en_US&#8221; y dónde encontremos:<br />
<code>first_weekday	1</code></p>
<p>Debeis poner:<br />
<code>first_weekday	2</code></p>
<p>Cómo podréis observar, el valor que ponemos coincide con el valor de la linea que empieza con &#8220;first_workday&#8221;. ¿Es casualidad? pues no, <strong>first_workday</strong> define el primer dia laborable de la semana y, por lo tanto, es normal que coincidan si queremos que nuestras semanas empiecen en lunes.</p>
<p>Una vez guardada esta modificación debemos ejecutar el comando &#8220;sudo locale-gen&#8221;. Esperamos que termine de generar todas las alternativas, reiniciamos la sesión (o ejecutamos &#8220;pkill gnome-panel&#8221; en el terminal, pero eso yo no lo he dicho!) y&#8230; lunes como primer dia de la semana!</p>
<p><a href="http://www.ixavi.com/wp-content/uploads/2011/02/calendar2.png"><img src="http://www.ixavi.com/wp-content/uploads/2011/02/calendar2.png" alt="" title="calendar2" width="296" height="227" class="aligncenter size-full wp-image-675" /></a></p>
<p>Si tienes como primer dia de la semana el lunes y quieres cambiarlo a domingo, en lugar de cambiar el valor de first_weekday de 1 a 2, hazlo al revés <img src='http://ixavi.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://ixavi.com/blog/2011/03/01/cambiar-el-dia-de-inicio-de-semana-en-gnome/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

