Comment Systems for Static Websites

(Updated 2019-11-26)

Static websites are fast and tend to be simple to maintain. But the lack of processing on the server side means that comments (and other interaction) is a bit of a hassle.

This is a list - by no means complete - of the systems for doing comments on a static website.

Read more »

Spirit X3 File Organization

For larger Spirit-based project, organizing the source code well can lead to more efficient builds and increased maintainability.

Of course, this is true for any project. But the heavily templated nature of even a fully realized Spirit parser makes this doubly so. Figuring out how to take advantage of separate compilation while maintaining the ability for each of the pieces to see the needed type/template information is not trivial.

Read more »

Integrate VirtualBox and PuTTY

This is a simple Powershell script to automate starting and logging into a headless VBox VM using PuTTY. My main development environment is a VirtualBox VM running Arch Linux on top of a Windows 10 host. While I could work directly on the console, I like to have multiple windows up - one that has vim running and one that I use for things like running hugo server. So, I start the VM headless and connect to it with one or more PuTTY sessions.

Read more »

Spirit X3 Error Handling

Once your parser grammar grows beyond a few rules/parsers, handling errors will become a priority. Being able to give feedback about where things went wrong, what exactly went wrong, and possible fixes are all things you would like to provide. It might also be nice to see if you could recover the parsing process from the point of failure and continue parsing to maybe find other problems.

Read more »

Rust Move vs Copy

I've been looking at the Rust Ownership model . The skinny is that Rust has made mostly opposite decisions from C++. Copy vs Move An assignment in Rust is by default, a move. The original variable is declared as invalid and using it will net you a hard error at compile time. The example used in the docs is: let s1 = String::from("hello"); let s2 = s1; println!("{}, world!", s1); That last line will not compile because s1 is no longer valid.

Read more »

Building the Latest Version of Hugo

My mobile development environment is a chromebook with an arm64 (AArch64) architechure. It does have Linux (crostini) support. So, that means that I have a functional Debian Buster distribution. But the version of hugo that is currently in buster is 0.47 and I need at least 0.49 for the Hugo theme I'm developing. This short article show the process I finally came up with for getting that newer hugo. The Easy Way Hugo is built using the go language.

Read more »

Live on!

· site

Now officially live on the new blog at! The new site uses: Hugo - site building Jeffprod - theme Netlify - hosting Zapier - automated build for scheduled posts Google - as domain registrar. GitHub - for repostory hosting. I still have posts to migrate from the old site. That is a bit of pain, since it wasn't originally written in Markdown. One tool that has been indispensible is Dillinger.

Read more »

Chrome OS Linux Container (crostini) tips

The new Linux Containers available on some ChromeBooks are manna from heaven if you are a developer. Having a full blown Debian based distribution just a click away makes supported ChromeBooks very usable development platforms. And getting such a device can be cheap.

Here is a set of tips to help make things a little nicer.

Read more »

Dotfile Maintenance

Here is a party I'm a bit late in joining. And it is one of those ideas that makes you smack your head wondering why you didn't think of it. Config file tweaks For years, I've maintained a tar.Z bundle that contains a .profile, .cshrc, .bashrc, .vimrc etc. You can tell how old it is by the fact that I still maintain it with compress rather than gzip. When I started it, gzip did not exist.

Read more »