US 20070156656 A1
The present invention relates to a subscription modeling system and methodology. A query processor receives subscription query and subscriber information and transforms the query and subscriber information into data. An index component propagates at least one database with the transformed data; and a matching component that associates the transformed data with event data to generate a database of notification data that can be delivered to subscribers. The invention provides for abstracting subscription and subscriber information (as well as event information if desired) to high-level classes (e.g., data fields)—thus the invention provides for modeling such notification related information as data. Subscription applications can thus be developed at high levels wherein complex subscription queries and subscriber information can be defined as data fields for example. Databases in accordance with the data fields can be propagated with subscription/subscriber specific information. The present invention takes advantages of the processing power associated with database engines (e.g., SQL server) to generate notifications via performing a join operation on the databases (e.g., subscription database(s), subscriber database(s) and event database(s)). Accordingly, notifications are generated en masse as compared to per subscription per subscriber. Thus the present invention provides for a highly scalable and efficient notification system.
1. A subscription modeling system, comprising:
a query processor that receives subscription query and subscriber information and transforms the query and subscriber information into data;
an index component that propagates at least one database with the transformed data; and
a matching component that associates the transformed data with event data to generate a database of notification data that can be delivered to subscribers, the matching component comprising an inference engine that facilitates inferring how data should be joined pursuant to subscriber preferences.
2. The system of
3. The system of
4. The system of
5. The system of
6. A method that facilitates providing notifications of information to recipients comprising:
storing subscription queries as data;
storing event information as data;
upon a notification event occurring performing a join operation on the subscription query data and the event data to produce notification data;
formatting the notification data; and
delivering the formatted notification data, the formatted notification data being delivered via a delivery channel, the delivery channel being an intermediary between a notification services application and a delivery service.
7. The method of
8. The method of
9. The method of
10. A method of subscription modeling, comprising:
providing an interface for an application developer to create an application definition file (ADF) in connection with modeling a subscription application;
providing for an application developer to define metadata nodes; and
providing for an application developer to prepare a subscription management application that allows users to subscribe to a subscription service and receive notifications, the subscription management application accepts and validates information about a subscriber, target devices that the subscriber is using for notification delivery, and subscriptions that specify information that the subscriber would like to receive.
11. The method of
12. The method of
13. The method of
14. The method of
15. The method of
16. The method of
17. The method of
18. The method of
19. The method of
20. The method of
This application is a continuation of U.S. patent application Ser. No. 10/180,662, which was filed Jun. 26, 2002, and entitled, “PROGRAMMING MODEL FOR SUBSCRIPTION SERVICES.” The entirety of the aforementioned application is incorporated herein by reference.
The present invention relates generally to computer systems, and more particularly to a system and method for implementing subscription applications.
Empowering people to make well-informed decisions has become increasingly important in today's fast-paced environment. Providing individuals with relevant and timely information is an essential element in facilitating such well-informed decisions. However, certain information that is noise to some may be very valuable to others. Additionally, some information can also be temporally critical and as such there may be significant value associated with timely delivery of such information. Moreover, some individuals prefer to stay apprised of information, even though not critical. A challenge is to provide information in a desired manner notwithstanding vast differences in individuals' information and delivery preferences.
Many conventional methods of gathering information require proactively requesting and searching for the information, often mandating sifting through dozens of messages, hundreds of articles, or referencing numbers or trends in reports. Furthermore, existing technologies assume that a person desiring such information is at a computer and has time and ability to retrieve the information. Moreover, people are increasingly mobile and cannot always be within close proximity of a computer. As a result, Internet-enabled mobile devices are becoming increasingly popular and have generated demand for services that deliver timely, personalized information regardless of location, on whatever suitable device is available and accessible.
Some have attempted to accommodate such demand by building systems that allow individuals to subscribe to an application that automatically delivers information of interest. However, most of such information delivery systems have been poorly built employing ad-hoc techniques. Additionally, conventional systems have difficulty with respect to scaling because of the complexity associated with processing meaningful queries in connection with a large number of disparate events or publications, and delivering results to subscribers given the varying types of individual delivery preferences as well as recipient device types. Consequently, conventional notification systems are inefficient, difficult to maintain and administer, unreliable, and are inadequate for hosting large scale applications.
The following presents a simplified summary of the invention in order to provide a basic understanding of some aspects of the invention. This summary is not an extensive overview of the invention. It is not intended to identify key/critical elements of the invention or to delineate the scope of the invention. Its sole purpose is to present some concepts of the invention in a simplified form as a prelude to the more detailed description that is presented later.
The present invention relates generally to a system and methodology for providing a notification system. The subject invention provides for facilitating notification services via a notification architecture that is highly scalable and can handle a large volume of queries with respect to a plurality of disparate subscription service providers and subscribers. One aspect of the subject invention provides for a notification platform that facilitates building and maintaining reliable, high performance, and scalable applications. More particularly, the platform of the subject invention provides for a manner in which to express event schema, subscription schema, notification schema, and match rules in a rich manner (e.g., XML) as well as allowing a subscription service provider to express content formatting and protocols that will be implemented in connection with distributing notifications. The invention includes an execution engine that integrates information propagated in accordance with the aforementioned schema, formatting and protocols to provide highly scalable notification services.
The invention provides for abstracting subscription and subscriber information (as well as event information if desired) to high-level classes (e.g., data fields)—thus the invention provides for modeling such notification related information as data. Subscription applications can thus be developed at high levels wherein complex subscription queries and subscriber information can be defined as data fields for example. Databases in accordance with the data fields can be propagated with subscription/subscriber specific information. The present invention takes advantages of the processing power associated with database engines (e.g., SQL server) to generate notifications via performing a join operation on the databases (e.g., subscription database(s), subscriber database(s) and event database(s)). Accordingly, notifications are generated en masse, as compared to per subscription per subscriber which can consume significant computing resources. By modeling the notification related information (e.g., subscription queries, subscriber information, event information . . . ) as data and leveraging the power of relational database systems to perform set-oriented manipulations on this data efficiently, the present invention provides for a highly scalable and efficient notification system.
The notification system architecture in accordance with one particular embodiment of the invention is composed of various modular components (e.g., event provider, a notification generation engine, and a notification distributor) that can be decoupled and replicated as necessary and run in different configurations to increase system scalability. The event providers collect events and submit the event information to the notification generation engine—an application can employ standard event providers or create custom event providers. Furthermore, the event provider is scalable, since many instances can be run on many machines so as to accommodate handling of large volumes of events.
The notification generation engine, as defined by application developers, processes subscriptions and creates notifications based on the various sets of events. Additionally, the engine supports immediate subscriptions (e.g., triggered when new events arrive) or scheduled subscriptions (e.g. triggered on a subscriber defined schedule). Further, the notification engine provides for historical or state-based services.
The notification distributor formats notifications and provides the formatted notifications to subscriber(s) via a delivery service. Application developers via employment of the subject invention can define transformation(s) from raw data to a formatted notification. Accordingly, the notification distributor can be configured to accept customized delivery routers, although several default routers or protocols can be supported (e.g. email, HTTP Post, Notify.NET, SMTP, MSAlerts, FTP, and Microsoft MIS). Furthermore, since multiple distributors can be executed for each service, the notification distributor is also scalable.
Another aspect of the present invention provides for modeling subscriptions as data as discussed briefly above. A significant task associated with a subscription application is to match incoming event data with a set of user subscriptions to determine what notifications should be sent. One challenge in the notification space is matching expeditiously a large number of complex queries (e.g. subscriptions) with a large number of events (e.g. publications) on a particular system. The present invention provides for modeling subscriptions as data as opposed to conventional modeling of subscriptions as queries. The application developer defines a few standard queries that are parameterized; individual subscriptions provide values for the parameters. The notification system of the subject invention can treat individual subscriptions as parameter data—evaluation of large numbers of subscriptions modeled as data becomes a set-oriented data processing problem, for which database engines are well suited. As a result, such implementation in accordance with the subject invention provides for highly scalable notification applications.
Another aspect of the invention relates to a programming model for subscription applications. The present invention provides an improved programming model for subscription applications whereby an application developer only has to generate a diminimus amount of code to build a fully functional and rich subscription application. This programming model reduces development time, facilitates application maintenance and increases application efficiency by leveraging the power of a server engine (e.g., SQL Server) to perform subscription and event matching. Additionally, the system achieves scalability by abstracting similarities between applications so that respective notification application(s) need to simply focus on respective implementation logic. Moreover, once semantics of an application are defined, reasoning about application behavior and valid implementation technique(s) becomes significantly easier for an application developer as compared to conventional schemes.
According to one particular programming model of the subject invention, subscription applications have various components (e.g., subscriber/subscription interface, event provider, match logic, notification formatter and delivery protocol) that facilitate effecting the advantages of the subject model. The subscriber/subscription interface provides a means by which information about subscribers and their subscriptions enter the system. An event provider component submits new events to the system. Match logic relates to rules for matching events with subscriptions, while the notification formatter component transforms raw notification data into a form presentable to a recipient. Additionally, a delivery protocol is defined as an implementation of the network protocol required to deliver the formatted notification to it intended recipient.
The programming model provides for the aforementioned components to be implemented via simply specifying customizing information regarding subscription schema, event schema, event source, match rules, formatting transforms, and protocol headers. The subscription schema is the structure and form of the data that is maintained for the respective subscriptions (e.g. for a stock alerting application the system would store the name of the stock symbol). Event schema is the structure and form of the events that enter the system (e.g. in the stock alert application each event would contain a stock symbol and its current price). Additionally, there can also be a notification scheme which can describe size and shape of outgoing notifications. The event source is simply the location from which events should be read, while the match rules are a set of rules for matching events with subscriptions. Formatting transforms are a set of transforms for formatting raw notification data. Finally, protocol headers are a set of configuration parameters for the set of delivery protocols that the notification system supports.
In accordance with another aspect of the present invention, a priority for a file such as text can be generated based on a classifier, such as by determining the likelihood that the text is of high or some other priority, for example. The classifier may be a Bayesian classifier, a support vector machine, and/or other type of classifier. The classifier can consider data features such as the structural relationship between the user and the sender of the text, as well as the time of events referenced in the text. Other considerations such as an expected loss of non-review of the text at a current time can be determined based on the priority, as well as an expected cost of outputting the text at the current time. The user can also be alerted on a mobile device, for example, in response to determining that the expected loss is greater than the expected cost, in accordance with a profile (e.g., information store of user preferences).
A current profile can be selected from a number of profiles, which can be editable by the user to reflect a different context (e.g., at home, at work, leisure time, busy, vacation, traveling). The profiles are schedulable on a per-day and by-time basis, and can be locked to remain active unless subsequently unlocked. The profile can have a priority threshold settable by the user thus controlling the amount and/or types of messages received, for example. A chunk setting associated with the profile can control delivery of the text. For example, text or other data may be delivered to a mobile or other communications device in conjunction with one or more other related texts or data. Alternatively, the text may be delivered to the communications device when a specified period has expired. Furthermore, the text may be delivered or diverted to a subsequent or alternative device, for example, if a primary device of the user, such as a desktop computer, is determined to be idle for a specified period of time.
The text or other data may be formatted prior to delivery to a receiving modality such as mobile device, for example. Formatting can include compression and fragmentation. In the case of the former, the text can be compressed according to a specified compression setting that is settable by the user. In the case of the latter, there is also a user-settable fragmentation setting. If the text or other data is an e-mail, the sender of the text may be sent an indication that the text has been delivered to the receiving device of the user. Furthermore, the sender may be sent an indication that the user is away from his or her primary device. Alerting the user may also consider the user's calendar and time of day. Events on the calendar can have an associated tag that specifies the degree to which the user is amenable to being interrupted during the event.
Thus, the subject invention provides for a platform that affords for subscription providers to design customized subscription services in an easy manner, and the invention provides for a powerful notification architecture that is highly scalable and powerful in that the data modeling in accordance with the present invention leverages the power of database engines to process highly complex subscriptions for large numbers of subscribers in an efficient and rich manner.
To the accomplishment of the foregoing and related ends, certain illustrative aspects of the invention are described herein in connection with the following description and the annexed drawings. These aspects are indicative of various ways in which the invention may be practiced, all of which are intended to be covered by the present invention. Other advantages and novel features of the invention may become apparent from the following detailed description of the invention when considered in conjunction with the drawings.
The present invention is now described with reference to the drawings, wherein like reference numerals are used to refer to like elements throughout. In the following description, for purposes of explanation, numerous specific details are set forth in order to provide a thorough understanding of the present invention. It may be evident, however, that the present invention may be practiced without these specific details. In other instances, well-known structures and devices are shown in block diagram form in order to facilitate describing the present invention.
As used in this application, the terms “component” and “system” are intended to refer to a computer-related entity, either hardware, a combination of hardware and software, software, or software in execution. For example, a component may be, but is not limited to being, a process running on a processor, a processor, an object, an executable, a thread of execution, a program, and/or a computer. By way of illustration, both an application running on a server and the server can be a component. One or more components may reside within a process and/or thread of execution and a component may be localized on one computer and/or distributed between two or more computers.
As used herein, the term “inference” refers generally to the process of reasoning about or inferring states of the system, environment, and/or user from a set of observations as captured via events and/or data. Inference can be employed to identify a specific context or action, or can generate a probability distribution over states, for example. The inference can be probabilistic—that is, the computation of a probability distribution over states of interest based on a consideration of data and events. Inference can also refer to techniques employed for composing higher-level events from a set of events and/or data. Such inference results in the construction of new events or actions from a set of observed events and/or stored event data, whether or not the events are correlated in close temporal proximity, and whether the events and data come from one or several event and data sources.
Referring initially to
Information that subscribers are interested in is collected as events. For example, a stock price at a specific time can be an event, as is a sports score, or a product delivery message—almost any suitable real world “happening” can be expressed as one or more events in accordance with the subject invention. A notification is a message delivered to a subscriber-specific device that contains information related to a subscription. A notification might contain a message about a new high value for a specific stock or the final score for a sporting event for example. The server notification services provide interfaces for gathering subscriptions and events, and then produces notifications based on this data.
Instead of treating individual subscriptions as queries, the notification system 100 treats individual subscriptions as parameter data (e.g., an application developer can define a set of parameterized queries, each of which can be a subscription class)—evaluation of large numbers of subscriptions becomes a set-oriented data processing problem, for which database engines (e.g., SQL server) are well suited. This is a foundation of the notification system-programming framework of the present invention. In this model, event-triggered subscriptions are evaluated by simply executing a database join between events and a potentially large set of subscriptions. In general, the notion of modeling subscriptions as data is based on an assumption that if the notification system 100 defines various domains, then many queries will have a common structure. For instance, many subscribers are interested in stock values, but at a finer granularity respective subscribers desire information about different stocks at different values. Thus, an interest in a particular stock can be expressed as “STOCKSYMBOL” and “TRIGGERPRICE” so as to provide a common framework or parameter(s) for such information. The semantics of how these parameter values are interpreted in relation to the event data can be are defined by the application. Thus, the application fixes the logic of how subscription parameters are interpreted (e.g., one app may want to alert when current price>trigger price and another may want to alert when current prce<trigger price)—such semantics can be resolved in advance by the application developer, and designed such that a subscriber cannot introduce new semantics.
As discussed in greater detail below, the subject invention also encompasses a programming model for building subscription applications. In subscription applications a user establishes subscriptions or declarations of interest in certain kinds of targeted information. Thereafter, when the information becomes available, the subscription application sends a notification to the subscriber. A function of a subscription application is to match incoming data with the set of user subscriptions to determine what notifications need to be delivered. The subject programming model allows an application developer to write a small amount of application specific code (e.g. a mix of XML, SQL, C#, C++, VB and other languages suitable for support by the .NET framework) to build a fully-functional, rich subscription application. To enable such functionality, an execution engine can be built on top of SQL Server and the .NET frameworks, for example, that implements fundamental data constructs and execution semantics common to subscription applications. Thus, the subject programming model reduces development time, facilitates application maintenance and increases application efficiency by leveraging the power of a server, for instance SQL Server, to do subscription and event matching.
The subject invention includes a declarative programming model for building subscription applications. The programming model provides a base framework for the structure of applications; and a developer can adapt the base framework to build a specific application.
With respect to the high-level schematic illustration of the system 100, five components of notification services cooperate to provide the functionality described above. A subscription management application 110 provides an interface for subscribers to submit subscriptions as input to the system 100. In particular, the subscription management application 110 provides numerous application programmer interfaces (APIs) that facilitate entities to provide subscription services via the system 100—the APIs are discussed in greater detail infra. Event data can also gathered from external sources via an event provider 120. For example, an event provider in accordance with the present invention can gather or be pushed relevant events from a plurality of resources (e.g., newspapers, magazines, websites, libraries, individuals, employers, government(s), etc.). A database engine 140 stores events and/or subscriptions in a data store 142, and also runs statements, like Transact-SQL statements, and stored procedures. It is to be appreciated that the database engine 140 can also process events versus subscriptions in real-time without persistently storing information. A notification application server 130 processes subscriptions based on a set of events and ultimately generates notifications that are delivered to subscribers, and which can be stored in the database 142 if desired. Finally, delivery channels 150 route the generated notifications to delivery services 160, which can include, but are not limited to, Exchange servers, SMS servers, and .NET Alert Web services. The deliver channels 150 and delivery services 160 are discussed in greater detail below.
Functionally, events are submitted to the server data engine 230 through a hosted event provider in notification services 220, or through a non-hosted event provider outside of notification services. If employing a non-hosted event provider, another system may be used that supports the event provider, such as a Web server. In addition, it is appreciated that the notification services 220 can be deployed on a single server or scaled across multiple servers.
Referring next to
The event provider 304 acquires events from event sources for the notification services system 302. Events represent data changes in the external world. For example, a stock price at a specific time is an event, as is a sports score, or a product delivery message. Stated differently, events are items that are potentially interesting to some set of users, and such set of users define the particular input data via subscriptions. The event provider 304 is employed to collect selected events from event sources for the notification services 302. Moreover, the event provider 304 can collect event data from a plurality of different sources including but not limited to communications, such as Internet and network-based communications, and telephony communications, as well as software services, XML files, applications, and databases.
Event sources are defined generally herein as that which generates events, which can also be referred to as notifications or alerts, intended to alert a user, or a proxy for the user, about information, services, and/or a system or world event. An event source can also be referred to as a notification source. Furthermore, the event provider 304 can monitor and gather data through various methods. Exemplary methods of gathering data include but are not limited to, monitoring directories for file additions, checking system and application log files for certain types of entries, trapping alerts from applications, monitoring web pages, tracking changes in database tables, and reviewing data provided by web services. In most cases, an event provider can gather data from any suitable resource, provided that an application is prepared that retrieves events from the resource. In general, there are a variety of different models that can be employed by the event provider 304 to collect data. These models can influence how often and under what circumstances the event provider 304 will collect events from event sources.
In addition, the event provider 304 can be notified or provided with data in at least one of two manners. The event provider 304 may wait for information to be “pushed” or sent to it, or it can “pull” information from a source by polling the source and gathering any new or updated data. For example, if a user desires to be notified each time a headline story on a favorite news page changes, the event provider 304 can be implemented so that it monitors that page and searches for changes to the headline text, for example. When the text changes, the event provider 304 can extract the new headline data for the notification services system 302. In the above example, the event provider 304 is responsible for gathering needed data, because the data is not provided to the event provider from the event source as would be the case with employment of a push methodology.
Furthermore, the event provider 304 can obtain new data for the notification system 302 based on either a schedule or on the occurrence of an event that meets predefined criteria. A scheduled event provider can run periodically, based on settings implemented by an application developer. The scheduled event provider will start running, retrieve and submit new event data and then hibernate until a next scheduled trigger time. An event-driven event provider can monitor an event source by running continuously. Thereafter, when data that meets a particular criteria for collection is made available the event provider will collect and submit the event. Alternatively, an event-driven event provider may only run in response to a callback function or some other external stimulus. This external function would then determine whether there is valid event data to collect, and use the event provider as the means of collecting such data. Once the event provider 304 collects data from an external event source, it writes the data to an event table in batches and saves the event table to database 308.
Data is preferably handled in batches for the sake of efficiency—event data and notification data are both batched. A batch, as generally defined herein, can be a set of data processed as a group. For example, an event batch can be a set of events that are submitted to notification services 302 at one time. Events can be written to the system either individually or as a group. When a single event is written to the system and there is not an event batch open, one can be created automatically. The new event and subsequent events are then associated with this automatically created batch. The event provider that is providing these events is programmed to close the current event batch periodically, which submits this batch of events for use in notification generation. A new event batch is then created with the first new event submission, and the cycle starts again. Furthermore, when events are written to the system as a group, each group is automatically assigned an event batch. When the writing process is completed, the event batch is closed so that these events are available for notification generation processes. In one particular embodiment of the invention, the batches are atomic (e.g., either the entire batch or none of it is submitted).
Referring briefly to
Turning back to
Turning now to
Notifications are processed in batches; unlike event batches (which are explicitly closed by the event provider), notification batches are automatically generated and closed by a generator function, so no application programmer interface (API) access is provided to them. However, developers can configure the notification batch size to meet specific application requirements.
In one particular embodiment of the invention, each time the notification generation process is started, a new notification batch record is created. Each notification record generated from that point in time until the process has finished will be associated with this batch. When processing is complete, the current notification batch is closed. This makes the notifications in this batch available for processing by other notification services components like the context analyzer 312 and the notification distributor 314 (
In many implementations, notification generation is likely to be more complex than simply matching an event to a subscription. For example, the notification engine 504 might generate a notification only if a new stock price is at least 5% more or less than the price in the subscriber's previous notification. To support state-based notifications such as this, the notification engine 504 employs at least one chronicle table 510 and multiple rules 512. The notification engine 504 may be used to store information such as previous events and notifications in a chronicle table 510. The notification engine then uses additional rules to either check or update the chronicle table 510. These rules should fire when events arrive or according to a pre-defined schedule.
Chronicle rules are sets of one or more queries that manipulate data in an event chronicle table 510. An event chronicle rule is processed for an event batch that contains events of the event class for which the rule is defined. Event chronicle rules are executed when the notification engine 504 processes an event batch. Furthermore, where an event batch is processed, the event chronicle rules are processed first, followed by the subscription event rules. If an event chronicle rule fails during execution, subscription event rules associated with the same event class are marked as failed. Further, the subscription scheduled rules, which processes information for scheduled subscriptions and may contain notification generation rules or chronicle update rules, operate independently of the event chronicle and subscription event rules. Therefore, the success or failure of the event-related rules will not affect the processing of the subscription scheduled rules. After the notification engine 504 executes the generation rules, resulting notifications are written to the notification table 508—from this table, the notifications are ready to be processed by the other notification services components.
More specifically, the content formatter 804 takes notification data, packaged into an array, as input. For standard delivery, there should be only one element in the array, which contains the information for a single notification record. For digest delivery, where multiple notifications are sent to a subscriber in a single message, there should be multiple elements in the array, each of which contains the data from one of the component notifications. The content formatter 804 then formats the notification fields for display, using the recipient information included in the notification data to determine the appropriate formatting. If digest delivery is employed, the content formatter 804 is also responsible for appropriately aggregating the component notification information. When the content formatter is completed with its task, it outputs a string containing the formatted data. The notification distributor 802 passes this string, along with some notification header information that it generates, to a delivery protocol. Internally, the content formatter 804 may use any suitable scheme to format the notification fields. For example, such scheme can be as simple as employing basic string manipulation, or it can be more complex, like using for example Extensible Stylesheet Language (XSL) transforms or ASP.NET rendering.
Generally, notification formatting is customizable and therefore can be left to the application developer to design. The notification system of the subject invention empowers developers by defining an interface to facilitate defining a notification services system object. The system will subsequently host, load, and call proper procedures for objects defined by an application developer. However, notification services system may provide a content formatter 804, such as for example XSL Transformations (XSLT), to assist application developers in quickly developing an application. The format can be utilized in an application after specifying some basic information about it in the ADF. Additionally, as noted developers are also free to develop a custom content formatter. A notification services API (described supra) provides an interface to assist developers with this matter.
Notification delivery is accomplished via the delivery protocols 806. When a batch of notifications becomes available, the notification distributor 802 reads the subscriber data in notification(s) to determine proper formatting. The distributor 802 then sends notification(s) by way of a delivery protocol 806 to a delivery service, such as a .NET Alerts or SMTP server, for example. More specifically, when the application is running, the distributor 802 reads each notification to obtain the subscriber delivery device and locale. The distributor then matches the combination of device and locale to a specific formatter object to generate the final notification. The notification itself can contain a combination of the raw notification data, data that is computed at formatting time, and text specified by the content formatter. These options allow for professional and user-friendly notification text and the inclusion of Web links and branding information.
The notification services system does not itself handle have to handle final delivery of notifications. Instead, the system uses delivery channels, which can be thought of as pipes to delivery services such as e-mail gateways or .NET Alerts servers. Specifically, a delivery channel consists of a protocol and an end point address. The administrator configures a delivery protocol 806 to provide a pipeline from the distributor 802 to the external delivery system that transmits the notification to the recipient. The distributor then packages notifications into a protocol packet and sends the notifications to one or more delivery protocols 806. The delivery channels 806 subsequently present the packets to an external delivery service, which ultimately sends the notification to the recipient.
The notification services system 302 (
Referring back to
Furthermore, digest delivery and multicast are two examples of methods available for notification delivery. In the digest system, multiple notifications within a batch are combined and sent to one subscriber as a single message. Thus, digest delivery could be employed if multiple notifications are likely to be sent to individual subscribers. This delivery method would be useful, for example, if the system needed to send a single subscriber three messages to his pager. In this case, it would be better to page the subscriber once with three messages than to page him/her three times with each individual message. Similarly, multicast delivery could be employed if multiple recipients would be receiving exactly the same message, for example a sports score, or news headline. In the multicast system, a single notification is formatted only once and then sent to two or more subscribers. Multicast is an optimization of the formatting step and can be used even if the protocol does not support true multicast delivery e.g., the formatting can be done once and the formatted message plus a list of recipients given to the protocol—the protocol could then send these out as multiple messages, but the formatting benefit is still realized. With respect to the distributor, it should be noted that retry functionality can be provided wherein the platform allows application developers to specify a pattern of retry attempts for failed notifications and retrys are implemented accordingly without requiring an application developer to specificy an inordinate amount of extra logic.
There is increasing interest in the class of applications broadly referred to as “publication-subscribe” (or pub-sub for short) applications. The basic idea of a pub-sub application is that data published by a publisher entity is sent to all subscriber entities that subscribed to the data. There are several properties of pub-sub applications that provide a simple taxonomy.
First, there is a difference between direct and brokered subscriptions. When subscribers set up subscriptions directly with publishers, this is deemed direct subscriptions. The alternative is allowing subscribers and publishers to register with a broker that acts as an intermediary between the parties. The broker model is advantageous especially with regard to scale and trust, but requires a large infrastructure.
Another distinguishing property of pub-sub applications is the distinction between topic-based and content-based subscriptions. This property is used to describe the richness of the subscriptions. Specifically, in topic-base or group-based applications, all the published data belongs to some specific topic area, and subscriptions are simply to a topic or channel of information. Content-based subscriptions are richer in that individual subscriptions may specify predicates or conditions that act as filters on the delivery of a particular data item generated by the publisher for the specific subscriber.
The final broad property of pub-sub applications also describes the richness of subscriptions. The distinction is between stateless and stateful subscriptions. In stateless systems, subscriptions specify simple (e.g., topic-based) or complex (e.g., content-based) filters on individual data items. In stateful systems, the subscription can involve data histories as well as application histories in deciding whether to send data to the subscriber, what data to send, and when to send it.
The following discussion relates to three examples of pub-sub applications. Each example involves human subscribers establishing up subscriptions and receiving notifications. There are a wide variety of other applications as well, but the following examples are illustrative of interactive schemes for ease of understanding. Additionally, it is important to note that in a business-to-business space, a number of applications may involve a program acting as the “subscriber” setting up subscriptions and receiving notifications rather than an individual.
One common and easily understood example is in the area of stock market alerts. In a stock typical market alert system, a customer purchasing stocks through an online trading site requests to be alerted when the stock being purchased crosses a particular value. The customer may then specify particulars for example:
Another example of a pub-sub application may be in the context of a business-to-customer environment. For instance, a delivery company may currently offer a delivery tracking service whereby a customer can proceed to a web site, type in a tracking number, and learn status of delivery. From the customer's point of view, a better service might allow the customer to receive an email alert with the name of the receiving party upon delivery of a parcel. Additionally, if the parcel has been delayed, an email might be sent to the customer notifying them of this fact and provide them with a link to a site that provides additional details.
Additionally, a sub-sub application could involve business-employee relations. For example, many corporations maintain internal web applications for their employees (e.g., payroll, benefits). In order to improve employee productivity, a corporation looks for mechanisms to educate its employees about their business and technical areas. In furtherance of this goal, some corporations could provide a library news alerting service that filters large volumes of news articles from a variety of sources and sends appropriate articles to each employee. Additionally the system might allow each employee to specify the following requests:
Some observations can be drawn from the above examples of pub-sub applications. First, the examples are specific instances of a broad class of applications that share similarities. Currently, most of these applications are either constructed in a one-off fashion, or built using proprietary technology. Clearly there is value in a common, well understood platform that abstracts similarities between applications, so that respective application(s) simply focus on specific implementation logic. Second, there is significant value in a rigorous definition of the platform and of the application semantics, rather than the loose definition that currently exists with many conventional systems and methods. Once semantics of the application are defined, it becomes easier for the application developer to reason about its behavior and for the system developer to reason about valid implementation techniques. As an analogy, the development of the relational model and transaction theory added significant value to the development and adoption of database systems. Furthermore, In order to span the full rich range of pub-sub applications of interest, any supporting infrastructure will need to support brokered, content-based and stateful applications. In addition, while some applications need to support rich expressive subscriptions, others need to be very scalable (e.g., support large numbers of subscriptions). Some applications need to both support rich subscriptions as well as be very scalable. As described below, many pub-sub frameworks are oriented towards either scalability or richness, but not both. Finally, many pub-sub applications are data-centric applications. Consequently, one expects that the principles of pub-sub applications should share some similarity with the principles of database systems.
In notification applications, a basic requirement is to evaluate subscriptions at correct times. Some subscriptions are event-triggered, meaning they are evaluated when events arrive. Other subscriptions are schedule-based, meaning that the subscriptions are evaluated at specific times. For small systems, such requirements can be met by simply defining each subscription as its own query, and running the queries at appropriate times. However, when there are large numbers of subscriptions, running thousands or millions of individual queries evaluation thereof does not scale well.
To solve this problem the subject notification system takes advantage of the realization that subscriptions typically share a common structure. Millions of users may want to receive urgent news notifications. Thousands of users may want to know the result of a business event. If subscriptions share a common structure, the subscriptions can be parameterized. The subject invention leverages off of this observation via employment of subscription templates based at least in part upon common structures associated with subsets of queries; and subscribers can simply propagate various parameters to customize respective template. Instead of treating individual subscriptions as queries, the notification system treats individual subscriptions as parameter data. The evaluation of large numbers of subscriptions becomes a set-oriented data processing problem, for which database engines like SQL are well suited. This is the foundation of the notification system-programming framework. In this model, event-triggered subscriptions are evaluated by simply executing a database join between new events that have arrived and a large set of subscriptions.
In general, the notion of modeling subscriptions as data is based on an assumption that if the notification system defines various domains, then many queries will be common. For instance, many subscribers are interested in urgent, but at a finer granularity respective subscribers desire information about different types of news. Thus, an interest in a particular news item can be expressed as “BREAKINGNEWS” and “BUSINESSNEWS” so as to provide a common framework or parameter(s) for such information.
The subject invention also encompasses a programming model for building subscription applications. In subscription applications a user establishes subscriptions or declarations of interest in certain kinds of targeted information. Thereafter, when the information becomes available, the subscription application sends a notification to the subscriber. A function of a subscription application is to match incoming data with the set of user subscriptions to determine what notifications need to be delivered.
The subject programming model allows an application developer to write a small amount of application specific code (e.g. a mix of XML, SQL, and possibly C#) to build a fully-functional, rich subscription application. To enable such functionality, an execution engine can be built on top of SQL Server and the .NET frameworks, for example, that implements the fundamental data constructs and execution semantics common to subscription applications. Thus, the subject programming model reduces development time, facilitates application maintenance and increases application efficiency by leveraging the power of a server, for instance SQL Server, to do subscription and event matching. The subject invention is a declarative programming model for building subscription applications. The programming model provides a base framework for the structure of applications; and a developer can adapt the base framework to build a specific application.
Each of the above components of a subscription application can be constructed on entities provided by the programming model simply by supplying customizing information. Such customizing information is supplied by an application developer in the form of a subscription schema, an event schema, an event source, match rules, formatting transforms, and event protocols. The subscription schema specifies the structure and form of the data that needs to be kept for each subscription. For example, in a stock alerting application, each subscription would store the name of each stock symbol. Event schema indicates the structure and form of the events that enter the system. For instance, in the stock alert application, each event would contain a stock symbol as a string, and its current price, represented as a floating-point number, for example. The event source identifies the location from which events should be read. Match rules are a set of rules, possibly specified in T-SQL, for matching events with subscriptions. For example, the match rules can be SQL joins that match respective tables of information relating to providing notification services in accordance with the subject invention. Formatting rules are a set of transforms, e.g. XSL Transforms, for formatting raw notification data provided by the matching logic. Protocol headers are a set of configuration parameters for the set of delivery protocols that are supported by the notification services engine.
In view of the foregoing structural and functional features described above, methodologies in accordance with various aspects of the present invention will be better appreciated with reference to
Expanding this model, notification services can implement the following broad categories of subscriptions:
The application developer is responsible for creating the programmatic elements of a notification services application; whereas the system administrator is responsible for installing, configuring and managing notification services. The individuals serving in these roles should work together when planning a system, to ensure that the system is written and configured to be optimal for their environment and business purposes.
The notification services platform (comprising the notification services service and the system databases), stores system data and provides functions for notification generation and distribution. The application developer is responsible for completing the following items:
The application developer creates an application by producing an application definition file (ADF), among other things. Specifically, the developer should include as input into the notification services system subscription schema, event schema, event source, match rules, formatting transforms and protocol headers, as defined above. The application developer should provide the aforementioned information in the ADF, which can be in formatted as an Extensible Markup Language (XML) document, for example. The schema of the ADF is defined as part of the programming model. More particularly, the XML schema defines XML elements, which enables the developer to specify the required information. The system then processes or compiles the ADF and saves its contents to the configuration database. Thereafter, the notification services system builds application specific database tables from the schema information provided. After these database tables are created, the application can be run by invoking a service (e.g., Win32) service provided by the programming model. This service employs the configuration information supplied in the ADF to customize components provided by the programming model. Additionally, the system provides a generic matching component that applies match rules provided in the ADF to the incoming event and subscription data. Furthermore, the system may implement a set of generic delivery protocols that deliver notifications for a specific application by reading the provided information into the application's ADF and tailoring their behavior accordingly. Thus, both static (database tables and structures) as well as dynamic (running code) parts of the application can be built from components of the system, and customized through the ADF Turning to
The event definitions 1410 specify structure of event data, the event providers that collect the data, and the structure of any event chronicles used by the application. The notification definitions 1420 specify the structure of raw notification data, the formatting for the messages that will be sent to subscribers, and the delivery protocols used to send the messages. The subscription logic 1430 defines how subscriptions are evaluated. Transact-SQL statements, for example, may match subscriptions to events, or evaluate subscriptions at certain recurring times. Additionally, subscription logic 1430 can be parameterized in a well-defined manner, so that individual subscriptions can personalize the subscription logic. Further, the subscription schema 1440 defines the structure of the subscription parameters, and evaluation times define when subscriptions are to be evaluated. Finally, the execution settings 1450 allow an application developer to enhance behavior and performance of the application when executed by notification services.
Additionally, the application developer may define application settings in several sections of the application definition file (ADF). These settings specify such items as the machines that host notification services, and execution schedules for notification services functions—they also document metadata about the ADF itself. This includes the structure of the events and subscriptions that the application accepts as input, and the structure of the notifications it produces. Examples of such metadata, described in detail below, include but are not limited to generator settings, distributor settings, vacuuming, version settings, notification history, application database information, application executing settings, and distributor information.
The notification services component 220 (
Functionally, the notification services generator attempts to execute event chronicle rules in parallel, followed by subscription rules (both event rules and scheduled rules). The generator will attempt to utilize threads available within the thread pool while executing rules. However, it should be noted that the generator should not execute event chronicle rules in parallel with subscription rules, since the chronicle table 510 (
The generator may then use the <ThreadPoolSize> value, if specified, to determine how many operating system threads it can use in this parallel processing. If no value is specified, the system may default, for example, to an allocation of up to 25 threads per processor for parallel rule execution. The default value is meant to make sure there is always a dedicated thread for each rule that is processed, thereby ensuring maximum throughput. Specifying a higher value for <ThreadPoolSize> would burden the system with thread-switching overhead without improving application performance. However, developers may be inclined to provide a lower value for the <ThreadPoolSize> element if the consumption of processor time is a concern of the system. By lowering the thread pool size, generator processing speed will decrease, but the generator's demand for system resources will also decrease.
The following example indicates that the generator for an application runs on the server SIF (Source Intermediate Format), and may process notification services requests on up to 5 threads. The machine name of the server that hosts the notification services instance that provides the generator function is provided in the <SystemName> element.
A value specified for distributor settings should also be considered in terms of a trade-off between improving application speed and monopolizing system resources.
A quantum is a block of time used by the notification services 302 (
Notification services stores event and notification data in server tables. Data becomes obsolete once the notifications related to it are delivered. Therefore, a vacuuming function may be used to identify and delete obsolete data. The vacuuming function of notification services is called the vacuumer. The vacuumer is important, because it reclaims disk space and enhances application performance by keeping the number of records in the system to a minimum, thereby improving the speed with which a server, such as SQL Server, can search application tables.
The vacuumer may run based on a schedule defined in a <Vacuum> element of an <ApplicationExecutionSettings> node (discussed in further detail infra).
Functionally, the vacuumer may operate by reading the system clock on the database server when it first starts executing. It can then identify all expired data, by determining if it is older than an interval specified in a <RetentionAge> element, based on the current time. For example, assume the following is true:
Generally, the vacuumer can operate to limit the number of records it deletes in one unit of work, based on a maximum number of records per table, thereby limiting the duration of each unit of work. This allows the vacuumer to function without taxing system resources and slowing application processing too much. Each time the vacuumer completes a unit of work, it can check the system clock to see if it has exceeded a particular duration, if one is actually specified. It also can check the database to determine if the application, with which it is associated, has been disabled. If either of these events has occurred, the vacuumer shall stop, log a message in an event log, and sleep until the next event.
Version information records provide a simple audit trail of application changes, if application developers desire to associate version numbers with the application definition file, or ADF. Developers can document such information by creating a <Version> node in the ADF. Documenting version information in the ADF allows developers to easily determine which version of notification services the ADF was written to work with. Even though notification services may not verify or require the version information in the ADF, maintaining version information is recommended. The <Version> node can include four child elements: <Major>, <Minor>, <Build>, and <Revision>. The following example depicts how a developer may set a version number of 18.104.22.168 for the application version:
Application developers may also wish to maintain history information about the creation and subsequent updates to your application definition file, or ADF. Developers can document this information by creating a <History> node in the ADF.
Documenting history information allows developers to easily see when the ADF was created, and when it was last modified. This information is for the developer's own use, and as such may not be referenced or validated in any way by notification services. Furthermore, if decided that document history information is not going to be specified, then the <History> node must not be included in the ADF.
The following exemplary code sets the application creation time as 10:30 GMT on Sep. 22, 2001, and the application last update time as 22:30 GMT on Oct. 25, 2001:
Developers may also specify information about an application database in a <Database> node of the ADF. However, if the developer chooses not to specify application database information, the <Database> node should not be included in the ADF. In the absence of such information, server defaults can be employed when creating the application database.
For example, a <Database> node may be defined to include four optional child elements:
The <NamedFileGroup> node might contain information about the application database data files on a particular server filegroup. One or more <NamedFileGroup> nodes could then be specified in the <Database> node. If the developer then chooses to create one or more <NamedFileGroup> nodes, then one of these nodes could represent the primary filegroup for the application, and named “Primary”. The primary filegroup might then be used as the default for the application database files if no <DefaultFileGroup> setting is specified. It should be noted that servers, such as SQL Server, provide such filegroups to simplify database administration, as well as to allow for optimal allocation of system data across multiple physical disks.
The <NamedFileGroup> element might contain two child elements: <FileGroupName> and <FileSpec>. Both of these elements of which could be required. Furthermore, the application developer may specify the name of a SQL Server filegroup they are referencing in this <NamedFileGroup> node in the <FileGroupName> element.
A <FileSpec> node might contain information about an application database data file that resides on the filegroup specified in the <FileGroupName> element. Developers may specify one or more <FileSpec> nodes in the <NamedFileGroup> node.
The <FileSpec> node could contains five child elements itself: <LogicalName>, <FileName>, <Size>, <MaxSize>, and <GrowthIncrement>
Application developers would then specify the logical name of the application database data file in the <LogicalName> element. The logical name could then be used to refer to the file in all Transact-SQL statements, for example.
The full path and physical file name of the data file might be specified in a <FileName> element. Further, developers may specify the initial size of the data file in the <Size> element. The value of this element might be a non-negative integer indicating the database size, with an optional suffix to indicate the unit of measure. The kilobyte (KB), megabyte (MB), gigabyte (GB), or terabyte (TB) suffixes may be used. If the suffix is not specified, the unit of measure may default to megabytes (MB), and the <FileSpec> should be excluded from the ADF.
Developers may also specify a maximum size of the data file in the <MaxSize> element. The value of this element could be a non-negative integer indicating the database size, with an optional suffix to indicate the unit of measure. The kilobyte (KB), megabyte (MB), gigabyte (GB), or terabyte (TB) suffixes may be used. If the suffix is not specified, the unit of measure will default to megabytes (MB). Moreover, if the <MaxSize> element is not specified, the element should be excluded from the <FileSpec> node.
Application developers may optionally specify the growth increment of the data file in a <GrowthIncrement> element. The value of this element could either be the increment size, or a percentage. If the developer chooses to indicate the increment size, the value should be specified as a non-negative integer, with an optional suffix to indicate the unit of measure. The kilobyte (KB), megabyte (MB), gigabyte (GB), or terabyte (TB) suffixes may be used. If the suffix is not specified, the unit of measure might default to megabytes (MB). If developers specify a percentage, the database will grow by that percentage of the current database size if it runs out of room and needs to expand. This element must be excluded from the <FileSpec> node if is not going to be used.
Furthermore, one or more <LogFile> nodes may be specified in the <Database> node. The <LogFile> node contains information about an application database log file. In particular, a <LogFile> node contains exactly the same elements as the <FileSpec> portion of the <NamedFileGroup> node. The only difference is that it is describing a log file rather than a data file.
Additionally, developers may specify the name of the default server filegroup that they wish to use for application database data files in a <DefaultFileGroup> element. This filegroup must be one of those specified in a <NamedFileGroup> node. Developers must exclude this element from the <Database> node if they choose not to use it.
Developers may specify the name of the default collation that they wish to use for their application database in the <CollationName> element. The collation of a database determines the languages it supports, and the sort order with which query results are returned. The value of this element could be the full collation name of either a Windows® or a SQL Server collation, for example. If the developer chooses do not provide a <CollationName> value, the application database collation will be the same as the default collation of the server instance that hosts the database. Moreover, developers must exclude this element from the <Database> node if they choose not to use it.
The following example depicts an application that has two named file groups, Primary and Secondary, and a log file named StockLog. It uses the Secondary filegroup as its default filegroup, and uses the SQL_Latin1_General_Cp437 BIN collation:
Developers are required to maintain information about the machines that host the notification services instances that provide the one or more distributor functions that service the application. This information may be stored in the <Distributors> node of the application definition file.
Within the <Distributors> node, developers may create a <Distributor> node for each distributor that services the application. The <Distributor> node can then be defined further as comprising three child elements:
The value of the <ThreadPoolSize> element will determine the amount of work the distributor can perform in parallel, and will affect the overall speed of the notification services system. Also, the number of distributors specified in the <Distributors> node will affect system performance.
The following is an exemplary application that has two distributors. The first runs on the server THORFINN, uses a distributor quantum period of 30 seconds, and uses the default thread pool size. The second runs on the server HARALD, uses the default distributor quantum period of 1 minute, and may process notification services requests on up to 5 threads:
It may also be desirable to maintain execution information about an application. This may includes such things as:
An <ApplicationExecutionSettings> node may be created in the application definition file (ADF) in order to specify values for these settings. However, such a node should be excluded from the ADF if the developer chooses not to specify application setting. System defaults could then be used in that case.
An exemplary <ApplicationExecutionSettings> node might include the following six optional child elements:
Developers might subsequently specify the value of the <QuantumDuration> element as defined previously.
Developers may also specify the number of quantums that the logical generator clock can fall behind the real time clock before processing of event chronicle rules is skipped in order to catch up. Developers could use the <ChronicleQuantumLimit> element to document this value. If a value for the <ChronicleQuantumLimit> element is not specified, then the system could default to a chronicle quantum limit of 1440 minutes (1 day, assuming a quantum interval of 1 minute) in this case.
Additionally, developers may specify the number of quantums that the logical generator clock can fall behind the real time clock before processing of subscription rules (both event and scheduled) is skipped in order to catch up. Developers should use the <SubscriptionQuantumLimit> element to document this value. If a value for the <SubscriptionQuantumLimit> element is not specified, then the system could default to a subscription quantum limit of 30 minutes (assuming a quantum interval of 1 minute).
Application developers may also indicate whether event and subscription rules are fired when an event batch comes in (known as sub-quantum sequencing), or whether they are fired once per quantum period, regardless of event batch arrival time (known as quantum sequencing). Developers should use the <ProcessEventsInOrder> element to document this information. A Boolean value should be specified for this element, with “true” indicating that sub-quantum sequencing has been selected and “false” indicating that quantum sequencing has been selected. If a value for the <ProcessEventsInOrder> element is not specified, the system could default to quantum sequencing.
A <PerformanceQuerylnterval> element may be specified to denote how frequently the high-overhead performance counters get updated. The <PerformanceQuerylnterval> element value should be specified as an XML duration data type. If a value for the <PerformanceQuerylnterval> element is not specified, the element must be excluded from the <ApplicationExecutionSettings> node. In such a case, the performance query interval will default to 1 minute.
Developers may specify how frequently old event, notification, and batch header data is removed from the system in the <Vacuum> element, as discussed above. The <Vacuum> element may comprise two optional child elements: <RetentionAge> and <VacuumSchedule>.
The minimum retention period for system data may be specified in the <RetentionAge> element. Data will not be vacuumed any earlier than the period specified by this element, although it will not necessarily be vacuumed immediately upon expiration of the specified period. The <RetentionAge> element value could be specified as an XML duration data type. Please refer to the information about the <QuantumDuration> element, above, for details on this format.
Scheduling information for the vacuuming process may be specified in the <VacuumSchedule> element. The <VacuumSchedule> element has one required child element, <Schedule>. Developers may specify multiple <Schedule> elements, one for each vacuuming period they would like to specify. The <Schedule> element has two child elements: <StartTime> and <Duration>. The <StartTime> element is required, while the <Duration> element is optional.
Information about when the vacuuming period will begin should be specified in the <StartTime> element. Coordinated Universal Time (UTC) notation should be used when indicating the <StartTime> value. If a date is indicated as well as a time for this value, only the time portion will be used. Vacuuming will start at the specified time on the current day.
Developers may optionally specify information about the length of the vacuuming period in the <Duration> element. Because vacuuming may occur daily, one must ensure that the value of the <Duration> element does not exceed 24 hours. The <Duration> element value must also be specified as an XML duration data type. Please refer to the information about the <QuantumDuration> element, above, for details on this format. If a value for the <Duration> element is not specified, the element must be excluded from the <Schedule> node. The vacuuming duration will default to 6 hours in this case.
Furthermore, vacuuming intervals cannot overlap. Notification services will determine when they would overlap, and will stop the earlier one at the start of the later one. For example, these intervals:
The following exemplary code illustrates creation of an <ApplicationExecutionSettings> element. The example indicates that this application has a generator quantum period of 5 minutes, with a chronicle quantum limit of 25 quantums (125 minutes, or just over 2 hours), and a subscription quantum limit of 12 quantums (60 minutes, or 1 hour). It will use sub-quantum sequencing, and will run the performance query once every hour. Vacuuming will run from 3:00 AM to 5:00 AM. and from 11:00 PM to 1:00 AM every day, removing data older than 3 days:
An additional responsibility of the application developer is specifying one or more event classes in the application definition file. Each event class corresponds to one particular kind of event accepted by an application.
The following six acts combine to define an event:
All of the above information can be stored in particular section of the ADF. Additionally, note that one <EventClass> node will need to be created for each event class that is ultimately defined. Below is an example of an event class definition.
To define field events a determination must first be made as to what fields are needed to store the event data. These fields may be documented in the <Schema> section of the <EventClass> node. One <Field> node should be created within the <Schema> section for each field you define.
An exemplary <Field> node may comprise three child elements:
A <FieldName> element may then be defined by documenting the field name in the <FieldName> element. Similarly, to define the <FieldType> element, the developer may document the field data type in the <FieldType> element.
The <FieldTypeMods> element might allow the developer to specify null and default settings for this field. These settings could be specified using SQL Server Transact-SQL syntax conventions, for example. Furthermore, if this element is not used, it should be excluded from the <Field> node.
The following illustrates an exemplary code section for defining filed events. For purposes of this example, assume two event fields are defined: a 10-character stock symbol field, and a stock value field that accepts monetary data:
Another action needed to define an event class is designating the filegroup. Servers, like Microsoft's SQL ServerTm, provide filegroups to simplify database administration, as well as to allow optimal allocation of system data across multiple physical disks. Optimized data allocation can be critical to the performance of high-volume SQL Server notification services applications.
Developers may specify the name of the filegroup upon which they wish their event table to be created as the value for this element. Additionally, if this element is not used, it should be excluded from the <EventClass> node. The event table will be created on the default filegroup for the application database in this case.
The following is exemplary code for designating filegroups. In this example, the “NSFiles” filegroup is selected as the default filegroup for the event table:
An optional action in defining an event class is providing statements, like Transact-SQL statements, to create one or more indexes on your event table. Indexes speed the location of particular records based on the data in a specified field. An index is automatically used when processing a Transact-SQL query that uses the table that the index is created on, provided that using the index improves query performance. The performance of an application can be significantly enhanced by creating appropriate indexes.
Developers may use one or more indexes on their event table by defining Transact-SQL statements to create them in the <IndexSqlSchema> node, for example. If developers do not use an index, they should exclude this node from the <EventClass> node.
The <IndexSqlSchema> node consists of one or more <SqlStatement> elements. Each <SqlStatement> will contain a Transact-SQL CREATE INDEX statement that defines an index on the event table. The event table name you will use in the CREATE INDEX statement is the concatenation of the event class name and the word “Events”.
An initial <SqlStatement> element with a statement to drop the index if it exists should always be included, prior to the <SqlStatement> element that creates the index. Without this statement, NSControl Update may raise errors related to attempting to create duplicate SQL Server objects if you ever run it against this application.
Furthermore, it should be noted that indexes specified in the <IndexSqlSchema> node of a <SubscriptionClass> are created against the subscription table itself. Indexes specified in the <IndexSqlSchema> node of an <EventClass> are created against a view that bears an identical name to the event table. This view contains only the most recent events, rather than the full set of all of the events in the system. Using this subset of events in a view significantly improves rule processing time by reducing the number of records involved.
The following is exemplary code illustrating the creation of an index. In this example a clustered index named “StockIndex” will be created on the StockSymbol field of the StockEvents table in the application database:
Optional act five in creating an event class is defining chronicle rules associated with the event class. If the application uses event chronicle tables, chronicle rules must be defined. The chronicle rules contain the queries, for instance Transact-SQL queries, which manipulate the data in the event chronicle tables. Chronicle rule information is specified in the <ChronicleRule> node. If a chronicle rule is not defined, then the <ChronicleRule> node must be excluded from the <EventClass> node. An exemplary <ChronicleRule> node comprises three child elements:
Developers can record the rule name in the <RuleName> element, which is a string value.
The <Action> element may be used to define queries. In particular, Transact-SQL queries, for example, may establish the actions that a chronicle rule should take. Developers define these queries in the <Action> element. The <Action> element may contain one or more Transact-SQL statements specifying the actions that this rule should take. Developers can either define a Transact-SQL query, or call a stored procedure that provides the same functionality. In addition, all statements that are defined in the <Action> element can be treated as part of the same transaction, so either they will all complete successfully or they all will be rolled back. If the event chronicle rule fails, an error will be logged to the system log. Also, any event subscription rules that are associated with events of this class will not be fired.
The <ActionTimeout> element specifies the permitted length of time for queries in the <Action> element to complete their task. If they are not completed during this time, the transaction containing them is rolled back, and an error is written to the system log.
The value of the <ActionTimeout> element should be specified in the format of an XML duration data type. The notation “P0DT00H00M00S” should be used, where P is the designator for the data type, D represents days, T is the designator for the time portion of the value, H represents hours, M represents minutes, and S represents seconds. Except for the P and T designators, unused duration elements may be skipped. For example, a timeout period of 2 minutes and 30 seconds may be represented as “P0DT00H02M30S” or “PT2M30S”. Furthermore, this element is not used, it should be excluded from the <ChronicleRule> node. The timeout interval defaults to 30 minutes in such a case.
The following exemplary code illustrates the creation of a chronicle rule. In this instance, event chronicle rule “StockEventChronRule” is being created. The rule first inserts new stock data into the chronicle table, then updates existing stock records in the chronicle table. Additionally, this rule is permitted five minutes to complete successfully.
The final optional action that contributes to the definition of an event class is defining one or more event chronicle tables associated with the event class. In general developers may want to define one or more event chronicle tables for use by an application. These tables can cache event data for use by scheduled subscriptions, or for some other purpose.
Developers may document chronicle table information in a particular section of the ADF, for example /EventClasses/EventClass/Chronicles. One <Chronicle> node exists in the <Chronicles> section for each event chronicle table to be defined. If no event chronicle tables are to be described, then the <Chronicles> node from the <EventClass> node should be excluded.
An exemplary <Chronicle> node may comprise two child elements:
The chronicle name should be indicated in the <ChronicleName> element. This can be a unique string value, for example. For consistency, the chronicle name defined here and the name of the chronicle table created in the <SqlSchema> element should probably be the same.
The schemas for creating event chronicle tables can be specified in the <SqlSchema> node. The <SqlSchema> node comprises one or more <SqlStatement> elements. Each <SqlStatement> may contain a Transact-SQL CREATE TABLE statement that defines an event chronicle table. It should include the table name, and the field names and their data types. It may include arguments for constraints, and any other optional CREATE TABLE parameters that the developer wishes to specify. The application developer may also choose to include a CREATE INDEX statement to create an index on your event chronicle table.
Specifically, the schema may be developed with any text editor, although SQL Query Analyzer, which installs with Microsoft® SQL Server™, is recommended for ease of use. This tool provides templates for creating tables and other objects in the Templates tab of its Object Browser.
An initial <SqlStatement> element should be included with a statement to drop the table if it exists, prior to the <SqlStatement> element that creates the table. Without this statement, NSControl Update may raise errors related to attempting to create duplicate SQL Server objects if you ever run it against this application.
The following is exemplary code illustrating the creation of a chronicle table. In particular, this example creates the event chronicle table “StockEventChron”, which consists of the StockSymbol and StockValue fields.
In addition to defining event classes, the application developer is responsible for specifying one or more notification classes in the application definition file. Each notification class corresponds to one particular kind of notification generated by the application. Additionally, there may be one or more notification classes defined for each notification services application developed. In general, there are nine acts that define a notification:
The aforementioned information is stored in a section of the ADF, for example /NotificationClasses/NotificationClass. Further, the application developer needs to create one <NotificationClass> node for each event class that they have defined. The following is an exemplary code defining a notification class.
Turning specifically to the first action, the application developer must name the notification class. The name for the notification class being defined should be a unique string value. Moreover, this name should be entered in the <NotificationClassName> element. For example, the following creates a notification class with a name of “StockNotification”.
Another action necessary to define a notification class is defining notification fields. These fields could be defined in the <Schema> section of the <NotificationClass> node. The <Schema> node perhaps comprising two child nodes: <Fields> and <ComputedFields>, where fields that store data within a database table are defined in the <Fields> node, and fields whose data should be computed at notification generation time are defined in the <ComputedFields> node.
In accordance with the above, the <Fields> and <ComputedFields> nodes might have subordinate <Field> and <ComputedField> nodes, each of which defines a single field for this notification class.
An exemplary <Field> node might comprise three child elements:
The <FieldName> element specifies the name of the field and should probably be a unique string value. The <FieldType> element specifies the data type of the field. While, the <DigestGrouping> element can specify the field to be used for matching when grouping notifications. Notifications with the same SubscriberDeviceID and matching values in any <DigestGrouping> fields can subsequently be grouped into a single notification. In one particular embodiment, SubscriberId, DeviceId, SubscriberLocale, plus any <DigestGrouping> fields can be set to have to match, and notifications required to all be in the same batch—thus in such implementation digesting is not peformed across batch boundaries.
An exemplary <Computedfield> node may comprise the following three child elements:
The <Fieldname> and <DigestGrouping> elements of a <ComputedField> node can be handled the same way as those in a <Field> node, as discussed above. The <SqlExpression> element may contain Transact-SQL expressions that compute the data for this field. Any Transact-SQL expression that can be evaluated as part of a SELECT query in the application database may be referenced in an <SqlExpression> element. This includes use of arbitrary constants, making SQL function calls, referring to data in chronicle tables, and so forth.
The following is an exemplary code section illustrating how a field is defined in a notification class. In this example, two notification fields are defined: a 10-character stock symbol field, and a stock value field that accepts monetary data. Additionally, a computed field is defined that determines how much the stock price has changed.
The fourth action that contributes to defining a notification class is designating a server filegroup on which the notification table should be created. Servers, such as Microsoft® SQL Server™ provide filegroups to simplify database administration, as well as to allow optimal allocation of system data across multiple physical disks. Optimized data allocation can be critical to the performance of high-volume notification services applications.
In particular, developers may specify the name of the filegroup upon which they wish the notification table to be created as the value for this element. Additionally, the filegroup named should be one of the filegroups defined as a <NamedFileGroup> in the <Database> node. Further, if this element is not used, it should be excluded from the <NotificationClass> node. In such a situation, a notification table will be created on the default filegroup for the application database.
The following is an exemplary code illustrating how a field group is specified. In this example, the “NSFiles” filegroup is selected as the default filegroup for the notification table.
According to the action numbered four above, documenting the content formatter that the notification class will use is required to define a notification class. A <ContentFormatter> node of the ADF may be used to specify information about the class that provides content formatting functionality to a notification class. This class can be part of a managed code assembly that contains all of the functions necessary to take raw notification data and format it appropriately for the locales, languages, and devices desired to be supported by the subscription application.
An exemplary <ContentFormatter> node might include three child elements:
Class name information can be stored in the <ClassName> element. Additionally, it is important that developers define a class name for any custom content formatters they create.
Class assembly information is stored in the <AssemblyName> element. Developers should specify the full path and assembly file name for any custom content formatters they create. In addition developers may use a parameter in the ADF and/or configuration file to represent the path to the file. This allows the application developer or the system administrator to control the physical location of the files without hard-coding a specific path in this element.
Any arguments that need to be passed to the content formatter when it is initialized ought to be documented in the <Arguments> section of the <ContentFormatter> node. Each argument will have its own <Argument> node within the <Arguments> section.
Furthermore, each <Argument> node might comprise two child elements: <Name> and <Value>. In this case, the argument name should be defined in the <Name> element, while the argument value should be defined in the <Value> element. Individual content formatter implementations can define what the recognized arguments are, and which of these are required or optional.
The following is exemplary code illustrates one technique of documenting a content formatter. In this example, the Stock. StockFormatter class provides the content formatting functionality, and is implemented in the StockFormat.dll file. It takes a single argument that tells it to output the content in an HTML format:
Defining a notification class also entails indicating whether the notification class uses digest delivery or multicast delivery. A <DigestDelivery> element might be used to indicate if notifications of this class are digested. Subsequently, developers can specify “true” as the value of the element if they wish to enable digest delivery. Similarly, specifying “false”, or excluding this element from the <NotificationClass> node, might provide for disabling digest delivery. For example, the following statement might be provided to enable digest delivery for this notification class:
If the notification class uses multicast delivery, a <MulticastDelivery> element can be employed to indicate that notifications are to be multicasted. Similar to the above, a developer could specify “true” as the value if they wish to enable multicast delivery and either specify “false”, or exclude the element from the <NotificationClass> node, to disable multicast delivery. The following exemplary statement may be used to enable multicast delivery for this notification class:
For example with respect to defining conditions for multicast grouping, notifications can have the same values for DeviceType, SubscriberLocale, and ALL of the notification and computed fields (e.g., and they should be in the same batch for one particular implantation).
In accordance with the above regarding defining a notification class, the act of specifying a notification batch size for notifications of this class is now described in more detail. In particular, a <NotificationBatchSize> element might be used to indicate the maximum number of notifications that may be included in a batch for the notification class. Furthermore, the <NotificationBatchSize> node should not be included in the <NotificationClass> node if it is not utilized. In such a case, there will be no limit to the number of notifications that can be included in a single batch. The following may be used to set the notification batch size for a notification class to 100:
If digest is not enabled, then the value is used as described. If digest is enabled, if NotificationBatchSize is N, the generator creates N batches, and inserts notifications into them in a round-robin—like fashion. In so doing, notifications going to the same subscriber together are kept together so that they can be placed into digest groups (e.g., for implementations where digesting is not performed across batch boundaries). Specifying one or more delivery protocols that a notification class will use for notification delivery is also necessary to define a notification class. Generally, this consists of specifying header or other notification-specific information required for messages created by this delivery protocol. A <Protocols> node can be used to document the delivery protocols that are valid for the notification class. Each delivery protocol could possibly include a <Protocol> child node within the <Protocols> node., the <Protocol> node comprising a <ProtocolName> element, and two additional child nodes: <Fields> and <ProtocolExecutionSettings>.
A developer must determine the name of the delivery protocol the application will use. This could be either a well-known protocol (like SMTP), or the name of a custom delivery protocol that documented in the <Protocols> node of the configuration file. The developer must enter this name in the <ProtocolName> element. The configuration file entry provides the mapping between an application developer-assigned delivery protocol name, and the class name of its implementation.
The <Fields> node documents the header fields that are required for a message that is to be created and routed by this delivery protocol. Each header field will have a <Field> child node within the <Fields> node. These fields can subsequently be provided to a deliver notification method of the class that implements the delivery protocol as a set of name/value pairs, for example, where the values are computed at notification delivery time.
A <FieldReference> element could be used if the value of the header field already exists within one of the notification fields or computed fields. The <FieldReference> element specifies the name of the notification or computed field whose value should be used in this header field. Both static and computed notification fields can be used to provide this value.
An <SqlExpression> element could be used if the value of the header field does not already exist within one of the notification fields. The <SqlExpression> element might contain a Transact-SQL expression that computes the data for this field. Any Transact-SQL expression that can be evaluated as part of a SELECT query in the application database may be referenced in an <SqlExpression> element. This includes use of arbitrary constants, making SQL function calls, referring to data in chronicle tables, and so forth. An <SqlExpression> element may also take an application parameter as a value, possibly defined in a <ParameterDefaults> node of the ADF.
An exemplary <ProtocolExecutionSettings> section may include the follwoing six child elements:
The <RetrySchedule> node might be comprised of one or more <RetryDelay> elements, each element defining a period of time after a failed notification delivery attempt that a retry should be attempted. For instance, if the retry attempted at the time specified by the first <RetryDelay> element fails, then another retry attempt will be made at the time specified by the second <RetryDelay> element, and so forth. It is to be appreciated that these are relative times, and not absolute. Thus, if the first attempt fails, the distributor waits the amount of time specified in the first <RetryDelay> element, then tries again, and so on thereafter.
The <FailuresBeforeLoggingEvent> element can be used to define the number of failures that may occur before a system event log entry is created to document the failure. The value of this element should be a non-negative integer. If a value is not specified for this element, the default is to allow five failures before logging an event.
The <FailureEventLogInterval> element specifies the minimum amount of time that must pass before consecutive failure events are logged. The value of the <FailureEventLogInterval> element should be specified in the format of an XML duration data type. Please refer to the <RetryDelay> element, above, for more information on this format. If a value is not specified for this element, the default interval is five minutes, for example. However, it is to be appreciated that the default can be “no limit”—log as often as errors occur.
The <FailuresBeforeAbort> element might be used to define the number of retry attempts that are permissible before aborting any further attempts. Moreover, it controls the number of consecutive delivery failures within a batch that are allowed before the entire batch is aborted (and might be retried later). If, for example, 20 notifications are attempted to be delivered in a row and they all fail, trying for that batch thereafter can be ceased.
The value of this element should be a non-negative integer. If a value is not specified for this element, the default is to allow 20 failures before aborting the distributor process.
The <MulticastRecipientLimit> element can be used to limit the number of recipients allowed for each multicasted notification. The value of this element should be a non-negative integer. If a value is not specified for this element, the default is to allow 100 recipients per multicasted notification.
The <WorkItemTimeout> element specifies the amount of time a distributor thread may take in order to complete a work item assigned to it. If the <WorkItemTimeout> value is exceeded, the work item is cancelled for that thread. The work item is then returned to the pool of available work items, so that it can be picked up by another thread and processed. This prevents a work item from being “lost”, by being assigned for processing by a thread, but not actually being completed because of some error.
The following example specifies SMTP as a valid delivery protocol for creating and routing notifications of this class, and provides values for the fields required to create an SMTP message. Notifications sent using this protocol are allowed three redelivery attempts if initially unsuccessful: one at 15 minutes after the first attempt, the second half an hour after that, and the final attempt yet an hour later. If multicast delivery is being employed, it will limit each multicast notification to 10 recipients. Work items will time out after 10 minutes.
The final action necessary to defining a notification class is specifying an expiration age for notifications of the class. The <ExpirationAge> element allows developers to specify the length of time permitted for notification re-sends before the notification data is determined to be out of date. If notification services cannot deliver a notification before it expires, it abandons the notification without delivering it. If an expiration age is not specified, notifications can be set to never expire, for example.
Further, the value of the <ExpirationAge> element can be specified in the format of an XML duration data type. Developers might use the notation “P0DT00H00M00S”, where P is the designator for the data type, D represents days, T is the designator for the time portion of the value, H represents hours, M represents minutes, and S represents seconds. Except for the P and T designators, unused duration elements may be skipped. For example, an expiration age of 1 hour and 45 minutes may be represented as “P0DT01H45M00S”, or “PT01H45M30S”.
The following exemplary code sets the expiration age of this notification class to 1 hour and 45 minutes:
Returning to the developer's responsibilities, the act numbered four states that the developer is responsible for specifying one or more subscription classes in the application definition file. Each subscription class corresponds to one particular kind of subscription accepted by the application. Specifying a subscription class includes writing rules, which are Transact-SQL statements that either generate notifications, or update chronicle tables. These rules can be invoked when an event provider submits a new batch of events, or on a scheduled basis, or both. In particular, seven acts define a subscription:
Scheduled rules are processed each time notifications are generated for scheduled subscriptions of this class. This step is conditionally optional. Developers are not required to have a <ScheduledRules> node, but they must have a notification generation rule defined in either this node or an <EventRules> node.
All of the above information may be stored in a specific section of the ADF for the application that uses the subscription class. Furthermore, the application developer may create one <SubscriptionClass> node for each subscription class that the developer defines. The following is an example of a subscription class definition.
Defining a subscription necessitates naming the subscription class. Specifically, the name for the subscription class can be entered as a string value in a <SubscriptionClassName> element. For example, the following code can be used to create a subscription class with a name of “Stock.”
Additionally, to define a subscription class the fields that make up the subscription class should be defined. As mentioned above, the field definitions can be used to validate any subscription data supplied by a subscription management application, for example XML code. They may also be used to automatically create the server table that stores the subscription data. The server table creation occurs when the application is added to notification services by the system administrator, using the NSControl Create or NSControl Update commands, for example.
In order to define subscription fields, a determination should be made about what fields are needed to store your subscription data. Application developers should document these fields in the <Schema> section of the <SubscriptionClass> node.
An exemplary <Field> node may be comprised of the following three child elements:
The <FieldTypeMods> element can be used to enable developers to specify null and default settings for this field. Developers could specify these settings using SQL Server Transact-SQL syntax conventions, for example.
The following exemplary code illustrates how a subscription filed may be defined in accordance with the subject invention. In this example, two subscription fields are defined: a 10-character stock symbol field, a stock trigger value field that accepts monetary data, a 10-character subscriber ID field, a 25-character subscriber device name field, and a 5-character subscriber locale field:
The third act listed in defining a subscription application is designating the server filegroup for the subscription table. As mentioned above, this step is optional, as the subscription table may be automatically created on the default filegroup if no other is specified.
Servers, like Microsoft's SQL Server™, provide filegroups to simplify database administration, as well as to allow optimal allocation of system data across multiple physical disks. Optimized data allocation can be critical to the performance of high-volume notification services applications.
Developers may specify the name of the filegroup upon which they wish the subscription table to be created as the value for this element. The following exemplary code demonstrate a simple method used to specify the name of a filegroup.
Defining a subscription class may optionally involve providing statements, like Transact-SQL statements, to create one or more indexes on your event table. Indexes speed the location of particular records based on the data in a specified field. Furthermore, an index may be automatically employed when processing a query that uses the table that the index is created on, provided that using the index improves query performance. In brief, application performance can be significantly enhanced by creating appropriate indexes.
The following exemplary code illustrates the creation of an index. This example specifies that a clustered index named “StockSubIndex” will be created on the SubscriberId field of the StockSubscriptions table in the application database:
In defining a subscription class, the event rules associated with the subscription class should be specified. Event rules are named sets of one or more queries, for example Transact-SQL queries, that either create notifications or manipulate the data in a subscription chronicle table. Event rules are processed each time a new event batch is processed. This step is conditionally optional: developers are not required to have an <EventRules> node, but the must have a notification generation rule defined in either this node or a <ScheduledRules> node.
Developers may use the <EventRules> section to document any rules associated with the subscription class that should be executed each time a new event batch is processed. Developers might create one <EventRule> node within the <EventRules> section for each event rule they define.
In addition, if event-driven subscriptions are provided, an <EventRule> node must be used to specify the notification generation rule. The notification generation rule can be, for example, a Transact-SQL query consisting of a SELECT statement and a WHERE clause. The rule matches the most recent batch of events from the event table with the subscription information, based on the comparisons specified by the application developer. This query also contains a notification function. Calling this function triggers a notification.
Furthermore, if any subscription chronicle tables are being used to store subscription data, developers may want to define one or more rules that operate upon them as well. These queries can add, change, and delete subscription data in the chronicle tables, so that it is in the correct state for use by the application.
An exemplary <EventRule> node may be comprised of the following four child elements:
The <RuleName> element might be a string value indicating the name of the rule. The <Action> element may contain one or more Transact-SQL statements, for example, specifying the actions that this rule should take. Developers may either define a Transact-SQL query, or call a stored procedure that provides the same functionality. Additionally, all queries in the <Action> element are part of the same transaction, so they either all complete successfully or they all are rolled back. If the event rule fails, an error is logged to the system log.
The <ActionTimeout> element specifies the length of time permitted for the queries in the <Action> element to complete. If they are not completed during this time, the transaction containing them is rolled back, and an error is written to the system log. Additionally, the value of the <ActionTimeout> element could be specified in XML duration data type format. In such a case, the notation “P0DT00H00M00S” might be used, where P is the designator for the data type, D represents days, T is the designator for the time portion of the value, H represents hours, M represents minutes, and S represents seconds. Except for the P and T designators, unused duration elements may be skipped. For example, a timeout period of 2 minutes and 30 seconds may be represented as “P0DT00H02M30S”, or “PT2M30S”.
The <EventClassName> element may be employed to specify the event class associated with the execution of these rules. Only the processing of event batches of the specified event class causes execution of the rules.
The following exemplary code illustrates how an event subscription rule is created. This example specifically creates the subscription event rule “StockSubscriptionNotifyRule”, which creates event-driven notifications, based on the processing of event batches containing events of the Stock class. This rule is permitted one minute to complete successfully.
Act six in defining a subscription class is defining schedule rules associated with the subscription class. Specifically, the <ScheduledRules> section may be used to document any rules associated with this subscription class that should be executed each time notifications for scheduled subscriptions are generated. One <ScheduledRule> node should be created within the <ScheduledRules> section for each event rule defined.
If scheduled subscriptions are being provided for, a <ScheduledRule> node can be used to specify the notification generation rule. The notification generation rule may be a Transact-SQL query consisting of a SELECT statement with a WHERE clause. In such a case, the rule matches the events information from an event chronicle table with the subscription information, based on the comparisons desired by the application developer. This query also contains a notification function. Furthermore, calling this function triggers a notification.
If any subscription chronicle tables are being employed to store subscription data for use in the application, then the application developer may want to define one or more rules that operate upon them as well. These queries can add, change, and delete subscription data in the chronicle tables, so that it is in the correct state for use the application.
An exemplary <ScheduledRule> node comprises four child elements:
The <Action> element may contain one or more Transact-SQL statements specifying the actions that this rule should take. Developers may either define a Transact-SQL query, or call a stored procedure that provides the same functionality. Furthermore, all queries that are defined in the <Action> element are part of the same transaction, so they either all complete successfully or they all are rolled back. In addition, if the scheduled rule fails, an error is logged to the system log.
The <ActionTimeout> element specifies the length of time permitted for the queries in the <Action> element to complete. If they are not completed during this time, the transaction containing them is rolled back, and an error is written to the system log. Additionally, the value of the <ActionTimeout> element should be specified in XML duration data type format. In such a case, the notation “P0DT00H00M00S” must be used, where P is the designator for the data type, D represents days, T is the designator for the time portion of the value, H represents hours, M represents minutes, and S represents seconds. Except for the P and T designators, unused duration elements may be skipped. For example, a timeout period of 2 minutes and 30 seconds may be represented as “P0DT00H02M30S”, or “PT2M30S”.
The following exemplary code illustrates how scheduled rules are defined. This example creates the subscription schedule rule “StockSubScheduledNotifyRule”, which creates scheduled notifications. This rule sends a stock notification according to a user-defined schedule. The notification contains information about stocks whose value exceeds the trigger value that the user selected. This rule is permitted 45 seconds to complete successfully:
Finally, to define a subscription class one or more subscription chronicle tables associated with this subscription class should be defined. Application developers may want to define one or more subscription chronicle tables for use in their application. These tables can be used to store subscription data in order to avoid duplications, to conditionally generate notifications based on those previously sent, or for any other reason. Furthermore, subscription chronicle table information may be documented in a particular section of the ADF, for example
SubscriptionClasses/SubscriptionClass/Chronicles. In addition, developers should create one <Chronicle> node in the <Chronicles> section for each chronicle table they define. However, if chronicle tables are not going to be used, then the <Chronicles> node should be excluded from the <SubscriptionClass> node.
An exemplary <Chronicle> node includes the following two child elements:
The schema may be developed with any text editor, although SQL Query Analyzer, which installs with Microsoft® SQL Server™, is recommended for ease of use. This tool provides templates for creating tables and other objects in the Templates tab of its Object Browser.
Furthermore, in this illustrative example, developers should always include an initial <SqlStatement> element with a statement to drop the table if it exists, prior to the <SqlStatement> element that creates the table. Without this statement, NSControl Update may raise errors related to attempting to create duplicate SQL Server objects if developers ever run it against this application.
The following exemplary code shows how a chronicle event table is defined. This example creates the subscription chronicle table “StockEventChron”, which consists of the SubscriberID, EventID, StockSymbol and StockValue fields:
The last components that need to be created by the application developer to define an application are a subscription management application and, optionally, custom event providers, content formatters, or delivery protocols. Referring to
Finally, the application developer may optionally create custom event providers, content formatters, or delivery protocols. For many applications, however, these custom objects are not always necessary because standard event providers, content formatters, and delivery channels are provided with notification services.
As described above regarding notification services architecture, event collection is the process of obtaining event data from one or more sources such as XML files, applications, or databases and making this information available to a notification application. In the notification services system, event collection is the responsibility of an event provider.
An event provider obtains event data from an external event source and submits the data to notification services using an event interface. The event provider writes the data to an event table in batches. When the provider commits a batch of data to the event table, the notification generator can then process the batch and create notifications, either as soon as the batch of events arrives or according to a schedule.
The managed API 1630 uses event object 1622 and event collector object 1624 to submit events 1602 to the event table 1550. Using the name of the fields in the event table 1650, an application submits data, which is converted to an event object 1622, and then commits the data to the event table 1650 using the event collector object interface. Alternatively, the COM API uses COM interop to expose the subscriber, subscription, and event classes as COM interfaces.
The XML API 1630 provides a means to bulk-load XML data. The XML event provider collects an XML document or stream from an event source and submits the data to the XMLLoader interface 1632, which then writes the events to the event table.
The SQL API 1640 uses stored procedures to load event data from database objects. Typical ways of using the SQL event provider are to invoke the provider using a stored procedures 1642 or to run a query according to a schedule. The event provider receives a result set and writes it to the event table using the API stored procedures. This API is helpful because if a user already has data stored in a SQL database, there is no need to remove and create a new object for each entry of data, as the managed API 1620 does above. The SQL API 1640 simply needs to load the formatted information into the event table. It is to be appreciated that a join operation does not have to be coincident with an event submission, and that such join operation can occur substantially after events are submitted.
When deploying the notification system application, more than notification services components must be configure and supported. The data storage system, the subscription collection systems, and the delivery systems must all be deployed or configured. Additionally, instances and versions are two important factors to consider when deploying a notification system such as the system described herein. Depending on application requirements and optimal configurations, one may run multiple instances and multiple versions on a single system, or instances may span multi-machine configurations.
The subject notification system is based on instances. An instance is a single, named configuration of notification services that hosts a set of applications. The applications hosted by an instance use the same configuration and can be administered as a group. Instances also provide many benefits. First, because each instance has its own registry entries and service, one instance may run separately from other instances. In addition, all applications hosted by an instance share the same set of subscriber data, which may influence which applications you want to group under a single instance. Finally, instances can be scaled across multiple servers, providing flexible configuration and allowing a higher throughput of data and notifications.
When administrators deploy notification services, they create a configuration file that specifies the instance name, database system, database settings, applications, protocols, and delivery channels. The administrator then creates the instance using a command-line utility like NSControl. In the single-server scenario, the event provider, generator, and distributor processes are all hosted by a single service. The event provider collects data, the notification engine processes subscriptions, the context formatter formats notifications, and the distributor distributes them to the delivery service(s). Administrators may configure this system by creating the instance and registering the instance on that server. When an instance must be scaled out to support larger applications, the event provider, notification engine, and distributor processes can be scaled out across multiple servers.
Additionally, the subject notification system allows installation of multiple versions of notification services on a single system. This allows multiple instances to each run a different version of notification services if required. It also allows a single instance to be upgraded or downgraded easily.
Applications are deployed through instances. Deploying an application requires administrators to have all of its supporting files, such as the ADF and any custom objects, and the administrator specify application information in the instance configuration file. When administrators create the instance, the hosted applications are deployed with the instance.
The system administrator is also responsible for implementing applications in production. Ensuring that applications operate optimally requires careful planning, installation, configuration, management, and monitoring. Planning and installation is the process of defining what infrastructure is necessary for applications, planning the system architecture, and then installing system components on each server. Configuration is the process of creating notification services instances. This requires version management and careful planning so that system maintenance and upgrades cause minimal service interruptions. Management is similar to the management of SQL Server databases. This involves defining security, performing backups, and running maintenance jobs. Monitoring is extremely important for proper system operation. When an application is in production, the system administrator must monitor the application to ensure that the notification services system is receiving events and also generating and distributing notifications. It is also very important to make sure the delivery service is delivering the notifications. Through the aforementioned tasks, the system administrator defines the system configuration and ensures the system is operating as planned.
The notification services framework allows one to create and deploy notification applications quickly and easily. The notification services APIs streamline input of event, subscriber, and subscription data. The notification services engine provides functions to seamlessly generate, format, and route notifications to external delivery systems based on this information.
Notification services is intended to integrate with existing notification delivery services. Notification services will hand notification messages to these services for transportation to the subscriber's target device. .NET Alerts and SMS phone delivery are good examples of external delivery services, although neither of these services are required for a notification services application. Some of the benefits of programming with the notification services framework are:
A notification services application runs on a platform based on the notification services engine and a server such as SQL Server. A notification services application is comprised of six primary components:
The application developer should create the ADF and the subscription management application. The configuration file should also be created, but this task may fall to a person like the system administrator.
The subscription management application is external to the notification services system, and must be tailored specifically for use with the notification service offered. Furthermore, the notification services system provides APIs to assist in the development of this component.
The subscription management application is the application that subscribers use to submit and manage their subscriptions. More specifically, this component collects subscriber, subscription, and device information. This application may be designed either using managed or unmanaged code. If subscription management applications are designed in managed code, or code that is under control of the runtime, subscription-related classes provided by the notification API may be used to write data to the database. If the subscription management application is designed in unmanaged code, or code that runs outside runtime, COM (Component Object Model) interoperability interfaces, provided by the notification API may be used to write data to the database.
Notably, the generator function of the notification engine matches the event and subscription data using a query, known as a rule, and produces notification data based on the results. The generator is run on a scheduled basis, which is determined by the developer or system administrator and specified in the ADF.
The context formatter component of the delivery system formats the notification data and then distributes the resulting notifications. It is run on a scheduled basis, determine by the system administrator and specified in the ADF.
Finally, the notification services system provides for data and subscription security. The system security encompasses securing data and systems from unauthorized access, assigning permissions to users to perform necessary tasks, and ensuring that applications can read and write data as necessary. Securing notification services primarily involves securing the databases used by the notification services system. All access to read and write events, subscriptions, and notifications is controlled through database security. Any application or user that must read or write data, including the notification services system, must have permissions granted on the appropriate database objects. For example:
To simplify the administration of permissions on database objects, the notification services system includes a set of pre-defined database roles in each database. Administrators assign user accounts used by services to these roles. Database roles are divided into two categories: instance database roles and application database roles. The instance database is used primarily for subscriber management and message delivery. The application database is used for processing subscriptions and generating notifications. Therefore, users and applications perform different task in these two types of databases. Most accounts require permissions in both databases. In the instance database, you typically add administrators, the service account, and subscription management application accounts to the roles. In the application database, you typically add administrators, the service account, non-hosted event providers, and subscription management application accounts to the roles. The primary differences between the permissions in the instance and application databases are the sets of objects each role provides access to.
Additional security issues arise because the notification services system must be able to access resources on the local system, as well as over the network if applications are distributed across multiple servers. Once the notification system is run an instance of notification services is created. Developers may then assign two accounts to this service for security purposes. One is a service account and the other is a server account, for example a SQL Server account. The service account gives the service permissions on the local system and on the network, while the server account gives the service permissions only for the server.
The following discussion relates to a system and methodology to enable a plurality of information associated with generated notifications or messages, for example, to be automatically prioritized by a priorities system for transmittal to a user or system. The priorities system can utilize classifiers that can be explicitly and/or implicitly trained to prioritize one or more received messages according to a learned importance to the user. As an example, notifications can be classified as high, medium, low or other degrees of importance via a training set of examples or types of notifications having similar degrees of importance. A background monitor can be provided to monitor a user's activities regarding message processing to further refine or tune the classifier according to the user's personal decisions relating to message importance. Other priorities classifications can involve determinations relating to a loss associated with a time for delayed review or processing of the message.
After messages or other notifications have been automatically prioritized, users can review more important messages without having to sort through a plurality of lesser important and/or non-relevant messages. Messages can further be collected into one or more folders in terms of importance, wherein users can review messages of similar categorized importance at a desired time. Other systems such as a notification platform can direct the messages to one or more notification sinks (e.g., mobile phone, hand held computer) based upon the determined priority. For example, if an e-mail message were determined to be of high importance, the notification platform can determine if the user is presently at their desk to receive the message. If not, the notification platform can re-direct the message to a most likely communications device currently at the disposal of the user such as a cell phone or home laptop computer, wherein the user can be notified of the important or urgent message.
According to another aspect of the present invention, a notification platform 1517 can be employed in conjunction with the priorities system 1712 to direct prioritized messages to one or more notification sinks accessible to users. As will be described in more detail below, the notification platform 1717 can be adapted to receive the prioritized messages 1716 and make decisions regarding when, where, and how to notify the user, for example. As an example, the notification platform 1717 can determine a communications modality (e.g., current notification sink 1718 of the user such as a cell phone, or Personal Digital Assistant (PDA)) and likely location and/or likely focus of attention of the user. If a high importance e-mail were received, for example, the notification platform 1717 can determine the users location/focus and direct/reformat the message to the notification sink 1718 associated with the user. If a lower priority message 1716 were received, the notification platform 1717 can be configured to leave the e-mail in the user's in-box for later review as desired, for example. As will be described in more detail below, other routing and/or alerting systems 1719 may be utilized to direct prioritized messages 1716 to users and/or other systems.
In the following section of the description, the generation of a priority for text files such as an e-mail is described via an automatic classification system and process. The generation of priorities for texts as described can then be employed in other systems, such as a notification platform that are described in more detail below. The description in this section is provided in conjunction with
Referring now to
According to one aspect of the invention Support Vector Machines (SVM) which are well understood are employed as the classifier 1820. It is to be appreciated that other classifier models may also be utilized such as Naive Bayes, Bayes Net, decision tree and other learning models. SVM's are configured via a learning or training phase within a classifier constructor and feature selection module 1826. A classifier is a function that maps an input attribute vector, x=(x1, x2, x3, x4, xn), to a confidence that the input belongs to a class—that is, f(x)=confidence(class). In the case of text classification, attributes are words or phrases or other domain-specific attributes derived from the words (e.g., parts of speech, presence of key terms), and the classes are categories or areas of interest (e.g., levels of priorities).
An aspect of SVMs and other inductive-learning approaches is to employ a training set of labeled instances to learn a classification function automatically. The training set is depicted within a data store 1830 associated with the classifier constructor 1826. As illustrated, the training set may include a subset of groupings G1 through GN that indicate potential and/or actual elements or element combinations (e.g., words or phrases) that are associated with a particular category. The data store 1830 also includes a plurality of categories 1 through M, wherein the groupings can be associated with one or more categories. During learning, a function that maps input features to a confidence of class is learned. Thus, after learning a model, categories are represented as a weighted vector of input features.
For category classification, binary feature values (e.g., a word occurs or does not occur in a category), or real-valued features (e.g., a word occurs with an importance weight r) are often employed. Since category collections may contain a large number of unique terms, a feature selection is generally employed when applying machine-learning techniques to categorization. To reduce the number of features, features may be removed based on overall frequency counts, and then selected according to a smaller number of features based on a fit to the categories. The fit to the category may be determined via mutual information, information gain, chi-square and/or substantially any other statistical selection technique. These smaller descriptions then serve as an input to the SVM. It is noted that linear SVMs provide suitable generalization accuracy and provide suitably fast learning. Other classes of nonlinear SVMs include polynomial classifiers and radial basis functions and may also be utilized in accordance with the present invention.
The classifier constructor 1826 employs a learning model 1832 in order to analyze the groupings and associated categories in the data store 1830 to “learn” a function mapping input vectors to confidence of class. For many learning models, including the SVM, the model for the categories can be represented as a vector of feature weights, w, wherein there can be a learned vector of weights for each category. When the weights w are learned, new texts are classified by computing the dot product of x and w, wherein w is the vector of learned weights, and x is the vector representing a new text. A sigmoid function may also be provided to transform the output of the SVM to probabilities P. Probabilities provide comparable scores across categories or classes from which priorities can be determined.
The SVM is a parameterized function whose functional form is defined before training. Training an SVM generally requires a labeled training set, since the SVM will fit the function from a set of examples. The training set can consist of a set of N examples. Each example consists of an input vector, xi, and a category label, yj, which describes whether the input vector is in a category. For each category there can be N free parameters in an SVM trained with N examples. To find these parameters, a quadratic programming (QP) problem is solved as is well understood. There is a plurality of well-known techniques for solving the QP problem. These techniques may include a Sequential Minimal Optimization technique as well as other techniques. As depicted in
Referring back to
Feature selection for text classification typically performs a search over single words. Beyond the reliance on single words, domain-specific phrases and high-level patterns of features are also made available. Special tokens can also enhance classification. The quality of the learned classifiers for e-mail criticality, for example, can be enhanced by inputting to the feature selection procedures handcrafted features that are identified as being useful for distinguishing among e-mail of different time criticality. Thus, during feature selection, one or more words as well as phrases and symbols that are useful for discriminating among messages of different levels of time criticality are considered.
As the following examples illustrate, tokens and/or patterns of value in identifying the criticality of messages include such distinctions as, and including Boolean combinations of the following:
It is noted that the word or phrase groupings depicted above illustrate exemplary words, groupings, or phrases that may be utilized from which to conduct classifier training. It is to be appreciated that other similar words, groups, or phrases may be similarly employed and thus the present invention is not limited to the illustrated examples.
Furthermore, still referring to
Alternatively, larger quantities of messages can be gathered, wherein new filters are created in a batch process, either per a daily schedule, per the number of new quantities of messages admitted to the training set, and/or combinations. For each message inputted into the classifier, for example, a new case for the classifier can be created. The cases are stored as negative and positive examples of texts that are either high or low priority, for example. As an example, one or more low, medium, and high urgency classes can be recognized such that the probabilities of membership in each of these classes are utilized to build an expected criticality. Larger numbers of criticality classes can be utilized to seek higher resolution. For example, as illustrated in
According to another aspect of the invention, an estimation of a number or value can be achieved by monitoring a user interact with e-mail, for example, rather than labeling the case or message as one of a set of folders. Thus, a classifier can be continued to be updated but have a moving window, wherein cases of messages or documents that are newer than some age are considered, as specified by the user.
For example, a constant rate of loss associated with the delayed review of messages is referred to as the expected criticality (EC) of the message, wherein,
As an example, still referring to
It is noted that the present invention as has been described above, the classifier 1920 and the priority 1938 can be based on a scheme wherein the e-mails in the training phase are construed as either high priority or low priority, for example. This scheme is illustrated in reference to
For example, referring to
The present invention is not limited to the definition of priority as this term is employed by the classifier 2020, 2120 to assign such priority to a text such as an e-mail message. Priority can be defined in terms of a loss function, for example. More specifically, priority can be defined in terms of the expected cost in lost opportunities per time delayed in reviewing the text after it has be received. That is, the expected lost or cost that will result for delayed processing of the text. The loss function can further vary according to the type of text received.
For example, a general case is illustrated in
Some messages, however, do not have their priorities well approximated by the use of a linear cost function. For example, a message relating to a meeting will have its cost function increase as the time of the meeting nears, and thereafter, the cost function rapidly decreases. That is, after the meeting is missed, there is not much generally a user can do about it. This situation is better approximated by a non-linear cost function, as depicted in
Thus, as has been described, the priority of a text can be just the likelihood that it is of one of a plurality of priorities based on the output of a classifier, or the most likely priority class the text applies to, also based on the output of the classifier. Alternatively, an expected time criticality of the text, such as an e-mail message, can determined. This can be written as:
In the case where n=1, specifying that there are only two priority classes low and high, the expected loss can be reformulated as:
Other measures that accord a value metric for ranking documents, such as e-mail messages, by importance. While the discussion above focused on priority as time criticality, other notions of “importance” can also be trained. For example, this can be accomplished by labeling a set of training folders: “High Importance” all the way down to “Low Importance” wherein a measure of “expected importance” can be determined. Another metric can be based on a semantic label, “messages that I would wish to hear about within 1 day while traveling” and to determine a measure for prioritizing messages for forwarding to a traveling user. Furthermore, one utilized metric is urgency or time-criticality, as it has clear semantics for decision-making, triage, and routing. In this case, the classes are labeled according to different levels of urgency and computed as an expected urgency for each message from the probabilities inferred that the message is in each class.
Extensions to criticality classification, as described in the previous section, can also be provided in accordance with the present invention. For instance, classification can include an automatic search for combinations of high-payoff features within or between classes of features. As an example, combinations of special distinctions, structures, and so forth, with words that have been found to be particularly useful for certain users can be searched for and utilized in the classification process. A combination of two features is referred as a doublet, whereas a combination of three features is referred to as a triplet, and so forth. The combination of features can enable improved classification.
Classification can also be improved with the use of incremental indexing that employs a moving window in the classifier. This enables the classifier to be routinely refreshed, as old data is timed out, and new data is brought in.
Classification can also be based on the determination of the date and time of an event specified in a message. This determination can assign features to the message that can be utilized by the classifier. For example, the features assigned may include: today within four hours, today within eight hours, tomorrow, this week, this month, and next month and beyond. This enables the classifier to have improved accuracy with respect to the messages that are classified. In general, classification can be based on the time of the referenced event, considering whether the event is in the future or has past. With respect to future events, classification thus considers the sender's reference to a time in the future when the event is to occur.
Other new features can also be integrated into the classification process. For example, an organization chart can be utilized to determine how important a message is by the sender's location within the chart. Linguistic features may be integrated into the classifier. To accommodate different languages, the features may be modified depending on the origin of the sender, and/or the language in which the message is written. Classification may vary depending on different folders in which messages are stored, as well as other scaling and control rules. In addition to e-mail and other sources, classification can be performed on instant messages, and other sources of information, such as stock tickers, and so forth.
In general, a sender-recipient structural relationship may be considered in the classification process. If the user is substantially the only recipient of a message, for example, then this message may be considered as more important than a message sent to a small number of people. In turn, a message sent to a small number of people may be more important than a message on which the user is blind-copied (bcc'ed) or carbon-copied (cc'ed). With respect to the sender, criticality may be assigned based on whether the sender's name is recognized. Criticality may also be assigned depending on whether the sender is internal or external to the organization of which the user is associated.
Other distinctions that may be considered in classification include the length of the message, whether questions have been detected, and whether the user's name is in the message. Language associated with time criticality may increase the message's importance. For example, phrases such as “happening soon,” “right away,” “as soon as possible,” “ASAP,” and “deadline is,” may render the message more critical. Usage of past tense as compared to future tense may be considered, as well as coordinative tasks specified by phrases such as “get together,” “can we meet,” and so on. Evidence of junk mail may lower the priority of a message. Predicates representing combinations, such as a short question from a sender proximate to the user in the organization chart, may also be considered in the classification process.
In the next section of the description, processes are described that provide a determination when to alert the user of a high-priority text, for example, a text that has a likelihood of being high priority greater than a user-set threshold, or greater than a threshold determined by decision-theoretic reasoning. That is, beyond knowing about time-critical messages, it is also important to decide when to alert a user to time-critical messages if the user is not directly viewing incoming e-mail, for example. In general, a cost of distracting the user from the current task being addressed to learn about the time-critical message is determined.
Alternatively, various policies for alerting and notification can be employed. These policies can be implemented within a notification platform architecture, for example, that is described in more detail below. Some of these policies include:
In general, a user should be alerted when a cost-benefit analysis suggests that the expected loss the user would incur in not reviewing the message at time t is greater than the expected cost of alerting the user. That is, alerting should be conducted if:
However, the above formulation may not be the most accurate, since the user will often review the message on his or her own in the future. Therefore, in actuality, the user should generally be alerted when the expected value of alerting, referred to as EVTA, is positive. The expected value of alerting should thus consider the value of alerting the user of the text now, as opposed to the value of the user reviewing the message later on their own, without alert, minus the cost of alerting. This can be stated as:
Furthermore, information from several messages can be grouped together into a single compound alert. Reviewing information about multiple messages in an alert can be more costly than an alert relaying information about a single message. Such increases in distraction can be represented by making the cost of an alert a function of the its informational complexity. It can be assumed that the EVA of an e-mail message is independent of the EVA of other e-mail messages. EVA(Mi,t), for example, refers to the value of alerting a user about a single message Mi at time t and ECA(n) refers to the expected cost of relaying the content of n messages. Thus, multiple messages can be considered by summing together the expected value of relaying information about a set of n messages, wherein:
It is also noted that in order to determine the expect cost of alerting, it is useful to infer or directly access information about whether the user is present or is not present. Sensors can be employed that indicate when a user is in the office, such as infrared sensors and pressure sensors. However, if such devices are not available, a probability that a user is in the office can be assigned as a function of user activity on the computer, for example, such as the time since last observed mouse or keyboard activity. Furthermore, scheduling information available in a calendar can also be employed to make inferences about the distance and disposition of a user and to consider the costs of forwarding messages to the user by different processes.
It is also important to know how busy the user is in making decisions about interrupting the user with information about messages with high time criticality. It can be reasoned (e.g., inferential decision-making) about whether and the rate at which a user is working on a computer, or whether the user is on the telephone, speaking with someone, or at a meeting at another location. Several classes of evidence can be employed to assess a user's activity or his or her focus of attention, as illustrated in
In general, a decision should be made as to when and how to alert users to messages and to provide services based on the inference of expected criticality and user activity. Decisions can be performed by utilizing decision-models, for example.
Alternatively, decisions as to when and how to alert users can be made by employment of a set of user-specified thresholds and parameters defining policies on alerting. User presence can be inferred based on mouse or keyboard activity, for example. Thus, a user can be enabled to input thresholds on alerting for inferred states of activity and non-activity, for example. Users can also input an amount of idle activity following activity wherein alerting will occur at lower criticalities. If it is determined that the user is not available based on the time that substantially no computer activity is detected, then messages can be stored, and are reported to the user in order of criticality when the user returns to interact with the computer. Furthermore, users can specify routing and paging options as a function of quantities including expected criticality, maximum expected loss, and value of alerting the user.
A notification and/or alerting system may also estimate when the user is expected to return, such that it transmits priorities that are expected to be important before the user is expected to return. This can be achieved by learning user-present and user-away patterns over time. The user can then set suitable policies in terms of when he or she is expected to return to the system to review the priorities without being alerted to them. The expected time to return determination by the system may be automatically conveyed to senders of highly urgent messages, for example. In this manner, message senders receive feedback when the user is expected to return such that he or she can reply to the messages. The sender may also be informed that his or her message has been conveyed to the user's mobile device, and so forth.
The priority of the data is then output at 2984. As indicated in
The output of the alert to a user or other system is now described. A user can be alerted on an electronic device based on alert criteria, which indicates when the user should be alerted of a prioritized text. The electronic device on which the user is alerted can be a pager, cellular telephone, or other communications modality as described in more detail below. Alerts to a user on an electronic device, such as a pager or a cellular phone, can be based on alert criteria that can be adapted to be sensitive to information about the location, inferred task, and/or focus of attention of the user, for example. Such information can be inferred under uncertainty or can be accessed from online information sources. The information from an online calendar, for example, can be adapted to control criteria employed to make decisions about relaying information to a device, such as a notification sink which is described in more detail below.
Alerts can be performed by routing the prioritized text or other data based on routing criteria. Routing of the text can include forwarding the text, and/or replying to the sender of the text, in the case where the text is e-mail. For example, a sound can be played to alert the user to a prioritized document. Alternatively, an agent or automated assistant can be opened (e.g., interactive display wizard). That is, the agent can appear on a display screen, to notify the user of the prioritized document. Furthermore, the prioritized document can be opened, such as being displayed on the screen. The document can receive focus. This can also include sizing the document based on its priority, such that the higher the priority of the document, the larger the window in which it is displayed, and/or centrally locating the document on the display based on its priority.
Referring now to
The program 3002 generates a text for input into the classifier 3004. The program includes an electronic mail program that receives e-mail, which then serve as the text. The classifier 3004 generates a priority for the associated message. As described above, the classifier 3004 can be a Bayesian classifier, a Support Vector Machine classifier, or other type of classifier. The priority of the text output by the classifier 3004 can then be utilized in conjunction with a cost-benefit analysis, as has been described, to effectuate further output and/or alerting based thereon.
Turning now to
The context analyzer 3122 stores/analyzes information regarding variables and parameters of a user that influence notification decision-making. For example, the parameters may include contextual information, such as the user's typical locations and attentional focus or activities per the time of day and the day of the week, and additional parameters conditioned on such parameters, such as the devices users tend to have access to in different locations. Such parameters may also be functions of observations made autonomously via one or more sensors. For example, one or more profiles (not shown) may be selected or modified based on information about a user's location as can be provided by a global positioning system (GPS) subsystem, on information about the type of device being used and/or the pattern of usage of the device, and the last time a device of a particular type was accessed by the user. Furthermore, as is described in more detail below, automated inference may also be employed, to dynamically infer parameters or states such as location and attention. The profile parameters may be stored as a user profile that can be edited by the user. Beyond relying on sets of predefined profiles or dynamic inference, the notification architecture can enable users to specify in real-time his or her state, such as the user not being available except for important notifications for the next “x” hours, or until a given time, for example.
The parameters can also include default notification preference parameters regarding a user's preference as to being disturbed by notifications of different types in different settings, which can be used as the basis from which to make notification decisions by the notification engine 3124, and upon which a user can initiate changes. The parameters may include default parameters as to how the user wishes to be notified in different situations (e.g., such as by cell phone, by pager). The parameters can include such assessments as the costs of disruption associated with being notified by different modes in different settings. This can include contextual parameters indicating the likelihoods that the user is in different locations, the likelihoods that different devices are available, and the likelihoods of his or her attentional status at a given time, as well as notification parameters indicating how the user desires to be notified at a given time.
Information stored by the context analyzer 3122, according to one aspect of the present invention is inclusive of contextual information determined by the analyzer. The contextual information is determined by the analyzer 3122 by discerning the user's location and attentional status based on one or more contextual information sources (not shown), as is described in more detail in a later section of the description. The context analyzer 3122, for example, may be able to determine with precision the actual location of the user via a global positioning system (GPS) that is a part of a user's car or cell phone. The analyzer may also employ a statistical model to determine the likelihood that the user is in a given state of attention by considering background assessments and/or observations gathered through considering such information as the type of day, the time of day, the data in the user's calendar, and observations about the user's activity. The given state of attention can include whether the user is open to receiving notification, busy and not open to receiving notification, and can include other considerations such as weekdays, weekends, holidays, and/or other occasions/periods.
The sources 3126-3128, 3130 generate notifications intended for the user and/or other entity. For example, the sources 3126-3128 may include communications, such as Internet and network-based communications, and telephony communications, as well as software services. Notification sources are defined generally herein as that which generates events, which can also be referred to as notifications and alerts, intended to alert a user, or a proxy for the user, about information, services, and/or a system or world event. A notification source can also be referred to as an event source.
For example, e-mail may be generated as notifications by the priorities system 3130 such that it is prioritized, wherein an application program or system generating the notification assigns the e-mail with a relative priority corresponding to the likely importance or urgency of the e-mail to the user. The e-mail may also be sent without regard to the relative importance to the user. Internet-related services can include notifications including information that the user has subscribed to, such as headlines of current news every so often, and stock quotes, for example.
Notification sources 3126-3128 can themselves be push-type or pull-type sources. Push-type sources are those that automatically generate and send information without a corresponding request, such as headline news and other Internet-related services that send information automatically after being subscribed to. Pull-type sources are those that send information in response to a request, such as e-mail being received after a mail server is polled. Still other notification sources include the following:
The notification sinks 3136-3138 are able to provide notifications to the user. For example, such notification sinks 3136-3138 can include computers, such as desktop and/or laptop computers, handheld computers, cell phones, landline phones, pagers, automotive-based computers, as well as other systems/applications as can be appreciated. It is noted that some of the sinks 3136-3138 can convey notifications more richly than other of the sinks. For example, a desktop computer typically has speakers and a relatively large color display coupled thereto, as well as having a higher bandwidth for receiving information when coupled to a local network or to the Internet. Thus, notifications can be conveyed by the desktop computer to the user in a relatively rich manner. Conversely, many cell phones have a smaller display that can be black and white, and receive information at a relatively lower bandwidth, for example. Correspondingly, the information associated with notifications conveyed by cell phones may generally be shorter and geared towards the phone's interface capabilities, for example. Thus, the content of a notification may differ depending on whether it is to be sent to a cell phone or a desktop computer. According to one aspect of the present invention, a notification sink can refer to that which subscribes, via an event subscription service, for example, to events or notifications.
The notification engine 3124 accesses the information stored and/or determined by the context analyzer, and determines which of the notifications received from the sources 3126-3128 to convey to which of the sinks 3136-3138. Furthermore, the notification engine 3124 can determine how the notification is to be conveyed, depending on which of the sinks 3136-3138 has been selected to send the information to. For example, it may be determined that notifications should be summarized before being provided to a selected sinks 3136-3138.
The invention is not limited to how the engine 3124 makes its decisions as to which of the notifications to convey to which of the notification sinks, and in what manner the notifications are conveyed. In accordance with one aspect, a decision-theoretic analysis can be utilized. For example, the notification engine 3124 can be adapted to infer important uncertainties about variables including a user's location, attention, device availability, and amount of time until the user will access the information if there were no alert. The notification engine 3124 can then make notification decisions about whether to alert a user to a notification, and if so, the nature of the summarization and the suitable device or devices to employ for relaying the notification. In general, the notification engine 3124 determines the net expected value of a notification. In doing so, it can consider the following:
Inferences made about uncertainties thus may be generated as expected likelihoods of values such as the cost of disruption to the user with the use of a particular mode of a particular device given some attentional state of the user, for example. The notification engine 3124 can make decisions as to one or more of the following:
Furthermore, the notification engine 3124 can access information stored in a user profile by the context analyzer 3122 in lieu of or to support a personalized decision-theoretic analysis. For example, the user profile may indicate that at a given time, the user prefers to be notified via a pager, and only if the notification has a predetermined importance level. Such information can be utilized as a baseline from which to start a decision-theoretic analysis, or can be the manner by which the notification engine 3124 determines how and whether to notify the user.
According to one aspect of the present invention, the notification platform architecture 3100 can be configured as a layer that resides over an eventing or messaging infrastructure. However, the invention is not limited to any particular eventing infrastructure. Such eventing and messaging systems and protocols can include:
Referring now to
The preferences store 3262 stores notification parameters for a user, such as default notification preferences for the user, such as a user profile, which can be edited and modified by the user. The preferences store 3262 can be considered as that which stores information on parameters that influence how a user is to be notified. The user context module 3260 determines a user's current context, based on one or more context information sources 3280 as published to the whiteboard 3264, for example. The user context profile store 3262 stores context parameters for a user, such as the default context settings for the user, which can be edited and modified by the user. That is, the user context module 3260 provides a best guess or estimate about a user's current context information by accessing information from the profile store 3262 and/or updating a prior set of beliefs in the store 3262 with live sensing, via the one or more context sources 3280. The profile store 3262 can be considered as that which stores a priori where a user is, and what the user is doing, for example.
The user context profile store 3262 can be a pre-assessed and/or predefined user profile that captures such information as a deterministic or probabilistic profile. The profile can be of typical locations, activities, device availabilities, and costs and values of different classes of notification as a function of such observations as time of day, type of day, and user interactions with one or more devices. The type of day can include weekdays, weekends and holidays, for example. The user context module 3260 can then actively determine or infer aspects of the user's context or state, such as the user's current or future location and attentional state. Furthermore, actual states of context can be accessed directly from the context information sources 3280 via the whiteboard 3264, and/or, can be inferred from a variety of such observations through inferential methods such as Bayesian reasoning as is described in more detail below.
The context information sources 3280 may provide information to the context module 3260 via the whiteboard 3264 regarding the user's attentional state and location, from which the module 3260 can make a determination as to the user's current context (e.g., the user's current attentional state and location). Furthermore, the invention is not limited to a particular number or type of context sources 3280, nor the type of information inferred or accessed by the user context module 3260. However, the context sources 3280 can include multiple desktop information and events, such as mouse information, keyboard information, application information (e.g., which application is currently receiving the focus of the user), ambient sound and utterance information, text information in the windows on the desktop, for example. The whiteboard 3264 can include a common storage area, to which the context information sources 3280 can publish information, and from which multiple components, including sources and the context module 3260 can access this information. An event, also referred to as a notification or alert, generally can include information about an observation about one or more states of the world. Such states can include the status of system components, the activity of a user, and/or a measurement about the environment. Furthermore, events can be generated by an active polling of a measuring device and/or source of events, by the receipt of information that is sent on a change, and/or per a constant or varying event heartbeat.
Other types of context sources 3280 includes personal-information manager (PIM) information of the user, which generally can provide scheduling information regarding the schedule of the user, for example. The current time of day, as well as the user's location—for example, determined by a global positioning system (GPS), and/or a user's access of a cell phone, PDA, or a laptop that can be locationally determined—are also types of context sources 3280. Furthermore, real-time mobile device usage is a type of context source 3280. For example, a mobile device such as a cell phone may be able to determine if it is currently being accessed by the user, as well as device orientation and tilt (e.g., indicating information regarding device usage as well), and acceleration and speed (e.g., indicating information as to whether the user is moving or not).
Referring now to
According to one aspect of the present invention, notification sources 3326-3328 can have one or more of the following parameters within a standard description of attributes and relationships, referred to herein as a notification source schema or source schema. It is noted that schema can be provided for sources, for sinks, and for context-information sources, described above. Such schemas provide declarative information about different components and can enable the sources 3326-3328, the notification engine 3324, the sinks 3336-3338, and the context analyzer 3322 to share semantic information with one another. Thus, different schemas provide information about the nature, urgency, and device signaling modalities associated with notification. That is, schema can be defined generally as a collection of classes and relationships among classes that defines the structure of notifications and events, containing information including event or notification class, source, target, event or notification semantics, ontological content information, observational reliability, and substantially any quality-of-service attributes, for example.
Parameters (not shown) for notification source schema can include one or more of: message class; relevance; importance; time criticality; novelty; content attributes; fidelity tradeoffs, and/or source information summary information. The message class for a notification generated by a notification source indicates the type of communication of the notification, such as e-mail, instant message, numerical financial update, and desktop service, for example. The relevance for a notification generated by notification sources indicates a likelihood that the information contained within the notification is relevant, for one or more specified contexts. For example, the relevance can be provided by a logical flag, indicating whether the source is relevant for a given context or not. The novelty of the notification indicates the likelihood that the user already knows the information contained within the notification. That is, the novelty is whether the information is new to the user, over time (indicating if the user knows the information now, and when, if ever, the user will learn the information in the future without being alerted to it).
Fidelity tradeoffs associated with the notification indicate the loss of value of the information within the notification that can result from different forms of specified allowed truncation and/or summarization, for example. Such truncation and/or summarization may be required for the notification to be conveyed to certain types of notification sinks 3336-3338 that may have bandwidth and/or other limitations preventing the sinks from receiving the full notification as originally generated. Fidelity in general refers to the nature and/or degree of completeness of the original content associated with a notification. For example, a long e-mail message may be truncated, or otherwise summarized to a maximum of 100 characters allowed by a cell phone, incurring a loss of fidelity. Likewise, an original message containing text and graphics content suffers a loss in fidelity when transmitted via a device that only has text capabilities. In addition, a device may only be able to depict a portion of the full resolution available from the source. Fidelity tradeoffs refer to a set of fidelity preferences of a source stated either in terms of orderings (e.g., rendering importance in order of graphics first, then sound) and/or costs functions that indicate how the total value of the content of the notification diminishes with changes in fidelity. For example, a fidelity tradeoff can describe how the full value associated with the transmission of a complete e-mail message changes with increasingly greater amounts of truncation. Content attributes, for example, can include a summary of the nature of the content, representing such information as whether the core message includes text, graphics, and audio components. The content itself is the actual graphics, text, and/or audio that make up the message content of the notification.
The importance of a notification refers to the value of the information contained in the notification to the user, assuming the information is relevant in a current context. For example, the importance can be expressed as a dollar value of the information's worth to the user. Time criticality indicates time-dependent change in the value of information contained in a notification—that is, how the value of the information changes over time. In most but not all cases, the value of the information of a notification decays with time. This is illustrated in the diagram of
Referring back to
The notification sinks 3336-3338 can be substantially any device or application by which the user or other entity can be notified of information contained in notifications. The choice as to which sink or sinks are to be employed to convey a particular notification is determined by the notification engine 3324.
Notification sinks 3336-3338 may have one or more of the following parameters provided within a schema. These parameters may include a device class; modes of signaling (alerting); and, for the associated mode, fidelity/rendering capabilities, transmission reliability, actual cost of communication, and/or attentional cost of disruption, for example. For devices that are adapted for parameterized control of alerting attributes, the schema for the devices can additionally include a description of the alerting attributes and parameters for controlling the attributes, and functions by which other attributes (e.g., transmission reliability, cost of distribution) change with the different settings of the alerting attributes. The schema for notification sinks provides for the manner by which the notification devices communicate semantic information about their nature and capabilities with the notification engine 3324 and/or other components of the system. Default attributes and schema templates for different device types can be made available in device profiles stored in the user notification preferences store, such as the store 3240 of
Each of the schema parameters is now described in term. The class of the device refers to the type of the device such as a cell phone, a desktop computer, and a laptop computer, for example. The class can also be more general, such as a mobile or a stationery device. The modes of signaling refer to the manner in which a given device can alert the user about a notification. Devices may have one or more notification modes. For example, a cell phone may only vibrate, may only ring with some volume, and/or it can both vibrate and ring. Furthermore, a desktop display for an alerting system can be decomposed into several discrete modes (e.g., a small notification window in the upper right hand of the display vs. a small thumbnail at the top of the screen—with or without an audio herald). Beyond being limited to a set of predefined behaviors, a device can enable modes with alerting attributes that are functions of parameters, as part of a device definition. Such continuous alerting parameters for a mode represent such controls as the volume at which an alert is played at the desktop, rings on a cell phone, and the size of an alerting window, for example.
The transmission reliability for a mode of a notification sink 3336-3338 indicates the likelihood that the user will receive the communicated alert about a notification, which is conveyed to the user via the sink with that mode. As transmission reliability may be dependent on the device availability and context of the user, the transmission reliability of different modes of a device can be conditioned on such contextual attributes as the location and attention of a user. Transmission reliability for one or more unique contextual states, defined by the cross product of such attributes as unique locations and unique attentional states, defined as disjunctions created as abstractions of such attributes (e.g., for any location away from the home, and any time period after 8 am and before noon), can also be specified. For example, depending on where the user currently is, information transmitted to a cell phone may not always reach the user, particularly if the user is in a region with intermittent coverage, or where the user would not tend to have a cell phone in this location (e.g., family holiday). Contexts can also influence transmission reliability because of ambient noise and/or other masking or distracting properties of the context.
The actual cost of communication indicates the actual cost of communicating the information to the user when contained within a notification that is conveyed to the sink. For example, this cost can include the fees associated with a cell phone transmission. The cost of disruption includes the attentional costs associated with the disruption associated with the alert employed by the particular mode of a device, in a particular context. Attentional costs are typically sensitive to the specific focus of attention of the user. The fidelity/rendering capability is a description of the text, graphics, and audio/tactile capabilities of a device, also given a mode. For example, a cell phone's text limit may be 100 characters for any single message, and the phone may have no graphics capabilities.
Turning now to
Direct specification of context by the user enables the user to indicate whether or not he or she is available to receive alerts, and where the user desires to receive them. A default profile (not shown) can be employed to indicate a default attentional state, and a default location wherein the user can receive the alerts. The default profile can be modified by the user as desired.
In the location section 3540, the user can check one or more of the check boxes 3542, to indicate where the user desires to have alerts conveyed. For example, the user can have alerts conveyed at the desktop, by e-mail, at a laptop, on a cell phone, in his or her car, on a pager, or on a personal digital assistant (PDA) device, and so forth. It is to be appreciated that these are examples only, however, and the invention itself is not so limited.
The window 3502, wherein there can be preset defaults for the checkboxes 3522 and the box 3524 of the section 3520 and the checkboxes 3542 of the section 3540, can be considered a default user profile. The profile is user modifiable in that the user can override the default selections with his or her own desired selections. Other types of profiles can also be utilized in accordance with the invention.
Referring at this time to
For example, if the user has the cell phone 3604 on, this can indicate that the user can receive alerts on the cell phone 3604. However, if the user is currently talking on the cell phone 3604, this can indicate that the user has his or her attentional focus on something else (namely, the current phone call), such that the user should not presently be disturbed with a notification alert. The video camera 3606 can, for example, be in the user's office, to detect whether the user is in his or her office (viz., the user's location), and whether others are also in his or her office, suggesting a meeting with them, such that the user should not be disturbed (viz., the user's focus). Similarly, the microphone 3608 can also be in the user's office, to detect whether the user is talking to someone else, such that the user should not be disturbed, is typing on the keyboard (e.g., via the sounds emanating therefrom), such that the user should also not be presently disturbed. The keyboard 3610 can also be employed to determine if the user is currently typing thereon, such that, for example, if the user is typing very quickly, this may indicate that the user is focused on a computer-related activity, and should not be unduly disturbed (and, also can indicate that the user is in fact in his or her office).
If the PDA device 3612 is being accessed by the user, this can indicate that the user is able to receive alerts at the device 3612—that is, the location at which notifications should be conveyed is wherever the device 3612 is located. The device 3612 can also be utilized to determine the user's current attentional focus. The vehicle 3614 can be utilized to determine whether the user is currently in the vehicle—that is, if the vehicle is currently being operated by the user. Furthermore, the speed of the vehicle can be considered, for example, to determine what the user's focus is. If the speed is greater than a predetermined speed, for instance, then it may be determined that the user is focused on driving, and should not be bothered with notification alerts. The GPS device 3616 can also be employed to ascertain the user's current location, as known within the art.
In the following section of the detailed description, a determination of user context according to user-modifiable rules is described. The context of the user can include the user's attentional focus, as well as his or her current location. The invention is not so limited, however. Determining context via rules indicates that a hierarchical set of if-then rules can be followed to determine the user's location and/or attentional focus.
Thus, a set of rules can be constructed by the user such that the user's context is determined. For example, with respect to location, the set of rules can be such that a first rule tests whether the current day is a weekday. If it is, then a second rule subordinate to the first rule tests whether the current time is between 9 a.m. and 5 p.m. If it is, then the second rule indicates that the user is located in his or her office, otherwise the user is at home. If the first rule is found to be false—that is, the current day is a weekend and not a weekday—then an otherwise rule may state that the user is at home. It is noted that this example is not meant to be a restrictive or limiting example on the invention itself, wherein one or more other rules may also be similarly configured.
In the following section of the description, a determination of user context by inferential analysis, such as by employing a statistical and/or Bayesian model, is described. It is noted that context determination via inferential analysis can rely in some aspects on other determinations, such as direct measurement via sensor(s), as has been described. Inferential analysis as used herein refers to using an inference process(es) on a number of input variables, to yield an output variable(s), namely, the current context of the user. The analysis can include in one aspect utilization of a statistical model and/or a Bayesian model.
Referring now to
Bayesian networks may be employed that can infer the probability of alternate activity contexts or states based on a set of observations about a user's activity and location. As an example,
As portrayed in the network 3900, a software application currently at top-level focus 3970 in an operating system or other environment influences the nature of the user's focus and task, and the status of a user's attention and the application at focus together influence computer-centric activities. Such activity includes the stream of user activity built from sequences of mouse and keyboard actions and higher-level patterns of application usage over broader time horizons. Such patterns include e-mail-centric and Word-processor centric, and referring to prototypical classes of activity involving the way multiple applications are interleaved.
Referring now to
In order to provide a context for the various aspects of the invention,
With reference to
The system bus 4318 can be any of several types of bus structure(s) including the memory bus or memory controller, a peripheral bus or external bus, and/or a local bus using any variety of available bus architectures including, but not limited to, 11-bit bus, Industrial Standard Architecture (ISA), Micro-Channel Architecture (MSA), Extended ISA (EISA), Intelligent Drive Electronics (IDE), VESA Local Bus (VLB), Peripheral Component Interconnect (PCI), Universal Serial Bus (USB), Advanced Graphics Port (AGP), Personal Computer Memory Card International Association bus (PCMCIA), and Small Computer Systems Interface (SCSI).
The system memory 4316 includes volatile memory 4320 and nonvolatile memory 4322. The basic input/output system (BIOS), containing the basic routines to transfer information between elements within the computer 4312, such as during start-up, is stored in nonvolatile memory 4322. By way of illustration, and not limitation, nonvolatile memory 4322 can include read only memory (ROM), programmable ROM (PROM), electrically programmable ROM (EPROM), electrically erasable ROM (EEPROM), or flash memory. Volatile memory 4320 includes random access memory (RAM), which acts as external cache memory. By way of illustration and not limitation, RAM is available in many forms such as synchronous RAM (SRAM), dynamic RAM (DRAM), synchronous DRAM (SDRAM), double data rate SDRAM (DDR SDRAM), enhanced SDRAM (ESDRAM), Synchlink DRAM (SLDRAM), and direct Rambus RAM (DRRAM).
Computer 4312 also includes removable/non-removable, volatile/non-volatile computer storage media.
It is to be appreciated that
A user enters commands or information into the computer 4312 through input device(s) 4336. Input devices 4336 include, but are not limited to, a pointing device such as a mouse, trackball, stylus, touch pad, keyboard, microphone, joystick, game pad, satellite dish, scanner, TV tuner card, digital camera, digital video camera, web camera, and the like. These and other input devices connect to the processing unit 4314 through the system bus 4318 via interface port(s) 4338. Interface port(s) 4338 include, for example, a serial port, a parallel port, a game port, and a universal serial bus (USB). Output device(s) 4340 use some of the same type of ports as input device(s) 4336. Thus, for example, a USB port may be used to provide input to computer 4312, and to output information from computer 4312 to an output device 4340. Output adapter 4342 is provided to illustrate that there are some output devices 4340 like monitors, speakers, and printers, among other output devices 4340, that require special adapters. The output adapters 4342 include, by way of illustration and not limitation, video and sound cards that provide a means of connection between the output device 4340 and the system bus 4318. It should be noted that other devices and/or systems of devices provide both input and output capabilities such as remote computer(s) 4344.
Computer 4312 can operate in a networked environment using logical connections to one or more remote computers, such as remote computer(s) 4344. The remote computer(s) 4344 can be a personal computer, a server, a router, a network PC, a workstation, a microprocessor based appliance, a peer device or other common network node and the like, and typically includes many or all of the elements described relative to computer 4312. For purposes of brevity, only a memory storage device 4346 is illustrated with remote computer(s) 4344. Remote computer(s) 4344 is logically connected to computer 4312 through a network interface 4348 and then physically connected via communication connection 4350. Network interface 4348 encompasses communication networks such as local-area networks (LAN) and wide-area networks (WAN). LAN technologies include Fiber Distributed Data Interface (FDDI), Copper Distributed Data Interface (CDDI), Ethernet/IEEE 1102.3, Token Ring/IEEE 1102.5 and the like. WAN technologies include, but are not limited to, point-to-point links, circuit switching networks like Integrated Services Digital Networks (ISDN) and variations thereon, packet switching networks, and Digital Subscriber Lines (DSL).
Communication connection(s) 4350 refers to the hardware/software employed to connect the network interface 4348 to the bus 4318. While communication connection 4350 is shown for illustrative clarity inside computer 4312, it can also be external to computer 4312. The hardware/software necessary for connection to the network interface 4348 includes, for exemplary purposes only, internal and external technologies such as, modems including regular telephone grade modems, cable modems and DSL modems, ISDN adapters, and Ethernet cards.
What has been described above includes examples of the present invention. It is, of course, not possible to describe every conceivable combination of components or methodologies for purposes of describing the present invention, but one of ordinary skill in the art may recognize that many further combinations and permutations of the present invention are possible. Accordingly, the present invention is intended to embrace all such alterations, modifications and variations that fall within the spirit and scope of the appended claims. Furthermore, to the extent that the term “includes” is used in either the detailed description or the claims, such term is intended to be inclusive in a manner similar to the term “comprising” as “comprising” is interpreted when employed as a transitional word in a claim.