martes, 30 de abril de 2013

Tarea 5: Experimento de congestión

Se nos pide averiguar cómo se genera tráfico con distintas propiedades y cómo podemos monitorear las medidas de desempeño (mencionadas en la clase) en su simulador, para luego modificar un esquema de congestión

Hice un programa en el cual puedes generar los siguientes tipos de tráfico.
  • Trafico CBR (Constant bit rate)
  • Trafico exponencial
  • Trafico Pareto
De manera que por medio de los argumentos dados al correr la simulación se puede especificar de la siguiente manera sus entradas.

ns simulacion.tcl [Topologia] [Tipo de trafico] [Tamaño de paquetes] [Rate] [Esquema]

Por ejemplo podemos correr el programa de la siguiente manera.

ns simulacion.tcl arbol CBR 1000 1mb Heap

Se nos pide realizar un experimento sobre nuestra simulación es por eso que hice un python que obtiene del archivo .nam los valores de kbps y el tiempo para graficar la medida de desempeño Throughput de manera que podamos saber como afecta el trafico a un nodo udp con CBR en diferentes tamaños de paquetes y rates.

Obtuvimos los siguientes resultados.

De manera que podemos observar que al agregar paquetes más pesados en un rate medianamente alto se transmite menos flujo por segundo, pero con mayor cantidad de información, este experimento fue realizado con una topología de árbol y generando trafico CBR dado el ns2.


Este es el código.


jueves, 25 de abril de 2013

Métodos de diccionario-Byte pair encoding

Para este método se utiliza las repeticiones que sean iguales dentro de una cadena de manera que se sustituyen con variables para al final tener variables como referencia y una cadena más corta, para realizar este ejemplo hice en python una cadena aleatoria de la siguiente manera.

''.join(random.choice("abcde") for x in range(20))

De manera que tengamos una cadena de largo 20 y con un alfabeto A = {a, b, c, d, e}

Esta es la cadena que vamos a utilizar 'bbbeadbaaddadabceacb'

Encontramos los valores que podemos sustituir en la primera iteración

En la primera iteración buscamos caracteres que se repitan pero en bares diferentes por lo que primero voy a comprimir con la variable X a la repetición ea.

  • bbbeadbaaddadabceacb
  • X = ea

Luego en la segunda iteración encontramos caracteres repetidos como da.
  • bbbXdbaaddadabcXcb
  • Y = da
Ahora ya no tenemos caracteres diferentes que se repitan, por lo que empezamos a buscar caracteres del mismo tipo que se repitan en la cadena, encontramos bbb
  • bbbXdbaadYYbcXcb
  • Z = bbb
Encontramos al igual aa en la cuarta iteración.
  • ZXdbaadYYbcXcb
  • W= aa
Luego encontramos la letra YY repetida
  • ZXdbWdYYbcXcb
  • Q=YY
Ya no existen patrones de repetición por lo que esta sería nuestra cadena comprimida, junto con su diccionario.
  • ZXdbWdQbcXcb
    • X = ea
    • Y = da
    • Z = bbb
    • W= aa
    • Q=YY
Ahora para decomprimirlo, como ya tenemos el diccionario, en la primera iteración sustituimos la Q ya que esta contiene referencias al mismo diccionario.
  • ZXdbWdQbcXcb
  • ZXdbWdYYbcXcb
Luego sustituimos la W de la cadena que tenemos
  • ZXdbaadYYbcXcb
Ahora, sustituimos la letra Z
  • ZXdbaadYYbcXcb
  • bbbXdbaadYYbcXcb
Luego, en la siguiente iteración, sustituimos las Y
  • bbbXdbaadYYbcXcb
  • bbbXdbaaddadabcXcb
Para después en la siguiente iteración y última con la variable X
  • bbbXdbaaddadabcXcb
  • bbbeadbaaddadabceacb
Entonces como resumen tenemos lo siguiente.
  • Cadena = bbbeadbaaddadabceacb   
    • largo = 20
  • Cadena comprimida = ZXdbWdQbcXcb   
    • largo = 12

Lab: Detección de hoyos

Para este laboratorio se nos pide realizar lineas en donde las intercesiones tengan hoyos, Aquí unas capturas de pantalla.

 




Este es el código.

Huffman adaptativo

Estuve trabajando para hacer el código huffman, lo que hice fue hacer un código que va pasando de 5 en 5 caracteres para ir formando el árbol para al final tener el código huffman, en realidad no se ha implementado el decodificador y en rendimiento no grafique.




No alcancé a graficarlo.

martes, 23 de abril de 2013

Lab: Acceptance and Usability of Physical Mobile Application

Para el laboratorio de esta semana se nos piden realizar una investigación acerca de la usabilidad en cómputo ubicuo y que de igual manera pueda ser útil para nuestro proyecto, es por eso que en base a lo que estamos trabajando este semestre he decidido hablar acerca del paper Acceptance and Usability of Physical Mobile Applications cuyos autores son Tanja Herting y Gregor Broll.

Este paper trata acerca de las aplicaciones móviles en los cuales intervienen aparatos físicos y la combinaciones de gadgets móviles para la interacción de objetos presentes en el dia a dia, facilitando la interacción y asociando información y servicios a estos objetos, de manera que la usabilidad y la interacción del diseño de manera sistemática hace que tengamos diferentes categorías de aplicaciones según los casos de uso y patrones de interacción en un ambiente controlado, este paper se enfoca en el estudio de diferentes prototipos y evaluarlos de manera que se pueda generar ciertas guías para las mejores practicas en usabilidad de aplicaciones móviles.

Durante los últimos años, las aplicaciones de cómputo ubicuo ha incrementado el potencial de posibilidades para la interacción con objetos en donde antes no se tenía, es por eso que el desarrollo de tecnologías usando bluetooth, RFID, NFC o GPS hace que sea posible crear multiples aplicaciones para diferentes servicios y utilidades.

La interacción móvil fisica viene como concepto para tomar como ventaja estos desarrollos hablados anteriormente cuyos servicios usan aparatos móviles que interactuan con objetos fisicos para facilitar el descubrimiento, por ejemplo, de información.

En el paper tienen como clasificación grupos diferentes de PMA (Physical Mobile Applications), basados en diferentes patrones de interacción entre los dispositivos móviles y los objetos físicos, estos son las 6 de sus clasificaciones:

Presentación de información
Es la PMI (Physical Mobile Interaction) más simple el cual se utiliza un dispositivo móvil activo para leer información de alguna objeto, refiere a una característica homónima al contexto, dependiendo de este directamente, se puede decidir que hacer con dicha información, por ejemplo podemos encontrar aplicaciones como estas en museos o posters.

Ligas físicas
Se habla de ligas físicas cuando se tiene un objeto que contiene un acceso a algún otro servicio utilizando diferentes tecnologías, entre ellas, por ejemplo NFC, bluetooth, QR-code, etc.

Etiquetas
Sistemas que leen información de alguna etiqueta utilizada para escribir información del mundo real presentando información complementaria utilizando tecnologías como RFID o geo-tagging. (Fig 2.a) se puede ver una aplicación PMA en la cual se coloca información relevante en un objeto.


Broadcasting
Por la popularidad de etiquetas RFID y marcadores visuales, muchas PMA incluyen objetos pasivos y etiquetas para dar información de manera activa en los dispositivos móviles, usando objetos con tecnología explícita, el poner información cuando el usuario no la necesita, nos dice en el paper, que podría de cierta manera ofenderlos, por lo que en broadcasting se permite filtrar información por el usuario, básicamente podemos decir que este tipo de aplicaciones es consciente al contexto del usuario (Fig 2.b)



Tag emulation
Esta inspirada en el uso de la tecnología NFC el cual explícitamente permite a los dispositivos leer información de forma activa mediante un aparato diferente el cual emite de forma pasiva, estos son comúnmente utilizados por ejemplo en tarjetas inteligentes, como de identificación, de tickets, de registros, etc. Igualmente que las Ligas físicas, estos tienen una interacción PMI simple, por ejemplo cuando se interactua con una vending machine, puertas o alguna estación.

Interacción de 2 caminos.
Es cuando los dispositivos moviles adquieren información de objetos físicos en un paso de interacción simple, por citar el ejemplo del paper, es un proyecto llamado SMS el cual es un aparato para hacer check-in en un aeropuerto sin muchos pasos, simplemente mostrando tu celular al terminal.


Para realizar un estudio y diseño de prototipos del proyecto SMS, ellos utilizaron entre los diferentes campos, un video corto introduciendo los beneficios del proyecto, por lo que las personas realizaron una encuesta sobre que les parecía las ligas físicas, las etiquetas e interacción de dos caminos, en el cual tuvieron resultados entre 12 personas 6 mujeres y 6 hombres, entre 22 y 36 años que han utilizado celulares en aproximadamente 5,8 años.

Como conclusión, se hace un estudio demográfico entre las diferentes clasificaciones, teniendo como resultado que la mayoría de las personas (en la fecha de la publicación del paper), eran usuarios que prefieren lo tradicional para resolver sus dudas, por ejemplo ellos dicen que las personas votaron en el que es preferible pedir ayuda a una persona que usar tu celular, aunque yo creo que actualmente las personas están muy conectadas con sus aparatos móviles y que las personas prefieren tener el control de todo en ese tipo de aparatos, por lo que la combinación del cómputo ubicuo y la ingeniería de dispositivos móviles podemos tener sistemas inteligentes que ayuden a generar nuevos servicios, incluidos entre las dominos que se hablan en el paper.

Bibliografía.
Acceptance and Usability of Physical Mobile Applications, Tanja Herting. Liga.

lunes, 22 de abril de 2013

Tarea 6: Detección de agujeros

Se nos pide para esta tarea que detectemos agujeros con un relleno morado y marcar el centro con un punto amarillo, agregar un ID a cada agujero.

Por lo que primero que nada pongo algunos ejemplos que corrí con mi programa, los resultados no son muy buenos en todos los casos, para detectar los puntos mínimos utilizo como referencia la función de MATLAB peakdet en python aquí.













Este es el código

miércoles, 17 de abril de 2013

Extra points: Huffman coding

2. Table4.1 gives the relative frequencies,in English prose minus punctuation and blanks, ignoring capitalization, of the alphabetic characters a, b, . . . , z, estimated by examination of a large block of English prose, believed to be typical. This table is copied, with one small change, from [6, Appendix 1]. Find an optimal (with respect to average code word length) prefix-condition encoding scheme for S = {a, b, ... , z} if


(a) A={0,1};
(b) A={0,1,∗}.
(c) What are the lengths of the shortest fixed-length encoding schemes, resulting in uniquely decodable codes, for S, in cases (a) and (b), above?

For do this exercise I made a program that are pretty similar that my last homework where by doing the huffman tree we have the optimal prefix-condition, this is the code.



So we have like result for the question a:

  • 'a': '0000', 
  • 'c': '010001', 
  • 'b': '0111000',
  •  'e': '1', 
  • 'd': '00011', 
  • 'g': '0111011',
  •  'f': '001101', 
  • 'i': '01101', 
  • 'h': '01010', 
  • 'k': '00110011', 
  • 'j': '0011001011',
  •  'm': '001111', 
  • 'l': '00010', 
  • 'o': '01111',
  • 'n': '01100', 
  • 'q': '0011001001', 
  • 'p': '0111001', 
  • 's': '01011',
  •  'r': '01001', 
  • 'u': '010000', 
  • 't': '0010', 
  • 'w': '001110',
  •  'v': '0011000', 
  • 'y': '0111010', 
  • 'x': '0011001010', 
  • 'z': '0011001000'
Then I modified the code to have another node, so in the alphabet we have a new character and also a new coding data.


  • 'a': '11', 
  • 'c': '*01',
  •  'b': '*0**', 
  • 'e': '1'
  • 'd': '*11', 
  • 'g': '*1**', 
  • 'f': '0*0',
  •  'i': '01', 
  • 'h': '**1', 
  • 'k': '*0*1*', 
  • 'j': '*0*10', 
  • 'm': '0**', 
  • 'l': '*10',
  •  'o': '10', 
  • 'n': '00', 
  • 'q': '*0*111', 
  • 'p': '*1*0', 
  • 's': '***', 
  • 'r': '**0', 
  • 'u': '*00', 
  • 't': '1*', 
  • 'w': '0*1', 
  • 'v': '*0*0', 
  • 'y': '*1*1', 
  • 'x': '*0*11*', 
  • 'z': '*0*110'

For the next question we have that e are the last in the list and only have a number 1 as a bit of codification and for the question b also have e with one bit, but in general we have a code more shorter in the second one than in the first one.

Lab: Relleno de elipses/círculos

Se nos pide que del código que detecte elipses y/o círculos

• Identificar cada elipse/círculo individual
• Rellénalo de un color aleatorio
• Sigue marcando su centro con bolita & ID con etiqueta
• Imprime un listado de los áreas de los círculos/elipses
• En porcentaje de la imagen completa

Por lo que para realizar esto, utilicé las mismas funciones que he estado reutilizando durante el curso, para identificar el elipse o círculo lo que se hace es verificar sus radios y comparar que si el radio calculado obtenido es igual para ambos lados (o sea, vertical y horizontal) quiere decir que tenemos un círculo, por el contrario tenemos un elipse.

Estos se rellenan con mi subrutina BFS con un color aleatorio, se marca una bolita en el centro y se identifican para proceder a obtener un listado de los que son círculos y elipses, al igual que su porcentaje en base a la figura completa.

Estas son las capturas del programa.





En donde podemos ver que el programa sabe satisfactoriamente si es un circulo o un elipse al igual que información en base a la imagen en general

A continuación expongo el código modificado.

martes, 16 de abril de 2013

Lab: Localización interiores y exteriores

Para este laboratorio de cómputo ubicuo, se nos pide realizar una investigación sobre un proyecto de investigación de sistemas inteligentes que utilicen localización de interiores y exteriores de forma definida para cómputo ubicuo, es por eso que en este laboratorio voy a hablar acerca de un proyecto llamado DOLPHIN en donde se hace el desarrollo de un sistema completo de localización de objetos preciso en interiores pero reduciendo costos en sensores y nodos de redes que otros.

Como se sabe, sacar la ubicación de algún objeto en el interior de un espacio es una tarea difícil pero a la vez es clave para aplicaciones sensibles al contexto en cómputo ubicuo, actualmente existen diferentes sensores que ayudan a aproximar la ubicación de objetos pero estos algunas veces para poder desarrollarlos en un sistema completo requiere que se instalación complicada o una configuración que requiere ser completamente manual o para la localización de exteriores existen satélites como GPS que son buenos para eso, pero en interiores tenemos diferentes dificultades que debemos de tomar en cuenta, es por eso que se desarrollo un sistema llamado Dolphin, en el cual se pretende reducir el costo de configuración, principalmente.

El sistema dolphin es un sistema de redes inalámbricas distribuidos en sensores nodos que son capaces de enviar y recibir señales RF y ultrasónicas, proporcionando la posición de manera autónoma con una configuración manual mínima, en este paper lo que se pretende es describir el diseño de la implementación de este sistema y evaluar su comportamiento en diferentes ambientes.



La estructura de su sistema es de la siguiente forma, se tiene nodos que tienen transmisión y receptor de sensores RF y ultrasónicos, al igual que un CPU pequeño para hacer los cálculos de posición, las señales RF contienen una predeterminada posición, mientras tanto el nodo A transmite un pulso ultrasónico que permite medir la distancia del nodo, basado según la velocidad del sonido, el nodo recauda información de 3 o más entradas de distancia y hace un cómputo en 3D con un algoritmo parecido al que se utiliza para el GPS.

De manera que, si deseamos configurar el sistema Dolphin, basado en configuración hop-by-hop, hace que sea mucho más sencillo, por ejemplo en la imagen que ellos nos muestran, tenemos un nodo D que determina la posición recibiendo los pulsos ultrasónicos de los nodos referenciados, que en este caso es el A, C y B, pero como podemos ver, el E y el F no reciben pulsos ultrasónicos por que tienen un obstáculo, en este caso, la pared, entonces ¿Qué pasa en este caso?, bueno, como ya tenemos una posible posición para el nodo D, entonces el nodo E recibe un pulso ultrasónico y calcula a cuanta distancia se encuentra del nodo D, pero ahora también utilizando como referencia el C y B porque estos no los obstruye la pared, entonces si ya tenemos la posición D y E, entonces el nodo D utiliza los nodos E, D y posiblemente el C para determinar sus distancias, por lo que esta es la manera que el sistema trabaja, jugando con las posiciones de todos los nodos y de esta manera poder obtener la referencia de cada uno.

Existen ventajas al utilizar este mecanismo, primero que nada es que el sistema requiere solamente algunos nodos para determinar todas las posiciones de los nodos, mínimo se necesitan 3 nodos, otra de las ventajas es que inclusive si los nodos entre si no pueden recibir señales ultrasónicas, nos podemos utilizar como referencia de otros nodos directamente, de manera que tenemos un algoritmo distribuido.

El algoritmo utilizado en dolphin utiliza dos tipos de nodos, el que se utiliza como referencia y los nodos normales, los cuales ya tienen su localización, cada nodo tiene un ID para la comunicación RF, proporcionando una lista de nodos y su posible posición.

Se mandan entre los nodos, mensajes de intercambio, entre ellos un mensaje de notificación de ID, la medida el cual produce la distancia entre cada nodo y un mensaje de localización después de un procesamiento entre el nodo master, el nodo transmisor y el nodo que recibe información.

Un nodo master selecciona un nodo transmisor basado en la lista de nodos, trata de transmitir la medida de pulsos con cierto ID, cuando el nodo recibe dicho mensaje, une su ID con el transmitido para luego convertirse en un nodo transmisor y luego generar el pulso ultrasónico, al mismo tiempo todos los nodos comienzan a recibir e iniciar su contador interno, si un nodo que recibe detecta un pulso ultrasónico, este para de contar internamente y calcula la distancia entre el nodo y el nodo transmisor.

No todo es maravillas, después de su implementación y experimentos, realizaron un prototipo con unos pics y unos chips RF/ultrasónicos, pusieron algunos nodos e implementaron el programa, descubrieron que existe un error de propagación entre ciertos nodos, ya que si un nodo esta mal posicionado, afecta la determinación de todos los demás, por lo que ellos dicen que están trabajando en minimizar el error.

Como quiera, considero que su sistema es interesante y creo que puede ser un buen paso para iniciar un proyecto de cómputo ubicuo en el cual se requiera saber la posición de cada objeto, tal vez con alguna variación de su algoritmo utilizado podemos obtener resultados buenos para ciertas condiciones.

Esto sería todo para el laboratorio.

Referencias.

DOLPHIN: An Autonomous Indoor Positioning System in Ubiquitous Computing Environment 

Yasuhiro FUKUJU, Masateru MINAMI, Hiroyuki MORIKAWA, and Tomonori AOYAMA.
Liga.

domingo, 14 de abril de 2013

Tarea 5: Detección de elipses

Para esta tarea se nos piden los siguientes puntos:

  • Detectar elipses marcados con tonos naranja.
  • Marcar el centro con un punto azul
  • Poner una etiqueta ID 
  • Imprimir un listado de los semidiametros perpendiculares y su porcentaje con la diagonal máxima de la imagen

Para realizar esto, se nos pide utilizar el método de la cuerda tangente, es por eso que se hacen los siguientes pasos:
  1. Cambiar a grises
  2. Sacar convolución Laplaciana para sacar bordes
  3. Normalizo la imagen
  4. Binarizo los datos
  5. Sacamos el promedio
  6. Se agrega un umbral
  7. Agregamos BFS para detectar todos los bordes 
  8. Los pintamos de diferentes colores
  9. Sacamos mascara de sobel en X
  10. Sacamos mascara de sobel en Y
  11. Generamos puntos aleatorios para cada borde detectado
  12. Calculamos su theta 
  13. Creamos dos lineas tangenciales a los bordes
  14. Se calcula su punto medio
  15. Realizamos los votos a partir de esa linea hasta al final del borde siguiente
  16. Repetimos varias veces para obtener mejor precisión en el centro
  17. Se calcula los radios en X y en Y
  18. dibujamos un punto entre 0 a 360 grados a partir de los datos obtenidos
  19. Vemos el elipse detectado en un tono anaranjado
Les muestro unas capturas de pantalla del procedimiento








Otros ejemplos:








Este es el código de la función principal, si quieren ver mi repositorio, ahí se encuentra completo.



jueves, 11 de abril de 2013

Huffman coding

For this week we need to implement the tree-based Huffman coding for Unicode strings, implementing the tree structure, then we need to do a report with a design of an experiment to determine the worst-case and typical-case complexity and compression ratio.

Determining the worst-case and typical-case

As we know, fibonacci sequence are the sum of the previous two, knowing at first that Fo = 0 and F1 = 1, this sequence produces a tree that are the most unbalanced, because if we know that huffman are base in the last two frequencies which produce another node that are the sum of both, so, if we have a fibonacci sequence as a frequency of the letters that we would like to test, we can have this type of tree.

For example, let say that we have these case, when we have only 7 letter, just for know how works.


1, 1, 2, 3
a, b, cc, ddd


Alphabet and probability:
a : 0.142857 = 1/7
b : 0.142857 = 1/7
c : 0.285714 = 2/7
d : 0.428571 = 3/7

Tree:

                  [1] d
[] cabd
                                 [1] b
                      [1] ab
                                 [0] a
           [0] cab
                      [0] c

The same:

              cabd

             /        \
           d        cab
                     /    \
                    c   ab
                        /  \   
                        a  b

We can see that the tree have only new nodes just for one side, because we made the tree having the sum of the probabilities of frequency, and have a pattern that builds the tree in that way, also we can say that if the have in all the probabilities the same number, would have the same pattern.

A typical case is when we have a frequencies that are not the same for all the text or that don't have the pattern of fibonacci, so I made an experiment for the type that I think is interesting, I made a different graphics that can shows that these type of cases are bad compare to the average case.


We have in this graphic the sum of bits that need to handle with a entire alphabet, using ascii, without compress the bits in the line yellow, the average using huffman compression and then using fibonacci sequence frequency and compression with huffman, with a sample of 35 strings with different size.

In this graphic, we can see the compress ratio between the average-case and the worst-case, we can see that clearly are much difference between them, having a difference about 62% more compress than the strings that have a fibonacci sequence.

Program

lunes, 8 de abril de 2013

Presentación proyecto

Lab: Sugerencias de hardware and software

Para el laboratorio de la materia de Cómputo Ubicuo se nos pide realizar sugerencias a los equipos que presentaron la clase pasada sobre el hardware y software que ellos definieron para el desarrollo de sus proyectos, por lo que leyendo acerca de sus proyectos voy a resumir brevemente que es lo que yo considero que deberían tomar encuentra.

Seguridad en computadora.

Para su proyecto, creo que están bien el hardware que quieren utilizar, yo pudiera sugerirles que para agregar más seguridad pueden utilizar algún tipo de sensor como este [tienda] en donde puedes saber si existe luz o no, para de esta manera saber si la persona está utilizando la computadora o no y saber cuando debe estar detectando a la persona la cámara y no tenga que interactuar con ella en la computadora justo al picar botones, si no que este capturando imágenes necesarias para al momento que la persona este enfrente de ella, esta se pueda desbloquear.


Carro con NFC.

Si van a utilizar python, pueden utilizar la librería pynfc, según encontré en internet tiene buena integración con raspberry pi y pueden utilizar python, lo cual hace que su código sea mas simple y no esten batallando tanto en ese aspecto, aquí pueden encontrar la liga a la librería [liga]


Galería inteligente.

Para la lectura de la descripción de las obras pueden utilizar el wave shield de arduino [tienda] que te da la posibilidad de con una tarjeta de memoria SD tener conectados bocinas y poder transmitir sonido de alta calidad desde el arduino sin necesidad de conectarlo a una computadora, aquí les dejo un ejemplo.



Oficina inteligente.

Cómo vi que van a utilizar sensores RFID y ustedes están planteando el utilizar pulseras, pudieran utilizar también etiquetas que estén en metal de manera que se agreguen por ejemplo a un carro y que cuando entre por la cochera de la oficina o estacionamiento, pueda tener desde ahí el acceso a la oficina de forma controlada.

Aquí les dejo la liga de la etiqueta metálica [tienda].

Alarma de automóvil

En su presentación que tienen en su blog ponen que van a necesitar sensores, pero no especifican exactamente que tipo de sensores van a utilizar, entonces aquí les pongo algunos que considero útiles, junto con sus ligas a la tienda 5hz.

Sensor de sonido [tienda]:
Un sensor de sonido les pudiera servir para cuando se escuche algún ruido dentro de la casa cuando el coche no se encuentra en la cochera, mandar una notificación de que existe un ruido extraño en casa.

Etiqueta RFID para metal [tienda]:
Esta pudiera ir en el carro para de alguna manera por medio de un sistema que hicieran pudieran detectar que el carro se encuentra en la cochera y avisar a la casa que se encuentra el habitante en ella.

Localización de cosas por bluetooth

Como veo que van a utilizar librerías para reconocimiento de voz, existe una librería muy completa que a mi me gusta, se llama Dragonfly, es un framework para python que es muy bueno y les resultaría de mucha ayuda para lo que están desarrollando, lo que tienen de hardware considero que está muy bien para su proyecto, pueden encontrar la liga del framework aquí [liga]

Casa segura.

Para este proyecto pueden utilizar este switch miniatura de contacto magnético, simplemente se instala en la puerta y lo conectas al arduino, por lo que ahora puedes saber cuando se abre o se cierra la puerta y de esta manera tener el control de dicha puerta o ventana, en internet viene mucha información de como lo puedes utilizar, por ejemplo puedes usar un xbee para crear una alarma inalámbrica como viene en los ejemplos.

Aquí puedes encontrar ese switch [tienda]

Garage inteligente.

Tal vez no para el prototipo final pero si para una versión de prueba pueden utilizar una toolkit que nosotros utilizamos para hacer el proyecto de cómputo integrado, el amarino, se utiliza para conectar mediante bluetooth el arduino y el android de esta manera pueden hacer pruebas sencillas para saber si su smartphone esta pasando información a su arduino y realizar algunas mejoras para el prototipo final.

Esto sería todo para el laboratorio de cómputo ubicuo, si tienen alguna duda o comentario, favor de hacérmelo saber.

domingo, 7 de abril de 2013

Lab: generación de topologías y modos de rateo

Para esta semana de laboratorio se nos pide averiguar cómo se habilitan distintos modos de ruteo en ns-2, al igual que inventar e implementar mecanismos de generación de topologías que imiten alguna infraestructura de redes del mundo real en específico.

Modos de ruteo

Los distintos modos de ruteo que podemos modelar en NS2 se encuentran disponibles códigos ejemplos de como implementar una prueba de ruteo según el código que estes realizando en las clases de prueba de NS-2.35 versión en la cual he estado trabajando, estos son los que yo encontré en la carpeta ns-allinone-2.35/ns-2.35/tcl/test:
  • Ruteo algoritmico:
    • Lo puedes encontrar en el archivo test-suite-algo-routing.tcl
  • Ruteo jerárquico:
    • Lo puedes encontrar en el archivo test-suite-hier-routing.tcl
  • Ruteo de LAN y broadcast:
    • Lo puedes encontrar en el archivo test-suite-lan.tcl
  • Ruteo manual:
    • Lo puedes encontrar en el archivo test-suite-manual-routing.tcl
  • Ruteo centralizado multicast:
    • Lo puedes encontrar en el archivo test-suite-mcast.tcl
  • Ruteo dinamico:
    • Lo puedes encontrar en el archivo test-suite-routed.tcl
  • Clasificador virtual de ruteo:
    • Lo puedes encontrar en el archivo test -suite-vc
Al igual que podemos encontrar mecanismos que nos sirven para hacer scheduling, manejar colas, admisiones de control, etc, entre los cuales encontré:
  • Algoritmos de scheduling como:
    • FQ (Fair Queueing)
    • SFQ (Stochastic Fair Queuing)
    • DRR (Deficit Round Robin)
    • FIFO
      • Estos se encuentran en el archivo test-suite-schedule.tcl
  • Control de admisión:
    • MS, HB, ACTP, ACTO
      • Estos se encuentran en el archivo test-suite-intserv.tcl

Generador de Topologías

Por el lado de implementación de un generador de topologías realicé un programa en TCL en el cual pones como parámetro la topología que deseas realizarle un experimento y realiza una simulación de envio de datos con TCP y FTP.

Las topologías implementadas son:
  • Arbol
  • Estrella
  • Anillo
  • Mixto
  • Lineal
Entonces, cuando ejecutamos la simulación, ponemos la topología la cual queremos experimentar.
ns simulacion.tcl arbol

A continuación les presento el código que hice.



Estas son algunas capturas de pantalla del código funcionando.





Para finalizar les muestro un video de la simulación de la topología de árbol.


Esto sería todo para la actividad de laboratorio.