New Fonts Day
Today rather than publishing a lengthier post, I’ll point you to some work I’ve done on this site’s design.
Read more on my main blog
Today rather than publishing a lengthier post, I’ll point you to some work I’ve done on this site’s design.
Read more on my main blog
Easily view the source of a function or method in your terminal using Git and this shell script.
Read more on my main blog
This is a post I’m mostly writing for my future self, because I can never remember the actual term for the CSS feature that lets you define a color based on another color (it’s “CSS Relative Color”) and “color mix” which is what I keep wanting the feature to be called never turns up any results…
Read more on my main blog
I’ve used URL text fragments in a few posts now and often use it outside of this blog to point someone to a particular piece of text on a page. They’re a really useful feature that allows you to create a URL that links not just to a page or an anchor on that page, but specifically to a bit of…
Read more on my main blog
The Café Mezcal is a twist of the classic espresso martini that leans into the delightful way that coffee and mezcal1 flavors combine. For folks who don't enjoy mezcal but don't mind tequila, you can switch the proportion of mezcal to tequila or use only tequila.
I also leave out brewed espresso, but I'd definitely experiment with adding it back—maybe cut down on the coffee liqueur to make up the volume.
Combine in double Old-fashioned glass and stir with a large ice cube.
I’ve been using Streaks to track my goal of reading each day since late April of this year. I don’t have a specific amount I’m trying to read; it’s whatever feels like progress that day. Some days I’ll read a couple of pages but not count it, others I’ll listen for 15 minutes and decide that’s good enough. I just hit 100 consecutive days (well, it will be 104 today but I put off writing this post since I wanted to pull some numbers to celebrate).
I thought it would be cool to pull some stats from my Reading data from the past ~year to compare the periods before I started using Streaks, since starting Streaks, and the past ~100 days that I’ve held this streak.
For combined progress of audiobooks and other formats, I’m using count of pages read or minutes listened / 1.9, which is a value I got from Nadia OdunayoofThe StoryGraphthat was a rough average ratio of minutes in most popular audiobook edition to pages in most popular non-audio edition over about 200 random works. It means...
Sometimes I want to take some changes that I’ve made but haven’t yet committed yet and put the into the git stash, which I probably use a lot more than I should. When will you learn to just git commit -mwip
, Caleb?
Either way, Git has my back. git stash --keep-index --include-untracked
is almost the opposite of the above. It creates a stash commit for only files that wouldn’t otherwise be committed: unstaged changes and untracked files.
--keep-index
leaves all changes already added to the index (i.e., staged) intact--include-untracked
stashes files in the working tree that have not yet been tracked by Git, and then runs git clean
to remove untracked filesThe above command is really useful in cases when you want to make a commit of a subset of your working tree. Say you’ve set up the perfect commit and...
Today is day nine of November, which besides other more popular “movements”” such as NaNoWriMo, National Novel Writing Month, is NaBloPoMo: National Blog Posting Month. I’ve been known to wax poetic about projects I’m working on and which might “soon” see the light of day, so I actually refrained for a bit before writing this post.
Yes, I’m participating in NaBloPoMo, which means that I’ve made it my goal to post 30 blog posts in the 30 days of November. Less stringent is the goal to post an article each day; I’m happy to make up for a missed day with a double if I need to but would like to avoid that.
NaBloPoMo was started in 2006 by Eden Kennedy, who in 2010 sold the concept to BlogHer which in turn seems to have stopped promoting it after 2016. That probably explains why this is the first year I’ve heard of it.
I’m...
If you don’t know me well, it may not be obvious that collecting records is the perfect hobby for me: it’s expensive, easy to get passionate about, few people care, and yes, it’s fairly pretentious. Record collecting even has dedicated and beloved shops for its adherents, often questionably lit and with entrances on side roads or alleys, a-la used book stores. It’s really got my name written all over it. So it might come as a surprise that I’ve never bothered until recently to be interested in it. You see, I’m not really that into music.
But as it turns out collecting records doesn’t really require that you listen to them. At least, that’s what I’m telling myself as I buy them recently and then proceed to listen to them on Apple Music while I wait for them to arrive.
I don’t even have a record player, but I’m up to five records on my shelf and in my Discogs account:
Inspired by My default apps at the end of 2023” via What Apps I Use In 2023” and because I did a good job writing 6 consecutive more or less “real” posts, here are my apps used in 2023. You may consider each of these recommendations. ’s “ ’s “
Notion has been helpful to me in organizing and offloading my thoughts on what articles I’d like to write and features I’d like to add for this blog. My articles usually start with a random thought and I’ll use that as the title for a card in my “Blog Posts” Notion board and possibly add some brief notes.
Notion provides a customizable set of attributes, called “properties”, that are specific to a “database”. These attributes can, in turn, be used to create Kanban-style boards. I mostly use a board whose columns are controlled my custom “Status” property and which is set to automatically sort each column by oldest to most recent update. You can also control what shows up on the cards. I have it set up to show Name, the list of Tags I’ve assigned, and the Excerpt. The latter two Notion hides...
Unlike social media microblogging, there’s not a great story for continuing the conversation of a blog post that’s part of the IndieWeb. Replying to a blog post most often takes the form of a reply to a POSSE1 syndication like a Mastodon post or promotion link on Hacker News.
If I read an article by Chris Coyier on answers to design questions, itself a response to Dan Mall’s answers to those same questions and want to reply, there’s little chance that either Chris or Dan would see my response and even less chance that I’ll know they saw it. I could definitely shoot them emails or mention them on Mastodon, but it would be really great if there were some better automated way to do this.
I want to share an approach to highlighting and tabbing an adventure that I’ve used recently to prep for RPG night with some success, and have missed when I didn’t have time to do it.
Prepping for running an adventure or module means reading and understanding a good amount of text. The standard “house style” that most adventure authors use at least in D&D and the OSR includes boxed text for what’s meant to be read to players and often includes italics and bold to call out spells and names, respectively. I find that while these are helpful during the first read, it’s useful for me to have highlighted text and marginalia that I use as study aids when reading the module in advance of running it. For longer texts, I also like to have tabs to navigate.
Something about my brain makes it hard for me to do things like this without a system for what colors I should use for what things, so here is the one I’ve devised. I hope it’s useful to you too!
Information that will only be useful...
Git can “trace the evolution” of a specific method when passed -L
using the :<funcname>
variant. Let’s take a look at the history of this blog’s posts’ published
scope, which is used in most places that articles are listed out. You can see that git is able to identify the boundaries of the method even as the length changes and it prints out the full method with diff from each commit in the log, which is filtered to changes to that method.
$ git log -L :self.published:app/models/post.rb -n3 commit d1fbdf3b9a5bd37dd49d61c61ee0f51c75fdb806 Author: Caleb Hearth <caleb@calebhearth.com> Date: Thu Feb 2 16:36:34 2023 -0700 Decree, LFW, new homepage, RSS-only posts diff --git a/app/models/post.rb b/app/models/post.rb --- a/app/models/post.rb +++ b/app/models/post.rb @@ -15,6 +15,6 @@ def...
As a best practice, when you enhance your Rails app’s assets:precompile
task to build static assets that can be served faster than if they needed to be compiled at runtime, you should also enhance assets:clobber
to remove the artifacts you create.
Rails built in precompile task will build assets by running CSS and JavaScript through preprocessors, combine them into a single file (or more, depending on setup), and give them file names with SHA sums.
The assets:clobber
Rake task is the less well-known sibling of assets:precompile
. It’s really useful when you want to be able to verify that your build process works correctly that you can also tear it down completely. This avoids running with precompiled assets in your development environment, for example. In the default case it deletes the files generated by assets:precompile
.
Both of these tasks (and indeed any other Rake task) have additional tasks run either before or after their current behavior. To run before, you’d add
task ...
There’s no better way to prepare a brisket than to smoke it low and slow, like they do in the South. But a true Austin-style smoked brisket doesn’t scratch the itch when Hanukkah, Passover or Rosh Hashanah come around. This recipe combines the seasonings and accompaniments of a braised Jewish brisket and the cooking style of a smoked brisket for a great “Jewish-ish” dish that tastes amazing and melts in your mouth.
This recipe is based heavily for the smoking instructions and ’s Franklin BarbecueZahav by for the spice mix. and
I retain full claim to the snark.
While I understand the visual appeal of a cocktail garnish, from a simple slice of citrus to a more ornamental combination of fruits, leaves, and spices, it’s worth asking: Is the resulting waste reallyworth it?
While I can't claim that I've spent a huge amount of time thinking about the waste (in transportation, water, biomass going to landfill or compost), I have cut back on garnishes for cocktails I make at home, especially when they're just for me. A spritz of absinthe, bitters, or citrus oil over a drink gives a similar effect on scent and flavor. Sure, you lose the visual impact but it's probably worthwhile.
Are you in camp "keep the garnish", "leave it out", or "pick an alternative like dehydrated lemon peel in salt rim"?
An excellent overview of steps we can take to prevent scraping of content by unscrupulous bots, including options for robots.txt and blocking specific User-Agents at the firewall or CDN level.
As Neil writes, it's a real problem that this is an opt-out situation, meaning that we need to explicity deny access to our copywritten works, rather than opt-in where authors, artists, and creators provide their work for training purposes.
Like many web users, I've played with using tools like ChatGPT for writing blog posts, Dall-E and Midjourney for hallucinating artwork, Copilot for helping write code, and probably some other things I can't recall right now. I also harbor significant concerns about the ethics of how these tools were trained and the consequences of using them.
I suppose that we can at least give credit to these companies for being "well-behaved" if they follow these directives or identify themselves by User-Agent.
One of the best articulated arguments against using Tailwind and other CSS-avoidances (for using CSS?).
Bemoaning "fixes" by programmers who refuse to take the time to learn CSS and instead, Elaina writes:
Those “fixes” manifested as CSS-in-JS, Material, Bootstrap, and Tailwind, to name a few. If you peruse web dev Twitter for any length of time, you’ll find the communities that evangelize these frameworks are mainly self-described programmers or developers. Oftentimes, they are used as a panacea to all their CSS woes; simply bolting it onto a project is their one-way ticket to not having to see CSS, let alone writing it.
Elaina has the intriguing take that this is partially caused by the male-dominated community of developers considering CSS to be feminine and thereby devaluing it as a tool and proficiency with it as secondary.
Hannah argues that pregancy apps can better support several categories of user:
People who have spent years trying to get and stay pregnant. People who have spent almost as much time recovering from a miscarriage as they have actually being pregnant. People who have ended a very desired pregnancy because of medical conditions for the parent, the fetus, or the baby. People who have given birth to a gorgeous child who didn’t make it.
I've had several friends who have been outside of the "normal" user category and I fully endorse that apps should support folks who fall outside of this. I can only imagine that it's extremely hard to be in any number of situations where the constant assumption of a healthy child on the part of app developers is just a reminder of loss, unhappiness, or despair.
It’d be really neat if someone made “smart” AAs/AAAs that could be used for battery powered devices to turn them on/off. It would be a lot of fun to turn on my Rey lightsaber via Homekit. #SmartHome #StarWars
📝 Why is Spam on Mastodon Such a Heated Topic? in which I write about why mastodon.social’s recent waves of spam are a problem, different from email spam, and encourage folks to migrate to other servers.