Abstract:
At a gateway within a network, a message containing content is received. The message conforms to a protocol that specifies a format of the content, the message having been sent from a server outside the network to a client within the network. The message is routed from the gateway to the client. The message is analyzed to determine whether the content is static. Depending on a result of the analyzing, the content is selectively caused to be stored in the format specified by the protocol in a cache within the network.

Description:
BACKGROUND 
     A computer network is a collection of computers and other hardware interconnected by communication channels that allow sharing of resources and information. Communication protocols define the rules and data formats for exchanging information in a computer network. A cache is a mechanism that can store and serve data. For example, a web cache may store web content from servers so that clients can access the content from the cache more quickly than from the servers. 
     Web proxies are a common component in many computer network environments. They are used for a variety of purposes including saving bandwidth and providing a controlled path out to the Internet from a local network. Web proxies store content from the Internet in a cache so that if access to that same content is later sought by a computer being serviced by the proxy, the web proxy can fetch the requested content from the local cache instead of retrieving another copy from the Internet. 
     SUMMARY 
     In one aspect, a method is performed by data processing apparatus, the method includes receiving, at a gateway within a network, a message containing content, the message conforming to a protocol that specifies a format of the content, the message having been sent from a server outside the network to a client within the network. The method further includes routing the message from the gateway to the client. The method further includes analyzing the message to determine whether the content is static. The method further includes depending on a result of the analyzing, selectively causing the content to be stored in the format specified by the protocol in a cache within the network. 
     Implementations can include any, all, or none of the following features. When the result of the analysis includes a determination that the content is static, said selectively causing the content to be stored includes sending a message to the cache within the network instructing the cache to store the content in a format specified by the protocol. The message is a Hypertext Transfer Protocol (HTTP) message, the content is a single HTTP resource, and the cache indexes stored content by HTTP resource name. Analyzing the message to determine that the content is static includes analyzing the content. Analyzing the message to determine that the content is static includes analyzing a file extension of the content. Analyzing the message to determine that the content is static includes comparing the content with stored content previously returned from an address shared by the content and the stored content have at least a threshold similarity. Analyzing the message to determine that the content is static includes analyzing a header of the message. Sending a message to a cache on the network to store the content in the format specified by the protocol includes sending the content to the cache. Sending a message to a cache on the network to store the content in the format specified by the protocol includes sending a publicly available address of the contents to the cache. The method including requesting, by the cache, the content from the publicly available address. The method including storing, by the cache, the content in the format specified by the protocol and indexed according to the publicly available address. 
     In one aspect, a computer storage media encoded with computer program instructions that, when executed by one or more processors, cause a computer device to perform operations includes receiving, at a gateway within a network, a message containing content, the message conforming to a protocol that specifies a format of the content, the message having been sent from a server outside the network to a client within the network. The operations further include routing the message from the gateway to the client. The operations further include analyzing the message to determine whether the content is static. The operations further include depending on a result of the analyzing, selectively causing the content to be stored in the format specified by the protocol in a cache within the network. 
     Implementations can include any, all, or none of the following features. When the result of the analysis includes a determination that the content is static, said selectively causing the content to be stored includes sending a message to the cache within the network instructing the cache to store the content in a format specified by the protocol. The message is a Hypertext Transfer Protocol (HTTP) message, the content is a single HTTP resource, and the cache indexes stored content by HTTP resource name. Analyzing the message to determine that the content is static includes analyzing the content. Analyzing the message to determine that the content is static includes analyzing a file extension of the content. Analyzing the message to determine that the content is static includes comparing the content with stored content previously returned from an address shared by the content and the stored content have at least a threshold similarity. Analyzing the message to determine that the content is static includes analyzing a header of the message. Sending a message to a cache on the network to store the content in the format specified by the protocol includes sending the content to the cache. Sending a message to a cache on the network to store the content in the format specified by the protocol includes sending a publicly available address of the contents to the cache. The operations further include requesting, by the cache, the content from the publicly available address. The operations further include storing, by the cache, the content in the format specified by the protocol and indexed according to the publicly available address. 
     In one aspect, a system includes one or more processors configured to execute computer program instructions. The system further includes computer storage media encoded with computer program instructions that, when executed by one or more processors, cause a computer device to perform operations includes receiving, at a gateway within a network, a message containing content, the message conforming to a protocol that specifies a format of the content, the message having been sent from a server outside the network to a client within the network. The operations further include routing the message from the gateway to the client. The operations further include analyzing the message to determine whether the content is static. The operations further include depending on a result of the analyzing, selectively causing the content to be stored in the format specified by the protocol in a cache within the network. 
     Implementations can include any, all, or none of the following features. When the result of the analysis includes a determination that the content is static, said selectively causing the content to be stored includes sending a message to the cache within the network instructing the cache to store the content in a format specified by the protocol. The message is a Hypertext Transfer Protocol (HTTP) message, the content is a single HTTP resource, and the cache indexes stored content by HTTP resource name. Analyzing the message to determine that the content is static includes analyzing the content. Analyzing the message to determine that the content is static includes analyzing a file extension of the content Analyzing the message to determine that the content is static includes comparing the content with stored content previously returned from an address shared by the content and the stored content have at least a threshold similarity. Analyzing the message to determine that the content is static includes analyzing a header of the message. Sending a message to a cache on the network to store the content in the format specified by the protocol includes sending the content to the cache. Sending a message to a cache on the network to store the content in the format specified by the protocol includes sending a publicly available address of the contents to the cache. The operations further include requesting, by the cache, the content from the publicly available address. The operations further include storing, by the cache, the content in the format specified by the protocol and indexed according to the publicly available address. 
     The systems and processes described here may be used to provide a number of potential advantages. By identifying static contents on a webpage and dynamic contents on a webpage, a cache can store only the static contents. When a client later requests the webpage, the static portions of the webpage can be served from the cache and the dynamic portions can be served from the webpage server. This arrangement can reduce the load time of a webpage and reduce the bandwidth out of the network needed to access the webpage. In a HTTP connection established between a client and a server where multiple HTTP requests for resources are sent in parallel, caching on the HTTP resource level allows a one-to-one mapping between HTTP requests and cache content, which can allow for computationally simple cache serving. Cache misses may be minimized or eliminated by redirecting only those requests that the cache knows are cacheable or are already stored in the web cache. 
    
    
     
       DESCRIPTION OF DRAWINGS 
         FIG. 1  is a block diagram of a network with a static content cache serving content. 
         FIG. 2  is a block diagram of a network with a static content cache storing content. 
         FIG. 3  is a swim-lane diagram of an example process for requesting content. 
         FIGS. 4 and 5  are swim-lane diagrams of example processes for storing content in a cache. 
         FIG. 6  is a schematic diagram that shows an example of a computing device and a mobile computing device. 
     
    
    
     Like reference symbols in the various drawings indicate like elements 
     DETAILED DESCRIPTION 
     According to the systems and techniques described herein, a computer network can use a cache to store static contents of a document and allow dynamic portions of the same document to be served from the web server hosting the document. For example, many web pages are made up of many resources. Some of the resources (e.g., a side-bar graphic, navigation links) are static; that is, their data remains unchanged for a least some period of time. Other resources may be dynamic. A dynamic resource may change its data based on the user requesting the webpage, the time of the request, or based on some other dynamic data being displayed (e.g., a social network feed, stock prices). In the example of such a webpage, a web cache can store and serve the static components (e.g., the side-bar graphics and navigation links resources), and can allow requests for the dynamic components (e.g., stock prices and social network feed) to reach the web server of the page. This disparate treatment of static and dynamic resources can enable users to receive the correct dynamic content from the web server while receiving, possibly faster and with less bandwidth, the static contents from the cache. 
     In many communication protocols, including but not limited to Hypertext Transport Protocol (HTTP), a requesting client is permitted to establish multiple, parallel, connects to issue multiple, parallel content requests to a server. By caching data of the same type as is specified by the communication protocol, the cache can service an entire request by itself. For example, a HTTP GET request can request one resource per message, and the cache may store and index content as individual and individually addressed resources. 
     A network may use a web cache configuration known as transparent caching. With transparent caching, a web browser or other requester, which uses traditional protocols to fetch content from the internet, may not be aware that it is fetching content from a web cache. This may, in some cases, simplify the deployment of a web cache on a network because there may be no need to push proxy configurations to a computer using the cache. 
     In an example of caching static content with a transparent cache, the following steps may be performed by a network and/or network administrator in the course of a client requesting content that may come from a cache: 
     1) Configure a cache that does not intercept or otherwise require all requests to be forced through the cache. Thus, computers may have direct access to the Internet, via the below-noted gateway. 
     2) Configure a gateway that traffic must traverse in order to fetch content from the Internet. This gateway may be completely transparent to the computers, meaning that the computers are unaware that traffic to/from the computers necessarily is routed through the gateway. 
     3) The computer establishes a direct connection (e.g., with no in-line proxy or cache) to the web server on the Internet. 
     4) The computer sends a HTTP(s) GET or POST request to the web server on the Internet. 
     5) The Internet-aware gateway intercepts this GET/POST request, before it leaves the network in which the computer resides, and determines whether the requested content is already in the cache. 
     6) If the requested content is in the cache, the GET/POST request is not transmitted to the intended web server. Rather, the gateway sends a redirect response to the computer with a Universal Resource Locator (URL) that points to the cache (which is within the same network as the requesting computer), and which contains the information required for the cache to retrieve the content. 
     7) The computer sees the redirect, closes the connection to the original server, and makes the request to the cache from which the requested content is retrieved. 
     In the alternative when requested content is not in the cache, the process changes from step 6 above: 
     Alt 6) If the requested content is NOT in the cache, no redirect is sent and the computer continues to fetch the content from the web server thus offloading the cache, meaning that the cache need not be involved in the content fetch, thereby reducing the load on the cache. 
     There are many different potential methods for filling the web cache. One technique involves the gateway&#39;s determining whether content for a specific URL is static based on HTTP(s) response sent to computers and a web server, and, if so, then storing that specific URL in a table indicating the next request to that URL should be retrieved from the cache. The threshold criteria for when to save retrieved web content to the web cache can be configured so that only content that has a cache life expectancy of a certain amount of time is redirected to the cache. For example, if content is only static (e.g., remains unchanged at the source URL) for a few minutes based on the expiration time in the HTTP(s) response, it may not be advantageous to redirect those requests to the cache since they may expire too often, causing unnecessary burden on the web cache. 
       FIG. 1  is a block diagram of a network  100  with a cache  102  serving content and a network gateway  104 . Also shown in the network  100  is a client device  106 , which represents any appropriate computing device capable of browsing resources outside of the network  100 . While not shown for clarity&#39;s sake, the network  100  can include other elements including, but not limited to, wireless and/or wired access points, file and/or application servers, routers, and network cables, as well as additional browser devices  106 , network gateways  104 , and/or caches  102 . 
     The network  100  can be configured to route some or all of the messages addressed outside the network to the gateway  104 . For example, the client device  106  can create and send content requests  108  to the network gateway  104 . The network gateway  104  can inspect the content requests  108 . For example, a static content analyzer  110  can determine if the requested content is available from the cache  102 , if the requested content is static, etc. 
     If the network gateway  104  determines that the requested content is not available from the cache  102 , the network gateway  104  can route the content request  108  to the external network (e.g., the Internet)  112  and on to the server  114  that hosts the requested content. The server  114  may then process the content request as normal (e.g., serving the content or issue an error code.) 
     If the network gateway  104  determines that the requested content is available from the cache  102 , or that the content may be available from the cache  102 , the network gateway  104  may issue a content redirect  116  to the client device  106 . In some cases, the gateway  104  may determine that the requested content is available from the cache  102  with perfect accuracy. In other cases, the gateway  104  that the requested content is available from the cache  102  with some error. Errors may occur, for example, if the gateway  104  determines that content is static, but where the content has not yet been cached. The content redirect  116  may be, for example, a HTTP redirection message, that specifies a redirection to the cache  102 . The content redirect  116  may include all information needed to identify the content within the cache  102  including, but not limited to, the original address of the content request  108 . 
     The client device  106  may receive the content redirect  116  and send a redirected content request  118  to the cache  102 . The cache  102  may receive the redirected content request  118  and process as appropriate. For example, if the cache  102  contains a copy of the requested content, the cache  102  can return the requested content, and if the cache  102  does not contain a copy of the requested content, sometimes referred to as a cache miss, the cache  102  can request the resource to be served to the client device  106  from the server  114 . A cache miss may occur, for example, if content in the cache expires during the redirect process, or if the gateway  104  errs in determining if content is static. 
       FIG. 2  is a block diagram of the network  100  with a static content cache storing content. The description of  FIG. 1  includes examples where data is requested from the server  114  and where data is requested from the cache  102 .  FIG. 2 , by way of comparison, will be used as the basis of examples where data served by the server  114  is added to the cache  102 . 
     In  FIG. 2 , the server  114  has received, from the client  106  or another client  200  or  202 , a request for content. The server  114  can respond to the request for content with a content return message  204 . The content message  204  may conform to a protocol that specifies a format of the content. For example, the content return message  204  may be an HTTP message containing an HTTP resource in accordance with the HTTP specifications. The content return message  204  can be routed from the server  114  to the network gateway  104 . The network gateway  104  may receive the content return message  204  and route the content return message  204  to the addressed client device (e.g., client device  106 ,  200 , or  202 ). 
     In addition, the network gateway  104  may also determine if a copy of the content of the content return message  204  should be stored in the cache  102 . For example, the static content analyzer  110  may determine that that the content is static, is not stored in the cache  102  and/or passes any other appropriate tests for storage. 
     If the network gateway  104  determines that the content of the content return message  204  should be stored in the cache  102 , the network gateway can create and route, to the cache  102 , a copy of the content  206 . The cache  102  can receive the copy of the content  206  and store as appropriate. For example, the cache  102  or the network gateway  104  may determine an expiration time for the copy of the content  102 , and the cache may store the content only until expiration. Additionally or alternatively, the cache may store the content with the original URL of the content, for example in order to locate the content when requested. 
       FIG. 3  is a swim-lane diagram of an example process  300  for requesting content. The process  300  is described with reference to the components shown in  FIGS. 1 and 2 . However, other components can be used to perform the process  300  or another similar process. In this example, the process uses the HTTP communication protocol. However, other communications protocols may be used in addition or in the alternative. If a different communication protocol is used, and if that other communication protocol allows for more than one data object (e.g., file, blob) per request, the cache  102  may be configured, in some cases, to serve all of the data objects requested in a single request. In this way, it may be possible for every content request to be responded to by only the cache  102  or only the webserver  114 . 
     The client device  106  generates  302  a content request and sends the content request to the network gateway  104 . For example, the client device  106  may have an initial HTTP connection with the server  114  to request a webpage. In order to load the webpage, the client device  106  may create and send multiple HTTP GET requests, each GET request specifying one HTTP resource. These GET requests may, in some cases, be sent in parallel from different ports of the client device  106 , in accordance with the HTTP protocol. 
     The network gateway  104  receives the content request from the client device  104  and determines  304  if the content should be served from the cache  104  or the server  114 . For example, for each of the HTTP GET requests, the network gateway  104  can determine if the specified HTTP resource should be served from the cache  102  or from the server  112 . The network gateway  104  may test, for example, if the specified HTTP resource is listed as available from the cache  102 , if the specified HTTP resource is listed as static in a list of known static resources if the specified HTTP resource has a file extension that indicates the HTTP resource is likely static, etc. Examples of file extension that indicate an HTTP resource is likely static include, but are not limited to, image (.jpg, .png) or audio (.wav) files. 
     If the network gateway  104  determines that the content should be served from the server  114 , the network gateway  104  can send the content request to the server  114 . The server  114  can receive  306  the content request and process as appropriate. For example, the server  114  can respond to each HTTP Get request with a reply containing the request HTTP resource. Two example processes that include the server  114  responding to a content requests are described with respect to  FIGS. 4 and 5 , below. 
     If the network gateway  104  determines that the content should be served from the cache  102 , the network gateway  104  can generate  308  a redirect to the cache and send the redirect to the client device  106 . For example, the network gateway  104  can issue a HTTP URL redirection command to the client device  104 . Many types of HTTP URL redirection are possible, including but not limited to  402  HTTP redirect, server-side scripting, frame redirects, and Apache mod_rewrite. Regardless of the HTTP URL redirection used, the redirection can include sufficient information for the cache  102  to identify the originally requested content. 
     The client device  106  can receive the redirect from the network gateway  104  and request  310  the content from the cache  102 . For example, the HTTP URL redirection may include metadata indicating the URL on the server  114  of the originally requested resource, and the client device  106  can request the content from the cache  102  in a message that includes that metadata. The cache  102  can receive  312  the redirected request for content from the client device  106  and serve  314  the content to the client device  106 . The client device  106  can receive  316  the content from the cache  102 . 
       FIG. 4  is a swim-lane diagram of an example process  400  for storing content in a cache. The process  400  is described with reference to the components shown in  FIGS. 1 and 2 . However, other components can be used to perform the process  400  or another similar process. In this example, the process  400  uses the HTTP communication protocol. However, other communications protocols may be used in addition or in the alternative. 
     The server  114  serves  402  content for the client device  106 . For example, the server  114  may receive one or more HTTP GET requests from the client device  106 . In response, the server  114  may fetch and/or generate the HTTP resources specified in the HTTP GET request and send them in reply messages addressed to the client device  106 . The network gateway  104  receives the served content and routes  404  the served content to the client device  106 . The client device  106  receives  406  the content. For example, the client device may receive the reply messages, extract the HTTP resources, and display them in a web browser 
     The network gateway  104  analyzes  408  the served content. For example, in parallel with, before, or after routing the reply messages, the network gateway  104  may also extract the HTTP resources for analysis. The network gateway, optionally using the static content analyzer  110 , may apply one or more tests to the extracted content to determine if one or more of the HTTP resources should be stored in the cache  102 . For example, the static content analyzer  110  may test the HTTP resources to determine if they are static. Such a test may include examining the file type of the HTTP resources. Another test may include comparing multiple copies of HTTP resources with the same address. 
     For example, a first user may request a resource at a particular URL, and a second user, at a later point in time, may request a resource with the same URL. These two resources may contain the same, or similar, data. For example, the resource may be a website&#39;s logo image file. In other cases, two resources with the same URL may have different data. A hypertext markup language (HTML) page at the address may be dynamically generated by the server  114  based on the user requesting the page (e.g., with personalized shipping information for an e-commerce website). 
     The network gateway  104  may store both resources with the same URL and compare them. If the two resources have the same data (or similar within an appropriate threshold), the network gateway  104  may determine that the resource is static. If the two resources have different data (or more different than the threshold), the network gateway  104  may determine that the resource at the shared URL is dynamic. 
     The threshold in the static determination may be used, for example, to account for transmission errors or changes that are undetectable by a user. For example, the same image at two different resolutions may be found to be within the threshold. In another example, an operating system disk image may be large enough that a transmission error is be possible, and thus a one or two bit difference may be within the threshold as well. 
     If the network gateway  104  determines that the content should be stored in the cache, the network gateway  104  sends the content to the cache  102 . The cache  102  stores the content  410 . For example, the cache  102  can store the resource, optionally encrypted and/or compressed. The cache may index the resource by the original URL used to request the resource. This may facilitate, for example, fast access if the cache  102  receives a request to serve the resource to the client device  106 . 
       FIG. 5  is a swim-lane diagram of an example process  500  for storing content in a cache. The process  500  is described with reference to the components shown in  FIGS. 1 and 2 . However, other components can be used to perform the process  500  or another similar process. In this example, the process  500  uses the HTTP communication protocol. However, other communications protocols may be used in addition or in the alternative. 
     The server  114  serves  502  content for the client device  106  in a message conforming to a protocol that specifies a format of the content. For example, the server  114  may receive one or more HTTP GET requests from the client device  106 . In response, the server  114  may fetch and/or generate the HTTP resources specified in the HTTP GET request and send them in reply messages addressed to the client device  106 . The network gateway  104  receives the served content and routes  504  the served content to the client device  106 . The client device  106  receives  506  the content. For example, the client device may receive the reply messages, extract the HTTP resources, and display them in a web browser 
     The network gateway  104  analyzes  508  the served content. For example, in parallel with, before, or after routing the reply messages, the network gateway  104  may also examine the HTTP response. The network gateway, optionally using the static content analyzer  110 , may apply one or more tests to the HTTP response to determine if one or more of the HTTP resources should be stored in the cache  102 . For example, the static content analyzer  110  may store one or more threshold values used to analyze the HTTP response. These thresholds can include, but are not limited to, object size, expiration, port number, transfer speed. A test of the HTTP response may compare one or more features of the HTTP response, a header of the HTTP response, or some other data bout the HTTP response to the thresholds. For example, a test of object size less than N mb and a connection speed of less than M mbps may be used. If a HTTP response is received at less than M mbps and if the HTTP response header indicates that the HTTP resource is less than N mb, then the HTTP response can be identified as passing the threshold test and should therefore be cached. 
     If the network gateway  104  determines that the content should be stored in the cache, the network gateway  104  marks  510  the content for caching. For example, the network gateway  104  can record the resource URL in a queue of resources to be cached. This queue may be a priority queue that orders the queue contents by a priority number. The network gateway  104  may calculate a priority number for each resource using, for example, one or more threshold tests. These threshold tests may be the same or different as used to analyze  508  the HTTP response to determine if the HTTP resource should be cached. 
     The cache  102  requests  512  the content and the server  114  serves  514  the content to the cache  102  for storage. For example, the cache  102  may retrieve the next resource to be cached from the priority queue of resources to be cached. In some configurations, the cache  102  may request  512  a resource from the server  114  any time there is a resource identified to be cached. In some configurations, the cache  102  may be configured to request  512  resources on a schedule, for example between 7:00 PM and 5:00 AM, when the connection to the Internet is expected to be low. In some configurations, the cache  102  may be configured to request  512  resources opportunistically. That is, the cache  102  may be configured to request  512  resources when the cache  102 , the connection to the Internet, or when some other resource is being underutilized. 
     Once received, the cache  102  can store the resource, optionally encrypted and/or compressed. The cache may index the resource by the original URL used to request the resource. This may facilitate, for example, fast access if the cache  102  receives a request to serve the resource to the client device  106 . 
       FIG. 6  shows an example of a computing device  600  and an example of a mobile computing device that can be used to implement the techniques described here. The computing device  600  is intended to represent various forms of digital computers, such as laptops, desktops, workstations, personal digital assistants, servers, blade servers, mainframes, and other appropriate computers. The mobile computing device is intended to represent various forms of mobile devices, such as personal digital assistants, cellular telephones, smart-phones, and other similar computing devices. The components shown here, their connections and relationships, and their functions, are meant to be exemplary only, and are not meant to limit implementations of the inventions described and/or claimed in this document. 
     The computing device  600  includes a processor  602 , a memory  604 , a storage device  606 , a high-speed interface  608  connecting to the memory  604  and multiple high-speed expansion ports  610 , and a low-speed interface  612  connecting to a low-speed expansion port  614  and the storage device  606 . Each of the processor  602 , the memory  604 , the storage device  606 , the high-speed interface  608 , the high-speed expansion ports  610 , and the low-speed interface  612 , are interconnected using various busses, and may be mounted on a common motherboard or in other manners as appropriate. The processor  602  can process instructions for execution within the computing device  600 , including instructions stored in the memory  604  or on the storage device  606  to display graphical information for a GUI on an external input/output device, such as a display  616  coupled to the high-speed interface  608 . In other implementations, multiple processors and/or multiple buses may be used, as appropriate, along with multiple memories and types of memory. Also, multiple computing devices may be connected, with each device providing portions of the necessary operations (e.g., as a server bank, a group of blade servers, or a multi-processor system). 
     The memory  604  stores information within the computing device  600 . In some implementations, the memory  604  is a volatile memory unit or units. In some implementations, the memory  604  is a non-volatile memory unit or units. The memory  604  may also be another form of computer-readable medium, such as a magnetic or optical disk. 
     The storage device  606  is capable of providing mass storage for the computing device  600 . In some implementations, the storage device  606  may be or contain a computer-readable medium, such as a floppy disk device, a hard disk device, an optical disk device, or a tape device, a flash memory or other similar solid state memory device, or an array of devices, including devices in a storage area network or other configurations. A computer program product can be tangibly embodied in an information carrier. The computer program product may also contain instructions that, when executed, perform one or more methods, such as those described above. The computer program product can also be tangibly embodied in a computer- or machine-readable medium, such as the memory  604 , the storage device  606 , or memory on the processor  602 . 
     The high-speed interface  608  manages bandwidth-intensive operations for the computing device  600 , while the low-speed interface  612  manages lower bandwidth-intensive operations. Such allocation of functions is exemplary only. In some implementations, the high-speed interface  608  is coupled to the memory  604 , the display  616  (e.g., through a graphics processor or accelerator), and to the high-speed expansion ports  610 , which may accept various expansion cards (not shown). In the implementation, the low-speed interface  612  is coupled to the storage device  606  and the low-speed expansion port  614 . The low-speed expansion port  614 , which may include various communication ports (e.g., USB, Bluetooth, Ethernet, wireless Ethernet) may be coupled to one or more input/output devices, such as a keyboard, a pointing device, a scanner, or a networking device such as a switch or router, e.g., through a network adapter. 
     The computing device  600  may be implemented in a number of different forms, as shown in the figure. For example, it may be implemented as a standard server  620 , or multiple times in a group of such servers. In addition, it may be implemented in a personal computer such as a laptop computer  622 . It may also be implemented as part of a rack server system  624 . Alternatively, components from the computing device  600  may be combined with other components in a mobile device (not shown), such as a mobile computing device  650 . Each of such devices may contain one or more of the computing device  600  and the mobile computing device  650 , and an entire system may be made up of multiple computing devices communicating with each other. 
     The mobile computing device  650  includes a processor  652 , a memory  664 , an input/output device such as a display  654 , a communication interface  666 , and a transceiver  668 , among other components. The mobile computing device  650  may also be provided with a storage device, such as a micro-drive or other device, to provide additional storage. Each of the processor  652 , the memory  664 , the display  654 , the communication interface  666 , and the transceiver  668 , are interconnected using various buses, and several of the components may be mounted on a common motherboard or in other manners as appropriate. 
     The processor  652  can execute instructions within the mobile computing device  650 , including instructions stored in the memory  664 . The processor  652  may be implemented as a chipset of chips that include separate and multiple analog and digital processors. The processor  652  may provide, for example, for coordination of the other components of the mobile computing device  650 , such as control of user interfaces, applications run by the mobile computing device  650 , and wireless communication by the mobile computing device  650 . 
     The processor  652  may communicate with a user through a control interface  658  and a display interface  656  coupled to the display  654 . The display  654  may be, for example, a TFT (Thin-Film-Transistor Liquid Crystal Display) display or an OLED (Organic Light Emitting Diode) display, or other appropriate display technology. The display interface  656  may comprise appropriate circuitry for driving the display  654  to present graphical and other information to a user. The control interface  658  may receive commands from a user and convert them for submission to the processor  652 . In addition, an external interface  662  may provide communication with the processor  652 , so as to enable near area communication of the mobile computing device  650  with other devices. The external interface  662  may provide, for example, for wired communication in some implementations, or for wireless communication in other implementations, and multiple interfaces may also be used. 
     The memory  664  stores information within the mobile computing device  650 . The memory  664  can be implemented as one or more of a computer-readable medium or media, a volatile memory unit or units, or a non-volatile memory unit or units. An expansion memory  674  may also be provided and connected to the mobile computing device  650  through an expansion interface  672 , which may include, for example, a SIMM (Single In Line Memory Module) card interface. The expansion memory  674  may provide extra storage space for the mobile computing device  650 , or may also store applications or other information for the mobile computing device  650 . Specifically, the expansion memory  674  may include instructions to carry out or supplement the processes described above, and may include secure information also. Thus, for example, the expansion memory  674  may be provide as a security module for the mobile computing device  650 , and may be programmed with instructions that permit secure use of the mobile computing device  650 . In addition, secure applications may be provided via the SIMM cards, along with additional information, such as placing identifying information on the SIMM card in a non-hackable manner. 
     The memory may include, for example, flash memory and/or NVRAM memory (non-volatile random access memory), as discussed below. In some implementations, a computer program product is tangibly embodied in an information carrier. The computer program product contains instructions that, when executed, perform one or more methods, such as those described above. The computer program product can be a computer- or machine-readable medium, such as the memory  664 , the expansion memory  674 , or memory on the processor  652 . In some implementations, the computer program product can be received in a propagated signal, for example, over the transceiver  668  or the external interface  662 . 
     The mobile computing device  650  may communicate wirelessly through the communication interface  666 , which may include digital signal processing circuitry where necessary. The communication interface  666  may provide for communications under various modes or protocols, such as GSM voice calls (Global System for Mobile communications), SMS (Short Message Service), EMS (Enhanced Messaging Service), or MMS messaging (Multimedia Messaging Service), CDMA (code division multiple access), TDMA (time division multiple access), PDC (Personal Digital Cellular), WCDMA (Wideband Code Division Multiple Access), CDMA2000, or GPRS (General Packet Radio Service), among others. Such communication may occur, for example, through the transceiver  668  using a radio-frequency. In addition, short-range communication may occur, such as using a Bluetooth, WiFi, or other such transceiver (not shown). In addition, a GPS (Global Positioning System) receiver module  670  may provide additional navigation- and location-related wireless data to the mobile computing device  650 , which may be used as appropriate by applications running on the mobile computing device  650 . 
     The mobile computing device  650  may also communicate audibly using an audio codec  660 , which may receive spoken information from a user and convert it to usable digital information. The audio codec  660  may likewise generate audible sound for a user, such as through a speaker, e.g., in a handset of the mobile computing device  650 . Such sound may include sound from voice telephone calls, may include recorded sound (e.g., voice messages, music files, etc.) and may also include sound generated by applications operating on the mobile computing device  650 . 
     The mobile computing device  650  may be implemented in a number of different forms, as shown in the figure. For example, it may be implemented as a cellular telephone  680 . It may also be implemented as part of a smart-phone  682 , personal digital assistant, or other similar mobile device. 
     Various implementations of the systems and techniques described here can be realized in digital electronic circuitry, integrated circuitry, specially designed ASICs (application specific integrated circuits), computer hardware, firmware, software, and/or combinations thereof. These various implementations can include implementation in one or more computer programs that are executable and/or interpretable on a programmable system including at least one programmable processor, which may be special or general purpose, coupled to receive data and instructions from, and to transmit data and instructions to, a storage system, at least one input device, and at least one output device. 
     These computer programs (also known as programs, software, software applications or code) include machine instructions for a programmable processor, and can be implemented in a high-level procedural and/or object-oriented programming language, and/or in assembly/machine language. As used herein, the terms machine-readable medium and computer-readable medium refer to any computer program product, apparatus and/or device (e.g., magnetic discs, optical disks, memory, Programmable Logic Devices (PLDs)) used to provide machine instructions and/or data to a programmable processor, including a machine-readable medium that receives machine instructions as a machine-readable signal. The term machine-readable signal refers to any signal used to provide machine instructions and/or data to a programmable processor. 
     To provide for interaction with a user, the systems and techniques described here can be implemented on a computer having a display device (e.g., a CRT (cathode ray tube) or LCD (liquid crystal display) monitor) for displaying information to the user and a keyboard and a pointing device (e.g., a mouse or a trackball) by which the user can provide input to the computer. Other kinds of devices can be used to provide for interaction with a user as well; for example, feedback provided to the user can be any form of sensory feedback (e.g., visual feedback, auditory feedback, or tactile feedback); and input from the user can be received in any form, including acoustic, speech, or tactile input. 
     The systems and techniques described here can be implemented in a computing system that includes a back end component (e.g., as a data server), or that includes a middleware component (e.g., an application server), or that includes a front end component (e.g., a client computer having a graphical user interface or a Web browser through which a user can interact with an implementation of the systems and techniques described here), or any combination of such back end, middleware, or front end components. The components of the system can be interconnected by any form or medium of digital data communication (e.g., a communication network). Examples of communication networks include a local area network (LAN), a wide area network (WAN), and the Internet. 
     The computing system can include clients and servers. A client and server are generally remote from each other and typically interact through a communication network. The relationship of client and server arises by virtue of computer programs running on the respective computers and having a client-server relationship to each other.