Creating thoughtfully-engineered, finely-crafted, and well-tested software.

A software engineer with over a decade of experience - this website is for sharing technical articles, and my own side-projects related to software engineering. I hope you enjoy it!

What to expect:

  • Weekly devlog updates
  • Monthly technical articles
  • Occasional software releases
Support Me on Ko-Fi!

FEATURED PROJECTS

view all projects →

typed-ident

Type-safe identifier validation, inspection, and mutation.

LATEST ARTICLES

view all articles →
A picnic scene featuring Osaka, Sakaki, and Chiyo toys, sitting out in a grassy area someplace, with various fruits.

Declarative Macros in Rust: A Simple and Practical Introduction

Macros are commonly presented as simple “text substitution” language features. But the way they’re implemented can change your experience using with them. The simplicity of a text-replacement-style implementation (sometimes referred to as C-style macros) can often lead to surprising and counter-intuitive results. As such, those feel simple to learn, but difficult to master and use safely. In Rust, however, macros work in a way that may be unfamiliar to many. They are recognized and processed during the compiler’s parsing phase. That can make them do some powerful things, but it also can make them a little hard to learn and understand initially. Since macros are a huge topic, there’s no way I’m going to be able to cover all of it in one article. So we’re only going to focus on a brief introduction to macros, as well as defining and using declarative macros. Updates: - 2026/10/08 - added an introduction covering what macros are, based on feedback from the Rust Users Forums.
Read More...
A Sakaki toy from Azumanga Daioh sitting on a chair with a cat on her head, and a cat-like creature standing next to her

typed-ident: A Retrospective on a Type-Safe Unicode Identifier Crate

This week, I released my first official open source crate - `typed-ident`! This crate is actually a small part of a few other projects that I’m working on. I’m not quite ready to share those other projects yet, but I figured instead of taking months to release a few big projects, I could break out this functionality, polish it up, and release that. After all, it eventually needed to be factored out, and it seemed like it wouldn’t be too difficult. That was the idea at least, but as I’m sure you can tell just looking at the crate (and reading this article), it didn’t quite go to plan. This article should be a fun ride - I learned a lot working on this crate, and maybe even if you don’t plan on using it you will too!
Read More...
An Osaka toy from Azumanga Daioh sitting under a kotatsu with a strange cat at a desk next to her.

10 Things to Check on Your Static Website Before Launch

Though it’s taken me longer than expected, sigseis.dev is mostly done - with only a few remaining missing features and polish work. With this site being mostly finished, I thought it would be fun to write up a little article about some things you should check on your static sites! At least while it’s still fresh in my own mind. UPDATE: - 2026/08/04 - Added a section about “Optimizing Content Delivery”, dropped the “Sticky Headings” to be bonus content, and a small bit of text on `tabindex` in the accessibility section.
Read More...

LATEST DEVLOGS

view all devlogs →

LOG 021

2026/10/23

★ Error Handling

  • Researched and started working on my next crate (an error handling crate).

  • Developed an implementation for the error handling traits and types.

  • Made a proc-macro for deriving traits on error types (#[derive(ErrorCode)]).

  • Made a proc-macro attribute for appending context information on failing a function (#[error(...)]).

  • Started writing my next article (mostly I'll focus on that next week).

My next crate is a pretty obscure kind of error handling crate.

It will be useful for crates which don’t usually wish to carry error details (like in production, for instance), but can benefit from being configured to do so for debug builds, or for testing, or during development of new features.

I’m still not sure what to call the crate, and it’s kind of hard to summarize how it works… I think you’ll just have to wait until I release an alpha to get a look at it.

Next week I’ll prioritize working on my next article.

LOG 020

2026/10/16

★ Typed Identifiers

  • Released 0.0.3 of the typed-ident crate (full release notes)!

  • Allows conversion traits to bind to typed results (#38).

  • Cleaned up formatting options to make the traits more approachable (#40)

  • Updated documentation in preparation for the new release (#42)

  • And other usability improvements for the typed-ident API.

This will be the last update to typed-ident for a while.

I still want to add spanned identifiers. That’s my most wanted feature, and arguably the main reason that I even developed the crate in the first place. However, I think it would be best to first have a crate that plans on using the feature before continuing to develop it - so that I can dogfood the design a bit locally.

The crate is in a really good place right now though. It may have a few small design or usability issues, but I think it needs to be used a bit to find them.

Next week, I’ll start preparing the next crate I plan on publishing.

LOG 019

2026/10/09

★ Typed Identifiers

  • Released a new article on the basics of Rust declarative macros.

  • Added the ability to iterate over Words and WordIndices for Fragment types.

  • Cleaned up and simplified the module hierarchy in typed-ident.

  • Did analysis on weird characters that don't change case in Unicode (see KNOWN_ODDITIES).

  • Cleaned up constants, and fixed a bug where documentation wasn't tagging feature-specific items.

This week I spent a bit of time editing and releasing my latest article - I think it went well!

It’s still not perfect, but I hope it’s helpful to some, and it seems to be well-received. I appreciate everyone who read and gave feedback, and I’ll try to make future articles even better!

Other than that, just a lot of clean-up work in typed-ident. Looking at what’s left to do, it’s not as much as I had feared. I think it may be possible that I am able to release v0.0.3 later next week.

No promises though, it’ll realistically be released when ready.