Un desinstalador de .NET Framework

Informática Sin comentarios

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.

netcleanup

Geocities cierra

Informática 2 Comentarios

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 un equipo que estaba en el SIMO conectado a Internet).

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.

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.

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…

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.

Programar la cámara IP Zaapa CIPRW (ZA-CIPRW) en .NET

Informática, Proyectos 11 Comentarios

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 un poco el funcionamiento y poder crear una aplicación de escritorio para poder manejarla.

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.

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.

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 Cuadro de herramientas, se pulsa con el botón derecho en Componentes y se selecciona Elegir Elementos… Después se pulsa sobre la pestaña Componentes COM y se selecciona DVM_IPCam2 Control.

dvmipcam2

Si no existiese es que no está registrado en Windows. Entonces habría que descargar el ocx desde la dirección http://<ip de la camara>/codebase/DVM_IPCam2.ocx, guardarlo en c:\windows\system32 y desde una consola de ms-dos ejecutar regsvr32 c:\windows\system32\DVM_IPCam2.ocx y después volver a repetir el proceso de Visual Studio.

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:

  • 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.
  • Capturar el evento OnMonitorConnectResult y si la conexión ha sido satisfactoria pasar al siguiente punto
  • Empezar a recibir las imágenes dentro del control ocx usando el método PlayVideo.
  • Esperar a recibir las imágenes con el evento OnPlayVideoResult.
  • 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.
  • Cuando se termine de trabajar con la cámara llamar a los métodos StopVideo, StopRecord y MonitorDisconnect.

He desarrollado una pequeña aplicación que muestra estos conceptos. No hace comprobaciones de errores para simplificar el código:

aplicacioncamara

Podeis descargar el código fuente en c# y un ejecutable desde aquí.

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.

Capturar el escritorio o una ventana de windows con .NET

Informática, Proyectos Sin comentarios

En el trabajo los usuarios nos envían incidencias de las aplicaciones, pero en muy pocas ocasiones adjuntan un “pantallazo” 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ó crear una aplicación sencilla en c# que gestionase todo ese proceso (excepto adjuntar la imágen a la incidencia). Tomando como base este artículo he desarrollado la aplicación CapturaVentana (ciertamente no me he escornado buscando el nombre) debido a que el escritorio o una ventana son lo mismo para windows.

ventana

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 “foto”. 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.

El código fuente se puede descargar desde aquí.

alarma

Electrónica, Informática, Proyectos 6 Comentarios

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

getfile

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.

Para ello, lo primero que se debe tener es la fonera con el firmware openwrt. Los pasos se pueden seguir aquí.

Después hay que instalar el módulo gpio. Los pasos se pueden seguir aquí.

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:

config wifi-device  wifi0
option type     atheros
option channel  5

config wifi-iface
option device   wifi0
option mode     sta
option ssid     <SSID>
option encryption wep
option key      <CLAVE HEX>

Donde SSID es el nombre de la red wireless y CLAVE HEX la clave wep en hexadecimal (Para otras configuraciones mirar el documento de configuración aquí)

Segundo editamos el fichero /etc/config/network y ponemos lo siguiente:

# 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

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.

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):

echo 1 > /proc/gpio/2_dir
echo 0 > /proc/gpio/1_dir
while true
do
        estado=`cat /proc/gpio/1_in`
        echo $estado > /proc/gpio/2_out
        if [ $estado -eq 1 ]
        then
                wget -q "http://www.sistemasorp.es/alarma.php?login=<USUARIO>&password=<CLAVE>&destino=<Nº MOVIL>&mensaje=<MENSAJE>"
                while true
                do
                        sleep 1
                done
        fi
        sleep 1
done

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 API de envío de SMS del open movil forum, este es el código fuente:

<?php
include 'SMSSenderAPI.php';
 
$SMS = New SMSSender;
$SMS->SendMessage($_GET["login"], $_GET["password"], $_GET["destino"], $_GET["mensaje"]);
?>

El fichero SMSSenderAPI.php lo podeis descargar aquí. Los campos LOGIN y PASSWORD son para la api de open movilforum, el campo DESTINO es el número de móvil del destinatario y el campo MENSAJE el texto que se le enviará.

Después se edita el fichero /etc/firewall.user y se añade al final la siguiente linea sh /usr/bin/programa.sh &.

En la parte hardware he sacado los cables de GPIO de la fonera y alimentación y masa al exterior:

imgp0885imgp0886

Igualmente he quitado en el receptor el integrado 7805 para alimentar el circuito directamente desde la fonera con dos cables (alimentación y masa):

imgp0887

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:

imgp0888

Y como colofón un video demostrativo:

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.

Matar procesos desde .NET

Informática Sin comentarios

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 que hiciese esa labor:

1
2
3
4
5
6
7
8
9
10
11
12
13
private bool MataProceso(String sNombre)
{
 foreach(Process clsProcess in Process.GetProcesses())
 {
  if(clsProcess.ProcessName.StartsWith(sNombre))
  {
   clsProcess.Kill();
   clsProcess.WaitForExit();
   return true;
  }
 }
 return false;
}

Se le pasa como parámetro el nombre del proceso o los primeros carácteres y devuelve true si lo ha matado o false 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 System.Diagnostics.

Trucos para el buscaminas y el Pinball

Informática 8 Comentarios

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 trucos para el juego del buscaminas y para el pinball que vienen en cualquier windows por defecto.

Buscaminas:

Si arrancas el buscaminas, pulsas X Y Z Z Y y luego shift + Intro 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.

Pinball:

  • Para conseguir bolas extras escribe 1max
  • Para activar el pozo gravitatorio teclea gmax
  • Para ascender de rango escribe rmax
  • Para tener un número de bolas infinito escribe bmax
  • Para mover la bola con el ratón escribe hidden test (con espacio incluido).

Pues si que van rápido los servidores de Ubuntu…

Informática Sin comentarios

Esto si que es aprovechar al 100% el ADSL de 10 megas

Ejecutar algoritmos paralelos en la GPU (1/2)

Informática 1 Comentario

Navegando por Internet me topé con un artículo de Kriptopolis en el cual hablan maravillas del proceso de las GPUs en comparación con las CPUs. Acto seguido me puse a buscar en Internet como usar la GPU de mi tarjeta NVDIA Geforce 8800 GTS y encontré el entorno CUDA (Compute Unified Device Architecture) de NVIDIA.

Este entorno está orientado a las tarjetas gráficas de la serie NVIDIA GeForce 8, 9, y 200; NVIDIA Tesla y muchos de los productos NVIDIA Quadro y está disponible para Windows, Linux y Mac. Tiene librerías específicas para transformadas rápidas de Fourier (FFT) y algebra lineal (BLAS) entre otras cosas. Existen plugins para MatLab y para Photoshop que usan CUDA para agilizar los cálculos que realizan. Existe otro entorno llamado BrookGPU aunque no lo he tratado a fondo parace algo más genérico.

Con una tarjeta de las mencionadas anteriormente se pueden ejecutar miles de hilos (threads) en cada uno de los nucleos que contiene la GPU a una velocidad superior que con una CPU actual.

Diferencias de GigaFlops entre CPUs y GPUs (Imágen de NVIDIA)

Diferencias de GigaFlops entre CPUs y GPUs (Imágen de NVIDIA)

Para trabajar con CUDA lo primero que hay que hacer es instalarse el último driver de la tarjeta NVIDIA (que ya posee soporte CUDA). Después hay que instalar el toolkit de Cuda y finalmente hay que instalarse el SDK de Cuda. Todo esto se puede bajar en http://www.nvidia.es/object/cuda_get_es.html, pero el driver recomiendo instalarlo desde la sección de drivers para obtener el más actualizado.

En el siguiente artículo explicaré como usar la potencia de cálculo de la GPU con CUDA y Visual Studio 2005, haciendo un pequeño ejemplo.

GuideMe: 2º premio del 3er concurso de Open Movil Forum

Informática 2 Comentarios

Pues finalmente y tal como aparece en la web: http://open.movilforum.com/concurso/3/ganadores GuideMe consigue el segundo puesto con un premio de 2000 €. Enhorabuena al 1er y 3er galardonados.

Lo estúve pensando el otro día y creo que para repartir los premios deberían haber seguido una fórmula de proporciones. Si el premio a repartir son 10000 € y son 3 ganadores, la formula que propondría sería 3x + 2x +x = 10000. Eso sería 6x = 10000, con lo que x ≈ 1667. Finalmente el ganador tendría la proporción 3x, por lo que se llevaría 5001 €, el segundo 3334 € (2x) y el tercero 1667 € (x).

Espero que en siguientes concursos lo hagan de esa manera para premiar al 1, 2 y 3 equitativamente.

« Artículos anteriores Siguientes artículos »