<?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>El blog de Deigote</title>
	<atom:link href="http://blog.deigote.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.deigote.com</link>
	<description>El mundo de Deigote. Un diario de cualquier cosa que me resulte interesante (si a alguien más se lo resulta, es otro cantar). Espero que os guste o disguste. Incluso que os deje indiferentes sería una opción tan buena como cualquier otra.</description>
	<lastBuildDate>Thu, 07 Apr 2011 15:29:52 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Homebrew for Mac Os X: cambiar entre distintas versiones de una instalación</title>
		<link>http://blog.deigote.com/2011/04/07/homebrew-for-mac-os-x-cambiar-entre-distintas-versiones-de-una-instalacion/</link>
		<comments>http://blog.deigote.com/2011/04/07/homebrew-for-mac-os-x-cambiar-entre-distintas-versiones-de-una-instalacion/#comments</comments>
		<pubDate>Thu, 07 Apr 2011 15:29:19 +0000</pubDate>
		<dc:creator>Deigote</dc:creator>
				<category><![CDATA[Informática, internet y tecnología]]></category>
		<category><![CDATA[different]]></category>
		<category><![CDATA[grails]]></category>
		<category><![CDATA[homebrew]]></category>
		<category><![CDATA[mac os x]]></category>
		<category><![CDATA[versions]]></category>

		<guid isPermaLink="false">http://blog.deigote.com/?p=502</guid>
		<description><![CDATA[Uso Homebrew en Mac Os X para instalar algunas utilidades típicas de Unix sin mucho dolor. Grails se encuentra entre ellas. Sin embargo, no he visto una manera de cambiar entre las distintas versiones instaladas.
Seguro que hay formas más elegantes de hacerlo (incluso puede que esté soportado nativamente, Dios no lo quiera), pero para pasar [...]]]></description>
			<content:encoded><![CDATA[<p>Uso <a href="http://mxcl.github.com/homebrew/">Homebrew</a> en Mac Os X para instalar algunas utilidades típicas de Unix sin mucho dolor. Grails se encuentra entre ellas. Sin embargo, no he visto una manera de cambiar entre las distintas versiones instaladas.</p>
<p>Seguro que hay formas más elegantes de hacerlo (incluso puede que esté soportado <em>nativamente</em>, Dios no lo quiera), pero para pasar de usar la versión 1.3.5 a la 1.2.0, los siguientes mandatos hicieron el truco:</p>
<pre><code>$ cd /usr/local/bin/
$ for i in `ls ../Cellar/grails/1.3.5/bin/*`; do rm `basename $i`; done
$ for i in `ls ../Cellar/grails/1.2.0/bin/*`; ln -s $i `basename $i`; done</code></pre>
<p>Muy rico :-).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.deigote.com/2011/04/07/homebrew-for-mac-os-x-cambiar-entre-distintas-versiones-de-una-instalacion/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Liberar, activar y hacer jailbreak a un iPhone Edge con firmware 3.1.3</title>
		<link>http://blog.deigote.com/2010/07/21/liberar-activar-y-hacer-jailbreak-a-un-iphone-edge-con-firmware-3-1-3/</link>
		<comments>http://blog.deigote.com/2010/07/21/liberar-activar-y-hacer-jailbreak-a-un-iphone-edge-con-firmware-3-1-3/#comments</comments>
		<pubDate>Wed, 21 Jul 2010 15:08:14 +0000</pubDate>
		<dc:creator>Deigote</dc:creator>
				<category><![CDATA[Informática, internet y tecnología]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[jailbreak]]></category>
		<category><![CDATA[unlock]]></category>

		<guid isPermaLink="false">http://blog.deigote.com/?p=493</guid>
		<description><![CDATA[Cómo liberar un iPhone Edge (first generation, primera generación) que tenga el firmware 3.1.3 instalado.]]></description>
			<content:encoded><![CDATA[<p>Por motivos de <a href="http://www.osoco.es">trabajo</a> ha caído en mis manos un iPhone de primera generación (algunos lo llaman iPhone Edge) con el que, en primera instancia, intenté hacer las cosas &#8220;a la Apple&#8221;. Para ello, restauré el teléfono con iTunes, deshaciéndome del jailbreak que tenía instalado e instalando el firmware más moderno para esta versión, el 3.1.3.</p>
<p>Lamentablemente, al ser un iPhone <a href="http://twitter.com/YoNoSoyTu/status/19079333878">traído allende los mares</a>, está atado al operador AT&#038;T, y además necesita ser activado, por lo que al final tuvimos que volver al jailbreak (ah, ironía, cómo te gusta repartir patadas en el culo <img src='http://blog.deigote.com/wp-includes/images/blank.gif' alt=':D' title=':D' class='wp-smiley smiley-2' /> ), ya que la activación y liberación sin hacer un jailbreak previo es, como poco, no trivial.</p>
<p>Hacerlo no es nada difícil una vez conoces los pasos, pero al ser un modelo antiguo, me costó bastantes prueba y error hasta dar con la fórmula. Básicamente hay que hacer tres  cosas:</p>
<ol>
<li>Obtener el software <a href="http://redsn0w.com"/>redsn0w</a> (en mi caso usé la versión <strong>0.92</strong>, el resto de instrucciones son para esta versión).</li>
<li><a href="http://www.hackint0sh.org/f127/22056.htm">Obtener el firware 3.1.2 para iPhone Edge</a>.</li>
<li>Usar redsn0w con el firmware 3.1.2 (iPhone1,1_3.1.2_7D11_Restore.ipsw).</li>
</ol>
<p>La clave es <strong>no</strong> usar el firmware que tienes instalado, el 3.1.3 (iPhone1,1_3.1.3_7E18_Restore.ipsw), pues si lo haces obtienes un bonito mensaje: <strong>Unable to recognize specified IPWS</strong>. Una vez sabes esto, hacer el jailbreak, y liberar el iPhone es coser y cantar.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.deigote.com/2010/07/21/liberar-activar-y-hacer-jailbreak-a-un-iphone-edge-con-firmware-3-1-3/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SyntaxError: invalid syntax usando equery en Gentoo</title>
		<link>http://blog.deigote.com/2010/07/14/syntaxerror-invalid-syntax-usando-equery-en-gentoo/</link>
		<comments>http://blog.deigote.com/2010/07/14/syntaxerror-invalid-syntax-usando-equery-en-gentoo/#comments</comments>
		<pubDate>Wed, 14 Jul 2010 10:33:23 +0000</pubDate>
		<dc:creator>Deigote</dc:creator>
				<category><![CDATA[Informática, internet y tecnología]]></category>
		<category><![CDATA[equery]]></category>
		<category><![CDATA[error]]></category>
		<category><![CDATA[eselect]]></category>
		<category><![CDATA[gentoo]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://blog.deigote.com/?p=490</guid>
		<description><![CDATA[En Gentoo, cómo solucionar el error que da equery: print pp.path(" /" + c[0]) SyntaxError: invalid syntax ]]></description>
			<content:encoded><![CDATA[<p>Usando Gentoo, me encontré con el siguiente error al lanzar el mandato equery:</p>
<pre><code>$ sudo equery belongs somefile
  File "/usr/bin/equery", line 271
    print pp.path(" /" + c[0])
           ^
SyntaxError: invalid syntax
</code></pre>
<p>Tras darle unas vueltas y no encontrar gran cosa en <del datetime="2010-07-14T10:14:26+00:00">Internet</del> Google <img src='http://blog.deigote.com/wp-includes/images/blank.gif' alt=':D' title=':D' class='wp-smiley smiley-2' /> , acabé pensando que podía tener que ver con el intérprete de python instalado. No estoy seguro de cómo llegué a esa conclusión, pero supongo que ayudaron el hecho de ver que equery está escrito en python, que mi sistema tenía instalados varios intérpretes (concretamente los más actuales de la versión 2 y 3 del mismo), y que otra máquina con Gentoo usaba otro intérprete y no sufría el problema.</p>
<p>Para resolverlo, lo primero es buscar pistas. Al trabajar con varias versiones, lo normal es que el ejecutable sea un enlace a la versión elegida. Así que fue cuestión de ver a dónde apuntaba dicho enlace y buscar el paquete involucrado.</p>
<pre><code>$ ls -l /usr/bin/python
lrwxrwxrwx 1 root root 14 jul 14 12:21 /usr/bin/python -> python-wrapper
$ equery belongs /usr/bin/python-wrapper
[ Searching for file(s) /usr/bin/python-wrapper in *... ]
app-admin/eselect-python-20100321 (/usr/bin/python-wrapper)
$ equery files app-admin/eselect-python
[ Searching for packages matching app-admin/eselect-python... ]
* Contents of app-admin/eselect-python-20100321:
/etc/env.d/python/.keep_app-admin_eselect-python-0
/usr/bin/python-wrapper
/usr/share/eselect/modules/python.eselect
</code></pre>
<p>Parece que eselect es la herramienta que usa portage para decidir qué versión se usa cuando un paquete tiene varias instaladas. Por lo que se ve arriba, cada paquete instala sus propios módulos para informar a eselect de qué versiones hay disponibles, etc. A partir de aquí, jugando un poco con el mandato eselect, encontrar la forma de cambiar la versión no es difícil:</p>
<pre><code>$ eselect
Usage: eselect <global options> <module name> <module options>
...
$ eselect python
Usage: eselect python <action> <options>
...
$ eselect python list
Available Python interpreters:
  [1]   python2.6
  [2]   python3.1 *
$ sudo eselect python set python2.6
</code></pre>
<p>Y, efectivamente, eso resuelve el problema y equery vuelve a funcionar <img src='http://blog.deigote.com/wp-includes/images/blank.gif' alt=':)' title=':)' class='wp-smiley smiley-19' /> .</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.deigote.com/2010/07/14/syntaxerror-invalid-syntax-usando-equery-en-gentoo/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Could not find compatible GRE between version 1.9.1.8 and 1.9.1.8 al arrancar Firefox</title>
		<link>http://blog.deigote.com/2010/05/06/could-not-find-compatible-gre-between-version-1-9-1-8-and-1-9-1-8-al-arrancar-firefox/</link>
		<comments>http://blog.deigote.com/2010/05/06/could-not-find-compatible-gre-between-version-1-9-1-8-and-1-9-1-8-al-arrancar-firefox/#comments</comments>
		<pubDate>Thu, 06 May 2010 08:42:38 +0000</pubDate>
		<dc:creator>Deigote</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[1.9.18]]></category>
		<category><![CDATA[dpkg]]></category>
		<category><![CDATA[emerge]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[gre]]></category>
		<category><![CDATA[portage]]></category>
		<category><![CDATA[xulrunner]]></category>

		<guid isPermaLink="false">http://blog.deigote.com/?p=484</guid>
		<description><![CDATA[Ayer, al emerger el mundo (qué épico suena) en Gentoo, me encontré con que Firefox no arrancaba. Tras lanzarlo desde una terminal me daba el siguiente error:
$ firefox
Could not find compatible GRE between version 1.9.1.8 and 1.9.1.8.

Parece que Firefox anda buscando una versión de GRE que esté entre la 1.9.1.8 y la&#8230; 1.9.1.8. Vamos, que [...]]]></description>
			<content:encoded><![CDATA[<p>Ayer, al emerger el mundo (qué épico suena) en Gentoo, me encontré con que Firefox no arrancaba. Tras lanzarlo desde una terminal me daba el siguiente error:
<p><code>$ firefox<br />
Could not find compatible GRE between version 1.9.1.8 and 1.9.1.8.<br />
</code></p>
<p>Parece que Firefox anda buscando una versión de GRE que esté entre la 1.9.1.8 y la&#8230; 1.9.1.8. Vamos, que tiene que ser la 1.9.1.8 <img src='http://blog.deigote.com/wp-includes/images/blank.gif' alt=':D' title=':D' class='wp-smiley smiley-2' /> . El siguiente paso lógico sería buscar el paquete <em>gre</em>, pero el resultado es algo desalentador <img src='http://blog.deigote.com/wp-includes/images/blank.gif' alt=':)' title=':)' class='wp-smiley smiley-19' /> :</p>
<p><code>$ equery list gre<br />
[ Searching for package 'gre' in all categories among: ]<br />
* installed packages<br />
[I--] [  ] sys-apps/grep-2.5.4-r1 (0)<br />
[I--] [  ] x11-proto/bigreqsproto-1.1.0 (0)<br />
</code></p>
<p>También podemos probar con <em>eix</em>, pero el resultado es aun peor (me lo ahorro por la longitud de la salida). Sin embargo, tras hacer una búsqueda en <em>/etc</em> (un buen lugar para empezar a buscar), vemos que al menos tiene ficheros de configuración:</p>
<p><code>$ sudo find /etc/ -name 'gre*'<br />
/etc/gre.d<br />
</code></p>
<p>Para los que venimos de Debian, el siguiente paso es consultar una <a title="Package managers comparision" href="http://wiki.openvz.org/Package_managers">guía de comparación de mandatos de gestores de paquetes</a>, un recurso útil que nos da el equivalente a un <em>dpkg -S</em> y buscar a qué paquete pertenece ese fichero:</p>
<p><code>$ equery belongs /etc/gre.d/<br />
[ Searching for file(s) /etc/gre.d in *... ]<br />
net-libs/xulrunner-bin-1.8.1.19 (/etc/gre.d)<br />
net-libs/xulrunner-1.9.1.8 (/etc/gre.d)<br />
</code></p>
<p>Sabiendo que xulrunner es nuestro sospechoso, basta con ver qué versiones hay disponibles:</p>
<p><code>$ eix xulrunner<br />
[I] net-libs/xulrunner<br />
Available versions:<br />
(1.8)    1.8.1.19<br />
(1.9)    *1.9.0.11-r1 1.9.0.14 1.9.1.6 1.9.1.8 1.9.2-r5 ~1.9.2.2-r1<br />
{+alsa custom-optimization dbus debug elibc_FreeBSD gnome ipv6 java libnotify python sqlite startup-notification system-sqlite wifi xinerama}<br />
Installed versions:  1.9.2-r5(1.9)<br />
</code></p>
<p>Y comprobar que la versión que queremos es la <em>1.9.1.8</em>, estando instalada la <em>1.9.2-r5</em>. Para bajar de versión, nada más fácil que enmascarar la que está instalada y volver a emergerla:</p>
<p><code>$ sudo echo "=net-libs/xulrunner-1.9.2.3-r1" &gt;&gt; /etc/portage/package.mask<br />
$ sudo emerge xulrunner<br />
$ firefox<br />
</code></p>
<p>Problema resuelto, y oye, siendo el primero de este estilo al que me enfrento por mi cuenta, sienta bien <img src='http://blog.deigote.com/wp-includes/images/blank.gif' alt=':D' title=':D' class='wp-smiley smiley-2' /> .</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.deigote.com/2010/05/06/could-not-find-compatible-gre-between-version-1-9-1-8-and-1-9-1-8-al-arrancar-firefox/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Mandato PS con salida &#8220;personalizada&#8221;</title>
		<link>http://blog.deigote.com/2010/03/08/custom-output-ps-command/</link>
		<comments>http://blog.deigote.com/2010/03/08/custom-output-ps-command/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 11:56:14 +0000</pubDate>
		<dc:creator>Deigote</dc:creator>
				<category><![CDATA[Informática, internet y tecnología]]></category>
		<category><![CDATA[command]]></category>
		<category><![CDATA[custom]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[output]]></category>
		<category><![CDATA[ps]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[scripting]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://blog.deigote.com/?p=476</guid>
		<description><![CDATA[Cómo definir salida personalizada o custom output para la orden ps en sistemas operativos tipo unix]]></description>
			<content:encoded><![CDATA[<p>Una opción del mandato <a href="http://www.google.es/search?q=ps+linux+command">ps</a> de los sistemas operativos tipo Unix que no suele estar muy bien documentada y que en mi opinión es tremendamente útil es la que permite personalizar la salida del mandato para que muestre la información que te interesa de cada proceso.
</p>
<p>La opción es <em>-o</em>, y acepta como argumentos una gran cantidad de posibilidades, que normalmente se encuentran descritas en la página del manual como <a href="http://ccrma.stanford.edu/planetccrma/man/man1/ps.1.html">standard format specifiers</a> (o directamente no se encuentran <img src='http://blog.deigote.com/wp-includes/images/blank.gif' alt=':D' title=':D' class='wp-smiley smiley-2' /> ).
</p>
<p>Un ejemplo de cómo lucen normalmente las órdenes de tipo <em>ps</em> que suelo lanzar en mis terminales:</p>
<pre><code>$ ps fax -o user,uid,pid,ppid,pgrp,%cpu,%mem,rss,vsize,size,tname,etime,start_time,args
USER       UID   PID  PPID  PGRP %CPU %MEM   RSS    VSZ    SZ TTY          ELAPSED START COMMAND
root         0  3434     1  3434  0.0  0.1   552   5404   464 ?        12-22:14:08 Feb23 /usr/sbin/sshd
root         0 14466  3434 14466  0.0  0.5  2572   8124   512 ?              36:04 12:13  \_ sshd: deigote [priv]
deigote   1000 14469 14466 14466  0.0  0.2  1440   8280   668 ?              36:01 12:13      \_ sshd: deigote@pts/2
deigote   1000 14470 14469 14470  0.0  0.6  3344   6548  2172 pts/2          36:01 12:13          \_ -bash
root         0 16310 14470 16310  0.1  0.2  1196   4292   472 pts/2          00:06 12:49              \_ su -
root         0 16311 16310 16311  0.0  0.3  1688   4740   364 pts/2          00:03 12:49                  \_ -su
root         0 16315 16311 16315  0.0  0.2   992   4148   580 pts/2          00:00 12:50                      \_ ps fax -o user,uid,pid,ppid,pgrp,%cpu,%mem,rss,vsize,size,tname,etime,start_time,args
</code></pre>
<p>Y, de hecho, un par de alias que suelo tener siempre definidos, entre otros, son:</p>
<pre><code>alias ps='ps fax -o user,uid,pid,ppid,pgrp,%cpu,%mem,rss,vsize,size,tname,etime,start_time,args'
alias psg='ps | head -n 1 &#038;&#038; ps | grep'
</code></pre>
<p></code></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.deigote.com/2010/03/08/custom-output-ps-command/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Svn y Apache: 403 Forbidden PROPFIND (client denied by server configuration)</title>
		<link>http://blog.deigote.com/2010/03/03/svn-y-apache-403-forbidden-propfind-client-denied-by-server-configuration/</link>
		<comments>http://blog.deigote.com/2010/03/03/svn-y-apache-403-forbidden-propfind-client-denied-by-server-configuration/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 14:09:59 +0000</pubDate>
		<dc:creator>Deigote</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.deigote.com/?p=470</guid>
		<description><![CDATA[If you are an english speaker that arrived here by Google or similar, I&#8217;ll just resume the solution to you: Don&#8217;t use fucking mod_evasive with mod_dav_svn. Hope that helps  
Si, es un nombre críptico de pelotas narices, pero es el que me gustaría haber encontrado a mi al principio de esta mañana, cuando por [...]]]></description>
			<content:encoded><![CDATA[<p><em>If you are an english speaker that arrived here by Google or similar, I&#8217;ll just resume the solution to you: <strong>Don&#8217;t use fucking mod_evasive with mod_dav_svn</strong>. Hope that helps <img src='http://blog.deigote.com/wp-includes/images/blank.gif' alt=':)' title=':)' class='wp-smiley smiley-19' /> </em></p>
<p>Si, es un nombre críptico de <del datetime="2010-03-03T13:51:59+00:00">pelotas</del> narices, pero es el que me gustaría haber encontrado a mi al principio de esta mañana, cuando por alguna razón mi configuración para <a href="http://blog.deigote.com/2009/07/17/subversion-desde-apache-usando-virtual-hosts-y-locations/">acceder Subversion desde Apache</a> ha empezado a dejar de funcionar correctamente.</p>
<p>Tras volverme loco durante toda la mañana, he descubierto el problema: una pequeña &#8220;incompatibilidad&#8221; entre <em>mod_dav_svn</em> y <em><a href="http://rm-rf.es/evitar-ataques-dos-apache-mod_evasive/">mod_evasive</a></em>, un módulo que se me ocurrió probar con el fin de evitar ataques de denegación de servicio, y que no quiero saber qué otros efectos secundarios puede haber causado (¿bots de los buscadores en la lista negra?).</p>
<p>La cuestión ha comenzado cuando esta mañana he realizado una serie de operaciones masivas de Subversion (un refactoring de estos &#8220;gordos&#8221;) y de pronto la cosa ha empezado a fallar. A partir de ahí, la cosa ha ido degenerando y ha comenzado a fallar siempre. Tras volverme loco, &#8220;reiniciar&#8221; el repositorio, tirar las peticiones por un tunel SSH para evitar posibles proxies intermedios, y otras soluciones infructuosas, he optado por probar directamente en el servidor, de forma local. Al principio ha funcionado, así que he optado por instalar mediante <a href="http://www.backports.org/dokuwiki/doku.php">backports</a> una versión más moderna de subversion, para ver si había alguna incompatibilidad en ese sentido. Con el tiempo, ha dejado de funcionar en local también, por lo que he reinstalado las versiones originales de Subversion, sin éxito. Como es lógico yo no entendía nada.</p>
<p>Los errores que obtenía en el cliente eran:
<p/>
<code>svn: PROPFIND of '/': 403 Forbidden</code></p>
<p>Mientras que en el log de apache aparecía un mensaje
<p/>
<code>client denied by server configuration: /opt/websites/<em>virtual host docroot</em></code></p>
<p>Que era lo que realmente me tenía fuera de juego: ¿Qué pintaba el <em>docroot</em> del <em>virtualhost</em> en el error, si todas las peticiones estaban entrando al <em>location /</em>, el cual estaba configurado como un <em>DAV</em>?</p>
<p>¿Qué estaba pasando? Dado que un simple svn list hace bastantes operaciones, mod_evasive estaba tomándolo como un &#8220;ataque&#8221;, bloqueando al cliente durante un tiempo. Por eso la cosa ha ido degenerando hasta que no funcionaba nada. El mensaje de error con el dichoso docroot debe ocurrir porque cuando mod_evasive pone a un cliente en su lista negra, ésta ya no llega a entrar en el <em>DAV</em>, y se considera el acceso fallido como un acceso al <em>docroot</em>.  ¿Solución? No usar mod_evasive en conjunto con mod_dav_svn, o buscar una configuración del primero que funcione bien con el segundo (yo, escarmentado como estoy, lo dejo para otro día -aka nunca- <img src='http://blog.deigote.com/wp-includes/images/blank.gif' alt=':D' title=':D' class='wp-smiley smiley-2' /> ).<br />
]]></content:encoded>
			<wfw:commentRss>http://blog.deigote.com/2010/03/03/svn-y-apache-403-forbidden-propfind-client-denied-by-server-configuration/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Idioma por defecto en Liferay</title>
		<link>http://blog.deigote.com/2010/01/28/idioma-por-defecto-en-liferay/</link>
		<comments>http://blog.deigote.com/2010/01/28/idioma-por-defecto-en-liferay/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 09:56:34 +0000</pubDate>
		<dc:creator>Deigote</dc:creator>
				<category><![CDATA[Informática, internet y tecnología]]></category>
		<category><![CDATA[default]]></category>
		<category><![CDATA[defecto]]></category>
		<category><![CDATA[español]]></category>
		<category><![CDATA[language]]></category>
		<category><![CDATA[lenguaje]]></category>
		<category><![CDATA[liferay]]></category>
		<category><![CDATA[locales]]></category>
		<category><![CDATA[system-ext.properties]]></category>
		<category><![CDATA[system.properties]]></category>
		<category><![CDATA[tomcat]]></category>

		<guid isPermaLink="false">http://blog.deigote.com/?p=454</guid>
		<description><![CDATA[Lenguaje por defecto en Liferay. Cómo seleccionarlo para una ínstalación nueva o para una instalación ya existente.]]></description>
			<content:encoded><![CDATA[<p>Un detalle que se me olvidó en la pequeña <a href="http://blog.deigote.com/2010/01/08/empezando-con-liferay-una-guia-rapida-de-instalacion/" title="Guía de instalación de Liferay">guía para instalar Liferay</a> que escribí el otro día es la selección del idioma por defecto, que aunque a simple vista no parece gran cosa, como dirían los americanos, es un poco <em>tricky</em> (Wordreference lo traduce como <a href="http://www.wordreference.com/es/translation.asp?tranword=tricky">que tiene sus bemoles</a>, genial <img src='http://blog.deigote.com/wp-includes/images/blank.gif' alt=':lol:' title=':lol:' class='wp-smiley smiley-10' /> ).</p>
<p>Igual que Liferay incluye un <a href="http://blog.deigote.com/2010/01/08/empezando-con-liferay-una-guia-rapida-de-instalacion/#liferay-con-mysql">fichero con todas las propiedades relacionadas con funcionalidad</a>, existe otro fichero, llamado <a href="http://svn.liferay.com/browse/portal/trunk/portal-impl/src/system.properties"><em>system-ext.properties</em></a>, que tiene las propiedades relacionadas con el sistema (codificación de los ficheros, zona horaria, <strong>lenguaje por defecto</strong>, etcétera). Este fichero puede extenderse creando el fichero <em>system-ext.properties.</em>
<p>Visto esto, para poner el portal en lenguaje español por defecto, debería bastar con anotar en ese fichero las propiedades relativas al lenguaje que queremos (las rutas corresponden a las mostradas en la <a href="http://blog.deigote.com/2010/01/08/empezando-con-liferay-una-guia-rapida-de-instalacion/">guía</a> antes mencionada):</p>
<pre><code>$ echo "# Liferay default language
user.country=ES
user.language=es" >> /opt/websites/liferay.deigote.com/tomcat-6.0.18/webapps/ROOT/WEB-INF/classes/portal-ext.properties</code></pre>
<p>¿Fácil, verdad? Pues no funciona <img src='http://blog.deigote.com/wp-includes/images/blank.gif' alt=':D' title=':D' class='wp-smiley smiley-2' /> . Para ser más exactos, no funciona para las compañías que ya tengamos creadas en la base de datos que estemos usando, ya que al crearlas, Liferay lee estas propiedades y las asocia a la compañía <strong>directamente en la base de datos</strong>.</p>
<p>Si ya tenéis el portal creado y no queréis empezar de cero, no es un problema grave, ya que estos datos pueden modificarse. Para ello, arrancad el portal accediendo a la compañía que queráis (en la mayoría de instalaciones se suele usar sólo una, ya que la <em>feature</em> de compañías no está muy bien documentada), y navegad por el menú superior escogiendo las opciones <em>Panel de control &#8211; Portal &#8211; Configuración &#8211; Preferencias de presentación</em> para seleccionar el idioma y país que por defecto.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.deigote.com/2010/01/28/idioma-por-defecto-en-liferay/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Obtener las extensiones de fichero existentes en un directorio</title>
		<link>http://blog.deigote.com/2010/01/12/obtener-las-extensiones-fichero-existentes-en-un-directorio/</link>
		<comments>http://blog.deigote.com/2010/01/12/obtener-las-extensiones-fichero-existentes-en-un-directorio/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 17:56:40 +0000</pubDate>
		<dc:creator>Deigote</dc:creator>
				<category><![CDATA[Informática, internet y tecnología]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[extension]]></category>
		<category><![CDATA[file]]></category>
		<category><![CDATA[find]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[scripting]]></category>
		<category><![CDATA[sed]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://blog.deigote.com/?p=440</guid>
		<description><![CDATA[Cómo obtener la extensión de un fichero, o todas las extensiones que existan a partir de un directorio en bash o sh.]]></description>
			<content:encoded><![CDATA[<p>Una mini-receta rápida para obtener, de forma recursiva, todas las extensiones de fichero que existan a partir de un directorio dado:</p>
<p><code>find directorio_raiz -type f -exec sh -c 'basename $0 | sed "s/.*\.//"' {} \;  | sort | uniq</code></p>
<p>El truco viene del archipoderoso sed, que permite obtener las extensión de un fichero mediante la orden <em>sed &#8220;s/.*\.//&#8221;</em>, y funciona que yo sepa, para cualquier <em>Unix</em> con una shell compatible con <em>sh</em> y <em>find</em>, <em>basename</em> y <em>sed</em> instalados.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.deigote.com/2010/01/12/obtener-las-extensiones-fichero-existentes-en-un-directorio/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Empezando con Liferay: una guía rápida de instalación</title>
		<link>http://blog.deigote.com/2010/01/08/empezando-con-liferay-una-guia-rapida-de-instalacion/</link>
		<comments>http://blog.deigote.com/2010/01/08/empezando-con-liferay-una-guia-rapida-de-instalacion/#comments</comments>
		<pubDate>Fri, 08 Jan 2010 12:37:09 +0000</pubDate>
		<dc:creator>Deigote</dc:creator>
				<category><![CDATA[Informática, internet y tecnología]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[como]]></category>
		<category><![CDATA[instalación]]></category>
		<category><![CDATA[liferay]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[portlets]]></category>
		<category><![CDATA[tomcat]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[usar]]></category>

		<guid isPermaLink="false">http://blog.deigote.com/?p=423</guid>
		<description><![CDATA[Guía rápida de instalación de Liferay usando Apache y MySQL]]></description>
			<content:encoded><![CDATA[<p>Dado que reciéntemente he tenido que instalar un Liferay limpito en un servidor con Apache, dejo aquí una guía con los pasos que seguí:</p>
<ol>
<li><a href="#que-es-liferay">¿Qué es Liferay?</a></li>
<li><a href="#instalacion-basica">Instalación básica</a></li>
<li><a href="#liferay-con-mysql">Usando Liferay con MySQL</a></li>
<li><a href="#liferay-con-apache">Usando Liferay con Apache</a></li>
<li><a href="#usuario-por-defecto">Usuario por defecto y un par de ajustes más</a></li>
</ol>
<h4 id="que-es-liferay">¿Qué es Liferay?</h4>
<p><a href="http://www.liferay.com/">Liferay</a> es un gestor de portales web con una gran funcionalidad integrada (gestión de comunidades y usuarios, CMS, wiki, blogs, y mucho más), y a su vez es un contenedor de portlets, lo que le permite ser extendido de manera bastante rápida y flexible (siguiendo la especificación <a href="http://www.jcp.org/en/jsr/detail?id=286">JSR 286: Portlet Specification 2.0</a>). Además, cuenta con una versión <a href="http://www.liferay.com/web/guest/downloads/portal">Community</a> cuyo uso es gratuito y cuyo código es libre.</p>
<h4 id="instalacion-basica">Instalación básica</h4>
<p>Descargamos la última versión <em>Community</em> con el usuario que arrancará Liferay (en mi caso <em>www-data</em>) en el sitio que queramos (yo he escogido <em>/opt/websites/liferay.deigote.com</em> como directorio base de la instalación):</p>
<pre><code>$ su - www-data
$ cd /opt/websites/
$ wget 'http://sourceforge.net/projects/lportal/files/Liferay%20Portal/liferay-portal-tomcat-6.0-5.2.3.zip'
$ unzip liferay-portal-tomcat-6.0-5.2.3.zip
$ mv liferay-portal-5.2.3/ liferay.deigote.com
</code></pre>
<p>Si ahora arrancamos Liferay, podremos ver cómo nos informa en los log de que se usará una base de datos para testing (<em><a href="http://hsqldb.org/">Hipersonic</a></em>), y si navegamos por la web, podremos ver una serie de portlets a modo de demo:</p>
<pre><code>$ /opt/websites/liferay.deigote.com/tomcat-6.0.18/bin/startup.sh
$ tail -f logs/catalina.out &#038;
$ firefox http://localhost:8080
</code></pre>
<p>Este entorno de demo está bien para cacharrear un poco y ver cómo la gente de Liferay quiere vendernos sus capacidades para hacer un clon de Facebook <img src='http://blog.deigote.com/wp-includes/images/blank.gif' alt=':D' title=':D' class='wp-smiley smiley-2' /> (vienen instanciados portlets de chat, de muro, de añadir usuarios como amigo, de actividad reciente&#8230;), pero los datos no persisten, por lo que no podréis pasar de ahí. Además, Liferay viene por defecto con usa serie de portlets (en forma de plugins) preparados para hacer la demostración antes mencionada. Yo normalmente borro dichos portlets antes de continuar (de hecho, en mi caso borro todos los plugins excepto el de web-form-portlet, que es el único que encuentro útil):</p>
<pre><code>$ rm -rf `ls /opt/websites/liferay.deigote.com/tomcat-6.0.18/webapps | grep -v ROOT | grep -v web-form-portlet`</code></pre>
<p>Para la persistencia de los datos, tenemos que conectar Liferay con un viejo conocido <img src='http://blog.deigote.com/wp-includes/images/blank.gif' alt=':D' title=':D' class='wp-smiley smiley-2' /> .</p>
<h4 id="liferay-con-mysql">Usando Liferay con MySQL</h4>
<p>Para conectar Liferay con MySQL existen varias formas. De momento anotaré aquí la más sencilla (aunque para mi gusto un poco &#8220;fea&#8221;), puesto que no recuerdo exactamente cómo es la otra <img src='http://blog.deigote.com/wp-includes/images/blank.gif' alt=':D' title=':D' class='wp-smiley smiley-2' /> . Liferay incluye en su <em>core</em> un fichero de propiedades (<em><a href="http://svn.liferay.com/browse/portal/trunk/portal-impl/src/portal.properties">portal.properties</a></em>) que configuran prácticamente todos los componentes del portal, base de datos incluida. Ese fichero puede ser extendido mediante el fichero <em>portal-ext.properties</em>, que por defecto no existe. Así que escribimos en él la configuración de la base de datos:</p>
<pre><code>$ echo "# Database connection
jdbc.default.driverClassName=com.mysql.jdbc.Driver
jdbc.default.url=jdbc:mysql://localhost/liferay_database?useUnicode=true&#038;characterEncoding=UTF-8&#038;useFastDateParsing=false
jdbc.default.username=mysql-user
jdbc.default.password=mysql-password" > /opt/websites/liferay.deigote.com/tomcat-6.0.18/webapps/ROOT/WEB-INF/classes/portal-ext.properties
</code></pre>
<p>A continuación nos conectamos al servidor de mysql (en mi caso, localhost) y creamos la base de datos y un usuario con permisos para la misma:</p>
<pre><code>$ mysql -h localhost -u root -p
$ create database liferay_database
$ grant all privileges on liferay_database.* to "mysql-user"@"localhost" identified by "mysql-password";
</code></pre>
<p>Si en este momento arrancamos Liferay de nuevo, deberíamos ver algunos mensajes haciendo mención a la base de datos utilizada (MySQL), y otros que indican que se están creando las tablas.</em>.</p>
<h4 id="liferay-con-apache">Usando Liferay con Apache</h4>
<p>Para usar Apache como servidor web, creamos un <em>host</em> virtual y lo conectamos al servidor de aplicaciones de Liferay (en mi caso Tomcat) usando un módulo de proxy. Podemos usar el módulo proxy_http, que funcionaría con cualquier servidor de aplicaciones, o el módulo proxy_ajp, específico de Apache, y que presenta algunas ventajas sobre http, aunque yo no las recuerde <img src='http://blog.deigote.com/wp-includes/images/blank.gif' alt=':D' title=':D' class='wp-smiley smiley-2' /> . Dado que Tomcat soporta AJP, será el que usemos. Dado que yo uso Debian, necesito activar el módulo de proxy_ajp y crear un host virtual que use dicho módulo:</p>
<pre><code>$ su -
# a2enmod proxy_ajp
# nano /etc/apache2/sites-available/liferay.deigote.com
# a2ensite liferay.deigote.com
# /etc/init.d/apache2 restart
# exit
</code></pre>
<p>El contenido del fichero /etc/apache2/sites-available/liferay.deigote.com será el siguiente:</p>
<pre><code>&lt;VirtualHost *:80&gt;
        ServerName liferay.deigote.com
        ServerAdmin webmaster@localhost
        ErrorLog /var/log/apache2/liferay.deigote.com_error.log
        LogLevel warn
        CustomLog /var/log/apache2/liferay.deigote.com_access.log combined
        # Proxy to Tomcat
        &lt;Proxy *&gt;
                Order deny,allow
                Allow from all
        &lt;/Proxy&gt;
        ProxyPass / ajp://liferay.deigote.com:8009/
        ProxyPassReverse / ajp://liferay.deigote.com:8009/
&lt;/VirtualHost&gt;
</code></pre>
<p>Antes de echar a andar con esta configuración, debemos añadir un par de líneas al fichero de propiedades de Liferay, ya que si no éste dará por hecho que estamos atacando al puerto 8080 (el puerto por defecto de Tomcat) y escribirá las URL&#8217;s con dicho puerto. Una vez realizado este paso, deberíamos poder acceder a Liferay a través del host virtual que hemos usado (siempre y cuando nuestro servidor DNS sepa resolver dicho host, claro):</p>
<pre><code>$ /opt/websites/liferay.deigote.com/tomcat-6.0.18/bin/shutdown.sh
$ echo "
# Webserver configuration
web.server.http.port=80
web.server.https.port=443" >> /opt/websites/liferay.deigote.com/tomcat-6.0.18/webapps/ROOT/WEB-INF/classes/portal-ext.properties
$ /opt/websites/liferay.deigote.com/tomcat-6.0.18/bin/startup.sh
$ firefox http://liferay.deigote.com
</code></pre>
<h4 id="usuario-por-defecto">Usuario por defecto y un par de ajustes más</h4>
<p>Una vez estemos navegando por Liferay, podremos acceder usando el usuario <em>test@liferay.com</em> con la contraseña <em>test</em>, que es administrador de la comunidad por defecto (<em>guest</em>) Yo recomiendo un par de ajustes más:</p>
<ul>
<li>Cambiar la dirección de correo (y por tanto el login) y la contraseña del usuario administrador. Esto lo podéis hacer en el Panel de control, en el apartado de Usuarios.</li>
<li>Modificar el host virtual de la comunidad por defecto (o la que vayáis a usar) para que coincida con el que estéis usando para acceder a través de Apache. Esto se puede hacer en el panel de control, en el apartado <em>Communities &#8211; Guest &#8211; Manage pages &#8211; Settings &#8211; Virtual host</em>, usando el campo <em>Public virtual host</em>. Esto permitirá que las URL&#8217;s del tipo <em>http://virtual_host/web/nombre_de_la_comunidad/pagina</em> pasen a ser <em>http://virtual_host/pagina</em>, lo cual es más cómodo. Por ejemplo, la URL de la página por defecto (<em>home</em>) en la comunidad por defecto (guest) en mi caso pasaría de <em>http://liferay.deigote.com/web/guest/home</em> a <em>http://liferay.deigote.com/home</em></li>
</ul>
<p>Una vez finalizados estos pasos, ya podemos empezar a trabajar con Liferay en un entorno de producción (a falta, por supuesto, de configuraciones y optimizaciones de Tomcat, Apache y MySQL que no vienen al caso <img src='http://blog.deigote.com/wp-includes/images/blank.gif' alt=':D' title=':D' class='wp-smiley smiley-2' /> ).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.deigote.com/2010/01/08/empezando-con-liferay-una-guia-rapida-de-instalacion/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Contestadores automáticos: al final, alguien te está escuchando</title>
		<link>http://blog.deigote.com/2009/07/28/contestadores-automaticos-al-final-alguien-te-esta-escuchando/</link>
		<comments>http://blog.deigote.com/2009/07/28/contestadores-automaticos-al-final-alguien-te-esta-escuchando/#comments</comments>
		<pubDate>Tue, 28 Jul 2009 15:52:43 +0000</pubDate>
		<dc:creator>Deigote</dc:creator>
				<category><![CDATA[Como la vida misma]]></category>
		<category><![CDATA[atención al cliente]]></category>
		<category><![CDATA[automático]]></category>
		<category><![CDATA[contestador]]></category>
		<category><![CDATA[contestador automático]]></category>
		<category><![CDATA[operador]]></category>
		<category><![CDATA[robot]]></category>
		<category><![CDATA[telefonía]]></category>
		<category><![CDATA[teleoperador]]></category>
		<category><![CDATA[truco]]></category>

		<guid isPermaLink="false">http://blog.deigote.com/?p=418</guid>
		<description><![CDATA[Truco para evitar los interminables contestadores automáticos de atención al cliente y que te pasen con teleoperador (útil cuando tu opción es relativamente rara o larga)]]></description>
			<content:encoded><![CDATA[<p>Conversación hipotética entre un contestador automático de atención al cliente y yo:</p>
<ul>
<li><em>Contestador</em>: Bienvenido al servicio de atención al cliente de Filostros Asociados. Si desea hacer una consulta general sobre filostros, por favor, pulse 1. Si desea información sobre nuestros puntos de venta, por favor, pulse 2. Si desea consultar el estado de un pedido de filostros, por favor, pulse&#8230;</li>
<li><em>Diego</em>: Operador</li>
<li><em>Contestador</em>: Perdone, no hemos entendido su opción. Si desea hacer una consulta general sobre filostros, por favor, pulse 1&#8230;</li>
<li><em>Diego</em>: Quiero cambiar la dirección de entrega de mi pedido de filosotros, a ver si me podéis pasar con un operador</li>
<li><em>Operador</em>: Buenas tardes, le atiende Gloria Aleluya, ¿en qué puedo ayudarle?</li>
<p>Un amigo que trabajaba en atención al cliente de <s>Vomistar</s> Movistar me dijo hace unos cuantos años que en realidad casi siempre hay un operador que te redirije manualmente a la opción escogida, en caso de que sea por voz, y en caso de que sea por número, siempre hay alguien &#8220;vigilando&#8221;. Por lo visto tenía razón, pues este truco ya lo he usado con éxito <a href="http://www.ingdirect.es">unas</a> <a href="http://www.citapreviadnie.es">cuantas</a> <a href="http://www.ups.es">veces</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.deigote.com/2009/07/28/contestadores-automaticos-al-final-alguien-te-esta-escuchando/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
