US9380011B2 - Participant-specific markup - Google Patents

Participant-specific markup Download PDF

Info

Publication number
US9380011B2
US9380011B2 US13/094,788 US201113094788A US9380011B2 US 9380011 B2 US9380011 B2 US 9380011B2 US 201113094788 A US201113094788 A US 201113094788A US 9380011 B2 US9380011 B2 US 9380011B2
Authority
US
United States
Prior art keywords
conversation
participant
edits
client
incremental
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active, expires
Application number
US13/094,788
Other versions
US20150195221A1 (en
Inventor
Lars Eilstrup Rasmussen
Jens Eilstrup Rasmussen
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Google LLC
Original Assignee
Google LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Google LLC filed Critical Google LLC
Priority to US13/094,788 priority Critical patent/US9380011B2/en
Assigned to WALKWAY TECHNOLOGIES US LLC. reassignment WALKWAY TECHNOLOGIES US LLC. ASSIGNMENT OF ASSIGNORS INTEREST (SEE DOCUMENT FOR DETAILS). Assignors: RASMUSSEN, JENS EILSTRUP, RASMUSSEN, LARS EILSTRUP
Assigned to GOOGLE INC. reassignment GOOGLE INC. ASSIGNMENT OF ASSIGNORS INTEREST (SEE DOCUMENT FOR DETAILS). Assignors: WALKWAY TECHNOLOGIES US LLC
Publication of US20150195221A1 publication Critical patent/US20150195221A1/en
Application granted granted Critical
Publication of US9380011B2 publication Critical patent/US9380011B2/en
Assigned to GOOGLE LLC reassignment GOOGLE LLC CHANGE OF NAME (SEE DOCUMENT FOR DETAILS). Assignors: GOOGLE INC.
Active legal-status Critical Current
Adjusted expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L51/00User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
    • H04L51/21Monitoring or handling of messages
    • H04L51/216Handling conversation history, e.g. grouping of messages in sessions or threads
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L51/00User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
    • H04L51/04Real-time or near real-time messaging, e.g. instant messaging [IM]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • G06F3/048Interaction techniques based on graphical user interfaces [GUI]
    • G06F3/0481Interaction techniques based on graphical user interfaces [GUI] based on specific properties of the displayed interaction object or a metaphor-based environment, e.g. interaction with desktop elements like windows or icons, or assisted by a cursor's changing behaviour or appearance
    • G06F3/04817Interaction techniques based on graphical user interfaces [GUI] based on specific properties of the displayed interaction object or a metaphor-based environment, e.g. interaction with desktop elements like windows or icons, or assisted by a cursor's changing behaviour or appearance using icons
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • G06F3/048Interaction techniques based on graphical user interfaces [GUI]
    • G06F3/0484Interaction techniques based on graphical user interfaces [GUI] for the control of specific functions or operations, e.g. selecting or manipulating an object, an image or a displayed text element, setting a parameter value or selecting a range
    • G06F3/04842Selection of displayed objects or displayed text elements
    • H04L51/16
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L51/00User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
    • H04L51/21Monitoring or handling of messages
    • H04L51/234Monitoring or handling of messages for tracking messages
    • H04L51/34

Definitions

  • the disclosed embodiments relate generally to communication systems. More particularly, the disclosed embodiments relate to methods, systems, and user interfaces for transmitting, receiving, and rendering electronic messages and markup of electronic messages.
  • a variety of electronic communications systems including electronic email (“email”) systems and instant messaging (IM) system are well known.
  • email electronic email
  • IM instant messaging
  • email and IM systems individual messages can be forwarded and replied to, and the content of a previous message can be copied and inserted into a new message and modified.
  • copying content and then modifying the content does not provide any way to quickly and efficiently view changes to the modified content.
  • multiple users have made changes to the content there is no mechanism for easily identifying which users made each of the changes to the content.
  • Such operations unnecessarily duplicate content that is common between successive versions of the content.
  • the embodiments disclosed herein reduce or eliminate the problems identified above by providing a participant-specific markup of hosted conversations so as to provide participants in the conversations with a clear indication of the edits that have been made to a portion of a conversation since the last time that the participant viewed the portion of the conversation.
  • a method is performed at a server system having one or more processors and memory storing one or more programs for execution by the one or more processors, the method including: sending, to a first client, information enabling the first client to display at least a portion of a conversation to a first participant.
  • the conversation has a plurality of participants including the first participant and a second participant.
  • the method further includes receiving a notification that is indicative of a first state of the portion of the conversation as viewed by the first participant at a first time, and receiving a notification that the portion of the conversation has ceased to be viewed by the first participant.
  • the method further includes receiving a request from the second participant to make edits to the portion of the conversation, and in response to receiving the request from the second participant, at a second time that is after the first time, updating the portion of the conversation to a second state.
  • the method further includes sending, to the first client, information enabling the first client to display a markup of the portion of the conversation that is indicative of one or more edits that transition the portion of the conversation from the first state to the second state.
  • a server system includes one or more processors, memory, and one or more programs; the one or more programs are stored in the memory and configured to be executed by the one or more processors and the one or more programs include instructions for performing the operations of the method described above.
  • a non-transitory computer readable storage medium has stored therein instructions which when executed by one or more processors, cause a server system to perform the operations of the methods described above.
  • a method, system and computer readable storage medium is provided with more efficient methods for displaying electronic messages to users and providing an indication of edits that have been made to content of the electronic messages.
  • FIG. 1 is a block diagram illustrating an exemplary distributed computer system according to certain embodiments of the invention.
  • FIG. 2 is a block diagram of a distributed system including a conversation server and clients coupled by one or more communication networks, according to certain embodiments of the invention.
  • FIGS. 3A-3C are block diagrams of data structures for a conversation database, a participant list and a conversation log, respectively, according to certain embodiments of the invention.
  • FIG. 4 is a block diagram illustrating a data structure for a user database, according to certain embodiments of the invention.
  • FIGS. 5A-5E are flowcharts representing a method for hosting conversations at a server, according to certain embodiments of the invention.
  • FIG. 6 is a block diagram of a plurality of linked conversation server systems, with mechanisms for obtaining and distributing user online presence information, according to certain embodiments of the invention.
  • FIG. 7 is a block diagram of a conversation server for a hosted conversation system, according to certain embodiments of the invention.
  • FIG. 8 is a block diagram of a client having a user who participates in one or more conversations in a hosted conversation system, according to certain embodiments of the invention.
  • FIGS. 9A-9B illustrate a series of windows showing successive edits to a conversation by a plurality of participants of the conversation, and playback of those edits.
  • FIG. 10 illustrates a series of windows showing solo and team-based drafting of a conversation.
  • FIGS. 11A-B are flowcharts representing a method for editing, playback and drafting of conversations hosted at a server, according to certain embodiments of the invention.
  • FIG. 12 illustrates a process diagram showing concurrency control between a plurality of potentially conflicting edits received from a plurality of participants.
  • FIG. 13 illustrates two sequences of separate edit operations, both performed on the same content unit, where one sequence is received from a first participant and a second sequence is received from a second participant in a conversation, and transforms thereupon.
  • FIG. 14 illustrates first and second sequences of edit operations, applied to a content unit of an electronic conversation, received from a first participant and a second participant, respectively, and transformed sequences of merged edit operations corresponding to the received first and second sequences of edit operations.
  • FIG. 15 is a flowchart representing a method of concurrency control at a server, and at a client, when a plurality of participants in a conversation make potentially conflicting edits to the conversation.
  • FIG. 16 is a block diagram of a distributed client-server computing system.
  • FIGS. 17A-17G illustrate exemplary user interfaces for displaying a participant-specific markup for at least a portion of a conversation in accordance with some embodiments.
  • FIGS. 18A-18H include a flow chart illustrating a method of generating a participant-specific markup for at least a portion of a conversation in accordance with some embodiments.
  • FIG. 1 is block diagram illustrating an exemplary distributed computer system 100 according to certain embodiments of the invention.
  • Computer system 100 includes a plurality of clients 110 .
  • Users of the clients 110 are participants 112 in conversations hosted by a set of conversation servers 130 (sometimes called a conversation server system).
  • the clients 100 can be any of a number of computing devices (e.g., Internet kiosk, personal digital assistant, cell phone, gaming device, desktop computer, laptop computer, handheld computer, tablet computer, or combinations thereof) used to enable the activities described below.
  • Each client 110 is coupled to a network 120 , which can be any of a number of networks (e.g. Internet, intranet, local area network, wide area network, wireless network, wired network, optical network, or a combination of such networks). More generally, the clients 100 and conversation servers 130 are coupled to each other via one or more communication networks 120 .
  • a respective client 110 -B executes a client application 114 that facilitates access from the client 110 to a respective hosted conversation server 130 .
  • the client application 114 may include a graphical user interface.
  • the client application may be a web browser or other browser application, such as Firefox (trademark of Mozilla Foundation), Internet Explorer (trademark of Microsoft Corporation), Safari (trademark of Apple Inc.), or Chrome (trademark of Google Inc.).
  • a system 100 may have a single conversation server 130
  • the system 100 may have multiple conversation servers 130 .
  • multiple conversation servers 130 -A and 130 -B may be hosted by different service providers, such as providers 116 -A and 116 -B respectively.
  • the providers are internet service providers (ISPs) providing a conversation service. Alternately, some or all of the providers may be dedicated conversation providers.
  • the conversation servers 130 may be coupled together directly, or by a local area network (LAN), or via the network 120 .
  • LAN local area network
  • the conversation server(s) 130 host conversations between participants 112 . More specifically, each conversation server 130 hosts conversations on behalf of a set of users. At least some of those users are subscribers of the hosted conversation system 100 and thus have user accounts. As described in more detail below, some of the conversation participants need not be subscribers of the hosted conversation system.
  • the updates are sent to all the conversation servers 130 that host conversations for the participants in the conversation. Those host servers, in turn, send the updates to the clients 110 being used participants in the conversation.
  • the conversation updates may be sent relatively instantaneously (e.g., within a second or two) to the clients 110 of active participants in the conversation.
  • clients 110 of passive participants 112 who are online and logged into the conversation system 100 , but who are not currently viewing the conversation or are not current participating in the conversation receive information that the conversation has been updated, without receiving the updates to the conversation.
  • the participant “opens” the conversation selects it for viewing
  • the updated conversation is downloaded to the participant's client from conversation server 130 that hosts conversations for that user.
  • FIG. 2 is a block diagram of system 200 illustrating exemplary embodiments of a conversation server 130 and client systems 210 and 220 .
  • System 200 includes a communications network 120 , as described above, coupled between a conversation server 130 and a plurality of the clients, including client 210 .
  • Client 210 corresponds to a respective client 110 of FIG. 1 , and is sometime herein called a “participant client” because the user of client 110 / 210 is a participant in one or more conversations hosted by the conversation server 130 .
  • System 200 includes at least one participant client 210 .
  • Participant client 210 optionally includes a browser 212 , such as a web browser, or other client application to facilitate participant interaction with a respective conversation server 130 .
  • the browser 212 typically includes (or controls) a virtual machine (e.g., a Java virtual machine) for executing software embedded in web pages and other documents rendered by the browser 212 .
  • the browser 212 executes a conversation application 214 that is embedded, at least in part, in a web page.
  • the web page (which may be called a “hosted conversation web page”) is downloaded from a server, such as a conversation server 130 , to the client 210 and includes executable instructions that are executed by the virtual machine of the browser 212 in the client 210 .
  • the browser 212 and conversation application 214 together form the client application 114 of FIG. 1 .
  • the conversation application 214 facilitates participant interaction with the conversation server system 130 .
  • conversation application 214 is a plug-in or extension of the browser application 212 .
  • Non-subscriber clients 220 enable users who do not have accounts in the conversation system to participate, in at least a limited manner, in hosted conversations. Participation in hosted conversations may be limited in a number of ways, for example by allowing the user of a non-subscriber client to read the content of a conversation, and allowing the user to contribute new content, but not allowing the user of the non-subscriber client to use other features such as editing content already in the conversation, responding to specific portions of content previously contributed by other participants, and playing back a conversation.
  • Non-subscriber clients 220 access the conversation server system 130 in a manner that is distinct from the manner used by clients 210 whose users are subscribers of the hosted conversation system.
  • An example of a non-subscriber client 220 is a weblog (“blog”) server 226 , having a weblog client 228 .
  • a hosted conversation can include a weblog 228 (also called a weblog client) as a participant in the conversation, in which case content of the hosted conversation is published in the weblog. The published conversation is visible on the weblog 228 , which is hosted by the weblog server 226 .
  • a weblog 228 when a weblog 228 is added as a participant to a conversation, content of the conversation is transmitted to (also called “posted to”) the weblog 228 by the conversation server 130 that hosts the conversation. After the weblog 228 is added as a participant, new content added to the conversation is also transmitted to the weblog 228 by the conversation server 130 that hosts the conversation.
  • a user e.g., a user of another client 110 , FIG. 1
  • views content of the weblog 228 e.g., by visiting a URL associated with the weblog 228 , hosted on the weblog server 226
  • Non-subscriber client 220 is an email server 224 , having email clients 222 .
  • Content from host conversations can be sent to one or more email clients 222 of one or more email servers 224 .
  • content of the conversation is transmitted to the email client 222 by the conversation server 130 that hosts the conversation.
  • Weblogs and email servers are also examples of “automated clients.”
  • Other examples of automated clients include services, such as archival services, translation services, spell-check and grammar-check services, that may be invoked to provide services to other participants of a hosted conversation.
  • email clients 222 and weblog clients 228 can read but cannot provide content to a hosted conversation, and thus are just observers.
  • authoring capabilities the ability to provide content to a conversation
  • a conversation server 130 includes a front-end or conversation engine 246 for managing conversations and communications with clients, and one or more auxiliary services (modules, applications or servers) 250 for managing services related to conversations.
  • auxiliary services 250 include spell checking 252 , language translation or localization 256 , and managing attachments 258 to conversations.
  • Conversation server 130 also includes online presence services 248 , enabling users to know the online status of other users (e.g., other subscribers of the hosted conversation system), as described in detail below with reference to FIG. 6 .
  • Server 130 includes a user database 270 , described in detail below with reference to FIG. 4 .
  • the front-end or conversation engine 246 utilizes (or, alternately includes) an update, access and search/query engine 260 to provide participant access to conversations, and to provide search functions in conversations.
  • one or more conversation indexes 264 are inverse indexes, mapping words or terms in conversations to the conversations in which they occur.
  • the one or more conversation indexes 264 are used to find conversations in a hosted conversation database 262 that match specified search queries. As content is added to conversations in the conversation database 262 the one or more conversation indexes 264 are updated with that content so as to make the added content accessible by the execution of search queries.
  • the conversation database 262 is described in more detail below with reference to FIG. 3 .
  • conversation server 130 includes an SMTP gateway 242 for facilitating email communication with one or more email servers 224 .
  • a subscriber is a user for whom a conversation server 130 (e.g., any conversation server 130 in a set of conversation servers 130 that provide conversation services) maintains a user record or profile (see 402 , FIG. 4 , as described below).
  • a conversation server 130 e.g., any conversation server 130 in a set of conversation servers 130 that provide conversation services
  • maintains a user record or profile see 402 , FIG. 4 , as described below.
  • the conversation server 130 maintains for a respective user/subscriber a list 414 ( FIG. 4 ) of conversations in which the user/subscriber is a participant.
  • the conversation server 130 updates the status (conversation state 438 - 1 , FIG. 4 ) of each such conversation in the user's conversation list 414 when the state of the respective conversation changes.
  • the conversation server 130 sends to the user a requested list of conversations (typically comprising a subset of the complete set of conversations in which the user is a participant), the list includes status information for the listed conversations.
  • the status information in the returned list is generally a subset of the conversation state 438 , as only a portion of the conversation state (e.g., whether there is any content in the conversation that has not yet been viewed by the user) is needed when displaying the list of conversations.
  • FIG. 3A is a block diagram illustrating exemplary data structures for conversation database 262 . While most conversations have a single set of participants that share all the content of the conversation, some conversations, herein called waves or conversation containers, have a more complicated structure. In particular, a first conversation can result in any number of “side conversations” by various subsets of the participants in the first conversation, and can even include additional participants. For example, a conversation container or wave can be used by two or more teams of participants (e.g., Team A and Team B) to negotiate an agreement, or to co-edit a document or presentation or the like.
  • teams of participants e.g., Team A and Team B
  • an initial conversation (sometimes called the primary conversation or master conversation) is started among all the participants, and then “private conversations” are spawned off the initial conversation to enable participants in each of the teams to communicate privately with other participants of the team, while still having access to all of the content of the initial conversation.
  • each private conversation has a set of participants that excludes at least one participant in the primary conversation.
  • a private conversation can include one or more additional participants (e.g., a consultant) who is not a participant in the primary conversation.
  • Each participant only has access to the content of the conversations in which they are a participant.
  • the participants on Team A have access to the content of both the Team A private conversation and the primary conversation
  • the participants on Team B have access to the content of both the Team B private conversation and the primary conversation.
  • FIG. 3A is a block diagram of exemplary data structures that support both simple conversations (i.e., single conversations with no related private conversations) as well as waves or conversation containers that include multiple conversations (sometimes called a primary conversation and one or more sub-conversations).
  • Conversation database 262 includes a plurality of wave records 302 - 1 to 302 -N, each containing the data for a wave or conversation container. When a respective wave has only one conversation, the only information in the corresponding wave record 302 is for the single conversation, as represented by one conversation record 310 . More generally, a wave record 302 includes one or more conversation records 310 - 1 to 310 -C. Each conversation record 310 contains data for a respective conversation, including:
  • Conversation metadata 322 is metadata for the conversation corresponding to the conversation record 310 and identified by conversation identifier 310 .
  • the conversation metadata 322 includes a conversation creation timestamp 331 (indicating the date and time the conversation was created), and a list of participants 332 (described in more detail in FIG. 3B ) for the conversation.
  • the metadata 322 may optionally include other metadata, such as metadata identifying tags 325 (e.g., system and/or user assigned labels that are “public,” and thus available to all participants in the conversation) associated with the conversation, and other characteristics of the respective conversation associated with the conversation record 310 .
  • the participant list 332 for the primary conversation of the wave will typically include all the participants in all the conversations in the wave.
  • private conversations i.e., conversations other than the primary conversation
  • each of the private conversations in a wave will typically have a participant list 332 does not include at least one of the participants in the primary conversation of the same wave.
  • a parent ID/insertion position 333 is provided for each of the private conversations, but not for the primary conversation.
  • the parent ID/insertion position 333 identifies the parent of the private conversation, as well as the position in the identified parent conversation at which content of the private conversation should be inserted when viewed by participants of the private conversation.
  • the parent of a private conversation is the primary conversation of the wave, but in some instances the parent of a private conversation can be another parent conversation that is higher up in the hierarchy (or graph) of conversations in the wave.
  • the parent of a private conversation views the wave that includes the private conversation, the content of both the parent conversation and the private conversation will be seen (assuming the participant is also a participant of the parent conversation).
  • the user will see only the content of the conversation (or conversations) in the wave for which they are a participant.
  • the conversation log 324 ( FIG. 3C ) records all changes to the conversation, including changes to the content of the conversation as well as to the set of participants and other characteristics of the conversation.
  • the conversation log 324 is accessed when participants ask to see the state of the conversation, or a content unit of the conversation, at one or more points in time.
  • the conversation log 324 can be used to reconstruct or review the sequence of edits made to a content unit of the conversation. This is sometimes called “playing back” or “playback” of the conversation. Playback of a conversation can be performed in a variety of ways, including time forward or time backward, and showing updates to just a portion of the conversation or to the entire conversation.
  • the changes to a conversation or a portion of a conversation may be viewed as a participant-specific markup where each participant sees a markup that shows the differences between the last viewed state of the portion of the conversation for the participant and the current state of the portion of the conversation (e.g., a markup that shows each new participant any revisions that have been made to a content contribution since the participant last viewed the content contribution), as described in greater detail below with reference to FIGS. 17A-17G and 18A-18H .
  • a respective content contribution 326 (also called a content unit, “blip,” or portion of the conversation) in a conversation can be a message, much like an email message or instant message.
  • Other content contributions 326 in a conversation can be documents (e.g., a report, meeting agenda, etc.), pictures, presentations, audio files, video files, or virtually any other type of electronic document or content.
  • the data in a conversation record 310 for each content contribution 326 includes:
  • content unit metadata 346 for a content unit 326 includes:
  • the metadata 346 for a content unit 326 also includes one or more of the following:
  • the metadata 346 for a content unit 326 includes at least one value (e.g., position 350 or parent identifier 354 ) that identifies or represents the position of the content unit 326 in the conversation.
  • a conversation index 264 (see FIG. 2 ) enables fast access to conversations in the conversation database 262 through searches of the index.
  • FIG. 3B is a block diagram illustrating data structures for the participant list 332 in the conversation metadata 322 ( FIG. 3A ) of a conversation record 310 .
  • a participant list 332 includes a plurality of participant records 362 , one for each participant in a respective conversation.
  • each participant record 362 includes the following information, or a subset of the following information:
  • Another optional flag 376 in the per-user conversation state 373 for a respective participant is a reminder flag.
  • the per-user conversation state 373 also includes a corresponding timestamp indicating the date and time (or pair of timestamps to indicate a range of dates/times) at which to reminder the participant to pay attention to the conversation or a portion thereof, optionally a user ID identifying the user who initiated the reminder (in some embodiments, reminders can be sent by a user not only to themselves, but to other participant(s) in the conversation), and optionally a content range indicator for specifying a portion of the conversation that is the subject of the reminder.
  • a ping flag is included in the per-user conversation state 373 when another participant has sent a ping (which is a form of notification, or instant message) to the participant (typically an online participant), or when the participant has sent a ping to another participant.
  • the ping flag when present, indicates to the client application that a ping notification (e.g., a pop-up box) is to be displayed.
  • cursor position (see 379 , FIG. 3B ) of each participant who is actively editing a content unit or entering new text in a conversation is published to and visible to other participants of the conversation, unless a respective participant has elected to suppress publication of their cursor position, in which case that aspect of the participant's conversation state 373 is not considered to be private to the participant.
  • cursor position information for each of the active participants is transmitted to the clients of the active participants (via their hosting conversation servers).
  • a plurality of cursor positions are concurrently displayed when the cursor positions are sufficiently close to each other to enable concurrent display.
  • the server 140 maintains for each respective participant 362 a conversation state 373 of the respective conversation in regard to the respective participant.
  • the server 130 provides to the respective participant (e.g., to a client that is displaying the conversation to the participant) the state of the respective conversation in regard to the respective participant. In some embodiments, this includes providing to the participant (e.g., to the client being used by the participant) the read status of the content units of the respective conversation in regard to the participant (i.e., indicating which content units have already been read or viewed (in their current state) by the participant, and which have not).
  • providing the conversation state 373 of the respective conversation in regard to the respective participant includes providing labels 378 , specified by the respective participant for the respective conversation.
  • providing the state 373 of the respective conversation in regard to the respective participant includes providing, in accordance with instructions from the participant, metadata (e.g., ignore flag 377 ) to ignore the respective conversation.
  • metadata e.g., ignore flag 377
  • This provides a participant with an option to manage conversations in accordance with a rule, in effect to archive conversations, and to reduce congestion in a conversation viewer. For example, when a participant marks a conversation with a system defined label of “ignore” or “mute,” the ignore status flag 377 for the participant (for the marked conversation) is set, and the conversation is thereafter treated (on behalf of this particular participant) much like an archived message or conversation. Other participants of the conversation may continue to see the conversation in their list of active conversations if they have not marked the conversation with the “ignore” label.
  • the per-user conversation state 373 for each participant of each hosted conversation is stored in the conversation database 262 , as shown in FIG. 3A .
  • the per-user conversation state 373 for each participant of each hosted conversation is stored in the user database 400 , discussed below.
  • per-user conversation state 373 information (for each participant of each hosted conversation) is stored in a separate database or server (sometimes called the “user supplement” database or server) that is separate from the conversation database 262 and user database 400 .
  • pointers to per-user conversation state 373 information (e.g., record) in the user supplement database may be stored in the user database 400 and conversation database 262 .
  • pointers are not stored, and the per-user conversation state 373 for a particular user of a respective conversation is retrieved, typically for transmission to a client participating in the conversation, from the user supplement database on an as-needed basis and is updated in accordance with operations (e.g., reading content, entering end content, editing content, etc.) performed by the participant.
  • the conversation server 130 stores, for each respective subscriber, a contact list ( 416 , described in FIG. 4 ) associated with the respective subscriber.
  • the contact list is stored in a user database 270 ( FIG. 2 ) or 400 ( FIG. 4 ).
  • the client When a conversation is sent to a client for display to a user, the client receives only a portion of the conversation record 310 ( FIG. 3A ) for the conversation.
  • the portion of the conversation record 310 sent to and stored at the client excludes the conversation log 324 , and the conversation state 373 of other participants (except, the cursor position of other currently active participants in the conversation who have not blocked the transmission of their cursor position).
  • the conversation log 324 is sent to a client 110 only when the participant at that client has requested playback of the conversation, or a user-specified portion of the conversation, or has requested to view the state of the conversation at a particular time or point in the past.
  • FIG. 3C is a block diagram illustrating data structures for the conversation log 324 , according to some embodiments.
  • the conversation log 324 includes an time ordered sequence of log records 385 - 1 to 385 -C (sometimes called log entries).
  • a respective log record 385 includes a content ID 386 , identifying the content unit (if any) updated by the conversation edits recorded in the log record 385 , metadata 388 relevant to the conversation edits recorded in the log record, references 394 (e.g., one or more pointers or file names) to any attachments added to the conversation by the conversation edits recorded in the log record, and a list of the conversation edits or changes 396 recorded in the log record.
  • references 394 e.g., one or more pointers or file names
  • the metadata 388 includes a timestamp 389 and/or sequence number that uniquely identifies the order of the conversation edits in the log record, relative to the conversation edits in other log records for the same conversation.
  • the metadata 388 also identifies a list of authors (also called contributors) 390 of the conversation edits in the log record, and the starting position 392 of the conversation edits recorded in the log record 385 . While the authors list 390 will contain only one author for most log records 385 , when multiple authors make edits or contribute content to a content unit during a short period of time, or during overlapping time periods, a single corresponding log record 385 includes a list 390 of all of the authors who contributed to the change in the content unit recorded by that log record 385 .
  • the starting position 392 is incorporated into the conversation edits 396 , as an offset or position setting for the first edit or update operation of the conversation edits 396 , and in those embodiments the log records do not have a separate starting position 392 field.
  • FIG. 4 is a block diagram illustrating a data structure for a user database 400 , according to certain embodiments of the invention.
  • the database 400 includes a plurality of user records 402 .
  • each user record 402 includes:
  • the conversation list 414 associated with a user includes a plurality of user-conversation records 434 , each record relating to a conversation in which the user is a participant.
  • Each user-conversation record 434 includes:
  • the system includes a separate per-user inverse index 424 for each user of the system; each such index 424 is an index that maps the terms, labels, tags, etc. of the conversations in which a user is participant to the conversations (and optionally, to the content units with the conversations, or locations within the conversations) containing those terms, labels, tags, etc.
  • These per-user indices enable fast indexing and fast searching of the conversations in which a user is a participant.
  • additional indices (sometimes called “big wave” indices) are used to provide fast indexing and access to “big wave” conversations having large numbers (e.g., more than a threshold number, such as 500 or 100) of participants.
  • the content of “big wave” conversations is not indexed in the per-user inverse indices 424 , and is instead indexed in one or more “big wave” indices.
  • additional per-group indices are used to index those conversations and to provide fast searching of those conversations; and the conversations (if any) in which a respective user participates only as a group member are not included in the user's per-user inverse index 424 .
  • multiple indices may be searched, in which case the search results from the multiple indices are merged prior to returning the search results to the requesting user.
  • server 130 provides the same content of a conversation to all participants of the conversation, and provides each online participant with online presence information for the other participants in the same conversation.
  • the server allows a participant of a conversation to disable publication of their online presence information to other participants in the conversation.
  • the server allows a participant of a conversation to selectively enable publication of their online presence information to other participants in the conversation (e.g., allowing publication of the participant's online presence only to users designated by the participant; or alternately, disabling publication of the participant's online presence to users specifically designated by the participant).
  • server 130 provides the same content to each participant, formats content of the conversation to be compatible with one or more content types that a client device 110 associated with a respective participant has been configured to receive, and transmits the formatted content to the client device.
  • conversation server 130 when delivering the content of a conversation to certain clients (e.g., a cell phone or PDA), formats the content by compressing multimedia data associated with the content (e.g., to reduce bandwidth requirements).
  • the server provides a subset of multimedia data associated with the content (e.g., a thumbnail image, or short audio/video clip) to the client.
  • the conversation server removes multimedia data associated with the content (e.g., strips out multimedia and just provides text) that is delivered to the client.
  • the conversation server 130 authenticates a user using authentication information 428 prior to providing content from conversations to the user.
  • the conversation server 130 sends content from conversations in which a respective user is a participant to a weblog (e.g., weblog server 226 or weblog client 228 ), specified (e.g., by Blog URL 430 ) in the user record 402 for that user.
  • a respective participant in a conversation is an automated client
  • content of the conversation is sent to the automated client.
  • the automated client may be a weblog, an email server or account, or a service provider such as a translation service, spelling checking service, or the like.
  • FIGS. 5A-5E are flowcharts representing methods for hosting conversations at a server, according to certain embodiments of the invention. These methods are governed by instructions that are stored in a non-transitory computer readable storage medium and that are executed by one or more processors of one or more servers. Each of the operations shown in FIGS. 5A-5E may correspond to instructions stored in a computer memory or computer readable storage medium.
  • the computer readable storage medium may include a magnetic or optical disk storage device, solid state storage devices such as Flash memory, or other non-volatile memory device or devices.
  • the computer readable instructions stored on the computer readable storage medium are in source code, assembly language code, object code, or other instruction format that is executed or interpreted by one or more processors.
  • FIG. 5A shows a method 500 for hosting conversations at a server.
  • a server hosts ( 502 ) a plurality of conversations, each having an identified set of participants.
  • the server is typically one of a plurality of servers that hosts conversations in a hosted conversation system.
  • the server provides ( 506 ) the same content from a conversation to all the participants of the conversation.
  • the server also provides ( 508 ) online presence information of each of the plurality of participants in the conversation to other participants in the conversation.
  • the server receives ( 510 ) content from each of a plurality of participants of the conversation and transmits the received content to the other participants of the plurality of participants.
  • the server provides ( 512 ), upon an additional participant being added to the conversation, the same content of the conversation to the additional participant as provided to the identified set of participants, and adds the additional participant to the identified set of participants.
  • the additional participant is using a client capable of receiving the entire content of the conversation
  • the entire content of the conversation is sent to the client currently being used by the additional participant.
  • a participant added to a conversation even long after the conversation has begun, receives content contributed to the conversation before the participant was added to the conversation.
  • the server formats ( 514 ) content of the conversation to be compatible with one or more content types that a client device associated with a respective participant has been configured to receive, and transmits the formatted content to the client device.
  • the server formats content from a conversation by performing at least one of: compressing multimedia data associated with the content, providing a subset of multimedia data associated with the content, and removing multimedia data associated with the content (e.g., removing video and audio data but leaving text content).
  • the server receives ( 518 ) a search request (often called a query or search query) from a participant, and provides to the participant a search result, including content from at least one of the plurality of conversations, in response to the search request.
  • a search request (often called a query or search query) from a participant, and provides to the participant a search result, including content from at least one of the plurality of conversations, in response to the search request.
  • the server provides ( 520 ) to the participant a search result that includes a list of one or more conversations that match the search request.
  • the search request is processed by query engine 260 ( FIG. 2 ), using an inverse index 264 of conversation content to identify conversations, or content within one or more conversations, that match the search request.
  • FIG. 5B shows a continuation of the method 500 of FIG. 5A .
  • a server maintains ( 530 ) for each respective participant a state of the respective conversation in regard to the respective participant, and provides to the respective participant (e.g., to the client currently being used by the participant to view the conversation) the state of the respective conversation in regard to the respective participant. In some embodiments, this includes providing ( 532 ) to the participant (e.g., to the client being used by the participant) the read status of the content units of the respective conversation in regard to the participant (i.e., indicating which content units have already been read or viewed by the participant, and which have not). In some embodiments, providing ( 534 ) the state of the respective conversation in regard to the respective participant includes providing labels, if any, specified by the respective participant for the respective conversation.
  • the metadata maintained for a conversation with respect to a particular participant includes ( 536 ) metadata to ignore the respective conversation, in accordance with instructions from the participant.
  • the ignore metadata may be provided to the search engine 260 ( FIG. 2 ) of the conversation server.
  • the server provides ( 538 ) formatting information corresponding to the conversation state, the formatting information for use when displaying the conversation or portions thereof.
  • the formatting information includes one or more of: color (e.g., of text, background, borders), font, indenting, position (e.g., superscript or subscript), etc.
  • the server stores ( 540 ), for each respective participant, a contact list associated with the respective participant.
  • the server verifies ( 542 ) (using authentication information 428 ) that the participant is authorized to receive the content of a conversation, prior to providing content to a participant.
  • the server maintains ( 544 ) a set of participants of a respective conversation, including one or more subscribers of the server system and an email participant identified by an email address.
  • the server maintains ( 546 ) a set of participants of a respective conversation, including one or more subscribers of the conversation system hosted by the server and a weblog on which content of the conversation is posted.
  • FIG. 5C shows a continuation of the method 500 of FIG. 5A .
  • the server maintains ( 550 ) for a respective user (of the conversation system hosted by a set of servers that includes the server) a list of conversations in which the user is a participant.
  • the server updates a status of each such conversation in the list when a state of the respective conversation changes.
  • the server Upon request from the user (e.g., from a client being used by the user) the server sends to the user a list comprising at least a portion of the list of conversations in which the user is a participant, the list including status information for the listed conversations.
  • each respective user for which the server maintains ( 552 ) a list of conversations is a subscriber of the hosted conversation system.
  • FIG. 5D shows a method 560 of hosting electronic messages.
  • a server hosts ( 562 ) a plurality of conversations.
  • the server provides ( 564 ) content of the conversation to a plurality of clients associated with participants of the conversation, including providing to each client all content of the conversation that the client has been configured to receive.
  • the server receives ( 566 ) content from respective participants of the conversation and transmits to the clients associated with other participants of the conversation at least a portion of the received content.
  • the server also provides ( 568 ), upon an additional participant being added to the conversation, to a client associated with the additional participant all content of the conversation that the client associated with the additional participant has been configured to receive.
  • FIG. 5E shows a method 570 of hosting electronic messages.
  • a server hosts ( 572 ) conversations initiated by the respective subset of users.
  • the server receives ( 574 ) content from respective participants of the conversation and makes the content available to other participants of the conversation.
  • the content is transmitted to those other conversation servers.
  • the content is transmitted to the participants when they log in and request the content of the conversation.
  • the server also provides ( 576 ), upon an additional participant being added to the conversation, all the content of the conversation to a client associated with the additional participant, or alternately, all content of the conversation that the client associated with the additional participant has been configured to receive.
  • the server provides ( 578 ) a uniform view of the conversation to a plurality of the participants.
  • FIG. 6 is a block diagram of a conversation system 600 having a plurality of linked conversation servers 130 , according to certain embodiments of the invention.
  • FIG. 6 illustrates a logical coupling of the conversation servers 130 to each other and to clients for monitoring and reporting the online status (presence) of the system's users.
  • the network 600 includes conversation servers 130 -A, 130 -B, and 130 -C.
  • the conversation system 600 may include more or fewer conversation servers than shown in FIG. 6 .
  • Each conversation server 130 hosts conversations for a set of users 138 .
  • each conversation server 130 may host conversations initiated by hundreds or even thousands of users.
  • Conversation server 130 -A is assigned users 138 -A;
  • conversation server 130 -B is assigned users 138 -B;
  • conversation server 130 -N is assigned users 138 -N.
  • Each conversation server 130 includes a respective status monitor 134 ( 134 -A, 134 -B, 134 -N) and a respective status collector 136 ( 136 -A, 136 -B, 136 -N).
  • a user changes online status (e.g., goes from offline to online, by logging into the conversation system)
  • the change in status is detected by a respective status monitor 134 (e.g., a status monitor in the conversation server 130 assigned to the user).
  • the status monitor 134 at the conversation server to which the user is assigned receives a message or otherwise detects the change in online status of that user to “online” (or “active,” “busy,” or whatever status is appropriate).
  • the status collector 136 at the conversation server gathers the online status of the contacts in that user's contact list 416 . While some of the contacts in the user's contact list may be assigned to the same conversation server, other contacts in the user's contact list are assigned to other conversation servers.
  • the status collector 136 of the conversation server to which the user is assigned gathers the online status of the user's contacts, including those assigned to other conversation servers, and forwards at least a portion of the collected status information to the user (i.e., to the client device or system currently being used by the user).
  • the status collector broadcasts requests for status information of the user's contacts to the other conversation servers, and the conversation servers to which the contacts are assigned respond to the requests.
  • the status collector determines the conversation servers to which the contacts are assigned and sends requests for status information to those conversation servers.
  • the assignments of users to conversation servers may be determined by reference to an index of all users, a copy of which may be stored in all of the conversation servers or a subset thereof.
  • a client application at the client being used by the user A 1 sends a message to the conversation system 600 announcing that user A 1 is online.
  • the status monitor 134 -A at the conversation server 130 -A receives the message and updates the status of the user A 1 to online.
  • the status monitors 134 of other conversation servers either do not receive this message, or ignore it because the user A 1 is not assigned to those other conversation servers.
  • the status collector 136 -A at the conversation server 130 -A obtains a list of the contacts for the user A 1 (e.g., by accessing contact list 416 for user A 1 ).
  • the status collector 136 -A gathers status information from the conversation servers to which the contacts are assigned. Thus, if a contact is assigned to conversation server 130 -A, then the status collector 136 -A accesses the contact's status information stored at conversation server 130 -A. If a contact is assigned to conversation server 130 -B, then server 130 -A communicates with conversation server 132 - 0 to get the status information. A similar procedure occurs if a respective contact is assigned to conversation server 130 -C.
  • FIG. 7 is a block diagram illustrating a conversation server 130 (also sometimes called a conversation system or a conversation server system) in accordance with one embodiment of the present invention.
  • the conversation server 130 includes one or more processing units (CPU's) 702 , one or more network or other communications interfaces 704 , memory 706 , and one or more communication buses 708 for interconnecting these components.
  • the communication buses 708 may include circuitry (sometimes called a chipset) that interconnects and controls communications between system components.
  • the conversation server 130 optionally includes (but typically does not include) a user interface having a display device and a keyboard.
  • Memory 706 includes high-speed random access memory, such as DRAM, SRAM, DDR RAM or other random access solid state memory devices; and may include non-volatile memory, such as one or more magnetic disk storage devices, optical disk storage devices, flash memory devices, or other non-volatile solid state storage devices. Memory 706 may optionally include one or more storage devices remotely located from the CPU(s) 702 . Memory 706 , or alternately the non-volatile memory device(s) within memory 706 , includes a non-transitory computer readable storage medium. In some embodiments, memory 706 or the computer readable storage medium of memory 706 stores the following programs, modules and data structures, or a subset thereof:
  • the conversation engine 714 may include the following modules, or a subset thereof:
  • the conversation management modules 728 include the following modules, or a subset thereof:
  • Each of the above identified elements may be stored in one or more of the previously mentioned memory devices, and corresponds to a set of instructions for performing a function described above.
  • the above identified modules or programs i.e., sets of instructions
  • memory 706 may store a subset of the modules and data structures identified above.
  • memory 706 may store additional modules and data structures not described above.
  • FIG. 7 shows a conversation server
  • FIG. 7 is intended more as functional description of the various features which may be present in a set of servers than as a structural schematic of the embodiments described herein.
  • items shown separately could be combined and some items could be separated.
  • some items shown separately in FIG. 7 could be implemented on single servers and single items could be implemented by one or more servers.
  • the actual number of servers used to implement a conversation server system and how features are allocated among them will vary from one implementation to another, and may depend in part on the amount of data traffic that the system must handle during peak usage periods as well as during average usage periods.
  • FIG. 8 is a block diagram of a client having a user who participates in one or more conversations in a hosted conversation system, according to certain embodiments of the invention.
  • the client 110 includes one or more processing units (CPU's) 802 , one or more network or other communications interfaces 804 , memory 806 , and one or more communication buses 808 for interconnecting these components.
  • the communication buses 808 may include circuitry (sometimes called a chipset) that interconnects and controls communications between system components.
  • the client 110 typically includes a user interface 805 .
  • the user interface includes a display device, a keyboard and a pointer device (not shown), while in other embodiments (e.g., a cell phone or personal digital assistant) the user interface includes a touch screen display.
  • Memory 806 includes high-speed random access memory, such as DRAM, SRAM, DDR RAM or other random access solid state memory devices; and may include non-volatile memory, such as one or more magnetic disk storage devices, optical disk storage devices, flash memory devices, or other non-volatile solid state storage devices. Memory 806 may optionally include one or more storage devices remotely located from the CPU(s) 802 . Memory 806 , or alternately the non-volatile memory device(s) within memory 806 , includes a non-transitory computer readable storage medium. In some embodiments, memory 806 or the computer readable storage medium of memory 806 stores the following programs, modules and data structures, or a subset thereof:
  • the conversation web page 815 includes a client conversation module 818 or other client assistant that is embedded in the web page 815 .
  • the client conversation module 818 comprises executable instructions that are executed by the client 110 ; for example, the client conversation module 818 may include instructions that are executed by a virtual machine (e.g., a Java virtual machine) that is part of the browser 814 .
  • the conversation web page 815 includes a conversation user interface having icons, which when activated by a user, execute various tasks to enable a user to request a list of conversations, select a conversation for display, view various portions of a conversation, participate in the conversation (e.g., by adding content to or editing content of the conversation), start new conversations, download attachments, and so on.
  • Icons in the conversation user interface may function as links to executable procedures and instructions in the client conversation module 818 .
  • the aforementioned conversation record 820 and conversation list 826 may, in some embodiments, be downloaded in response to instructions sent by a client conversation module 818 , or other client assistant embedded in the web page 815 , to a conversation server.
  • the conversation record 820 comprises a client version or subset of the conversation record 310 , described above with respect to FIG. 3A , for a respective conversation.
  • the client conversation record 820 includes conversation metadata 822 needed by the client (e.g., a list of participants and their online status) and content contributions 824 that are the content of the conversation.
  • the conversation record 820 may optionally include the attachments, if any, of the conversation.
  • attachments may be downloaded to some clients (e.g., desktop and laptop computers), but not to others (e.g., mobile phones and personal digital assistants). In some embodiments, the attachments of the conversation are not downloaded until they are requested by the user.
  • thumbnail images and/or snippets e.g., selected text, if any
  • the full content of the attachments is downloaded to the client 110 only upon user request.
  • Each of the above identified modules corresponds to a set of instructions for performing the functions described above.
  • the above identified modules or programs i.e., sets of instructions
  • memory 806 may store a subset of the modules and data structures identified above.
  • memory 806 may store additional modules and data structures not described above.
  • FIGS. 9A and 9B illustrates a series of windows showing edits to a conversation by a plurality of participants of the conversation, and playback of those edits.
  • FIG. 9A illustrates changes made to a conversation by a plurality of participants in the conversation.
  • a first conversation window 910 has a first unit of content 922 entered by a first participant (e.g., Joe), who is the initial author of content 922 .
  • the conversation window 910 includes a zoom option 912 to zoom deeper into a conversation, a reply option 914 to reply to the content 922 , a draft option 916 to create a draft message, or a setting option 918 to change conversation settings.
  • a first caret 924 represents a point (sometimes herein called a cursor position) at which the first participant is typing or editing the content 922 . As the first participant types, deletes, or moves around the content 922 , the caret 924 moves, indicating the location in or portion of the content that the user is editing.
  • the caret may be defined as an XML tag or other markup language tag or expression.
  • the caret content, style, etc. may be selected or defined by a participant, by a system administrator, etc.
  • a second participant provides a sequence of edits to the content 922 .
  • a second caret 934 represents a point at which the second participant (also called the second user) is typing or editing the content 922 .
  • the second user adds the text “Building B” 932 to the content 922 .
  • the original content (by Joe) and the edits thereto (by Pat) are edits by distinct first and second participants in the conversation.
  • a server (e.g., hosting the conversation) prepares for display the first caret at a position corresponding to the first edits by the first participant (Joe) of the conversation, and prepares for display a second caret at a position corresponding to the second edits by the second participant (Pat) of the conversation.
  • the server provides the first and second edits and the first and second carets to the one or more servers for display.
  • timestamps or sequence numbers may be associated with new content or edits to existing content.
  • the timestamps use a consistent time base such as the time base of the hosting server.
  • the second user again edits the content 922 , by deleting the word “second” and replacing it with the word “third” 942 .
  • the second caret 934 is now beside the word “third”, indicating the location where the second user is editing.
  • first user Joe creates a new message, in a new message window 952 within the conversation window 910 and below the first message window (which contains content 922 of the first message), and adds new content 954 to the new message window.
  • Caret 956 represents a new point at which the first user (Joe) is typing or editing the content 954 in the new message window 952 .
  • the conversation is updated with the revised content unit.
  • the updated conversation is provided to the one or more servers hosting conversations for the participants (e.g., Joe, Pat, etc.) in the conversation.
  • a server hosting the conversation checks for conflicts between the first edits and the second edits, and if a conflict occurs, the server notifies a participant associated with the conflict. For example, if participant Pat attempts to edit a piece of text that Joe is currently editing, such that the edits conflict with each other (e.g., Pat deletes a word as Joe is typing it, or Joe deletes a paragraph within which Pat is editing), a conflict occurs and one or both of the participants are notified.
  • conflicts are automatically resolved using a predefined concurrency control procedure, described in more detail below.
  • FIG. 9B illustrates playback of edits to the conversation illustrated in FIG. 9A .
  • the edits are played back in chronological order, e.g., according to timestamps associated with the edits.
  • the edits are played back according to sequence numbers associated with the edits.
  • a participant of the conversation may view changes to conversation using the playback mechanism.
  • the edits are played back using conversation log records 385 from the conversation log 324 (e.g., the client steps through the conversation log records 385 for a conversation or a portion of a conversation in chronological order), as described above with reference to FIGS. 3A-3C .
  • the conversation is played back showing changes within a user-specified portion (e.g., a block of text, a paragraph, a single unit of conversation (blip), etc.) of the conversation in a chronological order.
  • this user-specified portion of the conversation is played back without viewing changes to other portions of the conversation.
  • the user-specified portion is a single content unit of the conversation.
  • content 966 is displayed in a window 964 .
  • a forward option 962 is displayed allowing a viewer to go forward in the conversation playback.
  • content 970 shows edits by second participant (Pat) to the conversation, adding the words “Building B.”
  • a back option 972 is displayed, which allows a participant to move backward in the conversation playback, and the forward option 962 continues to be displayed.
  • content 980 shows further edits by second participant (Pat) to the conversation, replacing the word “second” with “third.”
  • content 990 shows further edits (new window 992 with text) by first participant (Joe) to the conversation.
  • a replay option 994 allows a participant to replay the sequence of updates to the conversation.
  • one or more playback options enable a participant to perform one or more of the following operations: playback recent edits (e.g., most recent in time or in number), edits by a particular participant, edits to a particular portion of the conversation, etc.
  • a playback may only show changes by a particular participant of the conversation. This may allow the participant to review his/her changes, or to view the changes of another participant.
  • edits in the sequence of edits include individual keystrokes of a sequence of keystrokes by a respective participant in the conversation.
  • a plurality of distinct edits in the sequence of edits are distinct keystrokes.
  • a plurality of distinct edits in the sequence of edits are distinct words.
  • edits 932 by participant Pat include a distinct word (Building) and a distinct letter (B)
  • edits 942 include a deletion operation (delete the word “second”) and an addition operation (adding the word “third”).
  • the conversation is updated accordingly.
  • FIG. 10 illustrates participants preparing a message in a draft mode.
  • a participant makes edits, such as adding or deleting content in a conversation, and the edits are received by the server hosting the conversation, but are not sent to other participants in the conversation. Only when the participant exits the draft mode, e.g., by indicating that he/she is finished making edits, are the participant's edits released (i.e., sent to the clients of the other participants) by the server so that other participants can view them.
  • the author i.e., a participant working in draft mode
  • a “team draft mode” allows a plurality of participants (e.g., members of Team A) to work together in preparing or editing content and to see each other's edits, while preventing non-team participants from seeing the content or edits until the team draft mode is exited.
  • participants e.g., members of Team A
  • team draft mode protects the privacy of team members as they work together to prepare content for publication to other participants in the conversation.
  • a number of different mechanisms may be used to exit the team draft mode, or to release content prepared by a team of participants.
  • the team draft mode may be exited (or content prepared by a respective team may be released for publication to the other conversation participants), when team members agree that the edits should be published.
  • all team members in order to exit the team draft mode, all team members must agree to publish edits or content, while in some other embodiments a majority of team member must agree to publish edits or content, and in yet other embodiments, one or more senior team members determine when to publish edits or content.
  • the updated conversation is provided to a server associated with a team member.
  • the edits to the conversation are provided to a server associated with a non-team member, but display of the edits is delayed.
  • the edits to the conversation are not provided to a server associated with a non-team member until the draft mode is ended.
  • a first author/participant (e.g., Joe, who is a member of Team A) prepares a message in window 1012 .
  • An approval option 1014 (e.g., using a check mark for approved and a cross 1016 for not approved) shows that the first author has not yet approved the message. When the first participant approves the message, this may be represented as a check mark 1033 in option 1014 .
  • the first author enters content 1011 , and a caret 1018 indicates the first author's current text entry or editing position in the content. In some modes of operation, as the first author enters the content 1011 , the content is made visible to members of the same team as the first user.
  • a second participant edits the content 1011 (in this example, changing “$100” to “$110”) to produce updated content 1021 .
  • Second caret 1026 shows the text entry or edit position of the second participant in the content.
  • An approval option 1022 associated with the second participant is displayed at the top of the window 1012 , and functions like the approval option 1014 associated with the first participant, as described above.
  • the updated content 1021 is made visible to members of the same team.
  • a third time/step 1030 the first (Joe) and second (Pat) participants approve the message for publication. This is indicated by check marks 1033 associated with approval options 1014 (for the first participant Joe) and 1022 (for the second participant Pat).
  • the approved content ( 1031 ) is then published to other participants in the conversation.
  • a fourth time/step 1040 the edits made by first and second participants are published so that conversation participants (e.g., members of Team B) outside of Team A can now view the published content 1041 .
  • all the team-based drafting and editing takes place in one message window 1012 for one content unit.
  • solo or team-based drafting can occur in more than one window or content unit, and can include adding new messages or editing existing messages.
  • FIGS. 11A-B are flowcharts representing methods for editing, playing back and drafting conversations hosted at a server, according to certain embodiments of the invention. These methods are governed by instructions that are stored in a non-transitory computer readable storage medium and that are executed by one or more processors of one or more servers, as described.
  • FIG. 11A shows a method 1100 for hosting conversations at a server (e.g., in hosted conversations database 262 , FIG. 2 ).
  • a server hosts ( 1102 ) a plurality of conversations, each having an identified set of participants.
  • the server receives ( 1104 ) units of content (e.g., each content unit stored as a content contribution 326 , FIG. 3A ) from respective participants in the conversation and transmits to one or more servers hosting conversations for the participants in the conversation at least portions of the received content units.
  • units of content e.g., each content unit stored as a content contribution 326 , FIG. 3A
  • individual keystrokes are transmitted from the client utilized by a content unit's author to other participants as the author composes the content of a content unit ( 1106 ).
  • the server receives ( 1108 ) a sequence of edits, including first edits and second edits, to a respective content unit of the conversation from at least one participant other than the initial author of the content unit to produce a revised content unit.
  • the first and second edits to the content unit are edits by distinct first and second participants in the conversation ( 1110 ).
  • editing of the respective content unit by other participants in the conversation is disabled ( 1112 ) while receiving edits to the content unit from a first participant of the conversation.
  • concurrent editing by more than one participant in the conversation is enabled ( 1113 ).
  • any conflicts between concurrent edits by different participants are resolved and the resulting consistent content is published to (or made available to) all the conversation participants.
  • a first caret (e.g., caret 924 identifying Joe in FIG. 9A ) is prepared for display ( 1114 ) at a position corresponding to the first edits by the first participant of the conversation
  • a second caret (e.g., caret 934 identifying Pat) is prepared for display at a position corresponding to the second edits by the second participant of the conversation
  • the first and second edits and the first and second carets are provided to the one or more servers.
  • Active participants in the conversation e.g., participants whose clients are currently displaying the conversation
  • the plurality of edits in the sequence of edits include distinct keystrokes ( 1116 ).
  • the clients used by active participants in the conversation display updates/edits to the conversation at substantially the same time as they are entered by the author of those update/edits.
  • the plurality of edits in the sequence of edits include distinct words ( 1118 ).
  • the clients used by active participants in the conversation display word-by-word updates/edits to the conversation at substantially the same time as they are entered by the author of those update/edits.
  • a respective timestamp or sequence number is stored ( 1120 ) for each distinct edit in the sequence of edits to the content unit, including distinct timestamps or sequence numbers for at least first and second edits to the content unit.
  • the conversation is updated ( 1222 ) with the revised content unit and the updated conversation is automatically provided to the one or more servers hosting conversations for the participants in the conversation.
  • FIG. 11B continues the method 1100 for hosting conversations at a server, illustrated in FIG. 11A .
  • a timestamp (e.g., timestamps 1 , 2 , 3 , 4 indicated by 920 , 930 , 940 , 950 , etc., of FIG. 9A and stored in timestamps 341 of FIG. 3B ) is stored ( 1130 ) for each content unit in the conversation.
  • Data is transmitted ( 1132 ) representing the sequence of edits to a respective participant of the conversation, thus enabling the respective participant to view changes to the conversation in accordance with the sequence of edits.
  • the respective participant is permitted to view ( 1134 ) changes to the conversation (or a user-specified portion of the conversation) in a chronological order, e.g., even if the changes are spaced apart from each other in the conversation.
  • the playback function in a client application displays a sequence of changes to the conversation in chronological order. For example, in FIG. 9B a conversation is played back to show changes to the conversation as a result of adding and editing of content by participants in the conversation.
  • the respective participant is permitted to view ( 1136 ) a sequence of changes within a logical portion of the conversation in a chronological order, e.g., using the back 972 and forward 974 buttons to navigate through changes in the conversation.
  • the playback function in a client application displays a sequence of changes within a logical portion of the conversation in a chronological order. This allows a participant to see sequences of changes in a specific portion of interest in the conversation, without seeing changes in unrelated portions.
  • the logical portion of the conversation for which changes are displayed may be a single content unit of the conversation ( 1138 ).
  • the logical portion of the conversation for which changes are shown (when using the playback function) are a plurality of user-selected content units of the conversation.
  • a respective participant of the conversation is permitted to view ( 1140 ) changes to the conversation by another respective participant of the conversation, e.g., to view all changes made by first participant Joe or by second participant Pat, as illustrated in FIG. 9A .
  • the server delays ( 1142 ) providing edits to the conversation by a respective participant operating in a draft mode, and provides the updated conversation to other participants (e.g., to the servers that host conversations of the other participants, and to the clients used by those other participants) until the respective participant exits the draft mode or releases the conversation edits/updates that he/she has made.
  • edits 1011 , 1021 of FIG. 10 are not provided to Team B until after members of Team A (Joe, Pat) approve the edits and end the draft mode.
  • draft mode information or draft approval information or status is stored in the participant conversation state 372 ( FIG. 3B ) for the conversation.
  • the server while a respective participant (who is a team member) makes edits to the conversation using a team draft mode, the server provides ( 1144 ) the updated conversation to a server associated with another team member (e.g., Joe can see Pat's edits and vice versa), and delays providing the edits to the conversation by the respective participant to a server associated with a non-team member (e.g., Team B cannot see Team A's edits during the draft mode).
  • the server After the draft mode is ended, the server provides the updated conversation, including the edits to the conversation by the respective participant, to the server associated with the non-team member.
  • the conversation edits made during draft mode are provided contemporaneously to the servers associated with all conversation participants, but the changes are marked as draft mode changes and therefore not provided to participants outside the team of the participant making the changes until the draft mode is exited or the conversation updates are approved or released (e.g., by the participant or by the participant's team).
  • a separate conversation is created.
  • the team members draft content within the separate conversation, and when the team is finished drafting the separate conversation or a portion thereof is merged back into the first conversation, at which point the new or edited content is made available to the other participants in the first conversation.
  • the aforementioned cooperative editing module 736 allows multiple participants (clients) to simultaneously edit a conversation, and provides conflict detection and resolution to determine if participants' edits conflict.
  • clients clients
  • a user enters and edits conversation content using an “optimistic user interface,” which assumes there is no conflict between content entry and edits made by the user of the client device and other participants in the same conversation, until it is told otherwise by the conversation server that provides conversation hosting services for the client.
  • one or more participants in a conversation make edits to a conversation at their local client ( 1510 ), which sends the user edits ( 1512 ) to the conversation server that provides conversation services to the client.
  • the user edits made by each participant are received at the conversation server system ( 1520 ).
  • transformation operations are performed on the edits made by the competing participants so that the state of the conversation on each of the clients is consistent. Furthermore, the conversation server reduces the number of transformation operations it needs to perform by merging sequences of edits made at each client into merged sequences of edits ( 1522 ), and then performing the transformation operations on the merged sequences of edits by the competing participants ( 1524 ).
  • Respective transformed sequences of edits are transmitted to the clients of the competing participants (and to any other active participants), along with sequencing information ( 1524 , 1534 )) to enable each client to apply both locally made edits and the received transformed sequences of edits in the correct order so as to reproduce the correct current state of the conversation ( 1536 ).
  • the conversation server When non-conflict changes (edits) are made by two (or more) conversation participants, the conversation server still merges sequences of edits made at each client into merged sequences of edits ( 1522 ). Each merged sequence of edits is assigned a timestamp and/or sequence number (see description above of conversation log 324 , FIG. 3A ), and is sent to the clients of the conversation participants ( 1522 , 1530 ) so that all the participants have a consistent record of conversation state. The respective clients apply the received merged edit sequences to update the locally stored conversation state ( 1532 ). Each client at which the conversation is being displayed updates its display of the conversation ( 1538 ) in accordance with both the locally made edits and the merged sequences of edits of other participants received from the conversation server.
  • a special situation requiring special handling at the client is as follows. If, at the time a transformed sequence of edits is received at a client, the participant using the client has made additional changes that conflict, or potentially conflict with the changes recorded in the received transformed sequence of edits, then the client performs a second transformation on the received sequence of edits that anticipates the transforms to be made at the server when it receives the additional changes made at the client. As a result of the second transformation on the received sequence of edits, and the transformation applied by the server to the edits made at the client, the conversation state is made consistent across the clients of the participating users and across the hosting server(s).
  • each of the clients includes operation transformation instructions, to be applied to received edits made at other clients, that take into account transformations that will be performed by the server on the edits made at those clients operations.
  • the state of the conversation at each step along the way is represented by a corresponding sequence number, which is used by both the clients and the conversation hosting server to ensure that the transformations made at the clients and servers are coordinated or synchronized and produce a consistent conversation state. ( 1536 ).
  • concurrency control operations for a conversation are performed at both the conversation server system 130 that hosts the conversation and, when necessary, by clients that receive transformed edits that conflict with intervening edits made at those clients.
  • the quantity of edits that are merged into a merged edit sequence depends, at least in part, on the rate at which the participant is entering edits. Another factor that may affect the quantity of edits that are merged is whether other participants are editing the same content unit at the same time. For example, when there are no competing edits being made by other participants, relatively long sequences of edits may be merged. However, when competing edits are being made by other participants, relatively short sequences of edits (e.g., limited to edits made in a period of N seconds, where N is typically less than or equal to 0.5) are merged.
  • edits (which includes content entry, as well as revisions of previously entered content, and changes to shared metadata) by a participant are sent right away to other active participants in the conversation, if any, without performing any merging.
  • a transformation is generated (at the hosting conversation server, or at another server) for each individual edit operation before forwarding it to the other active participants.
  • a second level transformation on a respective received transformed edit is performed at the receiving client when the received transformed edit conflicts with an edit made at the local client since the time corresponding to the conversation state sequence number.
  • a conversation log record 385 can include a list of authors 390 identifying multiple authors of a change to the conversation state when more than one author is editing the same conversation at the same time or during overlapping times. Furthermore, when there are no conflicts between participants, entire sequences of editing by a participant, from the start of an edit sequence until the user selects the “done” icon or button, are merged into a single edit sequence for storage in a single conversation log record 385 ( FIG. 3C ).
  • FIG. 12 illustrates a process diagram showing the application of concurrency control between a plurality of potentially conflicting edits received from two participants.
  • the example illustrated in FIG. 12 shows transformation operations of ASCII text including XML tags and content. Operations are performed at a first participant (client) and at a second participant (client).
  • a first sequence of edits to a respective content unit of the conversation is received from a first participant of the conversation, and the first sequence of edits is converted into a first merged sequence of edits ( 1212 ).
  • a second sequence of edits to a respective content unit of the conversation is received from a second participant of the conversation, and the second sequence of edits is converted into a second merged sequence ( 1216 ).
  • the first merged sequence of edits ( 1212 ) is transformed to produce a first transformed sequence of edits ( 1232 ), and the second merged sequence is transformed to produce a second transformed sequence of edits ( 1222 ).
  • the first transformed sequence of edits ( 1232 ) is sent to the second participant, and the second transformed sequence of edits ( 1222 ) is sent to the first participant.
  • the first merged sequence ( 1212 ) is applied to an initial conversation state D 1 to produce an intermediate conversation state D 2
  • the second transformed sequence of edits ( 1222 ) is applied to the conversation state D 2 to produce a new conversation state D 4 .
  • the second merged sequence of edits ( 1216 ) is applied to the initial conversation state D 1 to produce an intermediate conversation state D 3
  • the first transformed sequence of edits ( 1232 ) is applied to the intermediate conversation state D 3 to produce the same new conversation state D 4 as produced at the first client.
  • the transformed sequences of edits, 1232 and 1222 are generated so that when they are applied to the conversation state after the application of locally made edits (corresponding to merged sequence of edits for that client), the conversation state in both clients converges to a consistent state.
  • each ASCII text character has a size of one
  • each starting and ending XML tag has a size of one
  • “delete text” refers to a text deletion component of the operation
  • “delete element” refers to an element deletion operation.
  • the number accompanying a text or element deletion operation refers to the size of the element deletion.
  • “insert element” is used to add XML tags to a conversation unit
  • “insert text” is used to insert text. Transformations of merged sequences of content update operations (edits) take into account the position of each operation in the conversation unit, and also take into account duplicate operations (e.g., completing operations that delete the same text), or more generally operations that render other competing operations moot).
  • the initial conversation state D 1 1210 comprises a first string:
  • the second (or revised) conversation state D 4 1240 comprises a second string:
  • Intermediate conversation state D 2 1220 comprises a third string:
  • Intermediate conversation state D 3 1230 comprises a fourth string:
  • the first merged sequence of edits 1212 provides the following edits:
  • a dotted box 1214 indicates the portion of state D 2 in which changes were made to D 1 by the first merged sequence of edits 1212 .
  • the second transformed sequence of edits 1222 provides the following edits:
  • the second transformed sequence of edits 1222 deletes the letter “b” 1224 from the intermediate conversation state D 2 .
  • the result of this operation is the second (or revised) conversation state D 4 1240 .
  • the second merged sequence of edits 1216 provides the following edits:
  • delete text 3 e.g., delete “bcd”.
  • the second merged sequence of edits 1216 deletes the letters “bcd” from the first conversation state D 1 .
  • the result of applying the second merged sequence of edits 1216 to the first conversation state D 1 is the intermediate conversation state D 3 1230 .
  • the first transformed sequence of edits 1232 provides the following edits:
  • the first transformed sequence of edits 1232 changes the intermediate conversation state D 3 by adding the material indicated by the dotted line 1234 on FIG. 12 .
  • the result of this operation is the second conversation state D 4 .
  • conflicting edits are detected, for example, when the transformation of a merged sequence of edits would change the position of at least one edit operation.
  • conflicting edits are also detected when first and second merged sequences of edits (by two distinct participants) include overlapping delete operations. Transforming a merged sequence of edits for which there is an overlapping delete operation (i.e., overlapping with edit operations by another participant) produces a transformed delete operation that deletes fewer elements of the respective content unit than the respective delete operation of the merged sequence of edits.
  • first and second merged sequences of operation include overlapping operations, including a redundant operation
  • the first transformed sequence of edits does not include the redundant operation
  • distinct conversation (or content unit) version numbers are associated with the state of a respective conversation (or content unit) before and after each merged sequence of edit operations.
  • distinct version numbers are associated with the state of a respective conversation (or content unit) before and after each transformed sequence of edit operations.
  • distinct timestamps are associated with each distinct version number of the conversation (or content unit).
  • FIG. 13 illustrates a sequence of separate edit operations to a content unit received from a first participant and a sequence of separate edit operations received from a second participant in a conversation.
  • a starting point for this sequence is a first content unit state 1310 , comprising the text “ABCDEFG”.
  • a first sequence of edits is received from a first participant, including:
  • a second transformed sequence of edits is received from the second participant and applied at the first participant, including:
  • a second sequence of edits is received from a second participant, including:
  • a first transformed sequence of edits is received from the first participant and applied at the second participant, including:
  • each transform has to be calculated for each path, which consumes processor resources and takes time.
  • FIG. 14 illustrates 1400 a sequence of merged edit operations to a content unit received from a first participant and a sequence of merged edit operations received from a second participant in a conversation, and transforms thereon.
  • a starting point for this sequence is a first content unit state 1410 , comprising the text “ABCDEFG” and corresponding to the starting content unit state 1310 of FIG. 13 .
  • a first merged sequence of edits is received from a first participant, including:
  • a second transformed merged sequence of edits is received from the second participant and applied at the first participant, including:
  • a second merged sequence of edits is received from a second participant, including:
  • a first transformed merged sequence of edits is received from the first participant and applied at the second participant, including:
  • Another application that may be associated with the server hosting the conversation includes a contextual spell checker and correction application.
  • Such an application can be used to find common misspellings, and to disambiguate intentionally defined words.
  • Such an application may use an error model to determine if an work is spelled or used correctly. The model may find common errors based on letter reversal, phonetic similarity, location in a conversation or letter, or using other means.
  • the application may provide on-the-fly, context based text correction.
  • the application provides a user-specific overlay of words that a user frequently uses or that the user has defined.
  • the application may insert a tag with a suggestion for a word that it considers to be incorrectly spelled, such that any participant (not just the author) can address and correct the word, if necessary.
  • Another application that may be associated with the server hosting the conversation includes a contextual name display, using context-dependent disambiguation.
  • this disambiguation may provide space efficiency when displaying names. For example, a close friend or work colleague may be displayed using a first name only or a picture, whereas a stranger may be displayed with full name, title, etc.
  • a set of rules (defined by the system or by the user or both) may be used to determine who to display and in what manner.
  • Another application that may be associated with the server hosting the conversation includes a language translation (machine translation) application.
  • This machine translation application may use the spell checking and/or a context sensitive dictionary to translate between languages.
  • these (and other) applications use an application protocol interface (API) to interact with the server hosting the conversation.
  • API application protocol interface
  • the application allows a participant to reserve a namespace for that participant's personal applications, which the participant may share with other participants.
  • FIG. 16 is a block diagram of a distributed client-server computing system 1600 including a conversation server 130 according to some embodiments of the invention.
  • the conversation server 130 is connected to a plurality of conversation clients 110 and third party webservers 1602 through one or more communication networks 120 .
  • a third party webserver 1602 may include a collection of web pages 1604 associated with a domain name on the Internet (e.g., a website).
  • Conversation client 110 may be any computer or device through which a user of conversation client 110 can submit service requests to and receive search results or other services from conversation server 130 .
  • conversation clients 110 include, without limitation, desktop computers, laptop computers, tablet computers, mobile devices such as mobile phones, personal digital assistants, set-top boxes, or any combination of the above.
  • a respective conversation client 110 may contain at least one client application 814 for submitting requests to the conversation server 130 .
  • the client application 814 can be a web browser or other type of application that permits a user to search for, browse, and/or use information (e.g., web pages and web services) that is accessible through communication network 120 .
  • conversation client 110 includes one or more client assistants 819 .
  • Client assistant 819 can be a software application that performs one or more tasks related to assisting a user's activities with respect to client application 814 and/or other applications.
  • client assistant 819 may assist a user at conversation client 110 with browsing information (e.g., files) hosted by a third party webserver 1602 , processing information (e.g., conversations or search results) received from the conversation server 130 , and monitoring the user's activities on the search results.
  • client assistant 819 is embedded in one or more web pages (e.g., a search results web page) or other documents downloaded from the conversation server 130 .
  • the client assistant 819 is a part of client application 814 (e.g., a plug-in or extension of a web browser).
  • Communication network(s) 120 can be any wired or wireless local area network (LAN) and/or wide area network (WAN), such as an intranet, an extranet, the Internet, or a combination of such networks.
  • communication network 120 uses the HyperText Transport Protocol (HTTP) and the Transmission Control Protocol/Internet Protocol (TCP/IP) to transport information between different networks.
  • HTTP HyperText Transport Protocol
  • TCP/IP Transmission Control Protocol/Internet Protocol
  • the HTTP permits client devices to access various information items available on the Internet via communication network 120 .
  • the various embodiments of the invention are not limited to the use of any particular protocol.
  • conversation server 130 includes a front end server 1606 , user database management modules 724 , a user database 722 , a search/access module 716 , a conversation database 726 , and conversation management modules 728 including a markup generator 743 .
  • Front end server 1606 is configured to receive data from a conversation client 110 , which instructs conversation server 130 to perform various conversation management operations.
  • User database management modules 724 manage user database 722 by creating and updating user records.
  • Search/access module 716 performs searches of conversation database 726 (which corresponds to conversation database 262 in FIGS. 2 and 3A-3C ).
  • conversation database 726 stores data associated with conversations, including a conversation log (e.g., 324 in FIGS. 3A and 3C ) which includes conversation log records (e.g., 385 in FIG. 3C ) that can be used to reconstruct conversations from conversation database 726 at different states (e.g., at a sequence of times during the course of a respective conversation).
  • conversation database 726 includes a participant list (e.g., 332 in FIG. 3A ) for each conversation, which includes a read/unread state (e.g., 374 in FIG. 3B ) for each participant.
  • the read/unread state of a particular participant (of a particular conversation) indicates whether the participant has viewed respective portions of the conversation, and, optionally, a timestamp indicating the last time that the participant viewed each respective portion of the conversation that the participant has viewed at least once.
  • the conversation management modules 728 update conversation data in the conversation database 726 in accordance with requests from the conversation clients 110 . Additionally, in some embodiments, in response to a request from a participant to view a markup of a particular portion of a conversation (e.g., the conversation portion currently being viewed by the participant), markup generator 743 retrieves conversation data from the conversation log (e.g., 324 in FIG. 3A ) and the participant list (e.g., 332 in FIG. 3A ) for the portion of the conversation, and generates a participant-specific markup that is specific to a state of the portion of the conversation at the time that the participant last viewed the portion of the conversation.
  • markup generator 743 retrieves conversation data from the conversation log (e.g., 324 in FIG. 3A ) and the participant list (e.g., 332 in FIG. 3A ) for the portion of the conversation, and generates a participant-specific markup that is specific to a state of the portion of the conversation at the time that the participant last
  • conversation client 110 includes a markup generator.
  • conversation client 110 in response to a request to view a markup of a portion of a conversation from a participant, requests information from the conversation server 130 that enables conversation client 110 to generate a markup of the portion of the conversation, the conversation management modules 728 send information indicative of the current state of the portion of the conversation and any other information necessary to generate a markup of the portion of the conversation to conversation client 110 .
  • conversation client 110 generates the participant-specific markup of the portion of the conversation for display to the participant.
  • system 1600 has a single conversation server 130
  • system 1600 has multiple conversation servers 130 (e.g., as illustrated by conversation servers 130 in FIGS. 1, 2 and 6 ).
  • multiple conversation servers 130 may be hosted by different service providers, such as providers 116 -A and 116 -B respectively.
  • the providers are internet service providers (ISPs) providing a conversation service. Alternately, some or all of the providers may be dedicated conversation providers.
  • ISPs internet service providers
  • the conversation servers 130 may be coupled together directly, or by a local area network (LAN), or via communication network 120 ,
  • FIGS. 17A-17G illustrate exemplary user interfaces for generating a participant-specific markup of a portion 7004 of a conversation 7002 in accordance with the method described below with reference to FIGS. 18A-18H .
  • FIGS. 17A-17G illustrate exemplary user interfaces for generating a participant-specific markup of a portion 7004 of a conversation 7002 in accordance with the method described below with reference to FIGS. 18A-18H .
  • the exemplary user interfaces described herein are merely illustrative and are not intended to limit the scope of the disclosed embodiments in any way.
  • a hosted conversation 7002 is displayed at a first client to a first participant (e.g., Pat), displayed at a second client to a second participant (e.g., Joe), and displayed at a third client to a third participant (Sue).
  • the portion e.g., 7004 - a - 1 for Pat, 7004 - b - 1 for Joe and 7004 - c - 1 for Sue
  • the conversation e.g., 7002 - a - 1 , 7002 - b - 1 , 7002 - c - 1
  • the portion e.g., 7004 - a - 1 for Pat, 7004 - b - 1 for Joe and 7004 - c - 1 for Sue
  • each participant sees the “to do” list with a single item “pay phone bill”
  • Sue closes the conversation and thus the portion of the conversation 7004 - c - 1 ceases to be viewed by Sue.
  • Each of the portions of the conversation has the same timestamp (e.g., 7006 - a - 1 , 7006 - b - 1 , and 7006 - c - 1 ) indicating that the portion of the conversation was last edited at 2:45 pm.
  • the timestamp e.g., 7006 - a - 2 and 7006 - b - 2
  • the most recent edit time e.g., 3:00 pm
  • Pat is also presented with the options to enter the edits to the portion of the conversation (e.g., by selecting the “Done” button 7008 ) or to delete the portion of the conversation (e.g., by selecting the “Delete” button 7010 ).
  • a caret 7012 is displayed to Joe that indicates the location of at which Pat is currently making edits to the portion of the conversation.
  • Pat closes the conversation and thus the portion 7004 - a - 2 of the conversation ceases to be viewed by Pat.
  • the timestamp e.g., 7006 - b - 3
  • the most recent edit time e.g., 3:15 pm
  • Joe is presented with the options to enter the edits to the portion of the conversation (e.g., by selecting the “Done” button 7008 ) or to delete the portion of the conversation (e.g., by selecting the “Delete” button 7010 ).
  • the edits are entered.
  • Joe does not further edit the portion (e.g., 7004 - b - 4 ) of the conversation (e.g., 7002 - b - 4 ), and thus the timestamp (e.g., 7006 - b - 4 ) is not updated.
  • Joe does add a new portion (e.g., 7014 - b - 4 ) to the conversation (e.g., 7002 - b - 4 ), which has a timestamp reflecting the last edit time (e.g., 3:30 pm) of the new portion of the conversation.
  • Joe is also presented with the options to enter the edits to the new portion of the conversation (e.g., by selecting the “Done” button 7008 ) or to delete the portion of the conversation (e.g., by selecting the “Delete” button 7010 ).
  • the edits are entered.
  • the hosted conversation is displayed to all three participants (e.g., Pat, Joe and Sue).
  • the portion (e.g., 7004 - a - 5 for Pat, 7004 - b - 5 for Joe and 7004 - c - 5 for Sue) of the conversation e.g., 7002 - a - 5 , 7002 - b - 5 , 7002 - c - 5
  • the markup for each respective participant is based on the state of the displayed portion of the conversation when that portion of the conversation was last viewed by the respective participant.
  • each participant sees a different markup of the conversation.
  • the current state of the portion of the conversation is the same for each of the participants (e.g., if all of the changes were accepted in all of the markups, each participant would see a “to do” list with three items “get milk & cookies,” “feed dog” and “mow lawn” and the portion of the conversation has the same timestamp (e.g., 7006 - a - 5 , 7006 - b - 5 , and 7006 - c - 5 ) for each participant indicating that the portion of the conversation was last edited at 3:45 pm.
  • the markups are different for each of the participants.
  • Joe who has viewed the portion of the conversation continuously, has no markup to the portion of the conversation
  • Pat who was not viewing the portion of the conversation while Joe edited the portion of the conversation sees a markup that includes Joe's edits
  • Sue who was not viewing the portion of the conversation while both Pat and Joe edited the portion of the conversation sees a markup that includes both Pat's edits and Joe's edits.
  • the new portion of the conversation (e.g., 7014 - a - 5 , 7014 - b - 5 and 7014 - c - 5 ) is displayed to each of the participants and has a timestamp (e.g., 7016 - a - 5 , 7016 - b - 5 and 7016 - c - 5 ) indicating that it was added at 3:30 pm.
  • a timestamp e.g., 7016 - a - 5 , 7016 - b - 5 and 7016 - c - 5
  • the new portion of the conversation is shown as visually highlighted (e.g., with a thicker border) to the users (e.g., Pat and Sue) who had not previously viewed the new portion (e.g., 7014 - a - 5 and 7014 - c - 5 ) to indicate that the new portion of the conversation was added after the last time that they viewed the conversation.
  • FIG. 17F at a later time (e.g., 3:55 pm), all of the participants are currently viewing the portion of the conversation, and all of the participants have viewed the portion (e.g., 7004 - a - 6 , 7004 - b - 6 and 7004 - c - 6 ) of the conversation ( 7002 - a - 6 , 7002 - b - 6 and 7002 - c - 6 ) and the new portion (e.g., 7014 - a - 6 , 7014 - b - 6 and 7014 - c - 6 ) of the conversation and thus the previous markup (e.g., as illustrated in FIG.
  • the portion e.g., 7004 - a - 6 , 7004 - b - 6 and 7004 - c - 6
  • the new portion e.g., 7014 - a - 6 , 7014 - b - 6 and 7014
  • Joe is also presented with the options to enter the edits to the portion of the conversation (e.g., by selecting the “Done” button 7008 ) or to delete the portion of the conversation (e.g., by selecting the “Delete” button 7010 ).
  • a caret 7012 is displayed to Pat and Sue that indicates a location of the current edits that Joe is making to the portion of the conversation.
  • the clients for the other participants e.g., Pat and Sue
  • each display a markup of the changes made by Joe e.g., the strike through text
  • the new portion of the conversation is not edited and thus the timestamp (e.g., 7016 - a - 6 , 7016 - b - 6 and 7016 - c - 6 ) for the new portion of the conversation remains the same.
  • the timestamp e.g., 7016 - a - 6 , 7016 - b - 6 and 7016 - c - 6
  • FIG. 17G illustrates a replay sequence of edits that is displayed to a participant in response to receiving a request to display a replay sequence of edits.
  • Displaying the replay sequence of edits includes sequentially displaying a plurality of states of the conversation 7002 or a plurality of states of a portion of the conversation. For example in FIG. 17G , a prior state of the conversation 7002 - 1 is displayed, followed by a first state of the conversation 7002 - 2 , followed by a first intermediate state of the conversation 7002 - 3 , followed by a second intermediate state of the conversation 7002 - 4 and finally followed by a second state of the conversation 7002 - 5 .
  • each state is accompanied by a short description of the changes that were made to the conversation or the portion of the conversation to transition the conversation to the displayed state.
  • a markup is displayed that shows the changes between the currently displayed state and the state that was previously displayed in the replay sequence of edits.
  • FIGS. 18A-18H illustrate an overview of a method for displaying a participant-specific markup of a portion of a conversation in accordance with some embodiments.
  • conversation activity occurs, as described in greater detail above with reference to FIGS. 5A-5E including contributions from multiple participants. This editing by multiple participants may make it difficult for a participant to identify changes to the portion of the conversation.
  • the conversation server 130 stores information (e.g., edit information stored in conversation log records 385 from the conversation log 324 , as described above with reference to FIGS. 3A-3C ) that enables clients associated with respective participants to display a participant-specific markup.
  • a read/unread state for the participant for the portion of the conversation (e.g., a content contribution), includes a timestamp corresponding to the time at which the participant last viewed the respective conversation portion is stored, so that the changes in the portion of the conversation that occurred after the time of that timestamp can be identified and displayed to the participant, as described in greater detail below.
  • the conversation server 130 sends ( 1802 ) information to a first client enabling the first client to display at least a portion (e.g., 7004 - b - 1 in FIG. 17B ) of a conversation (e.g., 7002 - b - 1 in FIG. 17B ) to a first participant (e.g., Pat in FIG. 17B ).
  • the conversation has a plurality of participants (e.g., Pat, Joe and Sue) including the first participant (e.g., Pat) and a second participant (e.g., Joe).
  • the conversation is a hosted conversation that is hosted on the conversation server 130 .
  • the first client displays ( 1803 ) the portion of the conversation to the first participant. For example, in FIG. 17B the portion of the conversation 7004 - b - 1 is displayed to Pat at the first client.
  • the first client sends ( 1805 ) notification of a first state of the portion of the conversation that was viewed by the first participant.
  • the conversation server 130 receives ( 1807 ) a notification that is indicative of the first state of the portion of the conversation as the portion of the conversation that was viewed by the first participant at a first time (e.g., at 3:00 pm as illustrated in FIG. 17B ).
  • the first state is ( 1809 ) a state of the content of the conversation when the portion of the conversation was last displayed to the user.
  • the notification includes a timestamp associated with the time that the portion of the conversation was viewed by the first participant.
  • the notification identifies the content of the state of the conversation at the time that the portion of the conversation was last viewed by the first participant.
  • the first state of the portion of the conversation is the state of the portion of the conversation 7004 - b - 1
  • the conversation server 130 receives a notification that the portion of the conversation was viewed by Pat at 3:00 pm on May 20, 2010.
  • the conversation server 130 stores ( 1810 ) information indicative of the first state of the conversation.
  • the conversation server 130 or the first client stores a last viewed timestamp (e.g., a timestamp associated with a read/unread state 374 in FIG. 3B of the content contribution) and a timestamped log (e.g., conversation log 324 in FIGS. 3A and 3C ) of all edits made to the conversation.
  • the conversation server 130 or the first client stores a copy of the conversation in the first state, or information sufficient to regenerate the conversation in the first state, so that the first state of the portion of the conversation can be compared against a current state of the portion of the conversation when the first participant views the portion of the conversation again.
  • the portion of the conversation ceases ( 1812 ) to be viewed by the first participant.
  • the first client sends ( 1814 ) notification that the portion of the conversation has ceased to be viewed by the first participant.
  • the conversation server 130 receives ( 1816 ) a notification that the portion of the conversation has ceased to be viewed by the first participant.
  • the received notification indicates that the portion of the message has ceased be viewed by the first participant and the first state of the message.
  • the first state for the conversation is fixed when the first participant ceases to view the portion of the conversation, so that when the first participant ceases to view the portion of the conversation, the first client sends a timestamp to the conversation server 130 along with an indication that the first participant last viewed the portion of the conversation at the time indicated by the timestamp (e.g., at the first time).
  • the first state for the conversation is fixed (e.g., by a participant entering edits as described in greater detail below) at a time prior to when the first participant ceases to view the portion of the conversation and the conversation server 130 receives a first notification that the first participant has viewed the portion of the conversation at the first state (e.g., at the first time) and a second notification that the first participant has ceased to view the conversation (e.g., at a later time).
  • the notification that the conversation has ceased to be viewed by the first participant includes ( 1818 ) a notification that a focus state of the portion of the conversation for the first participant has changed (e.g., a notification that the participant changed focus, or has requested to change the focus, from a first portion of the conversation to a second portion of the conversation).
  • a focus state of the portion of the conversation for the first participant changes when the conversation is closed.
  • the first client detects a request from Pat to cease to view the conversation 7002
  • the first client ceases to display the conversation 7002 , as illustrated in FIG. 17C where the conversation is no longer displayed to Pat.
  • the focus state for a respect participant changes when the respect participant changes the conversation portion selected for viewing (or editing or replying). Additionally, it should be understood that when the conversation ceases to be displayed to Pat, the focus state of the portion 7004 of the conversation for Pat changes from “focused” to “not focused.” While the preceding example has been given with reference to ceasing to display the conversation entirely, it should be understood that, in some embodiments, the notification that the portion of the conversation has ceased to be viewed by the first participant includes ( 1819 ) a notification that the portion of the conversation has ceased to be displayed within a viewing pane (e.g., by scrolling the conversation out of the viewing pane).
  • a respective portion of the conversation also ceases to be viewed by a respective participant when that participant requests to view another portion of the conversation (e.g., by moving focus from a first portion to a second portion within the conversation) or opens a different conversation, and a corresponding notification is sent ( 1814 ) by the client and received by the conversation server ( 1816 ), as discussed above.
  • the conversation server 130 also sends ( 1821 ), to a second client, information enabling the second client to display at least the portion of the conversation to a second participant.
  • the second client receives ( 1822 ) instructions to display the portion of the conversation to a second participant.
  • the conversation 7002 is also displayed to Joe.
  • the first participant e.g., Pat
  • the second participant e.g., Joe
  • see the same conversation because they are both viewing the hosted conversation at the same time.
  • the second participant sees the edits to the portion of the conversation.
  • the second participant sees the edits as they are being made, or alternatively, sees the edits after the first participant indicates that his edits are complete (e.g., by selecting a “done” command button or the like, as shown in FIG. 17B ). For example, in FIG. 17B , Joe sees that Pat has added “get milk” and “feed dog” to the “to do” list. Additionally, Joe sees a caret 7012 indicating that Pat is the participant that is editing the portion of the conversation.
  • At least operations 1826 - 1832 are performed after ( 1824 ) receiving the notification that the portion of the conversation has ceased to be viewed by the first participant (e.g., after the conversation 7002 has ceased to be displayed at the first client, as illustrated in FIG. 17C ).
  • the second client sends ( 1826 ) a request (or a sequence of requests, for example, one request per keystroke, mouse click, touch event or other unit of information) to make edits to the portion of the conversation.
  • the conversation server 130 receives ( 1828 ) the request from the second participant (e.g., via the second client) to make edits to the portion of the conversation.
  • the conversation server 130 updates ( 1830 ) the portion of the conversation to a second state. For example, in FIG. 17C , after Pat has ceased to view the conversation, Joe deletes “pay phone bill” adds “& cookies” and “mow lawn” to the “to do” list.
  • the conversation server 130 receives ( 1832 ) a plurality of requests from multiple participants other than the first participant to make a plurality of edits to the portion of the conversation.
  • updating the portion of the conversation to the second state of the content of the conversation includes incorporating the plurality of edits into the portion of the conversation. In other words, more than one participant could edit the portion of the conversation in between the time that the portion of the conversation ceases to be viewed by the first participant and the time that the first participant views the portion of the conversation again.
  • the second state of the conversation could include edits from a single participant (e.g., Joe) or multiple participants (e.g., Joe and Sue). Additionally, in some embodiments, a markup of the portion of the conversation indicates the participants that submitted edits to the portion of the conversation, as described in greater detail below.
  • the second client sends ( 1834 ) a request to the conversation server 130 to add a new portion to the conversation.
  • the conversation server 130 receives ( 1836 ) a request from the second participant to add a new portion to the conversation.
  • the conversation server 130 sends ( 1838 ) the new portion of the conversation to the first client for display with an indication that the new portion was added to the conversation after the first time. For example, in FIG.
  • Joe has added a new portion (e.g., 7014 - b - 4 ) to the conversation (e.g., 7002 - b - 4 ), and the new portion has a timestamp 7016 - b - 4 that indicates that the new portion was added after the first portion of the conversation ceased to be displayed to Pat (e.g., at 3:00 pm).
  • a new portion e.g., 7014 - b - 4
  • the conversation e.g., 7002 - b - 4
  • the new portion has a timestamp 7016 - b - 4 that indicates that the new portion was added after the first portion of the conversation ceased to be displayed to Pat (e.g., at 3:00 pm).
  • the first client displays ( 1840 ) the new portion with an indication that the new portion was added to the conversation after the first time.
  • the first client sends ( 1842 ) a request to the conversation server 130 for updated conversation data, and the conversation server 130 receives ( 1844 ) the request for updated conversation data.
  • the new portion 7014 - a - 5 is displayed to Pat as part of the conversation, and is visually highlighted (e.g., by emphasizing the border of the new portion of the conversation) so as to indicate that it was added after the first time.
  • the new portion 7014 - a - 5 of the conversation is highlighted so as to indicate that it was added after the last time that Pat viewed the earlier portion 7004 - a - 5 of the conversation (e.g., after 3:15 pm).
  • the conversation server 130 In response to the request for updated conversation data, at a third time (e.g., 3:45 pm, as illustrated in FIG. 17E ) that is after the second time (e.g., 3:15 pm, as illustrated in FIG. 17C ), the conversation server 130 (or a markup generator 743 within the conversation server 130 ) sends ( 1846 ) to the first client information (e.g., information such as conversation log records 385 in the conversation log 324 that correspond to the edits to the portion of the conversation) enabling the first client to display a markup of the portion of the conversation that is indicative of one or more edits that transition the portion of the conversation from the first state to the second state.
  • the first client information e.g., information such as conversation log records 385 in the conversation log 324 that correspond to the edits to the portion of the conversation
  • the first client receives ( 1848 ) the information provided by the conversation server 130 , after which the first client (or a markup generator 829 within the first client) generates a markup using the information provided by the conversation server 130 , and displays ( 1850 ) the markup of the portion of the conversation to the first participant (e.g., the markup is displayed to Pat at the first client as illustrated in FIG. 17E ).
  • the first client displays ( 1852 ) a last update timestamp proximate to the portion of the conversation, as described in greater detail below (e.g., the first client displays a timestamp 7006 - a - 5 in FIG. 17E ).
  • the portion of the conversation is redisplayed in response to a request from the first participant to view the portion of the conversation.
  • the first participant views the portion of the conversation in a first state, ceases to view the portion of the conversation, and when the portion of the conversation is viewed by the first participant again, the portion of the conversation includes a markup that indicates all of the changes that have been made to the portion of the conversation since the last time that the first participant last viewed the portion of the conversation.
  • the portion of the conversation is viewed by Pat, and Pat sees all of the changes that have been made to the portion of the conversation since the last time that Pat viewed the portion of the conversation.
  • the first client displays a markup that shows that “pay phone bill” has been deleted, and that “& cookies” and “mow lawn” have been added.
  • the markup also shows that a new portion 7014 - a - 5 has been added to the conversation.
  • Pat, Joe and Sue each see a different markup of the portion 7004 of the conversation.
  • Pat sees a markup that shows all of the edits made to the conversation by Joe since 3:00 pm (e.g., as illustrated by the portion 7004 - a - 5 that is displayed by the first client in FIG. 17E ).
  • Joe sees the conversation without any markup, because he has not ceased to view the portion of the conversation (e.g., as illustrated by the portion 7004 - b - 5 that is displayed by the second client in FIG.
  • Pat sees a markup that shows all of the edits made to the conversation by Joe and Pat since 2:45 pm (e.g., as illustrated by the portion 7004 - c - 5 that is displayed by the third client in FIG. 17E ), as described in greater detail below with reference to operations 1888 - 1899 .
  • the first state is ( 1854 ) a state of the portion of the conversation at a time, prior to the first time, that a focus state of the portion of the conversation was last changed
  • the second state is a current state of the portion of the conversation.
  • a focus state of the portion of the conversation is changed when any of the following operations are performed: the state of the portion of the conversation is changed from “focused” to “not focused” or from “not focused” to “focused.”
  • the focus state can be changed either by a participant (e.g., by selecting a “next portion” user interface object, or by navigating to a different portion of the conversation or by navigating away from the conversation) or by the conversation server 130 (e.g., by automatically selecting the first portion of the conversation that has not been viewed by the participant as a focused portion of the conversation when the participant opens a conversation).
  • the first state is a state of the conversation at the time that the first participant or the system moved the focus to or from the portion of the conversation (e.g., the participant selected the portion of the conversation to view or the participant was viewing the portion of the conversation and selected another portion of the conversation to view), and the second state of the portion of the conversation incorporates the most recent edits to the portion of the conversation.
  • the focus state is participant-specific (e.g., each participant has a focus state for each conversation). For example, a first participant can have a first portion of a conversation in focus while a second participant has a second portion of the conversation in focus. Additionally, while each participant typically can only have a single portion in the “focused” state at a time, it should be understood that in some embodiments respective participants may have more than one portion that is in the “focused” state at a time (e.g., all of the portions of a conversation could be “focused” or the participant could select multiple portions of multiple conversations to be “focused” simultaneously).
  • a participant can fail to have any portions of conversations in the “focused” state (i.e., all portions of the conversations are in the “not focused” state). For example, when the participant does not currently have any conversations open, none of the portions of the conversations would be “focused.” Consequently, in some of these embodiments, when a participant closes a conversation, the focus state of any currently focused portion of the conversation is changed from “focused” to “not focused.”
  • the markup shows the participant all of the edits to the portion of the conversation that occurred after the last time the user interacted with the portion of the conversation either directly (e.g., changing the focus state of a portion of the conversation) or indirectly (e.g., by performing an operation that causes the focus state of the portion of the conversation to be changed by the conversation client or the conversation server 130 ).
  • the first state is ( 1855 ) a state of the portion of the conversation at time, prior to the first time, that a participant last indicated that edits had been entered
  • the second state is a current state of the portion of the conversation.
  • a participant can enter edits to a conversation in many different ways. For example, a participant can click on a “Done” button after entering edits to a portion of a conversation. For example, in FIG. 17B when Pat selects the “Done” button 7008 after editing the portion 7004 - a - 2 of the conversation, the state of the portion of the conversation is identified as the first state.
  • any of the participants can click on a “Done” button to enter the current state of the portion of the conversation as the first state, even if another participant is still actively editing the portion of the conversation. For example, even if Joe was simultaneously editing the portion 7004 - b - 2 of the conversation in FIG. 17B , when Pat selected the “Done” button 7008 and ceased to view the conversation, the state of the portion of the conversation when Pat selected the “Done” button would be identified as the first state.
  • the indication that edits have been entered is received from the first participant.
  • the indication that edits have been entered is received from any participant of the plurality of participants (e.g., the second participant, the third participant, etc.).
  • the selection of the “Done” button by any of the participants is considered to be an indication that edits have been entered, without regard to the activities of the other participants. Consequently, in some embodiments, edits that have been made by a first participant are entered when a second participant provides an indication that edits have been entered (e.g., selects a “Done” button) even if the indication is received while the first participant is in the middle of making a series of edits to the portion of the conversation.
  • the conversation server 130 sends ( 1856 ), to the first client, information enabling the first client to display a last update timestamp proximate to the portion of the conversation.
  • the last update timestamp is indicative of a time of last edits, at or before the first time, to the portion of the conversation; and at the third time, the last update timestamp is indicative of the second time.
  • the portion 7004 of the conversation has a timestamp 7006 that indicates a time at which the portion of the conversation was last updated, as illustrated in FIGS. 17A-17G .
  • the portion (e.g., 7004 - a - 2 , 7004 - b - 2 or 7004 - c - 2 ) of the conversation was last updated at 3:00 pm
  • the last update timestamp e.g., 7006 - a - 2 , 7006 - b - 2 or 7006 - c - 2
  • the last update timestamp (e.g., 7006 - a - 5 , 7006 - b - 5 or 7006 - c - 5 ) indicates that the portion (e.g., 7004 - a - 5 , 7004 - b - 5 or 7004 - c - 5 ) of the conversation was last updated at 3:15 pm.
  • this timestamp is identical for all participants that are concurrently viewing a conversation (e.g., for each participant, the last update timestamp for a portion of the conversation is the same, because the last update timestamp indicates the last time that the conversation was updated by any participant).
  • the markup identifies ( 1858 ) the participant that made the respective edit.
  • the conversation server 130 maintains information indicating the participant that made each of the edits to the portion of the conversation, and the edits are visually associated with respective participants when the markup is displayed to the first participant.
  • the edits made by a respective participant are all displayed in a single color that is associated with (e.g., assigned to or selected by) the respective participant.
  • individual edits made by a respective participant are visually associated with an identifier for the respective participant (e.g., by displaying a reference symbol associated with the respective participant proximate to the edits made by the respective participant).
  • the markup only includes ( 1860 ) edits made to the conversation after the first time (e.g., 3:00 pm, as illustrated in FIG. 17B ).
  • the first time e.g. 3:00 pm, as illustrated in FIG. 17B .
  • any edits made to the portion of the conversation prior to the time that the first participant last viewed the portion of the conversation are considered to have been viewed by the first participant, and thus are not represented as edits in the markup. Consequently the markup only includes edits that have been made to the portion of the conversation after the portion of the conversation ceased to be viewed by the first participant.
  • the markup includes ( 1862 ) actual edits made by the second participant.
  • each sequence of additions and/or deletions made by a participant is shown as part of the markup even if the additions and deletions are redundant (e.g., if text was added by one participant and subsequently deleted by another participant, the text is shown in the markup with a strikethrough).
  • the markup only includes ( 1864 ) a subset of the edits made to the conversation after the first time.
  • the markup includes a set of edits that have been reduced to a set of “net changes.” For example, if a second participant added a paragraph, which was subsequently deleted by a third participant, that paragraph would not be included in the markup.
  • the portion of the conversation has not been viewed ( 1866 ) by the first participant in between the first time (e.g., 3:00 pm, as illustrated in FIG. 17B ) and the third time (e.g., 3:45 pm, as illustrated in FIG. 17E ).
  • the corresponding markup shows the edits to the portion of the conversation that have occurred between the current state of the portion of the conversation and the last viewed state of the portion of the conversation, and thus the markup shows only edits that were made to the conversation after the last time that the conversation was viewed by the first participant.
  • Pat since viewed the portion of the conversation at 3:15 pm, then a different markup would be displayed to Pat at 3:45 pm than the markup shown in FIG. 17E , because Pat would have already viewed the changes made to the portion of the conversation by Joe at 3:15 pm. In particular, because there are no changes to the portion 7004 of the conversation between 3:15 pm and 3:45 pm, Pat would not see any changes to the portion 7004 of the conversation and would only see an indication that the new portion 7016 had been added to the conversation.
  • the conversation server 130 stores ( 1868 ) representations of a plurality of intermediate states of the portion of the conversation between the first state and the second state.
  • the representations of the intermediate states of the portion of the conversation are stored in a conversation log (e.g., 324 in FIG. 3A ) that includes conversation log records (e.g., 385 in FIG. 3C ) which can be applied to an initial state of a conversation to recreate any of the intermediate states of the conversation or any portion of the conversation.
  • a request is sent ( 1870 ) from the first client to the conversation server 130 for information enabling display of a replay sequence of edits (e.g., as described in greater detail above with reference to FIGS.
  • the conversation server 130 receives ( 1871 ) the request for information enabling the display of the replay sequence of edits, and in response to a request for information enabling display of a replay sequence of edits, the conversation server 130 sends ( 1872 ) information enabling the first client to sequentially display the plurality of intermediate states. It should be understood that in some embodiments this information is cached locally on the first client (e.g., in the conversation record 820 , FIG. 8 ), and in some embodiments the information is sent from the conversation server 130 to the first client only after the information has been requested.
  • only the most recent state of the portion of the conversation e.g., the third state
  • at least one of the intermediate states must be sent to the first client by the conversation server 130 (e.g., because the first client does not cache all of the intermediate states for the conversation or portions of the conversation).
  • the first client receives the information sent by the information server and displays ( 1874 ) a replay of the sequence of edits.
  • the plurality of intermediate states are displayed in a time sequence order so as to show a replay of the edits to the portion of the conversation.
  • the edits to the portion of the conversation are displayed in the order that they were made by participants, so that the first participant can readily view the order in which edits were made to the portion of the conversation. For example, as illustrated in FIG.
  • the first client when displaying a replay sequence of edits, the first client would display the conversation 7002 as it appeared at 2:45 pm (e.g., conversation 7002 - 1 ), as it appeared at 3:00 pm (e.g., conversation 7002 - 2 ), as it appeared at 3:15 pm (e.g., conversation 7002 - 3 ), as it appeared at 3:30 pm (e.g., conversation 7002 - 4 ), and finally as it appeared at 3:55 pm (e.g., conversation 7002 - 5 ).
  • 2:45 pm e.g., conversation 7002 - 1
  • 3:00 pm e.g., conversation 7002 - 2
  • 3:15 pm e.g., conversation 7002 - 3
  • 3:30 pm e.g., conversation 7002 - 4
  • 3:55 pm e.g., conversation 7002 - 5
  • each intermediate state corresponds ( 1876 ) to a state of the portion of the conversation at a time that the server receives an indication from a participant that edits to the portion of the conversation have been entered (e.g., by selecting a “Done” button after entering edits, as described in greater detail above).
  • Optional operations 1880 - 1884 are performed ( 1878 ) after redisplaying the portion of the conversation to the first participant, while the portion of the conversation is being viewed by the first participant.
  • the second client initiates these operations by sending ( 1880 ) a request from the second participant to edit the portion of the conversation while the first participant is viewing the same portion of the conversation.
  • the edits change the state of the portion of the conversation from the second state to the third state.
  • the conversation server 130 receives ( 1881 ) the request from the second participant to edit the portion of the conversation from the second state to a third state.
  • the conversation server 130 sends ( 1882 ), to the first client, information enabling the first client to display a markup of the portion of the conversation that is indicative of one or more edits that transition the portion of the conversation from the second state to the third state.
  • the first client displays ( 1884 ) a markup of the portion of the conversation that is indicative of one or more edits that transition the portion of the conversation from the second state to the third state. For example in FIG.
  • operations 1888 - 1895 are performed ( 1886 ) prior to the first time (e.g., prior to when the first participant ceased to view the portion of the conversation).
  • the conversation server 130 sends ( 1888 ) to a third client information enabling the third client to display at least the portion of a conversation to a third participant.
  • the third client displays ( 1889 ) the portion of the conversation to the third participant.
  • the third client sends ( 1890 ) a notification of a prior state of the portion of the conversation that was viewed by the third participant. For example, in FIG.
  • the conversation server 130 receives ( 1895 ) a notification that is indicative of the prior state of the portion of the conversation that was viewed by a third participant (e.g., Sue in FIG. 17A ) at a third client. Subsequently the portion of the conversation ceases to be viewed by the third participant and the third client sends ( 1894 ) a notification that the portion of the conversation has ceased to be viewed by the third participant. For example, in FIG. 17A , Sue closes the conversation, and thus ceases to view the portion of the conversation, as illustrated in FIG. 17B , where the portion of the conversation is no longer viewed by Sue. The conversation server 130 receives ( 1895 ) a notification that the portion of the conversation has ceased to be viewed by the third participant.
  • a third participant e.g., Sue in FIG. 17A
  • the last viewed state of the portion of the conversation for the third participant is a prior state (e.g., the state of portion 7004 - c - 1 in FIG. 17A ) that is an earlier version of the conversation that the version represented by the first state (e.g., the state of portion 7004 - a - 2 in FIG. 17B ) of the portion of the conversation.
  • a prior state e.g., the state of portion 7004 - c - 1 in FIG. 17A
  • the version represented by the first state e.g., the state of portion 7004 - a - 2 in FIG. 17B
  • the first state e.g., the state of portion 7004 - a - 2 in FIG. 17B
  • the last viewed state of the conversation for Pat is different than the last viewed state of the conversation for Sue.
  • the last viewed state of the portion of the conversation for Sue e.g., 7004 - c - 1 in FIG. 17A
  • the last viewed state of the portion of the conversation for Pat e.g., 7004 - a - 2 in FIG. 17B
  • Pat's edits e.g., 7004 - a - 2 in FIG. 17B
  • the conversation server 130 sends ( 1896 ), to the third client, information enabling the third client to display a markup of the portion of the conversation that is indicative of one or more edits that transition the portion of the conversation from the prior state (e.g., the state of the portion 7004 of the conversation in FIG. 17A ) to the second state (e.g., the state of the portion 7004 of the conversation in FIG. 17E ).
  • the edits that transition the portion of the conversation from the prior state to the second state include one or more edits that are distinct from the edits that transition the portion from the first state (e.g., the state of the portion 7004 of the conversation in FIG. 17B ) to the second state (e.g., the state of the portion 7004 of the conversation in FIG. 17E ).
  • the third client receives ( 1898 ) the information from the conversation server 130 and subsequently displays ( 1899 ) the markup of the portion of the conversation to the third participant. It should be understood that, in some embodiments, the portion of the conversation is redisplayed in response to a request from the third participant to view the portion of the conversation.
  • the first client displays a markup of the portion 7004 - a - 5 of the conversation that shows the differences between the last viewed state for Pat (e.g., the first state) and the current state (e.g., the second state) of the portion of the conversation
  • the second client displays the current state of the portion 7004 - b - 5 of the conversation
  • the third client displays a markup of the portion 7004 - c - 5 of the conversation that shows the differences between the last viewed state for Sue (e.g., the prior state) and the current state (e.g., the second state) of the portion of the conversation.
  • each of the three participants e.g., Pat, Joe and Sue
  • each of the three participants views their own participant-specific markup of the conversation (e.g., a markup that is specific to the state of the portion of the conversation that was last viewed by the participant). Showing such a participant-specific markup is particularly advantageous, because it allows each participant to quickly and accurately identify the edits that have been made to the conversation since the last time that the participant viewed the conversation.

Abstract

A conversation server hosts a conversation having a plurality of participants, the conversation server enables a first client to display at least a portion of a conversation to a first participant. The conversation server receives a notification the portion of the conversation was viewed by the first participant at a first time while in a first state. After receiving a notification that the portion of the conversation has ceased to be viewed by the first participant, the conversation is edited to a second state at a second time. At a third time that is after the second time, the conversation server sends, to the first client, information enabling the first client to display a markup of the portion of the conversation that is indicative of one or more edits that transition the portion of the conversation from the first state to the second state.

Description

RELATED CASES
This application claims priority to U.S. Provisional Application Ser. No. 61/349,691, filed May 28, 2010, which is hereby incorporated by reference in its entirety.
This application is related to U.S. patent application Ser. No. 12/729,095, “Providing Access to a Conversation in a Hosted Conversation System,” filed Mar. 22, 2010, which is hereby incorporated by reference in its entireties.
TECHNICAL FIELD
The disclosed embodiments relate generally to communication systems. More particularly, the disclosed embodiments relate to methods, systems, and user interfaces for transmitting, receiving, and rendering electronic messages and markup of electronic messages.
BACKGROUND
A variety of electronic communications systems, including electronic email (“email”) systems and instant messaging (IM) system are well known. In both email and IM systems, individual messages can be forwarded and replied to, and the content of a previous message can be copied and inserted into a new message and modified. However, for both email and IM, copying content and then modifying the content does not provide any way to quickly and efficiently view changes to the modified content. Furthermore, if multiple users have made changes to the content there is no mechanism for easily identifying which users made each of the changes to the content. Finally, such operations unnecessarily duplicate content that is common between successive versions of the content.
SUMMARY OF DISCLOSED EMBODIMENTS
Thus, it would be helpful to have a way to display a markup to users who are communicating via an electronic communications system, so as to improve the user experience. The embodiments disclosed herein reduce or eliminate the problems identified above by providing a participant-specific markup of hosted conversations so as to provide participants in the conversations with a clear indication of the edits that have been made to a portion of a conversation since the last time that the participant viewed the portion of the conversation.
In accordance with one embodiment, a method is performed at a server system having one or more processors and memory storing one or more programs for execution by the one or more processors, the method including: sending, to a first client, information enabling the first client to display at least a portion of a conversation to a first participant. The conversation has a plurality of participants including the first participant and a second participant. The method further includes receiving a notification that is indicative of a first state of the portion of the conversation as viewed by the first participant at a first time, and receiving a notification that the portion of the conversation has ceased to be viewed by the first participant. After receiving the notification that the portion of the conversation has ceased to be viewed by the first participant, the method further includes receiving a request from the second participant to make edits to the portion of the conversation, and in response to receiving the request from the second participant, at a second time that is after the first time, updating the portion of the conversation to a second state. At a third time that is after the second time, the method further includes sending, to the first client, information enabling the first client to display a markup of the portion of the conversation that is indicative of one or more edits that transition the portion of the conversation from the first state to the second state.
In accordance with some embodiments, a server system includes one or more processors, memory, and one or more programs; the one or more programs are stored in the memory and configured to be executed by the one or more processors and the one or more programs include instructions for performing the operations of the method described above. In accordance with some embodiments, a non-transitory computer readable storage medium has stored therein instructions which when executed by one or more processors, cause a server system to perform the operations of the methods described above.
Thus, a method, system and computer readable storage medium is provided with more efficient methods for displaying electronic messages to users and providing an indication of edits that have been made to content of the electronic messages.
BRIEF DESCRIPTION OF THE DRAWINGS
Various embodiments of the invention are disclosed in the following Description of Embodiments herein, in conjunction with the following drawings in which like reference numerals refer to corresponding parts throughout the figures.
FIG. 1 is a block diagram illustrating an exemplary distributed computer system according to certain embodiments of the invention.
FIG. 2 is a block diagram of a distributed system including a conversation server and clients coupled by one or more communication networks, according to certain embodiments of the invention.
FIGS. 3A-3C are block diagrams of data structures for a conversation database, a participant list and a conversation log, respectively, according to certain embodiments of the invention.
FIG. 4 is a block diagram illustrating a data structure for a user database, according to certain embodiments of the invention.
FIGS. 5A-5E are flowcharts representing a method for hosting conversations at a server, according to certain embodiments of the invention.
FIG. 6 is a block diagram of a plurality of linked conversation server systems, with mechanisms for obtaining and distributing user online presence information, according to certain embodiments of the invention.
FIG. 7 is a block diagram of a conversation server for a hosted conversation system, according to certain embodiments of the invention.
FIG. 8 is a block diagram of a client having a user who participates in one or more conversations in a hosted conversation system, according to certain embodiments of the invention.
FIGS. 9A-9B illustrate a series of windows showing successive edits to a conversation by a plurality of participants of the conversation, and playback of those edits.
FIG. 10 illustrates a series of windows showing solo and team-based drafting of a conversation.
FIGS. 11A-B are flowcharts representing a method for editing, playback and drafting of conversations hosted at a server, according to certain embodiments of the invention.
FIG. 12 illustrates a process diagram showing concurrency control between a plurality of potentially conflicting edits received from a plurality of participants.
FIG. 13 illustrates two sequences of separate edit operations, both performed on the same content unit, where one sequence is received from a first participant and a second sequence is received from a second participant in a conversation, and transforms thereupon.
FIG. 14 illustrates first and second sequences of edit operations, applied to a content unit of an electronic conversation, received from a first participant and a second participant, respectively, and transformed sequences of merged edit operations corresponding to the received first and second sequences of edit operations.
FIG. 15 is a flowchart representing a method of concurrency control at a server, and at a client, when a plurality of participants in a conversation make potentially conflicting edits to the conversation.
FIG. 16 is a block diagram of a distributed client-server computing system.
FIGS. 17A-17G illustrate exemplary user interfaces for displaying a participant-specific markup for at least a portion of a conversation in accordance with some embodiments.
FIGS. 18A-18H include a flow chart illustrating a method of generating a participant-specific markup for at least a portion of a conversation in accordance with some embodiments.
Like reference numerals refer to corresponding parts throughout the drawings.
DESCRIPTION OF EMBODIMENTS
Methods, systems, user interfaces, and other aspects of the invention are described. Reference will be made to certain embodiments of the invention, examples of which are illustrated in the accompanying drawings. While the invention will be described in conjunction with the embodiments, it will be understood that it is not intended to limit the invention to these particular embodiments. On the contrary, the invention is intended to cover alternatives, modifications and equivalents that are within the spirit and scope of the invention. The specification and drawings are, accordingly, to be regarded in an illustrative rather than a restrictive sense.
Moreover, in the following description, numerous specific details are set forth to provide a thorough understanding of the present invention. However, it will be apparent to one of ordinary skill in the art that the invention can be practiced without these particular details. In other instances, methods, procedures, components, and networks that are well known to those of ordinary skill in the art are not described in detail to avoid obscuring aspects of the present invention.
FIG. 1 is block diagram illustrating an exemplary distributed computer system 100 according to certain embodiments of the invention. Computer system 100 includes a plurality of clients 110. Users of the clients 110 (also herein called client devices or client systems) are participants 112 in conversations hosted by a set of conversation servers 130 (sometimes called a conversation server system). The clients 100 can be any of a number of computing devices (e.g., Internet kiosk, personal digital assistant, cell phone, gaming device, desktop computer, laptop computer, handheld computer, tablet computer, or combinations thereof) used to enable the activities described below. Each client 110 is coupled to a network 120, which can be any of a number of networks (e.g. Internet, intranet, local area network, wide area network, wireless network, wired network, optical network, or a combination of such networks). More generally, the clients 100 and conversation servers 130 are coupled to each other via one or more communication networks 120.
A respective client 110-B executes a client application 114 that facilitates access from the client 110 to a respective hosted conversation server 130. The client application 114 may include a graphical user interface. For example, the client application may be a web browser or other browser application, such as Firefox (trademark of Mozilla Foundation), Internet Explorer (trademark of Microsoft Corporation), Safari (trademark of Apple Inc.), or Chrome (trademark of Google Inc.).
While a system 100 may have a single conversation server 130, in other embodiments the system 100 may have multiple conversation servers 130. For example, multiple conversation servers 130-A and 130-B may be hosted by different service providers, such as providers 116-A and 116-B respectively. In some embodiments, the providers are internet service providers (ISPs) providing a conversation service. Alternately, some or all of the providers may be dedicated conversation providers. When the system 100 includes multiple conversation servers 130, the conversation servers 130 may be coupled together directly, or by a local area network (LAN), or via the network 120.
The conversation server(s) 130 host conversations between participants 112. More specifically, each conversation server 130 hosts conversations on behalf of a set of users. At least some of those users are subscribers of the hosted conversation system 100 and thus have user accounts. As described in more detail below, some of the conversation participants need not be subscribers of the hosted conversation system. When new content is added to a conversation by any participant, or any other changes are made to a conversation by any participant, the updates are sent to all the conversation servers 130 that host conversations for the participants in the conversation. Those host servers, in turn, send the updates to the clients 110 being used participants in the conversation. The conversation updates may be sent relatively instantaneously (e.g., within a second or two) to the clients 110 of active participants in the conversation. Optionally, clients 110 of passive participants 112 who are online and logged into the conversation system 100, but who are not currently viewing the conversation or are not current participating in the conversation, receive information that the conversation has been updated, without receiving the updates to the conversation. In at least some embodiments, when the participant “opens” the conversation (selects it for viewing), the updated conversation is downloaded to the participant's client from conversation server 130 that hosts conversations for that user.
FIG. 2 is a block diagram of system 200 illustrating exemplary embodiments of a conversation server 130 and client systems 210 and 220. System 200 includes a communications network 120, as described above, coupled between a conversation server 130 and a plurality of the clients, including client 210. Client 210 corresponds to a respective client 110 of FIG. 1, and is sometime herein called a “participant client” because the user of client 110/210 is a participant in one or more conversations hosted by the conversation server 130. System 200 includes at least one participant client 210. Participant client 210 optionally includes a browser 212, such as a web browser, or other client application to facilitate participant interaction with a respective conversation server 130. The browser 212 typically includes (or controls) a virtual machine (e.g., a Java virtual machine) for executing software embedded in web pages and other documents rendered by the browser 212. In some embodiments, the browser 212 executes a conversation application 214 that is embedded, at least in part, in a web page. The web page (which may be called a “hosted conversation web page”) is downloaded from a server, such as a conversation server 130, to the client 210 and includes executable instructions that are executed by the virtual machine of the browser 212 in the client 210. The browser 212 and conversation application 214 together form the client application 114 of FIG. 1. The conversation application 214 facilitates participant interaction with the conversation server system 130.
In some other embodiments, conversation application 214 is a plug-in or extension of the browser application 212.
System 200 optionally includes non-subscriber clients 220. Non-subscriber clients 220 enable users who do not have accounts in the conversation system to participate, in at least a limited manner, in hosted conversations. Participation in hosted conversations may be limited in a number of ways, for example by allowing the user of a non-subscriber client to read the content of a conversation, and allowing the user to contribute new content, but not allowing the user of the non-subscriber client to use other features such as editing content already in the conversation, responding to specific portions of content previously contributed by other participants, and playing back a conversation.
Non-subscriber clients 220 access the conversation server system 130 in a manner that is distinct from the manner used by clients 210 whose users are subscribers of the hosted conversation system. An example of a non-subscriber client 220 is a weblog (“blog”) server 226, having a weblog client 228. As described below, a hosted conversation can include a weblog 228 (also called a weblog client) as a participant in the conversation, in which case content of the hosted conversation is published in the weblog. The published conversation is visible on the weblog 228, which is hosted by the weblog server 226. More specifically, when a weblog 228 is added as a participant to a conversation, content of the conversation is transmitted to (also called “posted to”) the weblog 228 by the conversation server 130 that hosts the conversation. After the weblog 228 is added as a participant, new content added to the conversation is also transmitted to the weblog 228 by the conversation server 130 that hosts the conversation. A user (e.g., a user of another client 110, FIG. 1) who views content of the weblog 228 (e.g., by visiting a URL associated with the weblog 228, hosted on the weblog server 226) can view content of the conversation published on the weblog.
Another example of a non-subscriber client 220 is an email server 224, having email clients 222. Content from host conversations can be sent to one or more email clients 222 of one or more email servers 224. In particular, when the user of an email client 222 is added as a participant to a conversation, content of the conversation (and content subsequently added to the conversation) is transmitted to the email client 222 by the conversation server 130 that hosts the conversation.
Weblogs and email servers are also examples of “automated clients.” Other examples of automated clients include services, such as archival services, translation services, spell-check and grammar-check services, that may be invoked to provide services to other participants of a hosted conversation.
In some embodiments, email clients 222 and weblog clients 228 can read but cannot provide content to a hosted conversation, and thus are just observers. However, in some other embodiments, authoring capabilities (the ability to provide content to a conversation) are provided to at least some “email participants” (i.e., users of email clients) or “weblog participants” (i.e., weblog clients).
In some embodiments, a conversation server 130 includes a front-end or conversation engine 246 for managing conversations and communications with clients, and one or more auxiliary services (modules, applications or servers) 250 for managing services related to conversations. In some embodiments, auxiliary services 250 include spell checking 252, language translation or localization 256, and managing attachments 258 to conversations. Conversation server 130 also includes online presence services 248, enabling users to know the online status of other users (e.g., other subscribers of the hosted conversation system), as described in detail below with reference to FIG. 6. Server 130 includes a user database 270, described in detail below with reference to FIG. 4.
The front-end or conversation engine 246 utilizes (or, alternately includes) an update, access and search/query engine 260 to provide participant access to conversations, and to provide search functions in conversations. In some embodiments, one or more conversation indexes 264 are inverse indexes, mapping words or terms in conversations to the conversations in which they occur. The one or more conversation indexes 264 are used to find conversations in a hosted conversation database 262 that match specified search queries. As content is added to conversations in the conversation database 262 the one or more conversation indexes 264 are updated with that content so as to make the added content accessible by the execution of search queries. The conversation database 262 is described in more detail below with reference to FIG. 3.
Optionally, conversation server 130 includes an SMTP gateway 242 for facilitating email communication with one or more email servers 224.
In the discussion below, a subscriber is a user for whom a conversation server 130 (e.g., any conversation server 130 in a set of conversation servers 130 that provide conversation services) maintains a user record or profile (see 402, FIG. 4, as described below).
As described in more detail below, in some embodiments, the conversation server 130 maintains for a respective user/subscriber a list 414 (FIG. 4) of conversations in which the user/subscriber is a participant. The conversation server 130 updates the status (conversation state 438-1, FIG. 4) of each such conversation in the user's conversation list 414 when the state of the respective conversation changes. When (e.g., in response to a search/query from the user) the conversation server 130 sends to the user a requested list of conversations (typically comprising a subset of the complete set of conversations in which the user is a participant), the list includes status information for the listed conversations. The status information in the returned list is generally a subset of the conversation state 438, as only a portion of the conversation state (e.g., whether there is any content in the conversation that has not yet been viewed by the user) is needed when displaying the list of conversations.
FIG. 3A is a block diagram illustrating exemplary data structures for conversation database 262. While most conversations have a single set of participants that share all the content of the conversation, some conversations, herein called waves or conversation containers, have a more complicated structure. In particular, a first conversation can result in any number of “side conversations” by various subsets of the participants in the first conversation, and can even include additional participants. For example, a conversation container or wave can be used by two or more teams of participants (e.g., Team A and Team B) to negotiate an agreement, or to co-edit a document or presentation or the like. To accommodate the needs of all the participants, an initial conversation (sometimes called the primary conversation or master conversation) is started among all the participants, and then “private conversations” are spawned off the initial conversation to enable participants in each of the teams to communicate privately with other participants of the team, while still having access to all of the content of the initial conversation. Typically, each private conversation has a set of participants that excludes at least one participant in the primary conversation. Optionally, a private conversation can include one or more additional participants (e.g., a consultant) who is not a participant in the primary conversation. Each participant only has access to the content of the conversations in which they are a participant. Typically, the participants on Team A have access to the content of both the Team A private conversation and the primary conversation, and the participants on Team B have access to the content of both the Team B private conversation and the primary conversation.
FIG. 3A is a block diagram of exemplary data structures that support both simple conversations (i.e., single conversations with no related private conversations) as well as waves or conversation containers that include multiple conversations (sometimes called a primary conversation and one or more sub-conversations).
Conversation database 262 includes a plurality of wave records 302-1 to 302-N, each containing the data for a wave or conversation container. When a respective wave has only one conversation, the only information in the corresponding wave record 302 is for the single conversation, as represented by one conversation record 310. More generally, a wave record 302 includes one or more conversation records 310-1 to 310-C. Each conversation record 310 contains data for a respective conversation, including:
    • wave identifier 329, which uniquely identifies the wave (i.e., conversation container) in the conversation system 100/200 that corresponds to the wave record 302;
    • conversation identifier 330, which in combination with the wave identifier 329 uniquely identifies the conversation in the conversation system 100/200 that corresponds to the conversation record 310 (i.e., a conversation can only be associated with a single wave);
    • conversation metadata 322;
    • conversation log 324 (sometimes called the history log); and
    • one or more content contributions 326-1 to 326-n; and
    • a history log 360.
Conversation metadata 322 is metadata for the conversation corresponding to the conversation record 310 and identified by conversation identifier 310. In some embodiments, the conversation metadata 322 includes a conversation creation timestamp 331 (indicating the date and time the conversation was created), and a list of participants 332 (described in more detail in FIG. 3B) for the conversation. The metadata 322 may optionally include other metadata, such as metadata identifying tags 325 (e.g., system and/or user assigned labels that are “public,” and thus available to all participants in the conversation) associated with the conversation, and other characteristics of the respective conversation associated with the conversation record 310.
When a wave contains more than one conversation, the participant list 332 for the primary conversation of the wave will typically include all the participants in all the conversations in the wave. However, in some embodiments, private conversations (i.e., conversations other than the primary conversation) in the wave can have additional participants that are not participants of the primary conversation. Furthermore, as indicated above, each of the private conversations in a wave will typically have a participant list 332 does not include at least one of the participants in the primary conversation of the same wave.
In addition, when a wave contains more than one conversation, a parent ID/insertion position 333 is provided for each of the private conversations, but not for the primary conversation. The parent ID/insertion position 333 identifies the parent of the private conversation, as well as the position in the identified parent conversation at which content of the private conversation should be inserted when viewed by participants of the private conversation. Typically the parent of a private conversation is the primary conversation of the wave, but in some instances the parent of a private conversation can be another parent conversation that is higher up in the hierarchy (or graph) of conversations in the wave. When a participant of a private conversation views the wave that includes the private conversation, the content of both the parent conversation and the private conversation will be seen (assuming the participant is also a participant of the parent conversation). In the less common situation, in which a user is a participant of a private conversation, but is not a participant in the parent conversation, the user will see only the content of the conversation (or conversations) in the wave for which they are a participant.
In some embodiments, the conversation log 324 (FIG. 3C) records all changes to the conversation, including changes to the content of the conversation as well as to the set of participants and other characteristics of the conversation. The conversation log 324 is accessed when participants ask to see the state of the conversation, or a content unit of the conversation, at one or more points in time. For example, the conversation log 324 can be used to reconstruct or review the sequence of edits made to a content unit of the conversation. This is sometimes called “playing back” or “playback” of the conversation. Playback of a conversation can be performed in a variety of ways, including time forward or time backward, and showing updates to just a portion of the conversation or to the entire conversation. Additionally, it should be understood that the changes to a conversation or a portion of a conversation may be viewed as a participant-specific markup where each participant sees a markup that shows the differences between the last viewed state of the portion of the conversation for the participant and the current state of the portion of the conversation (e.g., a markup that shows each new participant any revisions that have been made to a content contribution since the participant last viewed the content contribution), as described in greater detail below with reference to FIGS. 17A-17G and 18A-18H.
A respective content contribution 326 (also called a content unit, “blip,” or portion of the conversation) in a conversation can be a message, much like an email message or instant message. Other content contributions 326 in a conversation can be documents (e.g., a report, meeting agenda, etc.), pictures, presentations, audio files, video files, or virtually any other type of electronic document or content. In some embodiments, there are few if any distinctions between email messages and other types of content contributions to a conversation. In some embodiments, the data in a conversation record 310 for each content contribution 326 includes:
    • a content identifier 342 (e.g., a value uniquely identifying the content contribution, either globally within the conversation system, or locally within a particular conversation);
    • content unit metadata 346, identifying characteristics of the content contribution 326;
    • optionally, one or more attachments 344 (e.g., pictures, videos, documents, files, archives, audio, animations, links, etc.); and
    • the content 349 (e.g., text, images, document content, etc.) of the content contribution 326.
In some embodiments, content unit metadata 346 for a content unit 326 includes:
    • a first timestamp 341-1 denoting the date and time the content unit was first created (added to the conversation), and a corresponding sequence number 343-1 corresponding to the state of the conversation when the content unit was first created;
    • a last timestamp 341-2 denoting the last date and time that the content unit was edited, and a corresponding sequence number 343-2 corresponding to the state of the conversation when the last edit to the content unit was made; having both the first and last timestamps and sequence numbers is useful (for example) when playing back changes to the content unit, or when playing back changes to a portion of the conversation that includes the content unit; and
    • identifiers 352 (e.g., participant addresses) of the content unit's contributors or author(s), optionally ordered by the order of first contributions of each author to the content unit; while most content units have a single author, content units can be written collaboratively, in which case they have multiple authors.
In some embodiments, the metadata 346 for a content unit 326 also includes one or more of the following:
    • parent identifier 354 provides an identifier of or pointer to the parent content unit to which this content contribution is a response or reply;
    • position 350 provides an indicator of the position of this content unit in a conversation); the position 350 may be used to govern how the content unit is displayed when displaying two or more content units of the conversation; and
    • optionally, siblings 358 of this content contribution (i.e., identifiers or pointers to sibling content units, which are other responses or replies to the parent of this content unit).
Typically, the metadata 346 for a content unit 326 includes at least one value (e.g., position 350 or parent identifier 354) that identifies or represents the position of the content unit 326 in the conversation.
A conversation index 264 (see FIG. 2) enables fast access to conversations in the conversation database 262 through searches of the index.
FIG. 3B is a block diagram illustrating data structures for the participant list 332 in the conversation metadata 322 (FIG. 3A) of a conversation record 310. A participant list 332 includes a plurality of participant records 362, one for each participant in a respective conversation. In some embodiments, each participant record 362 includes the following information, or a subset of the following information:
    • a conversation identifier 371;
    • a participant address 372, which may also be called a participant identifier; the participant address uniquely identifies the participant among all the participants in conversations in the conversation system 100 (FIG. 1);
    • a per-user conversation state 373; for example, the conversation state 373 may indicate the read/unread state 374 of this conversation with regard to the respective participant corresponding to participant record 362; the conversation state 372 includes information about which content contributions in the conversation, if any, have been viewed by the participant, and which have not yet been viewed; additionally, in some embodiments, for one or more of the content contributions that have been viewed by the participant, the read/unread state 374 for a respective content contribution also includes a respective timestamp corresponding to the time at which the participant last viewed the respective content contribution;
    • the conversation state 373 for a conversation participant may include flags 376; optionally, the flags 376 may include an ignore flag 377 (also sometimes called the mute flag), which if present, indicates that the participant has instructed the conversation system not to notify the participant of updates to the conversation;
    • the conversation state 373 for a conversation participant may include private labels (sometimes called “folders” or “folder designations”) 378 assigned by this participant to this conversation, which are for use only by this participant (e.g., when searching for conversations, the participant can include a private label as one of the query terms); private labels can e applied by participants to help organize their conversations and to make it easy to locate conversations based, in part, on what labels have been applied to them; it is noted that tags 325 are public information, available to all participants in a conversation, while the private labels of each participant are private to that participant;
    • the conversation state 373 for a conversation participant may include a viewpoint pointer 379, which indicates either the portion of the conversation currently being viewed by the participant (and the position of the user's cursor within a respective content unit if the user is entering or editing a content unit), or the portion of the conversation last viewed by the participant if the participant is not currently displaying or viewing the conversation;
    • optionally, other metadata related to this respective participant with respect to this particular conversation.
Another optional flag 376 in the per-user conversation state 373 for a respective participant is a reminder flag. When included in the per-user conversation state 373, the per-user conversation state 373 also includes a corresponding timestamp indicating the date and time (or pair of timestamps to indicate a range of dates/times) at which to reminder the participant to pay attention to the conversation or a portion thereof, optionally a user ID identifying the user who initiated the reminder (in some embodiments, reminders can be sent by a user not only to themselves, but to other participant(s) in the conversation), and optionally a content range indicator for specifying a portion of the conversation that is the subject of the reminder.
Another optional flag 376 in the per-user conversation state 373 for a respective participant is a ping flag. A ping flag is included in the per-user conversation state 373 when another participant has sent a ping (which is a form of notification, or instant message) to the participant (typically an online participant), or when the participant has sent a ping to another participant. The ping flag, when present, indicates to the client application that a ping notification (e.g., a pop-up box) is to be displayed.
Much of the information (e.g., conversation state 373) in each participant record 362 is private to that participant and is not shared with other participants of the conversation or other users in the conversation system. In some embodiments, the cursor position (see 379, FIG. 3B) of each participant who is actively editing a content unit or entering new text in a conversation is published to and visible to other participants of the conversation, unless a respective participant has elected to suppress publication of their cursor position, in which case that aspect of the participant's conversation state 373 is not considered to be private to the participant. When there are a plurality of active participants who are editing the same conversation, cursor position information for each of the active participants is transmitted to the clients of the active participants (via their hosting conversation servers). At the client of a respective participant, a plurality of cursor positions (corresponding to a plurality of different participants) are concurrently displayed when the cursor positions are sufficiently close to each other to enable concurrent display.
As described above, in some embodiments, for each respective conversation record 310, the server 140 maintains for each respective participant 362 a conversation state 373 of the respective conversation in regard to the respective participant. The server 130 provides to the respective participant (e.g., to a client that is displaying the conversation to the participant) the state of the respective conversation in regard to the respective participant. In some embodiments, this includes providing to the participant (e.g., to the client being used by the participant) the read status of the content units of the respective conversation in regard to the participant (i.e., indicating which content units have already been read or viewed (in their current state) by the participant, and which have not). In some embodiments, providing the conversation state 373 of the respective conversation in regard to the respective participant includes providing labels 378, specified by the respective participant for the respective conversation.
In some embodiments, providing the state 373 of the respective conversation in regard to the respective participant includes providing, in accordance with instructions from the participant, metadata (e.g., ignore flag 377) to ignore the respective conversation. This provides a participant with an option to manage conversations in accordance with a rule, in effect to archive conversations, and to reduce congestion in a conversation viewer. For example, when a participant marks a conversation with a system defined label of “ignore” or “mute,” the ignore status flag 377 for the participant (for the marked conversation) is set, and the conversation is thereafter treated (on behalf of this particular participant) much like an archived message or conversation. Other participants of the conversation may continue to see the conversation in their list of active conversations if they have not marked the conversation with the “ignore” label.
In some embodiments, the per-user conversation state 373 for each participant of each hosted conversation is stored in the conversation database 262, as shown in FIG. 3A. In other embodiments, the per-user conversation state 373 for each participant of each hosted conversation is stored in the user database 400, discussed below. In yet other embodiments, per-user conversation state 373 information (for each participant of each hosted conversation) is stored in a separate database or server (sometimes called the “user supplement” database or server) that is separate from the conversation database 262 and user database 400. Optionally, pointers to per-user conversation state 373 information (e.g., record) in the user supplement database may be stored in the user database 400 and conversation database 262. Alternately, such pointers are not stored, and the per-user conversation state 373 for a particular user of a respective conversation is retrieved, typically for transmission to a client participating in the conversation, from the user supplement database on an as-needed basis and is updated in accordance with operations (e.g., reading content, entering end content, editing content, etc.) performed by the participant.
As described in more detail below, in some embodiments, the conversation server 130 stores, for each respective subscriber, a contact list (416, described in FIG. 4) associated with the respective subscriber. In some embodiments, the contact list is stored in a user database 270 (FIG. 2) or 400 (FIG. 4).
When a conversation is sent to a client for display to a user, the client receives only a portion of the conversation record 310 (FIG. 3A) for the conversation. For example, in some embodiments, the portion of the conversation record 310 sent to and stored at the client excludes the conversation log 324, and the conversation state 373 of other participants (except, the cursor position of other currently active participants in the conversation who have not blocked the transmission of their cursor position). In some embodiments, the conversation log 324 is sent to a client 110 only when the participant at that client has requested playback of the conversation, or a user-specified portion of the conversation, or has requested to view the state of the conversation at a particular time or point in the past.
FIG. 3C is a block diagram illustrating data structures for the conversation log 324, according to some embodiments. The conversation log 324 includes an time ordered sequence of log records 385-1 to 385-C (sometimes called log entries). A respective log record 385 includes a content ID 386, identifying the content unit (if any) updated by the conversation edits recorded in the log record 385, metadata 388 relevant to the conversation edits recorded in the log record, references 394 (e.g., one or more pointers or file names) to any attachments added to the conversation by the conversation edits recorded in the log record, and a list of the conversation edits or changes 396 recorded in the log record. The metadata 388 includes a timestamp 389 and/or sequence number that uniquely identifies the order of the conversation edits in the log record, relative to the conversation edits in other log records for the same conversation. The metadata 388 also identifies a list of authors (also called contributors) 390 of the conversation edits in the log record, and the starting position 392 of the conversation edits recorded in the log record 385. While the authors list 390 will contain only one author for most log records 385, when multiple authors make edits or contribute content to a content unit during a short period of time, or during overlapping time periods, a single corresponding log record 385 includes a list 390 of all of the authors who contributed to the change in the content unit recorded by that log record 385. In some embodiments, the starting position 392 is incorporated into the conversation edits 396, as an offset or position setting for the first edit or update operation of the conversation edits 396, and in those embodiments the log records do not have a separate starting position 392 field.
FIG. 4 is a block diagram illustrating a data structure for a user database 400, according to certain embodiments of the invention. The database 400 includes a plurality of user records 402. In some embodiments, each user record 402 includes:
    • a user identifier 410 for a subscriber of the hosted conversation system;
    • user metadata 412, containing information about or for the user;
    • a list of conversations 414 in which the user is a participant;
    • the user's contact list 416 (typically a list of contacts 416 that corresponds to and is personal to user);
    • optionally, labels 418 defined by the user for labeling or classifying conversations;
    • optionally, a client device identifier and/or type 420 of a client device being used by the user to communicate with the conversation server, or alternately, the identifier and type of client devices that the user has used in conjunction with the conversation server in the past; in some embodiments, the type of the client (e.g., desktop, cell phone, etc.) may be used to determine what content from conversations is sent to the user;
    • optionally, preferences 422 of the user when participating in a conversation 422;
    • optionally, an inverse index 424 associated with the user;
    • a current online status 426 of the user (e.g., offline, online, busy, away, etc.);
    • authentication information 428 for the user (e.g., username, password, and optionally other values for authentication of the user);
    • optionally, other data relating to the user, such as one or more blog URLs 430, email addresses 432, etc.
The conversation list 414 associated with a user includes a plurality of user-conversation records 434, each record relating to a conversation in which the user is a participant. Each user-conversation record 434 includes:
    • a conversation identifier 436 that identifies the respective conversation, and
    • per-user conversation state information 438, which may be the same as (or a pointer to) the conversation state 373 in the participant record 362 of a conversation record 310. As discussed above, in some embodiments, per-user conversation state information is stored in a separate database or server (sometimes called the user supplement database or server), in which case the user-conversation record 434 includes a conversation identifier 436, but not the per-user conversation state information 438.
As noted above, in some embodiments the system includes a separate per-user inverse index 424 for each user of the system; each such index 424 is an index that maps the terms, labels, tags, etc. of the conversations in which a user is participant to the conversations (and optionally, to the content units with the conversations, or locations within the conversations) containing those terms, labels, tags, etc. These per-user indices enable fast indexing and fast searching of the conversations in which a user is a participant. In some embodiments, additional indices (sometimes called “big wave” indices) are used to provide fast indexing and access to “big wave” conversations having large numbers (e.g., more than a threshold number, such as 500 or 100) of participants. In these embodiments, the content of “big wave” conversations is not indexed in the per-user inverse indices 424, and is instead indexed in one or more “big wave” indices. Similarly, in some embodiments in which groups of users participate in conversations as groups, additional per-group indices are used to index those conversations and to provide fast searching of those conversations; and the conversations (if any) in which a respective user participates only as a group member are not included in the user's per-user inverse index 424. Thus, when a user performs a search for conversations satisfying a user-specified query, multiple indices may be searched, in which case the search results from the multiple indices are merged prior to returning the search results to the requesting user.
In some embodiments, server 130 provides the same content of a conversation to all participants of the conversation, and provides each online participant with online presence information for the other participants in the same conversation. In some embodiments, the server allows a participant of a conversation to disable publication of their online presence information to other participants in the conversation. In some embodiments, the server allows a participant of a conversation to selectively enable publication of their online presence information to other participants in the conversation (e.g., allowing publication of the participant's online presence only to users designated by the participant; or alternately, disabling publication of the participant's online presence to users specifically designated by the participant).
In some embodiments, server 130 provides the same content to each participant, formats content of the conversation to be compatible with one or more content types that a client device 110 associated with a respective participant has been configured to receive, and transmits the formatted content to the client device.
In some embodiments, when delivering the content of a conversation to certain clients (e.g., a cell phone or PDA), conversation server 130 formats the content by compressing multimedia data associated with the content (e.g., to reduce bandwidth requirements). In some embodiments, the server provides a subset of multimedia data associated with the content (e.g., a thumbnail image, or short audio/video clip) to the client. In some embodiments, the conversation server removes multimedia data associated with the content (e.g., strips out multimedia and just provides text) that is delivered to the client.
In some embodiments, the conversation server 130 authenticates a user using authentication information 428 prior to providing content from conversations to the user.
In some embodiments, the conversation server 130 sends content from conversations in which a respective user is a participant to a weblog (e.g., weblog server 226 or weblog client 228), specified (e.g., by Blog URL 430) in the user record 402 for that user. When a respective participant in a conversation is an automated client, content of the conversation is sent to the automated client. The automated client may be a weblog, an email server or account, or a service provider such as a translation service, spelling checking service, or the like.
FIGS. 5A-5E are flowcharts representing methods for hosting conversations at a server, according to certain embodiments of the invention. These methods are governed by instructions that are stored in a non-transitory computer readable storage medium and that are executed by one or more processors of one or more servers. Each of the operations shown in FIGS. 5A-5E may correspond to instructions stored in a computer memory or computer readable storage medium. The computer readable storage medium may include a magnetic or optical disk storage device, solid state storage devices such as Flash memory, or other non-volatile memory device or devices. The computer readable instructions stored on the computer readable storage medium are in source code, assembly language code, object code, or other instruction format that is executed or interpreted by one or more processors.
FIG. 5A shows a method 500 for hosting conversations at a server. A server hosts (502) a plurality of conversations, each having an identified set of participants. The server is typically one of a plurality of servers that hosts conversations in a hosted conversation system.
The server provides (506) the same content from a conversation to all the participants of the conversation. In some embodiments, the server also provides (508) online presence information of each of the plurality of participants in the conversation to other participants in the conversation. The server receives (510) content from each of a plurality of participants of the conversation and transmits the received content to the other participants of the plurality of participants.
The server provides (512), upon an additional participant being added to the conversation, the same content of the conversation to the additional participant as provided to the identified set of participants, and adds the additional participant to the identified set of participants. As noted above, when the additional participant is using a client capable of receiving the entire content of the conversation, the entire content of the conversation is sent to the client currently being used by the additional participant. As a result, a participant added to a conversation, even long after the conversation has begun, receives content contributed to the conversation before the participant was added to the conversation.
In some embodiments, the server formats (514) content of the conversation to be compatible with one or more content types that a client device associated with a respective participant has been configured to receive, and transmits the formatted content to the client device. In some embodiments, the server formats content from a conversation by performing at least one of: compressing multimedia data associated with the content, providing a subset of multimedia data associated with the content, and removing multimedia data associated with the content (e.g., removing video and audio data but leaving text content).
In some embodiments, the server receives (518) a search request (often called a query or search query) from a participant, and provides to the participant a search result, including content from at least one of the plurality of conversations, in response to the search request. Alternately, or in addition, in response to the received search request the server provides (520) to the participant a search result that includes a list of one or more conversations that match the search request. In some embodiments, the search request is processed by query engine 260 (FIG. 2), using an inverse index 264 of conversation content to identify conversations, or content within one or more conversations, that match the search request.
FIG. 5B shows a continuation of the method 500 of FIG. 5A. A server maintains (530) for each respective participant a state of the respective conversation in regard to the respective participant, and provides to the respective participant (e.g., to the client currently being used by the participant to view the conversation) the state of the respective conversation in regard to the respective participant. In some embodiments, this includes providing (532) to the participant (e.g., to the client being used by the participant) the read status of the content units of the respective conversation in regard to the participant (i.e., indicating which content units have already been read or viewed by the participant, and which have not). In some embodiments, providing (534) the state of the respective conversation in regard to the respective participant includes providing labels, if any, specified by the respective participant for the respective conversation.
In some embodiments, the metadata maintained for a conversation with respect to a particular participant includes (536) metadata to ignore the respective conversation, in accordance with instructions from the participant. For example, the ignore metadata may be provided to the search engine 260 (FIG. 2) of the conversation server. In some embodiments, the server provides (538) formatting information corresponding to the conversation state, the formatting information for use when displaying the conversation or portions thereof. In some embodiments, the formatting information includes one or more of: color (e.g., of text, background, borders), font, indenting, position (e.g., superscript or subscript), etc.
In some embodiments, the server stores (540), for each respective participant, a contact list associated with the respective participant.
In some embodiments, the server verifies (542) (using authentication information 428) that the participant is authorized to receive the content of a conversation, prior to providing content to a participant.
In some embodiments, the server maintains (544) a set of participants of a respective conversation, including one or more subscribers of the server system and an email participant identified by an email address.
In some embodiments, the server maintains (546) a set of participants of a respective conversation, including one or more subscribers of the conversation system hosted by the server and a weblog on which content of the conversation is posted.
FIG. 5C shows a continuation of the method 500 of FIG. 5A. In some embodiments, the server maintains (550) for a respective user (of the conversation system hosted by a set of servers that includes the server) a list of conversations in which the user is a participant. The server updates a status of each such conversation in the list when a state of the respective conversation changes. Upon request from the user (e.g., from a client being used by the user) the server sends to the user a list comprising at least a portion of the list of conversations in which the user is a participant, the list including status information for the listed conversations. In some embodiments, each respective user for which the server maintains (552) a list of conversations is a subscriber of the hosted conversation system.
FIG. 5D shows a method 560 of hosting electronic messages. A server hosts (562) a plurality of conversations. The server provides (564) content of the conversation to a plurality of clients associated with participants of the conversation, including providing to each client all content of the conversation that the client has been configured to receive.
The server receives (566) content from respective participants of the conversation and transmits to the clients associated with other participants of the conversation at least a portion of the received content. The server also provides (568), upon an additional participant being added to the conversation, to a client associated with the additional participant all content of the conversation that the client associated with the additional participant has been configured to receive.
FIG. 5E shows a method 570 of hosting electronic messages. For at least one of a plurality of servers, each associated with a different subset of users, a server hosts (572) conversations initiated by the respective subset of users. The server receives (574) content from respective participants of the conversation and makes the content available to other participants of the conversation. For participants associated with other conversation servers, the content is transmitted to those other conversation servers. The content is transmitted to the participants when they log in and request the content of the conversation.
The server also provides (576), upon an additional participant being added to the conversation, all the content of the conversation to a client associated with the additional participant, or alternately, all content of the conversation that the client associated with the additional participant has been configured to receive. In some embodiments, the server provides (578) a uniform view of the conversation to a plurality of the participants.
FIG. 6 is a block diagram of a conversation system 600 having a plurality of linked conversation servers 130, according to certain embodiments of the invention. FIG. 6 illustrates a logical coupling of the conversation servers 130 to each other and to clients for monitoring and reporting the online status (presence) of the system's users. The network 600 includes conversation servers 130-A, 130-B, and 130-C. The conversation system 600 may include more or fewer conversation servers than shown in FIG. 6. Each conversation server 130 hosts conversations for a set of users 138. (For example, each conversation server 130 may host conversations initiated by hundreds or even thousands of users.) Conversation server 130-A is assigned users 138-A; conversation server 130-B is assigned users 138-B; and conversation server 130-N is assigned users 138-N. Each conversation server 130 includes a respective status monitor 134 (134-A, 134-B, 134-N) and a respective status collector 136 (136-A, 136-B, 136-N).
Whenever a user changes online status (e.g., goes from offline to online, by logging into the conversation system), the change in status is detected by a respective status monitor 134 (e.g., a status monitor in the conversation server 130 assigned to the user). The status monitor 134 at the conversation server to which the user is assigned receives a message or otherwise detects the change in online status of that user to “online” (or “active,” “busy,” or whatever status is appropriate). Furthermore, the status collector 136 at the conversation server gathers the online status of the contacts in that user's contact list 416. While some of the contacts in the user's contact list may be assigned to the same conversation server, other contacts in the user's contact list are assigned to other conversation servers.
The status collector 136 of the conversation server to which the user is assigned gathers the online status of the user's contacts, including those assigned to other conversation servers, and forwards at least a portion of the collected status information to the user (i.e., to the client device or system currently being used by the user). In some embodiments, the status collector broadcasts requests for status information of the user's contacts to the other conversation servers, and the conversation servers to which the contacts are assigned respond to the requests. In some other embodiments, the status collector determines the conversation servers to which the contacts are assigned and sends requests for status information to those conversation servers. In some embodiments, the assignments of users to conversation servers may be determined by reference to an index of all users, a copy of which may be stored in all of the conversation servers or a subset thereof.
For example, if a user A1 of users 138-A, assigned to conversation server 130-A, changes online status from offline to online, a client application at the client being used by the user A1 sends a message to the conversation system 600 announcing that user A1 is online. The status monitor 134-A at the conversation server 130-A receives the message and updates the status of the user A1 to online. The status monitors 134 of other conversation servers either do not receive this message, or ignore it because the user A1 is not assigned to those other conversation servers. The status collector 136-A at the conversation server 130-A obtains a list of the contacts for the user A1 (e.g., by accessing contact list 416 for user A1). Using that list of contacts, the status collector 136-A gathers status information from the conversation servers to which the contacts are assigned. Thus, if a contact is assigned to conversation server 130-A, then the status collector 136-A accesses the contact's status information stored at conversation server 130-A. If a contact is assigned to conversation server 130-B, then server 130-A communicates with conversation server 132-0 to get the status information. A similar procedure occurs if a respective contact is assigned to conversation server 130-C.
FIG. 7 is a block diagram illustrating a conversation server 130 (also sometimes called a conversation system or a conversation server system) in accordance with one embodiment of the present invention. The conversation server 130 includes one or more processing units (CPU's) 702, one or more network or other communications interfaces 704, memory 706, and one or more communication buses 708 for interconnecting these components. The communication buses 708 may include circuitry (sometimes called a chipset) that interconnects and controls communications between system components. The conversation server 130 optionally includes (but typically does not include) a user interface having a display device and a keyboard.
Memory 706 includes high-speed random access memory, such as DRAM, SRAM, DDR RAM or other random access solid state memory devices; and may include non-volatile memory, such as one or more magnetic disk storage devices, optical disk storage devices, flash memory devices, or other non-volatile solid state storage devices. Memory 706 may optionally include one or more storage devices remotely located from the CPU(s) 702. Memory 706, or alternately the non-volatile memory device(s) within memory 706, includes a non-transitory computer readable storage medium. In some embodiments, memory 706 or the computer readable storage medium of memory 706 stores the following programs, modules and data structures, or a subset thereof:
    • an operating system 710 that includes procedures for handling various basic system services and for performing hardware dependent tasks;
    • a network communication module 712 that is used for connecting the conversation server 130 to other computers via the one or more communication network interfaces 704 and one or more communication networks, such as the Internet, other wide area networks, local area networks, metropolitan area networks, and so on; and
    • a conversation engine 714 that provides hosted conversation services on the server 130 for a plurality of users; in some embodiments, the conversation engine 714 corresponds to element 246 of FIG. 2.
The conversation engine 714 may include the following modules, or a subset thereof:
    • a search/access module 716 (in some embodiments, this corresponds to element 260 of FIG. 2), for performing searches of the conversation database 726; the searches of the conversation database 726 may include user-specified searches 718 as well as server-specified searches 720 (e.g., a search for conversations in a user's inbox);
    • a user database 722 (in some embodiments, this corresponds to element 270 of FIG. 2 and element 400 of FIG. 4), for storing information pertaining to users of the system;
    • user database management modules 724, for managing the user database 722 (e.g., for creating new user records, and for updating existing user records);
    • conversation database 726 (in some embodiments, this corresponds to element 262 of FIG. 2 and FIG. 3);
    • conversation management modules 728, for managing the conversation database 726; and
    • auxiliary services module(s) 250; as noted above, each particular auxiliary service provided in a hosted conversation system may be provided by modules within a conversation server 130, or by other servers.
In some embodiments, the conversation management modules 728 include the following modules, or a subset thereof:
    • a set of conversation update modules 730, for updating a conversation with changes made by one or more participants, including one or more of: an add/delete content module 732, for adding or removing content from a conversation; a split content contribution module 734, for splitting a content contribution (326, FIG. 3A) in a conversation into two or more separate content contributions; a cooperative editing module 736, for enabling simultaneous editing of a conversation or a content contribution (unit of content) by a plurality of participants; and an add new participant to conversation module 738, for adding a new participant to a conversation;
    • content playback module 740, for playing back edits to a conversation, a document, or a user-specified portion of the conversation or document (e.g., using conversation log records 385 from the conversation log 324, as described above with reference to FIGS. 3A-3C);
    • content formatting module 742, for formatting content to match a configuration of a client; (the configuration of a client for a respective user may be specified by an element 420, FIG. 4, of the user record 402 for the respective user);
    • markup generator 743, for generating a participant-specific markup of at least a portion of a conversation;
    • content publication to email module 744, for publishing content of a conversation to an email address; the email address may be specified by an element 432, FIG. 4, of the user record 402 for the respective user;
    • content publication to weblog (“blog”) module 746 for publishing content of a conversation to a weblog; the URL or network location of the weblog may be specified by element 430, FIG. 4, of the user record 402 for the respective user)
    • delete/archive conversation module 748, for deleting or archiving a conversation from a user's inbox or conversation viewer;
    • copy attachments to new conversation module 750, for copying attachments from one conversation to another conversation, without copying other content of the conversation;
    • transmit conversation module 752, for transmitting content of a conversation to a client or to another conversation server (e.g., for delivery to a user/client serviced by the other conversation server);
    • transmit conversation list module 754, for transmitting a list of conversations to a client or to another conversation server (e.g., for delivery to a user/client serviced by the other conversation server); and
    • auxiliary services module 756 for providing access to services outside of the conversation server.
Each of the above identified elements may be stored in one or more of the previously mentioned memory devices, and corresponds to a set of instructions for performing a function described above. The above identified modules or programs (i.e., sets of instructions) need not be implemented as separate software programs, procedures or modules, and thus various subsets of these modules may be combined or otherwise re-arranged in various embodiments. In some embodiments, memory 706 may store a subset of the modules and data structures identified above. Furthermore, memory 706 may store additional modules and data structures not described above.
Although FIG. 7 shows a conversation server, FIG. 7 is intended more as functional description of the various features which may be present in a set of servers than as a structural schematic of the embodiments described herein. In practice, and as recognized by those of ordinary skill in the art, items shown separately could be combined and some items could be separated. For example, some items shown separately in FIG. 7 could be implemented on single servers and single items could be implemented by one or more servers. The actual number of servers used to implement a conversation server system and how features are allocated among them will vary from one implementation to another, and may depend in part on the amount of data traffic that the system must handle during peak usage periods as well as during average usage periods.
FIG. 8 is a block diagram of a client having a user who participates in one or more conversations in a hosted conversation system, according to certain embodiments of the invention. The client 110 includes one or more processing units (CPU's) 802, one or more network or other communications interfaces 804, memory 806, and one or more communication buses 808 for interconnecting these components. The communication buses 808 may include circuitry (sometimes called a chipset) that interconnects and controls communications between system components. The client 110 typically includes a user interface 805. In some embodiments, the user interface includes a display device, a keyboard and a pointer device (not shown), while in other embodiments (e.g., a cell phone or personal digital assistant) the user interface includes a touch screen display.
Memory 806 includes high-speed random access memory, such as DRAM, SRAM, DDR RAM or other random access solid state memory devices; and may include non-volatile memory, such as one or more magnetic disk storage devices, optical disk storage devices, flash memory devices, or other non-volatile solid state storage devices. Memory 806 may optionally include one or more storage devices remotely located from the CPU(s) 802. Memory 806, or alternately the non-volatile memory device(s) within memory 806, includes a non-transitory computer readable storage medium. In some embodiments, memory 806 or the computer readable storage medium of memory 806 stores the following programs, modules and data structures, or a subset thereof:
    • an operating system 810 that includes procedures for handling various basic system services and for performing hardware dependent tasks;
    • a network communication module 812 that is used for connecting the client 110 to other computers via the one or more communication network interfaces 804 and one or more communication networks, such as the Internet, other wide area networks, local area networks, metropolitan area networks, and so on;
    • a browser or other client application 814 for viewing and interacting with web pages and other content, including conversations in a hosted conversation system;
    • a conversation web page 815, which is received from a conversation server (e.g., shown in FIG. 7) and is displayed using the browser or other client application 814, which may include a client conversation module 818 and/or a client assistant 819 that performs one or more tasks related to assisting a user's activities with respect to the client application 814 and/or other applications;
    • a conversation record 820, which contains the content of a conversation downloaded from a conversation server, some or all of which may be displayed in the conversation web page 815;
    • a conversation list 826, which is a list of conversations downloaded from a conversation server (e.g., in response to a query from a user of the client or as part of a user interface displayed within the conversation web page 815);
    • a contact list 828, or a portion of the contact list of the user of the client; the contact list may be maintained separately from or in conjunction with a conversation system;
    • markup generator 829 for generating a participant—specific markup of at least a portion of a conversation;
    • optionally, other data structures 830 (e.g., a list of labels defined by the user); and
    • optionally, other applications 832 for execution by the client 110.
In some embodiments, the conversation web page 815 includes a client conversation module 818 or other client assistant that is embedded in the web page 815. The client conversation module 818 comprises executable instructions that are executed by the client 110; for example, the client conversation module 818 may include instructions that are executed by a virtual machine (e.g., a Java virtual machine) that is part of the browser 814. The conversation web page 815 includes a conversation user interface having icons, which when activated by a user, execute various tasks to enable a user to request a list of conversations, select a conversation for display, view various portions of a conversation, participate in the conversation (e.g., by adding content to or editing content of the conversation), start new conversations, download attachments, and so on. Icons in the conversation user interface may function as links to executable procedures and instructions in the client conversation module 818. The aforementioned conversation record 820 and conversation list 826 may, in some embodiments, be downloaded in response to instructions sent by a client conversation module 818, or other client assistant embedded in the web page 815, to a conversation server.
The conversation record 820 comprises a client version or subset of the conversation record 310, described above with respect to FIG. 3A, for a respective conversation. The client conversation record 820 includes conversation metadata 822 needed by the client (e.g., a list of participants and their online status) and content contributions 824 that are the content of the conversation. Depending on the implementation and the capabilities of the client 110, the conversation record 820 may optionally include the attachments, if any, of the conversation. Thus, attachments may be downloaded to some clients (e.g., desktop and laptop computers), but not to others (e.g., mobile phones and personal digital assistants). In some embodiments, the attachments of the conversation are not downloaded until they are requested by the user. Alternately, in some embodiments, thumbnail images and/or snippets (e.g., selected text, if any) of some or all the attachments are automatically downloaded to the client 110 along with the primary content of the conversation, and the full content of the attachments is downloaded to the client 110 only upon user request.
Each of the above identified modules corresponds to a set of instructions for performing the functions described above. The above identified modules or programs (i.e., sets of instructions) need not be implemented as separate software programs, procedures or modules, and thus various subsets of these modules may be combined or otherwise re-arranged in various embodiments. In some embodiments, memory 806 may store a subset of the modules and data structures identified above. Furthermore, memory 806 may store additional modules and data structures not described above.
FIGS. 9A and 9B illustrates a series of windows showing edits to a conversation by a plurality of participants of the conversation, and playback of those edits.
FIG. 9A illustrates changes made to a conversation by a plurality of participants in the conversation. In the following example, there are at least two participants in the conversation, “Joe” and “Pat”.
At a first time/step 920, a first conversation window 910 has a first unit of content 922 entered by a first participant (e.g., Joe), who is the initial author of content 922. In some embodiments, the conversation window 910 includes a zoom option 912 to zoom deeper into a conversation, a reply option 914 to reply to the content 922, a draft option 916 to create a draft message, or a setting option 918 to change conversation settings. A first caret 924 represents a point (sometimes herein called a cursor position) at which the first participant is typing or editing the content 922. As the first participant types, deletes, or moves around the content 922, the caret 924 moves, indicating the location in or portion of the content that the user is editing.
In some embodiments, the caret may be defined as an XML tag or other markup language tag or expression. In some embodiments, the caret content, style, etc. may be selected or defined by a participant, by a system administrator, etc.
At a second time/step 930, a second participant (Pat) provides a sequence of edits to the content 922. A second caret 934 represents a point at which the second participant (also called the second user) is typing or editing the content 922. The second user adds the text “Building B” 932 to the content 922. The original content (by Joe) and the edits thereto (by Pat) are edits by distinct first and second participants in the conversation.
In some embodiments, a server (e.g., hosting the conversation) prepares for display the first caret at a position corresponding to the first edits by the first participant (Joe) of the conversation, and prepares for display a second caret at a position corresponding to the second edits by the second participant (Pat) of the conversation. The server provides the first and second edits and the first and second carets to the one or more servers for display.
In some embodiments, timestamps or sequence numbers (e.g., #1, #2, #3, and #4, as illustrated) may be associated with new content or edits to existing content. In some embodiments, if a timestamp is used, the timestamps use a consistent time base such as the time base of the hosting server.
At a third time/step 940, the second user again edits the content 922, by deleting the word “second” and replacing it with the word “third” 942. The second caret 934 is now beside the word “third”, indicating the location where the second user is editing.
At a fourth time/step 950, first user Joe creates a new message, in a new message window 952 within the conversation window 910 and below the first message window (which contains content 922 of the first message), and adds new content 954 to the new message window. Caret 956 represents a new point at which the first user (Joe) is typing or editing the content 954 in the new message window 952.
In some embodiments, as a new content (e.g., content 922) or a sequence of edits (e.g., edits 932, 942) are received, the conversation is updated with the revised content unit. In some embodiments, the updated conversation is provided to the one or more servers hosting conversations for the participants (e.g., Joe, Pat, etc.) in the conversation.
In some embodiments, a server hosting the conversation checks for conflicts between the first edits and the second edits, and if a conflict occurs, the server notifies a participant associated with the conflict. For example, if participant Pat attempts to edit a piece of text that Joe is currently editing, such that the edits conflict with each other (e.g., Pat deletes a word as Joe is typing it, or Joe deletes a paragraph within which Pat is editing), a conflict occurs and one or both of the participants are notified. In some embodiments, conflicts are automatically resolved using a predefined concurrency control procedure, described in more detail below.
FIG. 9B illustrates playback of edits to the conversation illustrated in FIG. 9A. In some embodiments, the edits are played back in chronological order, e.g., according to timestamps associated with the edits. In some other embodiments, the edits are played back according to sequence numbers associated with the edits. A participant of the conversation may view changes to conversation using the playback mechanism. It should be understood that, in accordance with some embodiments, the edits are played back using conversation log records 385 from the conversation log 324 (e.g., the client steps through the conversation log records 385 for a conversation or a portion of a conversation in chronological order), as described above with reference to FIGS. 3A-3C.
In some embodiments, the conversation is played back showing changes within a user-specified portion (e.g., a block of text, a paragraph, a single unit of conversation (blip), etc.) of the conversation in a chronological order. In some embodiments, this user-specified portion of the conversation is played back without viewing changes to other portions of the conversation. In one example, the user-specified portion is a single content unit of the conversation.
In a first playback time/step, content 966 is displayed in a window 964. A forward option 962 is displayed allowing a viewer to go forward in the conversation playback.
In a second playback time/step, obtained by selecting the forward option 962 in window 964, content 970 shows edits by second participant (Pat) to the conversation, adding the words “Building B.” A back option 972 is displayed, which allows a participant to move backward in the conversation playback, and the forward option 962 continues to be displayed.
In a third playback time/step, obtained by selecting the forward option 962 in window 964 while viewing the second playback time/step, content 980 shows further edits by second participant (Pat) to the conversation, replacing the word “second” with “third.”
In a fourth playback time/step, obtained by selecting the forward option 962 in window 964 while viewing the third playback time/step, content 990 shows further edits (new window 992 with text) by first participant (Joe) to the conversation. A replay option 994 allows a participant to replay the sequence of updates to the conversation. In some embodiments, one or more playback options enable a participant to perform one or more of the following operations: playback recent edits (e.g., most recent in time or in number), edits by a particular participant, edits to a particular portion of the conversation, etc.
In some embodiments, a playback may only show changes by a particular participant of the conversation. This may allow the participant to review his/her changes, or to view the changes of another participant.
In some embodiment, edits in the sequence of edits include individual keystrokes of a sequence of keystrokes by a respective participant in the conversation. In some embodiments, a plurality of distinct edits in the sequence of edits are distinct keystrokes. In some embodiments, a plurality of distinct edits in the sequence of edits are distinct words. For example, edits 932 by participant Pat include a distinct word (Building) and a distinct letter (B), and edits 942 include a deletion operation (delete the word “second”) and an addition operation (adding the word “third”). In some embodiments, as each of these distinct edits is received by the server hosting the conversation, the conversation is updated accordingly.
FIG. 10 illustrates participants preparing a message in a draft mode. While in draft mode, a participant makes edits, such as adding or deleting content in a conversation, and the edits are received by the server hosting the conversation, but are not sent to other participants in the conversation. Only when the participant exits the draft mode, e.g., by indicating that he/she is finished making edits, are the participant's edits released (i.e., sent to the clients of the other participants) by the server so that other participants can view them. The author (i.e., a participant working in draft mode) can prepare content, knowing that intermediate changes or thoughts will not be visible to other participants until the author is ready.
In some embodiments, when one participant is editing a content unit (of a conversation) in draft mode, editing of the content unit by other participants is disabled. Editing of other content units of the same conversation by other participants is not disabled.
In some embodiments, a “team draft mode” allows a plurality of participants (e.g., members of Team A) to work together in preparing or editing content and to see each other's edits, while preventing non-team participants from seeing the content or edits until the team draft mode is exited. Using the team draft mode protects the privacy of team members as they work together to prepare content for publication to other participants in the conversation.
A number of different mechanisms may be used to exit the team draft mode, or to release content prepared by a team of participants. For example, the team draft mode may be exited (or content prepared by a respective team may be released for publication to the other conversation participants), when team members agree that the edits should be published. In some embodiments, in order to exit the team draft mode, all team members must agree to publish edits or content, while in some other embodiments a majority of team member must agree to publish edits or content, and in yet other embodiments, one or more senior team members determine when to publish edits or content.
In the team draft mode, as a respective participant of the conversation makes edits to the conversation, the updated conversation is provided to a server associated with a team member. In some embodiments, the edits to the conversation are provided to a server associated with a non-team member, but display of the edits is delayed. In some embodiments, the edits to the conversation are not provided to a server associated with a non-team member until the draft mode is ended.
Further, in the ‘team’ draft mode, edits to the conversation from the participant (author) and one or more team members are received, the conversation is updated, and the updated conversation is provided to the one or more servers associated with the respective participant and the other team members.
In a first time/step 1010, a first author/participant (e.g., Joe, who is a member of Team A) prepares a message in window 1012. An approval option 1014 (e.g., using a check mark for approved and a cross 1016 for not approved) shows that the first author has not yet approved the message. When the first participant approves the message, this may be represented as a check mark 1033 in option 1014. The first author enters content 1011, and a caret 1018 indicates the first author's current text entry or editing position in the content. In some modes of operation, as the first author enters the content 1011, the content is made visible to members of the same team as the first user.
In a second time/step 1020, a second participant (Pat, who is also a member of Team A) edits the content 1011 (in this example, changing “$100” to “$110”) to produce updated content 1021. Second caret 1026 shows the text entry or edit position of the second participant in the content. An approval option 1022 associated with the second participant is displayed at the top of the window 1012, and functions like the approval option 1014 associated with the first participant, as described above. As the second participant edits the content, the updated content 1021 is made visible to members of the same team.
In a third time/step 1030, the first (Joe) and second (Pat) participants approve the message for publication. This is indicated by check marks 1033 associated with approval options 1014 (for the first participant Joe) and 1022 (for the second participant Pat). The approved content (1031) is then published to other participants in the conversation.
In a fourth time/step 1040, the edits made by first and second participants are published so that conversation participants (e.g., members of Team B) outside of Team A can now view the published content 1041.
In the example shown in FIG. 10, all the team-based drafting and editing takes place in one message window 1012 for one content unit. In other embodiments, solo or team-based drafting can occur in more than one window or content unit, and can include adding new messages or editing existing messages.
FIGS. 11A-B are flowcharts representing methods for editing, playing back and drafting conversations hosted at a server, according to certain embodiments of the invention. These methods are governed by instructions that are stored in a non-transitory computer readable storage medium and that are executed by one or more processors of one or more servers, as described.
FIG. 11A shows a method 1100 for hosting conversations at a server (e.g., in hosted conversations database 262, FIG. 2). A server hosts (1102) a plurality of conversations, each having an identified set of participants.
The server receives (1104) units of content (e.g., each content unit stored as a content contribution 326, FIG. 3A) from respective participants in the conversation and transmits to one or more servers hosting conversations for the participants in the conversation at least portions of the received content units. Optionally, individual keystrokes are transmitted from the client utilized by a content unit's author to other participants as the author composes the content of a content unit (1106).
The server receives (1108) a sequence of edits, including first edits and second edits, to a respective content unit of the conversation from at least one participant other than the initial author of the content unit to produce a revised content unit. Optionally, the first and second edits to the content unit are edits by distinct first and second participants in the conversation (1110).
Optionally, or in some modes of operation, editing of the respective content unit by other participants in the conversation is disabled (1112) while receiving edits to the content unit from a first participant of the conversation. Alternately, concurrent editing by more than one participant in the conversation is enabled (1113). As described in more detail below, any conflicts between concurrent edits by different participants are resolved and the resulting consistent content is published to (or made available to) all the conversation participants.
In some embodiments, a first caret (e.g., caret 924 identifying Joe in FIG. 9A) is prepared for display (1114) at a position corresponding to the first edits by the first participant of the conversation, and a second caret (e.g., caret 934 identifying Pat) is prepared for display at a position corresponding to the second edits by the second participant of the conversation, and the first and second edits and the first and second carets (or caret positions) are provided to the one or more servers. Active participants in the conversation (e.g., participants whose clients are currently displaying the conversation) can see the carets associated with concurrent authors/editors of a content unit.
In some embodiments, the plurality of edits in the sequence of edits include distinct keystrokes (1116). In these embodiments, the clients used by active participants in the conversation display updates/edits to the conversation at substantially the same time as they are entered by the author of those update/edits.
In some embodiments, the plurality of edits in the sequence of edits include distinct words (1118). In these embodiments, the clients used by active participants in the conversation display word-by-word updates/edits to the conversation at substantially the same time as they are entered by the author of those update/edits.
A respective timestamp or sequence number is stored (1120) for each distinct edit in the sequence of edits to the content unit, including distinct timestamps or sequence numbers for at least first and second edits to the content unit.
The conversation is updated (1222) with the revised content unit and the updated conversation is automatically provided to the one or more servers hosting conversations for the participants in the conversation.
FIG. 11B continues the method 1100 for hosting conversations at a server, illustrated in FIG. 11A.
In some embodiments, a timestamp (e.g., timestamps 1, 2, 3, 4 indicated by 920, 930, 940, 950, etc., of FIG. 9A and stored in timestamps 341 of FIG. 3B) is stored (1130) for each content unit in the conversation.
Data is transmitted (1132) representing the sequence of edits to a respective participant of the conversation, thus enabling the respective participant to view changes to the conversation in accordance with the sequence of edits.
In some embodiments or modes of operation, the respective participant is permitted to view (1134) changes to the conversation (or a user-specified portion of the conversation) in a chronological order, e.g., even if the changes are spaced apart from each other in the conversation. Stated in another way, in some modes of operation the playback function in a client application displays a sequence of changes to the conversation in chronological order. For example, in FIG. 9B a conversation is played back to show changes to the conversation as a result of adding and editing of content by participants in the conversation.
In some embodiments or modes of operation, the respective participant is permitted to view (1136) a sequence of changes within a logical portion of the conversation in a chronological order, e.g., using the back 972 and forward 974 buttons to navigate through changes in the conversation. Stated in another way, in some modes of operation the playback function in a client application displays a sequence of changes within a logical portion of the conversation in a chronological order. This allows a participant to see sequences of changes in a specific portion of interest in the conversation, without seeing changes in unrelated portions. For example, the logical portion of the conversation for which changes are displayed may be a single content unit of the conversation (1138). Alternately, the logical portion of the conversation for which changes are shown (when using the playback function) are a plurality of user-selected content units of the conversation.
In some embodiments, a respective participant of the conversation is permitted to view (1140) changes to the conversation by another respective participant of the conversation, e.g., to view all changes made by first participant Joe or by second participant Pat, as illustrated in FIG. 9A.
In some embodiments, the server delays (1142) providing edits to the conversation by a respective participant operating in a draft mode, and provides the updated conversation to other participants (e.g., to the servers that host conversations of the other participants, and to the clients used by those other participants) until the respective participant exits the draft mode or releases the conversation edits/updates that he/she has made. For example, edits 1011, 1021 of FIG. 10 are not provided to Team B until after members of Team A (Joe, Pat) approve the edits and end the draft mode. In some embodiments, draft mode information or draft approval information or status is stored in the participant conversation state 372 (FIG. 3B) for the conversation.
In some embodiments, while a respective participant (who is a team member) makes edits to the conversation using a team draft mode, the server provides (1144) the updated conversation to a server associated with another team member (e.g., Joe can see Pat's edits and vice versa), and delays providing the edits to the conversation by the respective participant to a server associated with a non-team member (e.g., Team B cannot see Team A's edits during the draft mode). After the draft mode is ended, the server provides the updated conversation, including the edits to the conversation by the respective participant, to the server associated with the non-team member. Alternately, the conversation edits made during draft mode are provided contemporaneously to the servers associated with all conversation participants, but the changes are marked as draft mode changes and therefore not provided to participants outside the team of the participant making the changes until the draft mode is exited or the conversation updates are approved or released (e.g., by the participant or by the participant's team).
In some embodiments, when a group or team of participants in a first conversation initiates editing of the conversation in a team draft mode, a separate conversation is created. The team members draft content within the separate conversation, and when the team is finished drafting the separate conversation or a portion thereof is merged back into the first conversation, at which point the new or edited content is made available to the other participants in the first conversation.
Concurrency Control
The aforementioned cooperative editing module 736 (FIG. 7) allows multiple participants (clients) to simultaneously edit a conversation, and provides conflict detection and resolution to determine if participants' edits conflict. At a respective client, a user enters and edits conversation content using an “optimistic user interface,” which assumes there is no conflict between content entry and edits made by the user of the client device and other participants in the same conversation, until it is told otherwise by the conversation server that provides conversation hosting services for the client.
Referring to FIG. 15, one or more participants in a conversation make edits to a conversation at their local client (1510), which sends the user edits (1512) to the conversation server that provides conversation services to the client. The user edits made by each participant are received at the conversation server system (1520).
When conflicting changes (edits) are made by two (or more) conversation participants (herein called the “competing participants” for ease of identification, as opposed to any other participants who are not currently making conflicting edits to the conversation), transformation operations are performed on the edits made by the competing participants so that the state of the conversation on each of the clients is consistent. Furthermore, the conversation server reduces the number of transformation operations it needs to perform by merging sequences of edits made at each client into merged sequences of edits (1522), and then performing the transformation operations on the merged sequences of edits by the competing participants (1524). Respective transformed sequences of edits are transmitted to the clients of the competing participants (and to any other active participants), along with sequencing information (1524, 1534)) to enable each client to apply both locally made edits and the received transformed sequences of edits in the correct order so as to reproduce the correct current state of the conversation (1536).
When non-conflict changes (edits) are made by two (or more) conversation participants, the conversation server still merges sequences of edits made at each client into merged sequences of edits (1522). Each merged sequence of edits is assigned a timestamp and/or sequence number (see description above of conversation log 324, FIG. 3A), and is sent to the clients of the conversation participants (1522, 1530) so that all the participants have a consistent record of conversation state. The respective clients apply the received merged edit sequences to update the locally stored conversation state (1532). Each client at which the conversation is being displayed updates its display of the conversation (1538) in accordance with both the locally made edits and the merged sequences of edits of other participants received from the conversation server.
A special situation requiring special handling at the client is as follows. If, at the time a transformed sequence of edits is received at a client, the participant using the client has made additional changes that conflict, or potentially conflict with the changes recorded in the received transformed sequence of edits, then the client performs a second transformation on the received sequence of edits that anticipates the transforms to be made at the server when it receives the additional changes made at the client. As a result of the second transformation on the received sequence of edits, and the transformation applied by the server to the edits made at the client, the conversation state is made consistent across the clients of the participating users and across the hosting server(s). In other words, each of the clients includes operation transformation instructions, to be applied to received edits made at other clients, that take into account transformations that will be performed by the server on the edits made at those clients operations. The state of the conversation at each step along the way is represented by a corresponding sequence number, which is used by both the clients and the conversation hosting server to ensure that the transformations made at the clients and servers are coordinated or synchronized and produce a consistent conversation state. (1536).
It is noted that locally made edits are sent to the conversation server (1512) on a continuing basis, and so the edits made subsequent to the received transformed sequence of edit are also sent to the conversation server, and the process of generating merged sequences of edits, and generating transformed sequences of edits (if needed), continues. As a result, the state of the conversation at each client reflects interleaved sequences of edits by the active participants, where some of the sequences of edits are transformed sequences that have been transformed in order to achieve a consistent state at each of the clients used by the conversation participants.
As discussed above, in some embodiments, concurrency control operations for a conversation are performed at both the conversation server system 130 that hosts the conversation and, when necessary, by clients that receive transformed edits that conflict with intervening edits made at those clients.
The quantity of edits that are merged into a merged edit sequence (1522) depends, at least in part, on the rate at which the participant is entering edits. Another factor that may affect the quantity of edits that are merged is whether other participants are editing the same content unit at the same time. For example, when there are no competing edits being made by other participants, relatively long sequences of edits may be merged. However, when competing edits are being made by other participants, relatively short sequences of edits (e.g., limited to edits made in a period of N seconds, where N is typically less than or equal to 0.5) are merged. In other embodiments, edits (which includes content entry, as well as revisions of previously entered content, and changes to shared metadata) by a participant are sent right away to other active participants in the conversation, if any, without performing any merging. When conflicts are detected, a transformation is generated (at the hosting conversation server, or at another server) for each individual edit operation before forwarding it to the other active participants. As noted above, a second level transformation on a respective received transformed edit is performed at the receiving client when the received transformed edit conflicts with an edit made at the local client since the time corresponding to the conversation state sequence number.
To keep latency, defined as the delay between edit entry and its appearance at the clients of other participants, low, edits by participants are typically sent to the other active participants as quickly as possible, without regard to edit sequence merging. Fast transformation and forwarding of edits during “live conflicts” (when two or more participants are revising the same portion of the conversation) keeps the participants accurately apprised of the evolving conversation state during live conflicts. Since merging operations and then transforming them to the active participants would increase latency, operation merging is either not used, or used only for very small time windows, during live conflicts. On the other hand, for purposes of recording the conversation history in the conversation log 324 (FIG. 3C) for playback, sequences of operations performed in short periods of time are merged. As noted above, a conversation log record 385 can include a list of authors 390 identifying multiple authors of a change to the conversation state when more than one author is editing the same conversation at the same time or during overlapping times. Furthermore, when there are no conflicts between participants, entire sequences of editing by a participant, from the start of an edit sequence until the user selects the “done” icon or button, are merged into a single edit sequence for storage in a single conversation log record 385 (FIG. 3C).
FIG. 12 illustrates a process diagram showing the application of concurrency control between a plurality of potentially conflicting edits received from two participants. The example illustrated in FIG. 12 shows transformation operations of ASCII text including XML tags and content. Operations are performed at a first participant (client) and at a second participant (client).
A first sequence of edits to a respective content unit of the conversation is received from a first participant of the conversation, and the first sequence of edits is converted into a first merged sequence of edits (1212). A second sequence of edits to a respective content unit of the conversation is received from a second participant of the conversation, and the second sequence of edits is converted into a second merged sequence (1216).
The first merged sequence of edits (1212) is transformed to produce a first transformed sequence of edits (1232), and the second merged sequence is transformed to produce a second transformed sequence of edits (1222). The first transformed sequence of edits (1232) is sent to the second participant, and the second transformed sequence of edits (1222) is sent to the first participant. At the first client, the first merged sequence (1212) is applied to an initial conversation state D1 to produce an intermediate conversation state D2, and then the second transformed sequence of edits (1222) is applied to the conversation state D2 to produce a new conversation state D4. At the second client, the second merged sequence of edits (1216) is applied to the initial conversation state D1 to produce an intermediate conversation state D3, and then the first transformed sequence of edits (1232) is applied to the intermediate conversation state D3 to produce the same new conversation state D4 as produced at the first client. Thus, the transformed sequences of edits, 1232 and 1222, are generated so that when they are applied to the conversation state after the application of locally made edits (corresponding to merged sequence of edits for that client), the conversation state in both clients converges to a consistent state.
In the example of FIG. 12, each ASCII text character has a size of one, and each starting and ending XML tag has a size of one. In the example of FIG. 12, “delete text” refers to a text deletion component of the operation, and “delete element” refers to an element deletion operation. The number accompanying a text or element deletion operation refers to the size of the element deletion. Both “insert element” is used to add XML tags to a conversation unit, and “insert text” is used to insert text. Transformations of merged sequences of content update operations (edits) take into account the position of each operation in the conversation unit, and also take into account duplicate operations (e.g., completing operations that delete the same text), or more generally operations that render other competing operations moot).
The initial conversation state D1 1210 comprises a first string:
    • D1=<example>abcdefg</example>
The second (or revised) conversation state D4 1240 comprises a second string:
    • D4=<example>a<tagName attr1=“value1” attr2=“value2”>A<nested>B</nested>C</tagName>fg</example>
Intermediate conversation state D2 1220 comprises a third string:
    • D2=<example>ab<tagName attr1=“value1” attr2=“value2”>A<nested>B</nested>C</tagName>fg</example>
Intermediate conversation state D3 1230 comprises a fourth string:
    • D3=<example>aefg</example>
The first merged sequence of edits 1212 provides the following edits:
    • skip 3
    • insert element start with tag name “tagName” and attributes [attr1=“value1”, attr2=“value2”]
    • insert text “A”
    • insert element start with tag name “nested” and attributes
    • insert text “B”
    • insert element end
    • insert text “C”
    • insert element end
    • delete text 3 (e.g., text cde)
When the first merged sequence of edits 1212 is applied to the initial conversation state D1 1210, the result is intermediate conversation state D2 1220, described above. A dotted box 1214 indicates the portion of state D2 in which changes were made to D1 by the first merged sequence of edits 1212.
The second transformed sequence of edits 1222 provides the following edits:
skip 2
delete text 1
The second transformed sequence of edits 1222 deletes the letter “b” 1224 from the intermediate conversation state D2. The result of this operation is the second (or revised) conversation state D4 1240.
The second merged sequence of edits 1216 provides the following edits:
skip 2
delete text 3 (e.g., delete “bcd”)
The second merged sequence of edits 1216 deletes the letters “bcd” from the first conversation state D1. The result of applying the second merged sequence of edits 1216 to the first conversation state D1 is the intermediate conversation state D3 1230.
The first transformed sequence of edits 1232 provides the following edits:
    • skip 2
    • insert element start with tag name “tagName” and attributes [attr1=“value1”, attr2=“value2”]
    • insert text “A”
    • insert element start with tag name “nested” and attributes
    • insert text “B”
    • insert element end
    • insert text “C”
    • insert element end
    • delete text 1
The first transformed sequence of edits 1232 changes the intermediate conversation state D3 by adding the material indicated by the dotted line 1234 on FIG. 12. The result of this operation is the second conversation state D4.
It is noted that the merging of edit sequences makes the detection of conflicting edits (by different users) easier, thereby reducing the amount of computational resources needed for concurrency control. Conflicting edits are detected, for example, when the transformation of a merged sequence of edits would change the position of at least one edit operation. Conflicting edits are also detected when first and second merged sequences of edits (by two distinct participants) include overlapping delete operations. Transforming a merged sequence of edits for which there is an overlapping delete operation (i.e., overlapping with edit operations by another participant) produces a transformed delete operation that deletes fewer elements of the respective content unit than the respective delete operation of the merged sequence of edits.
In some embodiments, when first and second merged sequences of operation include overlapping operations, including a redundant operation, the first transformed sequence of edits does not include the redundant operation.
In some embodiments, distinct conversation (or content unit) version numbers are associated with the state of a respective conversation (or content unit) before and after each merged sequence of edit operations. Similarly, distinct version numbers are associated with the state of a respective conversation (or content unit) before and after each transformed sequence of edit operations. In some embodiments, distinct timestamps are associated with each distinct version number of the conversation (or content unit).
FIG. 13 illustrates a sequence of separate edit operations to a content unit received from a first participant and a sequence of separate edit operations received from a second participant in a conversation.
A starting point for this sequence is a first content unit state 1310, comprising the text “ABCDEFG”. A first sequence of edits is received from a first participant, including:
1316: insert “X” at 6, resulting in text ABCDEFXG
1318: insert “Y” at 1, resulting in text AYBCDEFXG
1350: delete 3-5, resulting in text AYBEFXG
A second transformed sequence of edits is received from the second participant and applied at the first participant, including:
1352: delete 3-4, resulting in text AYBFXG
1354: insert “M” at 5, resulting in text AYBFXMG
1356: insert “N” at 3, resulting in text AYBNFXMG.
This is the final content unit state 1370.
Again, referring to the starting state 1310, comprising the text “ABCDEFG”, a second sequence of edits is received from a second participant, including:
1312: delete 3-5, resulting in text ABCFG
1314: insert “M” at 4, resulting in text ABCFMG
1330: insert “N” at 3, resulting in text ABCNFMG
A first transformed sequence of edits is received from the first participant and applied at the second participant, including:
1332: insert “X” at 5, resulting in text ABCNFXMG
1334: insert “Y” at 1, resulting in text AYBCNFXMG
1336: delete 3-5, resulting in text AYBNFXMG.
This is the final content unit state 1370, and is the same content unit state as achieved using the first sequence of edits and the second transformed sequence of edits.
Since there are a plurality of separate edits, there are also a plurality of transforms (indicated by the plurality of arrows/paths from content unit state 1310 to content unit state 1370). In this embodiment, each transform has to be calculated for each path, which consumes processor resources and takes time.
FIG. 14 illustrates 1400 a sequence of merged edit operations to a content unit received from a first participant and a sequence of merged edit operations received from a second participant in a conversation, and transforms thereon.
A starting point for this sequence is a first content unit state 1410, comprising the text “ABCDEFG” and corresponding to the starting content unit state 1310 of FIG. 13.
A first merged sequence of edits is received from a first participant, including:
    • 1416: skip 1, insert “Y”, skip 1, delete 2, skip 2, insert X, resulting in text AYBEFXG, content unit state 1450.
A second transformed merged sequence of edits is received from the second participant and applied at the first participant, including:
    • 1452: skip 3, delete 1, insert “N”, skip 2, insert M, resulting in text AYBNFXMG, end point 1470.
Again referring to the starting content unit state 1410, comprising the text “ABCDEFG”, a second merged sequence of edits is received from a second participant, including:
    • 1412: skip 3, delete 2, insert “N”, skip 1, insert “M”, resulting in text ABCNFMG, content unit state 1430.
A first transformed merged sequence of edits is received from the first participant and applied at the second participant, including:
    • 1432: skip 1, insert “Y”, skip 1, delete 1, skip 2, insert “X”, resulting in text AYBNFXMG, which is the final content unit state 1470.
      This is the final content unit state 1470 as the state achieved by applying the first merged sequence of edits and the second transformed merged sequence of edits.
Since the individual edits (e.g., as in FIG. 13) are merged into a sequence of edits in FIG. 14, there are fewer transforms required using the embodiment of FIG. 14 versus that of FIG. 13 (indicated by the pair of arrows/paths from point 1310 to point 1370). In this embodiment, one transform has to be calculated for each path, which is a lower processing burden than the embodiment of FIG. 13. The embodiment of FIG. 14, using merged sequences of edits, thus provides advantages of a reduced calculation requirement.
Other Applications
Another application that may be associated with the server hosting the conversation includes a contextual spell checker and correction application. Such an application can be used to find common misspellings, and to disambiguate intentionally defined words. Such an application may use an error model to determine if an work is spelled or used correctly. The model may find common errors based on letter reversal, phonetic similarity, location in a conversation or letter, or using other means. The application may provide on-the-fly, context based text correction. In some embodiments, the application provides a user-specific overlay of words that a user frequently uses or that the user has defined. In some embodiments, the application may insert a tag with a suggestion for a word that it considers to be incorrectly spelled, such that any participant (not just the author) can address and correct the word, if necessary.
Another application that may be associated with the server hosting the conversation includes a contextual name display, using context-dependent disambiguation. In some embodiments, this disambiguation may provide space efficiency when displaying names. For example, a close friend or work colleague may be displayed using a first name only or a picture, whereas a stranger may be displayed with full name, title, etc. A set of rules (defined by the system or by the user or both) may be used to determine who to display and in what manner.
Another application that may be associated with the server hosting the conversation includes a language translation (machine translation) application. This machine translation application may use the spell checking and/or a context sensitive dictionary to translate between languages.
In some embodiments, these (and other) applications use an application protocol interface (API) to interact with the server hosting the conversation. In some embodiments, the application allows a participant to reserve a namespace for that participant's personal applications, which the participant may share with other participants.
FIG. 16 is a block diagram of a distributed client-server computing system 1600 including a conversation server 130 according to some embodiments of the invention. The conversation server 130 is connected to a plurality of conversation clients 110 and third party webservers 1602 through one or more communication networks 120. A third party webserver 1602 may include a collection of web pages 1604 associated with a domain name on the Internet (e.g., a website).
Conversation client 110 (sometimes called a “client system,” or “client device” or “client computer”) may be any computer or device through which a user of conversation client 110 can submit service requests to and receive search results or other services from conversation server 130. Examples of conversation clients 110 include, without limitation, desktop computers, laptop computers, tablet computers, mobile devices such as mobile phones, personal digital assistants, set-top boxes, or any combination of the above. A respective conversation client 110 may contain at least one client application 814 for submitting requests to the conversation server 130. For example, the client application 814 can be a web browser or other type of application that permits a user to search for, browse, and/or use information (e.g., web pages and web services) that is accessible through communication network 120. In some embodiments, conversation client 110 includes one or more client assistants 819. Client assistant 819 can be a software application that performs one or more tasks related to assisting a user's activities with respect to client application 814 and/or other applications. For example, client assistant 819 may assist a user at conversation client 110 with browsing information (e.g., files) hosted by a third party webserver 1602, processing information (e.g., conversations or search results) received from the conversation server 130, and monitoring the user's activities on the search results. In some embodiments client assistant 819 is embedded in one or more web pages (e.g., a search results web page) or other documents downloaded from the conversation server 130. In some embodiments, the client assistant 819 is a part of client application 814 (e.g., a plug-in or extension of a web browser).
Communication network(s) 120 can be any wired or wireless local area network (LAN) and/or wide area network (WAN), such as an intranet, an extranet, the Internet, or a combination of such networks. In some embodiments, communication network 120 uses the HyperText Transport Protocol (HTTP) and the Transmission Control Protocol/Internet Protocol (TCP/IP) to transport information between different networks. The HTTP permits client devices to access various information items available on the Internet via communication network 120. The various embodiments of the invention, however, are not limited to the use of any particular protocol.
In some embodiments, conversation server 130 includes a front end server 1606, user database management modules 724, a user database 722, a search/access module 716, a conversation database 726, and conversation management modules 728 including a markup generator 743.
Front end server 1606 is configured to receive data from a conversation client 110, which instructs conversation server 130 to perform various conversation management operations. User database management modules 724 manage user database 722 by creating and updating user records. Search/access module 716 performs searches of conversation database 726 (which corresponds to conversation database 262 in FIGS. 2 and 3A-3C). In some of these embodiments, conversation database 726 stores data associated with conversations, including a conversation log (e.g., 324 in FIGS. 3A and 3C) which includes conversation log records (e.g., 385 in FIG. 3C) that can be used to reconstruct conversations from conversation database 726 at different states (e.g., at a sequence of times during the course of a respective conversation). Additionally, in some embodiments, conversation database 726 includes a participant list (e.g., 332 in FIG. 3A) for each conversation, which includes a read/unread state (e.g., 374 in FIG. 3B) for each participant. The read/unread state of a particular participant (of a particular conversation) indicates whether the participant has viewed respective portions of the conversation, and, optionally, a timestamp indicating the last time that the participant viewed each respective portion of the conversation that the participant has viewed at least once.
The conversation management modules 728 update conversation data in the conversation database 726 in accordance with requests from the conversation clients 110. Additionally, in some embodiments, in response to a request from a participant to view a markup of a particular portion of a conversation (e.g., the conversation portion currently being viewed by the participant), markup generator 743 retrieves conversation data from the conversation log (e.g., 324 in FIG. 3A) and the participant list (e.g., 332 in FIG. 3A) for the portion of the conversation, and generates a participant-specific markup that is specific to a state of the portion of the conversation at the time that the participant last viewed the portion of the conversation. The participant-specific markup is transmitted to the front end server 1606 for delivery to conversation client 110 via communication network 120. It should be understood that, in some embodiments, conversation client 110 includes a markup generator. Thus, in some embodiments, in response to a request to view a markup of a portion of a conversation from a participant, conversation client 110 requests information from the conversation server 130 that enables conversation client 110 to generate a markup of the portion of the conversation, the conversation management modules 728 send information indicative of the current state of the portion of the conversation and any other information necessary to generate a markup of the portion of the conversation to conversation client 110. In some of these embodiments, conversation client 110 generates the participant-specific markup of the portion of the conversation for display to the participant.
It should be understood that while, in some embodiments, system 1600 has a single conversation server 130, in other embodiments system 1600 has multiple conversation servers 130 (e.g., as illustrated by conversation servers 130 in FIGS. 1, 2 and 6). For example, as described in greater detail above with reference to FIG. 1, multiple conversation servers 130 may be hosted by different service providers, such as providers 116-A and 116-B respectively. In some embodiments, the providers are internet service providers (ISPs) providing a conversation service. Alternately, some or all of the providers may be dedicated conversation providers. When the system 100 includes multiple conversation servers 130, the conversation servers 130 may be coupled together directly, or by a local area network (LAN), or via communication network 120,
Attention is now directed towards FIGS. 17A-17G, which illustrate exemplary user interfaces for generating a participant-specific markup of a portion 7004 of a conversation 7002 in accordance with the method described below with reference to FIGS. 18A-18H. It should be understood that the exemplary user interfaces described herein are merely illustrative and are not intended to limit the scope of the disclosed embodiments in any way.
In FIG. 17A at a prior time (e.g., 2:45 pm), a hosted conversation 7002 is displayed at a first client to a first participant (e.g., Pat), displayed at a second client to a second participant (e.g., Joe), and displayed at a third client to a third participant (Sue). At this point in time the portion (e.g., 7004-a-1 for Pat, 7004-b-1 for Joe and 7004-c-1 for Sue) of the conversation (e.g., 7002-a-1, 7002-b-1, 7002-c-1) is displayed in the same way to each of the participants. Thus, each participant sees the “to do” list with a single item “pay phone bill” However, in FIG. 17A, Sue closes the conversation and thus the portion of the conversation 7004-c-1 ceases to be viewed by Sue. Each of the portions of the conversation has the same timestamp (e.g., 7006-a-1, 7006-b-1, and 7006-c-1) indicating that the portion of the conversation was last edited at 2:45 pm.
In FIG. 17B, at a first time (e.g., 3:00 pm), while Pat and Joe are currently viewing the portion of the conversation, and Sue is not viewing the portion of the conversation, Pat edits the portion (e.g., 7004-a-2 and 7004-b-2) of the conversation (e.g., 7002-a-2 and 7002-b-2) to add two items to the “to do” list: “get milk” and “feed dog.” When Pat edits the portion of the conversation, the timestamp (e.g., 7006-a-2 and 7006-b-2) is updated to reflect the most recent edit time (e.g., 3:00 pm). Pat is also presented with the options to enter the edits to the portion of the conversation (e.g., by selecting the “Done” button 7008) or to delete the portion of the conversation (e.g., by selecting the “Delete” button 7010). In some embodiments, while Pat is editing the portion of the conversation, a caret 7012 is displayed to Joe that indicates the location of at which Pat is currently making edits to the portion of the conversation. However, in FIG. 17B, Pat closes the conversation and thus the portion 7004-a-2 of the conversation ceases to be viewed by Pat.
In FIG. 17C, at an intermediate time (e.g., 3:15 pm), while Joe is viewing the portion of the conversation and Pat and Sue are not viewing the portion of the conversation, Joe edits the portion (e.g., 7004-b-3) of the conversation (e.g., 7002-b-3) to delete “pay phone bill” and add “& cookies” and “mow lawn” to the “to do” list. When Joe edits the portion of the conversation, the timestamp (e.g., 7006-b-3) is updated to reflect the most recent edit time (e.g., 3:15 pm). Joe is presented with the options to enter the edits to the portion of the conversation (e.g., by selecting the “Done” button 7008) or to delete the portion of the conversation (e.g., by selecting the “Delete” button 7010). When Joe selects the “Done” button 7008, the edits are entered.
In FIG. 17D, at another intermediate time (e.g., 3:30 pm), while Joe is viewing the portion of the conversation and Pat and Sue are not viewing the portion of the conversation, Joe does not further edit the portion (e.g., 7004-b-4) of the conversation (e.g., 7002-b-4), and thus the timestamp (e.g., 7006-b-4) is not updated. However, Joe does add a new portion (e.g., 7014-b-4) to the conversation (e.g., 7002-b-4), which has a timestamp reflecting the last edit time (e.g., 3:30 pm) of the new portion of the conversation. Joe is also presented with the options to enter the edits to the new portion of the conversation (e.g., by selecting the “Done” button 7008) or to delete the portion of the conversation (e.g., by selecting the “Delete” button 7010). When Joe selects the “Done” button 7008, the edits are entered.
In FIG. 17E at a third time (e.g., 3:45 pm), the hosted conversation is displayed to all three participants (e.g., Pat, Joe and Sue). At this point in time the portion (e.g., 7004-a-5 for Pat, 7004-b-5 for Joe and 7004-c-5 for Sue) of the conversation (e.g., 7002-a-5, 7002-b-5, 7002-c-5) is displayed with a different markup for each of the participants. The markup for each respective participant is based on the state of the displayed portion of the conversation when that portion of the conversation was last viewed by the respective participant. Even though the current state of the conversation is the same for all three participants, each participant sees a different markup of the conversation. In particular, the current state of the portion of the conversation is the same for each of the participants (e.g., if all of the changes were accepted in all of the markups, each participant would see a “to do” list with three items “get milk & cookies,” “feed dog” and “mow lawn” and the portion of the conversation has the same timestamp (e.g., 7006-a-5, 7006-b-5, and 7006-c-5) for each participant indicating that the portion of the conversation was last edited at 3:45 pm. However, because each of the participants last viewed the portion of the conversation at a different time (e.g., when the portion of the conversation was in a different state), the markups are different for each of the participants. In particular: Joe, who has viewed the portion of the conversation continuously, has no markup to the portion of the conversation, while Pat, who was not viewing the portion of the conversation while Joe edited the portion of the conversation sees a markup that includes Joe's edits, and Sue, who was not viewing the portion of the conversation while both Pat and Joe edited the portion of the conversation sees a markup that includes both Pat's edits and Joe's edits. Additionally, the new portion of the conversation (e.g., 7014-a-5, 7014-b-5 and 7014-c-5) is displayed to each of the participants and has a timestamp (e.g., 7016-a-5, 7016-b-5 and 7016-c-5) indicating that it was added at 3:30 pm. However, the new portion of the conversation is shown as visually highlighted (e.g., with a thicker border) to the users (e.g., Pat and Sue) who had not previously viewed the new portion (e.g., 7014-a-5 and 7014-c-5) to indicate that the new portion of the conversation was added after the last time that they viewed the conversation.
In FIG. 17F, at a later time (e.g., 3:55 pm), all of the participants are currently viewing the portion of the conversation, and all of the participants have viewed the portion (e.g., 7004-a-6, 7004-b-6 and 7004-c-6) of the conversation (7002-a-6, 7002-b-6 and 7002-c-6) and the new portion (e.g., 7014-a-6, 7014-b-6 and 7014-c-6) of the conversation and thus the previous markup (e.g., as illustrated in FIG. 17E) has ceased to be displayed. While all three participants are viewing the portion (e.g., 7004-a-6, 7004-b-6 and 7004-c-6), Joe edits the portion of the conversation to delete “feed dog,” and while he is editing the conversation, his edits are concurrently displayed to the other participants (e.g., Pat and Sue). When Joe edits the portion of the conversation, the timestamp (e.g., 7006-a-6, 7006-b-6 and 7006-c-6) is updated to reflect the most recent edit time (e.g., 3:55 pm). Joe is also presented with the options to enter the edits to the portion of the conversation (e.g., by selecting the “Done” button 7008) or to delete the portion of the conversation (e.g., by selecting the “Delete” button 7010). In some embodiments, while Joe is editing the portion of the conversation, a caret 7012 is displayed to Pat and Sue that indicates a location of the current edits that Joe is making to the portion of the conversation. In some embodiments, the clients for the other participants (e.g., Pat and Sue) each display a markup of the changes made by Joe (e.g., the strike through text) in FIG. 17F. Additionally, the new portion of the conversation is not edited and thus the timestamp (e.g., 7016-a-6, 7016-b-6 and 7016-c-6) for the new portion of the conversation remains the same.
FIG. 17G illustrates a replay sequence of edits that is displayed to a participant in response to receiving a request to display a replay sequence of edits. Displaying the replay sequence of edits includes sequentially displaying a plurality of states of the conversation 7002 or a plurality of states of a portion of the conversation. For example in FIG. 17G, a prior state of the conversation 7002-1 is displayed, followed by a first state of the conversation 7002-2, followed by a first intermediate state of the conversation 7002-3, followed by a second intermediate state of the conversation 7002-4 and finally followed by a second state of the conversation 7002-5. In some embodiments, each state is accompanied by a short description of the changes that were made to the conversation or the portion of the conversation to transition the conversation to the displayed state. In some embodiments a markup is displayed that shows the changes between the currently displayed state and the state that was previously displayed in the replay sequence of edits.
Attention is now directed towards FIGS. 18A-18H, which illustrate an overview of a method for displaying a participant-specific markup of a portion of a conversation in accordance with some embodiments. In some embodiments, conversation activity occurs, as described in greater detail above with reference to FIGS. 5A-5E including contributions from multiple participants. This editing by multiple participants may make it difficult for a participant to identify changes to the portion of the conversation. To address this problem, the conversation server 130 stores information (e.g., edit information stored in conversation log records 385 from the conversation log 324, as described above with reference to FIGS. 3A-3C) that enables clients associated with respective participants to display a participant-specific markup. In other words, for the portion of the conversation (e.g., a content contribution), a read/unread state (e.g. 374 in FIG. 3B) for the participant for the portion of the conversation includes a timestamp corresponding to the time at which the participant last viewed the respective conversation portion is stored, so that the changes in the portion of the conversation that occurred after the time of that timestamp can be identified and displayed to the participant, as described in greater detail below.
For the purposes of better illustrating the disclosed embodiments an illustrative example will be used throughout, where three participants (a first participant, Pat; a second participant, Joe; and a third participant, Sue) are participants on a conversation (e.g., 7002 in FIGS. 17A-17G) that includes a portion (e.g., content contribution 7004 in FIGS. 17A-17G) with a to do list. Each of these participants is associated with a respective conversation client 110 (e.g., Pat is associated with a first client, Joe is associated with a second client and Sue is associated with a third client). It should be understood that this example is merely for illustrative purposes and should not be taken as limiting the disclosed embodiments in any way.
The conversation server 130 sends (1802) information to a first client enabling the first client to display at least a portion (e.g., 7004-b-1 in FIG. 17B) of a conversation (e.g., 7002-b-1 in FIG. 17B) to a first participant (e.g., Pat in FIG. 17B). The conversation has a plurality of participants (e.g., Pat, Joe and Sue) including the first participant (e.g., Pat) and a second participant (e.g., Joe). In some embodiments, the conversation is a hosted conversation that is hosted on the conversation server 130. In some embodiments, the first client displays (1803) the portion of the conversation to the first participant. For example, in FIG. 17B the portion of the conversation 7004-b-1 is displayed to Pat at the first client.
In some embodiments, the first client sends (1805) notification of a first state of the portion of the conversation that was viewed by the first participant. The conversation server 130 receives (1807) a notification that is indicative of the first state of the portion of the conversation as the portion of the conversation that was viewed by the first participant at a first time (e.g., at 3:00 pm as illustrated in FIG. 17B). In some embodiments, the first state is (1809) a state of the content of the conversation when the portion of the conversation was last displayed to the user. In some embodiments, the notification includes a timestamp associated with the time that the portion of the conversation was viewed by the first participant. In some embodiments the notification identifies the content of the state of the conversation at the time that the portion of the conversation was last viewed by the first participant. For example, in FIG. 17B, the first state of the portion of the conversation is the state of the portion of the conversation 7004-b-1, and the conversation server 130 receives a notification that the portion of the conversation was viewed by Pat at 3:00 pm on May 20, 2010.
In some embodiments, the conversation server 130 stores (1810) information indicative of the first state of the conversation. In some embodiments the conversation server 130 or the first client stores a last viewed timestamp (e.g., a timestamp associated with a read/unread state 374 in FIG. 3B of the content contribution) and a timestamped log (e.g., conversation log 324 in FIGS. 3A and 3C) of all edits made to the conversation. In some other embodiments, the conversation server 130 or the first client stores a copy of the conversation in the first state, or information sufficient to regenerate the conversation in the first state, so that the first state of the portion of the conversation can be compared against a current state of the portion of the conversation when the first participant views the portion of the conversation again.
Eventually, at the first client, the portion of the conversation ceases (1812) to be viewed by the first participant. In some embodiments, the first client sends (1814) notification that the portion of the conversation has ceased to be viewed by the first participant. The conversation server 130 receives (1816) a notification that the portion of the conversation has ceased to be viewed by the first participant. In some embodiments, the received notification indicates that the portion of the message has ceased be viewed by the first participant and the first state of the message. In other words, in some embodiments, the first state for the conversation is fixed when the first participant ceases to view the portion of the conversation, so that when the first participant ceases to view the portion of the conversation, the first client sends a timestamp to the conversation server 130 along with an indication that the first participant last viewed the portion of the conversation at the time indicated by the timestamp (e.g., at the first time). In some other embodiments, the first state for the conversation is fixed (e.g., by a participant entering edits as described in greater detail below) at a time prior to when the first participant ceases to view the portion of the conversation and the conversation server 130 receives a first notification that the first participant has viewed the portion of the conversation at the first state (e.g., at the first time) and a second notification that the first participant has ceased to view the conversation (e.g., at a later time).
In some embodiments, the notification that the conversation has ceased to be viewed by the first participant includes (1818) a notification that a focus state of the portion of the conversation for the first participant has changed (e.g., a notification that the participant changed focus, or has requested to change the focus, from a first portion of the conversation to a second portion of the conversation). It should be understood that, in accordance with some embodiments, for a portion of the conversation that is currently in focus, the focus state for the portion of the conversation changes when the conversation is closed. For example, in FIG. 17B, the first client detects a request from Pat to cease to view the conversation 7002, and the first client ceases to display the conversation 7002, as illustrated in FIG. 17C where the conversation is no longer displayed to Pat. Similarly, the focus state for a respect participant changes when the respect participant changes the conversation portion selected for viewing (or editing or replying). Additionally, it should be understood that when the conversation ceases to be displayed to Pat, the focus state of the portion 7004 of the conversation for Pat changes from “focused” to “not focused.” While the preceding example has been given with reference to ceasing to display the conversation entirely, it should be understood that, in some embodiments, the notification that the portion of the conversation has ceased to be viewed by the first participant includes (1819) a notification that the portion of the conversation has ceased to be displayed within a viewing pane (e.g., by scrolling the conversation out of the viewing pane). As noted above, a respective portion of the conversation also ceases to be viewed by a respective participant when that participant requests to view another portion of the conversation (e.g., by moving focus from a first portion to a second portion within the conversation) or opens a different conversation, and a corresponding notification is sent (1814) by the client and received by the conversation server (1816), as discussed above.
In some embodiments, the conversation server 130 also sends (1821), to a second client, information enabling the second client to display at least the portion of the conversation to a second participant. The second client receives (1822) instructions to display the portion of the conversation to a second participant. For example, in FIG. 17B, the conversation 7002 is also displayed to Joe. In particular, the first participant (e.g., Pat) and the second participant (e.g., Joe) see the same conversation, because they are both viewing the hosted conversation at the same time. In some embodiments, when the first participant edits a portion of the conversation while the same portion of the conversation is being viewed by the second participant, the second participant sees the edits to the portion of the conversation. The second participant sees the edits as they are being made, or alternatively, sees the edits after the first participant indicates that his edits are complete (e.g., by selecting a “done” command button or the like, as shown in FIG. 17B). For example, in FIG. 17B, Joe sees that Pat has added “get milk” and “feed dog” to the “to do” list. Additionally, Joe sees a caret 7012 indicating that Pat is the participant that is editing the portion of the conversation.
At least operations 1826-1832 are performed after (1824) receiving the notification that the portion of the conversation has ceased to be viewed by the first participant (e.g., after the conversation 7002 has ceased to be displayed at the first client, as illustrated in FIG. 17C).
In some embodiments, the second client sends (1826) a request (or a sequence of requests, for example, one request per keystroke, mouse click, touch event or other unit of information) to make edits to the portion of the conversation. The conversation server 130 receives (1828) the request from the second participant (e.g., via the second client) to make edits to the portion of the conversation. In response to receiving the request (or the sequence of requests) from the second participant, at a second time (e.g., 3:15 pm, as illustrated in FIG. 17C) that is after the first time, the conversation server 130 updates (1830) the portion of the conversation to a second state. For example, in FIG. 17C, after Pat has ceased to view the conversation, Joe deletes “pay phone bill” adds “& cookies” and “mow lawn” to the “to do” list.
In some circumstances, after the first time (e.g., 3:00 pm, as illustrated in FIG. 17B) and before the third time (e.g., 3:45 pm, as illustrated in FIG. 17E): the conversation server 130 receives (1832) a plurality of requests from multiple participants other than the first participant to make a plurality of edits to the portion of the conversation. In some of these circumstances, updating the portion of the conversation to the second state of the content of the conversation includes incorporating the plurality of edits into the portion of the conversation. In other words, more than one participant could edit the portion of the conversation in between the time that the portion of the conversation ceases to be viewed by the first participant and the time that the first participant views the portion of the conversation again. Thus, the second state of the conversation could include edits from a single participant (e.g., Joe) or multiple participants (e.g., Joe and Sue). Additionally, in some embodiments, a markup of the portion of the conversation indicates the participants that submitted edits to the portion of the conversation, as described in greater detail below.
In some conversations, the second client sends (1834) a request to the conversation server 130 to add a new portion to the conversation. Subsequently, between the first time e.g., 3:00 pm, as illustrated in FIG. 17B) and the third time (e.g., 3:45 pm, as illustrated in FIG. 17E), the conversation server 130 receives (1836) a request from the second participant to add a new portion to the conversation. After receiving the request, the conversation server 130 sends (1838) the new portion of the conversation to the first client for display with an indication that the new portion was added to the conversation after the first time. For example, in FIG. 17D, Joe has added a new portion (e.g., 7014-b-4) to the conversation (e.g., 7002-b-4), and the new portion has a timestamp 7016-b-4 that indicates that the new portion was added after the first portion of the conversation ceased to be displayed to Pat (e.g., at 3:00 pm).
The first client displays (1840) the new portion with an indication that the new portion was added to the conversation after the first time. In some circumstances, the first client sends (1842) a request to the conversation server 130 for updated conversation data, and the conversation server 130 receives (1844) the request for updated conversation data. For example, in FIG. 17E, after the conversation has been redisplayed to the first participant (e.g., Pat), the new portion 7014-a-5 is displayed to Pat as part of the conversation, and is visually highlighted (e.g., by emphasizing the border of the new portion of the conversation) so as to indicate that it was added after the first time. In other words, the new portion 7014-a-5 of the conversation is highlighted so as to indicate that it was added after the last time that Pat viewed the earlier portion 7004-a-5 of the conversation (e.g., after 3:15 pm).
In response to the request for updated conversation data, at a third time (e.g., 3:45 pm, as illustrated in FIG. 17E) that is after the second time (e.g., 3:15 pm, as illustrated in FIG. 17C), the conversation server 130 (or a markup generator 743 within the conversation server 130) sends (1846) to the first client information (e.g., information such as conversation log records 385 in the conversation log 324 that correspond to the edits to the portion of the conversation) enabling the first client to display a markup of the portion of the conversation that is indicative of one or more edits that transition the portion of the conversation from the first state to the second state. The first client receives (1848) the information provided by the conversation server 130, after which the first client (or a markup generator 829 within the first client) generates a markup using the information provided by the conversation server 130, and displays (1850) the markup of the portion of the conversation to the first participant (e.g., the markup is displayed to Pat at the first client as illustrated in FIG. 17E). Optionally, the first client displays (1852) a last update timestamp proximate to the portion of the conversation, as described in greater detail below (e.g., the first client displays a timestamp 7006-a-5 in FIG. 17E).
Typically, the portion of the conversation is redisplayed in response to a request from the first participant to view the portion of the conversation. In other words, the first participant views the portion of the conversation in a first state, ceases to view the portion of the conversation, and when the portion of the conversation is viewed by the first participant again, the portion of the conversation includes a markup that indicates all of the changes that have been made to the portion of the conversation since the last time that the first participant last viewed the portion of the conversation. For example, in FIG. 17E, the portion of the conversation is viewed by Pat, and Pat sees all of the changes that have been made to the portion of the conversation since the last time that Pat viewed the portion of the conversation. In particular, the first client displays a markup that shows that “pay phone bill” has been deleted, and that “& cookies” and “mow lawn” have been added. In this example, the markup also shows that a new portion 7014-a-5 has been added to the conversation.
It should be noted that other participants may see different markups of the same portion of the conversation at the same time, depending on what version of the portion of the conversation was the last version viewed by the participant. For example, in FIG. 17E, Pat, Joe and Sue each see a different markup of the portion 7004 of the conversation. Pat sees a markup that shows all of the edits made to the conversation by Joe since 3:00 pm (e.g., as illustrated by the portion 7004-a-5 that is displayed by the first client in FIG. 17E). Joe sees the conversation without any markup, because he has not ceased to view the portion of the conversation (e.g., as illustrated by the portion 7004-b-5 that is displayed by the second client in FIG. 17E). Pat sees a markup that shows all of the edits made to the conversation by Joe and Pat since 2:45 pm (e.g., as illustrated by the portion 7004-c-5 that is displayed by the third client in FIG. 17E), as described in greater detail below with reference to operations 1888-1899.
Typically, the first state is (1854) a state of the portion of the conversation at a time, prior to the first time, that a focus state of the portion of the conversation was last changed, and the second state is a current state of the portion of the conversation. It should be understood that, in some embodiments, a focus state of the portion of the conversation is changed when any of the following operations are performed: the state of the portion of the conversation is changed from “focused” to “not focused” or from “not focused” to “focused.” Additionally, it should be understood that the focus state can be changed either by a participant (e.g., by selecting a “next portion” user interface object, or by navigating to a different portion of the conversation or by navigating away from the conversation) or by the conversation server 130 (e.g., by automatically selecting the first portion of the conversation that has not been viewed by the participant as a focused portion of the conversation when the participant opens a conversation). In other words, in some embodiments, the first state is a state of the conversation at the time that the first participant or the system moved the focus to or from the portion of the conversation (e.g., the participant selected the portion of the conversation to view or the participant was viewing the portion of the conversation and selected another portion of the conversation to view), and the second state of the portion of the conversation incorporates the most recent edits to the portion of the conversation.
In some embodiments, the focus state is participant-specific (e.g., each participant has a focus state for each conversation). For example, a first participant can have a first portion of a conversation in focus while a second participant has a second portion of the conversation in focus. Additionally, while each participant typically can only have a single portion in the “focused” state at a time, it should be understood that in some embodiments respective participants may have more than one portion that is in the “focused” state at a time (e.g., all of the portions of a conversation could be “focused” or the participant could select multiple portions of multiple conversations to be “focused” simultaneously). Finally, it should be understood that a participant can fail to have any portions of conversations in the “focused” state (i.e., all portions of the conversations are in the “not focused” state). For example, when the participant does not currently have any conversations open, none of the portions of the conversations would be “focused.” Consequently, in some of these embodiments, when a participant closes a conversation, the focus state of any currently focused portion of the conversation is changed from “focused” to “not focused.”
Thus, the markup shows the participant all of the edits to the portion of the conversation that occurred after the last time the user interacted with the portion of the conversation either directly (e.g., changing the focus state of a portion of the conversation) or indirectly (e.g., by performing an operation that causes the focus state of the portion of the conversation to be changed by the conversation client or the conversation server 130).
In the examples discussed above, the first state is (1855) a state of the portion of the conversation at time, prior to the first time, that a participant last indicated that edits had been entered, and the second state is a current state of the portion of the conversation. It should be understood that a participant can enter edits to a conversation in many different ways. For example, a participant can click on a “Done” button after entering edits to a portion of a conversation. For example, in FIG. 17B when Pat selects the “Done” button 7008 after editing the portion 7004-a-2 of the conversation, the state of the portion of the conversation is identified as the first state. As another example, when a portion of a conversation is being collaboratively edited by more than one participant, any of the participants can click on a “Done” button to enter the current state of the portion of the conversation as the first state, even if another participant is still actively editing the portion of the conversation. For example, even if Joe was simultaneously editing the portion 7004-b-2 of the conversation in FIG. 17B, when Pat selected the “Done” button 7008 and ceased to view the conversation, the state of the portion of the conversation when Pat selected the “Done” button would be identified as the first state. In some embodiments, the indication that edits have been entered is received from the first participant. In some embodiments, the indication that edits have been entered is received from any participant of the plurality of participants (e.g., the second participant, the third participant, etc.). In other words, in some embodiments, the selection of the “Done” button by any of the participants is considered to be an indication that edits have been entered, without regard to the activities of the other participants. Consequently, in some embodiments, edits that have been made by a first participant are entered when a second participant provides an indication that edits have been entered (e.g., selects a “Done” button) even if the indication is received while the first participant is in the middle of making a series of edits to the portion of the conversation.
In some embodiments, the conversation server 130 sends (1856), to the first client, information enabling the first client to display a last update timestamp proximate to the portion of the conversation. Optionally, at the first time, the last update timestamp is indicative of a time of last edits, at or before the first time, to the portion of the conversation; and at the third time, the last update timestamp is indicative of the second time. In other words, the portion 7004 of the conversation has a timestamp 7006 that indicates a time at which the portion of the conversation was last updated, as illustrated in FIGS. 17A-17G. Thus, in FIG. 17B, the portion (e.g., 7004-a-2, 7004-b-2 or 7004-c-2) of the conversation was last updated at 3:00 pm, and the last update timestamp (e.g., 7006-a-2, 7006-b-2 or 7006-c-2) indicates that the conversation was last updated at 3:00 pm. Likewise, in FIG. 17E, when the portion (e.g., 7004-a-5, 7004-b-5 or 7004-c-5) of the conversation was last updated at 3:15 pm, the last update timestamp (e.g., 7006-a-5, 7006-b-5 or 7006-c-5) indicates that the portion (e.g., 7004-a-5, 7004-b-5 or 7004-c-5) of the conversation was last updated at 3:15 pm. Additionally, it should be understood that, in some embodiments, this timestamp is identical for all participants that are concurrently viewing a conversation (e.g., for each participant, the last update timestamp for a portion of the conversation is the same, because the last update timestamp indicates the last time that the conversation was updated by any participant).
In some embodiments, for a respective edit to the portion of the conversation, the markup identifies (1858) the participant that made the respective edit. In other words, in some embodiments, the conversation server 130 maintains information indicating the participant that made each of the edits to the portion of the conversation, and the edits are visually associated with respective participants when the markup is displayed to the first participant. As one example, the edits made by a respective participant are all displayed in a single color that is associated with (e.g., assigned to or selected by) the respective participant. As another example, individual edits made by a respective participant are visually associated with an identifier for the respective participant (e.g., by displaying a reference symbol associated with the respective participant proximate to the edits made by the respective participant).
In some embodiments, the markup only includes (1860) edits made to the conversation after the first time (e.g., 3:00 pm, as illustrated in FIG. 17B). In other words, any edits made to the portion of the conversation prior to the time that the first participant last viewed the portion of the conversation are considered to have been viewed by the first participant, and thus are not represented as edits in the markup. Consequently the markup only includes edits that have been made to the portion of the conversation after the portion of the conversation ceased to be viewed by the first participant.
In some embodiments, the markup includes (1862) actual edits made by the second participant. In other words, in some embodiments, each sequence of additions and/or deletions made by a participant is shown as part of the markup even if the additions and deletions are redundant (e.g., if text was added by one participant and subsequently deleted by another participant, the text is shown in the markup with a strikethrough). In some other embodiments, the markup only includes (1864) a subset of the edits made to the conversation after the first time. In other words, in some embodiments, the markup includes a set of edits that have been reduced to a set of “net changes.” For example, if a second participant added a paragraph, which was subsequently deleted by a third participant, that paragraph would not be included in the markup.
In some circumstances, the portion of the conversation has not been viewed (1866) by the first participant in between the first time (e.g., 3:00 pm, as illustrated in FIG. 17B) and the third time (e.g., 3:45 pm, as illustrated in FIG. 17E). The corresponding markup shows the edits to the portion of the conversation that have occurred between the current state of the portion of the conversation and the last viewed state of the portion of the conversation, and thus the markup shows only edits that were made to the conversation after the last time that the conversation was viewed by the first participant. Consequently, it should be understood that if, for example, Pat last viewed the portion of the conversation at 3:15 pm, then a different markup would be displayed to Pat at 3:45 pm than the markup shown in FIG. 17E, because Pat would have already viewed the changes made to the portion of the conversation by Joe at 3:15 pm. In particular, because there are no changes to the portion 7004 of the conversation between 3:15 pm and 3:45 pm, Pat would not see any changes to the portion 7004 of the conversation and would only see an indication that the new portion 7016 had been added to the conversation.
In some embodiments, the conversation server 130 stores (1868) representations of a plurality of intermediate states of the portion of the conversation between the first state and the second state. In some embodiments, the representations of the intermediate states of the portion of the conversation are stored in a conversation log (e.g., 324 in FIG. 3A) that includes conversation log records (e.g., 385 in FIG. 3C) which can be applied to an initial state of a conversation to recreate any of the intermediate states of the conversation or any portion of the conversation. When a request is sent (1870) from the first client to the conversation server 130 for information enabling display of a replay sequence of edits (e.g., as described in greater detail above with reference to FIGS. 9A-9B above), the conversation server 130 receives (1871) the request for information enabling the display of the replay sequence of edits, and in response to a request for information enabling display of a replay sequence of edits, the conversation server 130 sends (1872) information enabling the first client to sequentially display the plurality of intermediate states. It should be understood that in some embodiments this information is cached locally on the first client (e.g., in the conversation record 820, FIG. 8), and in some embodiments the information is sent from the conversation server 130 to the first client only after the information has been requested. Thus, in some embodiments, only the most recent state of the portion of the conversation (e.g., the third state) must be sent to the first client (e.g., because all of the intermediate states are already cached by the first client), while in other embodiments, at least one of the intermediate states must be sent to the first client by the conversation server 130 (e.g., because the first client does not cache all of the intermediate states for the conversation or portions of the conversation).
The first client receives the information sent by the information server and displays (1874) a replay of the sequence of edits. In some embodiments, the plurality of intermediate states are displayed in a time sequence order so as to show a replay of the edits to the portion of the conversation. In other words, the edits to the portion of the conversation are displayed in the order that they were made by participants, so that the first participant can readily view the order in which edits were made to the portion of the conversation. For example, as illustrated in FIG. 17G, when displaying a replay sequence of edits, the first client would display the conversation 7002 as it appeared at 2:45 pm (e.g., conversation 7002-1), as it appeared at 3:00 pm (e.g., conversation 7002-2), as it appeared at 3:15 pm (e.g., conversation 7002-3), as it appeared at 3:30 pm (e.g., conversation 7002-4), and finally as it appeared at 3:55 pm (e.g., conversation 7002-5). In some of these embodiments, each intermediate state corresponds (1876) to a state of the portion of the conversation at a time that the server receives an indication from a participant that edits to the portion of the conversation have been entered (e.g., by selecting a “Done” button after entering edits, as described in greater detail above).
Optional operations 1880-1884 are performed (1878) after redisplaying the portion of the conversation to the first participant, while the portion of the conversation is being viewed by the first participant. The second client initiates these operations by sending (1880) a request from the second participant to edit the portion of the conversation while the first participant is viewing the same portion of the conversation. The edits change the state of the portion of the conversation from the second state to the third state. The conversation server 130 receives (1881) the request from the second participant to edit the portion of the conversation from the second state to a third state. In response to receiving the request from the second participant, the conversation server 130 sends (1882), to the first client, information enabling the first client to display a markup of the portion of the conversation that is indicative of one or more edits that transition the portion of the conversation from the second state to the third state. The first client displays (1884) a markup of the portion of the conversation that is indicative of one or more edits that transition the portion of the conversation from the second state to the third state. For example in FIG. 17F, while the portion 7004-a-6 of the conversation is currently being viewed by Pat (e.g., the portion of the conversation is “focused” for Pat), Joe edits the portion 7004-b-6 of the conversation (e.g., by deleting “feed dog” from the “to do” list). In this example, the edits that are being made to the portion of the conversation are displayed in markup in real-time to on the first client. Thus, Pat sees the edits that Joe is making to the portion of the conversation as Joe makes the edits to the portion of the conversation. In some embodiments, as illustrated in 17F, the edits are shown as a markup, so that Pat can see the edits that Joe has made to the portion of the conversation. Additionally, it should be understood that, in some embodiments, other participants are also viewing the portion of the conversation (e.g., as illustrated in FIG. 17F the portion of the conversation is also “focused” for Sue), and these other participants also see the edits to the portion of the conversation in real time (e.g., in FIG. 17F Sue sees the same changes that are being shown to Pat).
In some embodiments, operations 1888-1895 are performed (1886) prior to the first time (e.g., prior to when the first participant ceased to view the portion of the conversation). The conversation server 130 sends (1888) to a third client information enabling the third client to display at least the portion of a conversation to a third participant. In some embodiments, the third client displays (1889) the portion of the conversation to the third participant. The third client sends (1890) a notification of a prior state of the portion of the conversation that was viewed by the third participant. For example, in FIG. 17A, at 2:45 pm, Sue views the portion 7004-c-1 of the conversation in a prior state (e.g., before Pat edits the portion of the conversation by adding “get milk” and “feed dog,” as illustrated in FIG. 17B).
The conversation server 130 receives (1895) a notification that is indicative of the prior state of the portion of the conversation that was viewed by a third participant (e.g., Sue in FIG. 17A) at a third client. Subsequently the portion of the conversation ceases to be viewed by the third participant and the third client sends (1894) a notification that the portion of the conversation has ceased to be viewed by the third participant. For example, in FIG. 17A, Sue closes the conversation, and thus ceases to view the portion of the conversation, as illustrated in FIG. 17B, where the portion of the conversation is no longer viewed by Sue. The conversation server 130 receives (1895) a notification that the portion of the conversation has ceased to be viewed by the third participant. In other words, the last viewed state of the portion of the conversation for the third participant (e.g., Sue) is a prior state (e.g., the state of portion 7004-c-1 in FIG. 17A) that is an earlier version of the conversation that the version represented by the first state (e.g., the state of portion 7004-a-2 in FIG. 17B) of the portion of the conversation. For example, as illustrated in FIGS. 17A-17C, at 2:45 pm, Sue ceases to view the portion of the conversation. Continuing this example, at 3:00 pm, after making additional edits to the portion of the conversation, Pat also ceases to view the portion of the conversation. However, the last viewed state of the conversation for Pat is different than the last viewed state of the conversation for Sue. In particular, the last viewed state of the portion of the conversation for Sue (e.g., 7004-c-1 in FIG. 17A) does not include Pat's edits, while the last viewed state of the portion of the conversation for Pat (e.g., 7004-a-2 in FIG. 17B) does include Pat's edits.
In some of these embodiments, at the third time (e.g., while the first participant, Pat, is viewing the markup of the portion of the conversation that transitions from the first state to the second state, at 3:45 pm), the conversation server 130 sends (1896), to the third client, information enabling the third client to display a markup of the portion of the conversation that is indicative of one or more edits that transition the portion of the conversation from the prior state (e.g., the state of the portion 7004 of the conversation in FIG. 17A) to the second state (e.g., the state of the portion 7004 of the conversation in FIG. 17E). In these embodiments, the edits that transition the portion of the conversation from the prior state to the second state include one or more edits that are distinct from the edits that transition the portion from the first state (e.g., the state of the portion 7004 of the conversation in FIG. 17B) to the second state (e.g., the state of the portion 7004 of the conversation in FIG. 17E). In some of these embodiments, the third client receives (1898) the information from the conversation server 130 and subsequently displays (1899) the markup of the portion of the conversation to the third participant. It should be understood that, in some embodiments, the portion of the conversation is redisplayed in response to a request from the third participant to view the portion of the conversation.
For example, in FIG. 17E, the first client displays a markup of the portion 7004-a-5 of the conversation that shows the differences between the last viewed state for Pat (e.g., the first state) and the current state (e.g., the second state) of the portion of the conversation, while the second client displays the current state of the portion 7004-b-5 of the conversation and the third client displays a markup of the portion 7004-c-5 of the conversation that shows the differences between the last viewed state for Sue (e.g., the prior state) and the current state (e.g., the second state) of the portion of the conversation. In particular, each of the three participants (e.g., Pat, Joe and Sue) is viewing the same conversation at the same time (e.g., 3:45 pm), however each of the three participants views their own participant-specific markup of the conversation (e.g., a markup that is specific to the state of the portion of the conversation that was last viewed by the participant). Showing such a participant-specific markup is particularly advantageous, because it allows each participant to quickly and accurately identify the edits that have been made to the conversation since the last time that the participant viewed the conversation.
The foregoing description, for purpose of explanation, has been described with reference to specific embodiments. However, the illustrative discussions above are not intended to be exhaustive or to limit the invention to the precise forms disclosed. Many modifications and variations are possible in view of the above teachings. The embodiments were chosen and described in order to best explain the principles of the invention and its practical applications, to thereby enable others skilled in the art to best utilize the invention and various embodiments with various modifications as are suited to the particular use contemplated.

Claims (9)

What is claimed is:
1. A computer-implemented method, comprising:
at a server system having one or more processors and memory storing one or more programs for execution by the one or more processors so as to perform the method:
sending, to a first client, information enabling the first client to display at least a portion of an online document to a first participant, wherein the online document is configured to be concurrently edited by a plurality of participants including the first participant and a second participant;
receiving a notification that is indicative of a first state of the portion of the online document as the portion of the online document was viewed by the first participant at a first time;
receiving a sequence of incremental edits to the online document from the second participant, wherein each incremental edit of the sequence of incremental edits corresponds to a respective keystroke of a sequence of keystrokes provided by the second participant; and
in response to receiving each respective incremental edit of the sequence of incremental edits from the second participant at different, respective subsequent times that are after the first time, sending each respective incremental edit of the sequence of incremental edits and an identifier of the second participant to the first client in real-time at the different respective subsequent times as the server system receives each respective incremental edit from the first client, enabling the first client in real-time to display the portion of the online document with markup indicating each respective incremental edit for each respective keystroke relative to the first state, wherein the markup includes edits made to the online document after the first time, wherein an indicator of the second participant as author of each respective incremental edit of the sequence of incremental edits is displayed as a caret with the markup and at a location of a current incremental edit from the second participant at a particular time subsequent to the first time.
2. The method of claim 1, wherein the first state is a state of content of the online document when the portion of the online document was last displayed to the first participant.
3. The method of claim 1, further comprising storing information indicative of the first state of the online document.
4. The method of claim 1, further comprising, prior to receiving a first incremental edit of the sequence of incremental edits from the second participant, receiving a notification that the portion of the online document has ceased to be viewed by the first participant;
wherein the notification that the portion of the online document has ceased to be viewed by the first participant includes a notification that one or more of the following events has occurred: a focus state of the portion of the online document for the first participant has changed and the portion of the online document has ceased to be displayed within a viewing pane.
5. The method of claim 1, further comprising, after the first time, receiving a plurality of successive incremental edits from multiple participants other than the first participant and sending each of the plurality of successive incremental edits and associated participant identifiers to the first client in real-time, enabling the first client in real-time to display the portion of the online document with successive markup indicating each successive incremental edit relative to the first state, wherein the successive markup includes author indicators for each successive incremental edit.
6. The method of claim 5, further comprising:
storing representations of the plurality of successive incremental edits; and
sending the stored representations to the first client, enabling the first client to sequentially display the plurality of successive incremental edits.
7. The method of claim 1,
wherein a first incremental edit of the sequence of incremental edits comprises adding a new portion to the online document, and wherein the markup indicates that the new portion was added to the online document after the first time.
8. A computer system, comprising:
one or more processors;
memory; and
one or more programs, wherein the one or more programs are stored in the memory and configured to be executed by the one or more processors, the one or more programs including instructions for:
sending, to a first client, information enabling the first client to display at least a portion of an online document to a first participant, wherein the online document is configured to be concurrently edited by a plurality of participants including the first participant and a second participant;
receiving a notification that is indicative of a first state of the portion of the online document as the portion of the online document was viewed by the first participant at a first time;
receiving sequence of incremental edits to the online document from the second participant, wherein each incremental edit of the sequence of incremental edits corresponds to a respective keystroke of a sequence of keystrokes provided by the second participant; and
in response to receiving each respective incremental edit of the sequence of incremental edits from the second participant at different, respective subsequent times that are after the first time, sending each respective incremental edit of the sequence of incremental edits and an identifier of the second participant to the first client in real time at the different respective subsequent times as the server system receives each respective incremental edit from the first client, enabling the first client in real-time to display a markup of the portion of the online document with markup indicating each respective incremental edit for each respective keystroke relative to the first state, wherein the markup includes edits made to the online document after the first time, wherein an indicator of the second participant as author of each respective incremental edit of the sequence of incremental edits is displayed as a caret with the markup and at a location of a current incremental edit from the second participant at a particular time subsequent to the first time.
9. A non-transitory computer readable storage medium and one or more computer programs embedded therein, the one or more computer programs comprising instructions, which when executed by a computer system, cause the computer system to:
send to a first client information enabling the first client to display at least a portion of an online document to a first participant, wherein the online document is configured to be concurrently edited by a plurality of participants including the first participant and a second participant;
receive a notification that is indicative of a first state of the portion of the online document as the portion of the online document was viewed by the first participant at a first time;
receive a sequence of incremental edits to the online document from the second participant, wherein each incremental edit of the sequence of incremental edits corresponds to a respective keystroke of a sequence of keystrokes provided by the second participant; and
in response to receiving each respective incremental edit of the sequence of incremental edits from the second participant at different, respective subsequent times that are after the first time, send each respective incremental edit of the sequence of incremental edits and an identifier of the second participant to the first client in real-time at the different respective subsequent times as the server system receives each respective incremental edit from the first client, information enabling the first client in real-time to display the portion of the online document with markup indicating each respective incremental edit for each respective keystroke relative to the first state, wherein the markup includes edits made to the online document after the first time, wherein an indicator of the second participant as author of each respective incremental edit of the sequence of incremental edits is displayed as a caret with the markup and at a location of a current incremental edit from the second participant at a particular time subsequent to the first time.
US13/094,788 2010-05-28 2011-04-26 Participant-specific markup Active 2031-05-23 US9380011B2 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
US13/094,788 US9380011B2 (en) 2010-05-28 2011-04-26 Participant-specific markup

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US34969110P 2010-05-28 2010-05-28
US13/094,788 US9380011B2 (en) 2010-05-28 2011-04-26 Participant-specific markup

Publications (2)

Publication Number Publication Date
US20150195221A1 US20150195221A1 (en) 2015-07-09
US9380011B2 true US9380011B2 (en) 2016-06-28

Family

ID=53496073

Family Applications (1)

Application Number Title Priority Date Filing Date
US13/094,788 Active 2031-05-23 US9380011B2 (en) 2010-05-28 2011-04-26 Participant-specific markup

Country Status (1)

Country Link
US (1) US9380011B2 (en)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140201125A1 (en) * 2013-01-16 2014-07-17 Shahram Moeinifar Conversation management systems
US20160357360A1 (en) * 2014-02-21 2016-12-08 Konami Digital Entertainment Co., Ltd. Message display terminal, message transmission server, and information storage medium
US10361987B2 (en) * 2016-05-21 2019-07-23 Facebook, Inc. Techniques to convert multi-party conversations to an editable document
US20210312513A1 (en) * 2013-05-24 2021-10-07 Instaply, Inc. Coordinating products and services for customers

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2156652B1 (en) * 2008-02-28 2012-04-25 Leeds, Richard Method and system for notification and telecommunications management
US10402485B2 (en) * 2011-05-06 2019-09-03 David H. Sitrick Systems and methodologies providing controlled collaboration among a plurality of users
US10210480B2 (en) * 2012-05-31 2019-02-19 Apple Inc. Avoiding a redundant display of a notification on multiple user devices
US9858052B2 (en) 2013-03-21 2018-01-02 Razer (Asia-Pacific) Pte. Ltd. Decentralized operating system
US9727544B2 (en) * 2013-05-06 2017-08-08 Dropbox, Inc. Animating edits to documents
KR20190044145A (en) * 2014-06-24 2019-04-29 구글 엘엘씨 Processing mutations for a remote database
KR101966268B1 (en) * 2014-11-04 2019-04-05 후아웨이 테크놀러지 컴퍼니 리미티드 Message display method, apparatus and device
US20170090718A1 (en) * 2015-09-25 2017-03-30 International Business Machines Corporation Linking selected messages in electronic message threads
US10284621B2 (en) * 2015-11-09 2019-05-07 International Business Machines Corporation Session management
JP2017169108A (en) * 2016-03-17 2017-09-21 株式会社リコー Information processing device, program thereof and conference support system
US20190087391A1 (en) * 2017-09-18 2019-03-21 Microsoft Technology Licensing, Llc Human-machine interface for collaborative summarization of group conversations
WO2020036189A1 (en) 2018-08-15 2020-02-20 日本電信電話株式会社 Reception history creation assistance device, reception history creation assistance method, data structure, program, display device, and editing assistance device
CN110019279B (en) * 2019-04-11 2020-12-04 北京字节跳动网络技术有限公司 Online document collaborative updating method, device, equipment and storage medium
US11450047B2 (en) * 2019-07-26 2022-09-20 PicsArt, Inc. Systems and methods for sharing image data edits
CN110752984B (en) * 2019-10-24 2021-10-15 北京字节跳动网络技术有限公司 Method and device for displaying online document, electronic equipment and storage medium
CN111262776B (en) * 2020-01-10 2021-05-07 北京字节跳动网络技术有限公司 Method, device, electronic equipment and computer readable medium for sending notification message

Citations (137)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5532715A (en) 1991-10-16 1996-07-02 International Business Machines Corporation Visually aging scroll bar
US5671428A (en) 1991-08-28 1997-09-23 Kabushiki Kaisha Toshiba Collaborative document processing system with version and comment management
US5712995A (en) 1995-09-20 1998-01-27 Galileo Frames, Inc. Non-overlapping tiling apparatus and method for multiple window displays
US5867678A (en) 1996-12-16 1999-02-02 International Business Machines Corporation Method and system for searching and retrieving specific types of objects contained within a compound document
US5900872A (en) 1995-05-05 1999-05-04 Apple Computer, Inc. Method and apparatus for controlling the tracking of movable control elements in a graphical user interface
US6006239A (en) 1996-03-15 1999-12-21 Microsoft Corporation Method and system for allowing multiple users to simultaneously edit a spreadsheet
US6181736B1 (en) 1997-03-25 2001-01-30 Nxi Communications, Inc. Network communication system
US6212548B1 (en) 1998-07-30 2001-04-03 At & T Corp System and method for multiple asynchronous text chat conversations
US20010013029A1 (en) 1998-09-18 2001-08-09 David L. Gilmour Method of constructing and displaying an entity profile constructed utilizing input from entities other than the owner
US20020145631A1 (en) 2001-04-05 2002-10-10 International Business Machines Corporation System and method for creating markers on scroll bars of a graphical user interface
US20020163545A1 (en) 2001-05-01 2002-11-07 Hii Samuel S. Method of previewing web page content while interacting with multiple web page controls
US20030101235A1 (en) * 2001-09-04 2003-05-29 Chenglin Zhang Browser-to-browser, dom-based, peer-to-peer communication with delta synchronization
US20030182450A1 (en) 2002-03-05 2003-09-25 Ong Herbert T. Generic Infrastructure for converting documents between formats with merge capabilities
US20030193524A1 (en) 1999-03-25 2003-10-16 International Business Machines Corporation Window scroll bar
US20040019701A1 (en) 2002-07-25 2004-01-29 International Business Machines Corporation Instant messaging blind join
US6693652B1 (en) 1999-09-28 2004-02-17 Ricoh Company, Ltd. System and method for automatic generation of visual representations and links in a hierarchical messaging system
US20040162877A1 (en) 2003-02-19 2004-08-19 Van Dok Cornelis K. User interface and content enhancements for real-time communication
US20040189712A1 (en) * 2003-03-27 2004-09-30 International Business Machines Corporation Method and apparatus for managing windows
US20040260974A1 (en) 2003-06-17 2004-12-23 Microsoft Corporation Method and system for undoing changes in a software configuration management system
US20050010871A1 (en) 2000-06-21 2005-01-13 Microsoft Corporation Single window navigation methods and systems
US20050021624A1 (en) 2003-05-16 2005-01-27 Michael Herf Networked chat and media sharing systems and methods
US20050052685A1 (en) 2003-05-16 2005-03-10 Michael Herf Methods and systems for image sharing over a network
US20050076068A1 (en) 2003-09-22 2005-04-07 Fowler Paul C. System and method of synchronizing data in multi-user computer network
US20050108402A1 (en) 2003-11-13 2005-05-19 International Business Machines Corporation System and method enabling future messaging directives based on past participation via a history monitor
US6915336B1 (en) 1998-06-05 2005-07-05 Instant Services.Com, Inc. Real time internet communication system
US20050149879A1 (en) 2000-01-04 2005-07-07 Apple Computer, Inc. Computer interface having a single window mode of operation
US20050166154A1 (en) 2004-01-22 2005-07-28 Wilson Richard M. Enhanced instant message status message area containing time/date stamped entries and editable by others
CN1701326A (en) 2003-08-07 2005-11-23 国际商业机器公司 Collaborative email
WO2005112374A1 (en) 2004-05-14 2005-11-24 Philips Intellectual Property & Standards Gmbh Method for transmitting messages from a sender to a recipient, a messaging system and message converting means
US20060026502A1 (en) 2004-07-28 2006-02-02 Koushik Dutta Document collaboration system
US20060053194A1 (en) 2004-09-03 2006-03-09 Schneider Ronald E Systems and methods for collaboration
US20060075044A1 (en) 2004-09-30 2006-04-06 Fox Kevin D System and method for electronic contact list-based search and display
US20060080432A1 (en) 2004-09-03 2006-04-13 Spataro Jared M Systems and methods for collaboration
US20060117247A1 (en) 2004-11-30 2006-06-01 Fite William R Web based data collaboration tool
US20060123353A1 (en) 2004-12-08 2006-06-08 Microsoft Corporation Method and system of taskbar button interfaces
US20060136821A1 (en) * 2004-12-20 2006-06-22 Microsoft Corporation Method and system for highlighting modified content in a shared document
US20060136511A1 (en) 2004-12-21 2006-06-22 Nextpage, Inc. Storage-and transport-independent collaborative document-management system
US20060161859A1 (en) 2005-01-18 2006-07-20 Microsoft Corporation Multi-application tabbing system
US20060161516A1 (en) 2005-01-14 2006-07-20 Microsoft Corporation Method and system for synchronizing multiple user revisions to a shared object
US20060176831A1 (en) 2005-02-07 2006-08-10 Greenberg Joel K Methods and apparatuses for selecting users to join a dynamic network conversation
US7111044B2 (en) 2002-07-17 2006-09-19 Fastmobile, Inc. Method and system for displaying group chat sessions on wireless mobile terminals
US20060268020A1 (en) 2005-05-25 2006-11-30 Samsung Electronics Co., Ltd. Scrolling method and apparatus using plurality of blocks into which items are classified
US20060277210A1 (en) 2005-06-06 2006-12-07 Microsoft Corporation Keyword-driven assistance
US7188140B1 (en) 2002-03-13 2007-03-06 At&T Corp. System and method for providing enhanced persistent communications
US7188315B2 (en) 2002-12-02 2007-03-06 Tatung Co., Ltd. Method of establishing a customized webpage desktop
US7222156B2 (en) 2001-01-25 2007-05-22 Microsoft Corporation Integrating collaborative messaging into an electronic mail program
CN1971551A (en) 2005-11-24 2007-05-30 国际商业机器公司 Methods, apparatus for achieving text summarization
US20070124737A1 (en) 2005-11-30 2007-05-31 Ava Mobile, Inc. System, method, and computer program product for concurrent collaboration of media
US20070124387A1 (en) 2005-11-22 2007-05-31 Yahoo! Inc. Previous communication updating in instant messaging
US20070136662A1 (en) 2003-12-23 2007-06-14 Onedoc Limited Editable information management system and method
US20070136270A1 (en) 2005-07-27 2007-06-14 John Harney System and method for providing profile matching with an unstructured document
US7233951B1 (en) 2004-02-18 2007-06-19 Microsoft Corporation Spreadsheet grid-like control for a web-based collaboration system
US20070198648A1 (en) 2006-02-23 2007-08-23 International Business Machines, Corporation System and method for displaying IM session history as time-based calendar events
US20070203886A1 (en) 2002-06-18 2007-08-30 Epstein Kevin A Method and apparatus for accelerating and improving access to network files
US20070214121A1 (en) 2006-03-09 2007-09-13 Customerforce.Com Ranking search results presented to on-line users as a function of perspectives of relationships trusted by the users
US7272641B2 (en) 2001-07-03 2007-09-18 Canon Kabushiki Kaisha Image information managing system
US20070233811A1 (en) 2006-03-31 2007-10-04 Jonathan Rochelle Collaborative online spreadsheet application
US20070250506A1 (en) 2006-04-21 2007-10-25 Microsoft Corporation Tracking and editing a resource in a real-time collaborative session
US20070271340A1 (en) 2006-05-16 2007-11-22 Goodman Brian D Context Enhanced Messaging and Collaboration System
US20070294428A1 (en) 2006-06-19 2007-12-20 Ido Guy Method and System for Email Messaging
US20080037726A1 (en) 2006-07-21 2008-02-14 Rose Yao Method and System for Integrating Voicemail and Electronic Messaging
US20080066106A1 (en) 2006-07-31 2008-03-13 Guideworks, Llc Systems and methods for providing media guidance planners
CN101193070A (en) 2006-12-13 2008-06-04 腾讯科技(深圳)有限公司 Instant communication system, instant communication client and instant communication method
US20080147695A1 (en) 2006-12-15 2008-06-19 Masek William J A scalable method and system for providing real time indications of currently open documents
US20080172607A1 (en) 2007-01-15 2008-07-17 Microsoft Corporation Selective Undo of Editing Operations Performed on Data Objects
US20080178076A1 (en) 2007-01-18 2008-07-24 Barry Alan Kritt Method and apparatus for spellchecking electronic documents
US20080184157A1 (en) 2007-01-30 2008-07-31 Oracle International Corp. Enterprise web browser extension
US20080215588A1 (en) 2007-03-02 2008-09-04 Toshiba Europe Gmbh Electronic object sharing system
US20080250114A1 (en) 2005-10-14 2008-10-09 International Business Machines Corporation Mitigating address book weaknesses that permit the sending of e-mail to wrong addresses
US20080250329A1 (en) 2007-04-05 2008-10-09 Mark Jeffrey Stefik Method and system for the collaborative analysis of information
US20080301228A1 (en) * 2007-05-31 2008-12-04 Flavin Robert A Shared state manager and system and method for collaboration
US20090006936A1 (en) 2007-06-29 2009-01-01 Microsoft Corporation Collaborative document authoring
US20090037409A1 (en) 2007-08-03 2009-02-05 Oracle International Corporation Method and system for information retrieval
US20090043848A1 (en) 2007-08-11 2009-02-12 Alexander Kordun Method and system for providing collaborative moderation and correction of message history in an instant mesaging session
US20090041217A1 (en) 2007-05-16 2009-02-12 Unison Technologies Llc Systems and methods for providing unified collaboration systems with combined communication log
US20090055483A1 (en) 2007-08-20 2009-02-26 Rooma Madan Enhanced Collaboration in Instant Messaging
US20090070301A1 (en) 2007-08-28 2009-03-12 Lexisnexis Group Document search tool
US20090070687A1 (en) 2007-09-12 2009-03-12 Richard James Mazzaferri Methods and Systems for Providing, by a Remote Machine, Access to a Desk Band Associated with a Resource Executing on a Local Machine
US20090073888A1 (en) 2007-09-13 2009-03-19 Microsoft Coporation Determining quality of communication
US20090112937A1 (en) 2007-10-26 2009-04-30 Microsoft Corporation Spreadsheet collaboration between rich and browser clients
US20090138828A1 (en) 2005-10-11 2009-05-28 Aol Llc Ordering of conversations based on monitored recipient user interaction with corresponding electronic messages
US20090150947A1 (en) 2007-10-05 2009-06-11 Soderstrom Robert W Online search, storage, manipulation, and delivery of video content
US20090157811A1 (en) 2007-12-14 2009-06-18 Microsoft Corporation Collaborative Authoring Modes
US20090168760A1 (en) 2007-10-19 2009-07-02 Rebelvox, Llc Method and system for real-time synchronization across a distributed services communication network
US20090177744A1 (en) 2008-01-04 2009-07-09 Yahoo! Inc. Identifying and employing social network relationships
US20090183107A1 (en) 2008-01-16 2009-07-16 Microsoft Corporation Window minimization trigger
US7568151B2 (en) * 2002-06-27 2009-07-28 Microsoft Corporation Notification of activity around documents
US20090192845A1 (en) 2008-01-30 2009-07-30 Microsoft Corporation Integrated real time collaboration experiences with online workspace
US20090199127A1 (en) 2008-01-31 2009-08-06 Microsoft Corporation Previewing target display areas
US20090199274A1 (en) 2008-02-01 2009-08-06 Matthew Frazier method and system for collaboration during an event
US20090228555A1 (en) 2008-03-08 2009-09-10 International Business Machines Corporation Automated contact list determination based on collaboration history
US20090235181A1 (en) 2008-03-14 2009-09-17 Microsoft Corporation Web-based multiuser collaboration
US20090234876A1 (en) 2008-03-14 2009-09-17 Timothy Schigel Systems and methods for content sharing
US20090248497A1 (en) 2008-04-01 2009-10-01 Certona Corporation System and method for quantifying and detecting non-normative behavior
US20090271806A1 (en) 2008-04-28 2009-10-29 Microsoft Corporation Techniques to modify a document using a latent transfer surface
US20090271696A1 (en) 2008-04-28 2009-10-29 Microsoft Corporation Conflict Resolution
US20090276471A1 (en) 2008-05-05 2009-11-05 Microsoft Corporation Automatically Capturing and Maintaining Versions of Documents
US20090275412A1 (en) 2008-05-05 2009-11-05 Microsoft Corporation Multiple-player collaborative content editing
US20090300520A1 (en) * 2008-05-30 2009-12-03 Microsoft Corporation Techniques to manage recordings for multimedia conference events
US20090307345A1 (en) 2008-06-06 2009-12-10 International Business Machines Corporation Automated digital media content filtration based on relationship monitoring
US20090313331A1 (en) 2008-06-13 2009-12-17 Microsoft Corporation Merging versions of documents using multiple masters
US20090319910A1 (en) 2008-06-22 2009-12-24 Microsoft Corporation Automatic content and author emphasis for shared data
US20090327448A1 (en) 2008-06-27 2009-12-31 Microsoft Corporation Peer-to-peer synchronous content selection
US20100011373A1 (en) 2008-07-08 2010-01-14 Nortel Networks Limited Shared Persistent Communication Thread
US20100017478A1 (en) 2008-07-16 2010-01-21 International Business Machines Corporation Dynamic grouping of email recipients
US20100017194A1 (en) 2008-07-17 2010-01-21 Mette Hammer System and method for suggesting recipients in electronic messages
US20100023557A1 (en) 2008-07-28 2010-01-28 Novell, Inc. System and method to extend a file manager user interface
US20100107115A1 (en) 2008-10-27 2010-04-29 Microsoft Corporation Child window surfacing and management
US20100125791A1 (en) 2008-11-14 2010-05-20 Rebelvox, Llc User interface for a telecommunication and multimedia management system and method
US7734589B1 (en) 2005-09-16 2010-06-08 Qurio Holdings, Inc. System and method for optimizing data uploading in a network based media sharing system
US20100153106A1 (en) 2008-12-15 2010-06-17 Verizon Data Services Llc Conversation mapping
US20100169269A1 (en) 2008-12-30 2010-07-01 Karthik Chandrasekaran Systems and methods for providing collaborative editing
US20100174783A1 (en) 2007-10-12 2010-07-08 Rony Zarom System and method for coordinating simultaneous edits of shared digital data
US20100180218A1 (en) 2009-01-15 2010-07-15 International Business Machines Corporation Editing metadata in a social network
US7770130B1 (en) 2002-02-07 2010-08-03 Viktor Kaptelinin Non-distracting temporary visual clues for scrolling
US7774703B2 (en) 2006-02-09 2010-08-10 Microsoft Corporation Virtual shadow awareness for multi-user editors
US20100205537A1 (en) 2006-06-29 2010-08-12 Nextpat Limited Method and apparatus to share high quality images in a teleconference
US20100217808A1 (en) 2009-02-24 2010-08-26 Research In Motion Limited System and method for switching between conversations in instant messaging applications
US20100223345A1 (en) 2009-03-02 2010-09-02 Microsoft Corporation Communications application having conversation and meeting environments
US20100223261A1 (en) 2005-09-27 2010-09-02 Devajyoti Sarkar System for Communication and Collaboration
US20100235354A1 (en) 2009-03-12 2010-09-16 International Business Machines Corporation Collaborative search engine system
US20100235216A1 (en) 2009-03-16 2010-09-16 Microsoft Corporation Integration of pre-meeting and post-meeting experience into a meeting lifecycle
US20100306669A1 (en) 2005-11-30 2010-12-02 Roberto Della Pasqua S.R.L. Instant messaging service with minimized user interface
US20100306185A1 (en) 2009-06-02 2010-12-02 Xobni, Inc. Self Populating Address Book
US20110010447A1 (en) 2009-07-10 2011-01-13 Novell, Inc. Auto generated and inferred group chat presence
US20110055702A1 (en) * 2006-05-01 2011-03-03 Gabriel Jakobson Document revisions in a collaborative computing environment
US20110078246A1 (en) * 2009-09-28 2011-03-31 Bjorn Michael Dittmer-Roche System and method of simultaneous collaboration
US20110083079A1 (en) 2009-10-02 2011-04-07 International Business Machines Corporation Apparatus, system, and method for improved type-ahead functionality in a type-ahead field based on activity of a user within a user interface
US7930316B2 (en) * 2004-12-30 2011-04-19 International Business Machines Corporation Method, system, and computer program product for dynamic field-level access control in shared documents
US7949633B1 (en) 2008-05-12 2011-05-24 Adobe Systems Incorporated Shared edit access of electronic content
US8086679B2 (en) 2007-10-05 2011-12-27 Sony Corporation Information processing unit, content providing server, communication relay server, information processing method, content providing method and communication relay method
US20130218845A1 (en) * 2009-05-26 2013-08-22 Adobe Systems Incorporated Web-based collaboration for editing electronic documents
US8554868B2 (en) 2007-01-05 2013-10-08 Yahoo! Inc. Simultaneous sharing communication interface
US8555185B2 (en) 2009-06-08 2013-10-08 Apple Inc. User interface for multiple display regions
US8639762B2 (en) 2009-03-23 2014-01-28 Google Inc. Providing access to a conversation in a hosted conversation system
US8893038B2 (en) 2006-10-03 2014-11-18 International Business Machines Corporation Graphical association of task bar entries with corresponding desktop locations
US8910067B1 (en) 2007-08-10 2014-12-09 The Clic, Inc. Interactive information display through widgets

Patent Citations (142)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5671428A (en) 1991-08-28 1997-09-23 Kabushiki Kaisha Toshiba Collaborative document processing system with version and comment management
US5532715A (en) 1991-10-16 1996-07-02 International Business Machines Corporation Visually aging scroll bar
US5900872A (en) 1995-05-05 1999-05-04 Apple Computer, Inc. Method and apparatus for controlling the tracking of movable control elements in a graphical user interface
US5712995A (en) 1995-09-20 1998-01-27 Galileo Frames, Inc. Non-overlapping tiling apparatus and method for multiple window displays
US6006239A (en) 1996-03-15 1999-12-21 Microsoft Corporation Method and system for allowing multiple users to simultaneously edit a spreadsheet
US5867678A (en) 1996-12-16 1999-02-02 International Business Machines Corporation Method and system for searching and retrieving specific types of objects contained within a compound document
US6181736B1 (en) 1997-03-25 2001-01-30 Nxi Communications, Inc. Network communication system
US6915336B1 (en) 1998-06-05 2005-07-05 Instant Services.Com, Inc. Real time internet communication system
US6212548B1 (en) 1998-07-30 2001-04-03 At & T Corp System and method for multiple asynchronous text chat conversations
US20010013029A1 (en) 1998-09-18 2001-08-09 David L. Gilmour Method of constructing and displaying an entity profile constructed utilizing input from entities other than the owner
US20030193524A1 (en) 1999-03-25 2003-10-16 International Business Machines Corporation Window scroll bar
US6693652B1 (en) 1999-09-28 2004-02-17 Ricoh Company, Ltd. System and method for automatic generation of visual representations and links in a hierarchical messaging system
US20050149879A1 (en) 2000-01-04 2005-07-07 Apple Computer, Inc. Computer interface having a single window mode of operation
US20050010871A1 (en) 2000-06-21 2005-01-13 Microsoft Corporation Single window navigation methods and systems
US7222156B2 (en) 2001-01-25 2007-05-22 Microsoft Corporation Integrating collaborative messaging into an electronic mail program
US20020145631A1 (en) 2001-04-05 2002-10-10 International Business Machines Corporation System and method for creating markers on scroll bars of a graphical user interface
US20020163545A1 (en) 2001-05-01 2002-11-07 Hii Samuel S. Method of previewing web page content while interacting with multiple web page controls
US7272641B2 (en) 2001-07-03 2007-09-18 Canon Kabushiki Kaisha Image information managing system
US20030101235A1 (en) * 2001-09-04 2003-05-29 Chenglin Zhang Browser-to-browser, dom-based, peer-to-peer communication with delta synchronization
US7770130B1 (en) 2002-02-07 2010-08-03 Viktor Kaptelinin Non-distracting temporary visual clues for scrolling
US20030182450A1 (en) 2002-03-05 2003-09-25 Ong Herbert T. Generic Infrastructure for converting documents between formats with merge capabilities
US7188140B1 (en) 2002-03-13 2007-03-06 At&T Corp. System and method for providing enhanced persistent communications
US20070203886A1 (en) 2002-06-18 2007-08-30 Epstein Kevin A Method and apparatus for accelerating and improving access to network files
US7568151B2 (en) * 2002-06-27 2009-07-28 Microsoft Corporation Notification of activity around documents
US7111044B2 (en) 2002-07-17 2006-09-19 Fastmobile, Inc. Method and system for displaying group chat sessions on wireless mobile terminals
US20040019701A1 (en) 2002-07-25 2004-01-29 International Business Machines Corporation Instant messaging blind join
US7188315B2 (en) 2002-12-02 2007-03-06 Tatung Co., Ltd. Method of establishing a customized webpage desktop
US20040162877A1 (en) 2003-02-19 2004-08-19 Van Dok Cornelis K. User interface and content enhancements for real-time communication
US20040189712A1 (en) * 2003-03-27 2004-09-30 International Business Machines Corporation Method and apparatus for managing windows
US20050052685A1 (en) 2003-05-16 2005-03-10 Michael Herf Methods and systems for image sharing over a network
US20050021624A1 (en) 2003-05-16 2005-01-27 Michael Herf Networked chat and media sharing systems and methods
US20040260974A1 (en) 2003-06-17 2004-12-23 Microsoft Corporation Method and system for undoing changes in a software configuration management system
CN1701326A (en) 2003-08-07 2005-11-23 国际商业机器公司 Collaborative email
US20090083384A1 (en) 2003-08-07 2009-03-26 International Business Machines Corporation Collaborative Email With Hierachical Signature Authority
US20050076068A1 (en) 2003-09-22 2005-04-07 Fowler Paul C. System and method of synchronizing data in multi-user computer network
US20050108402A1 (en) 2003-11-13 2005-05-19 International Business Machines Corporation System and method enabling future messaging directives based on past participation via a history monitor
US20070136662A1 (en) 2003-12-23 2007-06-14 Onedoc Limited Editable information management system and method
US20050166154A1 (en) 2004-01-22 2005-07-28 Wilson Richard M. Enhanced instant message status message area containing time/date stamped entries and editable by others
US7233951B1 (en) 2004-02-18 2007-06-19 Microsoft Corporation Spreadsheet grid-like control for a web-based collaboration system
WO2005112374A1 (en) 2004-05-14 2005-11-24 Philips Intellectual Property & Standards Gmbh Method for transmitting messages from a sender to a recipient, a messaging system and message converting means
US20060026502A1 (en) 2004-07-28 2006-02-02 Koushik Dutta Document collaboration system
US20060080432A1 (en) 2004-09-03 2006-04-13 Spataro Jared M Systems and methods for collaboration
US20060053194A1 (en) 2004-09-03 2006-03-09 Schneider Ronald E Systems and methods for collaboration
US20060075044A1 (en) 2004-09-30 2006-04-06 Fox Kevin D System and method for electronic contact list-based search and display
US20060117247A1 (en) 2004-11-30 2006-06-01 Fite William R Web based data collaboration tool
US20100077338A1 (en) 2004-12-08 2010-03-25 Microsoft Corporation Method and system of taskbar button interfaces
US20060123353A1 (en) 2004-12-08 2006-06-08 Microsoft Corporation Method and system of taskbar button interfaces
US20060136821A1 (en) * 2004-12-20 2006-06-22 Microsoft Corporation Method and system for highlighting modified content in a shared document
US20060136511A1 (en) 2004-12-21 2006-06-22 Nextpage, Inc. Storage-and transport-independent collaborative document-management system
US7930316B2 (en) * 2004-12-30 2011-04-19 International Business Machines Corporation Method, system, and computer program product for dynamic field-level access control in shared documents
US20060161516A1 (en) 2005-01-14 2006-07-20 Microsoft Corporation Method and system for synchronizing multiple user revisions to a shared object
US20060161859A1 (en) 2005-01-18 2006-07-20 Microsoft Corporation Multi-application tabbing system
US20060176831A1 (en) 2005-02-07 2006-08-10 Greenberg Joel K Methods and apparatuses for selecting users to join a dynamic network conversation
US20060268020A1 (en) 2005-05-25 2006-11-30 Samsung Electronics Co., Ltd. Scrolling method and apparatus using plurality of blocks into which items are classified
US20060277210A1 (en) 2005-06-06 2006-12-07 Microsoft Corporation Keyword-driven assistance
US20070136270A1 (en) 2005-07-27 2007-06-14 John Harney System and method for providing profile matching with an unstructured document
US7734589B1 (en) 2005-09-16 2010-06-08 Qurio Holdings, Inc. System and method for optimizing data uploading in a network based media sharing system
US20100223261A1 (en) 2005-09-27 2010-09-02 Devajyoti Sarkar System for Communication and Collaboration
US20090138828A1 (en) 2005-10-11 2009-05-28 Aol Llc Ordering of conversations based on monitored recipient user interaction with corresponding electronic messages
US20080250114A1 (en) 2005-10-14 2008-10-09 International Business Machines Corporation Mitigating address book weaknesses that permit the sending of e-mail to wrong addresses
US20070124387A1 (en) 2005-11-22 2007-05-31 Yahoo! Inc. Previous communication updating in instant messaging
US20070130257A1 (en) 2005-11-24 2007-06-07 International Business Machines Corporation Methods, apparatus and program products for achieving text summarization
CN1971551A (en) 2005-11-24 2007-05-30 国际商业机器公司 Methods, apparatus for achieving text summarization
US20100306669A1 (en) 2005-11-30 2010-12-02 Roberto Della Pasqua S.R.L. Instant messaging service with minimized user interface
US20070124737A1 (en) 2005-11-30 2007-05-31 Ava Mobile, Inc. System, method, and computer program product for concurrent collaboration of media
US7774703B2 (en) 2006-02-09 2010-08-10 Microsoft Corporation Virtual shadow awareness for multi-user editors
US20070198648A1 (en) 2006-02-23 2007-08-23 International Business Machines, Corporation System and method for displaying IM session history as time-based calendar events
US20070214121A1 (en) 2006-03-09 2007-09-13 Customerforce.Com Ranking search results presented to on-line users as a function of perspectives of relationships trusted by the users
US20070233811A1 (en) 2006-03-31 2007-10-04 Jonathan Rochelle Collaborative online spreadsheet application
US20070250506A1 (en) 2006-04-21 2007-10-25 Microsoft Corporation Tracking and editing a resource in a real-time collaborative session
US20110055702A1 (en) * 2006-05-01 2011-03-03 Gabriel Jakobson Document revisions in a collaborative computing environment
US20070271340A1 (en) 2006-05-16 2007-11-22 Goodman Brian D Context Enhanced Messaging and Collaboration System
US20070294428A1 (en) 2006-06-19 2007-12-20 Ido Guy Method and System for Email Messaging
US20100205537A1 (en) 2006-06-29 2010-08-12 Nextpat Limited Method and apparatus to share high quality images in a teleconference
US20080037726A1 (en) 2006-07-21 2008-02-14 Rose Yao Method and System for Integrating Voicemail and Electronic Messaging
US20080066106A1 (en) 2006-07-31 2008-03-13 Guideworks, Llc Systems and methods for providing media guidance planners
US8893038B2 (en) 2006-10-03 2014-11-18 International Business Machines Corporation Graphical association of task bar entries with corresponding desktop locations
CN101193070A (en) 2006-12-13 2008-06-04 腾讯科技(深圳)有限公司 Instant communication system, instant communication client and instant communication method
US20080147695A1 (en) 2006-12-15 2008-06-19 Masek William J A scalable method and system for providing real time indications of currently open documents
US8554868B2 (en) 2007-01-05 2013-10-08 Yahoo! Inc. Simultaneous sharing communication interface
US20080172607A1 (en) 2007-01-15 2008-07-17 Microsoft Corporation Selective Undo of Editing Operations Performed on Data Objects
US20080178076A1 (en) 2007-01-18 2008-07-24 Barry Alan Kritt Method and apparatus for spellchecking electronic documents
US20080184157A1 (en) 2007-01-30 2008-07-31 Oracle International Corp. Enterprise web browser extension
US20080215588A1 (en) 2007-03-02 2008-09-04 Toshiba Europe Gmbh Electronic object sharing system
US20080250329A1 (en) 2007-04-05 2008-10-09 Mark Jeffrey Stefik Method and system for the collaborative analysis of information
US20090041217A1 (en) 2007-05-16 2009-02-12 Unison Technologies Llc Systems and methods for providing unified collaboration systems with combined communication log
US20080301228A1 (en) * 2007-05-31 2008-12-04 Flavin Robert A Shared state manager and system and method for collaboration
US20090006936A1 (en) 2007-06-29 2009-01-01 Microsoft Corporation Collaborative document authoring
US7933952B2 (en) 2007-06-29 2011-04-26 Microsoft Corporation Collaborative document authoring
US20090037409A1 (en) 2007-08-03 2009-02-05 Oracle International Corporation Method and system for information retrieval
US8910067B1 (en) 2007-08-10 2014-12-09 The Clic, Inc. Interactive information display through widgets
US20090043848A1 (en) 2007-08-11 2009-02-12 Alexander Kordun Method and system for providing collaborative moderation and correction of message history in an instant mesaging session
US20090055483A1 (en) 2007-08-20 2009-02-26 Rooma Madan Enhanced Collaboration in Instant Messaging
US20090070301A1 (en) 2007-08-28 2009-03-12 Lexisnexis Group Document search tool
US20090070687A1 (en) 2007-09-12 2009-03-12 Richard James Mazzaferri Methods and Systems for Providing, by a Remote Machine, Access to a Desk Band Associated with a Resource Executing on a Local Machine
US20090073888A1 (en) 2007-09-13 2009-03-19 Microsoft Coporation Determining quality of communication
US20090150947A1 (en) 2007-10-05 2009-06-11 Soderstrom Robert W Online search, storage, manipulation, and delivery of video content
US8086679B2 (en) 2007-10-05 2011-12-27 Sony Corporation Information processing unit, content providing server, communication relay server, information processing method, content providing method and communication relay method
US20100174783A1 (en) 2007-10-12 2010-07-08 Rony Zarom System and method for coordinating simultaneous edits of shared digital data
US20090168760A1 (en) 2007-10-19 2009-07-02 Rebelvox, Llc Method and system for real-time synchronization across a distributed services communication network
US20090112937A1 (en) 2007-10-26 2009-04-30 Microsoft Corporation Spreadsheet collaboration between rich and browser clients
US20090157811A1 (en) 2007-12-14 2009-06-18 Microsoft Corporation Collaborative Authoring Modes
US20090177744A1 (en) 2008-01-04 2009-07-09 Yahoo! Inc. Identifying and employing social network relationships
US20090183107A1 (en) 2008-01-16 2009-07-16 Microsoft Corporation Window minimization trigger
US20090192845A1 (en) 2008-01-30 2009-07-30 Microsoft Corporation Integrated real time collaboration experiences with online workspace
US20090199127A1 (en) 2008-01-31 2009-08-06 Microsoft Corporation Previewing target display areas
US20090199274A1 (en) 2008-02-01 2009-08-06 Matthew Frazier method and system for collaboration during an event
US20090228555A1 (en) 2008-03-08 2009-09-10 International Business Machines Corporation Automated contact list determination based on collaboration history
US20090234876A1 (en) 2008-03-14 2009-09-17 Timothy Schigel Systems and methods for content sharing
US20090235181A1 (en) 2008-03-14 2009-09-17 Microsoft Corporation Web-based multiuser collaboration
US20090248497A1 (en) 2008-04-01 2009-10-01 Certona Corporation System and method for quantifying and detecting non-normative behavior
US20090271806A1 (en) 2008-04-28 2009-10-29 Microsoft Corporation Techniques to modify a document using a latent transfer surface
US20090271696A1 (en) 2008-04-28 2009-10-29 Microsoft Corporation Conflict Resolution
US20090276471A1 (en) 2008-05-05 2009-11-05 Microsoft Corporation Automatically Capturing and Maintaining Versions of Documents
US20090275412A1 (en) 2008-05-05 2009-11-05 Microsoft Corporation Multiple-player collaborative content editing
US7949633B1 (en) 2008-05-12 2011-05-24 Adobe Systems Incorporated Shared edit access of electronic content
US20090300520A1 (en) * 2008-05-30 2009-12-03 Microsoft Corporation Techniques to manage recordings for multimedia conference events
US20090307345A1 (en) 2008-06-06 2009-12-10 International Business Machines Corporation Automated digital media content filtration based on relationship monitoring
US20090313331A1 (en) 2008-06-13 2009-12-17 Microsoft Corporation Merging versions of documents using multiple masters
US20090319910A1 (en) 2008-06-22 2009-12-24 Microsoft Corporation Automatic content and author emphasis for shared data
US20090327448A1 (en) 2008-06-27 2009-12-31 Microsoft Corporation Peer-to-peer synchronous content selection
US20100011373A1 (en) 2008-07-08 2010-01-14 Nortel Networks Limited Shared Persistent Communication Thread
US20100017478A1 (en) 2008-07-16 2010-01-21 International Business Machines Corporation Dynamic grouping of email recipients
US20100017194A1 (en) 2008-07-17 2010-01-21 Mette Hammer System and method for suggesting recipients in electronic messages
US20100023557A1 (en) 2008-07-28 2010-01-28 Novell, Inc. System and method to extend a file manager user interface
US20100107115A1 (en) 2008-10-27 2010-04-29 Microsoft Corporation Child window surfacing and management
US20100125791A1 (en) 2008-11-14 2010-05-20 Rebelvox, Llc User interface for a telecommunication and multimedia management system and method
US20100153106A1 (en) 2008-12-15 2010-06-17 Verizon Data Services Llc Conversation mapping
US20100169269A1 (en) 2008-12-30 2010-07-01 Karthik Chandrasekaran Systems and methods for providing collaborative editing
US20100180218A1 (en) 2009-01-15 2010-07-15 International Business Machines Corporation Editing metadata in a social network
US20100217808A1 (en) 2009-02-24 2010-08-26 Research In Motion Limited System and method for switching between conversations in instant messaging applications
US20100223345A1 (en) 2009-03-02 2010-09-02 Microsoft Corporation Communications application having conversation and meeting environments
US20100235354A1 (en) 2009-03-12 2010-09-16 International Business Machines Corporation Collaborative search engine system
US20100235216A1 (en) 2009-03-16 2010-09-16 Microsoft Corporation Integration of pre-meeting and post-meeting experience into a meeting lifecycle
US8639762B2 (en) 2009-03-23 2014-01-28 Google Inc. Providing access to a conversation in a hosted conversation system
US8949359B2 (en) 2009-03-23 2015-02-03 Google Inc. Systems and methods for searching multiple instant messages
US20130218845A1 (en) * 2009-05-26 2013-08-22 Adobe Systems Incorporated Web-based collaboration for editing electronic documents
US20100306185A1 (en) 2009-06-02 2010-12-02 Xobni, Inc. Self Populating Address Book
US8555185B2 (en) 2009-06-08 2013-10-08 Apple Inc. User interface for multiple display regions
US20110010447A1 (en) 2009-07-10 2011-01-13 Novell, Inc. Auto generated and inferred group chat presence
US20110078246A1 (en) * 2009-09-28 2011-03-31 Bjorn Michael Dittmer-Roche System and method of simultaneous collaboration
US20110083079A1 (en) 2009-10-02 2011-04-07 International Business Machines Corporation Apparatus, system, and method for improved type-ahead functionality in a type-ahead field based on activity of a user within a user interface

Non-Patent Citations (49)

* Cited by examiner, † Cited by third party
Title
"SubEthaEdit," as published on Apr. 15, 2009 at http://www.codingmonkeys.de/subethaedit/index.html , pp. 1-2. *
Agarwal, A., "Copy Pictures from Flickr to Picasa Web Albums (or vice-versa)", www.KodakGallery.com/Photo-Albums, Jul. 30, 2007, 2 pages.
Balasubramany, "Cut Once, A Thunderbird Extension for Recipient Prediction and Leak Detection," retrieved from, http://www.cs.cmu.edu/~vitor/cutonce/cutOnce.html, Oct. 29, 2009, 5 pp.
Balasubramany, "Cut Once, A Thunderbird Extension for Recipient Prediction and Leak Detection," retrieved from, http://www.cs.cmu.edu/˜vitor/cutonce/cutOnce.html, Oct. 29, 2009, 5 pp.
Carvalho, "Cut Once-A Thunderbird Extension for Recipient Prediction and Leak Detection," Jan. 19, 2008, 3 pp.
Carvalho, "Ranking Users for Intelligent Message Addressing," ECIR '08 Proceedings of the IR Research, 30th European Conference on Advances in Information Retrieval, Springer-Verlag Berlin, Heidelberg, 2008, 12 pp.
Cayenne-Mccall, Synchronous 3D Document Collaboration, Nov. 2008, pp. 1-38.
Comer, D., "Conversation-Based Mail", ACM Transactions on Computer Systems, vol. 4, No. 4, Nov. 1986, 21 pages.
Day-Richter, What's different about the new Google Docs: Making collaboration fast, Sep. 23, 2010, 6 pgs.
Dear, B., "TERM-TALK: Plato's Instant Messaging," brian@platohistory.org, Dec. 19, 2002, 2 pages.
Dodgeball.com, Mobile Social Software, http://www.dodgeball.com/, Feb. 23, 2008, 2 pages.
Dr. Dr Drang, "Collaboration with EtherPad and Markdown," Nov. 19, 2008, http://leancrew.com/all-this/2008/11/collaboration-with-etherpadand-markdown/ , pp. 1-3. *
Fleishman, EtherPad Brings Simultaneous Writing to the Web, TidBITS, Feb. 16, 2009, 3 pgs.
Flickr, Help/The Help Forum, "Anyone can tell me how to copy all photos from Flickr another album gallery from the other website?" http://www.flickr.com/help/forum/en-us/62736, 2008, 3 pages.
Flock Browser-Share Pictures, Text and Video, "User Guides," http://www.flock.com/user-guide/1.0/advshar.html, Feb. 22, 2008, 8 pages.
Glenn Fleishman, "EtherPad Brings Simultaneous Writing to teh Web," Feb. 16, 2009, TidBITS, http://tidbits.com/article/9869 , pp. 1-3. *
Google Inc., International Search Report and Written Opinion, PCT/US2011/058607, Feb. 21, 2012, 12 pgs.
Google Inc., Notification of the First Office Action, CN 201080013718.4, Jun. 24, 2013, 4 pgs.
Google Inc., Notification of the First Office Action, CN 201080013719.9, Mar. 27, 2013, 5 pgs.
Google Inc., Notification of the Grant of Patent Right for Invention, CN 201080013718.4, Mar. 2, 2015, 1 pg.
Google Inc., Notification of the Second Office Action, CN 201080013718.4, Mar. 11, 2014, 12 pgs
Google Inc., Notification of the Second Office Action, CN 201080013728.8, Feb. 19, 2014, 4 pgs.
Google Inc., Notification of the Third Office Action, CN 201080013718.4, Sep. 18, 2014, 10 pgs.
Google, Inc., PCT/US2010/028272, Mar. 23, 2010, International Search Report and Written Opinion dated Aug. 30, 2011, 10 pgs.
Google, Notification of the First Office Action, CN 201080013728.8, Jun. 7, 2013, 9 pgs.
Grob, R., "Cluestr: Mobile Social Networking for Enhanced Group Communication," GROUP '09, May 10-13, 2009, 10 pages.
Help Yahoo Messenger, How do I share photos during a conversation? http://help.yahoo.com/1/us/yahoo/messenger/messenger9/entertainment/entertainment-38.h . . . , Feb. 22, 2008, 1 page.
Herrick, Google This! Using Google Apps for Collaboration and Productivity, Jan. 1, 2009, pp. 55-63.
Hu, J., Microsoft wins . . . is typing a message IM patent, Oct. 8, 2003, 2 pages.
International Search Report and Written Opinion, PCT/US2010/028277, Mar. 31, 2011, 8 pages.
International Search Report and Written Opinion, PCT/US2010/28269, Jan. 26, 2011, 8 pages.
Jane Hart, "Jane's Pick of the Day-EtherPad," Nov. 21, 2008, http://janeknight.typepad.com/pick/2008/11/etherpad.html , pp. 1-2. *
Lavalle, A., "Friends Swap Twitters, and Frustration," The Wall Street Journal, Mar. 16, 2007, 3 pages.
Microsoft Office Online, Help and How-to Move or Copy and Paste Contacts, http://office.microsot.com/en-us/help/HA102084691033.aspx?mode=print, 2008, 2 pages.
NetWin Advanced Server Software, "Dbabble Instant Chat Server Overview," http://free.dbabble.com/, 2009, 3 pages.
Nichols, D., "High-Latency, Low-Bandwidth Windowing in the Jupiter Collaboration System," Proceedings of UIST '95, 10 pages.
Payne, A., "Google Groups, Twitter Development Talk," http://groups.google.com/group/twitter-development-talk/web/api-documentation, Jan. 18, 2008, 11 pages.
Plasq, "Ask a question, share an idea, report a problem, or just talk." fetsatisfaction.com/ . . . /I wish-i-could-drag-drop-directly-into-a-file-upload-field-in-safari-firefox-cached, Aug. 29, 2007, 2 pages.
Saviano, S., "Annagram Concurrent Text Editor," Penn Engineering, 2006, 2 pages.
Shen, Flexible Merging for Asynchronous Collaborative Systems, Jan. 1, 2002, 18 pgs.
TechHit.com, "SimplyFile-Intelligent filing assistant for microsoft outlook," Jun. 4, 2008, 2 pp.
Twitter Support, "Twitter FAQ," http://help.twitter.com/index.php?pg=kb.printer,friendly&ie=3, 2008, 8 pages.
Twitter, "Display twitters on Your Web Page," http://twitter.com, Feb. 22, 2008, 1 page.
Twitter/Sifow, "Name Sifow," http://twitter.com/sifow/with-friends, 2008.
Vijayaraghavan, An Architecture for Logging and Searching Chat Messages, Electrical and Electronics Engineering University, Madras, India, 1999, pp. 1-50.
Wang, Google Wave Operational Transformation, Jul. 2010, 6 pgs.
Webb, C., "What's the Use in Twitter? Where is the Value?" http://ekwebb.com/blogging/what-the-use-in-twitter-where-is-the-value/, Aug. 15, 2007, 5 pages.
Webb, C., Chris Webb on Publishing, Media, and Technology, http://ekwebb.com/social-networks-and-media/twitter-is-a-conversation-ecosystem/, Feb. 22, 2008, 8 pages.
XmScrollBar (3x), techpubs.sgi.com, Jan. 31, 2001, 6 pgs (reprinted date Jun. 13, 2013).

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140201125A1 (en) * 2013-01-16 2014-07-17 Shahram Moeinifar Conversation management systems
US9704175B2 (en) * 2013-01-16 2017-07-11 Whotheman Media, Inc. Conversation management systems
US20210312513A1 (en) * 2013-05-24 2021-10-07 Instaply, Inc. Coordinating products and services for customers
US20160357360A1 (en) * 2014-02-21 2016-12-08 Konami Digital Entertainment Co., Ltd. Message display terminal, message transmission server, and information storage medium
US10845936B2 (en) * 2014-02-21 2020-11-24 Konami Digital Entertainment Co., Ltd. Message display terminal, message transmission server, and information storage medium
US10361987B2 (en) * 2016-05-21 2019-07-23 Facebook, Inc. Techniques to convert multi-party conversations to an editable document
US11032231B1 (en) * 2016-05-21 2021-06-08 Facebook, Inc. Techniques to convert multi-party conversations to an editable document

Also Published As

Publication number Publication date
US20150195221A1 (en) 2015-07-09

Similar Documents

Publication Publication Date Title
US9380011B2 (en) Participant-specific markup
US8984139B2 (en) System and method for editing a conversation in a hosted conversation system
US9026935B1 (en) Application user interface with an interactive overlay
US9166939B2 (en) Systems and methods for uploading media content in an instant messaging conversation
US8725818B1 (en) Automated participants with access to attachments in hosted conversations
US20170103082A1 (en) Participant suggestion system
US8996635B1 (en) Automated participants for hosted conversations
US8825776B1 (en) Generating a hosted conversation in accordance with predefined parameters
US9021386B1 (en) Enhanced user interface scrolling system
US9189479B2 (en) Semantic web portal and platform
US8453052B1 (en) Real-time document sharing and editing
EA008675B1 (en) System and method for knowledge retrieval, management, delivery and presentation
US11875081B2 (en) Shared screen tools for collaboration
US11727190B1 (en) Previews for collaborative documents

Legal Events

Date Code Title Description
AS Assignment

Owner name: WALKWAY TECHNOLOGIES US LLC., CALIFORNIA

Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:RASMUSSEN, LARS EILSTRUP;RASMUSSEN, JENS EILSTRUP;REEL/FRAME:026549/0053

Effective date: 20110425

AS Assignment

Owner name: GOOGLE INC., CALIFORNIA

Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:WALKWAY TECHNOLOGIES US LLC;REEL/FRAME:028189/0114

Effective date: 20120426

STCF Information on status: patent grant

Free format text: PATENTED CASE

AS Assignment

Owner name: GOOGLE LLC, CALIFORNIA

Free format text: CHANGE OF NAME;ASSIGNOR:GOOGLE INC.;REEL/FRAME:044566/0657

Effective date: 20170929

MAFP Maintenance fee payment

Free format text: PAYMENT OF MAINTENANCE FEE, 4TH YEAR, LARGE ENTITY (ORIGINAL EVENT CODE: M1551); ENTITY STATUS OF PATENT OWNER: LARGE ENTITY

Year of fee payment: 4

MAFP Maintenance fee payment

Free format text: PAYMENT OF MAINTENANCE FEE, 8TH YEAR, LARGE ENTITY (ORIGINAL EVENT CODE: M1552); ENTITY STATUS OF PATENT OWNER: LARGE ENTITY

Year of fee payment: 8