Transforming instructions for collaborative updates
Summary by NHIP
Transforming Conflicting Collaborative Instructions
The method generates client-side instructions for a user interface modification and detects conflicts with prior server-received instructions from another device. Upon detecting a conflict, the system transforms the local instruction group based on the earlier remote group before executing the update and transmitting the transformed set to the server.
Claim Score by NHIP
Abstract
In various example embodiments, a system and method for transforming instructions for collaborative updates are described herein. A group of instructions for an update of an element depicted in a client device version of a user interface are generated. The group of instructions is executed and the group or a subset of instructions are transmitted to a server. The server accepts or rejects the instructions. The server may execute the instructions to update a server version of the element. The server sends accepted instructions to the other or all client devices.

Term
10.1 yearsleft in the term
Expires 20 October 2036.
- Priority and filed
- Granted
- Today
- Expires
20 claims: 3 independent, 17 dependent
- 1Broadest claimClaim Score 25, narrow(NHIP)A method comprising:generating, by a client device, a first group of instructions for causing a first modification of an element depicted in a user interface, the user interface being accessible for modification by at least a second client device;executing a front-end update based on the first group of instructions, the front-end update causing the first modification on a local version of the user interface associated with the client device;transmitting the first group of instructions to a server that maintains a listing of modifications to the user interface that are received from at least the client device and the second client device;receiving, from the server, a system-wide update including a second group of instructions for causing a second modification of the element in the user interface, the second modification being different than the first modification, the second group of instructions having been generated based on a state of the element prior to the first modification and having been received by the server from the second client device prior to the server having received the first group of instructions;determining, using one or more processors of the client device, that the first group of instructions conflict with the second group of instructions;in response to determining that the first group of instructions conflicts with the second group of instructions, transforming the first group of instructions based on the second group of instructions, yielding a transformed first group of instructions;executing a front-end update based on the transformed first group of instructions;and transmitting, to the server, the transformed first group of instructions, the server sending a second system-wide update to at least the second client device, the second system-wide update including the transformed first group of instructions.
- 8A client device comprising:one or more computer processors;and one or more computer-readable mediums storing instructions that, when executed by the one or more computer processors, cause the client device to perform operations comprising: generating a first group of instructions for causing a first modification of an element depicted in a user interface, the user interface being accessible for modification by at least a second client device;executing a front-end update based on the first group of instructions, the front-end update causing the first modification on a local version of the user interface associated with the client device;transmitting the first group of instructions to a server that maintains a listing of modifications to the user interface that are received from at least the client device and the second client device;receiving, from the server, a system-wide update including a second group of instructions for causing a second modification of the element in the user interface, the second modification being different than the first modification, the second group of instructions having been generated based on a state of the element prior to the first modification and having been received by the server from the second client device prior to the server having received the first group of instructions;determining that the first group of instructions conflict with the second group of instructions;in response to determining that the first group of instructions conflicts with the second group of instructions, transforming the first group of instructions based on the second group of instructions, yielding a transformed first group of instructions;executing a front-end update based on the transformed first group of instructions;and transmitting, to the server, the transformed first group of instructions, the server sending a second system-wide update to at least the second client device, the second system-wide update including the transformed first group of instructions.
- 15A non-transitory computer-readable medium storing instructions that, when executed by one or more computer processors of a client device, cause the client device to perform operations comprising:generating a first group of instructions for causing a first modification of an element depicted in a user interface, the user interface being accessible for modification by at least a second client device;executing a front-end update based on the first group of instructions, the front-end update causing the first modification on a local version of the user interface associated with the client device;transmitting the first group of instructions to a server that maintains a listing of modifications to the user interface that are received from at least the client device and the second client device;receiving, from the server, a system-wide update including a second group of instructions for causing a second modification of the element in the user interface, the second modification being different than the first modification, the second group of instructions having been generated based on a state of the element prior to the first modification and having been received by the server from the second client device prior to the server having received the first group of instructions;determining that the first group of instructions conflict with the second group of instructions;in response to determining that the first group of instructions conflicts with the second group of instructions, transforming the first group of instructions based on the second group of instructions, yielding a transformed first group of instructions;executing a front-end update based on the transformed first group of instructions;and transmitting, to the server, the transformed first group of instructions, the server sending a second system-wide update to at least the second client device, the second system-wide update including the transformed first group of instructions.
Independent claims3
111 paragraphs in 4 sections, as filed
TECHNICAL FIELD
0001Embodiments of the present disclosure generally relates to the technical field of special-purpose machines that facilitate interactions for transforming instructions that result in a system-wide update to a user interface including computerized variants of such special-purpose machines and improvements to such variants, and to the technologies by which such special-purpose machines become improved compared to other special-purpose machines that handle instructions for a system-wide update (e.g., back-end update). Specifically, the present disclosure addresses systems and methods to transform instructions for the system-wide update of a user interface.
BACKGROUND
0002Sometimes instructions for updating a user interface conflict with one another. For example, an instruction to perform an update to a user interface may conflict with a further instruction to perform a similar update to the user interface. Conventional systems and methods are often unable to resolve these conflicts. Moreover, some instructions may be delayed during transmission which causes the instructions to be received out of order. Accordingly, conventional systems are unable to handle these conflicts and delays and thus fail to perform a proper update to the user interface.
BRIEF DESCRIPTION OF THE DRAWINGS
0003Various ones of the appended drawings merely illustrate example embodiments of the present disclosure and cannot be considered as limiting its scope.
0004<figref idref="DRAWINGS">FIG. 1</figref> is a block diagram illustrating a networked system, according to some example embodiments.
0005<figref idref="DRAWINGS">FIG. 2</figref> is a block diagram illustrating components of a transform system, according to some example embodiments.
0006<figref idref="DRAWINGS">FIGS. 3-5</figref> are flowcharts illustrating operations of the transform system in performing a method of transforming instructions for an update, according to some example embodiments.
0007<figref idref="DRAWINGS">FIG. 6</figref> is a flowchart illustrating operations of a server side transform system in performing a method of executing transformed instructions, according to some example embodiments.
0008<figref idref="DRAWINGS">FIG. 7</figref> is a block diagram that depicts a user interface, according to some example embodiments.
0009<figref idref="DRAWINGS">FIG. 8</figref> is a block diagram that depicts a user interface of a client device, according to some example embodiments.
0010<figref idref="DRAWINGS">FIG. 9</figref> is a block diagram that depicts a user interface, according to some example embodiments.
0011<figref idref="DRAWINGS">FIG. 10</figref> illustrates a diagrammatic representation of a machine in the form of a computer system within which a set of instructions may be executed for causing the machine to perform any one or more of the methodologies discussed herein, according to an example embodiment.
DETAILED DESCRIPTION
0012The description that follows includes systems, methods, techniques, instruction sequences, and computing machine program products that embody illustrative embodiments of the disclosure. In the following description, for the purposes of explanation, numerous specific details are set forth in order to provide an understanding of various example embodiments of the subject matter discussed herein. It will be evident, however, to those skilled in the art, that embodiments of the subject matter may be practiced without these specific details.
0013In various example embodiments, a system and method to enable a plurality of devices to make collaborative edits to a user interface are described herein. The user interface is shared among the plurality of devices. In other words, each of the plurality of devices displays a respective local version of the user interface on its screen. In addition to the plurality of devices, a server maintains a database that stores and manages the collaborative edits made by the plurality of devices.
0014In various example embodiments, one or more elements are depicted in the user interfaces of a plurality of devices. The plurality of devices can collaborate together and make edits to the shared element(s) depicted in the devices' user interfaces. Each device optimistically executes instruction(s) that edit the element(s) depicted in the user interface. In other words, each of the plurality of devices executes one or more instructions that may edit the element(s) depicted under the assumption that there is not a conflicting edit to the element(s) by another device, and each of the plurality of devices send the instructions to a server under the assumption that the instructions will be accepted or executed by the server in its storage and management of its version of the element(s). Once received, the server in some instances may reject or accept the instructions provided from the plurality of devices.
0015In some instances, the server receives instruction(s) that may conflict with previously received instructions and/or its version of the shared element(s). In the event of a conflict, the server may reject the instruction(s) and may send a notification to the device about the conflict and/or that the instruction(s) were rejected or the device may not receive a confirmation that its instruction(s) were accepted or executed by the server. Accordingly, the client device may undo the instructions on its local version of the user interface.
0016In some instances, the server may send system-wide instruction(s) that may conflict with local instructions already executed by a client device. Accordingly, the client device may undo the local instructions, execute the system-wide instructions, transform the local instructions, re-execute the transformed local instructions, and/or send the transformed local instructions to the server. In some instances, the system-wide instructions includes instructions received from another client device in communication with the server.
0017In various example embodiments, the device flags front-end only instructions that do not need to be transmitted or communicated to the server. In some embodiments, the front-end only instructions may comprise one or more changes to the user interface. In some other embodiments, the front-end only instructions comprise commands for changing the display of the user interface. In some other embodiments, the front-end only instructions do not need to be executed by other devices and/or the server. In some other embodiments, the front-end only instructions may change or cause the display of a pop-up menu, context menu, or drop down menu.
0018In some other embodiments, the front-end only instructions are preceded by and/or followed by other local instructions that are not front-end only instructions. The other local instructions are generated by the client device as instructions for a system-wide update. In some embodiments, the other local instructions may conflict with a system-wide instruction received by the client device. For example, the system-wide instruction performs an update that precedes an update corresponding to the other local instructions generated by the client device. As such, the client device may transform the other local instructions and not transform the front-end only instructions because the front-end only instructions are not affected by the system-wide instructions, the front-end only instructions are not executed on any other device, and/or the device avoids a screen flicker, such as hiding a context menu and re-displaying the context menu.
0019Example methods (e.g., algorithms) facilitate displaying an update to a user interface, and example systems (e.g., special-purpose machines) are configured to facilitate displaying the update to the user interface. Examples merely typify possible variations. Unless explicitly stated otherwise, structures (e.g., structural components, such as modules) are optional and may be combined or subdivided, and operations (e.g., in a procedure, algorithm, or other function) may vary in sequence or be combined or subdivided. In the following description, for purposes of explanation, numerous specific details are set forth to provide a thorough understanding of various example embodiments. It will be evident to one skilled in the art, however, that the present subject matter may be practiced without these specific details.
0020With reference to <figref idref="DRAWINGS">FIG. 1</figref>, an example embodiment of a high-level client-server-based network architecture <b>100</b> is shown. A networked system <b>102</b>, in the example forms of a network-based transform system, provides server-side functionality via a network <b>104</b> (e.g., the Internet or wide area network (WAN)) to one or more client devices (e.g., client device <b>110</b> or client device <b>116</b>).
0021The client device (e.g., the client device <b>110</b> or the client device <b>116</b>) may comprise, but is not limited to, a mobile phone, desktop computer, portable digital assistants (PDAs), smart phones, tablets, laptops, multi-processor systems, microprocessor-based or programmable consumer electronics, or any other communication device that a user may utilize to access the networked system <b>102</b>. In some embodiments, the client device includes components that are used to display information (e.g., in the form of user interfaces). In further embodiments, the client device may comprise one or more of touch screens, accelerometers, gyroscopes, cameras, microphones, global positioning system (GPS) devices, and so forth.
0022In one embodiment, the networked system <b>102</b> is a network-based transform system that causes display of the user interfaces on each of the client devices <b>110</b> and <b>116</b>. Further, one or more portions of the network <b>104</b> may be an ad hoc network, an intranet, an extranet, a virtual private network (VPN), a local area network (LAN), a wireless LAN (WLAN), a wide area network (WAN), a wireless WAN (WWAN), a metropolitan area network (MAN), a portion of the Internet, a portion of the Public Switched Telephone Network (PSTN), a cellular telephone network, a wireless network, a WiFi network, a WiMax network, another type of network, or a combination of two or more such networks.
0023Each of the client devices <b>110</b> include one or more applications (also referred to as “apps”) such as, but not limited to, a web browser, messaging application, electronic mail (email) application, or a map application that displays geographic locations and areas. <figref idref="DRAWINGS">FIG. 1</figref> illustrates, for example, a web client <b>112</b> (e.g., a browser that communicates with the Internet), and a client application <b>114</b> executing on each of the client devices <b>110</b> and <b>116</b>. Each of the client devices <b>110</b> and <b>116</b>, for example, each displays a local version of a user interface. The user interface may display a spreadsheet, a word processing document, a map of a geographical area, and the like. In various example embodiments, the user interface depicts an element, and the element occupies a section of the user interface. Further, in some instances, each of the client devices <b>110</b> and <b>116</b> provides instructions for sending updates to server <b>140</b>. As also shown in <figref idref="DRAWINGS">FIG. 1</figref>, each of the client devices <b>110</b> and <b>116</b> includes a transform system <b>118</b> (e.g., a transform component) that enables the client device <b>110</b> or <b>116</b> to send local instructions to the server. For example, the transform system <b>118</b> enables each of the client devices <b>110</b> and <b>116</b> to transform one or more instructions. The one or more transformed instructions may then be executed to perform an update to the local version of a user interface. Moreover, the transformed instructions may be sent to a server <b>140</b> for acceptance, storage, and/or execution.
0024A user <b>106</b> may be a person, a machine, or other means of interacting with the client device <b>110</b> or the client device <b>116</b>. In example embodiments, the user <b>106</b> is not part of the network architecture <b>100</b>, but interacts with the network architecture <b>100</b> via the client device <b>110</b> or other means. For instance, the user <b>106</b> provides input (e.g., touch screen input or alphanumeric input) to the client device <b>110</b> and the input is communicated to the networked system <b>102</b> via the network <b>104</b>. In this instance, the networked system <b>102</b>, in response to receiving the input from the user <b>106</b>, communicates information to the client device <b>110</b> via the network <b>104</b> to be presented to the user <b>106</b>. In this way, the user <b>106</b> can interact with the networked system <b>102</b> using the client device <b>110</b>.
0025An application program interface (API) server <b>120</b> and a web server <b>122</b> are coupled to, and provide programmatic and web interfaces respectively to, one or more servers <b>140</b>. The servers <b>140</b> host a server side transform system <b>150</b> which may comprise one or more modules, engines, or applications and each of which may be embodied as hardware, software, firmware, circuitry, or any combination thereof. The servers <b>140</b> are, in turn, shown to be coupled to one or more database servers <b>124</b> that facilitate access to one or more information storage repositories or database(s) <b>126</b>. In an example embodiment, the databases <b>126</b> are storage devices that store information communicated (e.g., updates to a user interface) from the client devices to the server side transform system <b>150</b>.
0026The server side transform system <b>150</b> likewise provides a number of functions to accept or reject updates and/or perform or facilitate updates to a server version or representation of the shared element(s). The server side transform system <b>150</b> may also provide a number of publication functions and services to users <b>106</b> that access the networked system <b>102</b>. While the server side transform system <b>150</b> is shown in <figref idref="DRAWINGS">FIG. 1</figref> to both form part of the networked system <b>102</b>, it will be appreciated that, in alternative embodiments, the server side transform system <b>150</b> may form a service that is separate and distinct from the networked system <b>102</b>.
0027In some embodiments, the server side transform system <b>150</b> determines whether a received update from a device can be accepted or stored. If the update conflicts with a previously accepted update, the server side transform system <b>150</b> may send a rejection notification and/or decline to send a confirmation of acceptance to the device that transmitted the conflicting update. In some embodiments, the server side transform system <b>150</b> maintains a local version or representation of the shared element(s), and the server side transform system <b>150</b> executes accepted instructions received from the client devices to complete an update. In some example embodiments, the server side transform system <b>150</b> stores the completed system-wide update in a database (e.g., database <b>126</b>).
0028Further, while the client-server-based network architecture <b>100</b> shown in <figref idref="DRAWINGS">FIG. 1</figref> employs a client-server architecture, the present inventive subject matter is of course not limited to such an architecture, and could equally well find application in a distributed, or peer-to-peer, architecture system, for example.
0029Any of the systems or machines (e.g., databases, devices, servers) shown in <figref idref="DRAWINGS">FIG. 1</figref> may be, include, or otherwise be implemented in a special-purpose (e.g., specialized or otherwise non-generic) computer that has been modified (e.g., configured or programmed by software, such as one or more software modules of an application, operating system, firmware, middleware, or other program) to perform one or more of the functions described herein for that system or machine. For example, a special-purpose computer system able to implement any one or more of the methodologies described herein is discussed below with respect to at least <figref idref="DRAWINGS">FIGS. 3-5</figref>, and such a special-purpose computer may accordingly be a means for performing any one or more of the methodologies discussed herein. Within the technical field of such special-purpose computers, a special-purpose computer that has been modified by the structures discussed herein to perform the functions discussed herein is technically improved compared to other special-purpose computers that lack the structures discussed herein or are otherwise unable to perform the functions discussed herein. Accordingly, a special-purpose machine configured according to the systems and methods discussed herein provides an improvement to the technology of similar special-purpose machines (e.g., databases, devices, servers).
0030As used herein, a “database” is a data storage resource and may store data structured as a text file, a table, a spreadsheet, a relational database (e.g., an object-relational database), a triple store, a hierarchical data store, or any suitable combination thereof. Moreover, any two or more of the systems or machines (e.g., databases, devices, servers) illustrated in <figref idref="DRAWINGS">FIG. 1</figref> may be combined into a single system or machine, and the functions described herein for any single system or machine may be subdivided among multiple systems or machines (e.g., databases, devices, servers).
0031<figref idref="DRAWINGS">FIG. 2</figref> is a block diagram illustrating components of the transform system <b>118</b> and components of the server side transform system <b>150</b>, according to some example embodiments. In various example embodiments, the transform system <b>118</b> performs operations that include generating or transforming instructions for an update (e.g., front-end only update or system-wide update). The transform system <b>118</b> further performs operations to transmit the update to a server. Moreover, the modules described in <figref idref="DRAWINGS">FIG. 2</figref> enable the transform system <b>118</b> to perform these operations. The transform system <b>118</b> is shown as including a generation module <b>210</b>, an execution module <b>220</b>, a communication module <b>230</b>, a transform module <b>240</b>, a display module <b>250</b>, and a storage module <b>260</b> all configured to communicate with each other (e.g., via a bus, shared memory, or a switch).
0032The modules described in <figref idref="DRAWINGS">FIG. 2</figref> enable the server side transform system <b>150</b> to accept, reject, store, and/or execute received operations from client devices. The server side transform system <b>150</b> is shown as including a communication module <b>215</b>, a determination module <b>225</b>, an execution module <b>235</b>, and a storage module <b>265</b> all configured to communicate with each other (e.g., via a bus, shared memory, or a switch).
0033Any one or more of the components (e.g., modules) described herein may be implemented using hardware alone (e.g., one or more processors of a machine) or a combination of hardware and software. For example, any component described herein may physically include an arrangement of one or more of the processors or configure a processor (e.g., among one or more processors of a machine) to perform the operations described herein for that module. Accordingly, different components described herein may include and configure different arrangements of the processors at different points in time or a single arrangement of the processors at different points in time. Each component (e.g., module) described herein is an example of a means for performing the operations described herein for that component. Moreover, any two or more of these components may be combined into a single component, and the functions described herein for a single component may be subdivided among multiple components. Furthermore, according to various example embodiments, components described herein as being implemented within a single machine, database, or device may be distributed across multiple machines, databases, or devices.
0034In various example embodiments, the generation module <b>210</b> is configured to generate a group of instructions that correspond to an update of an element (e.g., shared element) in a user interface. Examples of the update of the element include: annotating the element depicted in the user interface; moving the element depicted in the user interface; creating the element depicted in the user interface; deleting the element depicted in the user interface; or re-sizing the element depicted in the user interface. Other examples of the update include, but are not limited to: adding text, deleting text, changing a formatting of text, adding columns to a spreadsheet, deleting columns from a spreadsheet, resizing the columns of a spreadsheet, inputting an entry to a spreadsheet, and the like. In various example embodiments, the update is any suitable combination of any of the examples listed above.
0035The group of instructions may be used to perform a front-end only update of a local version of a user interface, a system-wide update of one or more client devices' user interfaces, or both. For instance, the group of instructions, when executed by an execution module <b>220</b>, perform one or more front-end only updates and/or one or more system-wide updates of the element in a local version of the user interface (e.g., user interface of the client device). The front-end only update may include a dialogue box or a menu that is displayed on the client device. Moreover, the group of instructions, when executed by a server, perform one or more system-wide updates of the element.
0036In various example embodiments, the server version of the element(s) is stored in a database (e.g., database <b>126</b>), and the server version is updated when the group of instructions are executed by the server <b>140</b>.
0037In various example embodiments, the execution module <b>220</b> is configured to execute the group of instructions for the user interface of the client device. In further example embodiments, the group of instructions are transformed by the transform module <b>240</b>, as further explained below. Accordingly, the execution module <b>220</b> is further configured to execute the transformed group of instructions. In various example embodiments, execution of the group of instructions completes an update of the user interface of the client device.
0038In various example embodiments, the communication module <b>230</b> is configured to receive an indication that a group of one or more instructions conflicts with a system-wide update. In various example embodiments, the communication module <b>230</b> is further configured to send or transmit the instructions to the server <b>140</b>, as further explained below.
0039In various example embodiments, the transform module <b>240</b> is configured to transform the group of instructions. In some instances, the transform module <b>240</b> changes a parameter included in the group of instructions. For example, the transform module <b>240</b> changes a value of a parameter included in the group of instructions. Moreover, in some instances, the parameter included in the group of instructions corresponds to the property of the element being that is changed by the previous update. For example, the previous update may include moving the element to a new location in the user interface. Further to the example, the group of instructions may include edits to the element at its previous location. Therefore, the group of instructions need to be transformed in order to correct for the new location that resulted from the previous update.
0040As another example, the previous update may include resizing the element. Further to the example, the group of instructions may include edits to the element that do not factor in the resizing. Therefore, the group of instructions need to be transformed in order to correct for the resizing that resulted from previous update.
0041In various example embodiments, the display module <b>250</b> is configured to cause display of the update of the user interface on the client device. In other words, the display module <b>250</b> displays the local version of the user interface on the client device.
0042In various example embodiments, once the update is completed, the storage module <b>260</b> is configured to store the local version of the user interface into a database. Further, the storage module <b>265</b> is configured to retrieve the local version of the user interface from the database. The local version of the user interface includes the update of the element that was completed as a result of the execution of the group of instructions.
0043Referring to the server side transform system <b>150</b>, in various example embodiments, the communication module <b>215</b> is configured to receive the group of instructions from the communication module <b>230</b>. Moreover, the determination module <b>225</b> is configured to determine that the group of instructions conflict with a previous update or a previous group of instructions. For instance, the determination module <b>225</b> determines that the group of instructions affect a property of an element in the user interface that was changed by the previous update. Alternatively, the determination module <b>225</b> is configured to determine that the group of instructions do not conflict with the previous update. In further example embodiments, the communication module <b>215</b> receives a group of instructions transformed by the transform module <b>240</b> and the group of instructions do not conflict with the previous update.
0044In some embodiments, the communication module <b>215</b> provides a confirmation that server accepted the group of instructions or a notification that the server rejected the group of instructions. In some embodiments, the communication module <b>215</b> accepts the group of instructions but does not provide a confirmation to the sender of the group of instructions.
0045In various example embodiments, the execution module <b>235</b> is configured to execute the group of instructions received from the communication module <b>230</b>. Execution of the group of instructions completes an update to the server version of the element.
0046In various example embodiments, the communication module <b>215</b> transmits data that causes execution and/or display of the system-wide update to the plurality of devices. The communication module <b>215</b> transmits the data through the network (e.g., network <b>104</b>). As a result, the update to the element (e.g., shared element) appears in the user interface displayed by each of the plurality of devices.
0047In various example embodiments, the storage module <b>265</b> is configured to store the group of instructions and/or the system-wide update into a database. In some instances, the storage module <b>265</b> saves the group of instructions and/or server version of the updated element into the database. Further, the storage module <b>265</b> is configured to retrieve the group of instructions and/or server version from the database at a later time.
0048In some instances, the execution module <b>235</b> is configured to convert the instructions into a particular scripting language (e.g., compiling the instructions in JavaScript). In some instances, the communication module <b>215</b> sends the converted instructions to the plurality of devices. In some instances, the storage module <b>265</b> stores the converted instructions into the database.
0049Referring back to <figref idref="DRAWINGS">FIG. 1</figref>, the transform system <b>118</b> is configured to receive a request, from a user of the client device, to display a front-end only update in a user interface of the client device. In other words, the front-end only update does not get communicated to the server. In some instances, the front-end only update is a dialog box or a menu that is displayed in the user interface the requesting device (e.g., client device <b>110</b>). In some instances, the front-end update is changing an appearance of an element that is displayed in the user interface of the requesting device (e.g., client device <b>110</b>).
0050In various example embodiments, the generation module <b>210</b> is further configured to generate a third group of instructions for an update of a further element depicted in a user interface. Moreover, the further group of instructions comprise one or more front-end only instructions. The front-end only instructions are instructions that cause the front-end only update. In various example embodiments, the generation module <b>210</b> is further configured to generate a filtered group of instructions that exclude the front-end only instructions. Accordingly, in some instances, the filtered group of instructions are transmitted to the server by the communication module <b>230</b>. As stated earlier, the front-end only instructions are not affected by the system-wide instructions. Also, the front-end only instructions are not executed on any other device. Therefore, these front-end only instructions are not transmitted to the server by the communication module <b>230</b>.
0051In various example embodiments, the transform system <b>118</b> is configured to apply a flag that indicates instructions that are used by the execution module <b>220</b> to perform the front-end only update and therefore do not need to be communicated by the communication module <b>230</b> to the server. The instructions for the front-end only update are generated by the client device. Moreover, the flag is applied in order to prevent the instructions for the front-end only update from being sent to the server. In some embodiments, the transform module <b>240</b> may not execute instructions for front-end only updates to resolve conflict(s) between local updates and system-wide updates.
0052<figref idref="DRAWINGS">FIG. 3-5</figref> are flowcharts illustrating operations of the transform system <b>118</b> in performing a method <b>300</b> of transforming instructions for an update, according to some example embodiments. Operations in the method <b>300</b> may be performed in part or in whole by components of transform system <b>118</b>, which can be embodied either in whole or in part in one or more client devices (e.g., client device <b>110</b>, client device <b>116</b>) of the networked system <b>102</b> using components described above with respect to <figref idref="DRAWINGS">FIG. 2</figref>. Accordingly, the method <b>300</b> is described by way of example with reference to the transform system <b>118</b>. However, it shall be appreciated that at least some of the operations of the method <b>300</b> may be deployed on various other hardware configurations or be performed by similar components residing elsewhere in the client-server-based network architecture <b>100</b>. Therefore, the method <b>300</b> is not intended to be limited to the transform system <b>118</b>. As shown in <figref idref="DRAWINGS">FIG. 3</figref>, the method <b>300</b> includes operations <b>310</b>, <b>320</b>, <b>330</b>, <b>340</b>, <b>350</b>, and <b>360</b>.
0053At operation <b>310</b>, the generation module <b>210</b> generates a group of instructions for an update of an element depicted in a user interface. In some instances, the group of instructions, when executed by the execution module <b>220</b>, perform a front-end only update of an element depicted in a user interface of the client device. In further embodiments, the group of instructions are also usable by the server <b>140</b> to perform a system-wide update to an element. In various example embodiments, the group of instructions are generated by or originate from a client device (e.g., client device <b>110</b>, client device <b>116</b>). As stated earlier, the server version of the element and/or group of instructions are transmitted to the one or more client devices. In other words, the one or more client devices are viewing the server version of the element and/or have executed the group of instructions sent by the server.
0054The element exhibits several properties. For example, the element occupies a location or a section of the user interface (e.g., element location). In other words, the element appears at the element location in the user interface. In various example embodiments, the element also displays information at the element location in the user interface. In other example embodiments, the element corresponds to a certain size. The location of the element, the information displayed by the element, and the size of the element are each examples of a property exhibited by that element.
0055As stated earlier, the user interface displays a spreadsheet, a word processing document, a map of a geographical area, or the like. As a result, in the case of the spreadsheet, the element is a cell from the spreadsheet that displays a value. In the case of the word processing document, for example, the element is a word or a letter that appears at a specific line in the word processing document. In the case of the geographical area, for example, the element is an object that is depicted in the geographical area. Further, the object depicted in the geographical area may correspond to real-life objects (e.g., buildings, vehicles, structures, or personnel) that are present in the geographical area. The object depicted in the geographical area may also correspond to events that take place within the geographical area.
0056Examples of the update of the element include: annotating the element depicted in the user interface; moving the element depicted in the user interface; creating the element depicted in the user interface; deleting the element depicted in the user interface; or re-sizing the element depicted in the user interface. In various example embodiments, the update is a suitable combination of any of the examples listed above.
0057In some instances, the update includes adding additional information to the information already displayed at the element location in the user interface. In some instances, the element depicted in the user interface is moved, therefore changing the element location. In some instances, a new element is generated or created in the user interface.
0058At operation <b>320</b>, the execution module <b>220</b> executes the generated group of instructions. As a result, a local update of the element is shown in a user interface of the client device that generated the group of instructions. Moreover, at operation <b>320</b>, the communication module <b>230</b> transmits the generated group of instructions to a server (e.g., server <b>140</b>) in order to propagate the update of the local version of the user interface to the server and then to the other client devices.
0059At operation <b>330</b>, the communication module <b>230</b> receives an indication and/or fails to receive a confirmation that the group of instructions conflicts with a previous system-wide update that corresponds to instructions previously accepted, stored, and/or executed by a server (e.g., server <b>140</b>). In further instances, the communication module <b>230</b> receives, from the server, a second group of instructions for a second update of the element, as further explained below with in the description of <figref idref="DRAWINGS">FIG. 4</figref>.
0060At operation <b>340</b>, the communication module <b>230</b> determines that a received group of instructions from the server conflict with instructions previously executed by the client device in a local update. As further explained below, the indication received may include a notification from the server <b>140</b>.
0061In various example embodiments, the group of instructions conflicts with a previous system-wide update of an element. The conflict occurs because the generated group of instructions changes or modifies a property of the element that was also affected by the previous update. For example, the previous update may include instructions to move the element to a new location. Further to the example, the generated group of instructions may include edits to the element at its previous location. Therefore, the generated group of instructions need to be undone (e.g., reversed) or transformed in order to correct for the new location that resulted from execution of instructions corresponding to the previous update.
0062At operation <b>350</b>, the transform module <b>240</b> transforms the generated group of instructions by changing one or more parameters included in the group of instructions. The parameter applied to the group of instructions may pertain to the property of the element that was changed by the previous system-wide update. For example, the parameter may indicate the element location, or the element size.
0063At operation <b>360</b>, the execution module <b>220</b> executes the transformed group of instructions. As a result, a transformed update of the element is shown in a user interface of the client device that generated the group of instructions. At operation <b>360</b>, the communication module <b>230</b> transmits the transformed group of instructions to the server (e.g., server <b>140</b>) in order to propagate the transformed update of the user interface of the client device to the server and other client devices. The other client devices may execute and/or display the transformed update on their respective user interfaces.
0064In other example embodiments, transform system <b>118</b> only performs steps <b>310</b>, <b>320</b>, and <b>330</b>. In other instances, transform system <b>118</b> further undoes (e.g., reverses, cancels, perform an inverse operation) the generated group of instructions.
0065As shown in <figref idref="DRAWINGS">FIG. 4</figref>, the method <b>300</b> may include one or more of operations <b>322</b>, <b>324</b>, <b>332</b>, and <b>334</b>.
0066At operation <b>322</b>, the communication module <b>230</b> receives the instructions previously accepted, stored, and/or executed by the server. In some instances, the instructions previously accepted, stored, and/or executed by the server conflict with the group of instructions. As stated previously, the group of instructions are generated by and originated from a client device among the one or more devices (e.g., group of devices). In other words, the instructions previously accepted, stored, and/or executed may be a second group of instructions for a second update of the element (e.g., shared element). In various example embodiments, the instructions are received as part of a notification.
0067At operation <b>324</b>, the communication module <b>230</b> determines that the group of instructions conflicts with a previous system-wide update. The instructions previously accepted, stored, and/or executed by the server (e.g., second group of instructions) corresponds to a previous system-wide update and thus conflicts with the group of instructions. Since the client device did not receive the second update prior to generating the group of instructions, the group of instructions may be generated based on an incorrect version of one or more elements of the user interface (e.g., a previous state of a shared element in the user interface). In this regard, execution of the second group of instructions synchronizes the client device's version of the elements so that it is consistent with the server version and/or other client devices. In various example embodiments, the previous state of the shared element is a state of the shared element prior to the previous system-wide update to the shared element.
0068In some instances, the previous instructions are configured (e.g., programmed) to be executed prior to the group of instructions. For instance, the second group of instructions may be generated or programmed based of a state of the element prior to an update from the first group of instructions. However, the second group of instructions are received from the server after the first group of instructions are executed.
0069At operation <b>332</b>, the execution module <b>220</b> revokes (e.g., resizing an element by 0.5 after resizing the element by 2, moving an element by 100 pixels to the left after moving the element by 100 pixels to the right, deleting text after inserting the text, adding a column after removing a column, removing a value after adding a value, redrawing a feature of an element after it has been deleted) the execution of the group of instructions in response to the conflict. The result of the revocation effectively causes a roll back of the update of the element depicted in the user interface of the client device. As stated earlier, examples of the update of the element include: annotating the element depicted in the user interface; moving the element depicted in the user interface; creating the element depicted in the user interface; deleting the element depicted in the user interface; or re-sizing the element depicted in the user interface. In various example embodiments, the update is a suitable combination of any of the examples listed above.
0070At operation <b>334</b>, the execution module <b>220</b> executes the instructions previously accepted, stored, and/or executed by the server (e.g., the second group of instructions) received at the operation <b>330</b>. Execution of the previous instructions performs an update that takes precedence before the update corresponding to the first group of instructions generated at the operation <b>310</b>. Once the instructions previously accepted, stored, and/or executed by the server are executed, the first group of instructions, as is and/or transformed, can be appropriately executed thereafter.
0071As shown in <figref idref="DRAWINGS">FIG. 5</figref>, the method <b>300</b> may include one or more of operations <b>370</b>, <b>372</b>, <b>374</b>, <b>376</b>, and <b>378</b>. Further, each of the operations <b>372</b>, <b>374</b>, <b>376</b>, and <b>378</b> may be performed as part of the operation <b>370</b>.
0072At operation <b>370</b>, the display module <b>250</b> is configured to cause display of the update to a user interface of the client device. In various example embodiments, the update includes any suitable combination of the operations <b>372</b>, <b>374</b>, <b>376</b>, and <b>378</b>.
0073At operation <b>372</b>, the display module <b>250</b> is configured to cause display of an annotation to the element. As stated previously, the update may include annotating the element with additional information. Therefore, the display module <b>250</b> transmits data that displays the additional information being used to annotate the element at the element location in the shared interface.
0074At operation <b>374</b>, the display module <b>250</b> is configured to cause display of a movement of the element. As stated previously, the update may include moving the element to a new location in the local version of the user interface. Alternatively, the update also may include moving the element from the user interface to a further user interface. For example, the update moves an object from a first geographical area to a second geographical area. As another example, the update moves a value from a first cell in the spreadsheet to a second cell in the spreadsheet. As a further example, the update copies and pastes text from a first line in a word processing document to a second line in the word processing document.
0075At operation <b>376</b>, the display module <b>250</b> is configured to cause display of a creation of the element. The group of instructions in some instances causes a new element to be created in the user interface (e.g., a new object in the geographical area, a new value, or new text). Accordingly, the display module <b>250</b> is configured to cause display of the new element in the user interface.
0076At operation <b>378</b> the display module <b>250</b> is configured to cause display of a resizing of the element. For instance, the group of instructions may cause the object to be resized. As a result, the display module <b>250</b> causes display of the resizing in accordance with the group of instructions. Resizing the element may include changing borders of the object depicted in the geographical area. Resizing the element also includes increasing or decreasing a font size.
0077<figref idref="DRAWINGS">FIG. 6</figref> is a flowchart illustrating operations of a server side transform system <b>150</b> in performing a method <b>600</b> of accepting, storing and/or executing transformed instructions, according to some example embodiments. As shown in <figref idref="DRAWINGS">FIG. 6</figref>, the method <b>600</b> includes operations <b>610</b>, <b>620</b>, <b>630</b>, <b>640</b>, and <b>650</b>.
0078At the operation <b>610</b>, the communication module <b>215</b> receives a group of instructions from the communication module <b>230</b> of the transform system <b>118</b>. As stated previously, the group of instructions are transmitted from the transform system <b>118</b> during the operation <b>320</b> of <figref idref="DRAWINGS">FIG. 3</figref>.
0079At the operation <b>620</b>, the determination module <b>225</b> determines that the group of instructions conflict with a previous update. In various example embodiments, the previous update is received from another client device that communicates with the server side transform system <b>150</b>. Moreover, the previous update may affect a property of the element which is also operated on by the group of instructions. In further embodiments, the determination module <b>225</b> may determine that the group of instructions do not conflict with a previous update.
0080At the operation <b>630</b>, the communication module <b>215</b> transmits an indication that the group of instructions conflict with the previous update. In alternative embodiments, the communication module <b>215</b> may not transmit any indication of a conflict and the client device does not receive a confirmation of acceptance by the server within a predetermined period. As stated previously, the indication may be received by the transform system <b>118</b> at the operation <b>330</b> of <figref idref="DRAWINGS">FIG. 3</figref>.
0081At the operation <b>640</b>, the communication module <b>215</b> receives a transformed group of instructions from the transform system <b>150</b>. As stated previously, the transformed group of instructions are transmitted from the transform system <b>118</b> during the operation <b>360</b> of <figref idref="DRAWINGS">FIG. 3</figref>. At the operation <b>650</b>, the execution module <b>235</b> accepts, stores and/or executes the transformed group of instructions.
0082<figref idref="DRAWINGS">FIG. 7</figref> is a block diagram that depicts a user interface, according to some example embodiments. The user interface <b>700</b> is displayed on each of a plurality of devices. Also included in the user interface is an object <b>702</b> and a description <b>704</b>. The object <b>702</b> and the description <b>704</b> are elements that can each be updated by a device among the plurality of devices. Moreover, the description <b>704</b> includes information that is used to describe the object <b>702</b>.
0083As shown in the user interface <b>700</b>, the description <b>704</b> includes a button <b>706</b> that is selectable to edit the description. Selection of the button <b>706</b>, in some instances, causes a request to be sent to the generation module <b>210</b>. The request, in some instances, is a request to display a front-end only update on a client device. Although a button is shown in <figref idref="DRAWINGS">FIG. 7</figref>, in some instances, the description <b>704</b> itself can function as a trigger that is selectable to edit the description.
0084<figref idref="DRAWINGS">FIG. 8</figref> is a block diagram that depicts a user interface of a client device, according to some example embodiments. The user interface <b>800</b> is displayed on a specific client device that is used to select the button <b>706</b> of <figref idref="DRAWINGS">FIG. 7</figref>. The user interface <b>800</b> includes an object <b>802</b>, a description <b>804</b>, and a dialogue box <b>806</b>. The object <b>802</b> and the description <b>804</b> both appear dotted to indicate that they are currently capable of being edited by the specific client device. In some example embodiments, the dotted lines are only displayed on the specific client device that is being used to edit the object <b>802</b> and the description <b>804</b>. In other words, the appearance of the dotted lines is a front-end only update to the user interface <b>800</b> of the specific client device. The dialogue box <b>806</b> is also a front-end only update to the user interface <b>800</b> where a user of the client device can enter an annotation to the description <b>804</b>. In various example embodiments, elements in the user interface <b>800</b> does not match the server version of the elements.
0085<figref idref="DRAWINGS">FIG. 9</figref> is a block diagram that depicts a user interface, according to some example embodiments. The user interface <b>900</b> is displayed on each of a plurality of devices. Moreover, the user interface <b>900</b> includes an object <b>902</b> and a description <b>904</b>. The user interface <b>900</b>, in some example embodiments, displays one or more system-wide updates of the object <b>902</b> and of the description <b>904</b>. As shown in <figref idref="DRAWINGS">FIG. 9</figref>, the description <b>904</b> includes the edits that were made by the user in the dialogue box <b>806</b> of <figref idref="DRAWINGS">FIG. 8</figref>. As also shown in <figref idref="DRAWINGS">FIG. 9</figref>, the system-wide updates include movement of the object <b>902</b> and the description <b>904</b> and an increase in the font size of the information in the description <b>904</b>. These system-wide updates are displayed by the display module <b>250</b> in each of the plurality of devices viewing the user interface. In various example embodiments, elements in the user interface <b>900</b> do not matches the server version of the elements.
0000Modules, Components, and Logic
0086Certain 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 on a machine-readable medium) or hardware modules. A “hardware module” is a tangible unit capable of performing certain operations and may be configured or arranged in a certain physical manner. In various example embodiments, one or more computer systems (e.g., a standalone computer system, a client computer system, or a server computer system) or one or more hardware modules of a computer system (e.g., a processor or a group of processors) may be configured by software (e.g., an application or application portion) as a hardware module that operates to perform certain operations as described herein.
0087In some embodiments, a hardware module may be implemented mechanically, electronically, or any suitable combination thereof. For example, a hardware module may include dedicated circuitry or logic that is permanently configured to perform certain operations. For example, a hardware module may be a special-purpose processor, such as a Field-Programmable Gate Array (FPGA) or an Application Specific Integrated Circuit (ASIC). A hardware module may also include programmable logic or circuitry that is temporarily configured by software to perform certain operations. For example, a hardware module may include software executed by a general-purpose processor or other programmable processor. Once configured by such software, hardware modules become specific machines (or specific components of a machine) uniquely tailored to perform the configured functions and are no longer general-purpose processors. It will be appreciated that the decision to implement a hardware 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.
0088Accordingly, the phrase “hardware module” should be understood to encompass a tangible entity, be that an entity that is physically constructed, permanently configured (e.g., hardwired), or temporarily configured (e.g., programmed) to operate in a certain manner or to perform certain operations described herein. As used herein, “hardware-implemented module” refers to a hardware module. Considering embodiments in which hardware modules are temporarily configured (e.g., programmed), each of the hardware modules need not be configured or instantiated at any one instance in time. For example, where a hardware module comprises a general-purpose processor configured by software to become a special-purpose processor, the general-purpose processor may be configured as respectively different special-purpose processors (e.g., comprising different hardware modules) at different times. Software accordingly configures a particular processor or processors, for example, to constitute a particular hardware module at one instance of time and to constitute a different hardware module at a different instance of time.
0089Hardware modules can provide information to, and receive information from, other hardware modules. Accordingly, the described hardware modules may be regarded as being communicatively coupled. Where multiple hardware modules exist contemporaneously, communications may be achieved through signal transmission (e.g., over appropriate circuits and buses) between or among two or more of the hardware modules. In embodiments in which multiple hardware modules are configured or instantiated at different times, communications between such hardware modules may be achieved, for example, through the storage and retrieval of information in memory structures to which the multiple hardware modules have access. For example, one hardware 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 module may then, at a later time, access the memory device to retrieve and process the stored output. Hardware modules may also initiate communications with input or output devices, and can operate on a resource (e.g., a collection of information).
0090The 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 described herein. As used herein, “processor-implemented module” refers to a hardware module implemented using one or more processors.
0091Similarly, the methods described herein may be at least partially processor-implemented, with a particular processor or processors being an example of hardware. For example, at least some of the operations of a method may be performed by one or more processors or processor-implemented modules. Moreover, 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), with these operations being accessible via a network (e.g., the Internet) and via one or more appropriate interfaces (e.g., an Application Program Interface (API)).
0092The performance of certain of the operations may be distributed among the processors, not only residing within a single machine, but deployed across a number of machines. In some example embodiments, the processors or processor-implemented modules may be located in a single geographic location (e.g., within a home environment, an office environment, or a server farm). In other example embodiments, the processors or processor-implemented modules may be distributed across a number of geographic locations.
0000Example Machine Architecture and Machine-Readable Medium
0093<figref idref="DRAWINGS">FIG. 10</figref> is a block diagram illustrating components of a machine <b>1000</b>, according to some example embodiments, able to read instructions from a machine-readable medium (e.g., a machine-readable storage medium) and perform any one or more of the methodologies discussed herein. Specifically, <figref idref="DRAWINGS">FIG. 10</figref> shows a diagrammatic representation of the machine <b>1000</b> in the example form of a computer system, within which instructions <b>1016</b> (e.g., software, a program, an application, an applet, an app, or other executable code) for causing the machine <b>1000</b> to perform any one or more of the methodologies discussed herein may be executed. For example the instructions may cause the machine to execute the flow diagrams of <figref idref="DRAWINGS">FIGS. 3-5</figref>. Additionally, or alternatively, the instructions may implement the modules described in of <figref idref="DRAWINGS">FIG. 2</figref>. The instructions transform the general, non-programmed machine into a particular machine specially configured to carry out the described and illustrated functions in the manner described. In alternative embodiments, the machine <b>1000</b> operates as a standalone device or may be coupled (e.g., networked) to other machines. In a networked deployment, the machine <b>1000</b> may operate in the capacity of a server machine or a client machine in a server-client network environment, or as a peer machine in a peer-to-peer (or distributed) network environment. The machine <b>1000</b> may comprise, but not be limited to, a server computer, a client computer, a personal computer (PC), a tablet computer, a laptop computer, a smart phone, a mobile device, a wearable device (e.g., a smart watch), a smart home device (e.g., a smart appliance), other smart devices, a web appliance, a network router, a network switch, a network bridge, or any machine capable of executing the instructions <b>1016</b>, sequentially or otherwise, that specify actions to be taken by machine <b>1000</b>. Further, while only a single machine <b>1000</b> is illustrated, the term “machine” shall also be taken to include a collection of machines <b>1000</b> that individually or jointly execute the instructions <b>1016</b> to perform any one or more of the methodologies discussed herein.
0094The machine <b>1000</b> may include processors <b>1010</b>, memory <b>1030</b>, and I/O components <b>1050</b>, which may be configured to communicate with each other such as via a bus <b>1002</b>. In an example embodiment, the processors <b>1010</b> (e.g., a Central Processing Unit (CPU), a Reduced Instruction Set Computing (RISC) processor, a Complex Instruction Set Computing (CISC) processor, a Graphics Processing Unit (GPU), a Digital Signal Processor (DSP), an Application Specific Integrated Circuit (ASIC), a Radio-Frequency Integrated Circuit (RFIC), another processor, or any suitable combination thereof) may include, for example, processor <b>1012</b> and processor <b>1014</b> that may execute instructions <b>1016</b>. The term “processor” is intended to include multi-core processor that may comprise two or more independent processors (sometimes referred to as “cores”) that may execute instructions contemporaneously. Although <figref idref="DRAWINGS">FIG. 10</figref> shows multiple processors, the machine <b>1000</b> may include a single processor with a single core, a single processor with multiple cores (e.g., a multi-core process), multiple processors with a single core, multiple processors with multiples cores, or any combination thereof.
0095The memory/storage <b>1030</b> may include a memory <b>1032</b>, such as a main memory, or other memory storage, and a storage unit <b>1036</b>, both accessible to the processors <b>1010</b> such as via the bus <b>1002</b>. The storage unit <b>1036</b> and memory <b>1032</b> store the instructions <b>1016</b> embodying any one or more of the methodologies or functions described herein. The instructions <b>1016</b> may also reside, completely or partially, within the memory <b>1032</b>, within the storage unit <b>1036</b>, within at least one of the processors <b>1010</b> (e.g., within the processor's cache memory), or any suitable combination thereof, during execution thereof by the machine <b>1000</b>. Accordingly, the memory <b>1032</b>, the storage unit <b>1036</b>, and the memory of processors <b>1010</b> are examples of machine-readable media.
0096As used herein, “machine-readable medium” means a device able to store instructions and data temporarily or permanently and may include, but is not be limited to, random-access memory (RAM), read-only memory (ROM), buffer memory, flash memory, optical media, magnetic media, cache memory, other types of storage (e.g., Erasable Programmable Read-Only Memory (EEPROM)) and/or any suitable combination thereof. The term “machine-readable medium” should be taken to include a single medium or multiple media (e.g., a centralized or distributed database, or associated caches and servers) able to store instructions <b>1016</b>. The term “machine-readable medium” shall also be taken to include any medium, or combination of multiple media, that is capable of storing instructions (e.g., instructions <b>1016</b>) for execution by a machine (e.g., machine <b>1000</b>), such that the instructions, when executed by one or more processors of the machine <b>1000</b> (e.g., processors <b>1010</b>), cause the machine <b>1000</b> to perform any one or more of the methodologies described herein. Accordingly, a “machine-readable medium” refers to a single storage apparatus or device, as well as “cloud-based” storage systems or storage networks that include multiple storage apparatus or devices. The term “machine-readable medium” excludes signals per se.
0097Furthermore, the machine-readable medium is non-transitory in that it does not embody a propagating signal. However, labeling the tangible machine-readable medium as “non-transitory” should not be construed to mean that the medium is incapable of movement—the medium should be considered as being transportable from one physical location to another. Additionally, since the machine-readable medium is tangible, the medium may be considered to be a machine-readable device.
0098The I/O components <b>1050</b> may include a wide variety of components to receive input, provide output, produce output, transmit information, exchange information, capture measurements, and so on. The specific I/O components <b>1050</b> that are included in a particular machine will depend on the type of machine. For example, portable machines such as mobile phones will likely include a touch input device or other such input mechanisms, while a headless server machine will likely not include such a touch input device. It will be appreciated that the I/O components <b>1050</b> may include many other components that are not shown in <figref idref="DRAWINGS">FIG. 10</figref>. The I/O components <b>1050</b> are grouped according to functionality merely for simplifying the following discussion and the grouping is in no way limiting. In various example embodiments, the I/O components <b>1050</b> may include output components <b>1052</b> and input components <b>1054</b>. The output components <b>1052</b> may include visual components (e.g., a display such as a plasma display panel (PDP), a light emitting diode (LED) display, a liquid crystal display (LCD), a projector, or a cathode ray tube (CRT)), acoustic components (e.g., speakers), haptic components (e.g., a vibratory motor, resistance mechanisms), other signal generators, and so forth. The input components <b>1054</b> may include alphanumeric input components (e.g., a keyboard, a touch screen configured to receive alphanumeric input, a photo-optical keyboard, or other alphanumeric input components), point based input components (e.g., a mouse, a touchpad, a trackball, a joystick, a motion sensor, or other pointing instrument), tactile input components (e.g., a physical button, a touch screen that provides location and/or force of touches or touch gestures, or other tactile input components), audio input components (e.g., a microphone), and the like.
0099In further example embodiments, the I/O components <b>1050</b> may include biometric components <b>1056</b>, motion components <b>1058</b>, environmental components <b>1060</b>, or position components <b>1062</b> among a wide array of other components. For example, the biometric components <b>1056</b> may include components to detect expressions (e.g., hand expressions, facial expressions, vocal expressions, body gestures, or eye tracking), measure biosignals (e.g., blood pressure, heart rate, body temperature, perspiration, or brain waves), identify a person (e.g., voice identification, retinal identification, facial identification, fingerprint identification, or electroencephalogram based identification), and the like. The motion components <b>1058</b> may include acceleration sensor components (e.g., accelerometer), gravitation sensor components, rotation sensor components (e.g., gyroscope), and so forth. The environmental components <b>1060</b> may include, for example, illumination sensor components (e.g., photometer), temperature sensor components (e.g., one or more thermometer that detect ambient temperature), humidity sensor components, pressure sensor components (e.g., barometer), acoustic sensor components (e.g., one or more microphones that detect background noise), proximity sensor components (e.g., infrared sensors that detect nearby objects), gas sensors (e.g., gas detection sensors to detection concentrations of hazardous gases for safety or to measure pollutants in the atmosphere), or other components that may provide indications, measurements, or signals corresponding to a surrounding physical environment. The position components <b>1062</b> may include location sensor components (e.g., a Global Position System (GPS) receiver component), altitude sensor components (e.g., altimeters or barometers that detect air pressure from which altitude may be derived), orientation sensor components (e.g., magnetometers), and the like.
0100Communication may be implemented using a wide variety of technologies. The I/O components <b>1050</b> may include communication components <b>1064</b> operable to couple the machine <b>1000</b> to a network <b>1080</b> or devices <b>1070</b> via coupling <b>1082</b> and coupling <b>1072</b> respectively. For example, the communication components <b>1064</b> may include a network interface component or other suitable device to interface with the network <b>1080</b>. In further examples, communication components <b>1064</b> may include wired communication components, wireless communication components, cellular communication components, Near Field Communication (NFC) components, Bluetooth® components (e.g., Bluetooth® Low Energy), Wi-Fi® components, and other communication components to provide communication via other modalities. The devices <b>1070</b> may be another machine or any of a wide variety of peripheral devices (e.g., a peripheral device coupled via a Universal Serial Bus (USB)).
0101Moreover, the communication components <b>1064</b> may detect identifiers or include components operable to detect identifiers. For example, the communication components <b>1064</b> may include Radio Frequency Identification (RFID) tag reader components, NFC smart tag detection components, optical reader components (e.g., an optical sensor to detect one-dimensional bar codes such as Universal Product Code (UPC) bar code, multi-dimensional bar codes such as Quick Response (QR) code, Aztec code, Data Matrix, Dataglyph, MaxiCode, PDF417, Ultra Code, UCC RSS-2D bar code, and other optical codes), or acoustic detection components (e.g., microphones to identify tagged audio signals). In addition, a variety of information may be derived via the communication components <b>1064</b>, such as, location via Internet Protocol (IP) geo-location, location via Wi-Fi® signal triangulation, location via detecting a NFC beacon signal that may indicate a particular location, and so forth.
0000Transmission Medium
0102In various example embodiments, one or more portions of the network <b>1080</b> may be an ad hoc network, an intranet, an extranet, a virtual private network (VPN), a local area network (LAN), a wireless LAN (WLAN), a wide area network (WAN), a wireless WAN (WWAN), a metropolitan area network (MAN), the Internet, a portion of the Internet, a portion of the Public Switched Telephone Network (PSTN), a plain old telephone service (POTS) network, a cellular telephone network, a wireless network, a Wi-Fi® network, another type of network, or a combination of two or more such networks. For example, the network <b>1080</b> or a portion of the network <b>1080</b> may include a wireless or cellular network and the coupling <b>1082</b> may be a Code Division Multiple Access (CDMA) connection, a Global System for Mobile communications (GSM) connection, or other type of cellular or wireless coupling. In this example, the coupling <b>1082</b> may implement any of a variety of types of data transfer technology, such as Single Carrier Radio Transmission Technology (1×RTT), Evolution-Data Optimized (EVDO) technology, General Packet Radio Service (GPRS) technology, Enhanced Data rates for GSM Evolution (EDGE) technology, third Generation Partnership Project (3GPP) including 3G, fourth generation wireless (4G) networks, Universal Mobile Telecommunications System (UMTS), High Speed Packet Access (HSPA), Worldwide Interoperability for Microwave Access (WiMAX), Long Term Evolution (LTE) standard, others defined by various standard setting organizations, other long range protocols, or other data transfer technology.
0103The instructions <b>1016</b> may be transmitted or received over the network <b>1080</b> using a transmission medium via a network interface device (e.g., a network interface component included in the communication components <b>1064</b>) and utilizing any one of a number of well-known transfer protocols (e.g., hypertext transfer protocol (HTTP)). Similarly, the instructions <b>1016</b> may be transmitted or received using a transmission medium via the coupling <b>1072</b> (e.g., a peer-to-peer coupling) to devices <b>1070</b>. The term “transmission medium” shall be taken to include any intangible medium that is capable of storing, encoding, or carrying instructions <b>1016</b> for execution by the machine <b>1000</b>, and includes digital or analog communications signals or other intangible medium to facilitate communication of such software.
0000Language
0104Throughout this specification, plural instances may implement components, operations, or structures described as a single instance. Although individual operations of one or more methods are illustrated and described as separate operations, one or more of the individual operations may be performed concurrently, and nothing requires that the operations be performed in the order illustrated. Structures and functionality presented as separate components in example configurations may be implemented as a combined structure or component. Similarly, structures and functionality presented as a single component may be implemented as separate components. These and other variations, modifications, additions, and improvements fall within the scope of the subject matter herein.
0105Although an overview of the subject matter has been described with reference to specific example embodiments, various modifications and changes may be made to these embodiments without departing from the broader scope of embodiments of the present disclosure. Such embodiments of the subject matter may be referred to herein, individually or collectively, by the term “invention” merely for convenience and without intending to voluntarily limit the scope of this application to any single disclosure or concept if more than one is, in fact, disclosed.
0106The embodiments illustrated herein are described in sufficient detail to enable those skilled in the art to practice the teachings disclosed. Other embodiments may be used and derived therefrom, such that structural and logical substitutions and changes may be made without departing from the scope of this disclosure. The 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.
0107As used herein, the term “or” may be construed in either an inclusive or exclusive sense. Moreover, plural instances may be provided for resources, operations, or structures described herein as a single instance. Additionally, boundaries between various resources, operations, modules, engines, and data stores are somewhat arbitrary, and particular operations are illustrated in a context of specific illustrative configurations. Other allocations of functionality are envisioned and may fall within a scope of various embodiments of the present disclosure. In general, structures and functionality presented as separate resources in the example configurations may be implemented as a combined structure or resource. Similarly, structures and functionality presented as a single resource may be implemented as separate resources. These and other variations, modifications, additions, and improvements fall within a scope of embodiments of the present disclosure as represented by the appended claims. The specification and drawings are, accordingly, to be regarded in an illustrative rather than a restrictive sense.
Contents4
12 sheets
Sheet 1 Sheet 2 Sheet 3 Sheet 4 Sheet 5 Sheet 6 Sheet 7 Sheet 8 Sheet 9 Sheet 10 Sheet 11 Sheet 12
Every citation, both ways
| Document | Relation | Office | Cited during |
|---|---|---|---|
| WO0125906A1 | Cites | World Intellectual Property Organization (WIPO) | Applicant |
| WO0188750A1 | Cites | World Intellectual Property Organization (WIPO) | Applicant |
| EP0652513A1 | Cites | European Patent Office (EPO) | Applicant |
| DE102014204827A1 | Cites | Germany | Applicant |
| DE102014204830A1 | Cites | Germany | Applicant |
| DE102014204834A1 | Cites | Germany | Applicant |
| DE102014213036A1 | Cites | Germany | Applicant |
| CN102054015B | Cites | China | Applicant |
| EP1672527A2 | Cites | European Patent Office (EPO) | Applicant |
| US2001021936A1 | Cites | United States of America | Applicant |
| US2001051949A1 | Cites | United States of America | Applicant |
| US2001056522A1 | Cites | United States of America | Applicant |
| US2002032677A1 | Cites | United States of America | Applicant |
| US2002035590A1 | Cites | United States of America | Applicant |
| US2002091694A1 | Cites | United States of America | Applicant |
| US2002095360A1 | Cites | United States of America | Applicant |
| US2002103705A1 | Cites | United States of America | Applicant |
| US2002194058A1 | Cites | United States of America | Applicant |
| US2002196229A1 | Cites | United States of America | Applicant |
| US2003028560A1 | Cites | United States of America | Applicant |
| US2003036927A1 | Cites | United States of America | Applicant |
| US2003061132A1 | Cites | United States of America | Applicant |
| US2003074187A1 | Cites | United States of America | Applicant |
| US2003088438A1 | Cites | United States of America | Applicant |
| US2003093401A1 | Cites | United States of America | Applicant |
| US2003093755A1 | Cites | United States of America | Applicant |
| US2003105759A1 | Cites | United States of America | Applicant |
| US2003115481A1 | Cites | United States of America | Applicant |
| US2003120675A1 | Cites | United States of America | Applicant |
| US2003126102A1 | Cites | United States of America | Applicant |
| US2003130993A1 | Cites | United States of America | Applicant |
| US2003171942A1 | Cites | United States of America | Applicant |
| US2003177112A1 | Cites | United States of America | Applicant |
| US2003182313A1 | Cites | United States of America | Applicant |
| US2003212718A1 | Cites | United States of America | Applicant |
| US2004003009A1 | Cites | United States of America | Applicant |
| US2004006523A1 | Cites | United States of America | Applicant |
| US2004034570A1 | Cites | United States of America | Applicant |
| US2004044648A1 | Cites | United States of America | Applicant |
| US2004078451A1 | Cites | United States of America | Applicant |
| US2004083466A1 | Cites | United States of America | Applicant |
| US2004111410A1 | Cites | United States of America | Applicant |
| US2004117345A1 | Cites | United States of America | Applicant |
| US2004117387A1 | Cites | United States of America | Applicant |
| US2004148301A1 | Cites | United States of America | Applicant |
| US2004153451A1 | Cites | United States of America | Applicant |
| US2004205492A1 | Cites | United States of America | Applicant |
| US2004210763A1 | Cites | United States of America | Applicant |
| US2004236688A1 | Cites | United States of America | Applicant |
| US2004236711A1 | Cites | United States of America | Applicant |
| US2005010472A1 | Cites | United States of America | Applicant |
| US2005028094A1 | Cites | United States of America | Applicant |
| US2005039116A1 | Cites | United States of America | Applicant |
| US2005091186A1 | Cites | United States of America | Applicant |
| US2005097441A1 | Cites | United States of America | Applicant |
| US2005102328A1 | Cites | United States of America | Applicant |
| US2005108231A1 | Cites | United States of America | Applicant |
| US2005114763A1 | Cites | United States of America | Applicant |
| US2005125715A1 | Cites | United States of America | Applicant |
| US2005131935A1 | Cites | United States of America | Applicant |
| US2005262493A1 | Cites | United States of America | Applicant |
| US2005262512A1 | Cites | United States of America | Applicant |
| US2005289524A1 | Cites | United States of America | Applicant |
| US2006010130A1 | Cites | United States of America | Applicant |
| US2006026561A1 | Cites | United States of America | Applicant |
| US2006031779A1 | Cites | United States of America | Applicant |
| US2006045470A1 | Cites | United States of America | Applicant |
| US2006053097A1 | Cites | United States of America | Applicant |
| US2006053170A1 | Cites | United States of America | Applicant |
| US2006059423A1 | Cites | United States of America | Applicant |
| US2006074866A1 | Cites | United States of America | Applicant |
| US2006074881A1 | Cites | United States of America | Applicant |
| US2006080139A1 | Cites | United States of America | Applicant |
| US2006080283A1 | Cites | United States of America | Applicant |
| US2006080316A1 | Cites | United States of America | Applicant |
| US2006095521A1 | Cites | United States of America | Applicant |
| US2006106847A1 | Cites | United States of America | Applicant |
| US2006116991A1 | Cites | United States of America | Applicant |
| US2006129746A1 | Cites | United States of America | Applicant |
| US2006136513A1 | Cites | United States of America | Applicant |
| US2006143075A1 | Cites | United States of America | Applicant |
| US2006155654A1 | Cites | United States of America | Applicant |
| US2006161558A1 | Cites | United States of America | Applicant |
| US2006178915A1 | Cites | United States of America | Applicant |
| US2006178954A1 | Cites | United States of America | Applicant |
| US2006200755A1 | Cites | United States of America | Search report |
| US2006218206A1 | Cites | United States of America | Applicant |
| US2006218405A1 | Cites | United States of America | Applicant |
| US2006218491A1 | Cites | United States of America | Applicant |
| US2006242630A1 | Cites | United States of America | Applicant |
| US2006253502A1 | Cites | United States of America | Applicant |
| US2006265397A1 | Cites | United States of America | Applicant |
| US2006265417A1 | Cites | United States of America | Applicant |
| US2006277460A1 | Cites | United States of America | Applicant |
| US2007000999A1 | Cites | United States of America | Applicant |
| US2007018986A1 | Cites | United States of America | Applicant |
| US2007043686A1 | Cites | United States of America | Applicant |
| US2007050429A1 | Cites | United States of America | Applicant |
| US2007061487A1 | Cites | United States of America | Applicant |
| US2007061752A1 | Cites | United States of America | Applicant |
8 members in 1 office; this record represents the family
Members8
| Document | Office | Kind | |
|---|---|---|---|
| US10133588B1This record | United States of America | B1 | |
| US2019018693A1 | United States of America | A1 | |
| US10782983B2 | United States of America | B2 | |
| US2020379785A1 | United States of America | A1 | |
| US11640309B2 | United States of America | B2 | |
| US2023297396A1 | United States of America | A1 | |
| US12321760B2 | United States of America | B2 | |
| US2025328365A1 | United States of America | A1 |
92 transactions on the USPTO file
Allowed after 2 non-final rejections, 1 final rejection and 1 RCE.
- Non-final rejections
- 2
- Final rejections
- 1
- RCEs
- 1
- Appeals
- 0
Over time
Point at a mark for the transactionTransactions
| Event | Code | |
|---|---|---|
| Payment of Maintenance Fee, 8th Year, Large EntityM1552 | M1552 | |
| Email NotificationEML_NTR | EML_NTR | |
| Change in Power of Attorney (May Include Associate POA)PA.. | PA.. | |
| Payment of Maintenance Fee, 4th Year, Large EntityM1551 | M1551 | |
| Recordation of Patent Grant MailedPGM/ | PGM/ | |
| Application ready for PDX access by participating foreign officesCCRDY | CCRDY | |
| Patent Issue Date Used in PTA CalculationAllowedPTAC | PTAC | |
| Email NotificationEML_NTR | EML_NTR | |
| Issue Notification MailedAllowedWPIR | WPIR | |
| Dispatch to FDCD1935 | D1935 | |
| Application Is Considered Ready for IssuePILS | PILS | |
| Email NotificationEML_NTR | EML_NTR | |
| Email NotificationEML_NTR | EML_NTR | |
| Filing Receipt - CorrectedFLRCPT.C | FLRCPT.C | |
| Change in Power of Attorney (May Include Associate POA)PA.. | PA.. | |
| Miscellaneous Incoming LetterLET. | LET. | |
| Issue Fee Payment VerifiedN084 | N084 | |
| Issue Fee Payment ReceivedIFEE | IFEE | |
| Email NotificationEML_NTR | EML_NTR | |
| Printer Rush- No mailingTCPB | TCPB | |
| Mailing Corrected Notice of AllowabilityMCNOA | MCNOA | |
| Response to Amendment under Rule 312N271 | N271 | |
| Corrected Notice of AllowabilityCNOA | CNOA | |
| Pubs Case Remand to TCPUBTC | PUBTC | |
| Amendment after Notice of Allowance (Rule 312)AllowedA.NA | A.NA | |
| Mail PUBS Letter Withdrawing a Notice Requiring Inventors Oath or DeclarationMM327-W | MM327-W | |
| PUBS Letter Withdrawing a Notice Requiring Inventors Oath or DeclarationM327-W | M327-W | |
| Electronic ReviewELC_RVW | ELC_RVW | |
| Email NotificationEML_NTF | EML_NTF | |
| Mail Notice of AllowanceAllowedMN/=. | MN/=. | |
| Notice of Allowance Data Verification CompletedAllowedN/=. | N/=. | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| Reasons for AllowanceEX.R | EX.R | |
| Information Disclosure Statement consideredIDSC | IDSC | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| Response after Non-Final ActionA... | A... | |
| Electronic Information Disclosure StatementEIDS. | EIDS. | |
| Information Disclosure Statement (IDS) FiledWIDS | WIDS | |
| Electronic ReviewELC_RVW | ELC_RVW | |
| Email NotificationEML_NTR | EML_NTR | |
| Email NotificationEML_NTF | EML_NTF | |
| Email NotificationEML_NTR | EML_NTR | |
| Filing Receipt - CorrectedFLRCPT.C | FLRCPT.C | |
| Mail Pre-Exam NoticeMPEN | MPEN | |
| Change in Power of Attorney (May Include Associate POA)PA.. | PA.. | |
| Electronic ReviewELC_RVW | ELC_RVW | |
| Email NotificationEML_NTF | EML_NTF | |
| Mail Non-Final RejectionNon-final rejectionMCTNF | MCTNF | |
| Non-Final RejectionNon-final rejectionCTNF | CTNF | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| Disposal for a RCE / CPA / R129AbandonedABN9 | ABN9 | |
| Request for Continued Examination (RCE)RCEX | RCEX | |
| Request for Extension of Time - GrantedXT/G | XT/G | |
| Workflow - Request for RCE - BeginBRCE | BRCE | |
| Email NotificationEML_NTR | EML_NTR | |
| Mail Advisory Action (PTOL - 303)MCTAV | MCTAV | |
| Advisory Action (PTOL-303)CTAV | CTAV | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| Response after Final ActionA.NE | A.NE | |
| Electronic ReviewELC_RVW | ELC_RVW | |
| Email NotificationEML_NTF | EML_NTF | |
| Mail Final Rejection (PTOL - 326)Final rejectionMCTFR | MCTFR | |
| Final RejectionFinal rejectionCTFR | CTFR | |
| track 1 ONT1ON | T1ON | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| Response after Non-Final ActionA... | A... | |
| Electronic ReviewELC_RVW | ELC_RVW | |
| Email NotificationEML_NTF | EML_NTF | |
| Mail Non-Final RejectionNon-final rejectionMCTNF | MCTNF | |
| Non-Final RejectionNon-final rejectionCTNF | CTNF | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| Track 1 Request GrantedT1GR | T1GR | |
| Application Dispatched from OIPEOIPE | OIPE | |
| Email NotificationEML_NTR | EML_NTR | |
| Mail-Record Petition Decision of Granted to Make SpecialMP003 | MP003 | |
| Record Petition Decision of Granted to Make SpecialP003 | P003 | |
| Email NotificationEML_NTR | EML_NTR | |
| Application Is Now CompleteCOMP | COMP | |
| Filing ReceiptFLRCPT.O | FLRCPT.O | |
| Application Is Now CompleteCOMP | COMP | |
| Sent to Classification ContractorPGPC | PGPC | |
| FITF set to YES - revise initial settingFTFS | FTFS | |
| Cleared by L&R (LARS)L128 | L128 | |
| Referred to Level 2 (LARS) by OIPE CSRL198 | L198 | |
| Patent Term Adjustment - Ready for ExaminationPTA.RFE | PTA.RFE | |
| PGPubs nonPub RequestNPRQ | NPRQ | |
| Track 1 RequestTK1R | TK1R | |
| Petition EnteredPET. | PET. | |
| IFW Scan & PACR Auto Security ReviewSCAN | SCAN | |
| Entity Status Set To Undiscounted (Initial Default Setting or Status Change)BIG. | BIG. | |
| Initial Exam Team nnIEXX | IEXX |
3 legal events, as the office reported them to INPADOC
Over the term
Point at a mark for the eventEvents
| Event | Code | |
|---|---|---|
| Maintenance fee paymentMAFP | MAFP | |
| Maintenance fee paymentMAFP | MAFP | |
| Information on status: patent grantGrantedPATENTED CASESTCF | STCF |
Numbers
- Publication
- 10133588
- Application
- 15298473
Titles
- English
- Transforming instructions for collaborative updates
Patent term adjustment
- Applicant delay
- −78 days
- Net adjustment
- 0 days
Classification
- CPC, 11
- G06F9/451
- G06F8/65
- G06F3/0481
- G06F3/0482
- G06Q10/101
- G06F17/2211
- G06F17/241
- G06F17/30371
- G06F16/2365
- G06F40/169
- G06F40/194
- IPC, 7
- G06F9 451
- G06F17 24
- G06F17 22
- G06F3 0482
- G06F3 0481
- G06F17 30
- G06Q10 10
- USPC, 1
- 715733000