Oatmeal

A digital pillow fort

A large cat lying on the sill of an open window.

In reply to: Oatmeal - That one time when Buffy the Vampire Slayer maybe saved my life?

After giving my brain bleed time to heal the neurosurgeon called me back in to hospital; the plan was to reassess, attempt to fix it using the minimally invasive technique that they tried once before, and if that didn’t work, do something a bit more squidgy directly in my brain.

I’ll be honest, the last option sounded totally and completely horrific to me and I was very much not wanting to have to go with the big ol’ brain surgery. While the doctors seemed confident with that option, they were upfront about the extra risks and that it was sort of the option of last resort.

Last week I went back in and, great news, they think they’ve totally repaired my brain bleed using the minimally invasive method! I’m slated for a diagnostic scan in the fall to double check, but, so far, everything is looking great. I spent a few more nights in ICU and was discharged directly to home where I’ve been chillin’.

All in all I’m feeling super duper lucky, and, while this entire experience has been … let’s say a drag … I know that it could have been far worse, and I hope to have it completely behind me soon. So far the main symptoms I’ve faced are ringing ears, fatigue, a bit of difficulty focusing and multi-tasking, occasional low grade headaches, and, since the repair, I’ve developed a lisp. The lisp is a result of the repair itself, and the neurosurgeon thinks that it will probably pass within a few months.

There are too many people to thank directly here, but to all those who’ve supported me and my family throughout this bananas unexpected experience — for realizes — thank you so much. The words of support, well wishes, meals, help with kids and everything have been so deeply felt, and I honestly can’t imagine how I would have navigated this without ya’ll.

Hopefully this is my last health update for a long time, and I can go back to posting about forth now!

That one time when Buffy the Vampire Slayer maybe saved my life?

A secret pleasure of mine in high school was getting home before my parents and watching 30 - 60 minutes of TV. I technically wasn’t allowed to do it, but I suspect they knew I snuck this time whenever I could.

My favorite show to watch in this secreted me-time was Buffy the Vampire Slayer. Of all the episodes 3 have stuck with me the longest — the musical one…because of course…and the pair of episodes: I Was Made to Love You,” and the immediately following episode, The Body.”

These two episodes follow the show’s core characters as they navigate the death of Joyce Summers, Buffy and Dawn’s mom, who is found to have died from a brain aneurysm.

Perhaps because of these episodes I’ve always been weirdly terrified of brain aneurysms and strokes despite having 0 risk factors, and no family history of either…well, do I have news for you!?

If you ever have a really bad headache totally out of the blue, boy howdy, go doctor!

On Wednesday May 18th I was just starting to lead a meeting over zoom when I was hit with a bananas headache out of absolutely nowhere. Real 0 - 160 kinda shit. I was able to make it through the meeting, at the time I thought the headache was maybe brought on by my staring at a computer for too long or something, but when after a few hours it hadn’t subsided at all I couldn’t stop thinking about Joyce Summers.

tl;dr — I went to the ER where they did a CT scan and found that I had a brain bleed. From there I was taken straight to the ICU and what followed were a whole bunch of scans and really miserable nights in the ICU and ultimately a weee little bit of brain surgery.

Right now — Unfortunately they weren’t able to repair my bleed during surgery because it was too small to reach. I’ve been discharged from the ICU, though, and am home with orders to go about my business but to take it easy. The plan is to reassess in 2 weeks’ time and go from there.

So, yeah…not really what I’d anticipated for the start of my 33rd year, but, here I am. It could have certainly been faaaaar worse. As of right now I’ve walked away from this thing with some soreness, a low-key persistent headache, and tinnitus. All in all, 0/10, do not recommend. But also, do not muss, if you’ve got a wicked bad headache outta the blue go hospital!

Screenshot of Pocket Forth running on Mac OS System 7.

I’m toying with the idea of becoming a full time Mac OS System 7 developer.


Edited to add that I’ve had so much fun playing with this implementation of Forth on Mac OS System 7 that I quickly built a little microsite to help archive the info I’ve found about it.

My programming language odyssey

While I wouldn’t say I’m wicked adept at any one language, I’ve dipped my toes into many different languages. Here, I try to roughly recreate my programming language journey.

I can make websitez gud; HTML, CSS/SASS, JavaScript > CoffeeScript > TypeScript, and PHP

The web. A marvel, a terror. I started here, more out of ease of access than necessity, but was able to get far enough to make a career out of web dev. I should also add SQL to this list.

Elm is something I’d like to dip my toes into.

Want make thingz go brrrr; Common Lisp

I don’t honestly know how I first came to Common Lisp, I think through a blog post, or maybe a cute book. While I don’t use it much these days, I still carry a torch for it in my heart.

Want lovely tooling; SmallTalk

I sort of wish I’d never played with SmallTalk. It broke me. SmallTalk opened my eyes to a really integrated development environment.

Oh snap! Parenthesis are rad!; Clojure

Clojure remains my white whale. On paper it is the perfect language for me:

  • lots of parenthesis
  • good at web stuff
  • fine for game dev
  • friendly with emacs

But I’ve never felt cozy in it.

The JVM is hard, but scheme is rad!; a million flavors of scheme and scheme-like languages, (Chicken Gerbil s7 Racket Guile Chibi)

Parentheses baaaby! If I was forced to stick to a single language and never touch another, I’d probably pick a scheme…the question is then which scheme!?

Racket isn’t strictly a pure” scheme, but who cares and it can be…and has a bananas gigantic library.

Chibi is adorably tiny and the most fully featured R7RS scheme I’ve found.

Chicken has some great docs…and is called chicken,” I mean, come on!? That is lovely.

What about games though? I wanna make games!; Lua (especially using PICO-8 or Love2d)

I have in recent years become pretty jaded about the state of software and what most software is used for…but I love games, so, Lua is pretty rad for making games. Lua is also a really great teaching/learning language.

But I missing the parenthesis; Fennel

Yeah, but what if Lua was a lisp-like language?

I’ve found that many programming languages are made or broken by their community. Fennel has one of the friendliest, most supportive communities I’ve ever witnessed in a programming language.

This is neat, but what if I wanted weirder?; Janet

Janet would be another contender for a forever language — it is weird, sort of a Clojure clone, sort of a Lisp, but totally its own thing at the same time. It is tiny, portable, and fits into similar spaces that C does…but also not really. Janet is a beast utterly of its own…also the name of my grandma.

Hold up now! I said weirder!; BQN, APL, K

Alright, this was probably me going off the deep end…

Okay, too0ooo weird and my brain is goo; gforth, pforth, and lbforth

I adore languages that I can hold entirely in my head. A big thing that helps me hold a language in my head is limited semantics. You don’t get much more limited than Forth!

The ethos at the heart of Forth is clearly articulated by its inventor,

The concept that programming is something that you need special education to do is not right. It is something that is promoted by the priesthood.

— Chuck Moore

Hold those horses…I’m in love!; RetroForth

Readers of this blog will have seen me talk about Retro before…while it makes no sense as a forever language…here I am…I’m stricken…I’m totally lovesick for it. It is tiny, it is portable, it is well documented, it assumes literate programming as the norm!

That’s a mighty nice little vm you’ve got there; Uxntal

Like Forth, this is another system that strives to be pretty much completely understandable. A system that can be held in 1 person’s head…it also offers everything you need to make little graphical programs and games.

But what if assembly?; 6502 and z80 assembly

Again, this was me going off the deep end a little bit.

What if I wanted a job though?; C, C++, Go, Java, Kotlin, and Swift

Blergh — remember when I said that SmallTalk broke me? Yeah, that broken-ness really comes to rear its head when I try to use these gigantic enterprise languages that have terrible tooling (Go, C, and C++ are almost passable, but Kotlin and Swift are laughable).

I also once upon a time tried Rust but it literally melted a component on my laptop so I gave up.

Fuck it! Those are no fun! Go go gadget make your own programming language!; Guava

I mean…did I really make my own programming language? No. But, Guava does carry with it a lot of what I’ve liked about other languages along the way.


So, where next? What next? I’m a habitual breadth over depth kinda person. I wanna say it is time to go deep on one language…but…who knows!?

A red-tailed hawk with wings outstretched to keep its balance while perched on a peek branch of a tall pine tree.

An unexpected visitor came to the tree in our neighbor’s yard today.

In reply to: ~karlen, "no one will ever read this but..."

~dozens recently introduced me to this series where blog posts that are at least a year old and feature the phrase no one will ever read this but” are read allowed…and…it is remarkable.

Close up of seed pods

Signs of spring

A kiddo in winter gear looking at a birch poly pore mushroom

Birch poly pore.

Card game of hidden information and structured communication

This is a game of hidden information, structured communication and cooperation. To play you will need a standard deck of playing cards. The game is a modified version of Hanabi which is played with a custom deck of cards and tokens.

How to play

Remove aces and 2s from the deck. Place aces in a pile, face up. These are the information tokens, a form of in-game currency.

Place the 2s in a line at the center of the play space. All cards will be played on top of the 2s.

Shuffle the remaining cards. Deal each player (up-to 5 players) 5 cards, face down.

Once everyone has cards, lift cards. A player cannot ever look at their own hand! Players hold their cards so that all other players can see them, but so they cannot see their own cards.

Players now go around the circle, building ascending piles of cards by suit, starting from 2 working up.

During a turn a player can take 1 of 3 actions:

  1. Take an ace (information token) and use it to tell another player something about their hand
    • A player may only reveal information about suit or number. E.g., they can indicate that another player has 2 spades or may indicate that a player has 3 3s.
    • After revealing information the ace is discarded and is unusable until it is reactivated.
  2. Discard a card from their own hand, reactivating a previously discarded ace for another player to use.
  3. Play a card onto the play piles.

A player must always have 5 cards in their hand. After playing a card, or discarding a card, a player draws another card from the remainder of the deck.

Cards that have been discarded to reactive an ace cannot be played and are removed from the game space.

If the draw pile is empty, continue playing until either everyone runs out of cards, or no moves can be made. Play is over when no moves can be made.

The game has a soft win-state, where you determine by how much the group won by how many piles they successfully create, 2 - king.

A child runs out of frame. Behind their retreating form a fairy fort with pine bow flooring.

From where to what?

What is an addressing mode?

In a recent post I referenced addressing modes. But what the heck are they!?

Setting the stage

The instruction register holds the program instruction that is currently being run.

A fixed number of bits within the instruction register represent the operation, e.g. “op. code” — examples of these instructions include things like add, subtract, load, and store. We can imagine the instruction register like this:

ASCII diagram of an instruction register. Links to a txt of the same diagram.

There’s a fixed number of bits allocated to the op. code (the 6 left-most boxes), and then a fixed number of bits that hold the operand/s being operated on (remaining 10 boxes). An operand could be a value, a CPU register, or a memory address. This set of fixed bits is referred to as the address field.”

The number of bits allocated to the address field determines the amount of memory that can be addressed. The number of bits allocated to the op. codes determines how expressive the op. codes can be (or at least how many of them there can be).

Addressing modes provide different ways to use the addressable memory.

In my diagram, 2 bits of the operation code are used to determine the addressing mode. The addressing mode tells the processor how the bits in the address field should be interpreted.

For example…

  LDA #80
  LDA $80

These similar looking instructions are pretty different.

# tells us that the number following is a literal value.

$ tells us that the number following references a memory address.

So, LDA #80 loads the literal decimal value 80 into the A register and LDA $80 loads the value located at memory address $80 into the A register.

#80 is known as immediate mode because we are directly, or immediately, loading a value, while $80 is known as absolute, or zero page, mode.

What about a literal hex value?

BOOM!

  LDA #$80

This loads the literal hex value $80 (e.g. 128) into the A register.

Other resources

A young child sits in tall snow, looking at the shadow their mittened hand casts.

« Future Page 1 of 206 Past »