Arc Timeline Recorder is a new companion app to Arc Timeline, which for most people can probably replace Arc Mini.
Most of us use Arc Mini as a backup to Arc Timeline, to avoid data gaps. We don’t use Mini’s UI for editing our timelines (I’ll be the first to admit Mini’s UI is not great). We just want it there to take over recording in cases where Arc Timeline gets terminated.
Well, in that case why have a UI? Bring on: Arc Timeline Recorder. (Note: I’m just going to call it Arc Recorder most of the time, because otherwise it’s a bit of a mouthful).
Having no (or almost no) UI means the app is smaller, taking up much less memory (map views are major memory hogs). That means that it is also a much smaller target for iOS’s background app terminations during low memory situations. It will be much lower down the list, and least likely to get terminated. That means even better data gap prevention reliability.
LocoKit2
Arc Recorder is built on top of the new LocoKit2 recording engine, which is a ground up rebuild of LocoKit, Arc’s longtime recording engine.
This rebuild has allowed for a clean break from almost a decade of accumulated cruft, with opportunity for doing things better, tidier, more efficiently, more accurately, etc.
Not all of LocoKit has been rebuilt into LocoKit2 yet. But the core essentials are already there - enough to power Arc Recorder.
A new, smarter Kalman filter for location data
The industry standard way to clean up noisy and unreliable location data is to use what’s called a Kalman filter. These filters take into account the reported accuracy of each location update, the time between updates, and also the reported direction and speed of each update.
Old LocoKit’s Kalman filter didn’t bother with direction or speed information. I initially built the most minimal Kalman filter possible, and the results were impressive, so I didn’t push further. But for LocoKit2 I wanted to do it proper. So the new Kalman filter also accounts for reported direction and speed, allowing for more intelligent filtering, getting more sensible results out of noisy and untrustworthy data.
Here’s some examples of comparisons between the raw incoming data (grey lines), old Kalman filter (green lines), and new Kalman filter (orange lines). You can see that the course and speed information has allowed the filter to correct for drifting weirdness in the raw data, getting paths much closer to reality. Meanwhile the old Kalman in green does a good job of cleaning up noise in the raw data, but doesn’t know enough to correct for the various drift that can happen in built up city areas.
Example 1
Example 2
Example 3
Rebuilt Stationary State detection and Sleep Mode detection
I’ve also rebuilt these two essential detectors, to be cleaner, simpler, smarter. There’s not really any pretty screenshots to show off that work, but in general they achieve more accurate results, for Better Happiness.
I’m still going to continue fine tuning the sleep mode detector a bit more though, as I’m noticing that while in most situations it does better than the old one, in some situations it does noticeably worse. It’ll take more time and testing to really fine tune it to perfection. Though so far it feels like on average it does better than the old one, so there’s no reason why that should hold up the public release!