Application Data Exchange System
The modular architecture with a data grammar and lightweight data format addresses configuration and latency issues in cross-device data visualization, enabling efficient data synchronization and real-time updates across diverse devices.
Patent Information
- Application Number
- JP2025519606
- Authority / Receiving Office
- JP · JP
- Patent Type
- Applications
- Current Assignee / Owner
- Priority Date
- 2022-10-04
- Filing Date
- 2023-10-03
- Publication Date
- 2025-11-05
AI Technical Summary
Existing cross-device data visualization applications are difficult to configure, particularly in web-based environments, and struggle with latency issues when handling large data sets, while lacking efficient communication protocols for diverse data formats and devices.
A modular architecture with a data grammar and ultra-lightweight data format for cross-device data visualization, enabling efficient data transformation and synchronization across multiple devices using a connector module that communicates data processes rather than large data blocks.
Facilitates seamless, low-latency, and efficient data visualization across multiple devices, allowing real-time updates and collaboration without the need for extensive data transfer, enhancing user engagement and productivity.
Smart Images

Figure 2025536231000001_ABST
Abstract
Description
[Technical Field]
[0001] CROSS-REFERENCE TO RELATED APPLICATIONS This patent application is a PCT international application of U.S. Patent Application No. 17 / 959,842, filed October 4, 2022. This U.S. patent application is a continuation-in-part of U.S. Patent Application No. 15 / 891,055, filed February 7, 2018. U.S. Patent Application No. 15 / 891,055 claims priority to U.S. Provisional Patent Application No. 62 / 455,770 (filed February 7, 2017), U.S. Provisional Patent Application No. 62 / 455,762 (filed February 7, 2017), U.S. Provisional Patent Application No. 62 / 456,806 (filed February 9, 2017), U.S. Provisional Patent Application No. 62 / 457,371 (filed February 10, 2017), U.S. Provisional Patent Application No. 62 / 457,408 (filed February 10, 2017), U.S. Provisional Patent Application No. 62 / 460,161 (filed February 17, 2017), and U.S. Provisional Patent Application No. 62 / 460,163 (filed February 17, 2017). Each of the above parent applications is incorporated by reference.
[0002] The present disclosure relates generally to computer systems, and more particularly to distributed applications and related protocols. [Background technology]
[0003] Data is exploding in many industries. Enterprises' information technology systems are improving, providing low-latency access to vast amounts of structured data (e.g., relational or noSQL databases) and unstructured data (e.g., human-readable documents). Furthermore, sensors and applications are generating new data at an incredible rate. With the shift to paperless offices and the increasing adoption of sensor-enabled industrial equipment and IoT (Internet of Things) appliances, the number of devices creating data is only increasing. And the available data is increasingly being shared through various websites and application program interfaces.
[0004] To make use of this data, many businesses and government agencies use data visualization applications. These applications make it easy to take data (often large amounts) and present it in a way that allows human users to efficiently grasp the information and insights. In some cases, these data visualization applications are used to generate visual graphics such as bar charts, plots, force-directed graphs, Voronoi diagrams, etc. to view the data in a particular way.
[0005] These data visualization applications often support use across multiple devices. Such applications are often configured to share program state across devices to facilitate collaboration on data analysis and presentation. For example, a distributed data visualization application might display an interface on a desktop computer that includes multiple different graphics and tabular data, while a tabletop computer displays a selection of graphs from the desktop interface, potentially updating another display to reflect changes entered on one display. Examples include those described and cited in the following paper (Title: QR-Vis: Embodied Interaction for Cross-Device Visualization, Anonymous authors, Submitted to IEEE InfoVis 2015, Address: http: / / www.umiacs.umd.edu / ~elm / projects / qrvis / qrvis.pdf), the contents of which are incorporated herein by reference as an example of a cross-device data visualization application that can be improved with the techniques described below.
[0006] However, such cross-device data visualization applications are often too difficult and complex for users to configure. This problem is particularly pronounced for web-based data visualization applications. While web-based data visualization applications often benefit from the wide user base of web browsers (thus eliminating the need to install dedicated applications on every device), they are often very difficult for users to configure because reconfiguring the server-side logic is often much more difficult than configuring a dedicated application.
[0007] Furthermore, such cross-device data visualization applications are often not well suited to analyzing large data sets. Many users are quite sensitive to latency; even small delays of, say, 200 milliseconds have been shown to significantly reduce user engagement across many types of applications. However, data visualization often relies on large data sets that devices can take a very long time to access. This problem is often exacerbated in cross-device environments, where all devices in a session are attempting to access the same data.
[0008] Data comes in a myriad of formats, types, and structures, making communication between systems a growing problem. Standards exist, but tend to be industry- and solution-specific. Sharing and integrating data within and across organizations is challenging. The only universal data format is the table, for which there are widely accepted file formats (e.g., CSV) and export from widely used tools such as Excel or popular databases. It's important to note that for simpler things, such as lists of numbers, there is no standard or widely adopted format (which must be "packed" into a table).
[0009] Websites primarily use hyperlinks to connect them. Websites can point to other websites with hyperlinks (for example, with URLs that point to IP addresses determined by DNS, or directly with IP addresses), and HTML works with browsers to provide mechanisms for accessing the referenced websites. These connections often do not allow for the transfer of information from the linked site to the linking document.
[0010] Dimensionality reduction remains a controversial topic in computer science. Various approaches have been proposed and implemented, but they suffer from various shortcomings. Examples include various machine learning techniques for feature discovery, such as analysis of variance (ANOVA), deep convolutional neural networks, and recurrent neural networks. Datasets typically contain a large number of potential relationships, and these techniques are commonly used to determine which relationships are significant. However, approaches like ANOVA often require relatively long processing times when there are a large number of potential relationships. On the other hand, many machine learning techniques lack insight into how the solution was arrived at, potentially hiding implicit assumptions and resulting in unfounded conclusions.
[0011] Mobile applications run on a variety of different computing devices, such as mobile phones, wearable computing devices, and tablet computers. Mobile applications are typically reviewed and distributed by a certification body, such as an application store provider. The certification body often aims to ensure that mobile applications do not perform malicious actions and provides the operating system that runs on the mobile device on which the mobile application runs.
[0012] It is often difficult for application developers and providers to manage deployed mobile application instances. For example, it may be desirable for an application provider to remove or otherwise disable a deployed mobile application instance on a given mobile computing device when certain conditions are met. However, security constraints imposed by certification authorities distributing mobile applications often preclude the use of conventional techniques for managing software after deployment, such as various digital rights management technologies, automated scripts for removing other programs, and the like. Furthermore, many of these conventional techniques are not configured to enable application removal or disabling based on the context of the mobile computing device. Summary of the Invention [Means for solving the problem]
[0013] Some aspects of the technology according to the present disclosure are listed below, but are not limited to these. These and other aspects are described below. 1. Data Visualization Applications
[0014] Some aspects include a process for coordinating a cross-device data visualization session, including: receiving, by a computer system, identifiers of a group of computing devices participating in the cross-device data visualization session; transmitting, by the computer system, instructions to transmit a dataset to each computing device and display a first portion of the dataset; receiving, by the computer system, an interaction with one of the identified computing devices, the one computing device requesting that at least some of the other identified computing devices display a second portion of the dataset that is at least partially different; and transmitting, by the computer system, instructions to display the at least partially different second portion of the dataset to at least some of the other identified computing devices, the instructions being transmitted without transmitting at least some of the second portion after receiving the interaction, the instructions causing at least some of the other identified computing devices to perform instructions on at least some of the second portion of the dataset that are present on at least some of the other identified computing devices, wherein the display of the first portion of the dataset displays a different aspect of the data visualization than the display of the at least partially different second portion of the dataset.
[0015] Some aspects include a process for accessing data in a cross-device data visualization session, the method including receiving identifiers of a group of computing devices participating in the cross-device data visualization session, transmitting a dataset to each computing device and transmitting instructions to display a first portion of the dataset, receiving an interaction with one of the identified computing devices requesting at least some of the other identified computing devices to display an at least partially different second portion of the dataset, and transmitting instructions to at least some of the other identified computing devices to display the at least partially different second portion, the instructions being transmitted without transmitting at least part of the second portion after receiving the interaction.
[0016] Some aspects include a process for coordinating a cross-device data visualization session, the process including receiving information in a first data structure, receiving instructions to transform the information into a second data structure different from the first data structure, selecting, in response to the instructions, a decoder corresponding to the first data structure and an encoder corresponding to the second data structure, and transforming the information from the first data structure to the second data structure using the selected decoder and the selected encoder.
[0017] Some aspects include a process for coordinating a cross-device data visualization session, the process including obtaining a directed graph specifying a plurality of modules executing on a plurality of computers, where edges of the graph indicate communication from one module to another module of the plurality of modules, receiving from a first module of the plurality of modules an output of the first module, analyzing the directed graph to determine whether another module of the plurality of modules has completed processing, and sending an output to a second module of the plurality of modules after determining that the other module has completed processing. 2. Application Layer Protocols
[0018] Some aspects include a process for communicating between websites. The method includes obtaining markup and script that at least partially defines a first web page accessible at a first domain, receiving a request for the first web page from a web browser of a client computing device from a server of the first domain, and transmitting the first web page including the markup and script to the client computing device. The transmitted script includes an asynchronous event handler configured to process a data reception event received via steps to circumvent the browser's same-origin policy and to update a document object model of the first web page based on data received from a server of a second domain different from the first domain via one or more processed data reception events.
[0019] Some embodiments include a process for communicating between websites, the method including: executing, by a computer system, a first web page accessible at a first domain and a second web page accessible at a second domain; receiving, by the computer system, a first data input at the first web page; updating, by the computer system, a first visualization provided at the second web page based on the first data input; and displaying, by the computer system, the updated first visualization at the second web page on a display.
[0020] Some embodiments include a process for preparing a visualization to facilitate subsequent selection in data analysis techniques, the method including: obtaining a dataset having six or more dimensions; identifying numerical dimensions and converting the numerical dimensions into categorical dimensions by quantizing the values of the numerical dimensions; calculating a respective entropy for each dimension value; forming a matrix whose rows and columns each correspond to one of the dimensions, where each dimension uniquely corresponds to at least one row and at least one column, and determining adjacent matrix values by calculating two values between the dimensions at a given row and column of the matrix, the two calculated values being indicated by the given row and column, the two values including information gain values ig(A,B) and ig(B,A), indicating how much entropy is reduced when one variable is divided by the value of the other variable; for each information gain value exceeding a threshold, thinning the matrix by creating a directional relationship; and calculating a network centrality measure for the dimensions of the thinned matrix. 3. Self-Disabling and Self-Deleting Mobile Applications
[0021] Some aspects include a process for disabling or removing a mobile application, the process including obtaining the application including a disabling routine having a disabling criterion, executing the application in response to the disabling routine determining that the criterion is not met at a first time, and inhibiting execution of the application in response to the disabling routine determining that the criterion is not met at the first time.
[0022] With regard to the above paragraphs, some aspects provide a tangible, non-transitory, machine-readable medium storing instructions that, when executed by a data processing apparatus, cause the data processing apparatus to perform operations including the processes described above.
[0023] With regard to the above paragraphs, some embodiments provide a system comprising one or more processors and a memory storing instructions that, when executed by the processor, cause the processor to perform operations of the process described above. [Brief explanation of the drawings]
[0024] This patent or application document contains at least one drawing executed in color. Copies of this patent or patent application publication containing color drawing(s) will be provided by the Office upon request and payment of the necessary fee.
[0025] These and other aspects of the present technology will be better understood by reading this application in conjunction with the following figures, in which like numbers indicate similar or identical elements:
[0026] [Figure 1] Shows an example of using multiple displays in a cross-device data visualization session.
[0027] [Figure 2]Illustrates the relatively large data sizes required to load information onto separate computers, and the smaller data sizes exchanged between computers for synchronization purposes in accordance with some of the techniques disclosed herein.
[0028] [Figure 3] FIG. 1 illustrates a use case where multiple interacting websites operate over a connection protocol.
[0029] [Figure 4] FIG. 1 illustrates a use case for a session that displays data interrelationships as a network of interconnected nodes.
[0030] [Figure 5A] FIG. 10 is a diagram illustrating a case where multiple modules are interconnected and information from one module is sent directly to two other modules.
[0031] [Figure 5B] FIG. 10 is a diagram illustrating a case where multiple modules are interconnected and information from two modules is transmitted to one module.
[0032] [Figure 6] FIG. 1 illustrates data structure relationships enabled through information sharing in accordance with some of the techniques disclosed herein.
[0033] [Figure 7] 1 illustrates an example of a computing device in which the techniques of the present invention may be implemented.
[0034] [Figure 8] FIG. 1 is a schematic diagram illustrating an embodiment of a cross-device data visualization system, in accordance with some embodiments of the present disclosure.
[0035] [Figure 9]9 is a schematic diagram illustrating an embodiment of a client computing device used in the cross-device data visualization system of FIG. 8, in accordance with some embodiments of the present disclosure.
[0036] [Figure 10] 10 is a schematic diagram illustrating an embodiment of a server computing device used in the cross-device data visualization system of FIG. 9, in accordance with some embodiments of the present disclosure.
[0037] [Figure 11] 1 is a flowchart illustrating an embodiment of a cross-device data visualization method, in accordance with some embodiments of the present disclosure.
[0038] [Figure 12] 1 is a schematic diagram illustrating an embodiment of an application data exchange system, in accordance with some embodiments of the present disclosure.
[0039] [Figure 13] 13 is a schematic diagram illustrating an embodiment of a client computing device for use in the application data exchange system of FIG. 12, in accordance with some embodiments of the present disclosure.
[0040] [Figure 14] 13 is a schematic diagram illustrating an embodiment of a server computing device used in the application data exchange system of FIG. 12, in accordance with some embodiments of the present disclosure.
[0041] [Figure 15] 1 is a flow chart illustrating an embodiment of a method for exchanging application data, in accordance with some embodiments of the present disclosure.
[0042] While the invention is susceptible to various modifications and alternative forms, specific embodiments are shown by way of example in the drawings and are herein described in detail. The drawings may not be to scale. It should be understood, however, that the drawings and the detailed description thereunder are not intended to limit the invention to the particular forms disclosed, but on the contrary, are intended to cover all modifications, equivalents, and alternatives falling within the spirit and scope of the invention as defined by the appended claims. DETAILED DESCRIPTION OF THE INVENTION
[0043] To mitigate the problems described herein, the inventors have had to devise solutions and, in some cases just as importantly, recognize problems that others in the fields of computer science, data visualization application development, or human-computer interaction have overlooked (or have not yet foreseen). Indeed, the inventors wish to emphasize the difficulty of recognizing problems in their early stages. These problems will become much more apparent in the future if industry trends continue as the inventors expect. Furthermore, because there are multiple problems addressed, it should be understood that some embodiments are specialized to one problem or another, and that not all embodiments address all of the problems of conventional systems described herein or provide all of the advantages described herein. That is, improvements that solve various permutations of these problems are described below.
[0044] The following describes several inventions that have utility on their own. It is emphasized that these inventions, while synergistic, do not necessarily have to be used together. In other words, the claims should not be interpreted as requiring the presence of each of the inventions described in this patent to be understood. The claims may focus on only one or several of the inventive technologies described herein in combination. Indeed, the inventors intend to file separate versions of this disclosure in separate patent applications, each directed to different aspects of the subject matter described herein. 1. Multi-screen Applications
[0045] Multi-screen applications exist in a variety of contexts, including business intelligence, analytics, and data visualization, but these systems tend to be rigid in that multiple different views are often fixed; new views cannot be created or added on the fly, and adding new views is often technically very difficult.
[0046] The protocol and systems implementing the protocol are described below and are useful in a variety of contexts. Use cases are described with reference to data visualization applications, although many other uses are envisioned. Some embodiments provide a method for creating multi-screen data applications in which multiple business intelligence (BI) dashboards, interactive information visualization applications, and generally any data application, share data across multiple devices to create a multi-screen user experience. In some embodiments, interactions on one screen affect other screens. In some embodiments, adding and removing devices is extremely simple.
[0047] A variety of different devices can be brought together to form multi-screen data applications, including desktop computers, portable computers, tablets, smartphones, smartwatches, virtual reality goggles, etc. In general, this includes any device that can process data, display it on a screen, and obtain user interaction, including Internet of Things (IoT) appliances such as voice-responsive computer hubs, smart TVs, smart door locks, and smart thermostats.
[0048] An example of the result of this integration is a set of screens displaying different content yet behaving and experiencing as a single system. For example, an input on one device may cause both that device's display and the displays of other devices in the group to update to reflect the input. Inputs may include, for example, resizing a graph, selecting a portion of a graph, adjusting a filter, changing how data is presented, or showing different data.
[0049] Embodiments may implement these (and other) techniques with the following features: In some embodiments, each screen belongs to a separate device. In some embodiments, devices can be added and removed organically from multi-screen applications In some embodiments, applications for each device can be developed independently (on different devices, by different developers) In some embodiments, there is no distance limitation and the locations of the devices may be different and separate from each other.
[0050] This method potentially offers many advantages and features. -Analyst developers can build BI dashboards, interactive visualizations, data analysis interfaces, or any data application, and in some embodiments create multiple views that can communicate as a grouped larger (multi-screen and multi-processor) data application. In some embodiments, multiple different analyst users can work synchronously on the same multi-screen data application, collaboratively, and even in the same physical space (each analyst may operate their own device or devices). Other analyst developers may create various data applications that can be seamlessly and organically added or removed from the multi-screen data application. In some cases, each data application is autonomous and useful on its own, but in some embodiments, it can also connect with other data applications (using the same data protocol) or with already completed multi-screen applications. Multi-screen applications can be remote, so in some embodiments analysts in different physical locations can work synchronously and collaboratively on different devices. In some embodiments, in a remote conference, one user may operate one part of a multi-screen application and have it mirrored by another remote user.
[0051] In some embodiments, the system includes a modular architecture. In some embodiments, multiple different data modules (analytical, visual, and often interactive) are connected to share information. A series of data modules are grouped to form a layout and create a data application (BI dashboard or interactive visualization). User interaction with one module generates new data that can be used by other modules. An example of a module configuration is a "filter cascade," where multiple modules are arranged in sequence, each filtering data that is received by the successive module. Other arrangements are also possible, such as a configuration in which each module is connected to every other module.
[0052] In some embodiments, modules are connected to each other through an application connector module that can receive data from other modules (e.g., directly via a WebRTC data connection, or indirectly via a server that manages the state of the cross-device session, possibly via periodic pull requests or pushes from the sender, e.g., over a duplex connection) and send data to other modules within or outside the device (e.g., over duplex communication via WebSockets or other previously described techniques, over secure internet sockets, etc.). This module, in some embodiments, is a connector that facilitates the creation of meta-applications. This module sends and receives efficiently formatted data.
[0053] In some embodiments, each computing device in a given session may download from a server, using a browser or dedicated application in which one or more modules execute, an application connector module / controller and a manifest listing the modules executing on each device (which may be parsed to obtain corresponding modules). Multiple such devices may form a cross-device session, for example, by registering their ports and IP addresses with each other or with a server (e.g., using a WebRTC data connection network to facilitate relatively fast communication without having to go through a server, or by routing the connection through the server). Some modules may ingest data, process the data, and present views of the data (e.g., graphical visualizations). The views include various user inputs (and corresponding event handlers) that allow user interaction. In some embodiments, users in a session may be assigned various roles (which may change over time). For example, a user in a designated role may enter commands to a corresponding computing device that add other computing devices to the session and cause the added computing devices to download one or more modules for device-specific data visualization. Such displays may be pre-scripted, for example for presentations.
[0054] In some embodiments, the modular architecture implements efficient data formats for cross-device data visualization interaction as described in several U.S. provisional patent applications incorporated by reference above, particularly U.S. Provisional Patent Application No. 62 / 455,770 (entitled "Efficient Transformation Data Protocols").
[0055] In some embodiments, a user may modify the data visualization by interacting with a user interface on the device, for example, by selecting an icon, changing the view of the data, zooming in or out on a graph, changing the data being displayed, etc.
[0056] Some embodiments implement a data model that is expected to be more efficient than prior art for connecting multiple data applications that access the same data set. Rather than transferring large blocks of data, in some embodiments, the data sent and received by various computing devices (e.g., connector modules in the modular architecture described below) describes a series of data processes for obtaining the desired data set from the data source.
[0057] It is common for multiple systems or applications to load the same data and process it in a synchronized manner. It is possible, though less common, for these applications to communicate with each other and for the transformation process (e.g., filtering) of one application to be replicated in another. These applications may run on several different client computers or servers.
[0058] Typically, when applying transformations to large data sets, even if the system performs filtering or dimensionality reduction, the resulting data set is still quite large, making communication between different applications that are intended to synchronize these transformations difficult, especially when those applications are running on different devices or servers.
[0059] Some embodiments implement a protocol based on the ultra-lightweight data format for communicating data transformation information, such as filtering information, between different applications, which is expected to speed up synchronization between connected applications in some implementations.
[0060] Rather than transferring large blocks of data, in some embodiments, the data sent and received by the connector module describes a series of data processes to obtain the desired data set from the data source. An app that receives a transformation command from the user quickly disseminates this small amount of information to connected apps. From the user's perspective, in some embodiments, the user experiences a series of connected apps rather than a single app.
[0061] Figure 2 shows an example. Two data applications, each running on a separate PC 201, operate on the same large table 202. In one application, a user selects a category value for filtering—for example, California from a list of states. The resulting table is smaller, but still large. Rather than sending the resulting table to the connected data application, the connector module sends information 203 about how the large table was filtered. This information is so lightweight that it reaches the second application immediately. This lightweight nature of the information is illustrated by the thin connections between the computers in Figure 2. A second data application running on a second PC 201 receives the data formatted as filtering information. The second module then performs the filtering and generates the desired table, which is then visualized. The user can also switch terminals and operate on different screens. The user is operating on a connected system in which all parts are synchronized (with zero or imperceptible latency).
[0062] In some embodiments, this protocol is also suitable for communications between client terminals and servers, and is not limited to peer-to-peer communications applications (and no other statements herein are intended to be limiting).
[0063] This highly efficient conversion protocol, in some embodiments, involves a set of server-side and client-side functions that combine, for example, multiple filtering and conversion objects to convert to SQL and vice versa.
[0064] Each computing device may also maintain a cached data set unrelated to the data being visualized. For example, the data set may be larger than the data currently presented by each device, and the presented data may be a portion of the cached data set. Embodiments may receive a filter (or some other transformation message), determine that the transformation can be performed on the data in the cached data, and potentially perform the transformation without the delay of requesting new or different data. A transformation may involve more data than is in the cached data; some embodiments may display a portion of the data, request the remaining data, and update the display as it is received. In some embodiments, the computing device of the user leading the presentation may specify data for other devices in the session to maintain in their cached memory. As user interactions with the data visualization occur, updates to the data visualization are based on the cached data and are expected to complete relatively quickly.
[0065] In browser-based implementations, the user device may limit the amount of memory available to a given domain (e.g., local storage is often limited to 5-10MB per domain for security reasons to prevent shady websites from impairing device performance). In some embodiments, access to additional memory on the client device may be via the IndexedDB API, in which case the client device may index the data to speed up queries. In some embodiments, data may be kept encrypted on the client device (and transmitted encrypted), using, for example, the WebCrypto API in some browser-based implementations.
[0066] Some embodiments may store cache data in both a local storage object and the browser's native cache memory to provide more space for larger data sets. In some cases, the local storage object provides significantly faster access speeds (e.g., less than one-third the latency) than the native browser cache. As a result, some embodiments may split data between these two client-side storage formats, placing more frequently accessed data in the local storage object (e.g., data adjacent to the data currently displayed in a data visualization in the spatial dimensions of the display to accommodate zooming or panning, or in a graph to accommodate pivoting).
[0067] In some cases, different displays may have different sizes, different computing devices may have different computing resources, and in some embodiments, content negotiation may be performed to select a module for a device based on resources, or to select display attributes for a given module based on similar factors.
[0068] Some embodiments implement an engine that manages the flow of data among a series of connected modules that receive and provide data in a particular structure.
[0069] Based on a modular data grammar (examples of which are described below) consisting of a small number (e.g., less than 30) of data structures and a scalable set of modules that transform those data structures into other data structures, the data modular engine of some embodiments can execute sophisticated data applications.
[0070] Each module, in some embodiments, receives the output of other modules and provides output to other modules. In some embodiments, each module has rules for mandatory and optional data input (inflow) and optional data output. Each input and result, in some embodiments, resides in a data structure from a grammar.
[0071] In some embodiments, a series of modules are connected to form a directed graph. A simple, typical graph has no loops and modules have only one output. Modules are activated and provide data for one or more of the following reasons, including: - Loading external data (e.g. loader module loads CSV and provides tables) -Getting data from a sensor (e.g. a photocell transmitting its change in resistance over time, providing a number or list of numbers) -Getting user actions (e.g., a module gets a selection from a list or the mouse position) - Send data periodically (e.g., a counter) -Generally, it receives data, processes it, and outputs the results.
[0072] In some embodiments, the engine receives data based on its outputs and supplies data to its inputs. However, in some embodiments, rather than performing this process linearly, the engine analyzes the structure of the network, holds on to some of the data, and waits for other modules to process the data and supply results. In some embodiments, the purpose of the engine is to reduce (or even eliminate) the likelihood of a module being invoked multiple times.
[0073] Figures 5A and 5B show two different cases. In the first case shown in Figure 5A, three modules are connected in a simple graph. When A wakes up and outputs data, B and C receive the data and wake up immediately. In the second case shown in Figure 5B, which is a bit more complex, the engine detects that A wakes up and C will receive the results produced by A and B, so rather than wake up B and C, it wakes up only B, and when B outputs data, C now wakes up and receives from A and B. This way, C only wakes up once. It is the more complex cases that the engine manages to ensure efficient processing at all times, and in some embodiments, specifically wakes up a module only once after all predecessors have been woken up.
[0074] In some embodiments, the engine is implemented in Javascript. However, the engine is programming language agnostic, and the set of rules can be developed in any language. Similarly, modules can be built in any programming language and installed on any type of machine, including computers, servers, phones, or any object with a chip, such as an Internet of Things (IoT) appliance. Any engine can orchestrate any set of modules in any device, as long as these modules receive and provide data in the above-mentioned data format that conforms to the data grammar.
[0075] In one example, two engines (which may be deployed on different machines and in different programming languages) may work together to co-develop a higher-level engine that operates according to the same rules. In other words, in some embodiments, engine logic is additive. In one configuration, an engine on a computer may work with an engine on a server to orchestrate processes on the computer and the server.
[0076] Embodiments of the present invention are expected to have great potential in the Internet of Things. Specifically, multiple devices can collaborate autonomously when one or more of them run an engine. Many other use cases are possible. In some embodiments, the engine represents a new paradigm for distributed computing.
[0077] Some embodiments instantiate a series of data structures (e.g., each structure having a unique format) by combining them with a series of operations. The data structures, in some embodiments, have the following characteristics: -Independently store information in its data structure (e.g., number list, date list, point or polygon) -Each can be converted to many other things (e.g., a date can be converted to a number by counting the number of milliseconds since a date, so a list of dates can be converted to a list of numbers) - Combining things to create something else (for example, you can combine multiple lists, such as a list of text, a list of dates, and a list of numbers, to create a table, or, as another example, you can connect points to create a polygon) -Generally, these structures are combined to produce meaningful data.
[0078] The number of data structures is small, around 25. This number is comparable to the number of phonemes in many languages, including English, the number of characters in many writing systems, and the number of amino acids that make up human proteins, and can be interpreted as defining an ideal balance between simplicity and overwhelming combinatorial complexity, and such an analogy is not unfounded.
[0079] A data grammar is based on a small list of such data structures and is completed by a set of modules that operate on these data structures. The modules fall into different categories. - Decoder: convert raw data (text) into data structures (e.g. csv to table) -Encoder: convert data structures to text -Transformers: convert one data structure to another (e.g., converting a date to a number), often reversible since no information is lost in the process. -Assembler: Select multiple data structures and create another data structure (preserving information) -Disassembler: Split one data structure into multiple data structures (preserving information) - Operator: takes one or more data structures and generates a data structure based on a specific algorithm or process (no information is stored) -Control: receives a data structure and provides it to a human for specific selection, filtering, or transformation operations (e.g., selecting a range of numbers from a list of numbers). -Interactive visualization: Take a data structure and create an interactive visualization, allowing human intervention to create the data structure.
[0080] The data structures, in combination with the modules, form a grammar in some embodiments, and in some embodiments each module receives data structures and provides at least one data structure, thereby enabling some embodiments to provide a stream of data that can be transformed, enriched, and connected (e.g., constantly) to other modules.
[0081] While visualizations are typically "dead ends" that reach human perception and do not generate new data, in this grammar, in some embodiments this is not the case.
[0082] An example is shown in Figure 6. If these data structures become internal standards within an organization, it will be easier to share information and connect systems (analysis and visualization software and middleware, databases, and interfaces), enabling infinite combinations that are expected to significantly improve productivity. Possible combinations are shown in Figure 6. Bold lines represent relationships, and thin lines represent transformations. Adopting this grammar and using compatible systems will lead to faster processing, improved communication, and better collaboration.
[0083] Figure 1 shows one use case where four different display screens show three different views of a single data set. Interacting with one of these displays, for example to select a given data point or cluster icon, may automatically update the other displays to show a corresponding view on the data.
[0084] FIG. 8 illustrates an embodiment of a cross-device data visualization session system 800. In the illustrated embodiment, the cross-device data visualization session system 800 includes a client computing device 810 and a client computing device 820 (e.g., autonomous / non-autonomous vehicles, transportation devices, tablets, laptops, smartphones, wearable devices, and / or other client computing devices that may become apparent to those skilled in the art in light of this disclosure). The client computing device 810 or 820 may be used to collect, receive, or transmit data present on the client computing device 810 or 820 to or from a central monitoring station for further analysis or processing using common networking and communication technologies (typically identifying adaptive multi-bandwidth approaches developed in 5G or beyond). To this end, the client computing device 810 or the client computing device 820 may include a communication unit having one or more transceivers, thereby enabling the client computing device 810 and the client computing device 820 to communicate with each other and with a server computing device 840 via a network 850. Thus, as described in more detail below, client computing device 810 may communicate directly or indirectly with client computing device 820. "Communicating," as used herein, including variations thereof, includes direct communication and / or indirect communication through one or more intermediary components, and does not necessarily require direct physical (e.g., wired and / or wireless) communication and / or constant communication, but rather further includes selective communication at regular or irregular intervals, as well as one-time events.
[0085] For example, client computing device 810 or client computing device 820 of cross-device data visualization session system 800 of Figure 8 may include a first (e.g., relatively long-range) transceiver(s) to enable client computing device 810 or client computing device 820 to communicate with network 850 via communication connection 825a and communication connection 825b. Communication connection 825a may provide communication channel 828a between client computing device 810 and server computing device 840, and communication connection 825b may provide communication channel 828b between client computing device 820 and server computing device 840. Communication channels 828a and 828b may be created according to a full-duplex communication protocol, such as, for example, WebSocket and / or any other full-duplex communication protocol that would be apparent to one of ordinary skill in the art with reference to this disclosure. Network 850 may be implemented by an exemplary mobile cellular network, such as a third-generation (3G), fourth-generation (4G), or fifth-generation (5G) wireless network, such as a Long Term Evolution (LTE) network. However, in addition to or instead, in some examples, network 850 may be implemented by one or more other communication networks, such as, but not limited to, a satellite communication network, a microwave wireless network, a wired communication system, a Wi-Fi communication system, and / or other communication networks.
[0086] The client computing device 810 or the client computing device 820 may further include a second (e.g., relatively short-range) transceiver(s) that allows the client computing device 810 and the client computing device 820 to communicate with each other via the direct communication connection 830. Furthermore, the second transceiver(s) may be used for client-to-client computing device communications between the client computing device 810 and the client computing device 820. In the illustrated example of FIG. 8, such second transceiver(s) is implemented by a type of transceiver that supports relatively short-range wireless networking (e.g., operating at shorter distances than the long-range transceiver(s)). For example, such second transceiver(s) may be implemented by a Wi-Fi transceiver (e.g., via the Wi-Fi Direct protocol), a Bluetooth® transceiver, an infrared (IR) transceiver, a Zigbee transceiver, and / or other transceiver(s) configured to enable the client computing device 810 and / or the client computing device 820 to communicate with each other via the communication connection 830 or a local area network (LAN).
[0087] The cross-device data visualization session system 800 may further include or be in communication with a server computing device 840. For example, the server computing device 840 may include one or more servers, storage systems, cloud computing systems, and / or other computing devices (e.g., desktop computing device(s), laptop / notebook computing device(s), tablet computing device(s), mobile phone(s), etc.). The server computing device 840 may be coupled to a cross-device data visualization database 845 configured to provide a repository. Examples of the repository may include session member and device identifiers, datasets and data structures for the datasets, instructions, data modules, transformations, and / or any other data or instructions for cross-device data visualization that would be apparent to one of ordinary skill in the art upon review of this disclosure.
[0088] Server computing device 840 may also be configured to process sensor data received from client computing device 810 or client computing device 820 (e.g., sensor data including environmental information, client computing device information, user or data input, or other information) and render instructions to client computing device 810 or client computing device 820. Although cross-device data visualization session system 800 has been shown and described, those skilled in the art with reference to this disclosure will recognize that the teachings of this disclosure will be beneficial to a variety of cross-device data visualization session systems that will be apparent to those skilled in the art with reference to this disclosure, and as such, various variations on the number, types, and orientations of devices included in cross-device data visualization session system 800 are also within the scope of this disclosure.
[0089] FIG. 9 illustrates an embodiment of a client computing device 900, which may be client computing device 810 or 820 described above with reference to FIG. 8. In the illustrated embodiment, client computing device 900 includes a housing 902 that houses components of client computing device 900, some of which are shown in FIG. 9. For example, housing 902 may house a processing system (not shown) and a non-transitory memory system (not shown) that includes instructions. When the instructions are executed by the processing system, the processing system provides a cross-device data visualization application 904 configured to perform a cross-device data visualization application or client computing device functions described below. The cross-device data visualization application 904 may include one or more data sub-applications 904a (also referred to herein as data modules). The cross-device data visualization application 904 and data sub-applications 904a may be distributed across client computing devices 810 and 820 of FIG. 8. The instructions may also cause the processing system to provide an application connector controller 905. The application connector controller 905 is configured to perform the functions of an application connector controller or the functions of a client computing device as described below. The application connector controller 905 may receive data from any other data sub-applications and send data (via secure internet sockets) to other data sub-applications within or outside the device. This application connector controller 905 is a connector that allows for the creation of meta-applications. The application connector controller 905 sends and receives efficiently formatted data.
[0090] The housing 902 may further house a communications system 912. The communications system 912 is coupled to the cross-device data visualization application 904 or the application connector controller 905 (e.g., via a coupling between the communications system 912 and a processing system). The communications system 912 may include software or instructions stored on a computer-readable medium that enable the client computing device 900 to transmit and receive information over the communications network described above. For example, the communications system 912 may include a first communications interface 914 (e.g., a first (e.g., long-range) transceiver(s)) for providing communications over the network 850, as described in detail above. In one embodiment, the first communications interface 914 may be a wireless antenna configured to facilitate communications over the IEEE 802.11 protocol (Wi-Fi), cellular communications, satellite communications, other microwave wireless communications, and / or communications. The communications system 912 may also include a second communications interface 916 (e.g., a second (e.g., relatively short-range) transceiver(s)) configured to provide direct communications with the client computing device 910 or other computing devices in the physical environment as described above with respect to Figure 8. For example, the second communications interface 916 may be configured to operate according to a wireless protocol such as Bluetooth®, Bluetooth® Low Energy (BLE), Near Field Communication (NFC), Infrared Data Association (IrDA), ANT®, Zigbee®, Z-Wave® IEEE 802.11 protocol (Wi-Fi), and other wireless communications protocols that enable direct communications between devices.
[0091] The housing 902 may further house a storage system 918. The storage system 918 is coupled to the cross-device data visualization application 904 or the application connector controller 905 via the processing system. The storage system 918 may store sensor data, datasets and one or more data structures therein, data sub-application manifests, transformations, and / or any other instructions and / or information that would be apparent to one of ordinary skill in the art with reference to this disclosure.
[0092] In various embodiments, the client computing device 900 may include a sensor system 920. The sensor system 920 may be housed within and / or provided in the housing 902. The sensor system 920 may be coupled to the cross-device data visualization application 904 or the application connector controller 905 via a processing system. The sensor system 920 may include one or more sensors that collect sensor data about the client computing device 900 or the physical environment, which may be provided to the cross-device data visualization application 904 or the application connector controller 905. For example, the sensor system 920 may include a camera, a proximity sensor, a temperature sensor, an inertial measurement unit (IMU), a geolocation sensor (e.g., a global positioning system (GPS)), and / or any other sensor as would be apparent to one of ordinary skill in the art with reference to this disclosure.
[0093] In various embodiments, the housing 902 further houses a user input / output (I / O) system 922. The user I / O system 922 is coupled to the cross-device data visualization application 904 or the application connector controller 905 (e.g., via a coupling between the processing system and the user I / O system 922). In one embodiment, the user I / O system 922 may be provided by a keyboard input system, a mouse input system, a trackpad input system, a touch input display system, and / or any other input system. In one embodiment, the user I / O system 922 may include a user output subsystem, such as, for example, a haptic feedback device, a speaker, a light (e.g., an LED), and / or any other user output subsystem that will be apparent to one of ordinary skill in the art upon review of this disclosure. In various embodiments, the user I / O system 922 may further include a display system 924. The display system 924 is coupled to the cross-device data visualization application 904 or the application connector controller 905 (e.g., via a coupling between the processing system and the display system 924). In one embodiment, the display system 924 may be provided by a display device that is integrated into the client computing device 900 and has a display screen (e.g., a display screen of a laptop / notebook computing device, a tablet computing device, a mobile phone, or a wearable device) or by a display device that is directly coupled to the client computing device 900 (e.g., a display device that is coupled to the client computing device 900 via a wired or wireless connection).Although client computing device 900 has been illustrated and described, those skilled in the art with reference to this disclosure will recognize that the teachings of this disclosure will be beneficial for a variety of client computing devices that will be apparent to those skilled in the art with reference to this disclosure, and therefore, various variations on the number, types, and orientation of devices and modules included in a client computing device are also within the scope of this disclosure.
[0094] 10, an embodiment of a server computing device 1000 is illustrated, which may be the server computing device 840 described above with reference to FIG. 8. In various embodiments, the server computing device 1000 includes one or more servers. For example, the server computing device 1000 may provide a cross-device data visualization application 904 or an application connector controller 905 to the client computing devices 900. In the illustrated embodiment, the server computing device 1000 includes a housing 1002 that houses components of the server computing device 1000, only some of which are shown in FIG. 10. For example, the housing 1002 may house a processing system (not shown) and a non-transitory memory system (not shown) that includes instructions. When the instructions are executed by the processing system, the processing system provides a cross-device data visualization application 1004 that is configured to perform the functions of the cross-device data visualization application or the functions of the server computing device described below. The cross-device data visualization application 1004 may include one or more data sub-applications 1004a (also referred to herein as data modules). The cross-device data visualization application 1004 and the data sub-applications 1004a may be distributed across the client computing devices 810 and 820 and the server computing device 840 of Figure 8. The instructions may further cause the processing system to provide an application connector controller 1005. The application connector controller 1005 is configured to perform the functions of an application connector controller or the functions of a server computing device as described below.
[0095] The housing 1002 may further house a communication system 1006. The communication system 1006 is coupled to the cross-device data visualization application 1004 or the application connector controller 1005 (e.g., via a coupling between the communication system 1006 and a processing system) and configured to communicate over the network 850, as described in more detail below. The communication system 1006 may enable the server computing device 840 to send and receive information over the network 850 of FIG. 8. The housing 1002 may also house a storage device (not shown) that provides a storage system 1008 (e.g., the cross-device data visualization database 845 of FIG. 8). The storage system 1008 is coupled to the cross-device data visualization application 1004 or the application connector controller 1005 via the processing system. The storage system 1008 may be configured to detect data, data sets and one or more data structures therein, data sub-application manifests, transformations, and / or any other instructions and / or information that would be apparent to one of ordinary skill in the art with reference to this disclosure. Although a particular server computing device 1000 has been shown and described, one of ordinary skill in the art with reference to this disclosure will recognize that the teachings of this disclosure will be beneficial for a variety of server computing devices that will be apparent to one of ordinary skill in the art with reference to this disclosure, and therefore, various variations on the number, types, and orientation of devices and modules included in the server computing device 1000 are also within the scope of this disclosure.
[0096] FIG. 11 illustrates one embodiment of a cross-device visualization method 1100, which in some embodiments may be implemented using the components of FIGS. 8, 9, and 10 described above. As discussed below, some embodiments provide improvements in technology areas such as content management, websites, and cross-device visualization. Method 1100 is described as being implemented by a cross-device data visualization application 1004 and an application connector controller 1005 on a server computing device 1000. It is further understood that a cross-device data visualization application 904 and an application connector controller 905 on a client computing device 810 or 820 may include some or all of the functionality of the cross-device data visualization application 1004 and the application connector controller 1005. As such, some or all of the steps of method 1100 may be performed by a client computing device 810 or 820 and still be within the scope of this disclosure. As discussed above, server computing device 1000 may include one or more processors or one or more servers. As such, the method 1100 may be performed in a distributed manner across one or more processors or one or more servers.
[0097] The method 1100 may begin at block 1102. At block 1102, identifiers of a set of client computing devices to participate in the cross-device data visualization session may be received. In one embodiment, at block 1102, each client computing device 810 or 820 may be prepared to participate in the cross-device data visualization session. The client computing devices 810 and 820, as well as other client computing devices, may form the cross-device data visualization session. For example, the client computing devices 810 or 820 may use a browser or a dedicated application to download from the server computing device 840 the application connector controller 905 and, in some embodiments, a manifest that lists the data modules or one or more data sub-applications 904a to be executed on the respective device (the manifest may be parsed to obtain the corresponding data sub-applications 904a). As described above, the data sub-applications 904a for each of the client computing devices 810 or 820 may be installed to form the cross-device data visualization application 904 / 1004. The cross-device data visualization application 904 / 1004 may span multiple client computing devices 810, or may span up to a client computing device 820, and up to a server computing device 840. In some cases, several data sub-applications 904a may ingest data, process the data, and present a view (e.g., a graphical visualization) of the data with various user inputs (and corresponding event handlers) that allow for user interaction.
[0098] In various embodiments, the client computing devices 810 or 820 may register identifiers, such as their ports and IP addresses, with each other and with the server computing device 840 (e.g., they may use a web of WebRTC data connection to facilitate relatively fast communication that does not have to go through the server computing device 840, or they may route the connection through the server computing device 840). In some embodiments, users included in a cross-device data visualization session may be assigned various roles, which may change over time. For example, a user with a designated role may enter commands to a corresponding client computing device that add other client computing devices to the cross-device visualization session and cause the added client computing devices to download one or more data sub-applications 904a to realize device-specific data visualizations. In some cases, such displays may be pre-scripted, for example, for a presentation.
[0099] In some embodiments, the application connector controller 905 is implemented in Javascript. However, the application connector controller 905 is programming language agnostic, and the set of rules can be developed in any language. Similarly, the data sub-applications 904a can be built in any programming language and installed on any type of computing device, including computers, servers, phones, or any object with a chip, such as an Internet of Things (IoT) appliance. Any application connector controller 905 / 1005 can orchestrate any set of data sub-applications 904a / 1004a on any computing device, as long as the data sub-applications 904a receive and provide data in the data format described above that conforms to the data grammar.
[0100] In one example, two application connector controllers 905 (which may be deployed on different machines and in different programming languages) may work together to develop a higher-level engine that operates according to the same rules. In other words, in some embodiments, the engine logic is additive. In one configuration, an engine on a client computing device 810 may work with an engine on a server computing device 840 to orchestrate processes on the client computing devices 810 or 820 and the server computing device 840.
[0101] In some embodiments, the client computing devices 810 and 820 may perform data sub-application negotiation to select one or more data sub-applications 904a for the client computing devices 810 and 820 based on resources, or to select attributes of the client computing device for a given data sub-application 904a based on similar factors. For example, the client computing devices 810 and 820 may have different displays and may be different sizes. And, as separate devices, the client computing devices 810 and 820 may have different computing resources. In this manner, the data sub-application 904a that best works with a particular client computing device 810 or 820 may be selected by the application connector module 905 / 1005 for each client computing device 810 or 820.
[0102] The method 1100 then proceeds to block 1104, where the data set is sent to each computing device, along with instructions for displaying a first portion of the data set. In one embodiment, at block 1104, the application connector controller 905 may provide the data set for the cross-device data visualization application 904 to each of the data sub-applications 904a running on the various client computing devices 810 and 820.
[0103] Some embodiments instantiate a dataset based on a set of data structures (e.g., each structure has its own format) and a set of operations. For example, data structures can independently store information for that data structure (e.g., a list of numbers, a list of dates, a point, or a polygon). Each data structure can be converted into many other data structures (e.g., a list of dates can be converted into a list of numbers, since dates can be converted into numbers by counting milliseconds from a particular date). Some data structures can be combined to form other data structures (e.g., multiple lists, such as lists of strings, lists of dates, and lists of numbers, can be combined to form a table; or, as a further example, points can be combined to form a polygon). Or other operations can be performed on the data structures, as will be apparent to those skilled in the art in light of this disclosure. In some embodiments, the number of data structures is as few as 25. This number is comparable to the number of phonemes in many languages, including English, the number of characters in many writing systems, and the number of amino acids that make up human proteins, and can be interpreted as defining an ideal number that strikes a balance between simplicity and overwhelming combinatorial complexity; such an analogy is not unfounded.
[0104] Instructions for displaying at least a portion of the dataset may be sent to each data sub-application 904a. In some embodiments, the portion may include one or more data structures included in the dataset. In some embodiments, each data sub-application 904a may include instructions for displaying data based on the dataset. In some embodiments, the server computing device 840 may provide the instructions or dataset to each data sub-application 904a of each client computing device 810 or 820 over the network 850. However, in some embodiments, the client computing device 810 may send the instructions or dataset to the client computing device 820 over communication channels 828a and 828b, which may be created when the client computing devices 810 and 820 participate in the cross-device data visualization session. For example, the communication channels 828a and 828b may be provided by a full-duplex communication protocol such as WebSocket or other secure connection. In other embodiments, the dataset or instructions may be provided over a local communication connection 830.
[0105] The instructions may cause the data sub-application 904a on the client computing device 810 to display a first portion of the dataset (e.g., one or more data structures or portions of one or more data structures) as a first data visualization. The instructions may cause the data sub-application 904a running on the client computing device 810 to display a second portion of the dataset as a second data visualization. Other data sub-applications 904a included in the client computing device 810 or 820 may display other portions of the dataset as additional data visualizations, such that the client computing device 810 or 820 may display multiple data visualizations on the same display. In other words, data visualizations may be generated for the cross-device data visualization application 904 operating across the client computing devices 810 and 820. Each data sub-application 904a may operate to display a corresponding portion of the data visualization for the cross-device data visualization application 904 according to instructions for that data sub-application 904a.
[0106] The method 1100 may then proceed to block 1106. At block 1106, an interaction with one of the identified computing devices is received, the interaction requesting that at least some of the other identified computing devices display a second, at least partially different, portion of the data set. In one embodiment, at block 1106, the interaction may be received at one of the data sub-applications 904a comprising the cross-device data visualization application 904. In various embodiments, an interaction may include external data loaded by the data sub-application 904a (e.g., a loader module loads a csv and provides a table), data acquired by a sensor (e.g., a photocell transmits its resistance change over time and provides a number or list of numbers to the data sub-application 904a), acquired user input (e.g., the data sub-application 904a acquires user input via the user I / O system 922), periodically generated data (e.g., the data sub-application 904a acting as a counter), the data sub-application 904a receiving data, processing the data, and providing a result, or any other interaction that would be apparent to one of ordinary skill in the art in light of this disclosure. An interaction with one data sub-application 904a may generate instructions for that data sub-application 904a to identify other data sub-applications 904a from the data sub-application manifest that request propagation of the interaction.
[0107] The method 1100 may continue at block 1108. At block 1108, instructions are sent to display a second, at least partially different, portion of the data set on at least some of the other identified computing devices. In one embodiment, at block 1108, the application connector controller 905 / 1005 may provide instructions to various data sub-applications 904a on the client computing devices 810 and 820 to display the at least partially different portion of the data set. The data set in this case may include an updated data set based on data input. As described above, in some embodiments, each data sub-application 904a receives output from and provides output to other data sub-applications 904a. In some embodiments, each data sub-application 904a has rules for mandatory and optional data input (inflow) and optional data output. Each input and result, in some embodiments, may belong to a data structure from a grammar. In some embodiments, the data sub-applications 904a may be arranged serially to form a directed graph. In some embodiments, because the directed graph is loop-free and the data sub-application 904a has only one output, changes to the data may prevent the data sub-application 904a from continually updating the data set indefinitely.
[0108] Some embodiments implement a data model that is expected to be more efficient than conventional techniques for connecting multiple data applications accessing the same data set. Rather than transferring large blocks of data, in some embodiments, the data sent and received by a client computing device 810 or 820 describes a series of data processes for obtaining the desired data set from its source. Thus, while multiple data modules can synchronously load and process the same data, embodiments of the present disclosure provide a protocol through which a data sub-application 904a may communicate that transformations (e.g., filtering) in one data sub-application should be replicated across other data sub-applications that may be running on various client or server computing devices. Some embodiments implement a protocol based on an ultra-lightweight data format for communicating data transformation information, such as filtering information, between different applications. This is expected to speed up synchronization between connected applications in some implementations.
[0109] Rather than transferring large blocks of data, in some embodiments, the data sent and received by the application connector controller 905 / 1005 describes a series of data processes for obtaining the desired data set from the data source. This information is small in size and is quickly disseminated to connected data sub-applications 904a by the data sub-application 904a upon receiving a transformation command from the user. From the user's perspective, in some embodiments, the user is interacting with a series of connected data sub-applications 904a rather than a single app.
[0110] In some embodiments, the efficient transformation protocol may involve a set of server-side and client-side functions, for example, combining multiple filtering and transformation objects and converting them to SQL, or vice versa. In some embodiments, each client computing device 810 or 820 may maintain a cache of a data set unrelated to the data being visualized (e.g., larger than the data currently rendered by the respective device, which may only be a portion of the cache contents). The data sub-application 904a may receive a filter (or some other transformation) message, determine that the requested transformation can be performed on the data in its cache, and potentially perform the transformation without the delay of requesting new or different data. A transformation may involve more data than is in its cache; some embodiments may display a portion of the data and request the remaining data from another data sub-application 904a or the cross-device data visualization database 845, updating the display as it is received. In some embodiments, the client computing device of the user leading the presentation can designate data to be cached by other client computing devices involved in the cross-device data visualization session, and as user interactions with the data visualization occur, updates to the visualized data are based on the cached data and are expected to be completed relatively quickly.
[0111] In some browser-based implementations, the user device may limit the amount of memory available to a given domain (e.g., local storage is often limited to 5-10MB per domain for security reasons to prevent untrusted websites from slowing down the device's performance). In some embodiments, the client computing device 810 or 820's access to additional memory may be via the IndexedDB API, in which case the client computing device 810 or 820 may index the data to speed up queries. In some embodiments, data may be stored on the client device (and transmitted encrypted), for example, using the WebCrypto API in some browser-based implementations.
[0112] In some embodiments, the client computing device 810 or 820 may store cache data in both a local storage object and the browser's native cache memory to reserve more space for larger data sets. The local storage object may be significantly faster to access than the native browser cache (e.g., three times slower or more). Thus, in some embodiments, the application connector controller 905 may split data between these two client-side storage formats and place more frequently accessed data in the local storage object (e.g., data adjacent to the data currently displayed in a data visualization in the spatial dimensions of the display to accommodate zooming or panning, or in a graph to accommodate pivoting).
[0113] In various embodiments, the data sub-application 904a may include a first website or application accessible at a first domain and a second website or application accessible at a second domain. Thus, the embodiment of method 1500 of FIG. 15 may be incorporated into method 1100 to enable multiple websites or applications sharing the same data sub-application window to exchange data according to method 1500 and share data between data sub-applications 904a hosted on different client computing devices 810 or 820.
[0114] Method 1100 may continue at block 1110, where an at least partially different second portion of the dataset is displayed on at least some of the other identified computing devices. In one embodiment, one or more data sub-applications 904a that received the instruction to display the at least partially different second portion of the data at block 1110 display the second portion of the dataset on a display included in a display system 924 included in a client computing device 810 or 820. For example, the display of the client computing device 810 may have displayed the first portion of the dataset according to the first data sub-application 904a, and the display of the client computing device 820 may have displayed the second portion of the dataset according to the second data sub-application 904a. During method 1100, a user of the client computing device 810 may provide input to a data visualization on the display of the computing device 810 provided by the first data sub-application. As a result, instructions for displaying a third portion of the dataset may be generated and provided to the second data sub-application 904a on the client computing device 820. In some embodiments, the instructions may include transforming the second portion of the dataset into a third portion of the dataset. As a result, the client computing device 810 can provide an updated data visualization based on the input, and the client computing device 810 can provide an updated data visualization based on the third portion of the dataset. As such, the client computing devices 810 and 820 can display different aspects of the data visualization across multiple computing devices.
[0115] As mentioned above, Figure 1 shows another example of cross-device data visualization. In this example, four different displays show three different views of a single data set. Interacting with one of these displays, for example to select a given data point or cluster icon, can automatically update the other displays to show a corresponding view on the data.
[0116] Thus, the disclosed systems and methods provide cross-device data visualization. By implementing a modular architecture and translation protocol, latency in cross-device data visualization can be reduced, improving the user experience and enabling larger data sets to be used in cross-device data visualization. These and other technical improvements will be apparent to those skilled in the art upon reading this disclosure. 2. Application Layer Protocols
[0117] Some embodiments implement a connectivity protocol that enables data transfer communication between websites, potentially opening up new networks of websites within the World Wide Web, where websites exchange information and new powerful capabilities are developed. Embodiments include computing devices and code (carried on a tangible, non-transitory, machine-readable medium) configured to process the protocol, conform to the protocol, and provide the affordances described below.
[0118] In some embodiments, the connection protocol is based on existing commands and standards to communicate another website to the embedded website.
[0119] In some embodiments, the protocol is based on a set of data formats (lists, tables, networks, etc.) that make data sharing easy and useful. Websites with WWW connection protocol capabilities are called Data Connected Websites (DCWs).
[0120] In some embodiments, any website that is a data application (dashboard, visualization, or data analysis) can be used as a module / sub-application to build other data applications that it can contain. Multiple DCWs can also be used together in new, higher-level DCWs if they send and receive the same data formats. In some implementations, there is no limit to the number of levels (an infinite number of DCWs within DCWs).
[0121] A DCW has the same functionality as a regular website, but is also configured to be invoked in other ways when data is submitted. In some embodiments, a DCW provides an interface for invoking the DCW. In some embodiments, the DCW logic (or parts of it) may be provided by a pre-installed browser extension. In some cases, a website may be submitted as both markup (e.g., HTML) and script (e.g., JavaScript™). In some embodiments, the script (or browser, or browser plug-in) may contain event handlers that are called by the browser when one of the following events occurs: In some cases, various event handlers may be executed asynchronously by other aspects of the website. onDataReceived
[0122] In some embodiments, when data is received within the above protocol, such as when the display is initialized or updated, the onDataRecieved event is fired and a function of the same name is called. Each time this function is called with properly formatted data, the website may use that data to perform a new result (e.g., update / create an element such as the DOM, virtual DOM, or canvas element).
[0123] In some embodiments, a website may include functions such as: sendDataToParent
[0124] The sendDataToParent function may return data to the parent (e.g., linked) web page, allowing for two-way communication.
[0125] Adding data connection protocols may be achieved using existing html standards, such as WebSocket and WebRTC data connections.
[0126] In some embodiments, developers and designers may begin developing DCWs that can be combined and synergized to create a rich network of websites that can be combined in virtually infinite ways.
[0127] Typically, data websites—dashboards or visualizations—are dead ends: they receive data and display some results, but they don't serve data. Traditional data websites also receive one or more datasets via an API, but don't expect data to be input from the outside. This new protocol allows for a fundamentally new way for websites to connect, enriching the flow of information and enabling unexpected combinations.
[0128] In some embodiments, two or more DCWs are embedded in an iFrame within a website, known as the parent website. The parent site communicates with each DCW to send and receive data, and data can flow between all DCWs, receiving data from one DCW and sending data to another DCW, etc.
[0129] Some browsers may not allow client-side exchange of information between domains for security reasons due to the same-origin policy. Some embodiments may affect communication via message passing through a server. Alternatively, some embodiments may utilize postMessage messaging to achieve lower latency client-side communication (e.g., without sending the message outside the client device). In some embodiments, code in one domain may message another domain with a message that includes the domain's content and the targetDomain. In some embodiments, code sent from each domain may include an event handler configured to receive message events and process the message.
[0130] Different developers can create different DCWs that process, analyze, and visualize data in different ways, enabling the creation of rich data applications and websites that are a hybrid of individual developments and are open to the data that is input and provided.
[0131] For example, the image in Figure 3 shows a website called Earth, which visualizes wind currents, connected to another website that displays a map, which contains a connection protocol. By manipulating the map (zooming, dragging), a geographical area is defined and sent to the Earth website, which uses these new coordinates to display the desired location. A third, simple website has simple html textarea fields and selectors that allow the user to define some parameters. These parameters are also sent to Earth to modify the output. The three websites reside on different servers.
[0132] Some embodiments implement a process that is very useful as a first step when beginning to analyze a data set. Some embodiments include a meta-analysis process. Further analysis is based on the perspectives and insights gained from this process. Some embodiments analyze only the structure of the data, not its content. This makes the form of subsequent analysis irrelevant. This approach is expected to work well whether the data are categorical, numerical, or a combination of both. It is also expected to work well with numerical and categorical variables that have holes (null values).
[0133] In some embodiments, the resulting network from this process exhibits the following: -Hierarchical relationships between variables, absolute or graded, if any - Hierarchically arranged variables, obvious examples being continents, countries, regions, cities, postal codes, etc. The method reveals these types of arrangements as well as more obscure hierarchical arrangements. -The degree to which one variable can be used to correctly predict any other variable (how likely it is that knowing the value of one variable makes you know the value of the other variable) If the hierarchy is absolute or strong, the relationship is absolute or strong unidirectional: knowing the value of one variable determines the value of the other variable.
[0134] As an example, in a table with city and zip code variables, knowing the zip code value determines the city value. The reverse is not necessarily true. A less extreme example is in a table of cancer patients, knowing the type of cancer generally allows for reasonably accurate guesses about gender (because many cancer types involve tissues and organs that are specific to males or females). And knowing gender increases the chances of correctly guessing the type of cancer, even if the improvement is small. Finally, when two variables are strongly correlated, the relationship between them is strong and bidirectional.
[0135] This predictive network is considered highly useful and provides immediate insights to data practitioners. Analysis typically begins by analyzing each variable, followed by specific combinations of variables. However, which combinations are meaningful may be preconceived and biased. This approach not only misses meaningful relationships (including positive and negative correlations), but also combinations worth analyzing. Collinearity can occur in groups containing three or more variables, and the combinatorial space is enormous (at least beyond a certain small number of variables; n variable combinations are (n+1) factorial; that is, with 10 variables, there are approximately 40 million possible variable subsets). When visualized, the network, in some embodiments, provides an immediate overview of the data, with clusters representing collinear groups.
[0136] This network can be visualized, allowing the structure of the dataset to be understood at a glance, and points to meaningful extraction and sorting of the data: for example, if there is a hierarchical order, a tree (later visualized as a treemap) can be generated.
[0137] The predictability of a variable can be determined using various approaches. In some cases, a variable is highly predictable if there are many variables that strongly predict it. However, if those variables themselves are highly predictive, the initial variable will be more predictable. And so on. For this reason, the nodes in this network may be weighted using the pageRank metric described in Brin, S.; Page, L. (1998). "The anatomy of a large-scale hypertextual Web search engine" (PDF). Computer Networks and ISDN Systems. 30:107-117. doi:10.1016 / S0169-7552(98)00110-X. ISSN 0169-7552. A variable is considered highly predictable (heavy weighted) if it is predicted by variables with high predictability (heavy weighted). Some embodiments generate visualizations that provide immediate insight into the "predators in the food chain" with respect to predictability and the more esoteric variables. Another way to look at it is that highly predictable variables contain redundant information that is already (at least largely) contained in other variables. Such variables may be called "central variables." Conversely, less predictable variables are called "peripheral variables" because they are influenced by external factors and incorporate information from aspects not present in the dataset.
[0138] Some implementations of the infoGain syntax can compare categorical variables with numeric variables. Numeric variables may also be partitioned, typically by calculating quantiles or equal intervals (although other methods are possible). For example, in a cancer table, age may be partitioned as follows: 0-20 years, 21-40 years, 41-60 years, etc. Cancer types are likely to be strongly correlated with age because certain cancer types have higher incidence rates in certain age groups (e.g., lymphoblastic leukemia in the 0-20 age group, prostate cancer in the 61-80 age group). Once a rough correlation is found for a categorical numeric variable, it can be refined by using a different partitioning method, or it can be used to move to a different type of analysis that does not require partitioning.
[0139] Finally, information gain networks are based on the information gain metric commonly used in decision trees, which itself is based on the calculation of the entropy of categorical variables. Information gain network analysis is heavily influenced by his information theory and general thinking.
[0140] To achieve these objectives, some embodiments may perform the following process. 1. Convert all numeric dimensions to categories by performing a binning operation (e.g., a solid first step is to find the 10 deciles for each numeric variable, which is the default recommendation). 2. Calculate entropy for all variables 3. For each pair of variables A and B, calculate two information gain values ig(A,B) and ig(B,A) that indicate how much entropy is reduced when one variable is used to divide the other variable. 4. Create directed relationships for information gain values above a given threshold. 5. Calculate the pageRank weight for each node. This calculation can be done, for example, by forming an adjacency matrix of the parameters and determining the eigenvectors based on the adjacency matrix. In other embodiments, other centrality measures may be used for network analysis, such as degree centrality, closeness centrality, betweenness centrality, subgraph centrality, Katz centrality, etc.
[0141] These steps may, in some embodiments, produce a visualization such as that shown in Figure 4. As shown, the network visualization provides overall insight into the data.
[0142] In some embodiments of an interactive visualization of an information network, each node has an area proportional to its weight, is represented by a different color depending on the value, and is displayed with a connecting line of a thickness proportional to the information gain value. Some embodiments may receive a selection specifying two nodes and respond by finding and displaying the shortest path (e.g., when ranked by distance).
[0143] FIG. 12 illustrates an embodiment of an application data exchange system 1200 according to various embodiments. In one embodiment, the application data exchange system 1200 may include a client computing device 1202 coupled to a network 1204. Additionally, the application data exchange system 1200 may include one or more server computing devices (e.g., server computing device 1206 and server computing device 1208) coupled to the network 1204. Specifically, the server computing device 1206 or the server computing device 1208 may host one or more websites or applications. The client computing device 1202 may be configured to send and receive data between websites displayed on an application, such as a web browser, running on the client computing device 1202. While an example of the application data exchange system 1200 is illustrated, those skilled in the art will recognize, with reference to this disclosure, that a wide variety of application data exchange systems exist. The configurations of networks, user devices, and service provider devices operable to provide the systems and methods described herein may vary without departing from the scope of the present disclosure.
[0144] FIG. 13 illustrates an embodiment of a client computing device 1300. The client computing device 1300 may be the client computing device 1202 described above with reference to FIG. 12. The client computing device may also be provided by a desktop computing system, a laptop / notebook computing system, a tablet computing system, a mobile phone, a wearable device, or any other client computing device that would be apparent to one of ordinary skill in the art in light of this disclosure. However, one of ordinary skill in the art in light of this disclosure will recognize that the client computing device 1300 may be provided by any of a variety of computing devices in accordance with the various embodiments described below. In the illustrated embodiment, the client computing device 1300 includes a housing 1302 that houses the components of the client computing device 1300. Only some of the components are shown in FIG. 13. For example, the housing 1302 may house a processing system (not shown) and a non-transitory memory system (not shown) that includes instructions. When the instructions are executed by the processing system, the processing system provides an application controller 1304 that is configured to perform the functions of the client computing device, as described below. As a specific example, the application controller 1304 is configured to provide a browser application 1304a and a data exchange controller 1304b, as described below, although one skilled in the art with reference to this disclosure will recognize that the application controller 1304 may enable other applications and computing device functions as well.
[0145] The housing 1302 may further house a communications system 1308. The communications system 1308 is coupled to the application controller 1304 (e.g., via a coupling between the communications system 1308 and a processing system). The communications system 1308 may include software or instructions stored on a computer-readable medium. The software or instructions enable the client computing device 1300 to send and receive information over the network 1204. The housing 1302 may further house a storage system. The storage system includes an application database 1310 that is coupled to the application controller 1304 (e.g., via a coupling between the storage system and a processing system). The application database 1310 may store websites, applications, data used by the websites or applications, or other information or instructions. While the application database 1310 has been described as being housed within the housing 1302 of the client computing device 1300, one skilled in the art would recognize that the application database 1310 could be connected to the application controller 1304 over the network 1204 without departing from the scope of the present disclosure. While a particular client computing device 1300 has been described, those skilled in the art with reference to this disclosure will recognize that a client computing device (or other device that operates in accordance with the teachings of this disclosure in a manner similar to that described below for client computing device 1300) may include various components and / or configurations of components to provide conventional computing device functionality in addition to the functionality described below, without departing from the scope of this disclosure.
[0146] FIG. 14 illustrates an embodiment of a server computing device 1400. The server computing device 1400 may be the server computing device 1206 or 1208 described above with reference to FIG. 12 and may be provided by one or more server devices. In the illustrated embodiment, the server computing device 1400 includes a housing 1402 that houses the components of the server computing device 1400, only some of which are shown in FIG. 14. For example, the housing 1402 may house a processing system (not shown) and a non-transitory memory system (not shown) that includes instructions. When the instructions are executed by the processing system, the processing system provides a server application controller 1404 that is configured to perform the functions of an application controller and a service provider device, as described below. By way of example, the server application controller 1404 is configured to host web applications 1406 (e.g., applications for native applications or browser applications), as described below, although one of ordinary skill in the art with reference to this disclosure will recognize that the server application controller 1404 may enable other applications and computing device functions as well.
[0147] The housing 1402 may further house a communications system 1408. The communications system 1408 is coupled to the server application controller 1404 (e.g., via a coupling between the communications system 1408 and a processing system) and configured to communicate over the network 1204, as described in more detail below. The housing 1402 may further house a storage system. The storage system includes an application database 1410 that is coupled to the server application controller 1404 (e.g., via a coupling between the storage system and a processing system). The application database 1410 may store web pages, images, video, audio, other content, user profiles, user identifiers, user permissions, and / or other data used by the server application controller 1404 to provide services and implement the application data exchange functionality described below. While the application database 1410 has been described as being housed within the housing 1402 of the server computing device 1400, one skilled in the art will recognize that the application database 1410 may be connected to the server application controller 1404 over the network 1204 without departing from the scope of the present disclosure. While a particular server computing device 1400 has been described, those skilled in the art with reference to this disclosure will recognize that a server computing device (or other device that operates in accordance with the teachings of this disclosure in a manner similar to that described below for server computing device 1400) may include various components and / or configurations of components to provide conventional computing device functionality in addition to the functionality described below, without departing from the scope of this disclosure.
[0148] FIG. 15 illustrates one embodiment of a method 1500 for exchanging data between websites, which in some embodiments may be implemented using the components of FIGS. 12, 13, and 14 described above. As discussed below, some embodiments provide improvements in technology areas such as content management, websites, and native applications. Method 1500 is described as being performed by application controller 1304 on client computing device 1202 / 1300. Furthermore, server application controller 1404 on server computing device 1206 or 1208 may be considered to include some or all of the functionality of application controller 1304. As such, some or all of the steps of method 1500 may be performed by server computing device 1206 or 1208 / 1400 and still be within the scope of the present disclosure. As noted above, server computing device 1400 may include one or more processors or one or more servers. Thus, method 1500 may be performed in a distributed manner across one or more processors or one or more servers.
[0149] Method 1500 may begin at block 1502. At block 1502, a client computing device may be executing a first web page accessible at a first domain and a second web page accessible at a second domain. In one embodiment, at block 1502, a browser application 1304a on client computing device 1202 / 1300 may be executing a first web page accessible at a first domain and a second web page accessible at a second domain. For example, one web page may be accessible at "www.service1.com" and the other web page may be accessible at "www.service2.com." However, in other embodiments, any application (e.g., a native application) provided by application controller 1304 may execute web pages or other application views accessible through different domains.
[0150] In some embodiments, the first web page and the second web page may be contained in the same window of the browser application 1304a. For example, the second web page may be embedded in the first web page. The second web page may be embedded in the first web page using a HyperText Markup Language (HTML) iframe. In some embodiments, the first web page may embed the second web page and a third web page. In still other embodiments, the first web page may embed a second web page that embeds the third web page. While embedded web pages are described, in other embodiments, the first web page and the second web page may be opened in different windows or tabs of the browser application 1304a. Furthermore, one of ordinary skill in the art, given this disclosure, will recognize that various combinations of embeddings, including more or fewer web pages, other than those described above are contemplated.
[0151] The web page may have the functionality of a traditional web page, but may also be configured to launch the web page differently when data is sent to the web page. In some embodiments, the web page provides an interface for invoking the web page. In some embodiments, the logic of the web page (or portions thereof) may be provided by a pre-installed browser extension (e.g., data exchange controller 1304b). In some cases, the web page may be sent using both markup (e.g., HTML) and script (e.g., JavaScript™). In some embodiments, the script (or browser, or browser plug-in) may include the data exchange controller 1304b (e.g., event handlers) that are invoked by the browser application 1304a. In some cases, various event handlers may be executed asynchronously by other aspects of the web page. In various embodiments, the function providing the interface for invoking the web page may include a receive function (e.g., "onDataReceived") or a send function (e.g., "sendDataToParent").
[0152] For example, onDataReceived is a function that allows data to arrive, and is therefore a possible function for a data web page of the present disclosure. A data web page can operate (display information, allow interaction) before receiving data through onDataReceived, but typically, the web page can become active when this function is called from an external source (another data web page or a wedge that embeds this function). The type of object that onDataReceived can receive depends on the architecture of the data web page. For example, a configuration may contain an object with two properties: type and value. The "type" property may contain a short string that indicates the type of data arriving on the web page. Common cases include "configuration," "data," and "select." If "type" is "configuration," then "value" may be an object containing configuration information (e.g., a color background or the type of model or visualization the web page is using). If "type" is "data," then "value" may contain the data to be analyzed or visualized. If "type" is "select", then "value" may indicate a web page on which to perform an action, such as selecting the item whose ID is indicated by "value". As can be seen from the above example, onDataReceived is used to pass data to the data web page, define its configuration (aspects, behavior, etc.), or to control its behavior from the outside. onDataReceived may be called once (e.g., to send data), or it may be called as many times as necessary to pass different data at different times (including continuous data flow), or to change or control the configuration of the data web page.
[0153] The send function "sendDataToParent" may provide a function that the embedder will inject into the data web page. Thus, it may be used to send information. Similar to onDataReceived, the appropriate way to send information is to send an object with properties "type" and "value". The data web page may send data such as the results of an analysis it performed, or a portion of the received data defined by user interaction. In this case, "type" would be "result" or "filter". The data web page may also report actions taken by the user, such as selecting an item ("type" is "select" and "value" is the item's ID).
[0154] Below are two examples of communication between two data web pages. In the first example, a user selects an item on data web page A and reports this action ("type": "select", "value": ID of the item) through sendDataToParent. The embedder receives this information and sends it to onDataReceived of data web page B. Data web page B understands that it needs to select an element with the ID of the item as its ID. In this way, two or more modules are synchronized. When a user selects an element on one data web page, he actually does it on all data web pages.
[0155] In a second example, a user may perform a filter or sub-selection on data on data web page A and send that data using sendDataToParent (with "type" being "data" and "value" being the filtered data set). This information may then be sent to data web page B, which may use the data to visualize or analyze a portion of the data. In this way, one web page is used as a filter and the other as a visualization. Note that there are many other web pages that will receive the filtered information. Also, many filter web pages may be combined to define portions of the data in more complex ways (e.g., one web page defines a geographic region, another web page defines a time interval, and another web page defines intervals of values in a scatter plot).
[0156] The method 1500 may then proceed to block 1504. At block 1504, the first web page may receive a data input. In one embodiment, at block 1504, the first web page may receive the data input, such as a user entering a value in a field, a user manipulating a view of the application (e.g., zooming or panning a map), a user selecting from possible data values presented on the first web page, an IoT device updating environmental data in which the web page is displayed, or other data input as would be apparent to one of ordinary skill in the art with reference to this disclosure.
[0157] The method 1500 may then proceed to block 1506. At block 1506, the visualization provided by the second web page is updated based on the data entered at the first web page. In one embodiment, at block 1506, the data exchange controller 1304b may use the data input received at the first web page and update the second web page based on the data input. The data exchange controller 1304b may execute an event handler, which may run asynchronously with other aspects of the web page. The event handler may provide the data received at the first web page to the second web page. The second web page may update in response to the received data. In some embodiments, the second web page may include an "onDataReceived" function. In some embodiments, when data is received within the protocol described above, such as upon display initialization or display update, the onDataReceived event is raised and a function of the same name is called. Each time this function is called with properly formatted data, the second web page can use the data to perform new results.
[0158] In some embodiments, the website may include a send function, such as a sendDataToParent function. The sendDataToParent function may return data to a parent (e.g., linked) web page, thereby enabling two-way communication. The addition of data connection protocols may be achieved using existing html standards, such as WebSocket and WebRTC data connections. In various embodiments, the received data input may be processed by circumventing the same-origin policy of the browser application 1304a in which the first and second web pages are running. Thus, updating the first visualization provided on the second web page based on the first data input may be performed without transmitting the update outside of the client computing device running the browser application 1304a that runs the first and second websites.
[0159] In principle, the server computing device 1206 or the server computing device 1208 provides data web pages to the client computing devices. For example, the embedder and web pages are provided by the server computing device 1206 or the server computing device 1208, and the data web pages communicate and transmit information to each other only on the client computing device 1300. No information may be sent or received from any server.
[0160] However, one of the data web pages may communicate with server computing device 1206 or server computing device 1208 to send and receive information. For example, a data wedge may be built to collect real-time market and currency information and send that information via sendDataToParent. This information is sent to other web pages. In another example, one of the data web pages is a controller for server computing device services provided by web application 1406. For example, web application 1406 hosted on server computing device 1400 may run a machine learning engine. The data web page receives data, processes it, sends the data needed by the model, receives results from the model on the server, and sends the results to other data web pages via sendDataToParent.
[0161] Thus, server computing device services that provide, process, or store data can be used in the same way as data web pages, and configurations of server applications and data web pages can be created in a variety of architectures.
[0162] The method 1500 may then proceed to block 1508. At block 1508, the updated visualization is displayed on the second web page. In one embodiment, the browser application 1304a may display the updated visualization on the second web page at block 1508. For example, the browser application 1304a may present the second web page including the updated visualization.
[0163] In various embodiments, method 1500 may be performed iteratively while data is being input. Furthermore, method 1500 may be performed from the perspective of a second web page, i.e., the second web page receives the second data input and updates the visualization on the first web page based on the second data input. The updated second visualization on the second web page may be displayed on a display device of client computing device 1202 / 1300. In this manner, updating one web page with data input may cause the other web page to update its visualization based on the data entered on the data web page that received the data input.
[0164] In yet another example of method 1500, a first web page may be a parent of a second web page and a parent of a third web page accessible in a third domain. For example, the second web page and the third web page may be embedded in the first web page. Data may be input to the first web page in block 1504, and a visualization provided by the third web page may be updated based on the data input in block 1506. In other embodiments, the third web page embeds the first web page, and the second web page is embedded in the third web page, making the third web page a parent web page. The third web page may include protocol functionality described herein to facilitate updating the first visualization provided on the second web page based on the first data input.
[0165] FIG. 3 illustrates an example method 1500 consistent with the present disclosure. FIG. 3 illustrates a web browser 300. The web browser 300 may retrieve a first web page 302 that includes a second web page 304, a third web page 306, and a fourth web page 308. In the illustrated example, the first web page 302 embeds the second web page 304, the third web page 306, and the fourth web page 308. At block 1504 of the method 1500, a user may adjust the map on the second web page 304, causing the second web page 304 to change its display from a "Europe view" to a "North and South America view." As a result, the data exchange controller 1304b (e.g., a function or event handler) may update the third web page 306 with the data input into the second web page 304. Thus, the third web page 306 may be updated to reflect the second web page 304 from a "Europe view" or other view to a "North and South America view."
[0166] Thus, the disclosed system and method relate to a data exchange system between applications in different domains. By communicating data between websites via functions and event handlers according to the above-described embodiments of the present disclosure, website functionality and native application technologies are improved. This data exchange system allows data exchange between websites in different domains without requiring re-entering data for each website displayed in a window or browser. This allows developers to streamline data flow between websites and eliminates the need for users to re-enter data for each website. This allows client computing devices to communicate between websites, reducing inputs and calls to the server and reducing system bandwidth and latency. These and other technical improvements will be apparent to those skilled in the art from reading this disclosure. 3. Self-Disabling and Self-Deleting Mobile Applications
[0167] Some embodiments include native mobile applications that are capable of self-removal from a user's mobile phone. The self-removal trigger may be based on a list of events (time, task, geolocation, etc.) that end the app's lifecycle.
[0168] There are many use cases for this technology. For example, a company may send an app to all of its sales representatives that runs (for example, is limited to) a Christmas promotion and includes milestone achievements for the sales team. The promotional app may be automatically removed from the phone on December 24th, when the achievements expire. Alternatively, the application may be conditionally removed when a server indicates that the sales team has met their goals.
[0169] In some embodiments, the decision to remove a given application is based on code provided with the application. For example, once installed, the application may register with a scheduler service on the mobile computing device. The scheduler service may execute the provided code, for example, periodically or in response to an event, such as a change in the wireless network environment, a geolocation change greater than a threshold, the launch of an application, or the mobile device going to or waking from a sleep state. In some embodiments, the application code includes a disable routine that runs upon such an event, for example, as a background process on the mobile computing device. In some cases, the disable routine removes / disables the application without requesting user permission.
[0170] In some embodiments, the invalidation routine may determine whether invalidation criteria specified by the entity providing the code have been met, which may take a variety of different forms and include combinations of forms, such as: -A criterion that a specific date has been reached and passed - A threshold amount of time has elapsed since the application was provided to the mobile computing device - A threshold amount of time has passed since the application was registered with the user of the mobile computing device. The criterion that the application has been used by a user of a mobile computing device for a period of time that exceeds a threshold. - The criterion that the mobile device is within the geographic area defined by the geofence - The criterion that the mobile device is within range of a specified wireless network, for example, as indicated by a Bluetooth or Wi-Fi identifier embedded in a corresponding beacon broadcast by another device and received by the mobile device - The criterion that the number of failed logon attempts to a mobile device exceeds a threshold. -The number of times a user enters incorrect credentials into an application exceeds a threshold. - The application has previously been deleted or disabled from the mobile device. - The application must have been previously deleted or disabled for the specified user account. - The number of times a mobile device has been used to perform a specific task exceeds a threshold. -The criteria that the mobile device is currently performing a specific task - the criterion that the mobile device is out of communication range of another device that is transmitting a wireless beacon with a beacon identifier specified in the criterion; The criterion that the user is not using the mobile device to perform a task, for example, reaching a certain level of performance in a game or workflow. - Criteria that a signal provided by a remote server indicates that a user or group of users has achieved a sales goal / performance goal / fundraising goal / effort goal, etc. - Criteria for mobile device battery level being above or below a threshold. -The quality of wireless network access to the Internet that a mobile device has must be above a threshold. - Criteria that a mobile device has a particular attribute, such as an operating system version number above or below a threshold, being included in a version whitelist or not being included in a blacklist, or having or not having a processor or memory with a particular attribute. - The criterion that the user has not used the application within a threshold period -The frequency with which a user uses an application over a certain period of time is below a threshold. - The application has not been updated within a threshold period, or - The criteria that the user shares the application with other users does not exceed a threshold, or that credit is given to a threshold number of installs by other users within a predetermined threshold period.
[0171] In some embodiments, the above criteria may be combined in any permutation of the above, along with other criteria consistent with those listed above.
[0172] As previously mentioned, some criteria are time-related. In some embodiments, a user may attempt to change the system clock of a mobile computing device to counter such criteria. Thus, in some embodiments, time may be measured according to a trusted external signal, such as a timing signal received from a Global Positioning System satellite. In some embodiments, the timing signal may be received with a signed cryptographic signature of the Global Satellite System indicating that the timing signal is trustworthy, and in some embodiments, the signed cryptographic signature may be verified with the public key of the Global Satellite System.
[0173] In some embodiments, a remote server runs the invalidation routine and returns the results of the routine to the mobile computing device, but designing the routine to run on the mobile device is believed to provide greater robustness in the event that a user attempts to interrupt the invalidation routine by disconnecting from the network.
[0174] In some embodiments, the invalidation routine may delete the application's data and code when it determines that the invalidation criteria have been met. For example, some mobile devices may maintain a copy of the application in persistent storage, such as flash, and a copy of the executable code in dynamic memory, such as dynamic random access memory. In some cases, execution of the dynamic random access memory copy may cause the mobile device to delete the version in persistent storage. Thus, the application is removed from the mobile computing device when the dynamic random access memory copy is deleted, such as upon program termination.
[0175] The revocation routine may only remove data or code necessary for the application to operate, or only portions of the application necessary for operation, such as to disable a particular feature (rather than removing all code and data). For example, the application, or portions thereof, may ensure that a cryptographic key is stored in memory on the mobile computing device before execution, and in some embodiments, may remove the cryptographic key to disable the code. In some embodiments, the cryptographic key may be stored in a trusted execution environment on the mobile computing device, executed by a processor different from the processor executing the revocation routine or the application. In some embodiments, the trusted execution environment processor may be instructed to remove the key by communicating an interrupt to the trusted execution environment via a buffer that invokes a routine to remove the key.
[0176] In some embodiments, an application may be configured to receive, compile, and transmit data according to the protocols disclosed herein and for use in the visualizations disclosed herein, and then self-disable or self-delete according to the techniques taught herein. 4. Filtering and transformation sequences for fast exploration of large datasets
[0177] Based on protocols such as the Highly Efficient Filtering Transformation Protocol described above, some embodiments provide a system that allows a user to search a relatively large database, such as a distributed database, by sequentially applying successive filters.
[0178] In some embodiments, the filtering process operates on various types of dimensions, including numerical, categorical, textual, graphical, and image.
[0179] In some embodiments, the filtering process is iterative and based on two tasks: 1) applying a single filter, and 2) running multiple filters cumulatively.
[0180] In some embodiments, a session begins with the application receiving a random (e.g., pseudo-random) sample of the complete dataset. For example, sampling may be done with or without replacement to obtain less than 50%, less than 10%, less than 1%, or less than 0.1% of the records in response to a query to the database. In some cases, the sample is representative, but as a percentage, relatively small compared to the total population from which features are to be obtained. Examples of sizes that may be considered commercially viable include: a dataset size of 10,000,000 rows (e.g., records in response to a query) with a sample of 20,000 (0.2%).
[0181] In some embodiments, the application allows the user device to filter the data using all (or various subsets) of the available variables, such as selecting a range of values from a numeric series or selecting categorical values. In some embodiments, the application causes the user device to display visualizations and statistics of the results of filtering the loaded sample. When a filter is applied, the (filtered) data set is typically smaller.
[0182] At some point (e.g., after repeatedly applying filters, adjusting the applied filters by modifying, removing, adding, etc., and viewing the results), the user either approves of the filter sequence or the size of the acquired dataset is too small to trust the images and statistics. Once that point is reached, in some embodiments, the user executes the filters and transformations (e.g., by selecting inputs in a user interface and the embodiment responds accordingly). This allows the user device to issue a request to the server, e.g., by sending a description of the filter sequence (using a filter and transformation protocol), so that the filters and transformations can be applied to the entire original dataset (e.g., all of them). New samples are then created (e.g., by the server, the user device, or a collaboration between the two) based on this new dataset and returned to the client application.
[0183] Examples of these processes are described below following the numerical reference examples above. -Dataset size: 10,000,000 rows -Dataset with filters and transformations: 500,000 rows -Sample of filtered and transformed dataset: 20,000 (4%)
[0184] In this example, the newly obtained samples are hopefully more representative of the dataset on which the transformation / filtering was performed.
[0185] Once the client application loads new samples, in some embodiments, processing may resume: the user applies more filters and transforms, eventually executing them and receiving new samples, each time potentially more reflective.
[0186] At some point, the server may stop performing sampling because the filtered and transformed data is already small enough (e.g., less than 20,000 rows). In some embodiments, the server may compare the number of records in the currently processed dataset (e.g., that pass through a previously defined set of filters) to a threshold. If the number exceeds the threshold, the embodiment may continue sampling in the manner described above. If the number falls below the threshold, the embodiment may stop sampling and process all records in the currently processed dataset, for example, visualizing all records and performing statistics on all records.
[0187] In some embodiments, it is expected that applications incorporating this technology will not have to perform the entire sequence, including filtering / transforming and executing on every record initially retrieved from the database. Some embodiments may maintain a transactional sequential log of past processing, and embodiments may provide an interface that allows a user to go back in the sequence, start at a different point, and create a new branch. Enhancements to this system include the following features: -Save multiple different states (e.g. sequences) with names and comments -It preserves branches, so the history of which sequences are derived from which sequences is kept, e.g., in a tree structure. - Generates a visualization of the sequence history, including various statistics calculated at different points in the path, allowing the user to revert the program to a previous state -Compare and contrast different states, e.g., contrast and visualize statistics of different populations - Apply machine learning methods based on filtering sequences, such as decision trees (e.g., trained with CART), to automatically find filtering sequences that predict categories (classification) or maximize values (regression). These sequences may be saved and compared with human-created sequences. Decision trees may also be accessed by humans as a suggestion mechanism for searches, opening up new dimensions for human-machine collaboration. --Because filtering / transformation+filter execution is preserved using a data transformation protocol, in some embodiments this sequence is independent of the actual client application it is built for. This opens up several possibilities that some embodiments exploit. a) In the standalone case, such a client application can externally control the filter sequence of another client application (in a multi-screen environment using a data exchange protocol). b) In the multiple case, such applications can be synchronized, allowing multiple users to perform searches collaboratively. In some embodiments of the system, client and server applications may provide statistics and metrics calculated based on the filtered data set before it is sampled. When samples are provided to client applications, they involve statistics based on unsampled data, potentially resulting in 100% accuracy. On the server side, the application of the filter sequence may be optimized. The sequence may be reordered so that the most powerful filters (e.g., those that reduce data size quickly, which can be identified by testing and ranking filters) are applied first. This may be done by just commutative transformations such as simple filters, or by other filters. The application may create various reports from the filtered population, clarifying the filtering / transformation sequence and providing metrics, statistics and visualizations.
[0188] This cyclical processing is expected to enable users to search large datasets in a short time (e.g., with low latency of less than 5 seconds, less than 1 second, or even less than 500 milliseconds in response to a user request) and to do the following: -Looking for low probability outliers in the "corners" of the dataset, which reduces the size of the filtered dataset very quickly, resulting in a dataset that is not subject to further sampling. -Identify a subset of populations that maximize or minimize a particular characteristic -Compare multiple populations filtered according to different sequences
[0189] 7 is a diagram illustrating an exemplary computer system 700 according to an embodiment of the technology disclosed herein. Various portions of the systems and methods described herein may include or be performed on one or more computer systems similar to computer system 700. Additionally, the processes and modules described herein may be performed by one or more processing systems similar to that of computer system 700.
[0190] The computer system 700 may include one or more processors (e.g., processors 710a-710n) coupled to a system memory 720, an input / output (I / O) device interface 730, and a network interface 740 via an input / output (I / O) interface 750. The processor may include a single processor or multiple processors (e.g., distributed processors). The processor may be any suitable processor capable of executing instructions. The processor may include a central processing unit (CPU) that executes program instructions to perform arithmetic, logical, and input / output operations for the computer system 700. The processor may execute code (e.g., processor firmware, protocol stack, database management system, operating system, or combinations thereof) that establishes an execution environment for the program instructions. The processor may include a programmable processor. The processor may include a general-purpose or special-purpose microprocessor. The processor may receive instructions and data from memory (e.g., the system memory 720). Computer system 700 may be a uniprocessor system including one processor (e.g., processor 710a) or a multiprocessor system including any number of suitable processors (e.g., 710a-710n). Multiple processors may be employed to implement parallel or sequential execution of one or more portions of the techniques described herein. Processes, such as logic flows, described herein may be performed by one or more programmable processors executing one or more computer programs to perform functions by manipulating input data and generating corresponding output. Processes described herein may also be performed by, and apparatus described herein may be implemented by, special purpose logic circuitry, such as a field programmable gate array (FPGA) or an application specific integrated circuit (ASIC).Computer system 700 may include multiple computing devices (eg, a distributed computer system) to implement various processing functions.
[0191] The I / O device interface 730 may provide an interface for connecting one or more I / O devices 760 to the computer system 700. The I / O devices may include devices that receive input (e.g., from a user) or output information (e.g., to a user). The I / O devices 760 may include, for example, a graphical user interface presented on a display (e.g., a cathode ray tube (CRT) or liquid crystal display (LCD) monitor), a pointing device (e.g., a computer mouse or trackball), a keyboard, a keypad, a touchpad, a scanning device, a voice recognition device, a gesture recognition device, a printer, an audio speaker, a microphone, a camera, etc. The I / O devices 760 may be connected to the computer system 700 via a wired or wireless connection. The I / O devices 760 may be connected to the computer system 700 from a remote location. The I / O devices 760 located on a remote computer system may be connected to the computer system 700, for example, via a network and the network interface 740.
[0192] The network interface 740 may include a network adapter that provides a connection of the computer system 700 to a network. The network interface 740 may facilitate the exchange of data between the computer system 700 and other devices connected to the network. The network interface 740 may support wired or wireless communications. The network may include an electronic communications network such as the Internet, a local area network (LAN), a wide area network (WAN), a cellular communications network, etc.
[0193] The system memory 720 may be configured to store program instructions 721 or data 722. The program instructions 721 may be executable by a processor (e.g., one or more of processors 710a-710n) to implement one or more embodiments of the present technology. The instructions 721 may include modules of computer program instructions for implementing one or more of the techniques described herein with respect to various processing modules. The program instructions may include computer programs (known in certain forms as programs, software, software applications, scripts, or code). Computer programs may be written in programming languages, such as compiled, interpreted, declarative, or procedural languages. Computer programs include standalone programs, modules, components, subroutines, or other units suitable for use in a computing environment. A computer program may or may not correspond to a file in a file system. A program may be stored as part of a file that stores other programs or data (e.g., one or more scripts stored in a markup language document), in a single file dedicated to the program, or in multiple collaborative files (e.g., files that store one or more modules, subprograms, or portions of code). A computer program may be arranged to be executed on one or more computer processors that are collocated at one site or that are distributed across multiple remote sites and interconnected by a communications network.
[0194] The system memory 720 may include a tangible program carrier that stores program instructions. The tangible program carrier may include a non-transitory computer-readable storage medium. The non-transitory computer-readable storage medium may include a machine-readable storage device, a machine-readable storage substrate, a storage device, or any combination thereof. The non-transitory computer-readable storage medium may include non-volatile memory (e.g., flash memory, ROM, PROM, EPROM, EEPROM memory), volatile memory (e.g., random access memory (RAM), static random access memory (SRAM), synchronous dynamic RAM (SDRAM)), bulk storage memory (e.g., CD-ROM and / or DVD-ROM, hard drive), etc. The system memory 720 may include a non-transitory computer-readable storage medium that stores program instructions executable by a computer processor (e.g., one or more of processors 710a-710n) to achieve the subject matter and functional operations described herein. The memory (e.g., system memory 720) may include a single memory device and / or multiple memory devices (e.g., distributed memory devices). The instructions or other program code that provide the functionality described herein may be stored on a tangible, non-transitory computer-readable medium. The entire set of instructions may be stored on the medium at the same time, or portions of the instructions may be stored on the same medium at different times. For example, a copy may be made by writing program code to a first-in, first-out buffer in a network interface. In this case, some instructions are pushed out of the buffer before other portions of the instructions are written to the buffer, and all of the instructions in memory are written to the buffer, but not all at the same time.
[0195] The I / O interface 750 may be configured to coordinate I / O traffic between the processors 710a-710n, the system memory 720, the network interface 740, the I / O devices 760, and / or other peripheral devices. The I / O interface 750 may perform protocol conversion, timing conversion, or other data conversion to convert data signals from one component (e.g., the system memory 720) into a format suitable for use by another component (e.g., the processors 710a-710n). The I / O interface 750 may support devices connected via various types of peripheral buses, such as variants of the Peripheral Component Interconnect (PCI) bus standard and the Universal Serial Bus (USB) standard.
[0196] An implementation of embodiments of the techniques described herein may use a single instance of computer system 700, or may use multiple computer systems 700 configured to host different portions or instances of the embodiments. Multiple computer systems 700 may provide parallel or sequential processing / execution of one or more portions of the techniques described herein.
[0197] Those skilled in the art will appreciate that computer system 700 is merely exemplary and is not intended to limit the scope of the technology described herein. Computer system 700 may include any combination of devices or software capable of executing or otherwise providing the implementation of the technology described herein. For example, computer system 700 may include, or be a combination of, a cloud computing system, a data center, a server rack, a server, a virtual server, a desktop computer, a laptop computer, a tablet computer, a server device, a client device, a mobile phone, a personal digital assistant (PDA), a portable audio / video player, a game console, an in-vehicle computer, or a global positioning system (GPS). Computer system 700 may also be connected to other devices not shown or may operate as a standalone system. Furthermore, functionality provided by the illustrated components may, in some embodiments, be combined into fewer components or distributed among additional components. Similarly, in some embodiments, some functionality of the illustrated components may not be provided, or other additional functionality may be available.
[0198] Also, while various items are illustrated as being stored in memory or storage during use, those skilled in the art will appreciate that these items, or portions thereof, may be transferred between memory and other storage devices for purposes of memory management and data integrity. Alternatively, in other embodiments, some or all of the software components may execute in memory on another device and communicate with the illustrated computer system via computer-to-computer communications. Also, some or all of the system components or data structures may be stored (e.g., as instructions or structured data) on a computer-accessible medium or portable device readable by an appropriate drive, various examples of which are described above. In some embodiments, instructions stored on a computer-accessible medium separate from computer system 700 may be transmitted to computer system 700 as a transmission medium or signal, such as an electrical, electromagnetic, or digital signal conveyed over a communications medium, such as a network or wireless link. Various embodiments may further include receiving, sending, or storing instructions or data embodied on a computer-accessible medium in accordance with the foregoing description. Accordingly, the present invention may be practiced with other computer system configurations.
[0199] Although the block diagrams depict the illustrated components as separate functional blocks, embodiments are not limited to systems in which the functions described herein are organized as illustrated. The functionality provided by each component may be provided by software or hardware modules organized in a manner different from that currently illustrated; for example, such software or hardware may be mixed, combined, replicated, partitioned, distributed (e.g., within a data center or geographically), or organized in other different manners. The functionality described herein may be provided by one or more processors of one or more computers executing code stored on a tangible, non-transitory, machine-readable medium. In some cases, despite the use of the singular term "medium," instructions may be distributed on different storage devices associated with different computing devices, with each computing device having, for example, a different subset of the instructions. This is an implementation consistent with the use of the singular term "medium" herein. In some cases, a third-party content delivery network may host some or all of the information communicated over the network, in which case, to the extent information (e.g., content) can be described as being provided or otherwise provided, that information may be provided by sending instructions to obtain the information from the content delivery network.
[0200] The reader should understand that this application describes multiple inventions. Applicant has combined these inventions into a single document rather than separating them into separate patent applications because the subject matter of the inventions is related, leading to economies in the filing process. However, the separate advantages and aspects of such inventions should not be confused. It should be understood that, in some cases, while embodiments address all of the deficiencies noted herein, the technology is independently useful, and some embodiments address only a subset of such problems or provide other unmentioned advantages that will be apparent to those of skill in the art upon reviewing this disclosure. Due to cost constraints, some inventions disclosed herein may not be currently claimed and may be claimed in a later application, such as a continuation application, or by amending the present claims. Similarly, due to space limitations, the "Abstract" or "Summary" sections of this document should not be considered a comprehensive description of all such inventions or all aspects of such inventions.
[0201] It should be understood that the detailed description and drawings are not intended to limit the invention to the particular forms disclosed, but on the contrary, are intended to cover all modifications, equivalents, and alternatives falling within the spirit and scope of the invention as defined by the appended claims. Further modifications and alternative embodiments of various aspects of the invention will be apparent to those skilled in the art upon reading this description. Accordingly, this description and drawings are to be construed as illustrative only and are intended to teach those skilled in the art the general manner of carrying out the invention. It should be understood that the forms of the invention shown and described herein are to be considered as exemplary embodiments. Various elements and materials may be substituted for those shown and described herein, parts and processes may be reversed or omitted, and certain features of the invention may be utilized independently, all of which will become apparent to those skilled in the art after having the benefit of this description of the invention. Changes can be made in the elements described herein without departing from the spirit and scope of the invention as set forth in the following claims. The headings used herein are for organizational purposes only and are not intended to be used to limit the scope of the description.
[0202] As used throughout this application, the word "may" is used in its permissive (i.e., possibly) sense rather than its required (i.e., must) sense. Words such as "include," "including," and "includes" mean including but not limited to. As used herein, the singular forms "a," "an," and "the" include plurals unless the content clearly indicates otherwise. Thus, for example, reference to "an element" or "a element" includes a combination of two or more elements, regardless of the use of other terms and phrases for one or more elements, such as "one or more." The term "or" is non-exclusive unless expressly stated otherwise, i.e., it encompasses both "and" and "or." Conditional terms such as "depending on X, Y," "upon X, Y," "if X, Y," and "in the event of X, Y" imply a causal relationship in which the antecedent is a necessary causal condition, a sufficient causal condition, or a contributory causal condition for the consequent. For example, "When condition Y is satisfied, state X occurs" means either "X occurs because of Y alone" or "X occurs because of Y and Z." Such conditional relationships are not limited to the consequent being immediately entailed by the antecedent; they can also occur later depending on the consequent. Furthermore, in a conditional statement, the antecedent is linked to its consequent such that it relates to the likelihood of the consequent occurring. Unless otherwise indicated, a statement that multiple attributes or features map to multiple objects (e.g., one or more processors performing steps A, B, C, and D) encompasses both all of those attributes or features being mapped to all of those objects and a subset of those attributes or features being mapped to a subset of those attributes or features (e.g., both when all processors perform steps A through D, and when processor 1 performs step A, processor 2 performs step B and part of step C, and processor 3 performs part of step C and step D).Furthermore, a statement that a value or action is "based on" another condition or value encompasses both cases where the condition or value is the only factor and cases where the condition or value is one of multiple factors, unless otherwise indicated. A statement that "each" instance of a collection has a characteristic should not be read to exclude cases where the same or similar members of the larger collection do not possess that characteristic, unless otherwise indicated. That is, "each" does not necessarily mean all. For example, claims should not be read with restrictions on the order of recited steps unless expressly specified as "perform X, then perform Y." In contrast, statements that could improperly be argued to imply an order restriction, such as "perform X on an item, then perform Y on an item that has X," are used to improve claim readability rather than to specify an order. Furthermore, a statement such as "at least Z of A, B, and C" (e.g., "at least Z of A, B, or C") refers to at least Z units of each enumerated category (A, B, and C) and does not require at least Z units in each category. As will be apparent from the description, discussions herein utilizing terms such as "processing," "computing," "calculating," "determining," and the like are understood to refer to specific apparatus operations or processes, such as a special purpose computer or similar special purpose electronic processing / computing device, unless otherwise specified. Features described with reference to geometric constructs such as "parallel," "perpendicular / orthogonal," "square," "cylindrical," etc., should be interpreted to encompass items that substantially embody the properties of that geometric construct; for example, reference to "parallel" surfaces would encompass substantially parallel surfaces.The permissible range of deviation from the Platonic concept of these geometric constructs should be determined by reference to the ranges in the specification; if no such range is stated, reference should be made to industry norms in the field of use; if no such range is defined, reference should be made to industry norms in the field of manufacture of the specified feature; if no such range is defined, features that substantially embody a geometric construct should be construed to include features that are within 15% of the defining attributes of that geometric construct.
[0203] The present technology will be better understood with reference to the embodiments listed below. Embodiment 1. A non-transitory machine-readable medium storing instructions that, when executed by one or more processors, implement a process including: executing, by a computer system, a first web page accessible at a first domain and a second web page accessible at a second domain; receiving, by the computer system, a first data input at the first web page; updating, by the computer system, a first visualization provided at the second web page based on the first data input; and displaying, by the computer system, the updated first visualization in the second web page on a display. Embodiment 2. The medium of embodiment 1, wherein the second web page is embedded in the first web page. Embodiment 3. The medium of any one of embodiments 1 to 2, wherein the second web page is embedded in an iFrame with the first web page. Embodiment 4. The medium of any one of embodiments 1 to 3, wherein the second web page and the first web page run in the same web browser window. Embodiment 5. The medium of any one of embodiments 1 to 4, wherein markup and script define, at least in part, the first web page, the script including an event handler, the event handler configured to process the first data input received via a circumvention of a same-origin policy of a web browser in which the first web page and the second web page are running, and to perform an update of the first visualization of the second web page based on the first data input. Embodiment 6. The medium of embodiment 5, wherein the event handler is asynchronous. Embodiment 7. The medium of any one of embodiments 1 to 6, wherein the processing further includes receiving a second data input on the second web page by the computer system, updating a second visualization provided on the first web page by the computer system based on the second data input, and displaying the updated second visualization on the first web page by the computer system on the display. Embodiment 8. The medium of any one of embodiments 1 to 7, wherein the first web page includes a connection protocol including a function that provides an interface for calling the first web page. Embodiment 9. The medium of any one of embodiments 1 to 8, wherein the process further includes: executing, by the computer system, a third web page accessible at a third domain; updating, by the computer system, a second visualization provided on the third web page based on the first data input; and displaying, by the computer system, the updated second visualization on the third web page on the display. Embodiment 10. The medium of any one of embodiments 1 to 9, wherein the process further includes executing, by the computer system, a third web page accessible at a third domain, wherein the first web page and the second web page are embedded in the third web page, and wherein the third web page facilitates updating the first visualization provided on the second web page based on the first data input. Embodiment 11. A medium described in any one of embodiments 1 to 10, wherein updating the first visualization provided on the second web page based on the first data input is performed without transmitting the update outside a client computing device executing a web browser for the first web page and the second web page. Embodiment 12. A method for communicating between websites, comprising: executing, by a computer system, a first web page accessible at a first domain and a second web page accessible at a second domain; receiving, by the computer system, a first data input at the first web page; updating, by the computer system, a first visualization provided at the second web page based on the first data input; and displaying, by the computer system, the updated first visualization on the second web page on a display. Embodiment 13. The method of embodiment 12, wherein the second web page is embedded in the first web page. Embodiment 14. The method of any one of embodiments 12 to 13, wherein the second web page and the first web page run in the same web browser window. Embodiment 15. The method of any one of embodiments 12 to 14, wherein markup and script at least partially define the first web page, the script including an asynchronous event handler, the asynchronous event handler configured to process the first data input received via a circumvention of a same-origin policy of a web browser in which the first web page and the second web page are running, and to perform an update of the first visualization of the second web page based on the first data input. Embodiment 16. The method of any one of embodiments 12 to 15, further comprising: receiving a second data input on the second web page by the computer system; updating a second visualization provided on the first web page by the computer system based on the second data input; and displaying the updated second visualization on the second web page by the computer system on the display. Embodiment 17. The method of any one of embodiments 12 to 16, wherein the first web page includes a connection protocol including a function that provides an interface for calling the first web page. Embodiment 18. The method of any one of embodiments 12 to 17, further comprising: executing, by the computer system, a third web page accessible on a third domain; updating, by the computer system, a second visualization provided on the third web page based on the first data input; and displaying, by the computer system, the updated second visualization on the third web page on the display. Embodiment 19. The method of any one of embodiments 12 to 18, further comprising executing, by the computer system, a third web page accessible at a third domain, wherein the first web page and the second web page are embedded in the third web page, and the third web page facilitates updating the first visualization provided on the second web page based on the first data input. Embodiment 20. A method according to any one of embodiments 12 to 19, wherein updating the first visualization provided on the second web page based on the first data input is performed without transmitting the update outside a client computing device executing a web browser for the first web page and the second web page.
Claims
1. A non-transitory machine-readable medium storing instructions that, when executed by one or more processors, Executing, by a computer system, a first web page accessible at a first domain and a second web page accessible at a second domain; receiving, by the computer system, a first data entry at the first web page; updating, by the computer system, a first visualization provided on the second web page based on the first data input; displaying the updated first visualization in the second web page on a display by the computer system; and A medium for realizing processing including:
2. The medium of claim 1 , wherein the second web page is embedded in the first web page.
3. The medium of claim 1 , wherein the second web page is embedded in an iFrame along with the first web page.
4. The medium of claim 1 , wherein the second web page and the first web page run in the same web browser window.
5. markup and script defining, at least in part, the first web page, the script including an event handler; The event handler: processing the first data input received via a circumvention of a same-origin policy of a web browser in which the first web page and the second web page are running; and configured to perform an update of the first visualization of the second web page based on the first data input. The medium of claim 1 .
6. The media of claim 5 , wherein the event handler is asynchronous.
7. The process further comprises: receiving, by the computer system, a second data input at the second web page; updating, by the computer system, a second visualization provided on the first web page based on the second data input; and displaying, by the computer system, the updated second visualization of the first web page on the display. The medium of claim 1.
8. The medium of claim 1 , wherein the first web page includes a connection protocol that includes functions that provide an interface for invoking the first web page.
9. The process further comprises: executing, by the computer system, a third web page accessible at a third domain; updating, by the computer system, a second visualization provided on the third web page based on the first data input; and displaying the updated second visualization in the third web page on the display by the computer system. The medium of claim 1.
10. The process further comprises: executing, by the computer system, a third web page accessible at a third domain, wherein the first web page and the second web page are embedded in the third web page, and the third web page facilitates updating the first visualization provided on the second web page based on the first data input. The medium of claim 1.
11. 10. The medium of claim 1, wherein updating the first visualization provided on the second web page based on the first data input is performed without transmitting the update outside of a client computing device executing a web browser for the first web page and the second web page.
12. 1. A method of communicating between websites, comprising: Executing, by a computer system, a first web page accessible at a first domain and a second web page accessible at a second domain; receiving, by the computer system, a first data entry at the first web page; updating, by the computer system, a first visualization provided on the second web page based on the first data input; and displaying, by the computer system, the updated first visualization in the second web page on a display. method.
13. The method of claim 12 , wherein the second web page is embedded in the first web page.
14. The method of claim 12 , wherein the second web page and the first web page run in the same web browser window.
15. markup and script defining, at least in part, the first web page, the script including an asynchronous event handler; The asynchronous event handler: processing the first data input received via a circumvention of a same-origin policy of a web browser in which the first web page and the second web page are running; and configured to perform an update of the first visualization of the second web page based on the first data input. The method of claim 12.
16. receiving, by the computer system, a second data input at the second web page; updating, by the computer system, a second visualization provided on the first web page based on the second data input; and and displaying, by the computer system, the updated second visualization of the second web page on the display. The method of claim 12.
17. The method of claim 12 , wherein the first web page includes a connection protocol that includes a function that provides an interface for invoking the first web page.
18. executing, by the computer system, a third web page accessible at a third domain; updating, by the computer system, a second visualization provided on the third web page based on the first data input; displaying, by the computer system, the updated second visualization in the third web page on the display. The method of claim 12.
19. 13. The method of claim 12, further comprising executing, by the computer system, a third web page accessible at a third domain, wherein the first web page and the second web page are embedded in the third web page, and wherein the third web page facilitates updating the first visualization provided on the second web page based on the first data input.
20. 13. The method of claim 12, wherein updating the first visualization provided on the second web page based on the first data input is performed without transmitting the update outside of a client computing device executing a web browser for the first web page and the second web page.