martes, 7 de julio de 2015

Seguridad en el backend: User Roles

Muchachos, estoy atacando el asunto de seguridad en la Rest API para dejar todo bien implementado antes de empezar a agregar tareas críticas. Algo importante que tienen que saber es que se creó la famosa entidad UserRole (rol del usuario), identificado por un id y una descripción. Por ahora, tenemos creados 5 roles definidos:
1- Administrator
2- Doctor
3- Patient
4- Researcher
5- Insurance_employee (empleado de las obras sociales)

Para que tengan en cuenta, cuando manden sus json de regietro, en el sector usuario tienen que agregar lo siguiente en el objeto user (tanto de médico como de paciente):

"user":
{
"id":10,
"username":"frantaman",
"password":"mimi",
"state":
{"id":1,"description":"Pending"},
"role":
{"id:2, "description":"Doctor"}
}

En el caso que sea un paciente será 2 Patient, y así sucesivamente.

Prometo no joderlos mucho tiempo más para que cambien sus implementaciones jaja. pero es mejor atacar esto desde ahora.

Saludos,
Franqui

domingo, 5 de julio de 2015

lunes, 22 de junio de 2015

Definición de Rest a la fecha

Muchachos estos son los servicios que está ofreciendo la rest api de momento:

1) Verificar si un username ya existe:
http://bismara.elasticbeanstalk.com/rest/users/verifyUsername?username=<username>

Devuelve {'state':'ok'} si existe, {'state':'denied'} en caso contrario.

2) Verificar si un email ya fue usado por algún médico:
http://bismara.elasticbeanstalk.com/rest/doctors/verifyEmail?email=<email>

Devuelve {'state':'ok'} si ya está usado, {'state':'denied'} en caso contrario.

3) Obtener un doctor por username y password:
http://bismara.elasticbeanstalk.com/rest/doctors/getDoctor?username=<username>&password=<password>

Devuelve un json de doctor. Un ejemplo es el siguiente:

{"id":10,"firstName":"Francisco","lastName":"Tamantini","phone":"3515478965","email":"franco.salo@gmail.com","registrationNumber":54876,"user":{"id":10,"username":"frantaman","password":"mimi","state":{"id":1,"description":"Pending"}}}

(Para hacer el login hay que usar esta y despues verificar que el id de state sea 2 (Registered)).

4) Para registrar un nuevo doctor (POST):
http://bismara.elasticbeanstalk.com/rest/doctors/new

La data tiene que ser un JSON como el ejemplo de arriba. Sin los id de user y de doctor, así los crea. En caso que se quiera actualizar se mandan los id. Es el mismo servicio para cargar/actualizar.

5) Para confirmar una cuenta y pasar a estado "Registered":
http://bismara.elasticbeanstalk.com/rest/doctors/confirm?id=<Id del usuario del médico>&token=<token asociado>

También cree dos mails: no.reply.bismara@gmail.com y bismara.staff@gmail.com, los dos con el password de siempre.

Está todo pusheado y javadoqueado.

Saludos,
Franco

Seguridad con Jersey

En esta página se puede ver como implementar seguridad y Oauth con Jersey para acceder a la Rest API.

https://jersey.java.net/documentation/latest/security.html#d0e12342

Saludos de su ex Scrum Master

miércoles, 3 de junio de 2015

Nuevo entorno de despliegue

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_Java.html

Allí en ese link pueden ver com nos vamos a manejar de ahora en más con el despliegue. Peguenle una mirada. De todos modos, hoy en la planning les cuento un poco más de qué se trata. Pero nos va a solucionar miles de problemas.

Saludos de su buen Scrum Master

miércoles, 20 de mayo de 2015

Bluetooth PoC

One of the tasks for the past sprint was the creation of an Android application as a proof of concept, testing and learning all the BT related concepts and features that will be available in the Bismara App, that will allow the communication between the doctor and the insulin pump. Undestanding them to implement a bluetooth communication module, maintain it and improve it.

The result of this task is an app that is able to:
- Enable and disable bluetooth from the very same app
- List the paired devices to the phone.
- Scan for new devices in the device enviroment, identificate them showing the  MAC of the enabled devices around, and pair to any of them from the very same app.

Below you'll find screenshots from the app. And you can find it in the PoC-MAC folder in the github repo.





miércoles, 22 de abril de 2015

Minutas Meeting Profe

21/04/2015


  • Estudio Inicial para la semana que viene. (Nicolas)
  • Cronograma antes del Spring1 (estimado para 6/5)
  • Definición Spring 0 antes del Spring1 (estimado para 6/5)
  • No pide Casos de Uso.
  • Diagrama de despliegue.
  • Realizar los diagramas necesarios (pdf sólo sirve para orientar y sugerir). "Todo lo que se cambia es con criterio".
  • En Agosto se planifica para ver si se llega para entregar en Diciembre.
  • Destacar Patrones.
  • Averiguar el tema de "Privacidad de los datos del paciente"

jueves, 16 de abril de 2015

API REST - Java

API REST - Java:

Para la gestión y construcción del proyecto elegimos Maven.

Se decide utilizar Spring el cual tiene un conjunto de utilidades para integrar las dependencias más utilizadas en Java.
En nuestro caso, la usaremos para Jersey (rest) y JPA/Hibernate (persistencia).

Decimos utilizar el servicio de alojamiento web que presta Google de forma gratuita llamado "Google App Engine".

Repositorio: GitHub.






*Web Container es la nube de Google App Engine.



 Maven project structure

  • /src/main/java folder, that contains source files for the dynamic content of the application (contenido dinámico).
  • /src/test/java folder contains all source files for unit tests (pruebas).
  • /src/main/resources folder contains configurations files (configuración).
  • /target folder contains the compiled and packaged deliverables (entregables).
  • the pom.xml is the project object model (POM) file. The single file that contains all project related configuration (configuración de proyectos relacionados).
Se decide utilizar la linea de comando de windows para el setup del entorno tienendo como referencia los siguientes tutoriales:

PASO A PASO

  1. clone GitHub a workspace/Smartpump desde Eclipse.
  2. voy a linea de comando y me ubico en workspace/Smartpump 
  3. git checkout -b feature_gaeSkeletonArchetype
  4.  echo "Branch for appengine skeleton archetype" > branch.txt
  5.  git add .
  6. git commit -m "Branch message added."
  7. git push -u origin feature_gaeSkeletonArchetype
  8. mvn archetype:generate  -DarchetypeGroupId=com.google.appengine.archetypes  -DarchetypeArtifactId=appengine-skeleton-archetype  -DarchetypeVersion=1.8.7 -Dappengine-version=1.9.19  -DgroupId=com.smartpump.Bismara  -DartifactId=Bismara -Dversion=0.1  -Dpackage=com.smartpump
  9. me ubico en Bismara y ejecuto "mvn clean install"
  10. mvn -pl Bismara-ear appengine:devserver
  11. mvn appengine:devserver
  12. Dev App Server running
  13. mvn -pl Bismara-ear appengine:update (para subirla a la nube de google y que te de el link)
  14. quedo finalmente http://smartpump-dev.appspot.com/context/bismara/test
  15. Se integra Jersey siguiendo el siguiente tutorial:

  16. Clean and Build y luego vuelvo a correr la app (mvn appengine:devserver) pero ahora con Jersey.
REST API responde correctamente!





Jersey + Spring

Jersey (para los servicios web RESTful) y Spring (para inyección de dependencias) logran una combinación de dos tecnologías potentes para un desarrollo de servicios web mas amigable.
Tutoriales:

Persistencia (JPA)

Java Persistence API, más conocida por sus siglas JPA, es la API de persistencia desarrollada para la plataformaJava EE.
El objetivo que persigue el diseño de esta API es no perder las ventajas de la orientación a objetos al interactuar con una base de datos (siguiendo el patrón de mapeo objeto-relacional), como sí pasaba con EJB2, y permitir usar objetos regulares (conocidos como POJOs).

Ejemplo:
http://www.codingpedia.org/ama/java-persistence-example-with-spring-jpa2-and-hibernate/




















miércoles, 15 de abril de 2015

Frameworks JAVA para API REST

Bueno, ya que consideramos no dejar de lado ningún lenguaje, investigando sobre Java subo información sobre Jersey. Hay mucha documentación.
En el laburo usamos Spring (para persistencia) y se podrían usar ambos.

JERSEY + SPRING : 
http://www.mkyong.com/webservices/jax-rs/jersey-spring-integration-example/

Spring Framework -> http://projects.spring.io/spring-framework/

Jersey -> https://jersey.java.net/index.html

Spring:
http://spring.io/

Documentación Spring:
http://spring.io/docs

Multi-threaded con Spring:

http://docs.spring.io/spring-batch/trunk/reference/html/scalability.html

ORM con Spring: 
http://docs.spring.io/spring/docs/current/spring-framework-reference/html/orm.html


Introducción a Jersey:

Documentación Jersey:

Paso a paso Jersey:

Ejemplo Jersey:

Buenos resumenes Jersey:


Algunas Características Jersey:
  • Código abierto.
  • Provides support for JAX-RS APIs and serves as a JAX-RS (JSR 311 & JSR 339).
  • Última versión estable: 2.17.
  • Jersey resources are plain java object (POJO) with annotation @Path.
  • Ofrece una biblioteca cliente.

miércoles, 8 de abril de 2015

Frameworks PHP para API REST

  • Kohana http://kohanaframework.org (parece que esta bueno, tiene un modulo orm, paso el link de las especificaciones del release 3.3 http://kohanaframework.org/3.3/guide/)


Links con algunas explicaciones acerca de las caracteristicas de algunos: 

http://www.programmableweb.com/news/short-list-restful-api-frameworks-php/2011/09/23

http://www.gajotres.net/best-available-php-restful-micro-frameworks/


http://davss.com/tech/php-rest-api-frameworks/




Buscando sobre los frameworks encontre varias veces informacion sobre Propel, es una 

libreria para php de ORM, podriamos analizarla un poco para ver.

Propel web: http://propelorm.org/

Minutas Meeting PO

- La insulina es la hormona que facilita que las celulas absorban los azucares e hidratos (?) y así los metabolicen en energía. Las bombas suelen programarse para inyectar mayor cantidad de insulina en los momentos en que la ingesta de los mismos resulta mayor (Desayuno, Almuerzo, Merienda, Cena)

- Infusores continuos de insulina. Desarrolladores en Córdoba: Roche y Medtronics. (Agregar info desde grabaciones)

- Tengo anotado algo que hace cada 5 minutos, una alarma y algo que hace 2 veces al día. Instanciar esto con grabaciones.

- En desarrollo: bomba doble con bolos de insulina y glucagon, regula hipo e hiperglucemia. Desarrollo en iPhone, que via bluetooth recibe datos del glucometro y mediante algoritmos recalcula la inyeccion de la hormona que corresponda.

- http://www.nejm.org/doi/full/10.1056/NEJMoa1314474 Bionic Pancreas

- Holter de glucosa. Producto actual. $2K. Algo de 7 dias conintervalos de 5 minutos. Era un trial?

- Lifelog. Tracker app de sony para la vida cotidiana con estadisticas.

- Diabetes & Therapeutics Technologies. Congreso en Febrero en Paris. Abstracts del congreso: http://online.liebertpub.com/doi/pdf/10.1089/dia.2015.1525

- 5 de Julio de 2015 Taller especial de tecnologias y bombas en Congreso de Diabetes en el Sheraton Hotel Córdoba

Favor de ampliar información o publicar la grabación!

martes, 7 de abril de 2015

Entorno local.

Entorno local:


  • Eclipse luna (JAVA EE). 
  • Java 7 u 8 (jdk).
  • SDK de Android
  • Plugin eclipse-android.
  • SublimeText 2.
  • PDT plugin Eclipse (Para PHP).
  • Si no viene GIT con eclipse, plugin de git.
  • WAMP
  • Filezilla
  • IDE de Arduino.
  • Postman (extensión de Chrome)

Dirección de Lucas: Valladolid 1819. Maipú 1a sección.

lunes, 6 de abril de 2015

Rest API con PHP


Ahí fueron algunos links de lo que estuve investigando. PHP nos puede dar una mano también para lograr versatilidad y rapidez. Hay frameworks robustos que podríamos explotar.

Para seguir pensando...




Abstract tesis

Proyecto de tesis: Bismara


“Muchas veces, nosotros desconocemos si el paciente cumplió o no con el tratamiento. Salvo que hagamos algún seguimiento telefónico o por software. Puede suceder que el paciente no regrese hasta que se vuelva a sentir mal o haga el tratamiento por un periodo mucho menor al recomendado” describe Enrique Majul, director Médico de la Clínica Universitaria Reina Fabiola y especialista en Diabetes.[1] La misma es una enfermedad en la cual la ciencia y la tecnología han hecho aportes muy relevantes y se ha mejorado la calidad de vida de las personas de una forma significativa.
Bismara es un software que no escapa de ello. El objetivo principal del mismo es llevar un seguimiento constante del tratamiento del paciente para desligar al mismo de muchas de sus responsabilidades constantes y permitirle al médico información más precisa y concreta sobre su día a día. Para poder cumplir con el mismo, Bismara propone una bomba de insulina y un glucómetro conectados por bluetooth a un dispositivo móvil o wereable. El mismo se sincroniza con un sistema en la nube que gestiona el tratamiento y la programación de los aparatos posibilitando al médico información relevante y continua respecto a las métricas del paciente en los distintos momentos del tratamiento. La programación de la bomba la puede revisar y controlar el médico responsable desde una interfaz web o móvil que le avisará al diabético de posibles actualizaciones y le permitirá estar en constante control. A su vez, el doctor podrá informarse de los niveles de glucosa en los diferentes rangos horarios y días en que el paciente tuvo el dispositivo conectado. En pocas palabras, el tratamiento podrá llevarse adelante sin la necesidad de juntarse ni discutir información sobre los niveles y las inyecciones de bolo. Todo lo realizará Bismara.
A un nivel más amplio, Bismara ofrecerá la posibilidad de inscripción de “usuarios investigadores”. Estas solicitudes serán evaluadas y autorizadas para ofrecer la posibilidad de realizar investigaciones profundas respecto a toda la información (anónima) recopilada por Bismara, con el objetivo de realizar estudios y avances para la ciencia. Para ello se utilizarán técnicas de Data Mining usando Big Data.
La constancia respecto a las reglas del médico y la falta de información por los vaivenes del paciente respecto al tratamiento ya no serán un problema. Bismara estará al acecho de cualquier anomalía y dará un soporte de control y seguimiento que no se realizan en la actualidad, permitiendo un tratamiento más ameno y una mejor calidad de vida para el diabético.



[1] Fuente: http://www.lavoz.com.ar/salud/el-desafio-del-paciente-que-no-cumple-el-tratamiento

viernes, 27 de marzo de 2015

Java Rest API usando Google App Engine

Con motivo de seguir investigando sobre la mejor tecnología/herramienta a utilizar para desarrollar la Rest API, encontré a Google App Engine como una gran solución. Podría ser discutible pero me voy a encargar de hacer alguna prueba de concepto para evaluar la alternativa.

Para eso voy a seguir el siguiente tutorial: http://www.javacodegeeks.com/2012/05/google-app-engine-jax-rs-rest-service.html

Lo pueden investigar si les parece.

miércoles, 25 de marzo de 2015

Product Owner - Dr Majul

Dr Majul


Bueno, ya le envié el mail y calculo mañana tener novedades. Por ahora subo algunas notas del Dr que estuve buscando y me encontre en un articulo con que "su tesis doctoral fue el desarrollo de un software de autocuidado para pacientes con diabetes."  :
Algunas frases importantes que marcan REQUERIMIENTOS:
  1. “Muchas veces, nosotros desconocemos si el paciente cumplió o no con el tratamiento. Salvo que hagamos algún seguimiento telefónico o por software. Puede suceder que el paciente no regrese hasta que se vuelva a sentir mal o haga el tratamiento por un periodo mucho menor al recomendado”
  2. En el caso de enfermedades crónicas, como las que yo trato, diabetes, obesidad, dislipemia, en cada consulta me tomo el tiempo de explicar todos los riesgos que conlleva el no cumplir tratamientos y controles”, agrega. Asegura, asimismo, que “al insistir repetidas e innumerables veces, se puede lograr mejores controles, pero se habla en general de abandonos de tratamiento de entre 30 a 60 por ciento
  3.  es esencial que el paciente comprenda el porqué de la intervención. “Para ello, el paciente también participa en el diseño del tratamiento y las mejores estrategias para llevarlo adelante”.
  4. Las bombas actuales no son capaces de ajustar automáticamente las necesidades variables de insulina que tiene el paciente. A lo sumo, aquellas que se sincronizan con un sensor continuo de insulina pueden sugerir dosis o cortar el suministro cuando el paciente está sufriendo una hipoglucemia.
  5. El teléfono inteligente también tiene un programa que permite que el paciente cargue manualmente todo lo que comerá, lo cual ayuda a volver exactos los suministros
  6. También se observó que el método permitió calcular bien la dosis con la comida, sin la intervención del paciente.
Además agrego otro link relacionado:

Brainstorming alcances del proyecto

Alcances del proyecto:

  • Programar la bomba remotamente.
  • Hacer un enlace médico - pacientes (1 - n).
  • Seguir un trackeo de los niveles de glucosa en tiempo real de los pacientes. Verificar sensor e implantes, posibilidades.
  • Generar reportes y gráficos (big data).
  • Medir la glucosa y generar acciones. Quizás alarmas.
  • Calculadora de bolo. (Implícita).
  • Chat médico - paciente o mensajería.
  • Conexión bluetooth con la bomba.
  • Alerta de batería.
  • Crear una bomba propia. ANALIZAR ALTERNATIVAS.
  • Dipositivos (¿Edison?)

To do list:
  • Conseguir una bomba para analizar el circuito. (Lucas)
  • Datos de hosting, servidor de base de datos y ftp. (Lucas)
  • Ir a la ADA (Italia 2550) (Todos)
  • Escribir abstract (Franqui)
  • Diagrama de arquitectura (Franqui)
  • Reunión con el Dr Majul (Todos)

Links de interés sobre bombas de insulina