Rese帽a del sensor Aidex y su relaci贸n con IoT y mHealth

Imagen
En esta publicaci贸n quiero compartir mi experiencia personal utilizando el sensor de glucosa Aidex , el cual adquir铆 en AliExpress. Adem谩s de rese帽ar el dispositivo, quiero hablar sobre c贸mo se relaciona con el concepto de Internet of Things (IoT) , el 谩rea de mHealth (mobile health) y reflexionar sobre los posibles riesgos de seguridad asociados. ¿Qu茅 es IoT? El Internet of Things o Internet de las Cosas se refiere a la conexi贸n de objetos f铆sicos a internet para recolectar, enviar y procesar datos. Estos dispositivos incluyen desde sensores y electrodom茅sticos inteligentes hasta autom贸viles conectados. En el caso del Aidex, el chip y el transmisor conectado al cuerpo forman parte de este ecosistema al enviar datos de glucosa en tiempo real a un dispositivo m贸vil. Mi experiencia con Aidex El kit incluye un sensor, un transmisor y la aplicaci贸n m贸vil. En mi caso, lo conect茅 con un Xiaomi Mi 13 y logr茅 visualizar las mediciones de glucosa de forma continua en la...

馃搶 Arreglos Din谩micos en Progress 4gl: C贸mo Usarlos Eficientemente

En el post de esta semana vamos a platicar de un ejemplo en lenguaje Progress 4gl para hacer arreglos ( en mi caso solo vector que es un arreglo de solo una dimensi贸n) din谩micas, cuando decimos que es din谩mico es decir podemos definir de tama帽o variable una matriz (Algebra l铆neal), quiz谩 con una imagen sea m谩s f谩cil de entenderlo

Una Matriz
Algebra Lineal y Programaci贸n

Un Vector





La ventaja de un arreglo din谩mico es que si no sabes cual es el tama帽o exacto de un vector para poder realizar un programa o una operaci贸n, lo mejor es para no utilizar memoria dem谩s es definir un arreglo din谩mico, en Java  por ejemplo son arreglos que van cambiando de tama帽o con forme  se agregan elementos , la instrucci贸n es dynamic array. En Python  por ejemplo no definimos el tama帽o de los vectores y matrices, este se va modificando, conforme nosotros modifiquemos los datos. Progress tiene algo que realiza esta funci贸n que es utilizando la palabra Extent, esta instrucci贸n nos permite definir un vector sin tama帽o al inicio de un programa por ejemplo

DEF VAR arr_col         AS CHARACTER NO-UNDO EXTENT .

M谩s adelante en el programa cuando ya sabemos el tama帽o, actualizamos el dato asi:

EXTENT(arr_col) = vc-totcol.


Por ejemplo yo lo utilice para un reporte que dependiendo de las marcas que encontrara en una tabla fueran las columnas del reporte y las filas ser铆as los c贸digos de art铆culos, todo esto lo envi茅 a una tabla temporal y despu茅s mostr茅 los datos y como esto no era est谩tico, cree el reporte de manera din谩mica y utilice 2 vectores uno para las marcas y otro para los n煤meros de parte y para mostrar el resultado busco en la tabla temporal con dos bucles o ciclos uno que va leyendo las filas y otro que va leyendo las columnas y hace un for each con los datos que cumplen las 2 condiciones. 

vc-totrow = 0.
vc-totcol = 0.

FOR EACH ttresult NO-LOCK BREAK BY marca :
    
  IF LAST-OF(marca) THEN DO:
     vc-totrow =  vc-totrow + 1.
  END.  
END.

FOR EACH ttresult NO-LOCK BREAK BY part:
   IF LAST-OF(part) THEN DO:
    vc-totcol =  vc-totcol + 1.
   END.
END.

vc-indc = 1.
vc-indr = 1.

EXTENT(arr_col) = vc-totcol.

EXTENT(arr_row) = vc-totrow.


FOR EACH ttresult NO-LOCK BREAK BY marca:
    
  IF LAST-OF(marca) THEN DO:
     arr_row[vc-indr] = marca.
vc-indr = vc-indr + 1.
  END.  
END.

FOR EACH ttresult BREAK BY parte:
   IF LAST-OF(parte) THEN DO:
    arr_col[vc-indc] = parte .
vc-indc= vc-indc + 1.
   END.

END.


OUTPUT STREAM s-excel TO VALUE(vc-exc-file) PAGE-SIZE 0.

/* Headers */
PUT STREAM s-excel UNFORMATTED 
    "Marca"   "~011".

DO iy = 1 TO EXTENT(arr_col):
   IF arr_col[iy] <> "" THEN 
  PUT STREAM s-excel UNFORMATTED arr_col[iy] "~011" .
END.
  
  PUT STREAM s-excel UNFORMATTED SKIP.

/*Detail*/  
  
DO ix = 1 TO EXTENT(arr_row):
      IF SUBSTRING(arr_row[ix],1,8) <> "" THEN DO:   
     PUT STREAM s-excel UNFORMATTED 
         SUBSTRING(arr_row[ix],1,8)   "~011"
         TRIM(SUBSTRING(arr_row[ix],10,8)) "~011".
END.  
  DO iy = 1 TO EXTENT(arr_col):
  
 
  FIND FIRST ttresult WHERE marca = SUBSTRING(arr_row[ix],1,8) 
          AND parte       = arr_col[iy] NO-LOCK NO-ERROR.
   
  IF AVAIL ttresult AND arr_col[iy] <> ""   THEN DO:
   
     PUT STREAM s-excel UNFORMATTED 
     cantidad "~011".
END.
 
IF NOT AVAIL ttresult AND arr_col[iy] <> "" THEN DO:
     PUT STREAM s-excel UNFORMATTED 
     "0.00" "~011".
END.
 
  END. /* DO iy = 1 TO EXTENT(arr_col): */
   PUT STREAM s-excel UNFORMATTED SKIP.
END.  /* DO ix = 1 TO EXTENT(arr_row): */


OUTPUT STREAM s-excel CLOSE.

El resultado de ejecutar este programa es como la siguiente imagen



El tiempo de ejecuci贸n no es demorado y muestra la informaci贸n de manera f谩cil para los usuarios.

Otros art铆culos en este blog acerca de Progress 4gl

Espero este programa les sea de utilidad, compartan el post y nos sigan en el #programacionparatodos  y en nuestra p谩gina de Facebook

Comentarios

馃殌 Mantener este blog funcionando requiere tiempo y caf茅. ¡Puedes contribuir con uno aqu铆!

Entradas m谩s populares de este blog

Gu铆a Pr谩ctica: Ejemplo Completo de ASPX para Desarrolladores Web

馃搳 Automatiza tu trabajo: Convierte tablas de Word a Excel con una macro

API de banxico para obtener tipo de cambio utilizando Javascript