Location aware conferencing system and method

In one embodiment, a method includes receiving a first request to join a conference from a first user device. The location of the first user device is determined. Based on the location of the first user device, the proximity of the first user device relative to endpoints configured to facilitate the conference is identified. A first one of the endpoints that is more proximate to the first user device than other endpoints is selected for handling the conferences.

TECHNICAL FIELD

This disclosure relates generally to the field of communications and, more specifically, to a location aware conferencing system and method.

BACKGROUND

For some conferences or meetings, all the attendees or participants may not be in the same location. For example, some of the participants may be in one conference room, while other participants may be in another conference room and/or at various separate remote locations. Still other participants may be in transit between two locations and/or may be dialing into the conference using a mobile device. Regardless of the location of the user, conferencing systems such as WebEx or other collaborative applications require the participant to dial and/or identify a phone number that the application may dial to conference in the participant.

DETAILED DESCRIPTION

Overview

In one embodiment, a method includes receiving a first request to join a conference from a first user device. The location of the first user device is determined. Based on the location of the first user device, the proximity of the first user device relative to endpoints configured to facilitate the conference is identified. A first one of the endpoints that is more proximate to the first user device than other endpoints is selected for handling the conferences.In another embodiment, a system includes a processor. The system also includes a non-transitory computer-readable storage medium embodying software. The software is operable when executed by the processor to receive a first request to join a conference from a first user device and determine a location of the first user device. Based on the location of the first user device, the software is operable to identify a proximity of the first user device relative to a plurality of endpoints configured to facilitate the conference. A an endpoint that is more proximate to the first user device than other endpoints is selected for handling the conference.

Description

FIG. 1illustrates an example conferencing system100, in accordance with certain embodiments of the present disclosure. In general, conferencing system100may allow numerous users116, some or all of whom may be in different or remote locations, to participate in a conference. A conference may represent any meeting, conversation, or discussion between users116. For example, conferencing system100may allow each user116to hear what remote users116are saying. In particular, conferencing system100may include one or more conference locations110, one or more endpoints112, one or more user devices114, one or more users116, a controller120, and a mobility services engine122. Endpoints112, user devices114, controller120, and mobility services engine122may be communicatively coupled by a network130.

Conference locations110may be any location from which one or more users116participate in a conference. In the example ofFIG. 1, users116a-care located in a first conference location110a, which may be a conference room, in a particular embodiment. User116dis depicted as being located in a second conference location110b, which is remote from the first conference location110aand which may include the office of user116d, in a particular embodiment. However, although only one user is depicted at second conference location110b, it is recognized that any number of users116could be located in second conference location110b. The depicted example also includes a fifth user116ethat is in transit between first conference location110aand second conference location110b. It is generally recognized, however, that the depicted conferencing system100is merely one example conferencing system. Conferencing system100may include any suitable number of conference locations110and any suitable number of users116may be located at each conference location110or in transit between conference locations110. It is further recognized that conference locations110may include conference rooms, offices, homes, or any other suitable location.

Each conference location110may include an endpoint112. Endpoint112may refer to any device that connects a conference location110to a conference. Endpoint112may be operable to capture audio and/or video from conference location110(e.g. using one or more microphones and/or cameras) and transmit audio and/or video signals124to endpoints112at other conference locations110(e.g. through controller120). Endpoint112may also be operable to play audio and/or video signals124received from other endpoints112. In some embodiments, endpoint112may include a speakerphone, conference phone, telephone, computer, workstation, Internet browser, electronic notebook, Personal Digital Assistant (PDA), cellular or mobile phone, pager, or any other suitable device (wireless, wireline, or otherwise), component, or element capable of receiving, processing, storing, and/or communicating information with other components of conferencing system100. Endpoint112may also comprise any suitable user interface such as a display, microphone, speaker, keyboard, or any other appropriate terminal equipment usable by a user116. Conferencing system100may comprise any suitable number and combination of endpoints112.

User devices114may refer to any device that enables a user116to interact with controller120. In some embodiments, a user device114may include a computer, workstation, telephone, Internet browser, electronic notebook, laptop computer, Personal Digital Assistant (PDA), cellular or mobile phone, pager, or any other suitable device (wireless, wireline, or otherwise), component, or element capable of receiving, processing, storing, and/or communicating information with other components of conferencing system100. User device114may also comprise any suitable user interface such as a display, microphone, keyboard, camera, or any other appropriate equipment usable by a user116. Conferencing system100may comprise any number and combination of user devices114. In some embodiments, each user116may have a corresponding user device114situated near the user116. In other embodiments, only some users116may have a user device114.

In certain embodiments, network130may refer to any interconnecting system capable of transmitting audio, video, signals, data, messages, or any combination of the preceding. Network130may include all or a portion of a public switched telephone network (PSTN), a public or private data network, a local area network (LAN), a metropolitan area network (MAN), a wide area network (WAN), a local, regional, or global communication or computer network such as the Internet, a wireline or wireless network, an enterprise intranet, or any other suitable communication link, including combinations thereof.

In some embodiments, controller120may refer to any suitable combination of hardware and/or software implemented in one or more modules to process data and provide the described functions and operations. In some embodiments, the functions and operations described herein may be performed by multiple controllers120. In some embodiments, controller120may include, for example, a mainframe, server, host computer, workstation, web server, file server, a personal computer such as a laptop, or any other suitable device operable to process data. In some embodiments, controller120may execute any suitable operating system such as IBM's zSeries/Operating System (z/OS), MS-DOS, PC-DOS, MAC-OS, WINDOWS, UNIX, OpenVMS, or any other appropriate operating systems, including future operating systems. In some embodiments, controller120may be a web server running Microsoft's Internet Information Server™.

In general, controller120communicates with endpoints112and user devices114to facilitate a conference between users116. In some embodiments, controller120may include a processor140and a memory150. Processor140is generally operable to execute logic152stored in memory150to facilitate a conference between users116according to the disclosure. Processor140may include one or more microprocessors, controllers, or any other suitable computing devices or resources. Processor140may work, either alone or with components of conferencing system100, to provide a portion or all of the functionality of conferencing system100described herein. In some embodiments, processor140may include, for example, any type of central processing unit (CPU).

Processor140is communicatively coupled to a memory150. Memory150may refer to any suitable device capable of storing and facilitating retrieval of data and/or instructions. Examples of memory150include computer memory (for example, Random Access Memory (RAM) or Read Only Memory (ROM)), mass storage media (for example, a hard disk), removable storage media (for example, a Compact Disk (CD) or a Digital Video Disk (DVD)), database and/or network storage (for example, a server), and/or any other volatile or non-volatile computer-readable memory devices that store one or more files, lists, tables, or other arrangements of information. AlthoughFIG. 1illustrates memory150as internal to controller120, it should be understood that memory150may be internal or external to controller120, depending on particular implementations. Also, memory150may be separate from or integral to other memory devices to achieve any suitable arrangement of memory devices for use in conferencing system100.

Memory150is generally operable to store logic152and user/device information154. Logic152generally refers to logic, rules, algorithms, code, tables, and/or other suitable instructions for performing the described functions and operations. In some embodiments, logic152includes a communication solution which provides a conferencing or other collaborative application such as WebEx, available from Cisco Systems, Inc.

User/device information154may be any suitable data associated with and/or used to identify or authenticate users116. In particular embodiments, user/device information154may include a name, a username, an IP address, a MAC address, one or more phone numbers, and/or other identifying information. In some embodiments, user/device information154may be received from user devices114. For example, when a user uses endpoint112or user device114to initiate a conferencing session, the user may input information that is used by controller120to set up or conduct the conferencing session. A more specific example might include the user inputting user login information such as a name and password. As another example, a user may be required to enter one or more phone numbers associated with one or more devices used the user. In other embodiments, some or all of user/device information154may be directly determined by logic152. In some embodiments, user/device information154may be stored in a database, which may also include additional information about users116. In general, user/device information154may allow controller120to identify one or more users114.

In operation, logic152, when executed by processor140, facilitates a conference between users116. Logic152may receive audio and/or video signals124from endpoints112. In the example ofFIG. 1, logic152receives audio signal124afrom endpoint112aand audio signal124bfrom endpoint112b. Audio signal124amay represent audio captured by the endpoint112a, such as the voices of the users116proximate the endpoint112a. Likewise, audio signal124bmay represent audio captured by endpoint112b. Logic152may route audio and/or video signals124between the endpoints112. In the example ofFIG. 1, logic152transmits audio signal124ato endpoint112b. Likewise, logic152transmits audio signal124bto endpoints112a. In other embodiments, logic152may facilitate a connection between endpoints112so that endpoints112may communicate directly to exchange audio and/or video signals124.

Logic152may also receive join requests156from user devices114. Join requests156may represent requests to join a conference. In the example of FIG.1, logic152receives join requests156a-efrom user devices114a-e, respectively. In some embodiments, join requests156may include a username. The username may represent and/or be selected by the user116who is operating the particular user device114and/or endpoint112submitting the join request156. In certain embodiments, logic152may determine the location of endpoints112and the location of user devices114relative to the endpoints112. For example, logic152may determine that user device114ais proximate endpoint112a.

In particular embodiments, the location of user devices114and endpoints112may be determined by mobility services engine (MSE)122. In some embodiments, MSE122may refer to any suitable combination of hardware and/or software implemented in one or more modules to process data and provide the described functions and operations. In some embodiments, the functions and operations described herein may be performed by multiple MSEs122. In some embodiments, MSE122may include, for example, a mainframe, server, host computer, workstation, web server, file server, a personal computer such as a laptop, or any other suitable device operable to process data. In some embodiments, MSE122may execute any suitable operating system such as IBM's zSeries/Operating System (z/OS), MS-DOS, PC-DOS, MAC-OS, WINDOWS, UNIX, OpenVMS, or any other appropriate operating systems, including future operating systems. In some embodiments, MSE122may be a web server running Microsoft's Internet Information Server™.

In general, MSE122communicates with controller120, endpoints112, and/or user devices114to determine the location of user devices114relative to endpoints112for the purpose of facilitating a conference between users116. In some embodiments, MSE122may include a processor160and a memory162. Processor160is generally operable to execute logic164stored in memory162to determine the locations of endpoints112according to the disclosure. Processor160may include one or more microprocessors, controllers, or any other suitable computing devices or resources. Processor160may work, either alone or with components of conferencing system100, to provide a portion or all of the functionality of conferencing system100described herein. In some embodiments, processor160may include, for example, any type of central processing unit (CPU).

Processor160is communicatively coupled to a memory162. Memory162may refer to any suitable device capable of storing and facilitating retrieval of data and/or instructions. Examples of memory162include computer memory (for example, Random Access Memory (RAM) or Read Only Memory (ROM)), mass storage media (for example, a hard disk), removable storage media (for example, a Compact Disk (CD) or a Digital Video Disk (DVD)), database and/or network storage (for example, a server), and/or any other volatile or non-volatile computer-readable memory devices that store one or more files, lists, tables, or other arrangements of information. AlthoughFIG. 1illustrates memory162as internal to MSE122, it should be understood that memory162may be internal or external to MSE122, depending on particular implementations. Also, memory162may be separate from or integral to other memory devices to achieve any suitable arrangement of memory devices for use in conferencing system100.

Memory162is generally operable to store logic164and logic information166. Logic164generally refers to logic, rules, algorithms, code, tables, and/or other suitable instructions for performing the described functions and operations. In some embodiments, logic164includes a communications solution which provides location identification services such as Mobility Services Engine, available from Cisco Systems, Inc.

Location information166may be any suitable data associated with and/or used to identify the location of user devices114. In some embodiments, location information166may be received from user devices114, endpoints112, or other components of system100. In some embodiments, location information166may include identifiers for all devices114and endpoints112capable of coupling to network130using a WIFI connection. In some embodiments, location information166may include location information associated with endpoints112that are capable of facilitating a conferencing session. For example, location information166may include one or more facility maps that identify the location of endpoints112within an enterprise facility. In some embodiments, location information166may be stored in a database, which may also include additional information about user devices114and/or endpoints112.

As described above, logic164, when executed by processor160, is configured to detect the location of a user device114relative to an endpoint112for use by controller120in facilitating a conferencing session. For example, it is described above that when user116aat first conference location110awishes to join a conferencing session the user116amay use user device114ato transmit a join request156a. In one particular embodiment, the join request may be generated in response to user116aclicking on a URL link within an email related to a scheduled conferencing session. Specifically, a current meeting page may be displayed on user device114ain response to user116aclicking the URL link within the email. The meeting page may include a connect button that user116amay select to join the conferencing session. In certain embodiments, join request156amay be generated after and because user116aselects the connect button. In other embodiments, the generation of the meeting page may be omitted, and the join request may be generated automatically in response to the user116aclicking the URL link within the email.

Join request156amay be transmitted to and received by controller120. In certain embodiments, controller120may then forward join request156a, a portion of join request156a, or some other data relevant to the join request156a, user116a, and/or user endpoint114ato MSE122. In a particular embodiment, controller120may transmit a query to MSE122that requests location information for endpoint114a. Logic164of MSE122may then operate to determine the location of user device114a. In certain embodiments, logic164may operate to track the location of user device114abased on the devices's WIFI connection to network130. Specifically, and in a particular embodiment, logic164may use triangulation to pinpoint the location of user device114a.

In particular embodiments, logic164of MSE122may compare the identified location of user device114to location information166to determine the nearest endpoint112that may be used to participate in the conferencing session. For example, when join request156ais received from user device114a, logic164may determine that endpoint112aat first conference location110ais the closest endpoint112to facilitate the teleconference for user116a. Similarly, when join request156dis received from user device114d, logic164may determine that endpoint112bat second conference location110bis the closest endpoint112to facilitate the teleconference for user116d. However, when join request156eis received from user device114e, logic164may determine the location of user device114eand then further determine whether user device114eis closer to first conference location110aor second conference location110b.

After logic164identifies the closest endpoint112, this information may be conveyed to controller120. Controller120may then determine a phone number associated with the closest endpoint112and call the closest endpoint112to initiate the conferencing session. Accordingly, in the depicted example, controller120may identify endpoint112aas being closest to user device114aand call endpoint112ato initiate the conferencing session for user116a. Likewise, controller120may identify endpoint112bas being closest to user device114dand call endpoint112bto initiate the conferencing session for user116d. With regard to user device114e, controller120may identify the endpoint112that is closest to user device114eand call that endpoint to initiate the conferencing session for user116e. Additionally or alternatively, controller120may direct end user116eto the location of the closest endpoint112.

In certain embodiments, controller120may determine that an endpoint112has already initiated the conferencing session and, thus, does not need to be called. For example, controller120may receive a first join request156afrom user device114a. MSE may operate to determine location information of user device114adetermine that user device114ais proximate to endpoint112a. As described above, MSE may provide that information to controller120, which may then dial a phone number associated with endpoint112ato initiate the conferencing session. If, thereafter, controller120receives a second joint request156bfrom user device114b. MSE may then operate to determine location information of user device114band determine that user device114bis also proximate to endpoint112a. MSE may then provide that information to controller120. Controller120may determine that endpoint112ahas already been called and that the conferencing session has already been initiated at first conference location110a. Because the conferencing session is already in progress or has already been initiated, controller120may recognize that no further action is needed to facilitate the conferencing session for user116b.

It is recognized that various changes, alterations, transformations, and modifications may be made to conferencing system100. For example, in certain embodiments, a user116may opt out of automatic calling and instead select to receive location information of endpoints112. As such, controller120may be configured to provide endpoint location information to user devices114rather than automatically call the endpoint locations to initiate the conferencing session. For example, MSE122may operate to determine location information associated with a user device114aand the most proximate endpoint112aas described above. MSE122may transmit the location information to controller120. However, rather than automatically dial a telephone number associated with the most proximate endpoint112ato initiate the conferencing session, controller120may be configured to transmit a message to the user device114a. In a particular embodiment, the message may include a list of phone numbers associated with multiple endpoints112that may be used to initiate the conferencing session. The list of phone numbers may be prioritized, in certain embodiments, such that the most proximate endpoint112is listed first and the furthest endpoint112from the user device114is listed last. A user may then select the endpoint112that the user116would like to use to initiate the conferencing session. Controller120may then dial the phone number associated with the endpoint112selected by the user116.

In certain embodiments, automated dialing or user-selectable dialing may be user customizable. Thus, a user116may set one or more settings maintained by controller120that disable or enable automated dialing. For example, a user may choose to enable automated dialing such that the most proximate endpoint112is always automatically dialed when a join request156is initiated by a user device114. Conversely, a user may choose to disable automated dialing such that the user is always presented with a prioritized list of the most proximate endpoints112. In still other embodiments, a user116may disable or enable automated dialing based on location. For example, a user116may enable automated dialing for the user's office. Thus, controller120may be configured to automatically dial the user's office telephone when controller120determines that the user116is proximate to his office. Conversely, when controller120receives location information identifying the location of the user116as being outside the user's office, controller120may be configured to present the user116with a prioritized list of the most proximate endpoints112.

As another example alteration, controller120may not request location of a user device114in response to a join request. Rather, controller120may register to automatically receive location information for certain or all user devices114that communicate with network100. In one particular embodiment, MSE122may automatically operate to monitor for and detect events associated with a user device114. The event may include, for example, a change in position, containment within a specific boundary, or some other criteria. When an event is detected, MSE122may determine the location of the user device114and match the user device114and/or event to any event subscriptions maintained by the MSE122. When MSE122identifies a match between an event and an event subscription, MSE122may transmit details associated with the user device114and the location information associated with the user device114and/or event to controller120. In this manner or some similar manner, controller120may subscribe to receive location information for user devices114.

As another example, logic164of MSE122may be configured to detect the location of only those user devices114that are registered with network100, in certain embodiments. For example, in a particular embodiment, network100may include a private enterprise network. User devices114may be required to register with the network100before a wireless or other type connection may be established between the user devices114and the network100. In this manner, MSE122may be configured to recognize only those user devices114that are authorized to connect to network100. Additionally, though controller120is described as receiving join requests156a-eand then forwarding such join requests156a-eto MSE122, it is generally recognized that MSE122may receive join request156aor the portion thereof directly from user device114a, in certain embodiments. Thus, either or both of MSE122and controller120may receive join requests156a-efrom user devices114a-e.

FIG. 2illustrates an example conferencing method200, in accordance with certain embodiments of the present disclosure. At step202, a first request to join a conference is received from a first user device. As described above, the join request may be received from a user of a mobile device that maintains a wireless connection with a network, in particular embodiments.

At step204, a location of the first user device may be determined at step204. In a particular embodiment, determining the location of the first user device may include detecting the wireless connection of the first user device with a network. The location of the first user device may then be determined based on the wireless connection of the first user device. For example, triangulation may be used to determine the location of the first user device based on the wireless connection.

At step206, the proximity of the first user device relative to a plurality of endpoints configured to facilitate the conference may be identified. A first one of the plurality of endpoints may be selected for handling the conference at step208. The selected endpoint may be more proximate (i.e., closer) to the first user device than other ones of the plurality of endpoints.

At step210, a determination may be made as whether the selected endpoint is already participating in the conference. If the selected endpoint is already participating in the conference, no further action may required for the user to join the conference, and the method may terminate. If, however, the selected endpoint is not already participating in the conference, the conferencing session may be automatically initiated at the selected endpoint at step212. In a particular embodiment, initiating the conferencing session may include identifying a call-in number associated with the selected endpoint and automatically dialing the call-in number. In other embodiments, the call-in number may not be automatically dialed. Instead, a message may be transmitted to the first user device. The message may include a prioritized list of all endpoints that may facilitate or handle the conferencing system. The list may be prioritized such that the endpoint that is closest to the first user device is listed first and the endpoint that is furthest from the first user device is listed last.

Although the present disclosure describes or illustrates particular operations as occurring in a particular order, the present disclosure contemplates any suitable operations occurring in any suitable order. Moreover, the present disclosure contemplates any suitable operations being repeated one or more times in any suitable order. Although the present disclosure describes or illustrates particular operations as occurring in sequence, the present disclosure contemplates any suitable operations occurring at substantially the same time, where appropriate. Any suitable operation or sequence of operations described or illustrated herein may be interrupted, suspended, or otherwise controlled by another process, such as an operating system or kernel, where appropriate. The acts can operate in an operating system environment or as stand-alone routines occupying all or a substantial part of the system processing.

FIG. 3illustrates a block diagram of a computer300that may be used in accordance with particular embodiments. For instance, in particular embodiments, computer300may be included in one or more user devices114, endpoints112, controller120, and/or MSE122. Each computer300may include its own respective processor311, memory313, instructions314, storage315, interface317, and bus312. These components may work together to perform one or more steps of one or more methods and provide the functionality described herein. For example, in particular embodiments, instructions314in memory313may be executed on processor311in order to perform one or more methods (e.g. the method ofFIG. 3) based on text-based messages (e.g. e-mail messages) monitored by interface317. In certain embodiments, instructions314may reside in storage315instead of, or in addition to, memory313.

The components of computer300may comprise any suitable physical form, configuration, number, type and/or layout. As an example, and not by way of limitation, computer300may comprise an embedded computer system, a system-on-chip (SOC), a single-board computer system (SBC) (such as, for example, a computer-on-module (COM) or system-on-module (SOM)), a desktop computer system, a laptop or notebook computer system, an interactive kiosk, a mainframe, a mesh of computer systems, a mobile telephone, a personal digital assistant (PDA), a server, or a combination of two or more of these. Where appropriate, computer300may include one or more computer systems; be unitary or distributed; span multiple locations; span multiple machines; or reside in a cloud, which may include one or more cloud components in one or more networks.

Processor311may be a microprocessor, controller, application specific integrated circuit (ASIC), or any other suitable computing device operable to provide, either alone or in conjunction with other components (e.g., memory313and instructions314) group formation suggestion functionality. Such functionality may include providing various features discussed herein. In particular embodiments, processor311may include hardware for executing instructions314, such as those making up a computer program or application. As an example and not by way of limitation, to execute instructions, processor311may retrieve (or fetch) instructions314from an internal register, an internal cache, memory313or storage315; decode and execute them; and then write one or more results to an internal register, an internal cache, memory313, or storage315.

In particular embodiments, processor311may include one or more internal caches for data, instructions (e.g., instructions314), or addresses. This disclosure contemplates processor311including any suitable number of any suitable internal caches, where appropriate. As an example and not by way of limitation, processor311may include one or more instruction caches, one or more data caches, and one or more translation lookaside buffers (TLBs). Instructions in the instruction caches may be copies of instructions314in memory313or storage315and the instruction caches may speed up retrieval of those instructions by processor311. Data in the data caches may be copies of data in memory313or storage315for instructions314executing at processor311to operate on; the results of previous instructions executed at processor311for access by subsequent instructions executing at processor311, or for writing to memory313, or storage315; or other suitable data. The data caches may speed up read or write operations by processor311. The TLBs may speed up virtual-address translations for processor311. In particular embodiments, processor311may include one or more internal registers for data, instructions, or addresses. Depending on the embodiment, processor311may include any suitable number of any suitable internal registers, where appropriate. Where appropriate, processor311may include one or more arithmetic logic units (ALUs); be a multi-core processor; include one or more processors311; or any other suitable processor.

Memory313may be any form of volatile or non-volatile memory including, without limitation, magnetic media, optical media, random access memory (RAM), read-only memory (ROM), flash memory, removable media, or any other suitable local or remote memory component or components. In particular embodiments, memory313may include random access memory (RAM). This RAM may be volatile memory, where appropriate. Where appropriate, this RAM may be dynamic RAM (DRAM) or static RAM (SRAM). Moreover, where appropriate, this RAM may be single-ported or multi-ported RAM, or any other suitable type of RAM or memory. Memory313may include one or more memories313, where appropriate. Memory313may store any suitable data or information utilized by computer310, including software (e.g., instructions314) embedded in a computer readable medium, and/or encoded logic incorporated in hardware or otherwise stored (e.g., firmware). In particular embodiments, memory313may include main memory for storing instructions314for processor311to execute or data for processor311to operate on. In particular embodiments, one or more memory management units (MMUs) may reside between processor311and memory313and facilitate accesses to memory313requested by processor311.

As an example and not by way of limitation, computer300may load instructions314from storage315or another source (such as, for example, another computer system, another platform, or another device coupled to computer300) to memory313. Processor311may then load the instructions314from memory313to an internal register or internal cache. To execute instructions314, processor311may retrieve the instructions314from the internal register or internal cache and decode them. During or after execution of instructions314, processor311may write one or more results (which may be intermediate or final results) to the internal register or internal cache. Processor311may then write one or more of those results to memory313. In particular embodiments, processor311may execute only instructions in one or more internal registers or internal caches or in memory313(as opposed to storage315or elsewhere) and may operate only on data in one or more internal registers or internal caches or in memory313(as opposed to storage315or elsewhere).

In particular embodiments, storage315may include mass storage for data or instructions (e.g., instructions314). As an example and not by way of limitation, storage315may include a hard disk drive (HDD), a floppy disk drive, flash memory, an optical disc, a magneto-optical disc, magnetic tape, or a Universal Serial Bus (USB) drive or a combination of two or more of these. Storage315may include removable or non-removable (or fixed) media, where appropriate. Storage315may be internal or external to computer300, where appropriate. In particular embodiments, storage315may be non-volatile, solid-state memory. In particular embodiments, storage315may include read-only memory (ROM). Where appropriate, this ROM may be mask-programmed ROM, programmable ROM (PROM), erasable PROM (EPROM), electrically erasable PROM (EEPROM), electrically alterable ROM (EAROM), or flash memory or a combination of two or more of these. Storage315may take any suitable physical form and may comprise any suitable number or type of storage. Storage315may include one or more storage control units facilitating communication between processor311and storage315, where appropriate.

Interface317may include hardware, encoded software, or both providing one or more interfaces for communication (such as, for example, packet-based communication) between computer300and any other computer systems on network110. As an example, and not by way of limitation, interface317may include a network interface controller (NIC) or network adapter for communicating with an Ethernet or other wire-based network and/or a wireless NIC (WNIC) or wireless adapter for communicating with a wireless network. Interface317may include one or more connectors for communicating traffic (e.g., IP packets) via a bridge card. Depending on the embodiment, interface317may be any type of interface suitable for any type of network in which computer300is used. The network may include an ad-hoc network, a personal area network (PAN), a local area network (LAN), a wide area network (WAN), a metropolitan area network (MAN), or one or more portions of the Internet or a combination of two or more of these. One or more portions of one or more of these networks may be wired or wireless. Computer300may include any suitable interface317for any one or more of these networks, where appropriate.

In some embodiments, interface317may include one or more interfaces for one or more I/O devices. One or more of these I/O devices may enable communication between a person and computer300. As an example, and not by way of limitation, an I/O device may include a keyboard, keypad, microphone, monitor, mouse, printer, scanner, speaker, still camera, stylus, tablet, touchscreen, trackball, video camera, another suitable I/O device or a combination of two or more of these. An I/O device may include one or more sensors. Particular embodiments may include any suitable type and/or number of I/O devices and any suitable type and/or number of interfaces317for them. Where appropriate, interface317may include one or more drivers enabling processor311to drive one or more of these I/O devices. Interface317may include one or more interfaces317where appropriate.

Bus312may include any combination of hardware, software embedded in a computer readable medium, and/or encoded logic incorporated in hardware or otherwise stored (e.g., firmware) to couple components of computer310to each other. As an example and not by way of limitation, bus312may include an Accelerated Graphics Port (AGP) or other graphics bus, an Enhanced Industry Standard Architecture (EISA) bus, a front-side bus (FSB), a HYPERTRANSPORT (HT) interconnect, an Industry Standard Architecture (ISA) bus, an INFINIBAND interconnect, a low-pin-count (LPC) bus, a memory bus, a Micro Channel Architecture (MCA) bus, a Peripheral Component Interconnect (PCI) bus, a PCI-Express (PCI-X) bus, a serial advanced technology attachment (SATA) bus, a Video Electronics Standards Association local (VLB) bus, or any other suitable bus or a combination of two or more of these. Bus312may include any number, type, and/or configuration of buses312, where appropriate. In particular embodiments, one or more buses312(which may each include an address bus and a data bus) may couple processor311to memory313. Bus312may include one or more memory buses.

Herein, reference to a computer-readable storage medium encompasses one or more tangible computer-readable storage media possessing structures. As an example and not by way of limitation, a computer-readable storage medium may include a semiconductor-based or other integrated circuit (IC) (such, as for example, a field-programmable gate array (FPGA) or an application-specific IC (ASIC)), a hard disk, an HDD, a hybrid hard drive (HHD), an optical disc, an optical disc drive (ODD), a magneto-optical disc, a magneto-optical drive, a floppy disk, a floppy disk drive (FDD), magnetic tape, a holographic storage medium, a solid-state drive (SSD), a RAM-drive, a SECURE DIGITAL card, a SECURE DIGITAL drive, a flash memory card, a flash memory drive, or any other suitable tangible computer-readable storage medium or a combination of two or more of these, where appropriate.

Particular embodiments may include one or more computer-readable storage media implementing any suitable storage. In particular embodiments, a computer-readable storage medium implements one or more portions of processor311(such as, for example, one or more internal registers or caches), one or more portions of memory313, one or more portions of storage315, or a combination of these, where appropriate. In particular embodiments, a computer-readable storage medium implements RAM or ROM. In particular embodiments, a computer-readable storage medium implements volatile or persistent memory. In particular embodiments, one or more computer-readable storage media embody encoded software.

Herein, reference to encoded software (e.g. instructions314) may encompass one or more applications, bytecode, one or more computer programs, one or more executables, one or more instructions, logic, machine code, one or more scripts, or source code, and vice versa, where appropriate, that have been stored or encoded in a computer-readable storage medium. In particular embodiments, encoded software includes one or more application programming interfaces (APIs) stored or encoded in a computer-readable storage medium. Particular embodiments may use any suitable encoded software written or otherwise expressed in any suitable programming language or combination of programming languages stored or encoded in any suitable type or number of computer-readable storage media. In particular embodiments, encoded software may be expressed as source code or object code. In particular embodiments, encoded software is expressed in a higher-level programming language, such as, for example, C, Perl, or a suitable extension thereof. In particular embodiments, encoded software is expressed in a lower-level programming language, such as assembly language (or machine code). In particular embodiments, encoded software is expressed in JAVA. In particular embodiments, encoded software is expressed in Hyper Text Markup Language (HTML), Extensible Markup Language (XML), or other suitable markup language.