<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jan 26, 2015 at 5:49 PM, Summers Pittman <span dir="ltr"><<a href="mailto:supittma@redhat.com" target="_blank">supittma@redhat.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div><span class="">
<div>On 01/26/2015 11:37 AM, Lucas Holmquist
wrote:<br>
</div>
<blockquote type="cite">
<div>Perhaps we have already brought this up, but what
are we(our sync stuff) trying to be.</div>
<div><br>
</div>
<div>Are we trying to be Dropbox/google docs/etc….. or
something else(what that is i’m not sure).</div>
<div><br>
</div>
<div>What are our real use cases here?</div>
</blockquote></span>
Here are some simple ones that I want the sync server for<br>
* A Conference app user synchronizes a personalized schedule among
his devices<br>
* A Users preferences are restored / synchronized across his
devices (filtered by some kind of profile. IE phone preference,
tablet preferences, desktop preferences)<br></div></blockquote><div><br></div><div>these are (to me) the main ones</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div>
* A list of content is continually updated (think Facebook feed)<br>
<br>
So this gives us two usage patterns<br>
<br>
1. A single user-document synchronized across devices<br>
2. A single document synchronized across all user*devices.<br>
<br>
I don't think anyone has thought of some truly collaborative things
like Google docs where you have multiple users on multiple devices
editing multiple documents all with different permission tuples. <br>
<br>
Many things can be fit in these two scenarios however. In the
Dropbox use case you mention the "document" is the users files,
metadata, and their location. The actual data will probably be
hosted some place else. <br><div><div class="h5">
<br>
<blockquote type="cite">
<div><br>
</div>
<br>
<div>
<blockquote type="cite">
<div>On Jan 26, 2015, at 11:31 AM, Summers Pittman
<<a href="mailto:supittma@redhat.com" target="_blank">supittma@redhat.com</a>>
wrote:</div>
<br>
<div><span style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important">On
01/26/2015 11:26 AM, Randall Hauch wrote:</span><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">
<blockquote type="cite" style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">From this and previous threads, it sounds like
you’re targeting how multiple users could collaboratively
edit the same document. Essentially, this is like Google
Docs, though perhaps a bit lighter weight. Am I
misunderstanding the scenario? <br>
</blockquote>
<span style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important">Document is a
generic term. It is a wrapper around a JSON serializable<span> </span></span><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">
<span style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important">object.</span><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">
<blockquote type="cite" style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><br>
For example, would this kind of data sync be useful when
there are millions of shared documents/entities? For
example, a Yelp-like app would probably want to have an
entity/document for each restaurant or business, where
that document contained an aggregation of information
about that business. In my mind, these kinds of documents
are more akin to JPA entities — or rather akin to
aggregates of related JPA entity objects.<br>
</blockquote>
<span style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important">Yes ish.
Right now the sync server is very young, but we can model
the<span> </span></span><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">
<span style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important">data as a
single document and have the apps display views into it
and<span> </span></span><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">
<span style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important">make edits
appropriately. The trick will be making sure that the<span> </span></span><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">
<span style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important">serialization
is always the same (IE two clients aren't constantly<span> </span></span><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">
<span style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important">updating
because they serialize data in different orders)</span><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">
<blockquote type="cite" style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><br>
Best regards,<br>
<br>
Randall<br>
<br>
<br>
<blockquote type="cite">On Jan 26, 2015, at 9:38
AM, Summers Pittman <<a href="mailto:supittma@redhat.com" target="_blank">supittma@redhat.com</a>>
wrote:<br>
<br>
<br>
Summary (From my POV on Android):<br>
<br>
Sync Server doesn't use any authentication or
ownership tracking.<br>
GCM-XMPP bridge needs a lot of love<br>
We need to define a different connection lifecycle for
GCM.<br>
The in memory data store is problematic because
clients and servers<br>
must be stopped and started atomically<br>
We might want to show off syncing different types of
documents (i.e.<br>
a todo list in addition to Luke's hobbies)<br>
Fixing the GCM bridge is probably a couple weeks of
work to get it<br>
"solid". That will be a good alpha.1/preview to show
off.<br>
<br>
So Last week I put together a demo to try and stretch
the legs of the<br>
Android Sync Client APIs.<br>
<br>
It crashes, a lot. Which is a bit to be expected as the
code hasn't<br>
really be used for, well, anything until now. We will
get to that though.<br>
<br>
Here is the alpha.1 workflow. You log in and you see
your docs. You can<br>
edit your docs or you can create new ones. In the
future I would like<br>
to add sharing and collaboration but that's the future.
Here's a flow<br>
chart for the visual thinkers out there (with real
screen caps from the<br>
real working app)<br>
<br>
*<br>
<a href="https://docs.google.com/drawings/d/145XuutxR1yY0k81w2nIIy980itDIwxzH_gcDE3jLrvc/edit?usp=sharing" target="_blank">https://docs.google.com/drawings/d/145XuutxR1yY0k81w2nIIy980itDIwxzH_gcDE3jLrvc/edit?usp=sharing</a><br>
<br>
To make all of this work I use a RESTful server which
tracks a user's<br>
username and the documents they "own". The sync server
just syncs and<br>
serves the document you ask for. It has no
authentication and any doc<br>
you ask for you get to be an editor on.<br>
<br>
The client uses the GCM XMPP¹ bridge I wrote while drunk
on the side of<br>
a mountain and it shows. The biggest issue is that
shadows for<br>
documents aren't getting created right sometimes because
either 1) the<br>
client or server bounced and the data stores are no long
synced or 2)<br>
the server thinks there are more clients than actually
are connected.<br>
GCM-XMPP doesn't supply connection/disconnection
information like<br>
WebSockets will. Instead we just know that some
messages we sent a<br>
while ago weren't delivered. We need to figure out how
to turn this<br>
into connection and disconnection information in a way
that lets the<br>
shadows exist correctly.<br>
<br>
Another issue that needs to be addressed is using
something other than<br>
the Luke Skywalker hobbies document. (Or maybe showing
off multiple<br>
document types in the demo). I'm up for suggestions.<br>
<br>
Anyway, the principles (diff sync with a restful
documentId broker for<br>
security) are sound. I think we can buff out some
implementation<br>
details and have a good alpha/preview/poc release in the
few weeks -> 1<br>
month time frame for Android and the sync server.<br>
<br>
--<span> </span><br>
Summers Pittman<br>
<blockquote type="cite">
<blockquote type="cite">Phone:404 941 4698<br>
Java is my crack.<br>
</blockquote>
</blockquote>
<br>
<br>
Foot Notes:<br>
1. The sync server has two client connection
technologies : WebSockets<br>
and GCM-XMPP. Android uses the GCM-XMPP because it
takes all of the<br>
nasty connection handling code and gives let's Android
deal with it.<br>
More info here :
<a href="https://developer.android.com/google/gcm/ccs.html" target="_blank">https://developer.android.com/google/gcm/ccs.html</a><br>
<br>
_______________________________________________<br>
aerogear-dev mailing list<br>
<a href="mailto:aerogear-dev@lists.jboss.org" target="_blank">aerogear-dev@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/aerogear-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/aerogear-dev</a><br>
</blockquote>
<br>
_______________________________________________<br>
aerogear-dev mailing list<br>
<a href="mailto:aerogear-dev@lists.jboss.org" target="_blank">aerogear-dev@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/aerogear-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/aerogear-dev</a><br>
</blockquote>
<br style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">
<br style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">
<span style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important">--<span> </span></span><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">
<span style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important">Summers
Pittman</span><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">
<blockquote type="cite" style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">
<blockquote type="cite">Phone:404 941 4698<br>
Java is my crack.<br>
</blockquote>
</blockquote>
<br style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">
<span style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important">_______________________________________________</span><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">
<span style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important">aerogear-dev
mailing list</span><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">
<a href="mailto:aerogear-dev@lists.jboss.org" style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" target="_blank">aerogear-dev@lists.jboss.org</a><br style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">
<a href="https://lists.jboss.org/mailman/listinfo/aerogear-dev" style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" target="_blank">https://lists.jboss.org/mailman/listinfo/aerogear-dev</a></div>
</blockquote>
</div>
<br>
<br>
<fieldset></fieldset>
<br>
<pre>_______________________________________________
aerogear-dev mailing list
<a href="mailto:aerogear-dev@lists.jboss.org" target="_blank">aerogear-dev@lists.jboss.org</a>
<a href="https://lists.jboss.org/mailman/listinfo/aerogear-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/aerogear-dev</a></pre>
</blockquote>
<br>
<br>
<pre cols="72">--
Summers Pittman
>>Phone:404 941 4698
>>Java is my crack.
</pre>
</div></div></div>
<br>_______________________________________________<br>
aerogear-dev mailing list<br>
<a href="mailto:aerogear-dev@lists.jboss.org">aerogear-dev@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/aerogear-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/aerogear-dev</a><br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">Matthias Wessendorf <br><br>blog: <a href="http://matthiaswessendorf.wordpress.com/" target="_blank">http://matthiaswessendorf.wordpress.com/</a><br>sessions: <a href="http://www.slideshare.net/mwessendorf" target="_blank">http://www.slideshare.net/mwessendorf</a><br>twitter: <a href="http://twitter.com/mwessendorf" target="_blank">http://twitter.com/mwessendorf</a></div>
</div></div>