Nesting navigator user interface control
Methods, systems, and techniques for presenting data using a nesting navigator are provided. Example embodiments provide a nesting navigator that allows a user to navigate seamlessly between different views/aggregations of data using a uniform interface. In one embodiment, the nesting navigator is a universal period selector that allows a user to select a point in time, a period in time, or a range using one or more nest control viewers tailored to such purpose. This abstract is provided to comply with rules requiring an abstract, and it is submitted with the intention that it will not be used to interpret or limit the scope or meaning of the claims.
The present disclosure relates to methods, systems, and techniques for presenting and managing data and, in particular, techniques for the viewing of a hierarchically ordered set of data using a user interface control adapted to same.
BACKGROUNDOft times applications require the ability to display data that may be part of a larger hierarchical organization of the data. For example, data regarding a family tree natural falls into a hierarchy of children, parents of those children, parents of the parents, etc. User interface controls for examining the data at any particular point in the hierarchy are typically specific to the application. For example, a user interface control for navigating a family tree is typically different that a user interface control for browsing parts of a book (see the browse capabilities of websites such as www. Amazon.com for examples).
In addition to these difficulties, users are often confused when using such tools as it is easy to get lost within the hierarchy of data. This is especially true when a particular level of data within the hierarchy is no different than any other level of data. For example, in the family tree example, each object is a person. When viewing the data at one. level the user may not at all be sure where the data is with respect to other data within the hierarchy. Different techniques for addressing these issues have been used. For example, additional annotations identifying the data and navigational visual cues such as expand (“+”) and contract (“−”) symbols with lines showing the various levels within the hierarchy have been used. As the data becomes more complex, even these visual cues can be lacking, resulting in user confusion.
The patent or application file contains at least one drawing executed in color. Copies of this patent or patent application publication with color drawing(s) will be provided by the Office upon request and payment of the necessary fee.
Embodiments described herein provide enhanced computer- and network-based methods, techniques, and systems for navigating between objects in a hierarchically organized set of objects. Example embodiments provide a concept of a “nesting navigator,” which enables users to move seamlessly between objects of different levels of the hierarchically organized set of objects to view and manipulate them. The nesting navigator presents levels of data grouped into nest-sets (sets of nests) of different types, each of which can be viewed using its own type of nest viewer control (also referred to as a nest viewer). Each nest of data contains a designated (but consistent from nest to nest within the same nest-set) number of levels of data. In at least one embodiment, the number of levels of data grouped into a nest is three, so that each nest contains a top level that has single generator object (e.g., an item), an intermediate level of groups of items, and a bottom level of items (for each group). Other embodiments that contain a different number of designated levels may specify different sub-groupings in one or more intermediate levels. Although, the embodiments described herein generally use the term “nesting” to refer to the entire hierarchy and the term nest to refer to a defined portion or the nesting, it is to be understood that each nest is also a sub-nesting, and that a nesting may be instead recursively defined as containing one or more nestings.
The system is premised on the notion that navigation from one view of the objects to another consists of changing the view of a single generator object to show it instead as an item (at bottom level) of the next higher nest in the hierarchy, or changing the view of an item (at bottom level) to show it instead as a single generator object of the next lower nest in the hierarchy. Thus, to navigate down (i.e., deeper within) a hierarchically organized set of objects, the user needs only learn how to select an object using a nest viewer, and once an object is selected, to drill down, which will present the next applicable nest viewer with the selected object as the nest generator. Similarly, to navigate up a hierarchically organized set of objects, the user needs only to learn how to select the generator object (for example, the object that appears to be the root, title, or initiator of the data currently being displayed), and once the generator object is selected, to jump-up, which will present the previous applicable nest viewer with the selected generator object as a (selected) object of another nest. Accordingly, the user need only learn a single paradigm for navigating between different views (e.g., aggregations) of the same data.
More specifically, the nesting navigator is a type of user interface control that assists a user in navigating seamlessly among a hierarchically ordered set of objects, regardless of the actual object type. For example, in some embodiments, a single nesting navigator (potentially having one or more nest viewer controls) may be used to navigate data that are amenable to being aggregated into different groupings of time such as hours, shifts, days, weeks, or even months. The nesting navigator, through its one or more nest viewer controls, may also assist the user in selecting one or more objects from the set.
A nesting navigator defines an abstraction referred to as a “nesting” which it uses to organize and navigate among objects. Nestings may contain one or more other “nests” (or sub-nestings) as described in more detail below.
A nest, such as example nest 102, is a substructure within a nesting and may cover one or more generations of the nesting. A nest can also be viewed as a sub-nesting of the nesting. The top object of a nest is referred to as its “generator,”or generator object. The generator of a nest may be any object in its associated nesting. A nest includes all of the objects which are descendents (e.g., children, grandchildren etc.) of its generator down to an designated level of depth. This level of depth is referred to as the depth of the nest. Within a nesting, specifying the generator object and the depth of a nest is necessary and sufficient to define a nest. The lowest generation within a nest is referred to as its “bottom generation.” The generations in between are referred to as “intermediate generations.” For example, a 3-level nest embodiment would include a generator, and the generator's children and grandchildren. In such a 3-level embodiment, grandchildren would constitute the bottom level, and children would constitute the intermediate generation. A 4-level nest embodiment would also include the generator's great-grandchildren, and the great-grandchildren would constitute the bottom level of the nest, with children and grandchildren being intermediate generations of the nest. Thus, referring to the example of
A nest-set, such as nest-set 121, includes all of the nests that have the same depth and whose generators are cousins in the nesting, here nests 105 and 106. The nest-sets overlap in a way that allows a bottom level object contained in one nest-set to be a generator of a nest in the subordinate nest-set (a sub-nest). This concept of overlapping nest-sets contained within a nesting is fundamental to the workings of the nesting navigator. This overlap provides a method of navigating from a nest to its supra-nest or to one of its sub-nests.
As another way of viewing the nesting abstraction, each object in a nest may itself be another nest. Thus, nesting can be viewed as a recursive construct, where a sub-nesting is an “order-n” of the nesting.
The timeline represented by (e.g., mapped into) nests shown in
Various users may use a timeline nesting 200 of
Using the timeline 200 to select a specific period is a matter of providing an user interface allowing the user to navigate the timeline nesting to view an appropriate nest and allowing the user to pick an appropriate object or objects from that nest. A nesting navigator may be provided to perform at least these two tasks. For example, a nesting navigator for navigating the timelines shown in
To note, the example nesting navigator illustrated in
Each of the intermediate level objects, such as Week 3, is represented by a button (or other similar user interface control) that is available to be selected as a current week, by for example, selecting the button 406 labeled “W3” with an input device. Each of the bottom level objects, such as Day 15, is represented by a button (or other similar user interface control) that is available to be selected as a current day, by for example, selecting the button 403 labeled “15” with an input device. When the day button, for example button 403, is selected, the nesting navigator presents information as shown in the detail diagram 420. In particular, the nesting navigator adds a selected flag, shown here as an orange colored line, a label that corresponds to the object (here the number “15” for Day 15 of the selected week and month), and a button (the drill-down flag) for navigating to the next lower level nest viewer control. In this example, when the drill-down flag is selected, the nesting navigator will present (when available) the next lower level nest viewer control, for example, the day-shift-hour viewer control 305 in
The nest viewer control 401 of
Some embodiments of the nesting navigator include a toggle control that allows a user to place the navigator into either a selection mode or a navigation mode. This may be useful, for example, in situations where the selection process triggers a data fetch that takes significant amount of time (e.g., a few seconds or more). If the user wanted to navigate to another selection that was some distance away, the user could put the nesting navigator into navigation mode so that intermediate selections that are made only for navigation purposes do not result in data actually being fetched. Then, when the user has reached the desired item, the nesting navigator can be placed back into selection mode and any ensuing data fetching can then take place.
The other nest viewer controls can be constructed similarly to that described with respect to
Also for example, the illustrated embodiment of the day-shift-hour viewer control 305 comprises a title “Dec. 6, 2007”, which indicates the generator object for the currently viewed nest; indicators to the intermediate level objects, which are shifts (here labeled S1, S2, and S3); and indicators to the bottom level objects which are individual hours (1-12). In this illustrated embodiment, the P.M. hours have green availability flags indicated in the outside ring, and the A.M. hours have green availability rings indicated in the inside ring. The light and dark shadings within the ring represent daytime and nighttime hours. The three shift controls S1-S3 are used for selecting specific shifts. Notice in this illustrated example that the A.M./P.M. indicator appears in the center of the clock. The illustrated day-shift-hour viewer control 305 also includes various other availability flags (e.g., corresponding to the shifts, etc.), selected flags, and a selection stepper, and may also include jump-up and drill-down flags (not shown), such as discussed elsewhere.
The example nest viewer controls described in
In general, a nesting navigator may have one or more of the following attributes:
-
- Use common visual metaphors, for example a clock face, or a calendar page for picking periods of time. Users already understand how these devices are structured.
- Clearly show what items are available for selection, such as discussed elsewhere. As one example, assume for instance that one is looking at a month-week-day nest. Further assume, in this example, that it may not be possible to schedule appointments on a specific day of the week, say Sunday. So Sundays should somehow be visually marked as unavailable, while other days are visually marked as available.
- Allow the user to select one or more objects from the nesting.
- When a selection of an object or objects is made, the selected object or objects are visually marked as such.
- Give the user an intuitive and quick way of navigating from a nest to one of its cousin nests, and from a nest to its supra-nest or to one of its sub-nests. For example, a user looking at a month-week-day nest might want to select a day and then immediately view that day's sub-nest (a day-hour nest) to select a specific hour for an appointment.
Appendix A, incorporated herein by reference in its entirety, is an example design specification for nesting navigators. It includes example behaviors, data structure considerations, events, and methods for implementing a nesting navigator.
In one example embodiment, a specific type of nesting navigator, referred to as Universal Period Selector is provided. The Universal Period Selector (“UPS”) is a nesting navigator that may be used to select a specific range, point, and/or period in time.
In the illustrated example of
In
In
In
In
In
In
The approach used in the illustrated embodiment of
In some embodiments, applications and/or tools may provide a UPS to a user, such that the user can specify various periods of time for various purposes of the application and/or tool. For example, as previously noted, in some embodiments, a user may use an embodiment of the illustrated UPS to navigate and select various ranges, points, and/or periods of time, such as to cause statistics and/or other types of data corresponding to the selected various times to be displayed to the user. For example, in some such embodiments, selection of the various periods (e.g., selection of quarters, months, weeks, days, shifts, hours, etc.) using the nest viewer controls described above (e.g., year-quarter-month, month-week-day, and day-shift-hour viewer controls) may cause such statistics and/or other types of data corresponding to those statistics and/or other data to be appropriately displayed to the user. Example embodiments of user interface controls that use the nesting navigators described here are described in detail in U.S. patent application entitled “Multi-mode Viewer Control for Viewing and Managing Groups of Statistics,” filed concurrently herewith and in U.S. patent application entitled “Multi-mode Viewer Control for Viewing a Series of Statistical Values, filed concurrently herewith, which are incorporated herein by reference in their entirety. In some such embodiments, a UPS may also provide a user with the ability to toggle between a navigation mode (that navigates the UPS but does not fetch and/or display/update any corresponding statistics and/or other data) and a selection mode (that does fetch and/or display/update corresponding statistics and/or other data), such as discussed elsewhere.
A computing system 600 used to implement a nesting navigator may comprise one or more server and/or client computing systems and may span distributed locations. In addition, each block shown may represent one or more such blocks as appropriate to a specific embodiment or may be combined with other blocks. Moreover, the various blocks of the application or other code module or logic 510 incorporating a nesting navigator may physically reside on one or more machines, which use standard (e.g., TCP/IP) or proprietary interprocess communication mechanisms to communicate with each other.
In the embodiment shown, computer system 600 comprises a computer memory (“memory”) 601, a display 602, one or more Central Processing Units (“CPU”) 603, Input/Output devices 604 (e.g., keyboard, mouse, CRT or LCD display, etc.), other computer-readable media 605, and one or more network connections 606. An example application (code module or other programming logic) 610 that incorporates one or more nesting navigators 612 is shown residing in memory 601. In other embodiments, some portion of the contents, some of, or all of the components of the application 610 or the nesting navigator 612 may be stored on or transmitted over the other computer-readable media 605. The components of the application 610, including the code used to implement the nesting navigator preferably execute on one or more CPUs 603 and manage the presentation of data, as described herein. Other code or programs 630 and potentially other data repositories, such as data repository 620, also reside in the memory 610, and preferably execute on one or more CPUs 603. Of note, one or more of the components in
In a typical embodiment, the application 610 includes one or more components including the application logic 611 and data 615 used to implement nesting navigator 612. Other and/or different components (and/or modules) 613 may be implemented. In addition, components of the application 610 may interact via a network 650 with application or client code 655, one or more client computing systems 660, and/or one or more data provider systems 665, for example, to supply the data presented by the nesting navigator 612. Also, of note, one or more data repositories 615 or 620 that contains the source data used to generate data displayed by the nesting navigator 612 may be provided external to the nesting navigator 612, for example in a knowledge base accessible over one or more networks 650.
In an example embodiment, the logic of the nesting navigator 612 is implemented using standard programming techniques. However, a range of programming languages known in the art may be employed for implementing such example embodiments, including representative implementations of various programming language paradigms, including but not limited to, object-oriented (e.g., Java, C++, C#, Smalltalk, etc.), functional (e.g., ML, Lisp, Scheme, etc.), procedural (e.g., C, Pascal, Ada, Modula, etc.), scripting (e.g., Perl, Ruby, Python, JavaScript, VBScript, etc.), declarative (e.g., SQL, Prolog, etc.), etc.
The embodiments described above may also use well-known or proprietary synchronous or asynchronous client-server computing techniques. However, the various components may be implemented using more monolithic programming techniques as well, for example, as an executable running on a single CPU computer system, or alternately decomposed using a variety of structuring techniques known in the art, including but not limited to, multiprogramming, multithreading, client-server, or peer-to-peer, running on one or more computer systems each having one or more CPUs. Some embodiments are illustrated as executing concurrently and asynchronously and communicating using message passing techniques. Equivalent synchronous embodiments may also be supported.
In addition, programming interfaces nesting navigator API 617 to the nesting navigator 612 can be made available by standard means such as through C, C++, C#, and Java APIs; libraries for accessing files, databases, or other data repositories; through scripting languages such as XML; or through Web servers, FTP servers, or other types of servers providing access to stored data. The data repository 620 may be implemented as one or more database systems, file systems, or any other method known in the art for storing such information, or any combination of the above, including implementation using distributed computing techniques.
Also the example application 610 may be implemented in a distributed environment comprising multiple, even heterogeneous, computer systems and networks. For example, in one embodiment, some or all of the application logic 611, the nesting navigator 612, the nesting navigator API 617, the other components 613 and the data 615 are located in physically different computer systems. In another embodiment, various modules of the application 610 are hosted each on a separate server machine. Also, one or more of the modules may themselves be distributed, pooled or otherwise grouped, such as for load balancing, reliability or security reasons. Different configurations and locations of programs and data are contemplated for use with techniques described herein. A variety of distributed computing techniques are appropriate for implementing the components of the illustrated embodiments in a distributed manner including but not limited to TCP/IP sockets, RPC, RMI, HTTP, Web Services (XML-RPC, JAX-RPC, SOAP, etc.) etc. Other variations are possible. Also, other functionality could be provided by each component/module, or existing functionality could be distributed amongst the components/modules in different ways, yet still achieve the functions of a nesting navigator.
Furthermore, in some embodiments, some or all of the logic of the nesting navigator 612 may be implemented or provided in other manners, such as at least partially in firmware and/or hardware, including, but not limited to one or more application-specific integrated circuits (ASICs), standard integrated circuits, controllers (e.g., by executing appropriate instructions, and including microcontrollers and/or embedded controllers), field-programmable gate arrays (FPGAs), complex programmable logic devices (CPLDs), etc. Some or all of the programming logic and/or data structures may also be stored as contents (e.g., as executable or other machine-readable software instructions or structured data) on a computer-readable medium (e.g., a hard disk; a memory; a computer network or cellular wireless network or other data transmission medium; or a portable media article to be read by an appropriate drive or via an appropriate connection such as a DVD or flash memory device) so as to enable or configure the computer-readable medium and/or one or more associated computing systems or devices to execute or otherwise use or provide the contents to perform at least some of the described techniques. Some or all of the logic and data structures may also be transmitted as contents of generated data signals (e.g., as part of a carrier wave or otherwise included as part of an analog or digital propagated signal) on a variety of computer-readable transmission mediums, such as media 605, including wireless-based and wired/cable-based mediums, and may take a variety of forms (e.g., as part of a single or multiplexed analog signal, or as multiple discrete digital packets or frames). Such computer program products may also take other forms in other embodiments. Accordingly, embodiments of this disclosure may be practiced with other computer system configurations.
In block 710, the routine receives an indication of a user selection (e.g., a mouse click) of one of the data objects that is available for selection in the displayed nest viewer control. If the user selection is a first selection of a data object, the routine continues to block 715 to display an indication that selected data object has been selected (e.g., a selected flag). In some embodiments, the user selection of the data object may cause other flags or indicators to be displayed, such as a drill-down flag (e.g., if object is a bottom level object that is also a generator object of a sub-nest of the displayed nest) or a jump-up flag (e.g., if the object is a generator object that is also a bottom level object of a supra-nest of the displayed nest).
If instead the user selection received in block 710 is a second selection of a previously selected data object that is a bottom level object of the displayed nest (or a selection of a drill-down flag), then the routine continues to block 720 to display a nest viewer control of a sub-nest (e.g., a day-shift-hour viewer), with the selected data object presented as a selected generator object of the displayed sub-nest (e.g., a selected day of the day-shift-hour viewer). If instead the user selection is a second selection of a previously selected data object that is a generator object of the displayed nest (e.g., such as selection of a jump-up flag), then the routine continues to block 725 to display a nest viewer control of a supra-nest (e.g., a year-quarter-month viewer), with the selected data object presented as a selected bottom-level data object of the supra-nest (e.g., the selected month in the year-quarter-month viewer). After either the view control for the sub-nest or the viewer control for the supra-nest is displayed in blocks 720 and 725, respectively, the user may interact with these viewer controls to select data objects that are available for selection in the corresponding nests and to navigate to other nests (e.g., sub-nests and/or supra-nests, etc.), such as described above in blocks 710-725.
After blocks 715, 720, and 725, the routine may determine whether there are more user selections to be received for a displayed nest viewer control, and if so, the routine returns to block 710 where an indication of a user selection is received. If instead, at block 730, it was determined that there are no more user selections to be received for a displayed nest viewer control, the routine continues to block 740 to optionally perform other operations. After block 740, the routine ends.
It will be appreciated that in other embodiments of the routine of
All of the above U.S. patents, U.S. patent application publications, U.S. patent applications, foreign patents, foreign patent applications and non-patent publications referred to in this specification and/or listed in the Application Data Sheet, including but not limited to U.S. Provisional Patent Application No. 61/009,991, entitled “Nesting Navigator User Interface Control,” filed Jan. 4, 2008; U.S. Provisional Patent Application No. 61/010,122, entitled “Multi-mode Viewer Control for Viewing a Series of Statistical Values,” filed Jan. 4, 2008; and U.S. Provisional Patent Application No. 61/009,960, entitled “Method and System for Viewing and Managing Groups of Statistics Using a Multi-mode Viewer Control,” filed Jan. 3, 2008; U.S. patent application entitled “Multi-mode Viewer Control for Viewing and Managing Groups of Statistics,” filed concurrently herewith; and U.S. patent application entitled “Multi-mode Viewer Control for Viewing a Series of Statistical Values, filed concurrently herewith are incorporated herein by reference, in their entirety.
From the foregoing it will be appreciated that, although specific embodiments have been described herein for purposes of illustration, various modifications may be made without deviating from the spirit and scope of the invention. For example, the methods, systems, and techniques for navigating and selecting data discussed herein are applicable to other architectures. Also, the methods and systems discussed herein are applicable to differing protocols, communication media (optical, wireless, cable, etc.) and devices (such as wireless handsets, electronic organizers, personal digital assistants, portable email machines, game machines, pagers, navigation devices such as GPS receivers, etc.).
Claims
1. A computer-implemented method for providing navigation between a plurality of data objects aggregated into a plurality of hierarchical levels divisible into one or more nests of data objects, each nest containing a determined number of levels, each nest that is a sub-nest of another nest containing a level that is also a level contained in the another nest, comprising:
- under control of a computing system, presenting on a display screen a first nest viewer control for viewing a first nest of the one or more nests; in response to a first selection of an item that corresponds to a data object of the first nest, causing the item to be indicated as selected on the display screen; in response to a second selection of the item that corresponds to the data object of the first nest, presenting on the display screen a second nest viewer control for viewing a second nest of the one or more nests, the second nest being a sub-nest of the first nest, without changing the item indicated as selected; and in response to a selection of an other item that corresponds to an aggregation of at least some of the plurality of data objects of the first nest, presenting on the display screen a third nest viewer control for viewing a third nest, the third nest being a supra-nest of the first nest, without changing the other item indicated as selected.
2. The method of claim 1 wherein the determined number of levels is at least three.
3. The method of claim 1 wherein the level in the sub-nest that is also the level contained in the another nest is a generator object for the sub-nest.
4. The method of claim 1 wherein the level in the another nest is a bottom level item that corresponds to a selectable data object.
5. The method of claim 1 wherein the one or more nests of data objects define a time period navigation control.
6. The method of claim 1 wherein at least one of the first, second, or third nest viewer controls is a month-week-day selector control.
7. The method of claim 6 wherein the month-week-day selector control resembles a calendar.
8. The method of claim 1 wherein at least one of the first, second, or third nest viewer controls is a year-quarter-month selector control.
9. The method of claim 1 wherein at least one of the first, second, or third nest viewer controls is a day-shift-hour selector control.
10. The method of claim 9 wherein the day-shift-hour selector control uses a visual metaphor of a clock.
11. The method of claim 10 wherein the clock includes 24 separately selectable visual items, twelve of which corresponds to an hour before noon and twelve of which correspond to an hour after noon.
12. The method of claim 9 wherein a time period of the day-shift-hour selector control is selectable in response to a single click of a mouse button.
13. The method of claim 1 wherein the second selection of the item that corresponds to the data object is performed using a separate user interface control.
14. The method of claim 1 wherein the user selection of the other item that corresponds to the aggregation of at least some of the plurality of data objects is performed using a separate user interface control.
15. The method of claim 1 wherein the first, second, and third nest viewer controls comprise a universal period selector.
16. A computing system for providing navigation between a plurality of data objects aggregated into a plurality of hierarchical levels divisible into one or more nests of data objects, each nest containing a determined number of levels, each nest that is a sub-nest of another nest containing a level that is also a level contained in the another nest, comprising
- one or more memories, and
- a display device for displaying a visual representation of a data structure stored in the one or more memories, the visual representation configured to: present a first nest viewer control for viewing a first nest of the one or more nests; in response to a first selection of an item that corresponds to a data object of the first nest, cause the item to be indicated as selected; in response to a second selection of the item that corresponds to the data object of the first nest, present a second nest viewer control for viewing a second nest of the one or more nests, the second nest being a sub-nest of the first nest, without changing the item indicated as selected; and in response to a selection of a different item that corresponds to an aggregation of at least some of the plurality of data objects of the first nest, presenting a third nest viewer control for viewing a third nest, the third nest being a supra-nest of the first nest, without changing the different item indicated as selected.
17. The computer system of claim 16, wherein the first, second, and third nest viewer controls comprise a universal period selector
18. A computer-readable storage medium containing contents that when executed cause a computer processor to provide a user interface for navigating between a plurality of data objects aggregated into a plurality of hierarchical levels divisible into one or more nests of data objects, each nest containing a determined number of levels, each nest that is a sub-nest of another nest containing a level that is also a level contained in the another nest, by performing a method comprising:
- presenting a first nest viewer control for viewing a first nest of the one or more nests;
- in response to a first selection of an item that corresponds to a data object of the first nest, causing the item to be indicated as selected;
- in response to a second selection of the item that corresponds to the data object of the first nest, presenting a second nest viewer control for viewing a second nest of the one or more nests, the second nest being a sub-nest of the first nest, without changing the item indicated as selected; and
- in response to a selection of an other item that corresponds to an aggregation of at least some of the plurality of data objects of the first nest, presenting a third nest viewer control for viewing a third nest, the third nest being a supra-nest of the first nest, without changing the other item indicated as selected.
19. The computer-readable storage medium of claim 18, wherein the medium is a memory of the computing device and the contents are instructions for controlling a computer processor to perform one of the above methods.
20. The computer-readable medium of claim 18, wherein the first, second, and third nest viewer controls comprise a universal period selector.
Type: Application
Filed: Dec 30, 2008
Publication Date: Jul 9, 2009
Inventors: Gerald A. Dotson (Brier, WA), J. Dennis Dotson (Madison Lake, MN)
Application Number: 12/319,145
International Classification: G06F 3/048 (20060101);