Dec 22, 2023
Some improvements to my live programming setup

It's been a while since I showed it here, so to recap, this is how my programming environment has looked for most of 2023. It's an infinite surface where you can move each top-level definition independently of the others.

Using it revealed one problem: sometimes definitions would overlap. If the move bar is occluded, I need to move other nodes to find it.

I mulled it over while resisting the urge to build a window manager.

On Dec 10, after some experiments using Lua Carousel I gave my definitions some minimal physics to nudge other definitions away. Lines of code required: 70.

Using this revealed a new problem: it was hard to move one definition around another. More broadly, my UI -- where things mostly stay fixed unless you move them -- now seemed a lot less calm.

Yesterday I made 2 tweaks, and now things seem pretty decent again. This took 30LoC:

  1. Resolve collisions only at the end of a drag. Now moving seems to lift the definition above the surface and set it down at its destination.

    During the drag I show a shadow where any other definitions would get nudged out.

  2. Dropping near the original place resolves no collisions. This lets me change my mind after starting a move. A shadow at the original location helps me give up.

Try it out yourself.


Ooh, the process of writing this up gave me an idea to improve things further. Now I only show the shadow if I would actually move anything aside.

Lines of code: 3

Best #DecemberAdventure yet.

permalink

* *
Dec 19, 2023
4 example scripts of ~30 lines each that should be easy to mix and match on a phone or tablet.

Screenshot of a tiny script running within Lua Carousel. The yellow rectangle is a button that modifies the red circle. Screenshot of a blue slider that modifies a red circle as you adjust it left or right. Screenshot of a simple text editor containing some text and a blinking cursor. Screenshot of a tiny script for recording and playing audio.

Read more on the Lua Carousel devlog.

permalink

* *
Dec 18, 2023
A voice recorder you can tweak the source code for, right on your Android phone

Screenshot of Lua Carousel running a voice recorder. Below the standard Lua Carousel menu there's a single button to create a new recording. Below that are recordings  with buttons to record/stop and play.

One little detail here involves Android permissions. I almost ended up asking for microphone permissions in Lua Carousel. Luckily I managed to stop and ask myself what the user experience is. "Hi, I'm Lua Carousel, could I please have access to your mic?" Ick! It seems like a bad idea to ask for a permission for the whole app just in case some single script uses it. Probably affects the conversions from this particular blog post, but I don't want to feel like I'm contributing to the general fatigue over apps asking for permissions. :shrug:

Read more on the Lua Carousel devlog.

permalink

* *
Dec 17, 2023
One nice reusable abstraction my LÖVE apps have all converged on is an immediate-mode button primitive. I draw all my buttons each frame along with all the callbacks they need, and a couple of framework-y lines of code in the mouse-press callback is all it takes to get them working. Last night I realized (while poking around in the LÖVE forums) that my hacky sliders in Lua Carousel's settings admit a similar abstraction (even better than the one there). The only additional complexity is it needs a couple more lines in the update callback that continually refresh the backing value as you drag the slider.

permalink

* *
Dec 16, 2023
Conway's game of life with colors


I think I'm going to call this variant "ChromaCline"

Read more on the Lua Carousel devlog.

permalink

* *
Dec 15, 2023
The Game of Life is one of my favorite programs, but I've never tried to go deep in learning about it, and as a result I still learn fairly obvious (with hindsight) things about it. This time I realized two things:

  1. I don't need to keep checking if a cell is in bounds. Just don't update a border of cells!
  2. I don't need to clean up the new array at each time step! :facepalm:

permalink

* *
Dec 14, 2023
Yesterday I turned a couple of my unused kids apps into just scripts you could run on Lua Carousel.

sum-grid.love

spell-cards.love (exercising my phone's microphone for the first time)

Both qualified successes. I didn't uncover any bugs, but the programs were 250 and 350 lines long, which starts to feel too long for my implementation of scrollbars.

permalink

* *
Dec 12, 2023
Huh, I just realized I've been doing #DecemberAdventure all along and just hadn't thought about it like that.

Day 2

Day 4

Day 7

Day 9

Day 10

Day 11

permalink

* *
Dec 6, 2023
So Mu was on the advent of Qemu calendar yesterday, and I totally missed it.

Qemu Advent Calendar, day 4

permalink

* *
Dec 3, 2023
This bug I foisted on myself today was a real "things are not as they appear" puzzle.

bugfix: only check for settings menu when open

permalink

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