lunes, 30 de abril de 2012

Registros de desplazamiento utilizando Arduino

Para nuestro proyecto de Arduino, es necesario aprender a utilizar y como poder manejar muy pocas entradas del Arduino para controlar más salidas, por lo que para esta entrada hablaré del registro de desplazamiento que vamos a utilizar en el cubo de leds, en donde mostraré un ejemplo en donde tenemos con solamente 4 salidas del arduino, controlar 16 Leds.

Un registro de desplazamiento se puede utilizar para controlar 8 salidas simultaneas usando unos pocos pines del microcontrolador, incluso es posible conectar dos demultiplexores y sacar 16 salidas, que es lo que hicimos para esta entrada.

El integrado 74HC595, lo compramos en AG electronica y este integrado es un registro de desplazamiento de 8 bits con entrada serie, salida serie o paralelo con latch (o sea, bloqueos), de 3 estados.

¿Cómo funciona?

Este integrado funciona de la siguiente manera, utiliza comunicación serie sincrona, en donde tu puedes transmitir un byte enviando pulsos altos y bajos por un pin y otro pin, viene siendo el clock o reloj en donde va enviando pulsos constantes para ir diferenciando los bits enviados por el pin que envia los pulsos diferentes, por lo que este es muy diferente a una comunicación serial asicrona ya que utilizando la función Serial.begin() el emisor y el receptor fijan la forma de una velocidad de tranferencia, por lo que a diferencia, este una vez que le enviamos el byte completo al registro, los valores ya sean los altos o los bajos, se lo asignan a cada pin de salida, provocando una salida en paralelo.

La salida en serie de este integrado es el agregr un pin extra que retransmite la información que le estamos mandando del arduino sin cambios, por lo que podemos como comunicar dos de estos integrados y tener la capacidad de transmitir 16 bits donde los primeros 8 bits atraviesen al primero y después se almacenen en el segundo, esto es lo que hicimos como ejemplo.

Bueno este es la información de los pines del integrado que utilizamos, tomado de aquí

PINS 1-7, 15 Q0 " Q7 Pins de salida
PIN 8 GND Ground, Vss
PIN 9 Q7" Salida Serie
PIN 10 MR Master Reset, activo = low
PIN 11 SH_CP Pin Clock
PIN 12 ST_CP Pin Latch
PIN 13 OE Salida disponible, activo = low
PIN 14 DS Entrada Serie
PIN 16 Vcc Voltaje

Para checar como funciona, es preferible hacer un programa que nos ayude a probar los integrados y de las conexiones, por lo que utilizamos este diagrama de circuito, con 16 LEDs, 16 resistencias de 220 Ohm, dos integrados demultiplexores 595 y un condensador 0.1 uf o 100 nF.

Este es el diagrama.




Para verlo mejor o más grafico, estas son las conexiones utilizando 3 protoboards.

Y este es el código que realizamos para verificar su funcionamiento.


En donde podemos ver que tenemos un arreglo con los leds que queremos prender y este los va leyendo y pasando la información a los integrados para que realicen su función.

En esta liga aquí vienen algunos ejemplos, pero nos dimos cuenta que algunos no funcionaban, por lo que nos dimos la tarea de realizar un programa por nosotro mismos, en base a los ejemplos.

Estos fueron los resultados.










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í]

jueves, 19 de abril de 2012

Extra points


  • Trajectory
    • A trajectory is the path that a moving object follows through space as a function of time.
  • Configuration
    • A configuration is an arrangement of functional units according to their nature, number, and chief characteristics.
  • Net
    • Is a collection of hardware components and computers interconnected by communication channels that allow sharing of resources and information.
  • Automatic
    • Working by itself with little or no direct human control.
  • Behavior
    • Refers to the actions and mannerisms made by organisms, systems, or artificial entities in conjunction with their environment, which includes the other systems or organisms around as well as the physical environment.
  • Extension
    • A filename extension is a suffix (separated from the basefilename by a dot) to the name of a computer file applied to indicate the encoding (file format) of its contents or usage. Examples of filename extensions are .png, .exe, .dmg and .txt
  • Sequence
    • In mathematics, a sequence is an ordered list of objects (or events). Like a set, it contains members (also called elements or terms), and the number of terms (possibly infinite) is called the length of the sequence. Unlike a set, order matters, and exactly the same elements can appear multiple times at different positions in the sequence.
  • Convention
    • a way in which something is usually done.
  • Sudo
    • Sudo is a program for Unix-like computer operating systems that allows users to run programs with the security privileges of another user

Accesibilidad en sistemas móviles

La importancia de la accesibilidad en sistemas móviles es relevante para generar software que mediante las cosas que ya tenemos existente, para todas aquellas personas que tengan algunas discapacidades, ya sean motrices o visuales, por lo que aumenta el rango de personas que puedan utilizar el dispositivo de manera más sencilla.



Para hablar acerca de la accesibilidad móvil que se utiliza actualmente en el mercado al igual que escribiré acerca de los elementos importantes considerando que un sistema sea accesible.



Podemos decir que podemos dividir en las 3 capacidades más importantes para mejor la accesabilidad en sistemas móviles, primero hablaremos de la visión.

Para personas que tengan deficiencia visual o personas ciegas, puedan usar un dispositivo móvil más facilmente, por ejemplo se tienen sistemas que tienen la capacidad de leer en voz alta todos los elementos que pueda tener la pantalla, al igual que leer indicaciones importantes, las notificaciones que recive, poder pronunciar al escribir, teniendo sistemas que puedan ser utilizados para personas que tengan esta deficiencia.

Existen sistemas en el cual por medio de bluetooth, conectan teclados especiales de Braile para poder utilizar algun dispositivo móvil, y así más facilmente se pueda utilizar.




Tambien, existen sistemas que tienen la capacidad de realizar zoom, para mejorar el rango de vision sobretodo en sistemas que utilizan pantallas pequeñas, utilizando los dedos para poder desplazarse.

Agrandar el texto en un sistema móvil en ciertas aplicaciones es importante para personas que consideran el tamaño del texto del sistema un inconveniente, sistemas como blackberry OS, tienen esta capacidad para cambiar de punto el texto.


Sistemas como iOS proveen "white on black", que hace como un cambio de colores, el cual propone un mejor contraste y reduce la tensión ocular.


Para las personas con problemas de audición, es posible poder seleccionar en algunos sistemas audio mono, para personas con dificultades o sencibles a la audición, al igual que poder sleccionar en cual oido deseas tener más sonido, si es que utilizas audifonos, al igual que reducir o fijar volumen al momento de escuchar música.


En cuestión de discapacidades motrices, iOS tiene un sistema llamado Assistive Touch para sus dispositivos, este es un sistema que esta diseñado para personas que por ejemplo no pueden utilizar todos los dedos en el dispositivo, o no pueden controlar sus movimientos, por lo que puedes utilizar el dispositivo con un solo boton.

Aquí les dejo un video de como se utiliza.



Podemos concluir que un sistema accesible es de suma importancia en el mundo actual, no nada mas para aumentar el rango de personas que lo puedan utilizar, si no que podemos hacer con tecnologia, que personas con deficiencias puedan utilizarlo satisfactoriamente y que cuando nosotros estemos haciendo nuestro proyecto, tener en cuenta que estas funcionalidades funcionen.

domingo, 15 de abril de 2012

Cubo LEDs 3x3x3 + Arduino BT

Como parte del proyecto de la materia de Cómputo integrado, en el cual consiste en realizar un cubo de leds de 10x10x10, como propuesta de irnos introduciendo en la parte de la electrónica y en la parte de la programación de arduino, realizamos un cubo led de 3x3x3 para darnos una idea de como lo debemos de realizar.

Para este proyecto, ocupamos el siguiente material.

  • 27 Leds (En este caso tenemos leds verdes claros)
  • Cautín

  • Estaño
  • 9 resistencias de 220 Ohms
  • 3 resistencias de 330 Ohms
  • 3 transistores 2N2222
  • Dremel

  • Un trozo de madera
  • Arduino (utilizamos el arduino bluetooth)



Bueno, luego de que tengamos todos los materiales lo primero que tenemos que hacer, es realizar un molde en el trozo de madera para de ahí, ir soldando las capas, por lo que con el dremel, seleccionamos el perforador o incluso pueden utilizar un taladro, para hacer puntos que sean del tamaño del LED de la cabeza y tambien considerando la magnitud de las patas del LED.

Para ilustrar mejor de lo que estoy hablando, publicaré algunas imágenes.




Recordar las patas que vamos a doblar para hacer el cubo, son los cátodos (las patas mas chicas) por lo que en base a este puedes hacer el molde que vas a necesitar para que sea más facil el trabajo.

Como lo explica Cecilia aquí, es preferible que utilices LEDs difusos para que tengas iluminación en toda la cabeza del LED y no solo en una parte, por lo que si tienes LEDs claros, puedes comprar un spray especial que pinta vidrios y los pone en modo ahumado, esto no es indispensable, solamente como tip para que tengan un mejor resultado final.


Es importante verificar que los LEDs que estes utilizando, funcionen, por lo que te recomiendo que realices pruebas para ver que estan en buen estado, por ejemplo nosotros realizamos un programa sencillo que le pasamos al Arduino para verificar que este prendiera.



Luego de que tengas todo preparado, fijate bien que en las entradas que perforaste, quepa bien el LEDs, obiamente que quede un poco flojo pero no mucho, que con facilidad puedas sacar los LEDs a la hora de sacar la base, no batalles y se te desolde por accidente, como dije anteriormente, bas a doblar cada una de los catodos haciendo un angulo de 90 grados, para luego con estaño ir soldando cada catodo siguiente y generar la base.


Repite este paso 3 veces para tener las capas necesarias.

Ahora lo que hicimos fue soldar las capas, para arriba, ahora los anodos con los anodos.


Ahora, lo que realizamos es soldar cable, de cada columna, al protoboard, luego agregar una resistencia y cada una ponerlo en las primeras 9 entradas del arduino, luego de cada capa, agregamos cable, y pusimos los transistores y resistencias necesarios para luego mandarlo al arduino.




La manera en que le conectamos, es la siguiente, obtenido de este blog.

Ahora si puedes hacer un programa para pasarlo al arduino y hacer con el cubo lo que quieras, nosotros por ejemplo hicimos algunos programas como prender los LEDs y algunas pruebas que luego mostraremos cuando finalicemos nuestro proyecto.