• Stars
    star
    700
  • Rank 64,671 (Top 2 %)
  • Language
    Objective-C
  • License
    GNU General Publi...
  • Created over 10 years ago
  • Updated about 10 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

An open-source iOS personal analytics tool

Theseus Build Status

Theseus is an open-source personal tracking tool that uses your iPhone's location and motion sensors to help you track and visualize where you spend your time. It's very similar to Moves or Google Latitude.

Example images

One key difference between Theseus and other similar apps is its approach to privacy and data accessibility. By default, your data never leaves your phone; all processing happens on-device rather than an external server. If you want to access your data for personal usage, Theseus can export your data to Dropbox in JSON format for easy access.

The Status of Theseus

(You should read this)

Theseus currently uses Apple's CLVisit CoreLocation APIs to determine what places you visit. However, as of iOS 8.0, CLVisit data isn't particularly accurate.

As such, rather than invest time polishing up Theseus and making it more full-featured, I'm basically going to leave it as-is for a while, in the hopes that future iOS updates make it more useful.

Writing custom location clustering code to replace CLVisit is doable, but would require more work than I'm currently interested in investing by myself. I'd be more than happy to jam on this with someone else if they wanted to lend a hand — get in touch if this is something that might interest you!

Installation

Although Theseus will eventually be available on the App Store, you must currently compile it from source. Assuming you want to run Theseus on your physical iPhone, you'll also need to be a member of Apple's iOS Developer Program. It requires iOS 8.

  1. Clone this git repo: git clone [email protected]:lazerwalker/Theseus.git

  2. Copy Configuration.plist.example to Configuration.plist.

  3. Create a new Foursquare app (https://foursquare.com/developers/register). This will be necessary to fetch venue information from Foursquare.

  4. Create a new Dropbox app (https://www.dropbox.com/developers/apps). It should be a Dropbox API app, with access to Files and Datastores, that can be limited to its own folder. This will be necessary to export your data to Dropbox.

  5. Open up Theseus.xcworkspace in Xcode. Open Configuration.plist, and enter the credentials for the Dropbox and Foursquare apps you created in the previous step.

  6. Build and run the app. It should just work!

Usage

After you grant Theseus permission to access motion and location data, it will start collecting data about where you spend your time. Currently, it will group all of your actions into either a stop, where you are staying in a discrete location for a period of time, or a movement event, when you're travelling. Stops can either be correlated to nearby Foursquare venues or given their own names; as you categorize locations, Theseus will begin to suggest those names when you are in that place again.

Theseus visualizes your data in a timeline per day, letting you change days by swiping. You can also tap any item to see that day's movement visualized on a map.

If you would like to export your data, the Settings menu offers a one-button JSON export to Dropbox. More export options will be coming soon.

For now, you may manually need to tap the 'Process' button in the top-left to trigger processing of your location data into a higher-level collection of stop and movement events.

Issues

Theseus is currently VERY EARLY alpha software. It will crash a lot. You may lose your data, so export regularly if you care.

If you run into problems, please file bugs using this repo's GitHub Issues. If you run into problems with how your movement is being categorized (incorrect timestamps, coordinates, etc) and feel comfortable sharing your data, you can get a raw export of your movement and motion data by choosing the "Export Raw Data" option from the app's settings page; this will be very helpful.

Running Tests from the Command Line

You can run Theseus's test suite from the command line by running the rake test command from inside the root project directory.

As a warning: the test suite will overwrite the app's database in the simulator with test data. It's unlikely you will have meaningful data stored in your simulator instance of the app, but keep this in mind.

Right now, test coverage is a bit shaky; this is a relatively high near-term priority.

Contributing

Contributions of all shapes and forms are welcome! If you're looking for something to do, check out the GitHub Issues or feel free to get in touch directly.

Before your first pull request is accepted, you will need to submit a Contributor License Agreement by filling out this form:

Theseus CLA

Without a signed CLA, I won't be able to include your code in any builds I submit to Apple for distribution on the App Store.

Info.plist

Using the Dropbox API requires the app to register a URI scheme of the form db-<APP KEY>. This automated as part of the build process; whatever app key you have in your Configuration.plist file will be used.

Because the info plist is versioned (and adding it to gitignore isn't a viable option), this means it will show up as part of your git changeset. For now, you'll have to manually discard it from your working index when you commit.

Please try to remember to do this, but don't freak out if you accidentally do commit it; a Dropbox app key isn't considered sensitive information, so it isn't the end of the world.

Contact

Mike Lazer-Walker

License

Theseus is available under the GPL v2 license. See the LICENSE file for more info.

More Repositories

1

clojurescript-koans

A ClojureScript adaptation of the Clojure koans that runs purely in-browser
Clojure
268
star
2

twine-app-builder

Automatically generate Windows and macOS versions of your Twine games, for free!
HTML
212
star
3

hubot-imessage

iMessage adapter for Hubot
AppleScript
171
star
4

cortado

Caffeine tracking for everyone
Objective-C
168
star
5

twison

A Twine 2 story format that provides JSON export
HTML
139
star
6

storyboard

A narrative engine for interactive storytelling
TypeScript
112
star
7

habit-squares

Habit tracking for lazy people
Ruby
106
star
8

fuckingblocksyntax.com

Syntax is hard.
HTML
79
star
9

Skeleton-Sass

A port of Skeleton's responsive grid framework to SASS
CSS
71
star
10

GroundKontrol

Tune your Unity game's constants using a Korg MIDI controller
C#
56
star
11

literally

Replaces occurrences of the word 'literally' with 'figuratively'. That's literally all it does.
JavaScript
47
star
12

Mobile-Safari-Inspector

Use WebKit Inspector to debug iOS web apps rendered in a native UIWebView
Objective-C
44
star
13

tinsel

Choose Your Own Adventure-style interactive fiction for touch tone phones
JavaScript
37
star
14

MTLParseAdapter

Convert your Mantle model objects to and from Parse PFObjects
Objective-C
22
star
15

whatsapplebees

The most popular Applebee's-based social network.
Objective-C
19
star
16

MWKeyboardAnimation

A UIView category to simplify animations that sync up with the UIKeyboard show/hide animation
Objective-C
19
star
17

playfab-twine

TypeScript
17
star
18

ios-3d-audio-test

Swift
16
star
19

lazerwalker-hubot-scripts

Some Hubot scripts I use to make my life easier
CoffeeScript
13
star
20

tracery-dot-app

Native desktop app for experimenting with Tracery grammars
TypeScript
12
star
21

dotfiles

Vim Script
11
star
22

dont-touch-your-face

HTML
10
star
23

prisoners-dilemma

A simple game to show off Apple's Multipeer Connectivity framework
Objective-C
9
star
24

lazerboy-pcb

6
star
25

machine-learning-rps

TypeScript
5
star
26

azure-mystery-mansion

4
star
27

geofencer

Swift
4
star
28

thumbstick

🎮 A virtual joystick for touch capable interfaces.
JavaScript
4
star
29

xoxo-closing-party

JavaScript
4
star
30

semaphore

TypeScript
3
star
31

walking-game

C#
3
star
32

storyboard-iOS

Swift reference client for the Storyboard storytelling engine
JavaScript
3
star
33

morse-keyboard

Arduino
3
star
34

poetry-ios

Swift
3
star
35

minimum-viable-webrtc

A WebRTC sample browser app + server that automatically negotiates streaming p2p video
TypeScript
3
star
36

diorama

A tool for making short narrative experiences in 3D
TypeScript
2
star
37

spatial-webrtc-test

TypeScript
2
star
38

tinsel-twison

Use Twine 2 to to create games for Tinsel
JavaScript
2
star
39

midi-tuner

JS webapp and server for MIDI variable gamefeel tuning
TypeScript
2
star
40

orbital

A Sass-based responsive grid that's out of this world
2
star
41

unity-ci-example

2
star
42

CafeAuLait

A node.js library for Remember The Milk written in CoffeeScript
CoffeeScript
2
star
43

storyboard-lang

TypeScript
2
star
44

ios-games-list

iOS games worth playing.
HTML
2
star
45

fbchan

A fully-functional web-based Facebook client that looks like 4chan.
JavaScript
1
star
46

doginternet

HTML
1
star
47

cordova-clvisit

1
star
48

TipsterJS

Yet another jQuery tooltip library
JavaScript
1
star
49

autocompete

JavaScript
1
star
50

blog

SCSS
1
star
51

electron-wrapper-template

JavaScript
1
star
52

marsjs

TypeScript
1
star
53

twine-app-builder-dev

Experimental features for Twine App Builder
HTML
1
star
54

lazerwalker

1
star
55

lickr-web

If you're not in MAS.863, you probably don't care about this.
Python
1
star
56

iron-blogger

Ruby
1
star