A good approach to merge TagTime logs


I’m a strong believer of time tracking by means of random sampling, that’s why I love tagtime, both for desktop and smartphone.

However, the integration between tagtime and beeminder is strictly limited to one goal - one device (that is: updates to a certain goal can be sent only from one device; updates from multiple devices will mess up the goal).

Therefore the need to find a way to merge different tagtime logs in order to effectively update a goal from different devices.

To explain better the situation: I would like to beemind the activities for my PhD (that I recently started).
This will involve coding (the desktop script here is straightforward) but also reading (in this case I’d prefer touse the app, in order not to open the computer and introduce distraction).

I’m foreseeing something that involves dropbox, but at the moment I can’t figure out something clear.
Can you help me?


I would love it, LOVE it! if TagTime all integrated into a single unified easy to use service where all the logs were stored in a single place and easily visualized.

So far I haven’t even been fully able to figure out how to use https://alexschell.shinyapps.io/tagtime-vis/


Related thread: Tagging Time Spent

I merge my tagtime logs from an iOS hack, my laptop, and desktops, and then update beeminder from the merged log file. So it doesn’t matter what device I use to enter my tags, it all trickles through to my Beeminder goals.

I haven’t yet tidied up my merge code and added to my github fork but it should be possible without too much effort if there’s interest. There’s 2 elements, iirc, one that changes merge.pl to not care so much about monotonicity, missing or duplicate lines, etc, and one that moves the Beeminder goal updates into the post-merge process and out of the ping-recording.

I can’t make any claims to good visualisation, though. Or ease of use.

UPDATE: multi-file merge now uploaded to GitHub as bmndr.merge.sh and related files


Doesn’t merging files from different devices cause problems with the ping interval assumptions?


Only if you’ve been mad enough to set different ping intervals on different devices. :smile:

I confess to having left mine at the default 45 minutes (and the default seed) so that I get pinged at the same time as (most of) the other tagtimers. There’s something tribal about being together and having everyone’s devices ping in harmony. Also makes it easier to determine whether the RETRO ping that pinged unnoticed while we were walking to lunch occurred while we were discussing something beemindery.

In part I’ve left the default in place because the pings that occur close together are already annoyingly frequent and the pings that occur further apart can already be annoyingly infrequent. I have no desire to alter either end of the distribution in favour of the other. ymmv.


Even if you have the same ping interval, you’ll have 2x the number of pings.

Or are you saying you have the exact same settings so on each device you have the exact same ping timestamps? (I only use Andoid Tagtime and wasn’t aware of a way to set a seed.)

Or are you only ever having one ‘active’ device at a time?

I’m sure you know what you’re doing, I’m just a bit confused about what you ARE doing.


That is indeed what happens if you don’t change the default settings. In fact, this is a constraint for any new TagTime implementations (like the one that @alice is working on), that they implement the same universal ping schedule.


That’s exactly right—I get the same pings with the same timestamps on all devices.

I tweaked the merge script so that it doesn’t panic if it sees duplicate pings. It merges tags for that timestamp from all available logs. It also highlights where a ping is missing from all its logs.

For the avoidance of annoyance, I’ve also rigged it so that my iPhone only gets pings that weren’t answered on a desktop. I also attempted to have the xterm window only pop up on machines that were being actively used, but with less success.

Word Count Script requested

I’ve automated my file merging using Hazel.

Here’s what my settings look like:

The multiple tests are largely to ensure that a) it doesn’t run too frequently and b) that if you leave this enabled on an abandoned machine it doesn’t wake up one day and nuke your goal.

The script elements are:

test "$1" -nt "merged.log" && tail -1 "$1" | grep -v MISSING


./bmndr.merge.sh *.log.txt > bmndr.merge.out

UPDATE: Added the ‘MISSING’ check, removed the STDERR redirection, because apparently Hazel won’t do that. So the bmndr.merge.out file only contains STDOUT.


Hi Philip!

Any chance you could link me to the hack you use for iOS TimeTagging? Not averse to paying for an app, just trying to set this up for myself and don’t have access to an android device!


TagTime hack on iOS using Prowl

I haven’t started to use tagtime (yet), but I feel like asking questions anyway, in particular on the merging. Exactly how do you transfer the log files to a computer where you can merge them? Is there some automation to it? A server?


@larsivi I’m guessing you’re asking about the android app, so I have no direct knowledge, though I think you can periodically email yourself the log file or something equally manual.

I answer almost all of my pings on a computer, so don’t have to transfer the log files to a computer. I’ve put my tagtime directory inside of dropbox, so they end up together on the particular computer where I run the sync script.

Elsewhere I’ve described how I semi-automate tagtime for iOS, which may be useful.