text:
|Publication number
|Publication type
|Application number
|Publication date
|17 Feb 2009
|Filing date
|24 Oct 2003
|Priority date
|24 Oct 2003
|Fee status
|Also published as
|Publication number
|Kerem B. Karatal, Michael G. Sheldon, Marc M. Miller, Chris J. Guzak, Timothy P. McKee
|Original Assignee
|Microsoft Corporation
|Export Citation
|BiBTeX, EndNote, RefMan
|Patent Citations (13), Non-Patent Citations (5), Referenced by (34), Classifications (14), Legal Events (6)
|External Links: USPTO, USPTO Assignment, Espacenet
This invention relates to software and to development of such software. More particularly, this invention relates to a programming interface that facilitates use of a software platform by application programs and computer hardware.
Accompanying this specification is a set of three compact discs that stores a Software Development Kit (SDK) for the Microsoft� Windows� Code-Named "Longhorn" operating system. The SDK contains documentation for the Microsoft� Windows� Code-Named "Longhorn" operating system. Duplicate copies of each of these three compact discs also accompany this specification.
The first compact disc in the set of three compact discs (CD 1 of 3) includes a file folder named "lhsdk" that was created on Oct. 22, 2003; it is 586 Mbytes in size, contains 9,692 sub-folders, and contains 44,292 sub-files. The second compact disc in the set of three compact discs (CD 2 of 3) includes a file folder named "ns" that was created on Oct. 22, 2003; it is 605 Mbytes in size, contains 12,628 sub-folders, and contains 44,934 sub-files. The third compact disc in the set of three compact discs (CD 3 of 3) includes a file folder named "ns" that was created on Oct. 22, 2003; it is 575 Mbytes in size, contains 9,881 sub-folders, and contains 43,630 sub-files. The files on each of these three compact discs can be executed on a Windows�-based computing device (e.g., IBM-PC, or equivalent) that executes a Windows�-brand operating system (e.g., Windows� NT, Windows� 98, Windows� 2000, Windows� XP, etc.). The files on each compact disc in this set of three compact discs are hereby incorporated by reference.
Each compact disc in the set of three compact discs itself is a CD-R, and conforms to the ISO 9660 standard. The contents of each compact disc in the set of three compact discs is in compliance with the American Standard Code for Information Interchange (ASCII).
Very early on, computer software came to be categorized as "operating system" software or "application" software. Broadly speaking, an application is software meant to perform a specific task for the computer user such as solving a mathematical equation or supporting word processing. The operating system is the software that manages and controls the computer hardware. The goal of the operating system is to make the computer resources available to the application programmer while at the same time, hiding the complexity necessary to actually control the hardware.
The operating system makes the resources available via functions that are collectively known as the Application Program Interface or API. The term API is also used in reference to a single one of these functions. The functions are often grouped in terms of what resource or service they provide to the application programmer. Application software requests resources by calling individual API functions. API functions also serve as the means by which messages and information provided by the operating system are relayed back to the application software.
In addition to changes in hardware, another factor driving the evolution of operating system software has been the desire to simplify and speed application software development. Application software development can be a daunting task, sometimes requiring years of developer time to create a sophisticated program with millions of lines of code. For a popular operating system such as various versions of the Microsoft Windows� operating system, application software developers write thousands of different applications each year that utilize the operating system. A coherent and usable operating system base is required to support so many diverse application developers.
Often, development of application software can be made simpler by making the operating system more complex. That is, if a function may be useful to several different application programs, it may be better to write it once for inclusion in the operating system, than requiring dozens of software developers to write it dozens of times for inclusion in dozens of different applications. In this manner, if the operating system supports a wide range of common functionality required by a number of applications, significant savings in applications software development costs and time can be achieved.
Regardless of where the line between operating system and application software is drawn, it is clear that for a useful operating system, the API between the operating system and the computer hardware and application software is as important as efficient internal operation of the operating system itself.
Over the past few years, the universal adoption of the Internet, and networking technology in general, has changed the landscape for computer software developers. Traditionally, software developers focused on single-site software applications for standalone desktop computers, or LAN-based computers that were connected to a limited number of other computers via a local area network (LAN). Such software applications were typically referred to as "shrink wrapped" products because the software was marketed and sold in a shrink-wrapped package. The applications utilized well-defined APIs to access the underlying operating system of the computer.
As the Internet evolved and gained widespread acceptance, the industry began to recognize the power of hosting applications at various sites on the World Wide Web (or simply the "Web"). In the networked world, clients from anywhere could submit requests to server-based applications hosted at diverse locations and receive responses back in fractions of a second. These Web applications, however, were typically developed using the same operating system platform that was originally developed for standalone computing machines or locally networked computers. Unfortunately, in some instances, these applications do not adequately transfer to the distributed computing regime. The underlying platform was simply not constructed with the idea of supporting limitless numbers of interconnected computers.
To accommodate the shift to the distributed computing environment being ushered in by the Internet, Microsoft Corporation developed a network software platform known as the ".NET" Framework (read as "Dot Net"). Microsoft� .NET is software for connecting people, information, systems, and devices. The platform allows developers to create Web services that will execute over the Internet. This dynamic shift was accompanied by a set of API functions for Microsoft's .NET™ Framework.
As use of the .NET™ Framework has become increasingly common, ways to increase the efficiency and/or performance of the platform have been identified. The inventors have developed a unique set of programming interface functions to allow for such increased efficiency and/or performance.
A programming interface for a computer platform is described herein.
In accordance with certain aspects, the programming interface can include one or more of the following groups of services: a first group of services related to re-usable user interface controls, a second group of services related to user interface dialogs and user interface wizards, a third group of services related to extending the user interface functionality, and a fourth group of services related to extending functionality of a desktop of the user interface.
The same numbers are used throughout the drawings to reference like features.
This disclosure addresses a programming interface, such as an application program interface (API), for a network platform upon which developers can build Web applications and services. More particularly, an exemplary API is described for operating systems that make use of a network platform, such as the .NET™ Framework created by Microsoft Corporation. The .NET™ Framework is a software platform for Web services and Web applications implemented in the distributed computing environment. It represents the next generation of Internet computing, using open communication standards to communicate among loosely coupled Web services that are collaborating to perform a particular task.
In the described implementation, the network platform utilizes XML (extensible markup language), an open standard for describing data. XML is managed by the World Wide Web Consortium (W3C). XML is used for defining data elements on a Web page and business-to-business documents. XML uses a similar tag structure as HTML; however, whereas HTML defines how elements are displayed, XML defines what those elements contain. HTML uses predefined tags, but XML allows tags to be defined by the developer of the page. Thus, virtually any data items can be identified, allowing Web pages to function like database records. Through the use of XML and other open protocols, such as Simple Object Access Protocol (SOAP), the network platform allows integration of a wide range of services that can be tailored to the needs of the user. Although the embodiments described herein are described in conjunction with XML and other open standards, such are not required for the operation of the claimed invention. Other equally viable technologies will suffice to implement the inventions described herein.
As used herein, the phrase application program interface or API includes traditional interfaces that employ method or function calls, as well as remote calls (e.g., a proxy, stub relationship) and SOAP/XML invocations.
Exemplary Network Environment
Web services 102 are accessible directly by other services (as represented by communication link 106) or a software application, such as Web application 110 (as represented by communication links 112 and 114). Each Web service 102 is illustrated as including one or more servers that execute software to handle requests for particular services. Such services often maintain databases that store information to be served back to requesters. Web services may be configured to perform any one of a variety of different services. Examples of Web services include login verification, notification, database storage, stock quoting, location directories, mapping, music, electronic wallet, calendar/scheduler, telephone listings, news and information, games, ticketing, and so on. The Web services can be combined with each other and with other applications to build intelligent interactive experiences.
The network environment 100 also includes representative client devices 120(1), 120(2), 120(3), 120(4), . . . , 120(M) that utilize the Web services 102 (as represented by communication link 122) and/or the Web application 110 (as represented by communication links 124, 126, and 128). The clients may communicate with one another using standard protocols as well, as represented by an exemplary XML link 130 between clients 120(3) and 120(4).
The client devices, referenced generally as number 120, can be implemented many different ways. Examples of possible client implementations include, without limitation, portable computers, stationary computers, tablet PCs, televisions/set-top boxes, wireless communication devices, personal digital assistants, gaming consoles, printers, photocopiers, and other smart devices.
The Web application 110 is an application designed to run on the network platform and may utilize the Web services 102 when handling and servicing requests from clients 120. The Web application 110 is composed of one or more software applications 130 that run atop a programming framework 132, which are executing on one or more servers 134 or other computer systems. Note that a portion of Web application 110 may actually reside on one or more of clients 120. Alternatively, Web application 110 may coordinate with other software on clients 120 to actually accomplish its tasks.
The programming framework 132 is the structure that supports the applications and services developed by application developers. It permits multi-language development and seamless integration by supporting multiple languages. It supports open protocols, such as SOAP, and encapsulates the underlying operating system and object model services. The framework provides a robust and secure execution environment for the multiple programming languages and offers secure, integrated class libraries.
The framework 132 is a multi-tiered architecture that includes an application program interface (API) layer 142, a common language runtime (CLR) layer 144, and an operating system/services layer 146. This layered architecture allows updates and modifications to various layers without impacting other portions of the framework. A common language specification (CLS) 140 allows designers of various languages to write code that is able to access underlying library functionality. The specification 140 functions as a contract between language designers and library designers that can be used to promote language interoperability. By adhering to the CLS, libraries written in one language can be directly accessible to code modules written in other languages to achieve seamless integration between code modules written in one language and code modules written in another language. One exemplary detailed implementation of a CLS is described in an ECMA standard created by participants in ECMA TC39/TG3. The reader is directed to the ECMA web site at www.ecma.ch.
The API layer 142 presents groups of functions that the applications 130 can call to access the resources and services provided by layer 146. By exposing the API functions for a network platform, application developers can create Web applications for distributed computing systems that make full use of the network resources and other Web services, without needing to understand the complex interworkings of how those network resources actually operate or are made available. Moreover, the Web applications can be written in any number of programming languages, and translated into an intermediate language supported by the common language runtime 144 and included as part of the common language specification 140. In this way, the API layer 142 can provide methods for a wide and diverse variety of applications.
Additionally, the framework 132 can be configured to support API calls placed by remote applications executing remotely from the servers 134 that host the framework. Representative applications 148(1) and 148(2) residing on clients 120(3) and 120(M), respectively, can use the API functions by making calls directly, or indirectly, to the API layer 142 over the network 104.
The framework may also be implemented at the clients. Client 120(3) represents the situation where a framework 150 is implemented at the client. This framework may be identical to server-based framework 132, or modified for client purposes. Alternatively, the client-based framework may be condensed in the event that the client is a limited or dedicated function device, such as a cellular phone, personal digital assistant, handheld computer, or other communication/computing device.
Developers' Programming Framework
The framework 132 encapsulates the operating system 146(1) (e.g., Windows�-brand operating systems) and object model services 146(2) (e.g., Component Object Model (COM) or Distributed COM). The operating system 146(1) provides conventional functions, such as file management, notification, event handling, user interfaces (e.g., windowing, menus, dialogs, etc.), security, authentication, verification, processes and threads, memory management, and so on. The object model services 146(2) provide interfacing with other objects to perform various tasks. Calls made to the API layer 142 are handed to the common language runtime layer 144 for local execution by the operating system 146(1) and/or object model services 146(2).
The API 142 groups API functions into multiple namespaces. Namespaces essentially define a collection of classes, interfaces, delegates, enumerations, and structures, which are collectively called "types", that provide a specific set of related functionality. A class represents managed heap allocated data that has reference assignment semantics. A delegate is an object oriented function pointer. An enumeration is a special kind of value type that represents named constants. A structure represents static allocated data that has value assignment semantics. An interface defines a contract that other types can implement.
By using namespaces, a designer can organize a set of types into a hierarchical namespace. The designer is able to create multiple groups from the set of types, with each group containing at least one type that exposes logically related functionality. In the exemplary implementation, the API 142 is organized to include three root namespaces. It should be noted that although only three root namespaces are illustrated in
The presentation subsystem namespace 200 pertains to programming and content development. It supplies types that allow for the generation of applications, documents, media presentations and other content. For example, presentation subsystem namespace 200 provides a programming model that allows developers to obtain services from the operating system 146(1) and/or object model services 146(2).
The shell namespace 202 pertains to user interface functionality. It supplies types that allow developers to embed user interface functionality in their applications, and further allows developers to extend the user interface functionality.
The web services namespace 204 pertains to an infrastructure for enabling creation of a wide variety of applications, e.g. applications as simple as a chat application that operates between two peers on an intranet, and/or as complex as a scalable Web service for millions of users. The described infrastructure is advantageously highly variable in that one need only use those parts that are appropriate to the complexity of a particular solution. The infrastructure provides a foundation for building message-based applications of various scale and complexity. The infrastructure or framework provides APIs for basic messaging, secure messaging, reliable messaging and transacted messaging. In the embodiment described below, the associated APIs have been factored into a hierarchy of namespaces in a manner that has been carefully crafted to balance utility, usability, extensibility and version ability.
The file system namespace 206 pertains to storage. It supplies types that allow for information storage and retrieval.
In addition to the framework 132, programming tools 210 are provided to assist the developer in building Web services and/or applications. One example of the programming tools 210 is Visual Studio™, a multi-language suite of programming tools offered by Microsoft Corporation.
Root API Namespaces
The Shell namespace 202 ("System.Windows.Explorer"), includes classes and APIs that support user interface functionality to allow end users to explore and navigate to a set of endpoints, such as items in storage systems, files in FTP locations or DAV (Distributed Authoring and Versioning) locations, control panel applets in control panels, applications, and so forth. This navigation can involve opening of one of more folders, as well as opening folders within folders. The Shell namespace 202 allows developers to embed such functionality in their applications, and further allows developers to extend this exploration and navigation functionality. In versions of the Windows� operating system, this user interface is typically referred to as the "Explorer".
In certain embodiments, the storage system that the user interface functionality of shell namespace 202 allows users to explore and navigate through is an active storage platform for organizing, searching for, and sharing all kinds of information. This platform defines a rich data model, builds on top of a relational storage engine, supports a flexible programming model, and provides a set of data services for monitoring, managing, and manipulating data. The data can be file-based or non-file data, and data is typically referred to as an "item". The file system extends the functionality typically provided by file systems because it also deals with items that are non-file data, such as personal contacts, event calendars, and e-mail messages. One example of such a file system is the "WinFS" file system.
A universal data store of the storage system that the user interface functionality of shell namespace 202 allows users to explore and navigate through implements a data model that supports the organization, searching, sharing, synchronization, and security of data that resides in the store. The fundamental unit of storage information in this data store is referred to as an item. The data model provides a mechanism for declaring items and item extensions, for establishing relationships between items, and for organizing items in folders and in categories.
An item is a unit of storable information that, unlike a simple file, is an object having a basic set of properties that are commonly supported across all objects exposed to a user or application program by the storage system. Items also have properties and relationships that are commonly supported across all item types including features that allow new properties and relationships to be introduced. This property and relationship data may also be referred to as metadata associated with an item. As discussed in more detail below, the metadata may be stored in accordance with an item decoration schema. This item decoration schema may indicate an appropriate manner in which to present the item to a user.
Items are the objects for common operations such as copy, delete, move, open, print, backup, restore, replicate, and so forth. Items are the units that can be stored and retrieved, and all forms of storable information manipulated by the storage platform exist as items, properties of items, or relationships between items, each of which is discussed in greater detail herein below. Items are intended to represent real-world and readily-understandable units of data like Contacts, People, Services, Locations, Documents (of all various sorts), and so on.
Items are stand-alone objects; thus, if an item is deleted, all of the properties of the item are also deleted. Similarly, when retrieving an item, what is received is the item and all of its properties contained in the metadata of the item. Certain embodiments may enable one to request a subset of properties when retrieving a specific item; however, the default for many such embodiments is to provide the item with all of its immediate and inherited properties when retrieved. Moreover, the properties of items can also be extended by adding new properties to the existing properties of that item's type. These "extensions" are thereafter bona fide properties of the item and subtypes of that item type may automatically include the extension properties. The extensions may also be referred to as metadata associated with a file.
Groups of items can be organized into special items called item Folders (which are not to be confused with file folders). Unlike in most file systems, however, an item can belong to more than one item Folder, such that when an item is accessed in one item Folder and revised, this revised item can then be accessed directly from another item Folder. In essence, although access to an item may occur from different item Folders, what is actually being accessed is in fact the very same item. However, an item Folder does not necessarily own all of its member items, or may simply co-own items in conjunction with other item Folders, such that the deletion of an item Folder does not necessarily result in the deletion of the item.
Groups of items can also be organized into Categories. Categories are conceptually different from item Folders in that, whereas item Folders may comprise items that are not interrelated (i.e., without a common described characteristic), each item in a Category has a common type, property, or value (a "commonality") that is described for that Category, and it is this commonality that forms the basis for its relationship to and among the other items in the Category. Moreover, whereas an item's membership in a particular Folder is not compulsory based on any particular aspect of that item, for certain embodiments all items having a commonality categorically related to a Category might automatically become a member of the Category at the hardware/software interface system level. Conceptually, Categories can also be thought of as virtual item Folders whose membership is based on the results of a specific query (such as in the context of a database), and items that meet the conditions of this query (defined by the commonalities of the Category) would thus comprise the Category's membership.
In contrast to files, folders, and directories, the items, item Folders, and Categories of the present invention are not characteristically "physical" in nature because they do not have conceptual equivalents of physical containers, and therefore items may exist in more than one such location. The ability for items to exist in more than one item Folder location as well as being organized into Categories provides an enhanced and enriched degree of data manipulation and storage structure capabilities at the hardware/software interface level, beyond that currently available in the art.
Items may also contain relational information which allows relationships between two or more items to be determined. Relationships are binary relationships where one item is designated as source and the other item as target. The source item and the target item are related by the relationship.
Items in the universal data store are presented to a user by a shell browser that provides a user interface (using the classes and APIs of Shell namespace 202) allowing a user to view and to interact with the hardware/software interface. Each item in the universal data store is stored in accordance with a universal data schema. This schema includes a mechanism for describing items called type associations. Each type association has a basic representation in the shell; by storing an item in accordance with a type association, the shell is able to display an item according to at least a basic or default display view.
A type association is a property associated with an item; when placing data into the universal data store one or more properties associated with the data must be declared so as to determine what type of item it is. These properties may be included as metadata associated with the data. The shell has a set of default type associations which represent the most basic and minimal properties which must be declared for an item.
Beyond property declarations, metadata associated with an item may include data indicating how the shell should decorate an item's presentation. Decorations, in this case can be though of as "hints" as to how to represent the item to a user. This metadata may be stored in accordance with an item decoration schema. The item decoration schema defines the item decoration view that the shell may utilize to present the item. For example, the item decoration data may describe the most important declared properties for an item. These "high value" properties may be the most desirable for presentation in the shell.
To present an item, the item decoration data may indicate a set of view fields appropriate for the presentation of the item. View fields are projections of declared properties, and common view fields may include "title," "author," "date of creation" or "last edited." The shell includes a set of standard view fields and independent software venders (ISVs) may define view fields which are appropriate for presentation of their data. When developing new item types, ISVs can either map item properties they define to the shell's view fields or they can provide their own view fields.
For example, particular item data may contain song data. The set of declared properties may include properties such as song title, artist, date recorded, album, song length, and other declarations appropriate for such a song item. The item decoration data may indicate that view fields "Title," "Artist" and "Album" should be displayed to the user when presenting the item in the shell.
Item decorations can be any aspect of the display supported by the shell. Some common other item decorations are, for example, data formatting, default sort order, and default icon size. Additionally, the item decoration data may describe common controls to use in displaying a given item. For example, a Ratings field might use a ratings control that represent the rating as a series of stars. The item decoration data may describe tasks or verbs appropriate for use with an item. The terms "task" and "verb" describe some action to be undertaken with regard to an item and such terms may be used interchangeably. For example, "Edit" or "Preview" may be appropriate tasks/verbs associated with an item. The shell may be furthered configured to launch applications in support of these tasks upon a user selection to perform the action with respect to the item.
An item decoration view is sufficient to fully present a given item or a homogeneous set of items, comprised of items having like item decoration views. To display items with different item decoration schemas, the shell provides shell view schemas that present items according to shell decoration views. A shell view schema allows the shell or ISVs to declare appropriate views for given sets of heterogeneous data.
Items chosen for representation within a shell decoration view may include a common characteristic. A wide variety of common characteristics may be acceptable for a shell decoration view. For example, a shell view schema could define a "Picture" view used to display common and appropriate fields and metadata for all known picture types (e.g., .GIF, .JPEG, .BMP, .TIFF, etc). The shell view schema overrides conflicting display attributes for a given item decoration view and presents each picture item according the shell view schema. As another example, the shell could provide a "Document" shell view that is optimized around appropriate columns and metadata for the items produced by typical productivity applications, such as word processing documents, spreadsheets, or databases, even though the item decorations for each of these items may vary greatly from each other. Such a view has value by providing common properties among each of these documents. When later document types are installed, the shell view will be able to present these new items according to the consistent shell view even though the new type may not have been considered when the view was first created.
The shell view schemas may provide a wide variety of display attributes and ISVs may want to provide such shell views. The display attributes may include, without limitation: the size of the preview pane, metadata to display within the preview pane, custom controls to be used, and tasks and verbs appropriate for the presented items.
The shell can present items according to an explorer display view. An "explorer" may be referred to as a storage application and may be provided by the shell or by ISVs. The explorer, for example, may enable a user to view, query, navigate, launch into tasks, or organize selected items in a data store. The term "explorer" should not imply a location where the displayed items reside, and terms such as "activity center," "viewer" and "library" may be used interchangeably with "explorer" to describe a storage application.
An example explorer schema hierarchy includes a bottom layer which is an item view schema. The item view schema provides the basic display needed to represent an item, and the explorer view schema can defer or fall back upon its display elements when required.
The explorer view schema also includes a shell view schema and explorer decorations. The explorer decorations decorate the explorer as a whole and provide display elements such as distinctive colors and branding elements. These explorer decorations persist among the various views the explorer provides. A wide variety of display attributes may be appropriate for the explorer decorations. For example, data queries or tasks/verbs associated with the explorer items may be appropriate for display with an explorer. Displayed tasks are oftentimes coupled with an application capable of performing the task.
The explorer view schema may optionally include a shell view schema or multiple shell view schemas. The shell view schema may be configured to provide a shell view for a subset of explorer items. For example, an explorer may be configured to display song items to a user. A first shell view schema may be included to provide a display of albums and a second shell view schema may be included to provide a display of song tracks. In this manner, both types of items will have appropriate views within the explorer. As discussed above, the utilization of shell view relates to the presentation of a set of items which, optionally, may share a common characteristic.
The explorer may also rely on shell views included within the shell. If items selected for presentation within an explorer are not supported by any of the shell views included by the explorer, the shell may provide an appropriate shell view for use within the explorer. Similarly and as discussed above, the explorer may also fall back to an item display view or a default display view provided by the shell. This functionality insures that any item which can be displayed by the shell is also capable of display within the explorer. The explorer can be configured to defer to these shell provided display schemas or may rely upon them to, for example, provide a display for unanticipated data.
The Shell namespace 202 supports user interface functionality that allows items to be manipulated and interacted with in a consistent manner regardless of the location where the underlying data for the item (e.g., the file contents, the image data, the contact information data, etc.) is stored. From the point of view of an application designer, the functionality supported by Shell namespace 202 results in a better development experience at least in part because such items can be treated in a consistent manner despite the underlying data being stored in different locations. A coherent experience is provided to the designer when using the Shell namespace 202 despite the potential presence of such different data storage locations.
The Shell namespace 202 defines additional namespaces, including a Controls namespace 302, a Dialogs namespace 304, an Adding namespace 306, and a Desktop namespace 308. Each of these additional namespaces 302, 304, 306, and 308 in the Shell namespace includes one or more services or components that provide various functionality, such as controls, dialogs, and/or handlers, as discussed in more detail below.
The Shell namespace 202 defines an object model that can be used by each of the additional namespaces 302, 304, 306, and 308. This object model includes the following objects:
This object model is discussed in further detail in U.S. patent application Ser. No. 10/691,885, Filed Oct. 23, 2003, entitled "System and method for presenting items to a user with a contextual presentation", which is hereby incorporated by reference.
Controls namespace 302 ("System.Windows.Explorer.Controls") defines a collection of re-usable user interface controls that can be used by applications. As multiple different applications can make use of these controls, these controls can be viewed as being re-usable. This collection of re-usable controls can simplify design of the application because the application designers can rely on these controls rather than being required to design their own versions of the controls. Additionally, by using this collection of re-usable controls, a consistent look and feel across multiple applications can be achieved.
The controls defined by Controls namespace 302 allow manipulation and/or display of shells of the user interface, including manipulation and/or display of items in the user interface. As discussed above, these items that can be displayed within shells of the user interface represent any of a wide variety of kinds of data and are not simply traditional "files" stored in a file system. Furthermore, the controls defined by Controls namespace 302 allow application designers to use the same controls when working with data from a wide variety of locations, resulting in a consistent and coherent design experience.
The Controls namespace 302 defines the following re-usable controls:
Dialogs namespace 304 ("System.Windows.Explorer.Dialogs") defines a collection of user interface dialogs and wizards that can be used by applications. Similar to the controls in the Controls namespace 302, the dialogs and wizards in the Dialogs namespace 304 can be re-used so that multiple different applications can make use of these dialogs and wizards. This collection of re-usable dialogs and wizards helps maintain a consistent look and feel across multiple applications.
The dialogs and wizards defined by Dialogs namespace 304 allow actions to be performed within a shell of the user interface. As discussed above, these shells can be based on items that can represent any of a wide variety of kinds of data and are not simply traditional "files" stored in a file system. Furthermore, the dialogs and wizards defined by Dialogs namespace 304 allow application designers to use the same dialogs and wizards when working with data from a wide variety of locations, resulting in a consistent and coherent design experience.
The Dialogs namespace 304 defines the following dialogs and wizards:
Adding namespace 306 ("System.Windows.Explorer.Addin") defines a collection of base classes and interfaces for extending the user interface functionality. Adding namespace 306 allows application designers to add managed code that extends the functionality of the user interface. This extension allows, for example, the application designers to customize portions of the user interface as they see fit.
The Adding namespace 306 allows for the extension of shells of the user interface that are used to display items, which represent any of a wide variety of kinds of data and are not simply traditional "files" stored in a file system. Furthermore, the Adding namespace 306 allows application designers to extend the shells of the user interface in a coherent manner, providing a more managed and improved design experience.
Managed code for various functionality is supported by the Adding namespace 306, such as:
Desktop namespace 308 ("System.Windows.Explorer.Desktop") defines a collection of functionality that allows application designers to extend the functionality of the desktop displayed to users. The Desktop namespace may be part of the Shell namespace 202 (e.g., "System.Windows.Explorer.Desktop"), or alternatively may be part of the presentation subsystem namespace 200 but not part of the Shell namespace 202 (e.g., "System.Windows.Desktop"). The Desktop namespace includes elements involved in the sidebar and notifications. Including the sidebar and notifications elements in the Desktop namespace provides the user with a centralized control for the sidebar and notifications. For example, rules regarding notifications from all applications can be set by the user once, rather than requiring the user to navigate through accessing rule definitions for each application that uses notifications.
In general, the sidebar provides dynamic communication access and information awareness in an integrated interactive peripheral awareness display within which specified communications contacts and informational elements are dynamically tracked or received and provided to a user on an ongoing basis. In certain embodiments, this capability is provided via at least one customizable dynamic thumbnail displayed in one or more columns in a persistent display strip along one edge of a conventional display device. Further, in additional embodiments, the thumbnails are displayed on any one portion or portions of a display, including the entire display. The embodiment wherein the entire display is covered is particularly useful where the sidebar will be used on a device having a relatively small display area, such as, for example, a handheld or palm top computing device, a cell phone, or any other electronic device having a limited display area.
Each of the customizable dynamic thumbnails represents, for example, particular communications contacts (such as, particular individuals, businesses, organizations, or other entities) or particular elements of information that a user may be interested in. Such information elements include, for example, when shared files or folders are modified, when information in a shared database or workspace changes, email status, calendars, Internet web pages, weather conditions, appointments, schedules, statistical information, stock quotes, traffic information, or any other Internet or network accessible information that may be of interest to a user.
The aforementioned dynamic thumbnails generally comprise a combination of a "tile" (also referred to as a "ticket") describing the contact or information of interest and a specialized "viewer" for displaying whatever communications contact or information is represented by the tile. Each tile and viewer can, for example, be an item in the storage system that can be accessed by way of the user interface functionality provided by shell namespace 202. The one or more "services" are used to automatically interact with, track, or receive the current state of the information and/or status of the communications contacts described by each tile. The current state of the information and the status of the communications contacts are then dynamically provided by hosting each tile in a "container" residing within an interactive peripheral awareness interface for graphically and/or textually displaying the items. The peripheral awareness interface displays information and/or communications contacts in such a way as to reduce any potential distraction or interruption to the user.
In general, a tile is represented by a data structure such as an XML data file. Each tile includes instructions as to what information or communications contact is to be represented by the tile as well as pointers to particular services that represent any of a number of conventional means for accessing and/or interacting with the information or communications contacts. These services are automatically or manually selected from a predefined or user definable library of services. In particular, the different services represent shared code or functions that provide functionality for accessing, receiving, retrieving, and/or otherwise interacting with any conventional information, source of information, or communications contact. These services are shared in the sense that they are used either alone, or in combination, and may be used simultaneously by one or more tiles. Consequently, it should be noted that in certain embodiments multiple services are used in combination for providing complex interactions with any conventional information, source of information, or communications contact.
One example of a service is the functionality necessary for monitoring an email folder by connecting to a conventional MAPI server. Another example of a service is functionality for sending or receiving email messages. Related services provide functionality for communicating with contacts or transferring information via any number of conventional methods, such as, for example instant messaging or peer-to-peer communications schemes. Another example of a service is functionality to convert a text file from one language to another. A further example of a service is functionality necessary for monitoring a database. Still other examples of services include functionality for receiving or retrieving data from a web site or a remote server. Clearly, any method for interacting with any information, source of information, or communications contact can be implemented as a shared service for use by one or more tiles.
Further, as noted above, each tile's instructions includes a pointer to one of a number of specialized viewers having the capability to display whatever type of information or communications contact is represented by the tile. In other words, each tile represents a combination of the information or contact that a user desires to keep track of along with a definition of how the user desires to view that particular information or contact as well as the ability to use any of a number of services for accessing and interacting with the information or contact. Such access or interaction can be accomplished locally, or across local intranets, extranets, wired or wireless networks, the Internet, etc. via any conventional communications protocol.
The viewers graphically display the tile as a resizable thumbnail or icon-sized window having the information or contact data retrieved via one or more of the services. In particular, the viewer is capable of dynamically displaying a tile having textual, audible, or graphical information, including still or live images, or any combination of textual, audible, or graphical information. For example, one viewer type is capable of displaying contact information, i.e. a "person tile", another is capable of displaying specific email information, such as, for example, number of messages received, or number of messages from a particular source, another viewer is designed to interact with a database to provide a summary of particular information from the database in the thumbnail. Further examples of viewer types include viewers capable of displaying still images, video images, a summary of communications status, the results of a database query, etc. Clearly, any type of viewer can designed to be associated with any corresponding type of information to ensure that any possible information can be displayed.
The sidebar is discussed in further detail in U.S. patent application Ser. No. 10/063,296, entitled "A system and process for providing dynamic communication access and information awareness", which is hereby incorporated by reference.
The sidebar functionality of namespace 308 allows application designers to add tiles to the sidebar.
Notifications (e.g., audible or visual notifications) are part of a user context system that, in accordance with certain embodiments, includes three elements that are compared for a decision as to how to process a notification. The first element is the user's context (as may be provided by the operating system and arbitrary programs that have extended it). The second element is the user's rules and preferences. The third element is the notification itself (which contains elements such as data and properties that may match the user's rules).
The user context system operates by the operating system and other programs declaring a user's contexts, after which the system brokers the user's context and rules. Notifications are raised by other programs calling into the system. The user's context, rules, and elements of the notification are compared and then a determination is made as to what should be done with the notification. Examples of various options for what may be done with the notification include denying (e.g., if the notification is not allowed to draw or make noise, and the notification is to never be seen by the user), deferring (e.g., the notification is held until the user's context changes or the user's rules dictate that it is subsequently appropriate to deliver), delivering (e.g., the notification is allowed to be delivered in accordance with the user's context and rules), and routing (e.g., the user's rules indicate that the notification should be handed off to another system, regardless of whether the notification is also allowed to be delivered in the present system).
In general, the user may be in a state deemed "unavailable" in which case the notification is either not delivered or held until the user becomes "available". For instance, if the user is running a full screen application, that user may be deemed unavailable. Or, the user may be "available" but in such a state that the notification needs to be modified to be appropriate for the user. For instance, if the user is listening to music or in a meeting, the user may have indicated that the notifications should be delivered to the user's screen but that the sound they make should be either quieter or not made at all.
As noted above, the user context can determine in part whether notifications are shown on the user's screen. When a notification is shown, it may be shown based on certain gradients within the user context. In other words, there are different levels of invasiveness of the form of the drawn notification that may be specified. For example, a normal notification is free to pop out into the client area and briefly obscure a window. If the user is in a slightly restrictive context, the notification may be free to show, but only in a less invasive manner, such as it might not be allowed to draw on top of another window. As another example, in one embodiment where the user is running a maximized application, the default setting may be that this means that context is slightly restricted, and that the user has clearly made a statement that they want this application to get the entire client area. In this setting, a notification may still be allowed to draw, but may be made to only appear within the sidebar. In other words, this type of reduced invasiveness in the notification drawing form lessens the impact of the notification, and overall lessens the cognitive load.
User context systems are discussed in further detail in U.S. patent application Ser. No. 10/402,179, filed Mar. 26, 2003, entitled "System and Method Utilizing Test Notifications", which is hereby incorporated by reference.
The notifications functionality of namespace 308 allows application designers to create their own notifications and have them displayed on the desktop to notify the user when something that may be of interest to the user has happened (e.g., an email message has been received, an instant message has been received, and so forth). The notification functionality of namespace 308 further provides a central location for users to define their rules and preferences for notifications from multiple applications, releasing users from the burden of setting the same rules and preferences multiple times (once for each of the multiple applications).
Additionally, a Contacts namespace defines a collection of controls and dialogs for contact information. This contact information can be stored as items in the storage system. A "contact" generally refers to any person, group, organization, business, household, or other type of identifiable entity. "Contact information" generally refers to any information that corresponds to a contact and that may be considered relevant for identifying, contacting, accessing, corresponding or communicating with the contact. Contact information is used by an application to perform a desired function, such as, for example, sending an email, initiating a telephone call, accessing a website, initiating a gaming session, performing a financial transaction, and so forth. Non-limiting examples of contact information include names, aliases, telephone numbers, email addresses, home addresses, instant messaging (IM) addresses, and web addresses. Contact information can also refer to other types of information such as the status of a contact. For example, information indicating a contact is currently online, or on a la telephone line may also be broadly considered as contact information.
The Contacts namespace can be part of the presentation subsystem namespace 200 but not part of the Shell namespace 202 , such as, "System.Windows.Contacts", "System.Windows.Controls" (controls 310 of
The Contacts namespace allows contact information to be entered once by the user yet be accessed by multiple different applications. The user is thus released from the burden of entering the same contact information multiple times (once for each of the multiple applications).
The controls and dialogs in the Contacts namespace include:
Example Namespace Members
This section includes multiple tables describing the examples of members that may be exposed by example namespaces (e.g., namespaces in presentation subsystem namespace 200 of
It should be appreciated that in some of namespace descriptions below, descriptions of certain classes, interfaces, enumerations and delegates are left blank. More complete descriptions of these classes, interfaces, enumerations and delegates can be found in the subject matter of the compact discs that store the SDK referenced above.
The following tables list examples of members exposed by the System.Windows.Explorer.Controls namespace.
Contains event data for the
DefaultCommandEvent event.
Allows a user to view information
about a folder's contents.
Contains event data for the
FolderSelectionChangedEvent event.
Contains event data for the
IncludeItemEvent event.
Initializes a new instance of the
ItemVerbModifyEventArgs class.
Contains event data for the
NavigationCompleteEvent event.
Contains event data for the
NavigationFailedEvent event.
Contains event data for the
NavigationPendingEvent event.
FolderViewFlags Indicates the view properties for the Explorer View.
FolderViewMode Indicates the view mode for the Explorer View.
Represents a method that will
handle the DefaultCommandEvent.
Represents a method that will
handle the
Represents a method that will
handle the IncludeItemEvent.
Represents a method that will
handle the ItemVerbModifyEvent.
Represents a method that will
handle the
Represents a method that will
handle the NavigationFailedEvent.
Represents a method that will
handle the NavigationPendingEvent.
The following tables list examples of members exposed by the System.Windows.Explorer.Dialogs namespace.
An abstract class that is used as the
parent class of OpenFileDialog and
Represents a check box control that
can be placed on a FileDialog.
An abstract class that is used as the
parent class of
FileDialogRadioButtonGroup, and
An abstract class that is used as the
parent class of
FileDialogPushButton, and
Represents a text box control that
can be placed on a FileDialog.
Represents a button control that
can be placed on a FileDialog.
Allows a user to select one or more
file to open. This class cannot be
Enables a user to choose a location
at which to save a file, and to
specify a filename. This class
cannot be inherited.
Allows a user to choose a location
at which to save a file. This class
cannot be inherited.
An abstract class that is used as the
parent class of SaveAsFileDialog
and SaveFileDialog.
The following tables list examples of members exposed by the System.Windows.Desktop namespace. This namespace contains elements involved in the sidebar and notifications.
An abstract class used as the
parent class of a custom sidebar
tile implementation.
Represents event data passed
from a data source.
Represents event data passed to
an RMAActionEventHandler in
response to an event that origin-
ated from the optional link found
at the bottom of a sidebar tile's
flyout view.
Represents event data passed to
a FolderContentsChangedEvent-
Handler in response to a change
in the folder's contents.
Represents a message and its
associated data that the system
sends to the user in a piece of
user interface (UI).
Defines a button that appears on
a notification.
Contains data associated with a
click event in a notification
Declares whether an application
is currently in a particular state.
This state is used as part of the
definition of the user's context.
OverFlow Wrapper
Represents event data generated
by a Rich Minimized Applica-
tion (RMA). Consumed by an
Represents event data generated
by a data array and sent to a
Used to create and communicate
with a data source implemented
in unmanaged code.
Provides access to the sidebar,
which hosts individual tiles. The
sidebar host is reponsible for
opening and closing flyouts, dis-
playing shortcut menus, and re-
sponding to events that involve
the individual tiles.
Enumeration for deciding what
to do when a user invokes an
ItemControl for a folder. Used
with InvokeFolderAction and
Constants used with the Action
property to define an event ac-
Represents the method that
handles FlyoutLinkClickEvent
Represents the method that
Represents the method that
handles NotifyCompleteEvent
Represents the method that
handles RMAActionEvent
Represents the method that
SetDataArrayEvent events.
Task Presenter
Provides classes and interfaces used by shell components.
The following tables list examples of members exposed by the System.Windows.Controls namespace.
Contact Control
Contact Selection
Contact Textbox
Contact Type
Exemplary Computing System and Environment
The exemplary computing environment 400 is only one example of a computing environment and is not intended to suggest any limitation as to the scope of use or functionality of the computer and network architectures. Neither should the computing environment 400 be interpreted as having any dependency or requirement relating to any one or combination of components illustrated in the exemplary computing environment 400.
The framework 132 may be implemented with numerous other general purpose or special purpose computing system environments or configurations. Examples of well known computing systems, environments, and/or configurations that may be suitable for use include, but are not limited to, personal computers, server computers, multiprocessor systems, microprocessor-based systems, network PCs, minicomputers, mainframe computers, distributed computing environments that include any of the above systems or devices, and so on. Compact or subset versions of the framework may also be implemented in clients of limited resources, such as cellular phones, personal digital assistants, handheld computers, or other communication/computing devices.
The framework 132 may be described in the general context of computer-executable instructions, such as program modules, being executed by one or more computers or other devices. Generally, program modules include routines, programs, objects, components, data structures, etc. that perform particular tasks or implement particular abstract data types. The framework 132 may also be practiced in distributed computing environments where tasks are performed by remote processing devices that are linked through a communications network. In a distributed computing environment, program modules may be located in both local and remote computer storage media including memory storage devices.
The computing environment 400 includes a general-purpose computing device in the form of a computer 402. The components of computer 402 can include, by are not limited to, one or more processors or processing units 404, a system memory 406, and a system bus 408 that couples various system components including the processor 404 to the system memory 406.
The system bus 408 represents one or more of several possible types of bus structures, including a memory bus or memory controller, a peripheral bus, an accelerated graphics port, and a processor or local bus using any of a variety of bus architectures. By way of example, such architectures can include an Industry Standard Architecture (ISA) bus, a Micro Channel Architecture (MCA) bus, an Enhanced ISA (EISA) bus, a Video Electronics Standards Association (VESA) local bus, and a Peripheral Component Interconnects (PCI) bus also known as a Mezzanine bus.
Computer 402 typically includes a variety of computer readable media. Such media can be any available media that is accessible by computer 402 and includes both volatile and non-volatile media, removable and non-removable media.
The system memory 406 includes computer readable media in the form of volatile memory, such as random access memory (RAM) 410, and/or non-volatile memory, such as read only memory (ROM) 412. A basic input/output system (BIOS) 414, containing the basic routines that help to transfer information between elements within computer 402, such as during start-up, is stored in ROM 412. RAM 410 typically contains data and/or program modules that are immediately accessible to and/or presently operated on by the processing unit 404.
Computer 402 may also include other removable/non-removable, volatile/non-volatile computer storage media. By way of example,
The disk drives and their associated computer-readable media provide non-volatile storage of computer readable instructions, data structures, program modules, and other data for computer 402. Although the example illustrates a hard disk 416, a removable magnetic disk 420, and a removable optical disk 424, it is to be appreciated that other types of computer readable media which can store data that is accessible by a computer, such as magnetic cassettes or other magnetic storage devices, flash memory cards, CD-ROM, digital versatile disks (DVD) or other optical storage, random access memories (RAM), read only memories (ROM), electrically erasable programmable read-only memory (EEPROM), and the like, can also be utilized to implement the exemplary computing system and environment.
Any number of program modules can be stored on the hard disk 416, magnetic disk 420, optical disk 424, ROM 412, and/or RAM 410, including by way of example, an operating system 426, one or more application programs 428, other program modules 430, and program data 432. Each of the operating system 426, one or more application programs 428, other program modules 430, and program data 432 (or some combination thereof) may include elements of the programming framework 132.
A user can enter commands and information into computer 402 via input devices such as a keyboard 434 and a pointing device 436 (e.g., a "mouse"). Other input devices 438 (not shown specifically) may include a microphone, joystick, game pad, satellite dish, serial port, scanner, and/or the like. These and other input devices are connected to the processing unit 404 via input/output interfaces 440 that are coupled to the system bus 408, but may be connected by other interface and bus structures, such as a parallel port, game port, or a universal serial bus (USB).
A monitor 442 or other type of display device can also be connected to the system bus 408 via an interface, such as a video adapter 444. In addition to the monitor 442, other output peripheral devices can include components such as speakers (not shown) and a printer 446 which can be connected to computer 402 via the input/output interfaces 440.
Computer 402 can operate in a networked environment using logical connections to one or more remote computers, such as a remote computing device 448. By way of example, the remote computing device 448 can be a personal computer, portable computer, a server, a router, a network computer, a peer device or other common network node, and so on. The remote computing device 448 is illustrated as a portable computer that can include many or all of the elements and features described herein relative to computer 402.
Logical connections between computer 402 and the remote computer 448 are depicted as a local area network (LAN) 450 and a general wide area network (WAN) 452. Such networking environments are commonplace in offices, enterprise-wide computer networks, intranets, and the Internet.
When implemented in a LAN networking environment, the computer 402 is connected to a local network 450 via a network interface or adapter 454. When implemented in a WAN networking environment, the computer 402 typically includes a modem 456 or other means for establishing communications over the wide network 452. The modem 456, which can be internal or external to computer 402, can be connected to the system bus 408 via the input/output interfaces 440 or other appropriate mechanisms. It is to be appreciated that the illustrated network connections are exemplary and that other means of establishing communication link(s) between the computers 402 and 448 can be employed.
In a networked environment, such as that illustrated with computing environment 400, program modules depicted relative to the computer 402, or portions thereof, may be stored in a remote memory storage device. By way of example, remote application programs 458 reside on a memory device of remote computer 448. For purposes of illustration, application programs and other executable program components such as the operating system are illustrated herein as discrete blocks, although it is recognized that such programs and components reside at various times in different storage components of the computing device 402, and are executed by the data processor(s) of the computer.
An implementation of the framework 132, and particularly, the API 142 or calls made to the API 142, may be stored on or transmitted across some form of computer readable media. Computer readable media can be any available media that can be accessed by a computer. By way of example, and not limitation, computer readable media may comprise "computer storage media" and "communications media." "Computer storage media" include volatile and non-volatile, removable and non-removable media implemented in any method or technology for storage of information such as computer readable instructions, data structures, program modules, or other data. Computer storage media includes, but is not limited to, RAM, ROM, EEPROM, flash memory or other memory technology, CD-ROM, digital versatile disks (DVD) or other optical storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other medium which can be used to store the desired information and which can be accessed by a computer.
"Communication media" typically embodies computer readable instructions, data structures, program modules, or other data in a modulated data signal, such as carrier wave or other transport mechanism. Communication media also includes any information delivery media. The term "modulated data signal" means 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 includes wired media such as a wired network or direct-wired connection, and wireless media such as acoustic, RF, infrared, and other wireless media. Combinations of any of the above are also included within the scope of computer readable media.
Alternatively, portions of the framework may be implemented in hardware or a combination of hardware, software, and/or firmware. For example, one or more application specific integrated circuits (ASICs) or programmable logic devices (PLDs) could be designed or programmed to implement one or more portions of the framework.
A programming interface (or more simply, interface) may be viewed as any mechanism, process, protocol for enabling one or more segment(s) of code to communicate with or access the functionality provided by one or more other segment(s) of code. Alternatively, a programming interface may be viewed as one or more mechanism(s), method(s), function call(s), module(s), object(s), etc. of a component of a system capable of communicative coupling to one or more mechanism(s), method(s), function call(s), module(s), etc. of other component(s). The term "segment of code" in the preceding sentence is intended to include one or more instructions or lines of code, and includes, e.g., code modules, objects, subroutines, functions, and so on, regardless of the terminology applied or whether the code segments are separately compiled, or whether the code segments are provided as source, intermediate, or object code, whether the code segments are utilized in a runtime system or process, or whether they are located on the same or different machines or distributed across multiple machines, or whether the functionality represented by the segments of code are implemented wholly in software, wholly in hardware, or a combination of hardware and software.
Notionally, a programming interface may be viewed generically, as shown in
Aspects of such a programming interface may include the method whereby the first code segment transmits information (where "information" is used in its broadest sense and includes data, commands, requests, etc.) to the second code segment; the method whereby the second code segment receives the information; and the structure, sequence, syntax, organization, schema, timing and content of the information. In this regard, the underlying transport medium itself may be unimportant to the operation of the interface, whether the medium be wired or wireless, or a combination of both, as long as the information is transported in the manner defined by the interface. In certain situations, information may not be passed in one or both directions in the conventional sense, as the information transfer may be either via another mechanism (e.g. information placed in a buffer, file, etc. separate from information flow between the code segments) or non-existent, as when one code segment simply accesses functionality performed by a second code segment. Any or all of these aspects may be important in a given situation, e.g., depending on whether the code segments are part of a system in a loosely coupled or tightly coupled configuration, and so this list should be considered illustrative and non-limiting.
This notion of a programming interface is known to those skilled in the art and is clear from the foregoing detailed description of the invention. There are, however, other ways to implement a programming interface, and, unless expressly excluded, these too are intended to be encompassed by the claims set forth at the end of this specification. Such other ways may appear to be more sophisticated or complex than the simplistic view of
A. Factoring
A communication from one code segment to another may be accomplished indirectly by breaking the communication into multiple discrete communications. This is depicted schematically in
B. Redefinition
In some cases, it may be possible to ignore, add or redefine certain aspects (e.g., parameters) of a programming interface while still accomplishing the intended result. This is illustrated in
C. Inline Coding
It may also be feasible to merge some or all of the functionality of two separate code modules such that the "interface" between them changes form. For example, the functionality of
D. Divorce
A communication from one code segment to another may be accomplished indirectly by breaking the communication into multiple discrete communications. This is depicted schematically in
E. Rewriting
Yet another possible variant is to dynamically rewrite the code to replace the interface functionality with something else but which achieves the same overall result. For example, there may be a system in which a code segment presented in an intermediate language (e.g. Microsoft IL, Java ByteCode, etc.) is provided to a Just-in-Time (JIT) compiler or interpreter in an execution environment (such as that provided by the .Net framework, the Java runtime environment, or other similar runtime type environments). The JIT compiler may be written so as to dynamically convert the communications from the 1st Code Segment to the 2nd Code Segment, i.e., to conform them to a different interface as may be required by the 2nd Code Segment (either the original or a different 2nd Code Segment). This is depicted in
It is also noted that the above-described scenarios for achieving the same or similar result as an interface via alternative embodiments may also be combined in various ways, serially and/or in parallel, or with other intervening code. Thus, the alternative embodiments presented above are not mutually exclusive and may be mixed, matched and combined to produce the same or equivalent scenarios to the generic scenarios presented in
Although the invention has been described in language specific to structural features and/or methodological acts, it is to be understood that the invention defined in the appended claims is not necessarily limited to the specific features or acts described. Rather, the specific features and acts are disclosed as exemplary forms of implementing the claimed invention.
|Cited Patent
|Filing date
|Publication date
|29 Dec 1993
|18 Nov 1997
|Microsoft Corporation
|Unification of directory service with file system services
|14 Dec 1995
|18 Nov 1997
|International Business Machines Corporation
|System and method for providing compatibility between distributed file system namespaces and operating system pathname syntax
|24 Sep 1997
|24 Nov 1998
|Microsoft Corporation
|Distributed file system providing a unified name space with efficient name resolution
|18 Aug 1995
|11 May 1999
|International Business Machines Corporation
|Name space registry with backward compatibility for older applications
|17 Jul 1995
|3 Aug 1999
|Microsoft Corporation
|Apparatus for presenting the content of an interactive on-line network
|2 Mar 1998
|25 Jul 2000
|International Business Machines Corporation
|Caching in a data processing system using the pigeon hole principle
|8 Aug 1994
|5 Jun 2001
|Apple Computer, Inc.
|Method and apparatus for organizing information in a computer system
|27 Feb 2001
|2 Sep 2003
|Apple Computer, Inc.
|Method and apparatus for organizing information in a computer system
|20 Sep 2000
|22 Nov 2005
|Texas Instruments Incorporated
|Application programming interface with inverted memory protocol for embedded software systems
|3 Nov 2000
|28 Mar 2006
|Accenture Llp
|Architectures for netcentric computing systems
|28 Feb 2002
|6 Feb 2003
|Smith Adam W.
|Application program interface for network software platform
|10 Jul 2001
|18 Sep 2003
|Andres Hejlsberg
|Application program interface for network software platform
|11 Jun 2001
|13 Dec 2001
|The Trustees Of Columbia University In The City Of New York
|Distributed computer system using a graphical user interface toolkit
|"Sideshow: providing peripheral awareness of important information", Microsoft Corporation, Sep. 2001 (9 pages). Online retrieved at <research.microsoft.com/scripts/pubs/view.asp?TR-ID=MSR-TR-2001-83>.
|European Search Report for European Patent Application No. EP 04020900 Mailed on Apr. 14, 2008, pp. 6.
|Microsoft, "Sample Chapter from 'Microsoft Windows 2000 Professional, Step by Step'", Lesson 3: Managing Files and Folders, May 1, 2000, retrieved from the internet at <<http: //www.microsoft.com/mspress/books/sampchap/1589.asp>> on Jun. 12, 2006.
|Myers, et al., "Past, Present, and Future of User Interface Software Tools", ACM Transactions on Computer-Human Interaction, vol. 7, No. 1, Mar. 2000, pp. 3-28.
|Windows XP-Reviewers Guide, Microsoft Corporation, Aug. 2001 (61 pages). Online retrieved at <download.microsoft.com/download/RevGuide.pdf>.
|Citing Patent
|Filing date
|Publication date
|31 Mar 2006
|15 Jun 2010
|Sap Ag
|Code management in a distributed software development environment
|28 Dec 2006
|16 Aug 2011
|Sap Ag
|Method and framework for object code testing
|5 Jun 2008
|8 Nov 2011
|Novell, Inc.
|Mechanisms to support object-oriented version control operations
|20 Jan 2009
|13 Nov 2012
|Microsoft Corporation
|Programming interface for a computer platform
|30 Sep 2009
|22 Jan 2013
|Microsoft Corporation
|Generic user interface command architecture
|28 Nov 2006
|12 Feb 2013
|Emc Corporation
|Wizard for web service search adapter
|17 Nov 2010
|26 Mar 2013
|Microsoft Corporation
|Automatic batching of GUI-based tasks
|30 Sep 2011
|23 Apr 2013
|Novell, Inc.
|Mechanisms to support object-oriented version control operations
|30 Oct 2009
|11 Jun 2013
|Hon Hai Precision Industry Co., Ltd.
|Embedded electronic device and method of implementing user interface therein
|28 Jan 2008
|6 Aug 2013
|Blue Coat Systems, Inc.
|Method and system for enhancing MS exchange (MAPI) end user experiences in a split proxy environment
|10 Jun 2010
|3 Sep 2013
|Accenture Global Services Limited
|Assessment system for choosing maintenance approaches for GUI-directed test scripts
|31 Jan 2013
|30 Dec 2014
|Microsoft Corporation
|Automatic batching of GUI-based tasks
|25 Jul 2013
|14 Apr 2015
|Accenture Global Services Limited
|Assessment system for choosing maintenance approaches for GUI-directed test scripts
|3 Jul 2008
|27 Oct 2015
|Salesforce.Com, Inc.
|Method and system for allowing access to developed applications via a multi-tenant on-demand database service
|19 Apr 2010
|27 Oct 2015
|Salesforce.Com, Inc.
|Method and system for allowing access to developed applications via a multi-tenant on-demand database service
|18 Apr 2013
|26 Apr 2016
|Salesforce.Com, Inc.
|Method and system for allowing access to developed applications via a multi-tenant on-demand database service
|22 Dec 2014
|23 Aug 2016
|Microsoft Technology Licensing, Llc
|Automatic batching of GUI-based tasks
|17 Dec 2012
|30 Aug 2016
|Sap Se
|Career history exercise with stage card visualization
|8 Oct 2012
|30 Aug 2016
|Microsoft Technology Licensing, Llc
|Interface for a computer platform
|8 Oct 2012
|4 Oct 2016
|Microsoft Technology Licensing, Llc
|Interface for a computer platform
|25 Jan 2006
|26 Jul 2007
|John Abd-El-Malek
|Sidebar communication system and method
|17 Aug 2006
|27 Sep 2007
|Steven Hite
|Enhanced service delivery platform that provides a common framework for use by IMS and Web applications in delivering services
|31 Mar 2006
|18 Oct 2007
|Sap Ag
|Code management in a distributed software development environment
|21 Dec 2006
|26 Jun 2008
|Ilja Fischer
|Portal eventing directory
|28 Dec 2006
|3 Jul 2008
|Sap Ag.
|method and framework for object code testing
|24 Apr 2007
|30 Oct 2008
|Nehal Dantwala
|System and method to develop a custom application for a multi-function peripheral (mfp)
|20 Jan 2009
|14 May 2009
|Microsoft Corporation
|Programming Interface for a Computer Platform
|28 Jan 2008
|30 Jul 2009
|Meenakshi Sundaram Lakshmanan
|Method and system for enhancing ms exchange (mapi) end user experiences in a split proxy environment
|5 Jun 2008
|10 Dec 2009
|Zack Grossbart
|Mechanisms to support object-oriented version control operations
|30 Sep 2009
|28 Jan 2010
|Microsoft Corporation
|Generic User Interface Command Architecture
|10 Jun 2010
|16 Dec 2010
|Mark Grechanik
|Assessment system for choosing maintenance approaches for gui-directed test scripts
|30 Oct 2009
|20 Jan 2011
|Hon Hai Precision Industry Co., Ltd.
|Embedded electronic device and method of implementing user interface therein
|17 Nov 2010
|17 May 2012
|Microsoft Corporation
|Automatic Batching of GUI-Based Tasks
|17 Dec 2012
|19 Jun 2014
|Sap Ag
|Career history exercise with stage card visualization
|U.S. Classification
|717/105, 717/121, 715/700, 719/328, 715/762
|International Classification
|Cooperative Classification
|European Classification
|18 Aug 2004
Owner name: MICROSOFT CORPORATION, WASHINGTON
Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:KARATAL, KEREM B.;SHELDON, MICHAEL G.;MILLER, MARC M.;AND OTHERS;REEL/FRAME:015073/0262;SIGNING DATES FROM 20040720 TO 20040721
|31 Aug 2004
Owner name: MICROSOFT CORPORATION, WASHINGTON
Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:KARATAL, KEREM B.;SHELDON, MICHAEL G.;MILLER, MARC M.;AND OTHERS;REEL/FRAME:015059/0418;SIGNING DATES FROM 20040720 TO 20040721
|3 May 2011
|Certificate of correction
|25 Jul 2012
|Fee payment
Year of fee payment: 4
|9 Dec 2014
Owner name: MICROSOFT TECHNOLOGY LICENSING, LLC, WASHINGTON
Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:MICROSOFT CORPORATION;REEL/FRAME:034541/0477
Effective date: 20141014
|4 Aug 2016
|Fee payment
Year of fee payment: 8


text:
When you give to Michigan State University, whether with your time, talent or treasure, you become part of something extraordinary. You make the seemingly impossible possible and you turn dreams into realities. Follow your passion and empower current and future Spartans to make a difference today. Here are just a few ways to get involved now.
Whether you can give $25 or $25 million, join us and make the extraordinary possible.GIVE NOW
CrowdPower is the crowdfunding solution for Spartans. Follow your passion and raise money directly for a MSU project or cause that matters to you. Just look at the impact donors have already made.Discover CROWDPOWER Projects
The world needs Spartans and giving of your time and talent leaves a lasting impact locally, nationally and globally. Find a local MSU alumni club and join fellow Spartans bringing the volunteer spirit of the Spartan Nation across the globe.

subset: commoncrawl


text:
Beauty Remedy in history
photo:victorian babes
Before there's ton of beauty products, women made their own remedy for keeping their skin in tip top condition.
Here is a lists of the beauty remedies.
1. Rose Balm- For hands, feet, elbows, and general dry skin
- 1/2 pound hogs lard (can be purchased in grocery stores labeled "lard")
- 1/4 pound or less of white wax (candle stubs or canning wax work well)
- Rose water*
- Alkanet root or cochineal pigment (if desired)
2. Four Thieves Vinegar- Cleaning and freshening of rooms
- Medium bottle apple cider vinegar
- Dried or fresh:
- Sage
- Rosemary
- Thyme
- Lavender
- Glass container with cork
3. Cleaning of the skin
- White wine
- Rosemary (fresh or dried)
4. Scented powder for body or hair
- Glass jar with cork
- Dried lavender flowers
- Starch (corn starch is used late in the 18th century, wheat starch is more common during the period. If you can find dried, powdered laundry starch, this is perfect!)
Personally, I won't do it myself but perhaps you can give it try or you already knew it, share with me how it turns out. ^_^


text:
Lady Gaga dazzled on and off the stage at the 2016 Met Gala.
Lady Gaga didn't stop entertaining after the Met Gala concluded late Monday night. She and Mark Ronson gave a surprise performance at an after-party, taking the stage to perform a cover of Talking Heads' 1983 hit "Burning Down The House."
Watch Gaga sing and play the guitar during the performance below:
If Gaga and Ronson appear comfortable together, it's because they're collaborating on Mother Monster's forthcoming record.
"We just spent some time in the studio when she was in London," Ronson told Zane Lowe back earlier this year. "She's kind of like a muso at heart — she loves just sitting at a piano and barking orders at a drummer and she has an incredible voice. She's one of the great voices in pop music, so we're going to start with the songs and go from there."
Photogs caught Gaga leaving a studio session with the superstar producer in March following a session he had with Fergie. Either they're cooking up an all-star collaboration with the Black Eyed Peas alum, or Gaga and Ronson have their sights set on the next "Uptown Funk."
Thoughts? Let us know in Exhale.
And while you're at it... leave a comment and follow us on Facebook, Twitter & Instagram.


text:
Sample ImageLists of names of physicians to whom certificates were issued by the State Board of Health of Missouri, 1888-1892. In the Annual Report of the State Board of Health of Missouri to the Governor, for the years 1888-1892.
Click to enlarge
Click to enlarge
Entries in these lists usually contain the physician's age, state or country of birth, name of school or college from which he or she earned a diploma or license, date diploma was received, and date of certificate. Some entries include residential address, total years of practice, and years of practice in Missouri.
Location: MO / 614 / M69
Categories: Professions


text:
We've got a great line-up for the second Salon at D-Lounge (101 E. 15th Street, just East of Union Square), this Monday at 7PM!
Dave Jay performs from JohnPaulGeorgeRingo, his smash hit Beatles solo show– come prepared to interact. This is your chance, hammy hams. Liverpool it up.
Michele Carlo gives us a slice of the storytelling that landed her her book deal: "Red Sheep: The Search for my Inner Latina".
Maddy Mann, everyone's favorite non-Catholic school girl who just likes the uniform, performs from her upcoming Terranova full-length solo show– rockin' out with the tweens, yo.
And Ash Gray brings his '60s and '70s-style vocal pop from Austin, Texas, to us… with the help of his Girls.
Everybody loves D-Lounge, and I'm thrilled to be there– see you all on Monday.
Posted on April 24, 2009


text: Not only does it not have to be a drag, summer school can be downright cool.At the Northern Ozaukee School District, even the teachers are discovering this.Shortly after Andrea Graham joined the district six years ago in her first job out of college as a Spanish teacher, she taught two years of summer school. Her class was remedial Spanish — not much of a departure from her usual curriculum and hardly a place the kids were eager to be."My husband laughed at me a little when I told him I wanted to teach summer school," Graham said of her bypassing the often-coveted carefree summer. "But the classes were very structured and it was what I knew."Also, the wage was attractive at about $23 per hour.Still, she didn't want to burn out, so the past two years she decided to take a break from it. Instead, Graham worked for a vendor at the festivals in Milwaukee.But this summer, with a new house in the mix, Graham decided to teach summer school again. This time she took a different route.Instead of going back to what she knew, she rolled the dice and pitched the idea of two new class concepts — a Harry Potter class, which would allow her to discuss a subject she loved, and Fiesta Fun, where instead of conjugating verbs she'd be taking students on imaginary trips to Spanish-speaking cultures all over the world."It's been as fun for me as it's been for the students," Graham said.But it came at a bit of a risk."The way it works is you pitch an idea for a class and if 10 or more kids sign up, you get a contract," she said. "Fiesta Fun was the one I was worried about, but next thing I knew I had 22 students on board."She also inherited two classes started by a teacher who left the district — a strategy class, which promotes critical thinking, and a Survivor class based on the TV show."The Survivor class has 29 kids, but I already knew that one would be popular," Graham said.As a result, she teaches from 8 a.m. to noon Monday through Thursday for a five-week period that wraps up near the end of July. And it's been an eye-opener for Graham."I've really enjoyed seeing the kids in a different setting, where it's more exploratory and fun," she said. "I've seen no behavior problems. It's just a great dynamic."And she has seen some kids blossom."I have a couple of students who I had during the school year and they were always so quiet and sweet, but in my summer-school class they've become incredibly competitive. It's been a fun transition to watch," Graham said.Graham also likes the idea there are no grades and no pressure – including on her."I'm so happy I don't have to give tests and grades and grade homework at night," she said. "There still is a lot of planning involved — probably more than I thought – but they do pay for one hour a day for prep time, so that helps and it's appreciated."Graham also enjoys meeting new kids, especially the ones at the elementary level. She teaches Spanish for grades seven through 12, so she knows some of them will someday be walking into her classroom."Yes, I think getting to know me beforehand helps a student be more comfortable, especially with a foreign language where everything is new to them," she said. "Being familiar with the teacher is a plus, because it's not like walking into a math class when it's a subject they've been working on most of their lives."


text:
Gabedit is a graphical interface for the FireFly, Gamess-US, Gaussian, Molcas, Molpro, MPQC, NWChem, OpenMopac, ORCA, and Q-Chem computational chemistry packages. It includes a 3D molecule editor and viewer. Most major molecular file formats are supported, and graphics can be exported in many formats.
|Scientific/Engineering Chemistry Visualization
|BSD Revised
|Operating Systems
|Windows POSIX Linux Unix
Release Notes: Minor bugs have been fixed. NWChem is now supported. The native Windows gamess is now supported.
Release Notes: Minor bugs were fixed. Atoms can be fixed during a molecular dynamics simulation. Migration from Cairo to OpenGL for drawing the geometry window. Migration from gtkglarea to GtkGLExt. Parallelization using OpenMP.
Release Notes: Minor bugs were fixed. The user can read the orbitals, geometry, and normal modes from a fchk Gaussian file. It can also read the orbitals from the new mopac aux file format (including the compressed format). The bond lengths can be fixed during an MD simulation. Partial optimization is now possible with the MM potential. A tool was implemented to predict the masses and abundances of the isotopes for a given molecule. A tool was implemented to compute the electrophilic, nucleophilic, and radical susceptibilities for a molecule.
Release Notes: Minor bugs have been fixed. All geometric changes can now be undone and redone. The user has complete control over the bonds displayed in a drawing. The user can set the value of the distance, bond angle, and dihedral angle. A Molecular dynamics conformational search is implemented using an MM potential (Amber 99) or a Semi-Empirical potential (from Open Mopac or PCGamess). Migration from GDK drawing functions to Cairo provides cross-device rendering for vector graphics. Geometry and curves can be exported in EPS, PS, PDF, or SVG file formats.
Release Notes: Minor bugs were fixed. Gabedit can draw ECD spectrum. You can export the OpenGL window in an EPS, PS, PDF, or SVG file. The user can change the coordinates (in an XYZ editor), bond, angle, and diherdral (in a Z-matrix editor) directly from the list of the editor. Gabedit can create slides for several orbitals with one click. Under Unix, the user can run gamess without any changes to the scripts of gamess. Gabedit can load the EPS charges from a mopac output file if one is available.
A Fluent OpenStack client API for Java.
A TWiki appliance that is easy to use and lightweight.


text:
Use these promo codes for Blush Bras and get your sexy on without breaking the bank.
Blush Bras has intimate wear for every occasion, budget and body type. Shop at this proudly Australian-owned online store the next time you're looking to spice things up in the bedroom or just want to feel sexy.
You can expect a user-friendly website, fast worldwide shipping and flexible returns.
Blush Bras discount codes and coupons
Free shipping + Panty
Free shipping and free panties on orders $99.
Bestselling products from Blush Bras
Blush Bras Review | Pros and Cons
- Wide range. Blush Bras offers an extensive range of sexy lingerie, swimwear, sleepwear, plus-size and maternity lingerie as well as a collection for men.
- Easy 30-day returns policy. You can return your items within 30 days of receipt for a refund or an exchange.
- Free shipping. Enjoy free shipping when you spend over $100.
- No live chat. There is no live chat service available on the website, but you can contact customer care via email or telephone.
How can I get free shipping from Blush Bras?
To enjoy free shipping, simply purchase over $100 worth of items. For orders below that amount, $9.90 is charged for standard delivery and an additional $5 is charged for express delivery to all Australian and New Zealand addresses.
What forms of payment does Blush Bras accept?
- MasterCard
- Visa
- American Express
- PayPal
What is the returns policy at Blush Bras?
Blush Bras offers a 30-day returns policy to ensure that you are 100% satisfied with the items you purchased. All items should be unworn, unwashed and with labels intact to qualify for return. This returns policy does not apply to stockings, hosiery, specialty and custom-made items.


text:
^ Great trolling, congrats!
...You are trolling, aren't you?
I think we find Yu-Na Kim so superior compared to the others skaters is because, she act like a «Queen». And, unfortunalety, I think the others skaters need to work this, if they really want to be at her level.
Theses are my impression about Yu-Na Kim that make her in a higher level skating.
1. She looks confident in her skating, we see no doubt in her eyes.
2. She wears dresses with long skirts who gives impression to look more mature.
3. She doesn't skate with cute and junior music, it's always somes musics selections who are powerful, masterful and bring emotion.
4. She express the music with her face and her body espress the music as well perfectly.
5. She try always to bring the audience in her performance. She looks at her audience like a star and at the right times.
I think even if you do perfect triple/triple or triple axel, if you don't have all of theses 5 statements, I think you miss the opportunity to catch Yu-Na because theses littles thing make the person looks more mature and better when you act like a «Queen».
I think that Why Tatianna Tarasova bring heavy music to Mao Asada at 2010 Olympic, because a soft and sweet Mao, will never look strong and superior even if it is beautiful.
Imagine if we see Yu-Na Kim skating to a princess and delicate program, this would not give the impression that she looks strong because it would not be powerful and impressive.
And having a dress cut in the butt doesn't look mature at all, it looks like a girl who doesn't want to grow up. Carolina Kostner need to bring something better if we want to consider her at Yu-Na level.
What do you think ?
What distinguishes Yu-Na Kim compared to other skaters? and Why we find her superior ?
^ Great trolling, congrats!
...You are trolling, aren't you?
I think if you changed every instance of "we" in your post to "I" it would go over better. Or if by "we" you mean yourself and a few of your friends and are not trying to speak for everyone on this board, make that clear. Telling the rest of us what we think is only going to breed disagreement.
Now, if you really want to talk about why YOU think Yu Na is hard to beat, or why you think JUDGES think so, and allow the rest of us to agree and disagree with each of your points according to our own thoughts...
Of the five points you list, only #1 really has anything to do with how she actually skates. 2 and 3 are purely external. 4 and 5 relate to a few of the component criteria, but by themselves wouldn't make much difference.
I'd say the reason why she wins, both in 2010 and 2013, is that she skates fast and steady, jumps big, rotates difficult jumps and lands them, and is generally solid on all her elements. Knowing that she can do all that helps her skate confidently. But the confidence alone won't win for her without the speed and the jumps.
I assume you are using the "royal we" meaning I . If not, are you actually being serious?.....
I find Caro superior to Yuna. Queen Yuna is great, Empress Caro is a goddess. LOL. I'm sure your post was half joking, but if Yuna wins again it will be strong, uplifting program music where she can skate fast, complete her huge 3x3's and go clean. She needs this to win. Her other elements are good and she is a very confident, consistent jumper. But it is the speed and huge/fully rotated triples that blow the judges away. She is a superior jumper. Hence the wins.
I was not saying ``we`` to include all of us in this forum.
Everyone can have their own opinion.
I was thinking that it should be interesting to see what are our thought about Yu-Na Kim ? And what the others skaters lack and needs to get to the level of Yu-Na ?
Yuna's biggest gain over other skaters is her high level of consistency
I also prefer Caro(because of some aspects of her skating).
But, the "overrall" package, Yuna is slightly better.
Yuna is more consistent.
Caro has better basics.
I assumed you were trolling because your initial post is uber talk of the most embarrassing kind, mixed with silly criticism of Yuna's perceived rivals (Mao is soft and weak, Carolina wears short dresses, so she is obviously not world-level material). Like gkelly said, Yuna wins because she has powerful jumps, because she doesn't really have a weak area in her skating, because she's consistent, fast and self-assured. It has absolutely nothing to do with the length of her skirt or the fact that she looks at the audience and makes them feel special.
Maybe this is hard for you to believe, but not every skater is or should be exactly like Yuna.
I think that someone's favorite skater really depends on what someone likes better.
For example... If spins, flexibility and "soft" style are important for someone, Carolina will not be this person's favorite skater(cup of tea).
In my case, I like speed, flow, elegance and interesting music choices.
I totally agree with gkelly.
coolboogie22, have you ever seen Yuna in a live competition?
She has an amazing speed and huge and consistent jumps.
I am a Japanese and a sort of Mao's fan, still I was really impressed with and
appreciate Yuna's performance when I saw her at the World 2009.
I think only Carolina can stand up to her so far.
Carolina's skating skill is much better thank Yuna, while Yuna exceeds her in jumps.
However, I don't buy Yuna's artistic expressions. I'm afraid most of her exhibition programs are
nowhere near her competitive ones. I think she is great athletically but not artistically.
I hope Mao could regain her triple Axel and make her jumps full rotated. If she could
make them, she would be able to beat Yuna. Hopefully in time before her retirement.
I think that in some elements YuNa is so far above almost everyone else that it's natural to try to analyze her mystique. But most of what you mentioned is just trimming, I think, or as we say the icing on the cake. The core of what makes YuNa unparalleled is her jumps and other skills. Along with YuNa, I also admire Mao and Carolina, for different reasons, and each of those ladies has excellent aspects that exceed YuNa's, but in terms of the overall package, right now YuNa is pretty hard to beat.
It's no secret on this board that I'm a huge Mao fan and would love to see her win gold in Sochi. (And Daisuke!) But if YuNa wins, I can hardly be disappointed, considering the kind of display she'll probably put on to earn her victory. Watching her is like watching Midori Ito in the old days. You could have preferred another skater in some way or other, but when Midori skated, you knew you were watching something you wouldn't see again any time soon. And indeed, we haven't seen the likes of Midori again from that day to this. I think YuNa will be like that.