ashfurrow / mood

Keeping track of current level of happiness

Home Page:https://krausefx.com

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

mood

If today were the last day of my life, would I want to do what I am about to do today?" And whenever the answer has been "No" for too many days in a row, I know I need to change something.

Steve Jobs

Background

I've been a heavy user of 1 Second Everyday, where I created a very personal video of the full year for the last 730 days. (Check out a public sample video here)

One thing I noticed is that I associate the mood and happiness when seeing the videos, however, I know that this will slowly fade away as time passes.

I wanted a way to track my overall happiness and excitement in my life, allowing me to monitor, analyze and react to it. As Steve Jobs said, if you notice a downwards trend, it might be time to apply some changes to your life.

How it works

It's a simple Telegram Bot that will send you a message 3 times a day:

  • One in the morning (I'd never reply to the bot before showering)
  • One after lunch
  • One when going to bed

You can always just text your bot a number, however, I know I'd forget it. That's why the bot sends you those reminders.

It then pulls up this really nice, optimized keyboard in Telegram, with a short description of what each number means.

If you forget to track a day, that's no big deal at all. The database is simple, it looks like this:

@_db.create_table :moods do
  primary_key :id
  DateTime :time
  Integer :value
end

I decided not to store the information about breakfast, lunch and dinner, as it would make time zones more complex, as I'm traveling quite a bit.

Future

Graphs

I want a nice visualization page & dashboard for this. Maybe even just send a weekly and monthly summary via Telegram?

Right now, just send /graph to your bot to get your historic mood as a simple graph.

Alerts

I want my bot to alert me when it detects a downwards trends. Similar to the stock trading approach, I was thinking of using the 7d average (7 days, 3 times a day => 21 data points). It's all relative, so if there is a downwards trends for 2 weeks, there probably is something bothering you

Integration into 1SE

I usually edit the 1SE videos slightly to have "subtitles" for some of the important life events. Additionally, I throw in the classic Every day of my life music.

Additionally, with that data, I want to overlay my happiness level somehow, probably in the form of a graph, a bar, or a wave. Not sure yet, but I got 11 months to figure that out.

How to use it

You'll have to setup a few things

  • Create a Telegram bot using @BotFather and get the API key, and message ID with you
  • Provide those values using TELEGRAM_TOKEN and TELEGRAM_CHAT_ID
    • To get the TELEGRAM_CHAT_ID, send a message to your bot and then access the following URL in your browser https://api.telegram.org/bot[TELEGRAM_TOKEN]/getUpdates. You'll see a message, and within that, the Chat ID to use
  • And host it on any server, like Heroku, and use the Heroku scheduler feature to call rake morning, rake noon and rake evening
  • Make sure to enable the Heroku worker is enabled

Visualizing Data

Download the contents of the database's mood table into a CSV. It'll look like this:

"id","time","value"
1,"2018-02-11 17:34:53.235841",3
...

Okay great. Next, open a Ruby repl and run the following:

csv = CSV.read('/Users/ashfurrow/Desktop/moods.csv')
File.write('output.csv', csv.drop(1).map { |r| [[DateTime.parse(r[1]).to_time.strftime('%F %H:%M')], r[2]] }.map(&:to_csv).join(""))

I might eventually get fancier and filter out to just show mornings/lunchtime/evenings but it's a start.

Open output.csv in Numbers, ⌘A the table, and click the graph icon. You must use the scatter graph to get Numbers to use the dates as a horizontal axis.

About

Keeping track of current level of happiness

https://krausefx.com

License:MIT License


Languages

Language:Ruby 98.5%Language:HTML 1.5%