domingo, 29 de noviembre de 2009

Cómo emitir imágenes con la webcam en tu página web con PHP

El procedimiento que voy a explicar va a consistir en la captura de imágenes de la webcam cada X segundos y la posterior subida de la imagen a un servidor mediante FTP.

La receta:
  • Yawcam (software para captura imágenes de la web cam)
  • Máquina virtual de java (para Yawcam, ya que está desarrollado en Java)
  • Servidor FTP.
  • Y por supuesto, PHP ;)

Una vez te hayas hecho con todo, hay que configurar en Yawcam el intervalo de las capturas cada 5 segundos (a tu gusto) y el acceso al FTP.

Si ha detectado correctamente tu webcam, accede a Configuración->Editar configuración->Salida->FTP

  • Tipo de archivo: JPG
  • Calidad: 30% (no pongas un valor muy alto para que el tamaño de la imagen no sea excesivo
  • Servidor FTP: mihosting.com
  • Puerto: normalmente 21
  • Usuario: miusuario
  • Contraseña: micontraseña
  • Directorio: /www/webcam (directorio absoluto)
  • Nombre de archivo: webcam.jpg (el archivo se sube cada 5 segundos y sobreescribe el actual, si actualizamos la página que muestra el archivo de captura cada 5 segundos, obtenemos una secuencia casi real por streaming)
  • Intervalo: 5 segundos (a tu gusto)

Bien, ya tenemos configurado el programa. Para activarlo, en el panel de control, FTP->Activar
Haz la prueba para ver si sube el archivo al servidor y se actualiza cada 5 segundos debidamente.

Ahora procederemos a crear el script PHP que se encargará de leer el archivo webcam.jpg y mostrarlo.

Aconsejo crear un archivo .htaccess en el directorio de las imagenes tomadas de la webcam sin permisos de lectura desde los clientes que intentan acceder al recurso donde se aloja el archivo webcam.jpg:

.htaccess

Order Deny,Allow
Deny from all
Options None
AllowOverride None

El siguiente script PHP va a leer el archivo webcam.jpg y lo va a devolver para insertarlo en una etiqueta img de html.

webcam.php

/**
* Aquí puedes incluir código para verificar si el cliente que está accediendo
* al recurso puede leer el archivo webcam.jpg o no
*/
$webcam = "webcam/webcam.jpg";
header("Content-Type: image/jpeg");
header("Content-Length: ".filesize($webcam));
readfile($webcam);

Ahora necesitamos el código html necesario para mostrar la imagen y que se actualice cada 5 segundos

webcam.html

<html>
<head>
<title>Probando webcam</title>
<!-- Le decimos al navegador que no almacene esta página en la caché -->
<meta http-equiv="Pragma" content="no-cache" />
<!-- No tiene fecha de expiración -->
<meta http-equiv="expires" content="-1" />
<!-- El navegador se refresca cada 5 segundos realizando peticiones una y otra vez a esta misma página para mostrar la imagen actualizada -->
<meta http-equiv="refresh" content="5" />
</head>
<body>
<img src="webcam.php" title="Sesión WebCam en directo" alt="Sesión WebCam en directo"/>
</body>
</html>

Y ya esta, es en esencia lo que necesitamos para poder emitir imágenes en semi-directo con nuestra webcam y verlas a través de nuestra página web.
Se puede elaborar de mejor forma dando acceso a usuarios registrados por ejemplo, para ello recurririamos a las variables de sesión para identificar si el usuario que solicita ver la webcam está logueado o no, pero bueno, eso os lo dejo a vosotros.

Espero os sea de utilidad.

Inyectar código directamente en la memoria de otro proceso con C

A continuación expongo el código fuente para cómo inyectar código directamente en la memoria de otro proceso remoto con C, se ha compilado con GNU GCC Compiler en el entorno Code::Blocks 8.02.

Me he tomado la molestia de comentar todo el código para que lo podáis perfeccionar, depurar, cambiar, etc, todo el procedimiento de inyección.

api.h

funcionInyectar.h

funcionInyectar.c


main.c


Espero os sea de utilidad.

Depurando pantallazos azules

En primer lugar, debemos de modificar el archivo boot.ini que se encuentra en la unidad raiz.

Los modificadores son parámetros para alterar la forma en la que inicia windows, a continuación muestro los que nos van a ser de utilidad

  • /bootlog, crea un archivo de registro donde se almacena la secuencia de arranque de windows. El archivo se guarda en el directorio raiz de la instalación de windows y se llama ntbtlog.txt.

  • /sos, nos muetra un listado de los drivers que va cargando en el arranque.


De tal forma que, nuestro boot.ini, quedará una cosa más o menos parecida a esta:

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /bootlog /sos

(No copies lo anterior, es orientativo, tu sistema puede que no coincida con el anterior)

Otra forma de depurar pantallazos algo más engorrosa pero puede que más efectiva, es la que describo a continuación.

Este procedimiento es válido para analizar los archivos de volcado que windows genera al ocurrir una expceción grave en el sistema, que suelen encontrarse en %SystemRoot%\MEMORY.DMP

En primer lugar necesitamos el depurador de windows WinDbg y los símbolos de depuración para windows xp para que pueda determinar de que librería y función se trata cuando ocurre tal excepción.

Una vez nos hayamos hecho con el archivo de volcado:

  • Abrimos WinDbg

  • Cargamos volcado: "File -> Open Crash Dump"

  • Especificamos el siguiente comando para que analice el archivo: !analyze -v


Nos arroja al detalle información de la excepción ocurrida, y es ahí donde debemos determinar que función y en que librería, driver, etc, se produce el error. Para ello basta con deshabilitar/desinstalar el componete que ocasiona el error y toca probar de nuevo.

Espero os sea de utilidad.

sábado, 28 de noviembre de 2009

Descartando problemas de hardware/software comunes

Pues bien, estos problemas pueden ser debidos a:

  1. Memoria RAM defectuosa.

  2. Drivers incompatibles o inadecuados.

  3. Programa del sistema básico de entradas y salidas erróneamente configurado, oséase, BIOS :P

  4. Sobrecalentamiento del microprocesador o algún componente hardware.

  5. Hardware defectuoso.

  6. Software que realiza operaciones no permitidas o que llegan a desastibilizar el sistema.

  7. Etc.


Ahora se nombrarán algunas posibles soluciones a los problemas anteriormente citados:

  1. Realiza un chequeo de tus memorias RAM y asegurate de todas las direcciones se lean/escriban correctamente. Para ello, te recomiendo memtest86, es un programa gratuito diseñado para microprocesadores x86 que realiza un examen exhaustivo de todas las memorias RAM instaladas en el equipo.

  2. Desinstala cualquier driver nuevo que hayas instalado. Hazlo bajo modo prueba de errores.

  3. Restaura la configuración de la BIOS a su configuración original.

  4. Observa la temperatura y voltajes del microprocesador y cercionate que son los valores adecuados. Comprueba que la fuente de alimentación está suministrando la energía necesaria al ordenador en sí. Realiza una limpieza interna e incluso ordena los cables para una correcta ventilación.

  5. Si notas que algún componente falla en relación con alguna operación que realizas, desconéctalo.

  6. Lo mismo que el paso anterior pero en relación con el software.

  7. Si ya has hecho de todo y te has cercionado de que ningún componente está defectuoso, la única solución pasa por reinstalar tu sistema operativo o incluso algo mejor, formatear ^^. No obstante, puedes probar un comando que me ha sacado en más de una ocasión de un apuro,  sfc /scannow, comprueba que los archivos legítimos de windows siguen intactos y en sus versiones originales, para ello debes de insertar el cd de windows y posteriormente ejecutar el comando. Por probar que no quede!


Bueno, espero que te haya sido de utilidad, en el siguiente capítulo expondré como depurar los pantallazos azules de windows xp y poder orientarnos al error.