Lucky Bubba - the Little Prince
I’ve often referred to my cat, Lucky Bubba, as “natures most perfect cat”, or “a prince amount cats”.

Test from dijkstra, my Framework laptop
Decided to test out setting up and enabling this wiki setup on my Fedora Linux laptop that I got from the good folks at Frame.Work. Have had it for a while now. I got the smaller laptop, the Framework Laptop 13 (AMD Ryzen™ 7040 Series).
It it light and handy. Has a decent keyboard for a laptop. Running the latest version of Fedora, as of the time of this post:
cat /etc/fedora-release
Fedora release 42 (Adams)
It’s a solid distro and is kept very up-to-date, which I like.
Emacs updates to support new hugo-powered blog
This has been an interesting day. After getting the updates to the blog repo all updated and working well, I wanted to also update my Emacs configuration to make it a smoother experience to add new posts.
So two main changes were required. The majority is in this one file, located in my `$HOME/.emacs.d/lisp` directory:
init-hugo.el
;;; init-hugo.el --- Blogging helpers for Hugo/ox-hugo -*- lexical-binding: t; -*-
;; Author: Gordon Owen Tillman <got@example.com>
;; Namespace: got/
;; Summary: Create date-prefixed Hugo posts with optional tag prompting
;;; Commentary:
;; This file provides a helper function to create a new blog post in
;; `got/blog-directory`, using the ox-hugo front-matter conventions.
;; All functions are namespaced with `got/` (Gordon Owen Tillman).
;;; Code:
(require 'subr-x) ;; for string-join
(defcustom got/blog-directory
"~/Projects/g/gordyt.github.io/source/blog/"
"Directory where blog posts are stored."
:type 'string
:group 'got)
(defun got--collect-existing-tags ()
"Collect all unique tags from existing blog posts."
(let ((tags '()))
(dolist (file (directory-files got/blog-directory t "\.org$"))
(with-temp-buffer
(insert-file-contents file)
(goto-char (point-min))
(when (re-search-forward "^#\\+HUGO_TAGS:\\s-*\\(.*\\)" nil t)
(let ((line-tags (split-string (match-string 1) "[ ,]+" t)))
(setq tags (append tags line-tags))))))
(delete-dups tags)))
(defun got/new-blog-post (title)
"Create a new org-mode blog post in `got/blog-directory` with TITLE.
Prompts for existing tags (with the option to add new ones)."
(interactive "sPost Title: ")
(let* ((date (format-time-string "%Y-%m-%d"))
(slug (replace-regexp-in-string
"[^a-z0-9-]" ""
(replace-regexp-in-string
" " "-" (downcase title))))
(filename (expand-file-name (format "%s-%s.org" date slug) got/blog-directory))
(existing-tags (got--collect-existing-tags))
(chosen-tags
(completing-read-multiple
"Select tags (or type new ones, space-separated): "
existing-tags nil nil)))
(find-file filename)
(insert (format "#+TITLE: %s\n" title))
(insert (format "#+DATE: %s\n" date))
(insert "#+HUGO_BASE_DIR: ../hugo-site/\n")
(insert "#+HUGO_SECTION: posts\n")
(insert (format "#+HUGO_TAGS: %s\n"
(string-join chosen-tags " ")))
(insert "#+HUGO_CATEGORIES: \n\n")
(message "New post created: %s" filename)))
(provide 'init-hugo)
;;; init-hugo.el ends here
Then just a minor update in `init.el` to load it:
Hugo Conversion is Working!
I have finally gotten around to resurrecting my old test blog
blog.gordontillman.info
. I was originally using org-octopress
which I like. But after it was no longer supported/available I just
quit maintaining this blog.
As of today it is now a Hugo blog, currently using the ananke
theme.
Checkout the source
branch of this repo for details.
Fun with Clojure Macros
It all started innocently enough. I had a deftype
that was
implementing several protocols. I had written all of the protocol
functions inside the body of the deftype
. And even though each
function, by itself, wasn’t overly large, the entire blob of code was
getting out of hand.
Here is a tiny little example with some made-up protocols and a type
that embedded the protocol implementation inside the deftype
. In
the actual code there were many more methods that needed to be
implemented.
(defprotocol Proto1
(p11 [this])
(p12 [this foo bar]))
(defprotocol Proto2
(p21 [this])
(p22 [this baz bin]))
(deftype MyType [item1 item2 item3 item4]
Proto1
(p11 [this] ...)
(p12 [this foo bar] ...)
Proto2
(p21 [this] ...)
(p22 [this baz bin] ...))
Installing Ubuntu 14.04 LTS with i3 Window Manager on Chromebook
In this post I document the steps required to install and configure Ubuntu 14.04 LTS (Trusty Tahr) on an ASUS C200MA-EDU-4GB Chromebook.
Chromebook Performance Test - C720 vs C200
My buddy at work just got a new Acer C720-3404 Chromebook. I have the ASUS C200MA-EDU-4GB Chromebook. We decided to do a real-world performance comparison with a sample task that we have to perform all of the time.
Installing xmonad on Ubuntu 14.04 LTS
After seeing with my own eyes how rapidly the very minimal the xmonad windowing manager starts up after logging in, I decided to upgrade an old Linux box I have at the office that is running Ubuntu 14.04 LTS (Trusy Tahr).
Mounting External Drives - Ubuntu 14.04 and Chromebook
OK, this post is part of my continuing experiments with an ASUS C200 Chromebook. I have installed Ubuntu 14.04 using crouton.
I had created two partitions on a Micro SD Card, one as Fat32 (EsFat actually) and the other as ext4.
The FAT32 partition mounts at /media/removeable/share
and the ext4
partition mounts at /media/removeable/gordy
. I tried storing
various projects on the ext4 partition but when I tried to build from
that partition I would get a permissions error.
Fixing Scrolling on ASUS C200MA-EDU-4GB
One thing that really bugged me with my new ASUS C22MA Chromebook was the way that track-pad scrolling worked. By default it is exactly the opposite of my MacBook Pro.