The joy of yak shaving

The act of shipping software is often hindered by Yak shaving. A fix splinters out into several items, which in turn splinter out into several more items each. It is important to exercise caution of this happening, and chop off the tail when necessary.

In personal projects, however, I have found aspects of Yak shaving to be some of the most illuminating parts of programming.

Take this blog for instance. I could have just set up Mediawiki for myself. If What I wish this to be were truly limited to just getting words on the web, I would have done so. But I wanted to write code in addition to writing words.

So I have found myself doing work that is explicitly not related to getting words in front of people. Building an extension maybe helped me get these words out more quickly, but in reality most of the joy came from learning something new. Hello, next! in the end is responsible for you seeing these words right now, but it was not necessary. I could have written my posts as plain ol' HTML(tm).

And it's all very fun! A "simple" project (glorified static site generation) can become a beautiful problem that exposes me to different tools and the frameworks, the amount of which is limited only to wear I draw the line.

What I wish this to be

Some of the problems I'd like to solve with notes like these

  • Blog posts have too much ceremony around them
  • Tweets are ephemeral (In fact, I delete mine regularly)
  • I should do this regularly (related to 1 and 2)

From a technical point of view

See also What I do not wish this to be

Building an extension

I'm impressed how easily it is to author vscode extensions.

The first feature I wanted was Referencing notes easily, which I was able to build starting with the CompletionItem example. Now typing [ brings up an autocomplete.

Additionally, I can create a new note by entering the title like so: [[My new note]], and right-clicking and selecting "New note from selection." Streamlines the process a bit.

The sample extensions allow you to run and debug them in a new Extension Development Host window. I loaded mine with debugger statements as I used the extension with these very notes.

Packaging the extension involved typing vsce package in the extension directory, then loading the subsequent vsix file in VSCode.

Impressed!

Future extension ideas

Hello, next!

Yeah Next.js served me well (thanks, team!). Make a pages/ directory, [id].js with getStaticPaths and getStaticProps and done.

I also swapped out the markdown. Marked is good but I wanted to leverage next/link and the following GitHub discussion (I didn't even know GitHub had discussions?) gave some working code with react-markdown: https://github.com/vercel/next.js/discussions/17088