✅ Edit source code from within the app
✅ Edit source code for source code editor from within the app
✅ Create graphical debug experiences for source code editor from within the app
Debugger: a graphical log of what the program did, as demonstrated here.
These tools aren't general-purpose. Instead, they're intended to evolve with the sole app they're used to modify: themselves.
Today I went through and gave every fork of lines.love the ability to modify and debug its own source code. Just press ctrl+e to edit the sources.
It's kinda funny to add a code editor to a text editor. The code editor can hide debug prints, and has a teeny bit of colorization. On the other hand it doesn't (yet) support drawings or selecting text.
Here's the final demo of the project I did for last week's Wheel Reinvention Jam: rethinking development tools to center debug by print. I think you can replace the benefits of debuggers and save on a bunch of complexity in language infrastructure and tooling.
Incredibly inefficient, to check the file system for every single word. So it's in a fork for now while I decide just what to do with this new super power.
It's interesting to compare this approach with Gemini.
Gemini: links on their own line, support arbitrary link text.
Me: inline links are ok, but the text will always be the URL.
As preparation for tomorrow's wheel reinvention jam, I just created a fork of lines.love with all the drawing support ripped out. Time to take it in a new direction.
No overlapping, no tiling, just an infinite 2D surface of columns. Commands open new columns.
Wordstar-style menu up top of important commands in current context, and their shortcuts.
Command palette at top left that filters commands available in current context.
Files/nodes can have links. Links can form graphs, as the picture shows (original: http://www.maplefish.com/todd/papers/Experiences.html)
Links have labels (next/previous by default).
Graph-traversal commands can take an argument (next/previous by default) of the edge label you want to follow.
'add' adds an edge immediately to the current node, 'append' traverses the edge repeatedly to the end, then adds.
'step' navigates along an edge from the current node and opens it in a new column, 'unroll' traverses the edge repeatedly to the end and collects all nodes into a single column.
I'm doing a major migration of my notes schema to make it work better with my note-taking app. In the process I've been reading a random (mostly embarrassing) sampling of 10+ years of notes. But here's a non-embarrassing one:
Jun 2012: I need fuck you software.
That pretty much explains why I started Mu 2 years later :D