Nov 27, 2022
A Lua-based Markup Language

Demo of a structured text editor where you can edit multiple buffers arranged in nested rows/columns.

Doesn't save what you type in yet. This is just a demo for playing with.

I have no idea what attributes to include besides fg/bg/margin. So get in touch if this sparks ideas/suggestions.

permalink

* *
Nov 23, 2022
I just sped up my note-taking app by.. reading more from disk.

:exploding_head:

A constant trickle of disk reads replaces an unbounded amount of stuff hanging around in memory.

This is a data-oriented solution in the footsteps of Mike Acton. I'm not removing fields from structs or switching to SoAs, but I am trying now to manage my caches.

GC is missold as "automatic memory management". All memory management is manual (you have to be careful about nulling references out); GC just simplifies freeing memory.

permalink

* *
Nov 19, 2022
Has anyone heard of stack people vs queue people? I don't know where I got it from, but it's been an enduring part of my self-image for a decade now that I'm a stack person.

When something new pops up, a queue continues what they were doing. A stack switches.

Obviously this is a spectrum, but I find it very easy to rationalize that the new tasks are "quick".

Anyway, being a stack is hard with a new project. Every 2 minutes I discover something broken, and now I have to resist working on it.


A minimalist DOM in 50 LoC

Notation:


A notation for a simple DOM

It's just a Lua literal, though the syntax highlighting is confusing.

Implementation:

First 2/3rds of code for rendering the DOM while saving coordinates of each rectangle.

Render:

Is there a better name for this than "DOM"? A notation for a tree of rectangles, often containing text, to be rendered to screen and united with mouse events.

Rects contain either text or rows/cols of other rects. Other attributes: fg, bg, margin. Margin is margin-top or margin-left depending on whether the rect contains rows or cols.

No inline styling yet (bold, span, etc.), that feels like a separate concern.


This is pretty surprising. (And pretty.) I'm trying to understand why my app goes unresponsive sometimes, so I added a debug dashboard. The top graph shows the memory footprint every second. The bottom shows memory footprint every 10s.


Two graphs with time on the x axis.

The top graph shows a sawtooth as the app uses more and more memory, until GC reclaims half of the peak.

The bottom graph shows a braid pattern where alternate samples (averages of 10 samples from the top graph) grow and shrink. At the extremes alternate samples seem to be off by 25% -- both before and after the GC.

Does it make sense why the top graph when averaged 10x yields the bottom?! Sure doesn't to me.

permalink

* *
Nov 11, 2022
I'm realizing Pensieve's surface doesn't actually give a good sense of space like say Capstone.

I just spent some time trying to add hyperlinks between a handful of pairs of notes. The notes are seldom next to each other for me to type the id of one into the other.

Then I realized I should just use regular links below notes. The grab mechanism works well. Links can't be inside notes like hyperlinks, but I can't linkify arbitrary text anyway. And I get automatic backlinks.

permalink

* *
Nov 5, 2022
Implementing the Potluck system in LÖVE

Potluck

Research is awesome, but sometimes when you read a paper you just want to add it to your toolbox right now. In a way that fits in with your other tools.

Properties of my tools:

  • minimal dependencies (no browser!)
  • cross-platform; runs on Windows
  • easy for anyone to modify (https://www.inkandswitch.com/end-user-programming)
  • live; modify without restarting (https://www.youtube.com/watch?v=8Ab3ArE8W3s)

Done so far: Potluck annotations

permalink

* *
Oct 16, 2022
New video: Live-coding using LÖVE

(audio/video; 20 minutes)

Credits:

permalink

* *
Sep 18, 2022
✅ 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


  A programming environment showing source code on the left, menu bar on top, a log of runs on the right.

  The program being edited is itself the source code editor. The logs graphically show menu options being selected in response to keystrokes.

permalink

* *
Sep 3, 2022
"Here's 6kLoC, now go reinvent Smalltalk."

An example LÖVE repo that can be used to modify its own sources.

Editor: a lightly forked version of lines.love

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.

A chart plotting lines.love and its 8 forks so far to show relative complexity and upstream/downstream relationships.

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.

permalink

* *
Aug 27, 2022
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.

permalink

* *
Aug 23, 2022
I just added hyperlinks to my text editor in 35 lines of Lua

Here's the code.

Deep in the guts of the renderer, right before it renders a fragment of text, check if it's a file, and turn it into my button abstraction if so.

Caveats: links can't wrap over multiple lines, links can't contain spaces.

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.

permalink

* *
archive
projects
writings
videos
subscribe
Mastodon
RSS (?)
twtxt (?)
Station (?)