changed 4 years ago
Linked with GitHub

Sketchdance Suite - Fuller Version

tags: archived

Description

Sketchdance is the working title for a proposed/in-progress suite of web applications that are intended to work together to be greater than the sum of their parts. The suite includes intentionally simple content creation tools (Shimmy, Veil, Jitter, and Gammaray), more advanced programming tools (Moonshine, Waterbear, Plugh, Joker), a whole bunch of underlying, re-usable tools to put these together (Tardigrade, Moss Piglet, Dexter, Alley, DJ, Orchard, Soup), some tools for sharing, both privately (Moat) and socially (Xastle), some smaller re-usable components (Halo, Roomatoom), and some larger projects that don't fit in any of the categories, but leverage many pieces of Sketchdance (Garden, Bootleg, Pearly). Descriptions and status of all of these are below, along with some initial ideas of how they fit together.

Because there is a lot of overlap between these web applications goals, i.e., Drawing Board, Greenscreen, and Stop Motion are all very similar, there can be benefits to developing them in parallel and each can be informed by the others. Waterbear and Garden are different but might be useful to integrate with both content creation and sharing. I want two ways of storing results: shared to a social site (based on the Scratch community) or posted to a temporary private server to be downloaded later. Collectively, this is the Sketchpad Suite.

Project relationships

Rough idea of how all of these projects relate to each other. Not all connections are shown, for instance many of the projects are designed to work with / rely on projects from Infrastructure, and ideally there will be a rich set of interconnections from the media creation projects to the programming projects (so you can, i.e., create sprites in Shimmy and use them for a game in Waterbear).

digraph hierarchy {
  Sketchdance [label="Sketchdance\nUmbrella Project"]
  Stack [label="Standard\nStack" URL="#Stack"]
  Infrastructure [label="Infrastructure\nDependencies" URL="#Infrastructure"]
  Content [label="Content\nCreation", URL="#Content-Creation"]
  Programming [label="Programming\nTools & Languages" URL="#Programming"]
  Advanced [label="Advanced\nProjects" URL="Advanced-Projects"]
    Sketchdance -> Stack
    Sketchdance -> Infrastructure
    Sketchdance -> Content
    Sketchdance -> Programming
    Sketchdance -> Advanced
}

Currently Working on


Content Creation

Nodes in red have not been started in any significant way yet. Nodes in black at least have a prototype implementation.

digraph hierarchy {
    node [shape=box]
    Content [shape=oval, label="Content Creation"]
    Shimmy [label="Shimmy\nFlipbook Animation" URL="#Shimmy"]
    Veil [color=red, label="Veil\nGreenscreen Capture" URL="#Veil"]
    Jitter [color=red, label="Jitter\nStop Motion Animation" URL="#Jitter"]
    Gamma [color=red, label="Gamma\nSpecial FX" URL="#Gamma"]
    Content -> Shimmy
    Content -> Veil
    Content -> Jitter
    Content -> Gamma
}

Shimmy

Flipbook Animation

Shimmy is sketch-based animation tool (status: working, needs Moat and some UI work). All the content-creation tools use Moat and eventually Xastle. Will feed into Waterbear and other Moonshine-based tools.

Veil

Greenscreen Effects

A program to remove/change background for photos (and add effects?) (status: early stage, needs to be able to turn off autofocus).

Jitter

Stop Motion Animation

  • Status: Planning, start soon
  • Documentation, Progress, Bugs
  • Code
  • Demo
  • Teaching Guide

Gammaray

Special FX


Programming

Nodes in red have not been started in any significant way yet. Nodes in black at least have a prototype implementation.

digraph hierarchy {
    node [shape=box]
    Programming [shape=oval]
    Waterbear [label="Waterbear\nBlock-based programming" URL="#Waterbear"]
    Plugh [color=red, label="Plugh\nFlow-based programming" URL="#Plugh"]
    Joker [color=red, label="Joker\nHypercard-like programming" URL="#Joker"]
    Moonshine [label="Moonshine\nProgramming Language" URL="#Moonshine"]
    Programming -> Moonshine
    Moonshine -> Waterbear
    Moonshine -> Plugh
    Moonshine -> Joker
}

Waterbear

Block-based visual programming

Waterbear is a Scratch-like programming tool for general web and graphics programming. One of the most ambitious pieces to date, used (and developed) around the world. Currently being updated to be based on Moonshine and DJ, which will enable several features not possible before.

Moonshine

Block-aware text-based programming language

Moonshine is a text-based language that maps well to blocks (status: early prototype). This is important because most languages do not necessarily map well to blocks.

Moonshine will start by being factored out of existing Waterbear code and turned into a runtime that can be shipped with Moonshine files to make them runnable in the browser stand-alone. Will evolve from there, the goal is to make it transpilable to other languages relatively easily.

Plugh

Flow-based programming for the web

Plugh is a tool for flow-based programming for the web. Ideally should also use Moonshine behind the scenes. This is an alternative graphical programming tool, similar to Quartz Composer, Pure Data, and other graph-like programming tools.

  • Status: Not started
  • Documentation, Progress, Bugs
  • Code
  • Demo
  • Teaching Guide

Joker

Card-based programming for the web

Joker is a Hypercard-like interface with elements of MirrorWorlds (sortable, searchable, filterable streams of cards).

  • Status: Not started
  • Documentation, Progress, Bugs
  • Code
  • Demo
  • Teaching Guide

Utilities

digraph hierarchy {
    node [shape=box]
    Utilities [shape=oval, label="Programming\nUtilities"]
    Tardigrade [label="Tardigrade\nGeneral Blocks" URL="#Tardigrade"]
    Dexter [color=red, label="Dexter\nCode Analysis" URL="#Dexter"]
    Alley [color=red, label="Alley\nWebapp Connect" URL="#Alley"]
    "Moss Piglet" [color=red, label="Moss Piglet\nDrawing & UI" URL="#Moss-Piglet"]
    Halo [color=red, label="Halo\nObject Manipulation" URL="#Halo"]
    Roomatoom [color=red, label="Roomatoom\nZooming Interface" URL="#Roomatoom"]
    Utilities -> Dexter
    Utilities -> "Moss Piglet"
    "Moss Piglet" -> Tardigrade
    "Moss Piglet" -> Halo
    "Moss Piglet" -> Roomatoom
    Utilities -> Alley
}

Tardigrade

Block toolkit

General purpose tool for creating block-based languages. Waterbear uses blocks specific to Moonshine, but Tardigrade can support blocks for any language.

  • Status: Early version working as part of Waterbear, but needs to be extracted and generalized
  • Documentation, Progress, Bugs
  • Code
  • Demo
  • Teaching Guide

Dexter

Code analysis

Dexter is a code analysis tool to find all uses of functions, and do deep analysis to suggest code improvements (both in performance and reduced code) and to dramatically aid code maintenance.

  • Status: Not started
  • Documentation, Progress, Bugs
  • Code
  • Demo
  • Teaching Guide

Alley

Connector from web-apps to the rest of the world

Alley is an optional external program to connect web-based scripts to your computer, similar to Scratch Link. Allows Waterbear blocks to create Python code, hook into other systems. Will be usable for all Moonshine language and Tardigrade interfaces.

  • Status: Not started
  • Documentation, Progress, Bugs
  • Code
  • Demo
  • Teaching Guide

Moss Piglet

Graphic toolkit and runtime

Moss Piglet is a layered toolkit for graphics and user interfaces, based on ideas from the Nile language from STEPS towards the reinvention of programming.

  • Status: Not started
  • Documentation, Progress, Bugs
  • Code
  • Demo
  • Teaching Guide

Halo

Direct object manipulation

Halo is a Squeak-like halo tool for manipulating objects in a reusable way

  • Status: Not started
  • Documentation, Progress, Bugs
  • Code
  • Demo
  • Teaching Guide

Roomatoom

Zoomable interface

Roomatoom is a zooming interface for diving into the implementation or out to the high-level view.

  • Status: Not started
  • Documentation, Progress, Bugs
  • Code
  • Demo
  • Teaching Guide

Advanced Projects

Nodes in red have not been started in any significant way yet. Nodes in black at least have a prototype implementation.

digraph hierarchy {
    node [shape=box]
    Advanced [shape=oval, label="Advanced Projects"]
    Garden [label="Garden\nCollaborative Text Adventures" URL="#Garden"]
    Xastle [color=red, label="Xastle\nSocial Media for Projects" URL="#Xastle"]
    Moat [label="Moat\nAnonymous File Share" URL="#Moat"]
    Pearly [color=red, label="Pearly\nHardware Simulator" URL="#Pearly"]
    Bootleg [color=red, label="Bootleg\nOperating System" URL="#Bootleg"]
    Advanced -> Garden
    Advanced -> Xastle
    Advanced -> Moat
    Advanced -> Pearly
    Advanced -> Bootleg
}

Garden

Collaborative Text Adventure (MUD)

Garden of Forking Paths is a collaborative text adventure game tool (status: working, needs to be used to find weak points). A text adventure environment for both developing (multiple simultaneous developers) and playing (multiple players can be in a room and communicate with each other). An updated version of a MUD (Multi-user dungeon) for the web.

Xastle

Social Networking for Projects

Social site for favouriting, etc. visual projects. Based largely on the Scratch social network, but allowing a wide variety of projects (both Sketchdance and others).

Moat

Private temporary file sharing

A way to store temporary files securely (status: in progress). This project is aimed squarely at libraries to solve the problem of someone creating content in a library program, but having no way to take it home with them. Generates a saved online copy only the user can access, with built-in expiry to prevent misuse.

Pearly

Gate simulator and virtual computer

Pearly is a hardware simulator for NAND-to-Tetris building blocks (status: not started). This would be an alternative (and hopefully friendlier) interface for the NAND-to-Tetris course.

  • Status: Not started
  • Documentation, Progress, Bugs
  • Code
  • Demo
  • Teaching Guide (external)

Bootleg OS

Experimental OS

Bootleg is an experimental operating system which combines all of these tools as a platform for learning about operating systems

  • Status: Not started
  • Documentation, Progress, Bugs
  • Code
  • Demo
  • Teaching Guide

Stack

Standard Libraries and tools

The Standard Stack is a set of tools that are external to Sketchdance but are re-used across projects. It has its own documentation page.

digraph hierarchy {
  node [shape=box]
  Stack [shape=oval, label="Standard\nStack"]
  Templating [label="Live\nTeamplating", URL="#https://hackmd.io/-11_ctzwS7C0V62ipeLyNg#Live-templating-Heresy"]
  Functional [label="Functional\nProgramming", URL="https://hackmd.io/-11_ctzwS7C0V62ipeLyNg#Functional-Programming-Ramda"]
  Immutable [label="Immutable Data", URL="https://hackmd.io/-11_ctzwS7C0V62ipeLyNg#Immutability-Immer"]
  Drag [label="Drag & Drop", URL="https://hackmd.io/-11_ctzwS7C0V62ipeLyNg#Drag-and-Drop-Dragula"]
  Collaborative [label="Collaborative\nData", URL="https://hackmd.io/-11_ctzwS7C0V62ipeLyNg#Distributed-textjson-ShareDB"]
  Parsing [label="Text\nParsing" URL="https://hackmd.io/-11_ctzwS7C0V62ipeLyNg#Parsing-Pegjs"]
  
  Stack -> Templating
  Stack -> Functional
  Stack -> Immutable
  Stack -> Drag
  Stack -> Collaborative
  Stack -> Parsing
  
}

Infrastructure

Nodes in red have not been started in any significant way yet. Nodes in black at least have a prototype implementation.

digraph hierarchy {
    node [shape=box]
    Infrastructure [shape=oval, label="Infrastructure\nDependencies"]
    Login [color=red, label="Shared\nLogin", URL="#Login"]
    Userinfo [color=red, label="User\nInfo" url="#Userinfo"]
    DJ [color=red, label="DJ\nDistributed JSON" URL="#DJ"]
    Orchard [color=red, label="Orchard\nDistributed Filesystem" URL="#Orchard"]
    Soup [color=red, label="Soup\nDistributed Object Store" URL="#Soup"]
    Infrastructure -> Login
    Infrastructure -> Userinfo
    Infrastructure -> DJ
    Infrastructure -> Orchard
    Infrastructure -> Soup
}

Orchard

Distributed, collaborative virtual filesystem

A distributed, collaborative virtual filesystem, something like DDOM mixed with Dropbox.

  • Status: Not started
  • Documentation, Progress, Bugs
  • Code
  • Demo
  • Teaching Guide

DJ

Distributed JSON

Distributed JSON, based on or using ShareDB

It's possible that this just is SharedDB, or that we otherwise don't have to build this.

  • Status: Not started
  • Documentation, Progress, Bugs
  • Code
  • Demo
  • Teaching Guide

Soup

Distributed Object Store

Distributed object store, JSON-based Tuplespace

Currently a "nice-to-have" but I haven't identified a strong need for it.

  • Status: Not started
  • Documentation, Progress, Bugs
  • Code
  • Demo
  • Teaching Guide

Research Topics

Look at ShareDB for operational transforms over text and JSON to implement Orchard and probably other bits.

The DLR (basis of IronPython, IronRuby, etc.) treats all dynamic languages and object systems like Smalltalks' messaging. It defines the following messages:

  • Get|Set|Delete member
  • Get|Set|Delete index
  • Invoke, InvokeMember
  • CreateInstance
  • Convert
  • UnaryOperation
  • BinaryOperation

So there is evidence that this is all that is needed.

Distant Future / Wishlist

Some other fun things to do with JavaScript

  • ORP web app design/layout
  • Effects (like the superheroes app)
  • Sprite-based storytelling
  • Skeleton/inverse kinematics animation
  • Physics engine
  • Create 3D objects for printing
  • Control Minecraft
  • Gesture/hand recognition
  • Gesture/drawing recognition
  • Facial feature recognition
  • Posture recognition / mapping to sprite
  • Voice recognition/effects
  • Video effects
  • Control motors, lights, get inputs
  • Allow users to create their own apps/effects/plugins using Waterbear/Moonshine
  • Add/remove color palettes
  • Preview colour palettes in menu
Select a repo