Giter VIP home page Giter VIP logo

tapestry's Introduction

Tapestry (Scientific Visualization as a Microservice)

Powered by Intel Rendering Framework

Tapestry is a platform for creating lightweight, web-based volume rendering applications at scale, for many users.

Requirements

Installation

Run ./tapestry.sh depend to fetch and install the Tapestry submodules.

Running ./tapestry.sh build will then build and install the Tapestry Docker image. You can use -j to specify the number of processes for building. Use -m to minify the Javascript internally.

Running the example

  • To run the example, first download the data, the configurations, and the example app using ./tapestry.sh examples
  • Second, run ./tapestry.sh run -c examples/configs/ -d examples/data -a examples/app
  • Third, navigate to http://127.0.0.1:8080 in your browser
  • tapestry.sh provides all of the management scripts needed for building and running. Run ./tapestry.sh -h for more options
  • Since Tapestry uses Docker Swarm, to kill the running service, run docker service rm tapestry

Usage

To use Tapestry with your own page and datasets, you will need three things:

  1. A directory with your datasets (currently, Tapestry supports raw single variable binary as well as NetCDF files)
  2. A directory with one or more configuration files that point to the data. You can use the provided examples above as a starting point
  3. An index.html with hyperimage and optionally, hyperaction tags

You can provide additional Tapestry options by editing tapestry/enchiladas/src/js/main.js after doing an initial build. You would also need to rebuild the image after any edits.

If you use Tapestry, please cite one or both of these two papers:

@article{raji2018scientific,
  title={Scientific Visualization as a Microservice},
  author={Raji, Mohammad and Hota, Alok and Hobson, Tanner and Huang, Jian},
  journal={IEEE Transactions on Visualization and Computer Graphics},
  year={2018},
  publisher={IEEE}
}

@INPROCEEDINGS {Tapestry2017,
    author    = "M. Raji and A. Hota and J. Huang",
    title     = "Scalable web-embedded volume rendering",
    booktitle = "2017 IEEE 7th Symposium on Large Data Analysis and Visualization (LDAV)",
    year      = "2017",
    pages     = "45-54",
    month     = "Oct",
    doi       = "10.1109/LDAV.2017.8231850"
}

More documentation can be found in the wiki.

tapestry's People

Contributors

ahota avatar auxiliary avatar player1537 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

tapestry's Issues

Lag with larger datasets, presumably due to Docker

When interacting with a large dataset (e.g. 30 GB), there is significant lag between interaction and response. This does not occur when using Enchiladas alone, only when running within Tapestry. Adding multiple containers doesn't seem to help much.

ReferenceError: event is not defined

In the current version of Enchiladas (22bca3b49818b65bbfdd904cc8dd9a7842ffa277), we seem to have a bug with the JavaScript code for tapestry.js (permalinked and highlighted here):

        $(this.element).on("mousemove", function(){
            self.canceler = (self.canceler + 1) % 1000;
            if (self.canceler % 5 == 0)
            {
                var mouse_x = event.clientX - self.element.getBoundingClientRect().left;
                var mouse_y = event.clientY - self.element.getBoundingClientRect().top;
                self.rotate(mouse_x, mouse_y, 1); // Render low quality version
            }
        });

Caching requires the name of the service to be "tapestry"

The name of the upstream in nginx is hard coded to "tapestry". We don't use docker compose but something like "links" from docker compose should be used as a solution.

Note: Environment variables cannot be used in the upstream tag in the nginx configuration.

Add a more exhaustive check for submodules

Right now we do a naive submodule check (if the directory exists, submodules have been pulled in), but we need a better one. When you clone (without --recursive), it still creates the directories, so the script incorrectly assumes they've been pulled in.

An easy fix might be to just always call git submodule update --init, but we'll have to check.

Testing more installation options

Some installation issues that have been noted by users:

  • pip is only installed if minifyjs is enabled
  • ispc and embree links are sometimes not working
  • check to see if we have to clone with --recursive or not

Great paper and tech...

Your paper was really interesting to read and investigating a stateless server for dynamic rendering definitely seems interesting.

But I wanted to add a couple comments.

You did cover ParaViewWeb/Visualizer+LightViz but missed ArcticViewer which rely on pre-generated images (in some cases) which allow dynamic interaction on the client side without any specific server requirement and therefore will scale without putting any burden on the viewing resource.

You can find the original web site here: https://kitware.github.io/arctic-viewer/

And some usage here: https://openchemistry.github.io/tomvizweb/
The image based one: https://openchemistry.github.io/tomvizweb/docs/images_volume_exploration.html

Anyway great work!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.