A digital pillow fort

Site updates, and some tips for navigating this website

Eagle-eyed folks may have noticed that I made a few wee changes to this website.

The biggest, and most noticeable one is that I’ve filtered out all of the like type posts from appearing on the main feed, from rss, and in the archives. There were waaaaay to many, so filtering them out makes the entire website a lot more navigable. They are not gone, though, and I’ll probably keep sharing like type posts, but now they are something you can opt in or out of. To see em:

Furthermore, and this isn’t actually new, but I feel I may as well point it out again, there is an rss feed specific to any and every tag used on the site! You can find those tag-specific rss feeds on the tag pages under the title that says Tagged SomeTagName,” by clicking the Follow Tag” link. Here is an example of one of those pages, and here is an example of one of those feeds.

As always, you can also search the site, or peruse the massive collection of tags (I should probably prune those down a bit, eh?).

In reply to: On Learning Smalltalk

I feel like it took me a bit longer to fully understand how to work in Smalltalk than it did most languages. The IDE is different than anything I’ve used before, and probably anything you’ve seen as well. You’re not going to be opening myscript.st in your favorite text editor, and then run it from the command line as you would a Python program. It takes a little mental adjustment to start with.

That’s not the warning, however.

The warning is that once you delve into Smalltalk, you might not want to program in anything else ever again. It’s really that good.

I think this is my curse. I touched Smalltalk at a young age, and, ever since, nothing has felt right,” or complete,” in the same way.

Forth is getting close, though, and a lisp or scheme with a tight repl is also pretty wonderful…but Smalltalk defo does you dirty by being so phenomenal. Xcode is a flaming, festering pile of total and complete garbage by comparison. My wish whenever I touch Xcode or Android Studio (which I do daily for work), is that the folks behind such tooling spend just 1 week using a Smalltalk system like Squeak or Pharo to see how much better it could be.

A guy in a big coat, winter hat, and a back pack holds a toddler while standing next to a six year old. They are all looking at a model train set in a window.

Forth, a tool for cultivating community

I watch most of the recordings of the Forth2020’s Zoom chats. A topic that comes up from time to time is how to get more folks interested in Forth — especially younger folks. In my weird little corner of the internet I can say that there are certainly young folks interested in Forth!

I wonder if the issue at play is less one of interest, and more one of cross communication between these communities? From what I’ve gleaned, what I’d call the old guard” of Forth meets up pretty regularly over Zoom, and does a lot of organizing on Facebook. The younger folks I know who are interested in Forth aren’t on Facebook, and, at least speaking for myself here, don’t have time to make a Zoom call — I do watch most of the recordings though.

I think another aspect of Forth not being seen as more viable to many folks is a quirk of history — there is no technical reason that Forth couldn’t be used more widely in spaces other than embedded programming, but, because of its long history and its ease of use in embedded systems, most of the old guard seem to be focused on embedded programming.

In both my career as a programmer, and in my free time, I’ve had very little exposure to embedded programming; I’m interested in it, but struggle to even conceptualize what sort of stuff I’d do in that setting. My background is in web and app development. When I dream-up hobby projects they’re always informed by what I already know how to do — games, web development, and mobile apps…I always want to reach for Forth for these sorts of projects, but, so far, I’ve struggled to find a Forth system that is particularly well suited for these spaces.

Now, I know that I could probably make my own Forth system (part of the beauty of Forth is how approachable it is to implement) that is a bit more suited for these other scenarios…but…I don’t know…so far I haven’t cracked that nut (but I’ve tried).

With this post I’m not looking to necessarily solve” anything, but I’d love to start to explore ways to bridge the gap between Forth’s old guard and the younger enthusiasts like me, looking to do more with Forth. I think the tools to bridge this gap are of two flavors: social, as well as technical. On the technical side I am curious to explore Forth’s Clojure moment” — a way of leveraging packages and tooling from a more widely used language, but taking advantage of Forth’s expressiveness. On the social-side of things I … am a broken record … and always want to return to something like mentorship or apprenticeship, but, as a stepping stone towards that sort of model I wonder about a space that is equally as accessible to both Forth’s old guard as well as younger folks, maybe a forum? A mailing list? A planet, a la Planet Lisp? All of these things may well exist, I just haven’t found em yet. If you have thoughts about any of this, I’d love to chat!

In reply to: The Whippet 137: Please don’t make me fight a fire ant

It’s named after Texan exterminator Tom Rasberry, but you can call it a Raspberry Crazy Ant if you want and no one will notice I bet.

The Raspberry Crazy Ant, for some reason, loves electronics, so it will come and chew through wires and get electrocuted. When an ant dies, it releases an alarm pheromone which makes other ants rush to the scene of the crime,* which in turn causes more to be electrocuted, and if enough of them gather then it can short out electrical systems.

This is not why they’re called crazy ants’ by the way — that’s because they move in a darting, erratic way. But if the tiny shoe fits.

Star Wars, and a year in review

I tried to write a year in review kinda post, but it got wicked melodramatic pretty fast. This year has been a slog…it really fucking sucked.

Rather than reflect on it further, I thought I’d write about something vapid that I’ve been thinking a bit about lately instead: Star Wars.

Despite my best efforts, I’ve always loved Star Wars. As a child I spent hundreds of hours pouring over novels, and comics, and books of schematics. Star Wars was nearly always on my mind. The Star Wars that I fell in love with was pre-Diseny. The Disney stuff is fun, but, I think it is missing a key element that Lucas’ Star Wars always had in spades — blank space.

Lucas’ Star Wars is so full of blank spaces that a whole universe was able to grow into the gaps. The more that Lucas added to Star Wars, the more blank space there was. This is in juxtaposition to Disney’s Star Wars where the goal seems to be to fill every available blank space possible with moar content!

This last year has felt something similar — whereas in the before times I felt like there were blank spaces in my life to grow into, now I feel they are growing smaller and smaller. That possibilities are shrinking.


In Lord of the Rings there are creatures that look like giant elephants. JRR Tolkien named these creatures olophonts…” simply replacing every vowel in the word elephant with an o. Here is a javascript function to do the same thing.

function olophont(string) {
  let replaceVowels = "";
  for (let i = 0; i < string.length; i++) {
    if (!'aeiou'.includes(string[i])) {
      replaceVowels += string[i];
    } else {
      replaceVowels += 'o';
  return replaceVowels;


Introducing Guava

I’ve been fascinated by Forth and concatenative programming for a while now. I can’t remember how I initially stumbled in to it, but once I got going I’ve been unable to stop. I’m a wee bit in love with it.

Wanting to play a bit with implementing my own spin on things and having opinions about tooling, I picked up a little scripting language called Ripen, by Felix, and started to extend it. I call the results Guava.


Guava is a stack-based, concatenative language and editor for the browser intended to be used for scripting and as a DSL for small web projects.

It is a toy for exploring concatenative language design, and the DOM. It could also easily be used as a scripting interface for a larger project. It is likely to change a bit over time, and is by no means done — but I think it is in a pretty decent state for a toy to draw to the DOM.

Guava supports arithmetic, control structures, basic DOM manipulation, object parsing and very simple HTTP requests (GET and POST).

Guava is an unusual language inspired by other unusual languages. While not strictly necessary, being loosely familiar with Forth is helpful when playing with Guava. Guava isn’t a Forth, but it is closer to a Forth than it is to something like JavaScript, C, or Lua.

Here is a good place to start with learning Forth. Or here, and for fun, here, too!


A major goal of Guava is keeping the entire language tiny and easily learnable. With this as a goal, the dictionary is kept relatively limited.

The dictionary is broken into 2 categories — words and sigils.

Words are akin to keywords or in-built functions in other languages while sigils are prefixes that guide the interpreter, switching it into different modes (roughly speaking).


#> ( ) * */ + ++ - -- -eq? -if -rot . .s / /* /mod 
2dup ; <# [ ] abs alert and assert assert:false 
assert:true buffer clear confirm cr dec depth drop 
dup el:a el:append el:b el:clear el:h1 el:h2 el:h3 
el:html el:i el:p el:root emit eq? execute false 
gt? gteq? http:get http:post if inc kv:get kv:remove 
kv:set lt? lteq? max min mod negate not obj:parse 
or over pokedex prompt repeat rot sigils space swap 
times true until while words { }


! ' / : ?


Like most stack-based languages, Guava relies on reverse Polish notation and a LIFO — “last in, first out” — memory stack.

Most programming languages use infix notation, e.g. 3 + 3. If you’ve used Lisp or Scheme you may be familiar with prefix notation, e.g. + 3 3. Reverse Polish notation is the opposite of prefix notation — 3 3 +.

The stack is how data flows through a stack-based language where data is added and removed from the top,” sort of like a stack of dishes. At first blush it seems like stack manipulation is all that a programmer using a stack-based language would be doing all day long, while in reality most folks using stack-based languages tend to keep the stack pretty shallow — Guava also offers an escape hatch, allowing for easy use of variables outside of the context of the stack…which some may say is cheating, but we don’t need that kinda gate keeping.

For more info on how to use Guava take a look at the cookbook.


A lot of programming languages are pretty similar to one another — once you learn the core constructs of programming (control flow, data handling and storage, etc.) it becomes relatively easy to pick up new languages…the hiccup, I find, comes from needing to learn new tooling. Tooling can be inscrutable, and it is often assumed that you just sort of know it…but it is rarely really taught. For this reason an editor is provided for Guava.

The editor is comprised for 2 parts, an area to display output and an area to collect input. Full disclosure, the area to display output (e.g. console) has a few quirks to it that I’m still trying to work out. If these are a hindrance, you can open up the console of your browser for a more direct view of what is going down.

Screenshot of the Guava editor in action

Code can be input into the lower textarea, clicking the run” button will interpret the code. Any text entered into the textarea is saved to the browser’s local storage with each keystroke.

The clean” button empties the stack and clears the data from the output area.

The destroy” button completely clears all inputted code and resets the environment.

Clicking export” prompts to save input code to disk.

At the far right is a choose file” button — this allows you to load data from disk. NOTE the data is read in from the disk, but any edits aren’t saved back to the disk unless you click the export” button.

An instance of Guava is currently accessible at https://txt.eli.li/pb/guava.


Ripen was originally released under the ARTISTIC LICENSE 2.0. With permission from Felix, Guava is licensed under the MIT LICENSE.

For more, check out Guava’s git repository.

A googly eye stuck to wood flooring.

The watcher returns. Visited at the beginning of the now endless pandemic, we moved house, thinking that the eye wouldn’t follow. Now, years later, the eye has opened. We are seen. Perceived through an endless void. A summoning.

« Present Page 3 of 206 Past »