<?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>morenosan &#187; Software</title>
	<atom:link href="http://morenosan.com/category/software/feed/" rel="self" type="application/rss+xml" />
	<link>http://morenosan.com</link>
	<description>Un blog a velocidad absurda</description>
	<lastBuildDate>Sat, 23 Jan 2010 19:42:47 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.3</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Instalación de Satchmo en varios cómodos pasos</title>
		<link>http://morenosan.com/2010/01/23/instalacion-satchmo-comodos-pasos/</link>
		<comments>http://morenosan.com/2010/01/23/instalacion-satchmo-comodos-pasos/#comments</comments>
		<pubDate>Sat, 23 Jan 2010 19:42:47 +0000</pubDate>
		<dc:creator>morenosan</dc:creator>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://morenosan.com/?p=56</guid>
		<description><![CDATA[
Durante la última semana he estado trabajando en una tienda virtual basada en Satchmo. Satchmo es un framework para la creación de tiendas virtuales web, y que está basado a su vez en Django.
Hasta hace muy poco tiempo, preparar un entorno de desarrollo y un proyecto mínimo basado en Satchmo era una tarea titánica, que [...]]]></description>
			<content:encoded><![CDATA[<p><img class="right off" title="Tokyo International Forum" src="http://farm4.static.flickr.com/3056/2994703338_cf8a4a431c_m.jpg" alt="" width="160" height="240" /></p>
<p>Durante la última semana he estado trabajando en una tienda virtual basada en <a title="Satchmo" href="http://www.satchmoproject.com/" target="_blank">Satchmo</a>. Satchmo es un framework para la creación de tiendas virtuales web, y que está basado a su vez en <a title="Django" href="http://www.djangoproject.com/" target="_blank">Django</a>.</p>
<p>Hasta hace muy poco tiempo, preparar un entorno de desarrollo y un proyecto mínimo basado en Satchmo era una tarea titánica, que llevaba horas llenas de frustración y sufrimiento, durante las cuales la vida llegaba a no tener sentido y&#8230;en fin, ya me entendeis.</p>
<p>La situación ha cambiado radicalmente con la versión 0.9, liberada el pasado Octubre. Con esta nueva versión, la instalación de Satchmo se ha simplificado enormemente y la documentación ha mejorado notablemente. Todo esto ha hecho que, al menos en Ubuntu, la instalación se haya convertido en un simple proceso de 15 minutos, desde el comienzo hasta que puedes ver funcionando el proyecto mínimo para comenzar el desarrollo.</p>
<p>A continuación, y siguiendo con la vocación de servicio publico de este blog, detallaré los pasos para instalar un entorno de desarrollo con Satchmo. Las siguientes instrucciones se basan en Ubuntu, y han sido probadas en una máquina virtual con Ubuntu 8.04.3 LTS.</p>
<p>Coged papel y lápiz. Os espero.</p>
<p>El primer paso es instalar los paquetes necesarios para la instalación de Satchmo y todas sus dependencias.</p>
<p><code>sudo apt-get install python-setuptools python-dev build-essential python-imaging mercurial</code></p>
<p>A continuación instalaremos <a title="pip" href="http://pip.openplans.org/" target="_blank">pip</a>, <a title="virtualenv" href="http://virtualenv.openplans.org/" target="_blank">virtualenv</a>, <a title="virtualenvwrapper" href="http://www.doughellmann.com/projects/virtualenvwrapper/" target="_blank">virtualenvwrapper</a> y crearemos un virtualenv para nuestro entorno de desarrollo.</p>
<p><code>sudo easy_install pip<br />
sudo pip install virtualenv<br />
sudo pip install virtualenvwrapper<br />
mkdir ~/.virtualenvs<br />
source /usr/bin/virtualenvwrapper_bashrc<br />
mkvirtualenv satchmo<br />
</code></p>
<p>Añade la linea <code>source /usr/bin/virtualenvwrapper_bashrc</code> a tu .bashrc para tener virtualenvwrapper la próxima vez que te logees.</p>
<p>Si no conoces pip, virtualenv o virtualenvwrapper, te invito a que antes de seguir descubras que son, como funcionan, que ventajas ofrecen y por que son lo mejor desde el arroz con leche, en los siguientes articulos. Otros ya lo han explicado mejor de lo que yo lo haría.</p>
<ul>
<li><a title="Entorns de treball virtuals per Python" href="http://trespams.com/2009/02/12/entorns-de-treball-virtuals-python/" target="_blank">Entorns de treball virtuals per Python</a></li>
<li><a title="Working with virtualenv" href="http://arthurkoziel.com/2008/10/22/working-virtualenv/" target="_blank">Working with virtualenv</a></li>
<li><a title="Why I like pip" href="http://www.b-list.org/weblog/2008/dec/15/pip/" target="_blank">Why I like pip</a></li>
</ul>
<p>Esperaré aquí hasta que acabes. En serio.</p>
<p>Por último, solo queda instalar las dependencias y finalmente Satchmo.</p>
<p><code>pip install -r http://bitbucket.org/chris1610/satchmo/raw/tip/scripts/requirements.txt<br />
pip install -e hg+http://bitbucket.org/chris1610/satchmo/#egg=satchmo</code></p>
<p>Una vez terminado, solo resta crear un proyecto mínimo sobre el que comenzar a trabajar. Satchmo ya viene con un script que hace precisamente eso.</p>
<p><code>clonesatchmo.py --skel=/home/juan/.virtualenvs/satchmo/src/satchmo/satchmo/projects/skeleton</code></p>
<p>Por defecto, creará un proyecto llamado store en el directorio en el que te encuentres.</p>
<p>Ahora solo queda arrancar el servidor de desarrollo de Django para probar la tienda.</p>
<p><code>cd store<br />
python manage.py runserver</code></p>
<p>Seguro que has tardado menos de 15 minutos.</p>
<h4 style="font-size: 0.8em;">Imagen © <a href="http://www.flickr.com/photos/jamesjustin/">jamesjustin</a> Some Rights Reserved.</h4>
]]></content:encoded>
			<wfw:commentRss>http://morenosan.com/2010/01/23/instalacion-satchmo-comodos-pasos/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Editar, Guardar y Recargar en Java</title>
		<link>http://morenosan.com/2010/01/16/editar-guardar-recargar-en-java/</link>
		<comments>http://morenosan.com/2010/01/16/editar-guardar-recargar-en-java/#comments</comments>
		<pubDate>Sat, 16 Jan 2010 19:15:58 +0000</pubDate>
		<dc:creator>morenosan</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://morenosan.com/?p=50</guid>
		<description><![CDATA[
Después de bastante tiempo programando únicamente en Python y Django, hace año y medio cambié de trabajo. Desde entonces he vuelto a programar en Java, desarrollando aplicaciones y servicios web, así como coordinando a un equipo de programadores web.
Pronto me di cuenta de que el equipo seguía el siguiente ciclo a la hora de desarrollar:

Hacer [...]]]></description>
			<content:encoded><![CDATA[<p><img class="right off" title="Tokyo" src="http://farm3.static.flickr.com/2153/2103170121_3790408756_m.jpg" alt="" width="240" height="160" /><br />
Después de bastante tiempo programando únicamente en Python y Django, hace año y medio cambié de trabajo. Desde entonces he vuelto a programar en Java, desarrollando aplicaciones y servicios web, así como coordinando a un equipo de programadores web.</p>
<p>Pronto me di cuenta de que el equipo seguía el siguiente ciclo a la hora de desarrollar:</p>
<ul>
<li>Hacer cambio.</li>
<li>Compilar un WAR.</li>
<li>Copiar el WAR al servidor Tomcat local.</li>
<li>Reiniciar el servidor.</li>
<li>Iniciar una sesión de debug desde Eclipse.</li>
<li>Probar.</li>
</ul>
<p>Esto hacia que cada prueba supusiera, en el mejor de los casos, esperar 5 minutos desde que se hacia un cambio hasta que este se podía probar. Lo cual nos dejaba con una productividad, digamos que mejorable.</p>
<p>Desde entonces, hemos mejorado el entorno de desarrollo, de forma que ahora podemos modificar el código fuente Java en caliente e inmediatamente ver y depurar los cambios, sin necesidad de recompilar y recargar toda la aplicación, consiguiendo un flujo de trabajo más parecido al de Django o PHP.</p>
<p>El &#8220;secreto&#8221; (entre comillas, por que está más que descubierto) se basa en tener el servidor de aplicaciones empotrado, de modo que este pueda arrancarse como un programa Java en modo debug, desde Eclipse. De esta manera conseguimos que desarrollar una aplicación web sea, a efectos del flujo de trabajo, como programar una aplicación Java &#8220;local&#8221;, pudiendo aprovechar toda las herramientas que pone a nuestra disposición el IDE, como la compilación automática y el cambio en caliente del las clases compiladas.</p>
<p>Las únicas limitaciones del cambio en caliente son las propias de la especificación <a title="JPDA" href="http://java.sun.com/javase/technologies/core/toolsapis/jpda/" target="_blank">JPDA</a>. Esto es, la actualización en caliente solo funciona mientras se modifique el cuerpo de las funciones. Cualquier modificación en los parámetros de un método o en la definición de una clase nos obligará a reiniciar el servidor (aunque no tendremos que recompilar nada).</p>
<p>En la actualidad, usamos como servidor empotrado Jetty, a través del plugin de Eclipse <a title="run-jetty-run" href="http://code.google.com/p/run-jetty-run/" target="_blank">run-jetty-run</a>.</p>
<p>A la hora de usar Run-Jetty-Run tuvimos que resolver 2 problemas:</p>
<ul>
<li>El plugin no soporta JNDI de serie, aunque aplicando este pequeño <a title="parche" href="http://code.google.com/p/run-jetty-run/issues/detail?id=11" target="_blank">parche</a> se soluciona.</li>
<li>A los usuarios de Windows, Jetty les bloqueaba los ficheros estáticos (por ejemplo css o javascript) de modo que no podían modificaros mientras el servidor estuviera en marcha (gran problema). Quedó solucionado siguiendo las instrucciones de este <a title="ticket" href="http://code.google.com/p/run-jetty-run/issues/detail?id=7" target="_blank">ticket</a>.</li>
</ul>
<p>Únicamente en un proyecto, de características muy especiales, Jetty no fue capaz de ejecutar una aplicación. En este caso, tuvimos que usar un Tomcat empotrado. Gracias al código fuente y las instrucciones de <a title="onJava" href="http://onjava.com/pub/a/onjava/2002/04/03/tomcat.html" target="_blank">un artículo en onJava</a>, no tuvimos ningún problema en ejecutar un Tomcat desde Eclipse, consiguiendo el mismo efecto que con Jetty.</p>
<p>¿Por que usamos Jetty en lugar de Tomcat? Principalmente por que run-jetty-run es más fácil de configurar y está muy bien integrado con Eclipse. Ademas Jetty arranca casi de inmediato.</p>
<p>Si tu flujo de desarrollo en Java se parece al que he descrito al inicio de esta entrada, te aseguro que vale la pena que inviertas algo de tiempo en mejorarlo. No es difícil, y los beneficios son considerables.</p>
<h4 style="font-size: 0.8em">Imagen © <a href="http://www.flickr.com/photos/johnmueller/">Extra Medium</a> Some Rights Reserved.</h4>
]]></content:encoded>
			<wfw:commentRss>http://morenosan.com/2010/01/16/editar-guardar-recargar-en-java/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>DVD-VR en Linux, otra pequeña victoria del software libre</title>
		<link>http://morenosan.com/2007/11/25/dvd-vr-en-linux-otra-pequena-victoria-del-software-libre/</link>
		<comments>http://morenosan.com/2007/11/25/dvd-vr-en-linux-otra-pequena-victoria-del-software-libre/#comments</comments>
		<pubDate>Sun, 25 Nov 2007 13:41:35 +0000</pubDate>
		<dc:creator>morenosan</dc:creator>
				<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://morenosan.com/2007/11/25/dvd-vr-en-linux-otra-pequena-victoria-del-software-libre/</guid>
		<description><![CDATA[
En el 2004 compré una cámara de vídeo digital de esas que utilizan como almacenamiento DVDs regrabables de 8 centímetros. La mía en concreto es la Hitachi DZ-MV580.
En la tienda había visto como con el software de Windows que venia con la cámara, era posible separar los capítulos de vídeo que te interesaban, de modo [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://morenosan.com/wp-content/uploads/2007/11/1401479125_c482507ebb_m.jpg" alt="Biccamera" class="right off" /></p>
<p>En el 2004 compré una cámara de vídeo digital de esas que utilizan como almacenamiento DVDs regrabables de 8 centímetros. La mía en concreto es la Hitachi DZ-MV580.</p>
<p>En la tienda había visto como con el software de Windows que venia con la cámara, era posible separar los capítulos de vídeo que te interesaban, de modo que pudieras incluir en tu DVD de las vacaciones en la nieve la escena en la que bajas esquiando como un campeón, pero no aquella otra en la que te estampas contra la clase de esquí de un grupo de la tercera edad.</p>
<p>Así que después de llenar mi primer disco, me senté frente al ordenador, confiado de que mi Linux tendría todas las herramientas para procesar el vídeo grabado y realizar DVDs con los que deleitar (o torturar) a mi familia y amigos.</p>
<p>Pero mi sorpresa fue mayúscula al comprobar que los discos se grababan en un formato especial de DVD, llamado <a href="http://en.wikipedia.org/wiki/DVD-VR" title="DVD-VR" target="_blank">DVD-VR</a>, que define el formato lógico de grabación de vídeo en soporte DVD. Mientras el formato utilizado para guardar el vídeo, el archivo VR_MOVIE.VRO del disco, es MPEG2 estándar, el mismo utilizado por los DVDs de toda la vida, la información sobre los capítulos y fecha de grabación, el infame fichero VR_MANGR.IFO, se almacena en un formato que ningún software open source de la época entendía.</p>
<p>Eventualmente encontré un <a href="http://www.avtechpulse.com/opensource/dvd.html" title="método" target="_blank">método</a>, algo laborioso, que permite separar los capítulos pero que implica separar las pista de audio y vídeo para volverlas a multiplexar de nuevo. Esto hacía que muchas veces acabase con el vídeo y el audio desincronizados, ademas de con distorsiones entre los capítulos. Así que, aunque imperfectos, acabé creando DVDs con los que deleité (y torturé) a familiares y amigos.</p>
<p>Aun así, de cada disco que grababa, guardaba una copia con la certeza de que algún día algún programador con mi mismo problema, pero con más talento, escribiría el software que permitiera dividir los vídeos en capítulos tal y como lo había visto hacer con el software de Windows.</p>
<p>Y por fin, tras tres años, hace unos días descubrí que ese programa ya existe. Su nombre es <a href="http://www.pixelbeat.org/programs/dvd-vr/" title="dvd-vr">dvd-vr</a> (elemental) y permite dividir un disco DVD-VR en capítulos automáticamente y  sin errores, así como mostrar diversa información del disco. Su primera versión es de Febrero del 2007 y su creador es <a href="http://www.pixelbeat.org/" title="Pádraig Brady" target="_blank">Pádraig Brady</a>.</p>
<p>Cuento esto, primero como servicio publico, ya que mi experiencia podría servirle a otros usuarios de Linux con cámaras DVD, pero también como un ejemplo, otro más, de la capacidad que tiene el software libre de resolver problemas reales y concretos de sus usuarios (el famoso &#8220;scratch an itch&#8221;), aunque sean tan pequeños como el de dividir en capítulos tus películas caseras.</p>
<h4 style="font-size: 0.8em">Imagen © <a href="http://flickr.com/photos/stephencannon/">steve-o71</a>. Some Rights Reserved.</h4>
]]></content:encoded>
			<wfw:commentRss>http://morenosan.com/2007/11/25/dvd-vr-en-linux-otra-pequena-victoria-del-software-libre/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
