27 de febrero de 2013

Actividad 4: Detección de Diagonales

Laboratorio de Visión Computacional
Actividad 4

Para esta entrega de laboratorio se nos pidió detectar líneas diagonales, además de las líneas horizontales y verticales que ya se habían logrado detectar en la entrega anterior.

Enseguida las imágenes originales con su respectivo resultado después de aplicar la detección de líneas.










Código


Esta es la sección de código relevante, donde comparando con la entrega hecha para la clase, se modifico la forma en que se obtiene el ángulo usando una función de la librería math de python, lo cual nos ahorra unas cuantas líneas y simplifica el proceso.

Tenemos el método de convolución para aplicar las máscaras que nos facilitan la detección de líneas y no solo bordes como en otras entregas anteriores.

Ahora el programa pinta de color azul las líneas horizontales, de color rojo las verticales y de color verde las diagonales.


Otra forma que encontré para encontrar líneas diagonales, fue usando una máscara diferente para detección de diagonales. Usando esta máscara junto con lo ya implementado anteriormente para detección de formas (ahora en este caso las líneas), logre separar por colores diferentes secciones de líneas.

Usando dos de las imágenes mostradas al inicio, obtuve el siguiente resultado.



26 de febrero de 2013

Algoritmos Eficientes de Recuperación de Redes Inalámbricas

Laboratorio de Redes de Telecomunicaciones
Lectura

Nombre del documento original:
"Efficient Recovery Algorithms for Wireless Mesh Networks with Cognitive Radios"
Autores:
Roberto Hincapie, Li Zhang, Jian Tang, Guoliang Xue, Richard Wolff y Roberto Bustamante
Enlace:
http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=5198977


Las Redes de Malla Inalámbricas (Wireless Mesh Networks - WMN) están previstos para proporcionar diversos datos y aplicaciones multimedia, tales como acceso a Internet, juegos compartidos, Video-on-Demand (VoD) y las comunicaciones de emergencia, y a los usuarios inalámbricos en el futuro.

Estas aplicaciones implican generalmente un gran volumen de tráfico, que necesita una gran cantidad de ancho de banda para la entrega de paquetes. Un usuario inalámbrico no autorizado con radio cognitiva (usuario secundario) puede detectar y acceder a un espectro de banda utilizado, incluso si está autorizado, siempre y cuando no haya usuarios con licencia para esa red (también conocidos como usuarios primarios) que estén activos en esa banda, con el fin de conducir a una mejor utilización de los recursos, por lo tanto mayor ancho de banda y mayor rendimiento obtenido.

Por lo tanto, radios cognitivos pueden mejorar las funcionalidades de un sistema WMN y ayudar a servir mejor a sus aplicaciones. Sin embargo, el espectro o canal disponible fluctúa en el tiempo y la ubicación. En una WMN con radios cognitivos, cuando un usuario primario se convierte en activo en un canal en un área determinada, los nodos y enlaces que estaban usando ese canal debe liberarla, lo que provocará fallos de tráfico. Planes de recuperación simple y eficaz se necesitan para reasignar los recursos disponibles para el tráfico en el que se ocasionaron fallas.

Formulación del Problema

Consideramos una WMN que consiste en nodos de la malla con ubicaciones conocidas, cada uno de los cuales está equipado con un radio cognitivo. El espectro disponible se divide en un conjunto de canales no ocupados. Durante un cierto período de tiempo, un conjunto de canales están disponibles para un nodo de la malla particular. La disponibilidad de canales puede cambiar con el tiempo debido a la aparición de los usuarios primarios en la misma zona. Cualquier espectro propuesto esquema de detección se puede utilizar para detectar los canales disponibles a nivel local. También asumimos que cada nodo tiene una radio de bajo coste de control, que se utiliza para intercambiar mensajes de control sobre un canal de control común.

Desempeño de acciones a través del simulador

Ahora veamos el desempeño de las acciones que se emprendan a través de simulaciones con NS2 y CPLEX 10.1. En la simulación, los nodos de la malla se colocaron al azar en una región cuadrada de 1000m x 1000m. Todos los canales se dividieron en tres grupos, cada uno de ellos tiene el mismo número de canales. Los canales en el primer grupo tienen un rango de transmisión de 250 m y una velocidad de datos de enlace de 11 Mbps. Los valores se fijaron a 200 m y 22 Mbps para los canales en el segundo grupo, y 150 m y 54 Mbps para los canales en el tercer grupo. En cada canal, el alcance de la interferencia se ajusta a 2 veces el rango de transmisión correspondiente. Cada usuario primario fue colocado al azar y su canal ha sido seleccionado al azar. Establecieron el número de canales a 12, el número de ranuras de tiempo en una trama a 20, y el número de usuarios activos primarios a 8. En la simulación, se generaron los flujos de tráfico de la siguiente manera: para cada flujo, escogidos al azar una fuente, un destino y una demanda de tráfico en el intervalo [0.1, 5] Mbps.

A continuación, aplica el algoritmo de Dijkstra para encontrar un camino más corto y un algoritmo aleatorio simple para asignar bloques libres de transmisión para cada enlace a lo largo del camino para satisfacer su demanda de tráfico sujeto a la restricción de interferencia. El flujo es acepatdo sólo si una ruta factible y solución de asignación de bloque se pueden encontrar. De lo contrario, un nuevo flujo se generará y su factibilidad serán verificadas. Después de este proceso, hemos creado un conjunto de flujos de extremo a extremo y se identificaron los bloques de transmisión utilizados y libre en cada enlace. La relación entre el número de flujos fijos y el número total de flujos fallidos, y la relación entre la cantidad de tráfico fijo y la cantidad total de tráfico no se utilizan como parámetros de rendimiento y que se conocen como "relación de eficiencia de recuperación de números" y "eficiencia de recuperación relación rendimiento".

Aquí conforme se incrementa el número de canales tenemos una menor eficiencia.


Aplicado el algoritmo mencionado para la simulación se ve un cambio significativo en la eficiencia en cuanto prevención de fallos en la red inalámbrica.


En pocas palabras...

En el trabajo observado se trató con la recuperación de fallas causadas por cambios en la disponibilidad de canales en WMN con radios cognitivas. Formularon los problemas correspondientes de ILP y se resolvieron para obtener soluciones óptimas. Y además proponen un algoritmo eficiente para distribuir una rápida recuperación ante fallos.

Mediante una simulación se encontró que el rendimiento dado por el algoritmo propuesto es muy próximo a las soluciones óptimas, suponiendo que existe un algoritmo que arrojará resultados óptimos en tiempo polinomial.

24 de febrero de 2013

Detección de Líneas

Visión Computacional
Tarea 3

La tarea de esta semana fue la detección de líneas. Veamos los resultados directamente en la comparación de imágenes originales y las imágenes después de la detección de líneas.







Aquí una más, donde tuve que cambair el color de líneas horizontales porque los tonos de rojo no se distinguían muy bien.




Código


El código completo es el siguiente, y como en ocasiones anteriores, el parámetro que necesita es la ruta a una imagen.



Podemos ver en la captura anterior, que en el terminal se imprimen los contadores para los pixeles horizontales y verticales.

23 de febrero de 2013

Experimentos de Calidad de Servicio

Redes de Telecomunicaciones
Tarea 4

El experimento que yo realicé para medir la calidad de servicio fue en el streaming en vivo que ofrece Ustream.tv usando una red Axtel vía Ethernet y vía WiFi.



Las pruebas que realicé fue tomando en cuenta solo algunos de los parámetros más comunes para verificar la calidad de servicios que necesitan la transferencia de vídeo y/o voz.

Las pruebas fueron las siguientes:
  • Pérdida de paquetes
  • Latencia
  • Jitter
  • Ancho de banda

Para esta última prueba fue necesario instalar un paquete adicional en Ubuntu, llamado bmon, que se encarga de medir el ancho de banda usado en la computadora, donde es posible especificar que interfaz es la que queremos monitorear.

Para instalar, desde la terminal se escribe lo siguiente:
~$ sudo apt-get install bmon
Si queremos ver que es lo que hace este nuevo paquete, basta con escribir lo siguiente y ver la información que se despliega.
~$ bmon
Al ejecutarse podemos ver en el mismo terminal algo como lo siguiente.


Pero tener el monitor en la terminal no me es útil ya que yo necesito de alguna forma estar tomando los datos arrojados por esta herramienta, afortunadamente es posible agregar parámetros para poder ver la información, sin la visualización como monitor.

Podemos probar lo siguiente, donde eth1 es la interfaz a probar, y ascii es el método de salida que deseamos.
~$ bmon -p eth1 -o ascii

Esto provoca que se ejecute infinitamente, pero podemos agregar unas opciones más para evitar esto. Con el siguiente comando obtenemos solo 5 muestras y quitamos la cabecera de información.
~$ bmon -p eth1 -o 'ascii:noheader;quitafter=5'

Con esto ya podemos leer la información impresa en la terminal de una forma más cómoda, y así es como usaré el comando para ejecutarlo desde un script de python que procese esa información. Cabe mencionar que noté que en la primera muestra todos los datos siempre aparecen en ceros, por lo que en el programa descarte la primer línea.

Otro comando utilizado para la prueba es el ping que ya viene instalado en Ubuntu, y yo lo usé de esta manera para hacer pruebas al host de Ustream.
~$ ping www.ustream.tv -c 5 -s 120 -Q 0x10 -n
Donde -c 10, es la cantidad de paquetes a probar, -s 120 es el tamaño del paquete (más 8 bytes adicionales para la cabecera), -Q 0x10 es para minimizar el retraso de paquetes, y -n es para no mostrar el nombre del host en la información impresa.

Con estos dos comandos desde la terminal puedo obtener la información necesaria para calcular los parámetros de QoS mencionados al inicio. Es importante señalar que el comando ping arroja por si solo estadísticas de los paquetes enviados, pero lo que mi script de python hace es calcular esos datos, manipulando la información obtenida.

Código


Al ejecutarlo lo podemos dejar sin parámetros, ya que por defecto hace prueba a www.ustream.tv con una cantidad de 100 paquetes.


Al terminar, nos muestra el resumen de información.


Pruebas


Ethernet
ramon@pavilion:~/Documents/redes-de-telecomunicaciones$ python qos.py 
Packets sended: 100
Packets received: 99
Lost percentage: 1.0
Max time: 78.0 ms
Min time: 71.8 ms
Latency: 75.15 ms
Jitter: 3.12 ms
Bandwith used: 129.37 KiB/s
ramon@pavilion:~/Documents/redes-de-telecomunicaciones$ python qos.py 
Packets sended: 100
Packets received: 100
Lost percentage: 0.0
Max time: 92.1 ms
Min time: 68.2 ms
Latency: 84.09 ms
Jitter: 12.68 ms
Bandwith used: 125.29 KiB/s

Como podemos ver la cantidad de paquetes perdidos es casi nula por esta vía, y los tiempos de latencia y jitter son pequeños como se espera de un servicio como el que estamos probando.

WiFi
ramon@pavilion:~/Documents/redes-de-telecomunicaciones$ python qos.py 
Packets sended: 100
Packets received: 98
Lost percentage: 2.0
Max time: 1204.0 ms
Min time: 67.8 ms
Latency: 84.84 ms
Jitter: 138.44 ms
Bandwith used: 129.17 KiB/s
ramon@pavilion:~/Documents/redes-de-telecomunicaciones$ python qos.py 
Packets sended: 100
Packets received: 97
Lost percentage: 3.0
Max time: 147.0 ms
Min time: 67.9 ms
Latency: 70.61 ms
Jitter: 60.89 ms
Bandwith used: 123.25 KiB/s

En este caso si es posible ver con más frecuencia pérdida de paquetes, y en ocasiones el tiempo de respuesta en uno de ellos se eleva mucho, afectando los demás resultados. Pero aún así, no sobrepasamos exageradamente los tiempos deseados, tal y como se mencionó en la entrada de laboratorio.

Referencias:
Ping command
Bandwidth ubuntu monitor
QoS en linux

22 de febrero de 2013

Actividad 4: Pruebas para QoS

Laboratorio de Redes de Telecomunicaciones
Actividad 4

QoS (Quality of Service) o Calidad de Servicio, se refiere a la calidad en la transmisión y recepción de información a través de una red de datos.

Existen diferentes definiciones para el término de Calidad de Servicio, aquí las más importantes.
  • ITU E.800: Efecto global de las prestaciones de un servicio que determinan el grado de satisfacción de un usuario al utilizar dicho servicio.
  • IETF RFC 2386: Conjunto de requisitos del servicio que debe cumplir la red en el transporte de un flujo.
  • ISO-9000: Grado en el que un conjunto de características inherentes cumple con los requisitos.

En realidad QoS es un concepto abstracto y subjetivo, y no existe una medida estandarizada, es especialmente importante para ciertas aplicaciones tales como la transmisión de vídeo o voz. Se pueden realizan medidas objetivas y/o subjetivas.

Parámetros que definen la QoS


Existen varias medidas que se pueden realizar en una red para evaluar la calidad del servicio, y cada una de ellas puede estar dada por más de un parámetro. Veamos algunas de estas medidas y sus respectivos parámetros.

Medida Parámetros de QoS
Tiempo Latencia, Retraso, Tiempo de recuperación, Garantía, Intervalo de sincronización y Disponibilidad
Volumen de tráfico Throughput y Picos de volumen
Precisión Precisión de direccionamiento, Tasa de error e Integridad
Robustez Confianza, Mantenibilidad, Resistencia y Supervivencia
Contabilidad Costo y Auditabilidad
Manejabilidad Monitorización y Control
Seguridad Autenticación, Confidencialidad y Seguridad del tráfico del flujo

Parámetros más comunes para medir la calidad de servicio:
  • Ancho de Banda
  • Latencia
  • Jitter
  • Perdida de paquetes


Ancho de Banda

Es una medida de recursos disponibles para transmitir datos. También es una medida que se usa para definir la velocidad de nuestra conexión a Internet. Se puede usar para referirse a capacidad o a consumo.

El ancho de banda es la máxima cantidad de datos que pueden pasar por un camino de comunicación en un momento dado. Cuanto mayor sea el ancho de banda, más datos podrán circular por ella al segundo. El ancho de banda se indica generalmente en bits por segundo (bps), kilobits por segundo (Kbps), o megabits por segundo (Mbps).


En el ejemplo de la imagen podemos ver que la prueba de velocidad nos esta arrojando 4.77 Mbps, lo que indica que por cada segundo se es posible enviar casi 5 millones de bits. Hay que saber que este tipo de pruebas hacen un promedio de los picos y bajos que hay al hacer la prueba, ya que no es una velocidad constante siempre.

Este parámetro mientras más grande sea, mucho mejor calidad en el servicio podemos tener.


Latencia

Se refiere al nivel de trafico a través del tiempo. Esta información es útil especialmente en el transito de tráfico de tiempo real e interactivo.

En redes informáticas de datos se denomina latencia a la suma de retardos temporales dentro de una red. Un retardo es producido por la demora en la propagación y transmisión de paquetes dentro de la red.


La medida usada para la latencia es habitualmente ms (milisegundos), y mientras menor sea en una red, nos indica que la capacidad de respuesta para enviar y recibir paquetes, es más rápida.


Jitter (Variación de retardo)

Es el efecto de desplazamiento de la señal o bit con la posición ideal que debería ocupar en el tiempo.

También conocido como variación de retardo, en el caso de transferencia de voz, ocasiona que los paquetes sean descartados por el receptor cuando este no recibe los paquetes a tiempo, en la práctica los usuarios perciben este problema como un entrecortado en la voz.

Debido al retardo mismo del enlace también se pueden descartar paquetes, incluso si tuviera un retardo fijo, pero aquí también se puede aplicar el Jitter Buffer como una alternativa de solución para incrementar el tiempo de espera del receptor sin que descarte los paquetes.

En otras palabras el parámetro Jitter, es como la medida de la varianza en que puede rondar el propio valor de la latencia, como si se tratase de un umbral.

Mientras menor sea el Jitter, indica que la latencia varía mucho menos y por lo tanto tendremos una mejor calidad de servicio.


Pérdida de Paquetes

Se refiere a los paquetes de datos que son desechados cuando las colas de tráfico están colapsadas, perdiéndose información en el camino.

La pérdida del paquete ocurre cuando uno o más paquetes de los datos que viajan a través de la red falla para alcanzar su destino. La pérdida del paquete se distingue como uno de los tres tipos de error principales encontrados en comunicaciones digitales.

Las comunicaciones en tiempo real están basadas en el protocolo UDP. Este protocolo no está orientado a conexión y si se produce una pérdida de paquetes no se reenvían. Además la pérdida de paquetes también se produce por descartes de paquetes que no llegan a tiempo al receptor.

La perdida de paquetes máxima admitida para que no se degrade la comunicación en una transferencia de voz deber ser inferior al 1%.


Para realizar una prueba de pérdida de paquetes, como lo hacen muchos de los servicios en línea para este tipo de pruebas, es enviando una cantidad fija de paquetes, luego se calcula cuantos paquetes llegaron sin problemas, y por último se calcula el porcentaje de paquetes perdidos en la red.

Mientras menor sea el porcentaje de paquetes perdidos, la calidad de conexión será mucho mejor.


Referencias:
Calidad de Servicio (QoS) en redes
Gestión de tráfico y Calidad de servicio
Latencia
Pérdida de paquetes

21 de febrero de 2013

Actividad 4: Retroalimentación de Proyectos

Laboratorio de Cómputo Ubicuo
Actividad 4

En la pasada clase de Cómputo Ubicuo todos los equipos presentamos el estudio de campo realizado, donde mayoritariamente se hizo uso de entrevistas y/o encuestas para obtener información de personas que podrían ser futuros usuarios de los productos o servicios que estamos desarrollando, y después de escuchar a todos los equipos se nos pidió hacer una retroalimentación entre nosotros mismos para lograr obtener algunas recomendaciones hacia los proyectos y a la forma en que se realizaron los estudios de campo.

A continuación están mis recomendaciones, sugerencias y críticas constructivas de las presentaciones vistas.


Alarma Inteligente para Autos


Integrantes: Alex, Sergio, Roberto y Cristhian.

En la encuesta electrónica hecha por el equipo de este proyecto, noté el error de usar casillas de verificación (check box) en vez de botones de opción (radio button) en algunas de sus preguntas, en donde la persona que contesta las preguntas solo debería de poder elegir entre una respuesta u otra, con el fin de obtener información exacta.

También otro detalle en la encuesta fue el uso de cajas de texto para responder preguntas donde hubiera sido mejor poner algunas respuestas habituales y que se seleccionen mediante casillas de verificación, y dejar al final un espacio para indicar si existía alguna otra respuesta que no estaba en la lista.

Me gusta la idea de que quieran añadir un panel donde se ingrese un código para poder abrir el auto, aunque en realidad no me gustaría un pequeño tablero numérico en la puerta, ya que le quitaría algo de estética al auto, y optaría mejor por hacer el uso de un dispositivo móvil que abra la puerta del auto a distancia.

Así podrían integrar varias opciones en una misma aplicación móvil donde la función principal sería saber la posición del auto mediante GPS, y como función secundaria hacer uso de la aplicación como llave para abrir la puerta, además de opciones para hacer un bloqueo en el acelerador del auto para que en caso de que alguien lo robe, no pueda huir muy lejos.

Enlace a entrega de estudios de campo:
http://ubicomputo.blogspot.mx/2013/02/avance-2-reporte-de-estudio-de-campo.html


Seguridad en Computadora


Integrantes: Obed, Avendaño, Pedro y Jonathan.

Me parece buena la idea de un sistema de auto-bloqueo para la computadora ya que todos hemos pasado por este tipo de situaciones donde por despistados o por olvidar cerrar sesiones abiertas de sitios web, solemos ser víctimas de compañeros bromistas, e inclusive malintencionados, que hacen mal uso de nuestra computadora para hacernos ver mal o inclusive en los peores casos, robo de archivos personales.

Me imagino que entre las ideas que ellos tienen es la de optar por hacer uso de cámara web para identificar a las personas y saber si son en realidad el dueño de la computadora, o tal vez reconocimiento de escritura en el teclado.

En cuanto a la encuesta aplicada, falto ver una estadística de las personas que han sufrido realmente una situación donde otra persona haga mal uso de su computadora para hacer bromas, para conocer que tan viable es el desarrollo de un sistema inteligente como el propuesto.

Enlace a entrega de estudios de campo:
http://aveoctavo.blogspot.mx/2013/02/clase-de-computo-ubicuo.html


Oficina Personalizada


Integrantes: Osvaldo, Triana, José y Esteban.

Uno de los puntos tratados en el estudio de campo de este equipo fue plantear las acciones que el sistema debería de realizar cuando detecte a un ladrón dentro de la oficina, lo cual me parece que existe una forma más rápida para evitar el robo. Según la encuesta lo ideal sería recibir una llamada y después que se haga una llamada a la policía. Pero mi sugerencia sería que no se trate de buscar soluciones para después de que se detectó alguien robando, sino buscar alternativas de precaución, como el cerrar o bloquear la puerta cuando no este el dueño en la oficina, y disparar una alarma cuando alguien entre sin autorización, al igual que lo haría el sistema de alarma de un auto.

Por lo general la mayoría ha pasado situaciones donde el aire acondicionado dentro de un salón, cuarto u oficina suele ser estar a temperatura muy baja, y que es muy confortable si en el exterior hace mucho calor. El problema aquí es que en muchas ocasiones el cambio brusco de temperatura (de estar en un cuarto frío y luego salir a la calle con un calor abrumador) es una de las razones por las que personas suelen enfermar. Una de las cosas que me gustaría que se agregara al proyecto es que no solo este encargado de la moderación del clima en el interior de la oficina, sino que también se tenga una hora aproximada de salida de la persona que trabaja en la oficina, y el clima se regule de alguna forma para que antes de la salida de la persona de la oficina, el sistema cambie a una temperatura que siga siendo cómoda pero no provoque un cambio drástico al salir.

Enlace a entrega de estudios de campo:
http://pepgonzalez.blogspot.mx/2013/02/campos-de-estudio-oficina-personalizada.html


Proyecto Localizador


Integrantes: Omar, Saúl e Isaías.

Me parece que se debería definir en concreto para que tipo de usuarios estará enfocado el sistema, ya que no me parece del todo buena idea tratar las encuestas por igual para quienes desean localizar personas y para los que desean localizar mascotas, y además en la parte de que tipo de dispositivo les gustaría utilizar, el mezclar uso de collar con brazalete en una misma gráfica, no es del todo informativa ya que no se sabe si el collar se deseaba para un niño o solo para mascota, debió haber sido por separado, podrían haber sido dos tipos de encuestas diferenciadas donde una estuviera enfocada a localizar personas y otra a localizar mascotas.

Tomando en cuenta de que se crea un sistema para localizar personas, o en el caso particular niños, sería bueno que el dispositivo integrado que el niño vaya a cargar, que según las encuestas les parece mejor a todos que sea mediante un brazalete, tenga integrado también un botón para que él también tenga la posibilidad de enviar una señal cuando este perdido, a modo de un "botón de pánico".

Enlace a entrega de estudios de campo:
http://gtdsoftwa.blogspot.mx/2013/02/presentacion-estudio-de-campo-proyecto.html


Galería Inteligente


Integrantes: Adriana, Blanca, Vanessa y Rodolfo.

Para la encuesta aplicada, sería buena idea haber agregado una introducción de cuál es el tema que van a tratar, y qué se debería entender por galería inteligente, para evitar confusiones en los encuestados.

También a modo de introducción sería bueno haber presentado imágenes o vídeos de las galerías inteligente o interactivas que ya existen para luego mencionar la idea que ustedes tienen para implementar y sus respectivas innovaciones con respecto a lo ya existente.

Enlace a entrega de estudios de campo:
http://ultimo-sem.blogspot.mx/2013/02/estudio-de-campo.html


Casa Inteligente


Integrantes: René, Raúl e Iván.

En este proyecto me gusta la idea del simulador de presencia, ya que sería una buena alternativa para evitar que personas malintencionadas entren o intenten entrar a nuestra casa, y con el uso de un sistema como el que proponen, fácilmente se podría ahuyentar a los ladrones.

Deberían de ser más precisos al momento de hacer la encuesta, para que no solo este en términos generales de seguridad, sino específicamente en un servicio o producto específico, que podría ser el sistema para seguridad de puertas y ventanas, o el sistema de seguridad para que los niños estén seguros dentro de la casa.

Enlace a entrega de estudios de campo:
http://3puntosteam.blogspot.mx/2013/02/diseno-conceptual.html


Auto con NFC


Integrantes: Abraham, Rafael, David y Juan.

En primera instancia, me parece que el rango de edad para las personas encuestadas es muy pequeño. El rango de edad al que proponen orientar el sistema/producto es en realidad para adolescentes, y me parece que debería de estar también incluido el rango para gente joven que puede ir de los 20 a 26 años.

Me parece que tampoco se tomo en cuenta de que aveces un mismo auto es utilizado por varios integrantes de la familia, por lo que es posible que el sistema no sea de todo agrado si ese mismo auto lo usa el papá del adolescente. Así que en esta parte hubiera sido bueno preguntar si el auto solo es usado por el encuestado o si es auto compartido, además de preguntar si las personas con las que comparte el auto estarían de acuerdo de usar una tecnología como la propuesta.

Enlace a entrega de estudios de campo:
http://inteligentsystems.wordpress.com/2013/02/19/diseno-de-contexto/


Garage Inteligente


Integrantes: Emmanuel, Max, Carmen y Víctor.

Me gustó la forma de presentar los prototipos a las personas para conocer con cual de ellos estarían más cómodos los usuarios, y lo cuál les ayudo mucho para conocer por cuál de estos cuatro prototipos presentados, las personas se sienten más familiarizados.

El único detalle es que el prototipo 3 y 4 debieron de haberse integrado como uno solo, ya que mayoritariamente el uso de un servicio web, implicaría constar con un dispositivo móvil con acceso a Internet, donde es sabido que el más común es un teléfono inteligente, entonces estos dos prototipos pudieron ser simplemente una sola idea conjugada. Fuera de eso, todo lo demás me pareció muy preciso.

Enlace a entrega de estudios de campo:
http://obicomp.blogspot.mx/2013/02/presentacion-reporte-de-campo.html


En general todos los proyectos me parecen buenas ideas y espero que con la retroalimentación logren concretar más las funciones que tendrán los diferentes sistemas inteligentes propuestos.

20 de febrero de 2013

Actividad 3: Convex Hull

Laboratorio de Visión Computacional
Actividad 3

La envoltura convexa se trata de encontrar todos los puntos que se encuentran más al exterior del contorno de una figura, y cuyas líneas que se unan de un punto a otro logren encerrar toda la figura sin dejar ningún segmento fuera de este nuevo poligono creado.

Implemente este algoritmo basado en pseudocódigo de la primer liga en las referencias, y usando como base el código usado para la entrega anterior en clase de la detección de formas.

Aquí unas muestras de las imágenes originales y su respectiva salida después de aplicar el convex hull y dibujar las líneas.







Código completo



Referencias:
Gift Wrapping
Convex Hull

19 de febrero de 2013

Búsqueda de Cadenas

Teoría de la Información y Métodos de Codificación
Tarea 2

Boyer-Moore

Es un eficiente algoritmo de búsqueda de cadenas, y ha sido el punto de referencia estándar para la literatura de búsqueda de cadenas. Fue desarrollado por Bob Boyer y J. Strother Moore en 1977. El algoritmo preprocesa la cadena objetivo que está siendo buscada, pero no en la cadena en que se busca. El tiempo de ejecución del algoritmo Boyer-Moore, aunque es lineal en el tamaño de la cadena siendo buscada, puede tener un factor significativamente más bajo que muchos otros algoritmos de búsqueda ya que no necesita comprobar cada carácter de la cadena que es buscada, puesto que salta algunos de ellos. Generalmente el algoritmo es más rápido cuanto más grande es la clave que es buscada, usa la información conseguida desde un intento para descartar tantas posiciones del texto como sean posibles en donde la cadena no coincida. [1]

Knuth-Morris-Pratt

Es un algoritmo de búsqueda de cadenas simple y por lo tanto su objetivo es buscar la existencia de una subcadena dentro de una cadena. Para ello utiliza información basada en los fallos previos, aprovechando la información que la propia palabra a buscar contiene de sí, para determinar donde podría darse la siguiente existencia, sin necesidad de analizar más de 1 vez los caracteres de la cadena donde se busca. El algoritmo originalmente fue elaborado por Donald Knuth y Vaughan Pratt y de modo independiente por James H. Morris en 1977, pero lo publicaron juntos los tres. [2]

Código


En el siguiente código pueden encontrar los tres algoritmos más conocidos para la búsqueda de cadenas, que son Naive, Boyer-Moore (BM) y Knuth-Morris-Pratt (KMP).

El programa recibe como parámetros el largo del patrón y el largo del texto, ya que he incluido también un generador para ello.


Análisis


Analíticamente se sabe que el algoritmo Boyer-More tiene en promedio un tiempo de ejecución de $$O(n \log(m/n))$$ en el mejor caso, pero en el peor caso se llega a tener $$O(m*n)$$ en cambio para el algoritmo Knuth-Morris-Pratt se tiene $$O(n + m)$$ lo que significa que es muy rápido.

En seguida las gráficas para los dos algoritmos donde el color de cada rectángulo es el tiempo promedio para encontrar los patrones de largo mencionado en el eje x, en un texto de largo mencionado en el eje y.

BM


KMP


Según interpreto los resultados, el algoritmo BM parece ser más rápido en tiempo de ejecución ya que mientras más tiende a ser oscuro el color, indica que el tiempo fue mucho menor.

Ahora veamos las gráficas para la cantidad de comparaciones hechas por cada algoritmo, esto lo hice ya que es evidente que el tiempo de ejecución no solo depende del algoritmo usado, sino que también esta involucrado el sistema operativo, y una forma más práctica de conocer su eficiencia, es contando la cantidad de comparaciones que se hace dentro del algoritmo.

BM


KMP


Aquí también podemos notar que BM realizó menos comparaciones que el KMP.

En conclusión podríamos decir que BM es ligeramente mejor que que KMP, y digo ligeramente por que a comparación con el algoritmo Naive, estos dos no tienen resultados muy distantes.

Por último para hablar de los algoritmos en términos de uso de memoria, tanto BM como KMP usan un arreglo de tamaño del largo del patrón, para almacenar los saltos debidos, y también los arreglos de tamaño n y m, donde n es el largo del texto, y m el largo del patrón, por lo que concluyo que en cuanto a memoria, los dos algoritmos prácticamente usan lo mismo.

Referencias:
[1] Knuth-Morris-Pratt
[2] Boyer-Moore
Boyer-Moore Exact Pattern Match
Algoritmo Boyer-Moore

18 de febrero de 2013

Detección de Formas

Visión Computacional
Tarea 2

Para esta semana la tarea asignada fue la detección de formas en una imagen para después colorear su contenido.

Utilizando los métodos usados en programas anteriores y después de la detección de bordes continuos mediante el método de convolución y usando máscaras, continué este programa en base al código ya trabajado, quitando lo innecesario y agregando los métodos nuevos para esta tarea.

Esta es la imagen original antes de aplicar los nuevos métodos.


Después de picar el botón para aplicar formas obtenemos lo siguiente. Para rellenar hice que los colores fueran en tonalidades de verde y azul, dándole menor peso al valor de rojo del pixel.


Otra muestra pero con el mapa del mundo el cual muchos probamos ya que tiene los bordes perfectamente definidos y solo había que invertir los colores.


Después de aplicar la detección de formas obtenemos lo siguiente.


Código completo



Al ejecutar este programa se nos mostrará una ventana como la siguiente. Aquí use otra imagen más de muestra.


17 de febrero de 2013

Actividad 3: Cómputo Sensible al Contexto

Laboratorio de Cómputo Ubicuo
Actividad 3

El cómputo sensible al contexto es una disciplina de software que hace posible la computación ubicua. Aquí el tema principal a tratar son los dispositivos computacionales integrados en nuestro entorno que nos proporcionan servicios aumentados con capacidades sensoriales: pueden ver u oír quién o qué se encuentra a nuestro alrededor, qué actividad están realizando, dónde se encuentran y cuándo algo esta ocurriendo.

Las infraestructuras de computación sensible al contexto proveen de manera proactiva servicios al usuario que responden a su situación contextual.

Los objetivos del cómputo ubicuo son:
  • Construir espacios sensibles e inteligentes, es decir, entornos computacionales que sienten y reaccionan.
  • Reducir la separación en la interacción entre el usuario y el ordenador usando contexto (sin el uso del ratón y el teclado).
  • Materializar el concepto de Computación Ubicua.

Para el funcionamiento de la computación sensible son necesarios: ordenadores, sensores y reglas. Sensores distribuidos que capturan situaciones en el ambiente, por ejemplo, temperatura, identidad, localización, etc. Sistemas de reglas que modelan cómo los ordenadores reaccionan a los estímulos provistos por sensores.

Técnicas usadas en el desarrollo conceptual


Grupo focal

Es una técnica cualitativa de estudio de las opiniones o actitudes de un público, utilizada en ciencias sociales y en estudios comerciales. Consiste en la reunión de un grupo de personas, entre 6 y 12, con un moderador encargado de hacer preguntas y dirigir la discusión. Su labor es la de encauzar la discusión para que no se aleje del tema de estudio.


Las preguntas son respondidas por la interacción del grupo en una dinámica en que los participantes se sienten cómodos y libres de hablar y comentar sus opiniones.

Con el grupo focal se indaga en las actitudes y reacciones de un grupo social específico frente a un asunto social o político, o bien un tema de interés comercial como un producto, servicio, concepto, publicidad, idea o embalaje. En el mundo del marketing, las sesiones de grupo son una herramienta muy importante para recibir retroalimentación de diversos temas concernientes a la mezcla de marketing. En particular se utiliza para detectar deseos y necesidades en cuanto a envasado, nombres de marcas o test de conceptos. Esta herramienta puede dar información valiosa acerca del potencial de un concepto, un eslogan o un producto en el mercado.

El análisis es complejo ya que depende de los estilos de comunicación a la par con las reacciones no verbales de los participantes, por ello se necesita personal muy entrenado para el manejo del grupo y el análisis de los resultados.

Definición de personajes y escenarios

Los personajes son descripciones detalladas de los usuarios de un producto o sistema y sus metas. A través de entrevistas a usuarios y especialistas en el tipo de servicio o producto ofrecido, se crean estos arquetipos de personajes que pueden ser una o varias, y de carácter primario o secundario.

La creación de personajes es de gran ayuda en la planificación del diseño porque proporciona una persona real para la que crear el producto. El concepto "usuario", si bien muy útil para otros propósitos, se queda ahora pequeño. Es un concepto demasiado amplio, a un usuario se le puede presuponer todo tipo de conocimientos, aptitudes y comportamientos, a una persona, no.

Al personaje creado se le da un nombre e incluso se puede utilizar una supuesta fotografía para tener una imagen más cercana y no olvidar durante todo el proceso que se esta creando un sitio web para esta persona concreta. Está técnica puede parecer a simple vista que restringe el público/mercado del sitio y esta claro que lo hace.

Por ejemplo, cuando desarrollamos un sitio web de venta en línea para un supermercado se puede crear el perfil del personaje "María":

"María es madre de dos hijos y que trabaja fuera de casa, nivel económico medio-alto, con los conocimientos de informática mínimos para realizar su trabajo en la oficina y poca confianza en Internet porque a menudo ve en telediario noticias de estafas a través de la Red".

Por otra parte tenemos también los escenarios.

Un escenario es la descripción de un personaje en una situación de uso del sitio web (por continuar con el ejemplo anterior) con una meta concreta. En realidad trata de poner a las personajes en acción. Para ello los diseñadores deben tratar de olvidar sus conocimientos previos y habilidades y sustituirlos por los del personaje. Los escenarios se crean a partir de entrevistas u observaciones directas de los usuarios.

Un ejemplo de escenario adecuado para María sería:

"Son las 20:00 de la tarde, acaba de llegar de recoger a los niños de la guardería y va a hacer la gran compra para la semana siguiente antes de hacer la cena, tiene prisa porque los niños tienen hambre. Va a comprar productos preparados, congelados y otros de gran consumo, además de algunos productos de limpieza, pero pocos productos frescos que los reserva para el sábado por la mañana cuando va a la plaza a comprar".

Recorrido cognitivo

El recorrido cognitivo nos permite evaluar la facilidad de aprendizaje y de uso de las principales tareas de la aplicación, producto o sistema evaluado.

El recorrido cognitivo es una técnica cualitativa, que está basada en el análisis de expertos a través de la exploración de una propuesta de interfaz.

Los usuarios prefieren aprender el software o la web mediante la exploración de sus posibilidades. Es una técnica muy eficaz cuando se quieren probar procesos.

Con esta técnica se persigue evaluar la facilidad de aprendizaje de un prototipo o producto final, en el contexto de una o varias tareas, así como predecir problemas de usabilidad sin realizar un test con usuarios.


Dentro de mi búsqueda de información para la realización de esta actividad, encontré algunas fuentes que considero que no es de utilidad solo extractar algunos datos, sino que sería mejor echarles un vistazo por completo, entre ellos tengo la siguiente presentación de Cómputo Ubicuo, y luego dos vídeos muy explicativos y sencillos de entender y aprender.


Aquí les dejo un vídeo donde se habla del ciclo de vida de un producto, y donde se mencionan los tres componentes básicos de una evaluación conceptual que son el Concepto, Usuario y Contexto.


Por último les dejo un vídeo que me pareció interesante, y que tal vez se sale un poco del tema principal tratado, pero que tiene algunas cosas que podemos tomar en cuenta para la creación de proyectos. Habla de ocho características que hay que buscar en la creación de un producto, donde dice que si por lo menos encontramos una de estas características en el producto en que pensamos o estamos desarrollando, seguramente estamos tratando con un producto ideal. Este tipo de cosas vendría muy bien pensar al momento de querer desarrollar un producto o sistema nuevo, para hacer que este logre tener un gran impacto en el mercado en un futuro determinado.


Esto fue una introducción del cómputo sensible al contexto junto con técnicas aplicadas para este tipo de sistemas.

Referencias:
Grupo focal
Personajes y escenarios
Computación Sensible

16 de febrero de 2013

Ataque DoS: Inundación SYN

Redes de Telecomunicaciones
Tarea 3

Un ataque informático es el que se provoca con el fin de tomar el control, desestabilizar el sistema o servicio de algún servidor, o simplemente para provocar la negación de un servicio.

Los protocolos existentes actualmente fueron diseñados para ser empleados en una comunidad abierta y con una relación de confianza mutua. La realidad indica que es más fácil desorganizar el funcionamiento de un sistema que acceder al mismo, así los ataques de negación de servicio tienen como objetivo saturar los recursos de la víctima de tal forma que se inhabilitan los servicios brindados.

Algunas de las razones por las cuales se provocan estos ataques son las siguientes:
  • Se ha instalado un troyano y se necesita que la víctima reinicie la máquina para que surta efecto. El usuario al ver que no puede acceder a un servicio, piensa que la mejor forma de resolverlo es reiniciando su computadora.
  • El intruso cree que actúa bien al dejar fuera de servicio algún sitio web que le disgusta.
  • Para prevención de fallos, cuando el administrador del sistema quiere comprobar que sus instalaciones no son vulnerables a este tipo de ataques.
  • El administrador del sistema tiene un proceso que no puede detener en su servidor y, debido a este, no puede acceder al sistema. Para ello, lanza contra sí mismo un ataque DoS deteniendo los servicios.

Una de las formas más conocidas para provocar ataques del tipo DoS (Negación del Servicio) son las llamadas Jamming o Flooding.

Este tipo de ataques desactivan o saturan los recursos del sistema. Por ejemplo, un atacante puede consumir toda la memoria o espacio en disco disponible, así como enviar tanto tráfico a la red que nadie más pueda utilizarla. Aquí el atacante satura el sistema con mensajes que requieren establecer conexión. Sin embargo, en vez de proveer la dirección IP del emisor, el mensaje contiene falsas direcciones IP usando Spoofing y Looping. El sistema responde al mensaje, pero como no recibe respuesta, acumula buffers con información de las conexiones abiertas, no dejando lugar a las conexiones nuevas.

Muchos de los servicios de Internet han sufrido bajas temporales por ataques que explotan el protocolo TCP. Esta vulnerabilidad ha sido ampliamente utilizada en el pasado, pero aún hoy pueden encontrarse sistemas vulnerables. Otra acción común es la de enviar miles de correos electrónicos sin sentido a todos los usuarios posibles en forma continua, saturando los sistemas.

Principios para ataque de inundación SYN (SYN Flood)

Cuando una máquina se comunica mediante TCP/IP con otra, envía una serie de datos junto a la petición real. Estos datos forman la cabecera de la solicitud. Dentro de la cabecera se encuentran unas señales llamadas Flags (banderas). Estas señales permiten iniciar una conexión, cerrarla, indicar que una solicitud es urgente, reiniciar una conexión, entre otras. Las banderas se incluyen tanto en la solicitud del cliente, como en la respuesta del servidor.

La inundación SYN envía un flujo de paquetes TCP/SYN (varias peticiones con Flags SYN en la cabecera), muchas veces con la dirección de origen falsificada. Cada uno de los paquetes recibidos es tratado por el destino como una petición de conexión, causando que el servidor intente establecer una conexión al responder con un paquete TCP/SYN-ACK y esperando el paquete de respuesta TCP/ACK. Sin embargo, debido a que la dirección de origen es falsa o la dirección IP real no ha solicitado la conexión, nunca llega la respuesta.

Estos intentos de conexión consumen recursos en el servidor y copian el número de conexiones que se pueden establecer, reduciendo la disponibilidad del servidor para responder peticiones legítimas de conexión.

Representación de una conexión normal entre el cliente y un servidor.

http://upload.wikimedia.org/wikipedia/commons/9/9a/Tcp_normal.svg

Representación de atacante que hace varias peticiones al servidor pero nunca devuelve la respuesta con la señal ACK (lo que provoca que la conexión no se complete, y el servidor se quede esperando). Un usuario cotidiano requiere del servicio, pero el servidor esta saturado que no es posible establecer conexión.

http://upload.wikimedia.org/wikipedia/commons/9/94/Tcp_synflood.png

Ataque de inundación SYN


Para esto utilice una herramienta llamada HPing, que no es más que una herramienta para línea de comandos que nos permite crear y analizar paquetes TCP/IP. Tiene muchas utilidades, como hacer testing de firewalls, escaneo de puertos, redes y también tiene la capacidad de provocar un SYN Flood Attack.

Para instalar desde Ubuntu se escribe lo siguiente en la terminal.
~$ sudo apt-get install hping3

Pedirá permiso de usuario para instalar. Una vez instalado podemos hacer ataques simples.

Nota: Los siguientes ataques fueron provocados en mi propia computadora, por lo cual no hubo terceros perjudicados. Se debe ser cuidadoso ya que ataques de este tipo son considerados delito en muchos países.

Como vamos a provocar un ataque a nuestro propio ordenador buscaremos la IP que tenemos asignada con el siguiente comando.
~$ ifconfig eth1 | grep -e inet


Ahora teniendo la IP podemos probar el siguiente comando, cuyo efecto será enviar infinitamente paquetes al puerto 80 a la dirección indicada.
~$ sudo hping3 -p 80 -S --flood 192.168.15.105

Algo un poco más completo sería como sigue:
~$ sudo hping3 --rand-source -p 80 -S --flood 192.168.15.105

donde:
--rand-source genera direcciones de origen IP al azar.

-p 80 es el puerto que elegimos atacar.

-S activa la bandera SYN.

--flood le indica a hping que envíe los paquetes a la máxima velocidad posible.

y por último la IP de la victima a atacar.

Al ejecutar esta última instrucción desde el terminal podemos ver lo siguiente (Después de un momento interrumpí la ejecución, y el programa imprime un resumen de paquetes enviados).


Mientras no interrumpamos la ejecución del comando, podemos notar que el acceso a páginas web en general ha sido afectado, esto porque el comando esta provocando un exceso de peticiones, lo que provoca la denegación del acceso.


Podemos monitorear desde Wireshark las peticiones que se están produciendo.


En pocas palabras lo que estamos provocando es enviar repetidamente paquetes con la bandera SYN en la cabecera, y cada uno esta tratando de crear una conexión, la cuál nunca es respondida debido a que se están enviando desde IPs falsas, lo que sobresatura el sistema e impide el acceso posterior.

Grabe un vídeo de mi escritorio para que puedan ver el efecto. Pueden notar que al principio tenemos acceso normal a página web, y una vez que ejecutamos el comando desde la terminal, el acceso tarda demasiado en completarse, que de hecho impide cargar la página por completo.


Previniendo el ataque de inundación SYN

Como ven la creación de este ataque es muy fácil, por lo que existen varias formas de impedir que un atacante provoque este tipo de acciones.

Veamos tres opciones que se pueden configurar desde Linux para prevenir este tipo de ataques.

Activar las SYN Cookies, rechaza nuevas conexiones cuando la cola SYN se llena.
~$ sysctl -w net.ipv4.tcp_syncookies="1"

Aumentar el "backlog queue", es decir, dar más holgura al sistema para procesar peticiones entre-abiertas.
~$ sysctl -w net.ipv4.tcp_max_syn_backlog="2048"

Minimizar el tiempo de espera en la respuesta al SYN+ACK. En principio un sistema Linux por defecto esperará 3 minutos, podemos dejarlo en 21 segundos.
~$ sysctl -w net.ipv4.tcp_synack_retries=2

Referencias:
SYN Flood con Hping3
Tipos de ataques informáticos
Prevenir ataque SYN Flood

15 de febrero de 2013

Actividad 3: Mapa de Cobertura de Redes WiFi

Laboratorio de Redes de Telecomunicaciones
Actividad 3

Para esta actividad de la laboratorio se nos pidió crear un mapa de cobertura de redes WiFi, y como la mayoría de mis compañeros, seleccioné mi propia casa para conocer que redes están disponibles cerca de mi lugar de trabajo.

Para realizar eso necesitamos de algunas cuantas herramientas como:
  • Comando iwlist, para poder ver una lista de redes inalámbricas cercanas a nuestra tarjeta de red.
  • API de Google Maps para poder mostrar zonas de cobertura WiFi.

Lo que hace el comando iwlist es mostrar información adicional de una conexión inalámbrica en una interfaz de red, y que no se muestra habitualmente con iwconfig. Este comando muestra en forma detallada toda la información relativa a la categoría de redes disponibles.

Escribiendo en el terminal el siguiente comando podremos ver una gran cantidad de información.
~$ sudo iwlist scan


Pero no toda la información mostrada es de nuestra preocupación en este momento así que vamos a filtrar esta información con grep y un programa en python.

La forma en que procedí para realizar esta actividad fue como sigue:

1) Obtener un listado de redes inalámbricas con su respectiva calidad y su nivel de señal.


Lo que al ejecutar nos da un resultado como en la siguiente imagen (Dar clic sobre ella para expandir).


También podríamos únicamente haber ejecutado lo siguiente directo en terminal.
~$ sudo iwlist eth1 scan | grep -e Quality -e ESSID

Lo que genera el siguiente resultado.


En cuanto a la calidad podemos ver que 70/70 es la máxima calidad, y se trata de la red más cercana.

2) Encontrar las ubicaciones de las redes.

Hay que tomar en cuenta que las direcciones son aproximadas de acuerdo a los datos de la ubicación proporcionada por Google Maps, ya que no son precisos y tienen un margen de error de aproximadamente de 10 metros, por lo que por medio de análisis visual hecho a simple vista, logré acomodar aproximadamente los centros de las ubicaciones según las estimaciones de los datos obtenidos por la fuerza y calidad de la señal de cierta ESSID.

Los puntos desde donde se hizo el análisis de la calidad y nivel de señal de redes, van desde el frente de la casa, hasta el patio.

Se seleccionaron únicamente 5 redes para mostrar en el mapa, que son las que mayor nivel de señal y calidad mostraron.

3) Crear un documento HTML para hacer uso de la API de Google Maps.

La parte importante se encuentra en entre la etiqueta head donde el script es incrustado como parte del documento, al igual que algo de CSS necesario.

Los círculos indican una ESSID diferente y su cobertura aproximada, y cuentan con un marcador en su centro, el cual indica el nombre de dicha red.


4) Resultado.

Y por último les muestro el mapa de cobertura de algunas redes WiFi cercanas a mi casa.



Referencias:
El comando iwlist
Google Maps API Reference