Nov 29, 2022
"Next call. Hi, welcome to Joys of Science! Please state your name and question."

"Hi, Creator here. Loved your previous episode, Beautiful Equations of Reality. Glad you like my game.

"I actually started out using lots of different equations. Regimes for small scales, large scales, Seattle, Wednesdays. But there were too many interactions and bugs. So we switched to a single set of equations. It's a little inefficient but reliable. Now all I do is say no to feature requests."

#microfiction

permalink

* *
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

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