domingo, agosto 12, 2007

Veritas. Threads + DLL


El pasado 6 de Agosto fué mi cumpleaños, y como fueron pocos los que me felicitaron, me dí un auto-regalo de felicitación.

Estaba navegando aburrido buscando algo con lo que divertirme y me encontré con un nombre "Veritas". Me sorprendió ese nombre para una serie, es un nombre raro, extraño y que no significa nada, así que me puse a buscar por la Wikipedia. Resulta que es una serie de Ciencia Ficción al estilo de Tomb Raider o Indiana Jones, cogiendo lo mejor de las dos series y quedándose solamente con eso. El resultado es una serie trepidante, y con la que he disfrutado como no hacia años que lo hacía. Lo que da realismo a la serie es que los actores no son conocidos, exceptuando a Arnold Vosloo (Inhotep en la momia y la momia 2). La verdad es que se hace raro verle en un papel con pelo y sin lanzar maldiciones XD.

Veritas, es una organización secreta que aplica todos los avances tecnológicos disponibles a la arqueología con el fin de descubrir y preservar todas las verdades de la antigüedad. Por contraparte, hay una organización muy poderosa llamada Dorna, que existe desde los principios de la humanidad, que tiene otros motivos diferentes para evitar que la verdad salga a la luz.

La serie está muy bien ambientada, ya que la localización de cada capítulo cambia (tibet, rusia, egipto, pirineos, mexico, etc...) constantemente. También, en cada capítulo veremos descubrir antiguos secretos de la humanidad que podrían cambiar el futuro. Cada secreto por separado no son nada, pero la fecha del año 2012 sale constantemente. También será muy importante en el desenlace de la serie.

Como lo bueno no puede durar mucho, la serie solamente tiene 1 temporada de 13 capítulos, aunque realmente el capítulo 13 no es un final, si no un inicio que podría coger la mano de 3 o 4 temporadas mas. Pero por desgracia, parece que la serie (es del 2003), no va a continuar. Supongo que será porque no es rentable¿?(Cada capítulo parecía valer un cojón y medio). Ahora tengo mono de esta serie y daría lo que fuera para que hicieran más temporadas. :(

Recomiendo esta serie a todos los amantes de la aventura, misterios ocultos, indiana jones y tomb raider.


Hablando de otras cosas, he estado metiéndome con los Threads y la creación de DLLs. No se quien me mandaría meterme con esto!. Desde luego los Threads son super utiles, por no hablar de las DLLs, que permiten usar desde cualquier lenguaje de programación una DLL.

El problema viene dado por que programar Threads dentro de las DLLs son un sufrimiento, ya que cada uno tiene su espacio de memoria independiente y muy muy privado. Llevo ya 15 horas seguidas intentando que desaparezcan los errores de liberación de memoria al cerrar la DLL. Liberas toda la memoria y siempre queda algo por liberar o_O. Windows juega a los dados con la memoria de los threads por lo que veo...

En cuanto arregle los problemas de la DLL, terminaré la versión del Astrotite que tenía que haber terminado hace un tiempo. Ahora es muchisimo mejor, más rápido y con una licencia que no dejará indiferente a nadie XD. Sobretodo a los usuarios de los P2P.

Saludos.

domingo, agosto 05, 2007

Programación con AIO-160802AY-USB

Durante este tiempo he estado programando un programa de análisis de audio con implementación de sensores de proximidad para poder comparar fallos (Los sensores mandan un voltaje de +-10v).

El funcionamiento del programa era sobre la lectura de audio y los sensores de proximidad al mismo tiempo, ya que se necesitaba comparar ambos datos para ver si un taladro microscópico tenía fallos de rotación.

El problema principal era averiguar como leer el voltaje mandado desde los sensores de proximidad en el ordenador (+-10V aprox.). Para poder leerlo necesitaba un hardware especial, y me recomendaron los conversores A/D de la empresa CONTEC. Me agencié un conversor "AIO-160802AY-USB":
Tengo que decir que después de estudiarme el funcionamiento del aparato (Tiene un completo manual del programador y ejemplos para casi cualquier lenguaje de programación), tengo que decir que me fascinó este tipo de aparatos. Tiene 8 entradas analógicas con las que se pueden leer hasta 8 señales analógicas (entre +-10V), convertirlas a digitales, etc. También tiene 2 salidas analógicas con las que el aparato puede suministrar una corriente de +-10V en cada canal. A parte de eso, tiene 4 entradas y salidas digitales, para poder comunicarse hasta con 4 dispositivos simultáneamente. Claro está que se puede usar independientemente todas las entradas y salidas, con lo que este tipo de aparatos se convierte en una especie de terminal universal de comunicación electrónica.

Ahora mismo, con un ordenador y un terminal podría manejar una serie de motores y circuitos electrónicos (digitales o analógicos), solamente mandando y leyendo los canales del AIO. Desde luego no puedo hacer la parte electrónica, pero ahora tengo el conocimiento para programar casi cualquier terminal :D.

Siempre hay algún "Pero" en estos aparatos que suenan tan bonitos. El problema viene por:
  • El precio: Desde 50.000 Yenes el más básico y 300.000 yenes el más caro.
  • Por el manual del programador: Es muy completo y con muchos ejemplos en cada lenguaje de programación, pero no explica algunas funciones clave. Por ejemplo, para mandar los datos directamente a la memoria del PC en vez de la memoria del propio AIO que es muy pequeña, hay que jugar al Hacker para averiguar las funciones y los parametros que hay, ya que no hay información.
  • Hay que saber elegir MUY bien el AIO que necesitamos, ya que por ejemplo, yo he tenido bastantes problemas.
Los problemas que tuve yo con el AIO fueron principalmente de Memoria y Reloj. Ya que la versión del AIO que tengo tiene una memoria de 512 datos (16bits cada dato) sólamente. Es muy importante este punto, ya que no podemos estar leyendo los datos directamente del AIO cada 10μsec (ya que el PC estaría todo el rato al 100% de CPU). El otro problema grabe que tuve es de reloj, ya que el reloj interno del AIO (el que dice cada cuantos μsec se leer un dato del canal) , en teoría podía leer datos cada 10μsec/canal, pero en el manual del programador (A la hora de comprar pone 10μsec/canal!) pone que los dispositivos USB, al tener que realizar el proceso el PIC que tienen interno, el periodo mínimo para que no se pare la lectura (Si el PIC no puede leer datos tan rápido se para), es de 600μsec/canal!. Eso puede parecer rápido, pero 600μsec son 1.6Khz solamente! si tenemos que leer a más de esa frecuencia (por ejemplo los detectores de proximidad mandan el voltaje a 5Khz), no nos sirve.

El sistema de los USB está bien para aplicaciones que no requieran velocidades inferiores de 1ms de respuesta, ya que se puede llevar muy fácilmente y es portátil.



Yo ahora mismo estoy consiguiendome un ADA16-32/2(CB)F en formato CardBus (Ya que el equipo que va a usar el programa es un portatil), a parte este tiene 64Kb de memoria interna (32Kb de 16Bits) y el reloj interno me permite usarlo hasta 10 μsec/canal reales. Ya contaré la experiencia con esta tarjeta.

De todas formas, a parte de este programa de analisis estoy a punto de terminar varios programas que tenía parados desde hace tiempo (desde el 2004 para ser exactos XD). He de decir que desde que he añadido soporte dll, threads, unicode y mayor estructuración a mis programas, funcionan mucho mejor y más rápido XD.