<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body>
    <div class="moz-cite-prefix">On 01/26/2015 11:37 AM, Lucas Holmquist
      wrote:<br>
    </div>
    <blockquote
      cite="mid:5BF00158-B30E-416C-A75F-8EA34312903F@redhat.com"
      type="cite">
      <meta http-equiv="Content-Type" content="text/html;
        charset=ISO-8859-1">
      <div class="">Perhaps we have already brought this up,  but what
        are we(our sync stuff) trying to be.</div>
      <div class=""><br class="">
      </div>
      <div class="">Are we trying to be Dropbox/google docs/etc…..  or
        something else(what that is i’m not sure).</div>
      <div class=""><br class="">
      </div>
      <div class="">What are our real use cases here?</div>
    </blockquote>
    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>
     * 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>
    <br>
    <blockquote
      cite="mid:5BF00158-B30E-416C-A75F-8EA34312903F@redhat.com"
      type="cite">
      <div class=""><br class="">
      </div>
      <br class="">
      <div>
        <blockquote type="cite" class="">
          <div class="">On Jan 26, 2015, at 11:31 AM, Summers Pittman
            &lt;<a moz-do-not-send="true"
              href="mailto:supittma@redhat.com" class="">supittma@redhat.com</a>&gt;
            wrote:</div>
          <br class="Apple-interchange-newline">
          <div class=""><span style="font-family: Helvetica; font-size:
              12px; font-style: normal; font-variant: normal;
              font-weight: normal; letter-spacing: normal; line-height:
              normal; orphans: auto; text-align: start; text-indent:
              0px; text-transform: none; white-space: normal; widows:
              auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;
              float: none; display: inline !important;" class="">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;
              orphans: auto; text-align: start; text-indent: 0px;
              text-transform: none; white-space: normal; widows: auto;
              word-spacing: 0px; -webkit-text-stroke-width: 0px;"
              class="">
            <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; orphans: auto; text-align: start; text-indent:
              0px; text-transform: none; white-space: normal; widows:
              auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"
              class="">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 class="">
            </blockquote>
            <span style="font-family: Helvetica; font-size: 12px;
              font-style: normal; font-variant: normal; font-weight:
              normal; letter-spacing: normal; line-height: normal;
              orphans: auto; text-align: start; text-indent: 0px;
              text-transform: none; white-space: normal; widows: auto;
              word-spacing: 0px; -webkit-text-stroke-width: 0px; float:
              none; display: inline !important;" class="">Document is a
              generic term.  It is a wrapper around a JSON serializable<span
                class="Apple-converted-space"> </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;
              orphans: auto; text-align: start; text-indent: 0px;
              text-transform: none; white-space: normal; widows: auto;
              word-spacing: 0px; -webkit-text-stroke-width: 0px;"
              class="">
            <span style="font-family: Helvetica; font-size: 12px;
              font-style: normal; font-variant: normal; font-weight:
              normal; letter-spacing: normal; line-height: normal;
              orphans: auto; text-align: start; text-indent: 0px;
              text-transform: none; white-space: normal; widows: auto;
              word-spacing: 0px; -webkit-text-stroke-width: 0px; float:
              none; display: inline !important;" class="">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;
              orphans: auto; text-align: start; text-indent: 0px;
              text-transform: none; white-space: normal; widows: auto;
              word-spacing: 0px; -webkit-text-stroke-width: 0px;"
              class="">
            <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; orphans: auto; text-align: start; text-indent:
              0px; text-transform: none; white-space: normal; widows:
              auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"
              class=""><br class="">
              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 class="">
            </blockquote>
            <span style="font-family: Helvetica; font-size: 12px;
              font-style: normal; font-variant: normal; font-weight:
              normal; letter-spacing: normal; line-height: normal;
              orphans: auto; text-align: start; text-indent: 0px;
              text-transform: none; white-space: normal; widows: auto;
              word-spacing: 0px; -webkit-text-stroke-width: 0px; float:
              none; display: inline !important;" class="">Yes ish.
               Right now the sync server is very young, but we can model
              the<span class="Apple-converted-space"> </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;
              orphans: auto; text-align: start; text-indent: 0px;
              text-transform: none; white-space: normal; widows: auto;
              word-spacing: 0px; -webkit-text-stroke-width: 0px;"
              class="">
            <span style="font-family: Helvetica; font-size: 12px;
              font-style: normal; font-variant: normal; font-weight:
              normal; letter-spacing: normal; line-height: normal;
              orphans: auto; text-align: start; text-indent: 0px;
              text-transform: none; white-space: normal; widows: auto;
              word-spacing: 0px; -webkit-text-stroke-width: 0px; float:
              none; display: inline !important;" class="">data as a
              single document and have the apps display views into it
              and<span class="Apple-converted-space"> </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;
              orphans: auto; text-align: start; text-indent: 0px;
              text-transform: none; white-space: normal; widows: auto;
              word-spacing: 0px; -webkit-text-stroke-width: 0px;"
              class="">
            <span style="font-family: Helvetica; font-size: 12px;
              font-style: normal; font-variant: normal; font-weight:
              normal; letter-spacing: normal; line-height: normal;
              orphans: auto; text-align: start; text-indent: 0px;
              text-transform: none; white-space: normal; widows: auto;
              word-spacing: 0px; -webkit-text-stroke-width: 0px; float:
              none; display: inline !important;" class="">make edits
              appropriately.  The trick will be making sure that the<span
                class="Apple-converted-space"> </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;
              orphans: auto; text-align: start; text-indent: 0px;
              text-transform: none; white-space: normal; widows: auto;
              word-spacing: 0px; -webkit-text-stroke-width: 0px;"
              class="">
            <span style="font-family: Helvetica; font-size: 12px;
              font-style: normal; font-variant: normal; font-weight:
              normal; letter-spacing: normal; line-height: normal;
              orphans: auto; text-align: start; text-indent: 0px;
              text-transform: none; white-space: normal; widows: auto;
              word-spacing: 0px; -webkit-text-stroke-width: 0px; float:
              none; display: inline !important;" class="">serialization
              is always the same (IE two clients aren't constantly<span
                class="Apple-converted-space"> </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;
              orphans: auto; text-align: start; text-indent: 0px;
              text-transform: none; white-space: normal; widows: auto;
              word-spacing: 0px; -webkit-text-stroke-width: 0px;"
              class="">
            <span style="font-family: Helvetica; font-size: 12px;
              font-style: normal; font-variant: normal; font-weight:
              normal; letter-spacing: normal; line-height: normal;
              orphans: auto; text-align: start; text-indent: 0px;
              text-transform: none; white-space: normal; widows: auto;
              word-spacing: 0px; -webkit-text-stroke-width: 0px; float:
              none; display: inline !important;" class="">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;
              orphans: auto; text-align: start; text-indent: 0px;
              text-transform: none; white-space: normal; widows: auto;
              word-spacing: 0px; -webkit-text-stroke-width: 0px;"
              class="">
            <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; orphans: auto; text-align: start; text-indent:
              0px; text-transform: none; white-space: normal; widows:
              auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"
              class=""><br class="">
              Best regards,<br class="">
              <br class="">
              Randall<br class="">
              <br class="">
              <br class="">
              <blockquote type="cite" class="">On Jan 26, 2015, at 9:38
                AM, Summers Pittman &lt;<a moz-do-not-send="true"
                  href="mailto:supittma@redhat.com" class="">supittma@redhat.com</a>&gt;
                wrote:<br class="">
                <br class="">
                <br class="">
                Summary (From my POV on Android):<br class="">
                <br class="">
                  Sync Server doesn't use any authentication or
                ownership tracking.<br class="">
                  GCM-XMPP bridge needs a lot of love<br class="">
                  We need to define a different connection lifecycle for
                GCM.<br class="">
                  The in memory data store is problematic because
                clients and servers<br class="">
                must be stopped and started atomically<br class="">
                  We might want to show off syncing different types of
                documents (i.e.<br class="">
                a todo list in addition to Luke's hobbies)<br class="">
                  Fixing the GCM bridge is probably a couple weeks of
                work to get it<br class="">
                "solid".  That will be a good alpha.1/preview to show
                off.<br class="">
                <br class="">
                So Last week I put together a demo to try and stretch
                the legs of the<br class="">
                Android Sync Client APIs.<br class="">
                <br class="">
                It crashes, a lot.  Which is a bit to be expected as the
                code hasn't<br class="">
                really be used for, well, anything until now.  We will
                get to that though.<br class="">
                <br class="">
                Here is the alpha.1 workflow. You log in and you see
                your docs.  You can<br class="">
                edit your docs or you can create new ones.  In the
                future I would like<br class="">
                to add sharing and collaboration but that's the future.
                Here's a flow<br class="">
                chart for the visual thinkers out there (with real
                screen caps from the<br class="">
                real working app)<br class="">
                <br class="">
                 *<br class="">
                <a moz-do-not-send="true"
href="https://docs.google.com/drawings/d/145XuutxR1yY0k81w2nIIy980itDIwxzH_gcDE3jLrvc/edit?usp=sharing"
                  class="">https://docs.google.com/drawings/d/145XuutxR1yY0k81w2nIIy980itDIwxzH_gcDE3jLrvc/edit?usp=sharing</a><br
                  class="">
                <br class="">
                To make all of this work I use a RESTful server which
                tracks a user's<br class="">
                username and the documents they "own".  The sync server
                just syncs and<br class="">
                serves the document you ask for.  It has no
                authentication and any doc<br class="">
                you ask for you get to be an editor on.<br class="">
                <br class="">
                The client uses the GCM XMPP¹ bridge I wrote while drunk
                on the side of<br class="">
                a mountain and it shows.  The biggest issue is that
                shadows for<br class="">
                documents aren't getting created right sometimes because
                either 1) the<br class="">
                client or server bounced and the data stores are no long
                synced or 2)<br class="">
                the server thinks there are more clients than actually
                are connected.<br class="">
                GCM-XMPP doesn't supply connection/disconnection
                information like<br class="">
                WebSockets will.  Instead we just know that some
                messages we sent a<br class="">
                while ago weren't delivered.  We need to figure out how
                to turn this<br class="">
                into connection and disconnection information in a way
                that lets the<br class="">
                shadows exist correctly.<br class="">
                <br class="">
                Another issue that needs to be addressed is using
                something other than<br class="">
                the Luke Skywalker hobbies document.  (Or maybe showing
                off multiple<br class="">
                document types in the demo).  I'm up for suggestions.<br
                  class="">
                <br class="">
                Anyway, the principles (diff sync with a restful
                documentId broker for<br class="">
                security) are sound.  I think we can buff out some
                implementation<br class="">
                details and have a good alpha/preview/poc release in the
                few weeks -&gt; 1<br class="">
                month time frame for Android and the sync server.<br
                  class="">
                <br class="">
                --<span class="Apple-converted-space"> </span><br
                  class="">
                Summers Pittman<br class="">
                <blockquote type="cite" class="">
                  <blockquote type="cite" class="">Phone:404 941 4698<br
                      class="">
                    Java is my crack.<br class="">
                  </blockquote>
                </blockquote>
                <br class="">
                <br class="">
                Foot Notes:<br class="">
                1. The sync server has two client connection
                technologies : WebSockets<br class="">
                and GCM-XMPP.  Android uses the GCM-XMPP because it
                takes all of the<br class="">
                nasty connection handling code and gives let's Android
                deal with it.<br class="">
                More info here :
                <a class="moz-txt-link-freetext" href="https://developer.android.com/google/gcm/ccs.html">https://developer.android.com/google/gcm/ccs.html</a><br
                  class="">
                <br class="">
                _______________________________________________<br
                  class="">
                aerogear-dev mailing list<br class="">
                <a class="moz-txt-link-abbreviated" href="mailto:aerogear-dev@lists.jboss.org">aerogear-dev@lists.jboss.org</a><br class="">
                <a class="moz-txt-link-freetext" href="https://lists.jboss.org/mailman/listinfo/aerogear-dev">https://lists.jboss.org/mailman/listinfo/aerogear-dev</a><br
                  class="">
              </blockquote>
              <br class="">
              _______________________________________________<br
                class="">
              aerogear-dev mailing list<br class="">
              <a moz-do-not-send="true"
                href="mailto:aerogear-dev@lists.jboss.org" class="">aerogear-dev@lists.jboss.org</a><br
                class="">
              <a class="moz-txt-link-freetext" href="https://lists.jboss.org/mailman/listinfo/aerogear-dev">https://lists.jboss.org/mailman/listinfo/aerogear-dev</a><br
                class="">
            </blockquote>
            <br style="font-family: Helvetica; font-size: 12px;
              font-style: normal; font-variant: normal; font-weight:
              normal; letter-spacing: normal; line-height: normal;
              orphans: auto; text-align: start; text-indent: 0px;
              text-transform: none; white-space: normal; widows: auto;
              word-spacing: 0px; -webkit-text-stroke-width: 0px;"
              class="">
            <br style="font-family: Helvetica; font-size: 12px;
              font-style: normal; font-variant: normal; font-weight:
              normal; letter-spacing: normal; line-height: normal;
              orphans: auto; text-align: start; text-indent: 0px;
              text-transform: none; white-space: normal; widows: auto;
              word-spacing: 0px; -webkit-text-stroke-width: 0px;"
              class="">
            <span style="font-family: Helvetica; font-size: 12px;
              font-style: normal; font-variant: normal; font-weight:
              normal; letter-spacing: normal; line-height: normal;
              orphans: auto; text-align: start; text-indent: 0px;
              text-transform: none; white-space: normal; widows: auto;
              word-spacing: 0px; -webkit-text-stroke-width: 0px; float:
              none; display: inline !important;" class="">--<span
                class="Apple-converted-space"> </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;
              orphans: auto; text-align: start; text-indent: 0px;
              text-transform: none; white-space: normal; widows: auto;
              word-spacing: 0px; -webkit-text-stroke-width: 0px;"
              class="">
            <span style="font-family: Helvetica; font-size: 12px;
              font-style: normal; font-variant: normal; font-weight:
              normal; letter-spacing: normal; line-height: normal;
              orphans: auto; text-align: start; text-indent: 0px;
              text-transform: none; white-space: normal; widows: auto;
              word-spacing: 0px; -webkit-text-stroke-width: 0px; float:
              none; display: inline !important;" class="">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; orphans: auto; text-align: start; text-indent:
              0px; text-transform: none; white-space: normal; widows:
              auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"
              class="">
            <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; orphans: auto; text-align: start; text-indent:
              0px; text-transform: none; white-space: normal; widows:
              auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"
              class="">
              <blockquote type="cite" class="">Phone:404 941 4698<br
                  class="">
                Java is my crack.<br class="">
              </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;
              orphans: auto; text-align: start; text-indent: 0px;
              text-transform: none; white-space: normal; widows: auto;
              word-spacing: 0px; -webkit-text-stroke-width: 0px;"
              class="">
            <span style="font-family: Helvetica; font-size: 12px;
              font-style: normal; font-variant: normal; font-weight:
              normal; letter-spacing: normal; line-height: normal;
              orphans: auto; text-align: start; text-indent: 0px;
              text-transform: none; white-space: normal; widows: auto;
              word-spacing: 0px; -webkit-text-stroke-width: 0px; float:
              none; display: inline !important;" class="">_______________________________________________</span><br
              style="font-family: Helvetica; font-size: 12px;
              font-style: normal; font-variant: normal; font-weight:
              normal; letter-spacing: normal; line-height: normal;
              orphans: auto; text-align: start; text-indent: 0px;
              text-transform: none; white-space: normal; widows: auto;
              word-spacing: 0px; -webkit-text-stroke-width: 0px;"
              class="">
            <span style="font-family: Helvetica; font-size: 12px;
              font-style: normal; font-variant: normal; font-weight:
              normal; letter-spacing: normal; line-height: normal;
              orphans: auto; text-align: start; text-indent: 0px;
              text-transform: none; white-space: normal; widows: auto;
              word-spacing: 0px; -webkit-text-stroke-width: 0px; float:
              none; display: inline !important;" class="">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; orphans: auto; text-align: start; text-indent:
              0px; text-transform: none; white-space: normal; widows:
              auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"
              class="">
            <a moz-do-not-send="true"
              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;
              orphans: auto; text-align: start; text-indent: 0px;
              text-transform: none; white-space: normal; widows: auto;
              word-spacing: 0px; -webkit-text-stroke-width: 0px;"
              class="">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;
              orphans: auto; text-align: start; text-indent: 0px;
              text-transform: none; white-space: normal; widows: auto;
              word-spacing: 0px; -webkit-text-stroke-width: 0px;"
              class="">
            <a moz-do-not-send="true"
              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;
              orphans: auto; text-align: start; text-indent: 0px;
              text-transform: none; white-space: normal; widows: auto;
              word-spacing: 0px; -webkit-text-stroke-width: 0px;"
              class="">https://lists.jboss.org/mailman/listinfo/aerogear-dev</a></div>
        </blockquote>
      </div>
      <br class="">
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
aerogear-dev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:aerogear-dev@lists.jboss.org">aerogear-dev@lists.jboss.org</a>
<a class="moz-txt-link-freetext" href="https://lists.jboss.org/mailman/listinfo/aerogear-dev">https://lists.jboss.org/mailman/listinfo/aerogear-dev</a></pre>
    </blockquote>
    <br>
    <br>
    <pre class="moz-signature" cols="72">-- 
Summers Pittman
&gt;&gt;Phone:404 941 4698
&gt;&gt;Java is my crack.
</pre>
  </body>
</html>