HNHacker News
TopNewBestAskShowJobs

cloudmike

595 karma · joined November 5, 2009

Working on tools for 3D games. Previously at Apple (AR/VR), co-founder of Moatboat, Simplenote (YC S10), and former game dev at Irrational Games.

https://twitter.com/kineticpoet https://store.steampowered.com/app/2168330/Helmscape/

submissionscomments
cloudmike··on Why all my iOS Apps are on hold - or iCloud sucks Part II
To all those suffering from Core Data + iCloud syncing: we built Simperium (YC S10) to solve this problem. The iOS/OSX and JavaScript libraries are open source, with the backend to follow (or you can use the hosted service). The site is at http://simperium.com and the repos are at http://github.com/Simperium

We were recently acquired by Automattic, and we're now putting more resources into the project (for example to make it work on Android as well). If cost for the hosted service is a concern for you, you can get in touch and we'll work something out (info@simperium.com).

cloudmike··on Automattic Buys Simperium (YC S10), Maker of Simplenote
Thanks everyone for your congratulations. We're really happy to join a great, growing team with alignment on culture, technology, and vision. There's still a lot of work left to do though. Now back to building things.
cloudmike··on Automattic Buys Simperium (YC S10), Maker of Simplenote
We've had a few growing pains, particularly with 3rd-party apps. We're working with developers to move them to our latest API. If you ever encounter problems, you can email us at support@simplenoteapp.com and we'll do our best to help you out.
cloudmike··on AFIncrementalStore: Core Data with AFNetworking, Done Right
Oh, hey!

Your analysis is accurate. Actually, one of the features we're preparing to launch is sharing/collaboration/groups, which will allow data in Simperium to flow across users the same way it currently flows across devices. But you're right in that having more ways to perform queries outside of a known data set would be useful too.

cloudmike··on AFIncrementalStore: Core Data with AFNetworking, Done Right
In addition to AFIncrementalStore and the other suggestions in this thread, you should check out Simperium (http://simperium.com). Our iOS/OSX library watches your existing Core Data context and handles syncing transparently, with full support for offline use. Unlike other solutions, we use persistent connections and operational transforms to send only the data that changes, allowing many conflicts to be resolved automatically.

We've already been down the path of using a more traditional RESTful approach to syncing data with earlier versions of our app Simplenote. I agree it seems like it should be easy to just cache some offline data locally and send it up to a server at first opportunity. And you can write a prototype of that system pretty quickly. But in our experience at least, conflicts, errors, duplicates, etc. arise a lot more often than you might think and it's very hard to make a system like that reliable, not to mention scaling and maintaining it.

cloudmike··on What Twitter could have been
Thanks! And I appreciate your insight. You must be rather battle-hardened from your experience over the years, and I know there are others who share your hesitance to use a system like this. In response to your question about examples, Linux and Android are examples of software that, as far as I can tell, only really opened up after conception and a good deal of development.

http://en.wikipedia.org/wiki/Linux#MINIX

http://en.wikipedia.org/wiki/Android_(operating_system)#Foun...

cloudmike··on What Twitter could have been
We only launched Simperium a few weeks ago. While it's production-ready (powering Simplenote), it still has a beta label for the simple reason that we haven't announced pricing or our open source strategy. I agree, "pasting on" an open source strategy in a reactionary way doesn't have a great history of success, but similarly, I think it's also hard to build very ambitious open source solutions that are entirely open from the moment of conception. Not impossible, but in any case the path we chose was to build a first version behind closed doors according to a strong vision based on experience and talking to fellow app developers.

Having done that, we're excited to start opening it up and we don't view this as pasting on a strategy. We've been proactively considering the implications for our technology and business from the beginning. I think a great, open circulating system for the internet can be as significant as an operating system like Linux.

cloudmike··on What Twitter could have been
You should check out Simperium (disclaimer: I'm the co-founder and Twitter's former platform lead is one of our advisors/investors). While it's not immediately apparent yet, we're pushing in this direction: it's easy to create a firehose for your app, and we're working on ways for apps to easily interconnect with each other in a less file-centric, more API-centric way.

The niche we chose to start with is device syncing, based on our experience building Simplenote (which is to Evernote as Twitter is to Facebook). We know there's a need for something more flexible and powerful than iCloud in this regard, so that's what we focused on initially. But we believe a good solution for moving data between devices is also a good solution for moving data between people and 3rd-party apps.

Simplenote's 3rd-party ecosystem looks similar to Twitter's in the earlier days. We're taking the path they didn't take. Rather than shoring up Simplenote vertically, we're focused on extending our backend data layer horizontally and generalizing it for a variety of apps and services (though specifically not as an all-encompassing "backend-as-a-service"). We'll be announcing our open source strategy soon. This is all really hard though, both technically and as a business.

cloudmike··on Show HN: Simperium, a realtime data layer
Consistent browser support for storage (besides localStorage) is still quite frustrating. It's improving though and we're on it.

You can model relational data in Backbone quite effectively, or use another library (or your own). For example: https://github.com/PaulUithol/Backbone-relational/

cloudmike··on Show HN: Simperium, a realtime data layer
Yes, support for this is imminent. But I believe you know that now since we're already in touch with you.
cloudmike··on Show HN: Simperium, a realtime data layer
There's currently no explicit lock or transaction, but due to the way we're multithreading, multiple changes are propagated back to your context in one shot.

Core Data relationships (including their inverses) that come over the wire can be lazily resolved by Simperium if necessary.

cloudmike··on Show HN: Simperium, a realtime data layer
By "finer grained control" we mean control over expirations and read/write permissions for a particular token. It's definitely not possible to erase/modify data from other users.

An example of where read-only permissions are useful is the live dashboard you see at simperium.com after you sign in. The "number of syncs" and alerts at the top are all pulled live from Simperium, but the token used on that page is a read-only token. We just need to expose the ability to create these read-only tokens to developers.

Actually, as a Simplenote user, you might be interested to know that our alerts and blog posts are pulled from Simplenote via Simperium. When we tag a note as "Alert" or "Published" it instantly appears on the dashboard.

Regarding querying, we're working on something for apps that can't or don't want to keep all data locally. In the meantime you can locally query however you'd like in your database of choice.

cloudmike··on Show HN: Simperium, a realtime data layer
Our goal on the client-side (compared to CouchDB) was simpler, more lightweight libraries that work well with existing tools that developers already use, like Core Data on iOS and sqlite/ContentProviders on Android.

Whereas CouchDB does master-master replication among instances of itself, Simperium can accomplish something similar with any database: e.g. sqlite on iOS, to MongoDB in our backend, and to whatever database you use in your own backend.

cloudmike··on Show HN: Simperium, a realtime data layer
"I'm amazed that we're on the same wavelength - we've had to build very similar infrastructure for ourselves"

Right, we hear that quite a bit. A few comments:

- Here's our Backbone sync adapter: https://github.com/Simperium/simperium/blob/master/javascrip...

- Dealing with subsets is a priority for us

- OT and versioning are generally helpful for managing changes/deltas

- We're using MongoDB for storage

cloudmike··on Show HN: Simperium, a realtime data layer
"Might not of built something internally ourselves a year ago if there was a platform like this."

A great quote!

There's a lot of good feedback here, particularly regarding playing more nicely with other code. We'll do a pass, thanks.

* You can add overrides in your model's userInfo but this isn't documented yet. We'll do that after cleaning up the naming a bit more.

* The next major release uses NSNotificationCenter for the reason you mentioned.

* We chose a single repo for now since our samples tend to span languages/devices. We'll revisit this eventually. Your point about submodules is a good one.

* We're not currently using NSIncrementalStore for the same reason as you (needed < iOS 5 support).

cloudmike··on Show HN: Simperium, a realtime data layer
Whoa. Nice work, that was fast.
cloudmike··on Show HN: Simperium, a realtime data layer
You own your data in the sense that, unlike services like iCloud, you can mirror all your user accounts and data to your own backend database that you control.

This extra degree of control, though not absolute, lets you develop your own solution (or integrate someone else's) in parallel should you stop using Simperium.

Our libraries are designed to have a small footprint; they're easy to both add and remove. And we plan to open source them in the future.

Beyond that, you cite valid concerns for any service.

cloudmike··on Show HN: Simperium, a realtime data layer
Good question. We haven't heard any complaints about battery life so far. If you'd like you can check out Simplenote to judge for yourself: http://simplenoteapp.com

You do have control over the granularity of your updates. For example, we spoke to a game developer who would want to disable Simperium while a game is being played, and then enable it again at the end of levels. These coarse changes are supported since they'll resolve automatically when the client comes back online.

cloudmike··on Show HN: Simperium, a realtime data layer
Thanks, appreciated.

The editor is Sublime Text 2: http://www.sublimetext.com/2

cloudmike··on Show HN: Simperium, a realtime data layer
We agree Android is important, but we found enough developers who thought iOS/OSX, JavaScript and Python were sufficiently compelling, so we focused on those for launch.

Releasing more libraries is a priority.

cloudmike··on Show HN: Simperium, a realtime data layer
Great feedback, thanks.
cloudmike··on Show HN: Simperium, a realtime data layer
Hey Brian, we know this is really important. Our beta label is mostly for the lack of pricing since the technology itself is production-ready. We're looking for more feedback and we aim to announce pricing soon.

What do you think about Urban Airship's model based on active monthly users? What we like is that the costs are obvious and map clearly to your business.

cloudmike··on Show HN: Simperium, a realtime data layer
Thanks for that, fixed.
cloudmike··on Show HN: Simperium, a realtime data layer
Latency is good right now (low hundreds or less), but for launch we focused on data integrity and reliability.

That leaves room for improvement, including some low hanging fruit like eventually giving you the ability to disable versioning for certain kinds of data (like multiplayer updates).

cloudmike··on Show HN: Simperium, a realtime data layer
I'll take number 3. Core Data one-to-many relationships are indeed handled automatically. On the JavaScript side, you'll see these relationships reflected in both directions using unique identifiers, but you need to interpret them accordingly. This is pretty straightforward using collections in libraries like Backbone.js.
cloudmike··on Show HN: Simperium, a realtime data layer
Thanks, really happy to hear it. We have a hipchat room (http://www.hipchat.com/gNs0OdqVJ) and a Simperium tag at StackOverflow (http://stackoverflow.com/tags/simperium/).

You can also reach us at contact@simperium.com.

cloudmike··on Show HN: Simperium, a realtime data layer
Simperium dev here. We're launching our beta to gather feedback. Let us know what you think.
cloudmike··on "He started programming when he was 6"
I think it's only the "wrong message" to people who aren't young anymore and don't program yet, which is most people. It makes programming seem less accessible.

To young people, I agree: start now.

I realize this seems circular, and there's probably a better way to make my point. My motivation is all the non-programmers I meet who think programming is scary. I don't believe it is (hence the mention of codecademy.com at the end of the post).

As for payment, you're right: making something people want is a better measurement of value, regardless of whether others pay for it, and even that's not a complete measurement of your ability. But Mozart made money early, which is why I mentioned it.

cloudmike··on "He started programming when he was 6"
I can see how you got that. My argument was somewhat unclear, but the point I was trying to make was that celebrating the age at which people started programming makes it seem less accessible to those who don't program. And I think that's counterproductive to the goal of encouraging more people to program at all ages (which is a goal you may or may not agree with).

The discussions below about sports are interesting, though. Lots of kids seem to play basketball even though (or arguably because) the stars are put on pedestals. But not everyone plays basketball.

cloudmike··on Nokia CEO: Nokia is "standing on a burning platform"
Nokia is standing where Nintendo once stood: struggling to hold market share against powerful juggernauts, and in dire need of a bold product that eschews conventional wisdom, challenges consumer's expectations, and tickles developers' imaginations.

The problem is that Apple already did that recently. The iPhone was Apple's Wii, and now it seems incredibly difficult for Nokia to innovate that much that quickly without creating something the world might not be ready for, like the N-Gage.

I hope they pull it off though. Respect for the candor in the memo.

← PreviousPage 2 of 3Next →