US20020042833A1 - Streaming of archive files - Google Patents
Streaming of archive files Download PDFInfo
- Publication number
- US20020042833A1 US20020042833A1 US09/751,190 US75119000A US2002042833A1 US 20020042833 A1 US20020042833 A1 US 20020042833A1 US 75119000 A US75119000 A US 75119000A US 2002042833 A1 US2002042833 A1 US 2002042833A1
- Authority
- US
- United States
- Prior art keywords
- modules
- file
- archive
- module
- streaming
- 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
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L65/00—Network arrangements, protocols or services for supporting real-time applications in data packet communication
- H04L65/1066—Session management
- H04L65/1101—Session protocols
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L65/00—Network arrangements, protocols or services for supporting real-time applications in data packet communication
- H04L65/60—Network streaming of media packets
- H04L65/61—Network streaming of media packets for supporting one-way streaming services, e.g. Internet radio
- H04L65/612—Network streaming of media packets for supporting one-way streaming services, e.g. Internet radio for unicast
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L65/00—Network arrangements, protocols or services for supporting real-time applications in data packet communication
- H04L65/60—Network streaming of media packets
- H04L65/61—Network streaming of media packets for supporting one-way streaming services, e.g. Internet radio
- H04L65/613—Network streaming of media packets for supporting one-way streaming services, e.g. Internet radio for the control of the source by the destination
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L65/00—Network arrangements, protocols or services for supporting real-time applications in data packet communication
- H04L65/60—Network streaming of media packets
- H04L65/70—Media network packetisation
Definitions
- a client computers can communicate with a server to remotely access information stored at the server.
- the transfer of information between the server and client computer may be provided using standard protocols and software applications.
- a hypertext markup language (HTML) browser application at a client computer can communicate over the public Internet using TCP/IP and hypertext transfer protocols (HTTP) to receive web pages from a HTTP server.
- Web pages may include formatted text as well as multimedia elements, such as embedded graphics and sounds.
- the multimedia elements may be downloaded by the client and presented to a user by a browser application or a “plug in” browser component.
- Example browser applications include Netscape Navigator 4.0® and Microsoft Internet Explorer 4.0TM.
- Browser applications used at client computers can use plug-in software to receive audio and video information using a streaming data transmission protocol.
- a streaming protocol allows information to be presented by a client computer as it is being received. For example, full-motion video can be sent from a server to a client as a linear stream of frames. As each frame arrives at the client, it can be displayed to create a real-time full-motion video display. Audio and video streaming allows the client to present information without waiting for the entire stream to arrive at the client application. Audio and video streaming are provided by, for example, the RealAudio® and RealVideoTM applications from RealNetworks, Inc.
- Browser applications may also make use of executable software applets to enhance the appearance of HTML-based web pages.
- Applets are software programs that are sent from the server to the client in response to a request from the client.
- HTML-based web pages include HTTP commands that cause a browser application to request an applet from a server and to begin execution of the applet.
- the applet may thereafter interact with a user to gather and process data, may communicate data across a network, and may display results on a computer output device.
- Applets may be constructed from a programming language which executes in a run-time environment provided by the browser application at the client computer.
- Java® programming language allows Java applets to be stored at a web server and attached to web pages for execution by a Java interpreter.
- Java Applets may be formed from multiple Java Classes.
- Java Classes include executable Java code that can be downloaded from a server in response to a dynamically generated request to execute the class (a module execution request). If a Java Class is not available to a Java interpreter when an executing applet attempts to access functionality provided by the Class, the Java interpreter may dynamically retrieve the Class from a server.
- Other programming languages such as Microsoft Visual Basic® or Microsoft Visual C++®, may also be used to create applet-like software modules, such as Microsoft ActiveXTM controls.
- the Java programming environment may be configured for a variety of different platforms.
- Desktop and server computers having relatively abundant processing and memory resources, may implementation a “full” Java architecture, such as the Java 2 Enterprise Edition, while resource limited devices may implement a more narrowly focused architecture, such as the Java 2 Micro Edition (J2ME) architecture.
- J2ME is a modular and scalable Java architecture that supports a minimal configuration of a Java virtual machine and Java Application Programming Interfaces (APIs). J2ME can be further targeted to particular applications and device types.
- J2ME defines device configuration and profile to address different market segments. A profile addresses demands of a certain market segment or device family and functions, primarily, to guarantee interoperability within a certain device family.
- the Mobile Information Device Profile is one such profile.
- the MIDP is designed for cell phones and related services. Additional information on the MIDP profile can be obtained from Sun Microsystems, Inc.
- a J2ME application is written “for” a particular profile, and a profile is based upon, or extends, a particular configuration. Thus, all the features of a configuration are included in a profile and may be used by applications written for that profile.
- the Connected, Limited Device Configuration (CLDC) is a configuration defined for the J2ME environment.
- the CLDC is targeted to personal, mobile, connected information devices.
- the CLDC includes a number of classes designed to server the needs of small-footprint (i.e., limited-resource) devices.
- Java applets and class files can be stored in Java Archive (“JAR”) files.
- a JAR file may be requested by a web browser using an APPLET tag embedded in a HTML page.
- the APPLET tag includes a ‘archive’ parameter identifying the JAR files that are needed by an applet.
- the execution of the applet when a new class, image, or audio clip is requested by the applet, it is searched for first in the archives associated with the applet. If the file is not found amongst the archives that were downloaded, it is searched for on the applet's server, relative to the Java applet's Codebase.
- a different mechanism is defined by the CLDC to enable downloading of JAR files used in a CLDC device.
- the J2ME CLDC requires that an implementation support the distribution of Java applications via JAR files. Whenever a Java application intended for a CLDC device is publicly distributed over a network, it must be formatted in a compressed JAR file and classfiles within the JAR file must contain the stackmap attribute.
- Downloadable applets can also be used to develop large and complex programs.
- a complex financial program may be constructed from a collection of applets.
- separate applets may be used to gather information from a user, compute payments, compute interest, and generate printed reports.
- program functions are required by a user, the applets associated with the required functions can be retrieved from the server.
- delays associated with retrieving is modules over a network likewise increase and may be unacceptable to end-users. Consequently, an improvement in the transmission of software modules between computers is desirable.
- the invention features a method of streaming an archive file (such as a Java Archive file) from a server to a client device.
- the method includes extracting files from a Java Archive and streaming the extracted files from a server to a client device, receiving the streamed files and storing the received files for access by a Java application.
- the stored files may then be provided to a Java application
- the client device may be a resource-limited device that includes a Java Platform Micro Edition execution environment.
- the received streamed files can be stored at the client device in a Java Archive format. This may help to conserve resources at the client device.
- Streamed files can include both executable files (e.g., Java class files) and non-executable files (e.g., image files, sound files, and other data).
- the files can be streamed in accordance with predictive critiera (i.e., predetermined criteria predicting an order of utilization of the files at the client device.)
- Meta-information in the Java archive i.e., the Java Archive manifest and signature files
- the validation may, in a simple case, be a confirmation of file name and path. In a more complex case, digital signature information may be checked.
- extracting of the files occurs independent of a request by the Java application for the particular files.
- the Java application does request the archive (or files in the archive)
- the Java execution environment at the client device will attempt to satisfy this request using the streamed files stored at the client device. If it is unable to do so, control data can be sent to the streaming server to obtain the required archive and/or required files.
- the control data may cause the streaming server to interrupt a file currently being streamed or to change the order of files being transmitted so that transmission of the requested file may begin.
- the invention may be applied to other program execution environments and archive formats to enable streaming of files stored within different archive types.
- the invention may also be applied to the streaming of non-executable data.
- the invention includes methods and systems for streaming data modules between a first and a second computer.
- the modules may be streamed regardless of the existence of a “natural” order among the modules.
- the disclosed streaming mechanism is not constrained to operate according to a linear data ordering. Instead, streamed data modules are selected using predetermined criteria that can be independent of the particular data content.
- the disclosed streaming mechanism can provide user-dependent streaming of software modules.
- a home banking application may include modules #1 through #5.
- a first banking application user may, based on the user's input choices at a menu screen, access the modules in the order 1-3-4-5 while a second user may access the modules in the order 2-4-1.
- the predetermined criteria used to determine a streaming sequence may detail each user's module usage pattern.
- Predetermined criteria associated with the application's users may indicate a preferred streaming sequence 1-3-4-5 when the first user is accessing the banking application but may indicate the preferred sequence 2-4-1 when the second user is accessing the application.
- the streamed sequence may therefore conform to a historical user-dependent access pattern.
- Other types of predetermined criteria may also be used.
- the disclosed streaming mechanism may also be use to stream non-executable data such as hypertext markup language data, binary graphics, and text.
- the invention features a computer-implemented method of transmitting modules from a first computer to a second computer.
- a module set is formed by selecting a sequence of modules from a collection of available modules.
- Each of the selected modules are associated with an application executing at the second computer.
- the selected modules may be transparently streamed from the first computer to the second computer.
- the selection of modules is made in accordance with predetermined selection criteria and is independent of the second computer's execution environment.
- a module may include non-executable data, such as hypertext markup language data, and/or program code.
- the selection criteria may be stored in a streaming control database.
- the streaming control database may include transition records associating weighted values with transitions between selected modules in the collection. Processing of transition record information, such as by using a path determination algorithm, may be used to determine the sequence of modules.
- the streaming control database may include list records each of which identifies a predetermined sequences of modules. Selection of modules may be made by selecting a list record. Selecting a sequence of modules may include sending data from the second computer to the first computer to identify each module in the sequence or to identify the status of the executing application. For example, data identifying the status may include a series of user input values.
- Implementations may also include one or more of the following features.
- Streaming of the module set may be interrupted, a second sequence determined, and streaming of the second sequence may occur.
- the streaming of the module set may be interrupted by a request for a particular module that is sent from the second computer to the first computer.
- a Java Applet may interrupt a stream of Java Classes by attempting to access a Java Class that has not already been streamed to the second computer.
- a sequence of modules may be streamed and stored at the second computer independent of the executing application. That is, the executing application need not initiate streaming and need not be aware of the streaming process.
- Streamed modules may be subsequently integrated with the application at the second computer by interconnecting logic in a streamed module with logic in the application.
- Implementations may also include one or more of the following features.
- the application may include an interrupt statement. Execution of the interrupt statement may transfer control to an executor program.
- the executor program functions in the manner of a program code debugger by responding to the interrupt statement and preventing the permanent cessation (termination) of the executing application process.
- the executor program may thereafter integrate logic in a streamed module with the application's logic by replacing the interrupt statement (generally, as part of a block of replacement logic) with replacement logic from the streamed module.
- the application may thereafter continue executing, generally by executing replacement logic that has been substituted for the interrupt statement.
- the application may also include a stub procedure that can be replaced by logic in a streamed module. Replacement of the stub procedure may be direct, such as by removing the stub procedure code and replacing it with logic from a streamed module, or replacement may be operative, such as by creating a link to logic in a streamed module.
- the invention features a computer program residing on a computer-readable medium.
- the computer program includes instructions for causing a computer to access a collection of modules associated with an application, to access a database storing module selection criteria, to form a module set by selecting a sequence of modules from the collection in accordance with the module selection criteria, and to transparently stream the module set to a second computer.
- Implementations of program may also include instructions for causing the computer to retrieve a first module from the collection and to send the first module to the second computer.
- the invention features a computer program residing on a computer-readable medium.
- the program includes instructions for causing a computer to execute an application, to transparently receive a modules associated with the executing application, to store the received module independent of the executing application, and to integrate the received module with the executing application.
- the invention features a system for transferring information modules between computers.
- the system includes a first computer and a second computer.
- the first computer includes means for executing an application, means for receiving a sequence of modules associated with the application while the application is executing, and means for integrating a first module in the received sequence with the application.
- the second computer includes means for storing a collection of modules associated with the application, means for selecting a sequence of modules from the collection, and means for transferring the selected sequences from the first computer to the second computer.
- Implementations may include one or more of the following advantages. Delays experienced when downloading an applications, a code module, or a data modules can be can be reduced. Software and data modules can be predictively delivered to a client workstation according to a particular end user's requirements. The order in which modules are streamed from a server to a client can be dynamically determined. A collection of module delivery sequences can be associated with a particular application or user and the sequences can be dynamically updated. Module delivery sequences can be determined based on individual software usage patterns or stored statistic associated with module usage. Module streaming can be interrupted and altered during the execution of an application. Implementations may include additional or alternative advantages as will become clear from the description and claims that follow.
- FIG. 1 illustrates a computer network
- FIG. 2 illustrates computer software application modules.
- FIG. 3 is a directed graph, according to the invention.
- FIG. 4 illustrates a server and a client, according to the invention.
- FIGS. 5 A- 5 E illustrate application code components, according to the invention.
- FIG. 6 illustrates the structure of Java Archive file.
- a wide area network 100 is shown.
- a client computer 101 can communicate with a server computer 102 by sending data over links 103 and 104 to a data network 130 .
- the data network 130 may include multiple nodes 131 - 134 that can route data between the client 101 and the server 102 .
- the client computer 1 01 may transmit and receive data using the TCP/IP, HTTP, and other protocols. For example, the client 101 may use the HTTP protocol to request web pages from the server 102 .
- Web pages and multimedia data sent from the server 102 to the client 101 may have a natural linear sequence associated with them.
- the natural sequence of video data may be the linear order of video frames while the natural sequence of text may be the order in which pages of text are arranged in a document.
- Data having a natural linear sequence can be streamed from a server to a client to minimize download delays.
- subsequent items may be downloaded to the client computer.
- a user or client application requesting the streamed item will perceive a reduced downloading delay. For example, if the first page of a document is retrieved by a user, the second page can be downloaded while the first page is being read. If the user continues reading at the second page of the document, that page will then be available at the client, such as in a cache area on a hard disk drive, and can be read without additional downloading delay.
- Software execution may not follow a predictable natural linear order.
- Software may include jump statements, break statements, procedure calls, and other programming constructs that cause abrupt transfers of execution among sections of executing code.
- the execution path that is traversed during the processing of interrelated code modules (such as code segments, code classes, applets, procedures, and code libraries), will often be non- linear, user dependent, may change with each execution of the application program, and may change depending on the state of various data items.
- a natural order may be lacking, an advantageous order may be determined in which to stream modules. The order may be determined using criteria that is independent of the computer's internal architecture or internal operating system (execution environment) considerations.
- a software application 200 may include multiple modules “A” through “H.”
- Modules “A” through “H” may be Java Classes, C++ procedure libraries, or other code modules that can be stored at a server. Some of the modules “A” through “H” may also be stored at the client computer, such as in a hard disk drive cache or as part of a software library stored at the client computer.
- a first module such as module “A”
- module “A” may be downloaded from the server and its execution at the client 410 may begin.
- module “A” As module “A” is being processed, the programming statements contained therein may branch to, for example, module “E.” If Module “E” is not already resident at the client, the execution of module “A” can be suspended, module “E” can be retrieved from the server, and then the execution of module “E” code may begin. In such a scenario, a user will experience a module download delay associated with retrieving module “E” from the server.
- module “E” may be transparently streamed from a server to the client computer. Transparent streaming allows future module use to be predicted and modules to be downloaded while other interrelated modules “A” are executing.
- FIG. 4 an exemplary software architecture 400 providing transparent streaming is shown.
- the software architecture 400 includes a server 401 having a database 403 of stored software modules.
- the server 401 can transparently transmit a stream of software modules 405 over a communications link to a client computer 410 .
- the communication link may be an analog modem connection, a digital subscriber line connection, a local area network connection, or any other type of data connection between the server 401 and client 410 .
- modules are being executed at the client 410 .
- additional modules are sent from the server 401 to the client 410 .
- the order in which modules are streamed between the server and client may be altered based on the particular client computer 410 being served, based on the user of the client computer, and based on other dynamically determined factors.
- the execution order of application modules “A” through “H” may resemble a directed graph 300 rather than a linear sequence of modules. For example, as illustrated by the graph 300 , after module “A” is executed, execution can continue at module “B,” “D,” or “E.” After module “B” is executed, execution can continue at module “C” or “G.” The execution path may subsequently flow to additional modules and may return to earlier executed modules.
- the server 401 can use streaming control information 402 to determine the order in which to stream modules from the server 401 to the client 410 .
- the streaming control information 402 can include, for example, a predicted execution flow between software modules such as that represented by the directed graph 300 .
- the client may send control data 415 to the server 401 to dynamically update and alter the order in which modules are streamed from the server 401 to the client 410 .
- Control data 415 may be used to request particular modules from the server 401 , to send data regarding the current execution state of the application program, to detail the current inventory of modules residing in the client's local storage 411 , and to report user input selections, program execution statistics, and other data derived regarding the client computer 410 and its executing software.
- the sequence of modules sent in the stream 405 from the server 401 to the client 410 can be determined using a streaming control file 402 .
- the streaming control file 402 includes data used by the server to predict modules that will be needed at the client 410 .
- the control file 402 may represent modules as nodes of a directed graph.
- the control file 402 may also represent possible execution transitions between the modules as vertices (“edges”) interconnecting the nodes.
- the streaming control file 402 may include a list of vertices represent possible transitions between modules. For example, Table 1 list vertices representing all possible transitions between the modules “A” through “H” of graph 300 (FIG. 3).
- Each vertex in Table 1 includes a weight value indicating the relative likelihood that the particular transitions between modules will occur. In the example of Table 1, higher weight values indicate less likely transitions.
- the server 401 may apply a shortest-path graph traversal algorithm (also known as a “least cost” algorithm) to determine a desirable module streaming sequence based on the currently executing module.
- shortest-path algorithms may be found in Telecommunications Networks: Protocols, Modeling and Analysis, Mischa Schwartz, Addison Wesley, 1987, ⁇ 6.
- Table 2 represents the minimum path weight between module “A” and the remaining modules of Table 1.
- TABLE 2 Shortest Paths from Application Module “A” Shortest Path From To Weight Path A B 1 A-B C 2 A-B-C D 7 A-D E 3 A-E F 9 A-D-F G 4 A-B-G H 5 A-E-H
- the server 401 may determine that, during the execution of module “A”, the module streaming sequence “B,” “C,” “E,” “G,” “H,” “D,” “F” is advantageous. If a particular module in a determined sequence is already present at the client 402 , as may have been reported by control data 415 , the server 401 may eliminate that module from the stream of modules 405 .
- the server may interrupt the delivery of the sequence “B,” “C,” “E,” “G,” “H,” “D,” “F,” calculate a new sequence based on the now executing module, and resume streaming based on the newly calculated streaming sequence. For example, if execution transitions to module “B” from module “A,” control data 415 may be sent from the client 410 to the server 401 indicating that module “B” is the currently executing module. If module “B” is not already available at the client 410 , the server 401 will complete delivery of module “B” to the client and determine a new module streaming sequence.
- the server 401 may determine that module streaming sequence “C,” “G,” “E,” and “H” is advantageous.
- a weighted graph 300 may be used wherein heavier weighted edges indicate a preferred path among modules represented in the graph.
- higher assigned weight values indicate preferred transitions between modules.
- edges (A,B), (A,D), and (A,E) are three possible transitions from module A. Since edge (A,B) has a higher weight value then edges (A,D) and (A,E) it is favored and therefore, given module “A” as a starting point, streaming of module “B” before modules “D” or “E” may be preferred.
- Edge weight values can be, for example, a historical count of the number of times that a particular module 5 was requested by a client, the relative transmission time of the code module, or a value empirically determined by a system administrator and stored in a table 402 at the server 401 . Other edge weight calculation methods may also be used.
- TABLE Preferred Path Table Edge Weight (A,B) 100 (A,D) 15 (A,E) 35 (B,C) 100 (B,G) 35 (C,E) 50 (C,G) 20 (D,F) 50 (E,H) 50 (F,H) 100 (G,E) 35 (G,H) 25
- edges in the graph 300 having higher weight values are favored.
- the following exemplary algorithm may be used to determine a module streaming sequence in a preferred-path implementation:
- [0046] 3 Append the node S 1 to the Stream Set and remove any pair (S 1 , W) from the candidate set.
- Implementations may select alternative algorithms to calculate stream sets.
- Application streaming may also be used to stream subsections of an application or module.
- subsections of compiled applications such as applications written in C, C++, Fortran, Pascal, or Assembly language may be streamed from a server 401 to a client 410 .
- an application 500 may include multiple code modules such as a main code module 501 and code libraries 510 and 515 .
- the main module 501 contains program code that is executed when the application is started.
- the code libraries 510 and 515 may contain header data 511 and 516 as well as executable procedures 512 - 514 and 517 - 519 that are directly or indirectly called from the main module 501 and other library procedures.
- the main code module 501 may contain a compiled C++ “main” procedure and the library modules 510 and 515 may be dynamic link libraries having compiled C++ object code procedures.
- Header data 511 and 516 may include symbolic names used by operating system link procedures to dynamically link libraries 510 and 515 with the main module 501 . Header data may also indicate the location of each procedure within the library.
- a calling procedure may access library procedures 512 - 514 , 517 - 519 by jumping to a predetermined location in the header 511 or 516 and from there, accessing additional code and/or data resulting in a subsequent jump to the start of the procedure.
- Data and procedures within an application's code modules and libraries may be many hundreds or thousands of bytes long. Prior to executing an application, a client may need to retrieve a lengthy set of modules and libraries. By reducing the size of the module and library set, the initial delay experienced prior to application execution can be reduced.
- code within subsections of the application's code modules can be removed and replaced by shortened streaming “stub” procedures. The replacement of application code with streaming stub procedures may reduce module size and associated transmission delay. For example, referring to FIGS.
- the code library 510 may include a header 511 that is 4 kilobytes (Kbytes) in length and procedures 512 - 514 that are, respectively, 32 Kbytes, 16 Kbytes, and 8 Kbytes.
- procedures code 512 - 514 may be removed from the library 510 and stored in a streaming code module database 403 at the server 401 (FIG. 4).
- the removed procedure code 512 - 514 may be replaced by “stub” procedures 522 - 524 resulting in reduced-size code library 530 that can be linked with application modules 501 and 515 in place of library 510 .
- Header data 511 of library 530 can include updated jump or link information allowing stub procedures 522 - 524 to act as link-time substitutes for procedures 512 - 514 .
- a server 401 may provide a streaming-enabled version of application 500 to a client 410 by sending main module 501 , library module 515 , “streamed” library 530 , and, in some implementations, a streaming support file 535 to the client 410 in response to a request for the application 500 .
- the streaming support file 535 may include procedures accessed by the stubs 522 - 524 to facilitate code streaming between the server 401 and client 410 .
- modules 501 , 515 , 530 and 535 can be linked and execution of the resulting application can begin.
- code modules stored in the database 403 can be streamed from the server 401 to the client 410 .
- Data may be included in the stream 403 to identify stub procedures 522 - 524 associated with the streamed code modules.
- the streamed modules are received at the client, they are integrated with the executing application.
- streamed code modules are integrated with the executing application by appending received modules to their corresponding library or code file.
- modules 512 - 514 are streamed from the server to the client, they are appended to the library file 530 thereby forming an augmented library file 540 .
- header data 511 or stub data 522 - 524 is updated so that the now-appended modules are accessible from a calling procedure. For example, referring to FIG.
- an additional “jump” may be added between each stub procedure 522 - 524 and its associated appended module 512 - 514 .
- header data 511 may be updated so that procedures 512 - 514 are accessible in place of stubs 522 - 524 .
- stubs 522 - 524 are replaced by procedure modules 512 - 514 as the modules are received from the server 401 .
- Stub replacement may require altering or rearranging the location of the remaining stubs or procedures within a code module or library as replacement code is received. Implementations may employ still other methods of integrating streamed code with executing applications and modules.
- removed code such as procedure code 512 - 514 which, in the example given, was replaced by stubs 522 - 524
- stub code 522 - 524 may access streaming functions in the streaming support library 535 to obtain the required procedure.
- the streaming support library 535 may send control data 415 to the server 401 to request the needed procedure.
- the server 401 can halt the current module stream 405 and send the requested module.
- procedures in the streaming support library 535 may be used to integrate the received module with the application and to continue with the execution of the requested module.
- the server may thereafter determine a new module stream based on the requested module or other control data 415 that was received from the client.
- Code modules may be reduced in size without the use of stub procedures.
- procedure code 512 - 514 may be removed from a code library 510 and stored in a database 403 . Header information 511 as well as data indicating the size and location of removed procedure code 512 - 514 may then be transmitted to a client 410 .
- the client 410 may construct a new library 550 by appending a series of interrupt statements in place of the removed procedure code 512 - 514 .
- the code library 550 is substituted for the library 510 and execution of the program 500 may begin.
- the removed procedure code 512 - 514 can be streamed to the client 410 and stored in a local database 411 . If the application 500 attempts to execute procedure code 512 - 514 it may instead execute one of the interrupt statement that have replaced procedure code 512 - 514 . The execution of the interrupt statement halts the execution of the program 500 and transfers control to a streaming executor program 416 .
- Executor 416 implements interface technology similar to that of a conventional run-time object code debugger thereby allowing the executor 416 to intercept and process the interrupt generated by the application 500 .
- data provided to the executor 416 as part of the client execution platform (operating system) interrupt handling functionality can be used to identify the module 550 in which the interrupt was executed and the address of the interrupt code within the module.
- the executor 416 determines whether procedure code 512 - 514 associated with the interrupt location has been received as part of the module stream 405 sent to the client. If the appropriate procedure code has been received, the executor 515 replaces the identified interrupt with the its corresponding code.
- procedures 512 - 514 may be segmented into 4 Kilobyte code modules that are streamed to the client 410 .
- the executor 416 intercepts the interrupt, determines an appropriate 4 Kilobyte code block that includes the interrupt statement, and replaces the determined code block with a received code module. If the appropriate code module has not yet been received, an explicit request may be sent from the client 410 to the server 401 to retrieve the code module prior to its insertion in the library 550 . The executor 416 may thereafter cause the application 500 to resume at the address of the encountered interrupt.
- Implementations may also stream entire modules or libraries.
- main code module 501 may be received from the server 401 and begin execution at the client 410 while code libraries 510 and 515 are streamed from the server 401 to the client 410 .
- Integration of streamed modules with executing modules may be provided by client 410 dynamic module linking facilities.
- delay import loading provided by Microsoft Visual C++ 6.0 may be used to integrate streamed modules 510 and 515 with executing modules 501 .
- Dynamic linking of streamed modules may be facilitated by storing the streamed modules on a local hard disk drive or other storage location accessible by client 410 link loading facilities.
- streaming is facilitated by altering client 410 operating system link facilities such that the link facility can send control data 415 to the server 401 to request a particular module if the module is has not already been streamed to the client 401 .
- streaming support 535 may be pre-provisioned by installing support procedures at the client 410 prior to the client's request for the application 500 .
- Archive file such as CAB, tar, BINHEX, and ZIP files, including ZIP formatted Java Archive (JAR) files, can be streamed by extracting modules of data from the archive files and streaming those modules to a client terminal.
- JAR Java Archive
- Java classes can be aggregated together in a Java Archive files (a “JAR file”).
- a JAR file is a data archive using the ZIP archive format to aggregate a collection of logically separate data files.
- the files in a JAR file can include Java class files, video, sound, and other data files, as well as meta-information files (the contents of which are define by Sun Microsystems Inc.'s JAR standard).
- FIG. 6 shows the format of an example JAR file 600 .
- the content of elements 611 - 616 , 621 - 626 , 641 - 647 of the file 600 is are fields defined by the ZIP specification (this specification is available from PKWARE, Inc.) These elements 611 - 616 , 621 - 626 , 641 - 647 organize and support the archiving and compression of files 601 - 606 stored in the archive 600 .
- Elements 611 - 616 of the archive 600 are known as local file headers. Each local file header precedes a file stored in the archive 600 .
- Local file headers specify, among other things, the name and relative path of the associated file, the last time/date the file was modified, and the compressed and uncompressed size of the file.
- the contents of each local file header is repeated (together with additional information) in a central directory 640 located at the end of the ZIP archive.
- the central directory 640 includes a corresponding central directory headers 641 - 646 .
- each file 601 - 606 in the archive may also include an optional data descriptor 621 - 626 ; though these data descriptors are typically not present in JAR files.
- a ZIP file's central directory 640 includes an ‘end of central directory’ record 647 .
- the record 647 includes, among other things, the total number of entries in the central directory (i.e., the total number of files in the archive), the size of the central directory, the number of the disk containing the central directory, and the offset of the start of the central directory with respect to the start of an archive segment containing the central directory 640 (a ZIP archive may be split among multiple segments, e.g., multiple floppy disk of files).
- the size of a ZIP archive 600 can be obtained in a number of different ways.
- One method is to add the compressed sizes of the files 601 - 606 (obtained from the compressed file size information in either the local file header or central directory header), together with the sizes of the headers 611 - 616 , 621 - 626 , 641 - 647 .
- a second method (usable if the ZIP archive is contained within one file or disk, as is the case with JAR files), determines the size of the ZIP archive from information in the end of central directory record 647 .
- the value in a ‘size of the central directory’ field of the record 647 is added to the value of the ‘offset of start of central directory with respect to the starting disk number’ field in the record 647 .
- Files 601 - 606 are the files being archived using the ZIP compression technique and format.
- Files 601 - 606 include files used by an executing application 603 - 606 as well as meta-information files 601 - 602 containing information about one or more of the other files 603 - 606 .
- the meta-information includes a “manifest” file 601 .
- this manifest file is named “MANIFEST.MF” and is logically associated with the storage path “META-INF” (i.e., the file has a relative path/name “META-INF/MANIFEST.MF”).
- the manifest file 601 includes, among other things, a JAR format version number and the names of the files 603 - 606 that are in the JAR 600 .
- a manifest file also may includes optional “digest” data for one or more of the files 603 - 606 .
- Digest data is generated by processing a file (e.g., file 603 ) with a cryptography algorithm (typically, the MD 5 or SHA algorithm).
- the digest data is stored in the manifest file and serves as a digital signature that can be used to validate the file 603 (i.e., to ensure that the file has not been modified or corrupted).
- the digest information along with separately stored signature information 602 , can be used to identify a file's signer.
- Signature files are another form of meta-information that can be stored in a JAR.
- Java Archives are more fully described in, e.g., the text Java in a Nutshell, by David Flanagan, O'Reilly, 1997.
- resource limited devices such as J2ME/CLDC/MIDP devices, simplified meta-information, excluding signature files 602 , is used.
- a JAR file 600 is transmitted as a single file from a server 401 to a client device 410 .
- the streaming server 401 may stream the file 600 as a series of separate modules by extracting the ZIP central directory 640 , as well as the individual files and their associated headers 631 - 636 , and streaming each of these elements 631 - 636 , 640 separately.
- the central directory information 640 will be streamed first, followed by the meta-information 631 - 632 (if present), and then the remaining modules 633 - 636 .
- the modules 631 - 636 or a subset, e.g., modules 633 - 636 will be ordered by a predictive algorithm, however such ordering is not required in all implementations. Predictive ordering may be applied to a subset 633 - 636 of the modules and a fixed ordering to other modules 631 - 632 , 640 .
- the server 401 extracts the contents of the JAR file as a set of streamable modules 631 - 636 , 640 (other divisions and combinations of the file 600 can be used; for example, each element 601 - 606 , 611 - 616 , 621 - 626 , 641 - 647 may be a separate module).
- To extract the modules 631 - 636 , 640 their size and location is determined based on the offset of the module within the file 600 , the compressed size of the files 601 - 606 , the size each local header 611 - 616 and the size of each data descriptor 621 - 626 (if present). This size and offset information can be determined from the central directory file headers 641 - 647 .
- the extracted modules 631 - 636 , 640 are then ordered for streaming to the client 410 .
- the receiving device 410 includes a streaming executor 416 that controls the receipt of the streamed modules 631 - 636 , 640 and the storage of those modules in storage 411 (which may be, e.g., solid state memory such as RAM or EEPROM, or magnetic memory such as a hard disk).
- the stored modules may then be accessed by a Java application or applet.
- the component 416 can incrementally rebuild a JAR file at the receiving device 410 to store the received modules.
- a cell phone, PDA, or other device supporting the Java Connected Limited Device Configuration (CLDC) on the Java 2 Micro Edition (J2ME) architecture may store the received modules in an incrementally rebuilt JAR file in memory 411 . Storing the received modules in a JAR file can provide for more efficient use of limited memory resources.
- CLDC Java Connected Limited Device Configuration
- J2ME Java 2 Micro Edition
- the receiving device 410 may pre-allocate space for the file 600 .
- the size of the archive can be determined from the end of central directory record 647 .
- streaming of the modules 631 - 636 , 640 may begin with streaming of the central directory module 640 (or, at least, of the end of central directory record 647 ).
- the client device can process the size and offset information in the record 647 to determine the total size of the JAR archive 600 .
- the client may then allocate space for the JAR archive 600 .
- control data 415 can be sent to the client 410 identifying the JAR archive to be streamed and the size of the archive.
- the client After allocating space for the JAR archive, the client places the module 640 in the allocated space at the proper offset within that space (as indicated by the offset information in the record 647 ).
- the remaining modules 631 - 636 may then be streamed from the server 401 to the client 410 .
- streaming of the modules 631 - 636 may be in accordance with a predictive algorithm.
- the modules 631 - 636 As the modules 631 - 636 are received at the client 410 from the server 401 , they can be consecutively placed in the space allocated for the JAR file. In some cases, this may result in a different ordering of the modules 631 - 636 in the reconstructed JAR file than the ordering of the modules in the original JAR file.
- module 636 For example, if module 636 is streamed before modules 631 - 635 , then module 636 will be located at the beginning of the reconstructed JAR archive and the remaining modules 631 - 635 thereafter. If such a consecutive placement of received modules in the reconstructed JAR file is used, resulting in a different order of modules 631 - 636 in the reconstructed file than in the original file, then the ‘relative offset of local header data’ contained in the module's corresponding central directory header 641 - 646 will need to be adjusted to reflect the new placement of each module. Alternatively, the ‘relative offset of local header data’ can be used to position modules 631 - 636 in their original position regardless of the streaming order of the modules 631 - 636 .
- Java programs executing at the client may begin using a module 633 - 636 following the receipt of that module; that is, the client does not need to receive all of the modules 631 - 636 , 640 before received modules can be used. Instead, data in the fully or partially reconstructed JAR file may be extracted and de-compressed as needed using decompression and file management functionality present at the receiving device.
- the client device's file extraction code may be modified to generate an exception if a module requested by an executing application is missing from the archive.
- the extraction software can generate an exception.
- the executor 416 sends control data 415 to the server 401 identifying the requested module or file (i.e., module 636 or file 606 ).
- the server 401 may then change the streaming order of modules so that the requested module is streamed next. In some cases, a currently streaming module may be interrupted to allow immediate transmission of the requested module.
- the requested module may be sent after any partially streamed modules. Interruption of a partially streamed module may be determined based on a weighing algorithm (e.g., finish if greater than 50% already transmitted, discard otherwise).
- Java implementations may require the presence of the manifest file 601 at the client before any of the files 603 - 606 can be used. In such implementations, it is desirable to stream the manifest file 601 before the files 603 - 606 .
- signature files 602 if used, should be streamed prior to, or immediately following, the respective signed file 603 . Streaming of the manifest file 601 and other meta information 602 in this manner permits checking and validation of the manifest information as well as the processing of digital signature information as the files 603 - 606 are received.
- redundant information in an archive file may be omitted prior to streaming.
- the local file header data 611 - 616 is repeated in the central directory headers 641 - 646 ; consequently, the local file header data 611 - 616 may be discarded from the streamed modules (resulting in a smaller module), and can be reconstructed at the client using the data in the central directory headers 641 - 646 .
- improved compression may be obtained using type-specific compression algorithms (rather than standard ZIP compression algorithms).
- type-specific compression algorithms rather than standard ZIP compression algorithms.
- the module Prior to streaming a module, the module may be decompressed and re-compressed into a new compression format.
- additional software functionality i.e., additional decompression algorithms and ZIP compression may be implemented at the receiving device for the reconstruction of the JAR file.
- the streamed files also may be stored at the receiving device in a de-archived format.
- each received file may be stored as a separate files on a hard disk 411 (or other type of memory 411 ).
- Path information in the local or central directory file headers 611 - 616 , 641 - 646 , or sent in control data 415 can be used to define a hierarchical storage of the streamed files at the receiving device.
- an extracted file may be further subdivided before streaming.
- file 601 may be a class file containing several Java classes. Individual classes may be extracted from the file 601 and streamed as separate modules. This extraction of classes from within a file 601 is an implementation of the technique discussed with respect to FIGS. 5 A- 5 E.
- the streaming control file may include predetermined list of module streaming sequences.
- the streaming control file 402 may include a module streaming sequence list associated with a first user and a second module streaming sequence list associated with a second user.
- Control data 415 sent from the client 410 to the server 401 may identify the current user at the client 410 .
- the server may stream software modules in accordance with the user's associated streaming sequence list.
- User-based streaming data may be advantageous where a user's past behavior can be used to anticipate the order of modules to be accessed by that user.
- the weight of edges connecting nodes may be determined statically or dynamically and may be determined based on a collection of historical usage data. For example, in a programmer-controlled implementation, a software programmer estimate the likelihood that particular transitions between nodes will occur based on the programmer's knowledge of the software code and the expected application usage patterns. Alternatively, application profiling programs may be used to gather run-time execution data recording transitions between various applets, Classes or code modules and thereby determine the likelihood that particular transitions will occur. In a client-feedback implementation, control data 415 sent from the client 410 to the server 401 during module execution is used to build a statistical database of module usage and, based on that database, determine the module streaming order.
- streaming control data 402 may be located at the client 410 and control data 415 sent from the client 410 to the server 401 may be used to sequentially request a stream of modules from the server.
- a background process may send control data 415 to a server to request additional modules that can be buffered on a hard disk 411 at the client computer 410 .
- a client-controlled streaming implementation may used existing HTTP servers and HTTP protocols to send request from the client 410 to the server 401 and send software modules from the server 401 to the client 410 .
- streaming of software modules has been emphasized in the foregoing description, non-executable data, such as hypertext markup language, binary graphic files, and text, may be streamed as a collection of modules.
- Implementations may include a “handshaking” procedure whereby, at the start of application execution, control data 415 is sent between the server 401 and the client 410 .
- the handshaking data may include an inventory of application modules residing at the client and at the server. Such handshaking data allows both the client 410 and server 401 to determine their respective software module inventory and to optimize the stream of software modules based on that inventory information.
- a server or client can store data about a series of transitions between modules and calculate a new module stream based on a history of transitions. For example, referring to FIG. 3, if the module “G” was reached by the path A-B-G, then a server or client may determine that module “E” followed by “H” is to be streamed. On the other hand, if the module “G” was reached by the path A-B-C-G then the streaming sequence may include only the module “H.”
- the invention may be implemented in computer hardware, firmware, software, digital electronic circuitry or in combinations of them.
- Apparatus of the invention may be implemented in a computer program product tangibly embodied in a machine-readable storage device for execution by a programmable processor; and method steps of the invention may be performed by a programmable processor executing a program of instructions to perform functions of the invention by operating on input data and generating output.
- the invention may advantageously be implemented in one or more computer programs that are executable on a programmable system including at least one programmable processor coupled to receive data and instructions from, and to transmit data and instructions to, a data storage system, at least one input device, and at least one output device.
- Each computer program may be implemented in a high-level procedural or object-oriented programming language, or in assembly or machine language if desired; and in any case, the language may be a compiled or interpreted language.
- Suitable processors include, by way of example, both general and special purpose microprocessors. Generally, a processor will receive instructions and data from a read-only memory and/or a random access memory.
- Storage devices suitable for tangibly embodying computer program instructions and data include all forms of non-volatile memory, including by way of example semiconductor memory devices, such as EPROM, EEPROM, and flash memory devices; magnetic disks such as internal hard disks and removable disks; magneto-optical disks; and CD-ROM disks. Any of the foregoing may be supplemented by, or incorporated in, specially-designed ASICs (application-specific integrated circuits).
- semiconductor memory devices such as EPROM, EEPROM, and flash memory devices
- magnetic disks such as internal hard disks and removable disks
- magneto-optical disks magneto-optical disks
- CD-ROM disks CD-ROM disks
Abstract
Archive files can be streamed from a server to a client device by extracting individual files from the archive and streaming the extracted files from the server to the client device. The received files can then be stored at the client device for access by an application. A new archive file may be formed at the client device to contain the received streamed files. Predictive critiera may be used to determine the order in which the extracted files are streamed from the server to the client device.
Description
- This application is a continuation-in-part of U.S. patent application Ser. No. 09/120,575, filed on Jul. 22, 1998, entitled “Streaming Modules.”
- In a client-server environment, a client computers can communicate with a server to remotely access information stored at the server. The transfer of information between the server and client computer may be provided using standard protocols and software applications. For example, a hypertext markup language (HTML) browser application at a client computer can communicate over the public Internet using TCP/IP and hypertext transfer protocols (HTTP) to receive web pages from a HTTP server. Web pages may include formatted text as well as multimedia elements, such as embedded graphics and sounds. The multimedia elements may be downloaded by the client and presented to a user by a browser application or a “plug in” browser component. Example browser applications include Netscape Navigator 4.0® and Microsoft Internet Explorer 4.0™.
- Browser applications used at client computers can use plug-in software to receive audio and video information using a streaming data transmission protocol. A streaming protocol allows information to be presented by a client computer as it is being received. For example, full-motion video can be sent from a server to a client as a linear stream of frames. As each frame arrives at the client, it can be displayed to create a real-time full-motion video display. Audio and video streaming allows the client to present information without waiting for the entire stream to arrive at the client application. Audio and video streaming are provided by, for example, the RealAudio® and RealVideo™ applications from RealNetworks, Inc.
- Browser applications may also make use of executable software applets to enhance the appearance of HTML-based web pages. Applets are software programs that are sent from the server to the client in response to a request from the client. In a typical applet use, HTML-based web pages include HTTP commands that cause a browser application to request an applet from a server and to begin execution of the applet. The applet may thereafter interact with a user to gather and process data, may communicate data across a network, and may display results on a computer output device. Applets may be constructed from a programming language which executes in a run-time environment provided by the browser application at the client computer. For example, the Java® programming language from Sun Microsystems, Inc., allows Java applets to be stored at a web server and attached to web pages for execution by a Java interpreter. Java Applets, may be formed from multiple Java Classes. Java Classes include executable Java code that can be downloaded from a server in response to a dynamically generated request to execute the class (a module execution request). If a Java Class is not available to a Java interpreter when an executing applet attempts to access functionality provided by the Class, the Java interpreter may dynamically retrieve the Class from a server. Other programming languages, such as Microsoft Visual Basic® or Microsoft Visual C++®, may also be used to create applet-like software modules, such as Microsoft ActiveX™ controls.
- The Java programming environment may be configured for a variety of different platforms. Desktop and server computers, having relatively abundant processing and memory resources, may implementation a “full” Java architecture, such as the Java 2 Enterprise Edition, while resource limited devices may implement a more narrowly focused architecture, such as the Java 2 Micro Edition (J2ME) architecture. J2ME is a modular and scalable Java architecture that supports a minimal configuration of a Java virtual machine and Java Application Programming Interfaces (APIs). J2ME can be further targeted to particular applications and device types. J2ME defines device configuration and profile to address different market segments. A profile addresses demands of a certain market segment or device family and functions, primarily, to guarantee interoperability within a certain device family. The Mobile Information Device Profile (MIDP) is one such profile. The MIDP is designed for cell phones and related services. Additional information on the MIDP profile can be obtained from Sun Microsystems, Inc. A J2ME application is written “for” a particular profile, and a profile is based upon, or extends, a particular configuration. Thus, all the features of a configuration are included in a profile and may be used by applications written for that profile. The Connected, Limited Device Configuration (CLDC) is a configuration defined for the J2ME environment. The CLDC is targeted to personal, mobile, connected information devices. The CLDC includes a number of classes designed to server the needs of small-footprint (i.e., limited-resource) devices.
- Java applets and class files can be stored in Java Archive (“JAR”) files. A JAR file may be requested by a web browser using an APPLET tag embedded in a HTML page. To request the JAR file, the APPLET tag includes a ‘archive’ parameter identifying the JAR files that are needed by an applet. Once an archive file is identified, it is downloaded and separated into its components. During the execution of the applet, when a new class, image, or audio clip is requested by the applet, it is searched for first in the archives associated with the applet. If the file is not found amongst the archives that were downloaded, it is searched for on the applet's server, relative to the Java applet's Codebase. A different mechanism is defined by the CLDC to enable downloading of JAR files used in a CLDC device.
- To enable dynamic downloading of 3rd party applications and content, the J2ME CLDC requires that an implementation support the distribution of Java applications via JAR files. Whenever a Java application intended for a CLDC device is publicly distributed over a network, it must be formatted in a compressed JAR file and classfiles within the JAR file must contain the stackmap attribute.
- Downloadable applets can also be used to develop large and complex programs. For example, a complex financial program may be constructed from a collection of applets. In such a financial program, separate applets may be used to gather information from a user, compute payments, compute interest, and generate printed reports. As particular program functions are required by a user, the applets associated with the required functions can be retrieved from the server. However, as the size of a software application increases, delays associated with retrieving is modules over a network likewise increase and may be unacceptable to end-users. Consequently, an improvement in the transmission of software modules between computers is desirable.
- In general, in one aspect, the invention features a method of streaming an archive file (such as a Java Archive file) from a server to a client device. The method includes extracting files from a Java Archive and streaming the extracted files from a server to a client device, receiving the streamed files and storing the received files for access by a Java application. The stored files may then be provided to a Java application
- Implementations may include one or more of the following features. The client device may be a resource-limited device that includes a Java Platform Micro Edition execution environment. The received streamed files can be stored at the client device in a Java Archive format. This may help to conserve resources at the client device. Streamed files can include both executable files (e.g., Java class files) and non-executable files (e.g., image files, sound files, and other data). The files can be streamed in accordance with predictive critiera (i.e., predetermined criteria predicting an order of utilization of the files at the client device.) Meta-information in the Java archive (i.e., the Java Archive manifest and signature files) can also be streamed to the client device and used to validate other ones of the streamed files. The validation may, in a simple case, be a confirmation of file name and path. In a more complex case, digital signature information may be checked.
- In general, extracting of the files occurs independent of a request by the Java application for the particular files. When the Java application does request the archive (or files in the archive), the Java execution environment at the client device will attempt to satisfy this request using the streamed files stored at the client device. If it is unable to do so, control data can be sent to the streaming server to obtain the required archive and/or required files. The control data may cause the streaming server to interrupt a file currently being streamed or to change the order of files being transmitted so that transmission of the requested file may begin.
- The invention may be applied to other program execution environments and archive formats to enable streaming of files stored within different archive types. The invention may also be applied to the streaming of non-executable data.
- In general, in another aspect, the invention includes methods and systems for streaming data modules between a first and a second computer. The modules may be streamed regardless of the existence of a “natural” order among the modules. For example, unlike streaming applications that rely on a natural linear ordering of data to determine the data stream contents, the disclosed streaming mechanism is not constrained to operate according to a linear data ordering. Instead, streamed data modules are selected using predetermined criteria that can be independent of the particular data content.
- In an exemplary application, the disclosed streaming mechanism can provide user-dependent streaming of software modules. For example, a home banking application may include
modules # 1 through #5. A first banking application user may, based on the user's input choices at a menu screen, access the modules in the order 1-3-4-5 while a second user may access the modules in the order 2-4-1. For such a banking application, the predetermined criteria used to determine a streaming sequence may detail each user's module usage pattern. Predetermined criteria associated with the application's users may indicate a preferred streaming sequence 1-3-4-5 when the first user is accessing the banking application but may indicate the preferred sequence 2-4-1 when the second user is accessing the application. The streamed sequence may therefore conform to a historical user-dependent access pattern. Other types of predetermined criteria may also be used. The disclosed streaming mechanism may also be use to stream non-executable data such as hypertext markup language data, binary graphics, and text. - In general, in one aspect, the invention features a computer-implemented method of transmitting modules from a first computer to a second computer. At the first computer, a module set is formed by selecting a sequence of modules from a collection of available modules. Each of the selected modules are associated with an application executing at the second computer. The selected modules may be transparently streamed from the first computer to the second computer. The selection of modules is made in accordance with predetermined selection criteria and is independent of the second computer's execution environment.
- Implementations of the invention may include one or more of the following features. A module may include non-executable data, such as hypertext markup language data, and/or program code. The selection criteria may be stored in a streaming control database. The streaming control database may include transition records associating weighted values with transitions between selected modules in the collection. Processing of transition record information, such as by using a path determination algorithm, may be used to determine the sequence of modules. The streaming control database may include list records each of which identifies a predetermined sequences of modules. Selection of modules may be made by selecting a list record. Selecting a sequence of modules may include sending data from the second computer to the first computer to identify each module in the sequence or to identify the status of the executing application. For example, data identifying the status may include a series of user input values.
- Implementations may also include one or more of the following features. Streaming of the module set may be interrupted, a second sequence determined, and streaming of the second sequence may occur. The streaming of the module set may be interrupted by a request for a particular module that is sent from the second computer to the first computer. For example, a Java Applet may interrupt a stream of Java Classes by attempting to access a Java Class that has not already been streamed to the second computer. A sequence of modules may be streamed and stored at the second computer independent of the executing application. That is, the executing application need not initiate streaming and need not be aware of the streaming process. Streamed modules may be subsequently integrated with the application at the second computer by interconnecting logic in a streamed module with logic in the application.
- Implementations may also include one or more of the following features. The application may include an interrupt statement. Execution of the interrupt statement may transfer control to an executor program. The executor program functions in the manner of a program code debugger by responding to the interrupt statement and preventing the permanent cessation (termination) of the executing application process. The executor program may thereafter integrate logic in a streamed module with the application's logic by replacing the interrupt statement (generally, as part of a block of replacement logic) with replacement logic from the streamed module. The application may thereafter continue executing, generally by executing replacement logic that has been substituted for the interrupt statement. The application may also include a stub procedure that can be replaced by logic in a streamed module. Replacement of the stub procedure may be direct, such as by removing the stub procedure code and replacing it with logic from a streamed module, or replacement may be operative, such as by creating a link to logic in a streamed module.
- In general, in another aspect, the invention features a computer program residing on a computer-readable medium. The computer program includes instructions for causing a computer to access a collection of modules associated with an application, to access a database storing module selection criteria, to form a module set by selecting a sequence of modules from the collection in accordance with the module selection criteria, and to transparently stream the module set to a second computer. Implementations of program may also include instructions for causing the computer to retrieve a first module from the collection and to send the first module to the second computer.
- In general, in another aspect, the invention features a computer program residing on a computer-readable medium. The program includes instructions for causing a computer to execute an application, to transparently receive a modules associated with the executing application, to store the received module independent of the executing application, and to integrate the received module with the executing application.
- In general, in another aspect, the invention features a system for transferring information modules between computers. The system includes a first computer and a second computer. The first computer includes means for executing an application, means for receiving a sequence of modules associated with the application while the application is executing, and means for integrating a first module in the received sequence with the application. The second computer includes means for storing a collection of modules associated with the application, means for selecting a sequence of modules from the collection, and means for transferring the selected sequences from the first computer to the second computer.
- Implementations may include one or more of the following advantages. Delays experienced when downloading an applications, a code module, or a data modules can be can be reduced. Software and data modules can be predictively delivered to a client workstation according to a particular end user's requirements. The order in which modules are streamed from a server to a client can be dynamically determined. A collection of module delivery sequences can be associated with a particular application or user and the sequences can be dynamically updated. Module delivery sequences can be determined based on individual software usage patterns or stored statistic associated with module usage. Module streaming can be interrupted and altered during the execution of an application. Implementations may include additional or alternative advantages as will become clear from the description and claims that follow.
- FIG. 1 illustrates a computer network.
- FIG. 2 illustrates computer software application modules.
- FIG. 3 is a directed graph, according to the invention.
- FIG. 4 illustrates a server and a client, according to the invention.
- FIGS.5A-5E illustrate application code components, according to the invention.
- FIG. 6 illustrates the structure of Java Archive file.
- Referring to FIG. 1, a
wide area network 100 is shown. In thenetwork 100, aclient computer 101 can communicate with aserver computer 102 by sending data overlinks data network 130. Thedata network 130 may include multiple nodes 131-134 that can route data between theclient 101 and theserver 102. Theclient computer 1 01 may transmit and receive data using the TCP/IP, HTTP, and other protocols. For example, theclient 101 may use the HTTP protocol to request web pages from theserver 102. - Web pages and multimedia data sent from the
server 102 to theclient 101 may have a natural linear sequence associated with them. The natural sequence of video data may be the linear order of video frames while the natural sequence of text may be the order in which pages of text are arranged in a document. Data having a natural linear sequence can be streamed from a server to a client to minimize download delays. In a streaming system, while earlier items in a liner sequence are being processed and/or displayed, subsequent items may be downloaded to the client computer. When processing and/or display of an item is complete, processing or display or a fully received “streamed” item may quickly begin. Since receipt of a streamed item is fully or partially complete when the item is requested, a user or client application requesting the streamed item will perceive a reduced downloading delay. For example, if the first page of a document is retrieved by a user, the second page can be downloaded while the first page is being read. If the user continues reading at the second page of the document, that page will then be available at the client, such as in a cache area on a hard disk drive, and can be read without additional downloading delay. - Software execution may not follow a predictable natural linear order. Software may include jump statements, break statements, procedure calls, and other programming constructs that cause abrupt transfers of execution among sections of executing code. The execution path that is traversed during the processing of interrelated code modules (such as code segments, code classes, applets, procedures, and code libraries), will often be non- linear, user dependent, may change with each execution of the application program, and may change depending on the state of various data items. Although a natural order may be lacking, an advantageous order may be determined in which to stream modules. The order may be determined using criteria that is independent of the computer's internal architecture or internal operating system (execution environment) considerations.
- Referring to FIG. 2, a
software application 200 may include multiple modules “A” through “H.” Modules “A” through “H” may be Java Classes, C++ procedure libraries, or other code modules that can be stored at a server. Some of the modules “A” through “H” may also be stored at the client computer, such as in a hard disk drive cache or as part of a software library stored at the client computer. When a client computer begins execution of theapplication 200, a first module, such as module “A,” may be downloaded from the server and its execution at theclient 410 may begin. As module “A” is being processed, the programming statements contained therein may branch to, for example, module “E.” If Module “E” is not already resident at the client, the execution of module “A” can be suspended, module “E” can be retrieved from the server, and then the execution of module “E” code may begin. In such a scenario, a user will experience a module download delay associated with retrieving module “E” from the server. - To minimize module download delays experienced by a user, module “E” may be transparently streamed from a server to the client computer. Transparent streaming allows future module use to be predicted and modules to be downloaded while other interrelated modules “A” are executing. Referring to FIG. 4, an
exemplary software architecture 400 providing transparent streaming is shown. Thesoftware architecture 400 includes aserver 401 having adatabase 403 of stored software modules. Theserver 401 can transparently transmit a stream ofsoftware modules 405 over a communications link to aclient computer 410. The communication link may be an analog modem connection, a digital subscriber line connection, a local area network connection, or any other type of data connection between theserver 401 andclient 410. As particular software modules are being executed at theclient 410, additional modules are sent from theserver 401 to theclient 410. In a dynamic streaming implementation, the order in which modules are streamed between the server and client may be altered based on theparticular client computer 410 being served, based on the user of the client computer, and based on other dynamically determined factors. - Referring to FIG. 3, the execution order of application modules “A” through “H” may resemble a directed
graph 300 rather than a linear sequence of modules. For example, as illustrated by thegraph 300, after module “A” is executed, execution can continue at module “B,” “D,” or “E.” After module “B” is executed, execution can continue at module “C” or “G.” The execution path may subsequently flow to additional modules and may return to earlier executed modules. - The
server 401 can usestreaming control information 402 to determine the order in which to stream modules from theserver 401 to theclient 410. Thestreaming control information 402 can include, for example, a predicted execution flow between software modules such as that represented by the directedgraph 300. As downloaded modules are executed by theclient 410, the client may sendcontrol data 415 to theserver 401 to dynamically update and alter the order in which modules are streamed from theserver 401 to theclient 410.Control data 415 may be used to request particular modules from theserver 401, to send data regarding the current execution state of the application program, to detail the current inventory of modules residing in the client'slocal storage 411, and to report user input selections, program execution statistics, and other data derived regarding theclient computer 410 and its executing software. - The sequence of modules sent in the
stream 405 from theserver 401 to theclient 410 can be determined using astreaming control file 402. Thestreaming control file 402 includes data used by the server to predict modules that will be needed at theclient 410. In a graph-based implementation, thecontrol file 402 may represent modules as nodes of a directed graph. Thecontrol file 402 may also represent possible execution transitions between the modules as vertices (“edges”) interconnecting the nodes. Referring to Table 1, in a weighted graph implementation, thestreaming control file 402 may include a list of vertices represent possible transitions between modules. For example, Table 1 list vertices representing all possible transitions between the modules “A” through “H” of graph 300 (FIG. 3). Each vertex in Table 1 includes a weight value indicating the relative likelihood that the particular transitions between modules will occur. In the example of Table 1, higher weight values indicate less likely transitions. Theserver 401 may apply a shortest-path graph traversal algorithm (also known as a “least cost” algorithm) to determine a desirable module streaming sequence based on the currently executing module. Example shortest-path algorithms may be found in Telecommunications Networks: Protocols, Modeling and Analysis, Mischa Schwartz, Addison Wesley, 1987, §6.TABLE 1 Graph Edge Table Edge Weight (A,B) 1 (A,D) 7 (A,E) 3 (B,C) 1 (B,G) 3 (C,E) 2 (C,G) 6 (D,F) 2 (E,H) 2 (F,H) 1 (G,E) 3 (G,H) 4 - For example, Table 2 represents the minimum path weight between module “A” and the remaining modules of Table 1.
TABLE 2 Shortest Paths from Application Module “A” Shortest Path From To Weight Path A B 1 A-B C 2 A-B-C D 7 A-D E 3 A-E F 9 A-D-F G 4 A-B-G H 5 A-E-H - Based on the weight values shown in Table 2, the
server 401 may determine that, during the execution of module “A”, the module streaming sequence “B,” “C,” “E,” “G,” “H,” “D,” “F” is advantageous. If a particular module in a determined sequence is already present at theclient 402, as may have been reported bycontrol data 415, theserver 401 may eliminate that module from the stream ofmodules 405. If, during the transmission of the sequence “B,” “C,” “E,” “G” “H,” “D,” “F,” execution of module “A” completes and execution of another module begins, the server may interrupt the delivery of the sequence “B,” “C,” “E,” “G,” “H,” “D,” “F,” calculate a new sequence based on the now executing module, and resume streaming based on the newly calculated streaming sequence. For example, if execution transitions to module “B” from module “A,”control data 415 may be sent from theclient 410 to theserver 401 indicating that module “B” is the currently executing module. If module “B” is not already available at theclient 410, theserver 401 will complete delivery of module “B” to the client and determine a new module streaming sequence. By applying a shortest-path routing algorithm to the edges of Table 1 based on module “B” as the starting point, the minimum path weights between module “B” and other modules of the graph 300 (FIG. 3) can be determined, as shown in Table 3.TABLE 3 Shortest Paths from Module “B” Shortest Path From To Weight Path B C 1 B-C E 5 B-C-E G 3 B-G H 7 B-C-E-H - Based on the shortest path weights shown in Table 3, the
server 401 may determine that module streaming sequence “C,” “G,” “E,” and “H” is advantageous. - Other algorithms may also be used to determine a module streaming sequence. For example, a
weighted graph 300 may be used wherein heavier weighted edges indicate a preferred path among modules represented in the graph. In Table 4, higher assigned weight values indicate preferred transitions between modules. For example, edges (A,B), (A,D), and (A,E) are three possible transitions from module A. Since edge (A,B) has a higher weight value then edges (A,D) and (A,E) it is favored and therefore, given module “A” as a starting point, streaming of module “B” before modules “D” or “E” may be preferred. Edge weight values can be, for example, a historical count of the number of times that aparticular module 5 was requested by a client, the relative transmission time of the code module, or a value empirically determined by a system administrator and stored in a table 402 at theserver 401. Other edge weight calculation methods may also be used.TABLE Preferred Path Table Edge Weight (A,B) 100 (A,D) 15 (A,E) 35 (B,C) 100 (B,G) 35 (C,E) 50 (C,G) 20 (D,F) 50 (E,H) 50 (F,H) 100 (G,E) 35 (G,H) 25 - In an preferred-path (heavy weighted edge first) implementation, edges in the
graph 300 having higher weight values are favored. The following exemplary algorithm may be used to determine a module streaming sequence in a preferred-path implementation: - 1: Create two empty ordered sets:
- i) A candidate set storing pairs (S,W) wherein “S” is a node identifier and “W” is a weight of an edge that may be traversed to reach node “S.”
- ii) A stream set to store a determined stream of code modules.
- 2: Let Si be the starting node.
- 3: Append the node S1 to the Stream Set and remove any pair (S1, W) from the candidate set.
- 4: For each node Sj that may be reached from node Si by an edge (Si,Sj) having weight Wj:
- {
- If Sj is not a member of the stream set then add the pair (Sj, Wj) to the candidate set.
- If Sj appears in more than one pair in the candidate set, remove all but the greatest-weight (Sj, W) pair from the candidate set.
- }
- 5: If the Candidate set is not empty Select the greatest weight pair (Sk, Wk) from the candidate set.
- Let Si=Sk
- Repeat at
step 3 - For example, as shown in Table 5, starting at node “A” and applying the foregoing algorithm to the edges of Table 4 produces the stream set {A, B, C, E, H, G, D, F}:
TABLE Calculation of Stream Set Iteration {Stream Set}/{Candidate Set} 1 {A}/{(B,100) (D,15) (E,35)} 2 {A, B}/{(D,15) (E,35) (C,100) (G,35)} 3 {A, B, C}/{(D,15) (E,35) (G,35)} 4 {A, B, C, E}/{(D,15) (G,35) (H,50)} 5 {A, B, C, E, H}/{(D,15) (G,35)} 6 {A, B, C, E, H, G}/{(D,15)} 7 {A, B, C, E, H, G, D}/{(F,50)} 8 {A, B, C, E, H, G, D, F}/{} - Implementations may select alternative algorithms to calculate stream sets.
- Application streaming may also be used to stream subsections of an application or module. For example, subsections of compiled applications, such as applications written in C, C++, Fortran, Pascal, or Assembly language may be streamed from a
server 401 to aclient 410. Referring to FIG. 5A, anapplication 500 may include multiple code modules such as amain code module 501 andcode libraries main module 501 contains program code that is executed when the application is started. Thecode libraries header data main module 501 and other library procedures. - In a Microsoft Windows95 / Microsoft Visual C++implementation, the
main code module 501 may contain a compiled C++ “main” procedure and thelibrary modules Header data libraries main module 501. Header data may also indicate the location of each procedure within the library. In a jump table implementation, a calling procedure may access library procedures 512-514, 517-519 by jumping to a predetermined location in theheader - Data and procedures within an application's code modules and libraries may be many hundreds or thousands of bytes long. Prior to executing an application, a client may need to retrieve a lengthy set of modules and libraries. By reducing the size of the module and library set, the initial delay experienced prior to application execution can be reduced. In a streaming implementation of
application 500, code within subsections of the application's code modules can be removed and replaced by shortened streaming “stub” procedures. The replacement of application code with streaming stub procedures may reduce module size and associated transmission delay. For example, referring to FIGS. 5A and 5B, thecode library 510 may include aheader 511 that is 4 kilobytes (Kbytes) in length and procedures 512-514 that are, respectively, 32 Kbytes, 16 Kbytes, and 8 Kbytes. Referring to FIGS. 5B and 5C, to reduce the size of thelibrary 510, procedures code 512-514 may be removed from thelibrary 510 and stored in a streamingcode module database 403 at the server 401 (FIG. 4). The removed procedure code 512-514 may be replaced by “stub” procedures 522-524 resulting in reduced-size code library 530 that can be linked withapplication modules library 510.Header data 511 oflibrary 530 can include updated jump or link information allowing stub procedures 522-524 to act as link-time substitutes for procedures 512-514. - A
server 401 may provide a streaming-enabled version ofapplication 500 to aclient 410 by sendingmain module 501,library module 515, “streamed”library 530, and, in some implementations, astreaming support file 535 to theclient 410 in response to a request for theapplication 500. Thestreaming support file 535 may include procedures accessed by the stubs 522-524 to facilitate code streaming between theserver 401 andclient 410. At theclient 410,modules main module 501 and various called procedures are executed at theclient 410, code modules stored in thedatabase 403 can be streamed from theserver 401 to theclient 410. Data may be included in thestream 403 to identify stub procedures 522-524 associated with the streamed code modules. As the streamed modules are received at the client, they are integrated with the executing application. - In an appended module implementation, streamed code modules are integrated with the executing application by appending received modules to their corresponding library or code file. For example, referring to FIGS. 5C and 5D, as modules512-514 are streamed from the server to the client, they are appended to the
library file 530 thereby forming anaugmented library file 540. As the modules 512-514 are streamed from theserver 401 and appended to thefile 530,header data 511 or stub data 522-524 is updated so that the now-appended modules are accessible from a calling procedure. For example, referring to FIG. 5D, an additional “jump” may be added between each stub procedure 522-524 and its associated appended module 512-514. Alternatively,header data 511 may be updated so that procedures 512-514 are accessible in place of stubs 522-524. In a stub-replacement implementation, stubs 522-524 are replaced by procedure modules 512-514 as the modules are received from theserver 401. Stub replacement may require altering or rearranging the location of the remaining stubs or procedures within a code module or library as replacement code is received. Implementations may employ still other methods of integrating streamed code with executing applications and modules. - In some scenarios, removed code, such as procedure code512-514 which, in the example given, was replaced by stubs 522-524, may be required (called by another procedure) before it is streamed from the
server 401 and integrated with themodule 530. In such a case, stub code 522-524 may access streaming functions in thestreaming support library 535 to obtain the required procedure. To do so, thestreaming support library 535 may sendcontrol data 415 to theserver 401 to request the needed procedure. In response, theserver 401 can halt thecurrent module stream 405 and send the requested module. Upon receipt of the requested module, procedures in thestreaming support library 535 may be used to integrate the received module with the application and to continue with the execution of the requested module. The server may thereafter determine a new module stream based on the requested module orother control data 415 that was received from the client. - Code modules may be reduced in size without the use of stub procedures. For example, referring again to FIGS. 4, 5A,5B, and 5E, in a interrupt driven implementation, procedure code 512-514 may be removed from a
code library 510 and stored in adatabase 403.Header information 511 as well as data indicating the size and location of removed procedure code 512-514 may then be transmitted to aclient 410. Theclient 410 may construct anew library 550 by appending a series of interrupt statements in place of the removed procedure code 512-514. When theapplication 500 is executed, thecode library 550 is substituted for thelibrary 510 and execution of theprogram 500 may begin. As theprogram 500 executes, the removed procedure code 512-514 can be streamed to theclient 410 and stored in alocal database 411. If theapplication 500 attempts to execute procedure code 512-514 it may instead execute one of the interrupt statement that have replaced procedure code 512-514. The execution of the interrupt statement halts the execution of theprogram 500 and transfers control to astreaming executor program 416. -
Executor 416 implements interface technology similar to that of a conventional run-time object code debugger thereby allowing theexecutor 416 to intercept and process the interrupt generated by theapplication 500. When the interrupt is intercepted by theexecutor 416, data provided to theexecutor 416 as part of the client execution platform (operating system) interrupt handling functionality can be used to identify themodule 550 in which the interrupt was executed and the address of the interrupt code within the module. Theexecutor 416 then determines whether procedure code 512-514 associated with the interrupt location has been received as part of themodule stream 405 sent to the client. If the appropriate procedure code has been received, theexecutor 515 replaces the identified interrupt with the its corresponding code. For example, procedures 512-514 may be segmented into 4 Kilobyte code modules that are streamed to theclient 410. When an interrupt statement is executed by theapplication 500, theexecutor 416 intercepts the interrupt, determines an appropriate 4 Kilobyte code block that includes the interrupt statement, and replaces the determined code block with a received code module. If the appropriate code module has not yet been received, an explicit request may be sent from theclient 410 to theserver 401 to retrieve the code module prior to its insertion in thelibrary 550. Theexecutor 416 may thereafter cause theapplication 500 to resume at the address of the encountered interrupt. - Implementations may also stream entire modules or libraries. For example,
main code module 501 may be received from theserver 401 and begin execution at theclient 410 whilecode libraries server 401 to theclient 410. Integration of streamed modules with executing modules may be provided byclient 410 dynamic module linking facilities. For example, delay import loading provided by Microsoft Visual C++ 6.0 may be used to integrate streamedmodules modules 501. Dynamic linking of streamed modules may be facilitated by storing the streamed modules on a local hard disk drive or other storage location accessible byclient 410 link loading facilities. In an exemplary implementation, streaming is facilitated by alteringclient 410 operating system link facilities such that the link facility can sendcontrol data 415 to theserver 401 to request a particular module if the module is has not already been streamed to theclient 401. - In a protected-memory computer system, direct manipulation of executing application code and data may be restricted. In such systems, a “kernel” level processes or procedure may be required to support integration of streamed modules with executing application. In such a case, streaming
support 535 may be pre-provisioned by installing support procedures at theclient 410 prior to the client's request for theapplication 500. - Archive file such as CAB, tar, BINHEX, and ZIP files, including ZIP formatted Java Archive (JAR) files, can be streamed by extracting modules of data from the archive files and streaming those modules to a client terminal. In the following text, streaming of a Java Archive is detailed. The disclosed techniques may be applied to the streaming of other archive formats as well.
- Java classes, as well as images, sounds, and other data files, can be aggregated together in a Java Archive files (a “JAR file”). A JAR file is a data archive using the ZIP archive format to aggregate a collection of logically separate data files.. The files in a JAR file can include Java class files, video, sound, and other data files, as well as meta-information files (the contents of which are define by Sun Microsystems Inc.'s JAR standard).
- FIG. 6 shows the format of an
example JAR file 600. The content of elements 611-616, 621-626, 641-647 of thefile 600 is are fields defined by the ZIP specification (this specification is available from PKWARE, Inc.) These elements 611-616, 621-626, 641-647 organize and support the archiving and compression of files 601-606 stored in thearchive 600. Elements 611-616 of thearchive 600 are known as local file headers. Each local file header precedes a file stored in thearchive 600. Local file headers specify, among other things, the name and relative path of the associated file, the last time/date the file was modified, and the compressed and uncompressed size of the file. The contents of each local file header is repeated (together with additional information) in acentral directory 640 located at the end of the ZIP archive. For each local file header 611-616 in the archive, thecentral directory 640 includes a corresponding central directory headers 641-646. According to the ZIP format specification, each file 601-606 in the archive may also include an optional data descriptor 621-626; though these data descriptors are typically not present in JAR files. - A ZIP file's
central directory 640 includes an ‘end of central directory’ record 647. The record 647 includes, among other things, the total number of entries in the central directory (i.e., the total number of files in the archive), the size of the central directory, the number of the disk containing the central directory, and the offset of the start of the central directory with respect to the start of an archive segment containing the central directory 640 (a ZIP archive may be split among multiple segments, e.g., multiple floppy disk of files). - The size of a
ZIP archive 600 can be obtained in a number of different ways. One method is to add the compressed sizes of the files 601-606 (obtained from the compressed file size information in either the local file header or central directory header), together with the sizes of the headers 611-616, 621-626, 641-647. A second method (usable if the ZIP archive is contained within one file or disk, as is the case with JAR files), determines the size of the ZIP archive from information in the end of central directory record 647. In particular, the value in a ‘size of the central directory’ field of the record 647 is added to the value of the ‘offset of start of central directory with respect to the starting disk number’ field in the record 647. - Files601-606 are the files being archived using the ZIP compression technique and format. Files 601-606 include files used by an executing application 603-606 as well as meta-information files 601-602 containing information about one or more of the other files 603-606. The meta-information includes a “manifest”
file 601. Conventionally, this manifest file is named “MANIFEST.MF” and is logically associated with the storage path “META-INF” (i.e., the file has a relative path/name “META-INF/MANIFEST.MF”). Themanifest file 601 includes, among other things, a JAR format version number and the names of the files 603-606 that are in theJAR 600. A manifest file also may includes optional “digest” data for one or more of the files 603-606. Digest data is generated by processing a file (e.g., file 603) with a cryptography algorithm (typically, the MD5 or SHA algorithm). The digest data is stored in the manifest file and serves as a digital signature that can be used to validate the file 603 (i.e., to ensure that the file has not been modified or corrupted). In addition to file validation, the digest information, along with separately storedsignature information 602, can be used to identify a file's signer. Signature files are another form of meta-information that can be stored in a JAR. Java Archives are more fully described in, e.g., the text Java in a Nutshell, by David Flanagan, O'Reilly, 1997. In resource limited devices, such as J2ME/CLDC/MIDP devices, simplified meta-information, excluding signature files 602, is used. - Conventionally, a
JAR file 600 is transmitted as a single file from aserver 401 to aclient device 410. However, the streamingserver 401 may stream thefile 600 as a series of separate modules by extracting the ZIPcentral directory 640, as well as the individual files and their associated headers 631-636, and streaming each of these elements 631-636, 640 separately. Typically, thecentral directory information 640 will be streamed first, followed by the meta-information 631-632 (if present), and then the remaining modules 633-636. In some implementations, the modules 631-636 or a subset, e.g., modules 633-636, will be ordered by a predictive algorithm, however such ordering is not required in all implementations. Predictive ordering may be applied to a subset 633-636 of the modules and a fixed ordering to other modules 631-632, 640. - Referring back to FIG. 4, to stream a
JAR file 600, theserver 401 extracts the contents of the JAR file as a set of streamable modules 631-636, 640 (other divisions and combinations of thefile 600 can be used; for example, each element 601-606, 611-616, 621-626, 641-647 may be a separate module). To extract the modules 631-636, 640, their size and location is determined based on the offset of the module within thefile 600, the compressed size of the files 601-606, the size each local header 611-616 and the size of each data descriptor 621-626 (if present). This size and offset information can be determined from the central directory file headers 641-647. The extracted modules 631-636, 640 are then ordered for streaming to theclient 410. - The receiving
device 410 includes astreaming executor 416 that controls the receipt of the streamed modules 631-636, 640 and the storage of those modules in storage 411 (which may be, e.g., solid state memory such as RAM or EEPROM, or magnetic memory such as a hard disk). The stored modules may then be accessed by a Java application or applet. Thecomponent 416 can incrementally rebuild a JAR file at the receivingdevice 410 to store the received modules. For example, a cell phone, PDA, or other device supporting the Java Connected Limited Device Configuration (CLDC) on theJava 2 Micro Edition (J2ME) architecture, may store the received modules in an incrementally rebuilt JAR file inmemory 411. Storing the received modules in a JAR file can provide for more efficient use of limited memory resources. - To reconstruct the
JAR file 600, the receivingdevice 410 may pre-allocate space for thefile 600. The size of the archive can be determined from the end of central directory record 647. To enable space allocation for thefile 600, streaming of the modules 631-636, 640 may begin with streaming of the central directory module 640 (or, at least, of the end of central directory record 647). Upon receipt of the record 647, the client device can process the size and offset information in the record 647 to determine the total size of theJAR archive 600. The client may then allocate space for theJAR archive 600. Alternatively,control data 415 can be sent to theclient 410 identifying the JAR archive to be streamed and the size of the archive. - After allocating space for the JAR archive, the client places the
module 640 in the allocated space at the proper offset within that space (as indicated by the offset information in the record 647). The remaining modules 631-636 may then be streamed from theserver 401 to theclient 410. In some implementations, streaming of the modules 631-636 may be in accordance with a predictive algorithm. As the modules 631-636 are received at theclient 410 from theserver 401, they can be consecutively placed in the space allocated for the JAR file. In some cases, this may result in a different ordering of the modules 631-636 in the reconstructed JAR file than the ordering of the modules in the original JAR file. For example, ifmodule 636 is streamed before modules 631-635, thenmodule 636 will be located at the beginning of the reconstructed JAR archive and the remaining modules 631-635 thereafter. If such a consecutive placement of received modules in the reconstructed JAR file is used, resulting in a different order of modules 631-636 in the reconstructed file than in the original file, then the ‘relative offset of local header data’ contained in the module's corresponding central directory header 641-646 will need to be adjusted to reflect the new placement of each module. Alternatively, the ‘relative offset of local header data’ can be used to position modules 631-636 in their original position regardless of the streaming order of the modules 631-636. - Java programs executing at the client may begin using a module633-636 following the receipt of that module; that is, the client does not need to receive all of the modules 631-636, 640 before received modules can be used. Instead, data in the fully or partially reconstructed JAR file may be extracted and de-compressed as needed using decompression and file management functionality present at the receiving device.
- The client device's file extraction code may be modified to generate an exception if a module requested by an executing application is missing from the archive. Thus, if the Java
application request file 616 from thearchive 600, and that file has not yet been received and placed in the client's reconstructed archive, the extraction software can generate an exception. In response to this exception (which may be implemented as a procedure call toexecutor 416 routines), theexecutor 416 sendscontrol data 415 to theserver 401 identifying the requested module or file (i.e.,module 636 or file 606). Theserver 401 may then change the streaming order of modules so that the requested module is streamed next. In some cases, a currently streaming module may be interrupted to allow immediate transmission of the requested module. This may result in discarding of the partially received module at the client. Alternatively, the requested module may be sent after any partially streamed modules. Interruption of a partially streamed module may be determined based on a weighing algorithm (e.g., finish if greater than 50% already transmitted, discard otherwise). - Java implementations may require the presence of the
manifest file 601 at the client before any of the files 603-606 can be used. In such implementations, it is desirable to stream themanifest file 601 before the files 603-606. Similarly, signature files 602, if used, should be streamed prior to, or immediately following, the respective signedfile 603. Streaming of themanifest file 601 and othermeta information 602 in this manner permits checking and validation of the manifest information as well as the processing of digital signature information as the files 603-606 are received. - In some implementations, redundant information in an archive file may be omitted prior to streaming. For example, the local file header data611-616 is repeated in the central directory headers 641-646; consequently, the local file header data 611-616 may be discarded from the streamed modules (resulting in a smaller module), and can be reconstructed at the client using the data in the central directory headers 641-646.
- For some data types, improved compression may be obtained using type-specific compression algorithms (rather than standard ZIP compression algorithms). Prior to streaming a module, the module may be decompressed and re-compressed into a new compression format. In such cases, additional software functionality (i.e., additional decompression algorithms and ZIP compression) may be implemented at the receiving device for the reconstruction of the JAR file.
- If the receiving
device 410 is not resource constrained, then the streamed files also may be stored at the receiving device in a de-archived format. For example, each received file may be stored as a separate files on a hard disk 411 (or other type of memory 411). Path information in the local or central directory file headers 611-616, 641-646, or sent incontrol data 415, can be used to define a hierarchical storage of the streamed files at the receiving device. - In some cases, an extracted file may be further subdivided before streaming. For example, file601 may be a class file containing several Java classes. Individual classes may be extracted from the
file 601 and streamed as separate modules. This extraction of classes from within afile 601 is an implementation of the technique discussed with respect to FIGS. 5A-5E. - Other methods of determining stream sets may be used. In a list-based implementation, the streaming control file may include predetermined list of module streaming sequences. For example, the
streaming control file 402 may include a module streaming sequence list associated with a first user and a second module streaming sequence list associated with a second user.Control data 415 sent from theclient 410 to theserver 401 may identify the current user at theclient 410. Once the user has been identified to the server, the server may stream software modules in accordance with the user's associated streaming sequence list. User-based streaming data may be advantageous where a user's past behavior can be used to anticipate the order of modules to be accessed by that user. - In graph-based streaming control file implementations, the weight of edges connecting nodes may be determined statically or dynamically and may be determined based on a collection of historical usage data. For example, in a programmer-controlled implementation, a software programmer estimate the likelihood that particular transitions between nodes will occur based on the programmer's knowledge of the software code and the expected application usage patterns. Alternatively, application profiling programs may be used to gather run-time execution data recording transitions between various applets, Classes or code modules and thereby determine the likelihood that particular transitions will occur. In a client-feedback implementation,
control data 415 sent from theclient 410 to theserver 401 during module execution is used to build a statistical database of module usage and, based on that database, determine the module streaming order. - In a client-controlled streaming implementation, streaming
control data 402 may be located at theclient 410 andcontrol data 415 sent from theclient 410 to theserver 401 may be used to sequentially request a stream of modules from the server. For example, while theclient computer 410 is executing a first module, a background process may sendcontrol data 415 to a server to request additional modules that can be buffered on ahard disk 411 at theclient computer 410. A client-controlled streaming implementation may used existing HTTP servers and HTTP protocols to send request from theclient 410 to theserver 401 and send software modules from theserver 401 to theclient 410. Furthermore, although streaming of software modules has been emphasized in the foregoing description, non-executable data, such as hypertext markup language, binary graphic files, and text, may be streamed as a collection of modules. - Implementations may include a “handshaking” procedure whereby, at the start of application execution,
control data 415 is sent between theserver 401 and theclient 410. The handshaking data may include an inventory of application modules residing at the client and at the server. Such handshaking data allows both theclient 410 andserver 401 to determine their respective software module inventory and to optimize the stream of software modules based on that inventory information. - In a history-dependent implementation, a server or client can store data about a series of transitions between modules and calculate a new module stream based on a history of transitions. For example, referring to FIG. 3, if the module “G” was reached by the path A-B-G, then a server or client may determine that module “E” followed by “H” is to be streamed. On the other hand, if the module “G” was reached by the path A-B-C-G then the streaming sequence may include only the module “H.”
- The invention may be implemented in computer hardware, firmware, software, digital electronic circuitry or in combinations of them. Apparatus of the invention may be implemented in a computer program product tangibly embodied in a machine-readable storage device for execution by a programmable processor; and method steps of the invention may be performed by a programmable processor executing a program of instructions to perform functions of the invention by operating on input data and generating output.
- The invention may advantageously be implemented in one or more computer programs that are executable on a programmable system including at least one programmable processor coupled to receive data and instructions from, and to transmit data and instructions to, a data storage system, at least one input device, and at least one output device. Each computer program may be implemented in a high-level procedural or object-oriented programming language, or in assembly or machine language if desired; and in any case, the language may be a compiled or interpreted language. Suitable processors include, by way of example, both general and special purpose microprocessors. Generally, a processor will receive instructions and data from a read-only memory and/or a random access memory.
- Storage devices suitable for tangibly embodying computer program instructions and data include all forms of non-volatile memory, including by way of example semiconductor memory devices, such as EPROM, EEPROM, and flash memory devices; magnetic disks such as internal hard disks and removable disks; magneto-optical disks; and CD-ROM disks. Any of the foregoing may be supplemented by, or incorporated in, specially-designed ASICs (application-specific integrated circuits).
Claims (27)
1. A method of streaming an archive file from a server to a client device, the method comprising:
at a server, extracting ones of a plurality of modules from a first archive file;
streaming the extracted modules from the server to the client device;
receiving the streamed modules at the client device;
automatically constructing a second archive file at the client device, the second archive file comprising the received modules; and
providing data from at least one of the received modules in the second archive to an executing application.
2. The method of claim 1 wherein:
the first archive file is a Java Archive file;
a first one of the streamed modules comprises a ZIP file end-of-central-directory record; and
the method further comprises allocating storage space at the client device for the second archive based on size information in the end-of-central-directory record.
3. The method of claim 2 wherein the client device comprises a Java Micro Edition execution environment.
4. The method of claim 1 wherein streaming comprises streaming in accordance with predetermined criteria predicting an order of utilization of modules at the client device.
5. The method of claim 1 wherein:
the first archive file comprises a Java Archive file;
a first one of the streamed modules comprises a Java class file;
the executing application comprises a Java application; and
providing data from at least one of the stored file to the executing application comprises dynamically loading the Java class file for access by the Java application.
6. The method of claim 5 wherein:
at least one of the modules in the Java Archive file comprises Java Archive meta-information comprising an identification of files in other ones of the modules; and
the method further comprises streaming the meta-information from the server to the client device and validating a file in a received modules using the meta-information.
7. The method of claim 6 wherein validating comprises comparing a file name and path associated with a file received in a streamed module to a file name and path specified in the meta-information.
8. The method of claim 6 wherein the meta-information comprises a first digital signature and the method further comprises:
computing a second digital signature based on data in a first one of the received modules; and
comparing the second digital signature to the first digital signature to determine validity of a file received in a streamed module.
9. The method of claim 1 wherein the method further comprises:
at the client device, processing a request from the executing application to access a file in a first one of the modules; and
determining if the first module is present in the second archive;
sending streaming control data to the server to request the first module when the first module is not present in the second archive, and
streaming the first module from the server to the client device in response to receipt of said streaming control data at the server.
10. The method of claim 9 wherein streaming the first module in response to the receipt of said streaming control data comprises interrupting streaming of another one of the modules.
11. A computer-implemented method of transmitting data in an archive file from a server device to a client device, the client device comprising an execution environment configured to provide ones of a collection of logically separate files in a received archive file to an executing application in an execution-time determined order, the method comprising:
at the server device, extracting ones of a collection of logically separate files from a first archive file; and
streaming the extracted ones of the separate files from the server device to the client device.
12. The method of claim 11 further comprising:
receiving the streamed files at the client device; and
constructing a second archive files at the client device from the received files.
13. The method of claim 12 wherein the second archive file comprises a different arrangement of the streamed files than in the first file, said different arrangement being functionally equivalent to an arrangement of files in the first archive file.
14. The method of claim 11 wherein the first archive comprises at least one file comprising non-executable data and at least one file comprising executable program code.
15. The method of claim 11 further comprising
at the first computer, ordering the separate files extracted from the archive file based on criteria predicting an order of utilization of the separate files at the second computing device; and
streaming the separate files from the first computer to the second computer in accordance with the ordering.
16. The method of claim 15 wherein:
the criteria comprises data stored at the first computer in a streaming control database; and
the method further comprises:
receiving a request at the first computer from the second computer; and
modifying the predictive data stored in the streaming control database based on the request.
17. The method of claim 15 wherein:
the criteria comprise data stored at the first computer in a streaming control database comprising transition records associating weighted values with execution transitions between selected files in the collection; and
ordering the separate files comprises ordering based on transition record values.
18. The method of claim 17 wherein ordering based on transition record values comprises processing transition record information using a path determination algorithm.
19. The method of claim 11 wherein streaming comprises:
receiving a first module in the module set while an application is executing;
storing the first module on local storage media at the second computer; and wherein the method further comprises integrating the first module with the executing application.
20. A data storage apparatus comprising instructions to configure a computerized device to:
receive archive structure data from another computer, the archive structure data specifying a structure of a first archive file;
receive from the other computer ones of the plurality of modules derived from the first archive file;
in accordance with the archive structure data, construct a second archive file from the received ones of the plurality of modules to produce a second archive file functionally equivalent to the first archive file.
21. The data storage apparatus of claim 20 wherein:
the first archive file is a Java Archive file;
the archive structure data comprises a ZIP file central directory record; and
the instructions to construct the second archive file comprise instructions to position the received central directory record in the second archive in accordance with ZIP file format specifications.
22. The data storage apparatus of claim 21 wherein the instructions to construct in accordance with ZIP file format specifications further comprise instructions to position received ones of the modules in the second archive in an order of receipt of the modules and instructions to alter data in the second archive's central directory header to indicate the placement of the ones of the modules in the second archive.
23. The data storage apparatus of claim 20 wherein the instructions further comprise instructions to:
process a request from an executing application to access data in a first one of the modules;
determine if the first module is present in the second archive;
send control data to the other computer to request the first module when the first module is not present in the second archive.
24. A data storage apparatus comprising instructions to configure a computer to:
automatically extract a collection of logically separate modules from a first archive file; and
stream the extracted modules to a client device.
25. The data storage apparatus of claim 24 further comprising instructions to order the extracted modules based on criteria predicting an order of utilization of the modules at the client device and wherein the instructions to stream comprise instructions to stream in accordance with the ordering of the modules.
26. The method of claim 25 wherein:
the instructions to order the extracted modules comprise instructions to order in accordance with criteria retrieved from a streaming control database; and
the instructions further comprise instructions to:
modify the criteria stored in the streaming control database based on a module request received from the second computer.
27. A system for transferring information modules between computers, the system comprising:
1) a first computer, the first computer comprising:
a. means for executing an application,
b. means for receiving a sequence of modules associated with the application and constructing an archive file comprising the received sequence of modules while the application is executing, and
c. means for integrating a first module in the constructed archive file with the application; and
2) a second computer, the second computer comprising:
a. means for extracting a collection of modules associated with the application from an archive file, and
b. means for transferring the selected sequences from the second computer to the first computer.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/751,190 US20020042833A1 (en) | 1998-07-22 | 2000-12-29 | Streaming of archive files |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/120,575 US6311221B1 (en) | 1998-07-22 | 1998-07-22 | Streaming modules |
US09/751,190 US20020042833A1 (en) | 1998-07-22 | 2000-12-29 | Streaming of archive files |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US09/120,575 Continuation-In-Part US6311221B1 (en) | 1998-07-22 | 1998-07-22 | Streaming modules |
Publications (1)
Publication Number | Publication Date |
---|---|
US20020042833A1 true US20020042833A1 (en) | 2002-04-11 |
Family
ID=22391192
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US09/120,575 Expired - Lifetime US6311221B1 (en) | 1998-07-22 | 1998-07-22 | Streaming modules |
US09/751,190 Abandoned US20020042833A1 (en) | 1998-07-22 | 2000-12-29 | Streaming of archive files |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US09/120,575 Expired - Lifetime US6311221B1 (en) | 1998-07-22 | 1998-07-22 | Streaming modules |
Country Status (7)
Country | Link |
---|---|
US (2) | US6311221B1 (en) |
EP (1) | EP1097416A4 (en) |
JP (1) | JP4607320B2 (en) |
AU (1) | AU5104699A (en) |
CA (1) | CA2361342A1 (en) |
IL (1) | IL141015A0 (en) |
WO (1) | WO2000005637A2 (en) |
Cited By (91)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020083183A1 (en) * | 2000-11-06 | 2002-06-27 | Sanjay Pujare | Conventionally coded application conversion system for streamed delivery and execution |
US20020087717A1 (en) * | 2000-09-26 | 2002-07-04 | Itzik Artzi | Network streaming of multi-application program code |
US20020091763A1 (en) * | 2000-11-06 | 2002-07-11 | Shah Lacky Vasant | Client-side performance optimization system for streamed applications |
US20030009538A1 (en) * | 2000-11-06 | 2003-01-09 | Shah Lacky Vasant | Network caching system for streamed applications |
US20030056112A1 (en) * | 1997-06-16 | 2003-03-20 | Jeffrey Vinson | Method and apparatus to allow remotely located computer programs and/or data to be accessed on a local computer in a secure, time-limited manner, with persistent caching |
US20040122872A1 (en) * | 2002-12-20 | 2004-06-24 | Pandya Yogendra C. | System and method for electronic archival and retrieval of data |
US20040181557A1 (en) * | 2001-07-26 | 2004-09-16 | Microsoft Corporation | System and method for reliably replicating data |
US20040237033A1 (en) * | 2003-05-19 | 2004-11-25 | Woolf Susan D. | Shared electronic ink annotation method and system |
US20040267754A1 (en) * | 2003-06-27 | 2004-12-30 | Nec Corporation | Access to shared disk device on storage area network |
US20050091517A1 (en) * | 2003-07-16 | 2005-04-28 | Pkware, Inc. | Method and system for mixed symmetric and asymmetric encryption of .ZIP files |
US6918113B2 (en) | 2000-11-06 | 2005-07-12 | Endeavors Technology, Inc. | Client installation and execution system for streamed applications |
US20050193382A1 (en) * | 2003-09-17 | 2005-09-01 | Goring Bryan R. | System and method for dynamic version management of applications |
US20050251495A1 (en) * | 2004-05-06 | 2005-11-10 | Bea Systems, Inc. | System and method for unified file management |
US20060031529A1 (en) * | 2004-06-03 | 2006-02-09 | Keith Robert O Jr | Virtual application manager |
US20060047946A1 (en) * | 2004-07-09 | 2006-03-02 | Keith Robert O Jr | Distributed operating system management |
US20060047716A1 (en) * | 2004-06-03 | 2006-03-02 | Keith Robert O Jr | Transaction based virtual file system optimized for high-latency network connections |
US20060048136A1 (en) * | 2004-08-25 | 2006-03-02 | Vries Jeff D | Interception-based resource detection system |
US20060070030A1 (en) * | 2004-09-30 | 2006-03-30 | Laborczfalvi Lee G | Method and apparatus for providing an aggregate view of enumerated system resources from various isolation layers |
US20060070029A1 (en) * | 2004-09-30 | 2006-03-30 | Citrix Systems, Inc. | Method and apparatus for providing file-type associations to multiple applications |
US20060075381A1 (en) * | 2004-09-30 | 2006-04-06 | Citrix Systems, Inc. | Method and apparatus for isolating execution of software applications |
US20060074989A1 (en) * | 2004-09-30 | 2006-04-06 | Laborczfalvi Lee G | Method and apparatus for virtualizing object names |
US20060090171A1 (en) * | 2004-09-30 | 2006-04-27 | Citrix Systems, Inc. | Method and apparatus for virtualizing window information |
US20060106770A1 (en) * | 2004-10-22 | 2006-05-18 | Vries Jeffrey D | System and method for predictive streaming |
US20060123185A1 (en) * | 2004-11-13 | 2006-06-08 | De Vries Jeffrey | Streaming from a media device |
US7062567B2 (en) | 2000-11-06 | 2006-06-13 | Endeavors Technology, Inc. | Intelligent network streaming and execution system for conventionally coded applications |
US20060143250A1 (en) * | 2000-03-09 | 2006-06-29 | Pkware, Inc. | System and method for manipulating and managing computer archive files |
US20060143252A1 (en) * | 2000-03-09 | 2006-06-29 | Pkware, Inc. | System and method for manipulating and managing computer archive files |
US20060143691A1 (en) * | 2000-03-09 | 2006-06-29 | Pkware, Inc. | System and method for manipulating and managing computer archive files |
US20060143714A1 (en) * | 2000-03-09 | 2006-06-29 | Pkware, Inc. | System and method for manipulating and managing computer archive files |
US20060143253A1 (en) * | 2000-03-09 | 2006-06-29 | Pkware, Inc. | System and method for manipulating and managing computer archive files |
EP1678606A2 (en) * | 2003-09-17 | 2006-07-12 | Research In Motion Limited | System and method for management of mutating applications |
US20060155788A1 (en) * | 2000-03-09 | 2006-07-13 | Pkware, Inc. | System and method for manipulating and managing computer archive files |
US20060155731A1 (en) * | 2000-03-09 | 2006-07-13 | Pkware, Inc. | System and method for manipulating and managing computer archive files |
US20060168119A1 (en) * | 1999-11-24 | 2006-07-27 | Kabushiki Kaisha Sega | Information processor, file server, accounting control system, accounting control method, and recording medium recording a program therefor |
US20060173848A1 (en) * | 2000-03-09 | 2006-08-03 | Pkware, Inc. | System and method for manipulating and managing computer archive files |
US20060218165A1 (en) * | 2005-03-23 | 2006-09-28 | Vries Jeffrey De | Explicit overlay integration rules |
US20060224544A1 (en) * | 2005-03-04 | 2006-10-05 | Keith Robert O Jr | Pre-install compliance system |
US20060224545A1 (en) * | 2005-03-04 | 2006-10-05 | Keith Robert O Jr | Computer hardware and software diagnostic and report system |
US20060230175A1 (en) * | 2005-03-23 | 2006-10-12 | De Vries Jeffrey | System and method for tracking changes to files in streaming applications |
US20070043777A1 (en) * | 2000-03-09 | 2007-02-22 | Yuri Basin | Systems and methods for manipulating and managing computer archive files |
US20070067321A1 (en) * | 2005-09-19 | 2007-03-22 | Bissett Nicholas A | Method and system for locating and accessing resources |
US7197570B2 (en) | 1998-07-22 | 2007-03-27 | Appstream Inc. | System and method to send predicted application streamlets to a client device |
US20070083501A1 (en) * | 2005-10-07 | 2007-04-12 | Pedersen Bradley J | Method and system for accessing a remote file in a directory structure associated with an application program executing locally |
US20070083620A1 (en) * | 2005-10-07 | 2007-04-12 | Pedersen Bradley J | Methods for selecting between a predetermined number of execution methods for an application program |
US20070083610A1 (en) * | 2005-10-07 | 2007-04-12 | Treder Terry N | Method and a system for accessing a plurality of files comprising an application program |
US20070083522A1 (en) * | 2005-10-07 | 2007-04-12 | Nord Joseph H | Method and a system for responding locally to requests for file metadata associated with files stored remotely |
US7283991B1 (en) * | 1999-03-11 | 2007-10-16 | Microsoft Corporation | Caching system for path search optimization |
US20070254742A1 (en) * | 2005-06-06 | 2007-11-01 | Digital Interactive Streams, Inc. | Gaming on demand system and methodology |
US20070274315A1 (en) * | 2006-05-24 | 2007-11-29 | Keith Robert O | System for and method of securing a network utilizing credentials |
US20080046804A1 (en) * | 2006-08-18 | 2008-02-21 | International Business Machines Corporation | Change-oriented spreadsheet application |
US20080109876A1 (en) * | 2006-10-23 | 2008-05-08 | Endeavors Technologies, Inc. | Rule-based application access management |
US20080109498A1 (en) * | 2006-11-08 | 2008-05-08 | Pramod Achyut Bhandiwad | Method to efficiently use the disk space while unarchiving |
GB2446832A (en) * | 2007-02-23 | 2008-08-27 | Quantel Ltd | A file server system |
US20090106780A1 (en) * | 2007-10-20 | 2009-04-23 | Nord Joseph | Method and system for communicating between isolation environments |
US20090119644A1 (en) * | 2007-11-07 | 2009-05-07 | Endeavors Technologies, Inc. | Deriving component statistics for a stream enabled application |
US20090119458A1 (en) * | 2007-11-07 | 2009-05-07 | Endeavors Technologies, Inc. | Opportunistic block transmission with time constraints |
US20090172160A1 (en) * | 2008-01-02 | 2009-07-02 | Sepago Gmbh | Loading of server-stored user profile data |
EP2104039A1 (en) | 2008-03-21 | 2009-09-23 | Symantec Corporation | Archive stream based install |
US7735057B2 (en) | 2003-05-16 | 2010-06-08 | Symantec Corporation | Method and apparatus for packaging and streaming installation software |
US20100185690A1 (en) * | 2009-01-20 | 2010-07-22 | Autodesk, Inc. | Dynamic manipulation of archive files |
US20100268842A1 (en) * | 2007-12-18 | 2010-10-21 | Electronics And Telecommunications Research Institute | System and method for providing streaming-based portable application |
US20100281102A1 (en) * | 2009-05-02 | 2010-11-04 | Chinta Madhav | Methods and systems for launching applications into existing isolation environments |
US7844579B2 (en) | 2000-03-09 | 2010-11-30 | Pkware, Inc. | System and method for manipulating and managing computer archive files |
US7882342B1 (en) | 2008-03-31 | 2011-02-01 | Symantec Corporation | Systems and methods for imaging a computer system |
US8060479B1 (en) | 2008-03-28 | 2011-11-15 | Symantec Corporation | Systems and methods for transparently restoring data using file streaming |
US8234238B2 (en) | 2005-03-04 | 2012-07-31 | Maxsp Corporation | Computer hardware and software diagnostic and report system |
US20120233228A1 (en) * | 2011-03-08 | 2012-09-13 | Rackspace Us, Inc. | Appending to files via server-side chunking and manifest manipulation |
US20120278902A1 (en) * | 2011-04-27 | 2012-11-01 | Cambridge Semantics, Inc. | Incremental deployment of computer software program logic |
US8422833B2 (en) | 2007-10-26 | 2013-04-16 | Maxsp Corporation | Method of and system for enhanced data storage |
US8589323B2 (en) | 2005-03-04 | 2013-11-19 | Maxsp Corporation | Computer hardware and software diagnostic and report system incorporating an expert system and agents |
US20140119428A1 (en) * | 2012-10-26 | 2014-05-01 | Cisco Technology, Inc. | System and method for providing intelligent chunk duration |
US20140201316A1 (en) * | 2013-01-17 | 2014-07-17 | Apple Inc. | Streaming zip |
US8831995B2 (en) | 2000-11-06 | 2014-09-09 | Numecent Holdings, Inc. | Optimized server for streamed applications |
US8898319B2 (en) | 2006-05-24 | 2014-11-25 | Maxsp Corporation | Applications and services as a bundle |
US8959582B2 (en) | 2000-03-09 | 2015-02-17 | Pkware, Inc. | System and method for manipulating and managing computer archive files |
US20150088965A1 (en) * | 2013-09-26 | 2015-03-26 | Christoph Pakulski | Systems and methods for selective retrieval of adaptive bitrate streaming media |
US20150154169A1 (en) * | 2007-08-03 | 2015-06-04 | Dietmar Theobald | Annotation processing of computer files |
US20150278374A1 (en) * | 2012-10-11 | 2015-10-01 | Thomson Licensing | Solution for distributed application life-cycle management |
US9357031B2 (en) | 2004-06-03 | 2016-05-31 | Microsoft Technology Licensing, Llc | Applications as a service |
US9402114B2 (en) | 2012-07-18 | 2016-07-26 | Cisco Technology, Inc. | System and method for providing randomization in adaptive bitrate streaming environments |
US9448858B2 (en) | 2007-10-26 | 2016-09-20 | Microsoft Technology Licensing, Llc | Environment manager |
US20170060565A1 (en) * | 2015-08-20 | 2017-03-02 | Appdome Ltd. | Method for creating a revised application by adding code functionality to an existing application executable |
US9645900B2 (en) | 2006-12-21 | 2017-05-09 | Microsoft Technology Licensing, Llc | Warm standby appliance |
US20190005062A1 (en) * | 2013-02-01 | 2019-01-03 | Google Llc | Accessing objects in hosted storage |
US10372796B2 (en) | 2002-09-10 | 2019-08-06 | Sqgo Innovations, Llc | Methods and systems for the provisioning and execution of a mobile software application |
US10606582B2 (en) | 2017-10-17 | 2020-03-31 | Appdome Ltd. | Automated mobile application integration |
US20210055938A1 (en) * | 2019-08-23 | 2021-02-25 | Microsoft Technology Licensing, Llc | Hydration in virtual machines |
US10949398B2 (en) | 2017-03-29 | 2021-03-16 | Commvault Systems, Inc. | Synchronization operations for network-accessible folders |
US11243748B2 (en) | 2018-11-08 | 2022-02-08 | Appdome Ltd. | Artificial intelligence mobile integration |
US11252062B2 (en) | 2011-06-21 | 2022-02-15 | The Nielsen Company (Us), Llc | Monitoring streaming media content |
US11831631B2 (en) | 2018-11-08 | 2023-11-28 | Appdome Ltd. | Single sign-on for mobile applications using direct brokering for identity authentication |
Families Citing this family (115)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20010044850A1 (en) | 1998-07-22 | 2001-11-22 | Uri Raz | Method and apparatus for determining the order of streaming modules |
US6574618B2 (en) * | 1998-07-22 | 2003-06-03 | Appstream, Inc. | Method and system for executing network streamed application |
US6311221B1 (en) * | 1998-07-22 | 2001-10-30 | Appstream Inc. | Streaming modules |
US6848105B1 (en) * | 1998-12-30 | 2005-01-25 | Microsoft Corporation | Method and system for identifying program module functionality needed by a computer when disconnected from a network |
US6698011B1 (en) * | 1999-01-29 | 2004-02-24 | Intel Corporation | Isolation of program translation failures |
US6748440B1 (en) * | 1999-05-12 | 2004-06-08 | Microsoft Corporation | Flow of streaming data through multiple processing modules |
US7007096B1 (en) | 1999-05-12 | 2006-02-28 | Microsoft Corporation | Efficient splitting and mixing of streaming-data frames for processing through multiple processing modules |
US6449719B1 (en) * | 1999-11-09 | 2002-09-10 | Widevine Technologies, Inc. | Process and streaming server for encrypting a data stream |
US8055894B2 (en) | 1999-11-09 | 2011-11-08 | Google Inc. | Process and streaming server for encrypting a data stream with bandwidth based variation |
US9076448B2 (en) * | 1999-11-12 | 2015-07-07 | Nuance Communications, Inc. | Distributed real time speech recognition system |
US6594773B1 (en) * | 1999-11-12 | 2003-07-15 | Microsoft Corporation | Adaptive control of streaming data in a graph |
US6711619B1 (en) * | 1999-12-15 | 2004-03-23 | Hewlett-Packard Development Company, L.P. | Method, system, and apparatus for distributing and using computer-based applications over a network |
US6721723B1 (en) * | 1999-12-23 | 2004-04-13 | 1St Desk Systems, Inc. | Streaming metatree data structure for indexing information in a data base |
US6983315B1 (en) * | 2000-01-18 | 2006-01-03 | Wrq, Inc. | Applet embedded cross-platform caching |
US20020056120A1 (en) * | 2000-01-21 | 2002-05-09 | Mcternan Brennan J. | Method and system for distributing video using a virtual set |
US6965926B1 (en) * | 2000-04-10 | 2005-11-15 | Silverpop Systems, Inc. | Methods and systems for receiving and viewing content-rich communications |
US20050091511A1 (en) * | 2000-05-25 | 2005-04-28 | Itay Nave | Useability features in on-line delivery of applications |
US7010567B1 (en) * | 2000-06-07 | 2006-03-07 | Alpine Electronic, Inc. | Map-data distribution method, and map-data distribution server and client |
US7155667B1 (en) | 2000-06-21 | 2006-12-26 | Microsoft Corporation | User interface for integrated spreadsheets and word processing tables |
US6948135B1 (en) | 2000-06-21 | 2005-09-20 | Microsoft Corporation | Method and systems of providing information to computer users |
US7346848B1 (en) | 2000-06-21 | 2008-03-18 | Microsoft Corporation | Single window navigation methods and systems |
US7000230B1 (en) | 2000-06-21 | 2006-02-14 | Microsoft Corporation | Network-based software extensions |
US6883168B1 (en) | 2000-06-21 | 2005-04-19 | Microsoft Corporation | Methods, systems, architectures and data structures for delivering software via a network |
US7191394B1 (en) | 2000-06-21 | 2007-03-13 | Microsoft Corporation | Authoring arbitrary XML documents using DHTML and XSLT |
US6757894B2 (en) | 2000-09-26 | 2004-06-29 | Appstream, Inc. | Preprocessed applications suitable for network streaming applications and method for producing same |
US20020087883A1 (en) * | 2000-11-06 | 2002-07-04 | Curt Wohlgemuth | Anti-piracy system for remotely served computer applications |
US7451196B1 (en) | 2000-12-15 | 2008-11-11 | Stream Theory, Inc. | Method and system for executing a software application in a virtual environment |
JP2002182921A (en) * | 2000-12-18 | 2002-06-28 | Fujitsu Ltd | Operation processing system, operation processor and operation processing download program storage medium |
DE60033164T2 (en) * | 2000-12-22 | 2007-10-25 | Sun Microsystems, Inc., Palo Alto | Server-side execution of application modules in a client / server system |
US20020095509A1 (en) * | 2001-01-17 | 2002-07-18 | World Channel Inc. | Streaming booster and the method thereof |
US20020129351A1 (en) * | 2001-03-07 | 2002-09-12 | Nexusedge Technologies Pty. Ltd. | Software engine and method for software application loading |
FI20010817A (en) * | 2001-04-20 | 2003-02-14 | Nokia Corp | A method for displaying information on an electronic device display and an electronic device |
US20020186257A1 (en) * | 2001-06-08 | 2002-12-12 | Cadiz Jonathan J. | System and process for providing dynamic communication access and information awareness in an interactive peripheral display |
US7185290B2 (en) * | 2001-06-08 | 2007-02-27 | Microsoft Corporation | User interface for a system and process for providing dynamic communication access and information awareness in an interactive peripheral display |
US20030088714A1 (en) * | 2001-10-15 | 2003-05-08 | Scott Madlener | User internet interface |
DE50104035D1 (en) | 2001-12-10 | 2004-11-11 | Aladdin Knowledge Systems Gmbh | Procedure for executing a program on a computer |
US7624132B2 (en) * | 2002-01-22 | 2009-11-24 | Sun Microsystems, Inc. | Method and apparatus for processing a streamed zip file |
US7299292B2 (en) * | 2002-03-29 | 2007-11-20 | Widevine Technologies, Inc. | Process and streaming server for encrypting a data stream to a virtual smart card client system |
US20040006637A1 (en) * | 2002-04-25 | 2004-01-08 | Pramote Kuacharoen | Methods and systems for transmitting application software |
US6953439B1 (en) | 2002-06-27 | 2005-10-11 | University Of South Florida | Therapeutic mattress |
US7272830B2 (en) * | 2003-01-16 | 2007-09-18 | Sun Microsystems, Inc. | Ordering program data for loading on a device |
US20060174235A1 (en) * | 2003-02-18 | 2006-08-03 | Tomihisa Kamada | Native compile method, native compile preprocessing method, computer program, and server |
US7809679B2 (en) * | 2003-03-03 | 2010-10-05 | Fisher-Rosemount Systems, Inc. | Distributed data access methods and apparatus for process control systems |
US7007170B2 (en) * | 2003-03-18 | 2006-02-28 | Widevine Technologies, Inc. | System, method, and apparatus for securely providing content viewable on a secure device |
US7275216B2 (en) | 2003-03-24 | 2007-09-25 | Microsoft Corporation | System and method for designing electronic forms and hierarchical schemas |
US7370066B1 (en) | 2003-03-24 | 2008-05-06 | Microsoft Corporation | System and method for offline editing of data files |
US7415672B1 (en) | 2003-03-24 | 2008-08-19 | Microsoft Corporation | System and method for designing electronic forms |
US7296017B2 (en) | 2003-03-28 | 2007-11-13 | Microsoft Corporation | Validation of XML data files |
US7913159B2 (en) | 2003-03-28 | 2011-03-22 | Microsoft Corporation | System and method for real-time validation of structured data files |
US7406660B1 (en) | 2003-08-01 | 2008-07-29 | Microsoft Corporation | Mapping between structured data and a visual surface |
US7334187B1 (en) | 2003-08-06 | 2008-02-19 | Microsoft Corporation | Electronic form aggregation |
US8819072B1 (en) | 2004-02-02 | 2014-08-26 | Microsoft Corporation | Promoting data from structured data files |
US8230095B2 (en) | 2004-05-07 | 2012-07-24 | Wyse Technology, Inc. | System and method for integrated on-demand delivery of operating system and applications |
US7774620B1 (en) | 2004-05-27 | 2010-08-10 | Microsoft Corporation | Executing applications at appropriate trust levels |
US9124653B2 (en) * | 2004-09-03 | 2015-09-01 | Symantec Corporation | Method and apparatus for allowing sharing of streamable applications |
US9609279B2 (en) | 2004-09-24 | 2017-03-28 | Google Inc. | Method and system for providing secure CODECS |
US7692636B2 (en) | 2004-09-30 | 2010-04-06 | Microsoft Corporation | Systems and methods for handwriting to a screen |
EP1817665A1 (en) * | 2004-10-28 | 2007-08-15 | Nokia Corporation | A device, method and computer program for running a modular application |
US8487879B2 (en) | 2004-10-29 | 2013-07-16 | Microsoft Corporation | Systems and methods for interacting with a computer through handwriting to a screen |
US7657842B2 (en) * | 2004-11-12 | 2010-02-02 | Microsoft Corporation | Sidebar tile free-arrangement |
US7712022B2 (en) | 2004-11-15 | 2010-05-04 | Microsoft Corporation | Mutually exclusive options in electronic forms |
US7721190B2 (en) | 2004-11-16 | 2010-05-18 | Microsoft Corporation | Methods and systems for server side form processing |
US20060107226A1 (en) * | 2004-11-16 | 2006-05-18 | Microsoft Corporation | Sidebar autohide to desktop |
US8250296B2 (en) * | 2004-12-01 | 2012-08-21 | Dell Products L.P. | System and method for information handling system memory page mapping optimization |
US20060136389A1 (en) * | 2004-12-22 | 2006-06-22 | Cover Clay H | System and method for invocation of streaming application |
US7937651B2 (en) | 2005-01-14 | 2011-05-03 | Microsoft Corporation | Structural editing operations for network forms |
US7725834B2 (en) | 2005-03-04 | 2010-05-25 | Microsoft Corporation | Designer-created aspect for an electronic form template |
US7673228B2 (en) | 2005-03-30 | 2010-03-02 | Microsoft Corporation | Data-driven actions for network forms |
US8010515B2 (en) | 2005-04-15 | 2011-08-30 | Microsoft Corporation | Query to an electronic form |
US8200975B2 (en) | 2005-06-29 | 2012-06-12 | Microsoft Corporation | Digital signatures for network forms |
US8578290B2 (en) * | 2005-08-18 | 2013-11-05 | Microsoft Corporation | Docking and undocking user interface objects |
US7568165B2 (en) * | 2005-08-18 | 2009-07-28 | Microsoft Corporation | Sidebar engine, object model and schema |
US7499989B2 (en) * | 2005-08-18 | 2009-03-03 | Microsoft Corporation | Installing data with settings |
US7644391B2 (en) | 2005-08-18 | 2010-01-05 | Microsoft Corporation | Sidebar engine, object model and schema |
US7665032B2 (en) * | 2005-08-18 | 2010-02-16 | Microsoft Corporation | Sidebar engine, object model and schema |
US20070067643A1 (en) * | 2005-09-21 | 2007-03-22 | Widevine Technologies, Inc. | System and method for software tamper detection |
US20070168309A1 (en) * | 2005-12-01 | 2007-07-19 | Exent Technologies, Ltd. | System, method and computer program product for dynamically extracting and sharing event information from an executing software application |
US7596536B2 (en) * | 2005-12-01 | 2009-09-29 | Exent Technologies, Ltd. | System, method and computer program product for dynamically measuring properties of objects rendered and/or referenced by an application executing on a computing device |
US7596540B2 (en) * | 2005-12-01 | 2009-09-29 | Exent Technologies, Ltd. | System, method and computer program product for dynamically enhancing an application executing on a computing device |
US20070296718A1 (en) * | 2005-12-01 | 2007-12-27 | Exent Technologies, Ltd. | Dynamic resizing of graphics content rendered by an application to facilitate rendering of additional graphics content |
US8629885B2 (en) * | 2005-12-01 | 2014-01-14 | Exent Technologies, Ltd. | System, method and computer program product for dynamically identifying, selecting and extracting graphical and media objects in frames or scenes rendered by a software application |
US8689016B2 (en) | 2005-12-02 | 2014-04-01 | Google Inc. | Tamper prevention and detection for video provided over a network to a client |
US8001459B2 (en) | 2005-12-05 | 2011-08-16 | Microsoft Corporation | Enabling electronic documents for limited-capability computing devices |
US20070288644A1 (en) * | 2006-06-07 | 2007-12-13 | Cesar Augusto Rojas | Systems and methods for developing and running applications in a web-based computing environment |
US20080244080A1 (en) * | 2007-03-29 | 2008-10-02 | James Thomas H | Prefetching Based on Streaming Hints |
US8243924B2 (en) * | 2007-06-29 | 2012-08-14 | Google Inc. | Progressive download or streaming of digital media securely through a localized container and communication protocol proxy |
US9236091B2 (en) * | 2007-07-02 | 2016-01-12 | Fraunhofer-Gesellschaft Zur Foerderung Der Angewandten Forschung E.V. | Apparatus and method for processing and reading a file having a media data container and a metadata container |
US9323680B1 (en) * | 2007-09-28 | 2016-04-26 | Veritas Us Ip Holdings Llc | Method and apparatus for prefetching data |
US8819105B2 (en) * | 2007-11-07 | 2014-08-26 | Barclays Capital Inc. | Method and system for data formatting |
JP2009123064A (en) * | 2007-11-16 | 2009-06-04 | Toshiba Corp | Computer system |
US8635611B2 (en) * | 2007-11-16 | 2014-01-21 | Microsoft Corporation | Creating virtual applications |
US20090138876A1 (en) * | 2007-11-22 | 2009-05-28 | Hsuan-Yeh Chang | Method and system for delivering application packages based on user demands |
US9498714B2 (en) * | 2007-12-15 | 2016-11-22 | Sony Interactive Entertainment America Llc | Program mode switching |
US8799494B1 (en) * | 2008-02-04 | 2014-08-05 | Symantec Corporation | Application streaming proactive failover |
US8868464B2 (en) | 2008-02-07 | 2014-10-21 | Google Inc. | Preventing unauthorized modification or skipping of viewing of advertisements within content |
US8353041B2 (en) * | 2008-05-16 | 2013-01-08 | Symantec Corporation | Secure application streaming |
US8863116B1 (en) | 2008-11-20 | 2014-10-14 | Symantec Corporation | Pre-storing blocks for a streamed application in a local cache on a host computer system |
US8700072B2 (en) | 2008-12-23 | 2014-04-15 | At&T Mobility Ii Llc | Scalable message fidelity |
CN101776877A (en) * | 2009-01-12 | 2010-07-14 | 鸿富锦精密工业(深圳)有限公司 | Program editing system and method for programmable logic controller |
US8925034B1 (en) | 2009-06-30 | 2014-12-30 | Symantec Corporation | Data protection requirements specification and migration |
US8387047B1 (en) | 2009-08-03 | 2013-02-26 | Symantec Corporation | Method of virtualizing file extensions in a computer system by determining an association between applications in virtual environment and a file extension |
US8352937B2 (en) * | 2009-08-03 | 2013-01-08 | Symantec Corporation | Streaming an application install package into a virtual environment |
US10089092B2 (en) | 2010-01-27 | 2018-10-02 | Embarcadero Technologies, Inc. | Creating a software product from a software application |
US8090744B1 (en) | 2009-08-26 | 2012-01-03 | Symantec Operating Corporation | Method and apparatus for determining compatibility between a virtualized application and a base environment |
US8473444B1 (en) | 2009-08-28 | 2013-06-25 | Symantec Corporation | Management of actions in multiple virtual and non-virtual environments |
US8438555B1 (en) | 2009-08-31 | 2013-05-07 | Symantec Corporation | Method of using an encapsulated data signature for virtualization layer activation |
US8458310B1 (en) | 2009-09-14 | 2013-06-04 | Symantec Corporation | Low bandwidth streaming of application upgrades |
US8566297B1 (en) | 2010-01-14 | 2013-10-22 | Symantec Corporation | Method to spoof data formats from image backups |
US20120084393A1 (en) * | 2010-01-27 | 2012-04-05 | Williams Wayne D | License automation and streaming for software products |
US8290912B1 (en) | 2010-01-29 | 2012-10-16 | Symantec Corporation | Endpoint virtualization aware backup |
EP2545424A4 (en) * | 2010-03-09 | 2014-07-16 | Happy Cloud Inc | Data streaming for interactive decision-oriented software applications |
US8495625B1 (en) * | 2010-07-27 | 2013-07-23 | Symantec Corporation | Method and system for creation of streamed files on-demand |
US8751800B1 (en) | 2011-12-12 | 2014-06-10 | Google Inc. | DRM provider interoperability |
US8938550B2 (en) * | 2011-12-15 | 2015-01-20 | Microsoft Corporation | Autonomous network streaming |
US9880776B1 (en) | 2013-02-22 | 2018-01-30 | Veritas Technologies Llc | Content-driven data protection method for multiple storage devices |
Citations (54)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5163131A (en) * | 1989-09-08 | 1992-11-10 | Auspex Systems, Inc. | Parallel i/o network file server architecture |
US5504886A (en) * | 1993-07-02 | 1996-04-02 | International Business Machines Corporation | System and method for applying user supplied relation definitions to application files for a relational database |
US5581706A (en) * | 1994-06-30 | 1996-12-03 | Rca Thomson Licensing Corporation | Method forming an audio/video interactive data signal |
US5768528A (en) * | 1996-05-24 | 1998-06-16 | V-Cast, Inc. | Client-server system for delivery of online information |
US5864870A (en) * | 1996-12-18 | 1999-01-26 | Unisys Corp. | Method for storing/retrieving files of various formats in an object database using a virtual multimedia file system |
US5946697A (en) * | 1997-04-22 | 1999-08-31 | Microsoft Corporation | Rapid transfer of HTML files |
US5966702A (en) * | 1997-10-31 | 1999-10-12 | Sun Microsystems, Inc. | Method and apparatus for pre-processing and packaging class files |
US5987513A (en) * | 1997-02-19 | 1999-11-16 | Wipro Limited | Network management using browser-based technology |
US5991776A (en) * | 1992-08-20 | 1999-11-23 | Inprise Corporation | Database system with improved methods for storing free-form data objects of data records |
US6023726A (en) * | 1998-01-20 | 2000-02-08 | Netscape Communications Corporation | User configurable prefetch control system for enabling client to prefetch documents from a network server |
US6044403A (en) * | 1997-12-31 | 2000-03-28 | At&T Corp | Network server platform for internet, JAVA server and video application server |
US6047323A (en) * | 1995-10-19 | 2000-04-04 | Hewlett-Packard Company | Creation and migration of distributed streams in clusters of networked computers |
US6065046A (en) * | 1997-07-29 | 2000-05-16 | Catharon Productions, Inc. | Computerized system and associated method of optimally controlled storage and transfer of computer programs on a computer network |
US6085193A (en) * | 1997-09-29 | 2000-07-04 | International Business Machines Corporation | Method and system for dynamically prefetching information via a server hierarchy |
US6108703A (en) * | 1998-07-14 | 2000-08-22 | Massachusetts Institute Of Technology | Global hosting system |
US6119082A (en) * | 1998-07-13 | 2000-09-12 | Lockheed Martin Corporation | Speech coding system and method including harmonic generator having an adaptive phase off-setter |
US6148340A (en) * | 1998-04-30 | 2000-11-14 | International Business Machines Corporation | Method and system for differencing container files |
US6163805A (en) * | 1997-10-07 | 2000-12-19 | Hewlett-Packard Company | Distributed automated testing system |
US6173291B1 (en) * | 1997-09-26 | 2001-01-09 | Powerquest Corporation | Method and apparatus for recovering data from damaged or corrupted file storage media |
US6199095B1 (en) * | 1996-01-29 | 2001-03-06 | Compaq Computer Corporation | System and method for achieving object method transparency in a multi-code execution environment |
US6199082B1 (en) * | 1995-07-17 | 2001-03-06 | Microsoft Corporation | Method for delivering separate design and content in a multimedia publishing system |
US6230184B1 (en) * | 1998-10-19 | 2001-05-08 | Sun Microsystems, Inc. | Method and apparatus for automatically optimizing execution of a computer program |
US6256623B1 (en) * | 1998-06-22 | 2001-07-03 | Microsoft Corporation | Network search access construct for accessing web-based search services |
US20010034736A1 (en) * | 1998-07-22 | 2001-10-25 | Dan Eylon | Method and system for executing network streamed application |
US6311221B1 (en) * | 1998-07-22 | 2001-10-30 | Appstream Inc. | Streaming modules |
US20010037400A1 (en) * | 1998-07-22 | 2001-11-01 | Uri Raz | Method and system for decreasing the user-perceived system response time in web-based systems |
US20010037399A1 (en) * | 1998-07-22 | 2001-11-01 | Dan Eylon | Method and system for streaming software applications to a client |
US20010044850A1 (en) * | 1998-07-22 | 2001-11-22 | Uri Raz | Method and apparatus for determining the order of streaming modules |
US6370573B1 (en) * | 1999-08-31 | 2002-04-09 | Accenture Llp | System, method and article of manufacture for managing an environment of a development architecture framework |
US6374402B1 (en) * | 1998-11-16 | 2002-04-16 | Into Networks, Inc. | Method and apparatus for installation abstraction in a secure content delivery system |
US6381742B2 (en) * | 1998-06-19 | 2002-04-30 | Microsoft Corporation | Software package management |
US6385644B1 (en) * | 1997-09-26 | 2002-05-07 | Mci Worldcom, Inc. | Multi-threaded web based user inbox for report management |
US6408294B1 (en) * | 1999-03-31 | 2002-06-18 | Verizon Laboratories Inc. | Common term optimization |
US6412004B1 (en) * | 1997-03-27 | 2002-06-25 | Microsoft Corporation | Metaserver for a multimedia distribution network |
US20020087717A1 (en) * | 2000-09-26 | 2002-07-04 | Itzik Artzi | Network streaming of multi-application program code |
US20020087963A1 (en) * | 2000-09-26 | 2002-07-04 | Dan Eylon | Preprocessed applications suitable for network streaming applications and method for producing same |
US6425125B1 (en) * | 1999-03-30 | 2002-07-23 | Microsoft Corporation | System and method for upgrading client software |
US6427149B1 (en) * | 1999-09-09 | 2002-07-30 | Herman Rodriguez | Remote access of archived compressed data files |
US6438630B1 (en) * | 1999-10-06 | 2002-08-20 | Sun Microsystems, Inc. | Scheduling storage accesses for multiple continuous media streams |
US6453354B1 (en) * | 1999-03-03 | 2002-09-17 | Emc Corporation | File server system using connection-oriented protocol and sharing data sets among data movers |
US6453334B1 (en) * | 1997-06-16 | 2002-09-17 | Streamtheory, Inc. | Method and apparatus to allow remotely located computer programs and/or data to be accessed on a local computer in a secure, time-limited manner, with persistent caching |
US20020138640A1 (en) * | 1998-07-22 | 2002-09-26 | Uri Raz | Apparatus and method for improving the delivery of software applications and associated data in web-based systems |
US6466980B1 (en) * | 1999-06-17 | 2002-10-15 | International Business Machines Corporation | System and method for capacity shaping in an internet environment |
US20020157089A1 (en) * | 2000-11-06 | 2002-10-24 | Amit Patel | Client installation and execution system for streamed applications |
US6484311B2 (en) * | 1998-07-15 | 2002-11-19 | Microsoft Corporation | Coalescing properties, methods and events |
US6499060B1 (en) * | 1999-03-12 | 2002-12-24 | Microsoft Corporation | Media coding for loss recovery with remotely predicted data units |
US6523027B1 (en) * | 1999-07-30 | 2003-02-18 | Accenture Llp | Interfacing servers in a Java based e-commerce architecture |
US6535894B1 (en) * | 2000-06-01 | 2003-03-18 | Sun Microsystems, Inc. | Apparatus and method for incremental updating of archive files |
US6538991B1 (en) * | 1999-08-03 | 2003-03-25 | Lucent Technologies Inc. | Constraint-based routing between ingress-egress points in a packet network |
US6587127B1 (en) * | 1997-11-25 | 2003-07-01 | Motorola, Inc. | Content player method and server with user profile |
US6604106B1 (en) * | 1998-12-10 | 2003-08-05 | International Business Machines Corporation | Compression and delivery of web server content |
US6625581B1 (en) * | 1994-04-22 | 2003-09-23 | Ipf, Inc. | Method of and system for enabling the access of consumer product related information and the purchase of consumer products at points of consumer presence on the world wide web (www) at which consumer product information request (cpir) enabling servlet tags are embedded within html-encoded documents |
US6643650B1 (en) * | 2000-05-09 | 2003-11-04 | Sun Microsystems, Inc. | Mechanism and apparatus for using messages to look up documents stored in spaces in a distributed computing environment |
US6763370B1 (en) * | 1998-11-16 | 2004-07-13 | Softricity, Inc. | Method and apparatus for content protection in a secure content delivery system |
Family Cites Families (35)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS6436332A (en) * | 1987-07-31 | 1989-02-07 | Nec Corp | Program loading system |
US5495610A (en) * | 1989-11-30 | 1996-02-27 | Seer Technologies, Inc. | Software distribution system to build and distribute a software release |
JPH04336354A (en) * | 1991-05-14 | 1992-11-24 | Nec Corp | Decentralized computer system |
CA2084575C (en) * | 1991-12-31 | 1996-12-03 | Chris A. Dinallo | Personal computer with generalized data streaming apparatus for multimedia devices |
WO1994025913A2 (en) | 1993-04-30 | 1994-11-10 | Novadigm, Inc. | Method and apparatus for enterprise desktop management |
JPH07271603A (en) * | 1994-03-31 | 1995-10-20 | Mitsubishi Electric Corp | Overlay program loading system |
US5563648A (en) * | 1994-04-28 | 1996-10-08 | Thomson Consumer Electronics, Inc. | Method for controlling execution of an audio video interactive program |
JPH086878A (en) * | 1994-06-17 | 1996-01-12 | Toshiba Corp | Method and device for data broadcasting |
US5712976A (en) | 1994-09-08 | 1998-01-27 | International Business Machines Corporation | Video data streamer for simultaneously conveying same one or different ones of data blocks stored in storage node to each of plurality of communication nodes |
US5708796A (en) | 1994-11-18 | 1998-01-13 | Lucent Technologies Inc. | Method of retrieving continuous and non-continuous media data from a file system |
DE69515838T2 (en) | 1995-01-30 | 2000-10-12 | Ibm | Priority-controlled transmission of multimedia data streams via a telecommunication line |
EP0826181A4 (en) | 1995-04-11 | 2005-02-09 | Kinetech Inc | Identifying data in a data processing system |
US5802292A (en) * | 1995-04-28 | 1998-09-01 | Digital Equipment Corporation | Method for predictive prefetching of information over a communications network |
US5835749A (en) * | 1995-05-05 | 1998-11-10 | Apple Computer, Inc. | Method and apparatus for providing dynamically linked libraries |
AU6177696A (en) * | 1995-06-14 | 1997-01-15 | Novell, Inc. | Method for managing globally distributed software components |
US5761477A (en) | 1995-12-04 | 1998-06-02 | Microsoft Corporation | Methods for safe and efficient implementations of virtual machines |
US5765164A (en) | 1995-12-21 | 1998-06-09 | Intel Corporation | Apparatus and method for management of discontinuous segments of multiple audio, video, and data streams |
US6088524A (en) | 1995-12-27 | 2000-07-11 | Lucent Technologies, Inc. | Method and apparatus for optimizing database queries involving aggregation predicates |
CA2166254C (en) * | 1995-12-28 | 2000-02-01 | Robert James Blainey | Improving memory layout based on connectivity considerations |
US5754774A (en) | 1996-02-15 | 1998-05-19 | International Business Machine Corp. | Client/server communication system |
US5764235A (en) | 1996-03-25 | 1998-06-09 | Insight Development Corporation | Computer implemented method and system for transmitting graphical images from server to client at user selectable resolution |
US5870769A (en) | 1996-06-07 | 1999-02-09 | At&T Corp. | Internet access system and method with active link status indicators |
US6260078B1 (en) * | 1996-07-03 | 2001-07-10 | Sun Microsystems, Inc. | Using a distributed object system to find and download java-based applications |
US5742768A (en) | 1996-07-16 | 1998-04-21 | Silicon Graphics, Inc. | System and method for providing and displaying a web page having an embedded menu |
US5919247A (en) | 1996-07-24 | 1999-07-06 | Marimba, Inc. | Method for the distribution of code and data updates |
CN1202668C (en) * | 1996-09-11 | 2005-05-18 | 松下电器产业株式会社 | Program reception lexecution apparatus which can start execution of program even when only part of program is received, and program transmitter for it |
JPH10133976A (en) * | 1996-11-01 | 1998-05-22 | Nippon Telegr & Teleph Corp <Ntt> | On-demand file down-loading method and its system |
JPH10162057A (en) * | 1996-11-29 | 1998-06-19 | Meidensha Corp | Construction method for facility management system |
US5978788A (en) | 1997-04-14 | 1999-11-02 | International Business Machines Corporation | System and method for generating multi-representations of a data cube |
US5878223A (en) | 1997-05-07 | 1999-03-02 | International Business Machines Corporation | System and method for predictive caching of information pages |
US5974129A (en) | 1997-05-21 | 1999-10-26 | Lucent Technologies Inc. | Distributed virtual cache method for use in a database query control system |
US5933644A (en) * | 1997-06-18 | 1999-08-03 | Sun Microsystems, Inc. | Method and apparatus for conflict-based block reordering |
US6009410A (en) * | 1997-10-16 | 1999-12-28 | At&T Corporation | Method and system for presenting customized advertising to a user on the world wide web |
US6122628A (en) | 1997-10-31 | 2000-09-19 | International Business Machines Corporation | Multidimensional data clustering and dimension reduction for indexing and searching |
US6073129A (en) | 1997-12-29 | 2000-06-06 | Bull Hn Information Systems Inc. | Method and apparatus for improving the performance of a database management system through a central cache mechanism |
-
1998
- 1998-07-22 US US09/120,575 patent/US6311221B1/en not_active Expired - Lifetime
-
1999
- 1999-07-15 IL IL14101599A patent/IL141015A0/en unknown
- 1999-07-15 JP JP2000561545A patent/JP4607320B2/en not_active Expired - Fee Related
- 1999-07-15 EP EP99935602A patent/EP1097416A4/en not_active Withdrawn
- 1999-07-15 CA CA002361342A patent/CA2361342A1/en not_active Abandoned
- 1999-07-15 AU AU51046/99A patent/AU5104699A/en not_active Abandoned
- 1999-07-15 WO PCT/US1999/016055 patent/WO2000005637A2/en active Application Filing
-
2000
- 2000-12-29 US US09/751,190 patent/US20020042833A1/en not_active Abandoned
Patent Citations (57)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5163131A (en) * | 1989-09-08 | 1992-11-10 | Auspex Systems, Inc. | Parallel i/o network file server architecture |
US5991776A (en) * | 1992-08-20 | 1999-11-23 | Inprise Corporation | Database system with improved methods for storing free-form data objects of data records |
US5504886A (en) * | 1993-07-02 | 1996-04-02 | International Business Machines Corporation | System and method for applying user supplied relation definitions to application files for a relational database |
US6625581B1 (en) * | 1994-04-22 | 2003-09-23 | Ipf, Inc. | Method of and system for enabling the access of consumer product related information and the purchase of consumer products at points of consumer presence on the world wide web (www) at which consumer product information request (cpir) enabling servlet tags are embedded within html-encoded documents |
US5581706A (en) * | 1994-06-30 | 1996-12-03 | Rca Thomson Licensing Corporation | Method forming an audio/video interactive data signal |
US6199082B1 (en) * | 1995-07-17 | 2001-03-06 | Microsoft Corporation | Method for delivering separate design and content in a multimedia publishing system |
US6047323A (en) * | 1995-10-19 | 2000-04-04 | Hewlett-Packard Company | Creation and migration of distributed streams in clusters of networked computers |
US6199095B1 (en) * | 1996-01-29 | 2001-03-06 | Compaq Computer Corporation | System and method for achieving object method transparency in a multi-code execution environment |
US5768528A (en) * | 1996-05-24 | 1998-06-16 | V-Cast, Inc. | Client-server system for delivery of online information |
US5864870A (en) * | 1996-12-18 | 1999-01-26 | Unisys Corp. | Method for storing/retrieving files of various formats in an object database using a virtual multimedia file system |
US5987513A (en) * | 1997-02-19 | 1999-11-16 | Wipro Limited | Network management using browser-based technology |
US6412004B1 (en) * | 1997-03-27 | 2002-06-25 | Microsoft Corporation | Metaserver for a multimedia distribution network |
US5946697A (en) * | 1997-04-22 | 1999-08-31 | Microsoft Corporation | Rapid transfer of HTML files |
US6453334B1 (en) * | 1997-06-16 | 2002-09-17 | Streamtheory, Inc. | Method and apparatus to allow remotely located computer programs and/or data to be accessed on a local computer in a secure, time-limited manner, with persistent caching |
US6065046A (en) * | 1997-07-29 | 2000-05-16 | Catharon Productions, Inc. | Computerized system and associated method of optimally controlled storage and transfer of computer programs on a computer network |
US6615258B1 (en) * | 1997-09-26 | 2003-09-02 | Worldcom, Inc. | Integrated customer interface for web based data management |
US6173291B1 (en) * | 1997-09-26 | 2001-01-09 | Powerquest Corporation | Method and apparatus for recovering data from damaged or corrupted file storage media |
US6385644B1 (en) * | 1997-09-26 | 2002-05-07 | Mci Worldcom, Inc. | Multi-threaded web based user inbox for report management |
US6085193A (en) * | 1997-09-29 | 2000-07-04 | International Business Machines Corporation | Method and system for dynamically prefetching information via a server hierarchy |
US6163805A (en) * | 1997-10-07 | 2000-12-19 | Hewlett-Packard Company | Distributed automated testing system |
US5966702A (en) * | 1997-10-31 | 1999-10-12 | Sun Microsystems, Inc. | Method and apparatus for pre-processing and packaging class files |
US6587127B1 (en) * | 1997-11-25 | 2003-07-01 | Motorola, Inc. | Content player method and server with user profile |
US6044403A (en) * | 1997-12-31 | 2000-03-28 | At&T Corp | Network server platform for internet, JAVA server and video application server |
US6023726A (en) * | 1998-01-20 | 2000-02-08 | Netscape Communications Corporation | User configurable prefetch control system for enabling client to prefetch documents from a network server |
US6148340A (en) * | 1998-04-30 | 2000-11-14 | International Business Machines Corporation | Method and system for differencing container files |
US6381742B2 (en) * | 1998-06-19 | 2002-04-30 | Microsoft Corporation | Software package management |
US6256623B1 (en) * | 1998-06-22 | 2001-07-03 | Microsoft Corporation | Network search access construct for accessing web-based search services |
US6119082A (en) * | 1998-07-13 | 2000-09-12 | Lockheed Martin Corporation | Speech coding system and method including harmonic generator having an adaptive phase off-setter |
US6108703A (en) * | 1998-07-14 | 2000-08-22 | Massachusetts Institute Of Technology | Global hosting system |
US6484311B2 (en) * | 1998-07-15 | 2002-11-19 | Microsoft Corporation | Coalescing properties, methods and events |
US20010034736A1 (en) * | 1998-07-22 | 2001-10-25 | Dan Eylon | Method and system for executing network streamed application |
US20010044850A1 (en) * | 1998-07-22 | 2001-11-22 | Uri Raz | Method and apparatus for determining the order of streaming modules |
US20010037399A1 (en) * | 1998-07-22 | 2001-11-01 | Dan Eylon | Method and system for streaming software applications to a client |
US20010037400A1 (en) * | 1998-07-22 | 2001-11-01 | Uri Raz | Method and system for decreasing the user-perceived system response time in web-based systems |
US6311221B1 (en) * | 1998-07-22 | 2001-10-30 | Appstream Inc. | Streaming modules |
US20030140160A1 (en) * | 1998-07-22 | 2003-07-24 | Uri Raz | Method and apparatus for determining the order of streaming modules |
US6574618B2 (en) * | 1998-07-22 | 2003-06-03 | Appstream, Inc. | Method and system for executing network streamed application |
US20020138640A1 (en) * | 1998-07-22 | 2002-09-26 | Uri Raz | Apparatus and method for improving the delivery of software applications and associated data in web-based systems |
US6230184B1 (en) * | 1998-10-19 | 2001-05-08 | Sun Microsystems, Inc. | Method and apparatus for automatically optimizing execution of a computer program |
US6374402B1 (en) * | 1998-11-16 | 2002-04-16 | Into Networks, Inc. | Method and apparatus for installation abstraction in a secure content delivery system |
US6763370B1 (en) * | 1998-11-16 | 2004-07-13 | Softricity, Inc. | Method and apparatus for content protection in a secure content delivery system |
US6604106B1 (en) * | 1998-12-10 | 2003-08-05 | International Business Machines Corporation | Compression and delivery of web server content |
US6453354B1 (en) * | 1999-03-03 | 2002-09-17 | Emc Corporation | File server system using connection-oriented protocol and sharing data sets among data movers |
US6499060B1 (en) * | 1999-03-12 | 2002-12-24 | Microsoft Corporation | Media coding for loss recovery with remotely predicted data units |
US6425125B1 (en) * | 1999-03-30 | 2002-07-23 | Microsoft Corporation | System and method for upgrading client software |
US6408294B1 (en) * | 1999-03-31 | 2002-06-18 | Verizon Laboratories Inc. | Common term optimization |
US6466980B1 (en) * | 1999-06-17 | 2002-10-15 | International Business Machines Corporation | System and method for capacity shaping in an internet environment |
US6523027B1 (en) * | 1999-07-30 | 2003-02-18 | Accenture Llp | Interfacing servers in a Java based e-commerce architecture |
US6538991B1 (en) * | 1999-08-03 | 2003-03-25 | Lucent Technologies Inc. | Constraint-based routing between ingress-egress points in a packet network |
US6370573B1 (en) * | 1999-08-31 | 2002-04-09 | Accenture Llp | System, method and article of manufacture for managing an environment of a development architecture framework |
US6427149B1 (en) * | 1999-09-09 | 2002-07-30 | Herman Rodriguez | Remote access of archived compressed data files |
US6438630B1 (en) * | 1999-10-06 | 2002-08-20 | Sun Microsystems, Inc. | Scheduling storage accesses for multiple continuous media streams |
US6643650B1 (en) * | 2000-05-09 | 2003-11-04 | Sun Microsystems, Inc. | Mechanism and apparatus for using messages to look up documents stored in spaces in a distributed computing environment |
US6535894B1 (en) * | 2000-06-01 | 2003-03-18 | Sun Microsystems, Inc. | Apparatus and method for incremental updating of archive files |
US20020087963A1 (en) * | 2000-09-26 | 2002-07-04 | Dan Eylon | Preprocessed applications suitable for network streaming applications and method for producing same |
US20020087717A1 (en) * | 2000-09-26 | 2002-07-04 | Itzik Artzi | Network streaming of multi-application program code |
US20020157089A1 (en) * | 2000-11-06 | 2002-10-24 | Amit Patel | Client installation and execution system for streamed applications |
Cited By (219)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100023640A1 (en) * | 1997-06-16 | 2010-01-28 | Stream Theory, Inc. | Software streaming system and method |
US7096253B2 (en) | 1997-06-16 | 2006-08-22 | Stream Theory, Inc. | Method and apparatus for streaming software |
US20030056112A1 (en) * | 1997-06-16 | 2003-03-20 | Jeffrey Vinson | Method and apparatus to allow remotely located computer programs and/or data to be accessed on a local computer in a secure, time-limited manner, with persistent caching |
US9094480B2 (en) | 1997-06-16 | 2015-07-28 | Numecent Holdings, Inc. | Software streaming system and method |
US8509230B2 (en) | 1997-06-16 | 2013-08-13 | Numecent Holdings, Inc. | Software streaming system and method |
US7197570B2 (en) | 1998-07-22 | 2007-03-27 | Appstream Inc. | System and method to send predicted application streamlets to a client device |
US7283991B1 (en) * | 1999-03-11 | 2007-10-16 | Microsoft Corporation | Caching system for path search optimization |
US20060168119A1 (en) * | 1999-11-24 | 2006-07-27 | Kabushiki Kaisha Sega | Information processor, file server, accounting control system, accounting control method, and recording medium recording a program therefor |
US20060143252A1 (en) * | 2000-03-09 | 2006-06-29 | Pkware, Inc. | System and method for manipulating and managing computer archive files |
US8959582B2 (en) | 2000-03-09 | 2015-02-17 | Pkware, Inc. | System and method for manipulating and managing computer archive files |
US10229130B2 (en) | 2000-03-09 | 2019-03-12 | Pkware, Inc. | Systems and methods for manipulating and managing computer archive files |
US7890465B2 (en) | 2000-03-09 | 2011-02-15 | Pkware, Inc. | Systems and methods for manipulating and managing computer archive files |
US20060155731A1 (en) * | 2000-03-09 | 2006-07-13 | Pkware, Inc. | System and method for manipulating and managing computer archive files |
US20110113257A1 (en) * | 2000-03-09 | 2011-05-12 | Pkware, Inc. | Systems and methods for manipulating and managing computer archive files |
US9886444B2 (en) | 2000-03-09 | 2018-02-06 | Pkware, Inc. | Systems and methods for manipulating and managing computer archive files |
US20060155788A1 (en) * | 2000-03-09 | 2006-07-13 | Pkware, Inc. | System and method for manipulating and managing computer archive files |
US8230482B2 (en) | 2000-03-09 | 2012-07-24 | Pkware, Inc. | System and method for manipulating and managing computer archive files |
US7844579B2 (en) | 2000-03-09 | 2010-11-30 | Pkware, Inc. | System and method for manipulating and managing computer archive files |
US7793099B2 (en) | 2000-03-09 | 2010-09-07 | Pkware, Inc. | Method and system for encryption of file characteristics of .ZIP files |
US10949394B2 (en) | 2000-03-09 | 2021-03-16 | Pkware, Inc. | Systems and methods for manipulating and managing computer archive files |
US20070043777A1 (en) * | 2000-03-09 | 2007-02-22 | Yuri Basin | Systems and methods for manipulating and managing computer archive files |
US20060143253A1 (en) * | 2000-03-09 | 2006-06-29 | Pkware, Inc. | System and method for manipulating and managing computer archive files |
US20060143714A1 (en) * | 2000-03-09 | 2006-06-29 | Pkware, Inc. | System and method for manipulating and managing computer archive files |
US20060143691A1 (en) * | 2000-03-09 | 2006-06-29 | Pkware, Inc. | System and method for manipulating and managing computer archive files |
US20060143250A1 (en) * | 2000-03-09 | 2006-06-29 | Pkware, Inc. | System and method for manipulating and managing computer archive files |
US20060173848A1 (en) * | 2000-03-09 | 2006-08-03 | Pkware, Inc. | System and method for manipulating and managing computer archive files |
US7051315B2 (en) | 2000-09-26 | 2006-05-23 | Appstream, Inc. | Network streaming of multi-application program code |
US20020087717A1 (en) * | 2000-09-26 | 2002-07-04 | Itzik Artzi | Network streaming of multi-application program code |
US20030009538A1 (en) * | 2000-11-06 | 2003-01-09 | Shah Lacky Vasant | Network caching system for streamed applications |
US7062567B2 (en) | 2000-11-06 | 2006-06-13 | Endeavors Technology, Inc. | Intelligent network streaming and execution system for conventionally coded applications |
US7043524B2 (en) | 2000-11-06 | 2006-05-09 | Omnishift Technologies, Inc. | Network caching system for streamed applications |
US9654548B2 (en) | 2000-11-06 | 2017-05-16 | Numecent Holdings, Inc. | Intelligent network streaming and execution system for conventionally coded applications |
US20020091763A1 (en) * | 2000-11-06 | 2002-07-11 | Shah Lacky Vasant | Client-side performance optimization system for streamed applications |
US8831995B2 (en) | 2000-11-06 | 2014-09-09 | Numecent Holdings, Inc. | Optimized server for streamed applications |
US9130953B2 (en) | 2000-11-06 | 2015-09-08 | Numecent Holdings, Inc. | Intelligent network streaming and execution system for conventionally coded applications |
US20020083183A1 (en) * | 2000-11-06 | 2002-06-27 | Sanjay Pujare | Conventionally coded application conversion system for streamed delivery and execution |
US6959320B2 (en) | 2000-11-06 | 2005-10-25 | Endeavors Technology, Inc. | Client-side performance optimization system for streamed applications |
US6918113B2 (en) | 2000-11-06 | 2005-07-12 | Endeavors Technology, Inc. | Client installation and execution system for streamed applications |
US8438298B2 (en) | 2001-02-14 | 2013-05-07 | Endeavors Technologies, Inc. | Intelligent network streaming and execution system for conventionally coded applications |
US8893249B2 (en) | 2001-02-14 | 2014-11-18 | Numecent Holdings, Inc. | Intelligent network streaming and execution system for conventionally coded applications |
US8090942B2 (en) | 2001-03-09 | 2012-01-03 | Pkware, Inc. | Method and system for asymmetrically encrypting .ZIP files |
US7707180B2 (en) * | 2001-07-26 | 2010-04-27 | Microsoft Corporation | System and method for reliably replicating data |
US20040181557A1 (en) * | 2001-07-26 | 2004-09-16 | Microsoft Corporation | System and method for reliably replicating data |
US10839141B2 (en) | 2002-09-10 | 2020-11-17 | Sqgo Innovations, Llc | System and method for provisioning a mobile software application to a mobile device |
US10831987B2 (en) | 2002-09-10 | 2020-11-10 | Sqgo Innovations, Llc | Computer program product provisioned to non-transitory computer storage of a wireless mobile device |
US10372796B2 (en) | 2002-09-10 | 2019-08-06 | Sqgo Innovations, Llc | Methods and systems for the provisioning and execution of a mobile software application |
US10552520B2 (en) | 2002-09-10 | 2020-02-04 | Sqgo Innovations, Llc | System and method for provisioning a mobile software application to a mobile device |
US10810359B2 (en) | 2002-09-10 | 2020-10-20 | Sqgo Innovations, Llc | System and method for provisioning a mobile software application to a mobile device |
US20040122872A1 (en) * | 2002-12-20 | 2004-06-24 | Pandya Yogendra C. | System and method for electronic archival and retrieval of data |
US7707188B2 (en) * | 2002-12-20 | 2010-04-27 | Schlumberger Technology Corporation | System and method for electronic archival and retrieval of data |
US7735057B2 (en) | 2003-05-16 | 2010-06-08 | Symantec Corporation | Method and apparatus for packaging and streaming installation software |
US20040237033A1 (en) * | 2003-05-19 | 2004-11-25 | Woolf Susan D. | Shared electronic ink annotation method and system |
US7373590B2 (en) * | 2003-05-19 | 2008-05-13 | Microsoft Corporation | Shared electronic ink annotation method and system |
US20040267754A1 (en) * | 2003-06-27 | 2004-12-30 | Nec Corporation | Access to shared disk device on storage area network |
US7827194B2 (en) * | 2003-06-27 | 2010-11-02 | Nec Corporation | Access to shared disk device on storage area network |
US10127397B2 (en) | 2003-07-16 | 2018-11-13 | Pkware, Inc. | Method for strongly encrypting .zip files |
US11461487B2 (en) | 2003-07-16 | 2022-10-04 | Pkware, Inc. | Method for strongly encrypting .ZIP files |
US20100119070A1 (en) * | 2003-07-16 | 2010-05-13 | Pkware, Inc. | Method and System for Mixed Symmetric and Asymmetric Decryption of .ZIP Files |
US20080046761A1 (en) * | 2003-07-16 | 2008-02-21 | Pkware, Inc. | Method and system for strongly encrypting .zip files |
US7895434B2 (en) | 2003-07-16 | 2011-02-22 | Pkware, Inc. | Method and system for multiple asymmetric encryption of .ZIP files |
US8225108B2 (en) | 2003-07-16 | 2012-07-17 | Pkware, Inc. | Method and system for mixed symmetric and asymmetric encryption of .ZIP files |
US10607024B2 (en) | 2003-07-16 | 2020-03-31 | Pkware, Inc. | Method for strongly encrypting .ZIP files |
US20050091517A1 (en) * | 2003-07-16 | 2005-04-28 | Pkware, Inc. | Method and system for mixed symmetric and asymmetric encryption of .ZIP files |
US9098721B2 (en) | 2003-07-16 | 2015-08-04 | Pkware, Inc. | Method for strongly encrypting .ZIP files |
US8191080B2 (en) | 2003-09-17 | 2012-05-29 | Research In Motion Limited | System and method for dynamic version management of applications |
US7793281B2 (en) * | 2003-09-17 | 2010-09-07 | Research In Motion Limited | System and method for dynamic version management of applications |
EP1678606A2 (en) * | 2003-09-17 | 2006-07-12 | Research In Motion Limited | System and method for management of mutating applications |
US20050193382A1 (en) * | 2003-09-17 | 2005-09-01 | Goring Bryan R. | System and method for dynamic version management of applications |
US20100313193A1 (en) * | 2003-09-17 | 2010-12-09 | Goring Bryan R | System and method for dynamic version management of applications |
US20050251495A1 (en) * | 2004-05-06 | 2005-11-10 | Bea Systems, Inc. | System and method for unified file management |
US7908339B2 (en) | 2004-06-03 | 2011-03-15 | Maxsp Corporation | Transaction based virtual file system optimized for high-latency network connections |
US9569194B2 (en) | 2004-06-03 | 2017-02-14 | Microsoft Technology Licensing, Llc | Virtual application manager |
US20060031529A1 (en) * | 2004-06-03 | 2006-02-09 | Keith Robert O Jr | Virtual application manager |
US20060047716A1 (en) * | 2004-06-03 | 2006-03-02 | Keith Robert O Jr | Transaction based virtual file system optimized for high-latency network connections |
US9357031B2 (en) | 2004-06-03 | 2016-05-31 | Microsoft Technology Licensing, Llc | Applications as a service |
US8812613B2 (en) | 2004-06-03 | 2014-08-19 | Maxsp Corporation | Virtual application manager |
US7664834B2 (en) | 2004-07-09 | 2010-02-16 | Maxsp Corporation | Distributed operating system management |
US20060047946A1 (en) * | 2004-07-09 | 2006-03-02 | Keith Robert O Jr | Distributed operating system management |
US20100125770A1 (en) * | 2004-07-09 | 2010-05-20 | Maxsp Corporation | Distributed operating system management |
US20060048136A1 (en) * | 2004-08-25 | 2006-03-02 | Vries Jeff D | Interception-based resource detection system |
US8171479B2 (en) | 2004-09-30 | 2012-05-01 | Citrix Systems, Inc. | Method and apparatus for providing an aggregate view of enumerated system resources from various isolation layers |
US20060075381A1 (en) * | 2004-09-30 | 2006-04-06 | Citrix Systems, Inc. | Method and apparatus for isolating execution of software applications |
US20070094667A1 (en) * | 2004-09-30 | 2007-04-26 | Bissett Nicholas A | Method for accessing, by application programs, resources residing inside an application isolation environment |
US7752600B2 (en) | 2004-09-30 | 2010-07-06 | Citrix Systems, Inc. | Method and apparatus for providing file-type associations to multiple applications |
US7680758B2 (en) | 2004-09-30 | 2010-03-16 | Citrix Systems, Inc. | Method and apparatus for isolating execution of software applications |
US20060070030A1 (en) * | 2004-09-30 | 2006-03-30 | Laborczfalvi Lee G | Method and apparatus for providing an aggregate view of enumerated system resources from various isolation layers |
US7676813B2 (en) | 2004-09-30 | 2010-03-09 | Citrix Systems, Inc. | Method and system for accessing resources |
US8132176B2 (en) | 2004-09-30 | 2012-03-06 | Citrix Systems, Inc. | Method for accessing, by application programs, resources residing inside an application isolation scope |
US20070067255A1 (en) * | 2004-09-30 | 2007-03-22 | Bissett Nicholas A | Method and system for accessing resources |
US20060070029A1 (en) * | 2004-09-30 | 2006-03-30 | Citrix Systems, Inc. | Method and apparatus for providing file-type associations to multiple applications |
US7853947B2 (en) | 2004-09-30 | 2010-12-14 | Citrix Systems, Inc. | System for virtualizing access to named system objects using rule action associated with request |
US8117559B2 (en) | 2004-09-30 | 2012-02-14 | Citrix Systems, Inc. | Method and apparatus for virtualizing window information |
US20060074989A1 (en) * | 2004-09-30 | 2006-04-06 | Laborczfalvi Lee G | Method and apparatus for virtualizing object names |
US20060085789A1 (en) * | 2004-09-30 | 2006-04-20 | Laborczfalvi Lee G | Method and apparatus for moving processes between isolation environments |
US20060090171A1 (en) * | 2004-09-30 | 2006-04-27 | Citrix Systems, Inc. | Method and apparatus for virtualizing window information |
US8302101B2 (en) | 2004-09-30 | 2012-10-30 | Citrix Systems, Inc. | Methods and systems for accessing, by application programs, resources provided by an operating system |
US8042120B2 (en) | 2004-09-30 | 2011-10-18 | Citrix Systems, Inc. | Method and apparatus for moving processes between isolation environments |
US8352964B2 (en) | 2004-09-30 | 2013-01-08 | Citrix Systems, Inc. | Method and apparatus for moving processes between isolation environments |
US20060106770A1 (en) * | 2004-10-22 | 2006-05-18 | Vries Jeffrey D | System and method for predictive streaming |
US20060123185A1 (en) * | 2004-11-13 | 2006-06-08 | De Vries Jeffrey | Streaming from a media device |
US20060168294A1 (en) * | 2004-11-13 | 2006-07-27 | De Vries Jeff | Hybrid local/remote streaming |
US8359591B2 (en) | 2004-11-13 | 2013-01-22 | Streamtheory, Inc. | Streaming from a media device |
US8949820B2 (en) | 2004-11-13 | 2015-02-03 | Numecent Holdings, Inc. | Streaming from a media device |
US20060224544A1 (en) * | 2005-03-04 | 2006-10-05 | Keith Robert O Jr | Pre-install compliance system |
US8234238B2 (en) | 2005-03-04 | 2012-07-31 | Maxsp Corporation | Computer hardware and software diagnostic and report system |
US7624086B2 (en) | 2005-03-04 | 2009-11-24 | Maxsp Corporation | Pre-install compliance system |
US8589323B2 (en) | 2005-03-04 | 2013-11-19 | Maxsp Corporation | Computer hardware and software diagnostic and report system incorporating an expert system and agents |
US20060224545A1 (en) * | 2005-03-04 | 2006-10-05 | Keith Robert O Jr | Computer hardware and software diagnostic and report system |
US7512584B2 (en) | 2005-03-04 | 2009-03-31 | Maxsp Corporation | Computer hardware and software diagnostic and report system |
US11121928B2 (en) | 2005-03-23 | 2021-09-14 | Numecent Holdings, Inc. | Opportunistic block transmission with time constraints |
US9300752B2 (en) | 2005-03-23 | 2016-03-29 | Numecent Holdings, Inc. | Opportunistic block transmission with time constraints |
US9716609B2 (en) | 2005-03-23 | 2017-07-25 | Numecent Holdings, Inc. | System and method for tracking changes to files in streaming applications |
US8527706B2 (en) | 2005-03-23 | 2013-09-03 | Numecent Holdings, Inc. | Opportunistic block transmission with time constraints |
US10587473B2 (en) | 2005-03-23 | 2020-03-10 | Numecent Holdings, Inc. | Opportunistic block transmission with time constraints |
US8898391B2 (en) | 2005-03-23 | 2014-11-25 | Numecent Holdings, Inc. | Opportunistic block transmission with time constraints |
US20060230175A1 (en) * | 2005-03-23 | 2006-10-12 | De Vries Jeffrey | System and method for tracking changes to files in streaming applications |
US9781007B2 (en) | 2005-03-23 | 2017-10-03 | Numecent Holdings, Inc. | Opportunistic block transmission with time constraints |
US20060218165A1 (en) * | 2005-03-23 | 2006-09-28 | Vries Jeffrey De | Explicit overlay integration rules |
US20070254742A1 (en) * | 2005-06-06 | 2007-11-01 | Digital Interactive Streams, Inc. | Gaming on demand system and methodology |
US20070067321A1 (en) * | 2005-09-19 | 2007-03-22 | Bissett Nicholas A | Method and system for locating and accessing resources |
US8095940B2 (en) | 2005-09-19 | 2012-01-10 | Citrix Systems, Inc. | Method and system for locating and accessing resources |
US8131825B2 (en) | 2005-10-07 | 2012-03-06 | Citrix Systems, Inc. | Method and a system for responding locally to requests for file metadata associated with files stored remotely |
US7779034B2 (en) | 2005-10-07 | 2010-08-17 | Citrix Systems, Inc. | Method and system for accessing a remote file in a directory structure associated with an application program executing locally |
US20070083610A1 (en) * | 2005-10-07 | 2007-04-12 | Treder Terry N | Method and a system for accessing a plurality of files comprising an application program |
US20070083620A1 (en) * | 2005-10-07 | 2007-04-12 | Pedersen Bradley J | Methods for selecting between a predetermined number of execution methods for an application program |
US20070083522A1 (en) * | 2005-10-07 | 2007-04-12 | Nord Joseph H | Method and a system for responding locally to requests for file metadata associated with files stored remotely |
US20070083501A1 (en) * | 2005-10-07 | 2007-04-12 | Pedersen Bradley J | Method and system for accessing a remote file in a directory structure associated with an application program executing locally |
US10511495B2 (en) | 2006-05-24 | 2019-12-17 | Microsoft Technology Licensing, Llc | Applications and services as a bundle |
US20070274315A1 (en) * | 2006-05-24 | 2007-11-29 | Keith Robert O | System for and method of securing a network utilizing credentials |
US9160735B2 (en) | 2006-05-24 | 2015-10-13 | Microsoft Technology Licensing, Llc | System for and method of securing a network utilizing credentials |
US9584480B2 (en) | 2006-05-24 | 2017-02-28 | Microsoft Technology Licensing, Llc | System for and method of securing a network utilizing credentials |
US8898319B2 (en) | 2006-05-24 | 2014-11-25 | Maxsp Corporation | Applications and services as a bundle |
US8811396B2 (en) | 2006-05-24 | 2014-08-19 | Maxsp Corporation | System for and method of securing a network utilizing credentials |
US9893961B2 (en) | 2006-05-24 | 2018-02-13 | Microsoft Technology Licensing, Llc | Applications and services as a bundle |
US9906418B2 (en) | 2006-05-24 | 2018-02-27 | Microsoft Technology Licensing, Llc | Applications and services as a bundle |
US8656270B2 (en) * | 2006-08-18 | 2014-02-18 | International Business Machines Corporation | Change-oriented spreadsheet application |
US20080046804A1 (en) * | 2006-08-18 | 2008-02-21 | International Business Machines Corporation | Change-oriented spreadsheet application |
US10057268B2 (en) | 2006-10-23 | 2018-08-21 | Numecent Holdings, Inc. | Rule-based application access management |
US9054962B2 (en) | 2006-10-23 | 2015-06-09 | Numecent Holdings, Inc. | Rule-based application access management |
US20080109876A1 (en) * | 2006-10-23 | 2008-05-08 | Endeavors Technologies, Inc. | Rule-based application access management |
US8782778B2 (en) | 2006-10-23 | 2014-07-15 | Numecent Holdings, Inc. | Rule-based application access management |
US8752128B2 (en) | 2006-10-23 | 2014-06-10 | Numecent Holdings, Inc. | Rule-based application access management |
US9699194B2 (en) | 2006-10-23 | 2017-07-04 | Numecent Holdings, Inc. | Rule-based application access management |
US11451548B2 (en) | 2006-10-23 | 2022-09-20 | Numecent Holdings, Inc | Rule-based application access management |
US9825957B2 (en) | 2006-10-23 | 2017-11-21 | Numecent Holdings, Inc. | Rule-based application access management |
US8261345B2 (en) | 2006-10-23 | 2012-09-04 | Endeavors Technologies, Inc. | Rule-based application access management |
US9380063B2 (en) | 2006-10-23 | 2016-06-28 | Numecent Holdings, Inc. | Rule-based application access management |
US10356100B2 (en) | 2006-10-23 | 2019-07-16 | Numecent Holdings, Inc. | Rule-based application access management |
US9571501B2 (en) | 2006-10-23 | 2017-02-14 | Numecent Holdings, Inc. | Rule-based application access management |
US9054963B2 (en) | 2006-10-23 | 2015-06-09 | Numecent Holdings, Inc. | Rule-based application access management |
US8275750B2 (en) * | 2006-11-08 | 2012-09-25 | International Business Machines Corporation | Method to efficiently use the disk space while unarchiving |
US20080109498A1 (en) * | 2006-11-08 | 2008-05-08 | Pramod Achyut Bhandiwad | Method to efficiently use the disk space while unarchiving |
US9645900B2 (en) | 2006-12-21 | 2017-05-09 | Microsoft Technology Licensing, Llc | Warm standby appliance |
GB2446832A (en) * | 2007-02-23 | 2008-08-27 | Quantel Ltd | A file server system |
US20150154169A1 (en) * | 2007-08-03 | 2015-06-04 | Dietmar Theobald | Annotation processing of computer files |
US10509854B2 (en) * | 2007-08-03 | 2019-12-17 | Sap Se | Annotation processing of computer files |
US9021494B2 (en) | 2007-10-20 | 2015-04-28 | Citrix Systems, Inc. | Method and system for communicating between isolation environments |
US9009721B2 (en) | 2007-10-20 | 2015-04-14 | Citrix Systems, Inc. | Method and system for communicating between isolation environments |
US9009720B2 (en) | 2007-10-20 | 2015-04-14 | Citrix Systems, Inc. | Method and system for communicating between isolation environments |
US8171483B2 (en) | 2007-10-20 | 2012-05-01 | Citrix Systems, Inc. | Method and system for communicating between isolation environments |
US20090106780A1 (en) * | 2007-10-20 | 2009-04-23 | Nord Joseph | Method and system for communicating between isolation environments |
US9448858B2 (en) | 2007-10-26 | 2016-09-20 | Microsoft Technology Licensing, Llc | Environment manager |
US8422833B2 (en) | 2007-10-26 | 2013-04-16 | Maxsp Corporation | Method of and system for enhanced data storage |
US9092374B2 (en) | 2007-10-26 | 2015-07-28 | Maxsp Corporation | Method of and system for enhanced data storage |
US8661197B2 (en) | 2007-11-07 | 2014-02-25 | Numecent Holdings, Inc. | Opportunistic block transmission with time constraints |
US9436578B2 (en) | 2007-11-07 | 2016-09-06 | Numecent Holdings, Inc. | Deriving component statistics for a stream enabled application |
US10445210B2 (en) | 2007-11-07 | 2019-10-15 | Numecent Holdings, Inc. | Deriving component statistics for a stream enabled application |
US8892738B2 (en) | 2007-11-07 | 2014-11-18 | Numecent Holdings, Inc. | Deriving component statistics for a stream enabled application |
US20090119644A1 (en) * | 2007-11-07 | 2009-05-07 | Endeavors Technologies, Inc. | Deriving component statistics for a stream enabled application |
US20090119458A1 (en) * | 2007-11-07 | 2009-05-07 | Endeavors Technologies, Inc. | Opportunistic block transmission with time constraints |
US8024523B2 (en) | 2007-11-07 | 2011-09-20 | Endeavors Technologies, Inc. | Opportunistic block transmission with time constraints |
US11119884B2 (en) | 2007-11-07 | 2021-09-14 | Numecent Holdings, Inc. | Deriving component statistics for a stream enabled application |
US11740992B2 (en) | 2007-11-07 | 2023-08-29 | Numecent Holdings, Inc. | Deriving component statistics for a stream enabled application |
US8583816B2 (en) * | 2007-12-18 | 2013-11-12 | Electronics And Telecommunications Research Institute | System for providing streaming-based portable application under selective conditions |
US20100268842A1 (en) * | 2007-12-18 | 2010-10-21 | Electronics And Telecommunications Research Institute | System and method for providing streaming-based portable application |
US20090172160A1 (en) * | 2008-01-02 | 2009-07-02 | Sepago Gmbh | Loading of server-stored user profile data |
US7917902B2 (en) * | 2008-03-21 | 2011-03-29 | Symantec Corporation | Archive stream based install |
US20090240745A1 (en) * | 2008-03-21 | 2009-09-24 | George Stahl | Archive stream based install |
EP2104039A1 (en) | 2008-03-21 | 2009-09-23 | Symantec Corporation | Archive stream based install |
US8060479B1 (en) | 2008-03-28 | 2011-11-15 | Symantec Corporation | Systems and methods for transparently restoring data using file streaming |
US7882342B1 (en) | 2008-03-31 | 2011-02-01 | Symantec Corporation | Systems and methods for imaging a computer system |
US8024382B2 (en) * | 2009-01-20 | 2011-09-20 | Autodesk, Inc. | Dynamic manipulation of archive files |
US20100185690A1 (en) * | 2009-01-20 | 2010-07-22 | Autodesk, Inc. | Dynamic manipulation of archive files |
US20100281102A1 (en) * | 2009-05-02 | 2010-11-04 | Chinta Madhav | Methods and systems for launching applications into existing isolation environments |
US8090797B2 (en) | 2009-05-02 | 2012-01-03 | Citrix Systems, Inc. | Methods and systems for launching applications into existing isolation environments |
US8326943B2 (en) | 2009-05-02 | 2012-12-04 | Citrix Systems, Inc. | Methods and systems for launching applications into existing isolation environments |
US9967298B2 (en) | 2011-03-08 | 2018-05-08 | Rackspace Us, Inc. | Appending to files via server-side chunking and manifest manipulation |
US20120233522A1 (en) * | 2011-03-08 | 2012-09-13 | Rackspace Us, Inc. | Method for handling large object files in an object storage system |
US20120233228A1 (en) * | 2011-03-08 | 2012-09-13 | Rackspace Us, Inc. | Appending to files via server-side chunking and manifest manipulation |
US8990257B2 (en) * | 2011-03-08 | 2015-03-24 | Rackspace Us, Inc. | Method for handling large object files in an object storage system |
US9306988B2 (en) * | 2011-03-08 | 2016-04-05 | Rackspace Us, Inc. | Appending to files via server-side chunking and manifest manipulation |
US9696981B2 (en) * | 2011-04-27 | 2017-07-04 | Cambridge Semantics, Inc. | Incremental deployment of computer software program logic |
US20120278902A1 (en) * | 2011-04-27 | 2012-11-01 | Cambridge Semantics, Inc. | Incremental deployment of computer software program logic |
US11296962B2 (en) * | 2011-06-21 | 2022-04-05 | The Nielsen Company (Us), Llc | Monitoring streaming media content |
US11784898B2 (en) | 2011-06-21 | 2023-10-10 | The Nielsen Company (Us), Llc | Monitoring streaming media content |
US11252062B2 (en) | 2011-06-21 | 2022-02-15 | The Nielsen Company (Us), Llc | Monitoring streaming media content |
US9402114B2 (en) | 2012-07-18 | 2016-07-26 | Cisco Technology, Inc. | System and method for providing randomization in adaptive bitrate streaming environments |
US20150278374A1 (en) * | 2012-10-11 | 2015-10-01 | Thomson Licensing | Solution for distributed application life-cycle management |
US10229207B2 (en) * | 2012-10-11 | 2019-03-12 | Thomson Licensing | Solution for distributed application life-cycle management |
US20140119428A1 (en) * | 2012-10-26 | 2014-05-01 | Cisco Technology, Inc. | System and method for providing intelligent chunk duration |
US9516078B2 (en) * | 2012-10-26 | 2016-12-06 | Cisco Technology, Inc. | System and method for providing intelligent chunk duration |
US10965732B2 (en) | 2013-01-17 | 2021-03-30 | Apple Inc. | Streaming zip |
US9420070B2 (en) * | 2013-01-17 | 2016-08-16 | Apple Inc. | Streaming zip |
US10250670B2 (en) * | 2013-01-17 | 2019-04-02 | Apple Inc. | Streaming zip |
US20190199775A1 (en) * | 2013-01-17 | 2019-06-27 | Apple Inc. | Streaming zip |
US20140201316A1 (en) * | 2013-01-17 | 2014-07-17 | Apple Inc. | Streaming zip |
US20210200723A1 (en) * | 2013-02-01 | 2021-07-01 | Google Llc | Accessing objects in hosted storage |
US10956376B2 (en) * | 2013-02-01 | 2021-03-23 | Google Llc | Accessing objects in hosted storage |
US20190005062A1 (en) * | 2013-02-01 | 2019-01-03 | Google Llc | Accessing objects in hosted storage |
US20150088965A1 (en) * | 2013-09-26 | 2015-03-26 | Christoph Pakulski | Systems and methods for selective retrieval of adaptive bitrate streaming media |
US10015222B2 (en) * | 2013-09-26 | 2018-07-03 | Arris Canada, Inc. | Systems and methods for selective retrieval of adaptive bitrate streaming media |
US20170060565A1 (en) * | 2015-08-20 | 2017-03-02 | Appdome Ltd. | Method for creating a revised application by adding code functionality to an existing application executable |
US10310870B2 (en) * | 2015-08-20 | 2019-06-04 | Appdome Ltd. | Method for creating a revised application by adding code functionality to an existing application executable |
US10949398B2 (en) | 2017-03-29 | 2021-03-16 | Commvault Systems, Inc. | Synchronization operations for network-accessible folders |
US11294663B2 (en) | 2017-10-17 | 2022-04-05 | Appdome Ltd. | Automated mobile application integration |
US10606582B2 (en) | 2017-10-17 | 2020-03-31 | Appdome Ltd. | Automated mobile application integration |
US11243748B2 (en) | 2018-11-08 | 2022-02-08 | Appdome Ltd. | Artificial intelligence mobile integration |
US11831631B2 (en) | 2018-11-08 | 2023-11-28 | Appdome Ltd. | Single sign-on for mobile applications using direct brokering for identity authentication |
US20210055938A1 (en) * | 2019-08-23 | 2021-02-25 | Microsoft Technology Licensing, Llc | Hydration in virtual machines |
Also Published As
Publication number | Publication date |
---|---|
JP2002521745A (en) | 2002-07-16 |
WO2000005637A2 (en) | 2000-02-03 |
EP1097416A2 (en) | 2001-05-09 |
CA2361342A1 (en) | 2000-02-03 |
US6311221B1 (en) | 2001-10-30 |
EP1097416A4 (en) | 2007-05-02 |
IL141015A0 (en) | 2002-02-10 |
WO2000005637A3 (en) | 2000-10-12 |
AU5104699A (en) | 2000-02-14 |
JP4607320B2 (en) | 2011-01-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20020042833A1 (en) | Streaming of archive files | |
US7606924B2 (en) | Method and apparatus for determining the order of streaming modules | |
US6975595B2 (en) | Method and apparatus for monitoring and logging the operation of a distributed processing system | |
US6788648B1 (en) | Method and apparatus for load balancing a distributed processing system | |
US6574618B2 (en) | Method and system for executing network streamed application | |
US7484007B2 (en) | System and method for partial data compression and data transfer | |
US7197570B2 (en) | System and method to send predicted application streamlets to a client device | |
US5623656A (en) | Script-based data communication system and method utilizing state memory | |
US7051315B2 (en) | Network streaming of multi-application program code | |
US20030034905A1 (en) | System and method for encoding and decoding data files | |
US20070288556A1 (en) | System and Method for Encoding and Decoding Data Files | |
WO2000043919A1 (en) | Link presentation and data transfer | |
JP4448026B2 (en) | How to send HTML application | |
WO2004023322A1 (en) | Method and apparatus for converting data between two dissimilar systems | |
CN116074377A (en) | Information processing method, apparatus, and computer-readable storage medium | |
WO2003010907A1 (en) | Load balancing a distributed processing system | |
WO2004023326A1 (en) | Method and apparatus for generating unique id packets in a distributed processing system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
AS | Assignment |
Owner name: APPSTREAM, INC., CALIFORNIA Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:HENDLER, DANNY;SHOSHANI, AVISHAI;RAZ, URI;AND OTHERS;REEL/FRAME:012235/0962;SIGNING DATES FROM 20010227 TO 20010603 |
|
STCB | Information on status: application discontinuation |
Free format text: ABANDONED -- FAILURE TO RESPOND TO AN OFFICE ACTION |
|
AS | Assignment |
Owner name: SYMANTEC CORPORATION, CALIFORNIA Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:APPSTREAM, INC.;REEL/FRAME:021435/0558 Effective date: 20080801 |