CONSTRAINT-BASED CONFIGURATION SUPPORTING CALCULATIONS

A constraint-based configurator receives a configuration property expressed as a numeric value. A calculation is performed using the numeric value and a constraint is evaluated based on the result of the calculation. An output is automatically displayed based on the evaluated constraint.

DETAILED DESCRIPTION

FIG. 1is a block diagram of one illustrative constraint-based configuration system100. System100is shown generating user interface displays102with user input mechanism104for use by user106. In the embodiment shown inFIG. 1, system100includes configurator component108, constraint satisfaction problem (CSP) solver component110, and evaluation engine112. CSP solver component110is shown accessing a set of constraints111. Evaluation engine112is illustratively coupled to callable library component114and mathematical function evaluator component116. System100also illustratively includes processor118and data store120.FIG. 1also shows that, in one embodiment, system100includes user interface component122.

Configurator component108generates user interface displays102, using user interface component122. User interface displays102have user input mechanisms104that allow user106to configure an item to be configured. In the embodiment discussed with respect toFIG. 1, constraint-based configuration system100will be deployed as a product configuration system which allows user106to configure products. Of course, this environment is described for the sake of example only and a wide variety of other environments could be used as well. Some of those are described below.

Processor118is illustratively a computer processor with associated memory and timing circuitry (not separately shown). It is illustratively a functional part of system100and is activated by, and facilitates the functionality of, the various components and engines in system100.

Data store120illustratively stores data and other instructions that can be used by processor118in facilitating the functionality of the components and engines in system100. Of course, data store120can store other data as well. It should also be noted that while store120is shown as a single data store that is part of system100, it can be multiple different data stores as well. In addition, the data stores can be local to system100or remote from system100(and accessible by system100), or some can be local and some can be remote.

It will also be noted that various components and engines have been shown in system100. However, those components and engines can be combined into fewer components or engines that perform the functionality, or they can be divided into more components and engines, each of which performs a subset of the functionality. All of these architectures are contemplated herein.

Before describing the operation of system100in detail, an overview will be given for enhanced understanding. User106provides user inputs using user input mechanisms104on displays102to configure a product. User input mechanisms104can include any of a wide variety of user input mechanisms, such as buttons, links, dropdown menus, check boxes, grids, or other user actuatable input mechanisms. They can be actuated in a wide variety of different ways as well. For instance, where user interface displays102are displayed on a touch sensitive display screen, user106can actuate user input mechanisms104using his or her finger, a stylus, or another device. Similarly, the user input mechanisms104can be a soft keyboard displayed on the display device, a hardware keyboard, a point and click device, such as a mouse or trackball, and where constraint-based configuration system100is provided with speech recognition components, the user106can activate user input mechanisms104using voice commands. Also, user input mechanisms104can be actuated using a thumb pad, a keypad, or a wide variety of other items as well.

When user106has provided user inputs, configurator108uses constraint satisfaction problem (CSP) solver component110to solve the combinatorial constraints used to configure a product. While the present discussion proceeds describing the system with a CSP solver, any constraint solver can be used. For instance, a satisfiability solver (SAT solver) can be used or another constraint solver. CSP solver is described for the sake of example only. By way of example, if a user is ordering a television set from a seller, it may be that a certain size of television only comes from the seller in silver and black, but not white. Therefore, CSP solver component110receives the user inputs and applies and solves the constraints111. It will be noted of course, that constraints111can be stored in store120or they can be stored separately or they can be external to system100and accessed by system100, etc.

Configurator component108uses evaluation engine112to evaluate mathematical formulas or to call methods for evaluation. A mathematical or logical formula is a mathematical or logical function that takes as an input one or more variables and targets as an output one or more variables. The variables can be numeric or other types. The methods can be internal to the system or external. For example, they can be in a callable library, at a third party system, etc. Evaluation engine112illustratively accesses mathematical function evaluator component116to evaluate mathematical functions based on inputs provided by user106. Mathematical function evaluator component116has a set of formulas with given sets of input variables and a target variable. When the user or another component provides the input variables, component116evaluates the formulas to obtain a target value as a result.

Evaluation engine112can also call callable library component114in order to perform evaluations. Callable library component114includes a collection of methods with given sets of input variables and a target variable or multiple target variables. The present discussion proceeds with respect to the embodiment having a single target variable for the sake of example only. When the user106provides one or more of the input variables, evaluation engine112can call callable library component114to obtain the target variable, or an estimate of the target variable. For instance, evaluation engine112can still evaluate and invoke functions and methods where some input variables are not set or inferred. This can be done, for instance, where those with missing values can use a default value for each variable type. Evaluation engine112provides the evaluated variables to configurator component108which can notify CSP solver component110that new values have been obtained so that CSP solver component110can solve various constraints111, based on the new values.

FIG. 2is a flow diagram illustrating one embodiment of the overall operation of constraint-based configuration system100, shown inFIG. 1, in more detail.FIGS. 3A-3Jshow illustrative user interface displays generated by system100. FIGS.2and3A-3J will now be described in conjunction with one another.

The present description will proceed with system100being a configuration system that allows a user to configure a box. This is an example only and it is described for illustrative purposes only. System100can be used in many different environments.

FIG. 3Ais one example of a user interface display148that shows characteristics of a product configuration model that allows a user to configure the box. The model includes a set of variables152that can be set by the user. Each variable152has a name in column154, a name that is used by CSP solver component110in column156, and a variable type in column158. While the example shows both a user friendly name in column154and a name used by component110in column156, a single name could be used as well. Additional variables can be added using add button160, and they can be removed using remove button162. The variables shown at152include variables that can be defined using a decimal value, or floating point value. Those variables include area, height, width, length and volume. It will be noted that variables can be of other, more complex, types such as dates, strings, classes, etc.

The variables152also include a Boolean variable “isBig”. As is described below, if the area of the box exceeds a given threshold value, then the “isBig” Boolean variable has a value of true. If the area is less than the threshold, then the “isBig” Boolean variable has a value of false.

Variables152also include a variable that is defined in an enumerated text domain. That variable is the color. The model for the box also includes at least one constraint shown at164and a set of formulas shown at166. The constraint Implies [isBig, color !=“sliver”] is named C1. The variable isBig is part of the C1constraint. The C1constraint means that if the “isBig” Boolean variable is set to true, then the color cannot be “silver”.

The formula at166named Area shows that the area is calculated by multiplying the length variable by the width variable. The Color control formula sets its target variable (the Boolean variable “isBig”) to true if the area calculation (area >2.5) is true. The volume formula is calculated to set its target variable (volume) to a value calculated by multiplying the area variable by the height variable.

In order to begin configuring the box, the user first provides a suitable input (such as a product identifier) that identifies a product that the user wishes to configure (e.g., the box). Configurator component108then generates a user interface display102(using user interface component122) that has user input mechanisms104that can receive an input from user106. This is indicated by block150inFIG. 2. It will be noted that display102can be generated separately from component108as well, such as by a third party.

Continuing with the description of the overall operation of system100,FIG. 3Bis one embodiment of a user interface display170that allows user106to input values for various variables for consideration by configurator component108. User106can input a value for the length variable, the width variable, the height variable, the area variable, or the volume variable. These values can be decimal values, floating point values or other numerical values. Similarly, the user can select a color from a corresponding dropdown menu, and the user can also set the Boolean variable “isBig” to true or false from a dropdown menu. It will be noted that while the user can input values for all of these variables, the user can also input values for only some of the variables and the rest can be calculated by configurator component108(e.g., by either using CSP solver component110or evaluation engine112, or both).

Next, referring again toFIG. 2, configurator component108receives a user input that sets a variable to a value. Receiving the user input setting a variable to a value is indicated by block176inFIG. 2and receiving a value for a variable through evaluation or influence by another portion of the system (as described below) is indicated by block177.FIG. 3Cshows one embodiment of a user interface display172in which the user106has entered the decimal value 1.20 as the length variable by typing it in length text box174. Because the user has only entered the decimal value 1.20 as the length variable, there is not enough information to evaluate any of the constraints or perform any of the calculations specified in constraint section164and formulas section166inFIG. 3A. Thus, nothing else happens. This can be seen from the flow diagram shown inFIG. 2. The variable has had a value set by the user (in this case) and this is indicated by block177inFIG. 2. Having received a variable value, configurator component108determines whether the configuration for the product (e.g., the box) is complete. That is, configurator component108determines whether all variable values have been set sufficiently to completely configure the product. This is indicated by block179inFIG. 2. The answer is no, because only the length value has been input.

Configurator component108thus notifies CSP solver component110that the user has provided an input. This is indicated by block178inFIG. 2. CSP solver component110then determines whether the variable (the value input for the length) is part of a constraint evaluated by the CSP solver. The answer to this question is no, because the only variables that are part of a constraint in the present embodiment shown at164inFIG. 3Aare the Boolean “isBig” variable and the color variable. Therefore, processing continues at block176. Determining whether the variable is a part of a constraint evaluated by the CSP solver component110is indicated by block180inFIG. 2.

Configurator component108also (at the same time as it notifies component110) notifies evaluation engine112that a variable has had a value set. This is indicated by block182inFIG. 2. Evaluation engine112determines whether the value of the variable is an input to a formula or a method. This is indicated by block184. It can be seen that the answer to this is yes, because one of the formulas set out at166inFIG. 3Ais the area formula which takes, as its input, the length and the width. Therefore, evaluation engine112then determines whether the formula or method (in this case, the area formula) has all inputs set to a value so it can be calculated. This is indicated by block186inFIG. 2. The answer to this is no, because only the length variable has been set to a value. The area formula also needs the width variable to be set to a value. Therefore, as with processing at the CSP solver component110, processing at the evaluation engine112reverts back to block176where configurator component108awaits another input.

FIG. 3Dshows one embodiment of a user interface display188where the user has also input a value for the width variable in text box190. Again, configurator component108determines that another variable has had a value set by the user in block177. Configurator component108then again determines that the configuration is not complete at block179. Configurator component108notifies CSP solver component110of the width value input at block178. CSP solver component110then determines whether the variable is part of a constraint that is to be evaluated by the CSP solver component110. The answer to this is no. The only constraint that is evaluated by CSP solver component110is the C1constraint. Therefore, processing from the CSP solver component branch inFIG. 2again returns to block176to wait for another user input or to block177, which waits for an input from another portion of the system.

Configuration component108also notifies the evaluation engine112of the new variable value at block182. Evaluation engine112determines whether the variable is an input to a formula or method. Again, the answer to this is yes because the area formula takes, as its input, the length and the width.

Evaluation engine112then determines whether the formula or method has all inputs set to a value. The answer to this is also yes, because the user has input a value for both the length variable and the width variable of the box (the product). Therefore, evaluation engine112calls the callable library component114or invokes the mathematical function evaluator component116to evaluate the formula or methods that have the desired inputs. This is indicated by block192inFIG. 2.

In the embodiment being discussed, the area formula is automatically evaluated by mathematical function evaluator component116, which multiples the length value (1.20) by the width value (1.30) to arrive at a value for the area variable which is 1.56. The resulting area value is returned by evaluation engine112to configurator component108which displays it in the area text box194. Setting the target variable (the area variable) to the resulting value (1.56) and displaying it is indicated by block196inFIG. 2.

It will also be noted that when evaluation engine112returns the result of the area calculation to configurator component108, configurator component108determines that a new variable has had its value set through evaluation of the evaluation engine112. That is, the area variable has now had its value set by the evaluation engine112. Therefore, configurator component108again returns to processing at block179and determines whether configuration of the box is complete. The answer, of course, is no, because only the length, the width, and area have been either input or calculated.

Therefore, configurator component108simultaneously (or at a different time) notifies CSP solver component110that the value for the area variable has been set and also notifies evaluation engine112that the value for the area variable has been set. This is indicated by blocks178and182inFIG. 2. CSP solver component110determines whether the area variable is part of a constraint that is to be evaluated by CSP solver component110. The answer to this is no, again because the only constraint to be evaluated is the C1constraint.

However, the evaluation engine112determines that the value for the area variable is an input to another formula. That is, it is an input to both the color control formula that sets the “isBig” variable and the “volume” formula that calculates a value for the volume variable. Determining this is indicated by block184inFIG. 2. The color control formula only needs one input, and that is the value for the area variable. The volume formula needs both the area value and the height value. Since the height value has not been either input or calculated, the volume formula will not be evaluated by evaluation engine112.

However, at block186it is determined that the color control formula has all of the inputs needed in order to evaluate it. Therefore, at block192, evaluation engine112performs a comparison using evaluation engine112, or calls a method on callable library component114. Either the comparison, or the method call, returns a value of “true” for the “isBig” variable if the area value is greater than 2.5 and returns a “false” value for the “isBig” variable if the area is not greater than 2.5. Since the calculated area is only 1.56, the comparison or method call returns a value of “false” for the Boolean “isBig” variable. Evaluation engine112then sets the Boolean variable to “false” and returns it to configurator component108which displays it.

It can be seen that, inFIG. 3D, the “isBig” Boolean variable is set to “false” in text box200. Based on this, configurator component108then again determines at block177that another variable has had a value set through evaluation. That is, the “isBig” Boolean variable has had its value set to “false” by evaluation of the color control formula. There are no more formulas to be evaluated based on setting the “isBig” variable to “false” so processing on the evaluation engine side ofFIG. 2is complete at the moment.

However, configurator component108notifies CSP solver component110that the Boolean variable “isBig” has had its value set. CSP solver component110determines at block180that the Boolean variable is part of a constraint that is to be evaluated by CSP solver component110. It can be seen at164inFIG. 3Athat if the “isBig” Boolean variable is set to true, then the box cannot be silver. However, if it is set to false, then there is no constraint on the color of the box, and all colors that are offered, are available for the box. Therefore, CSP solver component110fixes the variable to the false value in the CSP solver. This is indicated by block204. CSP solver component110then finds solutions to the C1constraint satisfaction problem and optionally displays them.

In the present example, the C1constraint does not apply because all colors are available. However, finding the solution is indicated by block206inFIG. 2. CSP solver component110then determines whether any other variables have only one feasible value given those which have already been fixed. This is indicated by block208inFIG. 2. The answer to this is no, so processing reverts back to blocks176and177.

FIG. 3Eshows one embodiment of a user interface display202that illustrates the operation of CSP solver component110. It can be seen inFIG. 3Ethat the “isBig” variable has been set to “false” in box200. Therefore, when the user invokes the dropdown menu for colors by actuating button210, dropdown menu212is displayed. It can be seen that all of the colors offered for the box are available and selectable by the user, including silver. The user can select a color.

FIG. 3F, however, shows a user interface display214indicating how the C1constraint is applied when the user sets the value for the width variable to 3.0 instead of 1.3 in text box190. Evaluation engine112automatically invokes mathematical function evaluator component116to calculate the area as 3.60. By automatically it is meant that this is done without any further user action required. A comparison by engine112, or a method call by callable library component114evaluates the Boolean variable “isBig” to true, because it is greater than 2.5. Therefore, the Boolean variable is set to true in text box200. Then, when the user actuates button210to display dropdown menu212, it can be seen that all of the colors are available, except silver. This is because CSP solver component110has applied the C1constraint that if the “isBig” Boolean variable is set to true, then the box cannot be silver.

FIG. 3Gshows one embodiment of a user interface display215in which the user has also set the height variable in height text box217to 4.0. In that case, the same type of processing occurs and evaluation engine112invokes mathematical function evaluator component116to evaluate the “volume” formula and set that value to 14.40. This is displayed in text box216. Configuration component108then determines that configuration is complete. Therefore, processing ends at block179.

The above discussion has related to the model shown inFIG. 3A. However, other models could be used as well.FIG. 3Hshows another embodiment of a user interface display250. User interface display250illustrates the characteristics for a model of a box, which is similar to that shown inFIG. 3A, and similar items are similarly numbered. However, it can be seen that additional variables have been added to the box. A “price” variable has been added and this is in the decimal domain. In addition, an “isExpensive’ variable has been added and this is in the Boolean domain.

Similarly, another constraint164(C2) has been added which indicates that the “isBig” Boolean variable is to have the same value as the “isExpensive” Boolean variable. That is, if the “isBig” Boolean variable is set to true, then the “isExpensive” variable is also set to true, and vice versa. Similarly, if one is set to false, both are set to false.

FIG. 3Halso shows that another formula166has been added. The price formula is set so that if the “isExpensive” Boolean variable is true, the price is set to 10.4. Otherwise, it is set to 2.2.

FIG. 3Ishows another user interface display260. User interface display260is similar to user interface display215shown inFIG. 3G, and similar items are similarly numbered. However, the additional variables and formulas and constraints are also shown. Therefore, it can be seen that the length has been set to 1.20, the width has been set to 3.00, and the height has been set to 4.00. The area has been evaluated to 3.60 and the volume has been evaluated to be 14.40. Based on the value for the area variable, the “isBig” Boolean variables has been evaluated to true, and thus, based on the additional C2constraint shown inFIG. 3H, the “isExpensive” Boolean variable is also set to true.

Referring again to the flow diagram shown inFIG. 2, once the length and width variables are specified, then the area variable is calculated by mathematical function evaluator component116. Mathematical function evaluator component116(or callable library114) then also determines that the Boolean variable “isBig” is set to true. The CSP solver component110will be notified of this at block178and it will determine that the “isBig” variable is an input to the C1constraint, and it adds this constraint to the CSP problem, thus eliminating the color silver from the options that can be chosen by the user. This is automatically performed at blocks180,204and206inFIG. 2.

Also, because the “isBig” variable has been set to true, CSP solver component110determines at block208that other variables have only one feasible value. Because the C2constraint has been added that the value of the “isBig” variable is identical to the value of the “isExpensive” variable, then because the “isBig” variable has been set to true, the “isExpensive” variable can be inferred to be true as well. Therefore, at block280, CSP solver component110infers the value of the “isExpensive” Boolean variable as true and displays that value at block282inFIG. 3I. Configurator component108then determines that the “isExpensive” variable has been set to true by inference at block177and notifies the evaluation engine112of this change.

Evaluation engine112determines that this is an input to the price formula and therefore evaluates the price formula to set it to a value of 10.4, because the “isExpensive” Boolean variable has been set to true. This value is set, and displayed in text box284inFIG. 3I. This processing is automatically performed at blocks184,186,192and196inFIG. 2.

The user can then select a color. Configurator component108then determines that the configuration is complete at block179, and the processing ends.

FIG. 3Jis one embodiment of a user interface display300which shows a model for the box that is similar to that shown inFIG. 3H, and similar items are similarly numbered. In sum, it can be seen that the model has variables152, constraints164, and formulas166. However, the model shown in user interface display300also includes method calls302that can be made to callable library component114, along with the inputs and outputs for those method calls at304. In addition, it can be seen that a wind resistance variable has been added and a wind resistance calculator class has been named in the callable library component114. A method referred to as “calculate for box” has also been defined. The method “calculate for box” will be invoked when the length, width, and height of the box are known, in order to set the wind resistance attribute to a value in the decimal domain.

It can thus be seen that the configurator model divides the constraint processing and mathematical calculation and function call processing into two separate stages which both automatically inform the configurator component108. The configurator component108also automatically notifies both the CSP solver component110and the evaluation engine112of the results of the other. Therefore, the system handles decimal and floating point values and automatically makes even complex calculations, on the fly, and automatically displays them. It also infers values, when they can be inferred. Because the decimal values and complex calculations are handled separately from the CSP solver component, there is very little affect on the performance of CSP solver component110. It is substantially solving constraint problems, without the decimal values or calculations affecting it.

It will also be noted that the discussion above with respect toFIGS. 1-3Jhas been primarily in the context of a product configurator, the product being a box. However, that is only one application, and the constraint-based configuration system can be deployed in a wide variety of other contexts as well.FIG. 4shows one architecture400where constraint-based configuration system100can be deployed. It can be seen inFIG. 4that system100is deployed within a product configurator402for a product maker ordering system404. That is, a product maker or manufacturer has an ordering system404, within which a product configurator402deploys constraint-based configuration system100. The system404can also have other ordering components406as well, although they are optional. The architecture400shown inFIG. 4also shows that user106interacts with user interface displays102that are displayed on a user device408. User device408can either interact with product maker ordering system404directly (as indicated by arrow410) or through a network412. In any case, the output of the product configurator402can be provided to another system, as output414, in order to configure the product for user106.

FIG. 5shows another architecture420in which constraint-based configuration system100is deployed. Architecture100shows a data center system422that includes a cloud services configurator424. System422can have other cloud services components426as well. In the architecture shown inFIG. 5, user106is configuring cloud-based services or other data center services, as user106desires. System422generates an output430which can be provided to other systems, to configure the cloud services desired by user106.

FIG. 6shows yet another architecture450in which constraint-based configuration system100can be deployed. Architecture450shows a local equipment configurator system452that includes equipment configurator454. System452can include other equipment components456as well. System452is used to configure a piece of local equipment for a desired application. By local it is meant that the equipment is already owned and is not being configured prior to purchase, as this was covered in a previous embodiment. For example, assume that user106works for an organization that owns a pump. Assume also that the pump is to be deployed in a given application. In that embodiment, constraint-based configuration system100may be used to configure certain characteristic of the pump so that it operates in a desired way. By way of example, assume that the pump has a configurable stroke length or displacement. This can be set by user106using constraint-based configuration system100. Similarly, of course, the operation speed of the pump may be configurable or any of a wide variety of other aspects of the pump may be configurable as well. Where configuration constraints are to be applied, constraint-based configuration system100can be used to do so. System452illustratively generates an output460that can be used to configure the particular piece of equipment (e.g., the pump)462.

Other embodiments can be used as well. For instance, system100can be used to configure a network, setup and configure an application, configure an operating system, etc.

In the embodiment shown inFIG. 7, some items are similar to those shown inFIG. 1and they are similarly numbered.FIG. 7specifically shows that system100is located in cloud502(which can be public, private, or a combination where portions are public while others are private). Therefore, user106uses a user device504to access those systems through cloud502.

FIG. 7also depicts another embodiment of a cloud architecture.FIG. 7shows that it is also contemplated that some elements of system100are disposed in cloud502while others are not. By way of example, data store120can be disposed outside of cloud502, and accessed through cloud502. In another embodiment, CSP solver component110and constraints111are also outside of cloud502. Regardless of where they are located, they can be accessed directly by device504, through a network (either a wide area network or a local area network), they can be hosted at a remote site by a service, or they can be provided as a service through a cloud or accessed by a connection service that resides in the cloud. All of these architectures are contemplated herein.

FIG. 8is a simplified block diagram of one illustrative embodiment of a handheld or mobile computing device that can be used as a user's or client's hand held device16, in which the present system (or parts of it) can be deployed.FIGS. 9-12are examples of handheld or mobile devices.

FIG. 8provides a general block diagram of the components of a client device16that can run components of system100or that interacts with system100, or both. In the device16, a communications link13is provided that allows the handheld device to communicate with other computing devices and under some embodiments provides a channel for receiving information automatically, such as by scanning. Examples of communications link13include an infrared port, a serial/USB port, a cable network port such as an Ethernet port, and a wireless network port allowing communication though one or more communication protocols including General Packet Radio Service (GPRS), LTE, HSPA, HSPA+ and other 3G and 4G radio protocols, 1×rtt, and Short Message Service, which are wireless services used to provide cellular access to a network, as well as 802.11 and 802.11b (Wi-Fi) protocols, and Bluetooth protocol, which provide local wireless connections to networks.

Under other embodiments, applications or systems (like system100) are received on a removable Secure Digital (SD) card that is connected to a SD card interface15. SD card interface15and communication links13communicate with a processor17(which can also embody processor118fromFIG. 1) along a bus19that is also connected to memory21and input/output (I/O) components23, as well as clock25and location system27.

FIGS. 10 and 11provide additional examples of devices16that can be used, although others can be used as well. InFIG. 10, a feature phone or mobile phone45is provided as the device16. Phone45includes a set of keypads47for dialing phone numbers, a display49capable of displaying images including application images, icons, web pages, photographs, and video, and control buttons51for selecting items shown on the display. The phone includes an antenna53for receiving cellular phone signals such as General Packet Radio Service (GPRS) and 1×rtt, and Short Message Service (SMS) signals. In some embodiments, phone45also includes a Secure Digital (SD) card slot55that accepts a SD card57.

The mobile device ofFIG. 11is a personal digital assistant (PDA)59or a multimedia player or a tablet computing device, etc. (hereinafter referred to as PDA59). PDA59includes an inductive screen61that senses the position of a stylus63(or other pointers, such as a user's finger) when the stylus is positioned over the screen. This allows the user to select, highlight, and move items on the screen as well as draw and write. PDA59also includes a number of user input keys or buttons (such as button65) which allow the user to scroll through menu options or other display options which are displayed on display61, and allow the user to change applications or select user input functions, without contacting display61. Although not shown, PDA59can include an internal antenna and an infrared transmitter/receiver that allow for wireless communication with other computers as well as connection ports that allow for hardware connections to other computing devices. Such hardware connections are typically made through a cradle that connects to the other computer through a serial or USB port. As such, these connections are non-network connections. In one embodiment, mobile device59also includes a SD card slot67that accepts a SD card69.

Note that other forms of the devices16are possible.

It will also be noted that while various embodiments have been described, they can be combined as well. For instance, parts of one embodiment can be combined with parts of another embodiment. All of these are contemplated herein.