martes, 29 de enero de 2013

Garage Inteligente: Aplicaciones Existentes similares

Como se menciona en el blog del proyecto, estaré trabajando en un Garage Inteligente para la materia de Cómputo Obicuo. La descripción general es la de un garage que es posible abrir mediante un código QR(mostrándolo a una cámara), pero la idea es que realicé más tareas como se menciona en el blog. Sin embargo, es difícil encontrar una idea particularmente igual a ésta, aunque existen otras aplicaciones similares a la nuestra que involucran otros métodos de abrir el garage. 

Para entender como funcionan algunas de las aplicaciones existentes en el mercado sobre garages, a continuación se presentan tres resúmenes de diferentes productos con una idea similar a la nuestra.

iSmartGate

iSmartGate es una aplicación que se utiliza para abrir la puerta de garage mediante el uso de un Smartphone. La aplicación es gratuita para descargar tanto para Android como para IOS, por lo cual la descargué para estudiar un poco sus funcionalidades, sin embargo, como se podrá suponer la aplicación por sí sola es inútil si no contamos con el hardware(y la puerta del garage) que es operado por la aplicación.

Estudiando un poco la aplicación, se puede ver la siguiente pantalla de inicio:


En mi caso no aparece como CONNECTED, esto obviamente debido a que no poseo el hardware, y no existe una conexión entre la aplicación y el mismo. La forma más sencilla de abrirlo es presionando el botón OPEN, que se puede observar, y de igual manera cerrar la puerta con CLOSE.

Sin embargo, se puede ingresar a OPTIONS, donde se encuentran configuraciones para abrir automáticamente la puerta cuando la aplicación la detecte(Automatic Open), o abrirla al sacudir el teléfono(Shake to open).

Otra opción visible en la imagen anterior es MY GATES, donde se pueden agregar y eliminar conexiones con diferentes puertas que cuenten con el hardware. Los campos solicitados son un nombre para la puerta, un número de puerto y un password. Estos últimos, según la información de la página, son configurados en un panel que viene incluido en el hardware.

El funcionamiento del hardware en conjunción con la aplicación, puede describirse como sigue:


La puerta del garage se conecta con el panel, el cual debe de tener configurado un password. El panel debe entonces conectarse a un router(existen paneles que se conectan de forma inalámbrica), y de ésta forma se puede comunicar con el Smartphone cuando detecte la conexión del panel.

Conclusión con respecto al proyecto:

La idea principal es similar, abrir la puerta del garage mediante un método inalámbrico, en éste caso mediante una aplicación de smartphone y hardware especializado conectado a la puerta.

RFID Access for Garages

La Universidad de Arizona cuenta con un sistema de estacionamiento utilizando RFID, colocando la unidad RFID en el parabrisas. Al acercarse entonces a la puerta del estacionamiento, ésta se abrirá automáticamente.


Esto funciona debido a que se colocan antenas RFID cerca de la entrada y salida del estacionamiento, las cuales se comunican por radio frecuencia con las RFID tags de los automóviles. El sistema envía el número del tag a una computadora, que verifica en la base de datos en unos cuantos segundos para saber si es válido o no.

El propósito de ésta tecnología es hacer rápido y automatizado el acceso al estacionamiento para los alumnos y otro personal de la Universidad de Arizona, la cual les proporciona el RFID tag, el cual debe ser renovado cada año o retornado en caso de estar fuera de la Universidad, para poder controlar el acceso solo a personal autorizado.

Conclusión con respecto al proyecto

Sí bien el principio de éste servicio es el acceso a un estacionamiento, el uso de tags RFID para hacerlo totalmente automático es en parte similar a nuestra idea original de la puerta de garage. Esto nos da otra posible idea para abrir el garage, colocando una tarjeta RFID en algún lugar estratégico en el automóvil, y pudiendo entonces el garage detectar la proximidad del mismo para abrir la puerta solo a los que posean un tag válido.

Aportaciones a compañeros

Brazalate con gps, gsm y signos vitales
Cama inteligente
Referencias:

jueves, 24 de enero de 2013

1st Assignment: Channel Simulation

Link to the Github repository: https://github.com/synnick/infotheory

General Description:


For this assignment we had to simulate a noisy channel where binary words would be transmitted. There are some factors that will determine whether the output word after passing through the channel will be the same as the input word, like the length of the word, the probability, the generation of the word, and the probabilities of converting ones to zeros and viceversa. Here I will test all of this using a Python script and GNUplot to generate graphics.

The channel, how does it work?

The Word Generator


First, we need to have a word that will be transmitted through the channel. This is a binary word, so we could as easily as represent it as a string of 1's and 0's like "101101011' or use integers and move bytes to add zeros and ones. Now two key important things with the word is: the length and the frequency of 0's and 1's. The length of the word is obviously the number of ones and zeros that the word has (and this affects the outcome, as I will explain later). The frequency is the probability of apparition of zeros and ones, so let's say we have 0.3 probability of a '1' showing up, then if the word length is 10, running an infinite number of times the generation of words with that probability would make three '1's and seven '0's (if we do not get '1', of course the other result is '0'). Then for every bit that we are generating a Bernoulli trial will be used to determine whether a zero or one is generated.



The next thing is to "transmit" this word through a noisy channel. To simulate this we need to use the Q table, which looks like this:



Where  p is the probability of a '0' transmitting as a '1' and q the probability of a '1' transmitting as a '0'.

The probability of transmitting correctly is the difference between 1 and the probability of changing for both cases. So we could describe it easily as the following drawing:
So the parameters for the channel would be: a word, the probability of changing from one to zero, and the probability of changing from zero to one. With this parameters the channel will simulate the transmission of every bit in the binary word, running Bernoulli trials again with the p and q probabilities.

This of course would not be very significant if we run it only one time, because we are using random numbers to determinate the probability, and even if the random numbers are generated uniformly, we have to make sure we can get an average of the error in the transmission of a certain word. That so, the same word will be transmitted 30 times through the noisy channel, and we will count the number of times that the word was not transmitted successfully (or the number of times it was transmitted successfully, doesn't really matter). 

With this we get a nice average of how that certain word is transmitted, but that's just one word of that certain length. So again we will do the same with other 30 words of the same length, running them 30 times each and counting the errors. 

The length also will be varying, starting from 1 to 30. That's a lot of loops that the program has to do, but we need to do this to make sure the experiment is done correctly.

All of the above, will be run one time each for a set of different variables that will change to see what variable affects what. The variables are: The probability of generating a one, the probability of changing from one to zero, and the probability of changing from zero to one.

Code

Some people did all this with a bash/AWK combination that automatically runs the python script with varying parameters, and then plots the results. What I did is to save the desired parameters in a file, in the format:

0.5 0.2 0.2
0.5 0.4 0.4
... ... ...
Where the first column is the probability of generating a one, second the probability of changing from one to zero, and third the probability of changing from zero to one.

This will run all the tests mentioned before with said parameters saving the data in the file 'output.dat'. Then we can plot the data as we wish.



Plots

Simulating various probabilities and word length's we obtain the following plot, measuring the error:

The error for every set of variables, starts low, and goes increasing very fast. For the range between 20 and 30, the probability of error is almost always 1.

And measuring the success:

This is the opposite as before as we can guess. The success is high with small words, and goes decreasing as the size increases.


Gnuplot code



Conclusions

Pretty much everything affects the outcome of the channel, but certain combinations prove to have the most great effect. We can easily see in both graphics that the word length increases the error and decreases the success, respectively, so there is not arguing that the word length affects the outcome.

The probability at the word generation also affects because if we have a high probability of generating a '1', and a high probability of a '1' changing to '0', then there is also a high probability that many ones will become zeros. It is also possible the other way, having a low probability of generating a 1, and a low probability of changing '1' to '0', reducing the probability of error in that bit.

martes, 22 de enero de 2013

Reporte: RFC 6335

Internet Assigned Numbers Authority (IANA) Procedures for the Management of the Service Name and Transport Protocol Port Number Registry


El RFC 6335 define los procedimientos que la IANA mencionada previamente utiliza para el manejo de asignaciones y otras solicitudes relacionadas al registro del nombre de servicio y el numero de puerto del protocolo de transporte.

Para entender los procedimientos es necesario conocer dos conceptos: Service Names y Port Numbers.

1. Service Names (Nombres de Servicio)

Los nombres de servicio son la llave única en el  registro del nombre de servicio y el número de puerto del protocolo de transporte. Dentro del registro, esta llave única se asegura que los diferentes servicios pueden ser distinguidos, previniendo colisiones por los nombres y evitando confusión acerca de quien es el asignado para una entrada en particular.

Puede haber más de un nombre asociado a un protocolo de transporte y puerto. Los nombres de servicio son asignados en orden de llegada. Dichos nombres deben ser cortos e informativos, evitando palabras o abreviaciones que son redundantes en el contexto del registro(por ejemplo: "puerto", "servicio", "protocolo").
Nombres que se refieran a servicios de descubrimiento, como el uso de multicast o broadcast para identificar los puntos de terminación de un servicio dado, deberían de preferencia usar un sufijo fácilmente
reconocible, como "-disc".

Sintaxis de los nombres de servicio

Los nombres de servicio válidos son normativamente definidos como sigue:
  • Deben ser entre 1 y 15 caracteres de largo.
  • Debe contener solamente letras de la 'A' - 'Z', 'a'-'z', dígitos '0'-'9' (US-ASCII[ [ANSI.X3.4-1986] ) y guiones ('-', ASCII 0x2D o 45 decimal).
  • Debe contener por lo menos una letra( 'A' - 'Z', 'a'-'z').
  • No debe iniciar o terminar con un guión '-'.
  • Un guión no debe ser adyacente a otro.
La razón por requerir por lo menos una letra es para evitar nombres de servicio como "23"(podría confundirse con el puerto 23) o "6000-6063"(podría confundirse con un rango de puertos). Aunque los números de servicio pueden contener combinaciones de mayúsculas y minúsculas, esto es ignorado para razones de comparación, así que tanto "http" como "HTTP" denotan el mismo servicio.

Los nombres de servicio son puramente identificadores, y ninguna semántica es asumida por cualquier estructura superficial que un nombre pueda tener. Por ejemplo, una compañía que utilice el nombre "Compañía", puede registrar servicios como "Compañía-esto" o "Compañía-aquello", pero dicha compañía no puede afirmar que le pertenecen todos los nombres de servicio con el principio "Compañía-"; no pueden prevenir que alguien más registre "Compañía-otro" para un servicio diferente. Técnicamente, en el descubrimiento de protocolos de servicio, los nombres de servicio son meramente series de bytes en el cable, pero por conveniencia se interpretan estos bytes como caracteres ASCII legibles para los humanos. El software los trata simplemente como identificadores como se mencionó anteriormente, y no intentará parsearlos para obtener algún significado adicional.

Las reglas para nombres validos, exceptuando el limite de 15 caracteres máximo, se expresan a continuación:

      SRVNAME = *(1*DIGIT [HYPHEN]) ALPHA *([HYPHEN] ALNUM)
      ALNUM   = ALPHA / DIGIT     ; A-Z, a-z, 0-9
      HYPHEN  = %x2D              ; "-"
      ALPHA   = %x41-5A / %x61-7A ; A-Z / a-z [RFC5234]
      DIGIT   = %x30-39           ; 0-9       [RFC5234]

2. Rangos de números de puertos

CP, UDP, UDP-Lite, SCTP, and DCCP utilizan un espacio de nombres de 16-bit para sus registros de números de puertos. Los registros de puertos para todos estos protocolos de transporte están subdivididos en tres rangos de números:

  • Puertos de Sistema, también conocidos como Puertos Bien-Conocidos (desde 0 - 1023, asignados por la IANA).
  • Puertos de Usuario, también conocidos como Puertos Registrados(desde 1024 - 49151, asignados por la IANA).
  • Puertos dinámicos, también conocidos como Puertos privados o efímeros(desde 49152 - 65535, nunca asignados).
De los puertos asignables (puertos de sistema y puertos de usuario, 0 - 49151), los puertos individuales se encuentran en uno de estos tres estados:
  • Asignado: Puertos asignados al servicio indicado en el registro.
  • No asignados. Puertos disponibles para asignación por solicitud.
  • Reservados: Puertos reservados no disponibles para asignaciones regulares "asignados a la IANA" para propósitos especiales.
Para poder mantener manejable el tamaño del registro, la IANA típicamente solo registra los nombres de servicio y números de puerto asignados y reservados. 

Asignación de Nombres de Servicio y Números de Puerto

Con asignación refiero a proveer un nombre de servicio o número de puerto a un aplicante. Todas estas asignaciones son hechas desde nombres de servicio o puertos que son No asignados o Reservados en el momento de la asignación.
  • Los nombres y números Reservado son generalmente asignados por una acción estándar o aprobación IESG, deben estar acompañados por un enunciado explicando la razón por la cual un nombre o número Reservado es apropiado. La única excepción para esta regla es que el asignado actual de un cierto número de puerto puede solicitar la asignación del correspondiente puerto Reservado para otros protocolos de transporte cuando se necesiten.
Cuando la asignación para uno o más protocolos de transporte es aprobada, los números de puerto para cualquier protocolo de transporte no solicitado será marcado como Reservado. La IANA no debería asignar dicho puerto a cualquier otra aplicación o servicio hasta que ningún otro puerto permanezca No asignado en el rango solicitado. 

Procedimiento General de Asignación

Una solicitud de asignación de número de puerto o nombre de servicio contiene la siguiente información. El número de servicio es el identificador único del servicio dado:


      Nombre del Servicio (REQUERIDO)
      Protocolo(s) de Transporte (REQUERIDO)
      Asignador (REQUERIDO)
      Contacto (REQUERIDO)
      Descripción (REQUERIDO)
      Referencia (REQUERIDO)
      Número de Puerto (OPCIONAL)
      Código de Servicio ((REQUERIDO) solo para DCCP)
      Usos no autorizados conocidos (OPCIONAL)
      Notas de asignación (OPCIONAL)

  • Nombre de Servicio: Un nombre de servicio único deseado para el servicio asociado con la solicitud de asignación. El nombre debe cumplir con la sintaxis definida previamente. Para que pueda ser único, no debe ser idéntico a ningún nombre de servicio actualmente asignado en el registro de la IANA.
  • Protocolos de Transporte: Los protocolos de transporte para los cuales la asignación es solicitada deben ser proporcionados El campo esta limitado a uno o más de los siguientes: TCP, UDP, SCTP y DCCP. Solicitudes sin ninguna asignación de puertos y solo un nombre de servicio son aún requeridas para indicar el protocolo que el servicio usa.
  • Asignador: Nombre y dirección email del partido al cual la asignación es hecha. Esto es requerido. El asignador es la organización, compañía o persona individual responsable por la asignación inicial.
  • Contacto: Nombre y dirección de correo del contacto para la asignación. Esto es requerido. El contacto es la persona responsable para que la comunidad de Internet le envíe preguntas. Esta persona también esta autorizada para realizar cambios por parte del asignador; en caso de conflicto entre estos dos, la decisión del asignador precede.
  • Descripción: Una corta descripción del servicio asociado con la solicitud de asignación es requerida. Se debe evitar todo menos las siglas y acrónimos más conocidos.
  • Referencia: Una descripción de(o una referencia a un documento describiendo) un protocolo o aplicación usando este puerto. Esto es requerido. La descripción debe establecer si o no el producto usa broadcast, multicast o cualquier tipo de comunicación cast en la capa IP.
  • Número de Puerto: Si la asignación de un número de puerto es deseada, ya sea el número de puerto que el solicitante sugiere para asignación o una indicación de un rango de puertos(de usuario o sistema) debe ser especificado. Si solo un nombre de servicio es asignado, este campo se deja vació. Si un número de puerto especifico es solicitado, la IANA es responsable de asignar el número solicitado. Si un rango es especificado, la IANA escogerá un número adecuado de los rangos de Usuario o Sistema.
  • Código de Servicio: Si la solicitud de asignación incluye DCCP como protocolo de transporte, entonces la solicitud debe incluir un código de servicio DCCP único deseado, y no debe de incluir el código de otra forma.
  • Usos no autorizados conocidos: Lista de usos por aplicaciones u organizaciones que no son el asignador. Esto es opcional. Esta lista puede ser aumentada por la IANA después de la asignación cuando los usos no autorizados son reportados.
  • Notas de asignación: Indicaciones de cambios de dueño/nombre, o cualquier otra cuestión de proceso de asignación. Esto es opcional. La lista puede ser actualizada por la IANA después de la asignación para ayudar a rastrear cambios a una asignación.
Si la solicitud de asignación es para la adición de un nuevo protocolo de transporte a un nombre de servicio previamente asignado, y el solicitante no es el Asignador o el Contacto para el nombre de servicio previamente asignado, la IANA necesita confirmar con el Asignador de la asignación existente sí o no esta adición no es apropiada.

Sí la solicitud de asignación es para un nuevo nombre de servicio compartiendo el mismo puerto con un nombre de servicio asignado previamente, la IANA necesita confirmar con el Asignador la existencia del nombre de servicio y con otros expertos apropiados para saber sí o no la sobre carga es apropiada.

Cuando la IANA recibe una solicitud de asignación conteniendo la información anterior, es decir solicitando un número de puerto, la IANA deberá iniciar una "Reseña Experta" [RFC5226] para poder determinar sí o no una asignación debe de hacerse. Para las solicitudes que no buscan un número de puerto, la IANA deberá asignar el nombre de servicio bajo una simple regla, siguiendo el orden de llegada [RFC5226].

Referencia:

Resumen - Plant species identification using Elliptic Fourier leaf shape analysis


Plant species identification using Elliptic Fourier leaf shape analysis

Joao Camargo Neto , George E. Meyer, David D. Jones, Ashok K. Samal

Introducción

El estudio se enfoca en la identificación de especies de cultivos y hierbas mediante el método EF para encontrar las características de la hoja.

La identificación de especies de plantas y hierbas es utilizada primeramente para control de hierba y aplicación de herbicida. Identificar hierbas maliciosas tiene el potencial de reducir la cantidad de químicos aplicados en hasta un 80% para mejorar la ganancia y calidad de agua entre otras cosas. Tradicionalmente, todo esto se hacía a mano por ingenieros agrarios u otros científicos especializados. La identificación automatizada de las especies de hierbas puede ayudar a los científicos para seguir el crecimiento de la hierba, lo que ayudaría a saber cuando aplicar herbicida.

El método EF (Elliptic Fourier) provee una interpretación gráfica eficiente y precisa de las esquinas y formas de una hoja aislada. 

Las hojas utilizadas(extraídas a mano) para el estudio están descritas en la siguiente tabla:


Métodos y materiales

  • Adquisición de imágenes 
Imágenes digitales a color de las plantas de soya, girasoles, bledo, y terciopelo fueron tomadas usando una cámara digital DC120 bajo luz natural en el mediodía durante las primeras 3 semanas después de su germinación.

La resolución que utilizaron fue de 1280 x 960, que son 2 pixeles por milímetro. Las imágenes fueron después descargadas y almacenadas como jpeg. Las hojas individuales fueron extraídas y segmentadas de manera precisa de las imágenes de las plantas de forma visual y utilizando Adobe® Photoshop® 5.0. Los resultados fueron similares a lo siguiente:

  • Análisis de características de las hojas
Las esquinas de cada hoja en las sub imágenes fueron binarizadas. Después la forma de las hojas fue normalizada utilizando descriptores Elliptic Fourier de un contorno cercano de las esquinas de la hoja. Este contorno fue definido utillizando una cadena diferencial, representada como una secuencia de vectores como los siguientes:


Los limites individuales de los pixeles fueron utilizados para crear el código cadena, iniciando desde el pixel superior izquierdo del contorno y trazando el límite en sentido del reloj. Esto se completaba hasta volver al pixel inicial.

Utilizando este código cadena se obtiene una expansión de series de Fourier truncada del contorno, la cual es una proyección de los ejes x y y, dados por:


Donde t es el paso necesario para pasar de un pixel a otro en el contorno.

La siguiente imágen muestra una aproximación EF no normalizada de la forma de una hoja de bledo (velvetleaf):

Resultados

Las especies de plantas pueden ser precisamente identificadas mediante el uso de EF para encontrar las características de la forma de las hojas individuales extraídas de las plantas. El método EF combinado con PCA(principal component analysis) y modelos de discriminantes lineales se comportaron de buena manera.

Las plantas más maduras, que proporcionaban hojas más maduras proporcionaban las mejores imágenes de hojas para su identificación y demostraron un 88.3% de tasa de clasificación.

Bibliografía: