martes, 3 de noviembre de 2015

Integracion

Proyecto BTN


Autor: Bruno Binner Quiñones
Competencia: Creatividad e innovación.

Asignatura: Integracion I

Palabras Clave: Proyecto, lector, pagina


Descripción de la Actividad

Se encomendó a cada grupo realizar un proyecto que se realizara a lo largo de todo el semestre que busca dar solución a alguna problematica que nos plantiemos.


Desarrollo

Lo primero fue buscar cual iba a ser la problematica que íbamos a abordar, y por cosas de gustos decidimos que iba a ser sobre paginas para leer comics.

Por lo que el objetivo del proyecto que nos planteamos es crear una pagina para leer manga que tome lo positivo de páginas ya existentes e implementar funciones que permitan al usuario personalizar su interfaz, cosa que esté a gusto con lo que ve en cuanto a organización de menús y colores. Que sea cómodo, permitiendo a las personas moverse por el sitio de la forma que estimen más conveniente. Y finalmente, accesible y óptimo, tanto para buenas y malas conexiones a internet.

Por otra parte también se quiere reducir en lo más posible el uso de anuncios publicitarios para que no arruine la experiencia de las personas al usar el sitio.


Aquí un ejemplo de lo que se quiere lograr:



Conclusión

Encontrar una solución innovadora a un problema ya existente si bien puede resultar no tan fácil a veces, métodos como el de lluvia de ideas o preguntar a personas que les interese el tema y noten estas mismas fallas, puede ayudar mucho a sacar ideas para generar una solución que se adapte a la mayoría de las personas. 

La confianza y la creencia.


Autor: Bruno Binner Quiñones
Competencia: Comunicación oral y escrita.
Asignatura: Proyecto cristiano
Palabras Clave: Confianza, creencia, exposición, video

Descripción de la Actividad

La actividad consistió en generar una presentación en la que se abordará el tema de la confianza en el sentido de cómo esta afecta la forma en que creemos. O sea en cómo percibimos el mundo.

Desarrollo

Lo primero que se hizo fue investigar sobre la confianza y se genero un documento con toda la información que consideramos relevante para la exposición. Que en resumidas resultaron los siguientes tópicos.
    -Como la confianza afecta en el crecimiento de la persona y como es el pilar de las relaciones con otros individuos.
    -Los efectos negativos que puede provocar problemas en esta.
    -Y como se puede llegar a un equilibrio en el sentido de la confianza hacia los demás  hacia uno mismo.

               
Con la información ya reunida. Se planificó la presentación para que fuera un poco más interactiva con nuestros compañeros para que ‘enganchara’ así que se hizo de la siguiente forma.
Al principio de la presentación nos presentamos y luego de eso se pregunta a los compañeros que es lo que ellos entienden como confianza y sies que piensa que es importante. Para luego pasar a explicar que es la confianza y como la tomamos.
               
Se presentan los puntos mencionados arriba, lo que resultó del informe, relacionando cada uno de ellos con ejemplos o anécdotas de cada uno.


Para concluir se tomó el siguiente video para resumir cada uno de los puntos y relacionarlos entre sí.



Conclusión

El hecho de hacer una presentación con elementos audiovisuales y hacer que los compañeros participen de ella la hace mucho más didáctica y capacitiva.

Python: Manejo de archivos binarios y puertos seriales


Python: Puertos seriales y archivos binarios


Autor: Bruno Binner Quiñones
Competencia: Trabajo en equipo
Asignatura: Programación II
Palabras Clave: Python, archivos binarios, puerto serial, ctypes


Descripción de la actividad

La actividad consistió en formar grupos de 3 integrantes y desarrollar 2 scripts.
Un Script en Python que envía por el puerto serial 10.000 datos estructurados de la siguiente forma:    {randint[1,100], randint[1,1.000], randint[1,10.000], random()}
Los datos se envían como String y van separados con coma y con salto de línea. Un ejemplo válido de una secuencia de datos sería así: 23,450,6.527,0.19096663981190465,\n. Los datos se envían cada 0.1 segundo.
Por el lado del Script en Python que recibe los datos, estos se deben convertir al tipo de dato  original y ser almacenados en el archivo binario “ datos.bin”. Una vez que se han recibido todos los datos, estos se deben imprimir por pantalla y calcular el promedio de los datos de cada columna. Estas operaciones se hacen sobre el archivo binario.
Para simular la conexión serial, se debe utilizar el programa Virtual Serial Port Emulator y configurar un Connector , con emulación de baudios a 9.600-8N1. Aquí un esquema que clarifica lo que se debía hacer.



Siendo TX el script que envía y RX el que recibe.

               
Desarrollo

Lo primero que se hizo fue dividir las actividades en el código por categorías. De lo que resultaron 3.
-La primera categoría era la comunicación por serial, que se encargaba de que los 2 scripts se comunicaran por puerto serial y uno enviará datos al otro para que este último los almacenará y desglosa.
-La segunda categoría se encargaba de todo lo que es la escritura y lectura de archivos binarios.
-Y la tercera y última categoría es la encargada de tomar esos datos obtenidos del archivo binario, y hacer operaciones matemáticas sobre ellos, o sea sumar cada columna y sacar el promedio para luego imprimirlo por pantalla.

Ya divididas las actividades se le asignó a cada integrante una de acuerdo a sus habilidades. Para después juntar cada parte del código y hacerlo funcionar.
Por su puesto se mantuvo una constante comunicación entre los integrantes para que el código que cada uno estaba haciendo tuviera la misma lógica.

El resultado fue el siguiente codigo:

conx1.py

import serial as se
import random as ra
import time

s=se.Serial(0)
s.baudrate=9600

for i in range(10000):
    env= str(ra.randint(1,100))+','+str(ra.randint(1,1000))+','+ str(ra.randint(1,10000)) + ',' + str(ra.random()) + ',\n'
    print env
    time.sleep(0.1) # Para enviar datos cada 0.1 seg
    s.write(env)

s.close()

conx2.py

import serial as se
import ctypes as Ct

s=se.Serial(0)
s.baudrate=9600

class structura(Ct.Structure):
    _fields_= [('num1',Ct.c_int),('num2',Ct.c_int),('num3',Ct.c_int),('num4',Ct.c_float)]
  
def Put( xReg ):
    f.write(xReg)
    return

prom_a=0.0
prom_b=0.0
prom_c=0.0
prom_f=0.0
N=10000
men =[]
datos = []
aL=[]

for i in range(N):
    men.append(s.readline()[:-2])
  
for i in range(len(men)):
    datos.append(men[i].split(','))

f = open('datos.bin','wb')
guardar = structura()
for i in range(N):
    guardar.num1 = int(datos[i][0])
    guardar.num2 = int(datos[i][1])
    guardar.num3 = int(datos[i][2])
    guardar.num4 = float(datos[i][3])
    Put(guardar)
f.close()
f = open('datos.bin','rb')
for i in range(N):
    f.readinto(guardar)
    aL.append([guardar.num1,guardar.num2,guardar.num3,guardar.num4])
    print aL[i]
    prom_a+=aL[i][0]
    prom_b+=aL[i][1]
    prom_c+=aL[i][2]
    prom_f+=aL[i][3]
prom_a=prom_a/len(aL)
prom_b=prom_b/len(aL)
prom_c=prom_c/len(aL)
prom_f=prom_f/len(aL)
print '.........................................................'
print '= Promedios ='
print 'Primera columna:',prom_a
print 'Segunda columna:',prom_b
print 'Tercera columna:',prom_c
print 'Cuarta columna:',prom_f
f.close()
s.close()



Conclusión

En el trabajo en equipo es importante mantener una constante comunicación y entendimiento con los demás integrantes. Así como lo es la organización y conocimiento de los fuertes de cada uno. Como queda demostrado en la actividad realizada, si se cumple lo arriba mencionado un trabajo se puede realizar de forma rápida y concisa. 

Graficando Distribuciones normales


Python y datos tipo gauss


Autor: Bruno Binner Quiñones
Competencia: Aplica las ciencias de la ingeniería (Nivel 1)
Asignatura: Programación II
Palabras Clave: Distribucion normal, Gauss, python, grafico, filtro low-pass

Descripción de la Actividad

La actividad consistió en hacer un programa en python que generará 10.000 datos aleatorios con valores de una ‘Distribución Normal’ (o ‘Distribución Gaussiana’) con media 10 y desviación estándar de 0,5. Luego aplicar un filtro a los datos obtenidos y graficarlos con el módulo matplotlib de python.

Qué es Distribución Normal o Distribución Gaussiana?

En estadística y probabilidad se llama distribución normal, distribución de Gauss o distribución gaussiana, a una de las distribuciones de probabilidad de variable continua que con más frecuencia aparece aproximada en fenómenos reales.

La importancia de esta distribución radica en que permite modelar numerosos fenómenos naturales, sociales y psicológicos.

Por ejemplo, el siguiente es un gráfico llamado la campana de gauss que representa una Distribución normal:

normal.png

Donde 0 es la media.

Filtro Low-pass

Un filtro low-pass se usa para atenuar las altas frecuencias en una onda. En nuestro caso va a atenuar valores que se alejen de la media.

Código y explicación
                                                                                              Resultado
  1. import pylab as plab
  2. import random as ra

  3. def lowpass(v,a):
  4.    f = [0]*10000
  5.    f[0] = v[0]
  6.    for i in range(1,10000):
  7.        f[i] = a*v[i] + (1.0-a) * f[i-1]
  8.    return f

  9. d = [ra.gauss(10,0.5) for i in range(10000)]
  10. fil = lowpass(d,0.9)

  11. plab.plot(d)
  12. plab.plot(fil)
  13. plab.grid()
  14. plab.show()

Se importó la librería pylab que nos permitirá representar de forma gráfica los datos que generemos y la librería random que incluye una función especial para generar datos de tipo gaussianos.
Se crea la función que servirá para filtrar los datos obtenidos. Para así facilitar el trabajo con estos.
En un arreglo ‘d’ guardamos 10000 datos gaussianos que irán del 8,25 hasta el 11,75. Para generarlos se uso la funcion random.gauss(media,variación) donde se usó como media 10, y variación estándar 0,5.
Luego en otro arreglo se guardaron los mismos datos pero con el filtro (low-pass) aplicado, usando como índice de filtro 0,9.
Con pylab se generaron 2 gráficos usando .plot(). Uno usando los datos gaussianos (‘d') y el otro usando los datos gaussianos con el filtro aplicado (‘fil’). Luego con .show() se mostraron los gráficos por pantalla resultando lo siguiente.

 
 Lo graficado en azul corresponderia al contenido de ´d´ y lo verde es 'd' con el filtro aplicado, o sea 'fil'.






Después para demostrar la utilidad del filtro se procedió a probar con distintos valores para ‘a’ en la función ‘lowpass(v,a)’.

figure_1.pngfigure_2.png

                                a = 0.1                                                             a = 0.3
figure_3.pngfigure_4.png
                                a = 0.5                                                             a = 0.7
                                a = 0.9

Conclusión

Lo que se puede rescatar de esta actividad son esencialmente 2 cosas: El manejo de la librería pylab que nos permite crear y mostrar una representación gráfica de los datos que queramos. Y la comprensión de las Distribuciones normales o gaussianas para representar datos estadísticos y establecer que considerar dentro o fuera de lo normal.