archived
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.
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
}
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 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.
A program to remove/change background for photos (and add effects?) (status: early stage, needs to be able to turn off autofocus).
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
}
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.
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 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.
Joker is a Hypercard-like interface with elements of MirrorWorlds (sortable, searchable, filterable streams of cards).
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
}
Block toolkit
General purpose tool for creating block-based languages. Waterbear uses blocks specific to Moonshine, but Tardigrade can support blocks for any language.
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.
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.
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.
Direct object manipulation
Halo is a Squeak-like halo tool for manipulating objects in a reusable way
Zoomable interface
Roomatoom is a zooming interface for diving into the implementation or out to the high-level view.
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
}
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.
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).
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 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.
Experimental OS
Bootleg is an experimental operating system which combines all of these tools as a platform for learning about operating systems
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
}
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
}
A distributed, collaborative virtual filesystem, something like DDOM mixed with Dropbox.
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.
Distributed object store, JSON-based Tuplespace
Currently a "nice-to-have" but I haven't identified a strong need for it.
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:
So there is evidence that this is all that is needed.
Some other fun things to do with JavaScript