lunes, 30 de abril de 2012

Usabilidad en sistemas integrados

La usabilidad en sistemas integrados es muy diferente a la usabilidad de sistemas computacionales en los cuales el objetivo principal, es el aspecto gráfico del sistema, para que un sistema integrado tenga una buena usabilidad interfieren cosas como la colocación de los botones, como son los botones y los interruptores, entre algunas otras cuestiones.

En esta entrada hablaré acerca de los dos enfoques fundamentales para que los sistemas integrados tenga una facilidad de uso y que por lo tanto tengan usabilidad para los clientes finales, estos enfoques son la facilidad de uso mediante la evalucación y la otra es la facilidad de uso mediante los principios.

La facilidad de uso por la evaluación consiste en encontrar puntos fuertes y débiles para hacer mejoras al ambiente no grafico, esto involucra el utilizarlo de manera constante para poder saber si este tiene una facilidad de uso, hasta que alguien se de cuenta de que el producto es difícil de usar, por lo que nadie se dará cuenta de que es difícil de usar hasta que el producto se ha construido, la parte fácil de la usabilidad es ver el diseño actual y analizarlo, la parte difícil es decidir lo que se necesita mejorar ya que en algunos casos lo pueden empeorar, por lo que es imporante utilizarlo y valoralo de manera física.

La facilidad de uso por los principios es la que trata de decir por medio de consideraciones anteriores, que características de usabilidad son deseables para que la interfaz que estas utilizando sea usable y que tipo de gente va a utilizar la interfaz que estas realizando, por lo que al utilizar estos principios, permite que cuando tengas tu prototipo fisico puedas criticarlo y ser discutido con más fuerza ya que puedes tener documentado el por qué se considera usable el producto para luego analizarlo de manera más profunda.

Ahora les hablaré de algunos de los principios más importantes de debemos de considerar al momento de realizar un análisis de un sistema integrado con usabilidad de interfaces de usuario los cuales no son gráficos, si no, físicos.


Robustez.

Muchas veces este concepto se piensa que se utiliza para saber si el sistema que estamos utilizando va a estar fuertemente ligado a una propiedad mecánica, esto es como nuestro producto puede ser utilizado en caso rudo o cuando tengamos algún descuido, pero esto no es necesariamente lo que tiene que ver con este principio, es más bien que la interfaz sea tolerante a las entradas incorrectas, o que estas sean imposibles de hacer, por lo que una interfaz robusta, no solo protege al dispositivo de daños que pudieran ser accidentales, si no que también lo protege de una entrada incorrecta y que protege al usuario de como el dispositivo pudiera actuar.

Un ejemplo es por ejemplo en el manual de la computadora Sinclair ZX Spectrum, en 1982, especificaban muy claramente que Nada de lo que se escriba en el teclado puede dañar el equipo entonces esto demostraba una percepción de los diseñadores que a las personas que compraban sus equipos, pudieron reducir la ansiedad de los usuarios dandoles seguridad de que su computadora no se iba a destruir si ellos realizaban algo equivocadamente, no importa cuantos errores cometieran.


Podemos hablar de robustez cuando por ejemplo, se nos solicita la confirmación de realizar una acción, es la manera básica de añadir robustez al sistema integrado, del mismo modo, los mensajes de error o un sonido para indicar que la acción que esta realizando está mal, puede ser una respuesta muy buena para que el usuario final pueda saber que lo está haciendo de una manera no adecuada.

Algo muy importante y que personalmente yo lo he visto en ciertos sistemas, no nada más integrados, si no también gráficos, es el que muchas veces las personas que diseñan los sistemas formulan bien los mensajes de error o advertencias que se muestran, esto es por ejemplo si en el microondas tu picas a un boton que no esté disponible y te diga en una pantalla led "Acción ilegal" nosotros vamos a pensar que somos unos criminales como lo dice Niall Murphy en su artículo [aquí], nosotros pudieramos hacer que proporcione mensajes mas apropiados como "No disponible" o similar, haciendo más robusto el sistema.

A veces, es necesario proporcionar conjuntos de acciones que permitan que cualquier acción pueda ser regresada a un punto anterior, por lo que si nosotros hacemos un sistema que mueve un brazo robotizado a la izquierda, pueda hacer con la misma facilidad, moverse hacia la derecha y que pueda regresar al modo izquierda de manera como movió a la derecha, solamente como ejemplo.

Algunas veces, un sistema integrado, no puede revertir algunos comandos ya que es simplemente imposible, sobretodo cuando es una acción física que recibió el dispositivo y no se pude deshacer, por lo que en estos casos es importante que requiera alguna confirmación haciendo un equilibro entre la facilidad de uso y la intención de deshacer la acción.

Consistencia

Este principio lo que nos dice es que al utilizar una consistencia global del diseño para que pueda ser más fácil aprender las reglas y que el usuario pueda utilizar toda la interfaz sin ningún problema, por lo que la consistencia en la interfaz será reflejado en los programas y por lo tanto, nosotros como programadores debemos de realizar un código que pueda detectar este tipo de inconsistencias, por lo que le permite al usuario desarrollar normas que otros productos han utilizado como normas generales acerca de cómo funciona una interfaz, entonces es importante que cuando reciba el producto sea rapido de usar y no que tenga que aprender desde cero para saber a que significa cada uso, esto lo pudieramos dejar para sistemas más avanzados en donde si es importante saber este tipo de uso.


 
Affordance

De este principio no encontré una traducción directa aunque lo veo un poco como facilitante de hacer las cosas, por lo que esta es una propiedad que nos dice que al ver un producto es obvia su función, desde el momento de su aparición, esto es por ejemplo si te dan unas tijeras, te vas a dar cuenta que cada uno de los extremos tiene unas cosas redondas que se ajustan a tus manos y que del otro lado están afilados, por lo que tu razonablemente sabrás para que van a servir y como usarlo.

Podemos decir que esto es algunas veces facil porque el usuario puede ver por ejemplo, todos los controles en una tableta o el teclado numérico en un celular, pero debemos de acondicionar los productos a que los botones sean visibles y muestren información relevante, también es importante el etiquetado de cada boton proporcione una buena figura para saber que es lo que hace el boton por ejemplo, muchas veces un boton de stop, tiene un cuadro pero ese mismo botón sirve para dar play a algo, por lo que es importante poner las dos simbologias y el usuario pueda entender porque están los dos.



Un fallo que algunas veces se tiene en los sistemas físicos es colocar los botones en un patrón regular para que la apariencia del dispositivo sea simétrica, esto tiene sentido si por ejemplo cada uno de los botones tienen funciones similares, pero si se tienen funciones separadas, es preferible agruparlos según lo que se va a realizar, también es importante tener botones más grandes para las funciones más utilizadas y las funciones que raramente se van a utilizar no tan grandes, también por ejemplo si se tiene un teclado con números, es preferible acomodarlos de un orden de izquierda a derecha, ya que esta la forma de leer y la forma en que se pueden representar en un display.

Compatibilidad

Consideremos que existen 3 tipos de compatibilidad en una interfaz no gráfica.

  • Compatibilidad de lo que el usuario espera y lo que obtiene
  • Compatibilidad entre los diferentes productos del mismo tipo
  • Compatibilidad entre el dispositivos y con los que tiene que "cooperar".

La compatibilidad entre los productos no es tan facil como parece, los productos a través de la historia en el mercado, han hecho que las personas tengan ciertas prácticas, por lo que algunas veces, no todas, es importante seguir ese camino, es por eso que existen organismos de normalización que han ido haciendo intentos para estandarizar, por ejemplo los sonidos y las luces de alarma de un hospital, el ISO 9995 ha establecido un estándar para la disposición de las letras en los botones de un teléfono o un teclado numérico distinto, pero a pesar de esto los teléfonos en todo el mundo van variando la colocación de su teclado.



También los botones principales junto con los símbolos de una videograbadora, han sido normalizados, aunque existen inclusive aparatos de la misma empresa o compañía que no utilizan o separan estos botones.



Existen otras normas, los cuales hacen que el trabajo de una persona en el diseño y realización de aparatos sea más difícil, por ejemplo el estándar ISO 86901 es un estándar para los formatos de la fecha y hora, con un formato de año - mes - dia, sin embargo en Europa, se utiliza el formato dia - mes - año, como aquí en nuestro país y en paises como Estados Unidos utilizan el formato mes - dia - año. Por lo que la norma ISO es un formato más lógico ya que comienza con la unidad más importante y luego se traslada a las unidades cada vez más pequeñas, a medida que los vamos leyendo de izquierda a derecha.

Otra de las consideraciones de compatibilidad es que debe de ser compatible con el medio ambiente en donde va a trabajar un dispositivo, por ejemplo en un entorno ruidoso, suena una alarma que no se escucha o se escucha muy poco, pues no será apropiado, pero por otro lado una calculadora si la queremos utilizar en una biblioteca, no quiere decir que tenemos que tener una calcu que suene cada que tengamos que picar a un botón, pero es algunas veces difícil predecir este tipo de situaciones adivinar.

Por lo tanto podemos concluir que estos principios son importantes para la realización de sistemas que tengan usabilidad apropiada para el usuario final y que esto no es una cuestión que debemos de tomar a la ligera ya que, si en algún momento este producto deseamos  venderlo, la cuestión de la usabilidad viene siendo algunas veces la clave del éxito de un producto y por lo tanto tendremos más venta y satisfacción al usuario, por lo que es relevante tomarlo en cuenta.

Bibliografía.

Usability for Embedded Sytems de Panelsoft
Usability for Non-Graphical user Interfaces por Niall Murphy

viernes, 27 de abril de 2012

Project progress

In this post, I will publish links of different things that I have been doing during the semester for the project group of distributed and parallel systems.

Week 16: Presentation.


I made a presentation, is the topics that we made during the semester, also I  put a different graphics about why is important parallel and distributed systems using parallel python and gnuplot.





Week 15: Grid computacional con jcGrid


Mi aportación para esta semana, es como configurar el midleware de Java Grid Computing, para poder ser servidor, expongo los pasos en el apartado del wiki de Grid, al igual que tambien pongo informacion de las consideraciones del diseño de un Grid computacional.


Aqui una captura de pantalla con el jcGrid server ya configurado.






Week 14: Math Kernel Library LINPACK Intel



Linpack es elegido por la pagina top 500 para obtener cifras de rendimiento en gigaflops, lo que hace es resolver un sistema de ecuaciones lineales denso, por lo que al medir este rendimiento real de diferentes tamaños del problema, podemos obtener los numeros que figuran en esta página, pongo las instrucciones en el wiki de como poder correr esta herramienta para ponerlo en el cluster.




Week 13: Phoronix Test Suite


Para esta semana, estuve investigando como podemos medir el rendimiento de manera óptima para nuestro cluster, por lo que encontré una herramienta interesante en el cual tiene numerosas pruebas de diferentes usos, por lo que la usé en mi computadora e hice algunos test para ver el comportamiento, al igual que puse como utilizarla e instalarla.


Más información en el wiki.


Nominaciones
Cecy.


Week 12: Comunicación de Sistemas Distribuidos


Para esta semana, hice un apartado en el wiki en donde puse información de los diversos protocolos que se utilizan en la comunicación de sistemas distribuidos, como las Redes ATM, Llamadas a procedimientos remotos y cliente-servidor, al igual que puse unos ejemplos de los cuales ya habia realizado.


Nominaciones: Cecilia, JC, Carmen




Week 11: Petri Net


I made a contribution in the wiki about Petri Net, I put important information and describe a Petri Net, and also I made a simulation use a tool call it tapaal in ubuntu.


Please check the wiki for more details.





Nominaciones:
Juan
Cecy




Week 10: Ruby paralelo
           For this week, I made how to use ruby with a gems, for make programs with       parallelism, also, I put two examples and check a benchmark with different uses.


Week 9: Comportamiento paralelo
           Realicé graficas checando el comportamiento paralelo y secuencial utilizando    gnuplot y parallel python, hice un pequeño cluster en mi casa y obtuve algunos resultados, luego los grafiqué y realicé algunas conclusiones en el wiki.


Para más información verifiquen el wiki


Nominaciones: Cecy


Week 8: Propuesta de aplicación : Blender
            Estuve trabajando con Blender un renderizador de graficos 3D
            Para mas información verifiquen el wiki


            Nominaciones: Juan Carlos & Cecy


Week 7: [Exam] - Make a custom distribution
For this week, I made a tutorial for make a custom distribution, I hope this tutorial help to people that work in cluster.




        Also, I went to the meeting with the cluster group for make a plan about the    
        project.


Week 6: Pyro
       
       Programa sencillo utiizando la herramienta Pyro para python, de manera remota poder 
       calcular las funciones trigonométricas.


      Nominaciones: Rafita, juan y cecy


Week 5: Chat multithread
I put a code that is a Chat using threads in python in socket section.




Week 4: Sockets in python (Wiki) [Feb 23] (in Spanish)
I have been working on make an Chat application for supercomputer, so for this week I made a code in python using sockets, it is the first part of the code that I going to make for the next week. Also I put some comments and important information about sockets that my classmates who wants to make something in sockets they can use it.

Also Cecy Urbina, Saul Gaussin and me try Parallel Python at school, we use the example code and see the differences between running parallel and sequence in sum_prime.py, so, we show in class and we can use it for our project, here some screenshots from Saul's computer that have i5 core and Cecy and me use Atom.




Week 3: Matrix Multiplication (Wiki) [Feb 14, 2012]
I made a code in python using threads for make a matrix multiplication, in the example make a two matrix 3x3 using integer random numbers (0-9), we can change those numbers and use this code to check cluster


          Nominations: Gaby, Cecy


Week 2: Principles of Parallel Algorithm Design (Wiki) [Feb 7, 2012]
I publish an different concepts about principles of parallel algorithm, that i think it is important for make a good reports for next weeks.
I talk about that we have two key steps in the design of parallel algorithms, splitting a computation into littler computations and designating them to different processors for make parallel executions, differences between parallel Algorithm vs parallel Formulation and Elements of a Parallel Algorithm/Formulation also concepts like Decomposition, Tasks, Granualarity, Fine-grained & Coarse-grained, Task-Dependecy Graph, Task-Iteraction Graph and different examples for explain better those concepts.
           Parallel Computer Memory Architectures  (Blog) (Lab) [Feb 7, 2012]


Concept map


Week 1: Merge sort (in Spanish) (Blog) [Jan 31, 2012]




martes, 24 de abril de 2012

Extra Points


  • Security
    • The objective of computer security includes protection of information and property from theft, corruption, or natural disaster, while allowing the information and property to remain accessible and productive to its intended users.
  • Source
    • Any thing of place from which something comes or is obtained, origin.
  • Broadcast
    • Refers to a method of transferring a message to all recipients simultaneously.
  • Frame
    • Is a digital data transmission unit or data packet that includes frame synchronization, for example, a sequence of bits or symbols making it possible for the receiver to dectect the beginning and end of the packet in the stream of symbols or bits.
  • Update
    • To bring up to date information.

viernes, 20 de abril de 2012

Sistema caótico: Evolución humana

¿Qué es un Sistema Caótico?
Podemos decir que en términos simples, la teoría del caos nos dice que un sistema dinámico cuya naturaleza es determinista, (como lo hemos visto en clases anteriores, que se tiene un numero finito de estados y depende solamente del estado inicial), pero en este caso no es predecible en la naturaleza.

Aplicado en el mundo real, tenemos diversos sistemas que son caóticos ya que son demasiado sensibles a las condiciones iniciales, por ejemplo podemos decir el clima en la ciudad, el mercado económico de un país, reacciones químicas, etc, lo que hace que es difícil de controlar y predecir.

Bifurcación y atractores extraños
 Algunas de las caracteristicas importantes del estudio de sistemas caóticos es que existen diferentes fenómentos, tales como los atractores extraños, el cual las trayectorias cercas convergen y es extraño ya que exhibe sensibilidad respecto a las condiciones iniciales.

Atractor de lorenz


Algunas veces, otros sistemas tienen un proceso que hace otros dos atractores, llamado bifurcación


Diagrama de una bifurcación total

Durante algunos dias he estado investigando acerca de como realizar una metodología para proponer la hipótesis de que la evolución humana tiene aspectos que se comportan como sistemas caóticos, partiendo de la idea que la teoría del caos se puede considerar para muchos científicos modernos como pilar en la ciencia, este estudia el comportamiento de sistemas dinámicos, que pueden ser muy sensibles al momento de tener ciertas condiciones iniciales, por ejemplo, uno de los efectos que se conoce sobre esta teoria es el efecto mariposa. La teoría del caos viene a aplicarse en diferentes ciencias como las matemáticas, biología, computación, meteorología, etc...
 
La evolución humana.
Considero que la evolución humana puede considerarse un sistema caótico por diversas circustancias, entre las cuales por ejemplo tenemos el ADN, el cual, desde el punto de vista de las ciencias de la computación lo podemos considerar como una cadena de caracteres de cuatro letras, las cuales son C = Citosina, A = adenina, T = timina, G = guanina, en donde la combinación de triatas, o sea de tres letras cada una, grupos que forman las bases nitrogenadas, que a su vez forman aminoacidos, para que el conjunto de x cantidad de aminoácidos forme las proteinas, fundamentales para el ser humano, entonces, cada organismo humano, tiene un ADN con información que se relaciona con nuestra historia evolutiva antigua y reciente, por lo que considero que estudiando los cambios y mutaciónes en las secuencias del ADN, podriamos decir que poodemos tener un sistema caótico, entonces es común que entre los humanos tengamos alteraciones o cambios en la información genética.

Entonces tenemos algunos puntos relevantes en donde considero que el caós esta presente en la evolución.
  • Nuestro sistema biológico, de cualquier organismo, incluyendonos a nosotros, son sistemas dinámicas.
  • Cualquier proceso evolutivo interviene en el ADN.
  • Podemos decir que los organismos tienen sensibilidad al inicio de condiciones, cuando se crea un nuevo organismo.
  • Poblaciones tienen presión de selección, esto es por ejemplo si hay mucho sol en una ciudad, algunos elementos de la población se adaptan, por ejemplo con un color de piel más oscuro.

Representando el cáos en el ADN

Existen cadenas de ADN muy largas, de las cuales se han hecho investigaciones, estas se pueden representar de una manera gráfica, podemos convertir estas cadenas en imagenes similares utilizando la teoria del caos, a pesar de que tenemos cadenas que tienen muchos genes y regiones no codificadas, este tipo de imagenes que se generan, son utilizadas para identificar especies. 

Para este caso, seleccioné una bacteria, la Helicobacter pylori, la cual según wikipedia
Helicobacter pylori es una bacteria que infecta la mucosa del epitelio gástrico humano. Muchas úlceras y algunos tipos de gastritis se deben a infecciones por H. pylori.
Para poder consultar su ADN, existen páginas de bancos de datos para obtener la secuencia, para este caso ingresé a la página de National Center for Biotechnology, en la parte de genbank [aquí] se pueden buscar los reportes.

Estos fueron los reportes que calculé.


Ahora, para realizar el programa, el cual hice en python, me basé en el libro en uno de los libros de Biomedial Informatics en Python de Jones and Bartlett Series [aquí], utilizando un algoritmo de chaos game para obtener una representación gráfica del ADN y creando matrices para ir contando para colorear puntos.

#!/usr/bin/python
from numpy import arange, array, take, ravel, zeros, transpose
import copy
import Image

#Crea las combinaciones posibles para contar las proteinas simuladas
#base = son las bases nitrogenadas
#A = adenina, G = guanina, C = citosina y T = timina
#Iteraciones, en este caso 8, resultado matriz de 256x256
def combinaciones(base, iter = 8):
    
    #Hacemos la matriz inicial con bases
    a = array([[base[0],base[1]],[base[2],base[3]]]) 
    
    #iteraciones para incrementar matriz
    for n in range(iter-1):
        N = len(a)
        agran = arange(2*N)/2
        b = zeros((2*N, 2*N), 'S8')
        
 #Incrementa la matriz x 4 replicas
        for i in range(N):
            b[2*i] = take(a[i], agran)
            b[2*i+1] = take(a[i], agran)
        
        #Agregamos la letra apropiada
        for i in range(2*N):
            for j in range(2*N):
                k, l = i%2, j%2
                m = k*2+l
                b[i, j] = base[m] + b[i, j]

        a = copy.copy(b)
    return b

#Abro la base del la secuencia de genoma.
def LeerADN(nombre):
    fp = file(nombre)
    datos = fp.read()
    fp.close()
    return datos

#Dibuja en una imagen de 8-bit pixeles en blanco y negro
def dibuja(datos):
    mg = Image.new('L', transpose(datos).shape) #Imagen de 8-bit pixeles en blanco y negro
    mn = datos.min()
    a = datos - mn
    mx = a.max()
    a = a*256./mx
    mg.putdata(ravel(a))
    return mg

#De la base del genoma, solamente agarra la secuencia de ADN.
def SepararADN(datos):
    origen = datos.find('ORIGIN')
    inicio = datos.find('1', origen)
    final = datos.find('//', origen)
    a = datos[inicio:final].split('\n')
    adn = ''
    for i in a:
        spl = i.split()
        adn += ''.join(spl[1:])
    return adn

#Cuenta cuantas veces se repite la cadena en base a las diferentes formas
#que tenemos en la matriz que generamos.
#Devuelve una matriz que puede ser dibujada
def contar(matriz, adn):
    N = len(matriz)
    ctr = zeros((N,N), int)
    for i in range(N):
        if i%50==0:
            print i
        for j in range(N):
            ctr[i, j] = adn.count(matriz[i, j])
    return ctr

#Llamo a todos los metodos
def main():
    datos = LeerADN('Helicobacter_pylori_HUP-B14.gb.txt')
    adn = SepararADN(datos)
    matriz = combinaciones('gatc')
    cuenta = contar(matriz, adn)
    dibuja(cuenta).save('Helico-1.gif')

main()

En donde genero las siguientes imagenes de los 3 diferentes imágenes.




Entonces, considero que podemos relacionar por medio de un sistema dinámico a la representación gráfica del ADN, obteniendo resultados con información del ADN, teniendo como información conjunta u homogenia, abria que estudiar el comportamiento con más informaciones de la cadena de ADN, pero pienso que las propiedades de los genomas, luego de miles de años de evolución teniendo mutaciones, genes que se codifican y genes que no se codifican, podemos concluir que son el resultado de un sistema caótico.

Bibliografía
Genomic signature, Deschavanne [Aquí]
Python for Bioinformatics (Jones and Bartlett Series in Biomedial Informatics). [Aquí]
Genbank de National Center for Biotechnology information [Aquí]
Ecuaciones Diferenciales y problemas con valores en la frontera, Edwards y Penny [Aquí]
Fractal seed, Chaos Theory [Aquí]
Diapositivas de curso "Caos y sistemas complejos" Universidad de Zaragoza [Aquí]