I've long since thought about this topic but this weekend I've pushed the repos. All fundamental parts of Locative (previously named Geofancy), namely the (yet heavy in progress and almost abandoned) Android app, the cloud app (https://my.locative.io) as well as what it all started with: the iOS app are now open source.
Locative is an app used for geofencing and iBeacons to trigger events on your home automation system. (Or wherever you like.) It's been closed source but I've just recently open sourced it to give the community more power and the chance to actively contribute or just find out how things work.
The reason why I'm approaching this now is lack of time. I'm really having a hard time putting much effort into Locative and, in contrast to this, receiving an overwhelming amount of feature requests (and bug reports) and enquiries by people asking me to contribute to any of the apps.
This does not mean that I'm stopping active development of those apps, actually it's quite the opposite. I'm trying to a) gather feedback a better way (using GitHub Issues instead of UserVoice) and b) provide more transparency and the chance for people interested in those topics to learn and (ideally) contribute back.
By the time of writing this, the largest part of feedback is still in UserVoice but I've already started pulling it over to GitHub Issues. Each project will now care for it's own set of issues.
At the time of writing this the cloud app is almost two years old and has dealt with the following amount of data (for readability I've used a
. as thousands seperator):
Users registered: 1.370 Geofences backed up: 1.268 Fencelogs stored: 556.759 MQTT messages sent: 878.568 oAuth v2 apps created: 35 Database memory usage: 22.766 MB
What about updates?
I'm planning on handing this pleasureful part to a decent CI. This being said, there's still tests and automation features missing, so for the time being I'll be manually pushing updates to the App Store as well as the server environment.
How can I contribute to it?
Feel free to take a look at the GitHub repos, there's probably something you can do, see below for links to the individual repositories. All projects have gather a fair amount of technical debt over the years and I'd be pleased to receive PRs solving this, I've already started adding issues and will do over the upcoming days and weeks.
The Webservice (aka. Cloud App)
A monolithic web service written using node.js, express, Redis and MongoDB. Still uses
async in some places (shame on me). But I've started promisifying (allthethings). Also includes a MQTT broker running on port 1883 (default non TLS) or (if you're adding certificates to /secure) on 8883.
The iOS App
The iOS app, written in Objective-C and a bit rusty here and there, there's lot's of points to tackle to get this modern and nicer. I'd like to get rid of
ObjectiveRecord, one of the many goals I see in making this a lot more modern, also I'd like to implement
ReactiveCocoa and the static
UITableViewCell's need an overhaul. Something broke the auto layout constraints since the last Xcode update.
The Android App
The Android app, written in Java, didn't get too much love in the past, but this might change soonish 😀 All in all this app needs to be taken care of a person that's familiar with the Android ecosystem and willing to do some fancy stuff. The app (for the time being) only supports some basic geofencing features and completely lacks beacon support.
What about existing users?
As I've mentioned above, I'm continuing to maintain the servers and (of course) going open source does not mean open sourcing any user data. Open sourcing the cloud server is, in my eyes, a huge opportunity to improve overall security but on the other hand means that every user still has full control over his or her data. There's a red button in every user's account which can be used to trigger an irreversible removal of your account. If you've go any questions don't hesitate to ask me: firstname.lastname@example.org.
So what shall I do now?
If you're a Node.js, iOS or Android dev: Grab yourself a repo and do whatever you want with it. If you want to show some extra love to the open source community, please contribute and create PRs. If you're not a dev (yet) but are interested in coding and / or home automation. Follow my previous instructions and grab yourself a repo. If you just want to use Locative, no worries: Just go ahead and jump right into it. Find it on the App Store or at https://my.locative.io.
I've decided to go with a slightly modified MIT License, see below:
The Locative License Copyright (c) 2013-today Marcus Kida Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. You are not eligible to distribute this Software under the name or appearance of Locative, you may release it under another name and appearance though. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
One more thing
I know this is sometimes hard, and I'm probably also not always following this rule. But it's really important you now:
Don't be a dick.