Dynamic application deployment

In some examples, an electronic device may offload an application to network storage. Subsequently, if a user attempts to execute the application on the electronic device, the application may be executed remotely while the application is downloaded to the electronic device. As one example, a remote computer may use an emulator to execute the application and send application execution data to the electronic device. The user may interact with the remotely executing application while the application is downloaded and reinstalled on the electronic device. Application state information may be obtained from the remotely executing application and used to initiate execution of the application locally on the electronic device. As another example, a web application version of the application may be executed remotely and accessed through a browser on the electronic device while the application is downloaded and reinstalled on the electronic device.

BACKGROUND

People use electronic devices for communication, socializing, entertainment, work, navigation, web browsing, and a variety of other functions. However, electronic devices typically have limited storage space, thus restricting the amount of data that a user may maintain on a particular electronic device. For example, people often keep various different types of digital content items on their electronic devices, such as photographs, videos, music, and so forth, and like to have sufficient free storage space to allow addition of more content items when desired without having to first delete existing content items. Furthermore, people may often have many applications installed on their electronic devices. Some of these applications and associated application data may take up a considerable amount of storage space, while being used relatively infrequently.

SUMMARY

Some implementations herein include techniques and arrangements for managing applications available to a user on an electronic device. For instance, an application management module may remove an application from the electronic device, and may store the application and associated data at a network-accessible storage location. Subsequently, when the user attempts to execute the application on the electronic device, the application may be executed remotely by a service computing device while the application is also downloaded to the electronic device. As one example, the service computing device may use an emulator to execute the application and send application execution data to the electronic device. For instance, the emulator may emulate execution of the application on the electronic device. The user may interact with the remotely executing application while the application is been downloaded and reinstalled on the electronic device. Application state information may be obtained from the remotely executing application and used to initiate execution of the application locally on the electronic device so that local execution may resume at a point at which remote execution left off.

As another example, a web application version of the application may be executed remotely and accessed through a browser on the electronic device while the application is downloaded and reinstalled on the electronic device. As still another example, the application may be divided into individually executable fragments and one or more of the fragments may be downloaded to the electronic device so that execution of the application may begin while either the remainder of the fragments or the original application are downloaded to the electronic device.

DETAILED DESCRIPTION

Some examples herein are directed to management of applications on an electronic device. For instance, an electronic device may dynamically manage the amount of available storage on the electronic device by removing some applications from the storage of the electronic device. An application may be offloaded and maintained at a remote network-accessible storage, such as a cloud storage or other network storage location. As one example, a copy of the offloaded application and associated application data may be stored at the network storage in association with a cloud storage account of a user of the electronic device. Thus, certain applications that are used less frequently and/or that utilize a large amount of storage space may be automatically offloaded to the network storage location. For example, an application may be offloaded based on expiration of a threshold length of time since the last use, based on the application using a threshold amount of storage space, based on a threshold amount of storage space remaining on the electronic device, and/or based on other criteria.

Subsequently, when the user attempts to invoke execution of an application that has been offloaded from the electronic device, the application may be executed on a remote computing device while the application is being downloaded and reinstalled on the electronic device. Accordingly, the user may begin using the application right away through execution on the remote computing device, rather than having to wait for the application to be downloaded and reinstalled on the electronic device. After the application has been downloaded and reinstalled on the electronic device, execution of the application may be transitioned from remote execution to local execution. As part of the transition, the application states between the remote version of the application and the local version of the application may be synchronized so that the local execution of the application on the electronic device may use the synchronized state.

In some examples, the application may be executed on the remote computing device using an emulator that emulates an environment of the user's electronic device. For instance, if the electronic device is a mobile electronic device, the emulator may emulate the mobile electronic device environment, such as by emulating the operating system (OS) version and hardware resources of the particular mobile electronic device. Accordingly, the state of the application that is executed on the remote computing device may be matched to the state of the application that is executed on the electronic device when the application has been reinstalled and is ready to be executed locally on the electronic device.

When transitioning execution of the application from the remote execution on the remote computing device to local execution on the electronic device, the state of the application may be determined explicitly or implicitly. In the explicit technique, a module on the electronic device may request that the application provide application state information for synchronization. For instance, as an example of an explicit technique, the request for the application state information and the receiving of the application state information may be performed by a module of the OS on the electronic device using one or more application programming interfaces (APIs).

Alternatively, as an example of an implicit technique, when the application is ready for local execution on the electronic device, a message may be sent to the remote computing device. In response, a module on the remote computing device may cause the OS on the remote computing device to push the remotely executing application from a foreground process to a background process. Being pushed to a background process typically may cause the application to save (e.g., in an associated application folder) application data corresponding to the current execution state of the application. The saved application data may be sent to the electronic device or may be otherwise used to synchronize the states between the remotely executed version and the local version of the application.

As another example, rather than using an emulator on a remote computing device, a web application version of the application may be executed on a remote computing device while the application is downloaded and reinstalled on the electronic device. For example, some applications have web application versions that can be executed, e.g., through communication with a browser on the user's electronic device. Thus, while the web application is executing on the remote computing device and communicating with the browser on the user's electronic device, the application may be downloaded for installation and local execution on the electronic device. When the application has been downloaded and installed on the electronic device, a module on the electronic device may obtain the application state from the web application, such as through an API or other suitable technique.

As another example, the application may be divided into a plurality of application fragments that enable the electronic device to execute a portion of the application locally before the whole application has been downloaded to the electronic device. For instance, a server or other processing computing device may initially decompose an offloaded application into a plurality of application fragments. Each application fragment may be able to be executed individually without the remainder of the application being present. For example, each application fragment may correspond to one or more user GUIs, such as activities in an ANDROID™ environment or views in an iOS environment. Application assets such as images, text, videos, audio, 3D models, and the like, may be determined for each GUI, and the application assets that are used for a specific GUI may be included within a corresponding fragment when the fragment is sent to the electronic device. The processing computing device may also determine a probable order of execution of the fragments and any dependency relationships between the fragments.

An application can be launched on the user's electronic device by sending one of more fragments of the application to the electronic device without having to send the entire application. Additional fragments may be sent to the electronic device in an order based on the predicted order of use of the fragments and/or dependencies between the fragments. For example, the processing computing device may determine the probability of each fragment being used based on user access patterns determined for a plurality of users of the application. In some implementations, when all fragments of the application have completed downloading to the electronic device, the fragments of the application may be retrieved from the local storage as needed for execution. In other implementations, the non-fragmented version of the application may be downloaded to the electronic device while the fragment is being executed, and local execution may be transitioned from the fragment to the non-fragmented version of the application.

For discussion purposes, some example implementations are described in the environment of offloading and subsequently reinstalling applications on the electronic device for conserving storage space on the electronic device with minimal disruption to the user experience. However, implementations herein are not limited to the particular examples provided, and may be extended to other types of devices, other execution environments, other system architectures, other techniques for remote application execution, other techniques for determining application states, and so forth, as will be apparent to those of skill in the art in light of the disclosure herein.

FIG. 1illustrates an example system100for enabling management of applications according to some implementations. For instance, the system100may enable an electronic device102associated with a user104to communicate over one or more networks106with a network storage108. The electronic device102may be any suitable type of computing device, e.g., mobile, semi-mobile, semi-stationary, or stationary. Some examples of the electronic device102may include smart phones, tablet computing devices, wearable computing devices, body-mounted computing devices, and other types of mobile devices; laptops, netbooks, and other mobile computers or semi-mobile computers; desktop computing devices, terminal computing devices and other semi-stationary or stationary computing devices; augmented reality devices, gaming systems, or any of various other computing devices capable of storing data, sending communications, and performing the functions according to the techniques described herein. Further, while a single user104and associated electronic device102are illustrated in this example, in other examples, there may be a large number of users104, each having one or more respective electronic devices102.

The electronic device102may include an application (app) management module110that executes on the electronic device102. The application management module110may provide application management functionality to the electronic device102for controlling which applications are maintained locally on the electronic device102. In some examples, the application management module110may be one or more modules of an operating system (OS)112on the electronic device102. In other examples, the application management module110may be one or more modules that are separate from the OS112, such as may be included in one or more applications executable on the electronic device102. For instance, the application management module110may have permission for system-level access to user applications and/or data stored on the electronic device102. In addition, while the application management module110is illustrated in this example as residing on the electronic device102, in other examples, at least some of the functionality of the application management module110may reside on another suitable computing device.

The electronic device102may further include local applications and data114, which may include one or more applications116that are installed and maintained locally on the electronic device102. The local applications and data114may further include application data118, which may be application data that is associated with particular applications of the applications116. In some examples, the local applications and data114may further include application metadata120, which may include metadata for both local applications and offloaded applications, as discussed additionally below. In addition, the local applications and data114may include other data122. Examples of other data122may include content items, such as photographs, images, videos, audio recordings, documents, and the like, as well as other types of user data, data used by the OS112, and/or data used by other programs on the electronic device.

In addition, the electronic device102may include a display124for presenting various types of visual information to the user, such as one or more graphic user interfaces (GUIs)126, as well as content items, text, images, or other information. Further, while several components and data of the electronic device102are described and illustrated in this example, numerous other components and data may be included in the electronic device102, as discussed additionally below and/or as will be apparent to those of skill in the art having the benefit of the disclosure herein.

In the illustrated example, the network storage108includes one or more service computing devices128that include a storage management module130. Further, the service computing device128may include, or may be in communication with, one or more storage devices132, such as by direct connection or via the one or more networks106. In some examples, the network storage108may be provided by a service provider. For instance, various service providers may provide commercial cloud storage or other network storage to the public, typically for a monthly or yearly fee based at least in part on the amount of storage space consumed by an individual user. However, implementations herein are not limited to commercial network storage services, and may be extended to other types of network-accessible storage and storage services. As several alternative examples, the network storage108may be a network-attached storage (NAS), a server computing device, a desktop computing device, or the like, such as may be maintained by the user104or other entity.

The one or more networks106can include any suitable network, including a wide area network, such as the Internet; a local area network, such as an intranet; a wireless network, such as a cellular network; a local wireless network, such as Wi-Fi; close-range wireless communications, such as BLUETOOTH®; a wired network, such as fiber or Ethernet; or any other suitable network, or any combination thereof. Accordingly, the one or more networks106may include both wired and/or wireless communication technologies. Components used for such communication technologies can depend at least in part upon the type of network and/or the environment selected. Protocols for communicating over such networks are well known and will not be discussed herein in detail. Accordingly, the electronic device102and the service computing device128are able to communicate over the one or more networks106using wired or wireless connections, and combinations thereof.

The storage management module130on the service computing device128may manage the storage of remote applications and data134of the user104stored on the storage devices132, and may control access to the remote applications and data134. In the case that the network storage108is provided by a commercial storage service, the storage devices132may be enterprise level storage arrays, such as may be maintained in a storage area network, a NAS cluster, a RAID (redundant array of independent disks) array, a distributed storage node array, or various other types of storage configurations. The storage devices132may store offloaded applications136that have been offloaded from the electronic device102, as well as associated application data138. In addition, the storage devices132may store other data140of the user, such as backup versions or original versions of the user's content items and/or various other user data. In addition, the storage devices132may store, at least temporarily, application state information142for the offloaded applications136, such as when transitioning from remote execution of an application to execution of the application on the electronic device102.

In some implementations, the application management module110may dynamically manage the amount of available storage on the electronic device102by offloading some applications from the electronic device102. Thus, the application management module110may create space in the local storage by moving one or more applications116off the electronic device102for storage at the network storage108. In some cases, the application management module110may automatically offload the applications116to the network storage108, such as based on one or more user preferences or various other criteria. In other cases, prior to moving one or more applications116off the electronic device102, the application management module110may present the user104with a list of applications to be offloaded and the user104may approve, disapprove, or otherwise determine the applications to be offloaded from the electronic device102.

The application management module110may take into consideration one or more criteria when determining which applications116to offload or to recommend for offloading. For instance, based on one or more user data usage models, priority rules, expressed user preferences, or other application ranking techniques, the application management module110may determine which applications116are likely to be used by the user104in the near future and which applications116may be offloaded. As one example, the application management module110may rank the applications116, based at least in part on how recently each application has been used, how often each application is used, how much storage space each application uses, or a combination thereof. For instance, certain applications that are used less frequently and/or that utilize a large amount of storage space may be automatically offloaded to the network storage location or recommended for offloading. Thus, an application may be offloaded based on expiration of a threshold length of time since the last use, based on how frequently the application has been used over a period of time, based on the application using a threshold amount of storage space, based on the amount of storage space remaining on the electronic device falling below a threshold level, or the like.

As another example, the application management module110may recommend or otherwise select for offloading one or more applications116based on upcoming events or lack thereof. For instance, if a user typically uses certain applications on a flight, during travel, or during other events in similar event categories, the application management module110may recommend that those applications116and associated application data118be offloaded if the user104does not have any upcoming travel scheduled.

As indicated at144, a selected application116and associated application data118may be offloaded to the network storage108. In some cases, the offloading may take place when the electronic device is otherwise not in use, such as when the electronic device102is in a standby mode, connected to Wi-Fi, and plugged in to a power source. Some metadata120corresponding to the offloaded application may be maintained at the electronic device102, such as for maintaining user settings, an application icon, and/or other information about the offloaded application.

The storage management module130at the network storage108may receive an offloaded application136and the associated application data138and may store these in association with a user account associated with the user104and/or the electronic device102. As one example, a copy of the application and associated application data may be stored at the network storage location in association with a cloud storage account of a user of the electronic device. In some cases, at least some metadata associated with the offloaded application136, such as user settings for the application, may also be stored at the network storage108, such as with the application data138. Thus, when the offloaded application136is executed remotely, the user settings may be applied.

Further, in some examples, when an application is offloaded, the storage management module130may determine settings for an emulator146at the service computing device128that may be used to execute the offloaded application136. For instance, the storage management module130may determine the processing capabilities of the electronic device102, such as by determining a device type of the electronic device, a manufacturer or brand of the electronic device, a model of the electronic device, a processor of the electronic device (e.g., processor type or processing capability), a memory size of the electronic device, an operating system of the electronic device, and/or other types of device information, device resources, and the like. Based on this determination, the storage management module130may determine that a suitable emulator146is available for executing the offloaded application136in a manner that will emulate execution of the application on the electronic device, at least in a manner similar enough so that application state information produced using the emulator can be used by the application when executed locally on the electronic device102. For instance, the application state information may enable the application executed on the electronic device102to resume execution at a point at, or near to, that at which remote execution of the application is suspended.

In other examples, rather than using the emulator146, the storage management module130may determine whether there is a web application that corresponds to the offloaded application136. For instance, the application management module110may determine a link to the web application at a web server (not shown inFIG. 1) or other network location at which the web application is hosted. In other examples, where permitted, the storage management module130may obtain a copy of the web application for local execution on the service computing device128. Thus, the link to the web application and/or the downloaded web application obtained from the web server may be maintained at the service computing device128and/or on the storage devices132as web application information148.

Subsequently, when the user104of the electronic device102attempts to execute an offloaded application136, the application management module110may request download of the offloaded application136. As indicated at150, the offloaded application and the associated application data may be sent to the electronic device102for reinstallation on the electronic device102. Furthermore, while the application and application data are being downloaded to, and reinstalled on, the electronic device102, the application may be executed remotely, e.g., on the service computing device128, either through execution of the application on the emulator146, or by execution of the web application version through use of the web application information148. Accordingly, the user may begin using the application right away, rather than having to wait for the application to be downloaded and reinstalled on the electronic device102.

After the application has been downloaded and reinstalled on the electronic device102, execution of the application may be transitioned from remote execution to local execution. As part of the transition, the application states between the remote version and the local version of the application may be synchronized. For instance, application state information152may be sent by the service computing device128to the electronic device102. In some cases, one or more APIs may be used to obtain and communicate the application state information152to the application management module110. In other cases, the storage management module130may determine the application state information152and may send this application state information152to the electronic device102. When the application management module110has received the application state information152, local execution of the application on the electronic device102may be performed using the application state information152to start local execution of the program at a point at which the remote execution left off.

FIG. 2illustrates an enlarged example view of the electronic device102with an example GUI200presented on the display124according to some implementations. The GUI200may be presented to enable the user104to execute, access, or otherwise select a particular application of a plurality of applications. In the illustrated example, the GUI200presents a first plurality of application icons202that may represent applications that are currently installed on the electronic device102, such as icons202(1)-202(12), which may represent twelve respective applications that are installed on the electronic device102. Furthermore, the GUI200presents a second plurality of application icons204that may represent applications that have been offloaded to the network storage. In this example, there are four application icons204(1)-204(4) that represent four applications that have been offloaded to the network storage.

In some cases, following offloading of a particular application to the network storage, the icon204representing the offloaded application may remain in the GUI200to enable the user to select the offloaded application for execution. As one example, the application icon204may be changed to indicate that the application has been moved to the network storage, such as by placing a cloud symbol on the icon, graying out the icon, showing the icon with dashed or broken lines, or the like. In the illustrated example, the icons204(1)-204(4) are presented with dashed lines to indicate to the user that the corresponding applications have been offloaded. In other examples, the icons204representing the offloaded applications may be moved to a different location in the GUI200, such as to a folder for applications that have been offloaded from the electronic device102. As another example, the application icons204may be unchanged from the application icons202so that it is not readily apparent to the user that a particular application has been offloaded to the network storage.

In some implementations, one or more additional GUIs (not shown inFIG. 2) may enable the user to interact with the electronic device102for additional application management on the electronic device102. For instance, the user may have an opportunity to select particular applications to be offloaded from the electronic device102. As one example, a GUI may present a plurality of applications recommended for offloading in a ranked order, such as based on infrequency of use, amount of storage space consumed, or other criteria, as enumerated above. For instance, a least frequently used application may be listed first, a next least frequently used application may be listed second, and so forth. Further, in some examples, the applications recommended or selected for offloading may consume an amount of storage space in excess of a threshold amount so that it is worthwhile to offload the applications.

In other examples, rather than presenting recommended applications for user selection and/or approval, the application management module may proceed with offloading recommended applications according the ranked order. As still another example, the electronic device may automatically and dynamically offload an application when a threshold minimum level of remaining free storage space is reached. For example, suppose that the user is using the electronic device to take photographs or video. Further, suppose that the electronic device102determines that that the user is close to running out of storage space on the electronic device102, e.g., has arrived at a threshold amount of remaining storage capacity. If the electronic device102is able to communicate with the network storage, the electronic device102may proceed with offloading one or more applications, such as by a background process, based on the ranking criteria discussed above or other suitable criteria.

Further, in some examples, the user may specify how long applications are to be retained at the remote storage before being permanently deleted. For example, if the application has been at the remote storage for a year (or other specified time) after offloading, and has not been used by the user during that time, the storage management module or the application management module may inform the user that the application will be permanently deleted and/or may proceed with permanently deleting the application and associated application data from the network storage and the electronic device102.

In the case that the display124is a touchscreen, the user may be able to use a finger206to scroll the GUI200to view other application icons202and/or204. Additionally, the GUI200may include content item icons, system controls, folders, and the like (not shown inFIG. 2). Further, the user may use the finger206to tap on or otherwise select a particular application icon202or204to invoke execution of the corresponding application. Thus, in the illustrated example, suppose that the user has selected application icon204(3), which corresponds to a particular offloaded application. In response, the particular offloaded application may be executed such as described below with respect toFIGS. 3-5.

FIG. 3illustrates an example system300that may correspond, at least in part, to the system100discussed above according to some implementations. For instance, the system300may enable execution of an offloaded application remotely while the offloaded application is being downloaded and installed on the electronic device for local execution. In this example, suppose that the user has invoked execution of an application on the electronic device102, such as by tapping on an icon as discussed above with respect toFIG. 2, or using any other suitable technique for initiating execution of an application that has been offloaded from the electronic device102. In response, the application management module110may send a request302to the service computing device128for the corresponding offloaded application136to be sent to the electronic device102. In response, as indicated at304, the storage management module130may download or otherwise send the offloaded application136and the associated application data138for the offloaded application136to the electronic device102.

In addition, the storage management module130may cause an appropriate emulator146to begin execution of the offloaded application136. In some examples, the storage management module130may determine the type of electronic device102from which the request302for the application136is received, the device resources, OS version, etc., and may select the appropriate emulator146to execute the offloaded application136. Thus, as indicated at306, the application136may be executed using the emulator146to produce application execution data308. Depending on the type and properties of the particular application136, the application execution data308may include one or more GUIs, images, text, videos, 3D models, data structures, and so forth. The application execution data308may be sent to the electronic device102for presentation in an application interface310on the display128of the electronic device102.

In some implementations, a remote desktop protocol or other remote application protocol may be used between the storage management module130and the application management module110for communicating and presenting the application execution data308. Further, user inputs and/or device inputs312may be sent by the application management module110from the electronic device102to the service computing device128, such as via the remote desktop protocol or other remote application protocol. Accordingly, the user may interact with the application interface310in a manner similar to interacting with the application as if the application were executing on the electronic device102.

After the application has completed being downloaded to the electronic device, the application management module110may install the application locally on the electronic device102, as indicated at314. Following installation of the application314on the electronic device102, the application management module110may initiate a transition from remote execution of the application306at the service computing device128to local execution of the application314on the electronic device102. The timing for the transition may depend in part on the nature of the application314. For example, if the application is a game with which the user is constantly interacting, the transition may wait until the user reaches a natural break, e.g., finishing a level, or the like. On the other hand, if the application has a user interface in which the user experience would not be affected much by a pause in function, then the transition may begin after the installation of the application314on the electronic device has completed. In some examples, the user may be presented with an option to approve or disapprove transition to local execution of the application.

In some examples, when transition to local execution of the application314is ready to begin, the application management module110may send a communication316to the storage management module130to request application state information. In response, in some cases, the storage management module130may obtain and send application state information318indicating the current state of the application306executing on the emulator146. The storage management module130may send the application state information318to the application management module110, and the application management module110may use the received application state information318to start execution of the application314at the state in which execution left off at the service computing device128. In some examples, the application state information may be first saved to the storage devices132by the application306on the emulator as the application state information142. In other examples, such as in the case that an API is used by the application management module110to obtain the application state, the application state information318may be sent to the application management module110by either the application306or the storage management module130, depending on the configuration of the API.

The content of the application state information318depends at least in part on the particular application that is being executed. Some examples of application state information318may include values for various variables used by the applications306and314, values for most recent application settings and graphic user interface configurations, values for recently received user inputs or other user selections, and so forth. Thus, the state of the application may include the stored information to which the application has access at a point in time, essentially creating a snapshot of the application at the point in time.

In some cases, the application state information318may be obtained implicitly from the application306executed by the emulator146by causing the application306to save its current state. For instance, some applications are configured to save their current states to an application folder or other persistent location when the applications are sent to background processing. For example, application development frameworks for mobile electronic devices may require that application developers cause certain functions to take place in response to certain conditions, such as causing an application to save its state to a persistent memory location when the application is sent to the background. As one example, the use of a “moveTaskToBack” command (or any other suitable OS command that has a similar effect of moving a process to background processing) may cause the application306to save its current state information to a persistent memory location, e.g., as application state information142associated with the particular application and which may be saved to the storage devices132. This application state information142may be retrieved subsequently from the application folder or other persistent memory location and sent to the electronic device102as the application state information318.

Alternatively, as another example, the application306may be configured by the application developers to save its current state in response to receiving an explicit “save state” command from the storage management module130, the emulator146, or other module that is controlling the execution of the application306on the service computing device128. For example, an application developer may configure the application306to respond to receipt of a save state command by saving the application state information of the application306to a specified location, such as to the storage devices132as application state information142. The application state information142may then be retrieved from the specified location and sent to the electronic device102as the application state information318. In some examples, an API may be configured to obtain the application state information318from the application306on the service computing device128. For instance, the application management module110may use the API to request the state information in response to a user command or module instruction to launch the application314locally on the electronic device102. In some examples, the application management module110may send a save state command to the remotely executing application306, and the application306may send the saved state information318to the electronic device102. In other examples, the application management module110may communicate with the storage management module130and the storage management module130may send the save state instruction to the application306. The storage management module130may then send the saved application state information318to the electronic device102.

When the application state information318has been received by the electronic device102, the application management module110may cause the application314on the electronic device102to start up using the application state information318. For instance, the application314may be started using the saved variables, settings, and GUIs that were in place in the application306at a point at which execution of the application306was suspended on the emulator306. Accordingly, the user may experience a brief delay while the application314on the electronic device102starts execution, but the application314is restored to the state of the application306so that the user may begin using the application314at the point at which execution left off on the remotely executing application306.

In addition, in some cases, execution of the application306may be suspended and one of the storage management module130, the application management module110, or the application306may capture a screen shot of the most recent application GUI of the application306, e.g., at the point at which execution of the application306is suspended on the emulator146. The screen shot may be presented on the display128of the electronic device102while the application314begins execution locally on the electronic device102. For instance, in some types of applications, the user may not notice the transition from remote execution to local execution since the application interface310presented to the user may appear to remain unchanged during the transition. In still other cases, a screen shot is not presented, and instead the user may view the usual start screen for the application as the application314starts on the electronic device102and uses the application state information318to resume the application state saved from the remote application306.

Further, in some examples, if the local application314fails to initiate properly, the user may continue using the remote application306until the local application314starts properly on the electronic device102. Accordingly, in some instances, execution of the application306on the emulator146is not suspended until the application management module110sends a message to the storage management module130indicating that the application314has started correctly on the electronic device102and that the locally executing application314is now being used by the user, rather than the remotely executing application306. Thus, the application management module110may control the transition by enabling presentation of the application execution data308, e.g., via the remote application protocol, until the application314has fully started on the electronic device102, and may then begin presenting the application interface of the locally executing application314instead.

FIG. 4illustrates an example system400that may correspond, at least in part, to the system100discussed above according to some implementations. For instance, the system400may enable remote execution of a web application version of an application while the application is downloaded and installed for local execution on the electronic device102. In this example, suppose that the user has invoked execution of an application on the electronic device102, such as by tapping on an icon as discussed above with respect toFIG. 2, or using any other suitable technique for initiating execution of an offloaded application that has been offloaded from the electronic device102. In response, the application management module110may send a request402for the application to the service computing device128requesting that the corresponding offloaded application136to be sent to the electronic device102. In response, as indicated at404, the storage management module130may download or otherwise send the offloaded application136and the associated application data138for the offloaded application136to the electronic device102.

In addition, as indicated at406, the storage management module130may send, to the electronic device102, the web application information148previously determined for the particular offloaded application136. For instance, as discussed above, the storage management module130may determine a web application408that corresponds to the offloaded application136. As one example, the web application408may be available on a web server computing device410accessible over the one or more networks106. When the offloaded application136is initially offloaded from the electronic device102to the network storage108, the storage management module130may search for a corresponding web application and save the web application408and/or a link to the web application408as the web application information148associated with the offloaded application136. For instance, the storage management module130may store a link to the web application408, such as a URL (uniform resource locator) of the web application408, or the like. Alternatively, the storage management module130may download the web application408to the service computing device128prior to receiving the request402for the offloaded application136from the electronic device102. Accordingly, in some examples the web application408may be executed at the web server computing device410, while in other examples, the web application408may be executed at the service computing device128.

The web application408may typically be executed through a browser412on the electronic device102. For instance, the web application408may be created using a browser-supported programming language, such as one or more of HTML, JavaScript, CSS (cascading style sheets), or the like. Furthermore, the browser410may render the web application GUIs and other application information based on application execution data414received from remote execution of the web application408at either the web server computing device410or the service computing device128.

When the user wants to use the particular application136that has been offloaded, the application management module110on the electronic device102may receive the web application information406from the service computing device128, open the browser412, and direct the browser412to the web application at the service computing device128or at the web server computing device410. As the web application408executes, the application execution data414is sent to the browser412and the browser renders an application interface416on the display128of the electronic device102. The user and/or the electronic device102may interact with the application interface416, and the resulting local inputs418may be sent by the browser412to the web application408as application inputs, which may result in additional application execution data414being sent to the browser412by the web application408.

After the offloaded application136and associated application data138have finished downloading to the electronic device102, the application management module110may install the application on the electronic device102as a local application420on the device. After the application420has been installed on the electronic device102, the application management module110may be ready to transition from execution of the web application408to local execution of the application420on the electronic device102. Accordingly, the application management module110may send a request422for application state information. As discussed above, the application management module110may use an appropriate API or other suitable technique for obtaining the application state information from the web application408. In some examples, the web application408may be designed by developers to be able to provide current application state information424in response to a request submitted via an API or other request.

One of the web application408, the web server410, or the service computing device128may send the application state information424to the electronic device102, depending at least in part on how the web application408is configured and/or where the web application408is executed. When the application state information424has been received by the electronic device102, the application management module110may cause the application420on the electronic device102to start up using the application state information424. For instance, the application420may be started using the saved variables, settings, and GUIs that were in place in the web application408when the state information was obtained from the web application408. Accordingly, the user may experience a brief delay while the application420on the electronic device102starts execution, but the application420may be started according to the state of the web application408so that the user may begin using the application420, e.g., at a point at which execution left off on the web application408.

In addition, in some cases, execution of the web application408may be suspended and the storage management module130, the application management module110, or the browser412may capture a screen shot of the most recent application GUI of the web application408, e.g., at the point at which execution of the web application408is suspended. The screen shot may be presented on the display128of the electronic device102while the application420begins execution locally on the electronic device102. For instance, in some types of applications, the user may not notice the transition from web application execution to local execution since the application interface416presented to the user may appear to remain unchanged during the transition. In still other cases, a screen shot is not presented, and instead the user may view the usual start screen for the application420as the application420starts on the electronic device102and uses the application state information424to resume the application state obtained from the web application408.

Further, such as in case that the local application420fails to initiate properly, the user may continue using the web application408until the local application420starts properly on the electronic device102. Accordingly, in some instances, execution of the web application408is not suspended until the application management module110closes the browser412and/or sends a message to the web application408indicating that execution of the web application should cease, such as when the locally executing application420is executing locally and ready to be used. Thus, the application management module110may control the transition by enabling presentation of the application execution data414in browser412until the application420has started on the electronic device102, and may then close the browser412and begin presenting the application interface of the locally executing application420instead.

FIG. 5illustrates an example system500that may correspond, at least in part, to the system100discussed above according to some implementations. For instance, the system500may enable fragmenting of an application and downloading individual fragments of the application that are predicted to be used, while the remainder of the application is being downloaded and installed for local execution on the electronic device102. In this example, suppose that the user has invoked execution of an offloaded application136on the electronic device102, such as by tapping on an icon as discussed above with respect toFIG. 2, or using any other suitable technique for initiating execution of the application136that has been offloaded from the electronic device102. In response, the application management module110may send a request502for the offloaded application136to the service computing device128requesting that the corresponding offloaded application136be sent to the electronic device102. In response, as indicated at504, the storage management module130may download or otherwise send the offloaded application136and the associated application data138for the offloaded application136to the electronic device102.

In addition, as indicated at506, the storage management module130may send, to the electronic device102one or more application fragments506. As indicated at508, the electronic device102may receive and execute the one or more application fragments while the application and associated application data is being downloaded to the electronic device102. Accordingly, the execution of the application fragments508may generate an application interface510that may be interacted with by the user while the remainder of the application and application data is being downloaded. Additional fragments may be downloaded to the electronic device102based on the likelihood of being the next invoked fragment of the application. Thus, in some cases, the fragmenting of the application may change the way the application is organized so that some portions of the application can be executed without all of the application being present.

As one example, when the application136is initially offloaded to the network storage108, an application fragmenting module512may fragment the application into a plurality of application fragments that may be executed individually and independently of each other by the electronic device102to enable execution of a portion of the application locally before the whole application has been downloaded to the electronic device102. For instance, the application fragmenting module512may decompose the offloaded application136into a plurality of application fragments to generate a fragmented application514. In some examples, each application fragment may correspond to one or more GUIs, such as activities in an ANDROID™ environment or views in an iOS environment. Application resources or other application assets such as images, texts, videos, audio, 3D models, and the like, may be determined for each GUI, and the application assets to be used for a specific GUI may be included within a corresponding fragment when the fragment is sent to the electronic device102. The application fragmenting module512may also determine any dependency relationships between the fragments. In some examples the application fragmenting module512may be part of the storage management module130while in other examples, the application fragmenting module512may be separate from the storage management module130.

When decomposing the offloaded application136into application fragments, the application fragmenting module512can employ the emulator146to execute the offloaded application136and determine the GUIs and associated application assets for each fragment of the offloaded application136. Additionally, or alternatively, the offloaded application136may be decomposed into fragments using crowdsourced device processing. For instance, a plurality of electronic devices102associated with a plurality of users that have the application136stored locally can execute the application136and determine the user interfaces and resources for each fragment of the application136. Furthermore, this technique may also be used to determine which fragments of the application136are most likely to be used first by the users, which fragments are most likely to be used next by the users, the probability of use of each fragment during the first several minutes of use of the application, and so forth, to determine the probabilities that particular fragments will be used and the order of use of each fragment of the application. The fragmenting information collected from the user devices can be provided to the application fragmenting module512, which may use the fragmenting information to decompose the application into fragments, and to assign an order in which the fragments may be downloaded to the electronic device102in response to receiving the application request502.

Accordingly, the offloaded application136can be launched on the user's electronic device102by sending one of more application fragments506to the electronic device102for execution while the application and associated application data is downloaded to the electronic device102. Additional fragments may be sent to the electronic device102in an order based on predicted order of use of the fragments determined as discussed above, such as based on access patterns of a plurality of users of the application, and dependency of fragments on previously executed fragments. As one example, if the user is currently active on fragment4, and if either fragments5or6are typically accessed immediately after fragment4, then fragments5and6may be sent next to the electronic device102.

In some examples, the entire fragmented application514may be sent to the electronic device102and installed as the application516on the device for local execution. In such a case, a transition following completion of downloading of the fragment application514may not be necessary. Alternatively, the original offloaded application136may be sent to the electronic device102, and when the offloaded application136has been downloaded and reinstalled as the application516on the device102, the application management module110may transition from execution of the application fragments to execution of the application516on the device. In this case, the application management module110may obtain the application state information from the currently executing application fragment508. As one example, the application state information may be obtained by pushing the executing application fragment508into the background as a background process, as discussed above. This may cause the executing application fragment508to save its current application state. The application management module110may then use the saved application state when starting up the application516on the electronic device102. Further, similar to the other examples discussed above, a screenshot may be presented to the user in some examples when transitioning from execution of the application fragments to execution of the application516on the device.

Additionally, in the case that the non-fragmented version of the application is downloaded to the electronic device102, it may not be necessary for the application fragmenting module512to fully fragment the entire application. For example, the application fragmenting module512may only fragment the application sufficiently to generate several fragments that are sufficient for a minute or two of execution until the original offloaded application can be downloaded and reinstalled on the electronic device102.

As still another alternative, following fragmentation of the offloaded application136into a plurality of fragments, the storage management module130may send one or more of the application fragments to the electronic device102in advance of receiving the request502for the application. For example, the fragments may be sufficiently small (e.g., smaller than a threshold storage size) so as to not use a large amount of storage capacity, as compared with the entire offloaded application. Accordingly, when the user attempts to invoke the application on the electronic device102, one or more of the application fragments508may already be present on the electronic device102to enable the application fragment(s) to be executed immediately rather than having to be downloaded from the service computing device128. As another alternative, in the web application examples discussed above with respect toFIG. 4, the web application408may be executed by fragmenting the web application408based on activity and executing the activities through the browser412, and the first several fragments predicted to be used by a user may be maintained at the service computing device128.

FIG. 6is a flow diagram illustrating an example process600for application management according to some implementations. In some examples, the process may be executed by the service computing device128or by another suitable computing device.

At602, the computing device receives an application and associated application data from an electronic device. For instance, the electronic device may offload the application and application data to the network storage to increase storage availability on the electronic device.

At604, the computing device stores the application and application data in association with a user account. For example, the user and/or the electronic device may be associated with a user account, such as a cloud storage account or the like.

At606, the computing device may determine at least one of an emulator or a web application. In the case of an emulator, the computing device may determine that an emulator is available that can execute the offloaded application in an environment that is similar to that of the electronic device102. In the case of a web application, the computing device may search for a web application version of the offloaded application, and may determine a link to the web application, or may download the web application for execution at the computing device.

At608, the computing device may receive a request from the electronic device for the application. For example, the user may attempt to execute the application on the electronic device, which may cause the electronic device to request the offloaded application from the computing device.

At610, the computing device may execute the application on the emulator or executes the web application. As one example, the computing device may use the emulator to execute the application. In some cases, the computing device may first ascertain device information about the electronic device making the request to ensure that an appropriate emulator is used. As another example, the computing device may execute the web application, which may communicate with a browser on the electronic device. As still another example, the computing device may send network location information to the electronic device to provide the URL or other network location of the web application to thereby cause execution of the web application on a web server computing device.

At612, the computing device may send, to the electronic device, the application and associated application data. For instance, the offloaded application and associated data may be downloaded to the electronic device.

At614, the computing device may send execution data to the electronic device while at least a portion of the application or the application data is being downloaded to the electronic device. For example, the electronic device may receive the application execution data and may present one or more GUIs with which the user may interact while the application is being downloaded to the electronic device.

At616, the computing device may receive a request for application state information. Following download of the application to the electronic device, and installation of the application, the application may be ready for transition from remote execution to local execution. Accordingly, a request may be received for the application state of the remotely executing application.

At618, the computing device may obtain the application state information from the application. In some examples, the computing device may obtain the application state explicitly, such as by using a save state command. In other examples, the state may be obtained implicitly, such as by sending the application to background processing.

At620, the computing device may send the application state information to the electronic device. Further, in some examples, the computing device may suspend or otherwise end execution of the application after obtaining the application state information.

FIG. 7is a flow diagram illustrating an example process700for application management according to some implementations. In some examples, the process may be executed by the electronic device102or by another suitable computing device.

At702, the electronic device may send an application to a network storage. For example, the electronic device may determine to send the application to a computing device at the network storage based at least in part on at least one of: an amount of time since the application was last accessed on the electronic device; a frequency with which the application was accessed over a period of time; an amount of storage space consumed by the application; or an amount of available storage space remaining on the electronic device.

At704, the electronic device may receive, via a user interface, a selection of the application. For example, the user may attempt to invoke execution of the offloaded application on the electronic device.

At706, the electronic device may send a request to the network storage for the application. Upon determining that the application has been offloaded, the electronic device may request download of the application to the electronic device from the network storage.

At708, the electronic device may receive, over the network, application execution data corresponding to remote execution of the application. For example, the request may cause the application to be executed remotely, e.g., on an emulator or via a web application version of the application. Thus, the electronic device may receive application execution data while the application is also being downloaded to the electronic device.

At710, the electronic device may present at least a portion of the application execution data on the display. For instance, the application execution data received from the remotely executing application may include one or more GUIs or other application data that may be presented on the display and with which the user may interact. In some examples, a remote desktop protocol or other remote application protocol may be used to present the application execution data.

At712, the electronic device may receive the application from the network storage and install the application on the electronic device.

At714, the electronic device may request application state information. When the application has been installed locally, the execution of the application may be ready for transition from remote execution to local execution.

At716, the electronic device may initiate local execution of the application using the application state information. Upon receipt of the application state information, the electronic device may use the state information when starting the application locally to cause the local application to resume execution at a state at which the remotely executing application saved the state information.

FIG. 8is a flow diagram illustrating an example process800for application management according to some implementations. In some examples, the process may be executed by the service computing device128or by another suitable computing device.

At802, the computing device may receive an application from an electronic device. For instance, the electronic device may offload the application and application data to the network storage to increase storage availability on the electronic device.

At804, the computing device may determine a plurality of fragments of the application able to be executed independently on the electronic device. For example, the computing device may decompose the application, such as by running the application on an emulator, and/or by collecting data from a plurality of users of the application to determine particular user interfaces of the application that are most likely to be presented or otherwise used first by a user.

At806, the computing device may receive, from the electronic device, a request for the application.

At808, the computing device may send a first fragment of the plurality of fragments to the electronic device for execution on the electronic device. For instance, the fragment may enable the electronic device to present a first GUI to the user that would typically be presented if the application were to be opened normally on the electronic device.

At810, the computing device may send, to the electronic device, at least one of: the application; or remaining fragments of the plurality of fragments. In some cases, the entire application may be fragmented and the fragments may be downloaded to the electronic device. In other cases, only a portion of the application might be fragmented, and the non-fragmented version of the application may be downloaded to the electronic device. In the second case, execution of the application from the fragments to the non-fragmented version may include a transition and matching the execution states, as discussed above.

The example processes described herein are only examples of processes provided for discussion purposes. Numerous other variations will be apparent to those of skill in the art in light of the disclosure herein. Further, while the disclosure herein sets forth several examples of suitable frameworks, architectures and environments for executing the processes, implementations herein are not limited to the particular examples shown and discussed. Furthermore, this disclosure provides various example implementations, as described and as illustrated in the drawings. However, this disclosure is not limited to the implementations described and illustrated herein, but can extend to other implementations, as would be known or as would become known to those skilled in the art.

FIG. 9illustrates select example components of the electronic device102that may implement the functionality described above according to some examples. The electronic device102may be any of a number of different types of computing devices, as enumerated above. In the example ofFIG. 9, the electronic device102includes a plurality of components, such as at least one processor902, one or more computer-readable media904, the one or more communication interfaces906, and one or more input/output (I/O) devices908. Each processor902may itself comprise one or more processors or processing cores. For example, the processor902can be implemented as one or more microprocessors, microcomputers, microcontrollers, digital signal processors, central processing units, state machines, logic circuitries, and/or any devices that manipulate signals based on operational instructions. In some cases, the processor902may be one or more hardware processors and/or logic circuits of any suitable type specifically programmed or configured to execute the algorithms and processes described herein. The processor902can be configured to fetch and execute computer-readable processor-executable instructions stored in the computer-readable media904.

Depending on the configuration of the electronic device102, the computer-readable media904may be an example of tangible non-transitory computer storage media and may include volatile and nonvolatile memory and/or removable and non-removable media implemented in any type of technology for storage of information such as computer-readable instructions, data structures, program modules, or other data. The computer-readable media904may include, but is not limited to, RAM, ROM, EEPROM, flash memory, solid-state storage, magnetic disk storage, optical storage, and/or other computer-readable media technology. Further, in some cases, the electronic device102may access external storage, such as RAID storage systems, storage arrays, network attached storage, storage area networks, cloud storage, or any other medium that can be used to store information and that can be accessed by the processor902directly or through another computing device or network. Accordingly, the computer-readable media904may be computer storage media able to store instructions, modules, or components that may be executed by the processor902. Further, when mentioned, non-transitory computer-readable media exclude media such as energy, carrier signals, electromagnetic waves, and signals per se.

The computer-readable media904may be used to store and maintain any number of functional components that are executable by the processor902. In some implementations, these functional components comprise instructions or programs that are executable by the processor902and that, when executed, implement operational logic for performing the actions attributed above to the electronic device102. Functional components of the electronic device102stored in the computer-readable media904may include the application management module110and the browser412, as discussed above. Additional functional components may include the operating system112for controlling and managing various functions of the electronic device102and for enabling basic user interactions with the electronic device102. In some examples, the application management module110may be one or more modules of the operating system112, while in other examples, some or all of these modules may be separate from the operating system112.

The computer-readable media904may store the local application data, such as application(s)116, application data118, application metadata120, and other data122. In addition, depending on the type of the electronic device102, the computer-readable media904may also store other functional components and data, such as other modules and data910, which may include applications, programs, drivers, etc., and other data used or generated by the functional components. Further, the electronic device102may include many other logical, programmatic and physical components, of which those described are merely examples that are related to the discussion herein.

The communication interface(s)906may include one or more interfaces and hardware components for enabling communication with various other devices, such as over the network(s)106or directly. For example, communication interface(s)906may enable communication through one or more of the Internet, cable networks, cellular networks, wireless networks (e.g., Wi-Fi) and wired networks, as well as close-range communications such as BLUETOOTH®, and the like, as additionally enumerated elsewhere herein.

FIG. 9further illustrates that the electronic device102may include the display124. Depending on the type of computing device used as the electronic device102, the display124may employ any suitable display technology. For example, the display124may be a liquid crystal display, a plasma display, a light emitting diode display, an OLED (organic light-emitting diode) display, an electronic paper display, or any other suitable type of display able to present digital content thereon. In some examples, the display124may have a touch sensor (not shown) associated with the display124to provide a touchscreen display configured to receive touch inputs for enabling interaction with a GUI presented on the display124. Accordingly, implementations herein are not limited to any particular display technology. Alternatively, in some examples, the electronic device102may not include a display.

The electronic device102may further include sensors912, such as a GPS device, an accelerometer, gyroscope, compass, proximity sensor, and the like. The electronic device102may further include one or more other I/O devices908. The I/O devices908may include speakers, a microphone, a camera, and various user controls (e.g., buttons, a joystick, a keyboard, a keypad, etc.), a haptic output device, and so forth. Additionally, the electronic device102may include various other components that are not shown, examples of which may include removable storage, a power source, such as a battery and power control unit, and so forth.

FIG. 10illustrates select components of the one or more service computing device(s)128that may be used to implement some functionality of the application management service described herein. In some examples, the service computing device128may be operated by a service provider that provides the network storage service, and may include one or more servers or other types of computing devices that may be embodied in any number of ways. For instance, in the case of a server, the modules, other functional components, and data storage (e.g., storage devices132) may be implemented on a single server, a cluster of servers, a server farm or data center, a cloud-hosted computing service, a cloud-hosted storage service, and so forth, although other computer architectures may additionally or alternatively be used.

Further, while the figures illustrate the components and data of the service computing device128as being present in a single location, these components and data may alternatively be distributed across different computing devices and different locations in any manner. Consequently, the functions may be implemented by one or more service computing devices, with the various functionality described above distributed in various ways across the different computing devices. Multiple service computing devices128may be located together or separately, and organized, for example, as virtual servers, server banks, and/or server farms. The described functionality may be provided by the servers of a single entity or enterprise, or may be provided by the servers and/or services of multiple different buyers or enterprises.

In the illustrated example, each service computing device128may include, or may have associated therewith, one or more processors1002, one or more computer-readable media1004, and one or more communication interfaces1006. Each processor1002may be a single processing unit or a number of processing units, and may include single or multiple computing units or multiple processing cores. The processor(s)1002can be implemented as one or more microprocessors, microcomputers, microcontrollers, digital signal processors, central processing units, state machines, logic circuitries, and/or any devices that manipulate signals based on operational instructions. For instance, the processor(s)1002may be one or more hardware processors and/or logic circuits of any suitable type specifically programmed or configured to execute the algorithms and processes described herein. The processor(s)1002can be configured to fetch and execute computer-readable instructions stored in the computer-readable media1004, which can program the processor(s)1002to perform the functions described herein.

The computer-readable media1004may include the storage devices132discussed above with respect toFIG. 1. In some cases, the storage devices132may be at the same location as the service computing device(s)128, while in other examples, the storage devices132may be remote from the service computing device(s)128. The computer-readable media1004may further include volatile and nonvolatile memory and/or removable and non-removable media implemented in any type of technology for storage of information, such as computer-readable instructions, data structures, program modules, or other data. Such computer-readable media1004may include, but is not limited to, RAM, ROM, EEPROM, flash memory or other memory technology, optical storage, solid state storage, magnetic tape, magnetic disk storage, RAID storage systems, storage arrays, network attached storage, storage area networks, cloud storage, or any other medium that can be used to store the desired information and that can be accessed by a computing device. Depending on the configuration of the service computing device128, the computer-readable media1004may be a type of computer-readable storage media and/or may be a tangible non-transitory media to the extent that when mentioned, non-transitory computer-readable media exclude media such as energy, carrier signals, electromagnetic waves, and signals per se.

The computer-readable media1004may be used to store any number of functional components that are executable by the processors1002. In many implementations, these functional components comprise instructions or programs that are executable by the processors1002and that, when executed, specifically configure the one or more processors1002to perform the actions attributed above to the service computing device128. Functional components stored in the computer-readable media1004may include the storage management module130, the emulator(s)146and, in some cases, one or more web applications and/or the application fragmenting module (not shown inFIG. 10). Additional functional components stored in the computer-readable media1004may include an operating system1008for controlling and managing various functions of the service computing device128.

In addition, the computer-readable media1004may store data used for performing the functions and services described herein. Thus, the computer-readable media1004may store the remote applications and data134, which may include the offloaded applications136, application data138, other data140, and in some cases application state information142. The service computing device128may also include or maintain other functional components and data, such as other modules and data1010, which may include application fragments in some examples, programs, drivers, etc., and the data used or generated by the functional components. Further, the service computing device128may include many other logical, programmatic, and physical components, of which those described above are merely examples that are related to the discussion herein.

The communication interface(s)1006may include one or more interfaces and hardware components for enabling communication with various other devices, such as over the network(s)106. For example, communication interface(s)1006may enable communication through one or more of the Internet, cable networks, cellular networks, wireless networks (e.g., Wi-Fi) and wired networks, as well as close-range communications such as BLUETOOTH®, and the like, as additionally enumerated elsewhere herein.

The service computing device128may further be equipped with various input/output (I/O) devices1012. Such I/O devices1012may include a display, various user interface controls (e.g., buttons, joystick, keyboard, mouse, touch screen, etc.), audio speakers, connection ports and so forth.

Various instructions, methods, and techniques described herein may be considered in the general context of computer-executable instructions, such as program modules stored on computer-readable media, and executed by the processor(s) herein. Generally, program modules include routines, programs, objects, components, data structures, etc., for performing particular tasks or implementing particular abstract data types. These program modules, and the like, may be executed as native code or may be downloaded and executed, such as in a virtual machine or other just-in-time compilation execution environment. Typically, the functionality of the program modules may be combined or distributed as desired in various implementations. An implementation of these modules and techniques may be stored on computer storage media or transmitted across some form of communication media.