<?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>Semilla de Software Libre (S.L.)</title>
	<atom:link href="http://www.semillasl.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.semillasl.com</link>
	<description>Otra empresa de software libre</description>
	<lastBuildDate>Mon, 20 Jul 2009 09:04:40 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Usando la API PHP de mnogosearch</title>
		<link>http://www.semillasl.com/2009/07/usando-la-api-php-de-mnogosearch/</link>
		<comments>http://www.semillasl.com/2009/07/usando-la-api-php-de-mnogosearch/#comments</comments>
		<pubDate>Mon, 20 Jul 2009 09:02:49 +0000</pubDate>
		<dc:creator>javier</dc:creator>
				<category><![CDATA[Desarrollo]]></category>

		<guid isPermaLink="false">http://www.semillasl.com/?p=35</guid>
		<description><![CDATA[En nuestro anterior post hemos visto como poner en marcha un servidor con mnogosearch. Una vez acabada la configuración se ha de poner algo que permita hacer las búsquedas. Para esto hay dos opciones:

Usar el cgi que viene en la distribución de mnogosearch. Para la mayoría la mejor opción.
Usar la API PHP de mnogosearch y [...]]]></description>
			<content:encoded><![CDATA[<p>En nuestro anterior post hemos visto como poner en marcha un servidor con <a href="http://www.mnogosearch.org/">mnogosearch</a>. Una vez acabada la configuración se ha de poner algo que permita hacer las búsquedas. Para esto hay dos opciones:</p>
<ul>
<li>Usar el cgi que viene en la distribución de mnogosearch. Para la mayoría la mejor opción.</li>
<li>Usar la API PHP de mnogosearch y hacer tu propia página de búsqueda. Para quienes necesitan flexibilidad, la única opción.</li>
</ul>
<p>La documentación de la API PHP es un cacao tremendo, mezcla cosas de versión a versión, y por lo general es bastante difcil de leer. Si quieres llegar a algo con la API, lo mejor que puedes hacer es cogerte el ejemplo que viene y empezar a estudiarlo concienzudamente o bien ver como lo han hecho otros, de esto hay muy poco por la itnernet así que aqui va como lo hemos implementado nosotros.</p>
<p>Lo que cuento a continuación funciona con la versión de la API 30308, es muy probable que si tienes una disntinta esto no funcione, cuento sólo la chicha, nada de como ser haría la interfaz ni cosas bonitas&#8230;</p>
<p><span id="more-35"></span></p>
<pre>// Definimos la conexión del buscador, hay que definir el modo y es interesante usar la QCache, hace que todo vaya mucho más rápido.
$url_udm="mysql://usuario:contraseña@servidor/base_de_datos/?dbmode=blob&amp;QCache=yes";
$encuentros_por_pagina=10;
if(!isset($desde))
 $desde = 0;

//nos creamos una conexión a la API
$udm = Udm_Alloc_Agent($url_udm);

/*
Con la siguiente variable se puede limitar la búsqueda a unas url, algo parecido al inurl: de google
*/
udm_add_search_limit($udm, UDM_LIMIT_URL, $sitio);
Udm_Set_Agent_Param($udm,UDM_PARAM_PAGE_SIZE,$encuentros_por_pagina); // encuentros por pagina

/*
para la paginacion,
mnogosearch pagina automaticamente, pero a diferencia de otros usa la
paginación como si fuera un libro, por lo que hay que pasarle la página
a la que quieres saltar y no el primer resultado de esa página.
*/
Udm_Set_Agent_Param($udm,UDM_PARAM_PAGE_NUM,$desde/$encuentros_por_pagina);
Udm_Set_Agent_Param($udm,UDM_PARAM_QUERY,$q); // lo que estamos buscando
Udm_Set_Agent_Param($udm,UDM_PARAM_CHARSET,'iso-8859-1'); // Aseguramos la codificación de la BD
udm_set_agent_param($udm,UDM_PARAM_BROWSER_CHARSET, 'iso-8859-1'); //la codificación del html resultante
udm_set_agent_param($udm,UDM_PARAM_STOPFILE, '/usr/local/mnogosearch/etc/stopwords/es.sl'); // las palabras que no dicen nada

$mResult = udm_find($udm,$words); //lanzamos la búsqueda

// La interfaz que vamos a devolver va a ser muy simple, a modo de ejemplo.
echo "Se encontraron". udm_get_res_param ($mResult,UDM_PARAM_FOUND) ."\n";
echo "Estamos en la conicidencia ". udm_get_res_param ($mResult,UDM_PARAM_FIRST_DOC) ." de".\
  udm_get_res_param ($mResult,UDM_PARAM_LAST_DOC)."\n";

/* Para la última página hay que hacer un bucle más corto */
if ($result["estimatedTotalResultsCount"] &gt; $desde+$encuentros_por_pagina) //no es la última página
 $fin_bucle=$encuentros_por_pagina;
else
 $fin_bucle=$result["estimatedTotalResultsCount"] - $desde; //es la última página

for ($i=0;$i&lt;$fin_bucle;$i++) { // recorremos las página encontradas
 // titulo de la página con su enlace
 echo "&lt;a href=\"". htmlspecialChars(udm_get_res_field ($mResult,$i,UDM_FIELD_URL)) ."\"&gt;"\
 ParseDocText(udm_get_res_field ($mResult, $i,UDM_FIELD_TITLE))."&lt;/a&gt;\n";
 // resumen
 echo ParseDocText(udm_get_res_field ($mResult, $i,UDM_FIELD_DESC) . udm_get_res_field ($mResult, $i,UDM_FIELD_TEXT));
 // Tamaño
 echo "tamaño: ".udm_get_res_field ($mResult, $i,UDM_FIELD_SIZE)."\n\n\n";
 }

udm_free_res($mResult); //liberamos las conexiones y la memoria
udm_free_agent($udm);</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.semillasl.com/2009/07/usando-la-api-php-de-mnogosearch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Buscando en un cachito de internet con mnogosearch</title>
		<link>http://www.semillasl.com/2009/07/buscando-en-un-cachito-de-internet-con-mnogosearch/</link>
		<comments>http://www.semillasl.com/2009/07/buscando-en-un-cachito-de-internet-con-mnogosearch/#comments</comments>
		<pubDate>Thu, 16 Jul 2009 16:03:32 +0000</pubDate>
		<dc:creator>javier</dc:creator>
				<category><![CDATA[Administración de sistemas]]></category>
		<category><![CDATA[Consultoría]]></category>
		<category><![CDATA[buscador]]></category>
		<category><![CDATA[indexador]]></category>
		<category><![CDATA[mnogosearch]]></category>

		<guid isPermaLink="false">http://www.semillasl.com/?p=27</guid>
		<description><![CDATA[
Todo era tan bonito, que resultó ser mentira
Motivación
Hemos estado usando la api soap de google para hacer las búsquedas dentro de gloobal.net, pero Google ha decidido dejar de dar soporte a esto desde Agosto de 2009, así que hemos tenido que buscarnos para seguir dando el servicio de otra forma. Como después de la experiencia [...]]]></description>
			<content:encoded><![CDATA[<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } 		H1 { margin-bottom: 0.21cm } 		H1.western { font-family: "Nimbus Sans L", sans-serif; font-size: 16pt } 		H1.cjk { font-family: "DejaVu Sans"; font-size: 16pt } 		H1.ctl { font-family: "DejaVu Sans"; font-size: 16pt } 		H2 { margin-bottom: 0.21cm } 		H2.western { font-family: "Nimbus Sans L", sans-serif; font-size: 14pt; font-style: italic } 		H2.cjk { font-size: 14pt; font-style: italic } 		H2.ctl { font-size: 14pt; font-style: italic } 		PRE.western { font-size: 8pt } --></p>
<blockquote><p>Todo era tan bonito, que resultó ser mentira</p></blockquote>
<h1>Motivación</h1>
<p>Hemos estado usando la <a href="http://code.google.com/intl/es-ES/apis/soapsearch/">api soap de google</a> para hacer las búsquedas dentro de <a href="http://www.gloobal.net/">gloobal.net</a>, pero Google ha decidido dejar de dar soporte a esto desde Agosto de 2009, así que hemos tenido que buscarnos para seguir dando el servicio de otra forma. Como después de la experiencia nos hemos dejado de fiar de google un poco, por lo que hemos decidido usar <a href="http://www.mnogosearch.org/">mnogosearch</a> para hacer esto, por aquello de apropiarnos de la tecnología.</p>
<p><span id="more-27"></span></p>
<h1>Instalación</h1>
<p style="margin-bottom: 0cm;">Partimos de una Debian Etch limpia recien sacada de la caja.</p>
<p style="margin-bottom: 0cm;">La versión de mnogosearch que viene con debian (etch) está obsoleta, por lo que se ha tenido que instalar desde los fuentes.</p>
<h2>Compilando mnogosearch</h2>
<p style="margin-bottom: 0cm;">Son unos pasos bastante sencillos los que hay que seguir,</p>
<pre>ssh root@buscador
root@buscador's password:
buscador:~# # de aqui en adelante quitaré esto para que sea más fácil copiar y pegar <img src='http://www.semillasl.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />
apt-get update
apt-get upgrade
apt-get install make gcc less vim mysql-server libmysql++-dev
cd /usr/src/
wget http://www.mnogosearch.org/Download/mnogosearch-3.3.8.tar.gz # pudes buscar algo más moderno
tar xzvf mnogosearch-3.3.8.tar.gz
cd mnogosearch-3.3.8
perl install.pl # a las preguntas, todas por defecto menos Build shared libraries? (yes/no) [no]: yes
make
make install</pre>
<p style="margin-bottom: 0cm;">Aqui ya estaría instalado el mnogosearch.</p>
<p style="margin-bottom: 0cm;">
<h2>Compilando el módulo PHP en debian</h2>
<p style="margin-bottom: 0cm;">Es importante hacer este paso después de haber instalado mnogosearch desde los fuentes.</p>
<pre>cd /usr/src
apt-get install libapache2-mod-php5
apt-get build-dep php5
apt-get source php5
cd php5-5.2.6.dfsg.1/ # puede cambiar dependiendo de la versión de php
./debian/rules patch
cp  -a ../mnogosearch-3.3.8/php ext/mnogosearc
vim debian/rules # busca donde estan todos los --with y en medio pon --with-mnogosearch=shared,/usr/local/mnogosearch \
echo mnogosearch mnoGoSearch &gt;&gt; debian/modulelist
mkdir -p debian/php5-mnogosearch/usr/share/doc/php5-mnogosearch
./debian/rules binary #espera sentao
cp apache2-build/modules/mnogosearch.so /usr/lib/php5/20060613/
echo extension=mnogosearch.so &gt; /etc/php5/conf.d/mnogosearch.ini
/etc/init.d/apache2 restart</pre>
<p style="margin-bottom: 0cm;">Con esto ya está instalado todo el software necesario, ahora hay que configurarlo y echarlo a rodar.</p>
<p style="margin-bottom: 0cm;">
<h1>Configuración</h1>
<h2>indexer.conf</h2>
<p style="margin-bottom: 0cm;">La idea es ver la documentación sobre el fichero para saber lo que se está haciendo, pero aqui va lo más importante (cambiado) ojo este fichero no sería funcional:</p>
<pre>DBAddr mysql://buscador:buscando@localhost/buscador/?dbmode=blob&amp;Deflate=yes&amp;zint4=yes
LocalCharset ISO-8859-1
StopwordFile stopwords/es.sl
HTTPHeader "User-Agent: Gloobal Crawler 0.3"
Disallow *html=1
Disallow *printview*
DefaultLang es
DetectClones yes
Server skip http://miweb/zonaoscura
Period 7d
Server http://miweb/
Period 1y
Server http://miweb/que_no_seactualiza/
Period 1h
Server HrefOnly http://miweb/novedades</pre>
<h2>La base de datos</h2>
<p style="margin-bottom: 0cm;">Espero que hayas puesto contraseña a la base de datos en la instalación <img src='http://www.semillasl.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<pre>mysql -u root -p
create database buscador DEFAULT CHARACTER SET latin1 COLLATE latin1_spanish_ci;
grant all privileges on buscador.* to "buscador"@"localhost" IDENTIFIED by "buscando";
\q
/usr/local/mnogosearch/sbin/indexer -Ecreate</pre>
<p>Con esto la base de datos está creada y compuesta, solo le falta ser rellenada.</p>
<h2>El sistema</h2>
<p style="margin-bottom: 0cm;">Para que la base de datos se rellene hay que correr períodicamente el indexer, en nuestro caso hemos estado haciendo pruebas para ver la frecuencia con la que cambia la información de nuestras páginas y hemos determinado que cada media hora hay cambios suficientes como para que venga bien buscar enlaces nuevos, por lo que cada 30 minutos lanzamos el indexador con 1 hilo para que recoja 1000 páginas. Cada día a las 21h lanzamos dos hilos para que indexen todo lo viejo que esté caducado o nuevo que no esté indexado.</p>
<p style="margin-bottom: 0cm;">Cada dos horas lanzamos el proceso para convertir a blob la base de datos. Esto es necesario y bastante largo, afinarlo y tened en cuenta que las páginas indexadas no empiezan a aparecer hasta que esto no se ha lanzado.</p>
<p style="margin-bottom: 0cm;">Simplemente añadimos al /etc/crontab lo siguiente:</p>
<pre>30 * * * * root /usr/local/mnogosearch/sbin/indexer -N 1 -n 1000 &gt; /dev/null 2&gt;/dev/null
00 21 * * * root /usr/local/mnogosearch/sbin/indexer -N 2  &gt; /dev/null 2&gt;/dev/null
20 */2 * * * root (/usr/local/mnogosearch/sbin/indexer -Eblob ; /bin/rm -f /usr/local/mnoGoSearch/var/cache/*) &gt; /dev/null 2&gt;/dev/null</pre>
<p style="margin-bottom: 0cm;">y casi siempre hay que cambiar esto en el /etc/php5/apache2/php.ini</p>
<pre>register_globals = On</pre>
<p style="margin-bottom: 0cm;">
<p style="margin-bottom: 0cm;">Con esto ya tendríamos el indexador recogiendo información, Nos falta hacer algo en php con lo que hacer las búsquedas&#8230; En el próximo número.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.semillasl.com/2009/07/buscando-en-un-cachito-de-internet-con-mnogosearch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Transmisión de eventos a través de internet con software (y formatos) libres</title>
		<link>http://www.semillasl.com/2009/03/transmision-de-eventos-a-traves-de-internet-con-software-y-formatos-libres/</link>
		<comments>http://www.semillasl.com/2009/03/transmision-de-eventos-a-traves-de-internet-con-software-y-formatos-libres/#comments</comments>
		<pubDate>Tue, 31 Mar 2009 11:12:41 +0000</pubDate>
		<dc:creator>javier</dc:creator>
				<category><![CDATA[Administración de sistemas]]></category>
		<category><![CDATA[eventos]]></category>
		<category><![CDATA[icecast2]]></category>
		<category><![CDATA[ogg]]></category>
		<category><![CDATA[streaming]]></category>
		<category><![CDATA[vlc]]></category>

		<guid isPermaLink="false">http://www.semillasl.com/?p=24</guid>
		<description><![CDATA[Como hacer una retransmisión de un evento usando software libre y formatos libres.]]></description>
			<content:encoded><![CDATA[<blockquote><p>Es tarde y todo se ha hecho en un par de días, las primeras gotas de rocio aparecen sobre la ventana y mis ojos enrojecidos se abren lentamente ante la aparición ¡Theodora!</p></blockquote>
<p>Hemos preparado la retransmisión en vivo y en directo del Seminario internacional <a href="http://www.justiciaporcolombia.org/?q=node/31">Colombia: Conflicto y derecho internacional humanitario</a>, lo hemos montado en muy poco tiempo pero el resultado es bastante funcional.</p>
<p>La petición era transmitir por internet las jornadas ya que en el primer día se habían agotado las plazas. Mucha gente se había quedado sin poder asistir, además por la temática era interesante que mucha gente de otros lugares del mundo pudieran asistir virtualmente.</p>
<p>Antes de empezar hay que tener claros varios conceptos y los voy a explicar tal cual los he entendido (o me los he inventado).</p>
<p><strong>Fuente</strong>: es lo que da el video y el audio al servidor de streaming.</p>
<p><strong>Servidor de streaming</strong>: Es lo que recoge como entrada lo que da la fuente y se lo da a los clientes que se quieran enganchar.</p>
<p><strong>Clientes</strong>: Son los que ven y escuchan lo que la fuente quiere transmitir.</p>
<p>Ningún concepto raro, ¿no? a mi me costó pillarlos, pero una vez claros continuamos, empezamos por el medio.<span id="more-24"></span></p>
<p>El servidor de streaming que hemos usado es icecast2, por qué icecast2 y no otro:</p>
<ul>
<li>Ya había usado icecast hace años para radio</li>
<li>Es software libre</li>
<li>apt-get install icecast2 # <img src='http://www.semillasl.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ul>
<p>La parte del servidor en sí no requiere mucho, simplemente instalarlo, y cambiar las contraseñas por defecto:</p>
<p>apt-get install icecast2</p>
<p>vim /etc/icecast2/icecast.xml</p>
<p>Unas tareas sencillas:</p>
<ul>
<li>Buscar hackme y reemplazar por tu contraseña favorita <img src='http://www.semillasl.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
<li>Configurar el hostname</li>
<li>Cambiar el bind-address para que te puedas enganchar desde internet.</li>
</ul>
<p>Luego hay que editar el fichero /etc/default/icecas2 y habilitarlo para que funcione&#8230; esto es para que cambiemos las contraseñas, así que no seas gañán o gañana y cambiala antes de hacer este paso.</p>
<p>Si ahora reinicias el icecast2 deberías tener un servidor funcionando <img src='http://www.semillasl.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Icecast tiene un interfaz web de administración y estadísticas bastante sencillote ve a http://tuserver:8000 y entra con admin y su contraseña y verás sus funciones&#8230; esto te dejo que lo averigues tu.</p>
<p>Servidor funcionando&#8230; ahora deberíamos enchufarle algo para transmitir <img src='http://www.semillasl.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Este paso fue un auténtico dolor de cabeza. En el primer momento pensabamos usar vlc para coger la entrada de firewire, convertirlo a ogg y enviarlo al servidor y&#8230; hubo problemas. No conseguí que el vlc cogiera el firewire (no hubo manera), ni que cogiera la entrada estandar para que enchufarsela al servidor ni que la vida sonriera, así que lo que decidí hacer es coger la entrada del firewire, pasarla a mpeg a un fichero local y enchufar el vlc a leer el fichero local y reenviarlo ya en ogg al servidor de streaming.</p>
<p>Todo lo siguiente requiere que tengas cargados los módulos de firewire <img src='http://www.semillasl.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Asi que ejecutaba por un lado la conversión al vuelo de lo que entra por el firewire</p>
<blockquote><p>dvgrab -format dv1 &#8211; | ffmpeg -deinterlace -f dv -i &#8211; -vcodec mpeg1video \</p>
<p>-s 352&#215;288 -qscale 3.5 -acodec mp2 -ab 32k -ar 22050 de_la_camara.mpg</p></blockquote>
<p>y por otro el envío al servidor de lo que se iba guardando (también lo muestra en local):</p>
<blockquote><p>vlc -vv de_la_camara.mpg &#8211;sout\</p>
<p>&#8216;#transcode{vcodec=theo,vb=800,scale=1,acodec=vorb,ab=128,channels=2}\</p>
<p>:duplicate{dst=display,dst=std{access=shout,mux=ogg,\</p>
<p>dst=source:micontraseñafavoritita@miservidorpreferido:8000/mievento.ogg}}&#8217;</p></blockquote>
<p>Puedes hacer prueba de que funciona con el vlc:</p>
<blockquote><p>vlc http://miservidorpreferido:8000/mievento.ogg</p></blockquote>
<p>Esto mete un poco más de retraso pero, si lanzas las dos cosas separadas con un  &amp; sleep 5; no será mucho <img src='http://www.semillasl.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  . De todas formas el streaming ya hace bastante cache lo que hace que se vea con bastante retardo.</p>
<p>Ahora ya estamos emitiendo para toda la galaxia conocida nuestro evento, lo que pasa es que nadie nos conoce, pero seguro que tenemos una web que si conocen, así que vamos a embeber nuestro stream en la web. Para ello vamos a usar un script que hace que la etiqueta video de html5 funcione en navegadores que no lo soportan (o por lo menos lo intenta). Hay que aclarar que esto necesita que el cliente tenga instalado algo que le permita ver video ogg en el equipo y el plugin para el navegador (vlc, mplayer) o firefox 3.1 que ya soporta ogg nativamente <img src='http://www.semillasl.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>la cosa en cuestión es <a href="http://metavid.org/w/index.php/Mv_embed">Mv Embed</a> es bastante sencillo basta bajar el js ponerlo en el servidor y meter el siguiente código html en la web:</p>
<blockquote><p>&lt;script type=&#8221;text/javascript&#8221; src=&#8221;/PATH_AL_mv_embed/mv_embed.js&#8221;&gt;&lt;/script&gt;</p>
<p>&lt;video src=&#8221;http://miservidorpreferido:8000/mievento.ogg&#8221; thumbnail=&#8221;PONTE_UnA_FOTO_CHULA.png&#8221;&gt;&lt;/video&gt;</p></blockquote>
<p>Le puedes pasar opciones interesante como &#8220;autoplay=true&#8221; para que cargue el video automáticamente.</p>
<p>Tachan! ya tienes todo funcionando para restransmitir tu evento <img src='http://www.semillasl.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Muchas gracias a Santiago Ramos de <a href="http://www.grupoikusnet.com/">Ikusnet</a> por la orientación y el apoyo moral</p>
]]></content:encoded>
			<wfw:commentRss>http://www.semillasl.com/2009/03/transmision-de-eventos-a-traves-de-internet-con-software-y-formatos-libres/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Clase 4. Requisitos para la memoria.</title>
		<link>http://www.semillasl.com/2009/02/clase-4-requisitos-para-la-memoria/</link>
		<comments>http://www.semillasl.com/2009/02/clase-4-requisitos-para-la-memoria/#comments</comments>
		<pubDate>Tue, 03 Feb 2009 12:24:57 +0000</pubDate>
		<dc:creator>jaime</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.semillasl.com/?p=11</guid>
		<description><![CDATA[El acuerdo al que llegamos en nuestra super-clase presencial fue: arrancamos varios desarrollos independientes el esqueleto básico, y luego unificamos en un solo desarrollo en un trac común. Para antes de que tengamos la clase quizá seria interesante subirlo a 3 ramas (branches) diferentes del mismo proyecto, asi vemos todos como lo están haciendo los [...]]]></description>
			<content:encoded><![CDATA[<p>El acuerdo al que llegamos en nuestra super-clase presencial fue: arrancamos varios desarrollos independientes el esqueleto básico, y luego unificamos en un solo desarrollo en un trac común. Para antes de que tengamos la clase quizá seria interesante subirlo a 3 ramas (branches) diferentes del mismo proyecto, asi vemos todos como lo están haciendo los otros, y después unificamos en la forma que mas nos interese.</p>
<p style="margin-bottom: 0cm;">
<p style="margin-bottom: 0cm;">Bueno pero este post es para presentar una definición de requisitos para la memoria. Eso, dicho asi, con ese peso, no lo voy a poder llevar palante. Así es que lo que voy a hacer es presentar algunas ideas de lo que tendría que ser la aplicación (que quizá son también parte del análisis).</p>
<p style="margin-bottom: 0cm;"><span id="more-11"></span></p>
<p style="margin-bottom: 0cm;">
<p style="margin-bottom: 0cm;">
<p style="margin-bottom: 0cm;">La idea general de la aplicación es que los diferentes trabajadores de iepala, entren periódicamente al sistema y reflejen información sobre las actividades que están desarrollando. Con esto se va elaborando colectivamente la  memoria de la organización, que puede ser accesible online (con todos los temas de transparencia que esto conlleva) y que podría tener una salida &#8220;por atrás&#8221; en forma de documento unificado (para presentar a patronatos y cosas de esas).</p>
<p style="margin-bottom: 0cm;">
<p style="margin-bottom: 0cm;">Echarle un ojo a la web y os haréis una idea: <a href="http://www.memoria.iepala.es">http://www.memoria.iepala.es</a></p>
<p style="margin-bottom: 0cm;">
<p style="margin-bottom: 0cm;">Pongo una especie de modelo de datos simplificado con lo primero que se me ha ocurrido:</p>
<p style="text-align: center;">
<p style="text-align: center;">
<p style="text-align: center;"><a href="http://www.semillasl.com/wp-content/uploads/2009/02/memoria7.jpeg"><img class="alignnone size-full wp-image-23" style="vertical-align: baseline; margin: 50px;" title="memoria7" src="http://www.semillasl.com/wp-content/uploads/2009/02/memoria7.jpeg" alt="" width="277" height="272" /></a></p>
<p style="margin-bottom: 0cm;">
<p style="margin-bottom: 0cm;">
<p style="margin-bottom: 0cm;">
<p style="margin-bottom: 0cm;">
<p style="margin-bottom: 0cm;">
<p>La idea central del mismo es que todo se podría resolver con simples (o complejas &#8220;etiquetas&#8221;, pero la realidad de IEPALA demuestra que <span style="text-decoration: underline;">gustan</span> de las jerarquías. Entonces en vez de crear una campos para cada tema vamos a categorizar las etiquetas. Por otro lado esas categorías deberían tener 2 características basicas:</p>
<p style="margin-bottom: 0cm;">
<ul>
<li>Poder bloquear el editar o añadir etiquetas en una determinada categoría.</li>
<li>Poder clasificar esas categorías en algo asi como &#8220;descriptivas&#8221; (serian las que tenemos en la barra de navegación derecha) o &#8220;contenidos&#8221; (medios de comunicación, organizaciones,&#8230; etc)</li>
</ul>
<p style="margin-bottom: 0cm;">
<p>Lo bueno de dejar este modelo de etiquetas y categorías es que puede crecer conforme se les vaya ocurriendo. Y además refleja una jerarquía que le aporta control a la gente. Finalmente añada una batería de fechar que se pueden asociar con una actividad y el tema de vincular adjuntos (esto es para que empecéis a utilizar plugins). Por supuesto cualquier idea en en el modelo de datos sera bienvenida.</p>
<p style="margin-bottom: 0cm;">
<p style="margin-bottom: 0cm;">Por otro lado aqui os pongo el diagrama de casos de uso</p>
<p style="margin-bottom: 0cm;"><a href="http://www.semillasl.com/wp-content/uploads/2009/02/caso-de-uso3.jpeg"><img class="alignnone size-full wp-image-22" style="vertical-align: baseline; margin: 50px;" title="caso-de-uso3" src="http://www.semillasl.com/wp-content/uploads/2009/02/caso-de-uso3.jpeg" alt="" width="308" height="408" /></a></p>
<p style="margin-bottom: 0cm;">
<p style="margin-bottom: 0cm;">
<p style="margin-bottom: 0cm;">
<p style="margin-bottom: 0cm;">
<p style="margin-bottom: 0cm;">
<p>Rápidamente describo:</p>
<ul>
<li>Evidentemente hay dos tipos de usuarios registrados: El editor y el administrador (no hace falta mas complejidad para nuestro sistema).</li>
<li>El administrador gestiona usuarios y categorías. (NOTA: Y además tiene permisos para modificar cualquier &#8220;post&#8221;)</li>
<li>Un editor puede crear, modificar y eliminar sus actividades.</li>
<li>El visitante vera el sistema como un blog (aunque por defecto las actividades aparecerán en orden de realización de la misma y no de creación en el sistema) y podrá hacer filtrados por las etiquetas (algunas le aparecerán a la izquierda) y búsquedas mas complejas.</li>
<li></li>
</ul>
<p>Evidentemente un tema clave para esta aplicacion lo tendremos en el tema de la impresion de informes. Pero eso no sera para esta proxima clase.</p>
<p style="margin-bottom: 0cm;">
<p style="margin-bottom: 0cm;">Vale pues con esto nos juntaremos en otra clase presencial y unificaremos en un solo código.</p>
<p style="margin-bottom: 0cm;">
<p style="margin-bottom: 0cm;">Salud.</p>
<p style="margin-bottom: 0cm;">
<p style="margin-bottom: 0cm;">
<p style="margin-bottom: 0cm;">&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p style="margin-bottom: 0cm;">
<p style="margin-bottom: 0cm;">Como nota final dejar constancia de que lo mas importante aun no lo hemos abordado: ¿Por que estamos migrando esta aplicación? ¿Por que a Rails?.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.semillasl.com/2009/02/clase-4-requisitos-para-la-memoria/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Clase 3. El ejercicio.</title>
		<link>http://www.semillasl.com/2009/01/clase-3-el-ejercicio/</link>
		<comments>http://www.semillasl.com/2009/01/clase-3-el-ejercicio/#comments</comments>
		<pubDate>Fri, 23 Jan 2009 15:13:02 +0000</pubDate>
		<dc:creator>jaime</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Curso RoR 2009]]></category>
		<category><![CDATA[RoR]]></category>

		<guid isPermaLink="false">http://www.semillasl.com/?p=10</guid>
		<description><![CDATA[Ahora algo con chicha&#8230;
¿Para que desaprovechar otro curso haciendo pruebecitas que no sirven para nada?
En este no vamos a hacer tontadicas, y dado que nuestra madre IEPALA tiene necesidades nos vamos a remangar y a hacer faena. Hay dos proyectazos:

1.- Memoria de IEPALA. 
http://www.memoria.iepala.es/
Existe un blog con wordpress en el que se han ido volcando [...]]]></description>
			<content:encoded><![CDATA[<p>Ahora algo con chicha&#8230;</p>
<p>¿Para que desaprovechar otro curso haciendo pruebecitas que no sirven para nada?</p>
<p>En este no vamos a hacer tontadicas, y dado que nuestra madre IEPALA tiene necesidades nos vamos a remangar y a hacer faena. Hay dos proyectazos:</p>
<p><span id="more-10"></span></p>
<p><strong>1.- Memoria de IEPALA. </strong></p>
<p><a href="http://www.memoria.iepala.es/">http://www.memoria.iepala.es/</a></p>
<p>Existe un blog con wordpress en el que se han ido volcando las actividades de IEPALA para que se puedan ver, y para que sirvan como memoria de la organización. No entraremos a analizar su uso real (eso nos llevaría a procesos internos), pero lo que esta claro es que a medida que de una u otra forma se vaya utilizando, necesitamos &#8220;algo mas&#8221;, o &#8220;algo mas especifico&#8221;, o &#8220;algo que podamos tocar&#8221;,&#8230; etc.</p>
<p>Vaya, ideas en el aire, pero que son las que nos ponen en esta situación. Esas &#8220;ideas en el aire&#8221; son varias cosas que deberíamos analizar. Y al que no se si lanzarme en este post. Ahora me lo voy pensando.</p>
<p><strong>2.- BBDD institucional. </strong></p>
<p>La base de datos institucional básicamente es una aplicación solo de uso interno, que funciona por decirlo mal y rápido como una aplicación de e-mailing. Spam del nuestro. Como en el anterior caso no entraremos a analizar su uso, aunque aquí cabe destacar que es una aplicación mucho mas necesaria de lo que parece, y que tiene un uso sostenido en el tiempo. Está en PHP (para vergüenza mía es un hijo de un servidor de ustedes).</p>
<p>¿Cual es el problema de esta aplicación? Usabilidad. Ese fantástico termino que en esta caso nos viene que ni pintado. La idea es simplificarlo (desde el punto de vista del usuario), quizá unificar algo el modelo de datos, y sobretodo hacer transparente una serie de funciones y chequeos básicos que ayuden a limpiar y ordenar la información.</p>
<p>&#8212;&#8212;&#8212;&#8212;-</p>
<p>Este es el ejercicio que tendremos que resolver en este curso. Nos centraremos en el 1. Pero según las fuerzas con las que nos encontremos quizá merezca la pena pensar en el 2.</p>
<p>Pero como siempre he tenido complejo de maestro espiritual vamos a ir a las cuestiones de &#8220;fondo&#8221; o por el contrario a las cuestiones de &#8220;altos vuelos&#8221;:</p>
<p>¿Por que?&#8230; ¿Por que migrar? ¿Por que en RoR?</p>
<p>Los tags ahora serian cosas como: análisis, adecuación soluciones, procesos, gestión información, cultura RoR, usabilidad,&#8230; etc. Osea las que cuestiones que molan. Hoy de momento no me meto con estas cuestiones. Estos post no corren mucha prisa, podemos ir hablándolos poco a poco.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.semillasl.com/2009/01/clase-3-el-ejercicio/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Clase 2. Referencias.</title>
		<link>http://www.semillasl.com/2009/01/clase-2-referencias/</link>
		<comments>http://www.semillasl.com/2009/01/clase-2-referencias/#comments</comments>
		<pubDate>Thu, 22 Jan 2009 21:45:51 +0000</pubDate>
		<dc:creator>jaime</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Curso RoR 2009]]></category>
		<category><![CDATA[RoR]]></category>

		<guid isPermaLink="false">http://www.semillasl.com/?p=8</guid>
		<description><![CDATA[Pues esta clase es mas importante que la primera por que va de recursos. Evidentemente no hay mejor forma que recoger fuentes buenas que hacerlo colectivamente así es que os animo (próximos alumnos de este garito) que añadáis las que veáis (a través de comentarios o editando este post).

Bueno vamos allá. Primero la referencia Ruby. [...]]]></description>
			<content:encoded><![CDATA[<p>Pues esta clase es mas importante que la primera por que va de recursos. Evidentemente no hay mejor forma que recoger fuentes buenas que hacerlo colectivamente así es que os animo (próximos alumnos de este garito) que añadáis las que veáis (a través de comentarios o editando este post).</p>
<p><span id="more-8"></span><br />
Bueno vamos allá. Primero la referencia <strong>Ruby</strong>. La web de Ruby-Docs:</p>
<p><a href="http://www.ruby-doc.org/docs">http://www.ruby-doc.org/docs</a></p>
<p>Aqui una Ruby User&#8217;s Guide muy &#8220;desde el comienzo&#8221;. Además tendréis la imprescindible documentación de la API.</p>
<p>Desde ella (aunque  se puede encontrar en muchos otros sitios) al clásico de  Programming Ruby (Pragmatic Programmer&#8217;s Guide):</p>
<p><a href="http://www.ruby-doc.org/docs/ProgrammingRuby/ ">http://www.ruby-doc.org/docs/ProgrammingRuby/ </a></p>
<p>Este libro es: directo, elegante, complejo. Vaya mu bueno.</p>
<p>Evidentemente y poniéndome protocolario, todo el tiempo que se le dedique al núcleo del asunto, el propio lenguaje Ruby, no es tiempo perdido (os lo digo por experiencia por que soy de los que ha aprendido muy mal). Venga y para acabar en español:</p>
<p><a href="http://www.ruby-lang.org/es ">http://www.ruby-lang.org/es </a></p>
<p>En esta web tienen referencias a guías y cosas por el estilo. Tiene un apartado de documentación con varias cosas. (NOTA: en documentación no he visto la traducción del libro Programming Ruby, pero se que en su día si que la hubo osea que sera cuestión de rastrear un poquito)</p>
<p>Vale pues con esto se acabo lo relacionado con Ruby. Ahora pasamos a <strong>Rails</strong> . Por una lado la web de rails:</p>
<p><a href="http://www.rubyonrails.org">http://www.rubyonrails.org </a></p>
<p>No es que tenga gran cosa, pero bueno, es la web &#8220;oficial&#8221; ¿No?. Desde puedes llegar a la documentación de la API. Por cierto esa misma documentación también esta accesible con lo que esta en el post anterior (gem server)&#8230; O incluso en vuestro propio proyecto generándolo con la tarea Rake correspondiente (ver rake -T).</p>
<p>Pero bueno vamos a libros de calidad. Primero el clásico:</p>
<p><a href="http://www.pragprog.com/titles/rails3/agile-web-development-with-rails-third-edition ">http://www.pragprog.com/titles/rails3/agile-web-development-with-rails-third-edition </a></p>
<p>Esta ya en su versión para Rails2 (que es la que utilizareis vosotros). Nada que no sea fácilmente conseguible en las fantástiscas redes P2P para compartir (sed legales por favor&#8230; canalla el puto Molina). Este libro esta muy bien para enterarte de todo. Es un recorrido de la leche por el framework.</p>
<p>Y finalmente para cosas mas complicadillas, os dejo los libros de recetas de rails. Son recetillas que aunque tu no las necesites de momento es muy recomendable echarles un ojo e ir enterándose</p>
<p><a href="http://www.pragprog.com/titles/fr_rr/rails-recipes ">http://www.pragprog.com/titles/fr_rr/rails-recipes </a><br />
<a href="http://www.pragprog.com/titles/fr_arr/advanced-rails-recipes ">http://www.pragprog.com/titles/fr_arr/advanced-rails-recipes </a></p>
<p>Además de esto todo lo comentado, y como en cualquier comunidad que se precie de tal, tendréis una serie de listas en castellano.</p>
<p>Salud, gracias por asistir a esta clase, y en fotocopiadora podréis recoger los apuntes&#8230;</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>PD: existen dos blogs de gente en castellano, que por ser majetes y conocidos os los pongo aquí para que tengáis referencias:</p>
<p>El de la compañera de proyectos Amaia: <a href="http://apuntesderails.amaiac.net/">http://apuntesderails.amaiac.net/</a><br />
El de Jaime Iniesta: <a href="http://www.jaimeiniesta.com/ ">http://www.jaimeiniesta.com/ </a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.semillasl.com/2009/01/clase-2-referencias/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Clase 1. Curso RoR 09</title>
		<link>http://www.semillasl.com/2009/01/clase-1-curso-ror-09/</link>
		<comments>http://www.semillasl.com/2009/01/clase-1-curso-ror-09/#comments</comments>
		<pubDate>Thu, 22 Jan 2009 21:16:42 +0000</pubDate>
		<dc:creator>jaime</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Curso RoR 2009]]></category>
		<category><![CDATA[RoR]]></category>

		<guid isPermaLink="false">http://www.semillasl.com/?p=7</guid>
		<description><![CDATA[Vale,
Pues la clase primera evidentemente es la de instalar RoR. En realidad no habrá muchas mas clases de estas. En realidad no creo que haya muchas mas clases. No voy a ponerlo todo fácil, asi es que dare solo las ideas generales.

Por cierto y antes de empezar que todas estas cosas se encuentran fácilmente por [...]]]></description>
			<content:encoded><![CDATA[<p>Vale,</p>
<p>Pues la clase primera evidentemente es la de instalar RoR. En realidad no habrá muchas mas clases de estas. En realidad no creo que haya muchas mas clases. No voy a ponerlo todo fácil, asi es que dare solo las ideas generales.</p>
<p><span id="more-7"></span></p>
<p>Por cierto y antes de empezar que todas estas cosas se encuentran fácilmente por todas partes, por ejemplo aquí:</p>
<p><a href="http://agileweb.wordpress.com/2008/07/18/how-to-install-rails-21-on-ubuntu-in-5-steps/">http://agileweb.wordpress.com/2008/07/18/how-to-install-rails-21-on-ubuntu-in-5-steps/</a></p>
<p>Adelante. Primero las cosas con apt. Mas o menos supongo que todos tenemos Ubuntu.</p>
<p>(apt-get) Instalar ruby. Pero cuidado: nada de la ruby1.9, si no el ruby1.8. (hace poco que me comentaron esta gracia)</p>
<blockquote><p>apt-get install ruby</p></blockquote>
<p>(apt-get) Instalar rubygem. Y claro: que sea coherente con lo anterior, por que hay dos paquetes de el 1.8 y el 1.9. DETALLE: este 1.8 y 1.9 no son la versiones del paquete rubygem si no la versión de ruby que utiliza ese gestor de gemas.</p>
<blockquote><p>apt-get install rubygems</p></blockquote>
<p>NOTA (deprimente para los buenos programadores): En Ruby, pero especialmente en Rails, no hay mucho respeto por el tema de mantener integridad (no recuerdo el termino informatico) entre las versiones. Suena chapuzas, pero es asi.</p>
<p>Bueno, y se acabo volver a utilizar el apt-get, a partir de ahora usaremos las gemas.</p>
<p>Pero la cosa graciosa es que ahora que la versión que tenéis de las gemas (que posiblemente será la 1.2.0) querréis actualizarla (a la 1.3.0). ¿Por que? según las webs es &#8220;recomendable&#8221; (Mmmm&#8230; que misterioso&#8230; en realidad mi conclusión es que hay mucha ignorancia, pero como yo tampoco me libro de eso, me callo). Asi es que intentar un:</p>
<blockquote><p>gem update &#8211;system</p></blockquote>
<p>Pues resulta que casca verdad. Algo de que:</p>
<blockquote><p>&#8220;gem update &#8211;system is disabled on Debian&#8230;.&#8221;</p></blockquote>
<p>Pues vaya catxondos. Si queréis actualizarla probad esto:</p>
<p><a href="http://apuntesderails.amaiac.net/archives/2008/12/2/actualizar_rubygems_a_la_versi%C3%B3n/">http://apuntesderails.amaiac.net/archives/2008/12/2/actualizar_rubygems_a_la_versi%C3%B3n/</a></p>
<p>Es de amaia que tiene muchas cosas de rails.</p>
<p>Sigamos. Con esto tenemos el gestor de gemas actualizado. Si queréis probad a ver el gem &#8211;help y esas cosas. De todas formas a lo importante:</p>
<blockquote><p>gem install rails</p></blockquote>
<p>Podríais especificar la versión de la gema añadiéndole -v version</p>
<p>Y ahi os instalara las 4 cositas básicas. Quizá algo os va lento, o quizá algo falla, repetirlo, o intentar instalar alguna gema por separado. Es un consejo poco riguroso, pero mas de una vez me ha funcionado. En cualquier caso y en esencia tendréis varios paquetes importantes, y que componen el núcleo del framework. Hacer un:</p>
<blockquote><p>gem dependency rails</p></blockquote>
<p>Y veréis:</p>
<blockquote><p>Gem rails-2.0.2<br />
rake (&gt;= 0.7.2, runtime)<br />
activesupport (= 2.0.2, runtime)<br />
activerecord (= 2.0.2, runtime)<br />
actionpack (= 2.0.2, runtime)<br />
actionmailer (= 2.0.2, runtime)<br />
activeresource (= 2.0.2, runtime)</p></blockquote>
<p>En mi caso tengo la 2.0.2 por que es en la que esta mi desarrollo. De todas formas hoy no voy a explicar conceptos (aunque es lo que mas me gusta) así es que si queréis buscaros una guía. Por otro lado si queréis ver las nuevas cosas que tiene cada actualización de Rails acabo de ver a un brasileño que se ha impuesto la penitencia de que cada vez que hay una nueva versión de rails hace un nuevo libro de &#8220;Whats new on Rails x.x.x&#8221;.</p>
<p><a href="http://www.nomedojogo.com/">http://www.nomedojogo.com/</a></p>
<p>Bueno con esto esta casi todo, para tener una aplicación os colocáis donde consideréis de vuestro sistema de ficheros y hacéis un:</p>
<blockquote><p>rails mi_aplicacion</p></blockquote>
<p>Una vez tenéis hecho solo detallo que por defecto rails quiere utilizar una base de datos sqlite por detrás así es que para utilizar mysql tendréis que configurar el fichero config/database.yml adecuadamente. Esto os lo dejo a vosotros (tanto la instalacion de mysql como sqlite, como su configuracion en rails).</p>
<p>Pero para ello en la clase 2 os dejare una serie de referencias para que podáis ir leyendo.</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p><strong>Apéndice 1</strong></p>
<p>Si quieres ver la documentación disponible de cada una de las gemas que has instalado solamente:</p>
<blockquote><p>gem server</p></blockquote>
<p>Esto levanta en el 8808 un índice con toda la documentación RDoc de las gemas instaladas en tu sistema.</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p><strong>Apendice 2</strong></p>
<p>Este es una cosa nueva bien fardona. En vuestro primer proyecto de prueba hacer:</p>
<blockquote><p>rake doc:guides</p></blockquote>
<p>Os creara en la carpeta doc/guides de vuestro proyecto una serie de guías de documentación para empezar con rails. Pijadas de esta gente. Por cierto si queréis ver todas las tareas rake que tenéis por defecto en vuestro proyecto creado con rails hacer:</p>
<blockquote><p>rake -T</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.semillasl.com/2009/01/clase-1-curso-ror-09/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Inauguración curso interno RoR</title>
		<link>http://www.semillasl.com/2009/01/inauguracion-curso-interno-ror/</link>
		<comments>http://www.semillasl.com/2009/01/inauguracion-curso-interno-ror/#comments</comments>
		<pubDate>Thu, 22 Jan 2009 21:04:48 +0000</pubDate>
		<dc:creator>jaime</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Curso RoR 2009]]></category>
		<category><![CDATA[RoR]]></category>

		<guid isPermaLink="false">http://www.semillasl.com/?p=6</guid>
		<description><![CDATA[Este post es para inaugurar un curso interno para todos los informáticos de IEPALA (“semilla” no os cobrará por esto) en RoR.
Será sin ritmo, con un profesor un tanto novato, pero creo que interesante para todos. Confirmar vuestra presencia (se admiten comentarios).

El plan es tener un par de sesiones presenciales preparadas, y luego ir viendo [...]]]></description>
			<content:encoded><![CDATA[<p>Este post es para inaugurar un curso interno para todos los informáticos de IEPALA (“semilla” no os cobrará por esto) en RoR.</p>
<p>Será sin ritmo, con un profesor un tanto novato, pero creo que interesante para todos. Confirmar vuestra presencia (se admiten comentarios).</p>
<p><span id="more-6"></span></p>
<p>El plan es tener un par de sesiones presenciales preparadas, y luego ir viendo posibles quedadas, mientras avanzamos por comunicación diversa (correo, y este blog).</p>
<p><strong>OBJETIVO GENERAL:</strong> Que os lancéis a poder hacer cosas en RoR.</p>
<p><strong>OBJETIVOS ESPECÍFICOS:</strong><br />
* Manejarse en Ruby.<br />
* Entender el framework Rails.<br />
* Debatir la cultura Rails.<br />
* Que podáis empezar a desarrollar o tocar cosas en RoR.<br />
* Debatir RoR en el marco de problemas/soluciones concretas.</p>
<p><strong>OBJETIVO TANGENCIAL:</strong><br />
Definición conjunta de buenas practicas en el desarrollo. SVN, TRAC,<br />
Testing.</p>
<p><strong>METODOLOGÍA:</strong><br />
* Guiada por el desarrollo de una aplicación.<br />
* Encuentros presenciales para unificar ritmo.<br />
* Correos o posts sobre referencias y pasos básicos.<br />
* Solucionar por correo problemas o dudas (al ritmo que se pueda).</p>
<p><strong>Tiempo total del curso:</strong> Pendiente de negociación, pero asi de arranque un par de meses (Febrero y Marzo).</p>
<p>Bueno, en definitiva, este primer post era para crear el tag: “curso RoR 09”</p>
]]></content:encoded>
			<wfw:commentRss>http://www.semillasl.com/2009/01/inauguracion-curso-interno-ror/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Proxy inverso con squid</title>
		<link>http://www.semillasl.com/2008/06/proxy-inverso-con-squid/</link>
		<comments>http://www.semillasl.com/2008/06/proxy-inverso-con-squid/#comments</comments>
		<pubDate>Tue, 24 Jun 2008 14:49:35 +0000</pubDate>
		<dc:creator>javier</dc:creator>
				<category><![CDATA[Administración de sistemas]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[optimización]]></category>
		<category><![CDATA[squid]]></category>

		<guid isPermaLink="false">http://www.semillasl.com/?p=3</guid>
		<description><![CDATA[Cómo configurar squid para hacer de proxy inverso.]]></description>
			<content:encoded><![CDATA[<p>Hemos estado haciendo pruebas sobre como afectaría al rendimiento de nuestros servidores el web el poner delante de ellos una serie de cachés inversos de forma que e tráfico vaya contra estos cachés, vean si esa petición es una petición dinámica, si lo es remitirla a los servidores web y si no es que lo resuelva el sólo.</p>
<p>Hemos quedado gratamente satisfechos con las pruebas y muy posiblemente lo empecemos a implantar en algunos servicios que empiezan a tener mucho tráfico. Esto es más o menos lo que hemos hecho.</p>
<p><span id="more-3"></span></p>
<p>Nuestro esquema actual sería algo parecido a esto:</p>
<p><a href="http://www.semillasl.com/wp-content/uploads/2008/06/netcache.jpg"><img class="aligncenter size-full wp-image-4" title="netcache" src="http://www.semillasl.com/wp-content/uploads/2008/06/netcache.jpg" alt="Esquema del servicio, nos riáis ya tendréis crios..." width="420" height="300" /></a></p>
<p>Bueno vamos al lío de cómo se haría esto, lo primero sería saber que servicios vamos a tener que tocar para poner esto en marcha, en nuestro caso serían:</p>
<ul>
<li>Apache, no mucho para decirle que ahora también escuche por real.example.com</li>
<li>Bind9, para decirle que www.example.com es la máquina de cache</li>
<li>Squid, el que va a hacer el trabajo sucio</li>
</ul>
<p>En nuestro esquema cada servicio corre en una máquina distinta, así que empezaremos por apache y bind, que es donde menos hay que tocar&#8230;</p>
<p>En apache simplemente añadimos esta línea por cada dominio que queramos que sea resuelto por el cache:</p>
<blockquote><p>/etc/apache/sites-enabled/example.com</p>
<p>[...]</p>
<p>ServerAlias real.example.com</p>
<p>[..]</p></blockquote>
<p>Esto únicamente nos sirve para cuando queramos acceder al servidor sin pasar por la cache.</p>
<p>En la parte de bind, también es bastante sencillo, en el archivo de definición de la zona cambiamos la entrada del www</p>
<blockquote><p>/etc/bind/db.example.com</p>
<p>[...]</p>
<p>www  IN  CNAME  cache</p>
<p>[...]</p></blockquote>
<p>Ahora llega la parte importante instalar el squid y modificar la configuración para que haga de cache inverso.</p>
<p>Lo primero sería instalar squid con su orden favorita, apt-get install squid, urpmi squid, &#8220;instalame el squid becario&#8221;. En nuestro caso la configuración está hecha sobre una debian 4.0, pero no debería haber mucha diferencia entre nuestros unixes. Vamos a configurar squid</p>
<blockquote><p>/etc/squid/squid.conf</p>
<p>http_port 80 vhost # Si vamos a escuchar en el puerto 80 haciendo la vhost (proxy inverso, esto sería todo <img src='http://www.semillasl.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>hierarchy_stoplist cgi-bin ?</p>
<p>acl QUERY urlpath_regex cgi-bin \?<br />
cache deny QUERY</p>
<p>cache_mem 600 MB # tenemos 750MB y esta máquina sólo va a hacer esto&#8230;</p>
<p>maximum_object_size 30 MB # nos interesa cachear también archivos mas o menos grandes</p>
<p>maximum_object_size_in_memory 128 KB<br />
access_log /var/log/squid/access.log squid</p>
<p>hosts_file /etc/hosts # esto es importante, por que aqui es donde resolvemos a la máquina que realmente tiene el apache</p>
<p>refresh_pattern .        0    20%    4320</p>
<p>collapsed_forwarding on<br />
acl all src 0.0.0.0/0.0.0.0<br />
acl manager proto cache_object<br />
acl localhost src 127.0.0.1/255.255.255.255<br />
acl to_localhost dst 127.0.0.0/8</p>
<p>acl Safe_ports port 80        # http</p>
<p>acl purge method PURGE<br />
acl CONNECT method CONNECT<br />
http_access allow manager localhost<br />
http_access deny manager<br />
http_access allow purge localhost<br />
http_access deny purge<br />
http_access deny !Safe_ports<br />
http_access deny to_localhost<br />
acl dominios dstdomain &#8220;/etc/squid/dominios&#8221; all # esto es importante en este fichero le decimos a squid los dominios que vamos a cachear<br />
http_access allow dominios<br />
always_direct allow dominios<br />
http_access allow localhost<br />
http_access deny all<br />
http_reply_access allow all</p>
<p>icp_access allow all</p>
<p>cache_effective_group proxy<br />
visible_hostname cache-001.example.com # podemos tener muchos <img src='http://www.semillasl.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>coredump_dir /var/spool/squid</p></blockquote>
<p>Tachan! ya casi lo tenemos, ahora hemos dejado dos ficheros más que debemos tocar</p>
<blockquote><p>/etc/squid/dominios</p>
<p>www.example.com</p>
<p>example.com</p>
<p>coreapp.example.com</p></blockquote>
<blockquote><p>/etc/hosts</p>
<p>[...]</p>
<p>192.168.0.2 www.example.com example.com</p>
<p>192.168.0.3 copreapp.example.com</p>
<p>[...]</p></blockquote>
<p>y ya releemos las configuraciones de todos los servicios y a ver como el dns va llevando poco a poco el tráfico al caché.</p>
<p>Es interesante que se instalen siempre algunas estadísticas&#8230; pero eso ya será otro artículo rápido como este.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.semillasl.com/2008/06/proxy-inverso-con-squid/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

