<?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>nordri&#039;s Blog &#187; email</title>
	<atom:link href="http://www.muspells.net/blog/tag/email/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.muspells.net/blog</link>
	<description>Estamos trabajando en ello...</description>
	<lastBuildDate>Fri, 13 Aug 2010 16:59:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=abc</generator>
		<item>
		<title>Notificando Nuevas Series Compartidas</title>
		<link>http://www.muspells.net/blog/2010/05/notificando-nuevas-series-compartidas/</link>
		<comments>http://www.muspells.net/blog/2010/05/notificando-nuevas-series-compartidas/#comments</comments>
		<pubDate>Thu, 27 May 2010 19:12:31 +0000</pubDate>
		<dc:creator>nordri</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[consola]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[incron]]></category>
		<category><![CDATA[monitorizar]]></category>
		<category><![CDATA[torrent]]></category>
		<category><![CDATA[usuario]]></category>

		<guid isPermaLink="false">http://www.muspells.net/blog/?p=318</guid>
		<description><![CDATA[Como todo buen friki que se precie, sigo un montón de series, tantas que mis usuarios se pierden cada día buscando las novedades en la carpeta compartida por NFS que tengo en mi red. El directorio compartido es /mnt/almacen/Media, un Seagate Barracuda de 1TB, de ahí cuelgan las series cada una en su directorio, muy [...]]]></description>
			<content:encoded><![CDATA[<p>Como todo buen friki que se precie, sigo un montón de series, tantas que mis usuarios se pierden cada día buscando las novedades en la carpeta compartida por NFS que tengo en mi red. El directorio compartido es /mnt/almacen/Media, un Seagate Barracuda de 1TB, de ahí cuelgan las series cada una en su directorio, muy bien ordenado.</p>
<p>Pues bien, apoyandome en el demonio Incron, he creado un sistema para notificar por correo electrónico a mi lusers cada novedad. El problema es que incron no implementa todavía la recursividad sobre subdirectorios, así que hay que supervisar cada uno por separado.</p>
<p>Este es el contenido:</p>
<pre>
bigBangTheory            Dollhouse           House          Mental               Numbers         RobinsonCrusoe    TheBeast
Bones                    EntreFantasmas      Hung           MentesCriminales     Olvidados       RomaCriminal      TheITCrowd
cocheFantastico          Eureka              incoming       Mercy                PadreDeFamilia  SamanthaWho       TheListener
ComoConociAVuestraMadre  EverybodyHateChris  kyle           Mienteme             pelisVistas     scrubs            TorchWood
csi                      FlashForward        LaPeceraDeEva  Monk                 Psych           siesta            Trauma
Deadwood                 Greek               Life           MP3s                 Reaper          Simpson           TrueBlood
Dexter                   Heroes              LifeOnMars     MujeresDesesperadas  Ritchies        StargateAtlantis  videosChicos
Docus                    Historicas          meLlamoEarl    MyOwnWorstEnemy      RobinHood       supernatural      Weeds
</pre>
<p>Escribir una línea de incrontab para cada uno es algo que no estaba dispuesto a hacer, así que se recurre a find y awk.</p>
<pre>
find /mnt/almacen/Media/ -maxdepth 1 | awk '{ print $1 " IN_MOVED_TO /home/nordri/bin/incron/nuevoMedio.py $@ $# " }'
</pre>
<p>Este comando, que debemos redireccionar a un fichero, nos mostrará esto:</p>
<pre>
[...]
/mnt/almacen/Media/Mienteme IN_MOVED_TO /home/nordri/bin/incron/nuevoMedio.py $@ $#
[...]
</pre>
<p>Que creara un monitor para el directorio, en caso que algún fichero sea movido dentro del directorio, ejecutará el comando nuevoMedio.py con los parametros $@ y $# que son la ruta completa y el nombre del archivo.</p>
<p>Existen, también dos detalles, uno es el directorio <i>históricas</i> donde guardo las series finalizadas, canceladas y discontinuadas. Esto es porque me gusta saber que series he seguido. El otro detalle, es supervisar la raíz de Media para avisar en caso que se añada una nueva serie. Las líneas que hay que añadir al incrontab son las siguientes.
<pre>
/mnt/almacen/Media/Historicas IN_MOVED_TO /home/nordri/bin/incron/nuevoHistorico.py $#
/mnt/almacen/Media IN_CREATE /home/nordri/bin/incron/nuevoDirMedio.py $#
</pre>
<p>Bien, pasemos a la programación, todos los scripts son en el básico Python que manejo, pero que resulta útil para estas cuestiones. El script nuevoMedio.py</p>
<pre>
import avisoPorEmail
import sys
def getCategoria(t):
  c = t.split("/")
  l = len(c)
  return c[l-1]
categoria  = getCategoria(sys.argv[1])
email = open("/tmp/email", "w")
email.write("En la categoria : " + categoria + "\n\nSe ha compartido un nuevo archivo multimedia: \n\n" + sys.argv[2] + "\n\n enjoy <img src='http://www.muspells.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ")
email.close()
asunto = "Nuevo archivo multimedia"
direcciones = [ #direcciones# ]
avisoPorEmail.mail('/tmp/email', asunto, direcciones, 'txt')
</pre>
<p>Simplemente, recibe la ruta del directorio compartido, elimina las barras y nos quedamos el nombre de la serie, que será la categoría, el segundo parámetro es el nombre del archivo, que lleva consigo el episodio, y todo lo que los uploaders le añaden para autopromocionarse. Se escribe la cadena en un archivo y se manda por correo a las direcciones que se le indican en el array. Hay que avisar a los usuarios que miren en spam por si acaso. A mi me pasa.</p>
<p>Los scripts de nuevoDirMedio.py y nuevoHistorico.py son muy similares.</p>
<pre>
import avisoPorEmail
import sys
import os
categoria  = sys.argv[1]
email = open("/tmp/email", "w")
email.write("Se está siguiendo una nueva serie : " + categoria + "\n\n enjoy <img src='http://www.muspells.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ")
email.close()
asunto = "Nueva Serie"
direcciones = [ #direcciones# ]
# Dar de alta el nuevo directorio en incron
os.system('/home/nordri/bin/incron/nuevoDirVigilado.sh ' + categoria)
avisoPorEmail.mail('/tmp/email', asunto, direcciones, 'txt')
</pre>
<p>Prácticamente igual, la peculiaridad aquí está en que si creamos un nuevo directorio, debemos dar de alta el monitor para incron. Para ello utilizo el siguiente script.</p>
<pre>
echo "/mnt/almacen/Media/$1 IN_MOVED_TO /home/nordri/bin/incron/nuevoMedio.py \$@ \$#" > /tmp/tareaIncron.txt
incrontab -l >> /tmp/tareaIncron.txt
incrontab /tmp/tareaIncron.txt
</pre>
<p>Simple, no? Se escribe la tarea en un archivo auxiliar, se anexa el contenido del incrontab actual y se recarga usando el archivo auxiliar como base.</p>
<p>El último es para cuando una serie se pasa al histórico, así, </p>
<pre>
import avisoPorEmail
import sys
def getCategoria(t):
  c = t.split("/")
  l = len(c)
  return c[l-1]
categoria  = getCategoria(sys.argv[1])
email = open("/tmp/email", "w")
email.write("La serie : " + categoria + "\n\nHa sido cancelada o discontinuada. Perdone las molestias")
email.close()
asunto = "Serie abandonada"
direcciones = [ #Direcciones# ]
avisoPorEmail.mail('/tmp/email', asunto, direcciones, 'txt')
</pre>
<p>Pues bien, cada vez que algo se mueva del incoming del Torrent a su directorio se avisará a los usuarios con un correo electrónico. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.muspells.net/blog/2010/05/notificando-nuevas-series-compartidas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programando Tareas Para Cálculo Distribuido 2</title>
		<link>http://www.muspells.net/blog/2009/12/programando-tareas-para-calculo-distribuido-2/</link>
		<comments>http://www.muspells.net/blog/2009/12/programando-tareas-para-calculo-distribuido-2/#comments</comments>
		<pubDate>Fri, 11 Dec 2009 21:13:56 +0000</pubDate>
		<dc:creator>nordri</dc:creator>
				<category><![CDATA[Linux Script]]></category>
		<category><![CDATA[abaqus]]></category>
		<category><![CDATA[at]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[cola]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.muspells.net/blog/?p=301</guid>
		<description><![CDATA[Mucho tiempo ha pasado desde que escribí la primera versión del programa de para administrar la cola de cálculo distribuido, ya anda por su versión 0.5 y ha mejorado sustancialmente. Se comprueban más cosas que el usuario es propenso a equivocar y se pueden fraccionar las horas, esto es podemos lanzar un cálculo de hora [...]]]></description>
			<content:encoded><![CDATA[<p>Mucho tiempo ha pasado desde que escribí la primera versión del programa de para administrar la cola de cálculo distribuido, ya anda por su versión 0.5 y ha mejorado sustancialmente. Se comprueban más cosas que el usuario es propenso a equivocar y se pueden fraccionar las horas, esto es podemos lanzar un cálculo de hora y media, mientras que antes sólo era posible horas enteras. Esto es lo último añadido, los usuarios necesitaban una forma de lanzar cálculos pequeños (30 minutos o menos) sin perder la hora entera.</p>
<p>Se sigue mandando el correo con las información del cálculo y ahora también se <a href="https://twitter.com/clabaqus">twittea</a> como mandan las últimas tendencias. Para enviar el mensaje a <a href="https://twitter.com/">Twitter</a> se tiene que operar un poco para eliminar los guiones bajos y que quede más bonito, luego esos twitts pasan al blog que estamos preparando con WordPress para que aparezcan en el panel lateral los últimos cálculos que hemos mandado.</p>
<p>Otra cosa que se ha incorporado es el modo de operación, que es un deseo mio, cuando hago pruebas no necesito ni twitter ni email porque son pruebas. Lo demás sí aunque lo lance en un máquina virtual con una cola y un programa abaqus falsos.</p>
<p>Cuando el usuario se siente a lanzar un cálculo lo hará así:</p>
<pre>$ abaqusq input=Trabajo job=Resultados cpus=22 time=H.M email=user_email</pre>
<p>Aún nos queda pendiente crear una página web con la línea de tiempo de los cálculos, con el tiempo estara chulo ver como han evolucionado.</p>
<p>El código fuente se publica bajo licencia GPL <a href="http://pastie.org/private/nwvv8oitdq148ktnwwonha">aquí</a>, con la esperanza en que a alguien le sirva.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muspells.net/blog/2009/12/programando-tareas-para-calculo-distribuido-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
