Catalog of URSYS Modules - dsriseah/ursys GitHub Wiki

This is a running list of old code to port into the URSYS library, either as a core library or an addon.

Current Features

  • UR CLI Core - system to fork processes from folder structure, import packages from UR folders by top-levels apps.
  • UR HTTPS Core - adding secure server-compatible operation via HTTPS and websocket upgrades.
  • VSENV CLI - a script that runs within VSCODE to check environment (nodejs version, machine architecture)
  • Net Addon - implementing refactored URNET server-client support for websockets, http+websockets, and unix domain sockets.

Being developed as part of NetCreate ITEST (2023).

  • Commenting Addon - commenting database system WIP
  • Templating Addon - project data management, customizable by end users to set app-level settings within a domain

Testing Modules

  • SQLite - minimal test implementation runnable from UR CLI
  • LokiJS - minimal test implementation, runnable from UR CLI
  • MIDI - minimal midi test app+appserver, runnable from UR CLI

Potential Features to Port and Update

There are a number of interesting data structures and managers from our past work that might be adaptable into URSYS CORE or as an Addon.

STEP, PLAE, ISTEP (2013, 2015, 2016)

These are realtime simulation-based activities using a motion tracker system as the controller input, allowing kids to run around in the space.

  • Location - this had an implementation of a LocaleManager that could be improved and remodeled to modern architectural standards. It contained various transforms
  • PieceManager - the foundation of all our simulation logic since 1995 (2007+ for Inquirium)
  • PTrack - GEMSTEP implements the improved version of this module
  • WebCam - Some basic connectivity stuff, but with Viewports.
  • WebGL - this used ThreeJS with a fairly decent transformation pipeline I built on top of it, which is worth porting as a standard. The Inquirium version of the Visual/Piece hierarchy is built-into this
  • WebRTC - this was a poor implementation from when it was new, but would like this

Net.Create (2018)

NetCreate implements a group-editable network graph.

  • Comment System - Ben's been working on this in ITEST, and it's going to be the first ported integration system
  • D3 Module - We have a D3 wrapper around this that syncs to Loki
  • Declare Modules - these are ideas about how to model things architecturally, particular naming. Not actually used for anything
  • SQLite - I think there's a test version in ITEST
  • Standalone Mode - This implemented a static-html build mode, unfortunately using an ancient build tool. Conceptually would be nice to have.

MEME SEEDS (2018)

  • Admin Interface - One of the more comprehensive interfaces for admin stuff
  • Student Manager - Implement a variation of Login Tokens from NetCreate, but with student name encoded into it.
  • Electron Build System - This is kind of interesting in how it uses Webpack to do its bidding
  • Electron aka App Versions - This might still be worth porting over, but would need a huge rework with the build system
  • SVG Renderer - This is what draws the MEME model, might have some stuff worth pulling out though it's not that sophisticated. The nested box renderer might be worthwhile to make universal.

GEM-STEP (2019)

One of our most complicated projects to date, many interesting technologies

Data Persistence

  • Logger - client app logging utility
  • LokiGraphGL - GraphGL interface for LokiJS (kinda shitty)
  • Resource, Template systems - These work but are not easily human editable because they rely on JSON templates.
  • ResourceBundler - managing an object with multiple resources in it, used for the script blueprint storage. Might be a resusable concept.

Data Managers

  • DataMap, DifferenceCache - classes that detect changes in collection as added, updated, removed
  • MappedPool, SyncMap - allocate a collection of objects with ids to a Pool of objects, allowing attachment of handlers for updated, removed, added ids.
  • PathedHasher - turns a key like a.b.c into Maps inside of Maps. Used by the device manager I think
  • Pool - pre-allocated object manager with automatic expansion
  • StickyCache - a buffered version of DifferenceCache, which allows for "aging" of items before they are considered removed.
  • Vector - Vector utilities related to interpolated motion

Runtime Managers

  • StateMgr - manages collections of flat state objects, enforcing naming uniqueness and casing rules. For use by AppCore modules that are bridging user interface with data.
  • PhaseMachine - an async hook-based system for controlling the order of code execution, similar to "run levels", to control runtime on the front end instead of letting the UI run the show.
  • gsgo - A CLI build tool that is invoked from a package.json script. More recent projects have a utility like this (e.g. MEME) or have some of its features built-into the custom server. It displays information for current git branch, displays the appserver address, and performs other checks. More complicated utilities may be include to clone data, etc. Would be nice to standardize to make writing custom servers a bit less verbose code-wise.

I/O

  • Input, UDevice - client-side device implementation, which GEMSTEP controller apps use to send, and clients of devices to "subscribe" to "device specs"
  • NetDevices - manager for UDevice connect/disconnect, maintaining the pool of UDevices that are active as they appear/disappear on URNET
  • Tracker - PTrack UDP controller bridge, with POZYX support hacked in

Simulator ELements

  • Feature/Color - utilities related to color conversion, but uses weird conventions to fix
  • Feature/Costumes - The idea of assigning a visual to piece, and providing different expressions, modes, animation, features for it.
  • Feature/Cursor - The idea of designating a piece as an in-simulation controlled object from user input, interacting with areas of the sim through overlap and firing events
  • Feature/Graphing - Data visualization to rendered textures to use as Sprite overlays
  • Feature/Movement - Scriptable autonomous movement of agents
  • Feature/Physics - Idea of standardized API for physics application with a choice of backend libraries that meet the need of the simulation
  • Feature/Population - statistical methods for counting and assessing the population of pieces, as well as creating/deleting them.
  • Feature/Timer - Managing notions of time, elapsed time, etc.
  • Feature/Touches - determining when pieces are overlapping, and firing events
  • Feature/Vision - Idea of providing "vision" to a piece to see what's visible in the simulation space
  • Sim/Conditions - collection of set-related condition checks, including area triggers and global events in the world
  • Sim/DisplayObject - distributed rendering system
  • Sim/GEMScript - simple "compiled" script compiler with pluggable keyword and features
  • Sim/Referee - rules for the "game conditions", determining win/lose/end. AI for the game level modes and loops
  • Sim/Rounds - This is a kind of level manager, the idea of which is good. Includes configure
  • Sim/Visual - Generic visual properties that are NOT implementation specific (ideally)

Services

  • AssetManager + AssetLoader - base class for implementing media loaders (e.g. sprites)
  • AssetServer - middlewear for managing a manifest-driven resource loader (see express-assets)

Utilities

  • Path - Path strings?
  • URNetPeek - utility app for researchers to snoop or URNET message traffic for logging purposes

Net.Create ITEST (2023)

  • Template System - This is yet to be created in ITEST, but will be ported
  • Login Tokens - Generates short "passwordless" logins with hash protection. Not intended to be secure, used instead for tracking users in a classroom context for manual distribution.
⚠️ **GitHub.com Fallback** ⚠️