glUCModel para iOS
Full text
POR: FRANCISCO JAVIER LINDE BLÁZQUEZ ! GRADO EN INGENIERÍA DEL SOFTWARE FACULTAD DE INFORMÁTICA DEPARTAMENTO DE ARQUITECTURA DE COMPUTADORES Y AUTOMÁTICA UNIVERSIDAD COMPLUTENSE DE MADRID ! ! ! ! ! ! ! ! PROYECTO DE FIN DE GRADO EN INGENIERÍA DEL SOFTWARE ! Madrid, a 18 de Junio de 2014 Director: José Ignacio Hidalgo Colaborador: J. Manuel Colmenar glUCModel para iOS
AUTORIZACIÓN DE DIFUSIÓN Y UTILIZACIÓN ! ! Francisco Javier Linde Blázquez autoriza a la Universidad Complutense de Madrid a difundir y utilizar con fines académicos, no comerciales y mencionando expresamente a su autor, tanto la propia memoria como el código, los contenidos audiovisuales, incluidas imágenes del autor y documentación. ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
Este documento se distribuye bajo licencia Creative Commons BY-NC-SA 3.0. ! Dicha licencia permite: Compartir — copiar y redistribuir el material en cualquier medio o formato Adaptar — transformar y crear a partir del material ! Bajo las condiciones siguientes: Reconocimiento — Debe reconocer la autoría del documento. Debe proporcionar un enlace a este documento original e indicar si se han realizado modificaciones sobre el mismo. No Comercial — No puede utilizar el material para una finalidad comercial. Compartir Igual — Si transforma o crea a partir del material, deberá difundir sus contribuciones bajo la misma licencia que el original. ! ! ! ! ! ! ! !
! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! A Gerardo Fernández Moreno. ! Por ser un ejemplo de trabajo y constancia. Por servirme de motivación. ! ! !
AGRADECIMIENTOS ! ! Mis más sinceros agradecimientos a mi director de proyecto José Ignacio Hidalgo por todo el tiempo dedicado, por el interés mostrado y por su paciencia y amabilidad durante el desarrollo del proyecto. Agradecimientos a José Manuel Colmenar por su colaboración en el proyecto, ha arrojado luz en aquellos temas técnicos que requerían una consulta externa. Agradecimientos a mi compañero Abdelkhalek El Mansouri por colaborar en aquellas tareas comunes del proyecto así como por prestar la ayuda que le ha sido posible en el proyecto. ! ! ! ! ! ! ! ! ! ! ! ! !
ÍNDICE ! 1. Introducción: Pág. 8 2. ¿Qué es glUCModel?: Pág.14 3. Desarrollando en iOS: Pág.17 4. Implementación: Pág.26 5. Resultado: Pág.37 6. Conclusiones: Pág.41 7. Futuro de la aplicación: Posibles mejoras: Pág.42 8. Bibliografía: Pág.42 ! Apéndice 1: Manual de Uso (Paciente): Pág.45 Apéndice 2: Manual de Uso (Médico): Pág.57 ! ! ! ! ! ! ! Versión en Inglés: Página 65 English Version: Page 65 ! Página de 6 105
! Página de 7 105
1. INTRODUCCIÓN ! La tecnología debe jugar un papel importante en nuestra sociedad, y es que no debemos contemplarla sólo como una herramienta para ayudarnos a hacer lo que ya sabemos, sino que tenemos que ir mas allá y concebirla como una herramienta para hacer cosas que hasta ahora no podíamos hacer, cosas que ni siquiera imaginábamos. Sin embargo, en ocasiones el tremendo potencial que tienen las! nuevas tecnologías no está siendo aprovechado plenamente, y esto se! debe a que muchas veces se han desarrollado las herramientas, pero aún no se han identificado los problemas que queremos resolver. Son muchas las personas que en su día a día tienen que luchar con problemas, problemas personales, problemas laborales, económicos, familiares, de salud… Es en estos últimos en los que nos vamos a centrar. Y es que según un estudio realizado por [email protected] en 2011 el 13,8% de los españoles mayores de 18 años sufre diabetes, y a nivel mundial hay mas de 260 millones de personas diabéticas. Estos datos arrojan suficiente luz acerca de la magnitud del problema. ! 1.1 - HABLEMOS DE DIABETES La Diabetes Mellitus (comúnmente conocida como diabetes) es una enfermedad que afecta al metabolismo. No se trata de una enfermedad temporal, dura toda la vida. Se caracteriza por que el paciente muestra unos niveles elevados de glucosa en sangre (hiperglucemia). La American Diabetes Association clasifica la diabetes en 2 tipos: ! Página de 8 105 Español/Spanish
- Tipo 1: El páncreas del paciente no genera insulina, de tal modo que los niveles de glucosa no pueden ser reducidos adecuadamente. Estos pacientes son insulinodependientes, es decir que requieren de un aporte externo de insulina en su día a día. La forma de incorporar este aporte insulínico puede ser mediante una bomba o mediante inyecciones. - Tipo 2: El paciente genera insulina en dosis inferiores a las correctas y a esto se le debe añadir que el cuerpo muestra tolerancia a la glucosa, lo cual la convierte en menos efectiva reduciendo los niveles de glucosa en sangre. Estos pacientes no son insulinodependientes. Afortunadamente más del 90% de los diabéticos se encuentra en el segundo grupo, y decimos afortunadamente porque este tipo de diabetes es menos incapacitante que la diabetes tipo 1. El principal tratamiento para la diabetes tipo 2 consiste en lograr un peso saludable y mantener una alimentación sana, pero en algunos casos requieren tratamiento en forma de pastillas o en etapas avanzadas necesitan también aporte externo de insulina. Los diabéticos tipo 1 son por tanto los diabéticos que ven su vida afectada en mayor medida. Deben mantener un control meticuloso de sus niveles de glucemia en sangre para prevenir tanto hiperglucemias (niveles > 120mg/dl) como hipoglucemias (niveles < 40mg/dl). El control meticuloso que mencionamos consiste en mediciones de glucemia en sangre, para realizar posteriores predicciones basadas en la ingesta de comida que van a realizar, el posible deporte que vayan a practicar, el peso que tengan en ese momento, y muchos otros factores que influyan en los niveles de glucemia. En base a esta predicción deben realizar una estimación de la insulina que van a inyectarse para mantener sus niveles de glucemia en unos valores adecuados. ! 1.2 - GLUCMODEL La tarea de un diabético tipo 1 no es fácil. En la mayoría de los casos los pacientes perfeccionan sus predicciones con la práctica, pero aún con muchos años de experiencia el paciente yerra en sus Página de 9 105 Español/Spanish
El funcionamiento de la aplicación es el siguiente: los pacientes suben los datos a través de la interfaz gráfica. Los médicos pueden revisar los datos de sus pacientes mediante la misma interfaz gráfica. El modelo de glucosa analiza la información y genera las recomendaciones para el paciente. El módulo de aprendizaje está conectado con la aplicación para comunicar el progreso de los pacientes con los tests. ! ! ! ! ! ! ! ! ! ! ! ! ! Página de 16 105 Español/Spanish
3. DESARROLLANDO EN iOS 3.1 - ¿POR QUÉ iOS? La Apple App Store es sin duda alguna la tienda de aplicaciones más rentable del mercado a día de hoy. El día 2 de Julio de 2014 Apple hizo público su número de descargas acumuladas en el App Store desde su salida en 2007 durante la WWDC (World Wide Developer Conference). En estos 7 años de vida del App Store el número acumulado de aplicaciones descargadas asciende a 75.000.000.000 (setenta y cinco mil millones). Durante estos 7 años Apple ha repartido a los desarrolladores 15.000.000.000$ (quince mil millones) de dólares. Para hacer una comparativa hemos escogido a sus dos principales competidores: Android y Windows Phone. Los datos oficiales que hemos recogido son los siguientes: ! *Todos los datos corresponden al año 2013 FIGURA 2: Tabla comparativa. Datos tiendas de aplicaciones. Todos estos datos pueden encontrarse en la página web de Forbes, bajo el titular “How Much Do Average Apps Make?” ! http://www.forbes.com/sites/tristanlouis/2013/08/10/how-much-doaverage-apps-make/ Apple Google Microsoft Número de usuarios (en millones) 600 900 12 Número de Apps (en miles) 1250 800 160 Número de desarroladores (en miles) 235 150 45 Nº de descargas (en miles de millones) 50 48 65 Pago a desarrolladores (en millones de $) 5000 900 100 Página de 17 105 Español/Spanish
Basta con fijarnos en que se han descargado aproximadamente el mismo número de aplicaciones en iOS, en Android y en Windows Phone, sin embargo los ingresos de los desarrolladores se multiplican por más de 5 en Apple respecto a Android, y por más de 50 respecto a Microsoft. Con los datos obtenidos anteriormente decidimos hacer una comparativa de rentabilidad para estudiar qué tienda era más interesante para el desarrollador. ! *Todos los datos corresponden al año 2013 FIGURA 3: Tabla comparativa. Rentabilidad de tiendas de aplicaciones. ! Si prestamos atención a la última fila podremos observar que a afectos monetarios, un desarrollador de iOS obtiene 4 veces más ingresos que uno de Android y 11 veces más que uno de Windows Phone. Los datos son claros: La App Store es a día de hoy la tienda de Apps más rentable del mercado. Por tanto como ingeniero me aporta mucho el hecho de poder desarrollar aplicaciones para iOS, ya que podría llegar a monetizar alguna en el App Store. ! ! ! ! Apple Google Microsoft Media de aplicaciones por desarrollador 5 5 3 Media de descargas por app 40.000 60.000 4.062 Beneficio medio por descarga 0,10$ 0,01875$ 0,1538$ Beneficio medio por desarrollador 20.000$ 5.625$ 1.874$ Página de 18 105 Español/Spanish
3.1 - LENGUAJE: OBJETIVE-C ! Actualmente sólo se pueden desarrollar aplicaciones nativas para iOS en el lenguaje de programación Objetive-C. Para la próxima versión de iOS (iOS 8), que se espera esté disponible en Otoño de 2014, se podrá también programar en Swift. Swift fue presentado por Apple el 2 de Junio de 2014 por lo que aún no se sabe demasiado sobre este nuevo lenguaje. Objetive-C es un lenguaje de programación que apareció en 1980, y como su propio nombre indica está orientado a objetos. Fue creado por Brad Cox y en 1992 fue liberado bajo la licencia GPL. Objetive-C supone una leve capa por encima de C, por lo que es posible compilar cualquier aplicación de C con un compilador de Objetive-C, así como también es posible incluir código C directamente en nuestra aplicación en Objetive-C. Semánticamente es diferente a Java o C++ ya que el programador no hace llamadas a métodos de objetos, lo que hace es mandar mensajes a los objetos para que realicen las acciones que necesitemos. ! FIGURA 4: Ejemplo de llamadas en Java, C++ y Objetive-C ! Esta peculiaridad lo convierte en un leguaje que en un primer contacto resulta extraño. En ocasiones provoca que haya llamadas a Página de 19 105 Español/Spanish Ejemplo de llamada a un método en C++ y Java objeto->metodo (parametro); objeto.metodo (parametro); Ejemplo de envío de mensaje en Objetive-C: [objeto metodo : parametro];
funciones que ocupen varias líneas de código porque no entran en la pantalla debido a lo largas que se hacen. Este es un ejemplo de una función extremadamente sencilla que se puede encontrar dentro de esta aplicación. Su finalidad es mostrar una sencilla ventana de alerta. FIGURA 5: Ejemplo de llamada a función en varias líneas. ! La función alertStatus cuenta tan sólo con dos líneas de código, la primera construye un UIAlertView y la segunda le manda a este nuevo objeto la orden de mostrarse. Como se puede observar la llamada al constructor de UIAlertView se tiene que hacer en varias líneas por motivos de espacio y claridad. ! 3.2 - EL ENTORNO DE DESARROLLO: XCODE Apple es conocida por ser una empresa cerrada en muchos de sus aspectos. En programación no han realizado excepciones. Estas son algunas de las condiciones que se deben cumplir: 1. La única manera de programar para iOS o Mac OS en Objetive-C es usar un Mac. Existen alternativas no oficiales pero no resultan viables. Página de 20 105 Español/Spanish
2. El único entorno de desarrollo capaz de desarrollar, compilar y ejecutar aplicaciones de iOS en Xcode (por supuesto desarrollado por Apple). 3. Si deseamos probar una aplicación sobre un dispositivo como un iPhone o un iPad, debemos contratar una cuenta de desarrollador de iOS que tiene un coste de 99$/año. 4. Si deseamos publicar nuestra aplicación debemos además de contar con la cuenta de desarrollador citada en el punto anterior, pasar un estricto control de nuestra app, que garantice que esta cumple con las restricciones legales de la App Store y presenta un correcto funcionamiento. FIGURA 6: Programa de desarrollo para iOS y coste del mismo. ! Una vez tengamos lo necesario podemos comenzar a programar con Xcode. Cabe decir que Xcode es gratuita lo cual al contrario de las restricciones anteriores, esto supone una gran ventaja para el programador. Xcode fue lanzando en 2003 y está integrado con Interface Builder una herramienta gráfica para la creación de interfaces. Esto permite desarrollar ciertas partes de la aplicación de una manera sencilla y rápida. Xcode es capaz de compilar aplicaciones en C, C++, Objetive-C, Objective-C++, Java y AppleScript. Compañías externas han desarrollado soportes para Pascal, Ada y Perl. Página de 21 105 Español/Spanish
Una característica muy interesante de Xcode es que es capaz de distribuir trabajos pesados como el de construcción, entre varios ordenadores mediante la tecnología Bonjour. Xcode proporciona también un gestor de dispositivos conocido como Organizer. Mediante este gestor podemos conectar nuestro dispositivo iOS a nuestro Mac para probar las aplicaciones sobre el terminal. ! FIGURA 7: Interfaz realizada en Xcode de forma gráfica. A la derecha de la imagen se observan los elementos disponibles para su creación. Las aplicaciones en iOS cuentan con un nivel de seguridad y control muy alto, por lo que todas las aplicaciones que generemos deben ir firmadas por el desarrollador. Para ello Xcode utiliza un complejo sistema de firmas y certificados digitales. En este apartado Apple ha tratado de simplificar el proceso y ayudarnos mediante Xcode pero lo cierto es que es una tarea ardua. ! Página de 22 105 Español/Spanish
FIGURA 8: Organizer. Herramienta de gestión de dispositivos iOS para test. FIGURA 9: Ejemplo de certificado utilizado para firmar la aplicación glUCModel. Obsérvese que se indica el tipo de encriptación así como las claves pública y privada del algoritmo de cifrado. Página de 23 105 Español/Spanish
Xcode cuenta con un simulador en pantalla en el que podemos probar nuestras aplicaciones si no tenemos un terminal físico o la cuenta de desarrollador necesaria. Este simulador es muy rápido, apenas necesita 3 segundos para encenderse y aproximadamente unos dos segundos en cargar la aplicación. Además de permitirnos probar la app si no tenemos las herramientas necesarias, también ofrece una gran ventaja y es que es posible simular todos los dispositivos iOS tanto iPhone, como iPad, como iPod touch… en sus diferentes generaciones y con la versión de iOS que escojamos. He de añadir que he tenido la oportunidad de utilizar el simulador Android que ofrece Google para desarrollo, y el tiempo de encendido del simulador de Nexus 4 alcanzó los 10 minutos, se trata de una diferencia abismal con el simulador de iOS y supone un punto a favor del desarrollo en iOS. FIGURA 10: Ejemplo de uso del simulador de iPhone 4s con iOS 7. ! La aplicación está disponible en la página que la Universidad Complutense de Madrid tiene destinada a las aplicaciones móviles Página de 24 105 Español/Spanish
(http://www.ucm.es/apps). Posteriormente estará disponible en el App Store de Apple. ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! Página de 25 105 Español/Spanish
4.4.3 - SEGURIDAD DE LA BASE DE DATOS ! La base de datos SQL está protegida mediante usuario y contraseña, por lo que este aspecto no debía ser abordado. La preocupación se centra por tanto en la seguridad de las API’S desarrolladas y en la conexión realizada con las mismas. ! 4.4.4 - INTEGRIDAD DE LAS CREDENCIALES DE ACCESO ! Los datos sensibles que deben ser protegidos son sin duda los de Login. La petición de login se realiza mediante POST y la variable que contiene la contraseña viaja cifrada. Es en la propia aplicación iOS donde se realiza el cifrado. Este cifrado está realizado mediante una función de encriptado MD5, es el mismo algoritmo que utiliza glUCModel en la aplicación web, a diferencia de que el cifrado en este caso es realizado antes de realizar la petición y no después, por lo que la seguridad es aún mayor que en la propia aplicación web. ! 4.4.5 - PREVENCIÓN DE INYECCIÓN SQL ! Otra preocupación fue sin duda la posibilidad de que se inyectara código SQL en las peticiones a la API. Para prevenir esto las API’S están protegidas de modo que todas las peticiones que son recibidas se filtran tras su recepción para realizar un escapado de los caracteres especiales que no sean alfanuméricos y puedan provocar un agujero de seguridad. Tras realizar esta prevención se realizaron diversas pruebas en las que se trató de burlar la seguridad de la API cerrando consultas SQL para realizar volcados de la base de datos, inserciones o borrados. No se consiguió burlar la seguridad, esto demostró que se trataba de API’S seguras. ! Página de 32 105 Español/Spanish
4.4.6 - ALMACENAMIENTO LOCAL DE LOS DATOS Cuando el usuario no dispone de conexión a internet los datos son almacenados en el dispositivo para posteriormente insertarlos en la base de datos. Si el usuario cierra la app los datos se perderían, por lo que se planteó que los datos que no se habían podido subir fueran almacenados de forma local. iOS soporta diversos tipos de almacenamiento local. El más sencillo, ligero y rápido es NSUserDefaults. La desventaja de este sistema es que sólo permite almacenar tipos nativos de Objetive-C. Nuestra necesidad era la de almacenar objetos “insulina”, objetos “glucemia”, objetos “dieta”… por lo que a priori este método no nos servía. Se tomó la decisión de realizar una función que convertía los datos al tipo String para almacenarnos con NSUserDefaults. Al iniciarse la aplicación los datos son recuperados y convertidos de nuevo a los objetos definidos por nosotros (Glucemia, Insulina, Ejercicio… etc). FIGURA 19: Pantalla que informa al usuario de que sus datos no han sido subidos. Se almacenarán de forma local. Página de 33 105 Español/Spanish
4.5 - MANTENIBILIDAD DE LA APP ! Para que la aplicación pueda ser mantenida más adelante quizá por otro desarrollador o equipo de desarrolladores, el código ha sido debidamente comentado con aclaraciones que indican de forma clara la finalidad de cada parte de código como muestra la figura 19. FIGURA 20: Extracto de código de la aplicación donde se observa que el código contiene comentarios aclaratorios. ! El desarrollo de la interfaz se ha realizado casi en su totalidad con la herramienta gráfica, puesto que si se desarrolla con código sería de una dificultad muy elevada tratar de comprender y modificar el código. Cuando se usa la interfaz gráfica se obtienen resultados fáciles de comprender como muestra la figura 20. Página de 34 105 Español/Spanish
FIGURA 21: Captura del archivo que genera el menú inferior y sus ventanas. ! 4.6 - LA SALUD DEL USUARIO ! Ha sido incorporada una mecanismo de seguridad en la aplicación que informa al usuario si sus niveles de azúcar en sangre suponen un riesgo para su salud. Cuando se introduce una medición alta que se encuentra en valores considerados de hiperglucemia, o cuando se introduce un valor tan bajo que se encuentra en zona de hipoglucemia, la aplicación confirma este dato, y si el usuario indica que es correcto se le recomienda un plan de actuación. Los valores considerados como peligrosos han sido descritos por los médicos endocrinos involucrados en el proyecto de glUCModel, los valores hiperglucémicos deterioran la salud del paciente a largo plazo, y los valores hipoglucémicos pueden causar la pérdida del conocimiento al paciente. Las figuras 22 y 23 contienen capturas de los mensajes que son mostrados al usuario. Página de 35 105 Español/Spanish
FIGURAS 22 y 23: Mensajes de aviso en caso de Glucemia elevada. ! ! ! ! ! ! ! Página de 36 105 Español/Spanish
5. RESULTADO ! El resultado del desarrollo ha sido satisfactorio. Nos encontramos ante una aplicación que cumple los requisitos que se propusieron al inicio y durante el desarrollo. Se trata de una aplicación ligera, segura y rápida. Tras varios estudios de rendimiento, se ha podido comprobar que inicialmente ocupa unos 20MB en memoria RAM y que tras un uso intenso de aplicación esta ocupa en memoria RAM en torno a 50MB, el uso que se da del procesador nunca supera el 1% puesto que la aplicación no necesita realizar cálculos. La figura 24 muestra los datos de uso de la memoria RAM y el procesador tras un uso intenso. Se ha estudiado también el espacio que ocupa en disco la aplicación una vez es compilada. Se ha observado que la aplicación no llega a ocupar en disco 1MB. Si contamos con los datos que se almacenan de forma local, puede ocupar 1,5MB o 2MB como se observa en la figura 25. FIGURA 24: Monitor de recursos del iPhone durante la ejecución de glUCModel ! ! ! ! Página de 37 105 Español/Spanish
FIGURA 25: Captura de pantalla, espacio en disco de glUCModel. En cuanto a la interfaz los resultados son a mi juicio buenos. Los test de usabilidad realizados han demostrado que la interfaz es amigable e intuitiva. Las opiniones recabadas acerca de la experiencia de usuario son buenas. ! ! ! ! ! ! Página de 38 105 Español/Spanish
! ! ! ! ! ! ! ! ! ! FIGURA 26: Inserción de Insulinas. FIGURA 27: Historial de Insulina FIGURA 28: Historial de Glucemias. FIGURA 29: Inserción de datos de Peso ! ! ! ! ! ! ! ! ! ! ! ! Página de 39 105 Español/Spanish
FIGURA 25: Listado de Pacientes de un médico. ! ! ! ! ! ! ! ! ! Página de 40 105 Español/Spanish
6. CONCLUSIONES ! El desarrollo del proyecto ha culminado de forma satisfactoria y la colaboración con glUCModel ha sido beneficiosa para ambas partes. Por un lado glUCModel ahora cuenta con una aplicación para iOS nativa que cumple con los requisitos que requería. Por otro lado como desarrollador, he adquirido conocimientos de programación en Objetive-C lo cual le aporta un gran valor a mi curriculum y a mi potencial como autónomo. Me he enfrentado a problemas durante el desarrollo que he sabido solventar de forma correcta, prueba de ello es que la aplicación ha salido adelante y funciona correctamente. Lamentablemente el desarrollo ha estado muy condicionado por los plazos de entrega y el calendario universitario, de haber tenido disponibilidad total de tiempo y calendario, la aplicación gozaría de más funcionalidades. ! ! ! ! ! ! ! ! Página de 41 105 Español/Spanish
PASO 4: NAVEGACIÓN POR EL MENÚ INFERIOR ! Una vez hayamos hecho el proceso de Log In podremos ver esta pantalla: ! Esta es la pantalla donde se introducen los nuevos datos de glucemias. En la parte inferior de la pantalla podemos observar el resto de pestañas del menú. Página de 48 105 Español/Spanish
Podemos acceder a Glucemia, Insulina, Dieta, Ejercicio y más. Dentro de más encontraremos Peso y Salir. En las siguientes imágenes se muestran las pantallas disponibles en orden de izquierda a derecha. ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! Página de 49 105 Español/Spanish
Si pulsamos en más veremos esta pantalla que nos muestra otras dos opciones: Peso y Salir. Desde la pantalla de peso podremos añadir nuestro peso corporal para realizar un seguimiento de este Si pulsamos en salir, se cierra la sesión iniciada en el paso 2 de tal modo que se pasa al paso 1 de nuevo. A continuación se muestran unas capturas de la interfaz de subida de datos de peso y de la interfaz para cerrar sesión o Log Out. ! ! ! ! ! ! ! ! ! ! ! ! ! Página de 50 105 Español/Spanish
PASO 5: SUBIR UN DATO ! Las interfaces para la subida de datos son similares unas de otras, esto facilita adaptarse a la app de forma rápida. Para subir un dato debemos seleccionar la opción del menú que nos interese subir. Tras esto debemos seleccionar la fecha y la hora, para lo cual disponemos de selectores que sólo nos ofrecerán sólo fechas y horas válidas. Usaremos la interfaz de subida de datos de insulina como ejemplo para las instrucciones. Debemos también indicar en qué momento se ha realizado esta medición, para lo cual disponemos de un selector que sólo nos ofrecerás las opciones de momentos disponibles. En este caso al tratarse de insulina también debemos indicar la cantidad y el tipo de insulina administrados. ! ! ! ! ! ! ! ! ! ! ! ! Página de 51 105 Español/Spanish
! ! ! ! ! ! ! ! ! ! ! Para facilitar la selección de la fecha y la hora, se ha habilitado un botón con forma de flecha girando que al pulsar hace que la fecha y la hora sean las de ese momento. En la imagen se muestra el botón pulsado. ! ! ! ! ! Página de 52 105 Español/Spanish
Durante la subida del dato el botón de subir se sustituye por una ruleta de proceso que nos inicia que en estos momentos la app está subiendo un dato. Una vez terminada la subida el botón vuelve a estar disponible. Al terminar de subir el dato también se muestra al usuario un mensaje de éxito. ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! Página de 53 105 Español/Spanish
! SUBIR UN DATO SIN CONEXIÓN A INTERNET ! Si la subida de los datos fallase la aplicación se lo notificaría al usuario y almacenaría los datos de forma local en el dispositivo para posteriormente subirlos cuando sea posible. El usuario sabe que hay un dato almacenado por que se muestra un globo en el menú inferior que indica el número de datos pendientes de ser subidos. ! ! ! Página de 54 105 Español/Spanish
LA SALUD DEL PACIENTE: SUBIR UN DATO PELIGROSO ! Si el usuario sube un dato cuyos niveles suponen un riesgo para s salud, la aplicación le informará debidamente. Esto sucede por ejemplo con las glucemias elevadas o las glucemias excesivamente bajas. Las siguientes capturas muestran los mensajes que la aplicación genera. ! ! ! ! ! Página de 55 105 Español/Spanish
PASO 5: CONSULTAR EL HISTORIAL DE DATOS ! Para mostrar su historial, un paciente debe acceder a la pestaña del menú que corresponde a los datos que quiera consultar. Por ejemplo si desea mostrar su historial de insulinas deberá pulsar en insulinas. Una vez se muestre la pantalla de subida de datos, deberá pulsar en el botón que se encuentra en la parte inferior derecha que dice “Hist.” (Historial). El usuario podrá ver una lista con sus datos. En caso de querer regresar, el usuario encontrará un botón que dice “Atrás” en la parte superior izquierda de la pantalla. ! Página de 56 105 Español/Spanish
APÉNDICE: MANUAL DE USO (MÉDICO) ! PASO 1: ABRIR LA APLICACIÓN. ! Debemos localizar el icono de la aplicación en nuestro dispositivo. Esta tiene un logo azul con la frase “Bienvenido a glUCModel”. Debemos pulsar sobre este icono para abrirla Página de 57 105 Español/Spanish
! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! Página de 64 105 Español/Spanish
BY: FRANCISCO JAVIER LINDE BLÁZQUEZ ! GRADO EN INGENIERÍA DEL SOFTWARE FACULTAD DE INFORMÁTICA DEPARTAMENTO DE ARQUITECTURA DE COMPUTADORES Y AUTOMÁTICA UNIVERSIDAD COMPLUTENSE DE MADRID ! ! ! ! ! ! ! ! FINAL YEAR PROJECT IN SOFTWARE ENGINEERING ! Madrid, June 18, 2014 Director: José Ignacio Hidalgo Colaborator: J. Manuel Colmenar Page of 65 105 English/Inglés glUCModel for iOS
AUTHORIZATION FOR DISTRIBUTION AND USE ! ! This document is distributed under Creative Commons BY-NC-SA 3.0. ! This license allows: Share - copy and redistribute the material in any media or format Adapt - transform and create from this material ! Under the following conditions: Attribution - You must attribute the authorship of the document. You must provide a link to this original document and whether changes have been made on it. Noncommercial - You can not use the material for commercial purposes. Share Alike - If transform, or build from the material, you must distribute the contributions under the same license as the original. ! ! ! ! ! Page of 66 105 English/Inglés
! ! ! ! ! ! ! ! ! ! ! ! ! ! ! Dedicated to: Gerardo Fernández Moreno. ! He is an example of hard work and perseverance. He has been a motivation for me. ! ! ! ! Page of 67 105 English/Inglés
ACKNOWLEDGEMENTS ! ! My sincere thanks to my project manager José Ignacio Hidalgo for all time spent, for his interest and for his patience and kindness during project development. Thanks to José Manuel Colmenar for his collaboration in the project, has brought light on those technical issues that required consultation. Thanks to my partner Abdelkhalek El Mansouri for working in those common tasks of the project and for providing the help he has been able in the project. ! ! ! ! ! ! ! ! ! ! ! ! ! Page of 68 105 English/Inglés
INDEX ! 1. Introduction: Page 71 2. What is glUCModel?: Page 77 3. Developing on iOS: Page 79 4. Implementation: Page 87 5. Result: Page 98 6. Conclusions: Page 102 7. Future of application: Possible improvements: Page 103 8. Bibliography: Page 104 ! ! ! ! ! ! ! ! ! ! ! User Manual can be found in spanish at page 45. ! Page of 69 105 English/Inglés
1. INTRODUCTION ! Technology should play an important role in our society, and we must not only contemplate it as a tool to help us do what we already know, but we must go further and think of it as a tool to make things so far could not do things even imagined. However, sometimes the tremendous potential of new technologies ! not being fully exploited, and this because many times the tools have been developed but are not yet identified the problems we want to solve. Many people in their daily lives have to struggle with personal problems, work problems, financial, family, health ... It's in the last one in which we will focus. And according to a study by [email protected] in 2011 13.8% of Spaniards aged over 18 have diabetes, and worldwide there are over 260 million people with diabetes. These data shows the magnitude of the problem. ! 1.1 - LET'S TALK ABOUT DIABETES Diabetes Mellitus (commonly known as diabetes) is a disease that affects metabolism. This is not a temporary illness, lifelong. Characterized by that the patient exhibits high levels of blood glucose (hyperglycemia). The American Diabetes Association Diabetes classified into 2 types: - Type 1: The patient's pancreas produces insulin, so that blood glucose levels can not be adequately reduced. These patients are insulin dependents, that mean that they require an external supply of insulin in Page of 70 105 English/Inglés
their daily lives. How to incorporate this contribution may be insulin by a pump or by injections. - Type 2: The patient produces insulin to lower right and also the body shows glucose tolerance dose, making it less effective in reducing blood glucose levels. These patients are not insulin dependents. Fortunately over 90% of diabetics is in the second group, and say fortunately because this type of diabetes is less disabling than type 1 diabetes. The main treatment for type 2 diabetes is to achieve a healthy weight and maintain power healthy, but in some cases require treatment in pill form or in advanced stages also need external insulin intake. Type 1 diabetics are both diabetics who see their lives affected disproportionately. Must maintain a monitoring of your blood glucose levels to prevent both hyperglycemia (levels> 120mg/dl) and hypoglycemia (levels <40mg/dL). The careful control mentioned is blood glucose measurements to make predictions based on subsequent food intake, the sport predicted they are going to do, the weight they have at the moment, and many other factors that influence in blood glucose levels. Based on this prediction should make an estimate of insulin to be injected to keep their blood glucose levels appropriate values. ! 1.2 - GLUCMODEL The task of a type 1 diabetic is not easy. In most cases patients refine their predictions with practice, but even with many years of experience the patient error their estimates. It is in this daily task that glUCModel wants to play a big role. The idea behind glUCModel is to be able to predict the patient's blood levels based on current parameters of the subject as are the next level of sugar or carbohydrate intake to advise a certain amount of insulin. To calculate the future sugar levels glUCModel is developing evolutionary grammars based genetic programming. This type of definition allows greater freedom in defining the mathematical Page of 71 105 English/Inglés
expression of the solution, since it does not have restrictions such as can be found using linear equations. The project is several years developed through the collaboration of the Universidad Complutense de Madrid, University Hospital Príncipe de Asturias (Alcalá de Henares, Spain) and el hospital Virgen de la Salud (Toledo, Spain). The professionals involved in the project are: J. Ignacio Hidalgo, José L. Risco-Martin, Juan Lanchares y Oscar Garnica del departamento de Arquitectura y Autómatas de la Universidad Complutense de Madrid. •J. Manuel Colmenar y Alfredo Cuesta-Infante from C.E.S. Felipe II, Universidad Complutense de Madrid. •Esther Maqueda from departamento de nutrición y endocrinología del Hospital Virgen de la Salud (Toledo, España) •Marta Botella y José Antonio Rubio from departamento de nutrición y endocrinología del hospital Universitario Príncipe de Asturias (Alcalá de Henares, España). ! 1.3 - THE PROJECT: THE MOBILE APPLICATION ! One of the main needs of glUCModel is collecting data, without it they could not find the formula for estimation of glucose, on the other hand also could apply this formula to inform the patient of insulin be administered. To meet this need a web application to enter data and access was made, but the user needs to enter data at all times and no doubt that the user does not have a computer 24 hours a day. It is possible to record the information on a notepad to enter them later but it is a convenient solution, so we chose the best solution for the patient: Create a mobile application. No one leaves his mobile phone, the data are revealing: In Spain there are 26 million smartphones with internet access and 53.8% of Spanish mobile terminal navigate using on a daily basis. These data Page of 72 105 English/Inglés
were collected and published by the Telefónica Foundation in early 2014. In 2013 they were offered two draft final project for the development of glUCModel mobile phones: A version for Android and iPhone version in order to provide users of Glucmodel a simple, accessible and friendly way for the incorporation of information a database. I chose iPhone because I think it's a platform with great potential. There are many companies that need developers for iOS on the other hand, the App Store is undoubtedly the most profitable opponent or selling platform applications therefore programming knowledge to me as a freelance iOS developer opens the possibility to create and monetize my own mobile applications. The iPhone application developed allows the user to enter data on blood glucose, their insulin injections, your meals, your weight and physical activity. The data collected is sent directly to the database which will store glUCModel safely. All data are also accessible from the mobile application for the user to visualize them. This method to add data to the database is a significant improvement in usability. The user can now use an appropriate interface to the screen size of his Smartphone, and it adds the possibility to use offline. On the Web logically if we lose internet access we can not store any data, but in the iPhone application, we can add data to be stored locally until we can make the upload. The iPhone does not store any of the data entered by the patient unless it is not possible to store them on the server, in which case they remain in the iPhone until they can be uploaded. The application does not store any personal data of the patient, so that although the data temporarily stored on the iPhone would be compromised, it would be impossible to associate them with an individual, since transactions are conducted using the user ID assigned by glUCModel. ! ! ! Page of 73 105 English/Inglés
3.1 - THE LENGUAGE: OBJETIVE-C ! Currently you can only develop native applications for iOS in the programming language Objective-C. For the next version of iOS (iOS 8), which is expected to be available in Fall 2014, will also be programmed in Swift. Swift was introduced by Apple on June 2, 2014 so we still do not know much about this new language. Objective-C is a programming language that appeared in 1980, and as its name suggests is object oriented. It was created by Brad Cox in 1992 and was released under the GPL license. Objective-C is a thin layer above C, so it is possible to compile any C application with Objective-C compiler, and is also possible to include C code directly into your application in Objective-C. Is semantically different from Java or C + + since the programmer does not call methods on objects, what he does is send messages to objects to perform the actions we need. ! Figure 4: Example of calling functions in Java, C + + and Objective-C ! This peculiarity makes it a language that at first contact is strange. Sometimes there are causes function calls that occupy several lines of code that do not enter the screen due to how long they are. This is an example of an extremely simple function that can be found within this application. Its purpose is to show a simple alert window. Page of 80 105 English/Inglés Example of calling a method in C++ and Java object->method (parameter); object.method (parameter); Example of message sending in Objetive-C: [object method : parameter];
Figure 5: Example of function call on several lines. ! The alertStatus function has only two lines of code, builds an UIAlertView the first and the second sends this new object load order. As you can see the constructor call UIAlertView has to be done on multiple lines for reasons of space and clarity. ! 3.2 - THE DEVELOPMENT ENVIRONMENT: XCODE Apple is known for being a closed in many aspects of business. In programming have been no exceptions. These are some of the conditions that must be met: 1. The only way to program for iOS or Mac OS in Objective-C using a Mac There is no official alternatives but not feasible. 2. The only development environment can develop, compile and run iOS apps in Xcode (course developed by Apple). 3. If we want to test an application on a device like an iPhone or an iPad, we hire an iOS developer account which costs $ 99 / year. 4. If we want to publish our application in addition to the developer account mentioned in the previous point, go strictly control our app, Page of 81 105 English/Inglés
to ensure that it meets the legal restrictions of the App Store and has proper operation. FIGURE 6: Program development for iOS and cost. ! Once we have what we need to start programming with Xcode. We can say that Xcode which is free unlike the restrictions above, this is a great advantage for the programmer. Xcode was launched in 2003 and built with Interface Builder is a graphical tool for creating interfaces. This allows for certain parts of the application in a simple and fast way. Xcode can compile applications in C, C + +, Objective-C, Objective-C + +, Java and AppleScript. External companies have developed supports Pascal, Ada and Perl. An interesting feature is that Xcode is able to distribute heavy work such as construction, among multiple computers using Bonjour technology. Xcode also provides a device manager known as Organizer. Using this operator we can connect our iOS device to your Mac to test applications on the terminal. ! ! ! ! Page of 82 105 English/Inglés
FIGURE 7: Interface made in Xcode with graphical tool. To the right of the picture elements available for creation could be observed. FIGURE 8: Organizer. Management tool for iOS devices test. ! ! Page of 83 105 English/Inglés
Figure 9: Example of certificate used to sign the application glUCModel. Note that the type of encryption as well as public and private key encryption algorithm is indicated. ! IOS applications have a level of security and control too high, so we generate all applications must be signed by the developer. Xcode uses a complex system of digital signatures and certificates. In this section, Apple has tried to simplify the process and help us by Xcode but the truth is that it is an arduous task. Xcode simulator has a screen where we can test our application if we have a physical terminal or developer account required. This simulator is very fast, just need 3 seconds to turn on and about two seconds to load the application. Besides allowing us to test the app if you do not have the necessary tools, it also offers a great advantage in that it is possible to simulate all iOS devices so iPhone, such as iPad, iPod touch ... as in different generations and with the release of iOS we choose . I would add that I have had the opportunity to use the Android simulator that Google provides for development, and the ignition timing Page of 84 105 English/Inglés
simulator Nexus 4 reached 10 minutes is a huge difference with the iOS Simulator and is a point for development in iOS. Figure 10: Example of using the simulator iPhone 4s with iOS 7. ! The application is available in the page that the Universidad Complutense de Madrid is intended for mobile applications (http:// www.ucm.es/apps). Later it will be available in the Apple App Store. ! ! ! ! ! ! ! Page of 85 105 English/Inglés
4. IMPLEMENTATION 4.1 - DEVELOPMENT METHODOLOGY ! I have followed a development SCRUM type, since they have made partial deliveries verification meetings with the project manager. The vast majority of the requirements are defined early in development meetings, later during development and verifications have been adapting and adding requirements to achieve the desired objective. Throughout the iterations progress the project has made correctly and improved with each. ! 4.2 - CODE ORGANIZATION ! The code has been distributed in packs according to their functionality so that we find the following groups or packages: 1. Doctors: Contains classes for login interfaces in medical, management of patients associated with the physician, medical class, medical logout interface, such interfaces drivers ... etc 2. Username: Contains classes for login user interfaces, class user interface user logout, the drivers of these interfaces, the class that manages the data upload interfaces ... etc 3. Glucose: Contains interfaces and drivers needed for rising glycemia data, and data shown by history. Contains classes that represent glucose and store the data for the same (blood sugar level, date and time .. etc). 4. Weight: Contains interfaces and drivers needed for uploading data and patient weight data shown by history. Contains classes that represent a weight on a certain date and store its data (date, observations and weight in kg). Page of 86 105 English/Inglés
5. Insulin: Contains interfaces and drivers required for uploading data from insulin administration, and data shown by history. Contains classes that represent an event of insulin and store this data (amount of insulin, insulin type, date and time .. etc). 6. Diet: Contains interfaces and drivers needed for data storage diets. Contains classes that represent the previous intakes by history. Diet Contains class that stores data intake (servings of carbohydrates, date and time, type of food, comments .. etc). 7. Exercise: This package stores the classes responsible for displaying interfaces for uploading workout data and history of the exercises. Contains the class that represents and stores a year and the data associated with this (level of physical demand, date, time and observations). 8. Images: In this pack you will find the images used in interfaces, mostly icons. 9. Auxiliary Classes: Stores classes that are used for various interfaces, such as ViewHelper, which is used to draw a line with gradient color; or CircleLineButton which is also used by several interfaces to draw a circular button; or JSONHelper that is used to access the database SQL parsing JSON data format. ! ! ! Page of 87 105 English/Inglés
FIGURES 11 and 12: Examples of packages and classes viewed the project with Xcode. ! 4.3 -INTERFACE DESIGN ! The interface design was not included in the requirements, but are included as part of the development work. I chose to make the easiest way to make it intuitive user interface. Also for this purpose standard iOS design showing lower navigation menus that are present in native applications like iTunes and App Store from the first version of iOS is followed. ! ! Page of 88 105 English/Inglés
FIGURES 13 and 14: Comparison of Apple App Store application and glUCModel. You can see the same design on the bottom menu. ! It also has sought to make a modern design geared to the latest version of iOS (iOS 7). This can be seen in details like the rounded uploading data that mimics the design of the buttons that were introduced with the iOS button 7. The bottoms of the screens are broken colors were carefully chosen, after passing through several selection processes relying on outside opinions of users who tested the application. Several of the designs presented tones causing even feeling stress. The colors were replaced by pastel hues ranges, less aggressive. The result is an interface that is gentle to the eye. ! Page of 89 105 English/Inglés
FIGURES 22 and 23: warning messages in case of high glycemia. ! ! ! ! ! ! ! ! Page of 96 105 English/Inglés
5. RESULTADO ! The result has been satisfactory development. We are faced with an application that meets the requirements set out at the beginning and during development. It is a lightweight, secure and fast application. After several studies of performance, it has been found that initially occupies about 20MB in RAM and after intense use of this application in RAM occupies around 50MB, the use to which the processor never exceeds 1% since the application does not need to perform calculations. Figure 24 shows the use of data RAM and the processor after intense use. He has also studied the disk space occupied by the application once it is compiled. It has been observed that the application fails to occupy disk 1MB. If we have the data that is stored locally, you can occupy 1.5MB or 2MB as shown in Figure 25. Figure 24: Resource Monitor iPhone while running glUCModel ! ! ! ! Page of 97 105 English/Inglés
! Figure 25: Screenshot, glUCModel disk space. Regarding the interface results are my good. Usability tests have shown that the interface is friendly and intuitive. These opinions about the user experience is good. ! ! ! ! ! Page of 98 105 English/Inglés
! ! ! ! ! ! ! ! ! ! ! Figure 26: Inserting insulins. Figure 27: History of Insulin Figure 28: History of hyperglycemia. Figure 29: Inserting data of Weight. ! ! ! ! ! ! ! ! ! ! ! Page of 99 105 English/Inglés
Figure 30: Patients of a doctor. ! ! ! ! ! ! ! ! ! Page of 100 105 English/Inglés
6. CONCLUSIONS ! The development of the project has successfully completed and collaboration with glUCModel has been beneficial for both parties. On one side glUCModel now has a native iOS application that meets the requirements needed. Furthermore as a developer, I have acquired knowledge of programming in Objective-C which brings great value to my resume and my potential as autonomous. I have faced problems during development that have learned to solve correctly, the proof is that the application has gone ahead and working properly. Unfortunately the development has been largely influenced by deadlines and the university calendar, having had full time availability and scheduling, implementation would enjoy more features. ! ! ! ! ! ! ! ! ! Page of 101 105 English/Inglés
7. FUTURO DE LA APLICACIÓN ! The application has great potential since the development has been carried out by only one person. By providing more human resources could include more functionality to the application. Detail a list of possible improvements: • Add other languages. • Glucose prediction system based on the prediction algorithm that is developing. • Recommendation system insulin dose based on the prediction algorithm that is developing. • Direct communication with doctor-patient by app. • Periodically checking the internet for uploading the outstanding data automatically. • Improved specific design of the interface for different terminals (iPhone 4, iPhone 5, iPad, iPad retina, iPad mini ... etc) • Code optimization for higher speed. ! ! ! ! ! ! ! Page of 102 105 English/Inglés
8. REFERENCES ! 1 - J.I. Hidalgo, et al., Modeling glycemia in humans by means of Grammatical Evolution, Appl. Soft Comput. J. (2013), http://dx.doi.org/ 10.1016/j.asoc.2013.11.006 2 - Standford University Online Course: Developing iOS 7 Apps for iPhone and iPad, http://online.stanford.edu/course/developing-ios7apps-fall-2013 3 - J.I. Hidalgo, et al. glUCModel: A monitoring and modeling system for chronic diseases applied to diabetes. J Biomed Inform (2014), http:// dx.doi.org/10.1016/j.jbi.2013.12.015 4 - A. American-Diabetes-Association. Standards of medical care in diabetes 2010. Diabetes Care, 33(S1):11–61, 2010. 5 - Apple iOS Developer Library: Programming with Objective-C, https://developer.apple.com/library/ios/documentation/Cocoa/ Conceptual/ProgrammingWithObjectiveC/ ProgrammingWithObjectiveC.pdf 6 - Apple iOS Developer Library: iOS 7 Design Resources, iOS Human Interface Guidelines, https://developer.apple.com/library/ios/ documentation/UserExperience/Conceptual/MobileHIG/MobileHIG.pdf 7 - Hidalgo JI et al. glUCModel: Clarke and Parkes Error Grid Analysis of Diabetic Glucose Models obtained with Evolutionary Computation 8 - iOS Developer Library: iOS App Programming Guide, https:// developer.apple.com/library/ios/documentation/iPhone/Conceptual/ iPhoneOSProgrammingGuide/iPhoneAppProgrammingGuide.pdf 9 - Zach Waugh, a Mac & iOS developer: How to use JSON in Cocoa/ Objective-C, http://zachwaugh.me/posts/how-to-use-json-incocoaobjective-c/ 10 - Andrey Prikaznov: Create Your Own XML/JSON/HTML API with PHP, http://css.dzone.com/articles/create-your-own-xmljsonhtml Page of 103 105 English/Inglés
11 - Manual de PHP, Seguridad Seguridad de Bases de Datos: Inyección de SQL, http://www.php.net//manual/es/security.database.sqlinjection.php 12 - iOS Developer Tips: Create MD5 Hash from NSString, NSData or a File, http://iosdevelopertips.com/core-services/create-md5-hash-fromnsstring-nsdata-or-file.html 13 - Ray Wenderlich, How To Write A Simple PHP/MySQL Web Service for an iOS App, http://www.raywenderlich.com/2941/how-to-write-asimple-phpmysql-web-service-for-an-ios-app 14 - Tristan Louis, How Much Do Average Apps Make?, http:// www.forbes.com/sites/tristanlouis/2013/08/10/how-much-do-averageapps-make/ ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! Page of 104 105 English/Inglés
! ! ! ! ! ! ! Page of 105 105 English/Inglés