A system and method are provided that permits different devices with different applications to respond to the occurrence of a condition in a similar manner. By way of example, trigger data may be synchronized across multiple devices, wherein trigger data identifies information to be provided to a program in response to the occurrence of a condition. If a program is not installed or running on a particular device when the trigger occurs, the device automatically installs and executes the application.
|
20. A method comprising:
storing, by one or processors of a computing device, a set of triggers in a memory, each trigger of the set being configured to associate a respective program of a set of programs with one or more conditions stored in the memory, wherein a first one of the set of triggers is associated with a program identifier;
determining, by the one or more processors, that at least one of the one or more conditions associated with the first trigger has been satisfied;
determining, by the one or more processors, that the respective program is not currently installed in the computing device; and
in response to the determinations that the at least one of the one or more conditions associated with the first trigger has been satisfied and that the respective program is not currently installed, obtain an installation file from a location on a network identified by the program identifier, and install the respective program on the computing device using the installation file.
1. A computing device comprising:
memory configured to store a set of triggers, each trigger of the set being configured to associate a respective program of a set of programs with one or more conditions stored in the memory, wherein a first one of the set of triggers is associated with a program identifier; and
one or more processors operatively coupled to the memory, the one or more processors being configured to:
determine that at least one of the one or more conditions associated with the first trigger has been satisfied;
determine that the respective program is not currently installed in the computing device; and
in response to the determinations that the at least one of the one or more conditions associated with the first trigger has been satisfied and that the respective program is not currently installed, obtain an installation file from a location on a network identified by the program identifier, and install the respective program on the computing device using the installation file.
21. A non-transitory computing-device readable storage medium on which computing-device readable instructions are stored, the instructions, when executed by one or more computing devices, cause the one or more computing devices to perform a method that includes:
storing a set of triggers in a memory, each trigger of the set being configured to associate a respective program of a set of programs with one or more conditions stored in the memory, wherein a first one of the set of triggers is associated with a program identifier;
determining that at least one of the one or more conditions associated with the first trigger has been satisfied;
determining that the respective program is not currently installed in the computing device; and
in response to the determinations that the at least one of the one or more conditions associated with the first trigger has been satisfied and that the respective program is not currently installed, obtaining an installation file from a location on a network identified by the program identifier, and install the respective program on the computing device using the installation file.
2. The computing device of
3. The computing device of
4. The computing device of
5. The computing device of
6. The computing device of
7. The computing device of
8. The computing device of
9. The computing device of
10. The computing device of
11. The computing device of
12. The computing device of
13. The computing device of
14. A computing system, comprising:
a plurality of computing devices according to
wherein the set of triggers is stored in each of the plurality of computing devices as a ledger, the ledger being associated with the given user in each of the plurality of computing devices.
15. The computing system of
16. The computing system of
17. The computing system of
18. The computing system of
19. The computing system of
|
This application is a continuation of U.S. application Ser. No. 15/808,153, filed Nov. 9, 2017, the entire disclosure of which is incorporated herein by reference.
“Ephemeral” computing systems have been proposed wherein programs and data may be downloaded on demand. For example, if a user is running out of space on a device, the system may copy an application and its associated data to the cloud and delete the local copy of the application and its associated data from the device. In response to a user indicating that they want to run the application, the device may automatically download the application and its associated data from the cloud and initiate execution.
Various systems have been proposed for synchronizing data across multiple devices. For example, the creation and modification of document files stored by a user on one device may be automatically replicated on other devices used by the user.
One aspect of the technology described herein relates to a method of installing programs. The method includes: accessing, with one or more computing devices, a trigger stored in memory, the trigger being an association between a set of parameters and a program; determining, with the one or more computing devices, whether a condition has occurred based on a comparison of information received at a first device with the set of parameters associated with the trigger; determining, with the one or more computing devices when the condition is determined to have occurred, whether the program associated with the trigger is installed on the first device; when the program associated with the trigger is not installed on the first device, providing a request for the program associated with the trigger and receiving, at the first device from a second device via a network in response to the request, an installation file of the program; installing, on the first device, the program associated with the trigger based on the installation file; and providing, with the one or more computing devices, a message associated with the trigger to the program associated with the trigger after the program associated with the trigger is installed.
Another aspect of the technology relates to a first computing device that includes one or more processors and first memory storing instructions. The instructions are executable by the one or more processors and include: receiving a first set of condition parameters and first message data from a first program installed on a first computing device; storing first trigger data in the first memory, wherein trigger data comprises a set of condition parameters, a program identification value and message data, and wherein the set of condition parameters of the first trigger data comprises the first set of condition parameters, the program identification value of the first trigger data is associated with an identifier of the first program, and the message data of the first trigger data comprises the first message data; providing the first trigger data to a second computing device; receiving second trigger data stored on the second computing device, wherein the second trigger data comprises a second set of condition parameters provided by a second program installed on the second computing device, the program identification value of the second trigger data is associated with an identifier of the second program, and the message data of the second trigger data comprises second message data provided by the second program; storing the second trigger data in the first memory; determining whether the first set of condition parameters is satisfied; when the first set of condition parameters is determined to be satisfied, providing data based on the first message data to the first program; determining whether the second set of condition parameters is satisfied; and when the second set of condition parameters is determined to be satisfied, providing data based on the second message data to a copy of the second program stored on the first computing device.
Yet another aspect of the technology relates to a non-transitory computing-device readable storage medium on which computing-device readable instructions are stored. The instructions, when executed by one or more computing devices, cause the one or more computing devices to perform a method that includes: synchronizing, on a given device of a plurality of computing devices, a set of triggers stored on the given device with a set of triggers stored on other computing devices of the plurality of computing devices, wherein each trigger comprises data that associates a condition that is detectable by the given device with information to be provided to a program installed on the given device when the condition occurs; determining, at the given device of the plurality of computing devices, whether a first condition of a first trigger of the set of triggers has occurred, the first trigger comprising first information to be provided to the program in response to determining that the first condition has occurred; when a copy of the program on the given device is unable to receive the first information, enabling a copy of the program on the given device to receive the first information by (a) downloading and installing a copy of the program onto the given device if the program is not installed on the given device and (b) running a copy of the program on the given device if the program is not running; and providing the first information to the copy of the program on the given device when said copy is able to receive the first information.
Aspects of the technology described herein relate to systems and methods for different devices to respond similarly to the occurrence of an event notwithstanding the fact that the devices, as well as their then-current relevant programs and data, are different from each other.
By way of example and as shown in
Specific triggers may be associated with specific users, and a user's trigger's may be replicated among the user's devices. For instance, each time another application on device 120 adds a new trigger to the ledger 240b associated with user 150 (User B), the same trigger may be added to the ledger 240c on another device used by user 150, e.g., device 130.
Triggers may be loaded and monitored on a device before the trigger's associated programs are installed. For instance, if trigger 251c was installed on device 130 because of the creation of corresponding trigger 251b on device 120, and if trigger 251c occurs before application 210c associated with trigger 251c occurs, then device 130 may automatically install application 210c on device 120 and notify the application of the trigger's occurrence.
As shown in
Systems such as those described above may include one or more computing devices. For instance,
The instructions used by a computing device include any set of one or more instructions that are accessed and executed by the computing device. By way of example, device 110 stores values representing instructions 113 and processor 111 is able to access those values and perform, or cause other components of device 110 or system 100 to automatically perform, operations associated with those instructions. Instructions 113 may be stored in a format that is capable of execution by processor 111 with or without additional processing, e.g., machine code, object code, script, or independent source code modules that are interpreted on demand. An operation expressed as a single instruction in one format may correspond with multiple instructions in another format, e.g., executing a single command in script may require the execution of multiple machine code instructions. Some of the operations described herein may involve the execution of instructions provided by an operating system.
The instructions may be stored in a memory. For instance, instructions 113 are stored in memory 112. The memory may be any component that is capable of storing information on a non-transitory storage medium that can be read by a computing device, e.g., registers provided by processor 111, volatile memory such as RAM (random-access memory), non-volatile memory such as flash memory (e.g., a Secure Digital (SD) card), a hard-disk drive, a solid-state drive, optical storage, or tape backups. Device 110, processor 111 and memory 112 are configured so that processor 111 can read, modify, delete and add values stored in memory 112. Memory may be configured to provide less access than the example of memory 112, e.g., the memory may be read-only.
Memory may store information that is used by, or results from, the operations performed by the computing device. By way of example, memory 112 stores data 114, which includes values that are retrieved or stored by processor 111 in accordance with instructions 113, such as information that is required or determined by device 110 when performing some of the operations described herein. Values stored in memory 112 may be stored in accordance with one or more data structures. For instance, a value stored in memory 112 may represent a single numeric value (e.g., a binary number, an integer, a floating point number, a Unicode value representing a single character of text, digit or punctuation mark, or a value representing a single machine code instruction), a set of multiple numeric values (e.g., an array of numbers, a string of text characters, XML-formatted data, or a file), or information from which values to be processed in accordance with instructions 113 may be obtained (e.g., a reference to a value stored at a remote location or a parameter of a function from which the required value is calculated).
A computing device may include components for receiving information from the physical environment surrounding the device to allow direct user input to the device. Similar to device 110, device 120 includes a processor 121, memory 122, instructions 123 and data 124. Device 120 also includes components that detect information relating to the physical environment in which the component is disposed, and this information may include information provided by user 150. Device 110 includes a user input component 125 having circuitry and other components configured to receive input from user 150, such as information provided tactilely (e.g., a mouse, keyboard, keypad, button or touchscreen). User input components may perform functions that are not primarily directed to user input. By way of example, camera 127 may be used to capture user commands (e.g., hand gestures) and other visual information (e.g., the visual characteristics of a mountain). Microphone 126 may be used to capture user commands (e.g., verbal commands) and other audio information (e.g., the sound of a waterfall).
A computing device may include components for providing information via the physical environment surrounding the device to provide output directly to users. For example, a component may include circuitry that outputs visual, audio or tactile (e.g., haptic) information to users of the device, such as display 140 (e.g., a computer monitor, a touch-screen, a projector or another component that is operable to change a visual characteristic in response to a signal), speaker 128, or actuator 129 to vibrate the device.
A computing device may include one or more components for communicating with other computing devices. By way of example, devices 110, 120 and 130 include circuitry (e.g., a network interface) connecting each device to a different node of communication network 190. Network 190 may be composed of multiple networks using different communication protocols. For instance, when device 110 transmits information to device 120, the information may be sent over one or more of the Internet (e.g., via core Internet routers in accordance with the Transmission Control Protocol (TCP) and Internet Protocol (IP)), a cellular network (e.g., in accordance with the LTE (Long-Term Evolution) standard), a local network (e.g., an Ethernet or Wi-Fi network), or a Bluetooth connection. A device may provide information to a user via other devices, e.g., device 110 may display information to user 150 by sending the information via network 190 to device 120 for display on display 140. A computing device may also provide information to another computing device without the use of a network. By way of example, one computing device may output information with a display and another computing device may detect that information with a camera. Although only a few computing devices are depicted in
Although
In many of the examples described herein, device 110 is a server and devices 120, 130 are client devices. For instance, device 110 may be a web server and device 120 may be a desktop computer system, e.g., processor 121 and memory 122 may be contained in a desktop personal computer, display 140 may be an external monitor connected to the personal computer by a cable, and user input component 125 may be an external keyboard that communicates with the computer via Bluetooth. Alternatively, device 120 may be a wireless phone with a touchscreen that functions as both display 130 and user input component 125. Other client devices may include, by way of example, laptops, notebooks, netbooks, tablets, set-top boxes (e.g., a cable-television set-top box connected to a television) and wearable devices (e.g., a smartwatch). In that regard, a computing device may include other components that are typically present in such devices or general purpose computers but are not expressly described herein.
The data stored in memory may include an association between a condition that may occur and a program (such associations hereafter referred to as a “trigger”). For example, the data associated with a trigger's program may include a value that identifies an application, a routine, or other instructions. The program identifier may be a unique identifier such as a URL from which the binary code of the program was or may be retrieved, the program's location on the device, a unique identifier provided by the source of the application (e.g., a server-based app store), etc. The condition may be expressed as one or more parameter values. For example, if the trigger's associated program is an email application installed on the device, the condition for the trigger may be the arrival of a new email at an email account associated with the device's user, and the condition's parameters may include a server token representing a new email event. A trigger may be based on any condition or set of conditions that are detectable by the device.
A trigger's data may also be associated with a message value to be provided to the associated program when the condition occurs. For example, the trigger may be associated with a set of parameter that define the information to be included in the message, such as the sender and subject line of an email that resulted in the trigger's occurrence. Alternatively, a trigger may not define the content of the message, in which case the message may include nothing more than an indication that the condition associated with the trigger has occurred.
A single device may store different types of triggers. For instance, a new email trigger may rely on push notifications from an email server to determine whether the condition is satisfied. Another type of trigger may be based on inter-process communications (IPC), e.g., a trigger whose condition is satisfied when the current time provided by a device's clock (such as clock 141) matches a date/time defined by the trigger's parameter.
A set of one or more triggers may be replicated across multiple devices (such a set referred to hereafter as a “ledger”), and each ledger may be associated with one or more users. For instance,
As explained in more detail below, instructions 113 may include instructions for managing triggers. By way of example and as explained in more detail below, the instructions on a particular device may include a set of routines that are configured to: process requests from associated programs on the device to add triggers to the device's ledger, determine whether a trigger occurred by comparing data or signals from components located on or off of the device with a trigger's condition parameters, provide messages to associated programs on the device when a trigger occurs, provide notifications to a user of the device when a trigger occurs, synchronize the data stored in ledgers on the device with ledgers stored on different devices, and notify users when a trigger has occurred. For ease of reference, the instructions performing these functions are represented in
The framework may be configured as an API (application programming interface) wherein the framework's functions are invoked by calling a routine of the framework. As discussed in more detail below, some of the routines of the framework may be idempotent. The framework may also be configured as part of the operating system of a device. The framework may further include an agent application that provides or receives services to and from other applications on the device.
Operations in accordance with a variety of aspects of the method will now be described. It should be understood that the following operations do not have to be performed in the precise order described below. Rather, various steps can be handled in different order or simultaneously.
Triggers may be added to a device in response to requests from programs or other components stored on a device. By way of example and as shown in
By way of further example, User B may use existing alarm application 215b to request an alarm at a specific date and time. In response, application 215b may call a routine of framework 205b that requests a notification at the specific date and time. Framework 205b may store a new trigger in ledger 240b that associates a unique identifier of email application 210b (e.g., URL “a.com/21”) with condition 262b. The parameters of the trigger's condition 262b may represent a Boolean equation that compares the output of device's clock to the user-defined time of day.
Triggers may also be added to a device based on trigger-related data provided by other devices. For instance, the triggers associated with a particular user's ledgers may be synchronized across multiple devices. By way of example, when device 120 modifies the trigger data stored in ledger 240b of user 150 to include new email trigger 251b, framework 205b may send data representing the modification to any other devices storing a ledger associated with a user having the same user ID 231b as User B. In response to being notified of the modification, device 130 may add trigger 251c to ledger 240c, which is stored in device 130 and associated with the user ID 231c of User B. The parameters of condition 261c, associated program identifier 271c and message 275c stored on device 130 may be the same as the parameters of condition 261b, associated program identifier 271b and message 275b stored on device 120.
The trigger data stored in ledgers may be synchronized across multiple devices on a peer-to-peer to basis, relative to a specific copy stored in the cloud, or another basis. For example, device 120 may send modifications to ledger 240b to framework server 290, and server 290 may modify the trigger data stored in its ledger 240d to match ledger 240b. Server 290 may also notify device 130 of the change so device 130 can synchronize its ledger 240c with the ledger stored on server 290. If a device is offline or otherwise unavailable at the time a ledger on another device is modified, the ledger may be synchronized when the device becomes available.
A user may identify the devices that will store the user's trigger data. By way of example, when User B first uses device 120, User B may authenticate the device by entering his or her user identification and password via user input component 125. In response, framework 205b may query whether server 290 has a copy of a ledger associated with the user ID of User B. If so, framework 205b may download a copy of the ledger from server 290 to device 120. If not, device 120 may create a new ledger for User B and upload a copy of the ledger to server 290. Server 290 may also store a list of all of the devices authenticated by User B so the devices can be located and receive updates to their ledgers when connected to network 190. In that regard and in some aspects of the system, a device may download a copy of triggers for applications before the applications themselves are installed on the device.
Each device may determine if and when the conditions of the triggers stored on the device are satisfied. By way of example, device 120 may receive a push notification from email server 280 wherein the content of the push notification indicates that an email was received in email account 281 associated with user B. Upon receiving the notification, framework 205b may compare the content of the push notification with the parameters of condition 261b and condition 262b stored in ledger 240b. In response to determining that the push notification matches the parameters of condition 261b of new email trigger 251b, framework 205b may identify the associated program (e.g, email application 210b) based on the associated program identifier 271b. Framework 205b may then provide email application 210b with a message that conforms with the parameters of message 275b. By way of further example, framework 205b may periodically compare the current date and time of day with the specific date and time of day contained in condition 262b of alarm trigger 252b. If device 120 determines that the dates and times match, the framework may notify alarm application 215b that trigger 252b has occurred.
In some aspects, the system may not notify a program or the user in response to a trigger's occurrence unless the trigger is associated with the current user of the device or all of the users of the device. By way of example, device 120 may store information regarding another user, such as user ID 282c and ledger 283c associated with user 160 (User C). Since current user identifier 231b does not identify User C as the current user of device 120, and since trigger 284c is specific to User C, framework 205b may not check whether the condition associated with trigger 284c occurs or may forego providing the trigger's associated application with a message when the condition does occur.
The system's response to a trigger may be specific to the trigger's associated program. Continuing the aforementioned example, email application 210b may be configured to update an inbox stored on device 120 upon receiving notification from framework 205b that the new email trigger registered by the email application has occurred. As shown in
If a trigger occurs when the associated program is asleep or not running, the device may wake or execute the application. For instance, if email application 210b is not running when trigger 251b occurs, framework 205b may issue a command to the operating system of device 120 to load and execute the application before the framework notifies the application of the trigger's occurrence.
A device's response to a trigger may also be independent of the associated programs. By way of example, if the framework cannot access a trigger's associated program when the trigger occurs, the framework may convert the message to human-readable text and display the text on the device's display.
Whether a user is notified of a trigger may depend on how the trigger's associated program responds to the trigger. For example, in the case of an alarm application, the application may respond to the occurrence of a time-based trigger by displaying a notification to the user. However, an application for viewing news articles may register a time-based trigger and, instead of alerting the user that the date/time defined by the trigger's parameters has occurred, may download and update a local store of news articles. A trigger's associated program will perform those tasks that it has been programmed to perform in response to a trigger's occurrence.
The system may synchronize data indicating whether a device has completed a particular action in response to a trigger's occurrence. For instance, a trigger may also be associated with a value that represents whether a user took an action that indicates the user acknowledged the occurrence. In that regard, if a user turns off the alarm associated with trigger 252b, alarm application 215b may notify framework 205b that the trigger has been acknowledged. The framework may modify ledger 240b of device 120 accordingly. When ledger 240c on device 130 is synchronized with ledger 240b, device 130 may cancel an action that alarm application 215c would normally take, e.g., the device's framework may not notify the application that the trigger has occurred, the framework may notify the alarm application that the trigger has been acknowledged, or the alarm application may query the state of the trigger before reminding a user of device 130 to acknowledge the alarm.
If a trigger occurs before the associated program has been installed on the relevant device, the associated program may be automatically installed. For example, whereas new email trigger 251b may have been added to ledger 240b in response to the user installing email application 210b on device 120, new email trigger 251c may have been added to ledger 240c of device 130 because the content of ledger 240c is synchronized with the content of ledger 240b. When device 130 determines that condition 261c of trigger 251c has been satisfied, the device may determine whether the trigger's associated application is able to receive the trigger's message. For instance, the device may determine whether the application is installed, e.g., whether the device's processors are able to load and execute from memory, without accessing an external network, the application's instructions for displaying the email. As a result, and particularly if device 130 was only recently authenticated by User B, the memory of device 130 may not include a copy of the email application identified by associated program identifier 271c when device 130 determines that condition 261c of trigger 251c has been satisfied.
The system may use the program identifier associated with the trigger to determine how to initiate installation or the relevant program. By way of example, the program identifier may identify a location on network 190 (e.g, a URL) from which an installation file for the application may be obtained (e.g., a copy of the native code of the application itself or files that may be used to download, extract and install the application). In that regard, if framework 205c is unable to identify the location of the associated email application when trigger 251c occurs, the framework may use the value of associated program identifier 271c (e.g., URL “a.com/20”) to request a copy of the application. Upon receiving the installation file from an app server (e.g., device 110), framework 205c may automatically install email application 210c.
As noted above, if an application is unable to act on a message from a trigger because the application is not running, the framework may enable the application act on the message by initiating execution of the application. In that regard, after installing email application 210c, the framework may execute the application and notify it that a trigger associated with the application has occurred.
The installation of an associated program may occur automatically in response to a trigger without requiring the user to take any additional action. For instance, from a user's perspective, device 130 may respond to a new email in the exact same way as device 120 in spite of the fact that device 120 did not include a copy of an email application when the email was received. In other aspects of the system, certain triggers may require user approval of all or certain types of applications before installing a copies of applications onto a device that is different from the device upon which they were originally installed.
Rather than installing an entire associated program in response to a trigger's occurrence, a device may only install the functionality that is particular to processing the trigger. By way of example, associated program identifier 272b may only identify the portion of email application 210a that is necessary for a user to read the email. Device 130 may retrieve the remainder of the email application at a later time, e.g., when the device is idle or when the user attempts to access other functionality of the application.
Various aspects of the system may be idempotent. By way of example, the framework may comprise an API that only stores one copy of a trigger no matter how many times an application attempts to register a trigger with the same condition parameters and associated program identifier. By way of further example, to the extent an associated program may call the framework's API and request a list of the triggers that occurred within a given time period, the API may return only one message per trigger regardless of how often program calls the API's relevant routine. The deletion of triggers may also be idempotent, e.g., a trigger may be deleted multiple times on multiple devices, but the effect of deleting the trigger is the same.
Combinations of the foregoing features may provide particular advantages. By way of example, by automatically synchronizing trigger information across multiple devices, but not downloading and executing associated application until a trigger occurs, the system may provide an individual user with the experience of using multiple devices that function and react as if they are the same device. For instance, as shown in
As these and other variations and combinations of the features discussed above can be utilized without departing from the claimed subject matter, the foregoing description of the embodiments should be taken by way of illustration rather than by way of limitation. The provision of examples (as well as clauses phrased as “such as,” “e.g.”, “including” and the like) should not be interpreted as limiting the claims to the specific examples; rather, the examples are intended to illustrate only some of many possible aspects. Unless expressly stated to the contrary, a “set” of items may contain a single item. References to “based on” and the like means “based at least in part on”.
Brown, Jeffrey, Meschkat, Steffen, Giesing, Kristopher, Gokhale, Alhaad
Patent | Priority | Assignee | Title |
Patent | Priority | Assignee | Title |
10061613, | Sep 23 2016 | Amazon Technologies, Inc | Idempotent task execution in on-demand network code execution systems |
10606660, | Apr 29 2016 | ARCHITECTURE TECHNOLOGY, INC | Planned cloud resource management |
20020194334, | |||
20100011352, | |||
20130055237, | |||
20130326502, | |||
20140359602, | |||
20150113034, | |||
20170140408, | |||
20180088928, | |||
20180316637, | |||
CN101763283, | |||
CN103457994, | |||
CN103514010, | |||
CN106100909, | |||
CN1781118, | |||
CN1892652, | |||
JP2016126419, | |||
SG65350, | |||
WO2015078281, | |||
WO2012105764, |
Executed on | Assignor | Assignee | Conveyance | Frame | Reel | Doc |
Nov 09 2017 | BROWN, JEFFREY | GOOGLE LLC | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 054234 | /0651 | |
Nov 09 2017 | MESCHKAT, STEFFEN | GOOGLE LLC | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 054234 | /0651 | |
Nov 09 2017 | GOKHALE, ALHAAD | GOOGLE LLC | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 054234 | /0651 | |
Dec 19 2017 | GIESING, KRISTOPHER | GOOGLE LLC | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 054234 | /0651 | |
Oct 23 2020 | GOOGLE LLC | (assignment on the face of the patent) | / |
Date | Maintenance Fee Events |
Oct 23 2020 | BIG: Entity status set to Undiscounted (note the period is included in the code). |
Date | Maintenance Schedule |
Nov 14 2026 | 4 years fee payment window open |
May 14 2027 | 6 months grace period start (w surcharge) |
Nov 14 2027 | patent expiry (for year 4) |
Nov 14 2029 | 2 years to revive unintentionally abandoned end. (for year 4) |
Nov 14 2030 | 8 years fee payment window open |
May 14 2031 | 6 months grace period start (w surcharge) |
Nov 14 2031 | patent expiry (for year 8) |
Nov 14 2033 | 2 years to revive unintentionally abandoned end. (for year 8) |
Nov 14 2034 | 12 years fee payment window open |
May 14 2035 | 6 months grace period start (w surcharge) |
Nov 14 2035 | patent expiry (for year 12) |
Nov 14 2037 | 2 years to revive unintentionally abandoned end. (for year 12) |