Skip to content

Latest commit

 

History

History
81 lines (74 loc) · 7.66 KB

README.md

File metadata and controls

81 lines (74 loc) · 7.66 KB

Vitalizr

As my mother's health has deteriorated, it became more and more important to capture information about her vitals. While most people are content to wait to learn their blood pressure, heart rate, blood oxygen levels, and other vitals when they visit their doctor's office, in order to care for mom effectively, I want to know these measurements more often. Treating her diabetes means managing her blood sugar levels; such is a daily, sometimes hourly, task.

I want a system that makes it easy to record her vitals and analyze this data. Now, it's true, I can easily use pen & paper. Pen and paper is essentially what I've been using, a whiteboard with dry erase markers that I capture numbers as I collect them. This has all the usual obvious problems: what happens if an entry gets erased accidentally? What if my handwriting is bad? What if I run out of space? How do I share it simply with her doctors? How can I see the underlying trends in the data?

I could easily use a spreadsheet. That's suggested to be the "lowest effort" electronic solution. It solves digital durability, clarity, is conceptually more difficult to run out of space and easier to share.

But it still involves tedious, manual work. I have to take readings, copy them down into a spreadsheet. If I want to make a graph, I have to learn Excel's charting tools. I could do fancy manipulations with Pivot Tables, etc...

But what I really want is a way for all of this to be done for me. I don't want to have to take her blood pressure using a blood pressure cuff, read and copy down the numbers, and then send them to a physician later. In my ideal world, the cuff is integrated with my data store. When I do a reading, it persists its measurement to a log. That log is automatically shared with family and trusted contacts like doctors. The log has machine learning applied to find patterns and surface correlations/offer tentative causality hypotheses. The auto-collection of data prevents me from making silly mistakes and can integrate with other systems that take actions based on the readings. I want to be able to visualize her readings for weight and blood pressure over a week, a month, a year. I want to be able to correlate specific events, like hospitalization or illness, with changes in median levels. Speaking of medians, I want to be able to simply calculate summary statistics.

From information, we can achieve freedom. So let's build a system that makes it simple to gather this information and easy to use it to improve someone's health.

Usage

Server side

  • java -cp build/libs/vitalizr-0.0.1-SNAPSHOT.jar software.visionary.iluvatar.Iluvatar 13338 AddWeight
  • java -cp build/libs/vitalizr-0.0.1-SNAPSHOT.jar software.visionary.iluvatar.Iluvatar 13339 ListWeights
  • java -cp build/libs/vitalizr-0.0.1-SNAPSHOT.jar software.visionary.iluvatar.Iluvatar 13340 AddBodyMassIndex
  • java -cp build/libs/vitalizr-0.0.1-SNAPSHOT.jar software.visionary.iluvatar.Iluvatar 13341 ListBodyMassIndices
  • java -cp build/libs/vitalizr-0.0.1-SNAPSHOT.jar software.visionary.iluvatar.Iluvatar 13342 AddBodyFatPercentage
  • java -cp build/libs/vitalizr-0.0.1-SNAPSHOT.jar software.visionary.iluvatar.Iluvatar 13343 ListBodyFatPercentages
  • java -cp build/libs/vitalizr-0.0.1-SNAPSHOT.jar software.visionary.iluvatar.Iluvatar 13344 AddBodyWaterPercentage
  • java -cp build/libs/vitalizr-0.0.1-SNAPSHOT.jar software.visionary.iluvatar.Iluvatar 13345 ListBodyWaterPercentages
  • java -cp build/libs/vitalizr-0.0.1-SNAPSHOT.jar software.visionary.iluvatar.Iluvatar 13346 AddBloodSugar
  • java -cp build/libs/vitalizr-0.0.1-SNAPSHOT.jar software.visionary.iluvatar.Iluvatar 13347 ListBloodSugars
  • java -cp build/libs/vitalizr-0.0.1-SNAPSHOT.jar software.visionary.iluvatar.Iluvatar 13348 AddBloodPressure
  • java -cp build/libs/vitalizr-0.0.1-SNAPSHOT.jar software.visionary.iluvatar.Iluvatar 13349 ListBloodPressures
  • java -cp build/libs/vitalizr-0.0.1-SNAPSHOT.jar software.visionary.iluvatar.Iluvatar 13350 AddBodyTemperature
  • java -cp build/libs/vitalizr-0.0.1-SNAPSHOT.jar software.visionary.iluvatar.Iluvatar 13351 ListBodyTemperatures
  • java -cp build/libs/vitalizr-0.0.1-SNAPSHOT.jar software.visionary.iluvatar.Iluvatar 13352 AddBloodOxygen
  • java -cp build/libs/vitalizr-0.0.1-SNAPSHOT.jar software.visionary.iluvatar.Iluvatar 13353 ListBloodOxygens
  • java -cp build/libs/vitalizr-0.0.1-SNAPSHOT.jar software.visionary.iluvatar.Iluvatar 13354 AddPulse
  • java -cp build/libs/vitalizr-0.0.1-SNAPSHOT.jar software.visionary.iluvatar.Iluvatar 13355 ListPulses

This project uses software.visionary.iluvatar.Iluvatar as a plugin-based lightweight Socket listener. Each Vital's actions are implemented as a micro-service, which can start as an independent process and accept connections. The full list of services and their associated ports are documented in the software.visionary.vitalizr.Client, which shows the basic communication model and protocol.

Client Side

  • java -cp build/libs/vitalizr-0.0.1-SNAPSHOT.jar software.visionary.vitalizr.Client "List" "Weight" "7ab35698-21f9-463e-8e74-bd3d56109336"
  • java -cp build/libs/vitalizr-0.0.1-SNAPSHOT.jar software.visionary.vitalizr.Client "Add" "Fat" "7ab35698-21f9-463e-8e74-bd3d56109336" "28.5"
  • java -cp build/libs/vitalizr-0.0.1-SNAPSHOT.jar software.visionary.vitalizr.Client "List" "Fat" "7ab35698-21f9-463e-8e74-bd3d56109336"
  • java -cp build/libs/vitalizr-0.0.1-SNAPSHOT.jar software.visionary.vitalizr.Client "Add" "BMI" "7ab35698-21f9-463e-8e74-bd3d56109336" "31.8"
  • java -cp build/libs/vitalizr-0.0.1-SNAPSHOT.jar software.visionary.vitalizr.Client "List" "Water" "7ab35698-21f9-463e-8e74-bd3d56109336"

The client also supports adding a new Person who hasn't previously been stored.

  1. Generate a UUID externally first for them.(TODO, encapsulate this) For instance, in Ubuntu you can use uuidgen
  2. Send a request with the id and their info, like: java -cp build/libs/vitalizr-0.0.1-SNAPSHOT.jar software.visionary.vitalizr.Client "Add" "Sugar" "mom:1959-1-9:[email protected]" "91"

Debug

To debug/poke around, git clone the repo, run one of the microservices, and attach a debugger like so:

java -cp build/libs/vitalizr-0.0.1-SNAPSHOT.jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000 software.visionary.iluvatar.Iluvatar 13338 AddWeight

Questions

Contact nick at visionary.software. Vitalizr is a loving creation of my own mind that to solve some of my family's problems, that may help yours. It is licensed under LGPLv3 because I'm a frim believer in Free Software and a Free And Open Internet/Society.

Vitalizr is provided with an "AS-IS" Warranty, you break it, you bought it. I do not condone any capitalists trying to incorporate it into their work to rip off the masses. I will, however, accept donations that will enable me to do other useful things, if you'd be inclined to Flattr me: flattr.com/@visionary

If you would like to commission me to realize one of your visions, I am open to independent project contracts.