Blog

#blogging

Stole another great interface from Lea Verou with a new bar chart on the Archive page and added year archives. I can really see when I took some time off writing over the last few years now. Forward!

As I come into the end of the year, I am adding some nice to haves to the site.

I recently read an article from Lea Verou on tags in her blogging setting and one of the things she mentioned was orphan tags. I took note and it’s been itching me for a few weeks. I implemented a first pass this morning. You can see this on CSS Custom Properties Like This Is a Waste, where the #custom-properties tag is no longer a link. Hover over it and you’ll get a note that there is only one post with that tag. It makes no sense to have a list page with just one post on it, so these are no longer generated.

As Lea noted in her article, this cuts down on number of pages being generated and can lead to performance benefits. I’m working through the later, but the number of pages being generated as of this morning is now 1500 vs 1700 before the change. Over 100 tags were orphans.

Regarding:

Quick note. I regularly write articles that address two audiences: me and fellow Christians. Usually you can tell that I am doing this by my specifically addressing Christians. Such as:

But justice! They must pay for their actions, pay for what they’ve done to me! God didn’t say the same for you, Christian. No, Christ said “I’ll pay the bill.” Christian, you don’t want justice done for all that you have done and you surely don’t want justice done to your foes.

When You Forgive Someone, (emphasis added)

This article would not make sense if it was addressing non-Christians, as we cannot hold those outside the Blood to the standards set for those under the Blood of Christ. This article, along with many others, addresses me and fellow Christians and commands that are made of us as brothers and sisters in Christ. Namely, you are to forgive without any reason other than Christ forgave you.

If you are not a Christian and read an article like this and conclude that it is crazy to hold you to that standard, you are correct and I am not holding you to that standard.

This morning I was looking through my Archives— making some code changes and such— and noted how much I like seeing trends for months, usually being able to remember why. Why is Brian Sauvé trending this month? Right, new album. Oh, he was trending in April too. New album. Yeah.

Remember one of my goals with this newly updated site— updated back in February— was to diversify the content. These things help me see what I’m posting about and easily identify trends. It also helps when folks try to gaslight me into thinking that I post a lot about fill in the blank, I can easily look back and see whether that is true.

Like metrics that come from fitness devices and smart watches, once you have the numbers you can form plans to change those numbers in meaningful ways.

Defy the Dragons

Eighteen posts in June. I’ve “created” a lot of “content.” Of course that is what I would expect from taking three trips in a month, spending two weeks in a tent in the mountains— both the Appalachians and the Rockies. Lots of photos and lots of music.

But I haven’t been writing. In fact, I look at the Archive and see that May was quiet. Half that was because we were secretly preparing to disappear into the mountains and then did so, but the other part is my writer’s block rearing it’s ugly, worty head.

The dragons are getting restless, the shadows are licking my heels.

If I had not God behind me, the dragons would scare me. Instead I grab my pen and I write.

In February when I rebooted this blog, I wrote:

But you need to hear this. I don’t know who you is in that sentence. It might be me in 5 years. Write. Grab the Candle and write in the darkness. Light a campfire and defy the lurking dragons with your words.

Long Winter

And in March, feeling it coming:

Go back to Psalm 57. David, holed up in a cave, surrounded by dragons, spears seeking his mortal flesh, grabbed his lyre and belted out worshipful thanksgiving in defiance of the dark.

Culture Saturday: Comfort Among Lions

I am teaching my kids to defy the dragons, to defy the dark, too. Night before last my youngest was attacked by a housefly. I have written Psalms deep into me this last year. I rest in them. So I sang him this song.

I will continue to push myself to write. Keeping everything in my head is not healthy, first. But also I enjoy it. To be able to link the number of posts I am able to that give me advice, remind me of what matters, and drive me to keep going. During my lows, I can look back and reenergize for the trek forward.

There may be dragons, but as the Psalmist of Ogden sings in Psalm 148: “Ye dragons, sing His praise.”

Write. Delete. Write. Delete. That writer’s block is back and is banging me over the head. Hey, ol’ friend, go away. I wrote for a few hours on Friday, ready to publish. Woke and edited. Then… it wasn’t… ready? Some permutation of it, at some point, but not it.

Learn from the past. Write through it. Get off social media, grab a book, turn up the music and get back to writing.

Front Matter CMS

With the relaunch of Finley, I am. a couple of weeks ago I shifted from using a CMS to everything-is-code. My blogging days stretch back to the mid-2000’s and my having built my own blogging tool called Blog Wizard. Various versions of that powered several blogs until I launched Finley, I am. in 2015 on Ghost.

Simply put, I am used to having a CMS. Code is great, but certain things are nicer with a CMS. Managing data things, specifically. The week with the relaunch I had imported all the articles from Ghost 1-to-1. Same tags and everything else. Last Sunday I started refactoring the tags. Because everything-is-code and I realized that I could build something cool if my tags were better. As detailed in the linked article, I merged and deleted a ton of tags. Over 300 tags in over 400 posts.

That brings us to Front Matter CMS. First, it’s a plugin for VS Code. Many CMSs exist for SSGs like Astro that write code. This sits alongside your Markdown post, living in the sidebar of Code. For SEO-minded folks, it provides SEO status info— like title, slug, article length, keyword management, etc. For me, it’s the publishing date, draft status, and very much the tag management for articles I love. Autocomplete on tags will help you remain consistent on your tag use, which I then use for finding similar posts.

And it helps you manage. The Dashboard shows all published posts and easily helps you find and edit your drafts. Taxonomies? Yeah, merging, renaming, deleting, and more. And remember, everything-is-code, so changing merging “video” into “videos” results in 10 changed files that you then commit and push.

If you use Hugo, Jekyll, Astro, or other SSGs that use front matter for metadata around posts, go grab Front Matter CMS and give it a shot.

I added a new type of post called reposts. In my Article component— used to render each article in multiple modes (eg. list, full, snippet)— I already include all tags as classes. I use this in lists to add the icons— look at the Ramblin’ section of the homepage.

<article data-mode={mode} data-draft={draft} class={`b--post ${tags.map(tag => `tag-${tag}`).join(' ')}`}>
[...]
</article>

So adding a new post type is just a tag. With the class tag-repost, I can now add the icon. But I also wanted to show the original post embedded. To do this, I added an optional string called originalPostSlug to my Content Collection. And this gets added to the Article component.

---
let originalPost: CollectionEntry<'posts'> | undefined = undefined
if (originalPostSlug) {
	originalPost = (await getCollection('posts')).find(post => post.slug === originalPostSlug)
}
---

Now I have the original article. So now we display it after the content.

<div class="b--post--content">
  <Content />
  {
    originalPostSlug && originalPostSlug && (
      <div class="b--post--repost">
        <Article post={originalPost} mode="list" />
      </div>
    )
  }
</div>

You can see it in action here.

Taxonomies

No posts on Sunday. First day without any posts since the reboot. I was busy. Yeah, I had church— even played with the worship team— and had to get groceries and other errands, but I was also refactoring all the tags. Almost all of them. And what’s great is you’ll likely not notice too many changes with the tags on posts. Yeah, some tags were redundant— podcast and podcasts, for instance— but by and large I left the tags “untouched”.

So major refactor of nearly all tags, but left them “untouched”. How? Well, #ios has now become #tech/apple/ios. And #bluegrass has become #music/genres/bluegrass. I added clarity by nesting tags.

Now this does quite a few things in the long run, but in the short I’m surfacing this in one clear way. Go to #music and you’ll not only see posts from #music, but also all child tags. And you’ll see a list of child tags available to filter further. Click #music/genres and you’ll see a list of genres that I’ve blogged about over the last 8 years, for instance. And what’s really nice there is that #music/genres is never used as a tag. I’m filling in the blanks so Astro is building tag pages for empty tags, since loading posts in #music/genres loads all posts from child tags too. So despite it being empty, it loads all those child tag posts and now isn’t empty. The parent tag is also surfaced, so if you land on #tech/apple/ios, you can click the parent tag above the headline #IOS and see more posts about Apple.

Across ~430 posts I use over 300 tags. Tags are more chaotic than categories. I noodled introducing categories, and still may at some point, but tags allow more specificity. These newly reorganized tags should make it much easier to find content across the site.

I just resisted posting something to Facebook. And then almost tweeted about resisting posting it to Facebook. It was after the third or fourth sentence, after the second rewrite, that I realized that it was better for my blog than Facebook.

Impulse drives us to post the moment something comes to our mind. Take the extra time to sit on something. The world doesn’t need your commentary immediately. Your snark and sarcasm can wait, even if you don’t catch the trending #hashtag. Be more thoughtful. Slow to speak, slow to anger.