System and method for optimizing computer software and hardware
A method of optimizing the operation of a computer system in running application programs in accordance with system capabilities, user preferences and configuration parameters of the application program. More specifically, with this invention, an optimizing program gathers information on the system capabilities, user preferences and configuration parameters of the application program to maximize the operation of the application program or computer system. Further, user selected rules of operation can be selected by dragging rule icons to target optimizer icon.
Latest IBM Patents:
- INTERACTIVE DATASET EXPLORATION AND PREPROCESSING
- NETWORK SECURITY ASSESSMENT BASED UPON IDENTIFICATION OF AN ADVERSARY
- NON-LINEAR APPROXIMATION ROBUST TO INPUT RANGE OF HOMOMORPHIC ENCRYPTION ANALYTICS
- Back-side memory element with local memory select transistor
- Injection molded solder head with improved sealing performance
This invention relates to the optimization of computer software and hardware, and in particular to optimization according to user-specified preferences, databases, and dynamic monitoring of system behavior and performance.
BACKGROUND OF THE INVENTIONComputer operating systems include a large number of parameters, many of which may be queried, controlled, and changed in order to alter the characteristics of the computer system. Similarly, software applications running on computer systems also often include a large number of parameters, many of which may be controlled and changed to alter the characteristics of the application running on the computer system. As an example, in Microsoft's Windows NT operating system, the resolution and color characteristics of the computer system's display may be changed by selecting the “Control Panel” icon from a “Settings” menu item. When the control panel is displayed, a user is presented with a set of new icons, one of which (“Display Properties”) may be selected to bring up another panel containing a set of tabs. The “Settings” tab on the “Display Properties” panel may be selected which allows a user to manually change the number of colors, resolution, video refresh rate, font size, and related graphical characteristics. The user specifies the refresh frequency by selecting from a pull-down menu list of available settings (e.g. 60 Hz, 70 Hz, etc.). The user can specify the screen resolution by selecting a slider icon and moving it right or left to increase or decrease the screen resolution (e.g., from 1024×1280 pixels to 600×800 pixels). Some of these settings may affect the performance of applications running on the system. For example, decreasing the color resolution and screen resolution may increase the speed of some graphics applications.
This example focuses on system settings. When one also considers the numerous application settings and various different hardware configurations available to users, and the interaction of all of these settings and configurations, the control accessing of the plurality of settings and configurations can be cumbersome and often requires detailed knowledge on the part of computer users. The need for a dynamic, semi-automatic, consolidated, and rule-based system that changes such settings and other aspects of the computer system, and makes recommendations, becomes apparent. Although many graphical user interfaces exist to control various aspects of the system (such as the graphical slider which controls screen resolution for Windows platforms) and in applications, the need for improved graphical user interfaces becomes apparent as computer systems become more complex.
With reference now to the figures and in particular to
Graphical user interfaces (GUIs) provide ways for users of computers and other devices to effectively communicate with the computer. In GUIs, available applications and data sets are often represented by icons 63 consisting of small graphical representations which can be selected by a user and moved on the screen. The data sets (including pages of information) and applications may reside on the local computer or on a remote computer accessed over a network. The selection of icons often takes the place of typing in a command using a keyboard in order to initiate a program or access a data set. In general, icons are tiny on-screen symbols that simplify access to a program, command, or data file. Icons are often activated or selected by moving a mouse-controlled cursor onto the icon and pressing one or more times on a mouse button.
GUIs include graphical images on computer monitors and often consist of both icons and windows. (GUIs may also reside on the screens of televisions, kiosks, personal digital assistants (PDAs), automatic teller machines (AIMs), and on other devices and appliances such as ovens, cameras, video recorders and instrument consoles.) A computer window is a portion of the graphical image that appears on the monitor and is dedicated to some specific purpose. Windows allow the user to treat the graphical images on the computer monitor like a desktop where various files can remain open simultaneously. The user can control the size, shape, and position of the windows.
Although the use of GUls with icons usually simplifies a user's interactions with a computer, GUIs are often tedious and frustrating to use. Icons must be maintained in a logical manner. It is difficult to organize windows and icons when many are similarly displayed at the same time on a single device.
In a drag-and-drop GUI, icons are selected 64 and moved 68 (i.e. “dragged”) to a target icon 69 to achieve a desired effect. For example, an icon representing a computer file stored on disk may be dragged over an icon containing an image of a printer in order to print the file, or dragged over an icon of a trash can to delete the file. An icon representing a page of information on the World Wide Web may be selected and dragged to a trash can to delete the link to the page of information. The page of information may be on the local machine or on a remote machine. A typical user's screen contains many icons, and only a subset of them will at anyone time be valid, useful targets for a selected icon. For example, it would not be useful to drag the icon representing a data file on top of an icon whose only purpose is to access an unrelated multimedia application.
Icons 63 could include static or animated graphics, text, multimedia presentations, and windows displaying TV broadcasts. Icons 63 could also include three dimensional images, for example, those used in virtual reality applications.
SUMMARY OF THE INVENTIONAn object of this invention is a method and system for increasing the apparent speed of a computer by automatically optimizing software and hardware according to user-specified preferences.
Another object of this invention is to provide a method and system for increasing the apparent speed of a computer using a database.
Yet another object of this invention is to provide a method and system for effectively increasing the apparent speed of a computer based on results obtained by dynamically monitoring system behavior and performance.
This invention permits users to conveniently optimize software running on a computer. The term “optimize” refers to running of a computer system or software more efficiently, for example, by maximizing both the speed with which a software application runs and user satisfaction, and/or minimizing cost or resource use. “Optimization” includes the setting of various parameters in hardware, operating system software, or application software such that the system as a whole runs as efficiently as possible. These parameters might be set to optimize speed, system resource cost, or other variables corresponding to a user's satisfaction.
Accordingly, this invention provides for a method of enhancing, for example, program application performance on a computer system. With this invention configuration information and performance capabilities based on characteristics of the program/system are determined. Then, the configuration information and the performance capabilities are used to optimize configuration parameters of the program applications so as to enhance the performance of the workstation in running the program'system. Further, with this invention user preferences in the operation of the program are selected by, for example, dragging rule icons to a target optimizer icon to provide user selected rules of operation of the application program.
The invention will be further understood by reference to the following detailed description when read in conjunction with the accompanying drawings, wherein:
With reference now to
The core architecture includes a Central Processing Unit 165, memory controller 162, system memory 65, disk storage 70, disk storage controller 75, and graphics subsystem 166. The computer system 12 can be either a stand alone workstation or a server and a workstation connected to each other via a communications network such as the internet. A portion of the system memory is set aside for an optimizer-database cache 80. Additionally, file space 85 on the disk storage unit 70 may be set aside for the optimizer database 140. Generally speaking, a cache or buffer is a place where data (files, images, and other information) can be stored to avoid having to read the data from a slower device, such as a remote, network-attached computer disk. For instance, a disk cache can store information that can be read without accessing remote disk storage.
With reference now to
In step 320, the optimizer 136 monitors system 12 behavior. For example, the optimizer may query the current CPU use, memory use, or other activity 321 using operating system commands known to those skilled in the art. Also, a monitor program 137 may use such commands to monitor such activity. This monitor program 137 may contain a graphical user interface 139 that displays such activity in graphical form, such as with bar graphs, pie carts, numerical indicators, gauges, etc. This activity 321 may be stored in the form of dynamic values M1, M2, . . . , MN in settings 460 and read by the optimizer program 136. Alternatively, the values corresponding to system activity/use may be directly obtained using operating system commands. One benefit of storing the dynamic data is that the optimizer 136 may compare current to past system activity. In this step 320, the optimizer also may perform performance measurements to “benchmark” the system by running built-in test routines. For example, the optimizer may time the rotation of a 3-D graphical object to assess the speed of the graphics subsystem 166.
In step 325, the optimizer 136 reads user input. For example, the user may enter text or data at the keyboard 40 (or with various input devices 46, 48, 50, or by voice input using audio input device 51) that specifies a level of optimization 326. This level of optimization may control which of the application settings 420 are used to optimize the application in step 330 or optimize the system 12 in step 340. A user wishing to have maximum performance may, for example, sacrifice graphic quality controlled in applications settings 420, that are generally read upon invocation of application 138.
By way of example, the optimizer 136 can adjust the following parameter settings 420, in the Unigraphics control file to adjust performance. (Unigraphics is an graphically-intensive engineering application created by EDS.) The values for each of these settings may be determined in step 325 and stored in record 430.
Low Performance settings
-
- *Ugraf130.realTimeDynamics: TRUE
- *Ugraf130.suppressAutoRefresh: FALSE
- *Ugraf130.backfaceCulling : FALSE
- *Ugraf130.depthSortedWireframe: TRUE
- *Ugraf130.lineAntialiasing: TRUE
- *Ugraf130.disableTranslucency: FALSE
High Performance settings
-
- *Ugraf130.realTimeDynamics: FALSE
- *Ugraf130.suppressAutoRefresh: TRUE
- *Ugraf130.backfaceCulling: TRUE
- *Ugraf130.depthSortedWireframe: FALSE
- *Ugraf130.lineAntialiasing: FALSE
- *Ugraf130.disableTranslucency: TRUE
In this example, if a user sets suppressAutoRefresh to TRUE, the application performance can improve by reducing excess redrawing. “Low Performance” is generally correlated with higher graphical quality. The “level” of optimization 326 may correspond to the number of “high performance” settings selected. For example, highest performance (highest level of optimization) may correspond to the use of all the settings in their high performance states. Lower levels of optimization correspond to fewer of the high-performance settings being used. Those values that constitute high performance settings may be stored in application settings 420.
Similarly, the optimizer also optimizes system settings 440. These are settings independent of applications and generally associated with the computer or its hardware or software components. For example, the graphics card may have general settings that control the resolution, color depth, synchronization on vertical refresh, and other features. The disk may have a fragmentation state which may be altered. The size of “swap” spaces may be specified. These system settings are sometimes stored in the system registry or in initialization files which may be modified using methods known to those skilled in the art.
Returning to step 325 in
In step 350, the optimizer 136 may provide suggestions or recommendations 480, for example, in the form of specific text that is output to the user. This output may appear in the optimizer's graphical user interface 139, in a web browser 90, or as audible sound played through speakers 54 another audio output device. These recommendations may be used to warn the user of various conditions (e.g. “disk space is low”), or give suggestions on how to improve performance (e.g. “purchase more memory”). The optimizer contains rules 331, 341, 351 that it uses to make such optimizations 330, 340 and recommendations 350. For example, a rule may be: If A1=yes, and S1=200 MHz, or M1=90%, then make suggestion and change (in step 340) the graphic card settings (e.g. 450) that control “synchronization on vertical refresh”. In this example, S1 corresponds to the processor frequency, and M1 corresponds to the percentage of memory used. A rule may consist of a set of conditionals and Boolean operations (e.g. if A and B are true and C is false then make suggestions and take action).
Note that the suggestions 480, entire records 430, and rules 331, 341, 351 may be segregated into different files in database 400, stored at a local machine 12 or remote machine 130. Users may view (360) the rules 331, 341, 350, records 430, and suggestions 480 using graphical user interface 53, which may visually segregate these items based on origin of the suggestions (e.g. companies, individuals, etc.), severity, date, or other criteria. These rules and suggestions may be web accessible (using network 110) for dynamic optimization across the web using a propriety program product at the web server.
Referring to
The optimizer in steps 330, 340 and 350 may learn 370 from a user's past activity. For example, if the user has always used an application with small files, and past CPU use has always been low (e.g. as stored in settings 470), the software optimizer can make suggestions (480), accordingly. Note that one benefit of having portions of the database 140 (e.g. the settings and suggestions) and rules 331, 341, and 351 on a remote machine 130 is that a company or system administrator can continually manage and update messages and rules as new information is provided by application vendors. When a user runs an application in 410, the user can make use of the latest information in the database. If the database 140 resides on a remote machine 130 the optimization 330, 340, and 350 can be performed either on the local machine or the remote machine. If performed on a remote machine, messages and other parameters are fed from the remote server 130 to the client 12 using the network 110.
In one embodiment, the optimizer icon 510 consists of different regions 520 to which iconic rules 540 are dragged. The optimizer software determines near what location 520 icon is positioned using techniques which are well known to those skilled in the art of GUI interfaces. In addition to performing general optimization, the optimizer icons 510 may be used to specify the ‘nature’ of the update; for example, one optimizer icon 510 may be specified for optimization concerning graphics, while another icon 511 may be specific for controlling all aspects of memory and disk space. The optimizer icon may change its graphical attribute such as color or brightness 570 in response to the information gained when the optimizer software applies the rules 541. For example, once a rule is successfully applied, then the optimizer region 520 may turn red 570. The iconic rules 541 may also change graphical attributes in a similar manner. (Changes in graphical characteristics of the iconic rules and optimizer icons are carried out in step 670 in FIG. 7).
The rule application can be carried out by the optimizer software by comparing the position 585 of icon 540 to values stored in a position file 596 which may be stored on disk.
The optimizer icon 510 may also contain graphical indications of regions 520, such as cutouts 530, to which iconic rules 540 may be dragged. In this manner, when the icons are placed in the optimizer icon 510 there can be a graphical indication 551 of the binding to the user. Additionally, the area around the cutout may change color or brightness 570 once an icon 540 is located in the cutout. The use of discrete cutouts 530 may be useful when only a limited number of rules may be used. The rules may be evident to the user by text 560 written on the optimizer icon or by colors 570.
The rule 541 represented by an icon 540 is applied 660. The icon 540 or optimizer icon 510 optionally may change color, brightness, texture, blink rate, shape, size, or other graphical attribute (see step 670). This graphical attribute may be a function of the nature of the rule. For example, an iconic rule that increases graphics quality may be red. An icon representing a rule that decreases graphics quality may be green. The optimizer icon may change colors when the rule is successfully applied or has a beneficial effect.
Claims
1. In a computer system, a method of enhancing program application or system performance of said computer system, said method comprising:
- a. determining configuration information of said computer system;
- b. determining performance capabilities of said computer system based on known characteristics and behaviors of said program application; and
- c. automatically optimizing configuration parameters of said program application in response to said configuration information and said performance capabilities.
2. A method as recited in claim 1, further comprising:
- a. determining user preferences for the operation of said computer system and further automatically optimizing said computer system in response to said user preferences.
3. A method as recited in claim 1, wherein said determining performance capabilities of said computer system comprises:
- a. comparing system performance against previous system performance, where said previous system performance is stored in a database with said configuration parameters.
4. A method as recited in claim 2, wherein said user preferences are determined using a graphic user interface through which a user enters said user preferences.
5. A method as recited in claim 1, further comprising:
- a. providing recommended system configurations in response to said performance capabilities that are determined.
6. A method as recited in claim 1, wherein said configuration information comprises at least one of the following:
- a. CPU speed, memory capacity, disk subsystem capabilities, system BIOS version, graphics adapter type, driver levels, operating system software and service pack release levels.
7. A method as recited in claim 1, wherein said performance capabilities comprise at least one of the following:
- a. CPU performance for integer and floating point tasks, memory subsystem throughput, disk subsystem throughput,
- b. 3D graphics performance, and
- c. 2D graphics performance.
8. A method as recited in claim 1, wherein said computer system can operate according to a plurality of rules of operation, wherein said graphic user interface comprises user selectable rule icons, each of which represents one of said rules of operation for said computer system, and wherein a user can select at least one of said rules of operation by selecting at least corresponding one of said rule Icons.
9. A method as recited in claim 8, wherein said user selects one of said rule icons by dragging and dropping said one icon to an optimizer icon, wherein said dropping results in the application of said selected one rule of operation.
10. A method as recited in claim 9, wherein said optimizer icon comprises a plurality of locations, each location capable of accepting one of said rule icons, wherein one of said rules is implemented when a corresponding one of said rule icons representing said one rule is placed on said graphical user interface within a threshold distance of said one location.
11. A method as recited in claim 10, wherein each location is visually distinguished.
12. A method as recited in claim 10, wherein each location is visually distinguished by at least one of the following characteristics: color, outline, textures, and brightness.
13. A method as recited in claim 10, wherein each location is spatially distinguished.
14. A method as recited in claim 10, wherein at least one of said locations is a cutout on said optimizer icon.
15. A method as recited in claim 10, wherein there is a visual indication that one of said rule icons is within said threshold distance.
16. A method as recited in claim 1, further comprising:
- a. storing said known characteristics and behaviors of said program application in a database.
17. A method as recited in claim 16, wherein said database is hard-coded into said program application.
18. A method as recited in claim 16, wherein said database is stored as a table.
19. A method as recited in claim 16, wherein said database is constructed by the user via a graphical user interface that uses a drag-and-drop paradigm to construct rules by combining graphical user interface components representing components of the rule.
20. A method as recited in claim 16, wherein said database is stored in a storage device that is remote from said workstation.
21. A method as recited in claim 1, wherein said computer system comprises a server and a remote station which can be interconnected to each other through a communications network.
22. A method as recited in claim 1, further comprising optimizing configuration parameters of said computer system in response to said configuration information and said performance capabilities.
23. A method as recited in claim 1, wherein determining performance capabilities of said computer system comprises:
- a. determining real time resource utilization when said program application is being executed.
24. A method of running an application program on a computer system to accomplish a user selected result in the running of the application program, said method comprising:
- a. determining the utilization of selected resources of said computer system at selected intervals during the running of the application program;
- b. comparing said resource utilization with predefined thresholds; and
- c. alerting a user of said computer system to alter application program parameters if said resource utilization comparison satisfies predefined criteria with respect to said thresholds.
25. A method as recited in claim 24, wherein said predefined criteria comprises a combination of resource utilization requirements for a set of said resources of said computer system.
26. A method of enhancing computer systems performance, said method comprising:
- a. monitoring user activity;
- b. determining user activity patterns;
- c. matching said user activity patterns against entries in a database; and
- d. performing at least one of making suggestions or and alerting said user to alter at least one of computer system parameters and application program parameters in accordance with said entries.
27. A program storage device readable by machine, tangibly embodying a program of instructions executable by the machine to perform method steps for enhancing program application or system performance of a computer system, said method steps comprising:
- a. determining configuration information of said computer system;
- b. determining performance capabilities of said computer system based on known characteristics and behaviors of said program application; and
- c. automatically optimizing configuration parameters of said program application in response to said configuration information and said performance capabilities.
28. A program storage device readable by machine, tangibly embodying a program of instructions executable by the machine to perform method steps for running an application program on a computer system to accomplish a user selected result in the running of the application program, said method steps comprising:
- a. determining the utilization of selected resources of said computer system at selected intervals during the running of the application program;
- b. comparing said resource utilization with predefined thresholds; and
- c. alerting a user of said computer system to alter application program parameters if said resource utilization comparison satisfies predefined criteria with respect to said thresholds.
29. A program storage device readable by machine, tangibly embodying a program of instructions executable by the machine to perform method steps for enhancing computer systems performance, said method comprising:
- a. monitoring user activity;
- b. determining user activity patterns;
- c. matching said user activity patterns against entries in a database; and
- d. performing at least one of making suggestions or and alerting said user to alter at least one of computer system parameters and application program parameters in accordance with said entries.
30. A system for enhancing program application or system performance of a computer system comprising:
- a. means for determining configuration information of said computer system;
- b. means for ascertaining performance capabilities of said computer system based on known characteristics and behaviors of said program application; and
- c. processing means for automatically optimizing configuration parameters of said program application based on said configuration information and said performance capabilities.
31. The system of claim 30 further comprising notifying means for notifying a user of said optimal configuration parameters.
32. The system of claim 30 wherein said automatically optimizing comprises automatically resetting configuration parameters of said program application.
33. In a computer system, a method of enhancing program application performance of said computer system, said method comprising:
- a. determining performance capabilities of said computer system based on known characteristics and behaviors of said program application; and
- b. automatically optimizing configuration parameters of said program application in response to said performance capabilities.
34. A method as recited in claim 33, further comprising:
- a. determining user preferences for the operation of said computer system and further automatically optimizing said configuration parameters of said program application in response to said user preferences.
35. A method as recited in claim 33, wherein said determining performance capabilities of said computer system comprises:
- a. comparing system performance against previous system performance, where said previous system performance is stored in a database with said configuration parameters.
36. A method as recited in claim 34, wherein said user preferences are determined using a graphic user interface through which a user enters said user preference.
37. A method as recited in claim 33, further comprising:
- a. providing recommended system configurations in response to said performance capabilities that are determined.
38. A method as recited in claim 33, wherein said performance capabilities comprise at least one of the following:
- a. CPU performance for integer and floating point tasks, memory subsystem throughput, disk subsystem throughput,
- b. 3D graphics performance, and
- c. 2D graphics performance.
39. A method as recited in claim 33, wherein said computer system can operate according to a plurality of rules of operation, wherein said graphic user interface comprises user selectable rule icons, each of which represents one of said rules of operation for said computer system, and wherein a user can select at least one of said rules of operation by selecting at least corresponding one of said rule icons.
40. A method as recited in claim 39, wherein said user selects one of said rule icons by dragging and dropping said one icon to an optimizer icon, wherein said dropping results in the application of said selected one rule of operation.
41. A method as recited in claim 40, wherein said optimizer icon comprises a plurality of locations, each location capable of accepting one of said rule icons, wherein one of said rules is implemented when a corresponding one of said rule icons representing said one rule is placed on said graphical user interface within a threshold distance of said one location.
42. A method as recited in claim 41, wherein each location is visually distinguished.
43. A method as recited in claim 41, wherein each location is visually distinguished by at least one of the following characteristics: color, outline, textures, and brightness.
44. A method as recited in claim 41, wherein each location is spatially distinguished.
45. A method as recited in claim 41, wherein at least one of said locations is a cutout on said optimizer icon.
46. A method as recited in claim 41, wherein there is a visual indication that one of said rule icons is within said threshold distance.
47. A method as recited in claim 33, further comprising:
- a. storing said known characteristics and behaviors of said program application in a database.
48. A method as recited in claim 47, wherein said database is hard-coded into said program application.
49. A method as recited in claim 47, wherein said database is stored as a table.
50. A method as recited in claim 47, wherein said database is constructed by the user via a graphical user interface that uses a drag-and-drop paradigm to construct rules by combining graphical user interface components representing components of the rule.
51. A method as recited in claim 47, wherein said database is stored in a storage device that is remote from said workstation.
52. A method as recited in claim 33, wherein said computer system comprises a server and a remote station which can be interconnected to each other through a communication network.
53. A method as recited in claim 33, further comprising optimizing configuration parameters of said computer system in response to said performance capabilities.
54. A method as recited in claim 33, wherein determining performance capabilities of said computer system comprises:
- a. determining real time resource utilization when said program application is being executed.
55. A program storage device readable by machine, tangibly embodying a program of instructions executable by the machine to perform method steps for enhancing computer application performance of a computer system, said method steps comprising:
- a. determining performance capabilities of said computer system based on known characteristics and behaviors of said program application; and
- b. automatically optimizing configuration parameters of said program application in response to said performance capabilities.
56. A system for enhancing program application performance of a computer system comprising:
- a. means for ascertaining performance capabilities of said computer system based on known characteristics and behaviors of said program application; and
- b. means for automatically optimizing configuration parameters of said program application in response to said performance capabilities.
57. The system of claim 56 further comprising notifying means for notifying a user of said optimal configuration parameters.
58. The system of claim 56 wherein said automatically optimizing comprises automatically resetting configuration parameters of said program application.
5263164 | November 16, 1993 | Kannady et al. |
5428791 | June 27, 1995 | Andrew et al. |
5436748 | July 25, 1995 | Vinel et al. |
5497490 | March 5, 1996 | Harada et al. |
5506952 | April 9, 1996 | Choy et al. |
5530887 | June 25, 1996 | Harper et al. |
5613125 | March 18, 1997 | Nguyen et al. |
5668992 | September 16, 1997 | Hammer et al. |
5668995 | September 16, 1997 | Bhat |
5713009 | January 27, 1998 | DeRosa et al. |
5745880 | April 28, 1998 | Strothmann |
5784539 | July 21, 1998 | Lenz |
5809282 | September 15, 1998 | Cooper et al. |
5815152 | September 29, 1998 | Collier et al. |
5822565 | October 13, 1998 | DeRosa et al. |
5944819 | August 31, 1999 | Kumar et al. |
5978594 | November 2, 1999 | Bonnell et al. |
6177860 | January 23, 2001 | Cromer et al. |
Type: Grant
Filed: May 8, 2002
Date of Patent: Nov 1, 2005
Assignee: International Business Machines Corporation (Armonk, NY)
Inventors: Daniel Peter Dumarot (Cornwall, NY), David Alan Stevenson (Poughkeepsie, NY), Nicolas Richard Dono (Hopewell Jtn., NY), James Randall Moulic (Poughkeepsie, NY), Clifford Alan Pickover (Yorktown Hts., NY), Bengt-Olaf Schneider (Yorktown Hts., NY), Adelbert Smith (Poughkeepsie, NY)
Primary Examiner: Antony Nguyen-Ba
Attorney: Douglas W. Cameron
Application Number: 10/141,383