<?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>Dreaming Bytes</title>
	<atom:link href="http://www.dreamingbytes.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.dreamingbytes.com</link>
	<description>Notas sobre desarrollo y tecnología.</description>
	<lastBuildDate>Wed, 21 Mar 2012 00:56:23 +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>Redimensionar los campos de una tabla con jQuery UI</title>
		<link>http://www.dreamingbytes.com/redimensionar-los-campos-de-una-tabla-con-jquery-ui/</link>
		<comments>http://www.dreamingbytes.com/redimensionar-los-campos-de-una-tabla-con-jquery-ui/#comments</comments>
		<pubDate>Tue, 20 Mar 2012 21:25:24 +0000</pubDate>
		<dc:creator>javi</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.dreamingbytes.com/?p=215</guid>
		<description><![CDATA[Gracias a jQuery UI podemos realizar acciones o efectos Javascript que normalmente nos costarían muchas líneas de código con un par de simples líneas. En este caso vamos a ver un sencillo ejemplo de cómo poder redimensionar los campos de &#8230; <a href="http://www.dreamingbytes.com/redimensionar-los-campos-de-una-tabla-con-jquery-ui/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter size-full wp-image-229" style="border-style: initial; border-color: initial; border-image: initial; border-width: 0px;" title="Pantallazo" src="http://www.dreamingbytes.com/wp-content/uploads/2012/03/Pantallazo.png" alt="" width="433" height="85" /></p>
<p>Gracias a jQuery UI podemos realizar acciones o efectos Javascript que normalmente nos costarían muchas líneas de código con un par de simples líneas. En este caso vamos a ver un sencillo ejemplo de cómo poder redimensionar los campos de una tabla.</p>
<p>Para este ejemplo he creado una página simple y he incluido jQuery y jQuery UI enlazándolos en el código desde su página principal (no olvidemos que lo deseable es descargarlos y linkarlos desde nuestra misma página):</p>
<pre>&lt;link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/&gt;
&lt;script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"&gt;&lt;/script&gt;
&lt;script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"&gt;&lt;/script&gt;</pre>
<p>Lo siguiente es crear una tabla HTML, tan básica o llena de estilos como se desee, para posteriormente añadir en la cabecera de la página el siguiente código javascript:</p>
<pre>$(document).ready(function(){
    $(".head_1").resizable();
    $(".head_2").resizable({resize: function(event, ui) { ui.size.height = ui.originalSize.height;},handles:'e'});
    $(".head_3").resizable({resize: function(event, ui) { ui.size.height = ui.originalSize.height;},handles:'e'});
    $(".head_4").resizable({resize: function(event, ui) { ui.size.height = ui.originalSize.height;},handles:'e'});
});</pre>
<p>Tras el salto seguiremos explicando qué hace cada cosa.</p>
<p><span id="more-215"></span></p>
<p>La línea:</p>
<pre>$(document).ready(function(){...});</pre>
<p>ejecutará el código Javascript situado entre las llaves nada más terminar de cargar la página. Veamos qué código ejecuta. La primera línea es como sigue:</p>
<pre>$(".head_1").resizable();</pre>
<p>Esta línea aplica la posibilidad de redimensionar un elemento a todas aquellas etiquetas que tengan la clase &#8220;head_1&#8243; (en el código, <em>class=&#8221;head_1&#8243;</em>). Pero claro, aplica la redimensión tanto horizontal como verticalmente, y en el caso de las cabeceras de la tabla nos interesa que sólo se pueda redimensionar horizontalmente, como en las líneas siguientes, de las cuales analizaremos la primera:</p>
<pre>$(".head_2").resizable({resize: function(event, ui) { ui.size.height = ui.originalSize.height;},handles:'e'});</pre>
<p>que  simplemente se encarga de que, al efectuarse el resize, mantenga la altura de la fila original (antes del resize), y además que sólo se pueda redimensionar por el Este (con el <em>&#8221; handles: &#8216;e&#8217; &#8220;</em>).</p>
<p>Finalmente, veamos cómo queda todo el código de la página:</p>
<pre>&lt;html&gt;
 &lt;head&gt;
 &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;
 &lt;link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/&gt;
 &lt;script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"&gt;&lt;/script&gt;
 &lt;script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"&gt;&lt;/script&gt;

 &lt;script language="javascript"&gt;
  $(document).ready(function(){
   $(".head_1").resizable();
   $(".head_2").resizable({resize: function(event, ui) { ui.size.height = ui.originalSize.height;},handles:'e'});
   $(".head_3").resizable({resize: function(event, ui) { ui.size.height = ui.originalSize.height;},handles:'e'});
   $(".head_4").resizable({resize: function(event, ui) { ui.size.height = ui.originalSize.height;},handles:'e'});
  });
 &lt;/script&gt;

 &lt;/head&gt;

 &lt;body&gt;
  &lt;br&gt;&lt;br&gt;
  &lt;table align="center" style="border:1px solid #DDD;background-color:#AAA;" cellpadding="2" cellspacing="1"&gt;
   &lt;thead style="background-color:#DDD;" class="thead"&gt;
    &lt;tr&gt;
     &lt;th class="head_1" style="text-align:left;"&gt;Título 1&lt;/th&gt;
     &lt;th class="head_2" style="text-align:left;"&gt;Título 2&lt;/th&gt;
     &lt;th class="head_3" style="text-align:left;"&gt;Título 3&lt;/th&gt;
     &lt;th class="head_4" style="text-align:left;"&gt;Título 4&lt;/th&gt;
    &lt;/tr&gt;
   &lt;/thead&gt;
   &lt;tbody&gt;
    &lt;tr&gt;
     &lt;td style="background-color:white;"&gt;Campo 1&lt;/td&gt;
     &lt;td style="background-color:white;"&gt;Campo 2&lt;/td&gt;
     &lt;td style="background-color:white;"&gt;Campo 3&lt;/td&gt;
     &lt;td style="background-color:white;"&gt;Campo 4&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
     &lt;td style="background-color:white;"&gt;Campo 1&lt;/td&gt;
     &lt;td style="background-color:white;"&gt;Campo 2&lt;/td&gt;
     &lt;td style="background-color:white;"&gt;Campo 3&lt;/td&gt;
     &lt;td style="background-color:white;"&gt;Campo 4&lt;/td&gt;
    &lt;/tr&gt;
   &lt;/tbody&gt;
  &lt;/table&gt;
 &lt;/body&gt;
&lt;/html&gt;</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.dreamingbytes.com/redimensionar-los-campos-de-una-tabla-con-jquery-ui/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript: Fundamentos de JSON</title>
		<link>http://www.dreamingbytes.com/javascript-fundamentos-de-json/</link>
		<comments>http://www.dreamingbytes.com/javascript-fundamentos-de-json/#comments</comments>
		<pubDate>Sun, 19 Feb 2012 23:36:12 +0000</pubDate>
		<dc:creator>javi</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.dreamingbytes.com/?p=186</guid>
		<description><![CDATA[JSON (JavaScript Object Notation) es un formato ligero de intercambio de datos basado en un subconjunto de la especificación de JavaScript, y es ampliamente utilizado debido a su simplicidad y a su ligereza, ya que comparado con XML, genera archivos &#8230; <a href="http://www.dreamingbytes.com/javascript-fundamentos-de-json/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>JSON (JavaScript Object Notation) es un formato ligero de intercambio de datos basado en un subconjunto de la especificación de JavaScript, y es ampliamente utilizado debido a su simplicidad y a su ligereza, ya que comparado con XML, genera archivos de intercambio de datos menos pesados, al no contener etiquetas. Este estándar es ampliamente utilizado en aplicaciones web para conexiones asíncronas con el servidor en busca de datos mediante AJAX. Entre muchos otros usos, claro.</p>
<p>Existen dos estructuras básicas que conforman las estructuras de datos que se pasan a través de JSON:</p>
<ul>
<li>Las listas ordenadas de valores,</li>
<li>Las colecciones de pares nombre-valor, más conocidas como estructuras o objetos.</li>
</ul>
<p>Combinando estos dos tipos básicos de estructuras podemos representar cualquier dato o colección de datos que se nos ocurra, independientemente de su complejidad. En este post veremos los fundamentos de JSON en JavaScript y cómo tratar con estructuras de datos de este tipo.</p>
<p><span id="more-186"></span></p>
<div>Una de las ventajas de JavaScript es la de poder asignar a una variable una lista o array, simplemente asignando a la variable diferentes elementos separados por coma y rodeados por corchetes:</div>
<pre>var colores = ["rojo", "azul", "verde", "amarillo"];</pre>
<p>El siguiente comando nos dirá la longitud o número de elementos del array, que será de 4, mientras que el segundo nos dirá cuál es el primer elemento (empezando siempre por 0), es decir, &#8220;rojo&#8221;:</p>
<pre>alert(colores.length);
alert(colores[0]);</pre>
<p>También es posible asignar a una variable JavaScript tipos de datos complejos, formados por elementos de tipo par clave-valor separados entre sí por dos puntos, y entre otro par clave-valor por coma, y rodeados por llaves, como por ejemplo:</p>
<pre>var coche = {"marca":"Seat" , "modelo":"Ibiza" , "acabado" : "Sport"};</pre>
<p>Ahora es posible acceder al valor de cualquier clave recorriendo la jerarquía de datos mediante los puntos, de manera que la siguiente línea</p>
<pre>alert(coche.modelo);</pre>
<p>nos mostraría el mensaje &#8220;Ibiza&#8221;. Compliquemos más el ejemplo, utilizando dos estructuras u objetos de tipo coche añadidos a una lista:</p>
<pre>var coches = [
    {"marca":"Seat" , "modelo":"Ibiza" , "acabado" : "Sport"} ,
    {"marca":"Renault" , "modelo":"Megane" , "acabado" : "Coupé"}
]</pre>
<p>Si acto seguido escribimos la sentencia JavaScript siguiente:</p>
<pre>alert(coches[1].modelo);</pre>
<p>el navegador nos mostrará un diálogo con el texto &#8220;Megane&#8221;, correspondiente al atributo <em>modelo</em> del segundo elemento de la lista de coches.</p>
<p>Si nos fijamos en el ejemplo, vemos que de fuera a adentro tenemos una lista <strong>[...]</strong> con dos objetos <strong>{&#8230;}</strong> separados por coma, y que cada uno de los objetos contiene los atributos <em>marca</em>, <em>modelo</em> y <em>acabado</em>.</p>
<p>Ahora que sabemos cómo se estructura JSON, probemos con unos datos un pelín más complejos:</p>
<pre style="white-space: -o-pre-wrap; word-wrap: break-word;">var directores = [{"nombre":"Ridley Scott", "pais":"EEUU", "peliculas":[{"titulo":"Blade Runner","ano":1982},{"titulo":"Black Hawk Down", "ano":2001}]},{"nombre":"John Carpenter", "pais":"EEUU", "peliculas":[{"titulo":"Estan Vivos", "ano":1988},{"titulo":"Rescate en Nueva York", "ano":1981}]}];</pre>
<p style="white-space: -o-pre-wrap; word-wrap: break-word;">Esta estructura ya es más complicada. Ahora, si queremos mostrar un diálogo con el título de la segunda película del primer director, escribiríamos algo así como:</p>
<pre style="white-space: -o-pre-wrap; word-wrap: break-word;">alert(directores[0].peliculas[1].titulo);</pre>
<p style="white-space: -o-pre-wrap; word-wrap: break-word;">Y a grandes rasgos, ésto es lo que ofrece JSON. La ventaja es que es muy sencillo formatear datos hacia un archivo JSON ya que existen adaptadores o parseadores para multitud de lenguajes de programación, que podréis encontrar en <a href="http://json.org/" target="_blank">la página oficial de JSON</a>.</p>
<p style="white-space: -o-pre-wrap; word-wrap: break-word;">En una próxima entrada hablaré de la comunicación asíncrona (AJAX) y de cómo aprovechar la simplicidad de JSON para recuperar datos de un servidor.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dreamingbytes.com/javascript-fundamentos-de-json/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Lorem Ipsum de imágenes para maquetar: generadores de mock-ups</title>
		<link>http://www.dreamingbytes.com/lorem-ipsum-de-imagenes-para-maquetar-generadores-de-mock-ups/</link>
		<comments>http://www.dreamingbytes.com/lorem-ipsum-de-imagenes-para-maquetar-generadores-de-mock-ups/#comments</comments>
		<pubDate>Wed, 15 Feb 2012 20:49:08 +0000</pubDate>
		<dc:creator>javi</dc:creator>
				<category><![CDATA[Diseño]]></category>
		<category><![CDATA[Imagen]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[imagen]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.dreamingbytes.com/?p=168</guid>
		<description><![CDATA[Si en el anterior post veíamos una aplicación web ideal para crear esquemas de colores web, en éste veremos diversos sitios que podemos utilizar para hacer mock-ups (o maquetas, modelos&#8230;) de imágenes de cara al diseño y maquetación de sitios &#8230; <a href="http://www.dreamingbytes.com/lorem-ipsum-de-imagenes-para-maquetar-generadores-de-mock-ups/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter  wp-image-169" style="border-style: initial; border-color: initial; border-image: initial; border-width: 0px;" title="placeholdit" src="http://www.dreamingbytes.com/wp-content/uploads/2012/02/placeholdit.png" alt="" width="500" height="210" /></p>
<p style="text-align: left;">Si en el anterior post veíamos una aplicación web ideal para crear esquemas de colores web, en éste veremos diversos sitios que podemos utilizar para hacer mock-ups (o maquetas, modelos&#8230;) de imágenes de cara al diseño y maquetación de sitios web.</p>
<p>Es posible que en el momento de preparar una página web no dispongamos de las imágenes que contendrá, o que, por otros motivos, queramos probar diversos tamaños. En cualquier caso, si conocemos las dimensiones que ha de tener una imagen, podemos utilizar cualquiera de los servicios que se muestran a continuación para generarlas al vuelo, así que veamos las posibles opciones:</p>
<p><span id="more-168"></span></p>
<h2>Placehold.it</h2>
<p>Si enlacamos una imagen a <a href="http://www.placehold.it/" target="_blank">placehold.it</a>, nos mostrará una imagen del tamaño especificado, por defecto en gris y con las dimensiones como texto, aunque podemos personalizar tanto el color como el texto:</p>
<pre>&lt;img src="http://placehold.it/350x150"/&gt;</pre>
<p style="text-align: center;"><img class="aligncenter" style="border-style: initial; border-color: initial; border-image: initial; border-width: 0px;" src="http://placehold.it/350x150" alt="" width="350" height="150" /></p>
<h2 style="text-align: left;">Lorempixel</h2>
<p style="text-align: left;">Si optamos por <a href="http://www.lorempixel.com" target="_blank">Lorempixel </a>podremos añadir una imagen de tamaño especificado definiendo que sea aleatoria, o por tema, y si queremos incluso con texto. Veamos cómo se vería una imagen aleatoria de la categoría transport:</p>
<pre>&lt;img src="http://lorempixel.com/350/150/transport"/&gt;</pre>
<p><img class="aligncenter" style="border-style: initial; border-color: initial; border-image: initial; border-width: 0px;" src="http://lorempixel.com/350/150/transport" alt="" width="350" height="150" /></p>
<h2>Placekitten</h2>
<p>La opción que nos propone <a href="http://placekitten.com/" target="_blank">placekitten </a>es obtener imágenes aleatorias de tiernos gatitos, pudiendo especificar su tamaño y si se mostrarán en color o en escala de grises. Mostremos un ejemplo con escala de grises:</p>
<pre>&lt;img src="http://placekitten.com/g/350/150"/&gt;</pre>
<p><img class="aligncenter" style="border-style: initial; border-color: initial; border-image: initial; border-width: 0px;" src="http://placekitten.com/g/350/150" alt="" width="350" height="150" /></p>
<h2>Flickholdr</h2>
<p>La última opción, <a href="http://flickholdr.com/" target="_blank">flickholdr</a>, nos permite insertar imágenes tomadas de Flickr, personalizando el tamaño y añadiendo diferentes tags separados por coma. Veamos un ejemplo con los tags &#8220;sea,sun&#8221;:</p>
<pre>&lt;img src="http://flickholdr.com/350/150/sea,sun"/&gt;</pre>
<p><img class="aligncenter" style="border-style: initial; border-color: initial; border-image: initial; border-width: 0px;" src="http://flickholdr.com/350/150/sea,sun" alt="" width="350" height="150" /></p>
<p>Como veis, es muy sencillo insertar imágenes en nuestras páginas utilizando estos servicios, siendo de gran ayuda a la hora de maquetar sin disponer de las imágenes finales que deberemos insertar.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dreamingbytes.com/lorem-ipsum-de-imagenes-para-maquetar-generadores-de-mock-ups/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Recursos web: Esquema de colores</title>
		<link>http://www.dreamingbytes.com/recursos-web-esquema-de-colores/</link>
		<comments>http://www.dreamingbytes.com/recursos-web-esquema-de-colores/#comments</comments>
		<pubDate>Tue, 14 Feb 2012 00:09:57 +0000</pubDate>
		<dc:creator>javi</dc:creator>
				<category><![CDATA[Diseño]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[color]]></category>
		<category><![CDATA[diseño]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.dreamingbytes.com/?p=157</guid>
		<description><![CDATA[Para los que no son diseñadores (como el que escribe), a veces resulta complicado encontrar una combinación de colores idónea para la paleta de colores de una web. Y ahí es donde aplicaciones web como Color Scheme Designer pueden echarnos &#8230; <a href="http://www.dreamingbytes.com/recursos-web-esquema-de-colores/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter  wp-image-158" title="colorschemedesigner" src="http://www.dreamingbytes.com/wp-content/uploads/2012/02/colorschemedesigner-300x197.png" alt="" width="500" height="328" /></p>
<p style="text-align: left;">Para los que no son diseñadores (como el que escribe), a veces resulta complicado encontrar una combinación de colores idónea para la paleta de colores de una web. Y ahí es donde aplicaciones web como <a href="http://www.colorschemedesigner.com/blog/" target="_blank">Color Scheme Designer</a> pueden echarnos una mano.</p>
<p style="text-align: left;">Simplemente escogiendo un color base en la parte izquierda, nos aparecerán diferentes tonos en la parte derecha, e incluso podremos visualizar una vista previa con esos tonos en una página luminosa u oscura.</p>
<p style="text-align: left;">También podremos modificar parámetros como la saturación, brillo, contraste, etcétera, y finalmente nos permite exportar los resultados obtenidos a HTML+CSS, Photoshop, Gimp, XML o texto.</p>
<p style="text-align: left;">Como curiosidad, nos muestra también cómo visualizaría los colores una persona con deficiencia visual a la hora de apreciar éstos.</p>
<p style="text-align: left;">En definitiva, una herramienta bastante útil y completa, pero si lo que deseamos es una cosa más sencilla, podemos encontrarla <a href="http://adonay.name/log/selector-de-colores.html" target="_blank">aquí </a>o <a href="http://files.lackfer.com/colores/#" target="_blank">aquí</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dreamingbytes.com/recursos-web-esquema-de-colores/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Instala WordPress en tu propio servidor</title>
		<link>http://www.dreamingbytes.com/instalar-wordpress-en-nuestro-servidor/</link>
		<comments>http://www.dreamingbytes.com/instalar-wordpress-en-nuestro-servidor/#comments</comments>
		<pubDate>Sun, 12 Feb 2012 22:10:04 +0000</pubDate>
		<dc:creator>javi</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.dreamingbytes.com/?p=144</guid>
		<description><![CDATA[Como dice la Wikipedia, WordPress es un sistema de gestión de contenido enfocado a la creación de blogs, que basa su éxito en su licencia, su facilidad de uso, sus características como gestor de contenidos o CMS, y a la &#8230; <a href="http://www.dreamingbytes.com/instalar-wordpress-en-nuestro-servidor/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter size-full wp-image-145" style="border-style: initial; border-color: initial; border-image: initial; border-width: 0px;" title="logo-v-rgb" src="http://www.dreamingbytes.com/wp-content/uploads/2012/02/logo-v-rgb.png" alt="" width="504" height="360" /></p>
<p>Como dice la <a title="WordPress en la Wikipedia" href="http://es.wikipedia.org/wiki/WordPress" target="_blank">Wikipedia</a>, WordPress es un sistema de gestión de contenido enfocado a la creación de blogs, que basa su éxito en su licencia, su facilidad de uso, sus características como gestor de contenidos o CMS, y a la extensa comunidad de desarrolladores y diseñadores que añaden temas o layouts y plugins.</p>
<p>Crear un blog con WordPress es sencillo, ya que ellos mismos nos permiten crear con un solo click un subdominio del tipo <em>miblog.wordpress.com</em> alojado en sus servidores y listo para rellenar de contenido. Pero toda ventaja tiene sus inconvenientes, y así cualquier blog creado de ésta manera y alojado en sus servidores pasa a ser propiedad de WordPress, aunque pensemos que es &#8220;nuestro blog&#8221;.</p>
<p>Por este mismo motivo existe otra alternativa diferente de usar un espacio en los servidores de WordPress que pasa por instalarnos el propio sistema de gestión en nuestro propio servidor o en nuestro proveedor de alojamiento web, y de eso mismo habla esta entrada.</p>
<p><span id="more-144"></span></p>
<p>Lo primero que necesitamos es tener un alojamiento web contratado que soporte PHP y MySQL, o un servidor web con Apache, PHP y MySQL instalados. En una entrada anterior ya se habló sobre cómo crear un servidor web de éste tipo, así que nos ceñiremos al tema del título de ésta entrada.</p>
<h2>Descarga, instalación y configuración de WordPress</h2>
<p>El primer paso es descargar la versión completa de WordPress desde <a href="http://es.wordpress.org/" target="_blank">es.wordpress.org</a>, para después descomprimirlo y buscar el archivo <strong>wp-config-sample.php</strong> y hacer una copia en el mismo directorio con el nombre <strong>wp-config.php</strong>. Editaremos este último archivo cambiando lo siguiente:</p>
<pre>define(’DB_NAME’, ‘nuestra_base_de_datos_MySQL′);
define(’DB_USER’, ‘nuestro_usuario_MySQL’);
define(’DB_PASSWORD’,‘nuestra_contraseña_MySQL’);
define(’DB_HOST’, ‘ip_servidor_mysql’);</pre>
<p>Guardaremos el archivo con los cambios y subiremos todo el contenido de la carpeta que hemos descomprimido a nuestro alojamiento web, o si es un servidor local, a la carpeta raíz del servidor Apache.</p>
<p>El siguiente paso será acceder a través del navegador a la dirección</p>
<pre>http://nuestro-servidor/wp-admin/install.php</pre>
<p>Aparecerá una pantalla de bienvenida de WordPress donde se nos preguntará el nombre del sitio, un usuario, su contraseña y una dirección de correo.</p>
<p>Tras introducir todos estos datos, ya tendremos nuestro sitio corriendo con WordPress.</p>
<h2>Enlaces permanentes y Mod_Rewrite</h2>
<p>Si bien es cierto que nuestro blog con WordPress ya está activo, si hacemos click en una entrada veremos que la Url es algo parecida a ésto:</p>
<pre>http://miblog.com/?p=123</pre>
<p>que no le gusta nada a los buscadores y que por tanto hará que nuestra página no tenga un<br />
buen posicionamiento en éstos. Para solventar esta cuestión, nuestras direcciones deberían tener esta forma:</p>
<pre>http://miblog.com/mi-post-chulo</pre>
<p>Para lograr que las url&#8217;s de los posts funcionen de ésta manera hay que editar los ajustes de los enlaces permanentes en el panel de control de WordPress:</p>
<p><img class="aligncenter size-full wp-image-152" title="config" src="http://www.dreamingbytes.com/wp-content/uploads/2012/02/config.png" alt="" width="460" height="521" /></p>
<p>Al clicar en el botón <strong>guardar cambios</strong> el sistema intentará generar un archivo<strong> .htaccess</strong> en la raíz del sitio (o de la carpeta de WordPress) parecido a éste:</p>
<pre># BEGIN WordPress
 &lt;IfModule mod_rewrite.c&gt;
 RewriteEngine On
 RewriteBase /wordpress/
 RewriteRule ^index\.php$ - [L]
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule . /wordpress/index.php [L]
 &lt;/IfModule&gt;
 # END WordPress</pre>
<p>Con ésto ha de bastar para que las url&#8217;s de nuestro sitio se comporten de la manera que deseamos. Pero si tenemos un servidor local y no funciona, deberemos mirar si el archivo de configuración de Apache tiene el mod_rewrite habilitado, así que el primer paso que daremos en este sentido será invocar al comando (comprobado en Ubuntu)</p>
<pre>sudo a2enmod rewrite</pre>
<p>Acto seguido verificaremos que en el archivo /etc/apache2/sites-available/default tenga todas las líneas donde aparezca <strong>AllowOverride</strong> como <strong>All</strong>, por ejemplo:</p>
<pre>&lt;Directory /&gt;
    Options FollowSymLinks
    AllowOverride All
&lt;/Directory&gt;</pre>
<p>y después reiniciaremos Apache</p>
<pre>sudo /etc/init.d/apache2 restart</pre>
<p>Ahora sí que deberíamos poder utilizar los enlaces permanentes.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dreamingbytes.com/instalar-wordpress-en-nuestro-servidor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Backup remoto de bases de datos MySQL con mysqldump</title>
		<link>http://www.dreamingbytes.com/backup-remoto-de-bases-de-datos-mysql-con-mysqldump/</link>
		<comments>http://www.dreamingbytes.com/backup-remoto-de-bases-de-datos-mysql-con-mysqldump/#comments</comments>
		<pubDate>Sun, 15 May 2011 13:15:52 +0000</pubDate>
		<dc:creator>javi</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.dreamingbytes.com/?p=137</guid>
		<description><![CDATA[Las bases de datos guardan información fundamental para nuestro negocio o actividad, y un aspecto a tener muy en cuenta es realizar copias de seguridad o backups regulares tanto de los datos que contienen como de su estructura. Las webs, como aplicaciones &#8230; <a href="http://www.dreamingbytes.com/backup-remoto-de-bases-de-datos-mysql-con-mysqldump/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-138" title="servidores" src="http://www.dreamingbytes.com/wp-content/uploads/2012/02/servidores.jpg" alt="" width="402" height="299" /></p>
<p>Las bases de datos guardan información fundamental para nuestro negocio o actividad, y un aspecto a tener muy en cuenta es realizar copias de seguridad o <strong>backups</strong> regulares tanto de los datos que contienen como de su estructura.</p>
<p>Las webs, como aplicaciones que son, no están exentas de necesitarlas, pues ya sea por ataques o por desgracias físicas de los servidores en las que están alojadas, no podemos permitirnos dejar a nuestros usuarios o visitantes sin servicio, así que es necesario contar con una buena política de copias de seguridad.</p>
<p>Si tenemos una web, blog, servicio online, etc y utilizamos una base de datos MySQL podemos emplear diferentes mecanismos para realizar la copia de seguridad, por ejemplo entrar en<strong>phpMyAdmin</strong>, si disponemos de él, y hacerla manualmente. Pero si queremos ahorrarnos entrar en este administrador de bases de datos y nuestra máquina ya tiene MySQL instalado, podemos emplear el siguiente comando para crear un archivo en nuestra máquina con la copia de seguridad de una base de datos MySQL de un servidor remoto:</p>
<pre>mysqldump -h [nuestro.servidor.com_o_IP] -u [usuario] -p[password] [base_de_datos] &gt; archivo_backup.sql</pre>
<p>Este comando nos creará el archivo <em>archivo_backup.sql</em> con el contenido de la base de datos que le hayamos indicado. Cuidado, entre <strong>-p</strong> y <strong>[password]</strong> no hay ningún espacio.</p>
<p>Seguro que os preguntaréis para qué puede servir ésto; pues bien, la respuesta es sencilla: para<strong>automatizar el proceso</strong> y poder <strong>programar una o varias copias de seguridad diariamente</strong>,<a href="http://www.dreamingbytes.com/dreams/manual-de-cmo-usar-cron" target="_blank">ejecutando mediante Cron</a> un script programado en <strong>Python</strong> como el que se muestra a continuación:</p>
<p><span id="more-137"></span></p>
<pre>#!/usr/bin/python

import datetime
import os

command = "mysqldump -h [nuestro.servidor.com_o_IP] -u [usuario] -p[password] [base_de_datos]"

# Objeto HOY
today = datetime.date.today()
# Formatea como YYYYMMDD
fecha = today.strftime("%Y%m%d")

# Fichero de salida
file = "backup_Servidor_"+fecha

command = command+" &gt; /home/javi/backups/Servidor/"+file+".sql"

os.system(command)</pre>
<p>Con un script parecido al anterior, y programado para que se ejecute diariamente, tendremos una buena política de copias de seguridad, generando cada día un archivo de texto con el sufijo de la fecha en su nombre y con todo el contenido de la base de datos, tanto de su estructura de tablas como de los registros que éstas contengan.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dreamingbytes.com/backup-remoto-de-bases-de-datos-mysql-con-mysqldump/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tamaño ideal de la partición Swap</title>
		<link>http://www.dreamingbytes.com/tamano-ideal-de-la-particion-swap/</link>
		<comments>http://www.dreamingbytes.com/tamano-ideal-de-la-particion-swap/#comments</comments>
		<pubDate>Fri, 21 Jan 2011 13:11:39 +0000</pubDate>
		<dc:creator>javi</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.dreamingbytes.com/?p=130</guid>
		<description><![CDATA[La memoria virtual es un mecanismo de los sistemas operativos que permite hacer creer a los programas que disponen de más memoria de la que realmente dispone el equipo físicamente, y consiste en un espacio de intercambio, que puede ser un archivo de &#8230; <a href="http://www.dreamingbytes.com/tamano-ideal-de-la-particion-swap/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-131" title="swap" src="http://www.dreamingbytes.com/wp-content/uploads/2012/02/swap.jpg" alt="" width="484" height="355" /></p>
<p>La <strong>memoria virtual</strong> es un mecanismo de los sistemas operativos que permite hacer creer a los programas que disponen de más memoria de la que realmente dispone el equipo físicamente, y consiste en un <strong>espacio de intercambio</strong>, que puede ser un archivo de paginación (pagefile.sys), en el caso de Windows, o una partición de disco, lladama SWAP o de intercambio, que es el caso de los sistemas Unix.</p>
<p>Mediante la memoria virtual podemos, por ejemplo, disponer de 4 Gb de RAM en equipos de 32 bits, que están limitados a 3 Gb por no poder &#8220;trabajar&#8221; con números tan altos; cada ciclo del procesador éste trabaja con una &#8220;palabra&#8221; de 32 ceros y unos, que representan la instrucción que tiene que ejecutar y la/s dirección/es de memoria necesarias (dicho muy por encima), y claro, no le cabe.</p>
<p>Así pues, los procesos poco activos o menos prioritarios se pueden almacenar en el disco duro, dejando memoria disponible para cargar otros procesos. Pero claro, el tiempo de acceso al disco es muchísimo más elevado que el de acceso a la memoria, y si el sistema abusa de la memoria virtual puede hundirse, debido a la <strong>hiperpaginación</strong> o <strong>rubbish</strong>.</p>
<p>Una vez sabemos para qué sirve la memoria virtual, o espacio de intercambio, o SWAP, que en Linux se crea al instalar el sistema operativo, ¿qué tamaño debemos asignarle a dicha partición? Pues según <a href="http://etbe.coker.com.au/2007/09/28/swap-space/" target="_blank">Russell Coker</a>, que sabe bastante del tema, el tamaño ideal de la SWAP es:</p>
<ul>
<li>Igual a la RAM para ordenadores con menos de 1Gb</li>
<li>La mitad de la RAM para equipos entre 2 y 4 Gb</li>
<li>2 Gigas para equipos con más de 4 Gb de RAM</li>
</ul>
<p>Vale la pena recordarlo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dreamingbytes.com/tamano-ideal-de-la-particion-swap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Manual de cómo usar Cron</title>
		<link>http://www.dreamingbytes.com/manual-de-como-usar-cron/</link>
		<comments>http://www.dreamingbytes.com/manual-de-como-usar-cron/#comments</comments>
		<pubDate>Mon, 30 Aug 2010 04:41:04 +0000</pubDate>
		<dc:creator>javi</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.dreamingbytes.com/?p=94</guid>
		<description><![CDATA[En el mundo de los servidores hay mil y una tareas que se realizan a diario, como copias de seguridad nocturnas, chequeo de sistemas, envío de alertas por email&#8230; cualquier cosa que se nos pase por la cabeza. Pero claro, &#8230; <a href="http://www.dreamingbytes.com/manual-de-como-usar-cron/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-95" title="cronclock" src="http://www.dreamingbytes.com/wp-content/uploads/2012/02/cronclock.jpg" alt="" width="400" height="392" /></p>
<p>En el mundo de los servidores hay mil y una tareas que se realizan a diario, como copias de seguridad nocturnas, chequeo de sistemas, envío de alertas por email&#8230; cualquier cosa que se nos pase por la cabeza. Pero claro, un programa no puede ejecutarse solo. Para que todos esos procesos se lancen en el momento esperado, es necesario que, o bien se encuentren todo el tiempo activos, en estado <strong>wait</strong> (a la espera) hasta que llegue el momento de &#8220;despertarse&#8221; (solución poco óptima), o que los lance otro proceso.</p>
<p>Una de las cosas que hace extremadamente bien Linux es automatizar tareas, y para ello cuenta con <strong>cron</strong>, que es un <em>demonio</em> (programa que se ejecuta continuamente en <em>background</em>o segundo plano, normalmente al arrancar el sistema) que se ejecuta cada minuto y mira si tiene que lanzar algún otro proceso. En esta entrada hablaremos de <strong>cómo configurar cron</strong>.<br />
<span id="more-94"></span><strong>Cron</strong> dispone de una lista, <strong>crontab</strong>, que contiene los procesos que tiene que ejecutar para cada usuario. Editando esta lista le diremos al demonio cuándo y qué tiene que ejecutar. Veamos qué contiene esa lista:</p>
<pre>javi@asus:~$ crontab -l
# m h  dom mon dow   command</pre>
<p>Por defecto, está vacía y solo contiene una línea, que al empezar por &#8220;#&#8221; indica que es un comentario, es decir, que no se ejecutará. Pero nos da información de como tenemos que rellenar el archivo que conforma la lista. Como podemos apreciar, se divide en 6 campos separados por un espacio: <strong>m</strong>, <strong>h</strong>, <strong>dom</strong>, <strong>mon</strong>, <strong>dow</strong> y <strong>command</strong>, y cuyo significado es el siguiente:</p>
<table>
<tbody>
<tr>
<td><strong>m</strong></td>
<td>Minuto. Determina en qué minuto de la hora será ejecutado el comando. Este valor estará entre 0 y 59.</td>
</tr>
<tr>
<td><strong>h</strong></td>
<td>Hora. Controla la hora del día en que se ejecutará el comando. Este valor estará entre 0 y 23, siendo 0 medianoche.</td>
</tr>
<tr>
<td><strong>dom</strong></td>
<td>Día del mes a ejecutar el comando. Si ponemos aquí un 10, el comando se ejecutará solamente los días 10 de cada mes establecido, a la hora y minuto establecidos.</td>
</tr>
<tr>
<td><strong>mon</strong></td>
<td>Mes. Especificaremos qué mes queremos que se ejecute el comando.</td>
</tr>
<tr>
<td><strong>dow</strong></td>
<td>Día de la semana. De 0 a 7, donde 0 es domingo, 1 es lunes&#8230; 6 es sábado y 7 otra vez domingo. Semana anglosajona: de 0 a 6. Nuestra semana: 1 a 7.</td>
</tr>
<tr>
<td><strong>command</strong></td>
<td>El comando a ejecutar. Como comando se entiende cualquier comando, programa o script que podamos escribir en la línea de comandos.</td>
</tr>
</tbody>
</table>
<p>Puede haber un campo más, entre el día de la semana y el comando, que hace referencia al<strong>usuario</strong> que ejecutará éste.</p>
<p>A la hora de introducir valores no se nos limita solamente a poner un número dentro del rango permitido para cada campo, también permite intruducir listas de valores, múltiplos o el símbolo &#8220;*&#8221;, que quiere decir &#8220;todos&#8221;. Por ejemplo, si en las horas ponemos un 5, se ejecutará a las 5 de la mañana. Si ponemos 5,8,15 se ejecutará a las 5 a las 8 y a las 15 horas. Si ponemos 5-9, se ejecutará cada hora desde las 5 hasta las 9. Si ponemos el símbolo &#8220;*&#8221; se ejecutará a cualquier hora, todas las horas. Y si ponemos por ejemplo */6 se ejecutará todas las horas múltiplos de 6, es decir, cada 6 horas.</p>
<p>A continuación vamos a ver algunos ejemplos:</p>
<table>
<tbody>
<tr>
<td>30 12 * * *</td>
<td>Cada día del año a las 12:30</td>
</tr>
<tr>
<td>0 22 * * 6</td>
<td>Todos los domingos del año a las 22:00</td>
</tr>
<tr>
<td>0 */8 * * 1-5</td>
<td>Cada 8 horas (en punto), de lunes a viernes.</td>
</tr>
<tr>
<td>0 */8 * * 1-5</td>
<td>Cada 8 horas (en punto), de lunes a viernes.</td>
</tr>
<tr>
<td>0 0 * 1-3 1,5,6</td>
<td>Todos los lunes, viernes y sábados a medianoche desde enero hasta marzo.</td>
</tr>
</tbody>
</table>
<p>Creo que con estos ejemplos queda bastante claro el uso de cron. Es importante darse cuenta que deben cumplirse <strong>todas</strong> las condiciones que pongamos.</p>
<h2>Otra manera de ejecutar Cron</h2>
<p>Si nos da pereza editar el archivo <strong>crontab</strong>, existe otra manera de utilizar <strong>cron</strong>, quizá más sencilla, pero que obliga a tener nuestros scripts &#8220;desparramados&#8221; por el sistema.</p>
<p>Si echamos un ojo a la carpeta <strong>/etc</strong>, veremos algunas subcarpetas de interés:</p>
<pre>/cron.daily
/etc/cron.hourly
/etc/cron.monthly
/etc/cron.weekly</pre>
<p>Si situamos un archivo tipo script en alguna de esas carpetas, se ejecutará diariamente, cada hora, cada mes o cada semana, según en qué carpeta sea. El archivo debe ser parecido a ésto:</p>
<pre>#!/bin/sh
echo "Hola" | mail -s "Esto es una prueba" midireccion@decorreo.com</pre>
<p>Éste archivo nos enviará un email según cuando lo dicte la carpeta donde lo hayamos dejado.</p>
<p>Con ésto queda claro cómo utilizar <strong>Cron</strong>, al menos básicamente. Espero os sirva de ayuda!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dreamingbytes.com/manual-de-como-usar-cron/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tutorial de Java EE6 de Oracle</title>
		<link>http://www.dreamingbytes.com/tutorial-de-java-ee6-de-oracle/</link>
		<comments>http://www.dreamingbytes.com/tutorial-de-java-ee6-de-oracle/#comments</comments>
		<pubDate>Thu, 26 Aug 2010 12:31:41 +0000</pubDate>
		<dc:creator>javi</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.dreamingbytes.com/?p=119</guid>
		<description><![CDATA[Ya está disponible la revisión del tutorial de Java EE 6 tanto para consultar online como para descargar en PDF. Este libro se convierte en una completa y detallada referencia para cualquiera que quiera aprender y utilizar Java EE 6. Este libro &#8230; <a href="http://www.dreamingbytes.com/tutorial-de-java-ee6-de-oracle/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-120" title="javaee6tut" src="http://www.dreamingbytes.com/wp-content/uploads/2012/02/javaee6tut.jpg" alt="" width="309" height="200" /></p>
<p>Ya está disponible la revisión del <a href="http://download.oracle.com/javaee/6/tutorial/doc/index.html" target="_blank">tutorial de Java EE 6</a> tanto para consultar online como para descargar en PDF. Este libro se convierte en una completa y detallada referencia para cualquiera que quiera aprender y utilizar Java EE 6.</p>
<p>Este libro se compone de dos partes, y lo que está disponible ahora mismo es la primera parte del tutorial, con la segunda prevista para Septiempre (antes de la JavaOne. Un reciente episodio del <a href="http://www.oracle.com/podcasts/author-podcasts.html" target="_blank">Oracle Author Podcast</a> explica qué esperar de él y cómo se estructura el tutorial.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dreamingbytes.com/tutorial-de-java-ee6-de-oracle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sindicación de contenidos: crear RSS en nuestra página</title>
		<link>http://www.dreamingbytes.com/sindicacion-de-contenidos-crear-rss-en-nuestra-pagina/</link>
		<comments>http://www.dreamingbytes.com/sindicacion-de-contenidos-crear-rss-en-nuestra-pagina/#comments</comments>
		<pubDate>Wed, 25 Aug 2010 12:27:17 +0000</pubDate>
		<dc:creator>javi</dc:creator>
				<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.dreamingbytes.com/?p=114</guid>
		<description><![CDATA[Hoy he añadido sindicación RSS a la página. La sindicación RSS se encarga de difundir información actualizada del contenido de la página a todas aquellas personas que se hayan suscrito a ella. Y no es necesario tener abierto el navegador, &#8230; <a href="http://www.dreamingbytes.com/sindicacion-de-contenidos-crear-rss-en-nuestra-pagina/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter size-full wp-image-115" style="border-style: initial; border-color: initial; border-width: 0px;" title="rss" src="http://www.dreamingbytes.com/wp-content/uploads/2012/02/rss.jpg" alt="" width="480" height="439" /></p>
<p>Hoy he añadido sindicación RSS a la página. La sindicación RSS se encarga de difundir información actualizada del contenido de la página a todas aquellas personas que se hayan suscrito a ella. Y no es necesario tener abierto el navegador, simplemente con un software adecuado, llamado agregador, se podrán ver las novedades de las webs a las que estemos subscritos.</p>
<p>La <strong>sindicación RSS</strong> se basa en un archivo <strong>XML</strong> en el que incluiremos el contenido, y en su enlazado desde la página web. En este post mostraré los pasos necesarios para generar el XML e incluírlo en la página.</p>
<p><span id="more-114"></span></p>
<p>El objetivo es generar un archivo XML que contenga la siguiente estructura:</p>
<pre>&lt;?xml version="1.0" encoding="iso-8859-1" ?&gt;
&lt;rss version='2.0'&gt;
	&lt;channel&gt;
		&lt;title&gt;LaMoscaGao&lt;/title&gt;
		&lt;link&gt;http://www.mipagina.com&lt;/link&gt;
		&lt;description&gt;Fulanos y menganos a tutiplén&lt;/description&gt;
		&lt;item&gt;
			&lt;title&gt;Título del Primer post&lt;/title&gt;
			&lt;link&gt;http://www.mipagina.com/enlace_Al_Primer_Post.html&lt;/link&gt;
			&lt;description&gt;Resumen del post&lt;/description&gt;
			&lt;pubDate&gt;Wed, 25 Aug 2010 01:08:08 GMT&lt;/pubDate&gt;
			&lt;category&gt;Categoría X&lt;/category&gt;
		&lt;/item&gt;
		&lt;item&gt;
			&lt;title&gt;Título del Segundo post&lt;/title&gt;
			&lt;link&gt;http://www.mipagina.com/enlace_Al_Segundo_Post.html&lt;/link&gt;
			&lt;description&gt;Resumen del post&lt;/description&gt;
			&lt;pubDate&gt;Tue, 24 Aug 2010 20:27:07 GMT&lt;/pubDate&gt;
			&lt;category&gt;Categoría Y&lt;/category&gt;
		&lt;/item&gt;
	&lt;/channel&gt;
&lt;/rss&gt;</pre>
<p style="text-align: left;">Los documentos XML se caracterizan porque contienen información insertada entre etiquetas anidadas, que empiezan por &#8220;&lt;&#8230;&gt;&#8221; y acaban por &#8220;&lt;/&#8230;&gt;&#8221;. Veamos un ejemplo con los alumnos de una clase (de dos):</p>
<pre>&lt;clase&gt;
	&lt;alumno&gt;
		&lt;nombre&gt;Pepe&lt;/nombre&gt;
		&lt;apellido&gt;García&lt;/apellido&gt;
	&lt;alumno&gt;
	&lt;/alumno&gt;
		&lt;nombre&gt;Antonio&lt;/nombre&gt;
		&lt;apellido&gt;Rodríguez&lt;/apellido&gt;
	&lt;/alumno&gt;
&lt;/clase&gt;</pre>
<p style="text-align: left;">Como se puede apreciar, el documento XML se compone de diferentes tags o etiquetas, y la primera de todas es:</p>
<pre>&lt;?xml version="1.0" encoding="iso-8859-1" ?&gt;</pre>
<p style="text-align: left;">Ésta etiqueta indica el tipo de archivo con el que tratamos, XML, y su codificación de carácteres.<strong>iso-8859-1</strong> se refiere a que la codificación está en lenguaje occidental, latín (símbolos como los acentos o la &#8220;ñ&#8221; saldrán correctamente). Esta etiqueta es la única que no se cierra. Además, es extremadamente importante que esté justo al comienzo del archivo, así que interesa escribirla antes de hacer nada más (si utilizáis un script PHP para generar el XML al vuelo y empezáis con un <strong>include</strong>, os pondrá una línea en blanco y no os funcionará).</p>
<p>Después vendría el esqueleto del XML, ésto es:</p>
<pre>&lt;rss version='2.0'&gt;
	&lt;channel&gt;
		....
	&lt;/channel&gt;
&lt;/rss&gt;</pre>
<p style="text-align: left;">Dentro de éste &#8220;esqueleto&#8221; nos encontramos con los atributos del RSS, correspondientes al global de la página:</p>
<pre>&lt;title&gt;LaMoscaGao&lt;/title&gt;
&lt;link&gt;http://www.mipagina.com&lt;/link&gt;
&lt;description&gt;Fulanos y menganos a tutiplén&lt;/description&gt;</pre>
<p style="text-align: left;">El significado de cada uno de estos atributos es el siguiente:</p>
<p><strong>title:</strong> El título de la página web<br />
<strong>link:</strong> Un enlace a la página<br />
<strong>description:</strong> Descripción que queramos sobre nuestra página</p>
<p>Y después, nos encontramos con una etiqueta <strong>item</strong> para cada una de las entradas que queramos publicar. Cada etiqueta <strong>item</strong> contendrá una serie de atributos; yo he puesto 5, pero se pueden poner menos, o más si lo deseamos, siempre ciñéndonos a la <a href="http://cyber.law.harvard.edu/rss/rss.html" target="_blank">especificación RSS</a>(<a href="http://www.rssboard.org/rss-specification" target="_blank">otro enlace</a>). Nuestro ejemplo:</p>
<pre>&lt;item&gt;
	&lt;title&gt;Título del Primer post&lt;/title&gt;
	&lt;link&gt;http://www.mipagina.com/enlace_Al_Primer_Post.html&lt;/link&gt;
	&lt;description&gt;Resumen del post&lt;/description&gt;
	&lt;pubDate&gt;Wed, 25 Aug 2010 01:08:08 GMT&lt;/pubDate&gt;
	&lt;category&gt;Categoría X&lt;/category&gt;
&lt;/item&gt;</pre>
<p style="text-align: left;">Vemos que por cada elemento &#8220;item&#8221; tenemos los siguientes atributos:</p>
<p><strong>title:</strong> Título del post<br />
<strong>link:</strong> Enlace al post<br />
<strong>description:</strong> Descripción del contenido del post, si queremos<br />
<strong>pubDate:</strong> Fecha de publicación del post. Ojo con la &#8220;D&#8221;, que es mayúscula. Además, el formato de la fecha debe ser el que se ve en el ejemplo.<br />
<strong>category:</strong> categoría / categorías al que pertenece el post, si se tercia.</p>
<p>Y así es como generaremos nuestro documento XML. Para generarlo, deberemos programar un script, ya sea en PHP (casi copiado del que muestra las últimas entradas en la página de inicio), ya sea en el lenguaje que nos de la gana (como si queremos hacerlo a mano), que nos construya un archivo siguiendo esta estructura.</p>
<p>Vale, ya tenemos el XML generado, ahora hay que hacer que las páginas lo relacionen. Para ello pondremos, entre las etiquetas <strong>&lt;head&gt;</strong> de nuestras páginas, la siguiente línea:</p>
<pre>&lt;link rel="alternate" type="application/rss+xml" title="Lamoscagao Feed" href="miRss.xml" /&gt;</pre>
<p style="text-align: left;">También podemos poner un enlace, o un iconito parecido al de la foto de este post, que enlace a nuestro documento XML, de la manera siguiente:</p>
<pre>&lt;a type="application/rss+xml" href="miRss.xml"&gt;bla bla bla ó &lt;img src="icono.gif"/&gt;&lt;/a&gt;</pre>
<p style="text-align: left;">Y ya tendremos lista la sindicación en nuestra página.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dreamingbytes.com/sindicacion-de-contenidos-crear-rss-en-nuestra-pagina/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

