Linking any two objects in the session state

Added by Andy Dufilie almost 3 years ago

A new feature in Weave allows you to link any two objects in the session state without using JavaScript. Changes to the first object will be reflected in the second object, and vice versa. Advanced users can also write scripts that can link two objects which are not initially compatible.

To link any two objects:
  • Open the session state editor and find the first object in the tree.
  • Right-click on the tree item and select "Copy path to selected object."
  • Find the second object in the tree, which should be the same type as the first object.
  • Right-click on the second tree item and select "Link session state with another object."
  • Paste in the path you copied for the first object and click "Ok."
  • Optional: The steps above create a new LinkableSynchronizer object at the top level of the session state which takes care of the linking. Advanced users can edit the session state of the synchronizer and enter primaryTransform and secondaryTransform scripts to generate new session state structures. The following variables are available in such scripts: state (the session state), primary (the primary object), secondary (the secondary object). The primary object is the one that you clicked on when selecting "Link session state with another object."

Weave Milestone 1.9 released

Added by Andy Dufilie over 3 years ago

Weave Milestone 1.9 has been released. Here are some of the recent changes:

Faster startup time has been achieved by delaying the creation of control panels for visualization tools until the user clicks the gear button.

New data transforms for restructuring data in the Weave client.
  • Partitioned Table - Filters by column values to create disjoint sets of records
  • Grouped Data Transform - Aggregates data, grouping records by values from a column.
  • Foreign Data Mapping - Uses a foreign key column to create a mapping of keys from one table to data in another table.
Template session states for quickly populating a set of visualizations with a new data file.
  • Preliminary support has been added for template session states. There is a new item under the Session menu for converting a session state into a template. This will remove all data sources and reset all attribute selections. When a new data file is loaded as a data source, the visualization attributes will be populated with columns from that data file.
New visualizations.
  • Simplified Table Tool - Much faster than the old table tool, which is now called "Advanced Table Tool."
  • Parallel Coordinates - A common way to visualize high-dimensional data.
Interface simplifications.
  • The Data menu now has menu items for directly adding new data sources, which are organized into meaningful groups: Files, Servers, and Data Transforms.
  • The Tools menu now lists the basic tools first and the more obscure ones in a sub-menu.
  • Visualizations can now be created directly from the Data Source Manager's browser, which will populate the tool's attributes with columns from the active category in the data browser.
  • Adding custom layers to a tool now takes less clicks, since layers can be added from a drop-down menu instead of a separate popup window.
  • Improved CSV Data Source editor including custom delimiter support when pasting in delimited text.
JavaScript API improvements.
  • New WeavePath function: setColumn(), which greatly simplifies JavaScript code that configures column objects in Weave.
  • Function pointers can now be passed between Weave and JavaScript (See example below).
  • WeavePath objects can now be passed to Weave functions as if they were pointers to the session state objects they reference (See example below).
  • Session state objects returned from Weave functions are now converted into corresponding WeavePath objects.
  • Example:
    // linking the zoom of two map tools
    var subpath = ['children', 'visualization', 'plotManager', 'zoomBounds'];
    var zb1 = weave.path('MapTool').push(subpath);
    var zb2 = weave.path('MapTool2').push(subpath);
    // Function pointers can be passed between Weave and JavaScript
    var linkSessionState = weave.path().getValue('WeaveAPI.SessionManager.linkSessionState');
    // WeavePath objects are automatically replaced with their corresponding ILinkableObjects when calling Weave code.
    linkSessionState(zb1, zb2);

New Layer Settings Tool

Added by Andy Dufilie over 3 years ago

There is a new "Layer Settings Tool" available in the Tools menu. This tool displays layer settings controls for another visualization tool. You can customize which settings are shown on the panel and optionally exclude certain layers. The sliders control the alpha values (opacity) of individual layers.

{{thumb(layer-settings-tool.png, issue=804)}}

Added support for GeoJSON

Added by Andy Dufilie over 3 years ago

GeoJSON is now an option when you create a new data source in Weave. You can either import a local .geojson file or specify a URL.

In the "Data" menu, select "Manage or browse data", click "New data source...", then select "GeoJSON."

{{thumb(geojson.png, issue=1425)}}

Improved map quality

Added by Andy Dufilie almost 4 years ago

Now when you use a base map in a Map Tool, the zoom level will be adjusted to match one of the fixed zooms supported by the base map. This matches the behavior of all other image-based mapping software. When there is no base map in use, smooth zooming will be available. This new behavior can be disabled in the Map Tool's control panel if smooth zooming with base maps is still desired.

Dramatic performance improvements

Added by Andy Dufilie almost 4 years ago

Using the FlasCC cross compiler (now CrossBridge) we were able to dramatically improve the performance of .weave archive extraction and CSV parsing. The Weave client can now load larger files faster. Here are some examples:

File Type File Size Old Version Processing Time New Version Processing Time
.weave (.zip) 8.17MB 66 seconds (Flash quits after 15 seconds) 1 second
.csv 59.0MB 128 seconds (while allowing interaction) 6 seconds

We plan to continue improving other parts of Weave using this technology.

Added support for CKAN data portals.

Added by Andy Dufilie about 4 years ago

You can now add a CKAN site as a data source in Weave.
Select "Data" -> "Manage or browse data" from the menu, then click "New data source...." to add a new data source.
At this time, only CSV and XLS files referenced by CKAN sites are supported.

{{thumb(ckan-data-source.png, issue=1426)}}

Added support for SQLite

Added by Andy Dufilie about 4 years ago

You can now choose SQLite in the Weave Admin Console when setting up a database connection. SQLite allows you to store your data directly to a file without requiring you to install a database management system. You do not have to install anything to start using this feature, as SQLite is now included in the Weave installation archive.

Weave Milestone 1.8 released

Added by Andy Dufilie about 4 years ago

Many changes related to data hierarchies have been included in this release.
  • The Attribute Selector now supports multiple selection with shift+click and ctrl+click.
  • The Attribute Selector now has a simplified search interface that finds matching columns and categories simultaneously.
  • You can build custom data hierarchies in the Admin Console and then select one in the client-side Data Source Manager (From the menu, "Data" -> "Manage or browse data").
  • WeaveDataSource no longer generates client-side XML data hierarchies.
    • XML data hierarchies in existing visualizations are still supported for backwards compatibility.
    • To take advantage of the new features using old session states, you will need to refresh the hierarchy manually. This will remove the old XML hierarchy from the session state and make the visualization load much faster next time. Since the hierarchy is no longer saved in the session state, the hierarchy will now be refreshed automatically each time Weave is opened.
      • In Milestone 1.8, select "Data" -> "Refresh all data source hierarchies"
      • If you are using the latest nightly build and the "Refresh" menu item is hidden (the new default), select "Data" -> "Manage or browse data" from the menu and then select Refresh hierarchy from the menu of the WeaveDataSource.
  • The Weave data server no longer uses the weave_manifest SQL configuration table (description here).
    • This change makes server-side metadata querying much faster than before.
    • If you have written code that populates this table, you will need to modify your code to insert entityType metadata into the weave_meta_public table instead (add records like {entity_id: 123, meta_name: "entityType", meta_value: "column"}). Possible values for the entityType metadata field are table, column, hierarchy, category.
    • You should also update any JavaScript code that invokes Weave server commands to use the new interface (AdminService, DataService).

Weave Milestone 1.7 released

Added by Andy Dufilie about 4 years ago

An important change was made to the Weave Path API in today's milestone version 1.7. The push() and pop() functions in the Weave Path API no longer modify the WeavePath object in place. This will make your Weave code more reliable. Because most Weave API code should use method chaining, it is unlikely that this change will have adverse effects on the code you have written. If you would like us to review your code for potential problems, feel free to contact us on the mailing list.

Behavior prior to Milestone 1.7

var path1 = weave.path("foo");
var path2 = path1.push("bar");

console.log( path1.getPath() ); // prints ["foo", "bar"]
console.log( path2.getPath() ); // prints ["foo", "bar"]
console.log( path1 == path2 ); // prints true because they are the same WeavePath object

Behavior after Milestone 1.7:

var path1 = weave.path("foo");
var path2 = path1.push("bar");

console.log( path1.getPath() ); // prints ["foo"]
console.log( path2.getPath() ); // prints ["foo", "bar"]
console.log( path1 == path2 ); // prints false because they are different WeavePath objects

console.log( path2.pop() == path1 ); // prints true because path2 was created with path1.push("bar")

1 2 3 ... 8 (1-10/79)

Also available in: Atom