Login| Sign Up| Help| Contact|

Patent Searching and Data


Title:
METHODS, FRAMEWORKS AND DEVICES SUPPORTING DESIGNER-DEVELOPER COLLABORATION AND RAPID SOFTWARE APPLICATION DESIGN ITERATION
Document Type and Number:
WIPO Patent Application WO/2015/121423
Kind Code:
A1
Abstract:
A computer-implemented method for development of a software application includes configuring said software application to use current configuration values for at least some aspects of operation of said software application; running said application with a first set of configuration values as said current configuration values for said application; in response to an instruction to modify said current configuration values for said application, replacing at least some of said current configuration values with a second set of configuration to form modified current configuration values; and then running the application with said modified current configuration values.

Inventors:
ZILMER PRIIDU (EE)
KASE JAANUS (EE)
Application Number:
EP2015053112W
Publication Date:
August 20, 2015
Filing Date:
February 13, 2015
Export Citation:
Click for automatic bibliography generation   Help
Assignee:
WIRESWISS GMBH (CH)
International Classes:
G06F21/57; G06F9/44
Domestic Patent References:
WO2013023481A12013-02-21
Foreign References:
US20140040857A12014-02-06
EP2743827A12014-06-18
US8521864B12013-08-27
US20130347111A12013-12-26
Download PDF:
Claims:
WHAT IS CLAIMED: We claim:

1. A computer- implemented method for development of a software application, the method implemented by software in conjunction with hardware, said method comprising:

(A) configuring said software application to use current configuration values for at least some aspects of operation of said software application;

(B) running said application with a first set of configuration values as said current configuration values for said application;

(C) in response to an instruction to modify said current configuration values for said application, replacing at least some of said current configuration values with a second set of configuration to form modified current configuration values; and then

(D) running the application on a computer device with said modified current configuration values.

2. The method of claim 1 wherein said configuration values for said application comprise key-value pairs.

3. The method of claim 1 or 2 wherein said replacing in (C) is performed after authentication of said instruction.

4. The method of any preceding claim wherein the second set of configuration values is specified by one or more URIs or URLs and wherein the method further requires: obtaining the second set of configuration values from a location specified by the one or more URIs or URLs.

5. The method of any of the preceding claims further comprising:

repeating acts (C) and (D).

6. The method of any of the preceding claims wherein said software application is further configured to use current digital assets, and wherein said running said application in (B) and (D) uses said current digital assets, the method further comprising: in response to an instruction to modify said current digital assets, replacing at least some of said current digital assets with one or more other digital assets to form modified current digital assets and then running said application using said modified current digital assets.

7. The method of claim 6 wherein the instruction to modify said current digital assets is the same as the instruction to modify said current configuration values for said application.

8. The method of claim 6 wherein the instruction to modify said current digital assets is the distinct from the instruction to modify said current configuration values for said application.

9. The method of any one of claims 6-8 wherein the one or more other digital assets are specified by one or more URIs or URLs and wherein the method further requires: obtaining the one or more other digital assets from one or more locations specified by the one or more URIs or URLs.

10. The method of any of the preceding claims wherein the instruction to modify the current configuration values is received from a source external to the computer device.

11. The method of any of claims 1-9 wherein the instruction to modify the current configuration values is received from a source on the computer device.

12. The method of claim 11 wherein the source on the computer device is selected from:

another application running on the computer device;

an operating system running on the computer device;

the software application running on the computer device.

13. The method of any of the preceding claims further comprising:

providing a configuration loader mechanism.

14. The method of claim 13 wherein the configuration loader mechanism runs on the computer device.

15. The method of claim 14 wherein the configuration loader mechanism is implemented, at least in part, as a software library linkable to said software application.

16. A computer- implemented method, implemented by software in conjunction with hardware, said method comprising:

(A) providing a first set of configuration values to an executing software application running on a computer device, said software application having been configured to use current configuration values for at least some aspects of operation of said software application, wherein said first set of configuration values are provided to said software application for use as said current configuration values;

(B) in response an instruction, replacing at least some of said current configuration values with a second set of configuration to form modified current configuration values; and then

(C) providing said modified current configuration values to said executing software application running on said computer device, after which said executing software application runs on the computer device with said modified current configuration values as said current configuration values for said application.

17. The method of claim 16 wherein said software application is further configured to use at least one current digital asset while executing, the method further comprising:

(D) in response to an instruction to modify said at least one current digital asset, replacing at least some of said at least one current digital asset with one or more other digital assets to form modified current digital assets, after which said executing software application runs on said computer device using said modified current digital assets as said current digital assets.

18. The method of claim 17 wherein instruction to modify said at least one current digital asset is the same as the instruction in (B).

19. The method of claim 16 wherein the acts (A), (B), and (C) are implemented, at least in part, by a configuration loader mechanism running on said computer device.

20. The method of any one of claims 17 to 19 wherein act (D) is implemented, at least in part, by said configuration loader mechanism running on said computer device.

21. The method of any one of claims 19 and 20 wherein the configuration loader mechanism is implemented, at least in part, as a software library linkable to said software application.

22. The method of any one of claims 16-21 wherein the instruction is received from a source external to the computer device.

23. The method of any one of claims 16-22 wherein the instruction is received from a source on the computer device.

24. The method of claim 23 wherein the source on the computer device is selected from:

another application running on the computer device;

an operating system running on the computer device;

the software application running on the computer device.

25. The method of claim 23 wherein the instruction is received from the software application and wherein the instruction was generated by the software application in response to a key sequence or menu selection within the software application.

26. The method of claim 23 wherein the instruction is received from the software application and wherein the instruction was generated automatically by the software application in response to a change in an aspect on the software application.

27. The method of claim 23 wherein the instruction is received from the software application and wherein the instruction was generated automatically by the software application in response to a change in an aspect of the computer device.

28. The method of claim 27 wherein the change in the aspect corresponds to a change in a physical orientation of the computer device.

29. The method of claim 23 wherein the instruction is received from the operating system running on the computer device and wherein the instruction was generated by the operating system in response to a change in the device.

30. The method of any one of claim 16-29 further comprising: repeating acts (A) to (C).

31. The method of any one of claims 17-30 further comprising repeating act (D).

32. A device comprising hardware, including a processor and a memory, the device being programmed to perform the method of any one of claims 1-31.

33. The device of claim 32 wherein the device is a device selected from: a smartphone, a tablet device, a computer device, a set-top box, and a television.

34. A tangible computer-readable storage medium comprising instructions for execution on a device, wherein the instructions, when executed, perform acts of a method of any one of claims 1-31.

35. The tangible computer-readable storage medium of claim 34 wherein the storage medium is non-transitory.

36. The methods, devices, and systems disclosed herein.

Description:
METHODS, FRAMEWORKS AND DEVICES SUPPORTING DESIGNER-DEVELOPER COLLABORATION AND RAPID SOFTWARE APPLICATION DESIGN ITERATION

BACKGROUND OF THE INVENTION

COPYRIGHT STATEMENT

[0001] This patent document contains material subject to copyright protection. The copyright owner has no objection to the reproduction of this patent document or any related materials in the files of the United States Patent and Trademark Office, but otherwise reserves all copyrights whatsoever.

FIELD OF THE INVENTION

[0002] This invention relates to a framework for software application design and configuration, and, more particularly, to a unified framework supporting designer-developer collaboration and rapid software application design iteration.

BRIEF DESCRIPTION OF THE DRAWINGS

[0003] Other objects, features, and characteristics of the present invention as well as the methods of operation and functions of the related elements of structure, and the combination of parts and economies of manufacture, will become more apparent upon consideration of the following description and the appended claims with reference to the accompanying drawings, all of which form a part of this specification. None of the drawings are to scale unless specifically stated otherwise.

[0004] FIG. 1 shows an overview of a unified framework supporting designer- developer collaboration and rapid design iteration in accordance with embodiments hereof;

[0005] FIG. 2 shows an overview of another unified framework supporting designer- developer collaboration and rapid design iteration in accordance with embodiments hereof;

[0006] FIG. 3 shows an overview of another unified framework supporting designer- developer collaboration and rapid design iteration in accordance with embodiments hereof;

[0007] FIGS. 4A - 4B are flowcharts depict operation of the exemplary frameworks of

FIGS. 1-3, in accordance with embodiments hereof; and

[0008] FIG. 5 depicts aspects of computing and computer devices in accordance with embodiments. DETAILED DESCRIPTION OF THE PRESENTLY PREFERRED EXEMPLARY EMBODIMENTS GLOSSARY AND ABBREVIATIONS

[0009] As used herein, unless used otherwise, the following terms or abbreviations have the following meanings:

[0010] GUI means graphical user interface (UI);

[0011] JSON means JavaScript Object Notation;

[0012] OS means operating system;

[0013] UI means user interface;

[0014] URI means Uniform Resource Identifier;

[0015] URL means Uniform Resource Locator;

[0016] XML means Extensible markup language; and

[0017] YAML is an acronym for "Yet Another Markup Language" or a recursive acronym for "YAML Ain't Markup Language".

BACKGROUND AND OVERVIEW

[0018] Modern user-facing software engineering is no longer bound by technical limitations. While good software engineering remains important, the increasing power of devices, combined with the evolution of languages and developer tools, means that digital products increasingly compete on their design. However, implementing good design requires less engineering sophistication than it did just a few years ago.

[0019] Digital product design components are often related to behavior and look and feel, for example, visual appearance - typography, layout - of individual application screens; gesture positions, thresholds and modifiers; animation parameters (timings, curves) between different user interface states; elements of sound; and interface text.

[0020] Broadly, all of these components may be expressed in product code in one of two ways, namely:

1. Configuration - positions and dimensions, font specifications, colors,

timings, curves, text strings, etc.; and

2. Assets - digital/binary assets such as images, fonts, sounds, etc.

[0021] Despite advances in developer tools, product designers and engineers continue to work in two fundamentally different worlds, and current efforts to bridge these worlds have not been successful. [0022] Typically, both configuration and binary assets continue to be defined in product code, and changing any configuration or binary asset requires a direct modification of the code and a consequent triggering of a new product build.

[0023] Often times the changes made to a working product code do not reflect back to original design files either, leaving all engaged parties out of sync.

[0024] While tech- savvy designers can learn how to modify values directly in product code, this is a frustrating process to them, as the values are often spread all over product code and difficult to find. Furthermore, this approach may be error prone, as designers may not be aware of all consequences of changes to a complex software program. Furthermore, changes to product code should be followed by testing of that code, and setting up a product build environment for actual testing is non-trivial.

[0025] Similarly, some engineers are capable of using design tools to pick up and implement designs and layouts, but many of them lack the training, rigor or visual accuracy to do this to the designers' satisfaction.

[0026] Fundamentally, design and engineering continue to be two different disciplines, yet modern product development expects them to be fully integrated.

[0027] Over the years design and engineering have evolved into equally important parts of building and shipping digital products. During that time, they have both established their methods that do not require fundamental changes.

[0028] Engineering is specialized, and engineering product code and producing builds continues to be a specialized discipline that requires intimate engineering knowledge of the tooling and development platform. It is not possible or necessary to have designers, lacking the engineering insight, directly modify product code.

[0029] Producing and publishing builds may be a heavyweight process that is not justified just because of changing one configuration value.

[0030] It is highly valuable to designers to iterate by making frequent modifications, and see the results of these changes in real time. Design is an aesthetic -based process, and it is often not possible to determine in advance what the right value, layout or timing for a design feature may be. Although prototyping methods exist, the best design results are achieved when iterating in the context of an actual product, with real data, devices and other environment- network or user's ambience, for example.

[0031] Today's teams are distributed. People work together on products while at different locations and time zones, and they collaborate from these remote and diverse locations, e.g., over the Internet. Teams still want to see the results of each other's changes applied in real time. And teams may be demoralized or discouraged to have each change go through a lengthy approval and publishing process.

[0032] Both design and engineering tools are healthy ecosystems with specialized products that have had decades of development by big and small companies. Many designers and developers have strong personal preferences and customizations of their tools. It is not possible or necessary to replace these tools.

[0033] Today' s software and hardware platforms are highly moving targets. Products need to run on desktop and laptop computers, mobile phones, tablet devices, and other future form factors (e.g., TVs, kiosks, cars, etc.). It is efficient to have similar tooling to configure the designs on all platforms.

[0034] There are external factors dictated by the environment, such as licensing requirements for fonts or other assets included in the product, that dictate that these assets must be encrypted. Implementing the security and encryption requires specialized knowledge and may be an additional bottleneck to rapid iteration.

Overview - structure

[0035] FIG. 1 shows an overview of an exemplary framework 100 for designer- developer collaboration and rapid design iteration according to embodiments hereof.

[0036] As shown in FIG. 1, an application 102 (typically a software application) is designed and engineered to run on a device (not shown). The device may be any kind of computing device, including mobile devices (e.g., phones, tablets, etc.), computers (e.g. , desktops, laptops, etc.), and the like. Computing devices are described in greater detail below.

[0037] The application preferably includes one or more application objects 104, being mechanisms (e.g., software code) that implement aspects of the application. An application 102 may also include pre-set or current configuration values 106 and/or asset(s) 107 that are used by the application object(s) 104. An application 102 may also include a configuration load mechanism 108 (e.g., a loader library) that may be used by the application 102 to load or set configuration values in the application object(s) 104.

[0038] As used herein, the term "mechanism" refers to any device(s), process(es), service(s), or combination thereof. A mechanism may be implemented in hardware, software, firmware, using a special-purpose device, or any combination thereof. A mechanism may be integrated into a single device or it may be distributed over multiple devices. The various components of a mechanism may be co-located or distributed. The mechanism may be formed from other mechanisms. In general, as used herein, the term "mechanism" may thus be considered to be shorthand for the term device(s) and/or process(es) and/or service(s). [0039] Referring again to FIG. 1, the exemplary framework 100 may include a configuration version control system 110 that may be used to store versioned configuration values 112. Preferably, and by default, an engineer uses the most recent version of the versioned configuration values 112 as the pre-set configuration value(s) 106 in the application.

[0040] A designer may inspect and modify one or more values in the versioned configuration values 112, and may publish new or modified configuration values (as published configuration values 114) to the application in order to replace the pre-set configuration values 106. Publication of configuration values may be initiated by a gesture or command or the like given to the application 102 and requiring it to load new configuration values. Such a gesture or command or the like may cause the loader mechanism 108 to obtain the published configuration values 114. In addition, or instead, the configuration loader mechanism 108 may get an instruction from the application itself and/or from some other application on the device (e.g., the OS) to look for and load a new configuration. The loader mechanism 108 may be provided with one or more addresses or locations from which to obtain the published configuration values. In some implementation the address or location may be specified by one or more URIs and/or URLs, e.g., public URIs or URLs.

[0041] The configuration values preferably contain key- value pairs and may be stored and or provided in text form or in some other digital/binary encoded form. The key- value configuration pairs may be stored in a file in a format such as JSON or YAML or the like. The published configuration values may be encrypted or otherwise encoded to prevent exposing implementation details of the application 102, and further, to prevent unauthorized tampering with the settings of the application. The loader mechanism 108 may use or require

authentication in order to accept modified configuration values.

[0042] The assets may be versioned (in version control system 110) using any known versioning tool, e.g., Git or Github or the like. Those of ordinary skill in the art will realize and appreciate, upon reading this description, that the version control system 110 may be a cloud- based system, accessible via a network (not shown) such as the Internet.

[0043] FIG. 2 shows an overview of another unified framework 200 supporting designer-developer collaboration and rapid design iteration in accordance with embodiments hereof. As shown in FIG. 2, in the framework 200 the version control system 210 includes versioned digital assets 116, and the digital asset(s) 107 used by the application 102 may be preset digital assets 118 (e.g., taken from the versioned digital assets 116) or they may be published assets 120. As with the configuration values, assets may be published by provided to the application 102 via a gesture or command to the application 102 requiring it to load new digital assets. Such a gesture or command or the like may cause the loader mechanism 108 to obtain the published asset values 120. In addition, or instead, the configuration loader mechanism 108 may get an instruction from the application itself and/or from some other application on the device (e.g., the OS) to look for and load a new or different asset values. The loader mechanism 108 may be provided with one or more addresses or locations from which to obtain the published digital asset(s). In some implementation the address or location may be specified by one or more URIs and/or URLs, e.g., public URIs or URLs.

[0044] The digital assets may be versioned (in version control system 110) using any known versioning tool, e.g., Git or Github or the like. Those of ordinary skill in the art will realize and appreciate, upon reading this description, that the version control system 210 may be a cloud-based system, accessible, e.g., via a network (not shown) such as the Internet.

[0045] FIG. 3 shows an overview of another unified framework 300 supporting designer-developer collaboration and rapid design iteration in accordance with embodiments hereof. In the framework 300 a design tool (mechanism) 302 is provided as a central point of collaboration, rather than a textual file. Users, e.g., designers, may use the design tool 302 for more direct manipulation of the configuration and/or assets and for immediate feedback. The design tool 302 may be used to drill down to any part of the application 102 that is currently presented, and the user may thereby discover what configuration keys and values are relevant for that context. The user/designer may use the design tool 302 to review/evaluate the effects of changes to the configuration values, with the tool preferably providing the user with a representation 306 of the application 102, preferably in real time. The concept of "real time" is discussed in greater detail below.

[0046] When configuration values are modified using the design tool 302, the results are preferably pushed immediately to device and the relevant portions of the application - that is, the portions of the application affected by the changes (e.g., the application's UI) - are reloaded, without having to do an extra publishing process.

[0047] In other embodiments hereof the design tool(s) 302 may also be used to review and load different assets in the application and to replace the current version of the assets.

OPERATION

[0048] FIGS. 4A - 4B are flowcharts depicting operation of the exemplary frameworks of FIGS. 1-3, in accordance with embodiments hereof.

[0049] As shown in the flowchart in FIG. 4A, the application 102, using the

configuration load mechanism 108 (e.g., the loader library), loads the preset or current configuration (at S400) and then begins its operation. During its operation the application monitors (at S402) for a command or instruction to modify or update the configuration. As noted above, this instruction may come in the form of a key sequence or gesture or the like, it may come from the application itself, or it may come from another application (e.g., the OS) running on the device. Preferably the command or instruction is hidden from ordinary users and is only available to developers. In some implementations the application may have a developer mode in which the instruction to update the configuration is provided in a developer menu or the like. As noted addition to an external command or instruction to modify or update the configuration, an update request may be made by the OS of the computer device and/or by an application running on the device. For example, a program running on the device (including the OS) may determine that the device has changed orientation (e.g., from vertical orientation to a horizontal or landscape orientation), and may use different values for the UI under such conditions. As another example, alone or in addition the above example, the UI of a computer system may use different values for various features depending on external conditions (e.g., ambient light, external noise, etc.). As yet another example, alone or in addition the above examples, the UI of a computer system may use different values for various features depending on what other applications are running on the device. For example, the UI of an OS may use different sounds or sound durations depending on whether there is a music application running at the time on the device. It should be appreciated that these examples are not limiting and that different and/or other conditions may trigger a configuration update request. It should also be appreciated that not every configuration update will actually change any or all values. For example, it may be the case that a new configuration may have some or all of the same values (for the key- value pairs) as the current configuration.

[0050] If no update request is detected (at S404), then operation of the application continues and monitoring for an update instruction resumes. If an update request is detected (at S404) then the configuration is updated (at S406) after which operation of the application continues and monitoring for an update instruction resumes.

[0051] As shown in the flowchart in FIG. 4B, the application 102, using the

configuration load mechanism 108, loads the preset or current configuration (at S410). The application then monitors (at S412) for a command or instruction to modify or update the configuration or the assets. As above, this instruction may come in the form of a key sequence or gesture or the like or it may be included in a GUI menu or it may come from an instruction in the application or it may come from an instruction from another program (e.g., the OS) running on the device. In some implementations the command or instruction to update the configuration may differ from the command to update the assets, in other cases the commands may be combined. If no configuration and/or asset update request is detected (at S414), then operation of the application continues and monitoring resumes. If an update request is detected (at S414) then the configuration and/or assets are updated (at S416) after which operation of the application continues and monitoring resumes.

[0052] In some embodiments the monitoring functionality (S402 in FIG. 4A and S412 in FIG. 4B) may be implemented, at least in part, within the configuration load mechanism (e.g., the loader library) 108. In such cases the application may link to and invoke the loader library which will then take on the responsibility for determining when / whether configuration and/or asset values need to be updated.

[0053] Although shown in two flowcharts, those of ordinary skill in the art will realize and appreciate, upon reading this description, that the functionality of updating configuration values (shown in FIG. 4A) may be combined with the functionality of updating assets (shown in FIG. 4B).

[0054] When used during product design, once the user/designer is satisfied with the assets and/or configuration changes, the versioned assets and/or configuration values may be changed in the version control system.

[0055] It should be appreciated that not every implementation of the system will provide all of these features, and not every feature need be provided to all users of a particular system. In addition, a system may provide additional and/or different features.

[0056] For example, some embodiments of the framework may provide an online dashboard, providing an overview of recent changes to the configuration with possible social and workflow features (commenting, approval etc.).

[0057] As another example, the design tool may be used for scripting product behavior.

A lot of the product behavior may thereby be abstracted away from the application code into a higher-level, possibly cross platform logic. This logic could be controlled with a scripting feature in the tool.

[0058] In some implementations the design tool may plug in to or connection with other developer tools (e.g., Xcode, Android or other developer or designer tools such Sketch, Illustrator or the like).

[0059] The described framework provides a lightweight glue layer that helps to bind the engineering and design worlds, leaving each with their freedom. As a result neither designers nor engineers have to change significantly their tooling or work practices and can focus on communication and collaboration. [0060] For engineers the framework provides a service (e.g., a cloud-based service) for hosting and versioning application configurations, and a library that provides an easy interface to the service and can be used in both online (directly talking to the service) and offline (using a pre-set set of values and assets) configurations.

[0061] The configuration loader (library) may provide (1) a configuration store, and (2) a binary asset store to an application that uses it. Preferably the configuration store is a key- value style. Both of these stores are easy to use in situations where previously numbers or hardcoded binary assets would be used.

[0062] By including the configuration loader (library) and configuring their application objects, engineers can easily expose any object for rapid design iteration and visual polishing.

[0063] For designers the framework provides an easy way to change configuration values and binary assets affecting an application. The results of these changes may be seen in real time in the context of the actual application.

[0064] For ideation, prototyping and creative design purposes, the framework may provide design software with a visual interface. A designer will be able to see various design features, e.g., color, type, and composition, and try out gestures.

[0065] For delivery and refinement purposes, the software may have precision-oriented controls. A designer will be able to set pixel-precise values, timings and other parameters of the product.

[0066] There are several opportunities to operate some or all aspects of the above frameworks as viable products and businesses, and these are contemplated as inventions herein.

[0067] For example, the configuration loaders (libraries) deal with connecting the application code to keys, values and binary assets. Each supported client platform will need a new configuration loader (library) implementation. In some implementations/models, the system may be used just using the configuration loader (library) and manual file editing. In other implementations/models, the configuration loader (library) will necessarily require connecting to our online system and can be managed only with the design tool.

Example

[0068] By way of example, the UI for a computer program may use a quality value displaying images. In such a case the UI software application may rely on configuration values for this image quality. The UI software application may thus have a key- value pair

<image_quality, value> which it uses. This value can be changed during execution of the software via the configuration mechanism. [0069] It should be appreciated that the key-value pairs provided by the configuration mechanism must correspond to keys used by the application software, and the values should be values that are usable by the application software. Preferably the configuration mechanism does not check the keys or the values to determine in they are used or usable by the application software, and any integrity checking and the like is performed, if at all, by the application software.

[0070] Those of ordinary skill in the art will realize and appreciate, upon reading this description, that the framework described, including the loader mechanism, provides a way for programs to change configuration values and/or assets while running. Furthermore, these changes can be made in a distributed manner, e.g., over a network, or locally. For example, the loader mechanism may obtain configuration information from a distributed source (e.g., a "cloud" source) or from a local source. Changes to a programs configuration and/or assets can be pushed to a program by a developer or other entity (e.g., a software company) and can be used to affect ongoing operation of a running program. Thus, in many cases, there may be no need to terminate an executing program in order to modify its configuration or the assets it is using.

[0071] In some cases loader mechanism may store multiple configurations locally (e.g., on the computer device running an application). In this way, when the application requests an updated configuration (e.g., because its external environment has changed - e.g., a mobile device has gone from landscape to portrait orientation), then the loader mechanism may obtain the needed configuration from a local cache.

COMPUTING

[0072] The services, mechanisms, operations and acts shown and described above are implemented, at least in part, by software running on one or more computers or computer systems or devices. It should be appreciated that each user device is, or comprises, a computer system.

[0073] Programs that implement such methods (as well as other types of data) may be stored and transmitted using a variety of media (e.g. , computer readable media) in a number of manners. Hard- wired circuitry or custom hardware may be used in place of, or in combination with, some or all of the software instructions that can implement the processes of various embodiments. Thus, various combinations of hardware and software may be used instead of software only.

[0074] One of ordinary skill in the art will readily appreciate and understand, upon reading this description, that the various processes described herein may be implemented by, e.g. , appropriately programmed general purpose computers, special purpose computers and computing devices. One or more such computers or computing devices may be referred to as a computer system.

[0075] FIG. 5 is a schematic diagram of a computer system 500 upon which

embodiments of the present disclosure may be implemented and carried out.

[0076] According to the present example, the computer system 500 includes a bus 502

(i.e. , interconnect), one or more processors 504, one or more communications ports 514, a main memory 506, removable storage media 510, read-only memory 508, and a mass storage 512. Communication port(s) 514 may be connected to one or more networks by way of which the computer system 500 may receive and/or transmit data.

[0077] As used herein, a "processor" means one or more microprocessors, central processing units (CPUs), computing devices, microcontrollers, digital signal processors, or like devices or any combination thereof, regardless of their architecture. An apparatus that performs a process can include, e.g. , a processor and those devices such as input devices and output devices that are appropriate to perform the process.

[0078] Processor(s) 504 can be (or include) any known processor, such as, but not limited to, an Intel® Itanium® or Itanium 2® processor(s), AMD® Opteron® or Athlon MP® processor(s), or Motorola® lines of processors, and the like. Communications port(s) 514 can be any of an RS-232 port for use with a modem based dial-up connection, a 10/100 Ethernet port, a Gigabit port using copper or fiber, or a USB port, and the like. Communications port(s) 514 may be chosen depending on a network such as a Local Area Network (LAN), a Wide Area Network (WAN), a CDN, or any network to which the computer system 500 connects. The computer system 500 may be in communication with peripheral devices (e.g., display screen 516, input device(s) 518) via Input / Output (I/O) port 520. Some or all of the peripheral devices may be integrated into the computer system 500, and the input device(s) 518 may be integrated into the display screen 516 (e.g., in the case of a touch screen).

[0079] Main memory 506 can be Random Access Memory (RAM), or any other dynamic storage device(s) commonly known in the art. Read-only memory 508 can be any static storage device(s) such as Programmable Read-Only Memory (PROM) chips for storing static information such as instructions for processor(s) 504. Mass storage 512 can be used to store information and instructions. For example, hard disks such as the Adaptec® family of Small Computer Serial Interface (SCSI) drives, an optical disc, an array of disks such as Redundant Array of Independent Disks (RAID), such as the Adaptec® family of RAID drives, or any other mass storage devices may be used. [0080] Bus 502 communicatively couples processor(s) 504 with the other memory, storage and communications blocks. Bus 502 can be a PCI / PCI-X, SCSI, a Universal Serial Bus (USB) based system bus (or other) depending on the storage devices used, and the like. Removable storage media 510 can be any kind of external hard-drives, floppy drives,

IOMEGA® Zip Drives, Compact Disc - Read Only Memory (CD-ROM), Compact Disc - Re-Writable (CD-RW), Digital Versatile Disk - Read Only Memory (DVD-ROM), etc.

[0081] Embodiments herein may be provided as one or more computer program products, which may include a machine-readable medium having stored thereon instructions, which may be used to program a computer (or other electronic devices) to perform a process. As used herein, the term "machine-readable medium" refers to any medium, a plurality of the same, or a combination of different media, which participate in providing data (e.g. , instructions, data structures) which may be read by a computer, a processor or a like device. Such a medium may take many forms, including but not limited to, non- volatile media, volatile media, and transmission media. Non- volatile media include, for example, optical or magnetic disks and other persistent memory. Volatile media include dynamic random access memory, which typically constitutes the main memory of the computer. Transmission media include coaxial cables, copper wire and fiber optics, including the wires that comprise a system bus coupled to the processor. Transmission media may include or convey acoustic waves, light waves and electromagnetic emissions, such as those generated during radio frequency (RF) and infrared (IR) data communications.

[0082] The machine -readable medium may include, but is not limited to, floppy diskettes, optical discs, CD-ROMs, magneto-optical disks, ROMs, RAMs, erasable

programmable read-only memories (EPROMs), electrically erasable programmable read-only memories (EEPROMs), magnetic or optical cards, flash memory, or other type of

media/machine-readable medium suitable for storing electronic instructions. Moreover, embodiments herein may also be downloaded as a computer program product, wherein the program may be transferred from a remote computer to a requesting computer by way of data signals embodied in a carrier wave or other propagation medium via a communication link (e.g. , modem or network connection).

[0083] Various forms of computer readable media may be involved in carrying data

(e.g. sequences of instructions) to a processor. For example, data may be (i) delivered from RAM to a processor; (ii) carried over a wireless transmission medium; (iii) formatted and/or transmitted according to numerous formats, standards or protocols; and/or (iv) encrypted in any of a variety of ways well known in the art. [0084] A computer-readable medium can store (in any appropriate format) those program elements that are appropriate to perform the methods.

[0085] As shown, main memory 506 is encoded with application(s) 522 that support(s) the functionality as discussed herein (an application 522 may be an application that provides some or all of the functionality of one or more of the mechanisms described herein).

Application(s) 522 (and/or other resources as described herein) can be embodied as software code such as data and/or logic instructions (e.g. , code stored in the memory or on another computer readable medium such as a disk) that supports processing functionality according to different embodiments described herein.

[0086] For example, application(s) 522 may include application 102 and configuration loader mechanism (library 108) in FIGS. 1-3 and/or design tool(s) 302 in FIG. 3.

[0087] During operation of one embodiment, processor(s) 504 accesses main memory

506 via the use of bus 502 in order to launch, run, execute, interpret or otherwise perform the logic instructions of the application(s) 522. Execution of application(s) 522 produces processing functionality of the service(s) or mechanism(s) related to the application(s). In other words, the process(es) 524 represents one or more portions of the application(s) 522 performing within or upon the processor(s) 504 in the computer system 500.

[0088] For example, processes(s) 524 may include processes corresponding to application 102 and configuration loader mechanism (library 108) in FIGS. 1-3 and/or to design tool(s) 302 in FIG. 3.

[0089] It should be noted that, in addition to the process(es) 524 that carries(carry) out operations as discussed herein, other embodiments herein include the application 522 itself (i.e. , the un-executed or non-performing logic instructions and/or data). The application 522 may be stored on a computer readable medium (e.g., a repository) such as a disk or in an optical medium. According to other embodiments, the application 522 can also be stored in a memory type system such as in firmware, read only memory (ROM), or, as in this example, as executable code within the main memory 506 (e.g., within Random Access Memory or RAM). For example, application(s) 522 may also be stored in removable storage media 510, read-only memory 508, and/or mass storage device 512.

[0090] Those skilled in the art will understand that the computer system 500 can include other processes and/or software and hardware components, such as an operating system that controls allocation and use of hardware resources.

[0091] As discussed herein, embodiments of the present invention include various steps or operations. A variety of these steps may be performed by hardware components or may be embodied in machine-executable instructions, which may be used to cause a general-purpose or special-purpose processor programmed with the instructions to perform the operations.

Alternatively, the steps may be performed by a combination of hardware, software, and/or firmware. The term "module" refers to a self-contained functional component, which can include hardware, software, firmware or any combination thereof.

[0092] One of ordinary skill in the art will readily appreciate and understand, upon reading this description, that embodiments of an apparatus may include a computer/computing device operable to perform some (but not necessarily all) of the described process.

[0093] Embodiments of a computer-readable medium storing a program or data structure include a computer-readable medium storing a program that, when executed, can cause a processor to perform some (but not necessarily all) of the described process.

[0094] Where a process is described herein, those of ordinary skill in the art will appreciate that the process may operate without any user intervention. In another embodiment, the process includes some human intervention (e.g. , a step is performed by or with the assistance of a human).

Real time

[0095] Those of ordinary skill in the art will realize and understand, upon reading this description, that, as used herein, the term "real time" means near real time or sufficiently real time. It should be appreciated that there are inherent delays in network-based communication (e.g. , based on network traffic and distances), and these delays may cause delays in data reaching various components. Inherent delays in the system do not change the real-time nature of the data. In some cases, the term "real-time data" may refer to data obtained in sufficient time to make the data useful for its intended purpose.

[0096] Although the term "real time" may be used here, it should be appreciated that the system is not limited by this term or by how much time is actually taken. In some cases, real time computation may refer to an online computation, i.e. , a computation that produces its answer(s) as data arrive, and generally keeps up with continuously arriving data. The term "online" computation is compared to an "offline" or "batch" computation.

[0097] As used in this description, the term "portion" means some or all. So, for example, "A portion of X" may include some of "X" or all of "X". In the context of a conversation, the term "portion" means some or all of the conversation.

[0098] As used herein, including in the claims, the phrase "at least some" means "one or more," and includes the case of only one. Thus, e.g. , the phrase "at least some ABCs" means "one or more ABCs", and includes the case of only one ABC. [0099] As used herein, including in the claims, the phrase "based on" means "based in part on" or "based, at least in part, on," and is not exclusive. Thus, e.g., the phrase "based on factor X" means "based in part on factor X" or "based, at least in part, on factor X." Unless specifically stated by use of the word "only", the phrase "based on X" does not mean "based only on X."

[00100] As used herein, including in the claims, the phrase "using" means "using at least," and is not exclusive. Thus, e.g., the phrase "using X" means "using at least X." Unless specifically stated by use of the word "only", the phrase "using X" does not mean "using only X."

[00101] In general, as used herein, including in the claims, unless the word "only" is specifically used in a phrase, it should not be read into that phrase.

[00102] As used herein, including in the claims, the phrase "distinct" means "at least partially distinct." Unless specifically stated, distinct does not mean fully distinct. Thus, e.g., the phrase, "X is distinct from Y" means that "X is at least partially distinct from Y," and does not mean that "X is fully distinct from Y." Thus, as used herein, including in the claims, the phrase "X is distinct from Y" means that X differs from Y in at least some way.

[00103] As used herein, including in the claims, a list may include only one item, and, unless otherwise stated, a list of multiple items need not be ordered in any particular manner. A list may include duplicate items. For example, as used herein, the phrase "a list of XYZs" may include one or more "XYZs".

[00104] It should be appreciated that the words "first" and "second" in the description and claims are used to distinguish or identify, and not to show a serial or numerical limitation. Similarly, the use of letter or numerical labels (such as "(a)", "(b)", and the like) are used to help distinguish and / or identify, and not to show any serial or numerical limitation or ordering.

[00105] No ordering is implied by any of the labeled boxes in any of the flow diagrams unless specifically shown and stated. When disconnected boxes are shown in a diagram the activities associated with those boxes may be performed in any order, including fully or partially in parallel.

[00106] While the invention has been described in connection with what is presently considered to be the most practical and preferred embodiments, it is to be understood that the invention is not to be limited to the disclosed embodiments, but on the contrary, is intended to cover various modifications and equivalent arrangements included within the spirit and scope of the appended claims.