Wireless communication systems are widely deployed to provide various types of communication (e.g., voice, data, multimedia services, etc.) to multiple users. A wide variety of communication networks is used extensively throughout the world to connect individuals and organizations. The Internet is the best example of many communication networks from different organizations all operating under a single address space. There are many different network structures including, for example, wide area networks (WAN), metropolitan area networks (MAN), local area networks (LAN), campus area networks (CAN), and virtual private networks (VPN).
Many communication networks are based on wireless communications, where interconnections between network nodes are implemented without the use of wires. For example, a wireless local area network (WLAN) links two or more devices using some wireless distribution method (typically spread-spectrum or OFDM radio), and usually providing a connection through an access point to the wider internet. This gives users the mobility to move around within a local coverage area and still be connected to the network. Wireless LANs have become popular in the home due to ease of installation, and the increasing popularity of laptop computers. All components that can connect into a wireless medium in a wireless network are typically referred to as stations. Wireless stations fall into one of two categories: access points, and clients. Access points (APs), normally routers, are base stations for the wireless network. They communicate (e.g., transmit and receive data) with wireless enabled client devices. Wireless client devices include, but are not limited to, mobile devices such as laptops, personal digital assistants, mobile phones, or devices such as desktops and workstations that are equipped with a wireless network interface.
Recently, a new class of small base stations has emerged, which may be installed in a user's home and provide indoor wireless coverage to mobile units using existing broadband Internet connections. Such personal miniature base stations are generally known as access point base stations (gateways) or, alternatively, Home Node B (HNB), femto access points, femtocells or femto nodes. A gateway allows service providers to extend service coverage indoors, especially where access would otherwise be limited or unavailable. Typically, such miniature base stations (gateways) are connected to the Internet and the mobile operator's network via a DSL router or a cable modem. The gateways may form part of local networks and may be connected to various devices.
In one example, a gateway may be located in a particular area (e.g., indoors such as office or home), providing service to user devices within the area, such as, for example, providing connectivity to a wider network, e.g., the Internet or a WAN. User devices may be configured to perform a variety of different tasks. For example, user devices may be configured to receive, pre-process, and relay for further processing data transmitted to the user devices by sensors located within the area. However, user devices participating in the network may be constrained in terms of power, bandwidth, or processing capability. Thus it may be desirable to redistribute certain processing tasks from the user devices to a less constrained device (e.g., a gateway or a server connected with a gateway through a wide area network), while providing for service continuity for the user devices.
Techniques for dynamic task distribution and processing in a wireless communication system are described. In one embodiment, the wireless communication system includes a sensor configured to measure a characteristic and to transmit information indicative of the measured characteristic. The system further includes a mobile device configured to receive and aggregate the information transmitted by the sensor, perform one or more processing tasks related to the aggregated information, determine whether at least one condition necessary for performing at least one of the processing tasks is not satisfied, and transfer a subset of the processing tasks for further performance. The system further includes a local gateway device configured to receive and aggregate the information indicative of the measured characteristic from the sensor and perform the processing tasks related to the aggregated information, receive and perform the transferred subset of the processing tasks from the mobile device, and send the processed information for further processing back to the mobile device or to a remote server.
The techniques described herein may be used for various wireless communication networks such as Code Division Multiple Access (CDMA) networks, Time Division Multiple Access (TDMA) networks, Frequency Division Multiple Access (FDMA) networks, Orthogonal FDMA (OFDMA) networks, Single-Carrier FDMA (SC-FDMA) networks, etc. In some aspects the teachings herein may be employed in a network that includes macro scale coverage (e.g., a large area cellular network such as a 3G networks, typically referred to as a macro cell network) and smaller scale coverage (e.g., a residence-based or building-based network environment). As a user mobile device (also known in the art as “user equipment”) moves through such a network, the user device may be served in certain locations by access nodes that provide macro coverage while the user equipment may be served at other locations by access nodes that provide smaller scale coverage. In some aspects, the smaller coverage nodes may be used to provide incremental capacity growth, in-building coverage, and different services (e.g., for a more robust user experience). In the discussion herein, a node that provides coverage over a relatively large area may be referred to as a macro node (e.g., cell tower or base station). A node that provides coverage over a relatively small area (e.g., a residence or commercial building) may be referred to as a local gateway device or fixed local aggregator.
Techniques are provided for maintaining service continuity with an optional gateway and redistribution of tasks between different nodes for load balancing with local aggregation of data collected from mobile sensors located in proximity to a mobile user device (e.g., a local aggregator device) and tiered pre-processing with variable number of tiers. An example of a system configured to perform the local data aggregation and pre-processing comprises sensors, a mobile local aggregator, and a fixed local aggregator. The sensors are configured to collect data, such as health-related data (in which case sensors may be embedded in the body of, or otherwise associated with, a person). A fixed local aggregator (e.g., a proxy server or a local gateway) assists in the aggregation and pre-processing, along with the mobile local aggregator or bypassing the mobile local aggregator thereby offloading the processing from the mobile local aggregator when the sensors are in range of the gateway before sending the data to a server, in one embodiment, a health provider's remote server. Therefore, the pre-processing is done in a tiered way and the local aggregation point shifts between mobile local aggregator and fixed local aggregator. A mobile wireless device acts as the mobile local aggregator and can be a cellular phone, laptop, PDA, or any other type of user equipment (UE). A fixed local aggregator could be a Bluetooth® AP, ZigBee® health AP, femtocell etc. One or more of both or either of the mobile and fixed local aggregators can be present.
In one embodiment, sensor data is provided to a mobile local aggregator (e.g., a mobile phone) and then relayed to the fixed local aggregator (e.g., a health gateway device). Alternatively, the sensor data may be sent directly to the fixed local aggregator, bypassing the mobile local aggregator. The fixed local aggregator processes or pre-processes the sensor data and then sends the processed data to a remote server for further processing, for example, diagnostic review if the sensors are configured to monitor health-related data of a person. Thus, the fixed local aggregator serves as a local proxy server, or gateway, configured to process the aggregated data. Outside the coverage of the fixed local aggregator, the sensor data are provided to a mobile local aggregator and then relayed to the remote server over the WWAN network to a health service provider server for diagnostic review. In one embodiment, the reception of the sensor data may be “negotiated” between the mobile local aggregator and the fixed local aggregator; for example, the mobile local aggregator may request that the fixed local aggregator receive data from the sensor if conditions related to reception (mobile device internal resources, memory capacity, communication issues and the like) prevent the mobile aggregator from receiving the data from the sensors. By the same token, the fixed local aggregator may request that the mobile local aggregator receive the data from the sensors for similar reasons. In one embodiment, a mobile device associated with the user may be paged when abnormal conditions are detected in the monitored data.
The sensors are configured to communicate with the mobile local aggregator via a personal or home area network protocol, or the like. The mobile local aggregator can transmit the collected sensor data to the fixed local aggregator via a wide area communication protocol or preferably over an out-of-band (OOB) link, e.g., Bluetooth®, ZigBee®, or the like. The sensors may bypass the mobile local aggregator (if their range and power capacity allow for it and the fixed local aggregator is within range) and communicate directly with the fixed local aggregator (gateway) over the OOB link. The fixed local aggregator aggregates and pre-processes the raw data and sends the pre-processed data over the WWAN network or wired broadband network to a health service provider server for diagnostic review. If any abnormality is detected, the mobile local aggregator is notified.
The mobile local aggregator, when using the OOB link to connect with the fixed local aggregator, consumes less power compared to the use of conventional communication links, such as 3G. Similarly, mobile local aggregator power consumption can be reduced by offloading pre-processing of the sensor data from the mobile local aggregator to the fixed local aggregator. Furthermore, data pre-processing can be seamlessly shifted between the mobile local aggregator, the fixed local aggregator, and a remote server depending on the proximity of the transmitting sensor to the mobile local aggregator, the proximity of the mobile local aggregator to the fixed local aggregator, the energy efficiency of a given communication link, and the available power of the mobile local aggregator. Thus, the described techniques provide for maintaining service continuity of mobile sensor data by a mobile local aggregator with distributed task management between mobile sensors, and the fixed local aggregator, thereby enabling tiered pre-processing with variable number of tiers. The techniques are described below in greater detail in reference to
As described above, a node 104 may provide a UE 106 access within its coverage area to a communication network, such as, for example the Internet or a cellular network. A UE 106 may be a wireless communication device (e.g., a mobile phone, router, personal computer, server, etc.) used by a user to send and receive voice or data over a communication network. A user equipment (UE) may also be referred to herein as a mobile device, a user device, or a mobile local aggregator. As shown, UEs 106a, 106h, and 106j comprise routers. UEs 106b-106g, 106i, 106k, and 106l comprise mobile phones. However, each of UEs 106a-106l may comprise any suitable communication device. In the embodiments described herein UEs 106a, 106h, and 106j may comprise local gateway devices, whereas UEs 106b-106g, 106i, 106k, and 106l comprise mobile local aggregators or mobile devices.
In one embodiment, the mobile local aggregator 206 may transmit the collected sensor data to the gateway 208 via a wide area communication protocol (e.g., 3G) or, in one embodiment, over an out-of-band (OOB) link, e.g., Bluetooth®, ZigBee®, or the like. The gateway 208 is configured to aggregate and process (pre-process) the raw data received from the sensors 204 and to send the pre-processed data over the network 212 (in one embodiment, over WWAN or wired broadband network) to a remote server, such as a health service provider server 214, for diagnostic review. If any abnormality is detected, the mobile local aggregator 206 may be notified of the detected abnormality.
In one embodiment, the user 202, associated sensors 204, mobile local aggregator 206, and the gateway 208 may be located indoors, e.g., in a building, house, room or other indoor location. The user 224 may be located outside of the gateway 208's communication range (e.g., outdoors) and thus the mobile device 220 may be connected to a wide network (e.g., network 212) through a macro node (e.g., cell tower) 210. Thus, a possible connection between a user mobile device (e.g., 206 or 220) and the remote server 214 may be accomplished via the cell tower 210 and network 212 when the user mobile device is outside of gateway 208's range.
In one embodiment, the gateway 306 may be treated as a trusted extension of the mobile aggregator 304. For example, the gateway 306 may be used to store data corresponding to users of the mobile aggregator 304 such as preferences, transactions histories, or profiles. Based on the stored information, the gateway 310 may be able to better perform processing tasks on behalf of the mobile aggregator 304. In one embodiment, the gateway 306 may be able to utilize the stored information without exposing or providing the information directly to other devices such as the server 314. In this manner, the gateway 306 can offer enhanced functionality without compromising privacy or security. In one embodiment, the information regarding each mobile aggregator 304 may be logically separated on the gateway 306. In this manner, the information corresponding to each mobile aggregator 304 can be kept separate and secure. In other embodiments, the gateway 306 may also comprise offload resources for the server 314.
The processing module 405 may further be coupled, via one or more buses, to a storing module 410. The processing module 405 may read information from or write information to the storing module 410. For example, the storing module 410 may be configured to store inbound our outbound messages before, during, or after processing. In particular, the storing module 410 may be configured to store information relating process offloading. In one aspect, the storing module 410 may also be configured to store information related to a processing task that has been offloaded from the mobile local aggregator 304.
The receiving module 430 and the transmitting module 431 may comprise an antenna and a transceiver. The transceiver may be configured to modulate/demodulate the wireless outbound/inbound messages. The wireless outbound/inbound messages may be transmitted/received via the antenna. The antenna may be configured to send and/or receive the outbound/inbound wireless messages over one or more channels. The receiving module 430 may demodulate the data received. The transmitting module 431 may modulate data to be sent from the gateway 400. The processing module 405 may provide data to be transmitted.
The receiving module 430 and the transmitting module 431 may further comprise a modem. The modem may be configured to modulate/demodulate the outbound/inbound wired messages going to or coming from the network. The receiving module 430 may demodulate data received. The demodulated data may be transmitted to the processing module 405. The transmitting module 431 may modulate data to be sent from the gateway 400. The processing module 405 may provide data to be transmitted.
The storing module 410 may comprise processing module cache, including a multi-level hierarchical cache in which different levels have different capacities and access speeds. The storing module 410 may also comprise random access memory (RAM), other volatile storage devices, or non-volatile storage devices. The storage may include hard drives, optical discs, such as compact discs (CDs) or digital video discs (DVDs), flash memory, floppy discs, magnetic tape, and Zip drives.
Although described separately, it is to be appreciated that functional blocks described with respect to the gateway 400 need not be separate structural elements. For example, the processing module 405 and the storing module 410 may be embodied in a single chip. The processing module 405 may additionally, or in the alternative, contain memory, such as registers. Similarly, one or more of the functional blocks or portions of the functionality of various blocks may be embodied in a single chip. Alternatively, the functionality of a particular block may be implemented on two or more chips.
One or more of the functional blocks and/or one or more combinations of the functional blocks described with respect to the gateway 400, such as the processing module 405, may be embodied as a general purpose processor, a digital signal processor (DSP), an application specific integrated circuit (ASIC), a field programmable gate array (FPGA) or other programmable logic device, discrete gate or transistor logic, discrete hardware components, or any suitable combination thereof designed to perform the functions described herein. One or more of the functional blocks and/or one or more combinations of the functional blocks described with respect to the gateway 400 may also be implemented as a combination of computing devices, e.g., a combination of a DSP and a microprocessor, a plurality of microprocessors, one or more microprocessors in conjunction with a DSP communication, or any other such configuration.
The processing module 505 may further be coupled, via one or more buses, to a storing module 510. The processing module 505 may read information from or write information to the storing module 510. For example, the storing module 510 may be configured to store inbound our outbound messages before, during, or after processing. In particular, the storing module 510 may be configured to store information relating process offloading.
The receiving module 540 and the transmitting module 541 may comprise an antenna and a transceiver. The transceiver may be configured to modulate/demodulate the wireless outbound/inbound messages going to or coming from local network device 540 or another user device. The wireless outbound/inbound messages may be transmitted/received via the antenna. The antenna may be configured to send and/or receive the outbound/inbound wireless messages over one or more channels. The receiving module 530 may demodulate the data received. The transmitting module 541 may modulate data to be sent from the mobile local aggregator 500. The processing module 505 may provide data to be transmitted.
The storing module 510 may comprise processing module cache, including a multi-level hierarchical cache in which different levels have different capacities and access speeds. The storing module 510 may also comprise random access memory (RAM), other volatile storage devices, or non-volatile storage devices. The storage may include hard drives, optical discs, such as compact discs (CDs) or digital video discs (DVDs), flash memory, floppy discs, magnetic tape, and Zip drives.
Although described separately, functional blocks described with respect to the mobile local aggregator 500 need not be separate structural elements. For example, the processing module 505 and the storing module 510 may be embodied in a single chip. The processing module 505 may additionally, or in the alternative, contain memory, such as registers. Similarly, one or more of the functional blocks or portions of the functionality of various blocks may be embodied in a single chip. Alternatively, the functionality of a particular block may be implemented on two or more chips.
One or more of the functional blocks and/or one or more combinations of the functional blocks described with respect to the mobile local aggregator 500, such as the processing module 505, may be embodied as a general purpose processor, a digital signal processor (DSP), an application specific integrated circuit (ASIC), a field programmable gate array (FPGA) or other programmable logic device, discrete gate or transistor logic, discrete hardware components, or any suitable combination thereof designed to perform the functions described herein. One or more of the functional blocks and/or one or more combinations of the functional blocks described with respect to the gateway 400 may also be implemented as a combination of computing devices, e.g., a combination of a DSP and a microprocessor, a plurality of microprocessors, one or more microprocessors in conjunction with a DSP communication, or any other such configuration.
The processing module 655 may further be coupled, via one or more buses, to a storing module 660. The processing module 655 may read information from or write information to the storing module 660. For example, the storing module 660 may be configured to store inbound our outbound messages before, during, or after processing. In particular, the storing module 660 may be configured to store information relating process offloading.
The receiving module 670 and the transmitting module 680 may comprise a modem. The modem may be configured to modulate/demodulate the outbound/inbound wired messages going to or coming from the network. The receiving module 670 may demodulate data received. The demodulated data may be transmitted to the processing module 655. The transmitting module 680 may modulate data to be sent from the server 600. The processing module 655 may provide data to be transmitted.
The storing module 660 may comprise processing module cache, including a multi-level hierarchical cache in which different levels have different capacities and access speeds. The storing module 660 may also comprise random access memory (RAM), other volatile storage devices, or non-volatile storage devices. The storage may include hard drives, optical discs, such as compact discs (CDs) or digital video discs (DVDs), flash memory, floppy discs, magnetic tape, and Zip drives.
Although described separately, functional blocks described with respect to the server 600 need not be separate structural elements. For example, the processing module 655 and the storing module 660 may be embodied in a single chip. The processing module 655 may additionally, or in the alternative, contain memory, such as registers. Similarly, one or more of the functional blocks or portions of the functionality of various blocks may be embodied in a single chip. Alternatively, the functionality of a particular block may be implemented on two or more chips.
One or more of the functional blocks and/or one or more combinations of the functional blocks described with respect to the server 600, such as the processing module 655, may be embodied as a general purpose processor, a digital signal processor (DSP), an application specific integrated circuit (ASIC), a field programmable gate array (FPGA) or other programmable logic device, discrete gate or transistor logic, discrete hardware components, or any suitable combination thereof designed to perform the functions described herein. One or more of the functional blocks and/or one or more combinations of the functional blocks described with respect to with respect to the server 600 may also be implemented as a combination of computing devices, e.g., a combination of a DSP and a microprocessor, a plurality of microprocessors, one or more microprocessors in conjunction with a DSP communication, or any other such configuration.
In some embodiments, it is desirable for the mobile local aggregator (mobile device) to be able to distribute some of its tasks related to information received from the sensors, for example, to a local gateway device. Similarly, the local gateway device may need to distribute some of its tasks back to the mobile device. The tasks may include receiving information from the sensors, aggregating the received information, processing the received information, analyzing the processed information, transmitting information, and the like. In general, offloading a task or distributed computing refer to a process by which multiple entities cooperate to perform a function. Where one device is constrained in terms of resources such as power or computing capability, such as processor capacity, available memory, and the like, offloading certain tasks can increase the functional capabilities of the device. For example, the battery life of the mobile local aggregator may be limited such that power intensive computational operations can not be performed indefinitely. Thus, redistributing a task may extend the battery life of the mobile local aggregator. Alternatively, limitations on the computing power in terms of operations per second or types of operations may constrain speed or accuracy of certain calculations. Offloading a task may allow the mobile local aggregator to quickly obtain results without requiring hardware capability or power for quickly generating the results.
In one embodiment, it may be desirable to offload a task where the cost of transmitting the request and receiving the response is lower than the cost of performing the task. Thus, for example, if the task to be offloaded is computationally simple, but involves significant amounts of data, the cost of sending the data to the gateway to be processed and the cost of receiving the processed data may exceed the cost of performing the operation. In this case, the local mobile aggregator may determine not to offload the task. In some embodiments, where the mobile aggregator is not capable of performing the processing task, the relative cost of communication is moot and the task may be offloaded. However, in such instances, using the gateway to offload the task is advantageous because the latency of such communications is low and because the data transferred to the gateway does not have to be exposed to the network for processing. Thus the security and privacy of the data may be better maintained.
More generally, the allocation of tasks to different nodes can be based on factors such as the cost for communication of a message on a wireless link, the cost of computation of tasks on each node, i.e., the mobile local aggregator, gateway, and remote server, the relative amount of energies available on each node, their frequency of charging, the link conditions, the bandwidth of a wireless channel, the interference on a wireless channel, the utilization factor of a channel, the number of nodes on a given channel, the wireless protocol being used for a given wireless link and the efficiency of the protocol, the degree of redundancy of information on the channel, a monetary cost of any for utilization of a link, and so on. Further, the decision to offload (redistribute) a task may be made dynamically based on current or previous conditions or statically based on the nature of the task to be offloaded or other factors. In one embodiment, determining a task to offload may comprise determining a resource saving value based on one or more of the factors described above. For example, the resource saving value may be an amount of energy that would be saved by offloading the task rather than performing the task locally at the mobile local aggregator or gateway. The mobile aggregator, the gateway, and the remote server may be configured to compare the resource savings value to a threshold and decide to offload the task if the savings value exceeds the threshold for each respective device. Thus, in one embodiment, the mobile local aggregator and the fixed local aggregator may “negotiate” with each other and dynamically distribute processing tasks depending on particular conditions or parameters of each respective device.
Accordingly, in one embodiment, a local gateway device may be used for offloading processing tasks from the mobile device. For example, the mobile device may supply the gateway with data and with an instruction to perform certain operations on the data. The gateway may perform the operations and return the result to the mobile device. In this manner, the mobile device is able to conserve the power or other resources that would have been consumed by performing the operations at the mobile device. In another example, the gateway may receive communications from the network for the mobile device. However, rather than passing the communications on to the mobile device, the gateway may perform a processing task on the communications. For example, the gateway may be configured to filter out irrelevant communications rather than passing them along. In this manner, the band width and power associated with receiving irrelevant communications are saved by the mobile device. In addition, the mobile device conserves the resources that would have been spent determining which communications were irrelevant. In general, the gateway may advantageously be treated as an extension of the mobile device. Thus, the mobile device may be configured to access the relatively abundant processing and power resources of the gateway.
At block 926, it determined whether the request has been accepted. If the request was accepted, at block 930 the data is sent to server for pre-processing. If the request has not been accepted, the mobile aggregator continues to aggregate the data received from sensors at block 934, after which the processor returns to block 906. The process 900 then ends. Typically, the remote server is always expected to accept processing requests from the mobile aggregator or the gateway because otherwise system reliability issues may arise. Similarly, the local gateway is expected to always accept processing requests from mobile devices or sensors and either perform the task or do some processing and then send it for further processing or send task without doing any processing.
As discussed above, the various embodiments can be implemented in a wide variety of operating environments, which in some cases can include one or more client computers, computing devices, or processing devices which can be used to operate any of a number of applications. Client devices can include any of a number of general purpose personal computers, such as desktop or laptop computers running a standard operating system, as well as cellular, wireless, and handheld devices running mobile software and capable of supporting a number of networking and messaging protocols. Such a system also can include a number of workstations running any of a variety of commercially available operating systems and other known applications for purposes such as development and database management. These devices also can include other electronic devices, such as dummy terminals, thin-clients, gaming systems, and other devices capable of communicating via a network.
Various aspects also can be implemented as part of at least one service or Web service, such as may be part of a service-oriented architecture. Services such as Web services can communicate using any appropriate type of messaging, such as by using messages in extensible markup language (XML) format and exchanged using an appropriate protocol such as SOAP (derived from the “Simple Object Access Protocol”). Processes provided or executed by such services can be written in any appropriate language, such as the Web Services Description Language (WSDL). Using a language such as WSDL allows for functionality such as the automated generation of client-side code in various SOAP frameworks.
Many embodiments utilize at least one network that would be familiar to those skilled in the art for supporting communications using any of a variety of commercially available protocols, such as TCP/IP, OSI, FTP, UPnP, NFS, CIFS, and AppleTalk. The network can be, for example, a local area network, a wide-area network, a virtual private network, the Internet, an intranet, an extranet, a public switched telephone network, an infrared network, a wireless network, and any combination thereof.
In embodiments utilizing a remote Web server, the Web server can run any of a variety of server or mid-tier applications, including HTTP servers, FTP servers, CGI servers, data servers, Java servers, and business application servers. The server(s) also may be capable of executing programs or scripts in response to requests from client devices, such as by executing one or more Web applications that may be implemented as one or more scripts or programs written in any programming language, such as Java®, C, C# or C++, or any scripting language, such as Perl, Python, or TCL, as well as combinations thereof. The server(s) may also include database servers, including without limitation, those commercially available from Oracle®, Microsoft®, Sybase®, and IBM®.
The environment can include a variety of data stores and other memory and storage media as discussed above. These can reside in a variety of locations, such as on a storage medium local to (and/or resident in) one or more of the computers or remote from any or all of the computers across the network. In a particular set of embodiments, the information may reside in a storage-area network (“SAN”) familiar to those skilled in the art. Similarly, any necessary files for performing the functions attributed to the computers, servers, or other network devices may be stored locally and/or remotely, as appropriate. Where a system includes computerized devices, each such device can include hardware elements that may be electrically coupled via a bus, the elements including, for example, at least one central processing unit (CPU), at least one input device (e.g., a mouse, keyboard, controller, touch screen, or keypad), and at least one output device (e.g., a display device, printer, or speaker). Such a system may also include one or more storage devices, such as disk drives, optical storage devices, and solid-state storage devices, such as random access memory (“RAM”) or read-only memory (“ROM”), as well as removable media devices, memory cards, flash cards, and the like.
Such devices also can include a computer-readable storage media reader, a communications device (e.g., a modem, a network card (wireless or wired), an infrared communication device), and working memory as described above. The computer-readable storage media reader can be connected with, or configured to receive, a computer-readable storage medium, representing remote, local, fixed, and/or removable storage devices, as well as storage media for temporarily and/or more permanently containing, storing, transmitting, and retrieving computer-readable information. The system and various devices also typically will include a number of software applications, modules, services, or other elements located within at least one working memory device, including an operating system and application programs, such as a client application or Web browser. Alternate embodiments may have numerous variations from that described above. For example, customized hardware might also be used and/or particular elements might be implemented in hardware, software (including portable software, such as applets), or both. Further, connection to other computing devices such as network input/output devices may be employed.
Storage media and computer-readable media for containing code, or portions of code, can include any appropriate media known or used in the art, including storage media and communication media, such as, but not limited to, volatile and non-volatile, removable and non-removable media implemented in any method or technology for storage and/or transmission of information such as computer-readable instructions, data structures, program modules, or other data, including RAM, ROM, EEPROM, flash memory or other memory technology, CD-ROM, digital versatile disk (DVD) or other optical storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other medium which can be used to store the desired information and which can be accessed by the system device. Based on the disclosure and teachings provided herein, a person of ordinary skill in the art will appreciate other ways and/or methods to implement the various embodiments.
The specification and drawings are, accordingly, to be regarded in an illustrative rather than a restrictive sense. Various modifications and changes may be made thereunto without departing from the broader spirit and scope of the present disclosure as set forth in the claims.