Developing user interfaces for applications can be a highly iterative process, often requiring developers to make incremental adjustments to an application's user interface in order to present information to end-users effectively. For example, developers may provide user input to construct the user interface in a development tool (as used herein a “development tool” refers to a tool for developing software—examples include Microsoft's Visual Studio® development system); compile the application to apply the changes; run the application to visualize the extent to which the changes effectively present data; stop the application to apply further changes; and so on.
Some applications may allow end users to modify application settings to change the way the application looks (changing the “skin” of an application, etc.). However, such changes are typically defined by the developer in the user interface definitions; accordingly, such settings typically do not ease the burden on the developer during the development of the software. As used herein, user interface definitions for an application define the application's user interface. User interface definitions are included in the application when the application is being developed, and are typically not modifiable by end users in the ordinary course of running the application. Accordingly, an end user manipulating pre-defined user interface settings to switch between alternative pre-defined user interface presentations is not considered to be updating the user interface definitions themselves.
The validity and/or effectiveness of an application's user interface often cannot be assessed until the application is run, especially if the user interface is to present significant amounts of application data (data that can be accessed by an application, but that may be provided and/or modified after an application has been compiled). This running of the application to assess iterative changes can slow down the overall development process described above. The tools and techniques described herein can allow an application's user interface to be updated while the application is running, which may speed up the development process and/or provide other benefits, such as allowing the development process to be more natural for a developer.
In one embodiment, the tools and techniques can include running an application and loading initial user interface definitions for the application into memory. The application can use the initial user interface definitions in the memory to present an initial user interface for the application. In response to user input, one or more updates can be made to the initial user interface definitions in the memory, and the application can use the updated user interface definitions in the memory to present an updated user interface for the application. Presenting the initial user interface, making the updates, and using the updated definitions to present the updated user interface can be done while the application continues to run.
In another embodiment of the tools and techniques, an initial application development project can be compiled as an application that includes application logic and initial user interface definitions. The application can be run to execute the application logic, load the initial user interface definitions into memory, and present application data according to the initial user interface definitions. While the application is running, one or more updates can be made to the initial user interface definitions in the memory, and the application data can be presented according to resulting updated user interface definitions. Moreover, the initial application development project can be updated to reflect the updates to the user interface definitions in the memory.
In yet another embodiment of the tools and techniques, an application can be run to execute application logic, load initial user interface definitions for the application into memory, and present an initial user interface according to the initial user interface definitions. While the application is running, user input can be received at the application, one or more updates can be made to the initial user input definitions in memory, and an updated user interface can be presented according to the updated user interface definitions. The update(s) can also be communicated to a development tool running in a different process from the application.
This Summary is provided to introduce a selection of concepts in a simplified form. The concepts are further described below in the Detailed Description. This Summary is not intended to identify key features or essential features of the claimed subject matter, nor is it intended to be used to limit the scope of the claimed subject matter. Similarly, the invention is not limited to implementations that address the particular techniques, tools, environments, disadvantages, or advantages discussed in the Background, the Detailed Description, or the attached drawings.
Embodiments described herein are directed to techniques and tools for improved application development using updateable running applications. Such improvements may result from the use of various techniques and tools separately or in combination.
Such techniques and tools may include running a compiled application that includes initial user interface definitions. The application can load the initial user interface definitions in memory and present an initial user interface according to the initial user interface definitions. For example, the application may present application data in a user interface according to the initial user interface definitions. A user can provide user input (e.g., by making a set of one or more gestures such as a mouse click, keystroke, etc.). In response to the user input, the application can update the user interface definitions in memory. Moreover, the application can present an updated user interface according to the resulting updated user interface definitions. In addition, the updates can be communicated to a development tool, and the development tool can merge the updates with a development project from which the application was compiled.
Accordingly, one or more substantial benefits can be realized from the updateable running application tools and techniques described herein. For example, an application developer can run the actual compiled application and indicate desired updates to the application user interface while the application is still running. In response to the developer's actions, the application can automatically update the user interface definitions and present an updated user interface. Additionally, the updates can be made to the development project from which the application was compiled. Accordingly, a developer can see the user interface in the actual running application, can make updates to the user interface, and can see those updates in the running application almost immediately after requesting the updates.
The subject matter defined in the appended claims is not necessarily limited to the benefits described herein. A particular implementation of the invention may provide all, some, or none of the benefits described herein. Moreover, a particular implementation may provide additional benefits not mentioned herein. Although operations for the various techniques are described herein in a particular, sequential order for the sake of presentation, it should be understood that this manner of description encompasses rearrangements in the order of operations, unless a particular ordering is required. For example, operations described sequentially may in some cases be rearranged or performed concurrently. Techniques described herein with reference to flowcharts may be used with one or more of the systems described herein and/or with one or more other systems. For example, the techniques described herein may be implemented with hardware or software, or a combination of both. Moreover, for the sake of simplicity, flowcharts may not show the various ways in which particular techniques can be used in conjunction with other techniques.
The computing environment (100) is not intended to suggest any limitation as to scope of use or functionality of the invention, as the present invention may be implemented in diverse general-purpose or special-purpose computing environments.
With reference to
Although the various blocks of
A computing environment (100) may have additional features. In
The storage (140) may be removable or non-removable, and may include computer-readable storage media such as magnetic disks, magnetic tapes or cassettes, CD-ROMs, CD-RWs, DVDs, or any other medium which can be used to store information and which can be accessed within the computing environment (100). The storage (140) stores instructions for the software (180).
The input device(s) (150) may be a touch input device such as a keyboard, mouse, pen, or trackball; a voice input device; a scanning device; a network adapter; a CD/DVD reader; or another device that provides input to the computing environment (100). The output device(s) (160) may be a display, printer, speaker, CD/DVD-writer, network adapter, or another device that provides output from the computing environment (100).
The communication connection(s) (170) enable communication over a communication medium to another computing entity. Thus, the computing environment (100) may operate in a networked environment using logical connections to one or more remote computing devices, such as a personal computer, a server, a router, a network PC, a peer device or another common network node. The communication medium conveys information such as data or computer-executable instructions or requests in a modulated data signal. A modulated data signal is a signal that has one or more of its characteristics set or changed in such a manner as to encode information in the signal. By way of example, and not limitation, communication media include wired or wireless techniques implemented with an electrical, optical, RF, infrared, acoustic, or other carrier.
The tools and techniques can be described in the general context of computer-readable media. Computer-readable media are any available media that can be accessed within a computing environment. By way of example, and not limitation, with the computing environment (100), computer-readable media include memory (120), storage (140), and combinations of the above.
The tools and techniques can be described in the general context of computer-executable instructions, such as those included in program modules, being executed in a computing environment on a target real or virtual processor. Generally, program modules include routines, programs, libraries, objects, classes, components, data structures, etc. that perform particular tasks or implement particular abstract data types. The functionality of the program modules may be combined or split between program modules as desired in various embodiments. Computer-executable instructions for program modules may be executed within a local or distributed computing environment. In a distributed computing environment, program modules may be located in both local and remote computer storage media.
For the sake of presentation, the detailed description uses terms like “determine,” “choose,” “adjust,” “send,” and “operate” to describe computer operations in a computing environment. These and other similar terms are high-level abstractions for operations performed by a computer, and should not be confused with acts performed by a human being, unless performance of an act by a human being (such as a “user”) is explicitly noted. The actual computer operations corresponding to these terms vary depending on the implementation.
The environment (200) can include a development tool (205), such as Microsoft's Visual Studio® development system. The development tool (205) can be used to produce a development project (210), and to store it in persistent storage. The development project (210) can be written in one or more of various software development languages, including source code, markup languages such as XML, etc. The development project (210) can include application logic, as well as user interface definitions (212), which respectively define the logic and user interface for an application (220) to be compiled from the development project (210). The user interface definitions (212) could be in any of various different languages, but in one implementation the user interface definitions are written in a user interface modeling language that is built on the XML standard. The user interface definitions (212) can include standard types of definitions, including screen layout definitions, identifications of user interface elements, user interface element properties (e.g., display names, descriptions, user interface control identification, object(s) to which the user interface element is bound).
The compiled application (220) can be stored in persistent storage and/or in volatile storage, and can include stored user interface definitions (222). For example, the development tool (205) or a different tool may be used to compile the development project. As used herein, compiling refers to transforming and/or organizing a development project into an application that can be run. This compiling can use standard compiling techniques, and can be done at or prior to runtime. Compiling may include compiling source code into object code, placing markup language documents in accessible and useable form, etc.
The application (220) in storage can be loaded as a running application (225), which can include loading the user interface definitions (222) from storage to provide the user interface definitions (230) in memory. The running application (225) can present a user interface with one or more application user interface components (240) according to the user interface definitions (230) in memory. For example, the application (225) may present application data with the user interface components (240) according to the user interface definitions (230).
Referring still to
The content tree editor (252) and the property editor (254) can be hosted by a designer service component (260), which can also receive user input from the editors (252 and 254), indicating updates to the user interface definitions (230) in memory. In response to receiving such user input, the designer service component (260) can update the user interface definitions (230) in memory through a user interface definition editing component (270). The running application (225) can listen for changes to the user interface definitions (230) in memory, so that when the user interface definitions (230) in memory are updated, the running application (225) can respond by updating the user interface components (240). Accordingly, a developer can indicate a change to the user interface definitions (230) in memory through the editors (252 and 254), and the running application (225) can present the updated user interface for the running application (225) to the developer almost immediately in response to the developer's input. Accordingly, substantial time can be saved for a developer who is iteratively updating user interface definitions and viewing those updates in the running application.
The user interface definition editing component (270) can also save user interface definition update units (275) to memory. The user interface definition editing component (270) can also cancel user interface definition updates by using those update units (275) to reverse the updates in the user interface definitions (230) in memory. In addition, the user interface definition editing component (270) can communicate user interface definition updates to a persisting component (280) in the development tool (205). For example, the updates can be communicated across a dedicated communication channel. In response, the persisting component (280) can merge the user interface definition updates with the user interface definitions (212) in the development project (210) from which the running application (225) was compiled.
When the application development project (210) is finalized, it may be compiled without providing the functionality of the components for editing the user interface definitions. For example, the content tree editor (252), property editor (254), designer service component (260), and/or the user interface definition editing component (270) may be omitted from the compiled application that is provided to end users. Alternatively, one or more of those components can be de-activated in the final application.
An example of user interface displays that can be provided by an updateable running application will now be discussed with reference to
Referring now to
The screen (320) can include standard operational buttons (322), such as “SAVE,” “REFRESH,” and “CLOSE.” The screen (320) can be generally laid out in left and right columns. The left column can include a user interface element in the form of a list (324). The list (324) can present application data, such as titles for merchandise orders. The right column of the screen (320) can be arranged in a vertical stack. The top of the stack can include user interface items (326) (ORDERID, ORDERDATE, SHIPDATE, SHIPADDRESS, SHIPCITY, SHIPCOUNTRY, and CUSTOMER) that represent fields for a selected order from the list (324). Below the user interface items (326) in the right column of the screen (320), a user interface item (328) in the form of a list can present a list of orders.
Moreover, the user interface (300) can include a user interface element in the form of a button (330) that is titled “CUSTOMIZE.” The CUSTOMIZE button (330) can be selected by a developer to provide user input, which results in the application entering a customization mode.
Referring now to
Referring to
The developer can provide user input by manipulating the scroll bar (348) to scroll down the properties list (350) to a property to be updated. For example, the developer can scroll down to reveal a user interface control property element (352), which initially defines the control for the user interface element as “MICROSOFT.TBD.LST.” As an example, initially this control property may be defined as in the following user interface modeling language excerpt from stored user interface definitions (see the following line: View=“Microsoft.Tbd:List”):
The developer can provide user input to update the control property element (352) to a different user interface control, such as by selecting a different control from a drop-down list or menu. For example, referring now to
Accordingly, after a developer makes a gesture to provide user input to update the control for the user interface item (328), the developer can view the running application's presentation of application data in the user interface item (328) according to the updated user interface definition almost immediately.
A developer can prompt the running application to cancel the update to the user interface item (328) (possibly along with any other pending updates) by selecting a CANCEL button (354). Alternatively, the developer may continue to make additional updates to user interface definitions by interacting with the content tree editor (342) and the properties editor (344). When the developer is ready to save the updates to the development project in persistent storage, the developer can select a SAVE button (356). This can result in the user interface definitions editing component in the running application saving any pending updates in persistent storage by communicating the updates to the persisting component in the development tool, so that the persisting component can merge the changes with the development project in persistent storage. Additionally, the updates may be saved in persistent storage in the environment for the running application. For example, the initial user interface modeling language excerpt above can be changed to the following in the development project (see the following line: View=“Microsoft.Tbd:DataGrid”):
Referring now to
Referring now to
However, if the developer un-checks the checkbox (852), the label property element (854) can become active, as illustrated in
If the developer makes a gesture to select the RIGHTALIGNED entry in the label property element (854), then the user interface definitions can be updated in memory, which can result in the running application updating the user interface items (326) on the screen (320) to be right aligned, as illustrated in
Accordingly, after a developer makes a gesture to provide user input to update the label appearance for the user interface items (326), the developer can view the running application's presentation of application data in the user interface items (326) according to the updated user interface definition almost immediately.
As noted above, a developer can prompt the running application to cancel the update to the user interface items (326) (possibly along with any other pending updates) by selecting a CANCEL button (354). Alternatively, the developer may continue to make additional updates to user interface definitions by interacting with the content tree editor (342) and the properties editor (344). When the developer is ready to save the updates to the development project in persistent storage, the developer can select a SAVE button (356). As discussed above, this can result in the user interface definitions editing component in the running application saving any pending updates in persistent storage by communicating the updates to the persisting component in the development tool, so that the persisting component can merge the changes with the development project in persistent storage. Additionally, the updates may be saved in persistent storage in the environment for the running application.
If the developer chooses to save the changes, the application can exit from the customization mode. However, the application can continue to run, as illustrated in
Referring to
If the updates are to be saved, the technique can include communicating (1270) the one or more updates to a development tool, such as a tool running in a different process from the application and possibly on a different machine from the running application. Additionally, the technique can include storing (1280) updated user interface definitions that represent the one or more updates in persistent storage, such as by merging the updates with a development project from which the running application was compiled. Storing the updated user interface definitions can include storing the definitions in an environment that includes the running application and/or in an environment that includes a development tool running in a different process from the running application.
The update(s) can be made (1250) from the running application, such as by one or more components within the application that are dedicated to user interface definition updates. Also, executing (1230) the application to use the initial user interface definitions in the memory to present an initial user interface for the application can include accessing application data and presenting the application data according to the initial user interface definitions. Similarly, executing (1260) the application to use the updated user interface definitions in the memory to present an updated user interface for the application can include accessing the data and presenting the data according to the updated user interface definitions.
Referring to
Running (1320) the application can include running the application in a first process, and updating (1360) the initial application development project can be done in a second process. Moreover, updating (1360) the development project may be done on a different machine from where the application is running (1320).
The application can further include a user interface editing component, and making (1340) one or more updates to the initial user interface definitions can be done by the user interface editing component. In addition, the technique can include compiling (1370) the updated application development project as an updated application, and the updated application may omit at least some functionality of the user interface editing component (e.g., by omitting the component, disabling some functionality of the component, etc.). The updating (1360) and compiling (1370) of the application development project can be done in a development tool running in a different process from the running application.
Making (1340) the one or more updates can include updating a visual-spatial arrangement of a plurality of user interface elements. For example, updating the visual-spatial arrangement may include changing a layout of multiple user interface elements (for example, from a 2-column layout of elements to a 3-column layout of elements, from left justification to right justification of elements (as illustrated in
Referring to
Presenting the initial user interface can include accessing application data and presenting the application data according to the initial user interface definitions. Also, presenting the updated user interface can include accessing the data and presenting the data according to the updated user interface definitions. In addition, the acts can include loading (1445) one or more representations of the update(s) in memory; this loading (1445) may also be done while the application is running (1410).
The update(s) can be communicated (1450) to a development tool running in a different process from the application. Moreover, the initial application development project can be updated (1460) to produce an updated application development project that reflects the update(s) to the initial user interface definitions. The communication (1450) and/or the updating (1460) may be done while the application is running, or at some other time. The updating (1460) of the application development project can be done in a development tool running in a different process from the running application.
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.