🎵 Today’s listen: Emotional Creature by Beach Bunny. I loved this emo-pop band’s debut LP, Honeymoon, a couple years ago. I didn’t know this album was out, so I’m excited to listen to it. The lead single, Oxygen, is good.

Standard Ebooks

In my quest to fill my new Kobo with some good things to read, I quickly found Project Gutenberg, which has tons of public domain books to download in various ebook formats. Unfortunately, most of its books are basically plaintext files. That is great for longevity and flexibility, but is not great for readability on an e-reader. Many (most?) of its books don’t look great on your Kindle or Kobo (or what have you).

Luckily, I found a website that fixes those formatting problems—at least for a subset of Project Gutenberg books: Standard Ebooks. From its About page:

Standard Ebooks is a volunteer-driven effort to produce a collection of high quality, carefully formatted, accessible, open source, and free public domain ebooks that meet or exceed the quality of commercially produced ebooks. The text and cover art in our ebooks is already believed to be in the U.S. public domain, and Standard Ebooks dedicates its own work to the public domain, thus releasing the entirety of each ebook file into the public domain. All the ebooks we produce are distributed free of cost and free of U.S. copyright restrictions.

So far, I like Standard Ebooks. Impressively, each of its books are available in four formats: ePub (in both “compatible” and “advanced” flavors for most e-readers), azw3 (for Kindle), and kepub (for Kobo). I wish there were more selection, but I guess that’s partly on me. I could clean up a public domain ebook and contribute it to the site.

Back to converting e-Books with Calibre

I bought the Kobo Clara HD thinking that I could side-load ePubs on it without converting them. While that is true, when you read a normal ePub—with at least some of them I have tried—you cannot change the font, margins, or line spacing. That is very frustrating.

I learned that Kobo has its own format, kepub, which is basically ePub with some extra stuff added to it. Kepub files work exactly how you would expect e-books to work. This means that I am back to using Calibre to converting my ePubs to a different format to read them on my e-reader.

This isn’t the end of the world. Calibre is an amazing piece of software, and it does just about everything you would ever need an e-book library manager and converter to do. Unfortunately, it is also the jankiest piece of software on my Mac. It is ugly (which doesn’t really bother me), it crashes regularly, and one time this week it froze so badly I had to do a hard-reboot to get rid of it.

Luckily, I don’t plan to use Calibre very often. That’s because I can also convert ePubs to kepubs with a command-line tool called Kepubify. It works great! (There is a web-based version of Kepubify, too, but I couldn’t get it to work.)

Google Fonts

I don’t always like Google’s products or business practices, but some of its offerings are great. Google Fonts is a case in point. From its (hard-to-reach) footer:

Google Fonts is a library of 1,429 open source font families and APIs for convenient use via CSS and Android. The library also has delightful and beautifully crafted icons for common actions and items. Download them for use in your digital products for Android, iOS, and web.

The site offers a wide range of free fonts, which you can test out in the browser and download for free, without jumping through any hoops. Other free font sites I have used in the past bordered on scammy, with all sorts of ads, trackers, and dark patterns that steer you toward non-free fonts. I almost always end up going to Google Fonts first when I am looking for a new font for coding or reading.

It also offers a pretty extensive knowledge base that covers why typefaces are important and how to choose them effectively.

Lexend: Change the way the world reads

When installing fonts on my new Kobo e-reader, I came across a font that I had never heard of before: Lexend. It is a free, sans-serif font with a bold mission and a rather audacious website. Here is some of its most informative copy:

In 1999, as an educational therapist, Dr. Bonnie Shaver-Troup, working with clients, began observing that reading issues masked the individual’s true capability and intelligence.

In 2000, Bonnie theorized that reading performance would improve through use of:

  • A sans-serif font to reduce cognitive noise
  • Expanded scaling to improve potential for character recognition
  • Hyper-expansion of character spacing, which creates a greater lag time and reduces potential crowding and masking effects
  • These changes led to the development of seven specially-designed fonts, which create an immediate improvement in reading performance.

This is where Lexend was formed.

There is also a Google case study that goes into some detail about the font’s unique features.

So far I installed its vanilla variant, simply called Lexend, on my Kobo and read a few pages with it. It looks nice! I can install it on my iPad with FontCase, but I can’t use it in the app I read in most, which is Apple Books. That severely limits how useful it will be for me. At some point, I would like to test it out on difficult reading material and see if it helps me stay focused and improves my recall.

First impressions of the Kobo Clara HD e-reader

I got my Kobo this afternoon, set it up, and started noodling with it.

My library card needs to be renewed, so I was locked out of logging into Overdrive to worry library books. Side-loading books was very easy, and I don’t need to convert my ePubs beforehand either, which I had to on my Kindle1. I wish the Kobo had a USB-C port instead of micro-USB, but I won’t be plugging it in too often, so that’s not a big deal.

So far, I find the reading experience to be OK. The screen is sharp, but it is really small! I had read that it was the same size as the Kindle Paperwhite’s screen, but it is, in fact, noticeably smaller. I am not sure how much I like it. I feel like I can only fit a paragraph or two onto the screen at one time. I probably just have to get used to it, and think of it as a “paperback” compared to the “hardcover” size of my iPad.


  1. MOBI is a technically inferior file format to ePub. It bugs me even though I don’t see the guts of it when I’m reading. ↩︎

ChromeOS Flex

Today I learned about ChromeOS Flex, which is an easy way to install Chrome OS on any computer:

Try the cloud-first, fast, easy-to-manage, and secure operating system for PCs and Macs. ChromeOS Flex is a sustainable way to modernize devices you already own. It’s easy to deploy across your fleet or simply try it to see what a cloud-first OS has to offer.

I don’t really have a use for it, but I wish I did. I think ChromeOS, with its Linux support for things I care about, like Visual Studio Code and the terminal, would be a fantastic OS for web browsing and some types of software development. I have been thinking about taking an old or underpowered Windows computer and putting Linux on it, but Chrome OS may be more polished and better suited to my family’s needs.

Back when I was an IT auditor, I would recommend that IT organizations at big companies shift their lower-skilled workforce from Windows to ChromeOS. Doing so would reduce support costs for their computers considerably, and would not impact their ability to do their jobs. (All their systems had a web front-end.) That was a long time ago, and there were no takers, but I still think it is a good idea. I’m glad Google is pushing forward with it, and expanding the vision beyond ready-made ChromeBooks to an installable OS.

Rubik’s Cube

I taught my daughter how to visualize and calculate volume using one of my Rubrik’s Cubes tonight.

Since school ended I June, she and I have covered most of the fifth grade math curriculum and some of the sixth grade math curriculum, too. We are just starting volume calculations, and still need to cover measurement unit conversions and graphing on a coordinate plane. Geometry is where things get tricky.

She told me tonight she wants to get 100 on all her test so she could move up to the highest math level at the end of the year. I think she can do it, as long as the school will let her.

JSON with my son

To my surprise, my son1 asked me to teach him how to use JSON in Python today. His grandfather showed him JSON files from his website earlier today, and now my son is mad for reading and writing JSON himself.

We graduated from Turtle graphics to data structures and file I/O. I introduced to him Python dictionary and the list, showed him how to converted both to JSON, and then showed him how to write the JSON to a file. In Python, it is very easy.

My wife is looking for computer science courses for him now.


  1. Who is 5. ↩︎

Impulse purchase: Kobo Clara HD e-reader

I just impulse-purchased a Kobo Clara HD. I hope it wasn’t a bad decision.

I need an e-book reader only for a few weeks each year, during my summer vacation, which is coming up soon. I have an old Kindle, which I trot out annually to read outside with during my vacation, but its lack of a backlight and its low resolution make it hard to read in way too many places—not just indoors, but outside in the shade as well. It is disappointing in every way.

I probably should have purchased a Kindle Paperwhite during Prime Day instead, but I don’t want another Kindle. I want something that handles ePubs natively, can side-load fonts, and can interface with my local library. The Kobo fits all these criteria.

It will be delivered as soon as tomorrow. I’m excited to take it for a spin.

🎧 An update on the Sony WH-1000M4

A little while ago, I bemoaned that the Sony WH-1000M4 headphones were disappointing to me. I’m happy to report they have been working pretty well as my gym headphones. The fit is pretty good (they don’t fall off unless I’m practically upside down) and the sound plus noise cancellation are more than adequate. The creakiness I observed when they were brand new seems to have gone away. My only complaint is that, when I bring my iPad with me to watch TV shows while doing cardio, it can be a pain to get the headphones to connect to it. They seem to want to connect only to my phone.

My gym almost never plays music, which is great because everybody wears some kind of wireless headphones there. I mostly see AirPods Pro around the gym, but a few people have the AirPods Max, and I wish I did, too. Their tighter fit and punchier sound, compared to the Sony WH-1000M4, would be welcome. A handful of other people at my gym use the same headphones I do, so I don’t feel crazy for not using purpose-built workout headphones there.

🎵 Today’s listen, Stop the Clocks by Oasis. It is a greatest hits album that is supposedly curated by the band to resemble on of their live show setlists. It is all the Oasis I need, and maybe a bit more.

I am excited to teach my daughter division by unit fractions this evening. I have been telling her that multiplication and division, much like addition and subtraction, are inverse functions. Now I get to show it in action, and it may blow her mind.

📺 I very much enjoyed Stranger Things season 4. After I finished it, I re-watched seasons 1 and 2 (so far), which I have not seen since they debuted. I think they hold up well and I liked them even better than the first time I watched them.

I don’t use Drafts anymore even though it used to be my all-time favorite iOS app. It became way more than I need it to be. Ulysses and Apple Notes have completely overtaken it for writing, and I don’t bother using it any more to create calendar events or execute searches.

Learning with VS Code on Chromebooks

My son needs a Chromebook for school and a computer to run Visual Studio Code in. I kind of want to get him a MacBook Air (which can run Chrome), but one is too expensive. I kind of want to get him a Linux laptop (which can also run Chrome), but that is likely not going to work 100% right. Why not get him a Chromebook and install Visual Studio Code on it? That might be the best and cheapest solution.

🎮 Today’s listen: The London Suede and Similar Artists Station on Apple Music. This is probably a personalized BritPop playlist. I’m discovering a lot of album cuts I didn’t know about or bother listening to in the 1990s. Also, I now think Blur holds up far better than Oasis.

Pilcrows and silcrows

I have been writing and editing documentation all week—so much so that I have been dreaming about applying styles to text in Microsoft Word.

Today I really got deep into the minutiae of Microsoft Word and legal citations. I was delighted to find an online guide called Typography for Lawyers, which not only has lots of useful tips about typography, but also tells you how to do it in Word, Mac OS Word, and WordPerfect. Its pages helped me get a handle on things like inserting pilcrows (¶) and silcrows (§) correctly, which (as I suspected) includes entering nonbreaking spaces after them.

I now know the Word keyboard shortcut to insert nonbreaking spaces (Control+Shift+Space in Word). I doubt any of my coworkers even know what nonbreaking spaces are.

PeaZip

At work, I rely on compression to keep my hard drive from filling up with huge data files that I need to work with and keep for the duration of a project. Because I mainly care about saving storage space, when it comes to file compression, I care mostly about compression ratio and only secondarily about compression and decompression speed.

Over the years I have become somewhat of a file compression nerd. To that end, on a whim today, I uninstalled my longtime favorite archive manager, 7-zip, from the Windows machine I use for work and installed PeaZip in its place.

PeaZip is a front-end to a host of open-source file compression methods, including old stalwarts like Zip and 7Z, and also newer entrants such as ZPAQ, Zstandard, and Brotli. These newer methods offer higher compression ratios, greater speeds, and differing trade-offs between the two.

PeaZip’s main benefit over 7-zip is its far-nicer file manager interface than 7-zip. Its nicer UI has never been enough to entice me to switch from 7-zip, but I made the switch to try out Zstandard (primarily) and ZPAQ. With the data I have on hand, which is mainly data files in text format, I found that ZPAQ offered the best compression ratio (which is the most important thing to me), but that 7Z offered almost the same compression ratio while being the non-Zip format I am already used to using1.

This surprised me, but it is good to know because my usage of PeaZip may be limited. While PeaZip has a nicer interface and more features, it is slower to launch (even to create an archive), and it lacks 7-zip’s integration with the Windows File Explorer right-click-and-drag handler. If I am going to use it primarily to make 7Z archives, and rarely use its file manager interface because I use its the Windows File Explorer right-click-and-drag handler, PeaZip does not offer me any features I really care about.

I am still curious about Zstandard, and will continue to explore how I can use it to compress my data files more quickly, but with better compression ratios, than 7-zip and Zip do.


  1. This observation is likely not true with other types of data. I would not extrapolate it to other situations. ↩︎

🎵 Today’s listen: I Miss Britpop. Because I do.

Everything takes longer to do than I expect

A miser knows the price of everything and the value of nothing. I feel that way sometimes about the people tracking my time at work. The thing is, they don’t bother me about how long it takes me to do my work. I bother me about it.1

A constant source of frustration for me is that everything I do takes longer than I expect it to. This is true whether I am doing something for the first time or the hundredth. I try to build it into my time estimates, but it is often impossible to guess how much time may be wasted on overcoming a technical setback. Most of my coworkers don’t have technical setbacks, per se. They are working primarily in Excel and Word rather than creating databases queries and analytical scripts. Consequently, they don’t understand how difficult it is for me to make time estimates. I can’t possibly create an accurate estimate of how much time I could lose to a bug I created, some analytical framework not working as promised, or the speed of a database or a network share being far slower than expected.

It also bothers me that it takes me the same amount of time to do a lot of my work as it did ten years ago. It isn’t because I haven’t gotten better at my work; the quality of my work is better, but adding that level of quality takes more time than doing the work in a slapdash, non-repeatable, non-controlled way. This kind of thing is true in my hobbies, as well. I can’t solve Sudoku puzzles or crosswords must faster than I could years ago. While solving quickly isn’t necessarily the point of doing puzzles, it makes me feel that I have plateaued in my abilities and possible cannot get any better.

I suppose, as I have gotten older, I have learned to be considerate and to care about quality over speed. Unfortunately, the world, I am afraid, still values the glib and quick over the thoughtful and slow.


  1. The calls are coming from inside the house. ↩︎

The beautiful, overwhelming vastness of the universe

The first public image from the James Webb telescope was made public today, and it is amazing. From the article:

Thousands of galaxies – including the faintest objects ever observed in the infrared – have appeared in Webb’s view for the first time. This slice of the vast universe covers a patch of sky approximately the size of a grain of sand held at arm’s length by someone on the ground.

Wow.

Common Table Expressions

Early in my career, I ended up working on Microsoft SQL Server projects as a software developer and a business analyst. Over several years, I became an expert1 in data modeling, performance tuning, ETL, numerous database connection options, numerous database programming libraries. Even after I left my software development job behind, I wrote queries and developed metadata layers for analytical reporting. Over that time, I wrote a ton of SQL queries, and I had a very opinionated way of structuring them, which was essentially clean ANSI SQL.

When I moved to audit, I had no use for SQL for years. Consequently, I did not keep up with Microsoft SQL Server for years. When my job became more technically oriented again, I was surprised to learn that SQL—or at least Microsoft SQL Server’s support T-SQL language—had evolved. One of my favorite features, which premiered in SQL Server 2005, but I was late to learn about, is common table expressions, or CTEs. Learning CTEs changed the way I write queries entirely.

Conceptually, a CTE is a temporary table based on a SQL query. Practically, CTEs let you break up a complex query into several simpler ones. I like to consider each CTE to be a step in a multi-step process that builds the dataset I need.

CTEs are very useful when you want to create a calculation and then group on the calculated value. Without CTEs, you have to copy/paste the entire calculation into the GROUP BY clause, which is error-prone and confusing to read. With CTEs, you can filter the data in one step, then make your calculations in another step, then group by the calculated values in the next step, then sort and select the top 10 calculated values in the final step.

From a performance standpoint, SQL Server optimizes the query you type in. Behind the scenes, it doesn’t actually create a temporary table for every CTE you create. That means that there is usually no, or negligible, impact to using CTEs in your queries.

Now, all but the simplest queries I wrote are a collection of common table expressions. Once you understand what they are, they make complex SQL queries a lot easier to reason through when writing them, and a lot easier to understand when reading them. In my field, audit, understanding the query and being able to reason about its correctness is often the most important consideration.


  1. A local expert, at least. ↩︎

Azure Data Studio

One thing I learned today is that Microsoft essentially made a fork of Visual Studio Code and customized it for database work. The app is called Azure Data Studio. Out of the box it supports Microsoft SQL Server, including non-Azure-hosted versions, despite its name. With an extension, it supports Postgres, too.

Oh, Schiit

My Schiit Magni 3 amplifier is acting up again. Tonight it is ground loop hum. Before tonight, it has been annoyingly sensitive (that is, it pops loudly) to the tiny amount of static electricity generated by my feet scuffing the low-pile carpet when I rise from my chair. When I stand up while wearing my headphones, it pops very loudly, which is painful to my ears, and then it will hum angrily the rest of the day.

When the Magni 3 works it is sublime. Unfortunately, I can’t always use it due to electrical issues, and I wonder if the popping problem could blow out my headphones someday. Early in its life it got fried and I had to RMA it. I’m not sure it is worth spending $80 or more for a power conditioner to try to fix it. I think it may be more trouble than it is worth.