Git Product home page Git Product logo

glowscript's Introduction

GlowScript

GlowScript makes it easy to write programs in JavaScript or VPython (which uses the RapydScript compiler) that generate navigable real-time 3D animations, using the WebGL 3D graphics library available in modern browsers (with modern GPU-based graphics cards). For example, the following complete program creates a 3D canvas in the browser, displays a white 3D cube, creates default lighting, places the camera so that the cube fills the scene, and enables mouse controls to rotate and zoom the camera:

   box()

That's it. That's the whole program (except for the GlowScript version header line that is supplied automatically). The key point is that lots of well-designed defaults are built into the GlowScript library. You can of course specify the canvas size, the color and other attributes of the objects, the direction of the camera view, etc.

For a history of the development of VPython, see A time line for VPython development. Here is a technical overview of GlowScript VPython and VPython 7: VPython Architecture.

Documentation

At glowscript.org click Help for full documentation. There is an extensive set of example programs available from the first page of glowscript.org. Programs can be created and stored at glowscript.org, but it is also possible to export a program to place on your own web page, or to use the GlowScript library without storing the program at glowscript.org. For programs stored at glowscript.org, you can share a link with someone and they can run your program simply by clicking on the link. Here is an example:

https://www.glowscript.org/#/user/GlowScriptDemos/folder/Examples/program/Bounce-VPython

GlowScript was inspired by VPython. The project was begun in 2011 by David Scherer and Bruce Sherwood. Originally programs had to be written in JavaScript, but in November 2014 it became possible to use Python, thanks to the RapydScript Python-to-JavaScript compiler created by Alex Tsepkov. GlowScript is now using a later version, RapydScript-ng developed by Kovid Goyal.

For information related to building the GlowScript application, see MakingNewVersion.txt in the docs folder. Also in the docs folder is an overview of the GlowScript architecture, GlowScriptOverview.md.

Sister Project

VPython 7 lets you run VPython programs in a Jupyter notebook or from program launchers such as IDLE or Spyder: see vpython.org. Its development was initiated by John Coady and further developed by him, Ruth Chabay, Matt Craig, and Bruce Sherwood. The syntax is the same as GlowScript VPython, and it uses the GlowScript 3D graphics library, but VPython 7 runs with an installed standard Python, which provides access to the large number of Python modules. GlowScript VPython does not require installing any software but provides access only to libraries written in JavaScript, not to standard Python modules (it does however provide portions of Python's "random" module).

Run Locally

At glowscript.org, your programs are stored in the cloud and are accessible from anywhere. However, there are times when you might need to write and run programs even when disconnected from the internet.

In this repository, click GlowScriptOffline3.2.zip and download the zip file.

Unzip the GlowScriptOffline package to any convenient place on your computer.

Inside the GlowScriptOffline folder, read the README file to learn how to use the package.

Run a Local Server (Py3 version)

There are two sets of instructions given here for two possible approaches.

  1. The first, "All Docker", is quite simple, and involves only minimal new software (just Docker). If you're using macOS or Linux you can run the local webserver and datastore all in Docker. You don't need to install anything else. However there is a rather annoying bug in Windows that prevents the webserver from automatically restarting when source files change. For this reason, if they wish to have this feature, windows users must run a python process concurrently that tracks file changes during development. Having said that, if you just want to try a local webserver, and you don't care about having to restart the server manually every time you change the source code, you can skip running the extra python process. This is all described below.

  2. The second, "Only Datastore in Docker", requires that users also install a recent (e.g., 3.7+) version of python (and pip) such as that provided by anaconda (or miniconda), as well as Docker. This is all also described below.

Local Server Approach (1) All Docker

First install [Docker](https://www.docker.com/products/docker-desktop. Once installed, start the Docker process.

Next check out or download the py38-app-engine branch of the glowscript repository (currently the py38-app-engine branch). (How you do this depends on your familiarity with git. The simplest is to download a .zip file of the py38-app-engine branch of the repository here)Then open a console in the glowscript directory of the repository and run the webserver and datastore in docker:

  docker-compose up

this will take a substantial amount of time the first time, since it has to download all the docker images. Once it's running, browse to: http://localhost:8080 to view the website. That's it! This will run in a window and show you how the webserver is handling requests. If you'd rather run this in the background you can use:

  docker-compose up -d

When you're finished, shut down the system with:

  docker-compose down
  • P.S. If you're using windows an you want to use the "auto-restart" feature when code files change you'll need to run the filesystem monitoring tool docker-windows-volume-watcher

    pip install docker-windows-volume-watcher
    
  • And when you're running the glowscript server locally, in a separate window, execute:

    docker-volume-watcher glowscript_flask_1
    
  • and it will take care of the rest.

Local Server Approach (2) Only Datastore In Docker

To run a local webserver with only the datastore in Docker, but the webserver itself running natively you need a recent version of Python3 and pip installed. The easiest method is probably to install anaconda (or miniconda, if you don't want the GUI package manager and extra applications). Once you have that you need to check out or download the py38-app-engine branch of the glowscript repository (currently the py38-app-engine branch). (How you do this depends on your familiarity with git. The simplest is to download a .zip file of the py38-app-engine branch of the repository here) First "cd" to the glowscript directory (the root directory of the repository) and create a virtual environment for glowscript like so:

  cd /path/to/glowscript
  python -m venv venv

This will build a virtual environment for running locally. To activiate the virtual environment:

  mac: source venv/bin/activate
  windows (power shell): venv\Scripts\Activate.ps1
  windows (cmd.exe shell): venv\Scripts\activate.bat

Your terminal prompt should now have a (venv) indicating that you have activated the glowscript virtual environment. Before you can run glowscript the first time, you'll need to install dependencies into the virtual environment. This can be done with pip:

  pip install -r requirements.txt

In order to run the local datastore emulator it's easiest to use Docker. Download a version of Docker that works with your OS. To test that you've got docker installed OK, in the glowscript directory type:

  docker-compose -f docker-datastore.yml up

this will take a substantial amount of time the first time, since it has to download all the docker images. You'll see a lot of log messages, but among them you should see:

  datastore_1  | [datastore] Dev App Server is now running.

In this case you're good! If not, check the error messages and see if there are any useful clues. Good luck.

If the datastore is running, hit ctrl-c, and then type:

  docker-compose -f docker-datastore.yml up -d

This will run the datastore in the background.

With the datastore running, you can run the webserver by typing:

  flask run

and then browse to: http://localhost:8080 to view the website.

When you're finished hit ctrl-c and then type:

  docker-compose -f docker-datastore.yml down

To stop the background datastore emulator.

Then next time you're ready to develop, you can simply activate the environment again (make sure you see the "(venv)" in the shell prompt) and type:

  docker-compose -f docker-datastore.yml up -d

  flask run

And you'll be up and running!

For Developers

In this repository's docs folder is a file GlowScriptOverview.md that describes the architecture of GlowScript in detail. For many of the current issues, the relevant part of the document is the section on Execution (run-time). To test changes it is necessary to run a local server, as is describe in the previous heading. When you want to run using recent changes, you need to choose a version 0.1 greater than the current version number, and append "dev". For example, if the current version is 2.9, the first line of a test program would be GlowScript 3.0dev VPython.

License

The license is found at LICENSE.txt.

Early version

In December 2014 the original GlowScript repository was corrupted in such a way that it could not be reconstituted, but a backup that contains the history of commits is here:

https://bitbucket.org/davidscherer/glowscript_backup/overview

glowscript's People

Contributors

brucesherwood avatar sspickle avatar wigie avatar thehappyt avatar dependabot[bot] avatar deltagphys avatar iblislin avatar nastasi avatar stevespicklemire avatar drewsday avatar eltos avatar blakeguilloud avatar brianpmarks avatar

Forkers

kcupsi

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.