Nothing Special   »   [go: up one dir, main page]

US20080022267A1 - Method and System for Dynamically Composing Distributed Interactive Applications from High-Level Programming Languages - Google Patents

Method and System for Dynamically Composing Distributed Interactive Applications from High-Level Programming Languages Download PDF

Info

Publication number
US20080022267A1
US20080022267A1 US11/568,353 US56835305A US2008022267A1 US 20080022267 A1 US20080022267 A1 US 20080022267A1 US 56835305 A US56835305 A US 56835305A US 2008022267 A1 US2008022267 A1 US 2008022267A1
Authority
US
United States
Prior art keywords
generating
input program
syntax tree
abstract syntax
class
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Abandoned
Application number
US11/568,353
Inventor
H. Johnson
Joel Webber
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Google LLC
Original Assignee
Google LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Google LLC filed Critical Google LLC
Priority to US11/568,353 priority Critical patent/US20080022267A1/en
Assigned to GOOGLE INC. reassignment GOOGLE INC. ASSIGNMENT OF ASSIGNORS INTEREST (SEE DOCUMENT FOR DETAILS). Assignors: INNUVO, LLC
Assigned to INNUVO, LLC reassignment INNUVO, LLC ASSIGNMENT OF ASSIGNORS INTEREST (SEE DOCUMENT FOR DETAILS). Assignors: JOHNSON, H. BRUCE, WEBBER, JOEL
Assigned to GOOGLE INC. reassignment GOOGLE INC. ASSIGNMENT OF ASSIGNORS INTEREST (SEE DOCUMENT FOR DETAILS). Assignors: INNUVO, LLC
Publication of US20080022267A1 publication Critical patent/US20080022267A1/en
Priority to US13/282,293 priority patent/US8745579B2/en
Assigned to GOOGLE LLC reassignment GOOGLE LLC CHANGE OF NAME (SEE DOCUMENT FOR DETAILS). Assignors: GOOGLE INC.
Abandoned legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/22Microcontrol or microprogram arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/38Creation or generation of source code for implementing user interfaces
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/51Source to source

Definitions

  • the present application is directed to a method and system for dynamic composition of distributed interactive applications from high-level programming languages.
  • the Internet is a global network of connected computer networks. Over the last decade, the Internet has grown in significant measure. A large number of computers on the Internet provide information in various forms. Teen with a computer connected to the Internet can potentially tap into this vast pool of information.
  • the information available via the Internet encompasses information available via a variety of types of application layer information servers such as SMTP (simple mail transfer protocol), POP3 (Post Office Protocol), GOPHER (RFC 1436), WAIS, HTTP (Hypertext Transfer Protocol, RFC 2616) and FTP (file transfer protocol, RFC 1123).
  • SMTP simple mail transfer protocol
  • POP3 Post Office Protocol
  • GOPHER GOPHER
  • WAIS Wireless Fidelity
  • HTTP Hypertext Transfer Protocol
  • RFC 2616 Hypertext Transfer Protocol
  • FTP file transfer protocol, RFC 1123
  • the Web consists of a subset of the computers connected to the Internet; the computers in this subset run Hypertext Transfer Protocol (HTTP) servers (Web servers).
  • HTTP Hypertext Transfer Protocol
  • Web servers Several extensions and modifications to HTTP have been proposed including, for example, an extension framework (RFC 2774) and authentication (RFC 2617).
  • Information on the Internet can be accessed through the use of a Uniform Resource Identifier (URI, RFC 2396).
  • URI Uniform Resource Identifier
  • a URI uniquely specifies the location of a particular piece of information on the Internet.
  • a URI will typically be composed of several components. The first component typically designates the protocol by which the address piece of information is accessed (e.g., HTTP, GOPHER, etc.).
  • This first component is separated from the remainder of the URI by a colon (‘:’).
  • the remainder of the URI will depend upon the protocol component. Typically, the remainder designates a computer on the Internet by name, or by IP number, as well as a more specific designation of the location of the resource on the designated computer. For instance, a typical URI for an HTTP resource might be:
  • URI Uniform Resource Names
  • Web servers host information in the form of Web pages; collectively the server and the information hosted are referred to as a Web site.
  • a significant number of Web pages are encoded using the Hypertext Markup Language (HTML) although other encodings using SGML, eXtensible Markup Language (XML), DHMTL or XHTML are possible.
  • HTML Hypertext Markup Language
  • XML eXtensible Markup Language
  • DHMTL eXtensible Markup Language
  • Web pages in these formatting languages may include links to other Web pages on the same Web site or another.
  • Web pages may be generated dynamically by a server by integrating a variety of elements into a formatted page prior to transmission to a Web client.
  • Web servers, and information servers of other types await requests for the information from Internet clients.
  • Client software has evolved that allows users of computers coinected to the Internet to access this information.
  • Advanced clients such as Netscape's Navigator and Microsoft's Internet Explorer allow users to access software provided via a variety of information servers in a unified client environment.
  • client software is referred to as browser software.
  • a typical system includes a system processor and a system data store (SDS) in communication with the system processor.
  • the system processor can include one or more processing elements.
  • the system processor also communicates with a communications adapter connected to a communication channel.
  • the communication channel may allow communication from the system processor to one or more client computers each executing a Web browser.
  • the methods described herein may execute upon any suitable hardware platform such as described above, or alternatively in more detail below.
  • the methods may further be embodied in computer executable instructions stored upon one or more computer readable media.
  • the steps of such methods can be implemented in suitable hardware such as field programmable gate arrays or application specific integrated circuits; other steps, or all steps, can be implemented via instructions executable by a general purpose processor.
  • the present application describes methods for dynamic composition of distributed interactive applications from high-level programming languages.
  • One such method includes the steps of: (1) receiving a request for an interactive application from a client, (2) selecting an input program in an input program language based upon the received request, (3) parsing the selected input program into an abstract syntax tree, (4) updating the abstract syntax tree based upon one or more deferred binding requests, and (5) generating the interactive application in a target language from the updated abstract syntax tree.
  • FIG. 1 displays an abstract overview of dynamic composition of an interactive program from an input program.
  • FIG. 2 represents a typical environment capable of implementing the present systems and methods.
  • FIG. 3 depicts an exemplary process for deferred binding.
  • FIG. 4 is a process diagram displaying steps in an interactive application generation.
  • FIG. 5 is a diagram illustrating generator usage of context information in several ways.
  • FIG. 6 displays an example incorporation of native code in the target language of the composed interactive program embedded within the input program.
  • FIG. 7 shows the various stages at which output programs can be cached in a typical web-oriented implementation.
  • FIG. 8 depicts an exemplary naming and caching approach.
  • the hardware of a typical execution environment for one or more of the components supporting the application development, composition and deployment function of the described systems and methods may include a system processor potentially including multiple processing elements, that may be distributed across the hardware components, where each processing element may be supported via a general purpose processor such as Intel-compatible processor platforms preferably using at least one PENTIUM class or CELERON class (Intel Corp., Santa Clara, Calif.) processor; alternative processors such as UltraSPARC (Sun Microsystems, Palo Alto, Calif.) and IBM zSeries class processors could be used in other embodiments, it is expected that future processors will be supported by the various implementations.
  • a general purpose processor such as Intel-compatible processor platforms preferably using at least one PENTIUM class or CELERON class (Intel Corp., Santa Clara, Calif.) processor; alternative processors such as UltraSPARC (Sun Microsystems, Palo Alto, Calif.) and IBM zSeries class processors could be used in other embodiments, it is expected that future processors will be supported by
  • processing element may refer to (1) a process running on a particular piece, or across particular pieces, of hardware, (2) a particular piece of hardware, or either (1) or (2) as the context allows.
  • Some implementations can include one or more limited special purpose processors such as a digital signal processor (DSP), application specific integrated circuits (ASIC) or a field programmable gate arrays (FPGA). Further, some implementations can use combinations of general purpose and special purpose processors.
  • DSP digital signal processor
  • ASIC application specific integrated circuits
  • FPGA field programmable gate arrays
  • the hardware further includes a system data store (SDS) that could include a variety of primary and secondary storage elements.
  • SDS would include RAM as part of the primary storage.
  • the primary storage may in some embodiments include other forms of memory such as cache memory, registers, non-volatile memory (e.g., FLASH, ROM, EPROM, etc.), etc.
  • the SDS may also include secondary storage including single, multiple and/or varied servers and storage elements.
  • the SDS may use internal storage devices connected to the system processor.
  • a local hard disk drive may serve as the secondary storage of the SDS, and a disk operating system executing on such a single processing element may act as a data server receiving and servicing data requests.
  • the different information used in the systems and methods disclosed herein may be logically or physically segregated within a single device serving as secondary storage for the SDS; multiple related data stores accessible through a unified management system, which together serve as the SDS; or multiple independent data stores individually accessible through disparate management systems, which may in some embodiments be collectively viewed as the SDS.
  • the various storage elements that comprise the physical architecture of the SDS may be centrally located or distributed across a variety of diverse locations.
  • database(s) are used to store and manipulate the data; in some such embodiments, one or more relational database management systems, such as DB2 (IBM, White Plains, N.Y.), SQL Server (Microsoft, Redmond, Wash.), ACCESS (Microsoft, Redmond, Wash.), ORACLE 8i (Oracle Corp., Redwood Shores, Calif.), Ingres (Computer Associates, Islandia, N.Y.), MySQL (MySQL AB, Sweden) or Adaptive Server Enterprise (Sybase Inc., Emeryville, Calif.), may be used in connection with a variety of storage devices/file servers that may include one or more standard magnetic and/or optical disk drives using any appropriate interface including, without limitation, IDE and SCSI.
  • a tape library such as Exabyte X80 (Exabyte Corporation, Boulder, Colo.), a storage attached network (SAN) solution such as available from (EMC, Inc., Hopkinton, Mass.), a network attached storage (NAS) solution such as a NetApp Filer 740 (Network Appliances, Sunnyvale, Calif.), or combinations thereof may be used.
  • the data store may use database systems with other architectures such as object-oriented, spatial, object-relational or hierarchical.
  • certain embodiments may use other storage implementations such as hash tables or flat files or combinations of such architectures.
  • Such alternative approaches may use data servers other than database management systems such as a hash table look-up server, procedure and/or process and/or a flat file retrieval server, procedure and/or process.
  • the SDS may use a combination of any of such approaches in organizing its secondary storage architecture.
  • the hardware components may each have an appropriate operating system such as WINDOWS/NT, WINDOWS 2000 or WINDOWS/XP Server (Microsoft, Redmond, Wash.), Solaris (Sun Microsystems, Palo Alto, Calif.), or LINUX (or other UNIX variant).
  • Web server functionality may be provided via an Internet Information Server (Microsoft, Redmond, Wash.), an Apache HTTP Server (Apache Software Foundation, Forest Hill, Md.), an iPlanet Web Server (iPlanet E-Commerce Solutions—A Sun—Netscape Alliance, Mountain View, Calif.) or other suitable Web server platform.
  • Browser software can communicate with such server software according to the methods as further described below.
  • a typical process consumes a program description (“input program”) 110 and, by optionally accounting for a variety of situational factors (“context”) 140 , produces 140 an enhanced derived output program (“output program”) 130 .
  • Input programs, and consequently the associated output programs are general-purpose in nature and need not be oriented toward any particular industry- or domain-specific concepts.
  • a typical implementation of the methods described herein includes one or more server components (e.g., 210 ) that process the input program to produce the output program in response to requests by one or more client components (e.g., 220 ).
  • Both client and server components would typically be implemented as software modules capable of interacting over a suitable communication channel according to an appropriate communication protocol.
  • the communication channel is preferably a computer network 230 according to an appropriate networking protocol such as TCP/IP or higher-level protocols such as HTTP.
  • Server components would typically be designed either as standalone processes (for example, an HTTP server) or as plug-ins for other host processes (for example, extensible HTTP servers such as Microsoft IIS or Apache httpd).
  • Client components would typically be designed as applications capable of being redirected by their users to arbitrary logical network locations.
  • a well-known example of such a client component is a web browser that allows its user to specify a network location via a URL and which sends and receives information using the HTTP protocol.
  • Other examples of appropriate client components include Java WebStart, a networked application “launcher.”
  • Any unambiguous expression of an author's intent in a computer-readable form is a potentially valid input program, including but not limited to program descriptions expressed using imperative programming languages such as the Java, C, C++, C#, or JavaScript languages, declarative programming languages such as the Prolog language or structured specifications as might be expressed with an XML-based schema, functional programming languages such as the Haskell or LISP languages, any other method for expressing the behavior of software that can be parsed and analyzed programmatically, or any combination of the foregoing.
  • imperative programming languages such as the Java, C, C++, C#, or JavaScript languages
  • declarative programming languages such as the Prolog language or structured specifications as might be expressed with an XML-based schema
  • functional programming languages such as the Haskell or LISP languages
  • Implementations of the described system may offer additional benefits if the input program can be analyzed and manipulated by tools via suitable preprocessing steps.
  • an implementation whose input programs are written in the Java language benefit from the existence of a universe of Java tools such as development environments, debuggers, profilers, code coverage analysis tools, unit testing tools and so on. This is relevant to the system described herein because even when the output program is not amenable to tools (or such tools are unavailable) to the same extent as the input program, the output program essentially captures the benefits of the input program being amenable to such tools.
  • the author is only concerned with the input program (the one to which good tools can be applied); the system ensures that the output program “just works.”
  • input programs are written in the Java language, for example, it is possible to introduce a concept such as “hosted mode” in which software developers can edit, run, test and debug their input programs in a completely Java-centric environment, then later create output programs in a completely different language (for example, JavaScript).
  • the effect is that developers can work in the very productive “hosted mode” development environment without concern for the language or format of the ultimate output program.
  • Context information that may influence the translation process may include, without limitation, (1) data specified implicitly by the requesting client (for example, in a typical implementation using the HTTP protocol the client might automatically send information about its stored “cookies” and other standard HTTP request headers such as its “User-Agent” designation”), (2) data specified explicitly by the requesting client (for example, in an HTTP-based implementation the client would send a query string from a user-supplied URL, explicit HTTP request headers, and other data resulting from program execution within the client), (3) data implicitly available to server components regarding their execution environment (for example, using the operating system idiom of “environment variables” or application programming interfaces provided by the operating system that describe the hardware and software configuration of the server component's host platform such as cultural and localization settings, system date, system time and other settings), and (4) data explicitly available to server components as specified by
  • the described system need not dictate availability of any particular types of context information, but instead may be implemented to be extensible by “context plug-ins” so that new sources of context information can be made available by adding to, rather than modifying, the system.
  • a typical implementation could use established mechanisms for dynamically loading code, including but not limited to designated Java classes, dynamic link libraries (DLLs), shared object code, and similar facilities for runtime loading of code. Designating which context plug-ins are used in a particular deployment of a system may be a reconfigurable choice, and the set of context plug-ins need be neither fixed nor implied by the server component in any way.
  • a typical implementation might store such information in a suitable data store such as database or structured file.
  • the output program can be produced at an arbitrary time relative to when the output program is needed by a client.
  • a typical implementation could provide the ability to produce the output program ahead of time (that is, before a client requests it), making it possible to produce pre-computed versions of the output program, allowing its user to assert at least some context information for which the output program should be created, including the ability to specify a URL query string, arbitrary HTTP request headers, and other system properties that can influence the production of the output program.
  • This ability to pre-compute output programs is beneficial when there are many output program variations and the delay due to processing on-the-fly is undesirable.
  • the described system instead, or in addition, could have the ability to delay production of output programs until a client actually requests a program.
  • the ability to produce the output program on-the-fly enables usage scenarios in which even the timeframe of the request can affect the output program produced. For example, if the output program is designed to include generated code whose content is based on the current state of data in a database, the system's ability to wait until a request is actually made (as opposed to producing the output program ahead of time without regard to the timing of the request) allows production of the most up-to-date output program possible.
  • a typical implementation may support on-the-fly production of output programs by insinuating itself into the process of fulfilling HTTP requests.
  • a preferred method of accounting for context when producing the output program is termed “deferred binding” as depicted in FIG. 3 , wherein the server component transparently replaces a request to instantiate one class or interface 310 —(with said request possibly being made indirectly via a “factory” method, as appropriate for the semantics of the input language) with a request to instantiate another class that is a compatible alternative such that the requesting code need not be aware of the substitution by virtue of polymorphism or a similar abstraction mechanism.
  • the choice of which class to substitute for the requested class or interface is a function of both the context 320 at the time of the program request as well as a set of rules 330 .
  • a typical implementation of a deferred binding configuration consists of a set of criteria, a set of contexts 320 , and a set of rules 330 .
  • the class or interface being instantiated that is subject to deferred binding is referred to as the “requested class” or the “requested interface,” respectively.
  • Subsequent references to a “requested class” should be understood to also mean “requested class or interface.”
  • the result of a deferred binding decision 340 is the name of a class that should be substituted for the requested class (the “substitute class”) (e.g., 350 A, 350 B).
  • a criterion can be expressed as any compatible Java class, referred to in the configuration by its fully-qualified name (e.g. “com.innuvo.dcs.server.criteria.UserLanguage”). Criteria are used as “decision axes” on which deferred binding decisions can be made.
  • a context plug-in can be expressed as any compatible Java class, referred to in the configuration by its fully-qualified name (e.g. “com.innuvo.dcs.server.contexts.HttpRequestContext”). Contexts are used to fetch and normalize values associated with criteria so that criteria values can be referred to within rules without regard to exactly where they originate.
  • the configuration specifies which context supplies its request value.
  • a “request value” is a string value associated with a particular criterion.
  • Each unique application request can have a different set of request values. However, for the duration of any particular request, a request value is typically unchanging once supplied by a context.
  • each deferred binding rule has (1) a matching behavior that determines how strongly it should be considered as a candidate for the one “deciding rule” to make the deferred binding decision and (2) a collection of actions, at most one of which is to be invoked if its containing rule is selected as the deciding rule.
  • rule matching behaviors are typical, although additional behaviors could be added: (1) a “class-is” rule applies when the requested class is a particular specified class; (2) an “interface-is” rule applies when a requested interface is a particular specified interface; (3) a “class-extends” rule applies when the input class directly or indirectly extends a specified class; (4) an “interface-extends” rule applies when the requested interface directly or indirectly extends the specified interface; and (5) a “class-implements” rule applies when the requested class directly or indirectly implements a specified interface.
  • the deciding rule is chosen by computing a score for every rule based on how specifically the rule matches the requested class. The rule receiving the highest score and thus being the most specific is chosen as the deciding rule. It is also possible that no rule applies, in which case an implementation would typically instantiate the requested class itself without substitution.
  • Each action has a set of conditions that can be matched to evaluate how well the action fits the current request.
  • Each condition specifies a criterion and a match value.
  • a match value is compared against a corresponding request value having the same criterion and is used to test whether or not a condition is met.
  • a match value can be an exact string to match (for example, “en”) or the wildcard value (“*”), which matches any request value.
  • Realizing a substitute class means that code can be executed in the process of determining the name and/or the content of the substitute class; this code can, for example, generate the substitute class from scratch during the deferred binding operation.
  • a “replace-with” action e.g., 355 A, 355 B
  • a “generate-using” action e.g., 360
  • realizes the substitute class dynamically by delegating to a specific generator the decision of which class is chosen.
  • a deferred binding “generator” can be expressed as any compatible Java class, referred to in the configuration by its fully-qualified name (e.g. “com.innuvo.dcs.server.generators.StringClassGenerator”).
  • a generator would typically be invoked when performing a “generate-using” action. Generators execute arbitrary code to complete the deferred binding operation. For example, a generator may (1) programmatically compute the name of the substitute class, (2) gather data from the request or from other data sources, (3) ensure that the substitute class is up-to-date, (4) create the source code for the substitute class if it does not exist, or (5) perform combinations of the preceding or other actions to determine and realize the substitute class.
  • FIG. 4 depicts an example implementation of the described system that is oriented toward creating interactive web applications.
  • An end user's client component e.g., Web browser
  • the server component receives the request and recognizes that an interactive web application should be generated.
  • the server component parses the high level input program such as Java input program 415 into an abstract syntax tree (AST).
  • AST abstract syntax tree
  • a determination is then made as to whether the AST has any remaining deferred binding requests in step 430 . If so, a deferred binding decision occurs in step 440 ; a particular exemplary deferred binding decision process is depicted in FIG. 3 .
  • the AST is then updated in step 450 based upon the deferred binding decision and the process continues with a further decision at step 430 .
  • the AST is optimized in step 460 .
  • JavaScript code (the requested interactive web application) 475 is generated from the optimized AST.
  • Input programs can be written in the Java language and output programs are produced by compiling the input program into the JavaScript language.
  • This implementation can be thought of as a “request-time compiler,” several benefits of which stem at least in part from the confluence of two aspects of the system's design. (1) Delaying compilation until a request is made allows information about the requester to be included in deferred binding decisions. This is beneficial because it provides, among other benefits, an opportunity to conditionally include subsets of the input program that are relevant to the requester while excluding subsets of the input program that are not relevant.
  • Deferred binding substitutions can occur during compilation rather than when the output program is already running (as is the case with traditional “factory pattern” implementations in the prior art), allowing the compiler's analysis, optimization, and code generation phases to take the exact type of substitute classes into account, as opposed to being forced to treat them polymorphically. Deferred binding instantiations can be treated “as if the developer had chosen the substitute class in the first place.”
  • the web browser's “User-Agent” identifier can inform deferred binding decisions such that only code appropriate for the requesting web browser need be included in the output program.
  • a variety of benefits result, including: (1) unneeded code (for example, code to support user agents other than the requester) is not reflected in the output program, thus reducing its size, improving its download time, and decreasing its memory consumption; (2) the compiler's optimizer can thoroughly analyze the program using knowledge of the exact types of substitute classes, providing a wealth of information for optimizing the output program in terms of size, speed or combinations thereof (including but not limited to method inlining, dead code elimination, loop unrolling, and other compiler optimizations); and (3) the deferred binding mechanism provides a structured and efficient way to “fork” code that is external to the input program, thus sparing the input program from scattering “if-then-else” tests throughout to achieve code forking—such tests would otherwise be burdensome in terms of size, runtime speed, and maintainability.
  • An implementation may also choose to add the additional restriction that no code may be dynamically loaded in the output program as it runs, allowing the optimizer to perform deep global optimizations by inferring extra information about the program structure such as identifying classes that are implicitly “final” (to use the Java vocabulary) and whose methods are therefore candidates for inlining and subsequent optimizations.
  • an algorithm such as deferred binding provides an extensible framework for introducing on-demand code generation.
  • FIG. 3 shows an exemplary approach to how a substitute class can be created as needed during the decision process.
  • the system could typically ensure that context information, including the type of the requested class, is available to inform the code generation process.
  • Generators can use this context information in a variety of ways, including but not limited to (1) determining what to name the generated class, (2) determining how to access data that will be infused into the generated class (for example, providing a database “connection string”), and (3) using type interrogation techniques (for example, Java reflection) to examine the requested class for purposes such as (a) inferring how to generate the substitute class in a compatible way, such as knowing which methods to override and (b) allowing the contents of the requested class itself to affect code generation, such as by parsing code comments for metadata or by enumerating, parsing the names of, or invoking methods on an instance of the requested class. In other words, the requested class itself can guide the behavior of the generator. Such useage is illustrated in FIG. 5 .
  • a deferred binding generator is used to automatically produce remote procedure call (RPC) proxies that are automatically integrated into the output program without programmer intervention.
  • RPC remote procedure call
  • This approach is desirable because traditional RPC techniques require programmers to perform a separate, explicit step such as running a proxy/stub compiler to generate the required proxy and stub classes.
  • the implementation referred to above uses Java reflection to examine a requested interface, analyzing the names, parameter types and return types of its methods to generate a substitute class that automatically performs the caller-side serialization of RPC calls as well as deserialization of RPC results.
  • One preferred implementation of the described system provides the ability to smoothly integrate portions of code written directly in the language of the output program (or in principle any other language) within the input program in a reasonably natural way, referred to herein as “native code integration.” This facility follows the tradition of analogous techniques such as allowing inline assembly in C language source code. In one implementation that translates Java into JavaScript, for example, the ability to intertwine handwritten JavaScript into a Java class definition has proven very useful for writing low-level and/or performance-sensitive code.
  • FIG. 6 depicts an exemplary incorporation of native JavaScript code.
  • this facility may be open to use by any author of input programs so as to make it possible to create integration libraries and other tasks that necessitate bypassing the language of the input program and accessing concepts in the language of the output program directly.
  • Examples of how this facility could be utilized include Java programming interfaces encapsulating JavaScript code to interface with browser-hosted ActiveX controls or other plug-ins such as Macromedia Flash as well as selectively writing critical algorithms in the language of the output program to improve performance or reduce size.
  • a hosted mode facility allows development and debugging of input programs using Java tools.
  • a complication arises when native code integration is introduced in that a hosted mode Java environment does not understand JavaScript.
  • FIG. 6 for example, the handwritten JavaScript is in a Java comment and is completely stripped away when the Java input program is running in hosted mode. This would appear to limit the utility of hosted mode in cases where native code integration was required.
  • Deferred binding generators can solve this problem: a generator can be invoked to create a subclass on the fly in hosted mode for any class containing handwritten JavaScript that invokes a subsystem for injecting actual JavaScript into the process as it is running. Such a generator would examine the requested class to parse out the methods as well as the specially-formatted comments containing JavaScript. As an example of how this parsed JavaScript can be used in hosted mode, note that it is possible to create a Win32 DLL that is accessible via a Java Native Interface (JNI) library that hosts the Internet Explorer browser ActiveX control in a Win32 window; this JNI library provides access to the Internet Explorer “script” object that allows arbitrary JavaScript to be executed.
  • JNI Java Native Interface
  • the generated subclass can use the JNI pass-through DLL to send JavaScript to Internet Explorer for execution without the hosted mode development system being aware of anything other than the Java language.
  • the combination of these fundamental techniques allows Java code to arbitrarily integrate JavaScript in a hosted mode environment.
  • the contents of the specially-formatted comment blocks that is, the handwritten JavaScript
  • implementations of the described system may attempt to transparently integrate such error-handling mechanisms into the language of the input program. This prevents software developers from having to consider error-handling scenarios that occur in an output program in terms of mechanisms that are not present in the language of the input program.
  • Java input programs have an exception mechanism defined
  • JavaScript output programs also have an exception mechanism defined that is different that the Java mechanism. The result is that code to handle exceptions in the Java input program is not necessarily sufficient to catch all exceptions that might occur in the JavaScript output program.
  • One preferred implementation automatically generates special code in the output program that transforms unhandled JavaScript exceptions into a form that can be caught by the structures generated by the Java code written by the author of the input program. That is, a Java input program can be written to catch “RuntimeException” objects and any error that occurs while the JavaScript output program is running that is unique to JavaScript will be automatically caught and transformed into a RuntimeException object which can be caught. This technique unifies exception handling into the language of the input program, which greatly simplifies input program development.
  • the described system performs a translation of the input program to an equivalent output program, it has the opportunity to use “hints” from the input program to guide code generation and optimization. This ability may be of particular importance when certain aspects of the language of the input program are difficult or inefficient to implement in the language of the output program.
  • the described system facilitates hierarchical caching of generated output programs. Such a design increases the speed at which the output program can be fetched and executed by the client component. The best outcome is that the Client Component itself can cache output programs, completely bypassing network fetches.
  • FIG. 7 shows the various stages at which output programs can be cached in a typical web-oriented implementation.
  • an output program is cached in a local data store such as RAM or disk directly accessible by a client component.
  • the output program is cached in a data store directly accessible by an intermediate proxy, mirror or accelerator web server on a local communication network accessible by the client component.
  • the output program is cached in a data store directly accessible by an intermediate proxy, a mirror or an accelerator web server on the Internet.
  • the output program is cached in a data store directly accessible by the web server with which the server component is integrated.
  • the output program is cached in a data store directly accessible by the server component. Any of levels 720 , 730 , 740 and/or 750 could be clustered in some implementations to serve more users concurrently and to improve throughput.
  • the described system is unique in that traditional web applications produce one page at a time such that each page intermingles HTML and data specific to that page. This inhibits aggressive hierarchical caching because, even though the HTML layout of the page may not change between requests, the data incorporated may, so the entire page must be recopied to each cache level.
  • the mentioned web implementation can eliminate such situation because the output program does not vary with the particular data that needs to be displayed.
  • a complication that normally arises with hierarchical caching is the question of “freshness” of cached copies. How can intermediate caches recognize when their copies of output programs are out of date with respect to the authoritative version (that is, original versions produced directly by a server component)? In the worst case, every request requires a full round-trip back to the server component simply to ask the question “Is my copy out of date?” As illustrated in FIG. 8 , the described system solves this dilemma by prescribing that every request for an output program is first answered with a small but uncacheable response (called the “response wrapper”) that includes a reference to the actual output program 820 . The output program is in turn named with a “strong name.” The strong name is computed from the content of the output program itself.
  • the strong name of an output program is an MD5 hash of all the bytes that constitute the output program, where the MD5 hash code has enough bit capacity to avoid hash code collisions over all reasonable-length output programs.
  • Other techniques for generating strong names could of course be used so long as the net effect is that (1) no two output programs having different contents could possibly have the same strong name (and thus could not be confused with each other) and (2) identical copies of an output program always do have the same strong name.
  • intermediate caches need never check with the server component ( 810 A, 810 B) as to whether or not a cached copy of an output program ( 820 A, 820 B) is stale since the response wrapper comes directly from the server component and is uncacheable, and it is the response wrapper that dictates the strong name of the output program that the client component 830 should request.
  • any intermediate cache e.g., local cache 840
  • any intermediate cache that contains a copy having that strong name can be assured that it is up-to-date without double-checking with the server component and can thus immediately respond to the client component with its copy.
  • server components are clustered, there is no guarantee that the server component instance that sends the response wrapper will be the same server component instance that receives the output program request. For example, some round-robin load balancers intentionally distributed requests to different server component instances. Thus, it is vital that output programs produced by different server component instances but from the same input program have the same strong names.
  • Preferred implementations of the described system whose output programs are web-accessible applications (for example, JavaScript and DHTML applications as described above) can incorporate a mechanism for monitoring software license compliance for one of more instances of the server component.
  • a web-oriented implementation will typically return a response wrapper that references the strong name of the appropriate output program.
  • a response wrapper can be placed a highly unique but well-known identifier called a “license tag.”
  • a globally unique id (“GUID”) is an appropriate form of license tag, although many other formulations of such a unique key are possible.
  • the response wrapper also contains an encrypted version of the software license key of the server component that produced the response wrapper, called the “broadcast license”.
  • the response wrapper Since the response wrapper is produced first, when web-based search engines such as Google request a web application produced with the described system, they receive and store a copy of the response wrapper. (Typically they store a copy despite the response wrapper's uncacheable nature, although the server component may need to compensate by marking a response wrapper temporarily cacheable in the specific cases where a search engine, as opposed to a web browser, is requesting the application.)
  • their search results database stores pages containing both the well-known license tag and the broadcast license. It is consequently possible to query said search engine for the well-known license tag to produce a list of cached response wrappers, each containing a broadcast license. By analyzing these cached response wrappers and their broadcast licenses, it is possible to identify duplicate software license keys, which can subsequently be used to identify unauthorized or unlicensed usage.
  • the server component license key is typically implemented as an encrypted block of information including information on the customer, serial number, licensed processor count, and so forth which can be decrypted and verified by a server component instance.
  • An implementation should not broadcast the server license in the response wrapper in an un-encoded form, as it would be very easy for others to copy license keys and use without authorization.
  • a preferred implementation of the server component encrypts the license key using a different public key suitable for cryptography such that only the implementer of the server component (typically a software vendor) would have the necessary private key to decrypt the broadcast license back into the issued license, allowing a vendor who so chooses to begin a trail of investigation to identify unauthorized copying of license keys.

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Stored Programmes (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

The present application is directed to a method and system for dynamic composition of distributed interactive applications from high-level programming languages. A typical system includes a system processor and a system data store (SDS) in communication with the system processor (120). The methods described herein may execute upon any suitable hardware platform such as the system processor and SDS. The methods may further be embodied in computer executable instructions stored upon one or more computer readable media. Alternatively, some, or all, the steps of such methods can be implemented in suitable hardware such as field programmable gate arrays or application specific integrated circuits; other steps, or all steps, can be implemented via instructions executable by a general purpose processor. An exemplary method includes the steps of: (1) receiving a request for an interactive application from a client, (210), (2) selecting an input program (850) in an input program language based upon the received request. (3) Parsing the selected input program into an abstract syntax tree (420), (4) updating the abstract syntax tree based upon one or more deferred binding requests (430), and (5) generating (470) the interactive application in a target language from the updated abstract syntax tree.

Description

    CROSS-REFERENCE TO RELATED APPLICATIONS
  • The present application claims priority pursuant to 35 U.S.C. §119(e) to commonly owned U.S. Provisional Application Nos. 60/565,443 and 60/666,116, both of which are fully incorporated herein for all purposes by this reference.
  • BACKGROUND
  • The present application is directed to a method and system for dynamic composition of distributed interactive applications from high-level programming languages. The Internet is a global network of connected computer networks. Over the last decade, the Internet has grown in significant measure. A large number of computers on the Internet provide information in various forms. Anyone with a computer connected to the Internet can potentially tap into this vast pool of information.
  • The information available via the Internet encompasses information available via a variety of types of application layer information servers such as SMTP (simple mail transfer protocol), POP3 (Post Office Protocol), GOPHER (RFC 1436), WAIS, HTTP (Hypertext Transfer Protocol, RFC 2616) and FTP (file transfer protocol, RFC 1123).
  • One of the most wide spread methods of providing information over the Internet is via the World Wide Web (the Web). The Web consists of a subset of the computers connected to the Internet; the computers in this subset run Hypertext Transfer Protocol (HTTP) servers (Web servers). Several extensions and modifications to HTTP have been proposed including, for example, an extension framework (RFC 2774) and authentication (RFC 2617). Information on the Internet can be accessed through the use of a Uniform Resource Identifier (URI, RFC 2396). A URI uniquely specifies the location of a particular piece of information on the Internet. A URI will typically be composed of several components. The first component typically designates the protocol by which the address piece of information is accessed (e.g., HTTP, GOPHER, etc.). This first component is separated from the remainder of the URI by a colon (‘:’). The remainder of the URI will depend upon the protocol component. Typically, the remainder designates a computer on the Internet by name, or by IP number, as well as a more specific designation of the location of the resource on the designated computer. For instance, a typical URI for an HTTP resource might be:
  • http://www.server.com/dir1/dir2/resource.htm
  • Where HTTP is the protocol, www.server.com is the designated computer name and /dir1/dir2/resouce.htm designates the location of the resource on the designated computer. The term URI includes Uniform Resource Names (URN's) including URN's as defined according to RFC 2141.
  • Web servers host information in the form of Web pages; collectively the server and the information hosted are referred to as a Web site. A significant number of Web pages are encoded using the Hypertext Markup Language (HTML) although other encodings using SGML, eXtensible Markup Language (XML), DHMTL or XHTML are possible. The published specifications for these languages are incorporated by reference herein; such specifications are available from the World Wide Web Consortium and its Web site (http://www.w3c.org). Web pages in these formatting languages may include links to other Web pages on the same Web site or another. As will be known to those skilled in the art, Web pages may be generated dynamically by a server by integrating a variety of elements into a formatted page prior to transmission to a Web client. Web servers, and information servers of other types, await requests for the information from Internet clients.
  • Client software has evolved that allows users of computers coinected to the Internet to access this information. Advanced clients such as Netscape's Navigator and Microsoft's Internet Explorer allow users to access software provided via a variety of information servers in a unified client environment. Typically, such client software is referred to as browser software.
  • Many of these browsers include an ability to perform interpretative execution of scripted applications downloaded from a server. The systems and methods described herein support rapid development and deployment of applications for use in Web browsers.
  • SUMMARY
  • The present application is directed to a method and system for dynamic composition of distributed interactive applications from high-level programming languages. A typical system includes a system processor and a system data store (SDS) in communication with the system processor. The system processor can include one or more processing elements. The system processor also communicates with a communications adapter connected to a communication channel. The communication channel may allow communication from the system processor to one or more client computers each executing a Web browser.
  • The methods described herein may execute upon any suitable hardware platform such as described above, or alternatively in more detail below. The methods may further be embodied in computer executable instructions stored upon one or more computer readable media. Alternatively, some, or all, the steps of such methods can be implemented in suitable hardware such as field programmable gate arrays or application specific integrated circuits; other steps, or all steps, can be implemented via instructions executable by a general purpose processor.
  • The present application describes methods for dynamic composition of distributed interactive applications from high-level programming languages. One such method includes the steps of: (1) receiving a request for an interactive application from a client, (2) selecting an input program in an input program language based upon the received request, (3) parsing the selected input program into an abstract syntax tree, (4) updating the abstract syntax tree based upon one or more deferred binding requests, and (5) generating the interactive application in a target language from the updated abstract syntax tree. The steps recited here, and further, related below and in the claims that follow do not follow any specific order unless the context clearly requires such an order; accordingly, reference letters or numbers preceding a step are provided for reference purpose only and do not imply limitation to a particular order. Further, in some implementations, a single step can include multiple functions; alternatively, multiple steps can be combined into a single function.
  • Additional advantages will be set forth in part in the description which follows, and in part will be obvious from the description, or may be learned by practice of the invention. The advantages of the disclosed systems and methods will be realized and attained by means of the elements and combinations particularly pointed out herein. It is to be understood that both the general description and the detailed description are exemplary and explanatory only and are not restrictive of the invention.
  • BRIEF DESCRIPTION OF THE DRAWINGS
  • FIG. 1 displays an abstract overview of dynamic composition of an interactive program from an input program.
  • FIG. 2 represents a typical environment capable of implementing the present systems and methods.
  • FIG. 3 depicts an exemplary process for deferred binding.
  • FIG. 4 is a process diagram displaying steps in an interactive application generation.
  • FIG. 5 is a diagram illustrating generator usage of context information in several ways.
  • FIG. 6 displays an example incorporation of native code in the target language of the composed interactive program embedded within the input program.
  • FIG. 7 shows the various stages at which output programs can be cached in a typical web-oriented implementation.
  • FIG. 8 depicts an exemplary naming and caching approach.
  • DETAILED DESCRIPTION
  • Exemplary systems and methods are now described in detail in the attached documents and the incorporated compact disc appendix. As used in the description herein, the meaning of “a,” “an,” and “the” includes plural reference unless the context clearly dictates otherwise. Also, as used in the description herein, the meaning of “in” includes “in” and “on” unless the context clearly dictates otherwise. Finally, as used in the description herein, the meanings of “and” and “or” include both the conjunctive and disjunctive and may be used interchangeably unless the context clearly dictates otherwise; the phrase “exclusive or” may be used to indicate situation where only the disjunctive meaning may apply.
  • The hardware of a typical execution environment for one or more of the components supporting the application development, composition and deployment function of the described systems and methods may include a system processor potentially including multiple processing elements, that may be distributed across the hardware components, where each processing element may be supported via a general purpose processor such as Intel-compatible processor platforms preferably using at least one PENTIUM class or CELERON class (Intel Corp., Santa Clara, Calif.) processor; alternative processors such as UltraSPARC (Sun Microsystems, Palo Alto, Calif.) and IBM zSeries class processors could be used in other embodiments, it is expected that future processors will be supported by the various implementations. In some embodiments, application development, composition and deployment, as further described below and in the attached and incorporated documents and compact disc appendix, may be distributed across multiple processing elements. The term processing element may refer to (1) a process running on a particular piece, or across particular pieces, of hardware, (2) a particular piece of hardware, or either (1) or (2) as the context allows.
  • Some implementations can include one or more limited special purpose processors such as a digital signal processor (DSP), application specific integrated circuits (ASIC) or a field programmable gate arrays (FPGA). Further, some implementations can use combinations of general purpose and special purpose processors.
  • The hardware further includes a system data store (SDS) that could include a variety of primary and secondary storage elements. In one preferred embodiment, the SDS would include RAM as part of the primary storage. The primary storage may in some embodiments include other forms of memory such as cache memory, registers, non-volatile memory (e.g., FLASH, ROM, EPROM, etc.), etc.
  • The SDS may also include secondary storage including single, multiple and/or varied servers and storage elements. For example, the SDS may use internal storage devices connected to the system processor. In embodiments where a single processing element supports all of the system functionality a local hard disk drive may serve as the secondary storage of the SDS, and a disk operating system executing on such a single processing element may act as a data server receiving and servicing data requests.
  • It will be understood by those skilled in the art that the different information used in the systems and methods disclosed herein may be logically or physically segregated within a single device serving as secondary storage for the SDS; multiple related data stores accessible through a unified management system, which together serve as the SDS; or multiple independent data stores individually accessible through disparate management systems, which may in some embodiments be collectively viewed as the SDS. The various storage elements that comprise the physical architecture of the SDS may be centrally located or distributed across a variety of diverse locations.
  • The architecture of the secondary storage of the system data store may vary significantly in different embodiments. In several embodiments, database(s) are used to store and manipulate the data; in some such embodiments, one or more relational database management systems, such as DB2 (IBM, White Plains, N.Y.), SQL Server (Microsoft, Redmond, Wash.), ACCESS (Microsoft, Redmond, Wash.), ORACLE 8i (Oracle Corp., Redwood Shores, Calif.), Ingres (Computer Associates, Islandia, N.Y.), MySQL (MySQL AB, Sweden) or Adaptive Server Enterprise (Sybase Inc., Emeryville, Calif.), may be used in connection with a variety of storage devices/file servers that may include one or more standard magnetic and/or optical disk drives using any appropriate interface including, without limitation, IDE and SCSI. In some embodiments, a tape library such as Exabyte X80 (Exabyte Corporation, Boulder, Colo.), a storage attached network (SAN) solution such as available from (EMC, Inc., Hopkinton, Mass.), a network attached storage (NAS) solution such as a NetApp Filer 740 (Network Appliances, Sunnyvale, Calif.), or combinations thereof may be used. In other embodiments, the data store may use database systems with other architectures such as object-oriented, spatial, object-relational or hierarchical.
  • Instead of, or in addition to, those organization approaches discussed above, certain embodiments may use other storage implementations such as hash tables or flat files or combinations of such architectures. Such alternative approaches may use data servers other than database management systems such as a hash table look-up server, procedure and/or process and/or a flat file retrieval server, procedure and/or process. Further, the SDS may use a combination of any of such approaches in organizing its secondary storage architecture.
  • The hardware components may each have an appropriate operating system such as WINDOWS/NT, WINDOWS 2000 or WINDOWS/XP Server (Microsoft, Redmond, Wash.), Solaris (Sun Microsystems, Palo Alto, Calif.), or LINUX (or other UNIX variant). Depending upon the hardware/operating system platform of the overall environment, Web server functionality may be provided via an Internet Information Server (Microsoft, Redmond, Wash.), an Apache HTTP Server (Apache Software Foundation, Forest Hill, Md.), an iPlanet Web Server (iPlanet E-Commerce Solutions—A Sun—Netscape Alliance, Mountain View, Calif.) or other suitable Web server platform. Browser software can communicate with such server software according to the methods as further described below.
  • As shown in FIG. 1, a typical process consumes a program description (“input program”) 110 and, by optionally accounting for a variety of situational factors (“context”) 140, produces 140 an enhanced derived output program (“output program”) 130. Input programs, and consequently the associated output programs, are general-purpose in nature and need not be oriented toward any particular industry- or domain-specific concepts.
  • With reference to FIG. 2, a typical implementation of the methods described herein includes one or more server components (e.g., 210) that process the input program to produce the output program in response to requests by one or more client components (e.g., 220). Both client and server components would typically be implemented as software modules capable of interacting over a suitable communication channel according to an appropriate communication protocol. The communication channel is preferably a computer network 230 according to an appropriate networking protocol such as TCP/IP or higher-level protocols such as HTTP. Server components would typically be designed either as standalone processes (for example, an HTTP server) or as plug-ins for other host processes (for example, extensible HTTP servers such as Microsoft IIS or Apache httpd). Client components would typically be designed as applications capable of being redirected by their users to arbitrary logical network locations. A well-known example of such a client component is a web browser that allows its user to specify a network location via a URL and which sends and receives information using the HTTP protocol. Other examples of appropriate client components include Java WebStart, a networked application “launcher.”
  • The described system does not dictate the specific form of the input program. Any unambiguous expression of an author's intent in a computer-readable form is a potentially valid input program, including but not limited to program descriptions expressed using imperative programming languages such as the Java, C, C++, C#, or JavaScript languages, declarative programming languages such as the Prolog language or structured specifications as might be expressed with an XML-based schema, functional programming languages such as the Haskell or LISP languages, any other method for expressing the behavior of software that can be parsed and analyzed programmatically, or any combination of the foregoing. A typical implementation of the methods described herein consumes input programs written as source code in the Java programming language, because of its popularity.
  • Implementations of the described system that support certain choices of programming languages for developing input programs may offer additional benefits if the input program can be analyzed and manipulated by tools via suitable preprocessing steps. For example, an implementation whose input programs are written in the Java language benefit from the existence of a universe of Java tools such as development environments, debuggers, profilers, code coverage analysis tools, unit testing tools and so on. This is relevant to the system described herein because even when the output program is not amenable to tools (or such tools are unavailable) to the same extent as the input program, the output program essentially captures the benefits of the input program being amenable to such tools. Continuing with the previous example, if input programs are written in, for example, the Java language and output programs are generated in the JavaScript language, the deficit of useful JavaScript tools is overcome by the combined facts that (1) the author of the input program is working in the Java language, which does have many useful and applicable tools and (2) the system and methods described herein ensure that output programs are essentially equivalent in functionality to the input program. In other words, the author is only concerned with the input program (the one to which good tools can be applied); the system ensures that the output program “just works.” If input programs are written in the Java language, for example, it is possible to introduce a concept such as “hosted mode” in which software developers can edit, run, test and debug their input programs in a completely Java-centric environment, then later create output programs in a completely different language (for example, JavaScript). The effect is that developers can work in the very productive “hosted mode” development environment without concern for the language or format of the ultimate output program.
  • The described system may use an open-ended set of context information during the production of the output program, thereby influencing how the methods of translation impart form, structure, behavior, and other attributes to the output program. Context information that may influence the translation process may include, without limitation, (1) data specified implicitly by the requesting client (for example, in a typical implementation using the HTTP protocol the client might automatically send information about its stored “cookies” and other standard HTTP request headers such as its “User-Agent” designation”), (2) data specified explicitly by the requesting client (for example, in an HTTP-based implementation the client would send a query string from a user-supplied URL, explicit HTTP request headers, and other data resulting from program execution within the client), (3) data implicitly available to server components regarding their execution environment (for example, using the operating system idiom of “environment variables” or application programming interfaces provided by the operating system that describe the hardware and software configuration of the server component's host platform such as cultural and localization settings, system date, system time and other settings), and (4) data explicitly available to server components as specified by the author or publisher of software via the described system (for example, specifying values for Java system properties).
  • The described system need not dictate availability of any particular types of context information, but instead may be implemented to be extensible by “context plug-ins” so that new sources of context information can be made available by adding to, rather than modifying, the system. A typical implementation could use established mechanisms for dynamically loading code, including but not limited to designated Java classes, dynamic link libraries (DLLs), shared object code, and similar facilities for runtime loading of code. Designating which context plug-ins are used in a particular deployment of a system may be a reconfigurable choice, and the set of context plug-ins need be neither fixed nor implied by the server component in any way. A typical implementation might store such information in a suitable data store such as database or structured file.
  • The output program can be produced at an arbitrary time relative to when the output program is needed by a client. A typical implementation could provide the ability to produce the output program ahead of time (that is, before a client requests it), making it possible to produce pre-computed versions of the output program, allowing its user to assert at least some context information for which the output program should be created, including the ability to specify a URL query string, arbitrary HTTP request headers, and other system properties that can influence the production of the output program. This ability to pre-compute output programs is beneficial when there are many output program variations and the delay due to processing on-the-fly is undesirable.
  • The described system instead, or in addition, could have the ability to delay production of output programs until a client actually requests a program. The ability to produce the output program on-the-fly enables usage scenarios in which even the timeframe of the request can affect the output program produced. For example, if the output program is designed to include generated code whose content is based on the current state of data in a database, the system's ability to wait until a request is actually made (as opposed to producing the output program ahead of time without regard to the timing of the request) allows production of the most up-to-date output program possible. A typical implementation may support on-the-fly production of output programs by insinuating itself into the process of fulfilling HTTP requests.
  • For input programs written in a statically typed object-oriented programming language such as the Java language, a preferred method of accounting for context when producing the output program is termed “deferred binding” as depicted in FIG. 3, wherein the server component transparently replaces a request to instantiate one class or interface 310—(with said request possibly being made indirectly via a “factory” method, as appropriate for the semantics of the input language) with a request to instantiate another class that is a compatible alternative such that the requesting code need not be aware of the substitution by virtue of polymorphism or a similar abstraction mechanism. The choice of which class to substitute for the requested class or interface (the “deferred binding decision”) is a function of both the context 320 at the time of the program request as well as a set of rules 330.
  • A typical implementation of a deferred binding configuration consists of a set of criteria, a set of contexts 320, and a set of rules 330. The class or interface being instantiated that is subject to deferred binding is referred to as the “requested class” or the “requested interface,” respectively. Subsequent references to a “requested class” should be understood to also mean “requested class or interface.” The result of a deferred binding decision 340 is the name of a class that should be substituted for the requested class (the “substitute class”) (e.g., 350A, 350B).
  • A criterion can be expressed as any compatible Java class, referred to in the configuration by its fully-qualified name (e.g. “com.innuvo.dcs.server.criteria.UserLanguage”). Criteria are used as “decision axes” on which deferred binding decisions can be made. Similarly, a context plug-in can be expressed as any compatible Java class, referred to in the configuration by its fully-qualified name (e.g. “com.innuvo.dcs.server.contexts.HttpRequestContext”). Contexts are used to fetch and normalize values associated with criteria so that criteria values can be referred to within rules without regard to exactly where they originate.
  • For each criterion, the configuration specifies which context supplies its request value. A “request value” is a string value associated with a particular criterion. Each unique application request can have a different set of request values. However, for the duration of any particular request, a request value is typically unchanging once supplied by a context.
  • Typically, each deferred binding rule has (1) a matching behavior that determines how strongly it should be considered as a candidate for the one “deciding rule” to make the deferred binding decision and (2) a collection of actions, at most one of which is to be invoked if its containing rule is selected as the deciding rule. The following rule matching behaviors are typical, although additional behaviors could be added: (1) a “class-is” rule applies when the requested class is a particular specified class; (2) an “interface-is” rule applies when a requested interface is a particular specified interface; (3) a “class-extends” rule applies when the input class directly or indirectly extends a specified class; (4) an “interface-extends” rule applies when the requested interface directly or indirectly extends the specified interface; and (5) a “class-implements” rule applies when the requested class directly or indirectly implements a specified interface. In the preferred implementation, the deciding rule is chosen by computing a score for every rule based on how specifically the rule matches the requested class. The rule receiving the highest score and thus being the most specific is chosen as the deciding rule. It is also possible that no rule applies, in which case an implementation would typically instantiate the requested class itself without substitution.
  • Each action has a set of conditions that can be matched to evaluate how well the action fits the current request. Each condition specifies a criterion and a match value. A match value is compared against a corresponding request value having the same criterion and is used to test whether or not a condition is met. A match value can be an exact string to match (for example, “en”) or the wildcard value (“*”), which matches any request value.
  • After a deciding rule is chosen, one of its actions is invoked. The invoked action ultimately “realizes” a substitute class that is then instantiated and returned in lieu of the requested class. Realizing a substitute class means that code can be executed in the process of determining the name and/or the content of the substitute class; this code can, for example, generate the substitute class from scratch during the deferred binding operation.
  • The following types of actions are typical, although many types of actions could be added: (1) a “replace-with” action (e.g., 355A, 355B) that realizes the substitute class trivially by returning a particular class name that is always the same and which is assumed to already exist and (2) a “generate-using” action (e.g., 360) that realizes the substitute class dynamically by delegating to a specific generator the decision of which class is chosen.
  • A deferred binding “generator” can be expressed as any compatible Java class, referred to in the configuration by its fully-qualified name (e.g. “com.innuvo.dcs.server.generators.StringClassGenerator”). A generator would typically be invoked when performing a “generate-using” action. Generators execute arbitrary code to complete the deferred binding operation. For example, a generator may (1) programmatically compute the name of the substitute class, (2) gather data from the request or from other data sources, (3) ensure that the substitute class is up-to-date, (4) create the source code for the substitute class if it does not exist, or (5) perform combinations of the preceding or other actions to determine and realize the substitute class.
  • A typical algorithm for deferred binding follows. Requested interfaces and their related rule match behaviors are not shown explicitly, although they could be easily introduced into the rule selection algorithm.
    • 1. Let class A be the requested class.
    • 2. Search the deferred binding rules for the most appropriate rule R to apply to A:
    • 2.1. If there is a “class-is” rule specifying A, then that rule is chosen as R.
    • 2.2. If R has not been decided, consider each “class-extends-X” rule, where X names a Java class that A directly or indirectly extends. Of these rules, if any, the one specifying an X that is the nearest ancestor of A is chosen as R.
    • 2.3. If R has not been decided, consider each “class-implements-Y” rule, where Y names a Java interface that A directly or indirectly implements. Of these rules, if any, the one implemented by A or A's nearest superclass is chosen as R.
    • 3. If no rule applies, the output class is A. The operation terminates here. In this case, no substitution occurs.
    • 4. Score each action to find the best action T:
    • 4.1. Let T be initially undefined.
    • 4.2. Assume the highest score is −1.
    • 4.3. For each action K of rule R, compute a test score (initially 0) as follows:
    • 4.3.1. For each condition D of K, adjust the test score as follows:
    • 4.3.1.1. Let U be D's criterion.
    • 4.3.1.2. Let V be D's match value.
    • 4.3.1.3. Let W be the request value for the criterion U. If the request value for criterion U is undefined, first invoke the context responsible for it so that it becomes defined.
    • 4.3.1.4. If V is exactly equal to W, then increment the test score for K by one.
    • 4.3.1.5. Otherwise, if V is the wildcard match value “*”, do not adjust the test score of K.
    • 4.3.1.6. Otherwise, V and W are mismatches and K is removed from consideration as a candidate for T.
    • 4.3.2. If K is still a candidate for T and its test score is greater than the highest score, K becomes T because it is the best known action (its permanent status as T is pending the examination of other actions that may have higher test scores). Record the highest score as being K's test score.
    • 4.4. If no best action T was found, the output class is A. The operation terminates here. In this case, no substitution occurs.
    • 4.5. Determine the substitute class by performing the action T. If T is defined, then realize the output class by performing the action denoted by T. This may involve executing code designated by T. The operation terminates here. In this case, a substitution may occur if the output class realized by T is a class other than A.
  • FIG. 4 depicts an example implementation of the described system that is oriented toward creating interactive web applications. An end user's client component (e.g., Web browser) requests a particular application in step 410. The server component receives the request and recognizes that an interactive web application should be generated. In step 420, the server component parses the high level input program such as Java input program 415 into an abstract syntax tree (AST). A determination is then made as to whether the AST has any remaining deferred binding requests in step 430. If so, a deferred binding decision occurs in step 440; a particular exemplary deferred binding decision process is depicted in FIG. 3. The AST is then updated in step 450 based upon the deferred binding decision and the process continues with a further decision at step 430. Once no further unserviced deferred binding requests remain in the AST, the AST is optimized in step 460. In step 470, JavaScript code (the requested interactive web application) 475 is generated from the optimized AST.
  • Input programs can be written in the Java language and output programs are produced by compiling the input program into the JavaScript language. This implementation can be thought of as a “request-time compiler,” several benefits of which stem at least in part from the confluence of two aspects of the system's design. (1) Delaying compilation until a request is made allows information about the requester to be included in deferred binding decisions. This is beneficial because it provides, among other benefits, an opportunity to conditionally include subsets of the input program that are relevant to the requester while excluding subsets of the input program that are not relevant. (2) Deferred binding substitutions can occur during compilation rather than when the output program is already running (as is the case with traditional “factory pattern” implementations in the prior art), allowing the compiler's analysis, optimization, and code generation phases to take the exact type of substitute classes into account, as opposed to being forced to treat them polymorphically. Deferred binding instantiations can be treated “as if the developer had chosen the substitute class in the first place.”
  • As one example of why request-time compilation is valuable, consider that the web browser's “User-Agent” identifier can inform deferred binding decisions such that only code appropriate for the requesting web browser need be included in the output program. A variety of benefits result, including: (1) unneeded code (for example, code to support user agents other than the requester) is not reflected in the output program, thus reducing its size, improving its download time, and decreasing its memory consumption; (2) the compiler's optimizer can thoroughly analyze the program using knowledge of the exact types of substitute classes, providing a wealth of information for optimizing the output program in terms of size, speed or combinations thereof (including but not limited to method inlining, dead code elimination, loop unrolling, and other compiler optimizations); and (3) the deferred binding mechanism provides a structured and efficient way to “fork” code that is external to the input program, thus sparing the input program from scattering “if-then-else” tests throughout to achieve code forking—such tests would otherwise be burdensome in terms of size, runtime speed, and maintainability.
  • An implementation may also choose to add the additional restriction that no code may be dynamically loaded in the output program as it runs, allowing the optimizer to perform deep global optimizations by inferring extra information about the program structure such as identifying classes that are implicitly “final” (to use the Java vocabulary) and whose methods are therefore candidates for inlining and subsequent optimizations.
  • In a typical implementation, an algorithm such as deferred binding provides an extensible framework for introducing on-demand code generation. FIG. 3 shows an exemplary approach to how a substitute class can be created as needed during the decision process. When substitute classes are generated, the system could typically ensure that context information, including the type of the requested class, is available to inform the code generation process.
  • Generators can use this context information in a variety of ways, including but not limited to (1) determining what to name the generated class, (2) determining how to access data that will be infused into the generated class (for example, providing a database “connection string”), and (3) using type interrogation techniques (for example, Java reflection) to examine the requested class for purposes such as (a) inferring how to generate the substitute class in a compatible way, such as knowing which methods to override and (b) allowing the contents of the requested class itself to affect code generation, such as by parsing code comments for metadata or by enumerating, parsing the names of, or invoking methods on an instance of the requested class. In other words, the requested class itself can guide the behavior of the generator. Such useage is illustrated in FIG. 5.
  • In one preferred implementation of the system, a deferred binding generator is used to automatically produce remote procedure call (RPC) proxies that are automatically integrated into the output program without programmer intervention. This approach is desirable because traditional RPC techniques require programmers to perform a separate, explicit step such as running a proxy/stub compiler to generate the required proxy and stub classes. The implementation referred to above uses Java reflection to examine a requested interface, analyzing the names, parameter types and return types of its methods to generate a substitute class that automatically performs the caller-side serialization of RPC calls as well as deserialization of RPC results.
  • One preferred implementation of the described system provides the ability to smoothly integrate portions of code written directly in the language of the output program (or in principle any other language) within the input program in a reasonably natural way, referred to herein as “native code integration.” This facility follows the tradition of analogous techniques such as allowing inline assembly in C language source code. In one implementation that translates Java into JavaScript, for example, the ability to intertwine handwritten JavaScript into a Java class definition has proven very useful for writing low-level and/or performance-sensitive code. The ability to intermingle handwritten JavaScript with the system's generated output program (that is, generated JavaScript) in a structured way provides a productive and low-risk method of writing the lowest-level code required for the output program to work (that is, the kernel JavaScript code upon which the rest of the output program depends); FIG. 6 depicts an exemplary incorporation of native JavaScript code.
  • In addition, this facility may be open to use by any author of input programs so as to make it possible to create integration libraries and other tasks that necessitate bypassing the language of the input program and accessing concepts in the language of the output program directly. Examples of how this facility could be utilized include Java programming interfaces encapsulating JavaScript code to interface with browser-hosted ActiveX controls or other plug-ins such as Macromedia Flash as well as selectively writing critical algorithms in the language of the output program to improve performance or reduce size.
  • It is possible to create an implementation of the described system that combines one or more techniques described above in combination, namely (1) deferred binding code-generation, (2) native code integration, and/or (3) a hosted mode facility, to provide a uniquely productive environment. Using the example of Java input programs and JavaScript output programs, a hosted mode facility allows development and debugging of input programs using Java tools. A complication arises when native code integration is introduced in that a hosted mode Java environment does not understand JavaScript. In FIG. 6, for example, the handwritten JavaScript is in a Java comment and is completely stripped away when the Java input program is running in hosted mode. This would appear to limit the utility of hosted mode in cases where native code integration was required.
  • Deferred binding generators can solve this problem: a generator can be invoked to create a subclass on the fly in hosted mode for any class containing handwritten JavaScript that invokes a subsystem for injecting actual JavaScript into the process as it is running. Such a generator would examine the requested class to parse out the methods as well as the specially-formatted comments containing JavaScript. As an example of how this parsed JavaScript can be used in hosted mode, note that it is possible to create a Win32 DLL that is accessible via a Java Native Interface (JNI) library that hosts the Internet Explorer browser ActiveX control in a Win32 window; this JNI library provides access to the Internet Explorer “script” object that allows arbitrary JavaScript to be executed. The generated subclass, then, can use the JNI pass-through DLL to send JavaScript to Internet Explorer for execution without the hosted mode development system being aware of anything other than the Java language. In this example implementation, the combination of these fundamental techniques allows Java code to arbitrarily integrate JavaScript in a hosted mode environment. When an output program is produced that is completely JavaScript, the contents of the specially-formatted comment blocks (that is, the handwritten JavaScript) can be seamlessly emitted into the produced output program.
  • When possible, if the language of the output program supports exceptions or other ways of indicating errors, implementations of the described system may attempt to transparently integrate such error-handling mechanisms into the language of the input program. This prevents software developers from having to consider error-handling scenarios that occur in an output program in terms of mechanisms that are not present in the language of the input program. For illustration, Java input programs have an exception mechanism defined, while JavaScript output programs also have an exception mechanism defined that is different that the Java mechanism. The result is that code to handle exceptions in the Java input program is not necessarily sufficient to catch all exceptions that might occur in the JavaScript output program. One preferred implementation automatically generates special code in the output program that transforms unhandled JavaScript exceptions into a form that can be caught by the structures generated by the Java code written by the author of the input program. That is, a Java input program can be written to catch “RuntimeException” objects and any error that occurs while the JavaScript output program is running that is unique to JavaScript will be automatically caught and transformed into a RuntimeException object which can be caught. This technique unifies exception handling into the language of the input program, which greatly simplifies input program development.
  • Because the described system performs a translation of the input program to an equivalent output program, it has the opportunity to use “hints” from the input program to guide code generation and optimization. This ability may be of particular importance when certain aspects of the language of the input program are difficult or inefficient to implement in the language of the output program.
  • An example of this occurs in an implementation that produces JavaScript applications from Java applications. In the Java language, static class initialization code is always guaranteed to have been called before any static methods or fields are accessed. The structure of the Java language necessitates inserting many tests into the output program to ensure that any static initialization code is called before static members are accessed. Because size and speed are at a premium in the JavaScript language, it is preferable to avoid these tests. A preferred implementation of the system implements a “noinit” class modifier, which allows the generated code to ignore static initialization for the class that it modifies. Using this modifier on classes whose static methods and fields are accessed often makes a significant difference in performance.
  • The described system facilitates hierarchical caching of generated output programs. Such a design increases the speed at which the output program can be fetched and executed by the client component. The best outcome is that the Client Component itself can cache output programs, completely bypassing network fetches.
  • FIG. 7 shows the various stages at which output programs can be cached in a typical web-oriented implementation. At level 710, the least distance from the user, an output program is cached in a local data store such as RAM or disk directly accessible by a client component. At level 720, the output program is cached in a data store directly accessible by an intermediate proxy, mirror or accelerator web server on a local communication network accessible by the client component. At level 730, the output program is cached in a data store directly accessible by an intermediate proxy, a mirror or an accelerator web server on the Internet. At level 740, the output program is cached in a data store directly accessible by the web server with which the server component is integrated. At level 750, the output program is cached in a data store directly accessible by the server component. Any of levels 720, 730, 740 and/or 750 could be clustered in some implementations to serve more users concurrently and to improve throughput.
  • For a web-oriented implementation, and in particular one which produces full JavaScript output programs that manipulate the browser document object model (sometimes referred to as dynamic HTML or DHTML) as opposed to a series of individual HTML web pages, the described system is unique in that traditional web applications produce one page at a time such that each page intermingles HTML and data specific to that page. This inhibits aggressive hierarchical caching because, even though the HTML layout of the page may not change between requests, the data incorporated may, so the entire page must be recopied to each cache level. The mentioned web implementation, however, can eliminate such situation because the output program does not vary with the particular data that needs to be displayed. Thus, by separating the application user interface and related logic (that is, the output program) from the application data (which is fetched by the output program while it is running), changes to application data do not invalidated cached copies of the output program. This technique makes caching far more effective than traditional page-based caching.
  • A complication that normally arises with hierarchical caching is the question of “freshness” of cached copies. How can intermediate caches recognize when their copies of output programs are out of date with respect to the authoritative version (that is, original versions produced directly by a server component)? In the worst case, every request requires a full round-trip back to the server component simply to ask the question “Is my copy out of date?” As illustrated in FIG. 8, the described system solves this dilemma by prescribing that every request for an output program is first answered with a small but uncacheable response (called the “response wrapper”) that includes a reference to the actual output program 820. The output program is in turn named with a “strong name.” The strong name is computed from the content of the output program itself. In a typical implementation, the strong name of an output program is an MD5 hash of all the bytes that constitute the output program, where the MD5 hash code has enough bit capacity to avoid hash code collisions over all reasonable-length output programs. Other techniques for generating strong names could of course be used so long as the net effect is that (1) no two output programs having different contents could possibly have the same strong name (and thus could not be confused with each other) and (2) identical copies of an output program always do have the same strong name.
  • The foregoing naming and caching methods solve two problems. First, intermediate caches need never check with the server component (810A, 810B) as to whether or not a cached copy of an output program (820A, 820B) is stale since the response wrapper comes directly from the server component and is uncacheable, and it is the response wrapper that dictates the strong name of the output program that the client component 830 should request. When the client component makes such a request based on the output program's strong name, any intermediate cache (e.g., local cache 840) that contains a copy having that strong name can be assured that it is up-to-date without double-checking with the server component and can thus immediately respond to the client component with its copy. Second, if server components are clustered, there is no guarantee that the server component instance that sends the response wrapper will be the same server component instance that receives the output program request. For example, some round-robin load balancers intentionally distributed requests to different server component instances. Thus, it is vital that output programs produced by different server component instances but from the same input program have the same strong names.
  • Preferred implementations of the described system whose output programs are web-accessible applications (for example, JavaScript and DHTML applications as described above) can incorporate a mechanism for monitoring software license compliance for one of more instances of the server component. As explained above in the discussion of caching behaviors, a web-oriented implementation will typically return a response wrapper that references the strong name of the appropriate output program. In this same response wrapper can be placed a highly unique but well-known identifier called a “license tag.” A globally unique id (“GUID”) is an appropriate form of license tag, although many other formulations of such a unique key are possible. The response wrapper also contains an encrypted version of the software license key of the server component that produced the response wrapper, called the “broadcast license”. Since the response wrapper is produced first, when web-based search engines such as Google request a web application produced with the described system, they receive and store a copy of the response wrapper. (Typically they store a copy despite the response wrapper's uncacheable nature, although the server component may need to compensate by marking a response wrapper temporarily cacheable in the specific cases where a search engine, as opposed to a web browser, is requesting the application.) Thus, their search results database stores pages containing both the well-known license tag and the broadcast license. It is consequently possible to query said search engine for the well-known license tag to produce a list of cached response wrappers, each containing a broadcast license. By analyzing these cached response wrappers and their broadcast licenses, it is possible to identify duplicate software license keys, which can subsequently be used to identify unauthorized or unlicensed usage.
  • The server component license key is typically implemented as an encrypted block of information including information on the customer, serial number, licensed processor count, and so forth which can be decrypted and verified by a server component instance. An implementation should not broadcast the server license in the response wrapper in an un-encoded form, as it would be very easy for others to copy license keys and use without authorization. Thus, a preferred implementation of the server component encrypts the license key using a different public key suitable for cryptography such that only the implementer of the server component (typically a software vendor) would have the necessary private key to decrypt the broadcast license back into the issued license, allowing a vendor who so chooses to begin a trail of investigation to identify unauthorized copying of license keys.
  • The embodiments described above, and in the documents and compact discs incorporated herein as part of the incorporated provisional applications, are given as illustrative examples only. It will be readily appreciated by those skilled in the art that many deviations may be made from the specific embodiments disclosed in this specification without departing from the invention as claimed below.

Claims (23)

1. A method of generating an interactive program from an input program, the method comprising the steps of:
a) receiving a request for an interactive application from a client,
b) selecting an input program in an input program language based upon the received request,
c) parsing the selected input program into an abstract syntax tree,
d) updating the abstract syntax tree based upon one or more deferred binding requests, and
e) generating the interactive application in a target language from the updated abstract syntax tree.
2. The method of claims 1, and further comprising the step of optimizing the abstract syntax tree.
3. The method of claims 1, wherein the step of updating the abstract syntax tree comprises the steps of:
i) making a deferred binding decision for a requested class to produce a substitute class, and
ii) modifying the abstract syntax tree by replacing deferred binding instantiations of the requested class with the substitute class.
4. The method of any of claims 3, wherein the step of making a deferred binding decision comprises the steps of:
(1) retrieving context information, and
(2) selecting or generating the substitute class based upon the retrieved context information.
5. The method of any of claims 4, wherein the step of making a deferred binding decision further comprises the step of retrieving rule information and wherein the step of selecting or generating the substitute class is further based upon the retrieved rule information.
6. The method of any of claims 3, wherein the step of making a deferred binding decision comprises the steps of:
(1) retrieving rule information, and
(2) selecting or generating the substitute class based upon the retrieved rule information.
7. The method of any of claims 3-6, and further comprising the step of optimizing the abstract syntax tree.
8. The method of any of claims 1-6, wherein the input program comprises embedded code in the target language and wherein the step of generating the interactive application comprises incorporating the embedded code.
9. The method of any of claims 1-6, wherein the step of generating the interactive application comprises incorporating a server license key into the interactive application.
10. The method of claim 9, wherein the server license key is encodes identification information associated with a server component.
11. The method of any of claims 1-6, wherein the input program comprises embedded hints in the input program language and wherein the step of generating the interactive application is based at least in part on the embedded hints.
12. The method of any of claims 1-6, wherein the step of generating the interactive application comprises generating the interactive application with embedded information that facilitates correct caching of the interactive application at one or more caching levels.
13. The method of any of claims 1-6, wherein the input program comprises at least one portion of exception handling code and wherein the step of generating the interactive application comprises adapting the exception handling code into functionally similar exception handling code in the target language.
14. One or more computer readable media storing instructions that upon execution by a computer cause the computer to execute any of the methods of claims 1-6.
15. A method of verifying license compliance for a Web application, the method comprising the steps of:
a) generating a Web application comprising a broadcast key and a license tag;
b) making the generated Web application available for review by a Web search engine;
c) querying the search engine for a selected license tag, thereby generating a list of reviewed Web applications; and
d) evaluating the broadcast keys associated with each Web application in the list of reviewed Web application to identify duplicate broadcast license keys.
16. The method of claim 15, and further comprising the step of generating a license tag.
17. The method of claim 16, wherein the step of generating a license tag comprises assigning a globally unique identifier.
18. The method of any of claims 15-17, and further comprising the step of generating a broadcast key.
19. The method of claim 18, wherein the step of generating a broadcast key comprises the steps of:
i) retrieving a raw key;
ii) applying a symmetric encryption to the raw key, thereby generating a user key; and
iii) applying a symmetric encryption to the user key, thereby resulting in the broadcast key.
20. The method of step 19, wherein the step of retrieving a raw key comprises the step of generating the raw key based upon information associated with a user.
21. The method of claim 20, wherein the step of generating the raw key is further based upon information associated with a licensed hardware platform.
22. One or more computer readable media storing instructions that upon execution by a computer cause the computer to execute any of the methods of claims 15-17.
23. A system for generating an interactive program from an input program, the system comprising:
a) means for selecting an input program in an input program language,
b) means for parsing the selected input program into an abstract syntax tree,
c) means for updating the abstract syntax tree based upon one or more deferred binding requests, and
d) means for generating the interactive application in a target language from the updated abstract syntax tree.
US11/568,353 2004-04-26 2005-04-26 Method and System for Dynamically Composing Distributed Interactive Applications from High-Level Programming Languages Abandoned US20080022267A1 (en)

Priority Applications (2)

Application Number Priority Date Filing Date Title
US11/568,353 US20080022267A1 (en) 2004-04-26 2005-04-26 Method and System for Dynamically Composing Distributed Interactive Applications from High-Level Programming Languages
US13/282,293 US8745579B2 (en) 2004-04-26 2011-10-26 Methods and systems for dynamically composing distributed interactive applications from high-level programming languages

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US56544304P 2004-04-26 2004-04-26
US66611605P 2005-03-29 2005-03-29
US11/568,353 US20080022267A1 (en) 2004-04-26 2005-04-26 Method and System for Dynamically Composing Distributed Interactive Applications from High-Level Programming Languages
PCT/US2005/014215 WO2005106658A1 (en) 2004-04-26 2005-04-26 Methods and systems for dynamically composing distributed interactive applications from high-level programming languages

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
PCT/US2005/014215 A-371-Of-International WO2005106658A1 (en) 2004-04-26 2005-04-26 Methods and systems for dynamically composing distributed interactive applications from high-level programming languages

Related Child Applications (1)

Application Number Title Priority Date Filing Date
US13/282,293 Continuation US8745579B2 (en) 2004-04-26 2011-10-26 Methods and systems for dynamically composing distributed interactive applications from high-level programming languages

Publications (1)

Publication Number Publication Date
US20080022267A1 true US20080022267A1 (en) 2008-01-24

Family

ID=35241845

Family Applications (2)

Application Number Title Priority Date Filing Date
US11/568,353 Abandoned US20080022267A1 (en) 2004-04-26 2005-04-26 Method and System for Dynamically Composing Distributed Interactive Applications from High-Level Programming Languages
US13/282,293 Active 2025-07-19 US8745579B2 (en) 2004-04-26 2011-10-26 Methods and systems for dynamically composing distributed interactive applications from high-level programming languages

Family Applications After (1)

Application Number Title Priority Date Filing Date
US13/282,293 Active 2025-07-19 US8745579B2 (en) 2004-04-26 2011-10-26 Methods and systems for dynamically composing distributed interactive applications from high-level programming languages

Country Status (6)

Country Link
US (2) US20080022267A1 (en)
EP (2) EP1754146A4 (en)
KR (1) KR20070015440A (en)
AU (1) AU2005239421B2 (en)
CA (1) CA2564681C (en)
WO (1) WO2005106658A1 (en)

Cited By (42)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060077119A1 (en) * 2004-10-08 2006-04-13 Sharp Laboratories Of America, Inc. Methods and systems for receiving content at an imaging device
US20060077439A1 (en) * 2004-10-08 2006-04-13 Sharp Laboratories Of America, Inc. Methods and systems for distributing localized display elements to an imaging device
US20060077435A1 (en) * 2004-10-08 2006-04-13 Sharp Laboratories Of America, Inc. Methods and systems for imaging device accounting server redundancy
US20060077432A1 (en) * 2004-10-08 2006-04-13 Sharp Laboratories Of America, Inc. Methods and systems for imaging device accounting data management
US20060077431A1 (en) * 2004-10-08 2006-04-13 Sharp Laboratories Of America, Inc. Methods and systems for imaging device concurrent account use
US20060085430A1 (en) * 2004-10-08 2006-04-20 Sharp Laboratories Of America, Inc. Methods and systems for accessing a remote file structure from an imaging device
US20060095536A1 (en) * 2004-10-08 2006-05-04 Rono Mathieson Methods and systems for imaging device remote location functions
US20060119883A1 (en) * 2004-10-08 2006-06-08 Sharp Laboratories Of America, Inc. Methods and systems for imaging device credential consolidation
US20060198653A1 (en) * 2005-03-04 2006-09-07 Sharp Laboratories Of America, Inc. Methods and systems for peripheral accounting
US20060279475A1 (en) * 2004-10-08 2006-12-14 Lum Joey P Methods and Systems for Integrating Imaging Device Display Content
US20080079974A1 (en) * 2006-09-28 2008-04-03 Andrew Rodney Ferlitsch Methods and Systems for Third-Party Control of Remote Imaging Jobs
US20080155068A1 (en) * 2006-12-21 2008-06-26 Palo Alto Research Center Incorporated Support for sharing abstract applications
US20090037330A1 (en) * 2000-02-09 2009-02-05 Appsware Wireless, Llc System and method for deploying application program components
US20090049423A1 (en) * 2007-07-23 2009-02-19 Ebay Inc. Javascripttm programming extension
US20090328013A1 (en) * 2008-06-27 2009-12-31 Microsoft Corporation Componentization of compiler functionality
US20100037213A1 (en) * 2008-08-07 2010-02-11 Microsoft Corporation Grammar-based generation of types and extensions
US20100088666A1 (en) * 2008-10-03 2010-04-08 Microsoft Corporation Common intermediate representation for data scripting language
US20100153930A1 (en) * 2008-12-16 2010-06-17 Microsoft Corporation Customizable dynamic language expression interpreter
US7890487B1 (en) * 2007-05-29 2011-02-15 Google Inc. Facilitating client-side data-management for web-based applications
US20110154212A1 (en) * 2009-12-17 2011-06-23 Google Inc. Cloud-based user interface augmentation
US20110231816A1 (en) * 2010-03-17 2011-09-22 International Business Machines Corporation Reflection capability in static programming languages
US20110296375A1 (en) * 2010-05-27 2011-12-01 Salesforce.Com, Inc. Adding directives for javascript files directly into source code in a multi-tenant database environment
US8190752B1 (en) * 2006-05-17 2012-05-29 Juniper Networks, Inc. Secure delivery of flash content over networks
US8213034B2 (en) 2004-10-08 2012-07-03 Sharp Laboratories Of America, Inc. Methods and systems for providing remote file structure access on an imaging device
US8336037B1 (en) * 2006-05-17 2012-12-18 Ross Richard A JNI-minimizing data structures for XML parsing
US8825708B1 (en) * 2008-04-30 2014-09-02 Netapp, Inc. Program language binding generation for system interfaces
US20140359586A1 (en) * 2013-06-02 2014-12-04 Microsoft Corporation Programming Language with Extensions using a Strict Meta-Model
US20150040102A1 (en) * 2013-07-31 2015-02-05 Fp Complete System and method for software interoperability
US20150154011A1 (en) * 2013-11-29 2015-06-04 Huawei Technologies Co., Ltd. Transplantation Method and Source-to-Source Compiler
US9069897B2 (en) 2011-11-23 2015-06-30 Microsoft Technology Licensing, Llc Capturing telemetry data by dynamic language engine
US20160070545A1 (en) * 2014-09-04 2016-03-10 Home Box Office, Inc. Factory identification system
US20160255384A1 (en) * 2006-09-05 2016-09-01 The Nielsen Company (Us), Llc Method and system for predicting audience viewing behavior
US20170279611A1 (en) * 2016-03-24 2017-09-28 International Business Machines Corporation Cryptographically assured zero-knowledge cloud services for elemental transactions
US20190026131A1 (en) * 2016-03-17 2019-01-24 Huawei Technologies Co., Ltd. Redirection Method and Apparatus, and System
US10216501B2 (en) * 2015-06-04 2019-02-26 The Mathworks, Inc. Generating code in statically typed programming languages for dynamically typed array-based language
US10417036B2 (en) * 2017-02-24 2019-09-17 Oracle International Corporation Evaluation techniques for fast access to structured, semi-structured and unstructured data using a virtual machine that provides support for dynamic code generation
CN111460464A (en) * 2019-01-22 2020-07-28 阿里巴巴集团控股有限公司 Data encryption and decryption method and device, electronic equipment and computer storage medium
US20210065441A1 (en) * 2019-08-29 2021-03-04 Advanced Micro Devices, Inc. Machine learning-based technique for execution mode selection
US10949175B2 (en) * 2018-03-22 2021-03-16 Sick Ag Method of carrying out modifications to a software application
US11360976B2 (en) 2017-08-31 2022-06-14 Oracle International Corporation Deployment of javascript and typescript stored procedures and user-defined functions into database management systems
US20220237309A1 (en) * 2021-01-26 2022-07-28 EMC IP Holding Company LLC Signal of risk access control
RU2814437C1 (en) * 2023-09-18 2024-02-28 Общество с ограниченной ответственностью "Облачные технологии" (ООО "Облачные технологии") Method and device for generating remote calls

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8291377B2 (en) * 2006-01-25 2012-10-16 Microsoft Corporation External configuration of processing content for script
RU2446458C1 (en) * 2010-11-24 2012-03-27 Закрытое акционерное общество "Лаборатория Касперского" Computer applications licensing component
US8839444B2 (en) 2011-03-31 2014-09-16 Kaspersky Lab Zao Automatic analysis of software license usage in a computer network
US20130326479A1 (en) * 2012-06-01 2013-12-05 Qnx Software Systems Limited System and method for tracking compliance information for a build-system product
US9420027B1 (en) 2015-04-27 2016-08-16 Wowza Media Systems, LLC Systems and methods of communicating platform-independent representation of source code
US11474796B1 (en) * 2019-07-09 2022-10-18 Elements Dev Corporation Build system for distributed applications
US11842176B2 (en) * 2021-11-12 2023-12-12 Bank Of America Corporation System and method for performing parallel and distributed analysis of program code to generate dependency graphs for executing extract transform load transformations

Citations (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5553143A (en) * 1994-02-04 1996-09-03 Novell, Inc. Method and apparatus for electronic licensing
US5671412A (en) * 1995-07-28 1997-09-23 Globetrotter Software, Incorporated License management system for software applications
US5892904A (en) * 1996-12-06 1999-04-06 Microsoft Corporation Code certification for network transmission
US6044398A (en) * 1997-11-21 2000-03-28 International Business Machines Corporation Virtual dynamic browsing system and method for automated web server and testing
US6148331A (en) * 1997-04-25 2000-11-14 Parry; Rhys Evan Destination website access and information gathering system
US20010032310A1 (en) * 2000-01-14 2001-10-18 Francisco Corella Public key validation service
US6353925B1 (en) * 1999-09-22 2002-03-05 Compaq Computer Corporation System and method for lexing and parsing program annotations
US20020046340A1 (en) * 2000-08-30 2002-04-18 Takahiro Fujishiro Certificate validity authentication method and apparatus
US20020107809A1 (en) * 2000-06-02 2002-08-08 Biddle John Denton System and method for licensing management
US6510466B1 (en) * 1998-12-14 2003-01-21 International Business Machines Corporation Methods, systems and computer program products for centralized management of application programs on a network
US20030106049A1 (en) * 2001-11-30 2003-06-05 Sun Microsystems, Inc. Modular parser architecture
US20030220880A1 (en) * 2002-01-17 2003-11-27 Contentguard Holdings, Inc. Networked services licensing system and method
US20030226132A1 (en) * 2001-05-11 2003-12-04 David Tondreau Method and system for transforming legacy software applications into modern object-oriented systems
US20050071630A1 (en) * 2003-08-15 2005-03-31 Imcentric, Inc. Processing apparatus for monitoring and renewing digital certificates
US20050132060A1 (en) * 2003-12-15 2005-06-16 Richard Mo Systems and methods for preventing spam and denial of service attacks in messaging, packet multimedia, and other networks
US7065507B2 (en) * 2001-03-26 2006-06-20 Microsoft Corporation Supervised license acquisition in a digital rights management system on a computing device
US7428530B2 (en) * 2004-07-01 2008-09-23 Microsoft Corporation Dispersing search engine results by using page category information
US7500100B1 (en) * 2003-09-10 2009-03-03 Cisco Technology, Inc. Method and apparatus for verifying revocation status of a digital certificate

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5313616A (en) * 1990-09-18 1994-05-17 88Open Consortium, Ltd. Method for analyzing calls of application program by inserting monitoring routines into the executable version and redirecting calls to the monitoring routines
US5349662A (en) * 1992-05-21 1994-09-20 International Business Machines Corporation Method of and apparatus for providing automatic detection of user activity
US5794048A (en) * 1996-08-29 1998-08-11 Matridigm Corporation Method for classification of year-related data fields in a program
US6173446B1 (en) * 1999-02-02 2001-01-09 Ultimus, Inc. Apparatus for licensing software applications
US6505230B1 (en) * 1999-05-14 2003-01-07 Pivia, Inc. Client-server independent intermediary mechanism
US20020091991A1 (en) * 2000-05-11 2002-07-11 Castro Juan Carlos Unified real-time microprocessor computer
US6658423B1 (en) 2001-01-24 2003-12-02 Google, Inc. Detecting duplicate and near-duplicate files
US7219331B2 (en) * 2001-03-14 2007-05-15 Sun Microsystems, Inc. Method and apparatus for lightweight support on set top box
US20030005412A1 (en) * 2001-04-06 2003-01-02 Eanes James Thomas System for ontology-based creation of software agents from reusable components
US7761288B2 (en) * 2001-04-30 2010-07-20 Siebel Systems, Inc. Polylingual simultaneous shipping of software
ES2201038T3 (en) * 2001-05-11 2004-03-16 Sospita As SEQUENTIAL LISTING MECHANISM TO ENSURE THE INTEGRITY OF THE IMPLEMENTATION ORDER OF INTERDEPENDENT CARD APPLICATIONS.
US20030070160A1 (en) * 2001-10-04 2003-04-10 International Business Machines Corporation Embedding information in software
US6925640B2 (en) * 2001-10-12 2005-08-02 Sun Microsystems, Inc. Method and apparatus for extending a program element in a dynamically typed programming language
US7587515B2 (en) * 2001-12-19 2009-09-08 International Business Machines Corporation Method and system for restrictive caching of user-specific fragments limited to a fragment cache closest to a user
US7412535B2 (en) * 2001-12-19 2008-08-12 International Business Machines Corporation Method and system for caching fragments while avoiding parsing of pages that do not contain fragments
US7483860B2 (en) * 2002-03-08 2009-01-27 Pace Anti-Piracy Method and system for managing software licenses
US20030182651A1 (en) * 2002-03-21 2003-09-25 Mark Secrist Method of integrating software components into an integrated solution
US20050050319A1 (en) * 2003-08-12 2005-03-03 Zeev Suraski License control for web applications
WO2006055714A2 (en) * 2004-11-19 2006-05-26 Triad Biometrics, Llc Methods and systems for use in biomeiric authentication and/or identification
US8447837B2 (en) * 2005-12-30 2013-05-21 Akamai Technologies, Inc. Site acceleration with content prefetching enabled through customer-specific configurations
US7685255B2 (en) * 2006-04-24 2010-03-23 Blue Coat Systems, Inc. System and method for prefetching uncacheable embedded objects

Patent Citations (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5553143A (en) * 1994-02-04 1996-09-03 Novell, Inc. Method and apparatus for electronic licensing
US5671412A (en) * 1995-07-28 1997-09-23 Globetrotter Software, Incorporated License management system for software applications
US5892904A (en) * 1996-12-06 1999-04-06 Microsoft Corporation Code certification for network transmission
US6148331A (en) * 1997-04-25 2000-11-14 Parry; Rhys Evan Destination website access and information gathering system
US6044398A (en) * 1997-11-21 2000-03-28 International Business Machines Corporation Virtual dynamic browsing system and method for automated web server and testing
US6510466B1 (en) * 1998-12-14 2003-01-21 International Business Machines Corporation Methods, systems and computer program products for centralized management of application programs on a network
US6353925B1 (en) * 1999-09-22 2002-03-05 Compaq Computer Corporation System and method for lexing and parsing program annotations
US20010032310A1 (en) * 2000-01-14 2001-10-18 Francisco Corella Public key validation service
US20020107809A1 (en) * 2000-06-02 2002-08-08 Biddle John Denton System and method for licensing management
US20020046340A1 (en) * 2000-08-30 2002-04-18 Takahiro Fujishiro Certificate validity authentication method and apparatus
US7065507B2 (en) * 2001-03-26 2006-06-20 Microsoft Corporation Supervised license acquisition in a digital rights management system on a computing device
US20030226132A1 (en) * 2001-05-11 2003-12-04 David Tondreau Method and system for transforming legacy software applications into modern object-oriented systems
US20030106049A1 (en) * 2001-11-30 2003-06-05 Sun Microsystems, Inc. Modular parser architecture
US20030220880A1 (en) * 2002-01-17 2003-11-27 Contentguard Holdings, Inc. Networked services licensing system and method
US20050071630A1 (en) * 2003-08-15 2005-03-31 Imcentric, Inc. Processing apparatus for monitoring and renewing digital certificates
US7500100B1 (en) * 2003-09-10 2009-03-03 Cisco Technology, Inc. Method and apparatus for verifying revocation status of a digital certificate
US20050132060A1 (en) * 2003-12-15 2005-06-16 Richard Mo Systems and methods for preventing spam and denial of service attacks in messaging, packet multimedia, and other networks
US7428530B2 (en) * 2004-07-01 2008-09-23 Microsoft Corporation Dispersing search engine results by using page category information

Cited By (65)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090037330A1 (en) * 2000-02-09 2009-02-05 Appsware Wireless, Llc System and method for deploying application program components
US20060077431A1 (en) * 2004-10-08 2006-04-13 Sharp Laboratories Of America, Inc. Methods and systems for imaging device concurrent account use
US20060119883A1 (en) * 2004-10-08 2006-06-08 Sharp Laboratories Of America, Inc. Methods and systems for imaging device credential consolidation
US20060077432A1 (en) * 2004-10-08 2006-04-13 Sharp Laboratories Of America, Inc. Methods and systems for imaging device accounting data management
US20060077119A1 (en) * 2004-10-08 2006-04-13 Sharp Laboratories Of America, Inc. Methods and systems for receiving content at an imaging device
US20060279475A1 (en) * 2004-10-08 2006-12-14 Lum Joey P Methods and Systems for Integrating Imaging Device Display Content
US20060095536A1 (en) * 2004-10-08 2006-05-04 Rono Mathieson Methods and systems for imaging device remote location functions
US20060077435A1 (en) * 2004-10-08 2006-04-13 Sharp Laboratories Of America, Inc. Methods and systems for imaging device accounting server redundancy
US8213034B2 (en) 2004-10-08 2012-07-03 Sharp Laboratories Of America, Inc. Methods and systems for providing remote file structure access on an imaging device
US20060085430A1 (en) * 2004-10-08 2006-04-20 Sharp Laboratories Of America, Inc. Methods and systems for accessing a remote file structure from an imaging device
US8384925B2 (en) 2004-10-08 2013-02-26 Sharp Laboratories Of America, Inc. Methods and systems for imaging device accounting data management
US8270003B2 (en) 2004-10-08 2012-09-18 Sharp Laboratories Of America, Inc. Methods and systems for integrating imaging device display content
US20060077439A1 (en) * 2004-10-08 2006-04-13 Sharp Laboratories Of America, Inc. Methods and systems for distributing localized display elements to an imaging device
US8237946B2 (en) 2004-10-08 2012-08-07 Sharp Laboratories Of America, Inc. Methods and systems for imaging device accounting server redundancy
US8230328B2 (en) * 2004-10-08 2012-07-24 Sharp Laboratories Of America, Inc. Methods and systems for distributing localized display elements to an imaging device
US20060198653A1 (en) * 2005-03-04 2006-09-07 Sharp Laboratories Of America, Inc. Methods and systems for peripheral accounting
US8428484B2 (en) 2005-03-04 2013-04-23 Sharp Laboratories Of America, Inc. Methods and systems for peripheral accounting
US8484364B2 (en) 2006-05-17 2013-07-09 Juniper Networks, Inc. Secure delivery of flash content over networks
US8190752B1 (en) * 2006-05-17 2012-05-29 Juniper Networks, Inc. Secure delivery of flash content over networks
US8336037B1 (en) * 2006-05-17 2012-12-18 Ross Richard A JNI-minimizing data structures for XML parsing
US20160255384A1 (en) * 2006-09-05 2016-09-01 The Nielsen Company (Us), Llc Method and system for predicting audience viewing behavior
US8345272B2 (en) 2006-09-28 2013-01-01 Sharp Laboratories Of America, Inc. Methods and systems for third-party control of remote imaging jobs
US20080079974A1 (en) * 2006-09-28 2008-04-03 Andrew Rodney Ferlitsch Methods and Systems for Third-Party Control of Remote Imaging Jobs
US20080155068A1 (en) * 2006-12-21 2008-06-26 Palo Alto Research Center Incorporated Support for sharing abstract applications
US7890487B1 (en) * 2007-05-29 2011-02-15 Google Inc. Facilitating client-side data-management for web-based applications
US20090049423A1 (en) * 2007-07-23 2009-02-19 Ebay Inc. Javascripttm programming extension
US8825708B1 (en) * 2008-04-30 2014-09-02 Netapp, Inc. Program language binding generation for system interfaces
US9170787B2 (en) * 2008-06-27 2015-10-27 Microsoft Technology Licensing, Llc Componentization of compiler functionality
US20090328013A1 (en) * 2008-06-27 2009-12-31 Microsoft Corporation Componentization of compiler functionality
US20100037213A1 (en) * 2008-08-07 2010-02-11 Microsoft Corporation Grammar-based generation of types and extensions
US20100088666A1 (en) * 2008-10-03 2010-04-08 Microsoft Corporation Common intermediate representation for data scripting language
US8473897B2 (en) * 2008-10-03 2013-06-25 Microsoft Corporation Common intermediate representation for data scripting language
US9229696B2 (en) 2008-10-03 2016-01-05 Microsoft Technology Licensing, Llc Common intermediate representation for data scripting language
US8336035B2 (en) 2008-12-16 2012-12-18 Microsoft Corporation Customizable dynamic language expression interpreter
US20100153930A1 (en) * 2008-12-16 2010-06-17 Microsoft Corporation Customizable dynamic language expression interpreter
US9875671B2 (en) * 2009-12-17 2018-01-23 Google Llc Cloud-based user interface augmentation
US20110154212A1 (en) * 2009-12-17 2011-06-23 Google Inc. Cloud-based user interface augmentation
US8561027B2 (en) * 2010-03-17 2013-10-15 International Business Machines Corporation Reflection capability in static programming languages
US20110231816A1 (en) * 2010-03-17 2011-09-22 International Business Machines Corporation Reflection capability in static programming languages
US20110296375A1 (en) * 2010-05-27 2011-12-01 Salesforce.Com, Inc. Adding directives for javascript files directly into source code in a multi-tenant database environment
US20160041822A1 (en) * 2010-05-27 2016-02-11 Salesforce.Com.Inc. Adding directives for versions of source files directly into source code
US9262137B2 (en) * 2010-05-27 2016-02-16 Salesforce.Com, Inc. Adding directives for versions of javascript files directly into source code in a multi-tenant database environment
US9262138B2 (en) * 2010-05-27 2016-02-16 Salesforce.Com, Inc. Adding directives for JavaScript files directly into source code in a multi-tenant database environment
US20110296381A1 (en) * 2010-05-27 2011-12-01 Salesforce.Com, Inc. Adding directives for versions of javascript files directly into source code in a multi-tenant database environment
US9753706B2 (en) * 2010-05-27 2017-09-05 Salesforce.Com, Inc. Adding directives for versions of source files directly into source code
US9069897B2 (en) 2011-11-23 2015-06-30 Microsoft Technology Licensing, Llc Capturing telemetry data by dynamic language engine
US20140359586A1 (en) * 2013-06-02 2014-12-04 Microsoft Corporation Programming Language with Extensions using a Strict Meta-Model
US9880820B2 (en) * 2013-06-02 2018-01-30 Microsoft Technology Licensing, Llc Programming language with extensions using dynamic keywords
US20150040102A1 (en) * 2013-07-31 2015-02-05 Fp Complete System and method for software interoperability
US20150154011A1 (en) * 2013-11-29 2015-06-04 Huawei Technologies Co., Ltd. Transplantation Method and Source-to-Source Compiler
US20160070545A1 (en) * 2014-09-04 2016-03-10 Home Box Office, Inc. Factory identification system
US10324691B2 (en) 2014-09-04 2019-06-18 Home Box Office, Inc. Factory identification system
US9792094B2 (en) * 2014-09-04 2017-10-17 Home Box Office, Inc. Factory identification system
US10216501B2 (en) * 2015-06-04 2019-02-26 The Mathworks, Inc. Generating code in statically typed programming languages for dynamically typed array-based language
US10810024B2 (en) * 2016-03-17 2020-10-20 Huawei Technologies Co., Ltd. Redirection method and apparatus, and system
US20190026131A1 (en) * 2016-03-17 2019-01-24 Huawei Technologies Co., Ltd. Redirection Method and Apparatus, and System
US20170279611A1 (en) * 2016-03-24 2017-09-28 International Business Machines Corporation Cryptographically assured zero-knowledge cloud services for elemental transactions
US11017387B2 (en) * 2016-03-24 2021-05-25 International Business Machines Corporation Cryptographically assured zero-knowledge cloud services for elemental transactions
US10417036B2 (en) * 2017-02-24 2019-09-17 Oracle International Corporation Evaluation techniques for fast access to structured, semi-structured and unstructured data using a virtual machine that provides support for dynamic code generation
US11360976B2 (en) 2017-08-31 2022-06-14 Oracle International Corporation Deployment of javascript and typescript stored procedures and user-defined functions into database management systems
US10949175B2 (en) * 2018-03-22 2021-03-16 Sick Ag Method of carrying out modifications to a software application
CN111460464A (en) * 2019-01-22 2020-07-28 阿里巴巴集团控股有限公司 Data encryption and decryption method and device, electronic equipment and computer storage medium
US20210065441A1 (en) * 2019-08-29 2021-03-04 Advanced Micro Devices, Inc. Machine learning-based technique for execution mode selection
US20220237309A1 (en) * 2021-01-26 2022-07-28 EMC IP Holding Company LLC Signal of risk access control
RU2814437C1 (en) * 2023-09-18 2024-02-28 Общество с ограниченной ответственностью "Облачные технологии" (ООО "Облачные технологии") Method and device for generating remote calls

Also Published As

Publication number Publication date
KR20070015440A (en) 2007-02-02
EP1754146A1 (en) 2007-02-21
CA2564681C (en) 2015-09-22
AU2005239421B2 (en) 2012-04-12
WO2005106658A1 (en) 2005-11-10
EP2112612A2 (en) 2009-10-28
US20120041935A1 (en) 2012-02-16
US8745579B2 (en) 2014-06-03
AU2005239421A1 (en) 2005-11-10
CA2564681A1 (en) 2005-11-10
EP2112612A3 (en) 2011-08-03
EP1754146A4 (en) 2009-04-22

Similar Documents

Publication Publication Date Title
US8745579B2 (en) Methods and systems for dynamically composing distributed interactive applications from high-level programming languages
Wielemaker et al. SWI-Prolog and the web
JP4912678B2 (en) Efficient data access with runtime type inference
US6732330B1 (en) Scripting language blocks to support multiple scripting languages in a single web page
US8645490B2 (en) Web site implementation by mapping expression evaluation
JP5367379B2 (en) Binary code analysis
US20040193635A1 (en) Method and apparatus for automatically providing network services
US20050209988A1 (en) System and method for efficient evaluation of a query that invokes a table valued function
Guth A formal semantics of Python 3.3
US7509335B2 (en) System and method for extensible Java Server Page resource management
Zhang et al. Resource and dependency based test case generation for RESTful Web services
US20100030745A1 (en) Record Based Code Structure
Tatsubori et al. HTML templates that fly: a template engine approach to automated offloading from server to client
Kapadia et al. The Purdue University network-computing hubs: Running unmodified simulation tools via the WWW
Silva et al. nuboinc: Boinc extensions for community cycle sharing
de Brock et al. From Conceptual Specification to OO Specification
US8001523B1 (en) System and methods for implementing an explicit interface member in a computer programming language
Juneau et al. Servlets and JavaServer Pages
Duthie et al. ASP. NET in a Nutshell: A Desktop Quick Reference
Tu et al. Performance Tuning and Optimizing ASP. NET Applications
Somoza Alonso Development of a restful API: hateoas & driven API
Christensen et al. JWIG User Manual
Leff et al. Issues and approaches for web 2.0 client access to enterprise data
Gopal An extensible framework for annotation-based parameter passing in distributed object systems
Outman Static optimization of transparently distributed network applications

Legal Events

Date Code Title Description
AS Assignment

Owner name: GOOGLE INC., CALIFORNIA

Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:INNUVO, LLC;REEL/FRAME:017350/0536

Effective date: 20050712

AS Assignment

Owner name: GOOGLE INC., CALIFORNIA

Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:INNUVO, LLC;REEL/FRAME:018443/0709

Effective date: 20050712

Owner name: INNUVO, LLC, GEORGIA

Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:WEBBER, JOEL;JOHNSON, H. BRUCE;REEL/FRAME:018443/0692

Effective date: 20050421

STCB Information on status: application discontinuation

Free format text: ABANDONED -- FAILURE TO RESPOND TO AN OFFICE ACTION

AS Assignment

Owner name: GOOGLE LLC, CALIFORNIA

Free format text: CHANGE OF NAME;ASSIGNOR:GOOGLE INC.;REEL/FRAME:044142/0357

Effective date: 20170929