Personal computers traditionally use only directly accessible resources to execute programs and store files. But as network access has become more widespread, it has become feasible to execute programs and store files using remote resources. The use of remote resources, commonly referred to as cloud computing, can allow a user to access a file or an application using any device that can access a network. Cloud computing can thereby reduce the user's need for local computer resources and assure the user that, regardless of which device is available, the user will be able to access an up-to-date version of a desired file or application. Cloud computing systems generally allow users to access files using a web-based application executed by the cloud computing system, but such web-based applications may not be optimized for the user's device.
Thus there exists a need in the art to identify applications that a user of a client computing device may use to access a service provided by a cloud computing system. The systems and methods described herein allow the client computing device to identify applications, whether online web-based applications or local applications installed on the client computing device, that are available to the user and with which the user may access the cloud computing service.
In certain aspects, the systems and methods described herein relate to identifying applications that are available to a user of a cloud computing service. A client computing device may be configured to access the cloud computing service, and may include a communication processor in communication with an identification database and an application database. The identification database may store information regarding at least one characteristic of the client computing device, and the application database may store information regarding applications installed on the client computing device. The communication processor may request access to a cloud computing server providing the cloud computing service, and transmit information verifying that the client computing device is authorized to access information associated with a user account. The communication processor may receive an account list of applications associated with the user account, and may identify at least one of a characteristic of the client computing device and a local list of applications installed on the client computing device. The characteristic of the client computing device may be retrieved from the identification database, and may include an operating system of the client computing device, an Internet browser installed on the client computing device, or other suitable information. The local list may be retrieved or derived from the application database, and may include a browser extension installed on the client computing device. A browser extension may be a plug-in to an Internet browser providing a user interface for interacting with the cloud computing server via the client computing device. The communication processor may generate an availability list of applications that can be executed by the client computing device based on the account list and the at least one of the characteristic of the client computing device and the local list of applications.
In some implementations, the communication processor receives information identifying a file type available to the user account from the cloud computing server, such as by receiving a list of files associated with the user account. In such implementations, the communication processor determines whether any applications on the availability list of applications are capable of accessing the file type, and, if so, provides the user with a list of such applications. The file type may be identified by a file extension, a Multipurpose Internet Mail Extension (MIME) type, or some other suitable means. The communication processor may receive a user selection of an application on the availability list of applications, and, in response to the receiving the user selection, access a file of the file type with the user-selected application, in some implementations by generating the file. In some implementations, if the availability list of applications does not include an application capable of accessing the file type, the communication processor generates and provides the user with a filtered account list of applications, the filtered account list including applications that are on the account list of applications and associated with the characteristic of the device but that are not included in the local list of applications.
In some implementations, the communication processor may receive a user selection of an application on the availability list of applications, and, in response to receiving the user selection, execute the user-selected application.
In some implementations, the communication processor may transmit the availability list to the cloud computing server.
The systems and methods described herein are set forth in the appended claims. However, for the purpose of explanation, several embodiments are set forth in the following drawings.
In the following description, numerous details are set forth for the purpose of explanation. However, one of ordinary skill in the art will realize that the implementations described herein may be practiced without the use of these specific details and that the implementations described herein may be modified, supplemented, or otherwise altered without departing from the scope of the systems and methods described herein.
The systems and methods described herein relate to identifying applications that a user may use to access a service provided by the cloud computing system. Such applications may include online web-based applications provided by the cloud computing system, online web-based applications provided by a third party and configured to interact with cloud computing system, and local applications installed on a client computing device with which the user is accessing the cloud computing service. Applications not provided by the cloud computing system may interact with the cloud computing system through an Application Programming Interface (API) or other suitable means. Local applications may include stand-alone applications, such as word processors, or plug-ins, such as browser extensions, that add functionality to a stand-alone application installed on a user device. Whether a local application is or is not a stand-alone application, it may be configured to interact with the cloud computing system itself, or may interact with the cloud computing system through an intermediary application. As an illustrative example of the latter, a cloud computing system may indirectly interact with a browser extension through its associated Internet browser. In such an example, the cloud computing system may transmit the output of a cloud computing service to the Internet browser as HyperText Markup Language (HTML), which the Internet browser may then provide to the browser extension.
A user may therefore access a cloud computing service using online web-based applications that are compatible with both the cloud computing service and a client computing device with which the user is accessing the cloud computing service. The user may also or alternatively access the cloud computing service using local applications installed on the client computing device if such local applications are capable, directly or indirectly, of accessing the cloud computing service. To identify available applications, a client computing device authorized to access a user account on a cloud computing server may receive an account list of applications associated with the user account. The client computing device may identify at least one of a characteristic of the client computing device and a local list of applications installed on the client computing device, and may filter the account list of applications based on the identification. Filtering the account list of applications may generate an availability list of applications that can be executed by the client computing device.
UI 108 is an interface through which a user may access files and applications associated with cloud computing device 102. UI 108 may include an application, such as a web browser or other suitable application, which is executed by client device 106 and which displays information received from cloud computing device 102. UI 108 may generate and send commands to cloud computing device 102 in response to a predetermined action by a user, which may include selecting an icon with a cursor or on a touchscreen, selecting a menu option with a cursor or on a touchscreen, writing a text command, or other suitable action. Commands may include requests to access a file with a default application, requests to retrieve a list of applications capable of accessing a file and available to the user, requests to access a file with a selected application, and other suitable commands. In certain implementations, different user interactions with UI 108 may generate different commands.
As an illustrative example of such an implementation on a client device 106 with a touchscreen, UI 108 may detect a user tapping an area of the touchscreen associated with a file. If the user stops pressing the area within a predetermined amount of time, UI 108 may generate a request to access the file using a predetermined default application. If the user presses the area for a period lasting longer than the predetermined amount of time, UI 108 may request a list of available applications capable of opening the file from cloud computing device 102 and provide the list to the user. In response to the user selecting an application from the list, UI 108 may request cloud computing device 102 provide file access to the user-selected application.
Cloud computing system 100 allows a user to access services using client device 106. Services may include generating, accessing, or editing files, executing a web-based application, or other suitable services. Client device 106 connects to cloud computing device 102 through network 104. UI 108 displays information provided by cloud computing device 102, such as a list of files associated with the user. A user may interact with UI 108 to request access to a file or an application, such as by selecting icons with a cursor. Cloud computing device 102 may provide a list of applications available to a user to client device 106, which may filter the list to generate a list of applications immediately available to the user. Client device 106 may provide the list of available applications to the user, and execute an application that the user selects from such a list.
The depicted communications port 202 is a network port which receives user commands via network 104 and transmits information and file contents sent by cloud computing engine 200. Communications port 202 may include a 100BASE-TX port, a 1000BASE-T port, a 10GBASE-T port, a Wi-Fi antenna, a cellular antenna, or other suitable network ports. In certain implementations, there may be a different number of ports than are depicted. In certain implementations, communications port 202 may provide secure communications, such as by using the Secure Sockets Layer (SSL) protocol, the Transport Layer Security (TLS) protocol, or other suitable protocol.
Communication processor 204 may be a computer processor which identifies instructions received through communications port 202 and transmits information to a client device 106 in response. Upon a client device 106 connecting to cloud computing engine 200, communication processor 204 may identify a user account that the user device is attempting to access, in certain implementations by comparing login information provided by the user to information stored in user database 208. Communication processor 204 may further identify the client device 106 from packet headers identifying the source of data received from the user, by querying the client device 106, from information provided by the client device 106 at login, or through some other suitable method of identifying the user device.
Communication processor 204 may identify an account list of applications associated with the user account based on information stored in application database 210. Communication processor 204 may transmit the account list to the client device 106 based on one or more criteria, which may include whether authentication processor 212 has verified that the client device 106 is authorized to access information associated with the user account, receipt of a request to access a list of applications associated with the user account, receipt of a request to access or generate a file, or some other suitable criterion. In implementations in which communication processor 204 transmits an account list in response to a request associated with a file type, communication processor 204 may identify the file type associated with the request based on a file extension, a Multipurpose Internet Mail Extension (MIME) type, file metadata, or based on some other suitable identifying information. In some such implementations, communication processor 204 may filter the account list to include only applications capable of interacting with the identified file type. In some implementations, if the account list does not include any applications capable of accessing the file type associated with a user request, communication processor 204 may provide a user with an option to gain access to one or more applications capable of accessing the identified file type. Such an option may be provided by instructing UI 108 to display a message with a link to gain access to an application. In some such implementations, communication processor 204 may install an application on a client device 106 in response to a user accepting an option to gain access to an application.
Communication processor 204 may also provide a cloud computing service to a user by transmitting instructions for executing a user-selected application, the output of a user-selected application, file information associated with a user account, or other suitable information.
Resource database 206 may be a computer-readable and -writable medium storing at least one file associated with a cloud computing system 100, which may include text, images, audio files, video files, spreadsheets, presentation files, HTML files, or other suitable computer files. Resource database 206 may also store metadata associated with each file, which may include a MIME type of the file. In certain implementations, file metadata may also include one or more users authorized to view or edit the file, the application used to generate the file, a default application for accessing the file, a record of when and by whom the file was previously accessed or edited, or other suitable information. In some implementations, a portion of resource database 206 may be accessed through a remote network, and may be a third-party database.
User database 208 may be a computer-readable and -writable medium storing information associated with at least one user of cloud computing engine 200. The information may include one or more of a username and password associated with a user, a list of the files associated with each user, a list of at least one client device 106 associated with the user, a list of cloud applications associated with the user, a list of applications available to a user, a list of each application the user has authorized to access each file or file type represented in the user's files, a default application the user has identified for accessing a file type, user-specified preferences, or other suitable user information.
Application database 210 may be a computer-readable and -writable medium storing information regarding applications associated with cloud computing engine 200. Application database 210 may include compiled or uncompiled computer instructions comprising an application, a link to access a cloud application, a link to download a native application, an icon associated with an application, a description of an application, or other suitable information regarding an application. Computer instructions comprising an application may be performed by cloud computing engine 200 and the output transmitted to a client device 106, or may be transmitted to a client device 106 for execution, in some implementations by a web browser. Such computer instructions may be written in HTML, JavaScript, Asynchronous JavaScript and XML (Ajax), or another suitable computer language. Application database 210 may store metadata associated with an application, which may include file types the application is capable of opening, characteristics of those client devices 106 which may execute the application, Internet browsers with which the application is compatible, users authorized to use the application, whether the application is capable of interfacing with cloud computing engine 200 to access cloud computing resources, alternate versions of the application, or other suitable information. In certain implementations, application database 210 may include metadata for an application not stored in application database 210.
In some implementations, two or more of resource database 206, user database 208, and application database 210 may be combined into a single database. As an illustrative example of such an implementation, a single database may store information identifying user accounts as well as files associated with the user accounts.
Authentication processor 212 may be a computer processor which blocks unauthorized access of information associated with cloud computing engine 200. Unauthorized access may be detected by comparing one or more of a username and password combination, information identifying a client device 106, geographic information associated with the client device 106, or other suitable information received from a client device 106 with information stored in user database 208. If a request generator is not successfully verified, authentication processor 212 may transmit a message to the user or a system administrator, block client device 106, temporarily lock the user account, or take some other predetermined action. In certain implementations, if a client device 106 has not previously been connected to cloud computing engine 200, authentication processor 212 may require the user to provide identification information, which may include a username and password combination, an identification number provided to the user by a voice or text message sent to a telephone number previously provided by the user, or other predetermined identification information. In certain implementations, authentication processor 212 may verify that an application may be allowed to access a file by searching resource database 206, user database 208, and application database 210 to determine whether the application is associated with the user, whether the application is associated with the file type of the file, whether the user has authorized the application to access the file or the file type, or other suitable verification information. In some such implementations, authentication processor 212 may verify a security token provided by the application against information stored in one or more of resource database 206, user database 208, or application database 210. If an application is not authorized to access a file, authentication processor 212 may prevent the application from accessing the file, transmit a message to the user or a system administrator, or take some other suitable action. In certain implementations, such a message to the user may ask if the user wishes to authorize the application to access the file. In certain implementations, authentication processor 212 may establish a secure connection with client device 106 using a protocol such as the SSL or TLS protocols.
Cloud computing engine 200 receives transmissions from client device 106 at communications port 202 via network 104. Authentication processor 212 may compare information provided by a client device 106 with information stored in user database 208 to verify that a user is authorized to access a cloud computing account. Communication processor 204 may identify the cloud computing account upon receiving a connection request from a client device 106. Communication processor 204 may transmit an account list of applications associated with the user account to client device 106, and may receive an availability list of applications that may be executed by the client device 106. Communication processor 204 may provide the user with an indication of which applications on the availability list are capable of accessing a file associated with the user account, and may execute or instruct client device 106 to execute an application from the list in response to a user command. Communication processor 204 may generate, alter, or delete a file or metadata associated with a file in resource database 206 based on user commands or on the output of applications associated with a user account.
The depicted communications port 302 is a network port which transmits user commands through network 104 and receives information and file contents sent by cloud computing device 102. Communications port 302 may include a 100BASE-TX port, a 1000BASE-T port, a 10GBASE-T port, a Wi-Fi antenna, a cellular antenna, or other suitable network ports. In certain implementations, there may be a different number of ports than are depicted. In certain implementations, communications port 302 may provide secure communications, such as by using the Secure Sockets Layer (SSL) protocol, the Transport Layer Security (TLS) protocol, or other suitable protocol.
Communication processor 304 may be a computer processor which acts on user instructions received through UI 310 and information received through communications port 302, which may include transmitting instructions and information to cloud computing device 102. Communication processor 304 may request access to a user account associated with cloud computing device 102. Communication processor 304 may also transmit information verifying that the client computing device 300 is authorized to access information associated with the user account. Such authorization information may be transmitted with the initial access request or may be transmitted in response to a query by the cloud computing device 102, and may include information stored in ID database 306, information provided by the user through UI 310, or both.
Communication processor 304 may receive an account list of applications associated with the user account from cloud computing device 102. Communication processor 204 may identify one or more characteristics of client computing device 300 and a local list of applications installed on the client computing device. Characteristics of client computing device 300 may include a make and model of the device, an operating system of the device, an Internet browser providing a UI used to access a service of cloud computing device 102, or other suitable information. A local list of applications may include applications being executed by client computing device 300, applications installed on client computing device 300, browser extensions that are being executed by an Internet browser being used to access cloud computing device 102, or other suitable applications. Communication processor 304 may generate an availability list of applications that can be executed by the client computing device 300 by filtering the received account list based on any identified characteristics of client computing device 300 and on the local list of applications. In some implementations, communication processor 304 may also or alternatively add applications from the local list of applications to the received account list to generate the availability list of applications. Communication processor 304 may transmit the availability list of applications to the cloud computing device 102 in whole or in part. In some implementations, communication processor 304 may further filter the account list based on types of files accessible to applications on the account list. As an illustrative example, if a user has indicated that they wish to choose an application to generate or access a spreadsheet, communication processor 304 may generate an availability list of applications based not only on which applications are associated with the user account and compatible with the client computing device 300, but which applications are capable of accessing spreadsheet files.
ID database 306 may be a computer-readable and -writable medium storing information regarding client computing device 300 or a user of client computing device 300. Such information may include a manufacturer of the device, a model of the device, a Media Access Control (MAC) address of the device, an operating system of the device, a part or the whole of cloud computing account login information for a user associated with the device, an Internet browser associated with the device, or other suitable information. Information stored in ID database 306 may be used to verify that client computing device 300 is authorized to access information associated with a cloud computing account, such as information that identifies the device as having previously been authorized to access the account. Information stored in ID database 306 may also or alternatively be used to filter lists of applications to exclude applications incompatible with client computing device 300. As an illustrative example, if a cloud computing account is associated with applications that are only compatible with one operating system, those applications are not available to a user accessing the account using a client computing device 300 running a different operating system.
Application database 308 may be a computer-readable and -writable medium storing information regarding applications associated with client computing device 300. Application database 308 may include compiled or uncompiled computer instructions comprising an application, a link to access a cloud application, a link to download a native application, an icon associated with an application, a description of an application, a browser extension adding functionality to an Internet browser executed by client computing device 300, or other suitable information relating to an application. Computer instructions may be written in C++, HTML, JavaScript, Asynchronous JavaScript and XML (Ajax), or another suitable computer language. Application database 308 may store metadata associated with an application, which may include file types the application is capable of opening, Internet browsers with which the application is compatible, users authorized to use the application, whether the application is capable of interfacing with cloud computing device 102 to access cloud computing resources, alternate versions of the application, or other suitable information. In some implementations, ID database 306 and application database 308 may be implemented in a single database. As an illustrative example of such an implementation, an Internet browser used to access information associated with a cloud computing service may be stored in an application database, and the identity of the Internet browser may comprise a characteristic of client computing device 300.
UI 310 may be an interface allowing a user to interact with applications executed by client computing device 300 and services provided by cloud computing device 102, and may include UI 108 of
Client computing device 300 communicates with cloud computing device 102 over network 104 to access cloud computing services. Transmissions are sent and received by communications port 302, and generated and acted upon by communication processor 304. Communication processor 304 may transmit information verifying that client computing device 300 is authorized to access a cloud computing account to cloud computing device 102. Communication processor 304 may receive an account list of applications associated with the cloud computing account from cloud computing device 102, and, based on the list and on information stored in ID database 306 and application database 308, may generate an availability list of applications that are available to the user accessing the cloud computing account with client computing device 300. The availability list and other information associated with the cloud computing account may be presented to the user through UI 310. UI 310 may further allow the user to select an application from the availability list to execute. As an illustrative example, a user may interact with UI 310 to request access to a resource stored on cloud computing device 102, see a list of applications available to the user and capable of accessing the resource, select an application from the list , and access the resource using the selected application.
If step 602 confirms that the client device 106 is authorized, authentication processor 212 may allow the client device 106 to access the authorizing user's data in step 603. If the client device 106 is not authorized, user verification process 600 may proceed to step 604. In step 604, authentication processor 212 may, via communication processor 204, request that client device 106 provide information verifying that it is authorized to access the user account. Such information may include a user ID and password combination, a personal identification number (PIN), an automatically generated identification number transmitted to a phone number provided by the user, or other suitable identifying information. Communication processor 204, upon receiving the verifying information in step 605, passes the information to authentication processor 212. In step 606, authentication processor 212 may compare the verifying information to information stored in user database 208 to determine whether the verifying information is correct. If the verifying information is incorrect, authentication processor 212 may instruct communication processor 204 to block access by the device in step 607, and may temporarily block access to the account, alert the user or a systems administrator, or take other suitable action.
If the user identification is correct, step 608 may determine whether the user wants to authorize the client device 106, which may be determined by identifying whether the user selected a “Remember this device” option in providing identification information, by transmitting a prompt to the user to select whether to permanently authorize the client device 106, or by some other suitable method. If not, the authentication processor 212 provides the client device 106 with temporary access in step 609. Otherwise, in step 610 the authentication processor 212 provides the client device 106 with access to cloud computing engine 200 and records information identifying the device in user database 208.
Referring to
In step 703, communication processor 304 receives an account list of applications from the cloud computing device 102. The account list of applications is a list of information regarding applications associated with the user account, and may be generated by cloud computing device 102 as described in relation to
Step 706 determines whether only the applications on the account list received from the cloud computing device 102 are authorized to access information associated with the user account. Step 706 thus determines how to generate an availability list of applications that can interact with the cloud computing service and that the user may execute on client computing device 300. If the local list may include applications that can access the user account, then, in step 707, communication processor 304 may generate an availability list by combining the local list of applications with the account list as filtered based on the client device characteristics. In some implementations, communication processor 304 may first filter the local list of applications based on whether such applications are capable of interacting with cloud computing device 102, whether the user has authorized the applications to access or edit files stored on the cloud computing device 102, or based on other suitable criteria. In such implementations, the information used to filter the applications on the local list may be stored in application database 308 as metadata associated with the applications.
If, instead, the account list of applications represents a complete list of applications capable of interacting with the cloud computing service and authorized to access the user account information, then process 700 may continue to step 708 after step 706. In step 708, communication processor 304 generates an availability list of applications by filtering the account list based on the local list and the client device characteristics. As an illustrative example, the account list may include three applications, one of which is incompatible with the client computing device 300, and a second of which is compatible with but is not installed on the client computing device 300. In such an example, the availability list would only include the third application.
Regardless of which of steps 707 and 708 were carried out, process 700 continues to step 709, in which communication processor 304 availability list is filtered based on the user request. If the user request was merely to be provided with a list of applications available to the user, the availability list is unchanged. If, however, the user request is associated with some identifiable class of applications, the availability request will be filtered accordingly. As an illustrative example, if the user request was to generate a spreadsheet, step 709 may filter the availability list to include only applications capable of generating spreadsheets.
In some implementations, communication processor 304 may transmit characteristics of client computing device 300, information regarding the user request, or the local list of applications to cloud computing device 102 in step 702, thereby allowing cloud computing device 102 to carry out one or more of steps 707, 708, and 709 before transmitting the account list for receipt in step 703 and allowing client computing device 300 to skip such steps.
In step 710, communication processor 304 determines whether the filtered availability list includes any applications. As an illustrative example, if a user requested a list of applications capable of opening a file that can only be accessed by an application incompatible with the client computing device 300, then there would be no applications on the filtered availability list. If the filtered availability list includes any applications, process 700 ends with communication processor 304 instructing UI 310 to display the list to the user in step 711. Otherwise, process 700 may end with step 712, in which the communication processor 304 informs the user via UI 310 that no application is available. In some implementations, step 712 may further suggest applications for the user to gain access to, such as by displaying a list of applications associated with the user account and compatible with but not installed on the client computing device 300. In some such implementations, the list may include an option for the user to install the application on the client computing device 300.
The computing device 800 comprises at least one communications interface unit, an input/output controller 810, system memory, and one or more data storage devices. This can support a network connection such as a connection to network 104 in
The computing device 800 may be configured in a distributed architecture, wherein databases and processors are housed in separate units or locations. Some units perform primary processing functions and contain, at a minimum, a general controller or a processor and a system memory. In distributed architecture implementations, each of these units may be attached via the communications interface unit 808 to a communications hub or port (not shown) that serves as a primary communication link with other servers, client or user computers, and other related devices. The communications hub or port may have minimal processing capability itself, serving primarily as a communications router. A variety of communications protocols may be part of the system, including, but not limited to: Ethernet, SAP, SAS™, ATP, BLUETOOTH™, GSM, and TCP/IP.
The CPU 806 comprises a processor, such as one or more conventional microprocessors and one or more supplementary co-processors such as math co-processors for offloading workload from the CPU 806. The CPU 806 is in communication with the communications interface unit 808 and the input/output controller 810, through which the CPU 806 communicates with other devices such as other servers, user terminals, or devices. The communications interface unit 808 and the input/output controller 810 may include multiple communication channels for simultaneous communication with, for example, other processors, servers, or client terminals.
The CPU 806 is also in communication with the data storage device. The data storage device may comprise an appropriate combination of magnetic, optical, or semiconductor memory, and may include, for example, RAM 802, ROM 804, flash drive, an optical disc such as a compact disc, or a hard disk or drive. The CPU 806 and the data storage device each may be, for example, located entirely within a single computer or other computing device; or connected to each other by a communication medium, such as a USB port, serial port cable, a coaxial cable, an Ethernet cable, a telephone line, a radio frequency transceiver, or other similar wireless or wired medium or combination of the foregoing. For example, the CPU 806 may be connected to the data storage device via the communications interface unit 808. The CPU 806 may be configured to perform one or more particular processing functions.
The data storage device may store, for example, (i) an operating system 812 for the computing device 800; (ii) one or more applications 814 (e.g., computer program code or a computer program product) adapted to direct the CPU 806 in accordance with the systems and methods described here, and particularly in accordance with the processes described in detail with regard to the CPU 806; or (iii) database(s) 816 adapted to store information that may be utilized to store information required by the program. The depicted database 816 can be any suitable database system, and can be a local or distributed database system.
The operating system 812 and applications 814 may be stored, for example, in a compressed, an uncompiled and an encrypted format, and may include computer program code. The instructions of the program may be read into a main memory of the processor from a computer-readable medium other than the data storage device, such as from the ROM 804 or from the RAM 802, or from a computer data signal embodied in a carrier wave, such as that found within the well-known Web pages transferred among devices connected to the Internet. While execution of sequences of instructions in the program causes the CPU 806 to perform the process steps described herein, hard-wired circuitry may be used in place of, or in combination with, software instructions for implementation of the processes of the present disclosure. Thus, the systems and methods described are not limited to any specific combination of hardware and software.
Suitable computer program code may be provided for performing one or more functions in relation to a cloud computing system as described herein. The program also may include program elements such as an operating system 812, a database management system, and “device drivers” that allow the processor to interface with computer peripheral devices (e.g., a video display, a keyboard, a computer mouse, etc.) via the input/output controller 810.
The term “computer-readable medium” as used herein refers to any non-transitory medium that provides or participates in providing instructions to the processor of the computing device 800 (or any other processor of a device described herein) for execution. Such a medium may take many forms, including but not limited to, non-volatile media and volatile media. Non-volatile media include, for example, optical, magnetic, or opto-magnetic disks, or integrated circuit memory, such as flash memory. Volatile media include dynamic random access memory (DRAM), which typically constitutes the main memory. Common forms of computer-readable media include, for example, a floppy disk, a flexible disk, hard disk, magnetic tape, any other magnetic medium, a CD-ROM, DVD, any other optical medium, punch cards, paper tape, any other physical medium with patterns of holes, a RAM, a PROM, an EPROM or EEPROM (electronically erasable programmable read-only memory), a FLASH-EEPROM, any other memory chip or cartridge, or any other non-transitory medium from which a computer can read.
Various forms of computer readable media may be involved in carrying one or more sequences of one or more instructions to the CPU 806 (or any other processor of a device described herein) for execution. For example, the instructions may initially be borne on a magnetic disk of a remote computer (not shown). The remote computer can load the instructions into its dynamic memory and send the instructions over an Ethernet connection, cable line, or even telephone line using a modem. A communications device local to a computing device 800 (e.g., a server) can receive the data on the respective communications line and place the data on a system bus for the processor. The system bus carries the data to main memory, from which the processor retrieves and executes the instructions. The instructions received by main memory may optionally be stored in memory either before or after execution by the processor. In addition, instructions may be received via a communication port as electrical, electromagnetic, or optical signals, which are exemplary forms of wireless communications or data streams that carry various types of information.
Some implementations of the above described may be implemented by the preparation of application-specific integrated circuits or by interconnecting an appropriate network of conventional component circuits, as will be apparent to those skilled in the art. Those of skill in the art would understand that information and signals may be represented using any of a variety of different technologies and techniques. For example, data, instructions, requests, information, signals, bits, symbols, and chips that may be referenced throughout the above description may be represented by voltages, currents, electromagnetic waves, magnetic fields or particles, optical fields or particles, or any combination thereof.
While various implementations of the present disclosure have been shown and described herein, it will be obvious to those skilled in the art that such implementations are provided by way of example only. Numerous variations, changes, and substitutions will now occur to those skilled in the art without departing from the disclosure. For example, cloud computing engine 200 may add a local application to the account list if the user accesses a cloud computing service with the local application, and may suggest that the user install a local application of a user-selected application on a client device 106 if the application is not installed. Also, cloud computing engine 200 and client computing device 300 may differentiate between versions of the same program, such as by allowing one version to access information associated with a user account but not another version. Client computing device 300 may also respond to a command to execute an application by executing a native version of the application if installed, but execute the cloud version of the same application otherwise. It should be understood that various alternatives to the implementations of the disclosure described herein may be employed in practicing the disclosure. Elements of an implementation of the systems and methods described herein may be independently implemented or combined with other implementations. It is intended that the following claims define the scope of the disclosure and that methods and structures within the scope of these claims and their equivalents be covered thereby.