This is a simple time tracker lambda and DynamoDB based service, built as a project to learn clojure and micro services. The initial inspiration came from reading the book 168 Hours, in which Laura Vanderkam asks us to really see what we are doing with our time. There are 168 hours in a week and her claim is that although we feel we never have enough time, journaling what we do is a means to bullshit test ourselves.
- We split our time between
personal
andwork
universes. - (Actually this project doesnt care how you divide your life, but the first term, below, is a "core-category" )
- ...
- And furthermore we bring our attention to either specific Projects, which have a beginning and an end, such as the below
taxes-2017
--hopefully one day I will finish my taxes--andadhoc
tasks which is meant to record time spent helping a colleague for example (here calledconsulting
, below). routine
is a potentially useful --or not-- distinction of things we do which do not have an End.
times 2018-02-10
10:00 - 10:30 ; personal ; taxes-2017 ; plan ; just starting out
10:30 - 11:05 ; personal ; routine ; yoga
11:35 - 12:20 ; work ; WRK-345-bugfix-foo ; code
12:20 - 13:05 ; work ; adhoc ; consulting
13:05 - 13:35 ; work ; WRK-345-bugfix-foo ; code
- Here is an example of an output stacked area chart of a
core-category:work
query, which is using the author's data from December of 2017. This uses the d3js so called stacked layout. The y-axis represents minutes. - This chart is not labeled, but it is possible to see that some days in the week of December 4th had multiple competing interests, while the week of Dec 11th there was a bit more focus on the Purple project.
- This particular layout only allows for a max of
20
layers before colors are re-used for other categories. - a lot can be said about stacked area chart aesthetics.
Here's a super simple overview. There are several lambdas at play here, but the general picture looks like this.
- Here,
crontab -l
shows how an upload script runs every 20 minutes
# crontab -l
*/20 * * * * bash /path/to/my/local/repo/timesheet-parser/clojure-time/timeparse.upload.sh
- and the
timeparse.upload.sh
is a one liner that does...
sh -c 'source /local/path/to/my/environmental/variables.sh \
&& source /local/path/to/my/python/environment/thing/bin/activate \
&& python /path/to/my/local/repo/timesheet-parser/scripts/upload_client.py times /local/path/to/my/Dropbox/my/dir/with/time/data'
This service has not yet been neatly templatized for easy adoption. This for now has been a fun side project proof of concept for helping the author figure out where his time is going.
Productionizing would happen of course given enough of a demand.