text:
|Publication number
|Publication type
|Application number
|Publication date
|Mar 31, 1998
|Filing date
|Jun 7, 1995
|Priority date
|Mar 12, 1992
|Fee status
|Also published as
|Publication number
|Mylene Jarossay, Denis Attal
|Original Assignee
|Bull, S.A.
|Export Citation
|BiBTeX, EndNote, RefMan
|Patent Citations (2), Referenced by (96), Classifications (8), Legal Events (4)
|External Links: USPTO, USPTO Assignment, Espacenet
This is a continuation of application Ser. No. 08/030,711 filed Mar. 12, 1993, now abandoned.
The present invention relates to the use of a language, in which the typing bears on the contents of variables rather than on the variables, and which furthermore enables the manipulation of complex structures such as sets or trees.
Traditionally, this type of language is essentially used in the field of artificial intelligence. Compared with conventional languages, this type of language makes the functional object manipulable without restriction and provides effective recursive programming and automatic management of the data program memory. In addition, because both the programs and data are represented in similar fashion, a program can modify itself to take new events into account. Nevertheless, its use is not highly regarded, except for its application to the field of artificial intelligence, and in particular there are a great number of prejudices against its use in other fields, especially the field of applications programs of the network management type.
In this last field, specific programming languages exist for certain applications. A language of the Smalltalk type is used for a first family of applications, whose object is to provide interfaces for access to service that are simplified and facillitate generic programming, or in other words in which the data structure is manipulated directly without knowledge of the contents of the data. In effect, in this type of language, the typing bears on the content of the variables more than on the variables, a characteristic which makes for effective response to the problems presented by this first family of applications.
However, when it is desired to create interfaces with relational data bases, which have complex data structures, another type of language must be used, such as SQL, which also has this cartesian nature but contrarily does not make it possible to facilitate generic programming. Other problems also arise when there is a need to create interfaces that respect the treelike nature of a plurality of servers, such as network administration platforms, for example. Hence each application family has a corresponding adapted language type. This situation is not very practical and means a lack of flexibility when there is a need to develop applications programs of the network management type to enable creating interfaces with relational data bases, while authorizing the drawing up of requests to information servers without prior knowledge of the structure of the value received in return.
The object of the present invention is to overcome this major disadvantage and to propose the use of a language in which the typing bears on the content of the variables and which moreover enables manipulation of complex data structures.
To achieve this, the language of the type discussed above is used in applications programs of the network management type, which are intended on the one hand to create interfaces for access to servers by authorizing generic programming, and on the other to create interfaces that respect the cartesian nature and complex data structures of relational data bases and the treelike nature of a plurality of servers, with each machine of the network having an interpreter of this language.
Thus the concept of the invention consists, contrary to every expectation, of using a symbolic programming language, which is designed to be applied essentially to the field of artificial intelligence, in applications programs of the network management type. This language in fact simultaneously has the set of characteristics desired for developing the applications programs mentioned above. Unlike the versions in the prior art, only a single language is used, which lends great flexibility and considerable efficiency. The programs can accordingly manipulate the data without knowledge of their contents, and hence has an advantageous generic nature, in particular in terms of the requests that may be addressed to information servers without prior knowledge of the structures of the values received in return; it is readiily apparent that this considerably simplifies the interface for access to these servers. In such a language, the variables actually have no type, because they are all assumed to exist in an indeterminate state, and it is at the moment of an assignment that the type is defined at the same time, with the code adapting to various applications. Furthermore, because of this very high-level language, which has a cartesian or set theory nature, it is extremely simple to create interfaces with the various information servers, these interfaces making it possible on the one hand to respect the likewise cartesian nature of structured languages such as SQL, thus authorizing access to relational data bases, and on the other of respecting the treelike nature of certain servers used, particularly for network administration platforms. Finally, and consequently, the use of such a programming language makes it possible to very significantly shorten development time required for an application.
In a preferred application of the present invention, the language used is a language of the Lisp type.
In addition, to permit the dialogue in this language between the various machines of the network, each of these machines has an interpreter of this language.
In a notable fashion, the interpreter of the language of each machine is principally constituted by kernel for handling the program to be run by relying both on internal services, that is, evaluator and memory management, and on the code that executes the primitive functions of the language, and by a documented programmatic interface between the nucleus and the code executing the primitive functions, for authorizing access to a plurality of services and facillitating the extension of the language and the interpreter to new primitive functions.
This interpreter enables easy, fast and effective development of a desired application. Because of the language used, the various functions may be coded (in an environment constituted by the interpreter and various libraries to which the interpreter has access) and tested rapidly without going through the usual phases of compilation, linkage and execution that are necessary for other programming languages. Hence the code is never compiled, and when the interpreter is invoked, any code that exists is loaded and interpreted immediately. The programmatic interface affords access to various services; it must be clear and documented in order advantageously to facilitate the extension of the language and the interpreter itself to new primitive functions, which by way of example offer access to new servers.
The following description in conjunction with the accompanying drawings, all given by way of non-limiting example, will enable better comprehension of how the invention can be achieved.
FIG. 1 shows a structural example of the present invention including an interpreter and a set of libraries, as well as processing devices and application programs.
FIG. 2 shows a flow chart of the operations of an SML application which uses the management services and
FIG. 3 shows a flow chart of the operation of an SML application which uses the management services and the external libraries.
In FIG. 1, the interpreter is identified by the symbol INT and the set of libraries by LIB, The language interpreter INT is composed principally of a nucleus kernel K, a programmatic interface API, and a set of functions SOF employing the primitive functions of the interpreter INT. Two categories in this set of functions can be roughly distinguished: a first, in which the basic functions BF are arrayed, in other words the functions specific to the language whose typing bears on the contents of the variables and enables manipulation of complex constructions, such as and advantageously the basic functions of Lisp, and a second, to which the extended functions belong that assure the interface with different services represented by the symbol LIB. Hence in the example shown in FIG. 1, a set of functions SAF enables access to a library specific to a structured language SLL serving in turn as an interface with relational data bases (not shown). Another set of functions XAF enables access to a library XML, whose object is to furnish components for developing and managing graphical user interfaces. A third set of functions GAF enables access to a library GOL authorizing the applications that use the graphic objects developed. A fourth set of functions MIF enables access to a library MIL that serves in turn as an interface with network and information service management services.
For the first or second category in this set of functions, the use of a primitive function of the language used according to the invention (this language will be called SML hereinafter, for the sake of simplification) leads to the execution of a procedure which is known as a function coding a primitive.
A function coding a primitive is itself compiled like the remainder of the interpreter being written originally, for example in the language known as C. The input arguments are received in SML, because they originate in a calling device that operates in SML. Similarly, the value returned to the calling device is always in SML.
With respect to basic functions BF (in SML), once the function coding a primitive has accomplished its task, a return to the calling device is made. However, in the case where an SML function call represents a request for access to one of the services proposed by the set LIB, then the function coding a primitive must perform additional work, which generally leads to the execution of the following tasks:
validation of the input arguments (in SML);
if there is no error, conversion of arguments in SML into arguments in a language of the C type;
calling of a procedure in one of the external libraries of the set LIB furnishing the input arguments in the C-type language;
after returning from the external procedure, returning to the calling device furnishing a return value in SML.
Furthermore, regardless of the subject of the present invention, the SML language makes it possible to employ a very great number of applications in the field of distributed information processing, which is also known as cooperative information processing.
In general, this language advantageously has the characteristic of the languages of the Lisp type and proposes to furnish effective and coherent means for access, (or handling) manipulation and presentation of management information (or services) for networks and information systems. To do so, it must follow the following main rules:
the objects managed are defined by the rules of the ISO standard;
the operations on the objects managed are coherent and are in accordance with those described in the ISO standard for the use of network services and management information systems (see ISO CMIS);
access to data bases if possible by way of a structured language, such as SQL;
the user interface, for example for dialogue or information display, is managed by way of functions that enable access on the one hand to development and management components of the graphic user interfaces, such as X/Motif, and on the other to applications using the graphic objects developed, such as the system known as GO (for Graphic Objects).
The language SML used in accordance with the invention is influenced by the language known as "Common Lisp", but does not necessarily seek to be completely compatible with it, because SML seeks to achieve fundamentally different objectives of "Common Lisp" or of any other Lisp dialect. In fact, in their entirety, Lisp dialects are widely used in the field of artificial intelligence, while the SML language is adapted for applications programs of the network management type. For this reason, there are substantially fewer basic functions necessary in SML than there are functions proposed in "Common Lisp", for example.
Other differences exist between SML and "Common Lisp". In SML, an atom may have a single value, while the conventional Lisp dialects make it possible, for example, to give the same name to both a variable and a function, without any risk of conflict between them. Similarly, in SML, the lists are manipulated internally as tables, so as to speed up the scanning operations for analysis and exploration of the information.
It is also important to note that the objects managed in a management data base (this base contains all the information useful for a given application), which have a tree structure, are easily represented in the form of lists, this representation being attained in a completely natural manner for the SML language.
The external libraries of the set LIB are constituted of compiled procedures written originally in a language of the C type, but unlike the functions coding the primitives, they ignore the arguments or objects of the SML type. The functions coding primatives perform a conversion of the SML-type arguments into C-type language, or vice versa, and thus can be considered as procedures that link the external libraries of the set LIB with the SML functions.
The use of such functions as XAF or MIF is obligatory, both to enable the user to have access to any application and to enable retrieval of information contained in a management service of networks and information systems (data base, for example). the use of the GOF functions, while useful, it not obligatory, while the use of the SAF functions is never obligatory for an application, the fact, the SAF functions are used only to enable creation of and/or access to relational data bases. Either the relation with such a data base may be set up for one use, specific to one application, or the data base may be shared among several applications.
The interface API authorizes the application of any function SAF, XAF, GAF, MIF by way of a function BF in SML, which brings about the execution of a function coding a primitive SML. After some operations of verification and basic formatting, the function coding the primitive SML invokes the proper function enabling access to one of the external libraries of the set LIB.
In addition, the role of the kernel is to create the link between a call of a function SML and a function coding a primitive SML. The functions coding the SML primitives, like the functions SAF, XAF, GAF, MIF, are procedures in C-type language, with code compilation. The call of the original function SML is itself interpreted. In general, the interpretation phase amounts to less than 1% of the execution time, while the very great majority of the processing time is spent in executing compiled codes.
A major and advantageous characteristic of the SML environment has to do with its reactivity to external events. Hence by means of the interface, an SML application can access various services and ask that it be informed of any event produced as a result. For example, the action of a user (on a keyboard, screen, mouse, etc) may be considered as a specific event which "wakes up" an SML application, making it possible to begin a dialog with the user. This "wakeup" operation involves the execution of specific SML procedures with a view to processing the event. Such procedures, known as "callback" procedures, are extremely important for the development of any SML application.
An SML application is in a position to process events after calls to the appropriate source of events have been made and after it has furnished the name of the callback procedure that is to be triggered when an event occurs.
An SML application may in fact be considered as a collection of callback procedures. When the application is begun and after initialization, it notifies the event sources of its requirements by furnishing the names of the appropriate callback procedures. The application then waits for the appearance of these events.
The events that occur are managed by the kernel K of the SML interpreter. Hence the nucleus is not solely responsible for the relations among the SML calls and the functions coding the primitives SML, but also for the processing of the events. When an event originating in a given source occurs, the kernel waits, if needed, for the inactivity of the application and then activates the appropriate return procedure.
If an application is currently processing an event and some other event occurs, then the kernel waits for the task in progress to be achieved before activating the return procedure corresponding to the new event. Hence events may remain in a processing queue for a given application, with the first one in the queue being the next one to be processed. There is no concept of priority for processing events.
In accordance with the programming concepts relating to the present invention, an arbitrary SML application that is to be developed should in principle perform the following two essential tasks:
create an interface with the user, which incolces the display on the screen of objects (windows, dialog boxes, buttons, etc) used to control the dialog between the user and the application, and
retrieve, manipulate, and display the information requested by the user.
The SML language furnishes the interface with the various functions that authorize the execution of these two essential tasks.
In the usual way, the user interface is coded for the use of development and graphical user interface management systems, such as the known OSF/Motif-X/Windows system (trademarks of the Open Software Foundation and MIT, respectively). The SML language furnishes the interface for the compiled functions XAF that access the external library XML, an example being X/Motif.
Once the application has determined the information requested by the user, it must retrieve this information in the next step.
The information set that must be made available for the various applications is called the managed information base or MIB. This base does not consist of a simple data directory, as is true for a centralized data base, but rather is conceptual in nature, because it represents the information that may be furnished when it is required.
Accordingly, retrieval of information in the base MIB does not involve a request for access to a data base. It involves the request for information on the basis of a component that is capable of furnishing the information required. Each of its components manages one portion of the base MIB.
The interaction between an application (requesting component) and an information manager (a component that furnishes information) is obtained by means of messages sent between the two components. A manager will respond to the requests for information by supplying the application with portions of objects that it knows; the manager of these objects will hereinafter be called the object manager.
From the semantic point of view, the environment to which the invention applies uses an object-oriented paradigm, which means that a programmer will not use a procedure-oriented approach. An object differs from a procedure in that it is an entity by which a certain number of actions can be requested. The data specific to an object are never manipulated directly by anything other than the object itself, and there is no concept of global data as is generally true for the "procedure-oriented" model.
To develop an application in the present context, using an "object-oriented" model, it must be remembered that an entity that sends a message to an object has not waited for the end of processing of the message by the object, but instead, because operation is asynchronous, can send other messages to other objects while waiting for the response to the message sent to the first object. Contrarily, when a procedure is invoked, the call code blocks any other call as long as this procedure has not been acknowledged, since the operation is synchronous.
When these various applications are employed, the messages may designate and be applied directly to an object, because this object itself does not process the messages sent by an application; it is the object manager that performs the processing.
This applications and object manager model can be likened to the client-server model, in which the applications of the clients and the object managers are the servers. This requires merely that the applications request the services of the object managers. When an object manager receives a message sent by an application, it interprets and processes the message.
If an integrator agent is considered to be an object manager that furnishes information to an application that has sent a request, then this integrator agent, to furnish this information, must communicate via an interface with an agent (generally a component of another system) that manages the attribute values of a managed object of a management information base.
One important characteristic of an application is that it interacts directly with the user, which an object manager does not do. An application receives requests by way of the user interface and sends the information to the user, while contrarily an application does not manage the objects, just as it does not act for other applications or other object managers.
As has been noted above, an application reacts to events, which means that it effectively waits until an event, such as the interaction of a user, occurs. However, the application does not itself generate events; events are generated solely by the object managers.
When an application is used in an SML environment, it must prepare to respond to the interactions with a user. The requests for information from a user cause interactions between the application and one or more object managers. This then requires the active presence of the manager or managers on the one hand, and on the other that this manager or managers be ready to receive the messages sent by the applications. To do so, the managers are always ready for operation and must remain actively present as long as the applications are active.
In this context, all the applications and object managers communicate with one another by way of communications infrastructures that use standard protocols and services.
This infrastructure includes the communications management services, which in turn include the network and information system management services.
Both the applications and the object managers have access to the network and information system management services (based on the ISO CMIS standard). An application has access to these services (such as CMIS) by way of the interface API by means of the functions BF and MIF from the external library MIL, which in turn serves as an interface with the services, such as CMIS.
Two major services may be rendered to the applications in question by the network and information system management services, such as CMIS:
furnishing a dispatching or switching service between the applications and the object managers, by determining which manager is to receive a message sent by an application, as a function of the type of object that the application specifies (since the application does not know whether the object manager is located in the same system or a different system).
proposing to the applications functions that authorize the execution of operations on the managed objects of a managed objects base, of which the most important operations are the following:
GET: retrieves information from an object (the values of these attributes), which is the most frequently used operation.
CANCEL GET: enables an application to notify the network and information system management services that the number of responses already received after a GET operation is sufficient, and consequently any other response from an object manager must be rejected.
SET: gives the specifies values to the attibutes of the objects.
CREATE: creates an object instance.
DELETE: cancels an object instance.
An application cannot define the attribute values unless the definition of the object authorizes that operation. This is also true for the CREATE and DELETE operations.
One (nonlimiting) example of a set of functions BF in the language SML is described below with respect to certain conventions on the one hand and to its syntactical description on the other.
By convention:
A literal symbol indicates that it is itself a datum rather than a reference symbol.
An asterisk (*) indicates that the symbol preceding it is operation, and that it may be repeated as many times as desired.
A plus sign (+) indicates that the symbol preceding may be repeated as many times as desired, but it must be present at least once.
Curly braces ({}) indicate that the group of symbols between the square brackets is considered to be a single term.
Square brackets ( !) indicate that the group of symbols between parentheses is operation.
A separation bar (|) indicates that several alternatives exist.
Any comment begins with a semicolon and ends at the end of the line.
The numbers are represented by 32 bits with a sign and can be written in decimal form (by default), hexadecimal form (#x or 0x), or in their ASCII code (#/J).
The symbols are identifiers that enable naming functions or variables.
A symbol that begins with a colon (:) is a key word. Key words are used in the definition of functions.
The symbols in the SML language are monoevaluated, and consequently a symbol can be refer to a function or a variable, but not to both.
As in any Lisp dialect, a list is both a data structure and a program structure. By default, a list is evaluated, and the first element must be a function. An evaluation can nevertheless be avoided by using the function (').
Lists are the extendable sets of consecutive elements stored in a memory, and consequently they do not have the conventional Lisp structure of concatenated cells. Lists or list strings (sets of lists) are nevertheless processed as Common Lisp sequences. An "property" list is a special list composed of pairs, each pair containing an attribute and its associated value; the attribute should be a symbol.
The list strings are enclosed in quotation marks.
The principal control functions will now be enumerated.
"Catch" and "throw": These functions, manipulated in a relatively exceptional manner, offer a powerful mechanism for exiting from complex processing. The "catch" function evaluates a form, but if a "throw" with the same tag occurs during the evaluation of the "form" this evaluation is not completed, and "catch" returns the evaluation of the "result".
The tag must be defined as a target for the transfer of control. "Catch" and "throw" are paired. Several combinations of "catch" and "throw" may be used with different tags. A "catch" necessarily corresponds to a "throw", if a "throw" is encountered with an unknown tag, then an error is signalled.
"Cond": This is a conditional test. This function evaluates the "form" that is associated with the first test that returns a verified condition. The function returns the evaluation of the last of its forms. If no form is present, then a simple test value is returned. When each test returns a "nil" (nothing is found), then the "cond" function returns a "nil".
"Do": This function performs a general iteration; it furnishes a generalized iteration mechanism with an arbitrary numerical index. At the beginning, the variables are linked with their initial value, and then the function makes a loop which functions as follows:
Evaluation of the final test: If this attribute is verified and "results" are specified, the "results" are evaluated and the last evaluation is returned. If no "results" are specified, "nil" is returned.
Evaluation of each "form".
Evaluation of expressions "stepwise" from left to right: Each result is linked with the corresponding variable index. If "step" is omitted, the variable remains unchanged.
"Dolist": This function performs an interation in the elements of a list; it excessively assigns each element of the list to a "variable" and evaluates each "form". If "result" is omitted, then "nil" is returned.
"Dotimes": This function makes it possible to create a loop from 0 to (n-1), by proceeding as follows. First, it evaluates the number of the turn to be performed, and this number must be an integer. Next and successively, it assigns the integers from 0 to (number evaluated--1). For each iteration, the instructions of each form are executed. If the number evaluated is equal to 0 or to a negative value, the instructions are not executed. The result of this function is the evaluation of "result"; if the result is omitted the result is "nil".
"Eval": This function evaluates an SML expression in the instantaneous environment. A double evaluation is given, since the argument is evaluted by SML before being evaluated by this function.
"Exit": This function encloses the SML environment by terminating the execution.
"For" and "mapfor": These functions perform an iteration in a list of values. They successively assign a "variable" (not evaluated) to each of the list of evaluated values and execute the instructions. "For" returns the value of the evaluation of the last construction of the last iteration, while "mapfor" constructs a list composed of the successive "instruction" values for the iterations.
"If": Conditional test, whose function is similar to "cond", but with one level of parenthesis cancelled. It executes the portion "then" of the first condition verified, or the portion "else" (if any), if no prior condition has been verified.
"let": This function announces a local variable, by functioning as follows:
Evaluation of all the initial values, and linkage of these values with the corresponding variables.
Sequential evaluation of each "form".
If no initial value has been associated with a variable, then "nil" is initialized. The return value of the function is the value returned by the last "form".
"Progn": This function sequentially executes instructions, evaluates each "form", and returns the result of the last evaluation. It is useful when more than one instruction is expected, for example in the "then" portions of an "if" instruction.
"Quote" or "/": The purpose of this function is to prevent an evaluation. It returns the object without evaluating it.
"Set" or "setq": This function is used to assign a value to a variable. It is the equivalent of the function that assigns the Lisp dialects. In its "setq" form, the first argument is not evaluated, while in its "set" form, it is evaluated. These two functions evaluate the second argument and define the value of the first argument at the resultant value. The definition of the active values does not modify their value, but invoke a predetermined function for the value.
"Some" and "every": These two functions bring about an iteration to look for an attribute in a list. To do so, they apply an attribute function to each element on a list. "Some" applies the function until a value that is not "nil" is returned and then returns that value; otherwise, it returns "nil" at the end. "Every" applies the function until the return of a value "nil" and returns "nil", and otherwise at the end returns the last result obtained. The number of data lists must be equal to the number of arguments of the function applied. Hence the function is applied n times when n is the length of the first data list.
If one of the other lists has a size less then the first, it is considered to be a list of the same size as the first one obtained, by adding its last element to the end as many times as necessary. If the first list has a size less then another list, then only the first n elements of the other lists are labeled.
"Unless": This function, which is a negative conditional test, executes each instruction and returns the value of the last one, if the condition is evaluated at the value "nil"; if not, "nil" is returned. This is the converse of the "when" function described below.
"Unwind-protect": This function returns the evaluation of the "protected form", but guarantees an exit attempt via an internal "throw"; each "form" is evaluated in sequence before obeying "throw".
"When": This function, a positive conditional test, executes each instruction and returns the value of the last one if the condition evaluated is verified; if not, "nil" is returned.
"While": This function executes each instruction in sequence until a "nil" condition. The function always returns "nil".
"With" or "with-eval": These functions announce a local variable. They are constructions used to announce and initialize variables that are specific to a group of instructions. The active values and the functions are manipulated as desired, resetting their initial value to zero after execution of "with". The values are evaluated sequentially. The "context" argument is a list of variables and associated values (ownership list) which can be reused in several "with" functions. The "with-eval" functions evaluates the expression and then uses it as context. Taking the structure of the SML interpreter into account, "with" works both with active values and with functions.
The principal input/output functions are enumerated below.
"Close": Makes it possible to end the processing of an object in a flow. Converse instruction from the "open" instruction described below.
"Load": This function enables loading and executing an SML file, specified by "filename", by using a search path specified by a variable. A first attempt is made to find a file designated as "filename SML" in each directory of the specified path. Finally, if the file is not found, a search is made for a file designated as "filename". If the name of the file includes a "/" character, this name is considered to be an absolute path name, and the search path is not used. If any error occurs at the moment the file is read, an error message is transmitted, and the subsequent reading of the file is stopped. If the file is found, the function returns the name of the file in the form of a string. If the file is not found and the keyword "if-does-not-exist" is specified, then either an error is signaled or the "nil" function is returned. If the file is not found and the keyword "if-does-not exist" is not specified, an error is signaled.
"Open": Makes it possible to open the processing of an object in a flow. This functions creates a flow of objects by opening the file "filename" and returns an object of the "flow" type. The keywords and their corresponding values determine the type of flow to be created, and the choice between input, output, or both is specified by the keyword ":direction", and the direction is one of the following:
: input : input flow (by default)
: output : output flow
: io : bidirectional flow
The keyword: "if-exists" specifies the action to be taken if the file exists and is open in ":output" or ":io", and the key value is one of the following:
: append : The outset position is the end of the file (by default).
: overwrite : The outset position is the beginning of the file, and the contents of the current file, if any, are not overwritten.
: supercede : The outset position is the beginning of the file, and the contents of the current file, if any, are replaced.
The keyword ":type" specifies the type of file; the key value is one of the following:
: file : The flow created is a UNIX file (by default).
: string : The flow created is an internal string.
The input/output functions, such as "read" or "print" (described below) may be applied, as can the commands for manipulating the string.
The key word ":buffered" specifies whether the buffer register should or should not be implied upon each output operation, and the key value is one of the following:
nil: should not be emptied;
t: should be emptied (by default).
"prin1": This function prints the SML objects; each object is specified in its natural form, that is, without spacing and without division between lines. The function returns the last object evaluated. The output is "emptied" at the end of the call, depending on the value of the key word ":buffered" in the "open" function.
"Print": This function makes it possible to print a new line and then each SML object, each object being printed without spacing or division between lines. The function returns the last object evaluated. The output is again "emptied" at the end of the call, depending on the value of the keyword ":buffered" in the "open" function.
"*Print-readably*": Makes it possible to control the appearance of the printing. *Print-readably, is a variable. If the value is "nil" (by default), then any output can be read; that is, special characters are interpreted to improve legibility. If the value is "true", any output is printed as if it contained special characters, except for the escape sequences, which are always interpreted without taking into account the value of *print-readably*.
"*Print-level*": Makes it possible to control-printing of the depth of the lists. This function is a variable that controls the maximum depth of the lists to be printed.
"Provide" and "require": These functions manage the loading of a file. They help in determining whether an SML file has been loaded in such a way as to prevent its being loaded a second time. The common argument "file" must be a symbol which defines the file using its printing name. The "file" symbol is then defined at the value "nil" by one or the other function. The "require" function looks for whether the file is present and then loaded into SML. If the file is not present, then either it is loaded or nothing is done. Confirmation that a file has already been loaded is given by the "provide" function. The "provide" function confirms that the file has been loaded. This function is generally invoked in the loaded file.
"Read": Enables the reading and interpretation of a string. This functions reads the next expression in the input flow, if that is specified, or if not in "the standard input", analyzes it and returns it. At the end of the file, the function executes a "throw" to the "end of file" label.
"Read-char": This functions reads a character in the input flow, if that is specified, or in "the standard input" and returns it. This function is useful for binary files in which the bytes can be read in this manner.
"Read-line": This function reads a character string in the input flow, if that is specified, or if not in "the standard input" and return it, not taking the new line at the end into account. At the end of the file, it executes a "throw" to the "end of file" label.
"*Standard-error* or *standard-input* or *standard-output*": Functions used for standard flows. They correspond to global variables, and if not are defined by default at the associated values. If a variable is defined at the value "nil", it is reset to its value by default.
"Write-char": This function writes a character on the output flow, if that is specified, or if not on the "standard output" and returns the character. This function is useful for creating binary files in which the bytes can be written in this way.
"Write-line": This functions writes a string of characters on the output flow, if that is specified, or if not on the "standard output" and returns the string.
The definitions of the principal symbols follow:
"Defconstant": This function announces and defines a variable at a given value, which cannot be labeled in a "setq" or "let" function.
"Defvar": This functions announces that the specified variable is a global variable. The global variables can be read dynamically by "let" constructions.
"Documentation": sets or retrieves a documentation. If "string" is not specified, this function retrieves the documentation for the specified symbol. If the documentation does not exist, the value "nil" is returned. If "string" is specified, it is associated with "symbol", and an error appears if the symbol is not defined. The "documentation" may be defined by the "defvar", "defconstant", "defun", and "defmacro".
"Gensym": This functions generates and returns a new symbol. Its name is composed of the letter G, followed by a number incremented upon each function call.
"intern": This functions creates and returns a symbol (of a string) whose name is "string".
If a symbol with the same name is found, it is returned. This function is useful for creating "atoms" with special characters incorporated, such as "*" or blanks (spaces).
"Makunbound": This functions makes a symbol indefinite in such a manner that if the function "boundp" (described below) is applied to it, the value "nil" is returned.
The definitions of the principal attributes follow:
"/=": This is the test of inequality of the objects, which returns the "true" value is an object 1 is different from an object 2, and if not returns the value "nil".
"<": This is the test of strict inferiority, which compares two numbers and two strings and returns the value "t" if the first argument is less than or equal to a second one, and if not the value "nil" is returned. The strings are compared alphabetically.
"<=": Test of inferiority which compares two numbers or two strings and returns the value "t" if the first argument is less than or equal to the second one, and if not, the value "nil" is returned. The strings are again compared alphabetically.
">": Test of strict superiority, which compares two numbers or two strings and returns the value "t" if the first argument is greater than and not equal to the second one, and if not the value "nil" is returned, the strings being compared alphabetically.
">=": Test of superiority, which compares two numbers or two strings and returns the value "t" if the first argument is greater than or equal to the second one, and if not the value "nil" is
"And": This is a "logical AND" between expressions, which evaluates each "form" from left to right. If a form is evaluated at the value "nil", the function returns this value "nil"; if not, the value "t" is returned. If no argument is specified, the function returns the value "t".
"boundp": This functions tests whether an atom has already been defined. It returns the evaluated symbol if it has been defined, and if not the value "nil" is returned. This function is verified if the variable called "symbol" has a value.
"compare" : This function requires the comparison between two numbers or two strings and returns one of the following values:
A strictly positive number if the first argument is greater than the second one.
Zero, if the first and the second argument are equal.
A strictly negative number if the first argument is less than the second one.
"Eq" : Test of strict equality between two objects, which is verified only if the two objects are located at the same location in memory.
"Equal" or "=": Test of equality between two objects, which returns the value of the object 1 if it is the same as that of the object 2, and if not, the value "nil" is returned. The equality of the lists is verified by testing the equality of each of their elements.
"()" or "nil" : This is the value "nil" of the conventional Lisp language, in which an object is "true" if it is not "nil".
"Not": This is a "logical NO"; the value "t" is returned if the object has the value "nil", and if not it is the value "nil" that is returned.
"Or": This is a "logical OR" between expressions. It evaluates each form from left to right. If a form is evaluated at a "not nil" value, this evaluation is returned. If all the forms are evaluated at the value "nil", the last evaluation is returned.
"t": This is the true logical value.
"Type t": This is the "data type" attribute. This function returns "type" if the object is of this type, and if not the value "nil" is returned.
The list function definitions follow:
"Append": This function makes it possible to construct and return a new list or new string by concatenation of the arguments.
"Copy": This function copies an SML object and returns a copy of the object, which must be a list.
"Length": This function returns the number of elements of a list, or the number of characters of a string.
"List": This function constructs and returns a list of evaluated arguments.
"List-get" or "list-put" or "list-put|": These functions make it possible to obtain or define a value in a list. "List-get" returns a value in a list. "List-put|" changes the list and returns it, while "list-put" returns a new updated list. The value may be specified by a number (position) or an attribute (symbol). If an attribute is used, the list is considered to be an ownership list, and the labeled element of the list is the one that is just after the symbol in the list. If the position is used, this refers to the position of the element in the list beginning at zero. If the "position" is greater than that of the last member of the list, then
"List-get" returns the default value if it is specified, and not the value "nil".
"List-put" and "list-put|" insert the new member of the list in the correct position by filling the non-specified positions with values "nil" if necessary. If an "attribute" does not correspond to an existing attribute, then "list-get" returns the value by default if it is specified, and if not returns the value "nil".
"List-remove" or "list-remove|": These functions make it possible to remove one or more elements from a list. "List-remove|" changes the list and returns it, while "list-remove" returns a new updated list. When an "attribute" is used, the list is considered to be an ownership list. In that case, the attribute element and the one following it in the list are removed. If the "position" is used, this refers to the position of the element in the list beginning at zero. If the "attribute" is not paired with an existing attribute, or if the "position" is greater than that of the last member of the list, the list is unchanged.
"Make-list": This function constructs and returns a list containing the size of the elements, in which each element is initialized by "form", if this attribute is present, and if not by "nil".
"Map": This function applies a function to the elements of the lift or lists specified, returning a list or a string depending on the value of the "type of result", which determines what is constructed. The function applied must accept as many arguments as the number N of list arguments furnished. The N lists must have the same length L. The "Map" function returns a list or a string of length L, having as its elements the result of the call of the function with the L elements of the list, if a list is specified, or if for a plurality of lists the first elements of each list are specified, then the second elements of each list are returned, up to L elements.
"Maphash": This function applies a "function" with two arguments, each key and the corresponding value in the ownership list. It always returns the value "nil". It can also be used with a table.
"Nconc": This function executes the concatenation of a list 1 with each list. It physically modifies a sequence of a list or a string and returns the list 1.
"Position": In the first form, the list is analyzed with the "equal" attribute. If an "item" element is present, the function returns its index to the list beginning at zero; if not, it returns the value "nil". In the second form, the appearance of a "substring" element is looked for in the string. If this element is present, the function returns the position of the character at which it begins; if not, the value "nil" is returned.
"Reverse": This function returns a new list with the same elements but in reverse order.
"Sort": This functions puts the list in increasing order, using the "comparison" function.
The function named the "comparison" function is invoked with two elements to compare and must return an integer. Its value will be negative, zero, or positive, depending on whether the first argument is smaller than, equal to, or larger than the second one.
"Subseq": This function returns a sublist beginning at the element at the "start" position up to the element at the "end" position. "Start" and "end" are numbers beginning at zero. If the number of elements indexed is greater than the table of the list, the sublist returned is defined at the value "nil". This function may also be used with a string.
The definitions of the string and table functions follow:
Since a string is processed like a list of characters, list functions may also be used for strings, such as: "append", "length", "map", "max" "NCONC" "position" and "subseq".
"Match": This function makes it possible to match up and extract substrings from an SML string.
"String-down case" or "String-up case": These functions return a copy of a string after conversion.
Similarly, a certain number of list functions may be used to process the tables, such as:
"List-get", "list-put", "list-put|", "list-remove|", and "maphash". An object in a table is created by using the "coerce" function applied to an ownership list.
The definitions of the macros follow:
"Backquote" or "'": This functions creates a copy of a specified list using the list as a template for creating the copy.
"Defun": Makes it possible to define an SML function. This is the typical way of creating a new function defining the name of the function by using the parameters spelled out in the "lambda" list and in the "form".
"Defmacro": This function defines an SML macro. This is the normal way to define a new macro defining the name of the macro by using the parameters spelled out in the "lambda" list and in the "form".
"Lambda": This function defines a "lambda" expression, which is the basic form for determining an anonymous function by using "lambda" expressions. A "lambda" expression is composed of a lambda symbol, a lambda list, and the body of the lambda expression. A lambda list specifies the parameters. When a function is invoked, its arguments are matched with the parameters of the corresponding lambda list. If the parameters required are specified, the corresponding arguments must be present when the lambda expression is applied. A "lambda" list can use key words, beginning with the symbol & and defined as follows:
& optional: Optional parameters; if these arguments are not used, they are linked with the initial value, if one exists, and if not with the value "nil".
& rest: Resting parameters; when all the required and optional parameters are linked, then any following argument is created in a list and is linked with the resting parameters.
& key: Keyword parameters; these are arguments constituted of pairs including the key word calls and its value.
& aux: These are local variables, which are not actually parameters; this is the equivalent of the "let" function.
"Lambdamacro": This function defines a lambda macro function, which is the basic form for defining an anonymous macro. If parameters required are specified, the corresponding arguments must be present when the lambda expression is applied. A "lambdamacro" list can use key words beginning with the symbol & and defined in a manner equivalent to those of the "lambda" list: & optional, & rest, & key and & aux.
The definition of various numerical and other operators follows:
"+": Operator of addition of numbers; it may also be used as a concatenation operator for lists or strings. The type of result is determined from the type of the first argument: () for a list, "" for a string, and 0 for a number.
"*" and "/": Arithmetical operators which return the modulo, product and quotient of the arguments, respectively.
"-": operator of arithmetical difference.
"Logand", "logor", "lognot", "logxor": Operators that correspond to the operations of "logical AND", "logical OR", "logical NO" and "logical EXCLUSIVE OR" respectively.
"Max" and "min": Operators that return the maximum or minimum value, respectively, of a list of numbers or strings.
"Random": Operator that generates a random number.
"Coerce": Its function is to specify a type and convert the type of an object into that specified by the "type of result".
"Type-of": Its function is to return the internal SML type of the object.
"|" or "||": Execute an interpreter command; "|" executes the given command as a string with its given arguments and does not wait for the end of the operation, while "||" returns an input/output flow in relation to the input and output commands, this command being cancelled if the flow is cut.
"*Application-class*": This is a string constant that indicates the class of the application being run; for an SML application, the value is "SML".
"*Application-name*": This is a string constant that indicates the number of the application being run.
"Command-line-args": This function returns a list of strings that represents the arguments transmitted by the interpreter to SML at the time of startup.
"Get-internal-run-time": This function makes it possible to return the value of the execution or run time in milliseconds; if no argument is furnished, the value returned corresponds to the elapsed time, and if not the value depends on one of the following key words:
: Real : The time elapsed from the startup of the SML application (by default).
: User : The CPU time used during the execution of SML instructions.
: System : The CPU time used by the system for the SML computation.
"Getenv": If the variable name of the string is the name of an output variable of the interpreter, this functions returns this value as a string; if not, the function returns the value "nil".
"Setenv": This function defines the name of a variable of the interpreter of the value; these two arguments must be strings.
It is additionally possible with SML to differentiate the evaluation of expressions. The evaluation occurs then after a specified time and when any request has received its response. The internal representation of the time for the SML functions is the millisecond.
"Eval-after": The evaluation of expressions will be done after a certain period of time, this function taking place in two phases:
When "eval-after" is invoked, each form to be evaluated thereafter is saved with its context.
After the period of time specified, the context is linked and each form evaluated.
This function return an object of the "timer" type, which can be reset to zero by the "remove-timer" function described below.
"Eval-every": This function is similar to the preceding one but performs repetitive evaluations; it can certainly be reset to zero by the "remove-timer" function.
"Remove-timer": This function cancels an object of the "timer" type constructed by one of the functions "eval-after" or "eval-every".
SML also uses debugging tools, in particular the following functions:
"Hashinfo": This function furnishes statistics on the storage of atoms. The information returned is the number of symbols, the number of insertions into the table, and the number of collisions.
"Meminfo": This function furnishes and prints the status of the memory allocator used by SML.
"Oblist": This function returns and prints the names of the SML atoms already defined. If the "string" symbol is not specified, all the names defined are returned; if not, only the names containing the "string" symbol are returned.
"Stack-print-level": This function furnishes the number of structures of a stack printed by mistake.
"Trace-untrace": The "trace" function returns the list of functions executed up to its request. The "untrace" function returns the list of functions not yet executed up to the request, if any exists, and if not returns a value "nil".
As to the set of functions MIF, and as has already been noted above, this set enables access to the external library "MIU", which in turn serves as an interface with the network and information system management services in the context of an exchange of information between an application and an object manager. Taking into account concepts of programming relating to the network and information system management services, such as CMIS, an SML application must be capable of performing the following operations as illustrated in FIG. 2:
1) initialization of the services;
2) waiting for an action by a user;
3) transmission of a request for the network and information system management services;
4) setting up of a callback procedure for each request;
5) execution of the callback procedure when the request confirmation arrives;
6) repetition from step 2 until the last request by the user;
7) end of the application.
The set of functions XAF, in turn, enables access to the library XML, which has components available for developing and managing graphical user interfaces, such as X/Motif.
The architecture of a system of the X Window type is based on the client-server model.
The server manages all the input and output devices (such as the mouse). It creates and manipulates the windows on the screen and produces text and graphics. The application that uses the facilities offered by the server is called the client. The client communicates with the server after connection to the network by means of particular protocols. The server communicates with the clients by sending "events" to the client applications; a trivial example is when the server generates an event in response to an action exerted upon the mouse by a user. In the present context, this means that this type of event is taken charge of by the SML interpreter, and that a callback function specified for it is executed.
As shown in FIG. 3, an SML application using the network and information system management services, such as CMIS, at the same time as the external libraries enabling the development and management of graphical; user interfaces, such as X/Motif, must perform the following operations:
1) initialization of the two types of services;
2) creation and representation of user interface components, called "widgets",
3) setting up of callback procedures for user interactions;
4) waiting for an action by a user;
5) transmission of a request, by means of a callback procedure, for the network and information system management services;
6) setting up of a callback procedure for each request;
7) execution of the callback procedure when the request confirmation arrives;
8) repetition from step 4 up to the last request by the user;
9) end of the application.
The set of functions GAF in turn enables access to the library GOL authorizing the applications that use the graphic objects. Such applications make it possible to present and edit graphical objects is two dimensions from graphics libraries, which may be integrated with existing user interfaces, such as X/Motif, MS-Windows, Post Script, etc.
The role of the SAF functions is to authorize access to a specific library SLL of a structured language, such as SQL which in turn serves as an interface with relational data bases, such as INGRES (trademark of Ingres Co.) and ORACLE (trademark of Oracle Corp.), etc.
The functions SAF offer two levels of functionalities.
The first one makes it possible in the SML environment to construct standard requests in the structured language; the functions used at this level do not interact with the data base server. At the second level, the functions used interact with the data base server to authorize, among other actions, connection to or disconnection from the server and updating when changes are desired, among Other actions.
SML-specific SAF functions make it possible to realize the interface with the library SLL; the principles can be summarized in this way:
"sql-login": Enables connection to a data base server identified by the "connectid" parameter. This parameter is a string specifying the name of the data base server. If the connection is made the function returns the value "t", and if not the function "sql-error" (described below) is invoked and the value "nil" is returned.
"sql-logout": Enables disconnection from the data base server. This function terminates the current logical job unit. If a unit is in progress, it makes permanent any changes made during unit of work (commit), and the disconnection is made.
"sql-build-delete": Makes it possible to create a cancellation request as a string.
"sql-build-insert": Enables creating an insertion request as a string.
"sql-build-select": Enables creating a selection request as a string in the form of a list.
"sql-build-update": Enables creating a request for updating in the form of a string.
"sql-oper": Enables creating a conditional proposition as a string.
"sql-exec": Submission of a request by means of a "command" parameter to a data base server for execution.
The "command" parameter may be either a string or a result returned by one of the "sql-build-xxx" functions above. This function cannot be used except after effective connection with the data base server.
"sql-commit": Terminates a job unit by making permanent changes made during this job unit.
"sql-rollback": Terminates a job unit without taking changes made during this job unit into account.
"sql-error": This function is invoked in case of failure of a request.
"sql-get-error": Returns the last message of the data base server in response to the last request.
In general, the types of data in the structured language have their equivalents in the SML language; hence a correspondence between these two languages exists. Similarly, the names of tables and attributes in structured language are represented as atoms in the SML language (such as the Lisp language), it being understood that the values have their correspondence in these two languages.
It is also possible to write extensions to SML. To do so, the new functions must be written in C-type language and then compiled and then concatenated with the SML libraries.
A new extended SML interpreter is then obtained. In general, the development of an SML extension involves the following steps:
Development of a code in C-type language for the primitive that must be invoked each time a reference is made to a new SML name.
Making the association between the name of the new SML function and the name of the primitive in the compiled external library.
Construction of the new SML interpreter by linking all the libraries required.
In conclusion, this kind of programming language makes it possible to considerably shorten the time for development of an application. Hence the language used according to the invention, in which the typing bears on the contents of the variables rather than on the variables, makes it possible for interfaces for access to servers to be made which are very significantly simplified and which facilitate generic programming, the structure of the data being manipulated directly without any conditions. In effect, the SML variables have no type, because they are assumed all the exist in an indeterminate state (value "nil"), and it is at the moment of an assignment that the type is at the same time defined, thus authorizing a generic programming. This is a powerful advantage relative to the C-type languages, for which the types are compiled, which requires knowledge of them before programming. In addition, such a language, which has a cartesian nature and facilitates interfacing with various information servers, is advantageously used as a very high-level language for management applications. For example, it enables access to a library specific to a structured language, such as SQL, by respecting the cartesian nature of this language. In addition, it makes it possible to create interfaces that respect the treelike nature of a plurality of servers, as in the case of network administration platforms, for example.
Another major advantage is derived from the fact that the code that can be executed can easily and naturally be modified by itself in order to adapt to the types of data received. Hence an application can transmit a request to the network to ask the value of an administrative object without knowing its structure, and can then dynamically construct the display and updating functions adapted to the structure of the object received. In fact, as seen above, the fact that there is no difference between the program and the data means as a consequence the program can modify itself, and that an application is modified dynamically as a function of the data that it manipulates.
Furthermore, the use of a language such as SML, which has a similar representation for the programs and the data, is particularly easy and advantageous. In effect, such a language offers great ease of use, extreme flexibility, and considerable power, making it possible to transmit a code fragment having one direction for itself, an example being a transaction, offering a balance in the load between dynamic controlled processors, and authorizing dynamic modification of the code during execution. Depending on this use, the code is carried here with an ease and flexibility that are identical to that of a simple data transfer.
|Cited Patent
|Filing date
|Publication date
|May 18, 1992
|Mar 15, 1994
|Seer Technologies, Inc.
|Computer-aided software engineering facility
|Oct 23, 1992
|Feb 13, 1996
|Net Labs, Inc.
|Apparatus for remotely managing diverse information network resources
|Citing Patent
|Filing date
|Publication date
|Sep 24, 1998
|Feb 20, 2001
|International Business Machines Corporation
|Interpreter with virtualized interface
|Jul 22, 1998
|May 1, 2001
|Cisco Technology, Inc.
|Extensible network management system
|Sep 23, 1998
|Nov 6, 2001
|Mitel Corporation
|Bi-directional conversion library
|Apr 13, 1999
|Sep 24, 2002
|International Business Machines Corporation
|Compiler for supporting multiple runtime data representations
|Apr 8, 1999
|Oct 8, 2002
|International Business Machines Corporation
|Retrieval of style sheets from directories based upon partial characteristic matching
|Mar 12, 1997
|Dec 17, 2002
|Novell, Inc.
|System and method for providing interpreter applications access to server resources in a distributed network
|Apr 3, 2000
|Feb 11, 2003
|Mro Software, Inc.
|System and method for representing related concepts
|Apr 8, 1999
|Jul 8, 2003
|International Business Machines Corporation
|Dynamically determining the most appropriate location for style sheet application
|Sep 30, 1998
|Sep 16, 2003
|Journee Software Corp.
|Dynamic process-based enterprise computing system and method
|Sep 18, 2000
|Jul 20, 2004
|Cephire Technologies, Inc.
|Machine-to-machine e-commerce interface using extensible markup language
|Dec 23, 2000
|Aug 9, 2005
|International Business Machines Corporation
|Computer system, method, and business method for automating business-to-business communications
|May 2, 2003
|Jan 24, 2006
|Initiate Systems, Inc.
|Enterprise workflow screen based navigational process tool system and method
|Jan 31, 2003
|Dec 11, 2007
|Fujitsu Limited
|Program generating apparatus, program generating method and program generator
|Apr 8, 2004
|Dec 18, 2007
|Deutsche Post Ag
|Method for controlling electronic parcel compartment systems
|May 7, 2004
|May 26, 2009
|International Business Machines Corporation
|XML based scripting language
|Oct 16, 1999
|May 4, 2010
|Computer Associates Think, Inc.
|Method and system for an extensible macro language
|Feb 3, 2003
|May 11, 2010
|Diebold Self-Service Systems A Division Of Diebold, Incorporated
|Application service provider and automated transaction machine system and method
|Apr 18, 2006
|Jun 8, 2010
|Computer Associates Think, Inc.
|Method and system for generating dynamic comparison models
|May 26, 2006
|Nov 2, 2010
|Oracle America, Inc
|Searching computer programs that use different semantics
|Oct 8, 2002
|May 31, 2011
|Trilogy Development Group, Inc.
|Configuration representation and modeling using configuration spaces
|May 3, 2005
|Aug 30, 2011
|Oracle International Corporation
|Inventory and configuration management
|Oct 4, 2007
|Sep 20, 2011
|Welch Allyn, Inc.
|Device data sheets and data dictionaries for a dynamic medical object information base
|Feb 4, 2005
|Jun 12, 2012
|Thomson Licensing S.A.
|Multithread data processor
|Jan 25, 2007
|Jun 26, 2012
|Bae Systems Information And Electronic Systems Integration Inc.
|System design combining functional decomposition and object-oriented programming
|Jul 23, 2010
|Jul 3, 2012
|Welch Allyn, Inc.
|Configurable health-care equipment apparatus
|Mar 19, 2010
|Nov 27, 2012
|International Business Machines Corporation
|System and method for automatic weight generation for probabilistic matching
|Dec 31, 2007
|Nov 27, 2012
|International Business Machines Corporation
|Parsing information in data records and in different languages
|Jun 1, 2007
|Dec 11, 2012
|International Business Machines Corporation
|System and method for automatic weight generation for probabilistic matching
|Sep 13, 2007
|Jan 15, 2013
|International Business Machines Corporation
|Implementation defined segments for relational database systems
|Feb 5, 2007
|Jan 22, 2013
|International Business Machines Corporation
|Graphical user interface for configuration of an algorithm for the matching of data records
|Mar 27, 2008
|Feb 5, 2013
|International Business Machines Corporation
|Managing entities within a database
|Jan 14, 2010
|Feb 5, 2013
|International Business Machines Corporation
|Method and system for comparing attributes such as business names
|May 13, 2011
|Feb 5, 2013
|Versata Development Group, Inc.
|Configuration representation and modeling using configuration spaces
|Oct 4, 2007
|Mar 19, 2013
|Welch Allyn, Inc.
|Communication of information between a plurality of network elements
|Sep 26, 2008
|Apr 9, 2013
|International Business Machines Corporation
|Associating data records in multiple languages
|Dec 31, 2007
|Apr 16, 2013
|International Business Machines Corporation
|Service provisioning
|Mar 28, 2008
|Apr 23, 2013
|International Business Machines Corporation
|Data exchange among data sources
|Oct 4, 2007
|Jul 9, 2013
|Welch Allyn, Inc.
|Application generator for a dynamic medical object information base
|Jun 1, 2012
|Jul 30, 2013
|Welch Allyn, Inc.
|Configurable health-care equipment apparatus
|Apr 10, 2009
|Aug 13, 2013
|International Business Machines Corporation
|Indexing information about entities with respect to hierarchies
|Mar 22, 2007
|Aug 20, 2013
|International Business Machines Corporation
|Processing related data from information sources
|Mar 30, 2006
|Sep 24, 2013
|Welch Allyn, Inc.
|Communication of information between a plurality of network elements
|Jan 14, 2010
|Nov 19, 2013
|International Business Machines Corporation
|Method and system for filtering false positives
|Sep 28, 2007
|Apr 29, 2014
|International Business Machines Corporation
|Indexing, relating and managing information about entities
|Dec 17, 2010
|Jun 24, 2014
|Cisco Technology, Inc.
|Optimizing symbol manipulation language-based executable applications for distributed execution
|Oct 4, 2007
|Jul 22, 2014
|Welch Allyn, Inc.
|Dynamic medical object information base
|Sep 26, 2008
|Aug 5, 2014
|International Business Machines Corporation
|Analysis of a system for matching data records
|Jun 30, 2011
|Oct 7, 2014
|Accenture Global Services Limited
|Distributed computing system hierarchal structure manipulation
|Feb 21, 2013
|Oct 7, 2014
|Welch Allyn, Inc.
|Communication of information between a plurality of network elements
|Mar 20, 2008
|Oct 14, 2014
|Sap Ag
|Execution of program code having language-level integration of program models
|Dec 23, 2013
|Aug 25, 2015
|Ca, Inc.
|Reporting the presence of hardcoded strings on a user interface (UI)
|Feb 11, 2011
|Mar 15, 2016
|International Business Machines Corporation
|Method and system for indexing, relating and managing information about entities
|Jan 29, 2016
|Mar 21, 2017
|International Business Machines Corporation
|Method and system for indexing, relating and managing information about entities
|Jun 11, 2014
|May 9, 2017
|Welch Allyn, Inc.
|Dynamic medical object information base
|Mar 25, 2015
|Jun 27, 2017
|Ca, Inc.
|Editing software products using text mapping files
|Sep 17, 2001
|Apr 18, 2002
|Uwe Geuder
|Method and apparatus for defining interface and telecommunication system
|Dec 23, 2000
|Aug 29, 2002
|Eggebraaten Thomas John
|Computer system, method, and business method for automating business-to-business communications
|Mar 18, 2002
|Dec 5, 2002
|Mari Omori
|Method, computer program product and system for providing information processing service
|Feb 3, 2003
|Jul 3, 2003
|Diebold Self Service System, Division Of Diebold, Incorporated
|Application service provider and automated transaction machine system and method
|May 2, 2003
|Oct 23, 2003
|Journee Software Corp
|Dynamic process-based enterprise computing system and method
|Jan 31, 2003
|Nov 13, 2003
|Fujitsu Limited
|Program generating apparatus, program generating method and program generator
|Oct 28, 2002
|Apr 29, 2004
|Weijia Zhang
|Method and system for connecting to an application programming interface
|Apr 8, 2004
|Dec 23, 2004
|Boris Mayer
|Method for controlling electronic parcel compartment systems
|Feb 4, 2005
|Jun 16, 2005
|Thomson Licensing S. A.
|Multithread data processor
|Jul 12, 2004
|Jul 21, 2005
|Computer Associates Think, Inc.
|System and method for adding user-defined objects to a modeling tool
|Jun 14, 2004
|Dec 15, 2005
|Allen Joseph R
|Mounting bracket
|May 7, 2004
|Jan 5, 2006
|International Business Machines Corporation
|XML based scripting language
|May 3, 2005
|Feb 23, 2006
|Oracle International Corporation
|Inventory and configuration management
|Apr 18, 2006
|Oct 5, 2006
|Deffler Tad A
|Method and System for Generating Dynamic Comparison Models
|Aug 30, 2005
|Mar 1, 2007
|Geisinger Nile J
|Programming language abstractions for creating and controlling virtual computers, operating systems and networks
|Aug 30, 2005
|Mar 1, 2007
|Geisinger Nile J
|Method and apparatus for uniformly integrating operating system resources
|Aug 30, 2005
|Mar 22, 2007
|Geisinger Nile J
|Method and apparatus for providing cross-platform hardware support for computer platforms
|Aug 30, 2005
|Mar 29, 2007
|Geisinger Nile J
|Software executables having virtual hardware, operating systems, and networks
|Aug 30, 2005
|Mar 29, 2007
|Geisinger Nile J
|Computing platform having transparent access to resources of a host platform
|May 26, 2006
|Nov 29, 2007
|Chandan Bellur Nandakumaraiah
|Searching computer programs that use different semantics
|Jul 31, 2007
|Jan 31, 2008
|Geisinger Nile J
|Software executables having virtual hardware, operating systems, and networks
|Oct 4, 2007
|Apr 3, 2008
|Welch Allyn, Inc.
|Communication of information between a plurality of network elements
|Oct 4, 2007
|Jun 5, 2008
|Craw Chad E
|Device Data Sheets and Data Dictionaries for a Dynamic Medical Object Information Base
|Oct 4, 2007
|Jun 5, 2008
|Dellostritto James J
|Application generator for a dynamic medical object information base
|Oct 4, 2007
|Jun 12, 2008
|Dellostritto James J
|Dynamic medical object information base
|Dec 31, 2007
|Oct 2, 2008
|Initiate Systems, Inc.
|Method and System for Parsing Languages
|Sep 26, 2008
|Apr 2, 2009
|Initiate Systems, Inc.
|Method and system for analysis of a system for matching data records
|Apr 10, 2009
|Aug 6, 2009
|Initiate Systems, Inc.
|Method and System for Indexing Information about Entities with Respect to Hierarchies
|Mar 20, 2008
|Sep 24, 2009
|Sap Ag
|Execution of Program Code Having Language-Level Integration of Program Models
|Mar 30, 2006
|Jan 7, 2010
|Welch Allyn, Inc.
|Communication of information between a plurality of network elements
|Jun 29, 2007
|Jan 13, 2011
|Carruth J Scott
|Method and system for project management
|Mar 22, 2007
|Jan 13, 2011
|Glenn Goldenberg
|Processing related data from information sources
|Jul 23, 2010
|Jan 27, 2011
|Welch Allyn, Inc.
|Configurable health-care equipment apparatus
|Dec 17, 2010
|Jun 21, 2012
|Cisco Technology, Inc.
|Optimizing symbol manipulation language-based executable applications for distributed execution
|Jun 30, 2011
|Jan 3, 2013
|Accenture Global Services Limited
|Distributed computing system hierarchal structure manipulation
|Jul 22, 2010
|Feb 8, 2011
|Welch Allyn, Inc.
|Portions of a patient-monitor housing
|Jul 22, 2010
|Apr 5, 2011
|Welch Allyn, Inc.
|Patient-monitor housing
|Jul 22, 2010
|Nov 20, 2012
|Welch Allyn, Inc.
|Module for a patient-monitor or the like
|Jul 19, 2006
|Mar 26, 2013
|Mahogan Data Llc
|Machine-to-machine e-commerce interface using extensible markup language
|Oct 15, 1999
|Apr 27, 2000
|Computer Associates Think, Inc.
|Method and system for an extensible macro language
|Mar 27, 2001
|Oct 11, 2001
|Mro Software, Inc.
|System and method for representing related concepts
|U.S. Classification
|717/141, 717/139, 717/114
|International Classification
|Cooperative Classification
|European Classification
|Aug 28, 2001
|Fee payment
Year of fee payment: 4
|Aug 30, 2005
|Fee payment
Year of fee payment: 8
|Sep 10, 2006
Owner name: EVIDAN, FRANCE
Free format text: NUNC PRO TUNC ASSIGNMENT;ASSIGNOR:BULL S.A.;REEL/FRAME:018231/0190
Effective date: 20000630
|Aug 31, 2009
|Fee payment
Year of fee payment: 12


text:
Manchester, United Kingdom (PressExposure) October 13, 2008 -- SurgiCare, one of the UKâs leading cosmetic procedure providers, has added chest rejuvenation to its portfolio of treatments, following large demand for the procedure across the US.
Chest rejuvenation uses Botox to correct the tell tale signs of sun damage and wrinkly skin on the décolletage and has proved to be a popular new breast treatment in the US, with many predicting a similar response upon the introduction of the procedure in the UK. However, Surgicare are taking the treatment a step further, using filler technology rather than Botox for its procedures.
Using advanced Restylane Vital technology SurgiCare is able to combat the signs of ageing and sun damage for its patients by injecting the clear hyaluronic acid (HA) gel into the skin to replenish the skin's own HA levels, adding volume, hydrating the skin, and softening lines and wrinkles.
Restylane Vital is a new development in skin rejuvenation, providing deep hydration and moisturisation from within to improve skin tone and health. It stimulates the production of collagen and elastin to keep skin looking plump and hydrated, diminishing the appearance of fine crêpey lines caused by sun damage.
Mark Bury, chief executive for Surgicare said: "The trend for Botox based chest rejuvenation in the US has created a demand in the UK. However weâve found that Restylane Vital has proven to be much more effective than Botox for rejuvenating the neck and chest areas as it actually fills and plumps up the wrinkles, as well as diminishing the appearance of sun damage.
"Although Botox is effective in the treatment of wrinkles on the face such as smile and frown lines, it loses much of its effectiveness when treating deeper wrinkles and sagging of the skin caused by ageing and sun damage. Restylane Vital is able to achieve this natural vitality as it actually re-nourishes ageing skin with some of the hyaluronic acid it has lost over the years."
Resytylane Vital chest and neck rejuvenation treatments are non-surgical and daily activities can be resumed immediately after treatment. A course of 2 to 3 treatments a few weeks apart is initially recommended, although patients may opt to have more treatment courses in future if they choose.
PR Contact: Helen Conyers Parkway House Palatine Road Manchester M22 4DB 0161 817 6600 http://www.surgicare.co.uk

subset: commoncrawl


text:
VideoHive Free Hen 10396592
Stock Footage \ Nature
Editing \ Useful \ Filters \ Footage \ Without \ Presentations \ Advertising
Stock Footage - Free Hen 10396592 by contraponto @ VideoHive
Stock Footage \ Nature
Free Hen. Filmed in Full HD. 23,8 fps raw footage without any filters, ready for your editing. Useful as a backgrounds, commercials, documentaries, product presentations and advertising.
Alpha Channel: No; Looped Video: No; Frame Rate: 23.98; Resolution: 1920x1080; Video Encoding: H.264; File Size: 66MB; Number of Clips: 1; Total Clip(s) Length: 0:17; Individual Clip Lengths: 0:17.
Indigenous Houses - 01; Yellow Flower; Sunny Pool Pack; Exotic Flower Pack 02; Exotic Flower Pack 01; Wood Fire; Leaves on the wind.
Keywords: agriculture, animal, baby, bird, brazil, chicken, family, farm, free, group, hen, mother, nature, rural, young.


text:
|Doug Piranha:Chompy's Adventure
|Piranha Plant Inc.
|Wii U
|Release Date(s)
|February 3, 2013
|Age Rating(s)
Doug Piranha:Chompy's Adventure is a game in the Doug Piranha series. It was developed by Piranha Plant Inc. and published by Fantendo. Instead of the titular character of the series, Doug, Chompy is the playable character.
Captain Bomb was tired of Doug Piranha foiling his plans, so he set up a plan to capture him. He walked up to Doug's house, range the doorbell, and ran away. When Doug came out to answer the door, two Bob-Ombs jumped out and stuffed him in a sack. They carried him back to the base. Then, when Chompy the Goomba went out to see if Doug had seen who was at the door, he gasped and knew that the Bob-omb Pirates had captured him. Chompy then set out to save Doug.
Like most previous installments in the Doug Piranha series, it is a sidescrolling platformer. But instead of you controlling Doug, you control Chompy. Chompy has a variety of different moves, all different from Doug's.
|Name Effect Appearance
Freeze Lets you freeze enemies Blue Cape
|Gold Turns everything you touch into coins. Gold Cape
|Shoe Lets you jump on spikes. Green Shoe
|Music Lets you make note platforms. White Cape
|Tail Lets you swing your tail as an attack. Brown Cape
- Even though Chompy grabs capes to transform, he is shown without a cape when he transforms.
- This is Chompy's first appearance as a solo protagonist.


text:
On Fri, 19 Sep 2003 23:08:42 -0600 "Walt L. Williams" <firstname.lastname@example.com> wrote: > Is there anyone else out there being mail bombed with emails > that look like there from M$? The rate at which their coming > is increasing exponentially. My solution has been exim4, exiscan-acl, clamav, spamassassin and liberal use of shorewall's blacklist. -- Steve C. Lamb | I'm your priest, I'm your shrink, I'm your PGP Key: 8B6E99C5 | main connection to the switchboard of souls. -------------------------------+---------------------------------------------
Description: PGP signature


text:
Visit to a Thai Hospital (Don't worry I'm not Sick)
Bangkok Travel Blog› entry 7 of 25 › view all entries
Today as part of the requirements for my work permit I had
to go to a
The reason for the delay was that the Hospital that I was sent to is a private hospital and the reason my health certificate was free is that they wanted to have the chance to tell me about all the wonderful things their hospital has to offer so that if I ever need medical attention I will chose their hospital. To do this, they gave me an hour and a half long tour of the entire hospital. They have pretty much every piece of high tech medical equipment available and are very proud of all of them. So much so that our guide even spent 5 minutes showing me their brand new state-of-the-art mammogram machine. All joking aside, the hospital was very nice and looked more like a hotel than a hospital. In fact, I have stayed in a lot of hotels where the rooms were not as nice as the rooms at this hospital. Sticking with the hotel theme, the various grade of rooms have names like "Premium," "
Once I finished the tour, I was able to get my baseline checkup and health certificate completed in less than 30 minutes. After leaving the hospital I went to a photo shop and had some pictures taken for my work permit, then finally made it back to the office to finish some work before calling it a night.
On the way home I stopped at the Siam Paragon food court (which despite its swanky surroundings is surprisingly reasonably priced) for dinner. I had a ginger marinated pork dish with rice and did much better with the chopsticks today (I guess I was just out of practice).
John, Miles and I are planning on heading to


text:
Luke Barr
Luke Barr is an editor at Travel + Leisure magazine. A grandnephew of M.F.K. Fisher, he grew up in the San Francisco Bay Area and in Switzerland. He lives in Brooklyn with his family.
James Beard, Julia Child and M.F.K. Fisher are featured in this fascinating look at a seminal moment in culinary history [...]


text:
Stan Rollison's Automotive
Review for Stan Rollison's Automotive
Randy C. on 10/24/2013
Spoke with Debbie. She said she has been going to this facility for years and she has always been pleased with the service.
Vehicle: Mitsubishi Eclipse
Category: Service
Service Date: 10/12/2013
Review Created: 10/24/2013
This review was collected via phone interview by Customer Research Inc.


text:
Motlow State Public Safety Department Receives $2500 Grant from Tennessee Highway Safety Office
LYNCHBURG, TN (Nov. 4, 2016) — The Motlow State Public Safety Department was recently awarded a $2,500 grant from the Tennessee Highway Safety Office, according to Ray Higginbotham, director of the department.
On October 4, 2016, the Tennessee Highway Safety Office (THSO) and the Tennessee Department of Safety and Homeland Security announced the 384 agencies awarded $17.1 million in federal grant funding to support Tennessee highway safety efforts and education. 424 grants were distributed from the National Highway Traffic Safety Administration (NHTSA) through THSO for the 2016-2017 Federal Fiscal Year.
"The Tennessee Highway Safety Office is a great resource for law enforcement agencies across the state," said Higginbotham. "They have a strong commitment to the safety of all citizens and to higher education institutions within the state. Being able to form a partnership with the Tennessee Highway Safety Office and secure a grant also demonstrates the strong commitment that the Motlow Public Safety Department has to the safety of all students, faculty, staff, and visitors on all Motlow campuses each and every day.
"As the director of the department, it is my duty and responsibility to seek out alternative sources for additional funding to help the department effectively accomplish its mission. This grant will help to allow the department to continue to provide the highest level of service possible to all Motlow campuses, and to continue to protect and serve the Motlow community.
"The grant money will be used to purchase electronic speed monitoring signs for the Moore County campus," Higginbotham continued. "The Moore County campus is the only campus with a county road through the middle of it. The road has a significant amount of traffic traveling on it each and every day, including commercial vehicles. Most of the daily traffic traveling Ledford Mill Road is due to people coming to Motlow. However, there are a lot of vehicles on this particular road each day that are simply passing through the area for various reasons.
"Having the electronic speed monitoring signs on the roadway will hopefully have a positive impact on all motorists and make the area safer for everyone. The speed monitoring signs have proven to increase driver awareness and effectively slow motorists down in congested traffic areas. These signs use cutting edge technology to collect data and provide instant feedback to vehicles traveling in the area. The data that is collected can then be used to pinpoint problems with traffic flow. The department will use this data to effectively apply strategies and resources to increase traffic safety," concluded Higginbotham.
Data collected by these signs will also be used to help the Motlow State Public Safety Department apply for and hopefully receive additional grants in the future.
Every year, traffic safety advocates, non-profit organizations, emergency response personnel, law enforcement, District Attorneys' offices, and other state agencies across Tennessee seek funding through grant applications offered by THSO. Applicants who meet the required data-driven criteria and highway safety standards are awarded grant funds to support THSO's mission to reduce traffic crashes, injuries and fatalities. Grant funding provides essential highway safety training and equipment for law enforcement agencies, sophisticated crash data collection analysis technology, specialized DUI prosecutors, resources for emergency response personnel, and educational tools to help improve driver behavior.


text:
Help keep us on the web! Please donate today! Thanks in advance!
Congregational and Millerite preacher. In 1838 he accepted the message of a soon advent upon repeated reading of Evidence from Scripture by William Miller. Throughout the Christian churches at large he was well known, and counted many prominent leaders as friends, such as William Lloyd Garrison, Phoebe Palmer, and Charles Finney. After giving up preaching the message due to intense pressure from his fellow ministers, he again surrendered to his convictions in 1841 and became a leading preacher of the advent. To assist in conveying the prophetic message he produced what is called the "1843 chart." (See Picture)
By January 1844 he accepted the view of conditional immortality.
If William Miller can be credited with the beginning of proclaiming the first angel's message, Fitch easily was responsible for starting the preaching of the second, as churches began to close their doors to the advent message after the spring of 1844, and the message was given that "Babylon is fallen," calling advent believers to leave their churches. He fell ill after baptizing new converts in the cold waters of Lake Erie in the early fall, and died but a few days before the passing of the time, October 22, 1844. Ellen White later saw him in vision with the saved.
The Glory of God in the Earth
Letter to Brother Himes
Letter to the Presbytery of Newark
Letter to Rev. J. Litch, on the Second Coming of Christ
Letters by Charles Fitch from the Midnight Cry, March 14, 1844
The Power of the Gospel
Views on Sanctification
A Wonderful and Horrible Thing


text:
Ted Hughes, poet laureate, was one of the greatest writers of the 20th century. He was one of Britain's most important poets, his work infused with myth; a love of nature, conservation, and ecology; of fishing and beasts in brooding landscapes.
With an equal gift for poetry and prose, and with a soul as capacious as any poet in history, he was also a prolific children's writer and has been hailed as the greatest English letter writer since John Keats. His magnetic personality and insatiable appetite for friendship, love, and life also attracted more scandal than any poet since Lord Byron. His lifelong quest to come to terms with the suicide of his first wife, Sylvia Plath, is the saddest and most infamous moment in the public history of modern poetry.
Hughes left behind a more complete archive of notes and journals than any other major poet, including thousands of pages of drafts, unpublished poems, and memorandum books that make up an almost complete record of Hughes' inner life, which he preserved for posterity. Renowned scholar Jonathan Bate has spent five years in the Hughes archives, unearthing a wealth of new material. His book offers, for the first time, the full story of Hughes' life as it was lived, remembered, and reshaped in his art. It is a book that honors, though not uncritically, Hughes' poetry and the art of life writing, approached by his biographer with an honesty answerable to Hughes' own.
We've sent an email with your order details. Order ID #:
Listen on the Audible app or these devices.Launch Audible App
-or-Download Free Audible App
To access this title, visit your library in the app or on the desktop website.
Listen on the Audible app or these devices.Launch Audible App
-or-Download Free Audible App
Audible does not currently have the rights to sell this title in your country.
Please consider another book.Continue Browsing
Please add a payment method to continue.Add a Payment Method
Please edit your payment details or add a new card.
If the problem persists, contact customer service at (888) 283-5051Review My Payment Method
If the problem persists, contact customer service at (888) 283-5051
Please add your billing address to continue.Add My Billing Address
Please select a default credit card to continue.Select Credit Card
It looks like you've already used the specified payment method for a free trial.
Please contact customer service if you think we have made a mistake. (888) 283-5051Start Your $14.95 Membership
If the problem persists, contact customer service at (888) 283-5051
If the problem persists, contact customer service at (888) 283-5051
Phenomenal thanks to narrator!
- equinox14
Great Dead Poet
- Mark T Ryan


text:
Home / Stage/Collaborateur JuniorApply Now
It's a fact that the best candidates seek the most challenging training and the greatest opportunities for career advancement from a prospective employer. Our trainees shape and develop our future business, and, from the moment you join us, we will help steer and support you on the road to qualification and beyond.
We will ensure you have the necessary legal qualifications and experience in your chosen field of specialisation. We also place great emphasis on helping you develop your wider business skills.
Our training programme is constantly evolving to build the skills you will need to be successful in the fast moving world of international business. We provide experience in a range of areas of law and a balanced approach to gaining the knowledge, expertise and abilities you will need to qualify in the practice area of your choice.
This site uses cookies to improve your user experience. By using this site you agree to these cookies being set. To find out more see our cookies policy.


text:
BABY-faced band One Direction are trying to prove they are bad boys — by
trashing a telly and scooter.
Heart-throb Harry Styles, 18, said: "Everyone was saying we weren't very rock
'n' roll. I thought I'd throw a TV out of the Winnebago window."
But bandmate Louis Tomlinson, 19, admitted: "It didn't smash — it didn't even
have one scratch on it."
Rebel Zayn Malik, 19, crashed a limited edition moped hours before it was used
in a shoot.
He said: "They had to put red nail polish on it to cover the scratches."


text: I was determined to try moobaa's genie bottle earrings (https://www.craftster.org/forum/index.php?topic=65456.0) on the last day of the winter holidays, but something got under my contact lenses the day before & my eyes were all red and sore the next day. Since I couldn't look at bright light (in order to work on smaller beads), I have to postpone my plan . So here's the result of playing with the idea using some larger beads:


text:
MOVIE SYNOPSIS [ General Audiences ] Being a production of Australia, this feature film of 2011 has been excellently directed by Nay Htat. You can watch Equilateral online on TV cable or theaters with original audio in English at different dates. This film premiered in theaters in 2011.
Rating: 5 by 12 users./
Runtime: 100 minutes
Erryn Arkin, Stephanie Leigh, Jane Edwina Seymour and Gavin Williams.
Drama, Action, Criminal.
100-minute film (full movie) directed by Nay Htat.
The original audio of Equilateral has dialogues in Dolby Digital, it was produced in Australia.
It premiered in cinemas or television in 2011.
Screenplay written by Erryn Arkin.
Vanna Seang.
Nay Htat.
This film was produced and / or financed by New Picture Films.
Composed by Htay Zaw Htat.
Without commercial breaks, the full movie Equilateral has a duration of 100 minutes; the official trailer can be watched in streaming on the Internet. You can watch this full movie free in EnglishDolby Digital in movie TV channels, renting the DVD or with VoD services (Video On Demand player, Hulu) and PPV (Pay Per View, Netflix).
See the page of this full movie, Equilateral in FULLTV Movies.