Clemens Nylandsted Klokmose
Software as computational media
Allow users to assemble their own software environment
Changing Minds, Andrea diSessa
Computational medium seeded with small tools,
Malleable -
Composable -
Shareable - synchronously and fluidly collaborate
Interoperable - software should be able
Distributable - should be able to get people your software easily
Computable - the medium should be able to "execute"
Webstrates - changes to a page are stored on a server and synched to other clients with the same page.
Documents <> Applications
Codestrates \/ Varv are re-constructible.
Codestrates is implemented in codestrate!
You can natively modify the codestrate itself.
Can be re-programmed from within. (sweet!)
Videostrates!
Represents a video conversation
re-compositing the video streams on the fly
Essentially WebRTC shared stream
Kinda a live authoring environment
DEMO: Showing off an app similar to iMovie
Use case: simple paper prototyping tool
re-composing small tools to extend the functionality
Transclusion is such a powerful, general principle
New Programming Model for Webstrates - declarative model
<div concept="counter">
define "concepts" using a nested list that looks like a well-formatted yaml file.
Primitive todo list written in new programming model
Supports "incremental" programming
Schemas and concepts are able to be iterated on inside the live program
You end up creating "domain-specific languages"
Programs are expressed as data structures
- Pretty easy to build "tooling" / data structures
"Personal Digital Sovereignty"
Q: What are the frustrations of working with the DOM specifically?
Challenge: partial transclusion
Q: How do you manage synchronization?
A: ShareDB - operational transforms - open-source synchronization of arbitrary JSON
Mapped the DOM to a JSON representation
A lot of edge cases in the DOM
For every-day use, we don't really experience synchronization issues
"VERY INTERESTED in porting Webstrates to CRDTs and making it decentralized"
Issue: what is persistent and what is transient?
We've made pragmatic choices, but don't have a conceptual clear way of doing it.
What's a better substrate?
How much time do you spend "living in the future" - using your own webstrates on a day-to-day basis? What's that been like, experientially?
I use it for presentations
I use it for teaching
Students use "cauldron" to build
To begin with, I used to build my own tools for note-taking and such, but I try as much as possible
We use it to build research prototypes for all sorts of things.
What about "live-editing" the software that you're using?
There are always challenges when you are "sawing on the branch that you're sitting on."
Branching?
What's in production?
Lock the in-production version?
Joker: Unified Interaction Model For Web Customization
Kapaya Katongo
Make the web more malleable and accessible1
Increase the malleability of websites that have deficiencies.
Turn websites into spreadsheets (kinda like scraping) and then performing transforms, and work backward to modify the page.
Data-driven notebook style
No navigation!
No modes!
Everything you need to do is in a single, vertical linear page
Don't differ between logic and data - co-locate both of them
Reuse by reference, not cloning or ownership (Transclusion )
Each card becomes a DSL that you build up using the same primitives.
Easy to do computation
Difficult to express interactivity
Smallest, simplest possible tools:
Vision -> Properties -> Yields innovation
Eat your own dogfood - their creators used them for their own work.
Aid their own development work!
Make your own system practically useful for you.
Get it into people's hands, and get them starting to use it.
"we didn't understand enough about what this did to empower individuals - we need to learn"
What is the box today? What's available on every computing environment today? The web.
Find ways to make the systems immediately available
Web IDEs that take the web further
Three different "clients" connecting to the same shared simulation
Extremely low-latency, WebRTC, peer-to-peer connection
Limitations and Lessons Learned
- WebRTC is NOT TRIVIAL to set up - not trivial to maintain
- Have to set up handshakes
- VR development is very far from a live experience
- Using "Observable" was an easy way to get a decent live programming interface without too much work
- Shared state: different clients have their own state
- Doesn't matter which one you start first
- Distributed state also leads to problems
- Keeping everything in sync
- Hack.VR -
Let's make programming in VR something anyone can do!
TypeCell Notebooks - new notebook-style live programming environment
Native TypeScript support - no framework plumbing necessary
Packaging
Builds on Monaco - code editor used by VSCode
Planning to open source later this year!
Detecting loops
Is two-way reactive variables intuitive enough?
Disposing resources in user code - garbage collection?
Security - executing user code
Can we build Custom Visualizers and Inspectors?
Breaking out of the notebook environment
MobX-style reactive state management instead of React?
Built it on y.js - CRDT - data structures underneath
Natively supports collaboration out of the box
David Moon and Cyrus Omar: Restruct
Restructuring structured editing
MPS: the state-of-the-art structure editor
Propose tile-based editing - a more relaxed structure
Programmable Ink
Joshua Horowitz
James Lindenbaum
pen-and-paper as a brain-world interface
programming of ink is unexplored!
Inkbase
Basic semantics // queries about the composition of the ink on the page.
Execute some code based on what's sketched in the notebook
Can you programmatically "upgrade" the fidelity of a prototype?
What did they learn using Inkbase?
dynamic hand-drawn strokes feels very good
"living" systems are great!
spatial queries feel correct in a canvas-based system
Didn't quite achieve seamlessness between writing / programming
Need a better programming model for this system...
How do you work with compound objects?
what's a good mental model for creating new strokes programmatically
and related: what would be a good balance between computer voice and sketchy feel
non-black box for object