lunes, 11 de julio de 2011

Java & C/C++ responsabilidades del lenguaje y el programador


Cambiando Paradigmas...
Sobre las responsabilidades del lenguaje y el programador:

Parte responsable
C/C++
Java
Programador
Escribir Código bueno y creativo.
Manejo de Memoria.
Sincronización de Hilos (Threads).
Conocimiento de la Plataforma.
Protocolos para manejo de errores.
Escribir Código bueno y creativo.
Lenguaje
Sintaxis y gramática.
Sintaxis y gramática.
Manejo de Memoria.
Sincronización de Hilos (Threads).
Conocimiento de la Plataforma.
Protocolos para manejo de errores.

jueves, 10 de febrero de 2011

Obsolescencia Programada vs. Producto Inmortal


Había una vez un carpintero que vivía en una ciudad muy pequeña, de muy pocos y amigables habitantes. Como era un artesano excelente realizaba fabulosos trabajos a pedido con detalles únicos. Sus trabajos se hicieron rápidamente conocidos de boca en boca entre los habitantes del pequeño pueblo. La selección de la materia prima, basada en la madera más perfecta, robusta y estable, daban a sus trabajos una calidad estupenda. Durante 1 año, trabajo 24hs ya que los pedidos eran enormes, todos en el pueblo querían sus productos. Al poco tiempo luego de transcurrido ese año, el trabajo fue cayendo paulatinamente, acentuándose cada vez más. El artesano no sabía que hacer, comenzó a tener problemas económicos, hasta el punto de no tener dinero para comprar alimentos o pagar sus impuestos. Pensó, mi trabajo, después de todo, no debe ser tan bueno, la gente no viene más. Entonces salio a consultar que pasaba con sus productos, la gente lo recibía muy contenta, mostraban sus casas llenas de sus productos, comentándole que eran excelentes, irrompibles, de la mejor madera, la cual dura cientos de años en deteriorarse. Al poco tiempo el artesano comenzó a realizar otro tipo de trabajos, como por ejemplo ayudar en una panadería a hacer pan, esto le daba unos pocos ingresos para poder comer. 

Lo que realmente le gustaba y disfrutaba hacer en la vida, sus productos propios, nadie lo necesitaba o la cantidad de pedidos no era suficiente para vivir, muy triste continuo trabajando de lo que podía para subsistir y muy de vez en cuando, como casi un hobby realizaba un trabajo a pedido de su amado oficio. 


Reflexionemos, no quiero extenderme mucho, pero en países como Argentina, podemos pensar en un artesano de la electrónica y ver las similitudes, donde factores como: volumen de mercado, demanda, saturación de producto/mercado, precio/competencia, vida del producto. Conforman un conjunto que hay que reflexionar para poder subsistir ( como el artesano ). Imaginemos un producto electrónico Argentino que nunca se rompa ( sin servicio ), que dure 150 años, el precio sea tan competitivo como los importados. La pregunta sería cuanto tiempo va a poder subsistir la empresa que lo produce? cuando tiempo se mantendrá la demanda?

Aunque la Obsolescencia Programada, trae problemas con respecto a la disposición final de residuos y agota recursos, son problemas tan importantes para analizar y resolver como la falta de trabajo por el factor inverso: "El producto inmortal". 

miércoles, 26 de enero de 2011

Qué es el módulo receptor GPS ?

Es un receptor de satélites GPS, utilizados para navegación, nos permite calcular latitud, longitud, velocidad terrestre, altura, entre otras.  Cada satélite GPS transmite el código de Adquisición / Curso (C/A, Coarse/Adquisition) y los datos modulados sobre la frecuencia portadora L1 de 1575.42Mhz. El código C/A es un numero pseudo aleatorio único a cada satélite.
Los datos transmitidos por cada satélite incluyen información de almanaque del sistema de GPS completo, su propio efemérides y su propia corrección de tiempo.

Los datos del satélite se transmiten en tramas de 30 segundos. Cada trama contiene las efemérides y la corrección de tiempo especifica para ese satélite, y 2 páginas de almanaque de las 50 páginas del sistema GPS. El tiempo necesario para transmitir el almanaque del sistema completo es de 12.5 minutos y el tiempo para transmitir las efemérides de un satélite es de 30 segundos.

El almanaque del sistema contiene información acerca de cada uno de los satélites en la constelación, los datos de ionosfera, y los mensajes especiales de sistema. Las efemérides contienen información orbital detallada para un satélite específico. El almanaque del sistema de GPS se actualiza semanalmente y es típicamente válido por meses.

Los cambios de datos de Efemérides se realizan por hora, pero es válido hasta por cuatro horas. El segmento de control de GPS actualiza el almanaque de sistema de forma semanal y las efemérides por hora, esto por medio de tres estaciones de control terrestres. Durante la operación normal, el equipo receptor actualiza sus efemérides y el almanaque a medida de la necesidad.

El receptor de GPS calcula una posición nueva una vez por segundo. La certeza de la posición se especifica en 10 metros de probabilidad de error esférico (SEP), la velocidad y dirección en 0.1 metros por segundo sin disponibilidad selectiva. El Departamento de la Defensa (DoD) reserva el derecho de aplicar la disponibilidad selectiva (SA). Bajo SA, la certeza de la posición será degradada a 100 metros (RMS 2D) , la velocidad y dirección se reducirán también.

El desempeño de un receptor de GPS esta determinado en gran parte por la disponibilidad y certeza de los datos de efemérides de satélite y la disponibilidad de un almanaque de sistema de GPS.

Hablemos de los tipos de arranques:

El Comienzo en frío. El término “el comienzo en frío o cold start” describe el desempeño de un receptor de GPS cuando no está disponible ningún dato de la navegación. “El frío” significa que el receptor no tiene un almanaque actual, efemérides de satélite, la posición inicial, ni el tiempo. El algoritmo de búsqueda para el comienzo en frío se aplica a un Equipo que se acciona sin tener respaldo de alimentación, conectándolo a una fuente de poder de CC. Esto es la condición del módulo de GPS como es recibido de la fábrica, denominado “fuera de la caja”.

En condición de “comienzo en frío”, el receptor escoge automáticamente hasta doce satélites y dedica un canal individual para buscar la frecuencia de la gama de Doppler para cada satélite en el conjunto. Si ninguno de los doce satélites escogidos se adquiere después de un predeterminado espacio de tiempo (tiempo muerto), el receptor escogerá un conjunto nuevo de doce satélites para la búsqueda y repetirá el proceso, hasta que el primer satélite se adquiera. A medida que se adquieren satélites, el receptor automáticamente reúne los datos de efemérides y datos de almanaque.

El Equipo utiliza el conocimiento ganado de adquirir un satélite específico para eliminar otros satélites, del conjunto de la búsqueda, aquellos debajo del horizonte. Esta estrategia apresura la adquisición de satélites adicionales para lograr la primera posición fija.

Los conjuntos que se establecen en los “comienzos en frío” son para asegurar que por lo menos tres satélites se adquieran dentro de los primeros dos períodos de tiempo muerto. Tan pronto como tres satélites se encuentran, el receptor computará una posición fija inicial. El tiempo típico para fijar la primera posición es de menos de 2 minutos.
No se requiere de un almanaque completo del sistema para lograr computar la primera posición fija.

El almanaque se utiliza en los subsiguientes “comienzos en tibio” (warm starts), para ayudar a adquirir satélites de GPS que se encuentran a la vista.

Comienzo en tibio. En la condición de comienzo en tibio, el receptor se ha apagado durante un espacio de tiempo pero tiene un almanaque actual, y una posición inicial (dentro de 3,000 Km) almacenado en la memoria.  Cuándo se desconecta la alimentación, el Equippo retiene la posición de almanaque inicial y el tiempo, reduciendo el tiempo en la adquisición de satélite y computar la primera posición fija.

Durante un comienzo en tibio o warm start, el Equipo identifica los satélites que se espera que estén a la vista, dado el almanaque de sistema, la posición inicial y el tiempo aproximado. El receptor calcula la elevación y el cambio esperado de Doppler para cada satélite en este conjunto esperado y dirige los doce canales que rastrean en una búsqueda paralela para estos satélites. Si se conoce el error interno de oscilador, el Equipo compensa la desviación para optimizar la búsqueda.
Si la desviación no se sabe, los algoritmos de la búsqueda se pondrán suficientemente amplios para tener en cuenta la tolerancia de oscilador, envejecimiento, y los errores de la temperatura.

El tiempo a la primera posición durante un comienzo en tibio, cuando el receptor se ha apagado para más de cuatro horas (Eje. los datos de efemérides son viejos) es generalmente de menos de 48 segundos (38 segundos típicos).
El Comienzo en caliente o Hot start. La estrategia de comienzo en caliente se aplica cuando el Equipo se ha apagado por menos de cuatro horas, el almanaque, la posición y efemérides son válidos. La estrategia de comienzo en caliente es semejante a un comienzo en tibio, pero teniendo como base que los datos de efemérides en la memoria es actual y válido, entonces el tiempo de la adquisición es típicamente de 8 segundos.

lunes, 24 de enero de 2011

Controles con protocolo MODBUS: integración con Software para Computadoras PC

Cuando tenemos controladores ( PLC. PAC o específicos ) con protocolos estándar, como el MODBUS, tenemos la ventaja de tener opciones a la hora de hablar de software, dependiendo como encaremos el desarrollo:

Opción 1:
Podemos basarnos en una plataforma SCADA, es decir un sistema que nos permite mediante herramientas visuales (RAD),  pegar los controles de interfase para el operador y contruir en bloques configurables una aplicación industrial tipo.

ventajas:  son fáciles de usar,  no requiere profundos conocimientos de programación de sistemas, en poco tiempo tenemos la aplicación funcionando.  
desventajas: la flexibilidad esta dada por el fabricante del sistema SCADA,  (si no tengo un control dado, no podré tener esa función, etc) -Aunque la mayoría son muy completos y flexibles permitiendo la expansión mediante lenguajes para tal fin.
Ejemplo recomendado:   WinLog de Sielco Sistemi
- Recomiendo ver el WinLog Lite (es libre)
- En la sección downloads, están los manuales, en especial la nota de aplicación: "Getting Started - Creating a simple Modbus protocol application"
  Con dicha nota se puede desarrollar en 5 minutos una aplicación para un controlador JAKO 04424S-TN0 controlador de temperatura, totalmente funcional.
Opción 2:
Podemos basarnos en Librerías que contengan el protocolo MODBUS,  hay pagas y libres,  luego tendremos que desarrollar en un lenguaje que las soporte la funcionalidad, interfaces, bases de datos, etc.


ventajas:  flexibilidad, buena orientación para integración en producto existente.
desventajas: requiere conocimientos de programación y experiencia en las dichas herramientas, evaluar relación tiempo/precio.

Ejemplo:  http://mbserver.tripod.com/
En esta web existen enlaces a la documentación del protocolo,  un server con fuentes abiertas y código para ver.

Opción 3:
Podemos desarrollar TODO:  tomamos la especificación del MODBUS y armamos en el lenguaje de nuestra preferencia, la comunicación, el protocolo de datos MODBUS, funcionalidad, bases de datos, interfaces, etc.

ventaja: alta flexibilidad ( dependiendo la orientación de nuestro negocio/objetivo )
desventaja: tiempo

Ejemplo:  basado en el ejemplo de la opción 2, se comienza con tu propia implementación, no es difícil el protocolo en si mismo.
Básicamente:  <direccion><comando><datos><checksum>


Conclusión:

Las búsquedas en la web nos revelan muchos recursos para este protocolo estándar,  las cuales brindan distintas formas de desarrollar nuestra aplicación , solo tendremos que elegir la forma dependiendo la evaluación previa de los parámetros de nuestro proyecto: conocimientos, tiempo, dinero, etc.

martes, 11 de enero de 2011

El Error

   Parecía planificado, orquestado como una revolución silenciosa de las que estallan a los acordes de una canción convenida en las emisoras de radio. Hace siete días, múltiples copias de mi programa empezaron a fallar en varías oficinas del banco: la alarma se dibujó casi simultáneamente en rostros desconocidos de Capital, de Ciudadela, de Ramos Mejía. Al día siguiente, cayeron Quilmes, San Miguel, La Plata y Haedo. Mi jefe empezó a ponerse nervioso. "Defcon 2", pensé para mí. Para el Departamento de Defensa de los estados Unidos, Defcon 2 es el máximo nivel de alerta exceptuando el estado de guerra. Para mí, Defcon 2 significa que ya me puedo ir olvidando de salir a las seis por una temporada.
Llevo siete días depurando mi programa. Llevo siete noches durmiendo con un ojo cerrado y el otro abierto. Llevo siete jornadas enfrentándome a mi propia creación, intentando sin éxito reproducir en el laboratorio las condiciones del fallo para provocarlo, para que el prisionero acceda por fin a hablar con todos los ficheros de log puestos al máximo de detalle. Llevo siete tardes de lluvia intimando con mi enemigo, uniéndome con él como se une el cazador con la presa, pero también como se une la madre al hijo, porque cada línea de este maldito programa es sangre de mi sangre.
Llevo siete días depurando, y de pronto, ahora que son siete noches de dormir mal y ejecutar mi programa paso a paso de modo interminable como un verdugo reticente, y una lluvia de circunstancias empieza a golpear los cristales, tengo una iluminación, creo que me doy cuenta de que todo esto no es trivial, que el doctor Frankenstein comparte mi dolor cuando se ve obligado a enfrentarse a su monstruo, aunque Saturno, desde su tumba en los cielos, me reproche que bien debí haber devorado a mis hijos antes de sufrir tal destino. Y me rebelo, y pienso que, después de todo, depurar es un verbo estalinista, un verbo que sabe a Gulag, a lavados de cerebro, a estadios convertidos en campos de concentración y atestados de futuros desaparecidos. Yo no soy quién para depurar a una criatura nacida de mí mismo.
Si, como dice Kahlil Gibran, nuestros hijos no son nuestros hijos, son una flecha que ya surca el aire y nosotros sólo la mano del arquero, cómo puedo haberme desnaturalizado de esta manera? Cómo puedo traicionar mi naturaleza por un maldito sueldo? Cómo puedo asesinar por dinero?.
Ese programa contiene un error. Ese programa lo escribí yo en noches de zozobra, y ese error, esté donde esté, también lo escribí yo, también es mío como son míos mis poemas buenos y malos de la adolescencia, y son míos los besos afortunados y desafortunados que repartí por el mundo. Ahora ese error se ha extendido por la red de oficinas y sus llantos de niños ya se oyen por las calles de Florida en Capital Federal, resuenan en las murallas de Retiro, se imponen al ruido de la gran avenida. Un hombre y una mujer se conocieron en la cola que provocó mi error en la ventanilla. Quizá en este momento, sin saberlo, estén engendrando su primer hijo, y parte de su semilla la germiné yo en un descuido.
Mi jefe quiere que yo haya encontrado el error ayer. Sus amenazas se oyen venir por los pasillos y se suspenden sobre mí como una espada de Damocles. Mi jefe cree, como todos los jefes, que encontrar un error no sólo no es algo doloroso, sino que debería ser fácil. Que existe una manivela que yo giro y el error se aniquila, un botón que yo pulso y el error se evapora. Quiere, como todos los jefes, que yo sea responsable, que yo responda, que yo exhiba las mismas salidas cuando se me alimenta con las mismas entradas, como un programa bien escrito, como un perfecto e inhumano programa exento de errores.
Pero lo que no sabe mi jefe es que han pasado ya siete días de caza y el cazador está cansado. Ya no quiero encontrar el error, ya no deseo salvar mi pellejo ahogando la pequeña revolución nacida de mis dedos. Por el día hago progresos, encuentro interacciones, aíslo los segmentos de código donde se esconde el error que convierte a mi programa en algo humano. Pero por la noche deshago mi trabajo y saboteo mis ficheros, como Penélope deshacía su tapiz para posponer su boda fatal e inevitable.
No sé cuánto aguantaré así. Probablemente un día me echarán de este lugar y contratarán a un cachorro de programador sin escrúpulos que aplastará mi error como un ciempiés inoportuno. Pero no seré yo quien se lamente. Al menos, habré conocido un día de grandeza.

"Nada es perfecto, todo es perfectible."