martes, 30 de abril de 2013

Tarea 5: Experimento de congestión

Para la tarea de esta semana se pidió realizar un experimento acerca del control de congestión utilizando el simulador NS-2 con dos esquemas diferentes. Para crear las topologías y generar tráfico, se utilizaron programas de tareas anteriores:
El primer esquema de control de congestión es basado en el enrutamiento, y el principio es simple. Se genera tráfico con diferentes generadores (CBR, Exponencial, Pareto, etc) desde múltiples "subredes" hacia una subred destino. Todo ese tráfico tiene que pasar por un cuello de botella, lo que en cierto punto causa que todo el tráfico generado congestione ese nodo, provocando pérdida de paquetes. 

Para solucionarlo, momentariamente se desvía el tráfico de ciertos nodos por otros caminos más largos menos utilizados (tardar más tiempo en enviar paquetes es mucho mejor a perderlos). De esta forma, el congestionamiento se controla desde antes de la pérdida de paquetes, evitandolo completamente en este caso.

Para realizar lo anterior se utilizo la siguiente topología:


Donde se genera tráfico de la siguiente forma:
  • Desde el nodo 8 al nodo 12, CBR
  • Desde el nodo 7 al nodo 12, Exponencial
  • Desde el nodo 6 al nodo 12, Exponencial
  • Desde el nodo 5 al nodo 12, CBR
  • Desde el nodo 14 al nodo 11, CBR
  • Desde el nodo 13 al nodo 11, CBR
  • Desde el nodo 15 al nodo 10, Exponencial
  • Desde el nodo 16 al nodo 10, Pareto
La animación, sin desviar paquetes para controlar la congestión:


Como se puede observar, la conexión entre el nodo 3 y el 9 se congestiona en un momento dado y comienza la pérdida de paquetes.

Ahora, agregando unos cambios en el ruteo en el momento en el que la cola esta a punto de llenarse.

Aquí cuando la cola llega a un determinado punto de llenado, el ruteo de paquetes entre el nodo 1 y 3 cambia, desviándose por una ruta más larga (el envío de paquetes por el camino 1->3->9->12 es más rápido, por lo cual es el camino por defecto, en cuyo caso se cambia por 1->2->17->12, que tarda un poco más pero esta menos congestionado)

El segundo esquema, utilizando la misma topología consiste en disminuir la tasa de envío de paquetes de algunos nodos en tiempo real, es decir cuando se este congestionando un nodo, mandar una señal a los demás para que reduzcan sus tasas momentaneamente, dando tiempo al nodo de controlar la congestión y liberar la cola. Usandolo en el mismo caso de congestión que la primera animación, el resultado es:




Código:

Resumen: Energy Efficiency in Telecom Optical Networks

Energy Efficiency in Telecom Optical Networks
- Yi Zhang, Pulak Chowdhury, Massimo Tornatore, and Biswanath Mukherjee

Introducción

El paper habla acerca de un estudio sobre las actividades más relevantes para minimizar el consumo de energía en las redes de telecomunicaciones, haciendo énfasis en las redes ópticas. Investigan oportunidades para minimización del uso de energía permitidas por tecnologías ópticas, y clasifican los distintos acercamientos sobre diferentes dominios de redes, principalmente: core, metro y redes de acceso.

La ICT (Information and Communication Technology, Tecnologías de Comunicación e Información) es una de las ramas más prometedoras para buscar la conservación de energía. Es ampliamente usada en la vida diaria de la sociedad y contribuye de cierta manera a reducir el impacto en la naturaleza (por ejemplo las videoconferencias que evitan que las personas salgan en sus autos, reduciendo la contaminación ligeramente). 

Sin embargo, existe un problema, el consumo de energía de tanto computadoras como equipo de redes que se ha convertido en una parte significante del consumo de energía en todo el mundo. Se puede decir que a como incrementa la cobertura de la ICT, incrementa el consumo de energía. En el 2009, consumía 8% del total de electricidad en el mundo, por lo que es necesario pensar en  nuevos paradigmas de redes para que estas puedan mantener el mismo nivel de funcionalidad, ahorrando energía. El paper se enfoca en las redes ópticas, ya que son usadas ampliamente debido a su alta velocidad, gran capacidad y actualmente constituyen la infraestructura básica en el mundo. Se  han investigado diferentes características de las redes, como su optimización y capacidad de sobrevivencia (cuando un nodo se cae, la pérdida es grande porque el flujo que pasaba por ella es grande), pero hasta ahora el concepto de una red óptica eficiente energéticamente es nuevo.

La minimización del consumo de energía en redes ópticas puede ser dirigida en 4 niveles: componente, transmisión, red, aplicación.
  • A nivel de componente, componentes de procesamiento ópticos altamente integrados como buffers ópticos,  tejidos de conmutación, y convertidores de longitud de onda  están siendo desarrollados, lo que reducirá el consumo de energía. 
  • A nivel de transmisión fibras de baja atenuación y dispersión, transmisores y receptores ópticos eficientes energéticamente que mejoran la transmisión y eficiencia de energía también están siendo producidos.
  • A nivel de red, mecanismos de asignación de recursos, green routing, etc están siendo implementados.
  • A nivel de aplicación, mecanismos para conectividad eficiente energicamente como proxying y cloud computing están siendo desarrollados.
El paper se concentra en el nivel de red.

Apagado selectivo de elementos de una red

Un mayor acercamiento para ahorrar energía en las redes core consiste en seleccionar elemenentos de una red que estén inactivos cuando haya poca carga de tráfico, para poder apagarlos, manteniendo aún las funciones vitales de la red para poder seguir soportando el tráfico restante.
En éste contexto, un nodo puede apagarse cuando:
  • Cuando esté totalmente inactivo.
  • Cuando el tráfico baja más de un cierto umbral, dejando la responsabilidad para desviar el tráfico restante a las capas superiores.
  • Después de desviar pro activamente el tráfico hacia otras rutas, para poder evitar disrupciones de tráfico.
Desafortunadamente, la mayoría de elementos en una red core no puede simplemente ser apagada sin afectar el desempeño de la red. Apagar un nodo intermediario puede causar un desvió sobre una ruta mas larga, lo que puede causar delay extra, congestión, etc. Por lo cual la posibilidad de apagar nodos o conexiones debe ser evaluada cuidadosamente bajo restricciones de conectividad y QoS (Quality of Service, Calidad de Servicio).

Diseño de redes eficientes energéticamente

Otra forma posible de conseguir eficiencia con la energía es planear arquitecturas  específicamente para ahorrar energía desde sus fases de diseño. En el paper, se proponen heurísticas para minimizar el consumo de energía y equipo de redes. Se consideran dos formas de implementar redes IP sobre WDM,   lightpath con bypass y sin bypass. Sin bypass, todos los pasos de luz incidentes a un nodo deben ser terminados, es decir, todos los datos que llevan los pasos de luz son procesados y desviados por routers IP. Con bypass, permite el tráfico IP cuyo destino es no el nodo intermediario, para directamente pasar por el router intermediario.

Los resultados demuestran que el lightpath bypass ahorra más energía que sin bypass, derivando del hecho de que el número de routers IP puede ser disminuido mientras se use el esquema con bypass en el diseño de una red core eficiente con la energía.

Reenvío de paquetes IP energéticamente eficientes

El reenvío de paquetes consciente de la energía ha sido propuesto para disminuir el consumo de energía en la capa IP. En trabajos similares, se ha demostrado que el tamaño de los paquetes IP impacta el consumo de energía en los routers. Para un escenario con un bit rate constante, entre más pequeños sean los paquetes IP que transfieren los routers, más energía se consume. Por lo tanto, se pueden diseñar nuevos esquemas de reenvío de paquetes IP para ser eficientes en el consumo de energía.

Sin embargo, existe una compensación entre el retardo de conmutación de paquetes y reenvío de paquetes IP energéticamente eficientes.

Green Routing

En las redes core, el ruteo consciente de la energía es propuesto como un nuevo esquema de ruteo, que utiliza el consumo de energía del equipo de la red como función objetivo para optimizar. Algunos autores proponen un esquema de ruteo consciente de la energía que considera reconfiguración de tarjeta de línea en routers IP. Comparado con el tradicional camino más corto, se espera que este esquema ahorre una gran cantidad de energía. Esto debido a que las tarjetas de línea y chasis son las que consumen la mayor cantidad de energía en las redes core.

Crítica

El paper hace énfasis en el área de redes y telecomunicaciones como un área cuyo gasto de energía ha ido incrementando con los años de manera drástica, y que debe ser una de las que más énfasis se debe hacer para ahorrar energía. Principalmente se concentra en el área de las redes ópticas.

Menciona mecanismos para ahorrar energía, algunos en forma de nuevo hardware, cambiando equipos viejos por nuevos que usen de forma eficiente la energía.

Otros manejando el apagado y encendido de los equipos de forma consciente, verificando aquellos que no están muy activos para apagarlos, ahorrando energía en el proceso.

También se menciona la creación de nuevos esquemas, topologías y demás que puedan ayudar a reducir la cantidad de routers, o una transferencia más eficiente de paquetes, todo eso para reducir el consumo de energía.

Referencia:

Laboratorio 7: Sugerencias de Usabilidad a otros Proyectos

Casa Inteligente

Realizaron sus pruebas tipo "hombre detrás de cortina" de forma excelente, realizando prototipos de todo tipo para facilitar el entendimiento del usuario. Mi sugerencia sería considerar una opción de apagado automático de luces o cerrado automático de puertas y ventanas, para en sí hacer el sistema más obicuo. Esto debido a que el tener que usar el smartphone para cerrar las puertas y ventanas no es muy diferente a hacerlo manualmente, se puede olvidar sobre todo en las noches. Por lo que fijar alguna hora para que automáticamente se cierren me parecería una buena consideración de usabilidad.

Galería Inteligente

Como consideración de usabilidad-accesibilidad me seguiría gustando que esto fuera con NFC o incluso bluetooth mediante algún hardware, ya que de esa manera la interacción con las obras sería muchisimo más personal, cada persona podría decidir si quiere leer/ver la historia o datos de alguna pintura, y además podría estar disponible en múltiples idiomas.


Computadora Inteligente

Para sus pruebas donde mostraron algunas funcionalidades consideraron diferentes situaciones y tipos de usuarios, lo que ayuda a tener diferentes perspectivas. Como sugerencia de usabilidad puedo decir que se debería considerar la opción de sesiones de usuario o algo así, no en forma del sistema operativo, sino en su aplicación, englobar todo y poder crear varias sesiones para diferentes personas, en el caso de que se desee prestar la computadora a algún familiar, simplemente cambiar la sesión y la computadora no se suspenderá por detectar a alguién desconocido.

Oficina personalizada

En sí las pruebas que hicieron fueron hacia los tags, por lo cual comentare mi opinión al respecto. Me parece bien considerar pulseras, llaveros y tarjetas, porque son accesorios portables pero en sí como la idea es una oficina personalizada para ellos (y en base a las preguntas que hicieron, deduzco que los usuarios quieren configurarlas ellos mismos) me parecería buena opción permitirles escoger su propio objeto donde colocar el tag con ciertas restricciones de tamaño por supuesto. Esto también atribuiría a la seguridad ya que si escogen algo que usan frecuentemente no lo perderán tan fácilmente y sería difícil para un ladrón robar la llave si no sabe cual es.

Alarma (Automóvil) Inteligente

La idea de funcionamiento es perfecta. Como primera consideración de usabilidad me parece que se debería de esconder más el botón de activar la alarma, ya que colocarla en un lugar obvio podría no ser muy seguro, pero no es tan grave. Lo segundo es considerar otra forma de alarma además del sonido. Hoy es fecha en que cuando suena una alarma de auto siempre se supone que se accionó por error y la ignoramos. Algo como flashear leds enormes o que suene un mensaje predeterminado funcionaría.

Alarma (Despertador) Inteligente

Manejaron las pruebas de usabilidad de gran manera, por lo que poco me queda recomendar. Lo único, pero no necesario que podría funcionar sería intentar despertar con otros medios además del sonido, como la iluminación, conectando el Arduino a una lampara además de al smartphone por bluetooth.

Carro NXP

El proyecto es bastante bueno, y ya tienen todo muy bien definido gracias a las pruebas de usabilidad, lo que me parece que no es muy práctico es la idea de utilizar como llave los tags NFC, porque los usuarios no se sentirían comodos teniendo que cuidar ambos el tag y las llaves, además de que el objetivo primordial del tag es usarlo como ID para personalizar su viaje, la música que escucha, rutas, etc, no tanto abrir la puerta.

jueves, 25 de abril de 2013

Laboratorio 7: Detección de Agujeros - Preprocesamiento

Para la tarea de laboratorio de esta semana, se nos dio la tarea de localizar agujeros en una imagen, utilizando los valores de los histogramas laterales de la misma. En sí se trata de un preprocesamiento (como el título dice) sobre lo que sería la detección de los agujeros, ya que solamente se encontrará un área en la cual una parte del agujero se encuentra.

Para explicar el procedimiento, se utilizará la siguiente imagen simple (es una simple hoja con un par de perforaciones, y la foto fue tomada con una cámara de celular):


El procedimiento es simple. Primero, se pasa la imagen a escala de grises, y al seguir se binariza la imagen. Este proceso de binarización es importante, porque dependiendo de la imagen en la cual vamos a buscar los agujeros, se deberá cambiar el umbral de binarización, esto debido a los contrastes que puedan dar las imágenes binarizadas al usar diferentes valores de umbrales en diferentes imágenes.
Teniendo la imagen binarizada, podemos calcular sus histogramas laterales. Estos consisten en las sumas de las intensidades por columna (histograma vertical) y por fila (histograma horizontal). Los histogramas graficados, se verían de la siguiente manera:

Histograma Horizontal


Histograma Vertical


En base a los histogramas, buscamos picos (superiores o inferiores, en este caso son inferiores) que corresponderán a las posiciones en cada eje donde se encuentrá un agujero (eje x para el vertical, y para el horizontal). Con los anteriores histogramas, podemos ver que así es, debido a que el vertical contiene 3 picos (existen 3 columnas de agujeros) y el horizontal contiene 2 picos (existen 2 filas de agujeros).
Entre más grande el pico, más agujeros se encuentran en esa columna/fila.

Localizadas las posiciones de los picos, se trazan líneas, que al cruzar, podemos suponer que se encontró un agujero en la vecinidad. 


Como se puede ver, los cruces son en posiciones en las cuales existe un agujero, excluyendo el primero, el cual es inevitable de trazar debido a la combinación de otras localizaciones de agujeros.

Para visualizar mejor la localización, e ignorar los que no son, podemos trazar rectángulos alrededor del "centro" localizado del agujero y eliminar los que no contienen pixeles o contienen muy pocos. Quedaría así:


Con esto localizamos exitosamente los agujeros, y lo siguiente es localizar los agujeros, de forma un poco más precisa e identificarlos con ID's. Lo anterior estará en el post de la clase.

Otros ejemplos

Entrada                                                                           Cruces de Picos
Agujeros Detectados

Entrada

 Entrada                                                                             Cruces de Picos

Agujeros Detectados

Código:

miércoles, 24 de abril de 2013

Adaptive Coding

For this week, I had to "invent", implement and evaluate my own adaptive coding method. I say 'invent' because probably the way I did it already exists, and is not the most optimal way.

Design

The huffman coding method normally is an offline compressor, because it works with the whole text beforehand and generates the tree based on the character's frequencies. But in the case of an adaptive coding we cannot do that because the compression is going to be online, ergo, the text is going to be received character by character, ant the purpose of making it adaptive is to generate the code as the character is received.

The way I did it is to build a Tree beforehand. This tree technically can be as simple as the whole alphabet with random frequencies, or just the alphabet disordered in the tree's nodes without caring about the frequencies. But I did not wanted to do it just like that. So what I did was to build the tree using known frequencies of the english language. Of course, this would just work when the text to compress is in english, but it works for simple cases.


With this we can build a decent tree before the online compression begins. But the problem now is that the text can and probably will have new characters that weren't considered when the tree was built.
So for this cases after the tree is complete a 'dummy' character is added with 0 frequency ('dummy' is a word not a character I know, but I can't just use any character for this purpose because it can be included in the text). This 'dummy' will work as a placeholder, separating space for a new character that is found on the text, which also works because if a new character is found, we can assume that this character which was not included in the tree-building process is not going to be very frequent character, so adding it in that space is not that bad.

But that's not it, the new character can't just replace the 'dummy' because if another new character came then it would not have space in the tree. So every time a new character comes, we search for the actual 'dummy' who is a leaf of the tree, add two child nodes which will be the new character, and another 'dummy'. This way there would be more space if another new character comes.

This process is not going to affect the already generated codes, because the new modifications to the tree are made at the same spot.

Code




Distribution file



Example run:

Reading character by character:


Reading text from file:


Performance

To test the performance of the algorithm, like in the case of the Huffman Coding I measured the compression ratio and the time it takes to compress. The text used was the Python's Zen:

"The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!"

To test the time and compression ratio, I measured both reading different lengths of the previous text.
The graphics plotted from the data:


The time graphic doesn't reveal too much about the algorithm, because as expected it increases in time as the length of the text increases. It is worth noting anyway that the time it takes to compress a 900 character text is 2 seconds, which is not very good, considering that the standard Huffman coding could do much better.


Now this graphic clearly reveals the nature of the algorithm. Initially, the compression ratio starts bad, as there is few characters and the first of them are new, so the generated codes are large, making the compression a expansion. But as the length increases, the graphic stabilizes because it starts to read common letters that are already in the buffer because of the initialization process. The following drops or inferior peaks are created every time a new character appears, because a large code is generated for them. 

As the text length increases, the algorithm is more stable, because it has a nice buffer to work with. That said the compression ratio is not very good, but at least it doesn't expand the size.

Future improvement

Some considerations with this algorithm is that, as I mentioned earlier, it only would work acceptable with texts in a known language, and that assuming that we know the distribution of letter's frequencies in that language so a initial setup can be done.

Another thing is the fact that although the 'dummy' replacement process works fine making the algorithm adaptive, this is far beyond optimal assuming that we will get a lot of new characters, because  every new character added to a 'dummy' space increases the length of the generated code by 1. So the growth of the code as new characters appear (and therefore the downfall of the compression ratio) is $ O ( n^2)$.

With that said, future improvement to this algorithm would be:
  • Multiple distributions: Assuming that we are going to compress just normal text in several languages, having multiple files with distribution of letter's frequencies in different languages could help improve the compression rate just selecting the language in which the text is written. Or a possible general distribution, but this is a lot harder.
  • A more complete distribution: Also continuing with the distribution problem, the one that I used only contained the alphabet letters, and even so it didn't discriminate between lower case and upper case. So a more general distribution, but in this case with more characters would also be a good initialization idea.
  • Dynamic 'dummy' spacing. Instead of having just one 'dummy' space which is going to span a lot of more 'dummies' as new characters appear, having more or changing the space where they are added when a certain peak is reached would improve the compression rate in cases where a lot of new characters are found.

martes, 23 de abril de 2013

Resumen: Streaming Media Congestion Control using Bandwidth Estimation

Streaming Media Congestion Control using Bandwidth Estimation

Nadeem Aboobaker, David Chanady, Mario Gerla, M. Y. Sanadidi
Introducción

El trabajo que estoy resumiendo introduce el protocolo SMCC (Stream Media Congestión Control), un protocolo de manejo de congestión adaptativo para streaming multimedia en el cual la tasa de transmisión de paquetes en una conexión es ajustada de acuerdo a la parte de ancho de banda dinámica que corresponde a la conexión. Este protocolo no exhibe la tasa pronunciada de oscilaciones característica de TCP, por lo que proporciona un control de congestión más adecuado para el streaming en aplicaciones multimedia.

Además el protocolo SMCC es equitativo, compartiendo el ancho de banda igualmente con las demás conexiones SMCC. Una ventaja importante es la robustez cuando la pérdida de paquetes se debe a errores aleatorios, lo que es típico de conexiones inalámbricas y se está convirtiendo en una preocupación más grande debido a el acceso a Internet inalámbrico emergente. Además, proporcionan simulaciones utilizando el simulador NS-2.

Protocolo SMCC

El protocolo propuesto en el paper:
  1. Adapta la tasa de envío dependiendo de la parte correspondiente de ancho de banda de la conexión.
  2. Es equitativo con aplicaciones existentes.
  3. No sufre de oscilaciones pronunciadas en la tasa de envío como la mayoría de los protocolos.
No existe una ventana de congestión en SMCC, aunque ajusta su tasa de envío, copiando la fase de TCP para evitar congestiones con un sondeo de ancho de banda (un paquete extra es enviado por ronda mientras no se detecte congestión). Cuando se encuentra congestión, la tasa de envío es reducida al actual Bandwidth Share Estimate (BSE) ó estimado de parte de ancho de banda, y se continua con el sondeo linear. La tasa de envío nunca baja hasta 1 paquete por ronda, igual que en TCP, amenos que el BSE actual dicte ese valor. 

Operaciones en el Envío

Después de una configuración  utilizando un three-way handshake entre el servidor SMCC y el cliente, el transmisor comienza a enviar datos multimedia. En la implementación del paper, se asume que la red puede manejar la tasa de envío de baja calidad, y utiliza esa tasa como la tasa inicial de envío. El tiempo de ida y vuelta inicial estimado es juntado a partir del proceso del handshake. Después de cada RTT, el transmisor incrementa la tasa de envío por un paquete. Esto tiene el efecto de copiar la fase de evitar la congestión de TCP. El transmisor reajusta su RTT estimado cada tiempo de ida y vuelta, solicitando una confirmación para el primer paquete cada ventana RTT nueva.

Cada que se recibe un NACK, se reinicia la tasa de envío al BSE contenido en el mensaje NACK, y continua el sondeo linear. El transmisor puede determinar si hay suficiente tiempo para retransmitir el paquete perdido, basado en la información que obtiene del cliente acerca del buffer actual del receptor.

Operaciones en el Receptor

Con cada paquete recibido, el cliente puede recalcular el BSE. Al recibir un paquete, que el transmisor solicita ser comprobado, el receptor envía un  ACK para ese paquete. Entonces, este intercambio de mensajes es usado para poner el RTT del lado del transmisor. Cuando un paquete perdido es detectado, un mensaje NACK es enviado conteniendo el estimado de ancho de banda actual. Es la responsabilidad del transmisor determinar si el paquete debe ser retransmitido.

Cálculo del Ancho de Banda

La ventaja del acercamiento con el protocolo SMCC es que mide la tasa en el camino de ida de la conexión, filtrando los efectos de la congestión en el camino de vuelta. Básicamente el cliente calcula la parte de ancho de banda de la conexión usando el método Receiver Based Packet Pair (RBPP). RBPP requiere el uso de dos paquetes enviados consecutivamente para determinar el ancho de banda que le corresponde a una conexión. El agregado del SMCC al número de secuencia del RBPP es fundamental para no sobre estimar la cantidad de ancho de banda e incrementar la equidad del SMCC.

Una segunda restricción es aplicada para asegurarse de que la compresión de tiempo  no ocurra en paquetes consecutivos. Se define la compresión de tiempo como lo que ocurre cuando la diferencia entre el tiempo de llegada de los paquetes es menor a la diferencia entre los tiempos de envío de los paquetes. Si los paquetes han tenido compresión de tiempo, no son usados en el cálculo del BSE, debido a que el estimado sería muy agresivo. El intento es estimar el ancho de banda hasta la tasa de envío instantánea del servidor, aunque haya más ancho de banda disponible.

Si dos paquetes recibidos consecutivamente han pasado las dos pruebas anteriores, son usadas para calcular el ancho de banda como sigue:

$Ancho de Banda ={s_{2}}/ {(a_{2} - a_{1})}$

Donde $s_2$ es el tamaño del segundo paquete, $a_1$ y $a_2$ son los tiempos de llegada del primer y segundo paquete respectivamente.

Conclusión:

El paper presenta el protocolo SMCC, un protocolo de control de congestión basado en conceptos de estimación de ancho de banda que proporciona cambios en la tasas de envío y buena utilización cuando fluctúa el ancho de banda disponible de la red.

El protocolo tiene la característica de ser justo, es decir es equitativo con otros flujos SMCC, compartiendo el ancho de banda. Es razonablemente amigable con TCP, particularmente en conexiones con pérdidas.

También, aunque SMCC dicta la tasa de envío de una aplicación de streaming multimedia, no es así con la calidad del stream. La adaptación con la calidad es una situación separada. No solo depende de la tasa de envío actual, pero también del buffer del receptor, y las preferencias de usuario y perfil.

Referencia:

Resumen: Toward a Framework for Evaluating Ubiquitous Computing Applications

Toward a Framework for Evaluating Ubiquitous Computing Applications
por Jean Scholtz , Sunny Consolvo

El documento habla sobre un framework de áreas de evaluación y métricas las cuales llaman "áreas de evaluación del cómputo obicuo" (UEA's por sus siglas en inglés ubiquitous computing evaluation areas), que fueron organizadas a partir de experiencias personales, datos sobre proyectos de colegas y literatura.

El framework presenta dos términos: métricas y medida conceptual. Las primeras asocian un significado de valor aplicando el juicio humano, mientras wque las segundas son un valor observable. Un evaluador determinado que use este framework debe decidir como recolectar medidas conceptuales, dependiendo de su implementación específica de su sistema. Para usar el framework los evaluadores identifican grupos de usuarios que serían afectados por la aplicación, directa o indirectamente. También deben decidir si se necesita establecerr un grupo de control, que pueda ayudar a los usuarios a comparar la tecnología a evaluar con su ambiente normal.

En el caso de las evaluaciones de usabiliadad en aplicaciones de escritorio, las mediciones de efectividad, eficiencia y satisfacción del usuario no son igualmente importantes. Si la discreción es necesaria, la énfasis podría ser la satisfacción del usuario; si requiere de procesamientos rápidos, optimizar la eficiencia debería ser prioridad; cuando los errores no son aceptables, la efectividad es lo más importante. Sin embargo, en el caso del cómputo obiquo, se requieren mediciones más comprensivas. Por ejemplo:
  • Sistemas que se usan al caminar deben tener tanto buena interacción con el usuario como modelos conceptuales.
  • El procesamiento de información personal debería tener un alto puntaje en confianza.
  • Aplicaciones dependientes del contexto, pueden ser malas prediciendo y con modelos conceptuales, pero deben tener buena eficiencia y efectividad.
El Framework, con las métricas  medidas conceptuales, propone las siguientes:

Atención
Concentración
Número de veces que un usuario debe cambiar su concentración debido a la tecnología
Sobrecarga
Porcentaje de tiempo que gasta el usuario cambiando de punto de concentración
Adopción
Tasa
Razonamento del usuario para usar la aplicación sobre otra ya existente (medida en tiempo o cantidad de usuarios nuevos)
Valor
Cambios en la productividad, costo/beneficio percibido
Costo
Deseo del usuario para comprar el producto
Disponibilidad
Número actual de usuaros de cada tipo de grupo de usuarios. Categoría de usuarios post implementación
Flexibilidad
Número de tareas que el usuario puede hacer que no estaban pensadas originalmente
Confianza
Privacidad
Tipo de información que el usuario tiene que divulgar para el funcionamiento de la aplicación
Consciencia
Fácil coordinación con otros en aplicaciones multi-uso
Control
Habilidad para los usuarios para manejar como y por quién son usados sus datos
Modelos Conceptuales
Predictibilidad del comportamiento de la aplicación
Grado de acierto entre el usuario modelo y el comportamiento de la aplicación
Consciencia de las capacdades de la aplicación
Grado de acierto entre el entendimiento de las responsabilidades del usuario, las del sistema, y la situación actual
Consciencia del vocabulario
Grado de acierto entre el usuario modelo y la sintáxis usada por la aplicación
Interacción
Efectividad
Porcentaje de terminación de tareas
Eficiencia
Tiempo que toma completar una tarea
Satisfacción del usuario
Calificación del usuario al realizar la tarea
Distracción
Tiempo quitado de la tarea primaria de la aplicación
Transparencia de interacción
Comparación efectiva entre diferentes tipos de dispositivos E/S
Escalabilidad
Efectividad de interacciones con un gran número de entidades de usuarios
Interacción Colaborativa
Número de conflictos, porcentaje de conflictos resueltos por la aplicación, sentir del usuario acerca de como se resolvió el problema
Invisibilidad
Inteligibilidad
Entendimiento del usuario acerca de la explicación del sistema
Control
Efectividad de interacciones proporcionadas para el control de la iniciativa del sistema
Precisión
Acierto entre el modelo contextual del sistema y la situación actual
Personalización
Tiempo que se tarda en ingresar explícitamente información de personalización
Impacto y efectos secundarios
Utilidad
Cambios en la productividad o desempeño
Cambios en el comportamiento
Voluntad para cambiar el comportamiento o tareas para usar la aplicación
Aceptación Social
Requerimientos puestos en el usuario fuera de las normas sociales
Cambios en el ambiente
Voluntad del usuario para modificar su ambiente para acomodar la aplicación
Atracción
Diversión
Nivel de gozo del usuario al usar la aplicación
Estética
Calificaciones a la visualización de la aplicación
Estatus
Orgullo al usar y poseer la aplicación
Robustez de aplicación
Robustez
Porcentaje de faltas transientes invisibles al usuario
Velocidad de desempeño
Tiempo desde la interacción del usuario hasta la retroalimentación obtenida por el sistema.
Volatibilidad
Medidas de las interrupciones.

Ejemplo de aplicación de métricas en proyectos:

Campus Aware System

Guía de tours en un campus que rastrea la posición del usuario y provee información de sus alrededores. La aplicación diseñada para visitantes, pensando en prospectos a estudiantes de ese campus, muestra notas en un mapa que fueron colocadas por otros alumnos en esa zona. La evaluación se concentró en las características de las anotaciones y el balance de atención entre el dispositivo y el ambiente físico. Las evaluaciones que realizaron, recalcando las métricas que aplican son:

  • Los dispositivos distraían. Los usuarios observaban más el dispositivo que sus alrededores(Atención - Concentración  - Distracción).
  • Los usuarios contribuían un promedio de 3.7 notas (Adopción - valor).
  • Los usuarios contribuían por ser fácil y porque encontraban valor en la información. Pero no todas las notas eran precisas o usables (Adopción - valor, Interacción - efectividad y satisfacción del usuario).
  • Los usuarios querían mayor funcionalidad. Por ejemplo, direcciones a otros lugares del campus (Adopción - valor).
  • La aplicación no siempre medía la localización de forma precisa, lo que causaba confusión entre la información y el lugar donde aparecía (Invisibilidad - precisión). 

Referencia:

lunes, 22 de abril de 2013

Tarea 6: Detección de Agujeros

Esta semana para la clase se encargo detectar agujeros en imágenes a partir de sus histogramas laterales de intensidades de pixeles. Para comprender más acerca de como funcionan los histogramas, ver el post de laboratorio.

Lo solicitado fue:
  • Detectar todos los agujeros de una imagen.
  • Los agujeros se marcan con bordes morado oscuro y relleno de morado claro.
    • Tonos ligeramente diferentes para cada agujero.
  • Se debe marcar el centro de cada agujero con un punto amarillo.
  • En el centro de cada agujero se agrega una etiqueta con el ID del agujero.
  • El programa al final imprime un listado que indica para cada ID, el tamaño del agujero en porcentaje al tamaño de la imagen.
Para realizar lo anterior, se hace uso del script de laboratorio que localiza un área donde se encuentra un agujero. Al encontrar esta área, se aplica un BFS a los pixeles que corresponden al agujero, para recorrer y almacenar todas las posiciones de los pixeles en una lista. Con dicha lista, podemos calcular el centroide y además conocer el área del agujero. 

Teniendo el centro entonces, utilizamos el tamaño asumido (medido previamente) de los agujeros para trazar un círculo alrededor del centro, pintando los bordes del círculo de color morado oscuro y el interior de morado claro. Para esto se genera un color aleatorio, teniendo en cuenta que el morado esta hecho de combinaciones principalmente de rojo y azul, y un porcentaje de verde. Entre más altos los valores de rojo y azul más claro, y entre más bajos más oscuro.

Ejemplos:








(El agujero grande fue detectado como pequeño debido a que se buscaban agujeros del tamaño de pixeles de los pequeños.)

 ....






Código:


jueves, 18 de abril de 2013

Laboratorio 6: Relleno de Elipses

Para la detección de elipses, en la tarea de laboratorio se pidió realizar lo siguiente:
  • Identificar cada círculo o elipse individual
    • Rellenarlo de un color aleatorio
    • Marcar su centro con un punto e ID con etiqueta
  • Imprimir un listado de las áreas de los círculos o elipses
    • En porcentaje de la imagen completa.
Para hacerlo, utilicé el mismo código que la entrada de la clase, pero limitandolo a la localización del centro del elipse. Conociendo el centro, se puede aplicar un recorrido BFS desde ese punto a sus vecinos de color similar, hasta pintar todo el interior del elipse o círculo en cuestión.

Con el mismo recorrido además contamos cuantos pixeles tiene en su interior el elipse o círculo. Así obtenemos un área aproximada, la cual estimamos su porcentaje en cuanto al total de la imagen, el total siendo el número de pixeles totales de la imagen (ancho x largo).

Código

El código es básicamente el mismo que la entrada de clase, modificado para al localizar un centro y comprobar que es una elipse/círculo aplicar bfs a los pixeles del mismo color que el centro.



Ejemplos:










martes, 16 de abril de 2013

Tarea 5: Detección de Elipses

Para esta entrega, se trabajará con la detección de elipses.

El método consiste básicamente en primero localizar los bordes del elipse en una imagen, calculandolos con una matriz de convolución. Estos bordes se asumirán elipses, y se buscará calcular su centro, para a partir de él localizar sus semi diámetros.

Para encontrar el centro, utilicé el método de bisección de diámetro (Tsuji & Matsumoto), que consiste en separar los pixeles del borde de un elipse por antiparalelo, usando los gradientes calculados con una convolución. Esto es para que los pixeles puedan estar en lados opuestos. 

Teniendo estos separados, se toman dos pixeles opuestos, se calcula su centro imaginando una línea entre ellos, y se hace un acumulador.  Repitiendo lo anterior se van sumando las veces que pares de pixeles votan por ese centro. El pixel más votado será el centro. 

Ya teniendo el centro, lo siguiente es encontrar los semi diámetros del elipse (A y B). Para ello podemos usar igualmente los pixeles de borde opuestos y agregarlos a una lista, ordenándola utilizando las distancias que existen entre ellos.

La distancia menor será uno de los semi diámetros y la distancia mayor será el otro.

El resultado de usar el algoritmo pasado en una imagen simple con un elipse es el siguiente:

Donde la línea verde es el semi diámetro horizontal, la azul el vertical, y el elipse naranja es el detectado por el programa.

Código:




Ahora, lo que se pidió hacer fue:
  • Marcar elipses con tonos naranja.
    • Ligeramente diferentes en cada elipse.
  • Marcar el centro con un punto azul.
    • Al centro de cada elipse agregar una etiqueta con el ID del elipse.
  • Imprimir un listado que indica para cada ID los porcentajes de los semi diámetros con respecto a la diagonal máxima de la imagen.
Algúnos ejemplos:








Referencias: