Recent Posts

Neural Compute Stick Movidius

20 Nov , 2017,
Rebeca Rodriguez Tencio
,
No Comments

En los últimos años se escuchado el término de “machine learning” y los procesos que han existido para el análisis de los datos normalmente han sido ejecutados a través de la nube, sin embargo el Neural Compute Stick Movidius INTEL viene a ofrecer una alternativa adicional al proceso a través de un procesamiento local.

El Movidius Neural Compute Stick es el primer kit de aprendizaje basado en USB, que permite acelerar el entrenamiento de AI (Inteligencia Artificial), con una capacidad de procesamiento de una red neuronal.

El dispositivo utiliza una VPU (Vision Processing Unit) Myriad 2 personalizada que ofrece una potencia de 100 GFLOPs con un consumo de 1 vatio y 4GB de memoria LPDDR3, sin embargo una de las características que más me llamo la atención es el “multi-stick”, lo que permite utilizar varias unidades del Movidius Neural Compute Stick para que trabajen en forma conjunta (Si se conectaran 4 Movidius, tendríamos 400 GFLOPS de potencia, lo que es increíble para un USB que tiene un precio $79).

Caracteristicas relevantes:

  • Compilar: Movidius convierte automáticamente una red neuronal convolucional (CNN) basada en Caffe y ya entrenada en una red neuronal integrada y optimizada para operar directamente en la VPU Myriad 2 de Movidius.
  • Ajustar: Permite realizar ajustes efectivos para obtener un rendimiento óptimo con datos reales y con un consumo ultra bajo. Los scripts de validación permiten comparar la precisión de los modelos optimizados en el dispositivo con la de los modelos originales.
  • Acelerar: El Movidius Neural Compute es el único capaz de actuar como un acelerador periférico de redes neuronales añadiendo la capacidad de aprendizaje profundo a las actuales plataformas informáticas para mejorar el rendimiento y la eficiencia.

Conceptos relacionados:

  • VPU (Vision Processing Unit): Es un tipo de acelerador diseñado para procesamiento de argumentos gráficos, como redes neuronales profundas, estimación de pose, detección de profundidad 3D, entre otros.
  • CPU Risc (Reduced Instruction Set Computer): No se trata de usar pocas instrucciones, si no de simplificar la carga de datos de memoria sin realizar operaciones sobre ellos.

NOTA: La siguiente imagen es con fines ilustrativos, únicamente para conocer el Neural Compute Stick por dentro, no intente esto en casa!

Inteligencia Artificial o Aprendizaje de Máquinas

12 Nov , 2017,
Jose Nunez
, , , , ,
No Comments

Flor IRIS

Haciendo un resumen exagerado, podemos decir que la Inteligencia Artificial y/o el Aprendizaje de Máquinas son la forma en que hemos logrado que los sistemas artificiales (máquinas) logren aprender más o menos igual como nosotros los seres humanos lo hacemos: mediante el análisis de un conjunto de observaciones (o muestras) de forma que una vez realizado el aprendizaje, el sistema pueda realizar inferencias ya sea prediciendo un resultado basado en un conjunto de datos.

Las tareas de aprendizaje pueden ser de dos tipos: aprendizaje supervisado (cuando se tiene disponible el resultado durante el aprendizaje) y aprendizaje no-supervisado cuando no se tiene un resultado disponible.

A su vez, las tareas de parendizaje pueden incluir problemas de:

  1. Clasificación: cuando se necesita clasificar un conjunto de características en clases pre-definidas como valores discretos; por ejemplo determinar qué clase de planta está representada en un conjunto de datos.
  2. Regresión: cuando se necesita establecer un valor continuo como resultado de analizar un conjunto de características. Por ejemplo establecer el precio de un producto.
  3. Agrupamiento: cuando se necesita encontrar características comunes entre si que denoten grupos de datos. Por ejemplo la identificación de patrones en una imagen.

El proceso de aprendizaje de máquinas en general se puede definir en los siguientes pasos:

  1. Determinación del Problema: Identificar el objetivo, qué es lo que se quiere lograr (clasificación, regresión o agrupamiento) e identificar las características o atributos de datos relevantes (“features”); así como el tipo de proceso (supervisado o no-supervisado)
  2. Escogencia del algoritmo de aprendizaje: Existen diversos algoritmos para tomar una serie de datos y generar modelos de aprendizaje de máquinas. Estos algoritmos difieren uno de otro en su aplicabilidad para diferentes tipos de problemas. En este enlace se presenta un tutorial bastante sencillo sobre diferentes algoritmos y su evaluación para un problema determinado.
  3. Entrenamiento de un Modelo: Consiste en ejecutar el o los algoritmos elegidos usando el 80% de los datos conocidos (en el caso de aprendizaje supervisado) para generar un modelo que pueda hacer futuras inferencias con datos nuevos. Esto da como resultado un modelo entrenado.
  4. Validación del modelo entrenado: Consiste en ejecutar el algoritmo sobre el modelo entrenado usando el 20% restante y comparando los resultados con los valores conocidos para ese 20% de datos.
  5. Uso del modelo y refuerzo: Una vez alcanzada una precision deseada en los resultados (tal vez > 90%) se puede ya utilizar el modelo entrenado y validado para realizar nuevas inferencias a partir de nuevos datos donde no se tenga un resultado predefinido.

Como una nota final podemos decir que los conceptos de Aprendizaje de Máquinas y de Inteligencia Artificial se pueden separar citando un artículo reciente en la revista Forbes:

Inteligencia artificial (IA) es el concepto amplio de máquinas que son capaces de realizar tareas en una forma que se pueda considerar “inteligente”

y,

Aprendizaje de máquinas es la aplicación de paradigmas de IA al rededor de la idea de que deberia ser posibe que simplemente demos datos a las máquinas y que estas puedan aprender por sí mismas.

Acá algunos conceptos más avanzados que hemos logrado aprender: http://costaricamakers.com/?p=1455

______________________________________________

Referencias

Computación Cuántica – La Desconcertante Guerra de las Álgebras

11 Nov , 2017,
Jose Nunez
No Comments

La física cuántica ( o mecánica cuántica ) no deja de ser un tema fascinante y a la vez desconcertante. Esto porque las cosas en el mundo subatómico se rigen por reglas completamente diferentes a las que estamos acostumbrados; y nuestro entendimiento de los fenómenos físicos se ha limitado históricamente a la física clásica donde cada cosa tiene un estado deterministico que se puede observar, medir y controlar de manera más o menos estable.

A este desconocimiento masivo debemos agregar la gran cantidad de esoterismo que encuentra uno en la “literatura” común sobre mecánica cuántica y sobre cómo esta explicaría la forma de realizar cosas como viajar en el tiempo, la tele-transportación de materia, la telepatía y otras tonterías de ese corte.

Sobre este “andamiaje” teórico es que el ser humano se encuentra de frente con un tema todavía más profundo: la computación cuántica. Es decir, la computación que se basa en los fenómenos o leyes de la mecánica cuántica.

Tengo mis reservas sobre el tema. Por momentos me resulta fascinante, y por momentos irritante. Pero bueno, nada que no haya enfrentado antes con muchos otros temas de esta experiencia humana.

Un dato que me resulta importante de aclarar es que en realidad el ser humano ha estado manipulando las cosas a nivel sub-atómico desde hace rato. Cada vez que un microprocesador procesa unos y ceros en realidad está procesando flujos de electrones (partículas sub-atómicas); haciendo que fluyan en mayor o menor intensidad por diferentes materiales y dispositivos (transistores, resistencias, diodos, etc.)

El punto medular de la computación cuántica radica en una álgebra distinta. Mientras la computación moderna está basada en el álgebra booleana 2 que podríamos definir como una simplificación determinística de las matemáticas que permite representar prácticamente cualquier cosa por medio de unos y ceros; la computación cuántica necesita una álgebra distinta porque se basa en modelos probabilísticos y no determinísticos. Es decir, mientras el estado de un bit es definitivamente uno o cero, el estado de un qubit se considera superpuesto (uno y cero a la vez) y hasta que es medido y adquiere uno de los dos estados, “abandonando” el anterior. Estamos hablando de la Lógica cuántica 3.

Entonces en gran medida la computación cuántica se centra en el debate entre modelos deterministicos y probabilísticos 4 y de cómo sacar mejor provecho de cada uno.

En mi próximo aporte quiero abordar otro aspecto de este tema: La coherencia y decoherencia.

Finalizo con esta frase que probablemente escribiría Edwin Shrödinger en su lecho de muerte:

“cada vez que alguien usa el Gato de Schrödinger
para afirmar cualquier cosa metafísica,
espiritual, o sobre universos paralelos,
el pobre gato se revuelca en su tumba.”

______

1: https://web.archive.org/web/20161104151733/http://computadoras.about.com/od/tipos-de-pc/fl/iquestQueacute-es-la-computacioacuten-cuaacutentica.htm
2: https://es.wikipedia.org/wiki/%C3%81lgebra_de_Boole
3: https://es.wikipedia.org/wiki/Lógica_cuántica
4: http://tornado.sfsu.edu/geosciences/classes/m698/Determinism/determinism.html
5: https://es.wikipedia.org/wiki/Gato_de_Schr%C3%B6dinger

1,2,3 ¡Listo! – Ionic View

3 Nov , 2017,
Jorge Chacon

No Comments

Continuando con la serie 1,2,3¡Listo! de como instalar el Framework Ionic.

En esta entrada veremos como hacer uso de la herramienta Ionic View disponible para Android y iOS.

Para poder usar esta herramienta debemos contar con :

  1. Una cuenta en Ionic.
  2. Haber descargado la app Ionic View en nuestro celular.
  3. El framework disponible en nuestra computadora.

Una vez instalado el framework Ionic y con una cuenta confirmada, primeramente debemos de crear un app mediante el siguiente comando :

ionic start myapp tabs //en el cual tabs seria el diseño de aplicacion que queremos usar. 
cd myapp
ionic login //debemos ingresar nuestra cuenta de Ionic

El siguiente paso seria en nuestro dashboard en la pagina de ionic seleccionar el boton NEW APP asignar un nombre a nuestra app y ejecutar los siguientes comandos

ionic link --pro-id [APP_ID]  //estara disponible en nuestro dasboard en la pagina de Ionic

git add .

git commit -m "my firts commit"

git push ionic master

Como ultimo paso debemos ingresar en la app Ionic view el ID de nuestra app que se muestra en el dashboard de Ionic y podremos visualizarla en nuestro dispositivo movil, o si ya hemos iniciado sesion en la app apareceran nuestra app por visualizar.
Resultado de imagen para ionic app view test

CSS – RESUMEN DE 1 MINUTO

13 Oct , 2017,
Rebeca Rodriguez Tencio
No Comments

CSS son las siglas de Cascading Style Sheets (Hojas de Estilo en Cascada), que fue desarrollada por W3C (World Wide Web Consortium).

Es un lenguaje que describe la presentación de los documentos en pantalla y sirve para separar los contenidos de los documentos escritos en HTML, incluyendo colores, fondos, márgenes, bordes, tipos de letra, entre otros; es decir que CSS permite a los desarrolladores controlar el estilo y formato de los documentos.

Este lenguaje se basa en distintas reglas que vamos a explicar en este tutorial y que forman la sintaxis de las hojas de estilo, cada regla consiste en un selector y una declaración (las declaraciones van entre corchetes y poseen un atributo y un valor separado por dos puntos). Con CSS se puede controlar el diseño de varias páginas web de una sola vez.

Por ejemplo:

<style type="text/css">
  hoja2 {
    color: green;
    background-color: #3dcada}
  </style>

La explicación de las hojas de estilo es muy sencilla y está compuesta por 3 partes o reglas, la primera línea nos indica que eso es una hoja de estilo y que está escrita en CSS (“text/css”), la segunda línea nos indica que se añadirá un estilo a “hoja2 “, la tercera establece el color del texto como verde y en la siguiente línea nos dice que el fondo de la hoja sera de color “#3dcada” que es como turquesa.

  1. El selector (en el ejemplo sería el “hoja2”), este lo que hace es indicar al navegador que elementos HTML van a estar afectados por la declaración.
  2. La propiedad (en el ejemplo sería el “color” y “background-color”) las cuales nos indican qué aspecto del diseño o selector se va cambiar.
  3. El valor (“green” y “#d8da3d”) asigna un valor a la propiedad que puede ser color, alineación,tipo de fuente, etc.

Para aprender más sobre CSS puedes ingresar al siguiente enlace:

  • https://www.w3schools.com/css/default.asp

123 Listo – Instalar Arduino IDE en Linux

28 Sep , 2017,
Robin Gonzalez Ricz
No Comments

Objetivo: Instalar ARDUINO IDE en su computador con Linux (Se ha probado en Ubuntu 16.04)

  1. Diríjase a la página: https://www.arduino.cc
    1. En la pestaña software seleccione Linux. Si no sabe la cantidad de bits de su sistema ejecute el siguiente comando en terminal: uname –i. El segundo número es la cantidad de bits.
    2. Descargue el archivo,
    3. Una vez descargado, descomprima el archivo usando los siguientes comandos en terminal:
      cd $home
      cd Downloads
      tar -xf arduino         #(presione tab para autocompletar)
      cd arduino              #(presione tab para autocompletar)
      ./install.sh
    4. Después de terminada la instalación ejecute el siguiente comando poniendo su nombre de usuario para poder acceder a los puertos usb de la computadora:
      sudo usermod -aG dialout suNombreDeUsuario
    5. Ahora reinice la computadora
      reboot

¡Listo!

123 ¡Listo! – Estación de Trabajo IONIC3 para desarrollo de aplicaciones móviles.

27 Sep , 2017,
Robin Gonzalez Ricz
, , , ,
No Comments

Con este artículo introducimos nuestra serie de tutoriales 123 ¡listo!”. Un formato que resume los pasos necesarios para alcanzar una meta particular.

Objetivo: Crear una estación de trabajo en Ubuntu 16.04 (para UpBoard o Raspberry PI o cualquier sistema x86/x64) para el desarrollo de aplicaciones móviles con IONIC3.

Utilice el siguiente comando para instalar Atom, Netbeans e Ionic en su computadora:

sudo apt install curl && sudo add-apt-repository ppa:webupd8team/atom && curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash - && sudo apt install python-software-properties python g++ make nodejs atom netbeans -y && sudo npm install -g cordova ionic

O también puede instalarlos individualmente con estos comandos:

#ATOM:

sudo add-apt-repository ppa:webupd8team/atom

apt update

sudo apt install atom

#Netbeans

sudo apt install netbeans -y

#Ionic:

sudo apt install curl

curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash –

sudo apt install python-software-properties python g++ make nodejs

sudo npm install -g cordova ionic

Algunos conceptos interesantes de Machine Learning usando Anaconda / Python

23 Sep , 2017,
Jose Nunez
, ,
No Comments

Continuando con nuestras recientes publicaciones sobre “Machine Learning” (artículo anterior sobre fundamentos), en esta oportunidad compartimos algunas cosas que hemos aprendido siguiendo el tutorial “Machine Learning in Python Step by Step“.

Para poder entender este artículo recomendamos seguir el tutorial paso a paso… no se toma más de 30 minutos.

  1. Anaconda: Aprendimos que se puede configurar un ambiente relativamente completo para experimentación con Machine Learning y Python usando Anaconda.
  2. Dataset IRIS: Existe un “Hello World” para Machine Learning basado en un dataset llamado “IRIS” 3. Este consiste en un conjunto de datos que describe tres tipos de flores Iris (setosa, virginica y versicolor) por las dimensiones de su sépalo y pétalo; se puede usar para entrenar un modelo de aprendizaje de máquina para que este infiera el tipo de flor (clasificación) con base en la combinación de parámetros.
  3. Arreglos: Python provee mecanismos para expresar y manipular arreglos de forma sumamente robusta. Podemos resumirlos de la siguiente manera:
    • Básicamente [a:b,c:d] donde a:b representa un rango de filas y c:d representa otro rango de columnas.
    • array[:,0:4] retorna todas las filas de la matriz y las primeras 4 columnas a partir de la columna cero.
    • array[:,4] retorna todos los elementos (filas) de la quinta columna (índice 4)
      
      
  4. Entrenamiento y Validación: El entrenamiento y validación de modelos de aprendizaje de máquinas usualmente suele dividir los datos conocidos en 80% para aprendizaje o creación del modelo y 20% para validación del modelo generado. En este tutorial se usa la función model_selection.train_test_split(X,Y, test_size, random_state) de la libreria sklearn.
  5. SKLEARN LIB: Existen diversos algoritmos de clasificación en la librería sklearn:
    1. LogisticRegression
    2. LinearDiscriminationAnalysis
    3. KNeighborsClassifier
    4. DecisionTreeClassifier
    5. GaussianNB
    6. SVM/SVC
  6. Precisión de Los Algoritmos: Diferentes algoritmos presentan diferentes niveles de precisión dependiendo del problema a resolver. Estos se pueden evaluar usando funciones como model_selection.cross_val_score que da como resultado medidas estadísticas como la media y la desviación estandar. Esta validación se puede confirmar con gráficos de tipo box charts, scattered matrix e histogramas. Estos gráficos se generan en python usando librerías como matplotlib
  7. Aprender y Predecir: Una vez entrenado el modelo (con knn.fit()) se pueden generar predicciones (knn.predict())
  8. Matriz de Confusión: Las predicciones pueden ser validadas mediante mecanismos como confusion_matrix que provee una análisis simple de valores esperados y valores predichos de manera correcta y errónea.
    • La matriz de confusión tiene un eje (x) que representa los valores conocidos, y un eje (y) que representa los valores predichos.
      setosa     ==> [[ 7   0   0]
      versicolor ==>  [ 0  11   1]
      virginica  ==>  [ 0   2   9 ]]
                        se  ve  vi
    • Esto se interpreta así:
      • Se identificaron 7 setosas adecuadamente.
      • De las 12 versicolor se identificaron 11 correctamente y una como virginica
      • De las 11 virginicas se identificaron 9 correctamente y 2 como versicolor.

Referencias:

  1. Machine Learning Step by Step: https://machinelearningmastery.com/machine-learning-in-python-step-by-step/
  2. Confusion Matrix: http://scikit-learn.org/stable/auto_examples/model_selection/plot_confusion_matrix.html
  3. IRIS: https://es.wikipedia.org/wiki/Iris_flor_conjunto_de_datos
  4. Iris Setosa Imagehttps://www.rhs.org.uk/Plants/9355/Iris-setosa/Details

 

Modelando Bases de Datos Relacionales con XAMPP y phpMyAdmin

12 Sep , 2017,
Jose Nunez
, , , , , , ,
No Comments

Alguna vez habrán enfrentado la necesidad de modelar una base de datos relacional.

El mundo de bases de datos relacionales (RDBM) está regido por unos cuantos titanes en el tema. Desde Oracle, pasando por MS SQL Server y sin olvidar MySQL (y su hermana MariaDB) y PostgreSQL.

Para efectos de este artículo nos enfocaremos en MySQL y su nueva ramificación MariaDB.

MySQL forma parte de una pila de tecnologías web sumamente influyentes a nivel mundial. Nos referimos al “Stack LAMPP” que se traduce en Linux, Apache, MySQL, PHP/PERL.

En este conjunto de tecnologías, LINUX figura como un principal contendor en el mercado de sistemas operativos para servidores web (si es que existe tal cosa); mientras que Apache se desempeña como uno de los principales programas de servidor web a nivel mundial. Luego tenemos MySQL que es el componente de base de datos y finalmente PHP como lenguaje de programación para la web del lado del servidor.

Existen varios sistemas de instalación de la pila LAMPP; en nuestro caso usaremos una publicada por la organización ApacheFriends.org denominadada XAMPP. La “X” viene por la compatibilidad con sistemas operativos fuera de LINUX. Así XAMPP permite la instalación de la pila AMPP tanto en LINUX como en MS Windows y OSx de Mac.

A su vez, XAMPP trae algunas utilidades adicionales de las cuales vale la pena mencionar el sistema phpMyAdmin. Una herramienta avanzada que permite el diseño y manipulación de bases de datos MySQL.

Una vez que hemos descargado e instalado XAMPP en nuestro computador, y que nos hemos asegurado de que los servicios para Apache y MySQL están funcionando adecuadamente, podemos acceder al poder de XAMPP la dirección del servidor local: http://localhost/

La siguiente imagen muestra nuestra pantalla principal de XAMPP por medio del navegador.

Nótese entonces que en el menú superior a la derecha tenemos la opción “phpMyAdmin”

Seguidamente se ilustra como luce nuestra versión de phpMyAdmin en este momento.

Al lado izquierdo tenemos las diferentes bases de datos que están ya definidas en el servidor; mientras que a mano derecha tenemos el área de trabajo con diversos puntos de funcionalidad para editar bases de datos y cualquier otro elemento de base de datos.


PASO 1 – CREACIÓN DE BASE DE DATOS

Comenzamos este ejercicio haciendo clic en el nodo “New” que se encuentra a mano izquierda sobre la lista de bases de datos.

Esto nos muestra un formulario para crear una nueva base de datos que básicamente pregunta por el nombre de la base de datos y por el conjunto de caracteres (collation) predeterminado para la base de datos. Este parámetro define qué tipo de simbología usará la base de datos para almacenar texto. Uno de los conjuntos de caracteres más efectivos para occidente es el utf8 con sus variantes por idioma. Para este ejemplo que soporta símbolos en español y otros idiomas usaremos utf8_bin.

Una vez creada la base de datos podemos comenzar con el proceso de modelado.

Para esto utilizaremos el siguiente enunciado:

Se requiere diseñar una base de datos relacional para manejo de inventarios. El inventario contabiliza las cantidades disponibles de productos de diversos tipos; tomados del catálogo de productos que vende la organización. Para efectos de inventario se tienen dos tipos de producto: (1) los productos “serializables” que son productos que se pueden identificar de manera única (por número de serie asignado por el fabricante) y (2) los productos “a granel” que no se pueden identificar de manera unica sino por cantidades, por ejemplo 1 Kg de tornillos, o 300 destornilladores. El inventario se maneja en diversas bodegas y a su vez se contabilizan las entradas y salidas de inventario para y desde cada bodega.

Con este enunciado vamos a dar un siguiente paso para la identificación de los elementos fundamentales del modelo conceptual, es decir las entidades y sus relaciones.


PASO 2 – Identificación de Elementos

Una técnica que proponemos para esto es la de marcar el enunciado con un color (azul) aquellas partes que describen una entidad y con otro color (verde) aquellas partes que describen una relación. Así el enunciado queda de la siguiente manera:

Se requiere diseñar una base de datos relacional para manejo de inventarios. El inventario contabiliza las cantidades disponibles de productos de diversos tipos; tomados del catálogo de productos que vende la organización. Para efectos de inventario se tienen dos tipos de producto: (1) los productos “serializables” que son productos que se pueden identificar de manera única (por número de serie asignado por el fabricante) y (2) los productos “a granel” que no se pueden identificar de manera única sino por cantidades de alguna unidad de medida; por ejemplo 1 Kg de tornillos, o 300 destornilladores. El inventario se maneja en diversas bodegas y a su vez se contabilizan diferentes movimientos como entradas y salidas de inventario para y desde cada bodega.

De esta forma hemos identificado las siguientes entidades:

  1. Catálogo de Producto
  2. Tipo de Producto
  3. Unidad de Medida
  4. Bodega
  5. Movimiento
  6. Tipo de Movimiento
  7. Fabricante

También se identifican algunas relaciones:

  1. Catálogo de Producto >==> Tipo de Producto
  2. Catálogo de Producto >==> Fabricante
  3. Catálogo de Producto >==> Unidad de Medida
  4. Movimiento >==> Tipo de Movimiento (entrada/salida)
  5. Movimiento >==< Bodega

Finalmente algunos atributos relevantes son:

  1. Número de serie
  2. Cantidad
  3. Nombre del Producto
  4. Nombre de Bodega
  5. Descripción de Unidad de Medida
  6. Nombre de Tipo de Movimiento

PASO 3 – Modelo Conceptual

Una vez identificados los elementos básicos del modelo de datos, podemos realizar un diagrama de Entidad-Relación que nos permita comunicar cuales son las entidades que componen el modelo y como se relacionan entre si.

Aunque basta con Power Point o algun otro software que nos permita generar cajitas y conectarlas con líneas; en nuestro caso usaremos el poder de phpMyAdmin.

Para esto tomamos cada entidad y definimos las tablas respectivas con los valores más fundamentales que podemos pensar para cada entidad:

  1. Tipo de Producto (Código de Tipo de Producto, Descripción)
  2. Unidad de Medida (Código de Unidad de Medida, Descripción)
  3. Fabricante (Código de Fabricante, Nombre)
  4. Catálogo de Producto (Código de Producto, Descripción, Código de Tipo de Producto, Código de Fabricante, Código de Unidad de Medida)
  5. Bodega (Código de Bodega, Descripción)
  6. Tipo de Movimiento (Código de Tipo de Movimiento, Descripción)
  7. Movimiento (ID de Movimiento, Código de Bodega, Código de Producto, Código de Tipo de Movimiento, Cantidad)

Nótese que hemos reorganizado las entidades de forma que primero se definen aquellas de las cuales hay dependencia en otras entidades. También debemos acotar que los nombres de las tablas (entidades) y sus atributos los realizamos usando una nomenclatura estándar, donde “cd” refiere a código, “dsc” refiere a descripción y “id” refiere a identificador numérico automático. Se usan ID’s en las entidades transaccionales, mientras que se usan códigos en las entidades tipificadoras.

La siguiente imagen muestra cómo se definen los campos básicos de una tabla (entidad). Para poder acceder a este formulario se hace clic en el nodo de base de datos “inventario” a la izquierda. En el área de trabajo hay una opción para iniciar la creación de una tabla (entidad) con una cantidad predeterminada de columnas (atributos)

 


PASO 4 – Modelado de las Relaciones

Una vez definidas las entidades (tablas) podemos visualizarlas usando el área de la izquierda, expandiendo los nodos correspondientes como se muestra en la siguiente imagen.

A su vez, si hacemos clic en la base de datos “inventario” podremos acceder a la función “Designer” la cual nos permitirá ir construyendo las relaciones entre las entidades (tablas) mientras que construimos el diagrama Entidad-Relación correspondiente.

La siguiente imagen muestra la función de diseño, desde donde se pueden crear relaciones entre las diferentes tablas.

Si hacemos clic en “Toggle small/big” en el menú de la izquierda podremos ver todos los atributos.

También, si hacemos clic en “Create relationship” podremos seleccionar – primero – un atributo de tipo “llave primaria” y – segundo – un atributo en otra tabla de tipo “referencia foránea” y así conformar las relaciones.

De esta forma podemos ver el diagrama con relaciones logrado como sigue, el cual no solamente expresa las relaciones en sí, sino también la cardinalidad entre las entidades.

Volviendo al diagrama reducido a solamente las entidades podemos ver que queda así; incluyendo indicadores de cardinalidad entre las entidades.

Estos diagramas son sumamente útiles para discutir y razonar sobre el modelo de datos. A su vez se puede utilizar phpMyAdmin para agregar o modificar atributos en la fase de modelado detallado de la base de datos.

Posibilidades con el pequeño Wheely

12 Ago , 2017,
Jose Nunez
No Comments

¿Recuerdan nuestro pequeño Robot de dos llantas?

Bien, le agregamos unos cuantos dispositivos más y veremos si lo podemos hacer un poco más listo.

  • Batería de Lítio-Polímero de 3.7V recargable. Para no gastar en baterías AA.
  • Regulador de 3V a 5V que nos permite usar la batería LIPO para alimentar una gama interesante de controladores y los motores a 5V.
  • Sparkfun Thing 8266: Este controlador nos da capacidades WIFI y además un mecanismo para cargar la batería LIPO usando un cable micro-USB convencional.
  • Arduino 101: Microcontrolador de gran capacidad que además trae acelerómetro y giroscópio en 6 ejes y comunicación Bluetooth BLE. Lo alimentamos a 5V, pero operan sus señales a 3.3V.
  • Sensor de proximidad para detectar obstáculos o mapear áreas que opera a 5V.
  • El ya conocido controlador S4A-EDU con puente H desconectabe. Nos permite controlar los motores en diferentes direcciones e incluye comunicación tx/rx que podemos usar para conectarlo a los otros micro-controladores mencioandos.

De momento no he programado mayor cosa con todo esto, salvo por este ejemplo; pero esperamos hacer algunas cosas interesantes con todas estas capacidades.