RSSAmplifier

Blog

Evan Moses

Recent content on Evan Moses

emoses.orgRSS feed ↗19 posts

Latest posts

My Policy on AI

All the writing on this blog is mine. I write this blog because I enjoy writing and I’d like people to read what I’ve written 1 . I’ll use LLMs to grammarand spell check, although I find they rarely do a better job than just re-reading what I’ve written. I think I’m a reasonably good writer. I’m not against LLMs writing for me per se, but as of now they write…

Yak Power-Shears: LLMs are pretty good at Emacs

I’ve been an Emacs user for more than 25 years, and I’d say I’ve got a reasonable handle on customizing it. I can writeelisp, and I’ve got a couple decades of accumulated tweaking cruft on display in my dotfilesrepo . I’ve written advice , I bind custom functions to keys, andI’m actually writing this right now with a customized mode for Hugomarkdown that I…

Moving My Pi to an SSD

TL;DR After setting a project aside for 5 years, I got my RPi4 booting from an SSD and running a 64bit OS by tweakingthe USB_MSD_STARTUP_DELAY bootloader config parameter. I run Home Assistant on a Raspberry Pi 4, using Docker Compose on Raspbian. This has worked great for me for years, andoverall been very stable, but there’s been a Sword of Damocles hanging over the project: it was all…

Git One Liners: Bulk-Amending a Branch

I made a mistake with my git config recently (I’ve updated Separating work and personal config to avoid thatmistake 😬), and ended up creating all the commits in a branch with the wrong email address. The also should have beensigned and they weren’t. Here’s how to fix that in one go: git rebase \ --exec 'git commit --amend --no-edit -n --gpg-sign --author='Evan Moses…

Separating work and personal config

TL;DR My dotfiles are checked into a git repo I want to avoid checking in sensitive, work-specific config to a public git repo I updated my git and emacs configs to check for local overrides in ~/.local Like many folks, I check my dotfiles into a git repo to share them across multiple machines. When I set up a newmachine I can simply clone that repo, run an install script that adds some symlinks,…

A Go Puzzle: How can this panic?

Here’s a puzzle for Go developers. How can the following code possibly panic with a nil pointer dereference? var someThing * SomeStruct // various things happen, including possibly assigning to someThing if someThing != nil && someThing . Body != nil { fmt . Printf ( '%s' , someThing . Body ) } Think about it for a minute. I’ll wait. OK are you done? I don’t want to spoil it for…

Home Assistant: using target in blueprints

TL;DR Here’s a snippet for use in Home Assistant for turning an arbitrary target selector into a list of entity ids Also here’s a low-battery warning Blueprint that uses it. I’ve been using tykeal’s Low Batteryblueprint ( github ) in my Home Assistant setup forsome time, to give me an alert on any sensor batteries that need changing. There are a number of sensors…

Go Generics: Use Structs for Generic Arguments Lists

TL;DR I wanted to build reusable code for a pattern in Go I had to fight the type system a bit but I won in the end We can pack argument lists into structs to make the pattern generic over different sets of arguments to functions Skip to the end of the post for spoilers I have a preference for functional-style programming. I tend to model algorithms in my head as data and transforms ofthat data…

Emacs Tidbit: rectangle-number-lines

Emacs has so many little features that do exactly what you need in very specific circumstances. Here’s one that I justfound out about: rectangle-number-lines . I had some lines and I wanted to insert line-numbers for reference. Iwanted this arguments list: [team8721038424565681034userfdff6f87-d876-4558-8d12-19e039e5a880afoosecretalsothisbe46e2d16-b3ba-4f84-826f-5e3031465e21] To be this…

No I don't want 2, Emacs

This blog, and the vast majority of the code I write, is written in Emacs with evil (a vim emulation mode). I have a nasty habit of mashing :w2<ret> when I really was trying to save the current buffer with :w<ret> . :w2 writes the current buffer to a new file called 2 , which I don&rsquo;t believe I have ever done on purpose. So, I added this little gem to my .emacs, and it&rsquo;s saved me any…

Representing State as interfaces in Go

I made up a neat little pattern in Go the other day. It&rsquo;s a way to represent a state change in a system by exposingdifferent APIs for different states, while only holding state in a single underlying struct. I&rsquo;m sure I&rsquo;m not the firstperson to invent this, and it may already a name, so please let me know if you know of one [Update: apg on Lobsters pointed out thename…

Minimum Age Ratings

Minimum Age ratings on games and why they&rsquo;re terrible I came across this Redditcomment todayand it explains so much: I used to work in the toy industry - there is A LOT hidden behind age ranges on a box. Those are less about what age the game is for (except for development focused games, like HABA), and more about regulations around what age can legally be printed on the box. Examples off…

Building a custom Emacs auth-source

My employer, has recently been making securityimprovements to how we access all sorts of internal systems. As part of thathardening, we&rsquo;ve been disallowed from using SSH keys and long-lived GitHubtokens to access our code on GitHub. In place of that, we&rsquo;ve now got aninternal tool that grants us short-lived tokens on demand, after SSOing. This is a good idea even if it adds a little…

Betrayal at House on the Hill - very thematic fun

I watched Tabletop&rsquo;s playthrough , and decided to pick it up at my local FLGS , Gamescape . I don&rsquo;t have many of this sort of heavily-thematic, strategy-light game in my collection, and it&rsquo;s good to mix it up a bit. Turns out it was a good decision. Sus, A.C., and I had a ton of fun, ended up playing two games in a row, and I&rsquo;m looking forward to playing another haunt…

Dungeon World: My first pen-and-paper RPG

To start out, I&rsquo;ve got a confession to make: I&rsquo;m a pretty big nerd. I know, I know, it&rsquo;s hard to believe, but it&rsquo;s true. I also like games, which might be a little easier to swallow. Beyond the tabletop board and card games I&rsquo;ve been writing about here, I&rsquo;m also a fan of video games, and in particular adventure and RPG games. Which leads me to a more…

Power Grid: It comes down to math

Last game night we sat down for a 4-way game of Power Grid , with me, Sus, A.C., and L.S., an old friend who moved to town relatively recently. We had all played the game before (some of us more recently than others), but this was the first time we played on Italy, one of the expansion maps. Power Grid is the epitome of the loose genre known as Eurogames. There&rsquo;s very little luck involved:…

Agricola: You&#39;re always losing

Last week A.C., Sus and I got together for a game of Agricola. In Agricola, you play a peasant couple starting out in a small hut on an empty farmyard, and your goal is to grow into a prosperous family with crops, animals, and a big house. It&rsquo;s a worker-placement game, where players take turns choosing which actions they&rsquo;ll play on each round, and more actions become available as the…

Twilight Struggle: Conclusion

Unfortunately, A.C. and I didn&rsquo;t have a chance to get together again before I had to clean up the games table, so there is no conclusion for our Twilight Struggle game. However, unbeknownst to him, I had the Middle East Scoring Card in hand, and was only one or two influence points away from having Control of the region. If I had manged to score while I had control, or if I had managed to…

Twilight Struggle makes you stand up

I played the first half of a game of TwilightStruggle with A.C. tonight, and it&rsquo;s definitely one of my favorite games. The geeks overat Board Game Geek agreewith me, as it&rsquo;s consistenly the highest rated game on the site. And before youask, it doesn&rsquo;t have anything to do with sparkly vampires and tween girls. Twilight Struggle is a two-player strategic game where two players take…