elliot evans
Dec 19 2023 This is a sprouting note, it will be updated as I make progress on these
projects and write more about them!
This year I took a career break. The first couple months of the year I was
focused on working on my personal health and I avoided working on projects.
After that, I worked on a lot of projects related to Polytope! The last couple
of months I was working on a part-time contract where I added multiplayer
functionality to a new 3D design app.
In this note I want to try to document what projects I have been working on. I
originally wrote this as a list of articles I should write, but after thinking
about it I realized there are too many articles to write, and just putting
this all out there is a good first step. I intend to write in more depth about
these topics next year. Hopefully just seeing all of this gives some good
insight into what I’ve been working on and how it all fits together.
Polytope is a
rich and composable experimental
code editor that combines text and visual coding; structured and unstructured (I
call this mixture "ummm-structured") representations of code; and symbolic and
direct manipulation of code.
This year I have been working on things that will directly support Polytope
experiment 2 (coming 2024... maybe), but not on Polytope itself.
· Polytope experiment 2 · An editor editor · A notebook editor · a tree editor ·
editor transformations
Caretope Ꮖ
I began working on adapting text editor caret navigation to visual editors in
2022 as a part of Polytope. I slowly realized that caret navigation is a rich
topic in and of itself so I seperated it into its own project: Caretope!
· writing · examples including: Selection, Multicursors · functional API and
release version
Bidirectionality ↔
My interest in bidirectionality started around translating between multiple ways
of talking about the same thing. For example, translating between textual and
visual representations of code in Polytope. I've been getting deeper and deeper
into bidirectional programming in the second half of this year, and I'm really
excited about it right now.
made
bidirectional parser combinators
which were used for the bidirectional programming language (note: the parser
combinators are bidirectional in a different way than the language); and
write notes on some bidirectionality concepts like isomorphism,
split monomorphisms, multidirectionality
develop and share bidirectional+recursion library
explore continuous bidirectionality and the relationship between
bidirectionality and nudging
use bidirectional parser combinators for writing translations between visual
editors and text-based code in Polytope experiment 2
bidirectional+recursion library to make bidirectional editors and recursive
editors in Polytope experiment 2
Nudging with Constraints ∇Δ
Nudging a number is using a mouse or arrow key to quickly move a number up or
down. Constraints allow a user to specify relationships between numbers, or
limitations around what numbers should be reachable via nudging (or
otherwise).
More generally, nudging is about exploring a large space of values by making
local movements through that space. Constraints limit large spaces to smaller
ones, and change how those spaces are navigated.
This year I made a bidirectional nudging with constraints demo. It uses (a hacky implementation of) gradient descent. You can nudge number
variables. You can also constrain a variable by setting it equal to an
expression, and then you can nudge the expression and it will change the
variables in the expression to satisfy the constraint!
I also made an equation plotter.
This plotter will be used to visualize constraints. It will also add
visualization to complement direct manipulation of constraints and values.
Whats next for nudging?
· nudging in other spaces like around a circle, tree, or quaternion ·
visualizing gradient descent for nudging · explore algebraic geometry to
understand constraints better · equations as constraints rather than just
expressions
Local-First Multiplayer & History
I made a custom CRDT, but it is too limited to be useful. CRDTs are hard!! I did
a contract with my friend Sasha to add
multiplayer to a 3D scene editor app and I used yjs.
Whats next for Multiplayer?
I'm not sure if multiplayer will be a part of Polytope experiment 2 because it
adds a ton of complexity. History (undo/redo) will be part of experiment 2. I
will keep working on multiplayer stuff next year however. I'm looking forward to
a CRDT library that supports a full document history but I don't think that
exists yet.