Cookbooks typically include a collection of recipes along with other information regarding the preparation and cooking of food. The recipes in a cookbook may be categorized according to the type of food (e.g., seafood, desserts, or beverages), cooking methods used (e.g., grilling or baking), key ingredients (e.g., chicken or beef), or recipe complexity (e.g., quick and easy recipes). A recipe may include a list of one or more ingredients and an associated set of instructions for preparing or making a particular food or beverage. Other information associated with the recipe may include pictures of various phases of the preparation process, estimates of the preparation and cooking times, and suggestions regarding possible ingredient and/or cooking method substitutions.
The Internet may provide access to recipes stored in a digital format on a remote server. The digital recipes may be searched or filtered according to various matching criteria such as particular ingredients, particular cooking methods, or particular nutritional constraints such as calories per serving.
Technology is described for generating recipe recommendations based on virtual cooking results from a virtual cooking system. In some embodiments, a virtual cooking result is generated based on a recipe for making a particular food or beverage. The virtual cooking result may include quantitative representations of various expected characteristics of the particular food or beverage. For example, the virtual cooking result may include resulting ingredients, resulting volatile aromatic compounds, and estimates regarding one or more flavors associated with the particular food or beverage. The generation of different virtual cooking results associated with different recipes allows computer programs to leverage machine learning techniques and solve optimization problems in order to determine an optimum recipe or set of recipes for a given set of recipe constraints. The recipe recommendations may include recipe pairing recommendations, multi-meal recipe recommendations, and new recipes optimized to satisfy a particular flavor profile.
A server, such as virtual cooking server 150, may allow a client to download information (e.g., text, audio, image, and video files) from the server or to perform a search query related to particular information stored on the server. In general, a “server” may include a hardware device that acts as the host in a client-server relationship or a software process that shares a resource with or performs work for one or more clients. Communication between computing devices in a client-server relationship may be initiated by a client sending a request to the server asking for access to a particular resource or for particular work to be performed. The server may subsequently perform the actions requested and send a response back to the client.
One embodiment of mobile device 122 includes a camera 148, display 149, network interface 145, processor 146, and memory 147, all in communication with each other. Camera 148 may capture digital images and/or videos. Camera 148 may comprise a back-facing or a front-facing camera. Display 149 may display digital images and/or videos. Network interface 145 allows mobile device 122 to connect to one or more networks 180. Network interface 145 may include a wireless network interface, a modem, and/or a wired network interface. Processor 146 allows mobile device 122 to execute computer readable instructions stored in memory 147 in order to perform processes discussed herein.
Networked computing environment 100 may provide a cloud computing environment for one or more computing devices. Cloud computing refers to Internet-based computing, wherein shared resources, software, and/or information are provided to one or more computing devices on-demand via the Internet. The term “cloud” is used as a metaphor for the Internet, based on the cloud drawings used in computer network diagrams to depict the Internet as an abstraction of the underlying infrastructure it represents.
In one embodiment, a computing device receives one or more recipes from the virtual cooking server 150 based on a set of recipe constraints. The set of recipe constraints may require that each recipe of the one or more recipes satisfies a flavor profile. The flavor profile may include quantitative characterizations of various tastes (e.g., saltiness, sweetness, or sourness) via one or more taste values and quantitative characterizations of various aromas (e.g., fruity smells or floral smells) via one or more aromatic values. The one or more taste values may represent a taste vector and the one or more aromatic values may represent an aromatic vector. Most flavors perceived by a human when consuming a food or beverage come from the volatile aromatic compounds (VACs) sensed by the human. The VACs may be released from food either naturally (e.g., stinky cheese) or during chewing of the food. The flavor profile may also include a quantitative characterization of the total flavor intensity of a food or beverage.
The set of recipe constraints may also require that each recipe of the one or more recipes include a particular ingredient (e.g., broccoli) or cooking step (e.g., baking). Other recipe constraints may require that each recipe of the one or more recipes uses less than a maximum number of ingredients or takes less than a maximum amount of time to prepare and cook. The one or more recipes may include recipe pairing recommendations, multi-meal recipe recommendations, and new recipes optimized to satisfy a particular flavor profile specified by an end user of the computing device.
In some embodiments, the virtual cooking server 150 may receive a recipe and generate a virtual cooking result (VCR) associated with the recipe. The virtual cooking result or VCR may include quantitative characterizations regarding the expected flavor of the recipe including, for example, the degree of saltiness, the intensity of a particular aroma, and the expected total flavor intensity of the recipe. The quantitative characterizations may be transmitted to a mobile device such as mobile device 122 and displayed on display 149. The ability to view the expected flavor characteristics of a recipe allows an end user of mobile device 122 to experiment with many different recipes and to virtually cook a recipe in order to determine the expected flavor of the recipe without having to actually cook the recipe.
In one embodiment, the virtual cooking server 150 may generate one or more recipe recommendations based on information regarding the availability of various foods. In some cases, the food availability information may be received from one or more intelligent food storing appliances such as an intelligent refrigerator or an intelligent food pantry. The one or more intelligent food storing appliances may store various foods and/or beverages and track the various foods and/or beverages stored over time. The tracking of foods may be performed using radio-frequency identification (RFID) tags located on food containers within the intelligent food storing appliances. An intelligent food storing appliance may also acquire and process images of the food containers located within the food storing appliance (e.g., using pattern and object recognition techniques) in order to identify and track the various foods located within the food storing appliance over time. An intelligent food storing appliance may also use pressure sensors to detect the presence of various foods such as a carton of eggs or a gallon of milk existing within predetermined locations within the intelligent food storing appliance. In some embodiments, the virtual cooking server 150 may indirectly track the amount of food contained within the one or more intelligent food storing appliances over time by tracking the total amount of food purchased over time (e.g., by tracking the groceries purchased using an online grocery delivery service), determining the amount of food used when cooking or preparing various meals (e.g., by looking up the amount of food used to cook various recipes), and subtracting the amount of food used over time from the total amount of food purchased.
In one embodiment, each of the one or more root inputs (e.g., the intermediate cooking results that are used as inputs to the root cooking step) may be associated with a corresponding VCR entry in the VCR database 280. In some cases, intermediary VCR entries associated with intermediate cooking results generated by a virtual cooking system, such as virtual cooking system 270 in
In some embodiments, metadata tags may be automatically generated once a new VCR entry is added to the VCR database 280. The metadata tags may be related to nutritional information or flavor information associated with the new VCR entry (e.g., that a particular recipe associated with the new VCR entry is a low-fat recipe or a sweet tasting recipe). Once the metadata tags have been generated and attached to the new VCR entry, subsequent search and retrieval of the new VCR entry may be performed based on the metadata tags. In one example, all VCR entries labeled as appetizers and tagged as being low-fat and sweet tasting recipes may be retrieved by a food and beverage recommendation system, such as food and beverage recommendation system 290 in
The recipe graph generator 332 generates a recipe graph associated with an input recipe 336. The input recipe 336 may include one or more ingredients and one or more cooking steps. The recipe graph may include a root cooking node associated with the last cooking step of the input recipe 336, leaf nodes associated with input ingredients of the input recipe 336, and other nodes associated with the other cooking steps associated with the input recipe 336. The recipe graph may be optimized by merging redundant nodes or cooking steps into a single node and substituting one or more nodes within the recipe graph with a simplified node associated with a predetermined cooking result.
The physical properties of ingredients database 322 of
The volatile aromatic compounds database 328 of
The cooking methods database 324 of
As depicted in
As depicted in
As depicted in
As depicted in
The food and beverage pairing engine 363 of
The multi-meal planning engine 364 of
The recipe helper engine 367 of
The user preferences filter 365 of
In step 402, a recipe is acquired. The recipe may include one or more ingredients and one or more cooking steps (e.g., baking a subset of the ingredients). The recipe may be acquired in a digital form (e.g., imported as a text file) or in an image form (e.g., a picture of the recipe) and subsequently converted into a digital form via optical character recognition (OCR) techniques. In some cases, natural language processing and/or machine translation techniques may be applied to the recipe in order to parse and identify the one or more ingredients and the one or more cooking steps. In step 403, a personal recipe profile is acquired. The personal recipe profile may include one or more user-defined recipe pairings and one or more recipe constraints. In one example, the one or more user-defined recipe pairings may include a particular recipe (e.g., a garlic chicken recipe) and a corresponding list of one or more other recipes that may be paired with the particular recipe (e.g., mashed potatoes or green beans). The one or more recipe constraints may include requirements such as a recommended recipe must have less than a maximum number of ingredients or must include a particular ingredient. One embodiment of a process for acquiring a personal recipe profile is described later in reference to
In step 404, a recipe graph based on the recipe is generated. The recipe graph may include a root node associated with the last cooking step to be performed, one or more leaf nodes associated with each of the input ingredients, and one or more other nodes associated with internal cooking results that are used in subsequent cooking steps. In one embodiment, the recipe graph may be represented as a directed acyclic graph (DAG). A predecessor node of a particular node may correspond with an ingredient or a cooking step that must be performed prior to the cooking step associated with the particular node. A successor node of a particular node may correspond with a cooking step that must be performed subsequent to the cooking step associated with the particular node. One embodiment of a process for generating a recipe graph based on a recipe is described later in reference to
In step 406, a virtual cooking result (VCR) is generated based on the recipe graph generated in step 404. The VCR may include various quantitative representations of expected characteristics of the recipe including one or more estimated flavors associated with the recipe. In one example, the VCR may include an array of resulting ingredients, resulting volatile aromatic compounds, and resulting expected flavors associated with the recipe. One embodiment of a process for generating a virtual cooking result based on a recipe graph is described later in reference to
In some embodiments, the VCR may include one or more taste values including a sweetness value, a sourness value, a bitterness value, a saltiness value, and an umaminess value. The VCR may also include one or more aromatic values including a citrus value, a floral value, a fruity value, and an herbal value. The VCR may also include one or more mouthfeel values including a spiciness value and a temperature value. Furthermore, the VCR may include one or more flavor metrics including a total flavor intensity value associated with the recipe and one or more flavor intensity derivatives. In one example, a first flavor intensity derivative of the one or more flavor intensity derivatives may include a difference between the sweetness value and the saltiness value. In one embodiment, the total flavor intensity value may be calculated as the sum of the one or more taste values and the one or more aromatic values. In another embodiment, the total flavor intensity value may be calculated as a weighted combination of the one or more taste values and the one or more aromatic values.
In some embodiments, the virtual cooking result may be generated by calculating a first set of resulting ingredients, a second set of resulting volatile aromatic compounds, and a third set of cooking method properties associated with the root node of the recipe graph. In some embodiments, a postorder traversal of the recipe graph may be performed such that cooking steps associated with predecessor nodes of the root node are analyzed prior to analyzing the root node. Other graph traversals of the recipe graph in which predecessor nodes of a particular graph node are analyzed prior to analyzing the particular graph node may also be used. The one or more taste values may be derived from the first set of resulting ingredients and the one or more aromatic values may be derived from the second set of resulting volatile aromatic compounds. The one or more mouthfeel values may be derived from the third set of cooking method properties and the first set of resulting ingredients. The one or more flavor metrics may be derived from the one or more taste values and the one or more aromatic values.
In step 408 of
In step 410, one or more recipe recommendations are generated based on the VCR generated in step 406. Various embodiments of processes for generating one or more recipe recommendations based on a VCR are described later in reference to
In some embodiments, the one or more recipe recommendations may be generated using machine learning techniques. The machine learning techniques may use a training set of recipe pairs which may include one or more user-defined recipe pairs. The machine learning techniques may assign confidence values to each of the one or more recipe recommendations based on a flavor distance between a recommended recipe and a recipe included within the one or more user-defined recipe pairs. In some cases, the machine learning techniques may use neural networks or support vector machines.
In some embodiments, generating the one or more recipe recommendations may include identifying one or more other virtual cooking results stored within a virtual cooking results database based on the VCR. The identifying one or more other virtual cooking results stored within a virtual cooking results database may include comparing the VCR with each of the virtual cooking results stored within the virtual cooking results database. The one or more other virtual cooking results may include a first virtual cooking result including one or more first taste values, one or more first aromatic values, and a first flavor intensity value. The identifying one or more other virtual cooking results stored within the virtual cooking results database may include comparing the one or more taste values with the one or more first taste values, comparing the one or more aromatic values with the one or more first aromatic values, and comparing the total flavor intensity value with the first flavor intensity value. Each of the one or more other virtual cooking results may be deemed to be similar in some way to the VCR (e.g., both the VCR and the first virtual cooking result may share the same volatile aromatic compounds).
In step 412, the one or more recipe recommendations are displayed. The one or more recipe recommendations may be displayed on a mobile device, such as mobile device 122 and
In some embodiments, post-processing of the recipe graphs associated with the one or more recipe recommendations may be performed in order to provide additional information or guidance as to which cooking steps should be performed at a particular time based on restrictions as to the number of cooking resources available at the particular time (e.g., the number of cooks or the number of ovens or mixers available for use at the particular time). In some cases, a time delay may be associated with each node in a recipe graph representing the estimated preparation and/or cooking time associated with the node. The minimum preparation and cooking time for the entire recipe graph may be determined by performing static timing analysis or identifying the critical path of the recipe graph and summing the delays along the critical path. In some cases, given time delays and resource constraints, a PERT analysis of the recipe graph may be performed in order to determine the overall preparation and cooking time for the recipe graph.
In step 472, one or more preferred recipes associated with a particular person are acquired. The one or more preferred recipes may be determined by the particular person by communicating a preference for the one or more preferred recipes (e.g., by selecting a “like” button associated with a preferred recipe). In one embodiment, one or more preferred recipes may be determined by the particular person by communicating a preference for one or more particular ingredients (e.g., lobster) and/or one or more particular cooking methods (e.g., grilling) occurring within each of the one or more preferred recipes. In step 474, one or more user-defined recipe pairings associated with the particular person are acquired. The one or more user-defined recipe pairings may include a list of recipes and pointers for each recipe in the list of recipes to one or more paired recipes.
In step 476, one or more other preferred recipes associated with the particular person are inferred. A preferred recipe of the one or more other preferred recipes may be inferred by identifying a particular recipe in which the amount of time the particular person has spent accessing and/or searching for the particular recipe in an online recipe database is greater than a threshold. A preferred recipe may also be inferred by identifying positive comments or ratings associated with the particular recipe given by the particular person. In some embodiments, the preferred recipe may be inferred by identifying the inclusion of a particular recipe within an electronic cookbook associated with the particular person and/or identifying the exportation of particular ingredients associated with the particular recipe included within the electronic cookbook into a digital shopping list (e.g., a shopping list that may be used by an online grocery delivery service).
In step 478, one or more favorite cooking methods and one or more favorite ingredients associated with the particular person are inferred. The one or more favorite cooking methods and one or more favorite ingredients may be inferred by identifying commonly used recipe search terms used by the particular person when accessing an online recipe database. In step 480, a personal recipe profile associated with the particular person is outputted. The personal recipe profile may include the one or more preferred recipes acquired in step 472, the one or more user-defined recipe pairings acquired in step 474, the one or more other preferred recipes inferred in step 476, the one or more favorite cooking methods inferred in step 478, and the one or more favorite ingredients inferred in step 478. The personal recipe profile may be used by a food and beverage recommendation system, such as food and beverage recommendation system 290 in
In step 502, an image of a recipe is acquired. The recipe may include one or more ingredients and one or more cooking steps. In one example, the image of the recipe is acquired using an image capture device associated with a mobile device, such as mobile device 122 in
In step 504, the one or more ingredients are identified and standardized. The one or more ingredients may be identified by applying pattern matching or character matching techniques to the text file. The one or more ingredients may be standardized by comparing the one or more ingredients with a predefined set of recognized ingredients (e.g., a predefined table of known ingredients). The predefined set of recognized ingredients may account for different spellings and synonyms associated with the one or more ingredients. For example, the terms onion and cebolla may map to the same standardized ingredient. If a particular ingredient of the one or more ingredients is not recognized as existing within the predefined set of recognized ingredients, then additional information regarding the particular ingredient may be requested from an external source.
The one or more ingredients may also be standardized by mapping one or more amounts associated with the one or more ingredients into a base unit of mass such as grams or pounds. Ingredient amounts specified as volume unit measurements may be converted into a corresponding mass using a lookup table of volume to mass conversions or by acquiring density information associated with a particular ingredient being converted. In one embodiment, ingredient volume to ingredient mass mappings may be performed using a physical properties of ingredients database, such as physical properties of ingredients database 322 of
In step 505, the one or more cooking steps are identified and standardized. The one or more cooking steps may be identified by applying pattern matching or character matching techniques to the text file. The one or more cooking steps may be standardized by comparing the one or more cooking steps with a predefined set of recognized cooking steps (e.g., a predefined table of known cooking steps). The predefined set of recognized cooking steps may account for different spellings and synonyms associated with the one or more cooking steps. Each recognized cooking step may be labeled with a concise name for the cooking step, such as bake, chop, sauté, mix, or separate.
In step 506, the one or more cooking steps are ordered. A particular cooking step of the one or more cooking steps may be ordered based on timing dependencies with other cooking steps of the one or more cooking steps. For example, the particular cooking step may be designated a predecessor step of a subsequent cooking step if results of the particular cooking step are required by the subsequent cooking step. The particular cooking step may be designated a successor step of a preceding cooking step if results of the preceding cooking step are required by the particular cooking step.
In step 507, one or more inputs for each of the one or more cooking steps are identified. The one or more inputs may include one or more intermediate cooking results or one or more of the one or more ingredients identified and standardized in step 504. One or more inputs identified for a particular node may correspond with input edges to the particular node. In step 508, a recipe graph based on the one or more ingredients and the one or more cooking steps is generated. A root node associated with the recipe graph is associated with the last cooking step of the recipe. Leaf nodes of the recipe graph are associated with the one or more ingredients. Other nodes associated with the recipe graph may represent intermediate cooking steps which provide intermediate cooking results to subsequent cooking steps.
In step 509, a canonical recipe graph is generated based on the recipe graph generated in step 508. One embodiment of a process for generating a canonical recipe graph is described later in reference to
In step 532, a recipe graph is acquired. The recipe graph may include one or more nodes associated with one or more cooking steps and one or more leaf nodes associated with one or more ingredients. In step 534, the one or more ingredients may be normalized. In one embodiment, every ingredient associated with a recipe is normalized to the water content within the recipe (i.e., each ingredient is ratioed to the amount of water in the recipe).
In step 535, one or more missing cooking steps are identified and, in response, one or more new nodes are added to the recipe graph associated with the one or more missing cooking steps. In one example, an input ingredient of 2 cups of mild cheddar may require a shredding cooking step in order to provide the 2 cups of mild cheddar. If the shredding cooking step is missing from the recipe, it may be deemed a missing cooking step.
In step 536, a node reordering of the recipe graph is performed such that each of the one or more nodes has a timing dependence on each of its predecessor nodes. The node reordering step may minimize the height of the recipe graph by removing unnecessary timing dependencies. For example, a recipe graph may include a first node associated with chopping a first ingredient, a second node associated with chopping a second ingredient, and a third node associated with a baking step where the first ingredient and the second ingredient are combined and baked. The first node may be a predecessor to the second node and the second node may be a predecessor to the third node. However, in this case, the second node does not have a timing dependence on the first node as both the chopping of the first ingredient and the chopping of the second ingredient may be performed in parallel. Therefore, the node reordering step would adjust the graph such that both the first node and the second node are direct predecessors to the third node.
In step 538, a node reduction of the recipe graph is performed in order to merge redundant nodes of the one or more nodes. A successor node and a predecessor node may be deemed redundant if they share an edge of the recipe graph and if merging the cooking steps will not alter the virtual cooking result of the successor node. In step 540, a node substitution of the recipe graph is performed in order to replace a group of the one or more nodes with a simplified node. In one example, the simplified node may correspond with a commonly performed action such as activating yeast. In another example, the simplified node may correspond with a cooking template associated with a predetermined cooking result such as boiling pasta in order to provide cooked macaroni. In step 542, a canonical recipe graph based on the node reordering of step 536, the node reduction of step 538, and the node substitution of step 540 is outputted.
In some embodiments, although the three nodes associated with mix inputs 456, mix inputs 454, and mix inputs 458 all share a common cooking step (i.e., mixing the inputs), only the nodes associated with mix inputs 454 and mix inputs 458 may be merged into a simplified node, thereby preserving the node associated with mix inputs 456. In this case, all three nodes are not merged together in order to preserve, for example, melting the butter with the warm macaroni at the node associated with mix inputs 456 and making sure that the eggs are properly diluted before spreading the mixture associated with mix inputs 458 with the macaroni.
In some embodiments, node substitution may be performed by identifying a group of one or more nodes within a recipe graph and replacing the group of one or more nodes with a simplified node. The simplified node may embody a cooking template associated with a predetermined cooking result. In one example, recipe graph nodes associated with creating a roux (e.g., mixing wheat flour with butter or vegetable oil as a fat base) are substituted for a simplified node corresponding with the roux. Other cooking templates associated with commonly performed cooking steps and/or commonly used ingredients may also be applied during node substitution.
In step 622, a recipe graph is acquired. In step 623, one or more leaf nodes of the recipe graph are initialized. In one embodiment, the one or more leaf nodes may be initialized by generating a virtual cooking result for each of the leaf nodes. In step 624, it is determined whether a postorder traversal of the recipe graph has been completed. If it is determined that a postorder traversal of the recipe graph has been completed, then step 625 is performed. Otherwise, if it is determined that a postorder traversal of the recipe graph has not been completed, then step 626 is performed. In step 625, a VCR associated with the recipe graph is outputted. For example, a VCR associated with the root node of the recipe graph may be outputted.
In step 626, a particular cooking step of the recipe graph is acquired. In step 628, one or more inputs associated with the particular cooking step are determined. The one or more inputs may include input ingredients and/or intermediate cooking results required by the particular cooking step. In one embodiment, the one or more inputs may include virtual cooking results associated with one or more intermediate cooking results or virtual cooking results associated with one or more of the one or more leaf nodes.
In step 632, it is determined whether a VCR already exists for the particular cooking step and the one or more inputs determined in step 628. If it is determined that a VCR already exists, then step 630 is performed. Otherwise, if it is determined that a VCR does not already exist, then step 634 is performed. A VCR may be deemed to already exist if there is a corresponding entry within a VCR database, such as VCR database 280 in
In step 630, the matching VCR is looked up in a VCR database, such as VCR database 280 and
In step 671, a particular cooking step and one or more inputs are acquired. In step 672, a first set of resulting ingredient properties and a second set of resulting VAC properties are generated based on the particular cooking step and the one or more inputs acquired in step 671. One embodiment of a process for generating a first set of resulting ingredient properties and a second set of resulting VAC properties is described later in reference to
In step 673 of
In one embodiment, the sourness value is based on an identification of common ingredients that have a pH (i.e., a measure of the acidity or basicity of a solution) outside of a neutral range. For example, the common ingredients may include common alkaline ingredients such as baking soda and common acidic ingredients such as lemon. The sourness value may be based on a first basic ratio between a sum of the masses of various alkaline ingredients within the one or more inputs and a total ingredient mass associated with all of the input ingredients and a second acidic ratio between a sum of the masses of various acidic ingredients within the one or more inputs and a total ingredient mass associated with all of the input ingredients. A sourness difference may be calculated as a difference between the first basic ratio and the second acidic ratio. A sourness difference of zero implies a neutral recipe. The sourness value may be a nonlinear function of the sourness difference.
In one embodiment, the bitterness value may be determined by identifying common ingredients associated with a bitter taste and calculating a bitterness ratio between a sum of the masses of various bitter ingredients within the one or more inputs and a total ingredient mass associated with all of the input ingredients. The bitterness value may be a nonlinear function of the bitterness ratio.
In one embodiment, the saltiness value may be determined by identifying common ingredients associated with various salts and calculating a saltiness ratio between a sum of the masses of various salty ingredients (e.g., sodium chloride) within the one or more inputs and a total ingredient mass associated with all of the input ingredients. The saltiness value may be a nonlinear function of the saltiness ratio.
In one embodiment, the umaminess value may be determined by identifying common ingredients and cooking steps associated with umami sensations, which are typically produced by a Maillard reaction involving amino acids, certain sugars, and heat. Maillard reactions may also be accelerated in an alkaline environment. Thus, both the input ingredients and the cooking step performed are important contributors to the umaminess value. The umaminess value may be determined using machine learning techniques. The machine learning techniques may use training sets comprising input ingredients and cooking steps, and their corresponding umaminess value.
In step 675 of
In step 676 of
In step 677 of
In step 682, a particular cooking step and one or more inputs are acquired. In step 683, a standardized ingredient matrix (SIM) and a standardized VAC matrix (SVM) are determined based on the one or more inputs. In step 684, a standardized cooking methods matrix (SCMM) is determined based on the particular cooking step.
In step 685 of
In step 686, a first set of resulting ingredient properties is outputted based on the new SIM generated in step 685. In step 687, a second set of resulting VAC properties is outputted based on the new SVM generated in step 685.
In step 692, one or more taste values, one or more aromatic values, and one or more mouthfeel values are acquired. In step 693, a total flavor intensity value is determined based on the one or more taste values, the one or more aromatic values, and the one or more mouthfeel values. In one embodiment, the total flavor intensity value may be calculated by summing the one or more taste values and the one or more aromatic values. In another embodiment, the total flavor intensity value may be calculated as a weighted sum of the one or more taste values and the one or more aromatic values. The total flavor intensity value may also be calculated as a weighted combination of the one or more taste values, the one or more aromatic values, and the one or more mouthfeel values.
In step 694, an average flavor intensity value is determined based on the one or more taste values, the one or more aromatic values, and the one or more mouthfeel values. In one embodiment, the average flavor intensity value is calculated as the average value of the one or more taste values.
In step 695, one or more flavor intensity derivatives are determined based on the one or more taste values, the one or more aromatic values, and the one or more mouthfeel values. In one example, a flavor derivative value associated with the difference between the saltiness and the sweetness of a particular recipe may be calculated by determining a difference between a saltiness value and a sweetness value. In another example, a flavor derivative value may be calculated by determining a difference between a saltiness value and the sum of all other taste values. Flavor derivative values may also be calculated for the one or more aromatic values or between the one or more taste values and the one or more aromatic values. In one example, a flavor derivative value may be calculated by determining a difference between a fruity value and a citrus value. In another example, a flavor derivative may be calculated by determining a difference between a sweetness value and a fruity value.
In step 696, one or more flavor metrics are outputted. The one or more flavor metrics may include the total flavor intensity value determined in step 693, the average flavor intensity value determined in step 694, and the one or more flavor intensity derivatives determined in step 695.
In step 902, a recipe is acquired. The recipe may be associated with one or more input ingredients and one or more cooking steps. In step 904, a VCR based on the recipe is generated. In one embodiment, the VCR may be generated by creating a recipe graph associated with the recipe, traversing the recipe graph, identifying one or more inputs associated with each of the one or more cooking steps of the recipe graph (e.g., identifying input ingredients and/or intermediate cooking results required by each of the one or more cooking steps), and generating the VCR based on the one or more cooking steps and their corresponding one or more inputs. The recipe graph may include a root node associated with the last cooking step to be performed, one or more leaf nodes associated with each of the input ingredients, and one or more other nodes associated with internal cooking results that are used in subsequent cooking steps. In some embodiments, the one or more inputs identified may derive from virtual cooking results associated with one or more intermediate cooking results or virtual cooking results associated with one or more of the one or more leaf nodes.
In step 906, one or more similar recipes associated with the recipe acquired in step 902 are determined. In one embodiment, each of the one or more similar recipes is within a particular flavor distance of the recipe. The particular flavor distance provides a metric for comparing similarities between two different recipes. In one example, the particular flavor distance between the recipe and a second recipe may be based on a difference between one or more taste values associated with the recipe and one or more second taste values associated with the second recipe. In another example, the particular flavor distance between the recipe and a second recipe may also be based on a difference between one or more aromatic values associated with the recipe and one or more second aromatic values associated with the second recipe. In this case, the particular flavor distance between the recipe and the second recipe may be small if both the recipe and the second recipe have many key odorants in common and the corresponding one or more aromatic values are similar. The particular flavor distance between the recipe and a second recipe may also be based on a difference between a total flavor intensity value associated with the recipe and a second total flavor intensity value associated with the second recipe.
In some embodiments, the determination of the particular flavor distance between the recipe and a second recipe may include calculating a first set of differences between one or more taste values associated with the recipe and one or more second taste values associated with the second recipe, calculating a second set of differences between one or more aromatic values associated with the recipe and one or more second aromatic values associated with the second recipe, and calculating a third set of differences between one or more flavor metrics associated with the recipe and one or more second flavor metrics associated with the second recipe. The particular flavor distance may comprise a value associated with the sum of the first set of differences, the second set of differences, and the third set of differences.
In step 908 of
In some embodiments, a recipe pair of either the one or more recipe pairings or the one or more similar recipe pairings may be combined in a chewing or mixing cooking step and a virtual cooking result associated with the combined recipe pair may be used to identify other recipe pairings that would go well with the combined recipe pair. In general, any two or more recipes that may be served and/or consumed at the same time may be combined using a chewing cooking step (i.e., a cooking step that simulates the mixing of the two or more recipes during consumption) and a combined virtual cooking result associated with the combined recipes may be generated and compared against, for example, a combined flavor profile associated with a good recipe pairing. In one example, a particular beverage (e.g., a wine or tea) may be identified as a good pairing for the combined recipe pair. In some embodiments, a common paired recipe between the one or more recipe pairings and the one or more similar recipe pairings may be identified and used to promote or rank the common paired recipe over the other recipe pairings.
In step 921, one or more user-defined recipe pairings associated with a particular person are acquired. The one or more user-defined recipe pairings may be part of a personal recipe profile associated with the particular person. In step 922, one or more preferred recipes associated with the particular person are acquired. The one or more preferred recipes may be identified by the particular person communicating a preference for the one or more preferred recipes (e.g., by selecting a “like” button associated with a preferred recipe).
In step 924, one or more other preferred recipes associated with the particular person may be inferred. A preferred recipe of the one or more other preferred recipes may be inferred by identifying a particular recipe in which the amount of time the particular person has spent accessing and/or searching for the particular recipe in an online recipe database is greater than a threshold. A preferred recipe may also be inferred by identifying positive comments or ratings associated with the particular recipe given by the particular person.
In step 925, a first VCR associated with a first recipe of the one or more other preferred recipes is generated. In step 926, one or more similar recipes are determined based on the first VCR generated in step 925. In one embodiment, each of the one or more similar recipes is within a particular flavor distance of the first recipe. In step 927, one or more second recipe pairings associated with a second recipe of the one or more similar recipes are determined. The one or more second recipe pairings may be based on the user-defined recipe pairings acquired in step 921 and the second recipe. In some cases, the one or more second recipe pairings may also be based on classic recipe pairings acquired from a classic recipe pairings database, such as classic pairs and anti-pairs database 361 in
In step 929, a new recipe pairing including the first recipe and a third recipe of the one or more second recipe pairings determined in step 927 is generated. In step 930, the new recipe pairing is displayed.
In step 942, an end user search query is acquired. The end user search query may include one or more recipe constraints such as required food types or required ingredients. In step 944, a plurality of recipe hits based on the end user search query is generated. The plurality of recipe hits may be associated with the most popular recipes stored in a recipe database satisfying the end user search query. In step 946, the plurality of recipe hits are sorted based on a popularity metric. The popularity metric may include user ratings or recipe viewings associated with a particular recipe.
In step 948, a plurality of VCRs associated with the plurality of recipe hits is acquired. The plurality of VCRs may be acquired from a virtual cooking results database, such as VCR database 280 in
In step 952, one or more recipe pairings associated with a particular recipe of the first set is determined. The one or more recipe pairings may be determined by comparing the particular recipe with the recipe pairings stored within a classic pairings database, such as classic pairs and anti-pairs database 361 in
In step 961, a plurality of recipes is acquired. In step 962, one or more common recipe constraints associated with a plurality of meals are acquired. The plurality of meals may include a first meal and a second meal. In one example, the one or more recipe constraints may include a constraint that each meal of the plurality of meals includes one or more common ingredients (e.g., a particular vegetable or meat). The one or more recipe constraints may also include a constraint on a maximum number of ingredients associated with each meal of the plurality of meals. The one or more recipe constraints may also include nutritional constraints such as a maximum amount of sodium, maximum amount of fat, or minimum amount of fiber associated with each meal of the plurality of meals. The one or more recipe constraints may include a constraint with respect to the maximum amount of time required to cook and prepare each meal of the plurality of meals (e.g., each meal must be ready within one hour). The one or more recipe constraints may include a constraint that each meal of the plurality of meals must pair well with a particular recipe. In some cases, the one or more recipe constraints may include budget constraints such as a maximum meal cost associated with each meal of the plurality of meals or a maximum total meal cost for the plurality of meals (e.g., a maximum weekly food budget).
In step 964, one or more specific recipe constraints associated with the plurality of meals are acquired. In one embodiment, each specific recipe constraint of the plurality of specific recipe constraints applies to a different meal of the plurality of meals. In one example, a specific recipe constraint may require that a particular meal of the plurality of meals be associated with a particular range of total flavor intensity values (e.g., within +/−5% of a particular total flavor intensity value). In another example, a specific recipe constraint may require that a particular meal of the plurality of meals be associated with a particular food type such as a dessert or salad.
In step 966 of
In step 967, a second set of recipes of the plurality of recipes associated with a second meal of the plurality of meals is determined. In one embodiment, each recipe of the second set of recipes satisfies the one or more common recipe constraints acquired in step 962. Each recipe of the second set of recipes may also satisfy a second specific recipe constraint of the plurality of recipe constraints acquired in step 964.
In step 968, a first recipe of the first set of recipes and a second recipe of the second set of recipes are determined such that the first recipe and the second recipe are separated by at least a particular flavor distance. The first recipe and the second recipe may be determined by acquiring a first virtual cooking result associated with the first recipe, acquiring a second virtual cooking result associated with the second recipe, and comparing the first virtual cooking result with the second virtual cooking result. The particular flavor distance may be based on a difference between taste values associated with the first recipe and the second recipe, a difference between aromatic values associated with the first recipe the second recipe, and/or a difference between total flavor intensity values associated with the first recipe and the second recipe. In step 969, the first recipe and the second recipe are displayed. In some embodiments, one or more recipe pairs may be generated and displayed for each of the multi-meal recipe recommendations. For example, each multi-meal recipe may be paired with a side dish.
In one embodiment, each recipe recommendation of five recipe recommendations associated with a multi-meal scenario (e.g., the five meals are associated with workweek dinner times) satisfies a first common recipe constraint of including chicken as an ingredient and a second common recipe constraint that each recipe includes less than seven ingredients. The specific recipe constraints may require that each of the five recipe recommendations be separated by at least a particular flavor distance. In one example, the particular flavor distance between a first recipe of the five recipe recommendations and a second recipe of the five recommendations may be based on a difference between one or more first aromatic values associated with the first recipe and one or more second aromatic values associated with the second recipe. In another example, the particular flavor distance between a first recipe of the five recipe recommendations and a second recipe of the five recommendations may be based on a maximum number of key odorants in common between the first recipe and the second recipe.
In another embodiment, each recipe recommendation of five recipe recommendations associated with a multi-course scenario (e.g., a five-course dinner) satisfies a set of particular specific recipe constraints corresponding with a particular course number. In one example, the sets of particular specific recipe constraints may require that each multi-course meal fit within a designated range of total flavor intensity values (e.g., within +/−10% of a particular total flavor intensity value). In this multi-course scenario, no common recipe constraints are required.
In one embodiment, the process for generating multi-meal recipe recommendations described in reference to
In step 982, a recipe including a plurality of ingredients is acquired. In step 984, a flavor profile is acquired. The flavor profile may be customized by an end user of a virtual cooking server. In one embodiment, the flavor profile includes one or more target taste values, one or more target aromatic values, and one or more target flavor metrics. One benefit of using a customized or personalized flavor profile is that recipes associated with individualized flavors may be searched for and/or optimized. This capability is beneficial because the flavors perceived with respect to a particular food may vary from person to person due to biological differences or a person's food experiences (e.g., is a person accustomed to eating spicy foods or bland foods).
In some embodiments, a flavor profile may be generated by averaging one or more VCRs stored within a VCR database, such as VCR database 280 in
In step 986, one or more amounts associated with the plurality of ingredients are determined such that a virtual cooking result associated with the recipe satisfies the flavor profile acquired in step 984. In one embodiment, different virtual cooking results are generated based on different ingredient amounts associated with the plurality of ingredients in order to determine a virtual cooking result that includes taste values close to or matching the one or more target taste values, aromatic values close to or matching the one or more target aromatic values, and flavor metric values close to or matching the one or more target flavor metrics. In some embodiments, the one or more amounts may be used as input variables to a flavor cost function (or objective function) that generates one or more taste values and one or more aromatic values. The flavor cost function may be optimized using various computer optimization techniques such as brute-force or exhaustive techniques, simulated annealing techniques, or linear programming techniques in order to determine an assignment of ingredient amounts for the one or more amounts that satisfies the flavor profile. In step 988, a new recipe based on the one or more amounts is generated. In step 990, the new recipe is displayed.
In some embodiments, a new recipe satisfying a particular flavor profile may be generated using only an initial set of the input ingredients and cooking methods to be used. In this case, an additional set of input ingredients and cooking methods may be determined by considering the input ingredients and cooking methods used by other recipes that are associated with VCRs that provide flavor results similar to the flavor profile. A virtual cooking server may virtually cook a large number of different recipes testing the initial set of input ingredients and cooking methods in addition to the additional set of input ingredients and cooking methods and determine a new recipe that provides a VCR that best matches the particular flavor profile. The ingredient amounts of the initial set of input ingredients and the additional set of input ingredients may be determined by sweeping the ingredient amounts using various step sizes.
In step 972, a plurality of recipes is acquired. In step 974, a plurality of VCRs associated with the plurality of recipes is generated. In step 976, a flavor profile is acquired. In one embodiment, the flavor profile may include one or more target taste values, one or more target aromatic values, and one or more target flavor metrics. In some cases, the flavor profile may also include one or more mouthfeel values such as a spiciness value. In step 978, a particular recipe of the plurality of recipes that satisfies the flavor profile is identified. In one embodiment, the particular recipe may be identified by acquiring a particular virtual cooking result associated with the particular recipe, comparing one or more taste values associated with the particular virtual cooking result with the one or more target taste values, comparing one or more aromatic values associated with the particular virtual cooking result with the one or more target aromatic values, and comparing one or more flavor metrics associated with the particular virtual cooking result with the one or more target flavor metrics. In another embodiment, the particular recipe may be identified as the recipe with the VCR that best matches the flavor profile within a VCR database. In step 979, the particular recipe is displayed.
One embodiment of the disclosed technology includes acquiring a recipe and generating a virtual cooking result based on the recipe. The virtual cooking result includes one or more flavor metrics. The method further includes generating one or more recipe recommendations based on the one or more flavor metrics and displaying the one or more recipe recommendations.
One embodiment of the disclosed technology includes acquiring a recipe at a virtual cooking server and generating a virtual cooking result based on the recipe using the virtual cooking server. The virtual cooking result includes one or more taste values, one or more aromatic values, and one or more flavor metrics. The method further includes identifying one or more other virtual cooking results stored within a virtual cooking results database based on the virtual cooking result. The one or more other virtual cooking results include a first virtual cooking result associated with a first recipe. The method further includes displaying the first recipe on a mobile device.
One embodiment of the disclosed technology includes a memory and one or more processors. The memory stores a recipe. The one or more processors are in communication with the memory. The one or more processors generate a recipe graph based on the recipe and generate a virtual cooking result based on the recipe. The virtual cooking result includes one or more flavor metrics. The one or more processors generate one or more recipe recommendations based on the one or more flavor metrics.
One embodiment of the disclosed technology includes acquiring a recipe, acquiring one or more recipe pairings, and generating a virtual cooking result based on the recipe. The virtual cooking result includes one or more taste values and one or more aromatic values. The method further includes generating one or more recipe recommendations based on the one or more taste values, the one or more aromatic values, and the one or more recipe pairings and displaying the one or more recipe recommendations.
One embodiment of the disclosed technology includes acquiring a recipe including one or more ingredients and one or more cooking steps, standardizing the one or more ingredients, standardizing the one or more cooking steps, generating a recipe graph based on the one or more ingredients and the one or more cooking steps, and generating a virtual cooking result associated with a root node of the recipe graph. The virtual cooking result includes one or more taste values and one or more aromatic values. The method further includes generating the one or more recipe recommendations based on the one or more taste values and the one or more aromatic values, and displaying the one or more recipe recommendations on a mobile device.
One embodiment of the disclosed technology includes acquiring a recipe including one or more ingredients and one or more cooking steps and generating a virtual cooking result based on the one or more ingredients and the one or more cooking steps. The virtual cooking result includes one or more taste values and one or more aromatic values. The method further includes determining one or more similar recipes. Each of the one or more similar recipes is within a particular flavor distance of the recipe. The method further includes determining one or more similar recipe pairings associated with the one or more similar recipes and displaying at least one of the one or more similar recipe pairings.
One embodiment of the disclosed technology includes a memory in communication with one or more processors. The memory stores one or more user-defined recipe pairings associated with a particular person. The one or more processors infer one or more preferred recipes associated with the particular person, generate a first virtual cooking result associated with a first recipe of the one or more preferred recipes, and determine one or more similar recipes. Each of the one or more similar recipes is within a particular flavor distance of the first recipe. The one or more similar recipes include a second recipe. The one or more processors determine one or more second recipe pairs based on the user-defined recipe pairings and the second recipe. The one or more processors determine a new recipe pairing including the first recipe and a third recipe of the one or more second recipe pairs.
One embodiment of the disclosed technology includes acquiring a search query, generating a plurality of recipes based on the search query, and acquiring a plurality of virtual cooking results associated with the plurality of recipes. The plurality of recipes includes a particular recipe and a second recipe. The particular recipe is associated with a particular virtual cooking result of the plurality of virtual cooking results. The second recipe is associated with a second virtual cooking result of the plurality of virtual cooking results. The method further includes determining a first set of the plurality of recipes including the particular recipe and the second recipe. Each recipe of the first set is at least a particular flavor distance away from the other recipes of the first set. The method further includes determining one or more recipe pairings associated with the particular recipe and displaying the particular recipe and the one or more recipe pairings.
One embodiment of the disclosed technology includes acquiring one or more common recipe constraints associated with a plurality of meals and acquiring a plurality of specific recipe constraints associated with the plurality of meals. Each specific recipe constraint of the plurality of specific recipe constraints applies to a different meal of the plurality of meals. The plurality of meals include a first meal and a second meal. The method further includes acquiring a plurality of recipes and determining a first set of recipes of the plurality of recipes associated with the first meal. Each recipe of the first set of recipes satisfies the one or more common recipe constraints and satisfies a first specific recipe constraint of the plurality of specific recipe constraints. The method further includes determining a second set of recipes of the plurality or recipes associated with the second meal. Each recipe of the second set of recipes satisfies the one or more common recipe constraints and satisfies a second specific recipe constraint of the plurality of specific recipe constraints. The method further includes determining a first recipe of the first set of recipes and a second recipe of the second set of recipes such that the first recipe and the second recipe are separated by at least a particular flavor distance and displaying the first recipe and the second recipe.
One embodiment of the disclosed technology includes acquiring a plurality of recipes and generating a plurality of virtual cooking results associated with the plurality of recipes. Each virtual cooking result of the plurality of virtual cooking results includes a total flavor intensity value. The method further includes acquiring a first set of recipe constraints associated with a first meal. The first set of recipe constraints includes a first range of total flavor intensity values. The method further includes acquiring a second set of recipe constraints associated with a second meal. The second set of recipe constraints includes a second range of total flavor intensity values. The method further includes determining a first set of recipes of the plurality of recipes whereby each recipe of the first set of recipes satisfies the first set of recipe constraints. The method further includes determining a second set of recipes of the plurality of recipes whereby each recipe of the second set of recipes satisfies the second set of recipe constraints and displaying a first recipe of the first set of recipes and a second recipe of the second set of recipes.
One embodiment of the disclosed technology includes acquiring a recipe including a plurality of ingredients, acquiring a flavor profile including one or more target taste values and one or more target aromatic values, and determining one or more amounts associated with the plurality of ingredients such that a virtual cooking result associated with the recipe satisfies the flavor profile. Each of the one or more amounts is associated with a different ingredient of the plurality of ingredients. The determining one or more amounts includes generating the virtual cooking result associated with the recipe using the one or more amounts. The virtual cooking result includes one or more taste values and one or more aromatic values. The determining one or more amounts includes comparing the one or more taste values and the one or more target taste values. The determining one or more amounts includes comparing the one or more aromatic values and the one or more target aromatic values. The method further includes generating a new recipe based on the plurality of ingredients and the one or more amounts and displaying the new recipe.
One embodiment of the disclosed technology includes acquiring a plurality of recipes, generating a plurality of virtual cooking results associated with plurality of recipes, acquiring a flavor profile including one or more target taste values and one or more target aromatic values. The flavor profile also includes a target total flavor intensity value. The method further includes identifying a particular recipe of the plurality of recipes that satisfies the flavor profile. The plurality of virtual cooking results includes a particular virtual cooking result associated with the particular recipe. The particular virtual cooking result includes one or more taste values, one or more aromatic values, and a total flavor intensity value. The method further includes displaying the particular recipe on a mobile device.
The disclosed technology may be used with various computing systems.
Mobile device 8300 includes one or more processors 8312 and memory 8310. Memory 8310 includes applications 8330 and non-volatile storage 8340. Memory 8310 can be any variety of memory storage media types, including non-volatile and volatile memory. A mobile device operating system handles the different operations of the mobile device 8300 and may contain user interfaces for operations, such as placing and receiving phone calls, text messaging, checking voicemail, and the like. The applications 8330 can be any assortment of programs, such as a camera application for photos and/or videos, an address book, a calendar application, a recipe helper application, a media player, an internet browser, games, an alarm application, and other applications. The non-volatile storage component 8340 in memory 8310 may contain data such as music, photos, recipes, contact data, scheduling data, and other files.
The one or more processors 8312 also communicates with RF transmitter/receiver 8306 which in turn is coupled to an antenna 8302, with infrared transmitter/receiver 8308, with global positioning service (GPS) receiver 8365, and with movement/orientation sensor 8314 which may include an accelerometer and/or magnetometer. RF transmitter/receiver 8308 may enable wireless communication via various wireless technology standards such as Bluetooth® or the IEEE 802.11 standards. Accelerometers have been incorporated into mobile devices to enable applications such as intelligent user interface applications that let users input commands through gestures, and orientation applications which can automatically change the display from portrait to landscape when the mobile device is rotated. An accelerometer can be provided, e.g., by a micro-electromechanical system (MEMS) which is a tiny mechanical device (of micrometer dimensions) built onto a semiconductor chip. Acceleration direction, as well as orientation, vibration, and shock can be sensed. The one or more processors 8312 further communicate with a ringer/vibrator 8316, a user interface keypad/screen 8318, a speaker 8320, a microphone 8322, a camera 8324, a light sensor 8326, and a temperature sensor 8328. The user interface keypad/screen may include a touch-sensitive screen display.
The one or more processors 8312 controls transmission and reception of wireless signals. During a transmission mode, the one or more processors 8312 provide voice signals from microphone 8322, or other data signals, to the RF transmitter/receiver 8306. The transmitter/receiver 8306 transmits the signals through the antenna 8302. The ringer/vibrator 8316 is used to signal an incoming call, text message, calendar reminder, alarm clock reminder, or other notification to the user. During a receiving mode, the RF transmitter/receiver 8306 receives a voice signal or data signal from a remote station through the antenna 8302. A received voice signal is provided to the speaker 8320 while other received data signals are processed appropriately.
Additionally, a physical connector 8388 may be used to connect the mobile device 8300 to an external power source, such as an AC adapter or powered docking station, in order to recharge battery 8304. The physical connector 8388 may also be used as a data connection to an external computing device. The data connection allows for operations such as synchronizing mobile device data with the computing data on another device.
Computer 2210 typically includes a variety of computer readable media. Computer readable media can be any available media that can be accessed by computer 2210 and includes both volatile and nonvolatile media, removable and non-removable media. By way of example, and not limitation, computer readable media may comprise computer storage media. Computer storage media includes both volatile and nonvolatile, removable and non-removable media implemented in any method or technology for storage of information such as computer readable instructions, data structures, program modules or other data. Computer storage media includes, but is not limited to, RAM, ROM, EEPROM, flash memory or other memory technology, CD-ROM, digital versatile disks (DVD) or other optical disk 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 accessed by computer 2210. Combinations of the any of the above should also be included within the scope of computer readable media.
The system memory 2230 includes computer storage media in the form of volatile and/or nonvolatile memory such as read only memory (ROM) 2231 and random access memory (RAM) 2232. A basic input/output system 2233 (BIOS), containing the basic routines that help to transfer information between elements within computer 2210, such as during start-up, is typically stored in ROM 2231. RAM 2232 typically contains data and/or program modules that are immediately accessible to and/or presently being operated on by processing unit 2220. The system memory 2230 may store operating system 2234, application programs 2235, other program modules 2236, and program data 2237.
The computer 2210 may also include other removable/non-removable, volatile/nonvolatile computer storage media. The computer 2210 may include a hard disk drive 2241 that reads from or writes to non-removable, nonvolatile magnetic media, a magnetic disk drive 2251 that reads from or writes to a removable, nonvolatile magnetic disk 2252, and an optical disk drive 2255 that reads from or writes to a removable, nonvolatile optical disk 2256 such as a CD ROM or other optical media. Other removable/non-removable, volatile/nonvolatile computer storage media that can be used in the exemplary operating environment include, but are not limited to, magnetic tape cassettes, flash memory cards, digital versatile disks, digital video tape, solid state RAM, solid state ROM, and the like. The hard disk drive 2241 is typically connected to the system bus 2221 through an non-removable memory interface such as interface 2240, and magnetic disk drive 2251 and optical disk drive 2255 are typically connected to the system bus 2221 by a removable memory interface, such as interface 2250.
The drives and their associated computer storage media described above provide storage of computer readable instructions, data structures, program modules and other data for the computer 2210. Hard disk drive 2241 is illustrated as storing operating system 2244, application programs 2245, other program modules 2246, and program data 2247. Note that these components can either be the same as or different from operating system 2234, application programs 2235, other program modules 2236, and program data 2237. Operating system 2244, application programs 2245, other program modules 2246, and program data 2247 are given different numbers here to illustrate that, at a minimum, they are different copies. A user may enter commands and information into computer 2210 through input devices such as a keyboard 2262 and pointing device 2261, commonly referred to as a mouse, trackball, or touch pad. Other input devices (not shown) may include a microphone, joystick, game pad, satellite dish, scanner, or the like. These and other input devices are often connected to the processing unit 2220 through a user input interface 2260 that is coupled to the system bus, but may be connected by other interface and bus structures, such as a parallel port, game port or a universal serial bus (USB). A monitor 2291 or other type of display device is also connected to the system bus 2221 via an interface, such as a video interface 2290. In addition to the monitor, computers may also include other peripheral output devices such as speakers 2297 and printer 2296, which may be connected through an output peripheral interface 2295.
The computer 2210 may operate in a networked environment using logical connections to one or more remote computers, such as a remote computer 2280. The remote computer 2280 may be a personal computer, a server, a router, a network PC, a peer device or other common network node, and typically includes many or all of the elements described above relative to the computer 2210. The logical connections may include a local area network (LAN) 2271 and a wide area network (WAN) 2273, but may also include other networks. Such networking environments are commonplace in offices, enterprise-wide computer networks, intranets and the Internet.
When used in a LAN networking environment, the computer 2210 is connected to the LAN 2271 through a network interface or adapter 2270. When used in a WAN networking environment, the computer 2210 typically includes a modem 2272 or other means for establishing communications over the WAN 2273, such as the Internet. The modem 2272, which may be internal or external, may be connected to the system bus 2221 via the user input interface 2260, or other appropriate mechanism. In a networked environment, program modules depicted relative to the computer 2210, or portions thereof, may be stored in the remote memory storage device. For example, remote application programs 2285 may reside on memory device 2281. It will be appreciated that the network connections shown are exemplary and other means of establishing a communications link between the computers may be used.
The disclosed technology may be operational with numerous other general purpose or special purpose computing system environments. Examples of other computing system environments that may be suitable for use with the disclosed technology include, but are not limited to, personal computers, server computers, hand-held or laptop devices, multiprocessor systems, microprocessor-based systems, programmable consumer electronics, network PCs, minicomputers, mainframe computers, and distributed computing environments that include any of the above systems or devices, and the like.
The disclosed technology may be described in the general context of computer-executable instructions, such as program modules, being executed by a computer. Generally, software and program modules as described herein include routines, programs, objects, components, data structures, and other types of structures that perform particular tasks or implement particular abstract data types. Hardware or combinations of hardware and software may be substituted for software modules as described herein.
The disclosed technology may also be practiced in distributed computing environments where tasks are performed by remote processing devices that are linked through a communications network. In a distributed computing environment, program modules may be located in both local and remote computer storage media including memory storage devices.
For purposes of this document, each process associated with the disclosed technology may be performed continuously and by one or more computing devices. Each step in a process may be performed by the same or different computing devices as those used in other steps, and each step need not necessarily be performed by a single computing device.
For purposes of this document, reference in the specification to “an embodiment,” “one embodiment,” “some embodiments,” or “another embodiment” are used to described different embodiments and do not necessarily refer to the same embodiment.
For purposes of this document, a connection can be a direct connection or an indirect connection (e.g., via another part).
For purposes of this document, the term “set” of objects, refers to a “set” of one or more of the objects.
Although the subject matter has been described in language specific to structural features and/or methodological acts, it is to be understood that the subject matter defined in the appended claims is not necessarily limited to the specific features or acts described above. Rather, the specific features and acts described above are disclosed as example forms of implementing the claims.