U.S. patent application number 14/579892 was filed with the patent office on 2015-06-18 for systems and methods for managing user-specific modifications to shared content on an individual basis.
The applicant listed for this patent is NetApp, Inc.. Invention is credited to Abraham Benjamin de Waal, Gary King, Nick Triantos.
Application Number | 20150172234 14/579892 |
Document ID | / |
Family ID | 46051327 |
Filed Date | 2015-06-18 |
United States Patent
Application |
20150172234 |
Kind Code |
A1 |
Triantos; Nick ; et
al. |
June 18, 2015 |
SYSTEMS AND METHODS FOR MANAGING USER-SPECIFIC MODIFICATIONS TO
SHARED CONTENT ON AN INDIVIDUAL BASIS
Abstract
System and methods for managing content modification messages
are provided. In some embodiments, a request to send a modification
message to a second user is received from a first user. The request
to send the modification message pertains to a modification made to
a first user-specific version corresponding to the first user and
represented by a first delta. The modification message comprising a
second delta is generated. The modification message includes second
instructions to modify a second user-specific version to include
the modification within the second user-specific version by
resolving the first delta and the first user-specific version to
the second user-specific version. A message indicator for the
modification message is provides to a client device of the second
user. The message indicator identifies the first user as the sender
of the modification message.
Inventors: |
Triantos; Nick; (Woodside,
CA) ; de Waal; Abraham Benjamin; (San Jose, CA)
; King; Gary; (Los Altos, CA) |
|
Applicant: |
Name |
City |
State |
Country |
Type |
NetApp, Inc. |
Sunnyvale |
CA |
US |
|
|
Family ID: |
46051327 |
Appl. No.: |
14/579892 |
Filed: |
December 22, 2014 |
Related U.S. Patent Documents
|
|
|
|
|
|
Application
Number |
Filing Date |
Patent Number |
|
|
13393204 |
Feb 28, 2012 |
8954520 |
|
|
PCT/US2011/060466 |
Nov 11, 2011 |
|
|
|
14579892 |
|
|
|
|
61413305 |
Nov 12, 2010 |
|
|
|
61413337 |
Nov 12, 2010 |
|
|
|
61413333 |
Nov 12, 2010 |
|
|
|
61413295 |
Nov 12, 2010 |
|
|
|
Current U.S.
Class: |
715/752 |
Current CPC
Class: |
H04L 51/046 20130101;
G06Q 10/103 20130101; G06F 3/04842 20130101 |
International
Class: |
H04L 12/58 20060101
H04L012/58; G06F 3/0484 20060101 G06F003/0484 |
Claims
1. A method comprising: receiving a request to send a modification
message from a first user of a plurality of users to a second user
of the plurality of users, each user of the plurality of users
having access to a user-specific version of a master content, the
request to send the modification message pertaining to a selected
modification of a plurality of modifications made to a first
user-specific version corresponding to the first user and
represented by a first delta, the modification message to be
addressed to the second user of the plurality of users; generating
the modification message comprising a second delta including
instructions to modify a second user-specific version corresponding
to the second user to include the selected modification within the
second user-specific version by resolving the first delta and the
first user-specific version to the second user-specific version;
and providing, to a client device of the second user, a message
indicator for the modification message, the message indicator
identifying the first user as the sender of the modification
message.
Description
RELATED APPLICATIONS
[0001] This patent application is a Continuation of U.S. patent
application Ser. No. 13/393,204, entitled "SYSTEMS AND METHODS FOR
MANAGING USER-SPECIFIC MODIFICATIONS TO SHARED CONTENT ON AN
INDIVIDUAL BASIS", filed Feb. 28, 2012; which is a U.S. National
Stage Filing Under 35 U.S.C. .sctn.371 from and claims benefit of
priority under 35 U.S.C. .sctn.120 to International Patent
Application No. PCT/US2011/060466, entitled "SYSTEMS AND METHODS
FOR MANAGING CONTENT MODIFICATION MESSAGE," filed on Nov. 11, 2011;
which claims the benefit of priority, under 35 U.S.C. Section
119(e), to U.S. Provisional Patent Application Ser. No. 61/413,295,
entitled "CO-LOCALITY DETECTION FOR CONTENT DELIVERY," filed on
Nov. 12, 2010; U.S. Provisional Patent Application Ser. No.
61/413,305, entitled "MESSAGING SYSTEM FOR CONTENT MODIFICATIONS,"
filed on Nov. 12, 2010; U.S. Provisional Patent Application Ser.
No. 61/413,337, entitled "OPERATIONAL TRANSFORMS TO THE SUPPORT
DIVERGENT EDITING AND MERGING OF CONTENT," filed on Nov. 12, 2010;
and U.S. Provisional Patent Application Ser. No. 61/413,333,
entitled "HIGH WATERMARKING FOR CONTENT PRESENTATION," filed on
Nov. 12, 2010; the aforementioned applications are being hereby
incorporated by reference in its entirety for all purposes.
COPYRIGHT NOTICE
[0002] A portion of the disclosure of this patent document contains
material that is subject to copyright protection. The copyright
owner has no objection to the facsimile reproduction by anyone of
the patent document or the patent disclosure, as it appears in the
Patent and Trademark Office patent files or records, but otherwise
reserves all copyright rights whatsoever. The following notice
applies to the software and data as described below and in the
drawings that form a part of this document: Copyright 2010, 2011,
ionGrid, Inc. All Rights Reserved.
TECHNICAL FIELD
[0003] This patent document pertains generally to the networked
communications and more particularly, but not by way of limitation,
to methods and systems for content delivery and presentation.
BACKGROUND
[0004] The increasingly widespread adoption of technology to
support collaborative work on the authoring and review of
electronic content (e.g., documents, presentations, etc.) has
presented to a number of technical challenges, ranging from
security challenges to resolving conflicts between competing edits
to content from multiple authors.
[0005] In existing collaboration systems, each user receives a copy
of the content that can be viewed and modified by the user. When
one user modifies the copy, every other copy of that content is
also modified using operational transforms. The communication of
modifications results in a sequence of versions that do not vary
from copy to copy. Thus a document, through modifications, can be
represented by a single, serial progression of versions.
BRIEF DESCRIPTION OF THE DRAWINGS
[0006] Some embodiments are illustrated by way of example and not
limitation in the figures of the accompanying drawings.
[0007] FIG. 1 is a block diagram illustrating a content sharing
environment according to one example embodiment.
[0008] FIG. 2 is a multi-lane flow diagram depicting example
operations according to an example embodiment.
[0009] FIG. 3 is a user interface diagram illustrating an example
user interface that may be presented by a content access client,
executing on a client device.
[0010] FIG. 4 is a user interface diagram illustrating an example
user interface that may be displayed on a client device of a
presenting user.
[0011] FIG. 5 illustrates the application of two instances of
annotation data (as example modifications) to different slides of a
PowerPoint presentation.
[0012] FIG. 6 is a node diagram that provides a diagrammatic
representation of the divergence and convergence (or merging) of
multiple versions of a shared content item.
[0013] FIG. 7 is a diagrammatic representation of a user interface
and illustrates an example method whereby the merging of the first
and second versions of content by a user may be facilitated.
[0014] FIG. 8 is a block diagram of machine in the example form of
a computer system within which instructions, for causing the
machine to perform any one or more of the methodologies discussed
herein, may be executed.
DETAILED DESCRIPTION
[0015] In the following description, for purposes of explanation,
numerous specific details are set forth in order to provide a
thorough understanding of some example embodiments. It will be
evident, however, to one skilled in the art that the present
inventions may be practiced without these specific details. In this
description, the word "or" is used as an inclusive disjunction
unless otherwise noted. Further, the terms "copy of the content"
and "content" are used interchangeably.
[0016] A content access server provides electronic content to one
or more users in the context of a real-time or face-to-face
meeting, in a synchronous or asynchronous collaboration between
users, or in other contexts. The content access server may receive
modifications from more than one user. Instead of incorporating all
of the modifications into a master copy of the content, the content
access server stores each modification in connection with the user
making the modification. The modifications are stored by the
content access server as a delta, or change, to the content. The
user, by making modifications, thus creates a version of the
content that is specific to the user. When the user accesses his
version of the content, the content access system reconstructs the
user's version by applying the deltas to the content.
[0017] In some instances, the user may share his modifications to
the document with another user. The modification is sent as a
message within the content and depicts the modification made by the
first user to the first user's version. However, the recipient user
may have a version of the content that is different from the
sending user by virtue of modifications previously made by the
recipient user. In these instances, the content access server
transforms the sent modification so that it appears correctly in
the recipient user's version. Upon receiving the transformed
modification, the second user may include the modification in his
version or reject the modification. Regardless, the sending user's
version includes the sent modification.
[0018] In other instances, two or more users may want to compare
their versions with each other. The content access server may
provide an interface showing the various modifications made by the
users. Each user may select which modifications to include in his
version.
[0019] Copies of the content may be provided in a real-time
collaboration where a presenter is presenting the content in a
particular order. A high water marking function allows the
presenter to prevent other users from skipping ahead to view
portions of the content that have not yet been presented. The high
water marking function further allows participants who are
reviewing portions of the content that have already been presented
to skip ahead to the portion of the content that is currently being
presented by the presenter.
[0020] FIG. 1 is a block diagram illustrating a content sharing
environment 100, according to one example embodiment. The content
sharing environment 100 includes one or more content access servers
102 that are coupled by a network (e.g., the Internet) to multiple
client devices 108A-108E, in the example form of tablet computing
devices. While some example embodiments described herein with
reference to tablet computing devices (e.g., iPad), other
embodiments may deploy other types of client media devices, such as
mobile telephones, laptop computers, desktop computers, gaming
systems, set top boxes, or any other media presentation device.
[0021] The content access server 102 accesses content 110 stored in
a persistent storage system 104. The content access server 102 may
store many instances of content 110 accessible by one or more users
via the content access server 102. The content 110 may be an
electronic document, an electronic presentation, an electronic
spreadsheet, or any other type of electronic content. The
persistent storage system 110 may be network attached storage
(NAS), a SharePoint platform, or a database in a relational
database management system based on structured query language
(SQL). The persistent storage system 104 may include metadata data
records associated with the content 110.
[0022] The content access server 102, as depicted, includes a copy
of the content 110 provided to one or more users, labeled master
content 110A. In some implementations, the content access server
102 may not generate a copy of the content 110 and instead access
the content 110 as needed. The content access server 102, in
response to a request for content 110 from a client device 108,
sends a copy of the content 110B to a client device 108 via a
network. As discussed later, the content 110B may include one or
more modifications not included in content 110A.
[0023] The client device 108 comprises a content access client 118.
The content access client 118 may be hardware, software, or a
combination thereof installed on the client device 108. In some
instances, the content access client 118 is a stand-alone web
application. The content access client 118, in some embodiments,
may be accessed using a web browser installed in the client device
108. A content presentation module 120 may display the content 110B
to the user of the client device 108. The content presentation
module 120 may further provide a graphical user interface that
allows a user to make modifications to the content 110B. The
content access client 118 assigns a universal unique identifier
(UUID) 122 that uniquely identifies the content 110B and may be
associated with access client 118, the user of the client device
108, or the master version of the content (e.g., content 110) being
modified.
[0024] The user, using the client device 108, may make one or more
modifications to the content 110B via the content presentation
module 120. The modifications made to the content 110B are recorded
as deltas 124 by the client device 108. The deltas may be generated
by the content access client 118 using operational transformations.
The content 110B is a version of the content 110A and includes the
content 110 and the modifications to the content added by the user.
The deltas 124, along with the UUID 122, are transmitted to the
content access server 102.
[0025] The user may further request, via the content presentation
module 120, that one or more modifications made by the user are
shared with another user. For example, a user of client device 108A
may request that a modification, DELTA.sub.0, be shared with a user
using client device 108B. The content access client 118 of user
client device 108A sends the share request to the content access
server 102.
[0026] At the content access server 102, a delta manager 114
receives the deltas and requests to share modifications. The delta
manager 114, upon receiving deltas from a user device 108, stores
the received delta 124 in a modification database 106. The
modification database 106 may include one or more tables 116 in
which the deltas are stored. As depicted, the table 116 may include
entries for the UUID of the content being modified and the delta
124 received. The table 116 may include additional or alternative
entries for modification data such as a timestamp of the delta
(e.g., when the delta was created or accepted by the user, or when
the delta was received by the delta manager 114); other identifiers
of the user, the user device 108, the content version 110B; or
other information about the delta 124.
[0027] In instances where one user has shared a modification with
another user, the delta manager 112 forwards the delta 124, the
identifier of the recipient user, and the UUID of the content 110B
to the delta resolver 112. The delta resolver 112 identifies a
version of the content 110 corresponding to the recipient user
having a second UUID. The recipient user may have made
modifications to his content version of the master content 110A.
However, the delta 124 sent by the sending user reflects the
modification in relation to the sending user's content version
110B. Because the recipient user has made modifications to his copy
of the content, simply applying the delta 124 to the recipient
user's content version would not accurately depict the sending
user's modification in the recipient user's content version. The
delta resolver 112 therefore resolves the sent modification to the
recipient user's content version. The delta resolver 112 may
resolve the delta using operational transformations. The delta
resolver 112 then sends the resolved delta to the delta manager
114.
[0028] The delta manager 114 then transmits the resolved delta to
the recipient client device 108B. The content access client 118 on
the recipient client device 108B displays the modification
indicated by the resolved delta within the content version of
recipient to the recipient user. The content access client 118 may
further provide a user interface that allows the recipient user to
accept or reject the modification. If the recipient user accepts
the modification, the content access client transmits an indication
is sent to the delta manager 114 that then associates the resolved
delta with the UUID of the content version of the recipient in
table 116. If the recipient user rejects the modification, the
resolved delta is not stored in the table 116.
[0029] In an example embodiment, a user of the client device 108C
may wish to share, or collaborate in the editing and review of,
content with the users of client devices 108D and 108E. Consider an
example scenario in which an authorizing user of the client device
108C wishes to share content 110 (e.g., a PowerPoint presentation)
with each of the users of the client devices 108D and 108E. The
content may, as shown in FIG. 1, be stored in a database 104
accessible by the content access server 102. The content 110 (or at
least portions of the content 110) may also reside on the client
device 108C. At a high level, in order to share (e.g., as a
synchronized presentation) the content 110 between the devices
108C-108E (with the user of device 108C being the authorizing user
and presenter), the client device 108C may be used to generate
and/or communicate a shared key. The shared key may be dynamically
generated using one of a number of techniques, or may be an
existing key. The shared key is then shared by the authorizing user
with other users that are participating, for example, in a meeting
in which the authorizing user is to present the content 110.
[0030] The authorizing user of the client device 108C, having
generated (or accessed) a shared key, communicates the shared key
(K1) and a content identifier (UUID) to the content access server
102 via the network. The shared key and the content identifier are
received via an interface (e.g., an API) of the content access
server 102 and stored in the modification database 106 that is
accessible via the content access server 102. The modification
database 106 may store a mapping of content identifiers to shared
keys, in the example form of the table 116. In one example, a UUID
is a directory lookup entry for content. Separate authorization
systems (not described here) may be deployed to ensure that clients
may truly access the content and to what extent (e.g., according to
business/security policies).
[0031] In further examples, policies may be extended to apply to
particular modifications based on a role of the user making the
modification. For example, a presentation may involve participants
from two separate organizations. While each participant may have
access to the same content, various policies may be enforced to
limit the sending of modification messages between participants
affiliated with different organization. For example, a participant
whose role indicates an affiliation with organization A may not be
permitted to send modification messages to any participant whose
role indicates an affiliation with organization B.
[0032] The authorizing user of the client device 108C further
shares the shared key with authorized users of the client devices
108D and 108E. The shared key is then provided from each of the
authorized client devices 108D and 108E to the content access
server 102. Responsive to receiving the shared key, the content
identifier for the shared content is delivered to the client
devices 108D and 108E from the content access server 102, so as to
enable access via these devices to the shared content. The access
provided to the content 110 may, for example, be streaming access
from the content access server 102, or may be access to a version
(or at least portion of a version) of the content 110 that is
downloaded and stored locally at each of the client devices 108D
and 108E. Further, while the content 110 is show in FIG. 1 to be
stored in a content database 104 accessible via the content access
server 102, in other example embodiments the content 110 may be
stored separately from the content access server 102 (e.g., on a
content distribution network (CDN)), and may be retrieved and made
accessible to the client devices 108C through 108E on the CDN using
the content identifier.
[0033] From the perspective of the content access server 102,
authorization (or verification) data in the form of a shared key
and associated content identifier are received from an authorizing
device (e.g., client device 108C), the content identifier
identifying content to be shared by the authorizing user with
authorized user devices. In one example embodiment, the
authorization or verification information may constitute
participation verification information that may be used to
authenticate and verify participation within a content sharing
meeting that the authorizing user is facilitating.
[0034] The shared key having been shared by the authorizing user
with authorized users, the shared key is received at the content
access server 102 from each of a number of authorized client
devices. Responsive to receipt of the shared key, the content
access server 102 authorizes (and may provide) access to the shared
content. To this end, the content access server 102 provides the
content identifier to each of these authorized user devices, using
which each of the authorized user devices can access the shared
content 110.
[0035] FIG. 2 is a multi-lane flow diagram depicting example
operations 200 according to an example embodiment. The operations
200 cause a modification generated by a user to be recorded in the
table 116 for later retrieval and a modification to be sent to a
recipient user as a message. The operations 200 may be performed by
the content access server 102 and the client devices 108 (e.g.,
client devices 108A and 108B).
[0036] In an operation 202 performed by the client device 108A, the
current user version of content (e.g., content 110) is displayed to
the user. The current user version may be a copy of the content
master 110A or may be generated from the content master 110A and
include earlier modifications made by the user to the content
master 110A. The earlier modifications may be stored in the
modifications database 106 in the table 116. To generate the
current user version, the delta manager 114 may retrieve the deltas
corresponding to the UUID of the content and the user.
[0037] In an operation 204, the user of the client device 108A
modifies the current user version of the content 110, causing the
content access client 108 to generate a first delta to record an
indication of the modification. The first delta may be generated
using an operational transformation.
[0038] In an operation 206, the user may designate one or more
recipient users to whom to send the modification in the form of a
modification message. The content access client 108 identifies the
recipient users. In an operation 208, at least the first delta and
the recipient identifiers are transmitted via a network to the
content access server 102.
[0039] At the content access server 102, the delta manager 114
records the first delta corresponding to the current user version
in an operation 210. The next time the user accesses the current
user version, the current user version will include the
modification.
[0040] For each recipient of the modification message, the
operations 212 through 224, described below, are repeated.
[0041] In an operation 212, the first delta is resolved with the
current recipient version of the content 110 to generate a second
delta associated with the recipient. The second delta may be
generated using operational transformation by the data resolver
112. For each recipient, a new delta is generated based on the
current version of the content 110 corresponding to each recipient.
In an operation 214, the second delta is sent to the client device
108B of the recipient user.
[0042] In operation 216, the current recipient version of the
recipient is accessed. Like operation 202, the current recipient
version is generated based on the content 110 and one or more
deltas stored in association with the recipient user. Operation 216
may be performed before the second delta is received or after the
second delta is received (operation 214). In some instances, the
sending user and the recipient user may be concurrently viewing the
content. In other instance, the recipient user may be viewing the
content some time after the sending user made the modification.
[0043] In operation 218, the modification is displayed to the
recipient at the client device 108B. The modification may take the
graphical form of a message or some other graphical form. The
message may include an option that allows the recipient user to
accept or reject the modification.
[0044] In some instances, the recipient may delay accepting or
rejecting modifications. In these instances, as messages are
received, a message count indicator may be displayed adjacent to a
displayed sender identifier. Upon selecting the message count
indicator, the modification messages sent to the recipient are
displayed to the recipient. Until the recipient affirmatively
approves the modification, the modification is not incorporated in
to the current version of the recipient. In instances where the
modification messages are accepted out of order or as a batch, the
second delta corresponding to each modification may be updated
using operational transformations or according to the process
detailed in FIG. 7 and the accompanying description.
[0045] In an operation 220, a determination is made as to whether
the recipient has accepted the modification. If the modification
was accepted, in operation 222, the current recipient version is
updated to include the second delta at the content access server
102. If the modification was not accepted, in operation 224, no
change is made to the current recipient version at the content
access server 102.
[0046] In some instances, with reference to FIG. 1, and considering
a situation in which multiple users are collaboratively viewing the
shared content 110 using respective client devices 108 (e.g.,
viewing a PowerPoint presentation be controlled from an
authorization client device 108C), certain of the attendees may
wish to provide a presenter with feedback regarding the shared
content, while viewing a particular section of segment of the
shared content and while the feedback is still fresh in their
minds. At the same time, the attendees may not wish to interrupt
the presentation in order to provide such feedback.
[0047] According to an example embodiment, there is provided a
method and system to enable messaging of modifications with respect
to a current user version of the content. The modification may
comprise annotation and comment information relating to the
content, and/or instructions regarding the modification of the
content itself (e.g., insertions, additions or changes to the
content). Further, the modification is communicated to an intended
recipient in the form of a message as depicted in FIG. 2, which the
recipient can selectively accept in order to have the modification
information applied to a specific content item. To this end, a
modification message, in addition to including modification
information as a payload, may comprise addressee information,
addressor information and a content identifier (e.g., a UUID)
identifying content to which the modification is to be applied.
[0048] FIG. 3 is a user interface diagram illustrating an example
user interface 300 that may be presented by a content access client
118, executing on a client device 108. In one embodiment, the user
interface 300 may be generated by a content presentation module 120
that is instantiated on the client device 108 by the content access
client 118. The user interface 300 is shown to include a background
302, and a canvas 304 displaying content, in the example form of a
graphic 306. A user, using an input device such as a touch screen,
mouse or keyboard, may generate modification data with respect to
the displayed content. In the illustrated example, using a touch
screen, a user is shown to have provided annotation data 308 in the
example of the word "SHIP", which identifies subject matter of the
displayed content image.
[0049] The user interface 300 is also shown to display addressee
information, in the example form of a buddy list 310. In one
example embodiment, the annotating user may select a recipient for
the modification data (e.g., the annotation) by dragging and
dropping the annotation on (or by gesturing the annotation in the
direction of) a user icon in the buddy list. Accordingly, the
content access client 118 is able to associate of the modification
data with both content (e.g., a displayed image) and a recipient,
and to compose a modification message using this information. In
another example embodiment, the modification data may apply
directly to the content. For example, where the displayed content
is a text document, the modification data may reflect edits to the
text document made by a viewing user. In this case, the
modification data may be converted into a set of instructions to
modify the displayed content, and this set of instructions then
included in the modification message.
[0050] FIG. 4 is a user interface diagram illustrating an example
user interface 400, according to an example embodiment, that may be
displayed on a client device 108 of a presenting user. The
interface 400 includes a background 402, and a canvas 404 in which
a content item is displayed. Further, a modification message inbox
panel 406 displays a set of message indicators in the forms of
icons, each representative of a received modification message from,
for example, attendees of a presentation of the content item. User
icons may be displayed in association with message icons to provide
a visual identification of the respective senders of the
modification messages. User selection of a particular modification
message, in one embodiment, causes the modification information of
the selected message to be applied to the content of displayed in
the canvas 404. A presenting user may thus select and deselect one
or more messages from the inbox panel 406 to apply and unapply
modification information to a displayed content item. Where
multiple modification messages are activated and applied, the
modifications may be displayed in an overlaid manner.
[0051] In a further example embodiment, each modification message
may apply to multiple segments or pieces of a content item (e.g.,
to multiple slides of a PowerPoint presentation). Accordingly, a
viewing user may collect modification data relating to multiple
slides of a PowerPoint presentation on his or her client device,
and send this collected modification data to a particular recipient
in a single modification message. FIG. 5 illustrates the
application of two instances of annotation data 502 (as an example
of modification data) to different slides 504 of a PowerPoint
presentation.
[0052] It will be appreciated that the modification messaging
system and methodology described above enables a viewing user to
communicate modification information to a presenting user in a
non-intrusive manner, and while faults pertaining to displayed
content of fresh in the mind of the viewing user. A presenting user
is also able to accumulate feedback from multiple viewing users in
a real-time, during a presentation, without having such feedback
interrupt the presentation. Of course, should a presenting user
wish to pause presentation to consider accumulated feedback (or at
least feedback from an important viewing user) at any point during
a presentation, the presenting user has the option to do so.
[0053] FIG. 6 is a node diagram 600 that provides a diagrammatic
representation of the divergence and convergence (or merging) of
multiple versions of a shared content item (e.g., a PowerPoint
presentation, word document etc.). Each node is associated with a
different version of a particular content item, and has an
associated content identifier, in the example form of a UUID. A
master version 610 of the content (e.g., master content 110A) is
shown to be modified to generate a first modified version 612,
subsequent to which divergent modifications generate second and
third modified versions 614 and 616. For example, subsequent to the
generation of the modified version 612, this version of the content
item may have been locally stored on respective client devices 108,
and then subject to different modifications in order to generate
the modified versions 614 and 616. A further divergence is shown to
have occurred with respect to version 618, in order to generate
versions 620 and 622.
[0054] In a further example embodiment, it may be desirable to
automatically merge modified versions of shared content (e.g.,
version 620, 622, and 624). In one example embodiment, the content
access server 102, shown in FIG. 1, may include merge logic (not
shown) that performs an automated merge function using operational
transforms. Specifically, the merge logic may receive, from
respective client devices 108, divergent versions of shared content
110 that have been modified by users of the client devices 108. The
modification of shared content may result in the allocation of a
new content identifier (e.g., UUID) for the modified version. A
content access client 118, hosted on a client device 108, may
generate a new content identifier for content 110 locally stored
each time that the content 110 is saved. The content access client
118 may further implement a versioning system, where different
versions of the shared content are stored, each version with a
unique content identifier.
[0055] Returning to the above example, once the versions 620, 622,
and 624 having been generated, merge logic on the content access
server 102 may be deployed to merge these divergent versions.
Specifically, the merge logic uses operational transforms,
supplemented by policy enforcement, to merge the versions 620, 622,
and 624 (these diversions having diverged as a result of separate
offline modifications) as shown in FIG. 6 to generate merged
version 626. Accordingly, the operational transforms are used, not
to resolve online conflicts that result from users simultaneously
editing the document, but to perform the merging of different
versions of content that may have been modified separately and
offline, in a non-collaborative manner. A conflict resolution
policy may be used to resolve a conflict situations, by giving
priority to modifications made by a particular user (e.g., based on
seniority), or based on other criteria such as date and time,
geolocation etc.
[0056] According to some example embodiments, there may be a need
to merge divergent versions of common original shared content
without using operational transforms. Consider an example in which
shared content is made accessible to client devices 108 within the
context of the environment shown in FIG. 1, with respective copies
of shared content 110 being stored on each of the respective client
devices 108. Each of the users of the client devices 108D and 108E
may be enabled, a via a content access client 118, to edit locally
stored copies (or versions) of the shared content 110. This may be
particularly desirable in situations where a network connection to
a common version of the shared content 110 cannot be maintained
(e.g., when a user is traveling on an aircraft that does not
provide Internet access for network connectivity). The merging of
divergent versions (or copies) of shared content may present a
number of technical challenges. The manual merging, according to
example embodiments, of such divergent versions of shared content
is discussed below.
[0057] FIG. 7 is a diagrammatic representation of a user interface
700, and illustrates an example method whereby the manual or
semi-automatic merging of the first and second versions of content
by a user may be facilitated. Within the context of the user
interface 700 (which may be generated by the content presentation
module 120 of a content access client 118 hosted on a client device
108 or by a merge module (not depicted) in the content access
server 102), the first and second versions of a particular content
item 110 may be presented. For example, a first version 702 of a
PowerPoint presentation is displayed in a first horizontally
extending section (or "lane") of the user interface 700, and a
second a version 704 of the PowerPoint presentation is presented in
a second horizontally extending section of the user interface 700.
Each of the first and second of versions of the content are shown
to comprise defined content segments (e.g., slides of a PowerPoint
presentation).
[0058] Segments of each version of the content that had been
modified relative to a master version 110A, a current version of
the content may be identified, and the nature of the relevant
modification may be graphically indicated for each such modified
segment. For example, the segment 706 of the second version 704 is
shown to have been modified relative to the segment 708 of the
version 702 (which may itself have been unmodified relative to an
earlier, master version of the content). A segment 710 of the
second version 704 may furthermore be visually tagged as being a
newly inserted content segment. In a further example, a segment 712
of the first version 702 is shown visually to have been deleted
from that version of the content.
[0059] The user interface 700 enables a user conveniently to merge
the versions 702 and 704 through a gesture-based manipulation of
the content segments (e.g., a drag and drop operation). For
example, content segments from one version may be dragged, within
the context of the user interface 700, so as to replace segments of
another version. FIG. 7 shows content segment 708 of the first
version 702 as being dragged (as indicated by the arrow 714) so as
to replace the content segment 706 of the second version 704.
Similarly, the content segment 716 may be dragged and dropped to
insert of this content segment 716 into the second version 704.
[0060] In a further example embodiment, as opposed to providing
replacement functionality, an intermediate "master" lane may be
provided within the user interface, separating the "version" lanes
in which the respective first and second versions of the content
are displayed. The interface 700 may then implement drag and drop
functionality to enable a user to select content segments from
either the first version 702 or the second version 704, and drag
and drop the selected segments into the master lane to create a new
version of the shared content.
[0061] At user interface 718, a single lane is displayed that
depicts the manually merged versions. As shown, in response to the
drag and drop operations performed by the user, the merged version
includes content segment 708 of the first version 702, segment 710
of the second version 704, and content segment 716 of the first
version 702.
[0062] It will also be appreciated that of the methodology
described above may be used to create new shared content from
historically distinct and separate shared content. For example, the
content segments within an upper lane may be segments of a first
PowerPoint presentation, and the content to segments in the lower
lane may be segments of a second PowerPoint presentation. Using the
drag and drop functionality described herein, a user may combine
the segments, through the gesture-based manipulation of the
segments, into a new a PowerPoint presentation.
[0063] In instances where a presenting user is presenting content
110 (e.g., using client device 108C) to viewing users (e.g., using
client devices 108D and 108E), a presentation location (e.g., high
water mark) may be monitored. The presentation location is a
sequential location within the content 110 to which the presenter
has advanced in the presentation of the shared content to the
viewing user (e.g., that is currently being displayed by the client
device 108C of the presenting user). The presentation location may
alternatively be a non-sequential location that precedes an
immediately preceding presentation location (e.g., where the
presenting user has revisited to an earlier location in the content
110). In this instance, the immediately preceding presentation
location is retained as the presentation location. Further, during
the presentation, and independently of the actions of the
presenting user, each viewing user may be allowed to access a
preceding location in the shared content that sequentially precedes
the presentation location within the shared content.
Modules, Components and Logic
[0064] Certain embodiments are described herein as including logic
or a number of components, modules, or mechanisms. Modules may
constitute either software modules (e.g., code embodied (1) on a
non-transitory machine-readable medium or (2) in a transmission
signal) or hardware-implemented modules. A hardware-implemented
module is tangible unit capable of performing certain operations
and may be configured or arranged in a certain manner. In example
embodiments, one or more computer systems (e.g., a standalone,
client or server computer system) or one or more processors may be
configured by software (e.g., an application or application
portion) as a hardware-implemented module that operates to perform
certain operations as described herein.
[0065] In various embodiments, a hardware-implemented module may be
implemented mechanically or electronically. For example, a
hardware-implemented module may comprise dedicated circuitry or
logic that is permanently configured (e.g., as a special-purpose
processor, such as a field programmable gate array (FPGA) or an
application-specific integrated circuit (ASIC)) to perform certain
operations. A hardware-implemented module may also comprise
programmable logic or circuitry (e.g., as encompassed within a
general-purpose processor or other programmable processor) that is
temporarily configured by software to perform certain operations.
It will be appreciated that the decision to implement a
hardware-implemented module mechanically, in dedicated and
permanently configured circuitry, or in temporarily configured
circuitry (e.g., configured by software) may be driven by cost and
time considerations.
[0066] Accordingly, the term "hardware-implemented module" should
be understood to encompass a tangible entity, be that an entity
that is physically constructed, permanently configured (e.g.,
hardwired) or temporarily or transitorily configured (e.g.,
programmed) to operate in a certain manner and/or to perform
certain operations described herein. Considering embodiments in
which hardware-implemented modules are temporarily configured
(e.g., programmed), each of the hardware-implemented modules need
not be configured or instantiated at any one instance in time. For
example, where the hardware-implemented modules comprise a
general-purpose processor configured using software, the
general-purpose processor may be configured as respective different
hardware-implemented modules at different times. Software may
accordingly configure a processor, for example, to constitute a
particular hardware-implemented module at one instance of time and
to constitute a different hardware-implemented module at a
different instance of time.
[0067] Hardware-implemented modules can provide information to, and
receive information from, other hardware-implemented modules.
Accordingly, the described hardware-implemented modules may be
regarded as being communicatively coupled. Where multiple of such
hardware-implemented modules exist contemporaneously,
communications may be achieved through signal transmission (e.g.,
over appropriate circuits and buses) that connect the
hardware-implemented modules. In embodiments in which multiple
hardware-implemented modules are configured or instantiated at
different times, communications between such hardware-implemented
modules may be achieved, for example, through the storage and
retrieval of information in memory structures to which the multiple
hardware-implemented modules have access. For example, one
hardware-implemented module may perform an operation, and store the
output of that operation in a memory device to which it is
communicatively coupled. A further hardware-implemented module may
then, at a later time, access the memory device to retrieve and
process the stored output. Hardware-implemented modules may also
initiate communications with input or output devices, and can
operate on a resource (e.g., a collection of information).
[0068] The various operations of example methods described herein
may be performed, at least partially, by one or more processors
that are temporarily configured (e.g., by software) or permanently
configured to perform the relevant operations. Whether temporarily
or permanently configured, such processors may constitute
processor-implemented modules that operate to perform one or more
operations or functions. The modules referred to herein may, in
some example embodiments, comprise processor-implemented
modules.
[0069] Similarly, the methods described herein may be at least
partially processor-implemented. For example, at least some of the
operations of a method may be performed by one or processors or
processor-implemented modules. The performance of certain of the
operations may be distributed among the one or more processors, not
only residing within a single machine, but deployed across a number
of machines. In some example embodiments, the processor or
processors may be located in a single location (e.g., within a home
environment, an office environment or as a server farm), while in
other embodiments the processors may be distributed across a number
of locations.
[0070] The one or more processors may also operate to support
performance of the relevant operations in a "cloud computing"
environment or as a "software as a service" (SaaS). For example, at
least some of the operations may be performed by a group of
computers (as examples of machines including processors), these
operations being accessible via a network (e.g., the Internet) and
via one or more appropriate interfaces (e.g., Application Program
Interfaces (APIs).)
Electronic Apparatus and System
[0071] Example embodiments may be implemented in digital electronic
circuitry, or in computer hardware, firmware, software, or in
combinations of them. Example embodiments may be implemented using
a computer program product, e.g., a computer program tangibly
embodied in an information carrier, e.g., in a machine-readable
medium for execution by, or to control the operation of, data
processing apparatus, e.g., a programmable processor, a computer,
or multiple computers.
[0072] A computer program can be written in any form of programming
language, including compiled or interpreted languages, and it can
be deployed in any form, including as a stand-alone program or as a
module, subroutine, or other unit suitable for use in a computing
environment. A computer program can be deployed to be executed on
one computer or on multiple computers at one site or distributed
across multiple sites and interconnected by a communication
network.
[0073] In example embodiments, operations may be performed by one
or more programmable processors executing a computer program to
perform functions by operating on input data and generating output.
Method operations can also be performed by, and apparatus of
example embodiments may be implemented as, special purpose logic
circuitry, e.g., a field programmable gate array (FPGA) or an
application-specific integrated circuit (ASIC).
[0074] The computing system can include clients and servers. A
client and server are generally remote from each other and
typically interact through a communication network. The
relationship of client and server arises by virtue of computer
programs running on the respective computers and having a
client-server relationship to each other. In embodiments deploying
a programmable computing system, it will be appreciated that that
both hardware and software architectures require consideration.
Specifically, it will be appreciated that the choice of whether to
implement certain functionality in permanently configured hardware
(e.g., an ASIC), in temporarily configured hardware (e.g., a
combination of software and a programmable processor), or a
combination of permanently and temporarily configured hardware may
be a design choice. Below are set out hardware (e.g., machine) and
software architectures that may be deployed, in various example
embodiments.
Example Machine Architecture and Machine-Readable Medium
[0075] FIG. 8 is a block diagram of machine in the example form of
a computer system 800 within which instructions, for causing the
machine to perform any one or more of the methodologies discussed
herein, may be executed. In alternative embodiments, the machine
operates as a standalone device or may be connected (e.g.,
networked) to other machines. In a networked deployment, the
machine may operate in the capacity of a server or a client machine
in server-client network environment, or as a peer machine in a
peer-to-peer (or distributed) network environment. The machine may
be a personal computer (PC), a tablet PC, a set-top box (STB), a
Personal Digital Assistant (PDA), a cellular telephone, a web
appliance, a network router, switch or bridge, or any machine
capable of executing instructions (sequential or otherwise) that
specify actions to be taken by that machine. Further, while only a
single machine is illustrated, the term "machine" shall also be
taken to include any collection of machines that individually or
jointly execute a set (or multiple sets) of instructions to perform
any one or more of the methodologies discussed herein.
[0076] The example computer system 800 includes a processor 802
(e.g., a central processing unit (CPU), a graphics processing unit
(GPU) or both), a main memory 804 and a static memory 806, which
communicate with each other via a bus 808. The computer system 800
may further include a video display unit 810 (e.g., a liquid
crystal display (LCD) or a cathode ray tube (CRT)). The computer
system 800 also includes an alphanumeric input device 812 (e.g., a
keyboard or touch screen), a user interface (UI) navigation device
814 (e.g., a mouse or touch screen), a disk drive unit 816, a
signal generation device 818 (e.g., a speaker) and a network
interface device 820.
Machine-Readable Medium
[0077] The disk drive unit 816 includes a machine-readable medium
822 on which is stored one or more sets of instructions and data
structures (e.g., software) 824 embodying or utilized by any one or
more of the methodologies or functions described herein. The
instructions 824 may also reside, completely or at least partially,
within the main memory 804 and/or within the processor 802 during
execution thereof by the computer system 800, the main memory 804
and the processor 802 also constituting machine-readable media.
[0078] While the machine-readable medium 822 is shown in an example
embodiment to be a single medium, the term "machine-readable
medium" may include a single medium or multiple media (e.g., a
centralized or distributed database, and/or associated caches and
servers) that store the one or more instructions or data
structures. The term "machine-readable medium" shall also be taken
to include any tangible medium that is capable of storing, encoding
or carrying instructions for execution by the machine and that
cause the machine to perform any one or more of the methodologies
of the present invention, or that is capable of storing, encoding
or carrying data structures utilized by or associated with such
instructions. The term "machine-readable medium" shall accordingly
be taken to include, but not be limited to, solid-state memories,
and optical and magnetic media. Specific examples of
machine-readable media include non-volatile memory, including by
way of example semiconductor memory devices, e.g., Erasable
Programmable Read-Only Memory (EPROM), Electrically Erasable
Programmable Read-Only Memory (EEPROM), and flash memory devices;
magnetic disks such as internal hard disks and removable disks;
magneto-optical disks; and CD-ROM and DVD-ROM disks.
Transmission Medium
[0079] The instructions 824 may further be transmitted or received
over a communications network 826 using a transmission medium. The
instructions 824 may be transmitted using the network interface
device 820 and any one of a number of well-known transfer protocols
(e.g., HTTP). Examples of communication networks include a local
area network ("LAN"), a wide area network ("WAN"), the Internet,
mobile telephone networks, Plain Old Telephone (POTS) networks, and
wireless data networks (e.g., WiFi and WiMax networks). The term
"transmission medium" shall be taken to include any intangible
medium that is capable of storing, encoding or carrying
instructions for execution by the machine, and includes digital or
analog communications signals or other intangible media to
facilitate communication of such software.
[0080] Although an embodiment has been described with reference to
specific example embodiments, it will be evident that various
modifications and changes may be made to these embodiments without
departing from the broader spirit and scope of the invention.
Accordingly, the specification and drawings are to be regarded in
an illustrative rather than a restrictive sense. The accompanying
drawings that form a part hereof, show by way of illustration, and
not of limitation, specific embodiments in which the subject matter
may be practiced. The embodiments illustrated are described in
sufficient detail to enable those skilled in the art to practice
the teachings disclosed herein. Other embodiments may be utilized
and derived therefrom, such that structural and logical
substitutions and changes may be made without departing from the
scope of this disclosure. This Detailed Description, therefore, is
not to be taken in a limiting sense, and the scope of various
embodiments is defined only by the appended claims, along with the
full range of equivalents to which such claims are entitled.
[0081] Such embodiments of the inventive subject matter may be
referred to herein, individually and/or collectively, by the term
"invention" merely for convenience and without intending to
voluntarily limit the scope of this application to any single
invention or inventive concept if more than one is in fact
disclosed. Thus, although specific embodiments have been
illustrated and described herein, it should be appreciated that any
arrangement calculated to achieve the same purpose may be
substituted for the specific embodiments shown. This disclosure is
intended to cover any and all adaptations or variations of various
embodiments. Combinations of the above embodiments, and other
embodiments not specifically described herein, will be apparent to
those of skill in the art upon reviewing the above description.
* * * * *