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

<channel>
	<title>Pruebas, modelado y Java</title>
	<atom:link href="http://xmleye.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://xmleye.wordpress.com</link>
	<description>Investigación sobre pruebas y modelado y varios fortunios y desfortunios con Java y otras tecnologías</description>
	<lastBuildDate>Sun, 10 Jul 2011 23:52:56 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='xmleye.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Pruebas, modelado y Java</title>
		<link>http://xmleye.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://xmleye.wordpress.com/osd.xml" title="Pruebas, modelado y Java" />
	<atom:link rel='hub' href='http://xmleye.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Reutilizar un móvil Android como webcam con DroidCamX e IP Webcam</title>
		<link>http://xmleye.wordpress.com/2011/07/08/reutilizar-un-movil-android-como-webcam-con-droidcamx-e-ip-webcam/</link>
		<comments>http://xmleye.wordpress.com/2011/07/08/reutilizar-un-movil-android-como-webcam-con-droidcamx-e-ip-webcam/#comments</comments>
		<pubDate>Fri, 08 Jul 2011 07:30:17 +0000</pubDate>
		<dc:creator>bluezio</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://xmleye.wordpress.com/?p=129</guid>
		<description><![CDATA[A raíz de este artículo de El Androide Libre, me puse a probar DroidCamX e IP Webcam para convertir mi Nexus S (corriendo una ROM basada en Gingerbread 2.3.4) en una webcam HD, posiblemente con micrófono incorporada. He tenido éxito con IP Webcam y he conseguido que funcione tanto en Windows 7 como en Ubuntu [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=xmleye.wordpress.com&amp;blog=2106432&amp;post=129&amp;subd=xmleye&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>A raíz de <a href="http://www.elandroidelibre.com/2011/07/transforma-tu-android-en-una-webcam-gracias-a-droidcam-wireless-webcam.html">este artículo</a> de El Androide Libre, me puse a probar <a href="https://market.android.com/details?id=com.dev47apps.droidcamx&amp;feature=more_from_developer">DroidCamX</a> e <a href="https://market.android.com/details?id=com.pas.webcam&amp;feature=search_result">IP Webcam</a> para convertir mi Nexus S (corriendo una ROM basada en Gingerbread 2.3.4) en una webcam HD, posiblemente con micrófono incorporada. He tenido éxito con IP Webcam y he conseguido que funcione tanto en Windows 7 como en Ubuntu Natty, pero me ha llevado su buen rato. Dejo aquí los apuntes para que Google pueda encontrarlos <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> .</p>
<p>En primer lugar probé <a href="https://market.android.com/details?id=com.dev47apps.droidcam&amp;feature=search_result">DroidCam</a> (la versión gratuita de DroidCamX), que tenía buenos análisis. Requiere instalar un cliente para Windows/Linux y una aplicación en el móvil. El cliente para Windows iba bien, pero sin sonido (dejó de funcionar en Gingerbread y exige arrancar Windows 7 de 64 bits desactivando la comprobación de firma de drivers). Lástima. El cliente en mi Ubuntu Natty de 64 bits (basado en Video4Linux2) no funcionó de ninguna de las formas (y sí, probé con la versión de 64 bits). A veces daba errores de &#8220;Failed to write frame (bad address)&#8221;, y en otros casos tanto Cheese como Skype daban bonitas pantallas negras.</p>
<p>De todos modos, pensando en apoyar el desarrollo de este programa y las funcionalidades adicionales, eché los 3 euros y compré DroidCamX. Añade autoenfoque por toque, la posiblidad de cambiar la resolución y el códec para la comunicación PC-móvil y un cliente web integrado. Todo funcionó bien menos el cliente web: el formato de vídeo A no servía para resoluciones decentes, el formato B mostraba artefactos y el formato C tenía un parpadeo muy molesto al verlos por la web. Ah, y DroidCamX tampoco funcionó en Ubuntu de ninguna de las formas. Una pena.</p>
<p>Tras dejar DroidCamX como webcam inalámbrica para Windows, decidí probar IP Webcam. Era gratuita, pero inicialmente la descarté ya que no tenía un cliente nativo para Linux. Permite cambiar la resolución y calidad de imagen, controlar el LED del flash a distancia, grabar sonido y tiene una mejor interfaz web. A diferencia de DroidCam, creo que en vez de codificar vídeo, se dedica únicamente a tomar 15 imágenes JPEG por segundo y reunirlas en un flujo continuo (MJPEG). Eso hace que el vídeo sea algo menos suave que el de DroidCam, y que exija más ancho de banda, pero le permite reutilizar drivers genéricos para Windows que convierten un flujo MJPEG en una webcam local, utilizable por Skype y otros programas similares.</p>
<p>En el lado de Ubuntu requiere algo de trabajo, pero se pueden reutilizar varios programas que ya existen para usar IP Webcam como una webcam local. La idea básica es crear un dispositivo Video4Linux2 virtual que lea el flujo MJPEG y sea visible para Cheese, Skype y demás como una webcam más. Originalmente, para Video4Linux existió <a href="http://www.lavrsen.dk/foswiki/bin/view/Motion/VideoFourLinuxLoopbackDevice">vloopback</a>, pero este proyecto se abandonó tras la retirada de V4L1 a favor de V4L2 desde la versión 2.6.15 del kernel de Linux. <a href="http://allonlinux.free.fr/Projets/AVLD/">AVLD</a> es otra herramienta parecida para V4L1, también abandonada. Para V4L2, hay otros dos proyectos: <a href="http://v4l2vd.sourceforge.net/">v4l2vd</a> (no compila a partir del kernel 2.6.31) y <a href="https://github.com/umlaeute/v4l2loopback">v4l2loopback</a> (compila en mi 2.6.38). Así que la idea básica es crear un dispositivo virtual con v4l2loopback, y luego enviarle los datos de vídeo necesarios para nuestras aplicaciones. Para ello, podemos usar GStreamer y su componente v4l2sink, por ejemplo. Esto da mucho más juego que una simple webcam: podríamos enviar cualquier vídeo o aplicar cualquier efecto a través de esa &#8220;webcam&#8221;. Pero claro, todo tiene su complicación <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> .</p>
<p>Primero, tenemos que compilar e instalar v4l2loopback, y luego cargar el módulo instalado:</p>
<p>
<pre>
sudo apt-get install git build-essentials linux-source
git clone git://github.com/umlaeute/v4l2loopback.git
cd v4l2loopback
make &amp;&amp; sudo make install
sudo modprobe v4l2loopback
</pre>
</p>
<p>Si todo ha ido bien, deberíamos tener un fichero <code>/dev/video*</code> más que antes. Ese será nuestra tubería. Por lo pronto, supongamos que es <code>/dev/video0</code>, el primero de todos. Si queremos que este módulo se cargue automáticamente al iniciar el ordenador, tendremos que añadir estas dos líneas tras la última línea de <code>/etc/modules</code>:</p>
<p>
<pre>
videodev
v4l2loopback
</pre>
</p>
<p>Con el módulo cargado, ya podemos ver si capturamos bien la señal de la webcam. Para ello, iremos a la interfaz web de IP Webcam y cogeremos la URL del flujo MJPEG, que será de la forma <code>http://ip:puerto/videofeed</code>. Con esa dirección, lanzaremos estas órdenes desde una terminal. Si todo ha ido bien, debería salir una ventana con lo que se ve en la pantalla de nuestro Android:</p>
<p>
<pre>
sudo apt-get install gstreamer-0.10-tools
gst-launch souphttpsrc location="http://ip:puerto/videofeed" is_live=true ! \
  jpegdec ! ffmpegcolorspace ! autovideosink
</pre>
</p>
<p>Ahora podemos salir con Ctrl+C de <code>gst-launch</code>, y empezar a reenviar el flujo MJPEG a nuestro dispositivo V4L2 virtual. Tendremos que repetir esto cada vez que reiniciemos el ordenador, por cierto:</p>
<p>
<pre>
gst-launch souphttpsrc location="http://ip:puerto/videofeed" is_live=true ! \
  jpegdec ! ffmpegcolorspace ! v4l2sink device=/dev/video0
</pre>
</p>
<p>Vamos a diseccionar un poco esto:</p>
<ul>
<li>Primero, la fuente <code>souphttpsrc</code> accede a la dirección HTTP especificada y va bajando información en directo, sin ningún búfer (<code>is_live=true</code>).
<li>A continuación, <code>jpegdec</code> identifica cada imagen en el flujo MJPEG y las reúne en un vídeo en el espacio de colores YUV.
<li>El componente <code>ffmpegcolorspace</code> convierte el vídeo YUV en el formato preferido por el dispositivo V4L2 virtual.
<li>Finalmente, el sumidero <code>v4l2sink</code> escribe la información en el dispositivo <code>/dev/video0</code>, para que sea visible por Cheese/Skype/etc.
</ul>
<p>Ahora deberíais poder abrir Cheese o Skype (2.1.0.81, ojo, que la 2.2 beta ahora no va) y veros por pantalla <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> . Si tenéis curiosidad, añadid un par de filtros, como:</p>
<p>
<pre>
gst-launch souphttpsrc location="http://ip:puerto/videofeed" is_live=true \
  ! jpegdec ! ffmpegcolorspace ! mirror ! videobalance saturation=0.0 \
  ! v4l2sink device=/dev/video0
</pre>
</p>
<p>Para más ideas, mirad <a href="http://gstreamer.freedesktop.org/documentation/plugins.html">los complementos</a> que hay en la web oficial de GStreamer. Hay para todo. Una recomendación: si queréis video suave y sesiones largas, lo mejor es que mantengáis el móvil conectado por USB al ordenador y uséis el reenvío de puertos de ADB para enviar los datos a través de USB, en vez de por Wi-Fi. Para ello, tenéis que <a href="http://developer.android.com/sdk/installing.html">instalaros</a> el SDK de Android y ejecutar esta orden:</p>
<p>
<pre>
adb forward tcp:8080 tcp:8080
</pre>
</p>
<p>Con esta orden, todo lo que enviéis al puerto 8080 de vuestro ordenador irá al 8080 del móvil, a través del cable USB. Cuando hagáis eso, será mucho más rápido acceder a IP Camera por <code>http://127.0.0.1:8080/</code> que con vuestra conexión Wi-Fi.</p>
<p>Actualización (12:28): he conseguido que funcione el micrófono en Linux también. El esquema es un poco enrevesado: el flujo WAV de la webcam va a un sumidero nulo de PulseAudio, y la fuente asociada al monitor del sumidero nulo se usa como dispositivo de grabación de la aplicación de videoconferencia. Funciona bien, pero olvidaos de conectar por Wi-Fi <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> . Además, he creado un guión para facilitar el uso de la cámara y el micrófono, aunque tendréis que instalar el SDK de Android y v4l2loopback a mano de todos modos. Lo he colgado por <a href="https://github.com/bluezio/ipwebcam-gst">Github</a>, por si alguien lo quiere.</p>
<p>Actualización (domingo 10 julio): tras hablar con el desarrollador, parece que añadirá un enlace al guión en Github en la próxima versión. Gracias a sus sugerencias, el guión ahora instala v4l2loopback por DKMS e inicia IP Webcam automáticamente si el móvil está conectado por USB y ADB está disponible. Definivamente, ha quedado mucho mejor <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> .</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/xmleye.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/xmleye.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/xmleye.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/xmleye.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/xmleye.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/xmleye.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/xmleye.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/xmleye.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/xmleye.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/xmleye.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/xmleye.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/xmleye.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/xmleye.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/xmleye.wordpress.com/129/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=xmleye.wordpress.com&amp;blog=2106432&amp;post=129&amp;subd=xmleye&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://xmleye.wordpress.com/2011/07/08/reutilizar-un-movil-android-como-webcam-con-droidcamx-e-ip-webcam/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e29ea6a7a226272b6f231964edd2a8f1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bluezio</media:title>
		</media:content>
	</item>
		<item>
		<title>Eclipse Commiter en Epsilon</title>
		<link>http://xmleye.wordpress.com/2011/04/18/eclipse-commiter-en-epsilon/</link>
		<comments>http://xmleye.wordpress.com/2011/04/18/eclipse-commiter-en-epsilon/#comments</comments>
		<pubDate>Mon, 18 Apr 2011 14:09:56 +0000</pubDate>
		<dc:creator>bluezio</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[epsilon]]></category>
		<category><![CDATA[eunit]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[modeling]]></category>

		<guid isPermaLink="false">http://xmleye.wordpress.com/?p=125</guid>
		<description><![CDATA[Me alegra decir que acabo de entrar como Committer en el proyecto Epsilon de Eclipse GMT. La verdad es que llevaba desde verano del 2009 contribuyendo pequeños cambios para cubrir fallos que me encontraba y necesidades que tenía. Ahora estoy de estancia en la University of York con los desarrolladores de Epsilon (Dimitris Kolovos y [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=xmleye.wordpress.com&amp;blog=2106432&amp;post=125&amp;subd=xmleye&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Me alegra decir que acabo de entrar como Committer en el proyecto <a href="http://eclipse.org/gmt/epsilon/">Epsilon</a> de Eclipse GMT. La verdad es que llevaba desde verano del 2009 contribuyendo pequeños cambios para cubrir fallos que me encontraba y necesidades que tenía.</p>
<p>Ahora estoy de estancia en la University of York con los desarrolladores de Epsilon (Dimitris Kolovos y Louis Rose), realizando una contribución más grande, y decidieron invitarme al proyecto. La verdad es que está siendo muy interesante y están saliendo cosas curiosas. Estoy ocupado desarrollando EUnit, un marco de pruebas unitarias para temas de modelos, basado en Epsilon. Tengo en la cola de prioridades un artículo acerca de él: cuando tenga algo más definido, hablaré un poco más de EUnit por aquí.</p>
<p>Por lo pronto tengo 50 commits que limpiar y subir al SVN de Eclipse <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> . Por supuesto, estoy usando git-svn: es una alegría ver que puedes replantear tus 50 últimos commits limpiamente sobre los últimos cambios de Dimitris y Louis en SVN.</p>
<br /> Tagged: <a href='http://xmleye.wordpress.com/tag/eclipse/'>eclipse</a>, <a href='http://xmleye.wordpress.com/tag/epsilon/'>epsilon</a>, <a href='http://xmleye.wordpress.com/tag/eunit/'>eunit</a>, <a href='http://xmleye.wordpress.com/tag/java/'>java</a>, <a href='http://xmleye.wordpress.com/tag/modeling/'>modeling</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/xmleye.wordpress.com/125/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/xmleye.wordpress.com/125/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/xmleye.wordpress.com/125/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/xmleye.wordpress.com/125/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/xmleye.wordpress.com/125/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/xmleye.wordpress.com/125/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/xmleye.wordpress.com/125/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/xmleye.wordpress.com/125/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/xmleye.wordpress.com/125/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/xmleye.wordpress.com/125/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/xmleye.wordpress.com/125/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/xmleye.wordpress.com/125/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/xmleye.wordpress.com/125/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/xmleye.wordpress.com/125/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=xmleye.wordpress.com&amp;blog=2106432&amp;post=125&amp;subd=xmleye&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://xmleye.wordpress.com/2011/04/18/eclipse-commiter-en-epsilon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e29ea6a7a226272b6f231964edd2a8f1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bluezio</media:title>
		</media:content>
	</item>
		<item>
		<title>Smart HTTP de Git y Redmine</title>
		<link>http://xmleye.wordpress.com/2010/02/24/smart-http-de-git-y-redmine/</link>
		<comments>http://xmleye.wordpress.com/2010/02/24/smart-http-de-git-y-redmine/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 08:50:42 +0000</pubDate>
		<dc:creator>bluezio</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[redmine]]></category>
		<category><![CDATA[scm]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://xmleye.wordpress.com/?p=94</guid>
		<description><![CDATA[Actualmente estoy preparando la actualización de un servidor Redmine que gestiono. Es una actualización bastante grande: no es sólo cuestión de actualizar la instancia Redmine, sino todo el sistema y herramientas de apoyo. Lleva demasiado tiempo sin tocarse y tiene una distribución antigüilla. Una de las cosas que quería añadir en el servidor actualizado (junto [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=xmleye.wordpress.com&amp;blog=2106432&amp;post=94&amp;subd=xmleye&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:justify;">Actualmente estoy preparando la actualización de un servidor Redmine que gestiono. Es una actualización bastante grande: no es sólo cuestión de actualizar la instancia Redmine, sino todo el sistema y herramientas de apoyo. Lleva demasiado tiempo sin tocarse y tiene una distribución antigüilla.</p>
<p style="text-align:justify;">Una de las cosas que quería añadir en el servidor actualizado (junto con Redmine 0.9.2, la última versión estable a fecha de hoy) era soporte integrado con Git. Sin embargo, hay un problema, conocido por todos los usuarios de la red de la Universidad de Cádiz: el cortafuegos cierra el paso a prácticamente todo salvo correo y HTTP (y ocasionalmente HTTPS). Por eso, muchos de los protocolos que admite Git están fuera de la cuestión: el propio de Git (que de todos modos no serviría para los push), SSH (como lo proponga le da un patatús al CITI) y rsync (en desuso).</p>
<p style="text-align:justify;">Git ha permitido el uso de HTTP y HTTPS desde hace tiempo sobre WebDAV, al estilo de Subversion, pero nunca me ha gustado este método. Además de sus problemas de rendimiento, de no poder usar &#8220;hooks&#8221; (manejadores de eventos) y de las molestias que origina (hay que meter un trabajo cron que ejecute &#8220;git update-server-info&#8221; periódicamente en cada repositorio), tiene una pega <strong>gravísima</strong>: la consistencia del repositorio está a completa merced de todos y cada uno de los clientes que acceden al repositorio.</p>
<p style="text-align:justify;">Cuando di mi primer curso de Git en 2008, algunos de los asistentes me dijeron tajantemente que ni hablar de activar SSH en sus máquinas, así que probamos el acceso por HTTP. Curiosamente, el primer día que lo probamos y estuvimos mandando commits en rápida sucesión, se corrompió el repositorio varias veces. Al siguiente día, no se corrompió en absoluto, y le estábamos mandando cosas incluso más rápido que antes. Pero entonces llegó uno de los asistentes que faltaba, y dicho y hecho: a los pocos minutos estaba corrompido. El origen del problema: la versión de Curl del asistente que había venido (único usuario de MacBook en la sala, jeje) era antigua. Cuando Git trabaja sobre WebDAV, el servidor HTTP sirve de poco más que de un área de subida de ficheros. Si la versión de la biblioteca curl instalada en el cliente tiene fallos, éstos repercutirán en el repositorio (como con <a href="http://curl.haxx.se/mail/archive-2006-12/0084.html">Curl 7.16.0</a>). Ah, y por supuesto no hay nada de atomicidad: si el usuario pulsa Ctrl+C en mitad de la actualización o se le va la conexión, puede que el repositorio también se quede en un estado inconsistente.</p>
<p style="text-align:justify;">Por estas razones, descarté incluso HTTP/HTTPS, y no metí Git en la instalación actual de Neptuno. Todo se quedó en una instalación de <a href="http://scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and-secure-way">Gitosis</a> en mi servidor doméstico. Sin embargo, Git 1.6.6 incluye &#8220;<a href="http://permalink.gmane.org/gmane.comp.version-control.git/140453">smart HTTP</a>&#8220;, que arregla los problemas de rendimiento, llama a los &#8220;hooks&#8221;, evita la necesidad del trabajo cron con &#8220;git update-server-info&#8221; y proporciona las mismas garantías de atomicidad que el acceso por SSH. El &#8220;truco&#8221; es que ya el servidor HTTP no es una tonta área de almacenamiento WebDAV, sino un CGI que implementa los servicios que usualmente se invocan mediante SSH a través de HTTP. Lo bueno de todo esto es que además, al ser HTTP, podría integrarlo directamente con el esquema de autenticación de Redmine, con lo que un proyecto público admitiría fetch anónimo pero limitaría los push a los miembros con derecho a commit, y un proyecto privado exigiría los derechos apropiados para tanto fetch como push. La única &#8220;pega&#8221; es que hay que tener Git 1.6.6 como mínimo tanto en el cliente como en el servidor, pero bueno, los verdaderos usuarios de Git se lo compilan desde las fuentes, que no es tan difícil <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> .</p>
<p style="text-align:justify;">Sin embargo, esta configuración de Apache que combina las <a href="http://www.kernel.org/pub/software/scm/git/docs/git-http-backend.html">instrucciones del CGI</a> con una variación de la <a href="http://www.redmine.org/wiki/redmine/Repositories_access_control_with_apache_mod_dav_svn_and_mod_perl">propuesta en la web de Redmine</a> no sirve directamente:</p>
<pre style="text-align:justify;">SetEnv GIT_PROJECT_ROOT /var/www/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/
PerlLoadModule Apache::Authn::Redmine
&lt;Location /git&gt;
  Order deny,allow
  Allow from all

  PerlAccessHandler Apache::Authn::Redmine::access_handler
  PerlAuthenHandler Apache::Authn::Redmine::authen_handler
  AuthType Basic
  AuthName "Redmine Git Repository"
  Require valid-user

  RedmineDSN "DBI:mysql:database=databasename;host=my.db.server"
  RedmineDbUser "usuario"
  RedmineDbPassword "contraseña"
&lt;/Location&gt;
</pre>
<p style="text-align:justify;margin-top:1em;">Cuando lo probé, no podía crear clones de forma anónima de un proyecto público: tenía siempre que introducir contraseña. Además, tampoco podía hacer push en un proyecto público, por mucho que pusiera la contraseña. La explicación es algo larga, pero es interesante (y me llevó unos buenos tirones de pelos y media mañana :-/). Está dividida en dos partes:</p>
<ul>
<li style="text-align:justify;">El hecho de que fallaran los clones anónimos es que el manejador de autenticación de Redmine, pensado para WebDAV como está, distingue las acciones de &#8220;sólo lectura&#8221; (las que pueden hacerse de forma anónima en proyectos públicos y que no requieren derechos de escritura para los miembros de proyectos privados) del resto a través de sus métodos HTTP. Por omisión, estos métodos son GET, PROPFIND, OPTIONS y REPORT: por definición, no deberían producir cambios en los recursos a los que acceden. Sin embargo, al hacer &#8220;fetch&#8221; con smart HTTP de Git se hace una petición POST al servicio git-upload-pack, y hace que pida contraseña: nos quedamos sin fetch anónimo.</li>
<li style="text-align:justify;">El segundo problema se debe a que git-http-backend, el CGI necesario en el servidor para &#8220;smart HTTP&#8221;, obliga por omisión a que todos los push (peticiones al servicio git-receive-pack)  tengan algún tipo de autenticación. De lo contrario, los rechaza con un código de error 403 (Forbidden). Y aquí volvemos con el problema de distinguir las acciones por los métodos HTTP: el servicio git-receive-pack se utiliza en dos fases. La primera fase es un GET a /git/repositorio/info/refs?service=git-receive-pack: git-http-backend exige autenticación, pero el manejador de Redmine no se la pide al usuario, ya que es un método de sólo lectura. Resultado: un bonito Forbidden (403) para cualquiera que quiera hacer push. Los tirones de pelos en este lado vienen de que Git, al ver que el push por smart HTTP no ha ido, asume que el servidor es de tipo WebDAV, y hace más peticiones que hacen más difícil encontrar el problema. <strong>Actualización 14/03/2010</strong>: puede que en <a href="http://news.gmane.org/find-root.php?group=gmane.comp.version-control.git&amp;article=141833">dentro de poco</a> se deje de pedir contraseña para el GET.</li>
</ul>
<p style="text-align:justify;">¿Cómo corregir esto? Pues haciendo que el manejador de Redmine distinga las peticiones &#8220;de sólo lectura&#8221; del resto no por método HTTP, sino por dirección, tal y como viene en la <a href="http://www.kernel.org/pub/software/scm/git/docs/git-http-backend.html">página man del CGI</a> (segundo ejemplo de configuración de Apache). Podría haber desarrollado un nuevo manejador de autenticación, pero duplicaría todo el código salvo en un par de sitios. He preferido añadir una nueva directiva que activa este comportamiento, que por omisión está deshabilitado: RedmineGitSmartHttp. Para usarla, pondríamos esta línea dentro del anterior &lt;Location /git&gt;:</p>
<pre>RedmineGitSmartHttp yes</pre>
<p style="text-align:justify;margin-top:1em;">y ya todo debería ir sin problemas. Esto no afectará a los bloques &lt;Location /svn&gt; que tengamos en otra parte: se usan instancias distintas del manejador de autenticación, y esas instancias no tendrán esta opción activada, por lo que mantendrán el antiguo comportamiento. Bueno, por lo menos así me ha funcionado en mi servidor de pruebas y así lo indican sus registros <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> . He probado con proyectos públicos y no públicos en SVN y Git en el mismo Redmine y ha ido bien.</p>
<p style="text-align:justify;">Para aquellos interesados en el código, he enviado <a href="http://www.redmine.org/issues/4905">un parche</a> al proyecto Redmine, para que lo <span style="text-decoration:line-through;">fusilen</span> revisen más y mejores ojos que los míos. A ver qué tal lo reciben. Para aplicarlo, hay que descomprimir las fuentes de Redmine, poner el parche en su directorio principal, y ejecutar esto:</p>
<pre>patch -p1 &lt; 0001-Redmine.pm-add-Git-smart-HTTP-support.patch
</pre>
<p style="text-align:justify;margin-top:1em;">Un último detalle: Git necesitará nuestro usuario y contraseña para autenticarse. Una opción es clonar con http://usuario@host/git/repositorio, poniendo el usuario en la URL y metiendo la contraseña cada vez que haga falta, pero es muy incómodo: por desgracia, no guarda las contraseñas automáticamente como hace SVN. Otra opción es crear un fichero ~/.netrc (<span style="color:#ff0000;"><strong>¡sólo legible por nuestro usuario!</strong></span>) con nuestro usuario y contraseña:</p>
<pre>machine mihost
login miusuario
password mipassword
</pre>
<p style="text-align:justify;margin-top:1em;">No me termina de gustar eso de tener mi contraseña guardada en la máquina, pero bueno, ya pasaba con SVN, así que supongo que es el precio a pagar por no tirar de SSH :-/.</p>
<br /> Tagged: <a href='http://xmleye.wordpress.com/tag/git/'>git</a>, <a href='http://xmleye.wordpress.com/tag/perl/'>perl</a>, <a href='http://xmleye.wordpress.com/tag/redmine/'>redmine</a>, <a href='http://xmleye.wordpress.com/tag/scm/'>scm</a>, <a href='http://xmleye.wordpress.com/tag/svn/'>svn</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/xmleye.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/xmleye.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/xmleye.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/xmleye.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/xmleye.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/xmleye.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/xmleye.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/xmleye.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/xmleye.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/xmleye.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/xmleye.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/xmleye.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/xmleye.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/xmleye.wordpress.com/94/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=xmleye.wordpress.com&amp;blog=2106432&amp;post=94&amp;subd=xmleye&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://xmleye.wordpress.com/2010/02/24/smart-http-de-git-y-redmine/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e29ea6a7a226272b6f231964edd2a8f1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bluezio</media:title>
		</media:content>
	</item>
		<item>
		<title>Entrada de acentos y japonés en Emacs/GTK+/Qt en Ubuntu 9.10 (Karmic Koala)</title>
		<link>http://xmleye.wordpress.com/2009/12/13/entrada-de-acentos-y-japones-en-emacsgtkkde-en-ubuntu-9-10-karmic-koala/</link>
		<comments>http://xmleye.wordpress.com/2009/12/13/entrada-de-acentos-y-japones-en-emacsgtkkde-en-ubuntu-9-10-karmic-koala/#comments</comments>
		<pubDate>Sun, 13 Dec 2009 16:00:09 +0000</pubDate>
		<dc:creator>bluezio</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[ibus]]></category>
		<category><![CDATA[instalación]]></category>
		<category><![CDATA[japonés]]></category>
		<category><![CDATA[manual]]></category>
		<category><![CDATA[scim]]></category>
		<category><![CDATA[tecla componer]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[uim]]></category>

		<guid isPermaLink="false">http://xmleye.wordpress.com/?p=82</guid>
		<description><![CDATA[He estado las últimas horas peleándome para que la entrada de japonés, el español y la tecla Componer convivieran pacíficamente en mi Ubuntu 9.10, y por fin lo he dejado como me gusta, así que lo dejo por aquí antes de que se me olvide . El primer paso es instalar los paquetes necesarios. Olvidaos [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=xmleye.wordpress.com&amp;blog=2106432&amp;post=82&amp;subd=xmleye&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:justify;">He estado las últimas horas peleándome para que la entrada de japonés, el español y la tecla Componer convivieran pacíficamente en mi Ubuntu 9.10, y por fin lo he dejado como me gusta, así que lo dejo por aquí antes de que se me olvide <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> .</p>
<p style="text-align:justify;">El primer paso es instalar los paquetes necesarios. Olvidaos de “Sistema → Administración → Soporte de idiomas”: eso instala SCIM, que es más engorroso de configurar (los acentos no funcionan directamente) y tiene menos cosas que uim. IBus tampoco sirve si queréis seguir metiendo acentos de la forma normal. Ejecutad estas órdenes en su lugar:</p>
<pre style="margin-left:2em;">sudo aptitude install uim uim-anthy uim-el
sudo im-switch -s uim-toolbar
</pre>
<p style="text-align:justify;">Salimos y entramos de nuestra sesión, y ya podemos introducir texto en japonés, pulsando Ctrl+Espacio para activar el IME. Tendremos que retocar un poco en las preferencias de uim, añadiendo el método de entrada de Anthy y ajustando los accesos de teclado a nuestro gusto. Una vez hayamos hecho eso, para introducir texto en japonés, tendremos de cambiar al modo de Anthy y al método de entrad en hiragana, escribir lo que queramos y pulsar espacio. Se nos mostrarán diversos candidatos: seleccionamos el que sea con las flechas del teclado y pulsamos Intro. Hay muchas otras teclas que podríamos usar: F6 para cambiar todo a hiragana y F7 para cambiar todo a katakana. Podemos activar entrada predictiva y todo.</p>
<p style="text-align:justify;">Con eso están listas las aplicaciones GTK+ y Qt. Ahora sólo nos queda el señorito Emacs <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> . En algunos sitios se recomienda añadir <em>Emacs*useXIM: false</em> a un fichero <em>.Xresources</em> bajo nuestro directorio personal, pero no me sirvió de nada (ni siquiera ejecutando <em>xrdb -merge ~/.Xresources</em>). En otros sitios se recomienda cargar el Elisp “iso-transl”, pero eso sólo arregla los acentos, y no la tecla Componer. Al final, lo que sí me funcionó es ejecutar Emacs dándole el valor “@im=none” a la variable de entorno XMODIFIERS. Lo he ido haciendo desde siempre con un alias en mi “~/.bashrc”, pero entonces sólo podía ejecutar Emacs desde una terminal, y no desde el menú de GNOME o con Alt+F2.</p>
<p style="text-align:justify;">Si de verdad de la buena queremos hacer ese cambio y que se vea desde todas partes, podemos aprovecharnos del hecho de que <em>emacs</em> y <em>emacs-snapshot</em> son enlaces simbólicos a las alternativas seleccionadas con <em>update-alternatives</em>. Podemos ver las alternativas escogidas mediante:</p>
<pre style="margin-left:2em;">update-alternatives --get-selections | grep emacs
</pre>
<p style="text-align:justify;">Instalar una nueva alternativa no es tan complicado como parece. Crearemos un fichero “/usr/local/bin/emacs-snapshot-gtk-noim” con los contenidos necesarios, y le daremos permisos de ejecución:</p>
<pre style="margin-left:2em;">sudo tee /usr/local/bin/emacs-snapshot-gtk-noim &lt;&lt;EOF
#!/bin/sh

env XMODIFIERS=@im=none /usr/bin/emacs-snapshot-gtk \$@
EOF
sudo chmod +x /usr/local/bin/emacs-snapshot-gtk-noim
</pre>
<p style="text-align:justify;">Ahora debemos instalar este guión como una alternativa a <em>emacs-snapshot</em> y activarla, introduciendo el número correspondiente:</p>
<pre style="margin-left:2em;">sudo update-alternatives --install /usr/bin/emacs-snapshot \
  emacs-snapshot /usr/local/bin/emacs-snapshot-gtk-noxim 0
sudo update-alternatives --config emacs-snapshot
</pre>
<p style="text-align:justify;">Como <em>/usr/bin/emacs </em>usa <em>emacs-snapshot</em>, y <em>emacs-snapshot</em> usa nuestro guión, podremos utilizar ambas órdenes sin más desde cualquier terminal o con ALT+F2. El único aguafiestas es la entrada “Emacs Snapshot (GTK)” del menú de GNOME, que tiene una ruta directa a <em>emacs-snapshot-gtk</em>. Podemos editarlo bajo “Sistema → Preferencias → Menú principal” manualmente sólo para nuestro usuario, o cambiarlo para todos los usuarios con:</p>
<pre style="margin-left:2em;">sudo sed -i 's/emacs\-snapshot\-gtk/emacs\-snapshot/' \
  /usr/share/applications/emacs-snapshot.desktop
update-menus
</pre>
<p style="text-align:justify;">Con esto ya podemos usar de nuevo los acentos y la tecla Componer bajo Emacs, pero aún no hemos arreglado lo del japonés. Emacs, como buen <span style="text-decoration:line-through;">sistema operativo</span>editor que se precie, trae sus propios métodos de entrada. Integraremos uim entre ellos y lo seleccionaremos como método por omisión, añadiendo estas líneas al final del fichero <em>.emacs</em> que se encuentra en el directorio personal:</p>
<pre style="margin-left:2em;">;; save all files as UTF-8 by default
(setq default-buffer-file-coding-system 'utf-8)

;; read uim.el with LEIM initializing
(require 'uim-leim)

;; set default IM (ex. use Anthy)
(setq default-input-method "japanese-anthy-uim")</pre>
<p style="text-align:justify;">Ahora, una vez abramos Emacs, podremos introducir acentos de nuevo sin más, y con Ctrl+\ activaremos uim usando Anthy, que nos permite introducir japonés<br />
directamente. Olvidaos de la barra de herramientas que usáis en las aplicaciones GTK+/Qt: no hará nada en Emacs.</p>
<p style="text-align:justify;">Bueno, volviendo a la tecla Componer que comenté anteriormente. Con esta tecla se pueden escribir caracteres &#8220;raros&#8221; y cadenas completas (véase <a href="http://blog.cyberborean.org/2008/01/06/compose-key-magic">esta página</a>) mucho más fácilmente. Por ejemplo, § (el símbolo de sección) es pulsar y soltar la tecla Componer, pulsar y soltar “s” y pulsar y soltar “o” (Componer+s+o), y ≠ es Componer+=+/. Recomiendo seguir el enlace anterior: se pueden hacer cosas muy curiosas personalizando el fichero “~/.XCompose” debidamente, como introducir ☺ mediante Componer+:+).</p>
<p style="text-align:justify;">La tecla Componer no está disponible por omisión, así que tendremos que asignarla a alguna tecla que no usemos. Para ello tenemos un método fácil en Ubuntu: en “Sistema → Preferencias → Teclado → Distribuciones”, seleccionamos la distribución que estamos usando y pulsamos “Opciones de distribución”. Bajo “Posición de la tecla Componer” podemos marcar, por ejemplo, “Windows izquierda”. Cerramos todo y ya podemos Componer todo lo que queramos con esa tecla.</p>
<br /> Tagged: debian, ibus, instalación, japonés, manual, scim, tecla componer, ubuntu, uim <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/xmleye.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/xmleye.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/xmleye.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/xmleye.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/xmleye.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/xmleye.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/xmleye.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/xmleye.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/xmleye.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/xmleye.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/xmleye.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/xmleye.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/xmleye.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/xmleye.wordpress.com/82/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=xmleye.wordpress.com&amp;blog=2106432&amp;post=82&amp;subd=xmleye&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://xmleye.wordpress.com/2009/12/13/entrada-de-acentos-y-japones-en-emacsgtkkde-en-ubuntu-9-10-karmic-koala/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e29ea6a7a226272b6f231964edd2a8f1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bluezio</media:title>
		</media:content>
	</item>
		<item>
		<title>ACL2::Procesador: nueva versión 1.187</title>
		<link>http://xmleye.wordpress.com/2009/04/12/acl2procesador-nueva-version-1187/</link>
		<comments>http://xmleye.wordpress.com/2009/04/12/acl2procesador-nueva-version-1187/#comments</comments>
		<pubDate>Sun, 12 Apr 2009 19:42:26 +0000</pubDate>
		<dc:creator>bluezio</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://xmleye.wordpress.com/?p=76</guid>
		<description><![CDATA[Estos últimos días he estado dándole fuerte al teclado y he escrito el nuevo analizador Lisp, basado en el algoritmo del libro &#8220;Common Lisp: the Language&#8221;, tras descartar dos ramas con un analizador basado en Parse::Eyapp que producía árboles de referencias a listas Perl, y otro que producía árboles AST. Por supuesto, hay algunos cambios [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=xmleye.wordpress.com&amp;blog=2106432&amp;post=76&amp;subd=xmleye&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:justify;">Estos últimos días he estado dándole fuerte al teclado y he escrito el nuevo analizador Lisp, basado en el algoritmo del libro &#8220;Common Lisp: the Language&#8221;, tras descartar dos ramas con un analizador basado en Parse::Eyapp que producía árboles de referencias a listas Perl, y otro que producía árboles AST. Por supuesto, hay algunos cambios y simplificaciones, dado que no intento tener un entorno de ejecución de Lisp, sino simplemente de análisis del código. Por ejemplo, se preserva el espacio en blanco, y los comentarios de líneas (&#8220;; hola&#8221;) y de bloque (#| hola |#), aunque se pueden limpiar fácilmente. Es curioso saber que los comentarios de bloque en Lisp, a diferencia de los de C++, sí que se anidan.</p>
<p style="text-align:justify;">De hecho, una vez implementado (un algoritmo recursivo descendente LL(1)), me sorprende lo flexible que es Lisp en algunos aspectos. Ya conocía la existencia de las macros de Lisp y en su momento las usé para crearme un pequeño marco de trabajo para definir reglas de un chatbot, en CLIPS, pero no sabía que había algo parecido a nivel léxico. También se conocen como macros, pero se tratan de caracteres especiales que invocan determinadas funciones, generando las estructuras apropiadas. Si uno ve el algoritmo base (sin macros), es curioso ver que sólo podríamos leer átomos (símbolos y números), aunque aún así, se pueden leer números enteros, flotantes, y racionales (fracciones exactas, como 22/9, sin pasar a coma flotante). Los famosos &#8220;(&#8221; y &#8220;)&#8221; que producen listas son, de hecho, macros, y también &#8220;;&#8221; (produce comentarios), &#8220;`&#8221; y &#8220;,&#8221; y demás. De todas formas, como el repertorio de carácteres disponibles para macros parece estar ya prefijado por el estándar Common Lisp, se suelen usar las <em>dispatching macros</em> para añadir extensiones, que consisten en secuencias de caracteres de la forma #nX, donde n es un número entero y X es un carácter que identifica la función a invocar..</p>
<p style="text-align:justify;">Por ejemplo, está #|, que sirve para crear los comentarios en bloque, #=, que sirve para construir estructuras de datos en Lisp con múltiples referencias al mismo elemento (incluso referencias cíclicas), #nA (para obtener matrices multidimensionales), #( (para vectores), etc. Hay incluso macros para definir números en bases arbitrarias (incluyendo fracciones: ¿alguien quiere escribir una fracción en base 7?).</p>
<p style="text-align:justify;">Evidentemente, no lo he implementado todo en ACL2::Lisp::Parser. El algoritmo principal está, incluso con los detalles del tratamiento de mayúsculas (el símbolo hola se entiende como HOLA, pero hol\a es HOLa, por ejemplo), pero la lectura de números en bases distintas a la decimal y la mayoría de las macros de # (excepto #|, que es muy común) no está hecha. Dicho módulo trae read_lisp_program (lee programas), read_lisp_token (lee elementos individuales) y try_read_lisp_token (intenta leer e informa de la localización en que se produce el fallo de análisis, si hay uno). Podía haberlo escrito con Parse::RecDescent, pero como vi que al final no me produciría una gran ventaja frente a escribirlo manualmente con el libro de Lisp por delante, lo descarté, para evitar añadirme una dependencia más.</p>
<p style="text-align:justify;">En base a este código, he reescrito todas las partes que dependían de ACL2::AnalisisLisp en alguna medida, incluyendo el código que limpiaba la salida de ACL2, deshaciendo el ajuste de líneas en los párrafos de texto, y no tocando los párrafos que constituían expresiones Lisp. Antes había una expresión regular un tanto críptica que funcionaba en la mayoría de los casos, pero ahora el código de limpieza sabe cuándo algo puede ser código Lisp o no. El resto del código ha sufrido cambios parecidos. El mayor cambio externo es que ahora se incluyen los comentarios originales del código Lisp en la salida XML y se reproduce exactamente el código original, en vez de una versión &#8220;limpiada&#8221;. Como de costumbre, el cambio al analizador Lisp y la jerarquía de nodos del árbol de sintaxis abstracto ha sido un cambio más interno que externo, pero de todos modos será útil para seguir adelante y añadir nuevas funcionalidades.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/xmleye.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/xmleye.wordpress.com/76/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/xmleye.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/xmleye.wordpress.com/76/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/xmleye.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/xmleye.wordpress.com/76/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/xmleye.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/xmleye.wordpress.com/76/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/xmleye.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/xmleye.wordpress.com/76/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/xmleye.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/xmleye.wordpress.com/76/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/xmleye.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/xmleye.wordpress.com/76/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=xmleye.wordpress.com&amp;blog=2106432&amp;post=76&amp;subd=xmleye&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://xmleye.wordpress.com/2009/04/12/acl2procesador-nueva-version-1187/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e29ea6a7a226272b6f231964edd2a8f1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bluezio</media:title>
		</media:content>
	</item>
		<item>
		<title>Versión 1.186 de ACL2::Procesador</title>
		<link>http://xmleye.wordpress.com/2009/04/07/version-1186-de-acl2procesador/</link>
		<comments>http://xmleye.wordpress.com/2009/04/07/version-1186-de-acl2procesador/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 15:53:24 +0000</pubDate>
		<dc:creator>bluezio</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://xmleye.wordpress.com/?p=69</guid>
		<description><![CDATA[Acabo de marcar en SVN y subir a la forja de Rediris la versión 1.186 de ACL2::Procesador. Aceptaron el artículo que enviamos mis antiguos directores de PFC y yo a ACL2 2009, así que es hora de darle un lavado de cara en algunos aspectos, aprovechando que estoy en vacaciones de Semana Santa . Las [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=xmleye.wordpress.com&amp;blog=2106432&amp;post=69&amp;subd=xmleye&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:justify;">Acabo de marcar en SVN y subir a la forja de Rediris la versión 1.186 de ACL2::Procesador. Aceptaron el artículo que enviamos mis antiguos directores de PFC y yo a ACL2 2009, así que es hora de darle un lavado de cara en algunos aspectos, aprovechando que estoy en vacaciones de Semana Santa <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> .</p>
<p>Las principales novedades que trae esta versión son básicamente:</p>
<ul>
<li>
<div style="text-align:justify;">Organización de órdenes en categorías: muchas órdenes repetían el mismo código una y otra vez. Este era sobre todo el caso de las órdenes que no producen prácticamente ninguna salida específica, como DEFPKG, DEFABBREV o DEFMACRO. Ahora lo que se hace es agrupar estas órdenes en categorías, para que compartan el mismo código. Con eso podré añadir más rápidamente órdenes de ACL2 que no sean tan usadas. Las órdenes que necesitan código específico se siguen usando directamente (como DEFUN, DEFTHM o ENCAPSULATE). De hecho, el orden actual para una orden X cualquiera es:</div>
</li>
</ul>
<ol>
<li>
<div style="text-align:justify;">Se intenta cargar el módulo ACL2::Orden::X, y analizar la orden mediante una instancia la clase contenida en dicho módulo.</div>
</li>
<li>
<div style="text-align:justify;">Si no funciona, se prueban en un orden prefijado todas las categorías, y se usa la primera que funcione. Actualmente, hay dos: DefinitionCategory (para las órdenes DEFXXX que no necesitan código especial) y FallbackCategory. La segunda categoría lo acepta todo, e imprime la salida de ACL2 como una lista de párrafos y S-expresiones, junto con el resumen debidamente procesado, si lo tenía. Su utilidad es para no fallar estrepitosamente ante órdenes de ACL2 aún no implementadas o código Lisp arbitrario (ACL2 es un entorno Lisp, al fin y al cabo). De todas formas, ACL2::Procesador sigue dando fallos fatales cuando no entiende algo en la salida de una orden para la que tiene código específico (de lo contrario, las pruebas de regresión serían inútiles).</div>
</li>
</ol>
<ul>
<li>
<div style="text-align:justify;">Revisión del algoritmo de análisis de un fichero .lisp: ahora el grafo de dependencias es más sencillo, descartando los antiguos nodos que incluían a los ficheros .acl2 que servían para establecer el estado inicial de ACL2 antes de certificar un libro. Esto se debe a que ahora, cuando se procesa un fichero X.lisp y se encuentra un fichero X.acl2 o cert.acl2 en el mismo directorio, se usan los contenidos del primero de esos ficheros en vez del propio fichero X.lisp. Es ACL2 el que lee X.lisp y lo interpreta. De todas formas, ACL2 de hecho vuelve a volcar las fórmulas de X.lisp en la salida del evento CERTIFY-BOOK. Este nuevo esquema es más fiable de entrada, y además ahora le añadimos un prólogo y un epílogo a cada fichero .lisp procesado para asegurarnos de que funcione en más implementaciones de Lisp.</div>
</li>
</ul>
<p style="text-align:justify;">Esta versión ha sido probada con ACL2 2.9.4 bajo CLisp 2.44.1 (paquete Ubuntu 1:2.44.1-4ubuntu2), ACL2 3.0.1 bajo CMUCL (paquete Debian cmucl, versión 19a-release-20040728-9), ACL2 3.1 bajo CLisp, ACL2 3.2.1 bajo GCL (paquete Debian gcl 2.6.7-45), ACL2 3.3 bajo GCL, y ACL2 3.4 bajo GCL. Con eso tengo cubiertas varias implementaciones de Lisp y varias versiones de ACL2.</p>
<p style="text-align:justify;">Para la siguiente versión, lo que quiero hacer es cambiar el &#8220;analizador&#8221; Lisp que tengo (me da vergüenza llamarlo así <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> ) por uno que implemente el algoritmo de la función read, tal y como viene en el libro  de <a href="http://www.cs.cmu.edu/Groups/AI/html/cltl/cltl2.html">&#8220;Common Lisp, the Language&#8221;</a>, particularmente en las secciones 22.1 y 22.2. Tenía hecho una gramática LALR(1) tentativa en Parse::Eyapp (muy buen módulo para los fans de bison/flex o ANTLR) en una de mis ramas, pero va a ser que no: la sintaxis es demasiado compleja como para hacerla fácilmente :-/. Por ejemplo, ahora mismo el código no tiene forma de saber si algún trozo de código Lisp es una lista, un átomo, una cadena, y no entiende de comentarios de bloque. Puestos a parchear el código que hay, prefiero hacer algo en condiciones, que además sea capaz de reconocer correctamente programas Lisp no válidos tal y como lo hace ACL2 (o casi). Seguramente revise un poco el algoritmo, ya que a diferencia del algoritmo original, me interesa poder recuperar el código fuente original al 100%.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/xmleye.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/xmleye.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/xmleye.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/xmleye.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/xmleye.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/xmleye.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/xmleye.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/xmleye.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/xmleye.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/xmleye.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/xmleye.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/xmleye.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/xmleye.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/xmleye.wordpress.com/69/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=xmleye.wordpress.com&amp;blog=2106432&amp;post=69&amp;subd=xmleye&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://xmleye.wordpress.com/2009/04/07/version-1186-de-acl2procesador/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e29ea6a7a226272b6f231964edd2a8f1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bluezio</media:title>
		</media:content>
	</item>
		<item>
		<title>KDE 4.2: nada, aún no</title>
		<link>http://xmleye.wordpress.com/2009/02/07/kde-42-nada-aun-no/</link>
		<comments>http://xmleye.wordpress.com/2009/02/07/kde-42-nada-aun-no/#comments</comments>
		<pubDate>Sat, 07 Feb 2009 21:21:24 +0000</pubDate>
		<dc:creator>bluezio</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[gnome]]></category>
		<category><![CDATA[kde]]></category>

		<guid isPermaLink="false">http://xmleye.wordpress.com/?p=65</guid>
		<description><![CDATA[KDE 4.2 es supuestamente la primera versión de la serie KDE 4 que sí está dirigida al usuario final, tras una KDE 4.0 sólo para aventureros y una KDE 4.1 para &#8220;early adopters&#8221;. O eso dicen: yo no estoy tan seguro. Está claro que hay muchísimas ideas buenas detrás, y va a ser un gustazo [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=xmleye.wordpress.com&amp;blog=2106432&amp;post=65&amp;subd=xmleye&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:justify;">KDE 4.2 es supuestamente la primera versión de la serie KDE 4 que sí está dirigida al usuario final, tras una KDE 4.0 sólo para aventureros y una KDE 4.1 para &#8220;early adopters&#8221;. O eso dicen: yo no estoy tan seguro. Está claro que hay muchísimas ideas buenas detrás, y va a ser un gustazo cuando todo haya quedado fino, pero ahora mismo hay demasiados bugs aquí y allá. Por ejemplo, no conseguí de ninguna de las formas configurar mi pantalla dual, que fue tremendamente fácil en GNOME. Ni tirando de xrandr, ni con KRandRTray, ni poniendo manualmente la entrada Virtual en el xorg.conf, nada de nada.</p>
<p style="text-align:justify;">También me dieron algunos quebraderos de cabeza los widgets: el del tiempo hizo que KDE se cerrara estrepitosamente, y el widget de monitorización del sistema no dejaba de salir por mucho que lo retirara.</p>
<p style="text-align:justify;">Por último, Dragon Player no estaba del todo integrado con KDE, parece: en primer lugar, era incapaz de abrir vídeos que estuvieran bajo alguna carpeta de red. No me sorprende, pero si al final voy a trabajar como en GNOME, pues me quedo con GNOME, la verdad. Tuve otros problemas con las claves SSH y demás, pero éstos sí los pude resolver buscando un poco. Aun así, la verdad es que KDE 4 me está gustando mucho en términos de funcionalidad. Para KDE 4.4 o 4.5, creo que me cambiaré definitivamente <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> .</p>
<br /> Tagged: gnome, kde <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/xmleye.wordpress.com/65/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/xmleye.wordpress.com/65/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/xmleye.wordpress.com/65/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/xmleye.wordpress.com/65/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/xmleye.wordpress.com/65/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/xmleye.wordpress.com/65/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/xmleye.wordpress.com/65/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/xmleye.wordpress.com/65/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/xmleye.wordpress.com/65/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/xmleye.wordpress.com/65/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/xmleye.wordpress.com/65/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/xmleye.wordpress.com/65/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/xmleye.wordpress.com/65/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/xmleye.wordpress.com/65/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=xmleye.wordpress.com&amp;blog=2106432&amp;post=65&amp;subd=xmleye&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://xmleye.wordpress.com/2009/02/07/kde-42-nada-aun-no/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e29ea6a7a226272b6f231964edd2a8f1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bluezio</media:title>
		</media:content>
	</item>
		<item>
		<title>&#8220;git add &#8211;interactive&#8221; en msysGit (Git bajo MinGW en Windows)</title>
		<link>http://xmleye.wordpress.com/2009/01/24/git-ai-msysgit/</link>
		<comments>http://xmleye.wordpress.com/2009/01/24/git-ai-msysgit/#comments</comments>
		<pubDate>Sat, 24 Jan 2009 18:56:45 +0000</pubDate>
		<dc:creator>bluezio</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[mingw]]></category>
		<category><![CDATA[msys]]></category>

		<guid isPermaLink="false">http://xmleye.wordpress.com/?p=63</guid>
		<description><![CDATA[Recientemente tuve que trabajar con Git en Windows. Parece que la versión &#8220;oficial&#8221; por así decirlo es la compilada por Cygwin, pero no vi ningún binario por ahí para descargar. Instalarme Cygwin en la máquina virtual era demasiado, así que opté por msysGit, una versión de Git ejecutándose bajo MSYS. MSYS es una implementación de [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=xmleye.wordpress.com&amp;blog=2106432&amp;post=63&amp;subd=xmleye&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:justify;">Recientemente tuve que trabajar con Git en Windows. Parece que la versión &#8220;oficial&#8221; por así decirlo es la compilada por Cygwin, pero no vi ningún binario por ahí para descargar. Instalarme Cygwin en la máquina virtual era demasiado, así que opté por msysGit, una versión de Git ejecutándose bajo MSYS.</p>
<p><a href="http://www.mingw.org/wiki/MSYS">MSYS</a> es una implementación de un entorno POSIX minimalista sobre <a href="http://www.mingw.org/wiki/MinGW">MinGW</a>, un marco base que permite desarrollar programas para Windows sobre herramientas GNU. Es mucho más ligero que Cygwin, y los ejecutables generados no requieren del DLL usual de éste, que ocupa bastante.</p>
<p style="text-align:justify;">La ventaja principal de <a href="http://code.google.com/p/msysgit/">msysGit</a> es que en teoría consiste simplemente en seguir los pasos de un instalador. Sin embargo, no resulta tan fácil: no todo funciona directamente tras instalarlo. En particular, la terminal estilo <em>bash </em>que proporciona da bastantes problemas: acabé descartándola por la línea de órdenes usual de Windows XP (cmd). Sí, es horrible, pero por lo menos funciona.</p>
<p style="text-align:justify;">Lo que realmente era vital para mí era &#8220;<em>git add &#8211;interactive&#8221;</em> (suelo ponerlo bajo el alias &#8220;<em>git ai</em>&#8220;): lo uso todo el tiempo, y me resulta realmente útil. <em>git-gui</em> será gráfico, pero es incomodísimo en comparación con él. Además, permite enviar al índice sólo parte de los cambios, dividir los cambios en partes más pequeñas, o incluso editar el cambio antes de pasarlo al índice. También uso mucho &#8220;<em>git rebase &#8211;interactive</em>&#8221; para limpiar mis commits, retirando los enfoques que he ido descartando y disimulando los errores que he cometido <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> .</p>
<p style="text-align:justify;">Para que ambos funcionaran debidamente, tuve que instalar la <a href="http://gnuwin32.sourceforge.net/packages/less.htm">última versión de less</a> del proyecto GnuWin32, y la última versión oficial de <a href="http://www.vim.org/download.php#pc">Vim</a> para Windows. Después cambié los nombres de <em>less.exe</em> y <em>vim.exe</em> del subdirectorio <em>bin</em> dentro del de Git a otros que no interfirieran, y puse los directorios en que estaban los binarios del nuevo <em>less</em> y Vim en la variable de entorno PATH.</p>
<p style="text-align:justify;">Con esto quedó todo bien. El único pero es que sólo funciona si uso <em>cmd</em>, pero espero que los de msysGit afinen un poco más el asunto en futuras versiones.</p>
<br /> Tagged: git, mingw, msys <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/xmleye.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/xmleye.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/xmleye.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/xmleye.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/xmleye.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/xmleye.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/xmleye.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/xmleye.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/xmleye.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/xmleye.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/xmleye.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/xmleye.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/xmleye.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/xmleye.wordpress.com/63/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=xmleye.wordpress.com&amp;blog=2106432&amp;post=63&amp;subd=xmleye&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://xmleye.wordpress.com/2009/01/24/git-ai-msysgit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e29ea6a7a226272b6f231964edd2a8f1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bluezio</media:title>
		</media:content>
	</item>
		<item>
		<title>Generador de citas en formato BibTeX de estándares del W3C</title>
		<link>http://xmleye.wordpress.com/2009/01/10/generador-de-citas-en-formato-bibtex-de-estandares-del-w3c/</link>
		<comments>http://xmleye.wordpress.com/2009/01/10/generador-de-citas-en-formato-bibtex-de-estandares-del-w3c/#comments</comments>
		<pubDate>Sat, 10 Jan 2009 18:19:10 +0000</pubDate>
		<dc:creator>bluezio</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://xmleye.wordpress.com/?p=57</guid>
		<description><![CDATA[Ahora mismo estoy escribiendo un artículo sobre XMLEye para intentar enviarlo al ACL2 Workshop 2009, y tuve que escribir a mano varias veces las entradas BibTeX para más de una tecnología del W3C que estaba utilizando. Las usuales, vamos: XML, XHTML, XPath, XSLT, etc. Los de la Collection of Computer Science Bibliographies (estilo DBLP) tienen [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=xmleye.wordpress.com&amp;blog=2106432&amp;post=57&amp;subd=xmleye&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Ahora mismo estoy escribiendo un artículo sobre XMLEye para intentar enviarlo al <a href="http://www.cs.utexas.edu/users/sandip/acl2-09/">ACL2 Workshop 2009</a>, y tuve que escribir a mano varias veces las entradas BibTeX para más de una tecnología del W3C que estaba utilizando. Las usuales, vamos: XML, XHTML, XPath, XSLT, etc. Los de la Collection of Computer Science Bibliographies (estilo DBLP) <a title="Referencias BibTeX a documentos W3C en la DBLP" href="http://liinwww.ira.uka.de/bibliography/Techreports/w3c.html">tienen un listado</a>, pero no tienen un estilo uniforme.</p>
<p>Como me daba mucha pereza tener que hacerlo a mano, busqué un poco y encontré <a title="Generador por Web de citas del W3C para BibTeX" href="http://w2.syronex.com/jmr/w3c-biblio">una web</a> que aparentemente hacía justo lo que quería: transformaba este <a title="Feed RDF especificaciones W3C" href="http://www.w3.org/2002/01/tr-automation/tr.rdf">feed RDF oficial</a> con las últimas y primeras versiones oficiales. Sin embargo, parece que sólo lo hacía cada cierto tiempo, y por ello algunas entradas se encontraban desactualizadas. Vaya hombre. Y además el código que utilizaba no estaba en ningún sitio, así que no podía repetir la transformación por mi cuenta.</p>
<p>Pero bueno, nada que wget y una hoja XSLT sencillita no arreglen. Me he hecho un sencillo guión Bash que descarga con wget la última versión del feed RDF (sólo si la copia local se encuentra desactualizada) y genera un .bib mediante una transformación con xsltproc. Nada muy complicado, pero bueno, me resuelve el problema perfectamente. El código fuente está en <a href="http://gitorious.org/projects/w3c-bibtex">su repositorio Git</a> bajo mi cuenta de Gitorious.</p>
<p>Ah, y por cierto: si os vale con una cita en formato XHTML, los del <a href="http://www.w3.org/2002/01/tr-automation/">proyecto de automatización de publicaciones</a> del W3C ya lo tienen <a href="http://www.w3.org/2002/01/tr-automation/tr-biblio-ui">hecho en condiciones</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/xmleye.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/xmleye.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/xmleye.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/xmleye.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/xmleye.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/xmleye.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/xmleye.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/xmleye.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/xmleye.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/xmleye.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/xmleye.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/xmleye.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/xmleye.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/xmleye.wordpress.com/57/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=xmleye.wordpress.com&amp;blog=2106432&amp;post=57&amp;subd=xmleye&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://xmleye.wordpress.com/2009/01/10/generador-de-citas-en-formato-bibtex-de-estandares-del-w3c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e29ea6a7a226272b6f231964edd2a8f1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bluezio</media:title>
		</media:content>
	</item>
		<item>
		<title>Linksys WRT54GL, SMC 7904WBRA2 y Tomato</title>
		<link>http://xmleye.wordpress.com/2008/11/26/linksys-wrt54gl-smc-7904wbra2-y-tomato/</link>
		<comments>http://xmleye.wordpress.com/2008/11/26/linksys-wrt54gl-smc-7904wbra2-y-tomato/#comments</comments>
		<pubDate>Wed, 26 Nov 2008 18:03:38 +0000</pubDate>
		<dc:creator>bluezio</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://xmleye.wordpress.com/?p=55</guid>
		<description><![CDATA[Ayer mismo tuve que cambiar de equipamiento de red: desde que empecé a usar mldonkey y dejarlo 24/7, mi pobre USR9105 se bloqueaba cada dos por tres. Sospechaba del número de conexiones, pero ni poniendo el límite a 100 me servía. Probé a cambiar los parámetros de tiempos de espera del módulo de NAT del [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=xmleye.wordpress.com&amp;blog=2106432&amp;post=55&amp;subd=xmleye&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:justify;">Ayer mismo tuve que cambiar de equipamiento de red: desde que empecé a usar mldonkey y dejarlo 24/7, mi pobre USR9105 se bloqueaba cada dos por tres. Sospechaba del número de conexiones, pero ni poniendo el límite a 100 me servía. Probé a cambiar los parámetros de tiempos de espera del módulo de NAT del kernel (curiosamente, lleva una versión limitada de Busybox y usa un kernel Linux), pero tampoco tuve mucha suerte. Ni que decir que me traía bastante de los nervios.</p>
<p style="text-align:justify;">Así que decidí cambiar de router, y puestos a ello, preferí cambiar a uno con cuyo firmware pudiera trastear: el Cisco-Linksys WRT54GL. Sé que hay otros routers ya que permiten utilizar firmware de terceras partes, pero éste tenía muy buenas críticas en general, y al fin y al cabo tiene a Cisco por detrás. Nadie fue despedido por comprar de IBM, dicen <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> .</p>
<p style="text-align:justify;">El único &#8220;pero&#8221; es que el WRT54GL es un router neutro, con lo que necesitaría un módem ADSL con salida Ethernet, cosa de que no dispongo, y que parece más difícil de encontrar de lo que pensaba (por lo menos uno de calidad). Como no quería depender del USR9105, por si acaso, aproveché un SMC Barricade 7904WBRA2 que me enviaron los de Ya.com hace unas cuantas semanas.</p>
<p style="text-align:justify;">La idea general es que el SMC hace sólo de módem y primer firewall (tiene desactivado todos los demás servicios, incluido la parte inalámbrica), utilizando una configuración de &#8220;falso monopuesto&#8221; por así decirlo: la IP fija del router Linksys es el único host en la DMZ, con lo que recibe todas las conexiones entrantes. Con un latiguillo del WAN del Linksys al switch del SMC y un poco de configuración todo quedó muy bien. El Linksys actúa como segundo firewall y es el que atiende a todas las máquinas de mi LAN.</p>
<p style="text-align:justify;">Por supuesto, el firmware que traía el Linksys no estaba mal, pero no era del todo de mi agrado: de hecho, me gustaba más el de mi USR9105. Así que busqué un poco y encontré varias opciones: <a href="http://www.dd-wrt.com/dd-wrtv3/index.php">DD-WRT</a>, <a href="http://www.polarcloud.com/tomato">Tomato</a>, y un largo etcétera. De todas ellas miré un poco por encima y Tomato fue la que más me gustó de lejos:</p>
<ol style="text-align:justify;">
<li>La documentación es muy buena: DD-WRT es el único que podría superarla.</li>
<li>La interfaz de usuario es fantástica, y supera con creces todo lo que he conocido.</li>
<li>Es más ligero que DD-WRT, pero tampoco anda corto en absoluto: además de todo lo que suele traer un router, incorpora muchas funcionalidades de monitorización y el QoS más fácil de configurar que he visto hasta ahora.</li>
<li>Está basado en el código original de Linksys (se hallaba bajo la GPL), con lo que sé que partieron de algo sólido.</li>
<li>Tiene un tomatito muy simpático <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> .</li>
</ol>
<p style="text-align:justify;">Por ejemplo, nada más instalarlo (aplauso para los de Linksys que sólo tuve que subir un fichero por la interfaz web y punto), pude darme cuenta del origen del problema en última instancia: mldonkey deja muchas conexiones olvidadas a medias, que no contabiliza para el límite de conexiones. Con la información de monitorización de Tomato y algo de prueba y error tengo controlado ese problema, y lo mejor es que de todas formas, si alguna vez se sale de madre, puedo cortar todas las conexiones inactivas con un simple clic.</p>
<p style="text-align:justify;">Otro detalle más: la recepción de Wi-Fi en mi portátil era del 60-65% con el USR, y del 74% inicialmente con el Linksys. Tomato me dejó aumentar la potencia de la señal y ahora tengo un 80%, que no es moco de pavo <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> . Además, permite configurar de forma muy sencilla dnsmasq, que actúa como caché DNS y servidor DHCP: en un momento pude darle a mi servidor Debian una IP estática asignada por MAC y un nombre de host de acuerdo a su DNS dinámica. Ya tenía algo así en mi servidor Debian, pero esto queda mucho mejor (muerte a las IP estáticas <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> ).</p>
<p style="text-align:justify;">En resumen: si el WRT54GL ya es buen hardware de por sí, Tomato lo hace aún mejor, y todo por el módico precio de 70€ (gastos de envío incluidos). Aún tengo que comprobar si aguanta una semana con esta carga de trabajo sin colgarse, pero por lo pronto me está causando muy buenas impresiones. Y sí, mi configuración de red es un poco rara: también tengo un puente de red (nivel 2 OSI) entre el servidor Debian y mi portátil, pero eso ya lo dejo para otro día <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> .</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/xmleye.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/xmleye.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/xmleye.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/xmleye.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/xmleye.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/xmleye.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/xmleye.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/xmleye.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/xmleye.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/xmleye.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/xmleye.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/xmleye.wordpress.com/55/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/xmleye.wordpress.com/55/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/xmleye.wordpress.com/55/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=xmleye.wordpress.com&amp;blog=2106432&amp;post=55&amp;subd=xmleye&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://xmleye.wordpress.com/2008/11/26/linksys-wrt54gl-smc-7904wbra2-y-tomato/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e29ea6a7a226272b6f231964edd2a8f1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">bluezio</media:title>
		</media:content>
	</item>
	</channel>
</rss>
