Sunday, April 05, 2026

Some Monospace Fonts Available in Blogger

While editing my most recent post, I've been disappointed with the lone monospace font that's available in Blogger by default.  I'm referring to Courier.  The biggest problem with it is that it's very difficult (for me) to discern between l and 1.*  Here's what they look like in Courier: l and 1.

Fortunately, Google has made it easy for a user to add alternate fonts.  I listed below some of the monospace fonts you can choose.  

Based on the discernment between l/1, I like these the best (ranking in alphabetical order):

Font Name lower L vs. One
Fragment Mono l and 1
Google Sans Code l and 1
JetBrains Mono l and 1
Oxygen Mono l and 1
Reddit Mono l and 1
Source Code Pro l and 1
Ubuntu Mono l and 1
Ubuntu Sans Mono l and 1

The discernment is greatest with Reddit Mono; there's no way I'd mistake the lowercase L for the number 1.  However, I like Ubuntu Mono the best.  Not only is the discernment good, the character height is comparable to the height of the default font for this Blogger theme.  So I'll use this font for code listings from now on.


*That's lowercase L and the digit one in case you thought I pressed the same key twice. In fact I thought I pressed the same key twice, so I re-entered the characters very deliberately.

Courier the quick, red fox jumped over the brown, lazy dog. THE QUICK, RED FOX JUMPED OVER THE BROWN, LAZY DOG. 0123456789

Cousine the quick, red fox jumped over the brown, lazy dog. THE QUICK, RED FOX JUMPED OVER THE BROWN, LAZY DOG. 0123456789

Datatype the quick, red fox jumped over the brown, lazy dog. THE QUICK, RED FOX JUMPED OVER THE BROWN, LAZY DOG. 0123456789

Fragment Mono the quick, red fox jumped over the brown, lazy dog. THE QUICK, RED FOX JUMPED OVER THE BROWN, LAZY DOG. 0123456789

Google Sans Code the quick, red fox jumped over the brown, lazy dog. THE QUICK, RED FOX JUMPED OVER THE BROWN, LAZY DOG. 0123456789

IBM Plex Mono the quick, red fox jumped over the brown, lazy dog. THE QUICK, RED FOX JUMPED OVER THE BROWN, LAZY DOG. 0123456789

Inconsolata the quick, red fox jumped over the brown, lazy dog. THE QUICK, RED FOX JUMPED OVER THE BROWN, LAZY DOG. 0123456789

JetBrains Mono the quick, red fox jumped over the brown, lazy dog. THE QUICK, RED FOX JUMPED OVER THE BROWN, LAZY DOG. 0123456789

Overpass Mono the quick, red fox jumped over the brown, lazy dog. THE QUICK, RED FOX JUMPED OVER THE BROWN, LAZY DOG. 0123456789

Oxygen Mono the quick, red fox jumped over the brown, lazy dog. THE QUICK, RED FOX JUMPED OVER THE BROWN, LAZY DOG. 0123456789

Reddit Mono the quick, red fox jumped over the brown, lazy dog. THE QUICK, RED FOX JUMPED OVER THE BROWN, LAZY DOG. 0123456789

Roboto Mono the quick, red fox jumped over the brown, lazy dog. THE QUICK, RED FOX JUMPED OVER THE BROWN, LAZY DOG. 0123456789

Share Tech Mono the quick, red fox jumped over the brown, lazy dog. THE QUICK, RED FOX JUMPED OVER THE BROWN, LAZY DOG. 0123456789

Source Code Pro the quick, red fox jumped over the brown, lazy dog. THE QUICK, RED FOX JUMPED OVER THE BROWN, LAZY DOG. 0123456789

Ubuntu Mono the quick, red fox jumped over the brown, lazy dog. THE QUICK, RED FOX JUMPED OVER THE BROWN, LAZY DOG. 0123456789

Ubuntu Sans Mono the quick, red fox jumped over the brown, lazy dog. THE QUICK, RED FOX JUMPED OVER THE BROWN, LAZY DOG. 0123456789

No File Name Completion With org-insert-link? Try This

If you invoke org-insert-link (typically C-c C-l) in order to link to a local file, you might expect that pressing TAB will complete a partial path or file name.  Instead you’ll get the frustrating message “[No match].”

What you need to do instead is to invoke the command with a prefix argument like this: C-u C-c C-l. Then you’ll get the expected completion behavior with TAB.

But why is a prefix argument necessary?  It turns out that org-insert-link expects a link type at the "Insert link" prompt.  Some link types are file, bbdb, info, etc.  (To see a full list of link types, press TAB right after invoking the command, without entering anything.)

This is a powerful command.  You can, for example, enter bbd and press TAB to complete the bbdb: link type.  Then enter the first few characters of someone’s name or a business in your bbdb list of contacts, such as arth.  Upon pressing TAB, you should see completion fill in arthur.  Press again, you’ll get Arthur Dent and perhaps his email address.  Clicking on either will complete the entry.  Press ENTER to put the link into your buffer.1

Completion isn’t available for all link types.  A link to an info node, for example, has to be entered manually, although usually it’s created with org-store-link (C-c l) while point is in the info node of interest.

I encourage you to read the help for org-insert-link and org-store-link.  The two hyperlinks immediately below will take you to the online manual on gnus.org.  But if you copy the link text and yank into an org file, Emacs will open the Org manual at the page for handling links.

[[help:org-insert-link][Emacs help for org-insert-link]]

[[help:org-store-link][Emacs help for org-store-link]]

I dislike getting frustrated.  But when I’m frustrated with Emacs, I expect to learn something if I dig deep enough.  It hasn’t let me down yet.


1 This depends on whether bbdb has been loaded.  If you use bbdb and you’re not getting completion, invoke M-x bbdb and try again.

Friday, March 06, 2026

The Perpetual Calendar -- All You Really Need, Perhaps

The first day of the year can fall on only one of the seven days of the week. This year, 2026, started on a Thursday. Last year, 2025, started on a Wednesday; 2027 will start on a Friday. 2025, Wednesday; 2026, Thursday; 2027 Friday. So why bother buying a new calendar every year? Some people don’t; they use a Perpetual Calendar 1 instead.

If there were only 364 days in a year, we could keep using the same calendar each year. The number 364 is evenly divisible by 7; there are exactly 52 weeks in that hypothetical year. But that one extra day in our year forces us to have a calendar for each day of the week.

What about leap years? They occur once every four years and have 366 days. We have to “skip over” a calendar every four years. For example, the calendar for 2028 (a leap year) will start on a Saturday. The following year will start not on Sunday but on a Monday.

Thus we need fourteen unique calendars; seven have 365 days; seven have 366, owing to the addition of February 29. This is what some refer to as “The Perpetual Calendar.”

Unfortunately, if you want to keep track of religious holidays, you’ll have to pencil in all those holidays whose schedules follow the lunar calendar 2. And this involves more than figuring out the date of the Lunar New Year (aka Chinese New Year). Dates of holidays in the Abrahamic religions 3 (sometimes referred to as Judeo-Christian religions 4) also are based on the lunar calendar. This includes Christianity 5.

So is the Perpetual Calendar the only calendar you’ll ever need? That’s for you to decide.


1 https://en.wikipedia.org/wiki/Perpetual_calendar
2 https://en.wikipedia.org/wiki/Lunar_calendar
3 https://en.wikipedia.org/wiki/Abrahamic_religions
4 The term “Judeo-Christian” ignores Islam, so I looked for a more appropriate term. See https://www.draslamabdullah.com/post/the-judeo-christian-tradition-history-paradox-and-political-construction
5 Yes even Easter requires reference to the lunar calendar. It falls on the date of the first full moon after the Vernal Equinox, roughly speaking. See: https://en.wikipedia.org/wiki/Date_of_Easter

Friday, February 27, 2026

Emacs Lisp Function to Determine the Start of Engineers Week

This year, Engineers Week started on Sunday (February 22, 2026).  It always begins on Sunday of the week of George Washington's birthday. 1

Here's an Emacs Lisp function to calculate the date that Engineers Week will begin for a given year:

(defun eweek (year)
  "Returns the date on which Engineers Week begins for the year given in
YEAR.  Returns the date in the standard format for a (Gregorian)
calendar date in calendar.el, a list of integers (MONTH DAY YEAR)"
  (calendar-gregorian-from-absolute
   (calendar-dayname-on-or-before
    0 (calendar-absolute-from-gregorian (list 2 22 year))))) 
Invoking (eweek 2025) should return (2 16 2025), which was the start of Engineers Week last year.

Thursday, February 12, 2026

Amaze Your Friends – Send a Letter Without a Written Address!

You can have an unaddressed envelope arrive at someone’s address or Post Office Box.

I discovered this from my annual, end-of-year deluge of cards to friends and family.  I had printed all the recipient’s addresses on plain paper, and then cut them into address labels.  (My printer doesn’t accept labels as printed media.)  Then I affixed them to the envelopes with a glue stick.

The glue stick was left over from previous years.  So the first time I used it, the end of the stick was a bit dried out; the adhesion probably was poor as a result.  Thus the first label I had attached eventually fell off, but it stayed on long enough for the local post office to see it and generate the address at the very bottom in barcode form.

Apparently, once the originating post office prints that barcode, the mail item goes where it was intended.

If one could determine just how much adhesion is necessary to make this work repeatedly, a whole new product – Gag Labels – could be launched!  If I were to guess, the stickiness might’ve have compared well to a Post-It note that had been reused a few times.  Another approach would be to develop a temperature-sensitive glue that would irreversibly release after, say, 8 hours exposure at a temperature at or below, say, 10°C (50°F).  Perhaps this is the environment in which most mail finds itself during storage and transit.

This wouldn’t work for all geographic locations at all times of year.  But for a Luddite Geek located in the Northeastern part of USA, it would work from November to April, allowing him to send Season’s Greetings, Valentine’s wishes, and tax returns, not to mention write about himself in the third person.

Saturday, February 07, 2026

Solid, Liquid, Gas

Liquid meals serve a pseudo-medical purpose: to provide nourishment to people who cannot tolerate solid food.  Energy drinks and gels (aka Nutrient Goo) fill a need for endurance athletes.  But in 2013, Soylent was introduced and marketed to people who are simply too busy to prepare and chew food.

As we transition from consumption of solids to liquids, I wonder how long it will be before a "Nutrient Gas " will allow people to breath in their meals. Being already in a gaseous state, will these "meals" facilitate our body's need to fart?


Soylent on Wikipedia
Review of Soylent

Thursday, January 08, 2026

A Long View of Venezuela Action

Looked at in isolation, USA's actions in Venezuela may seem arbitrary, or a bully's response to being bullied, or a blatant grab for oil.  However, when considered as a piece in the puzzle of recent world events, it makes sense.

Consider also the bombing of three nuclear sites in Iran, which took place in June, 1 and then the military strikes in Syria that took place in December 2.

This activity in Iran, Syria and Venezuela, in the context of Russia's attempted occupation of Ukraine, reveals effective US international policy against Russia.  The three countries are (or were) allies of Russia.

While Russia remains embroiled in Ukraine, the US can engage Russian interests, reducing Russia's footprint on the world stage.  In effect, we can wage war on Russia, albeit indirectly.

And recall that Russia invaded Ukraine soon after Pres. Biden won the 2020 election and took office in 2021.  Pres. Trump claimed the invasion wouldn't have happened if he had been elected.  At first I assumed that he was talking nonsense, something a sore loser or braggart would say.  But now I think Russia was convinced that a massive operation in Ukraine might encourage Trump to take action.  With Biden in charge, Putin seized the opportunity to take over Ukraine.

In light of this, it seems likely that US support of Ukraine would be just enough to maintain the war, to keep Ukraine from being taken over, but not enable them to completely repel Russia.

What's behind US's desire to annex Greenland?  Partly it's to gain more resources.  But considering that Greenland is well-positioned between USA and Russia, it may be the ideal location to establish defense against hypersonic missiles, which need to be situated as close to the enemy's launch sites as possible.  But why do we need to annex Greenland to do that?  While it's true that the US already has a base in Greenland, my guess is that the technology is Top Secret and needs to be kept careful guarded.

All of this is conjecture based on a thought exercise; don't think I have access to special information.


1 https://apnews.com/article/israel-iran-war-nuclear-talks-geneva-news-06-21-2025-a7b0cdaba28b5817467ccf712d214579
2 https://www.npr.org/2025/12/19/g-s1-103194/u-s-launches-strikes-syria

Friday, November 28, 2025

Edit Online Forms With Emacs

If you'd rather use your own text editor to enter content into a web form, you could use and configure a browser extension to establish a link between the form field and the editor. One such extension that Google search suggests is Browser's External Editor.1

But if you use Emacs, you're probably better off with Chrome Emacs.2

Chrome Emacs is added to a Chromium browser, but you still need to add something to Emacs. That something is the mode called atomic-chrome.

atomic-chrome can be found on Melpa; you can use the Emacs package manager to add it. My personal experience is that it's necessary to start its server manually with atomic-chrome-start-server, or add (atomic-chrome-start-server) to your init file.

I find it invaluable when commenting on a LinkedIn post, which can disappear whenever your feed is updated.

I also like it as a replacement for the Blogspot post entry field, which is easily cleared with an accidental press of Ctrl-a followed by any key press. Blogspot performs an automatic backup whenever you pause typing during new post mode. But that's a worthless feature because it will backup every mistake, including one in which you replaced all content with a key press. And it offers no way to access previous backups. I'm less likely to select all text in Emacs3, but it's not impossible. As well, I could still somehow still manage to do the Ctrl-a thing in Blogspot. Nevertheless this is a nice workaround.

But in fact I've been composing new posts outside of Blogspot for years; usually I use LibreOffice Writer because... Well, come to think of it, I don't know why I use Writer when I can use Emacs. Maybe it's because with Writer, I can insert pictures and such. (And I haven't figured out how to do that in Emacs.


1 https://chromewebstore.google.com/search/Browser's%20External%20Editor
2 https://chromewebstore.google.com/detail/chrome-emacs
3 Pressing C-x h will select all characters in an Emacs buffer.