The biggest problem right now with online file storage services (sorry, I meant "The Cloud") is that while they all do basically the same stuff, there's no standard protocol for accessing them. It's a bit like if every website used a custom protocol instead of HTTP, and web browser vendors had to explicitly collaborate with each web site (or use the website's SDK) in order to be able to retrieve content.<p>Imagine this: All the major players in the space (Dropbox, Box, Google Drive, Skydrive, Sugarsync etc.) as well as app developers got together and came up with a standard way of doing this that makes it possible to use a single protocol & API for all online storage providers. I see this being a good thing for everyone - users can choose whatever service they want, app developers can easily provide their customers with a ton of options, and storage providers don't have to explicitly produce their own SDK or court developers to do integration with their service. We did have WebDAV, but that doesn't seem to be widely adopted by any of the major players.<p>I've been facing this problem myself with my own app; it's a lot of work to support all the major services and this is really just plumbing stuff that everyone would rather be taken care of so they can focus on the more important stuff. I had a meeting with Box recently where I proposed the idea of an open source framework for iOS which would provide a common native API that abstracts over all the different REST APIs used by different storage providers. The people I spoke to seemed quite open to the idea and agreed that it would be useful. I don't think a library like this would necessary be considered a bad thing by any of the major players, as it evens out the playing field and makes it easy to support different services.<p>If you're interested in taking part and/or using such an API in your iOS app, I'd love to hear your thoughts on the matter. I have some code already (which I haven't released yet) and am looking to clean up the API a bit, but I think it would be useful to a lot of developers.
I'd like to coin a modern update of Zawinski's Law[1]:<p><pre><code> Every software company attempts to expand until it
offers a cloud-based platform API. Those companies
which cannot do so are replaced by ones which do.
</code></pre>
[1]: <a href="http://en.wikipedia.org/wiki/Jamie_Zawinski#Zawinski.27s_law_of_software_envelopment" rel="nofollow">http://en.wikipedia.org/wiki/Jamie_Zawinski#Zawinski.27s_law...</a>
Something I don't get about Dropbox API: Why can't I just throw URLs at it?<p>If a user wants to save <thing at URL>, I have to pull it to my server and push it into Dropbox. Dropbox could just have grabbed it directly and in many cases, won't even have to thanks, to system-wide caching.<p>(This is based on the last time I looked at the API; maybe this is supported now, but I don't think so.)
Such an awesome idea. However, in light of the recent events the first thing to come up in my mind when I see "datastore" and a US corporation is "PRISM integration". I'd like to see proper encryption of Dropbox as the next feature, so that we - innocent users- are not uploading our data to the US government.
After quickly clicking through the api documentation I don't understand why I would use this over a hosted NoSql database like mongohq. I still like having additional options though.
"List – A special value that can contain other values, though not other lists."<p><a href="https://www.dropbox.com/developers/datastore/tutorial/ios#records" rel="nofollow">https://www.dropbox.com/developers/datastore/tutorial/ios#re...</a><p>Seems like a very significant limitation. No mechanism for storing hierarchical data structures. For example, this is certainly not capable of storing arbitrary JSON data as a Record.
As someone who has been playing around with Parse and Firebase SDKs (on Android), this seems to be the first one that offers full 2-way sync. I haven't actually used it yet but it seems that way due to the presence of conflict resolution [1]. I'm personally really excited about that for mobile side-projects and MVPs.<p>Parse has an offline cache, that only caches query results and not actual objects. So any local saves/updates are not reflected until you get network access again, unless you manually implement your own cache.<p>Firebase is better at handling realtime changes, but is lacking in any realtime capabilities at the moment. Also Firebase's mobile authentication SDK still isn't released yet so no way to handle users yet either.<p>[1]: <a href="https://www.dropbox.com/developers/datastore/tutorial/android#conflicts" rel="nofollow">https://www.dropbox.com/developers/datastore/tutorial/androi...</a>
So now app developers have a choice: they can use iCloud or Dropbox to manage distributed app state. Any iOS app developers (I'm not one) care to compare & contrast the two options?<p>It looks like Dropbox may be using Operational Transformation [0] to merge changes to lists:<p><i>Lists are special field values. They contain an ordered list of other values, though not other lists. Lists can be manipulated via four list operations: put (i.e. replace), move, insert, and delete. These list operations allow Dropbox to handle merging changes to the structure of the list automatically.</i> [1]<p>iCloud, on the other hand, uses the coarser, state-centric approach of whole document versioning. [2] (Edit: okay, key-value property versioning is also available.)<p>But iCloud lets the app control conflict resolution, while the Dropbox Datastore API only lets you choose from a predefined set of conflict resolution strategies. [3]<p>Which approach provides greater value to the app developer? Has Dropbox realized here that developers are just not comfortable implementing a custom merge strategy for entire documents, and not having to worry about this is worth some loss of control?<p>[0] <a href="http://en.wikipedia.org/wiki/Operational_transformation" rel="nofollow">http://en.wikipedia.org/wiki/Operational_transformation</a><p>[1] <a href="https://www.dropbox.com/developers/datastore/tutorial/ios#records" rel="nofollow">https://www.dropbox.com/developers/datastore/tutorial/ios#re...</a><p>[2] <a href="http://developer.apple.com/library/ios/#documentation/DataManagement/Conceptual/DocumentBasedAppPGiOS/ResolveVersionConflicts/ResolveVersionConflicts.html" rel="nofollow">http://developer.apple.com/library/ios/#documentation/DataMa...</a><p>[3] <a href="https://www.dropbox.com/developers/datastore/tutorial/ios#conflicts" rel="nofollow">https://www.dropbox.com/developers/datastore/tutorial/ios#co...</a>
For the iOS library specifically, I wonder if it would be possible to build a library that would (nearly) automatically map a core data store in to this Datastore API. If so, including such functionality would make the library a no-brainer for many.
Does anyone know of an OSS alternative to this similar to <a href="http://helios.io/" rel="nofollow">http://helios.io/</a> that supports Android/iOS?
What is the long term vision here? Is the idea that consumers will have little apps here and there that will procedurally interact with the owner's data on Dropbox? Or, is Dropbox making a product along the lines of S3 so that backends can consider using it too? I guess given how expensive space is at this point, that's not really an option.
So Dropbox is becoming a more-direct competitor with iCloud. Meh.<p>I'd rather they work on an end-to-end encryption system with a focus on ease of use.