lunes, 11 de febrero de 2013

Lab 1: Proyectos existentes

Para el laboratorio 1 de la materia de Computo Ubicuo, voy a exponer productos existentes relacionados con nuestro proyecto final de dicha materia, estos productos, si bien no son completamente lo que queremos desarrollar para final de semestre, cumplen con ciertas características que consideramos importantes para implementarlo en nuestro dispositivo físico.

Smart Alarm Clock.

Esta es una aplicación que funciona tanto en dispositivos Android como en dispositivos iOS, en donde podemos encontrar un reloj de alarma inteligente, ya que esta aplicación hace lo posible por levantarte en el momento adecuado, es decir, al final de un ciclo de sueño, como sabrán, tradicionalmente el ciclo de sueño está marcado por una fase en la que soñamos y tenemos más débil el sueño, la aplicación usa el acelerómetro para detectar los movimientos durante la noche y determinar el mejor momento para despertar, justo después de un ciclo de sueño.



La aplicación incluso hace una gráfica de tu ciclo de sueño de como trabajo durante un día especifico y esta información la utiliza para generar mejoras en su rendimiento.

Un ciclo de sueño representa la base de nuestro sueño, es un periodo de sueño compuesto por diferentes tipos de sueños, organizados de manera idéntica y que se reagrupan siempre en las mismas fases de manera que tienen la misma cronología, un sueño lento y sueño rápido o REM.


Cómo funciona la aplicación.




  • Primero, tienes que dormir con el teléfono, poniéndolo en algún lugar de tu cama, poniendo incluso las señales en modo avión para que no genere molestias.
  • Después, estableces en la aplicación un límite de tiempo en el que debes de estar ya despierto, y seleccionar un rango entre este.
  • Esto quiere decir que el tiempo que estableces no es fijo, ni con precisión, ya que la aplicación trabaja, como dije anteriormente, con los ciclos de sueño.


Hay que tener en cuenta que, si la aplicación no llega a detectar un movimiento o un ciclo de sueño, la alarma se enciende normalmente en el tiempo que definimos.


La idea de nuestro proyecto es realizar una plataforma blanda que se una a la cama de manera que podamos controlar ciertos movimientos para comunicarlos a un dispositivo móvil y nos despierte, una de  las ideas sería hacer un seguimiento de los ciclos del sueño de la persona para así saber cual es el momento adecuado en levantarlo, al igual que si se siente presión en la cama y detecta que todavía hay una persona acostada, la idea sería que el dispositivo de alarma no deje de sonar hasta que la persona este completamente fuera de ella, entre otras ideas.


Una de las cuestiones, leyendo los reviews de la iTunes store, ya que no la he probado, dicen que utiliza y acaba la batería durante la noche y esto llega a ser totalmente posible ya que se necesita el uso constante del acelerómetro y es por eso que se amanece sin pila, por lo que nuestra propuesta es generar esta función de manera similar pero utilizando sensores y que no acabe con la batería del smartphone.

Pueden encontrar más información de esta aplicación aquí.

The Smart Bed: Bam Labs

Esta cama inteligente es un dispositivo que se pone entre la parte inferior del colchón y la parte de reposo, en donde por medio de un dispositivo móvil y PC sincroniza información importante hacia estos de diferentes tópicos, entre ellos el monitoreo de salud de una persona, usando una tecnología llamada touch-free en donde el dispositivo solamente manda y envía información a la colchoneta pero en sí no se toca algún botón para su uso, en realidad utilizan dispositivos y computadoras para hacerlo y no directamente con la colchoneta.

Colchoneta con sensores (azul).

Este producto resulta interesante de manera que hace un seguimiento de la forma en que estamos respirando y calcula los latidos del corazón, entonces va enfocado especialmente al área médica de forma que las personas externas a la cama puedan saber como esta el paciente en ella.


Lo que podemos resaltar para uso de nuestro proyecto es el hecho de utilizar una colchoneta, algo parecido a lo que queremos realizar para hacer nuestro seguimiento de movimientos y que utilizan un protocolo de información inalámbrica para transmitir comandos hacia dispositivos móviles, no es bluetooth, se conecta por medio de Wi Fi y guarda los resultados en la nube para fácil acceso desde diferentes puntos.



En realidad este producto ofrece beneficio limitado a las personas ya que no tiene una función específica como el hecho de la aplicación que he citado anteriormente, considero que existen mejores alternativas y más eficientes a la hora de seguir la cantidad de respiración por minuto o las pulsadas del corazón, obviamente conectados directamente al cuerpo y no de manera libre como en este producto, es por eso que entonces para nuestro proyecto proponemos una fusión entre lo más destacable de esta cama y de la funcionalidad de la aplicación móvil.


Si quieres saber más de este producto puedes encontrarlo aquí.

CareTech

CareTech es un producto, que se utiliza como tapete, en la cama o en alguna silla en donde su única función es el detectar si existe o no un cuerpo entre ese dispositivo, tiene su propio modo de alarma si se detecta a una persona y utiliza batería.

La ventaja de este producto es el que se conecta con los dispositivos de la misma empresa llamada carephone, los cual marcan o mandan una señal a la central de enfermería de algún hospital que tenga estos dispositivos y pueden generar una alarma si la persona se encuentra en la cama, si ha salido al pisar el tapete, o si se encuentra sentada en alguna silla.

Este proyecto es similar en forma de idea de prototipo físico, pero cambiando su funcionalidad para agregar algo que ayude a las personas en su casa y no en un centro médico.

Pueden encontrar la liga de este producto aquí.

Contribución a equipos.
  • Brazalete con GPS. liga 1. 
  • Seguridad de computadoras. liga 2.
  • Seguridad de computadoras. liga 3. 

martes, 5 de febrero de 2013

Lab 1: Escala de grises - Promedio - Umbral

Para la primera semana de laboratorio se nos pide realizar un programa donde apliquemos diferentes filtros, entre ellos escala de grises, calcular un promedio de los pixeles vecinos o poner blanco o negro según un umbral, por lo que he realizado los tres, aquí mis resultados.




Escala de grises.


Para realizar la escala de grises, estoy obteniendo para cada pixel su color en canales RGB, luego hago una sumatoria entre los canales para sacar un promedio de estos, simplemente agrego en cada canal el numero promedio del color para obtener el resultado.

Filtro por promedio.

Para realizar el filtro por promedio lo que estoy realizando es ir por cada pixel a sus pixeles vecinos, pixel norte, sur, este y oeste, para luego hacer una sumatoria de sus canales y ponerlo en el pixel calculado teniendo una copia del original y uno nuevo para no afectar en su procedimiento.

Ahora muestro el comportamiento del filtro por promedio aplicandolo varias veces a la misma imagen.




Como podemos ver se hace cada vez más borrosa ya que cada que se aplica sigue promediando los pixeles vecinos.

Umbral.

Para el filtro de umbral, simplemente pongo un valor umbral con el cual se compara con el canal de manera que tengamos valores entre 0 y 1, luego los pongo cada pixel, estos son los resultados variando el umbral entre 0.2, 0.4, 0.8, en donde podemos ver que entre más alto sea el valor de umbral, la imagen la podemos ver más negra.






Este es el código que utilizo en mi programa para laboratorio:

Este es la liga a mi github para que revisen mis cambios y mejoras.

lunes, 4 de febrero de 2013

Distribución de teclado

Para la actividad 1 de laboratorio se nos pide buscar un ejemplo histórico de un tipo de situación en donde existen varias propuestas de estándares pero no se llega a una sola decisión y discutir cómo se pudiera haber resuelto mejor.



Investigando sobre los hechos que hayan tenido este tipo de acontecimientos encontré uno que considero muy importante ya que a pesar de los años, las distribuciones de teclado, al menos en Latinoamérica, hemos adaptado la distribución QWERTY, pero con pequeñas modificaciones, cuando nosotros vamos a USA o vemos alguna computadora extrajera, estas tienen otras distribuciones de teclado, por ejemplo las francesas tienen otra distribución llamada AZERTY, entonces, ¿Por qué no se unifican en una sola distribución?, en esta entrada voy a explicar lo que encontré sobre esta situación.


Después de los años de la guerra civil de los Estados Unidos, empieza a brotar nuevas ideas e inventos, con el fin de mejorar las tareas de la vida diaria en cosas más simples, es por eso que se empieza a crear la máquina de escribir en donde se esperaría que las personas de manera simple hicieran documentos de manera mecánica, por lo que luego de la creación de la maquina de escribir, llega un problema, ¿Cómo vamos a poner las teclas en una máquina?.


Al empezar a realizar las máquinas de escribir, empieza la competencia sobre el crear una distribución estándar único, entonces fue cuando Christopher Sholes[1], un editor de un periódico de Wisconsin entre otros oficios, decide no solamente crear una máquina de escribir, que para ese tiempo ya había unas cuantas, si no que decidió realizar la máquina de escribir de manera que fuera única.



El reto para Christopher era el diseñar todo un sistema que tuviera un cierto vinculo entre una interfaz fácil de entender para cualquier persona, al principio opto por tener una distribución alfabética, al paso del tiempo se da cuenta que esta no era una manera optima para escribir, por lo que empieza observar y asistir a concursos de aquellos años en donde participaba para saber quien podía teclear más rápido en una máquina de escribir, es cuando Sholes se le ocurre la idea de crear una distribución de manera que empezó a identificar cuales letras eran las que se utilizaban frecuentemente y empezó a reorganizarlos en el teclado, esto es lo que cuenta la historia pero no existe documentación especifica del porqué utilizó esta distribución, pero luego en el año de 1873 QWERTY fue adoptada por Remigton y se convierte en la base de las distribución de teclados.


Pero apesar de que después de tantos años se siga utilizando el QWERTY existen todavía personas que alegan que no es ergonomico, al menos para idiomas como el inglés, en donde se origina su distribución, pues se dice que por ejemplo, las letras T y H son unas de las más utilizadas en este idioma y se encuentran en lados no accesibles una de otra, cuando por ejemplo las letras E y R, al momento de estar juntas, hace que no tenga eficiencia, esto hace que tengas cierta desaceleración, según especialistas. En donde se concluye, según ellos que "La ergonomia no era una característica en el diseño del siglo 19"[2].


No podemos decir que QWERTY es la única distribución de teclado que existe y que es universal, por ejemplo cuando instalas Ubuntu, vienen muchas según regiones e idiomas, entonces a principios de los años 30, empieza una rebelión entre un investigador llamado Dvorak, en donde dice que QWERTY es ineficiente para un taquígrafo, es por eso que empieza a realizar su propia distribución, en donde usuarios que utilizaban Dvorak[3] (el cual todavía lo puedes poner en tu computadora), reportaban que esa distribución era más rápida y precisa, pero luego de tantos años entre disputas y guerra de formatos, QWERTY se estableció entre los formatos.



El resultante de QWERTY no solamente se encuentra en teclados de habla inglesa, si no que resulta que se ha convertido en un estándar para todos los idiomas, es por eso que cada región empezó con la creación de nuevos diseños según sus idiomas, unos teniendo éxitos en sus países de origen, solo por nombrar algunos, basados en QWERTY, son el Francés AZERTY, el alemán QWERTZ o el italiano QZERTY[4].


En lo personal, creo que nosotros utilizamos QWERTY, no porque nos digan que está organizado de manera "inteligente" y es mejor, yo creo que es primitivo y que por consecuente, hemos aprendido a saber donde esta cada letra en cada tecla, es por eso que ya se nos facilita el hecho de escribir en esta distribución, tal vez existen mejores distribuciones pero nosotros estamos acostumbrada a esta y que si, por ejemplo, pongo algún dispositivo en distribución AZERTY, luego de un tiempo de proceso, podria estar cómodo en esa distribución, al menos eso creo que sería el resultado, una de las soluciones que propongo, la cual no se si pueda ser correcta es, en vez de contabilizar el numero de pulsaciones de cada letra según el idioma, acomodar el teclado, sería el hacerlo por la raíz de la lengua, por ejemplo entre francés y español y otra distribución entre inglés y alemán, etc, para luego hacer una universal, lo cual veo difícil.

Otra solución, aplicando las tecnologías que actualmente están en auge, sería el hacer un teclado que tuviera en cada botón una pantalla y que este cambie según el idioma en el que se encuentre el sistema operativo, una idea parecida a la un prototipo que están desarrollando [5].



Bibliografía
[1] Christopher Soles Bio. Liga.
[2] Why do we all use QWERTY keyboards?, BBC london. Liga.
[3] Devorak Simplified Keyboard, Liga.
[4] Le clavier est "qwerty" et non pas dans l'ordre alphabétique. Liga.
[5] E-inkey keyboard concept by Maxim Mezentsev. Liga.

RFC 3315: DHCPv6

Para la clase de telecomunicaciones se nos pide realizar un reporte en donde expliquemos un RFC de las siglas Request for Comments, en donde encontraremos documentos de cada uno de los protocolos de la red y hacer un breve resumen sobre ello, es por eso que para esta entrada voy a escribir acerca del RFC 3315, el utilizado para el DHCPv6.


El DHCPv6 o en español el protocolo de configuración dinámica de host, es un protocolo utilizado para configurar nodos en alguna red, en donde se tiene una o mas direcciones IP versión 6, información de configuración de red o una o más prefijos IP versión 6.


Ofreciendo una función similar a la DHCPv4 pero para IPs versión 6 se especifica en el documento RFC que agrega modos adicionales de operación para el DHCPv6, uno el cual opera sin estado, en donde basicamente solo la información de configuración es intercambiada y un DHCPv6 que opera con estado, el cual funciona similar que el DHCPv4, esta no viene especificada en el RFC 3315, tiene su propio RFC, el 3736, cabe resaltar que esta versión 6 no es simplemente una actualización de la versión 4, el DHCPv6 es un protocolo separado y distinto al anterior, es por eso que tiene otro número de RFC.


Funcionamiento del DHCPv6

El funcionamiento del DHCPv6 empieza en el momento en el que el cliente escucha en el puerto 546 y los transmisores escuchan en el puerto 547, estos se comunican por medio de una liga local y direcciones multicast, entonces se puede decir que básicamente como se trabaja en este protocolo en un caso simple es de la siguiente manera:


  • Un cliente envía una solicitud (SOLICIT) para encontrar servidores y dichos servidores están enviando mensajes indicando que están disponibles para el servicio (ADVERTISE), 
  • Luego un cliente envía una solicitud para pedir los parámetros de configuración, (por ejemplo direcciones IPv6, prefijos IPv6, DNS, NIS, etc...) a los servidores con prioridad (REQUEST), dichos servidores son asignados según el administrador, 
  • Para luego el servidor envíe una respuesta (REPLAY) con los permisos a las direcciones y a la información de configuración, si no responde, sigue buscando por orden de valoración hasta que se quede sin solicitudes, es cuando reinicia su búsqueda.


DHCPv6


Entre los requerimientos del RFC se encuentra el DUID, que es el DHCP Unique Identifier, es utilizado para identificar a los clientes, se utiliza un DUID para cada cliente DHCPv6, se especifican 3 diferentes DUID: 
  • Dirección link-layer + el tiempo, es generada y guardada al inicio, 
  • Link-layer sencilla, es usada si la interfaz de red es permanente y 
  • Los que son generados por el fabricante.

Entre otros requerimientos del RFC también se encuentra la estructura de los mensajes los cuales se distribuyen de manera que la cabecera se divida en tres partes, 
  • La información codificada en 32 bits, incluyendo el tipo de mensaje, el cual define la función a realizar y un identificador del intercambio. 
  • Otra parte del mensaje incluye la información de direccionamiento y el campo de opciones.

En total DHCPv6 tiene 12 mensajes diferentes entre los cuales encontramos:
  • DHCP Solicit: Mensaje de solicitud para saber si existen servidores DHCP.
  • DHCP Advertise: Mensaje de respuesta en solicitud a un DHCP.
  • DHCP Request: Solicitud de parámetros a un cliente sin dirección.
  • DHCP Confirm: Mensaje de confirmación de validez de parametros.
  • DHCP Renew: Mensaje para prolongar el uso de la dirección de IP.
  • DHCP Rebind: Mensaje para prolongar el uso de otro servidor DHCP.
  • DHCP Reply: Respuesta de petición de un cliente
  • DHCP Release: liberación de direcciones IP.
  • DHCP Decline: Mensaje para decir que ya hay direcciones asignadas.
  • DHCP reconfigure-init: Mensaje para notificar la reconfiguración.


Al utilizar multicast en lugar de broadcast para procesar las solicitudes, lo veo como un punto positivo ya que solo se procesan solicitudes a los nodos que se requieran y no en todos los nodos a la vez, pero también de que existen todavía algunos sistemas operativos que no soportan el protocolo DHCPv6, entre ellos por ejemplo algunas versiones de Android y de Ubuntu, en donde se tiene que descargar herramientas aparte de las que ya vienen incluidas en el sistema, pero igual y esto irá cambiando con el tiempo, aparte algo que se quejan las personas que desarrollan los estándares es que DHCPv6 ya no da un gateway por defecto, por lo que todavía están en proceso de cambiar este problema para algunos, esto hace que no tengamos como anteriormente un mediador entre las redes.


Algunos aspectos diferentes entre el DHCPv4, es que la versión 6 únicamente es protocolo en capa 3,  esto es que todo el protocolo de DHCPv6 se hace en la capa de red, cuando para la asignación que se trabaja en la v4 es en la capa de aplicación, por lo que considero que, la versión 4 a mi parecer tiene mayor encaje al momento de entender cómo se trabaja en el protocolo, ya que considero que el servidor de DHCP es más que todo una aplicación a la red y no pertenece a la gestión de la red en sí.



Si deseas tener más información, puedes ver el RFC 3315