<?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>SISTEMAS O.R.P &#187; Informática</title>
	<atom:link href="http://www.sistemasorp.es/category/informatica/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.sistemasorp.es</link>
	<description>Blog sobre desarrollos y otros temas</description>
	<lastBuildDate>Sat, 03 Jul 2010 07:15:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Base de datos de IPs</title>
		<link>http://www.sistemasorp.es/2009/12/24/base-de-datos-de-ips/</link>
		<comments>http://www.sistemasorp.es/2009/12/24/base-de-datos-de-ips/#comments</comments>
		<pubDate>Thu, 24 Dec 2009 08:43:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Informática]]></category>

		<guid isPermaLink="false">http://www.sistemasorp.es/?p=263</guid>
		<description><![CDATA[Hoy en día se puede saber de cualquier IP a qué ciudad pertenece (incluso a veces hasta el barrio). Para ello existen bases de datos en Internet donde se puede consultar este tipo de información. En concreto voy a comentar sobre un sitio que ofrece este servicio gratis y es mantenido por donaciones. Se llama [...]]]></description>
			<content:encoded><![CDATA[<p>Hoy en día se puede saber de cualquier IP a qué ciudad pertenece (incluso a veces hasta el barrio). Para ello existen bases de datos en Internet donde se puede consultar este tipo de información.</p>
<p>En concreto voy a comentar sobre un sitio que ofrece este servicio gratis y es mantenido por donaciones. Se llama <a href="http://ipinfodb.com/" target="_blank">IPInfoDB</a>. Provee varios servicios:</p>
<ul>
<li><a href="http://ipinfodb.com/ip_locator.php" target="_blank">Búsqueda por formulario</a>.</li>
<li><a href="http://ipinfodb.com/ip_location_api.php" target="_blank">Búsqueda mediante API</a> mediante XML o JSON.</li>
<li><a href="http://ipinfodb.com/ip_database.php" target="_blank">Descarga de base de datos</a> en formato CSV o querys SQL y una precisión a nivel de país o de ciudad.</li>
</ul>
<p>Los usos que se le pueden dar son muchos: Saber desde donde te envían los comentarios, crear un servicio en internet destinado a un país o ciudad en concreto, conocer donde están ubicados los datacenters de un dominio determinado, personalizar el idioma de una página al usuario que la visita, etc.</p>
<p>La información se actualiza a principios de cada mes.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sistemasorp.es/2009/12/24/base-de-datos-de-ips/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ejecutar un script nada más recibir un correo con postfix</title>
		<link>http://www.sistemasorp.es/2009/11/20/ejecutar-un-script-nada-mas-recibir-un-correo-con-postfix/</link>
		<comments>http://www.sistemasorp.es/2009/11/20/ejecutar-un-script-nada-mas-recibir-un-correo-con-postfix/#comments</comments>
		<pubDate>Fri, 20 Nov 2009 10:41:43 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Informática]]></category>

		<guid isPermaLink="false">http://www.sistemasorp.es/?p=250</guid>
		<description><![CDATA[El servidor de correo Postfix es muy potente y altamente configurable. Ente sus multiples opciones, una de ellas es permitir realizar una acción al recibir un correo y esto se puede aprovechar (como se verá más adelante) para ejecutar un script o programa al recibir un correo. La ventaja con respecto a estar comprobando cada [...]]]></description>
			<content:encoded><![CDATA[<p>El servidor de correo Postfix es muy potente y altamente configurable.</p>
<p>Ente sus multiples opciones, una de ellas es permitir realizar una acción al recibir un correo y esto se puede aprovechar (como se verá más adelante) para ejecutar un script o programa al recibir un correo.</p>
<p>La ventaja con respecto a estar comprobando cada cierto tiempo un buzón de correo es que el script se ejecuta inmediatamente al recibir un correo , no hace falta tener un servidor pop3 y no hace falta borrar el mensaje porque postfix se lo pasa a la aplicación y no lo guarda en ningún sitio.</p>
<p>Para explicar como configurarlo, parto de la base de que ya se tiene configurado el postfix con un dominio y recibe correos en ese dominio. En mi caso tengo el dominio <em>sistemasorp.com</em> dirigido a mi servidor casero.</p>
<p>Como no quiero que interfiera con el correo de mi dominio actual, he de crear un nuevo registro MX en mi servidor DNS para añadir un subdominio, por ejemplo <em>servicios.sistemasorp.com</em> (esto también me dá una ventaja que comentaré más adelante).</p>
<p>El siguiente paso es acceder como root a la consola y entrar en el directorio <strong>/etc/postfix</strong> (o donde se encuentre el directorio de configuración del postfix).</p>
<p>Editar el fichero <strong>main.cf</strong> y añadirlas siguientes lineas (si no existían ya)</p>
<blockquote><p><strong>transport_maps = hash:/etc/postfix/transport</strong></p>
<p><strong>local_recipient_maps=</strong></p></blockquote>
<p>Editar el fichero <strong>master.cf</strong> y añadir la siguiente linea:</p>
<blockquote><p><strong><em>XXX</em> unix    -       n       n       -       1       pipe  flags= user=<em>YYY</em> argv=<em>ZZZ</em> ${sender} ${recipient}</strong></p></blockquote>
<ul>
<li>XXX indica el nombre de una alias, en mi caso <em>servicios</em></li>
<li>YYY es el usuario del sistema con el que se ejecutará el script (escoge uno que tenga persmisos para lo que quieras hacer)</li>
<li>ZZZ es la ruta del script o programa que quieres que se ejecute, en mi caso /usr/local/bin/emailprueba.sh</li>
<li>${sender} y ${recipient} son dos variables que le pasamos por parámetros al script.</li>
</ul>
<p>Editar el fichero transport y añadir la siguiente linea:</p>
<blockquote><p><strong>subdominio      XXX:localhost</strong></p></blockquote>
<ul>
<li>subdominio es la parte entera del dominio, en mi caso servicios.sistemasorp.com</li>
<li>XXX indica el nombre del alias que usamos en el fichero master.cf, en mi caso <em>servicios</em></li>
</ul>
<p>Finalmente ejecutar <strong>postmap /etc/postfix/transport</strong> para crear la base de datos de transportes de postfix.</p>
<p>Con esto, cualquier correo que se dirija al subdominio que hemos creado se pasará directamente a nuestro script. De ahí nuestra ventaja que comentaba antes: da igual el nombre que aparezca a la izquierda de la arroba, no hace falta que esté dado de alta como usuario en linux, por lo que podemos usarlo como un identificador de servicio, el número de un móvil, etc.</p>
<p>Postfix lo que hace es ejecutar el script pasándole por la entrada estandar todo el contenido del mensaje (cabeceras y cuerpo) y como parámetros los que se le indiquen en el <em>master.cf</em> : la variable ${sender} es la cuenta de correo electrónico del remitente y ${recipient} es el nombre que aparece a la izquierda de la arroba, aunque <a href="http://www.postfix.org/pipe.8.html" target="_blank">hay muchos más</a>.</p>
<p>Así por ejemplo si queremos tener un servicio de envío de sms podemos crear un mensaje dirigido a 699999999@servicios.sistemasorp.com desde nuestra cuenta google@gmail.com, por lo que el script además de recibir el mensaje entero recibe como parámetros google@gmail.com y 699999999.</p>
<p>Otro ejemplo es tener un servicio de envío de ficheros y uno de traducción de palabras. En el primer caso si enviamos un correo desde nuestra cuenta google@gmail.com a enviame@servicios.sistemasorp.com y como asunto ponemos una URL nos enviaría de vuelta como fichero adjunto el indicado en la URL. En el segundo caso si enviamos un correo desde nuestra cuenta google@gmail.com a traduce@servicios.sistemasorp.com y como asunto ponemos una palabra en inglés nos enviaría de vuelta la traducción del termino. En ambos casos el script es el mismo y se encarga de saber qué servicio estas solicitando por el nombre de la cuenta de correo al que va dirigido y actuar en consecuencia.</p>
<p>Un script sencillo para ir probando los conceptos es este:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">while</span> <span style="color: #c20cb9; font-weight: bold;">read</span> linea
<span style="color: #000000; font-weight: bold;">do</span>
 <span style="color: #007800;">cabecera</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$linea</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">cut</span> <span style="color: #660033;">-d</span><span style="color: #ff0000;">':'</span> -f1<span style="color: #000000; font-weight: bold;">`</span>
 <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$cabecera</span>&quot;</span> = Subject <span style="color: #7a0874; font-weight: bold;">&#93;</span>
 <span style="color: #000000; font-weight: bold;">then</span>
  <span style="color: #007800;">mensaje</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$linea</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">cut</span> <span style="color: #660033;">-d</span><span style="color: #ff0000;">':'</span> -f2<span style="color: #000000; font-weight: bold;">`</span>
  <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$mensaje</span> $<span style="color: #000000;">2</span> <span style="color: #000000; font-weight: bold;">|</span> mail <span style="color: #660033;">-s</span> <span style="color: #ff0000;">&quot;Esto es lo que enviaste y a quien&quot;</span> $<span style="color: #000000;">1</span>
  <span style="color: #7a0874; font-weight: bold;">echo</span> $<span style="color: #000000;">1</span> $<span style="color: #000000;">2</span> <span style="color: #007800;">$mensaje</span> <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>tmp<span style="color: #000000; font-weight: bold;">/</span>pruebamail
 <span style="color: #000000; font-weight: bold;">fi</span>
<span style="color: #000000; font-weight: bold;">done</span></pre></div></div>

<p>Simplemente recibe un correo y vuelve a enviar al remitente otro correo con los datos que envió. Lo podeis probar enviando un mensaje a pepe@servicios.sistemasorp.com, prueba_de_concepto@servicios.sistemasorp.com, asdfhasdjlfhasdjkfhjkdfh@servicios.sistemasorp.com o el destinatario que querais@servicios.sistemasorp.com y un asunto cualquiera (si no lo recibis mirad que no se haya puesto en vuestra carpeta de spam).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sistemasorp.es/2009/11/20/ejecutar-un-script-nada-mas-recibir-un-correo-con-postfix/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adiós dominios, adiós</title>
		<link>http://www.sistemasorp.es/2009/11/02/adios-dominios-adios/</link>
		<comments>http://www.sistemasorp.es/2009/11/02/adios-dominios-adios/#comments</comments>
		<pubDate>Mon, 02 Nov 2009 14:26:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Informática]]></category>
		<category><![CDATA[dominio]]></category>
		<category><![CDATA[internet]]></category>

		<guid isPermaLink="false">http://www.sistemasorp.es/2009/11/02/adios-dominios-adios/</guid>
		<description><![CDATA[Me he deshecho de dos dominios de internet que ya no quería seguir manteniendo. Uno de ellos es quejateportodo.com. Este es muy antiguo y data de 2001. Su función principal fue albergar una especie de foro donde la gente expusiera sus quejas sobre los temas que quisieran. Estába organizado por secciones para poder clasificar mejor [...]]]></description>
			<content:encoded><![CDATA[<p>Me he deshecho de dos dominios de internet que ya no quería seguir manteniendo.</p>
<p>Uno de ellos es quejateportodo.com. Este es muy antiguo y data de 2001. Su función principal fue albergar una especie de foro donde la gente expusiera sus quejas sobre los temas que quisieran. Estába organizado por secciones para poder clasificar mejor las quejas. Como anécdota os puedo contar que una vez me llamó la Policía Local de Granada por una denuncia que había puesto el dueño de unos parkings por unas criticas feroces a su gestión publicadas en la web; como le pedí una orden judicial para darle los logs del servidor web se calló y no volví a saber nada de el (¿Sería el propio dueño de los parkings haciendose pasar por la policía?). Finalmente como hice varios cambios y veía que no tenía mucho éxito lo dediqué a otras cosas.</p>
<p>El segundo es horaylugar.com. Una web donde podías crear citas, eventos, reuniones, etc y localizarlas en un mapa para después enviarselo a quien quisieras. Lo presenté al único concurso de mashups de Google Maps y quedó 4º, pero debido a su poco éxito lo abandoné a su suerte.</p>
<p>Actualmente ya sólo tengo los dominios sistemasorp.com (el dominio que apunta a mi servidor casero basado el linux), sistemasorp.net (el dominio asociado a mi cuenta de hosting) y sistemasorp.es (este blog)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sistemasorp.es/2009/11/02/adios-dominios-adios/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Un desinstalador de .NET Framework</title>
		<link>http://www.sistemasorp.es/2009/10/30/un-desinstalador-de-net-framework/</link>
		<comments>http://www.sistemasorp.es/2009/10/30/un-desinstalador-de-net-framework/#comments</comments>
		<pubDate>Fri, 30 Oct 2009 10:35:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Informática]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[desinstalador]]></category>
		<category><![CDATA[framework]]></category>

		<guid isPermaLink="false">http://www.sistemasorp.es/?p=237</guid>
		<description><![CDATA[Hoy en el trabajo he tenido un problema con una instalación de .NET Framework 2.0. Ni dejaba instalar el SQL Server 2005 ni se dejaba desinstalar así misma. Así que buscando por Internet he encontrado el .NET Framework Cleanup que me ha funcionado a las mil maravillas.]]></description>
			<content:encoded><![CDATA[<p>Hoy en el trabajo he tenido un problema con una instalación de .NET Framework 2.0. Ni dejaba instalar el SQL Server 2005 ni se dejaba desinstalar así misma.</p>
<p>Así que buscando por Internet he encontrado el <a href="http://blogs.msdn.com/astebner/pages/8904493.aspx" target="_blank">.NET Framework Cleanup</a> que me ha funcionado a las mil maravillas.</p>
<p><a href="http://www.sistemasorp.es/wp-content/uploads/2009/10/netcleanup.PNG"><img class="alignnone size-medium wp-image-238" title="netcleanup" src="http://www.sistemasorp.es/wp-content/uploads/2009/10/netcleanup-300x186.PNG" alt="netcleanup" width="300" height="186" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sistemasorp.es/2009/10/30/un-desinstalador-de-net-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Geocities cierra</title>
		<link>http://www.sistemasorp.es/2009/10/26/geocities-cierra/</link>
		<comments>http://www.sistemasorp.es/2009/10/26/geocities-cierra/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 14:00:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Informática]]></category>

		<guid isPermaLink="false">http://www.sistemasorp.es/?p=233</guid>
		<description><![CDATA[Hoy me he enterado que Geocities cierra, la web de hosting que operaba desde 1994 y que más tarde fue comprada por Yahoo. La verdad es que me ha entrado un poco de nostalgia. No en vano fue mi primer sitio de hosting allá por 1996 (me dí de alta en hotmail y geocities con [...]]]></description>
			<content:encoded><![CDATA[<p>Hoy <a href="http://www.elmundo.es/elmundo/2009/10/26/navegante/1256559950.html" target="_blank">me he enterado que Geocities cierra</a>, la web de hosting que operaba desde 1994 y que más tarde fue comprada por Yahoo.</p>
<p>La verdad es que me ha entrado un poco de nostalgia. No en vano fue mi primer sitio de hosting allá por 1996 (me dí de alta en hotmail y geocities con un equipo que estaba en el SIMO conectado a Internet).</p>
<p>Aún recuerdo cuando me compré un libro de bolsillo de HTML de Anaya y pocos días después fuí con un disquete de 720 kbytes al primer cybercafé que hubo en Madrid (no recuerdo su nombre) en los bajos de Azca y subí todos los ficheros de lo que fué mi primera página web. Por aquél entonces tenías que elegir tu vecindario donde clasificar tu web, yo usé SiliconValley.</p>
<p>Ha llovido mucho desde entonces, pero es bueno saber que yo, como muchos, fuimos testigos de la revolución que Internet estaba a punto de ser.</p>
<p>Antes de Internet mi conexión era por modem a BBS y hasta fuí punto de Fidonet, de Subnet y de Darknet. Era otro mundo: frontdoor, fmail, golded&#8230;</p>
<p>Es una lástima cómo van cayendo los veteranos de Internet al igual que fue una lástima ver como Fidonet y las BBS fueron desapareciendo y perdiendo importancia.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sistemasorp.es/2009/10/26/geocities-cierra/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Programar la cámara IP Zaapa CIPRW (ZA-CIPRW) en .NET</title>
		<link>http://www.sistemasorp.es/2009/08/12/programar-la-camara-ip-zaapa-ciprw-za-ciprw-en-net/</link>
		<comments>http://www.sistemasorp.es/2009/08/12/programar-la-camara-ip-zaapa-ciprw-za-ciprw-en-net/#comments</comments>
		<pubDate>Wed, 12 Aug 2009 10:47:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Informática]]></category>
		<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[cámara]]></category>
		<category><![CDATA[ciprw]]></category>
		<category><![CDATA[ocx]]></category>
		<category><![CDATA[zaapa]]></category>

		<guid isPermaLink="false">http://www.sistemasorp.es/?p=201</guid>
		<description><![CDATA[Uno de los problemas que veo con la cámara IP Zaapa que me compré es que sólo se puede manejar desde un navegador Internet Explorer, y la verdad es que eso le quita mucho potencial a una cámara tan completa y barata como esta. Por eso me he puesto manos a la obra para desengranar [...]]]></description>
			<content:encoded><![CDATA[<p>Uno de los problemas que veo con la cámara IP Zaapa que <a href="http://www.sistemasorp.es/2008/09/14/zaapa-ciprw-za-ciprw/" target="_blank">me compré</a> es que sólo se puede manejar desde un navegador Internet Explorer, y la verdad es que eso le quita mucho potencial a una cámara tan completa y barata como esta. Por eso me he puesto manos a la obra para desengranar un poco el funcionamiento y poder crear una aplicación de escritorio para poder manejarla.</p>
<p>Todo el trabajo de investigación ha estado centrado en ver cómo funciona el código fuente javascript de la página web que ofrece la cámara zaapa, ya que buscando por internet no he encontrado nada sobre cómo manejarla.</p>
<p>Lo primero que nos encontramos es que instancia un objeto llamado DVM_IPCam2.ocx. Buscando por internet he encontrado muy poca información sobre ese fichero en cuestión y mucho menos de la API OLE que encierra.</p>
<p>Por suerte el Visual Studio .NET puede incorporar ocx y ver de una tacada todos los métodos, propiedades y eventos que maneja el control ocx. Para ello dentro del <strong>Cuadro de herramientas</strong>, se pulsa con el botón derecho en <strong>Componentes</strong> y se selecciona <strong>Elegir Elementos&#8230;</strong> Después se pulsa sobre la pestaña <strong>Componentes COM</strong> y se selecciona <strong>DVM_IPCam2 Control</strong>.</p>
<p><a href="http://www.sistemasorp.es/wp-content/uploads/2009/08/dvmipcam2.JPG"><img class="alignnone size-medium wp-image-203" title="dvmipcam2" src="http://www.sistemasorp.es/wp-content/uploads/2009/08/dvmipcam2-300x221.jpg" alt="dvmipcam2" width="300" height="221" /></a></p>
<p>Si no existiese es que no está registrado en Windows. Entonces habría que descargar el ocx desde la dirección <em>http://&lt;ip de la camara&gt;/codebase/DVM_IPCam2.ocx</em>, guardarlo en <em>c:\windows\system32</em> y desde una consola de ms-dos ejecutar <strong>regsvr32 c:\windows\system32<em>\</em>DVM_IPCam2.ocx</strong> y después volver a repetir el proceso de Visual Studio.</p>
<p>Con esto ya tendremos el componente ocx para insertarlo en el formulario. Ahora para acceder a la cámara hay que seguir los siguientes pasos:</p>
<ul>
<li>Conectar con la cámara usando el método MonitorConnect, pasándole como parámetros la dirección host o ip de la cámara, el puerto por el que escucha (normalmente el 80), el usuario y la contraseña.</li>
<li>Capturar el evento OnMonitorConnectResult y si la conexión ha sido satisfactoria pasar al siguiente punto</li>
<li>Empezar a recibir las imágenes dentro del control ocx usando el método PlayVideo.</li>
<li>Esperar a recibir las imágenes con el evento OnPlayVideoResult.</li>
<li>Hacer el resto de operaciones: mover la cámara con el método DecoderControl, hacer fotografías con el método Photo2, grabar un video con el método StartRecord2, reiniciar la cámara con el método RebootCamera, etc.</li>
<li>Cuando se termine de trabajar con la cámara llamar a los métodos StopVideo, StopRecord y MonitorDisconnect.</li>
</ul>
<p>He desarrollado una pequeña aplicación que muestra estos conceptos. No hace comprobaciones de errores para simplificar el código:</p>
<p><a href="http://www.sistemasorp.es/wp-content/uploads/2009/08/aplicacioncamara.JPG"><img class="alignnone size-full wp-image-204" title="aplicacioncamara" src="http://www.sistemasorp.es/wp-content/uploads/2009/08/aplicacioncamara.JPG" alt="aplicacioncamara" width="486" height="269" /></a></p>
<p>Podeis descargar el código fuente en c# y un ejecutable desde <a href="http://www.sistemasorp.es/camarazaapa/camarazaapa.zip">aquí</a>.</p>
<p>El siguiente paso sería tratar de hacer que funcionase el firefox para windows y en un futuro conocer el protocolo para manejarlo desde linux, desde un iphone o desde cualquier otro entorno.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sistemasorp.es/2009/08/12/programar-la-camara-ip-zaapa-ciprw-za-ciprw-en-net/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Capturar el escritorio o una ventana de windows con .NET</title>
		<link>http://www.sistemasorp.es/2009/07/09/capturar-el-escritorio-o-una-ventana-de-windows-con-net/</link>
		<comments>http://www.sistemasorp.es/2009/07/09/capturar-el-escritorio-o-una-ventana-de-windows-con-net/#comments</comments>
		<pubDate>Thu, 09 Jul 2009 11:52:48 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Informática]]></category>
		<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[captura]]></category>
		<category><![CDATA[capturar]]></category>
		<category><![CDATA[escritorio]]></category>
		<category><![CDATA[ventana]]></category>

		<guid isPermaLink="false">http://www.sistemasorp.es/?p=195</guid>
		<description><![CDATA[En el trabajo los usuarios nos envían incidencias de las aplicaciones, pero en muy pocas ocasiones adjuntan un &#8220;pantallazo&#8221; del error. Entiendo que el proceso de pulsar Impr Pant, irse al paint, pegar la imágen, guardarla en JPG y adjuntarla a la incidencia es algo que no saben muchos usuarios. Por eso se me ocurrió [...]]]></description>
			<content:encoded><![CDATA[<p>En el trabajo los usuarios nos envían incidencias de las aplicaciones, pero en muy pocas ocasiones adjuntan un &#8220;pantallazo&#8221; del error. Entiendo que el proceso de pulsar <em>Impr Pant</em>, irse al paint, pegar la imágen, guardarla en JPG y adjuntarla a la incidencia es algo que no saben muchos usuarios.</p>
<p>Por eso se me ocurrió crear una aplicación sencilla en c# que gestionase todo ese proceso (excepto adjuntar la imágen a la incidencia). Tomando como base <a href="http://www.developerfusion.com/code/4630/capture-a-screen-shot/" target="_blank">este artículo</a> he desarrollado la aplicación <strong>CapturaVentana</strong> (ciertamente no me he escornado buscando el nombre) debido a que el escritorio o una ventana son lo mismo para windows.</p>
<p><a href="http://www.sistemasorp.es/wp-content/uploads/2009/07/ventana.jpg"><img class="alignnone size-full wp-image-197" title="ventana" src="http://www.sistemasorp.es/wp-content/uploads/2009/07/ventana.jpg" alt="ventana" width="496" height="139" /></a></p>
<p>Su uso es muy sencillo. Elegimos si queremos copiar el resultado al portapapeles o a un fichero jpg y pulsamos sobre el botón correspondiente de lo que queremos capturar (escritorio entero o una ventana individual). En el caso de capturar el escritorio la aplicación se esconde momentaneamente para que no aparezca en la &#8220;foto&#8221;. Si se trata de capturar una ventana hay que pulsar con el ratón sobre la ventana que queremos fotografiar después de haber pulsado el botón.</p>
<p>El código fuente se puede descargar desde <a href="http://www.sistemasorp.es/capturaventana/capturaventana.zip">aquí</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sistemasorp.es/2009/07/09/capturar-el-escritorio-o-una-ventana-de-windows-con-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>alarma</title>
		<link>http://www.sistemasorp.es/2009/06/09/alarma/</link>
		<comments>http://www.sistemasorp.es/2009/06/09/alarma/#comments</comments>
		<pubDate>Mon, 08 Jun 2009 22:13:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Electrónica]]></category>
		<category><![CDATA[Informática]]></category>
		<category><![CDATA[Proyectos]]></category>

		<guid isPermaLink="false">http://www.sistemasorp.es/?p=166</guid>
		<description><![CDATA[Hacía tiempo que no desarrollaba un proyecto con la fonera. En esta ocasión voy a hacer un sistema de alarma, la cual se activa cuando se pulsa un botón. Para ello me he hecho con lo siguientes materiales: Emisor de 1 canal Receptor de 1 canal Fonera Cuando alguien pulse el mando emisor, el receptor [...]]]></description>
			<content:encoded><![CDATA[<p>Hacía tiempo que no desarrollaba un proyecto con la fonera. En esta ocasión voy a hacer un sistema de alarma, la cual se activa cuando se pulsa un botón. Para ello me he hecho con lo siguientes materiales:</p>
<p><a href="http://fadisel.es/cebek-electronica/telemandos-rf-g1/emisor-rf-1-canal-cebek-tl-5_R_305_322.aspx" target="_blank">Emisor de 1 canal</a></p>
<p><img class="alignnone" src="http://img.icnea.net/Forum/E6001/fotos/TL-300-TOTSCOLORS.jpg" alt="" width="283" height="159" /></p>
<p><a href="http://fadisel.es/Producte.aspx?r=343" target="_blank">Receptor de 1 canal</a></p>
<p><img class="alignnone" src="http://img.icnea.net/Forum/E6001/fotos/tl-7-00.jpg" alt=""/></p>
<p><a href="https://shop.fon.com/FonShop/shop/ES/ShopController?view=product&amp;product=PRD-001" target="_blank">Fonera</a></p>
<p><a href="http://www.sistemasorp.es/wp-content/uploads/2009/06/getfile.gif"><img class="alignnone size-full wp-image-180" title="getfile" src="http://www.sistemasorp.es/wp-content/uploads/2009/06/getfile.gif" alt="getfile" width="170" height="180" /></a></p>
<p>Cuando alguien pulse el mando emisor, el receptor (alimentado por la fonera) recibirá la señal e informará a la fonera que se ha activado. Después la fonera se conectará a una página web para mandar un mensaje sms a un número de teléfono. Esto es útil por ejemplo para ancianos que desean solicitar asistencia, con sólo llevar el emisor colgado ya pueden enviar la alarma. Otra aplicación es una tienda donde se solicite ayuda en caso de robo, guardando el emisor debajo del mostrador o en el suelo.</p>
<p>Para ello, lo primero que se debe tener es la fonera con el firmware openwrt. Los pasos se pueden seguir <a href="http://www.fonera.info/index.php?topic=100.0" target="_blank">aquí</a>.</p>
<p>Después hay que instalar el módulo gpio. Los pasos se pueden seguir <a href="http://forum.openwrt.org/viewtopic.php?id=8912" target="_blank">aquí</a>.</p>
<p>A continuación hay que hacer que la fonera sea independiente del cable de red y se conecte como cliente al router wireless. Primero editamos el fichero /etc/config/wireless y ponemos lo siguiente:</p>
<pre>config wifi-device  wifi0
option type     atheros
option channel  5

config wifi-iface
option device   wifi0
option mode     sta
option ssid     &lt;SSID&gt;
option encryption wep
option key      &lt;CLAVE HEX&gt;</pre>
<p>Donde <strong>SSID</strong> es el nombre de la red wireless y <strong>CLAVE HEX</strong> la clave wep en hexadecimal (Para otras configuraciones mirar el documento de configuración <a href="http://kamikaze.openwrt.org/docs/openwrt.html#x1-120001.2.2" target="_blank">aquí</a>)</p>
<p>Segundo editamos el fichero /etc/config/network y ponemos lo siguiente:</p>
<pre># Copyright (C) 2006 OpenWrt.org

config interface loopback
option ifname   lo
option proto    static
option ipaddr   127.0.0.1
option netmask  255.0.0.0

config interface lan
option ifname   eth0
option proto    static
option ipaddr   192.168.1.200
option netmask  255.255.255.0

config interface wifi0
option ifname   ath0
option proto    dhcp</pre>
<p>Con estas configuraciones hacemos que el router de la fonera se conecte al punto de acceso como cliente y coja una ip mediante dhcp, sin la necesidad de tener un cable de red, por lo que podemos ponerla en cualquier lado. Por si acaso se deja una ip 192.168.1.200 en el puerto ethernet por si hubiera que conectarse a ella y no funcionase el wifi.</p>
<p>El siguiente paso es crear el script que recibirá por el gpio la señal del receptor. Creamos el fichero /usr/bin/alarma.sh con este contenido (poniendo el usuario, contraseña, numero de móvil y el mensaje a enviar):</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #000000;">1</span> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>proc<span style="color: #000000; font-weight: bold;">/</span>gpio<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">2</span>_dir
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #000000;">0</span> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>proc<span style="color: #000000; font-weight: bold;">/</span>gpio<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">1</span>_dir
<span style="color: #000000; font-weight: bold;">while</span> <span style="color: #c20cb9; font-weight: bold;">true</span>
<span style="color: #000000; font-weight: bold;">do</span>
        <span style="color: #007800;">estado</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">/</span>proc<span style="color: #000000; font-weight: bold;">/</span>gpio<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">1</span>_in<span style="color: #000000; font-weight: bold;">`</span>
        <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$estado</span> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>proc<span style="color: #000000; font-weight: bold;">/</span>gpio<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">2</span>_out
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$estado</span> <span style="color: #660033;">-eq</span> <span style="color: #000000;">1</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>
        <span style="color: #000000; font-weight: bold;">then</span>
                <span style="color: #c20cb9; font-weight: bold;">wget</span> <span style="color: #660033;">-q</span> <span style="color: #ff0000;">&quot;http://www.sistemasorp.net/alarma.php?login=&lt;USUARIO&gt;&amp;password=&lt;CLAVE&gt;&amp;destino=&lt;Nº MOVIL&gt;&amp;mensaje=&lt;MENSAJE&gt;&quot;</span>
                <span style="color: #000000; font-weight: bold;">while</span> <span style="color: #c20cb9; font-weight: bold;">true</span>
                <span style="color: #000000; font-weight: bold;">do</span>
                        <span style="color: #c20cb9; font-weight: bold;">sleep</span> <span style="color: #000000;">1</span>
                <span style="color: #000000; font-weight: bold;">done</span>
        <span style="color: #000000; font-weight: bold;">fi</span>
        <span style="color: #c20cb9; font-weight: bold;">sleep</span> <span style="color: #000000;">1</span>
<span style="color: #000000; font-weight: bold;">done</span></pre></div></div>

<p>Lo que hace el script es comprobar la salida del receptor cada segundo, si está activada enciende el led wlan de la fonera y accede a una página web php que envía mensajes sms con la <a href="http://open.movilforum.com/wiki/index.php/Interfaz_HTTP_de_envio_de_SMS" target="_blank">API de envío de SMS</a> del open movil forum, este es el código fuente:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #b1b100;">include</span> <span style="color: #0000ff;">'SMSSenderAPI.php'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$SMS</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">New</span> SMSSender<span style="color: #339933;">;</span>
<span style="color: #000088;">$SMS</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">SendMessage</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;login&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;password&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;destino&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;mensaje&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>El fichero SMSSenderAPI.php lo podeis descargar <a href="http://open.movilforum.com/sdk/PhpSDKr10/Docs/APIs/SMSSendAPI.html" target="_blank">aquí</a>. Los campos <strong>LOGIN</strong> y <strong>PASSWORD</strong> son para la api de open movilforum, el campo <strong>DESTINO</strong> es el número de móvil del destinatario y el campo <strong>MENSAJE</strong> el texto que se le enviará.</p>
<p>Después se edita el fichero /etc/firewall.user y se añade al final la siguiente linea <strong>sh /usr/bin/programa.sh &amp;</strong>.</p>
<p>En la parte hardware he sacado los cables de GPIO de la fonera y alimentación y masa al exterior:</p>
<p><a href="http://www.sistemasorp.es/wp-content/uploads/2009/06/imgp0885.jpg"><img class="alignnone size-medium wp-image-185" title="imgp0885" src="http://www.sistemasorp.es/wp-content/uploads/2009/06/imgp0885-300x225.jpg" alt="imgp0885" width="300" height="225" /></a><a href="http://www.sistemasorp.es/wp-content/uploads/2009/06/imgp0886.jpg"><img class="alignnone size-medium wp-image-186" title="imgp0886" src="http://www.sistemasorp.es/wp-content/uploads/2009/06/imgp0886-300x225.jpg" alt="imgp0886" width="300" height="225" /></a></p>
<p>Igualmente he quitado en el receptor el integrado 7805 para alimentar el circuito directamente desde la fonera con dos cables (alimentación y masa):</p>
<p><a href="http://www.sistemasorp.es/wp-content/uploads/2009/06/imgp0887.jpg"><img class="alignnone size-medium wp-image-187" title="imgp0887" src="http://www.sistemasorp.es/wp-content/uploads/2009/06/imgp0887-300x225.jpg" alt="imgp0887" width="300" height="225" /></a></p>
<p>Y soldado al pin 1 (el que se pone a 5 voltios si el circuito ha recibido una señal) del chip HEF4013BP un cable que irá directamente conectado al gpio 1 de la fonera:</p>
<p><a href="http://www.sistemasorp.es/wp-content/uploads/2009/06/imgp0888.jpg"><img class="alignnone size-medium wp-image-188" title="imgp0888" src="http://www.sistemasorp.es/wp-content/uploads/2009/06/imgp0888-300x225.jpg" alt="imgp0888" width="300" height="225" /></a></p>
<p>Y como colofón un video demostrativo:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/jFzcMRpTFkg&amp;hl=es&amp;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/jFzcMRpTFkg&amp;hl=es&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>En el vídeo se puede ver como pulso el botón del emisor, después el led de la fonera se pone en verde y finalmente se recibe un mensaje de texto indicando Alarma activada.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sistemasorp.es/2009/06/09/alarma/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Matar procesos desde .NET</title>
		<link>http://www.sistemasorp.es/2009/04/13/matar-procesos-desde-net/</link>
		<comments>http://www.sistemasorp.es/2009/04/13/matar-procesos-desde-net/#comments</comments>
		<pubDate>Mon, 13 Apr 2009 12:40:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Informática]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[matar]]></category>
		<category><![CDATA[proceso]]></category>

		<guid isPermaLink="false">http://www.sistemasorp.es/?p=125</guid>
		<description><![CDATA[El otro día me surgió la necesidad de matar un proceso desde  mi programa en .NET. Este proceso debía estar mal programado y se quedaba cargado en memoria constantemente si daba un error, pero necesitaba cargarlo cada vez que el usuario necesitaba interactuar con él desde mi programa. Por ello tuve que desarollar una función [...]]]></description>
			<content:encoded><![CDATA[<p>El otro día me surgió la necesidad de matar un proceso desde  mi programa en .NET. Este proceso debía estar mal programado y se quedaba cargado en memoria constantemente si daba un error, pero necesitaba cargarlo cada vez que el usuario necesitaba interactuar con él desde mi programa.</p>
<p>Por ello tuve que desarollar una función que hiciese esa labor:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">private</span> <span style="color: #FF0000;">bool</span> MataProceso<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">String</span> sNombre<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
 <span style="color: #0600FF;">foreach</span><span style="color: #000000;">&#40;</span>Process clsProcess <span style="color: #0600FF;">in</span> Process.<span style="color: #0000FF;">GetProcesses</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>
 <span style="color: #000000;">&#123;</span>
  <span style="color: #0600FF;">if</span><span style="color: #000000;">&#40;</span>clsProcess.<span style="color: #0000FF;">ProcessName</span>.<span style="color: #0000FF;">StartsWith</span><span style="color: #000000;">&#40;</span>sNombre<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>
  <span style="color: #000000;">&#123;</span>
   clsProcess.<span style="color: #0000FF;">Kill</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
   clsProcess.<span style="color: #0000FF;">WaitForExit</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
   <span style="color: #0600FF;">return</span> true<span style="color: #008000;">;</span>
  <span style="color: #000000;">&#125;</span>
 <span style="color: #000000;">&#125;</span>
 <span style="color: #0600FF;">return</span> false<span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p>Se le pasa como parámetro el nombre del proceso o los primeros carácteres y devuelve <em>true</em> si lo ha matado o <em>false</em> en caso contrario. Este internamente recorre toda la lista de procesos comprobando el nombre de cada uno de ellos y cuando coincida procede a matarlo. Se debe incluir el espacio de nombres <em>System.Diagnostics</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sistemasorp.es/2009/04/13/matar-procesos-desde-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trucos para el buscaminas y el Pinball</title>
		<link>http://www.sistemasorp.es/2009/03/28/trucos-para-el-buscaminas-y-el-pinball/</link>
		<comments>http://www.sistemasorp.es/2009/03/28/trucos-para-el-buscaminas-y-el-pinball/#comments</comments>
		<pubDate>Sat, 28 Mar 2009 11:08:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Informática]]></category>
		<category><![CDATA[buscaminas]]></category>
		<category><![CDATA[pinball]]></category>
		<category><![CDATA[trucos]]></category>

		<guid isPermaLink="false">http://www.sistemasorp.es/?p=123</guid>
		<description><![CDATA[He estado un tiempo sin escribir en el blog porque me han operado en Febrero y he estado de baja por más de un mes. Ahora que ya me estoy recuperando e incluso ya estoy trabajando desde principios de este mes empiezo a retomar mi vida normal, entre otras cosas mi blog. Para empezar, unos [...]]]></description>
			<content:encoded><![CDATA[<p>He estado un tiempo sin escribir en el blog porque me han operado en Febrero y he estado de baja por más de un mes.</p>
<p>Ahora que ya me estoy recuperando e incluso ya estoy trabajando desde principios de este mes empiezo a retomar mi vida normal, entre otras cosas mi blog.</p>
<p>Para empezar, unos trucos para el juego del buscaminas y para el pinball que vienen en cualquier windows por defecto.</p>
<p><strong>Buscaminas:</strong></p>
<p>Si arrancas el buscaminas, pulsas <em>X Y Z Z Y</em> y luego <em>shift + Intro</em> podrás poner el cursor del ratón encima de cualquier cuadrado y en la esquina superior izquierda de la pantalla verás un pixel blanco que te indica que no hay mina debajo o negro si la hay.</p>
<p><strong>Pinball:</strong></p>
<ul>
<li>Para conseguir bolas extras escribe <em>1max</em></li>
<li>Para activar el pozo gravitatorio teclea <em>gmax</em></li>
<li>Para ascender de rango escribe <em>rmax</em></li>
<li>Para tener un número de bolas infinito escribe <em>bmax</em></li>
<li>Para mover la bola con el ratón escribe <em>hidden test </em>(con espacio incluido).</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.sistemasorp.es/2009/03/28/trucos-para-el-buscaminas-y-el-pinball/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>
