R.E.M. - New Adventures In Hi-Fi
I must apologize and admit that this review is a week late. However, unless and until I get paid for these reviews (and, honestly, I shouldn't be paid), I am not all that sorry. This (last) week's album is New Adventures in Hi-Fi by R.E.M. which sat at #3 on the charts thirty years ago (and one week). This is my second R.E.M. review. In my review of Monster I remembered my summer in Athens, Georgia, which is where R.E.M. got their start.
During my time there me and the other students in the REU program would go to downtown Athens and have a couple drinks and hang out in the evenings. I am not a late-night person, so I would typically excuse myself and walk back to the on-campus dorm before my friends were done hanging out. On more than one occasion they would tell me the next day that I just missed seeing Michael Stipe (the lead singer of R.E.M.) show up to the bar. I never did see him. Oh well.
Despite the accolades for the album, this has never been one of my favorite R.E.M. albums. But don't let me dissuade you from checking it out. Even the worst R.E.M. album is better that most of the stuff I review. Give it a spin!
New Edition - Home Again
The #1 album this week is a return to recording as a group for New Edition. Apparently (and I didn't know any of this until I did some research), they had broken up in 1990 to pursue individual projects. I knew basically nothing about New Edition prior to now. For example, I didn't know that Bobby Brown was in the band. I previously thought of him only as a solo musician and Whitney Houston's husband. That's probably because the band's peak popularity was in the 1980's, before I was deep into popular music.
Home Again itself seems like a quality, competent, and perfectly contemporary 90's R&B album, not dissimilar to the music of the biggest R&B group of the decade, Boys II Men. Although that might be backwards; Boys II Men named themselves after a New Edition song. I don't recall hearing any of the songs when the album came out, but my memory is imperfect.
Perhaps if I was a bit older and experienced New Edition during their peak this comeback album would be more meaningful for me. As it is, I don't hate it, but it doesn't do much for me. If you're wanting some 90's R&B, it is a good choice.
Why No RPi
For a few years I used a Raspberry Pi 4 (RPi) as a Pi-hole and Wireguard server on my home network. An RPi 4 is overpowered for that sort of thing, but I had it, so I figured I might as well use it.
Over the last few weeks I noticed increasing problems with it. The best I can tell is that the RPi Micro SD card reading/writing hardware was somehow broken. The Micro SD card I had in it originally proved bad when I tried imaging it with a fresh OS install. A different card could successfully be imaged, but when I booted the RPi from it, some programs wouldn't run because they were corrupt.
I thought about buying a replacement RPi, but because of the RAMpocalypse, prices have gone through the roof. An equivalent new RPi 4 would cost $55, when I'm sure I purchased the original one for much less than that. With shipping it was looking like a $70-80 purchase, which seemed ridiculous.
In the end, I decided to simply run the Pi-hole and Wireguard services as Docker containers on the Mac Mini M4 I use as a media center. I leave the Mac Mini running all the time anyway, it uses only 4 Watts at idle, and it's more than capable of running these services.
Looking at pricing of new RPis, including the newest RPi 5, it got me thinking about the value proposition of the RPi 5 at the moment. The RPi was developed to be a low-cost, versatile single-board computer with many applications. All RPis can be used for various general and specialty computing projects, see the wide variety of RPi HATs available. However, with the newest RPi 5, they are trying to make the argument that it's becoming a general purpose computer for everyday use. They even highlight that the RPi 5 can drive dual 4K monitors at 60 Hz, not something I would associate with cheap computing.
Let's look at this complete RPi 5 kit. It comes with all you need to get up and running, minus a monitor, keyboard, and mouse. A 256GB SSD kit with 8GB of RAM costs $320. The kit includes active cooling, which is required to achieve maximum performance. A base RPi 5 with 8Gb of RAM costs $175, which means the rest of the kit costs $145.
Let's compare this to a base Mac Mini M6. This comes with 256 GB of SSD storage and 16GB of RAM for $899. Like the RPi kit, it comes with everything you need save a monitor, keyboard, and mouse.
Using a $305 RPi 5 with 16GB of RAM to match the Mini (making the RPi kit $305 + $145 = $450), below I compare the speeds of these computers. I'm using this Mac Mini M6 benchmark and this RPi 5 benchmark.
| Product | Single Core | Multicore | Price |
|---|---|---|---|
| RPi 5 | 878 | 2,089 | $450 |
| Mini M6 | 4,661 | 20,525 | $899 |
| M6/RPi 5 | 5.3 | 9.8 | 2 |
We can see that the Mac Mini is over 5x faster in single core, and almost 10x faster in multicore, while the Mini costs only 2x more. That is a devastating price to performance ratio for the RPi. But wait!, you say, you can still buy two RPis for one Mini, which if you're on a limited budget (say, in a school), it really helps. But wait!, I respond, you still need to buy monitors, keyboards, and mice, which cost the same regardless if they're connected to a Mini or a RPi. The price savings with RPis isn't as big as you might think.
The true value proposition of an RPis are the GPIO pins which enables tons of fun and interesting computing projects. My solar water heater uses a RPi 3B+ and its GPIO pins to collect data and act as the thermostat. The tough spot that the RAMpocalypse has put RPi 5s is that this value proposition has been overtaken by component pricing, making the RPi 5 a poor choice for a general purpose computer. There might be situations where a faster RPi is needed when using the GPIO pins, but that's getting potentially niche. I would guess that most things you would need an RPi for could be done with one of the older and less expensive models.
Perhaps once the RAMpocalypse has passed the RPi 5 will again become an economical choice for hobby computing, but sadly, it isn't right now.
Outkast - ATLiens
Dropping from #2 last week to #3 this week, ATLiens by Outkast is their second studio album and first to reach the top ten in sales. Additionally, this album is the first of three consecutive Outkast albums that are on the Rolling Stone's 500 Greatest Albums of All Time list.
I like Outkast and I'll admit that I came to them fairly late. I certainly wasn't listening to them when this album came out. Most of my listens have been from Stankonia and Speakerboxxx/The_Love_Below. I think that I need to include ATLiens and their next album, Aquemini, in my rotation more often. All of their stuff is quite excellent.
A Few More Command Line Utilities
I recently wrote about some useful command line utilities, and here are a few more I either forgot to add, or just discovered.
fd
I've never liked the find
command.
It's clunky to use, and worst of all often prints out hundreds of
permission error lines.
A good replacement is fd, which is faster
and much nicer to use.
For example, here's a search for this website's name starting from the
root "/" of this Linode using find and fd,
passed through wc
(which counts characters and lines):
You can see that find printed out 1,301 lines in 2.5 seconds,
while fd output only 19 in 1.5 seconds.
All of those 19 are useful lines, while most of those 1,301 lines are telling
me where I can't search.
By the way, notice the red lock π symbol in the terminal above? That's Starship (which I mentioned previously) telling me that the user does not have write permission inside the current directory.
delta
Both mercurial and git
feature the diff
command, which shows you the difference in content between
the current files on disk and the
most recent commit.
This is very useful as a way to see what's changed before you make a new commit.
delta is a tool that (amazingly) works with
both (mercurial is the often forgotten redheaded stepchild) and
supercharges the diff command.
It's language aware (like bat which I
mentioned before), and offers a side-by-side viewing option.
I haven't used it much, but I'm optimistic it will prove useful.
duf
For showing what disks are attached, and how much free space there is, duf is a pretty replacement for df.
Dust
The command "du" is used to sum up the disk spaced used in a directory. Dust does the same thing, but faster, and shows a hierarchical and sorted view of what files and subdirectories are taking the most space. Of all the tools I've featured here, this is the one I'm least sure about. I could see using it on a remote computer, but on my Mac I think prefer using something like OmniDiskSweeper that has a nice GUI and allows you to delete things interactively.
A Modest Proposal For Tracks With No Passing in Formula 1
I have been a fan of Formula 1 since around 2011. I'm not sure exactly when I got interested in F1, but I certainly remember watching Jenson Button's win in the 2011 Canadian Grand Prix, which is one the most epic (and epically long) F1 races. Being American and having become a fan long before Drive to Survive was released, that makes me an elderly statesman.
F1 races around the world on a variety of tracks, some new and some old. One of the most popular and historic is the Monaco Grand Prix, which takes place on the streets of the eponymous city-state. The first race was in 1929 when race cars were quite small. In the decades since, the cars have gotten much bigger, and due to the narrow streets, it is very difficult for cars to make contested passes during a race. After the first lap the Monaco GP is a procession of cars that can't change order even if a following car is much faster than the one ahead of it. This last weekend a F1 race was held in Spain at a new track that suffers from even less passing than Monaco. The "Madring" is a mixed street and purpose-built race course. Somehow, in 2026, with a century of knowledge, an even less-racey race track than Monaco was built and used. The race was tremendously boring.
I would like to propose a modification to how F1 races work at tracks like Monaco and Madring that might them more interesting than they are now.
In velodrome cycling there is a kind of race called the pursuit. As a reminder, velodrome cycling is done on banked ovals using fixed-gear bikes with no brakes. In the pursuit two riders, or teams, start on opposite sides of the velodrome and the winner is decided by who rides the full race distance the fastest. The race can end short of the full race distance if one rider/team catches the other.
I propose that for tracks like Monaco, F1 can adopt a modified version of this. At the start of the race cars would be evenly spaced around the track in an order that rewards qualifying performance. The first two in qualifying would be placed on opposite sides of the race course:
1, 2
Then the next two such that the slower of the two is behind first place:
1, 4, 2, 3
Then the next four, again rewarding first with the slowest behind them, second with the next slowest, and so on:
1, 8, 4, 5, 2, 7, 3, 6
Hereβs how it would look for 22 cars (the number of cars currently in F1):
1, 22, 16, 8, 9, 4, 19, 13, 5, 18, 12, 2, 21, 15, 7, 10, 3, 20, 14, 6, 17, 11
Using the Madring qualifying results the start order would be:
Norris, Stroll, Albon, Lawson, Colapinto, Hamilton, PΓ©rez, Ocon, Leclerc, Alonso, Bortoleto, Antonelli, Bearman, Tsunoda, Piastri, Lindblad, Verstappen, Bottas, Gasly, Russell, Sainz, HΓΌlkenberg
Again, the cars would be evenly spaced around the track at the start. Because this is circular, HΓΌlkenberg would be chased by Norris.
Here's a Python function to calculate the start order based on number of cars:
def starting_order(n: int) -> list[int]:
"""Starting grid order for n cars, by qualifying rank (1 = pole)."""
if n < 1:
raise ValueError("n must be >= 1")
order = [1]
k = 1
while k < n:
m = min(k, n - k) # full doubling, or whatever's left
# rank j (== rider j, for j in 1..m) gets rider (k+m+1-j) behind it
inserts = {j: k + m + 1 - j for j in range(1, m + 1)}
# It's not Joy Division, it's
new_order = []
for rider in order:
new_order.append(rider)
if rider in inserts:
new_order.append(inserts[rider])
order = new_order
k += m
return order
The winning driver finished the Madring race averaging just under 100s per lap, meaning that at the start cars would be spaced by about 5 seconds apart at race pace. This would give a fair number of laps before the real action would begin.
Because passing, or even getting alongside cars, is nearly impossible on these tracks, I propose that a trailing driver would eliminate a car in front by being behind the car under some time threshold for a number of consecutive detection zones, kind of like DRS detection zones. For example, if a trailing driver stays within 0.7s of a driver ahead of them for three consecutive detection zones, the ahead driver is eliminated from the race and must quit to the pits immediately.
Of course, any full pass would result in an immediate elimination of the passed driver.
Hereβs how I see a race progressing:
- At the start of the race all drivers would be on full gas, not wanting to be caught from behind. Over time, faster drivers/cars would gain on the slower ones ahead, and eliminations would happen.
- Eventually, enough slower cars would be eliminated so that the remaining cars are now spaced far enough apart so that they would essentially be doing maximum effort, qualifying laps, every lap. Who doesnβt want to see that in a narrow track?!
- It would get super exciting if any of the top drivers started a battle. Who doesn't want to see any of the top drivers and cars try to catch one another?
- There would still be a required pit stop to change tire compounds, but with a maximum pit stop time. Why a maximum? You could imagine using a slow pit stop to fall behind a fast-approaching car, and this would help prevent that (or at least ensure pit stops were properly strategically accounted for).
- The winner would be the last remaining driver, or the driver that covered the full race distance the fastest. Lower placings would be in reversed order of elimination, or ranked time to complete the full race distance.
Here are the benefits as I see them:
- Monaco and Madring are clearly genuine driving challenges, but they do not allow for actual racing. If we take away the need to pass to make it a race, we leave the drivers with a clear challenge: drive as fast as you can and you lessen your chance of being caught. Isnβt that what we want to see in a race?
- Especially earlier in the race, there could be a dozen mini-battles between cars happening simultaneously. This is the opposite of the current Monaco race, where battles almost never change anything.
- As the race progresses and weβre (hopefully) left with more evenly-matched front-running cars, every lap would count. The timing boards would show overall pace and gaps that would ebb and flow as drivers made mistakes and tires degraded. There could be tension for lap after lap!
- There would still be room or pit stop strategy. Even with a maximum pit stop time, teams could be smart and pick a time to pit that puts a driver behind, or way ahead of, a main rival.
There are demerits:
- A good number of cars would not get to race a full race distance. Teams want to have as much race-pace as possible to collect data, and rear-running teams would be especially against this plan.
- Races could still be predictable: the fastest drivers/cars would win, and slower drivers/cars would not factor into the race meaningfully. Passing lapped cars, even with blue flag assistance, is part of F1, and this would remove that aspect.
- Itβs more complicated and confusing for teams, drivers, and fans. Instead of asking βwhoβs first?,β it would be βwhoβs fastest?,β βwho is close to catching another car?,β or βif car A stops now, and pits for 17.3 seconds, can they make enough dirty air (but stay out of the 0.7s catch zone) to force car B to get caught?β
Iβm sure Iβve missed some benefits and demerits.
There will also have to be some special rules. For example, I can imagine a just-eliminated driver playing shenanigans, impeding the driver that just caught them. Perhaps a driver would be given one lap after performing a catch where they could not be caught and eliminated.
I have zero optimism that this would ever be adopted, but I think it's an interesting idea, all the same.
Pearl Jam - No Code
It's been a couple weeks since my last album review. Two weeks ago I did not review the lone un-reviewed album, the #8 album The Crow: City of Angels Soundtrack, because I could not find it on streaming services. This is not the first time I've struggled finding soundtrack or compilation albums. I suspect it's a licensing issue. One week ago was the same story.
This week there are two new albums that debuted at #1 and #2; I'll do the #2 album next week. Today it's No Code by Pearl Jam I'll be reviewing.
No Code is an album I've barely listened to. The majority of my historical plays were this week. It is one of the more poorly-reviewed Pearl Jam albums, and I have to agree. I don't think I've missed much by not listening to it. I can't recommend that you spend any time on it. I certainly won't purposely listen to it again.
More LLM Commentary
I've already posted twice about using AI/LLMs, and buckle up for another exciting installment. But! Before I get into the meat of the topic, I need to lay some groundwork.
The company I work for uses Amazon Web Services (AWS) for compute and storage. Within AWS you're very much encouraged to set up a Virtual Private Cloud (VPC) which is a way of isolating your cloud infrastructure away from the internet and other AWS users. Part of the VPC is a firewall that prevents outside access to the Virtual Private Network. Of course, as an employee, I need to be able to get inside the firewall, so we have a VPN Gateway that allows outside users on the public internet to access resources inside the VPC, but only if you can successfully authenticate with the gateway.
Below is a diagram showing this. My laptop connects to the VPN gateway, and from the gateway I can access a Linux machine. For example, if I want to ssh into a Linux box, that connection gets wrapped via the VPN connection to the gateway, which then unwraps it and passes the ssh connection to the Linux box.
βββββββββββββββββββββββββββββββββββββββββββ
β VPC β
β β
βββββββββββ β ββββββββββββββββ ββββββββββββββββ β
β Laptop ββββββββΌβΊβ VPN Gateway ββββββββΊβ Linux Box β β
βββββββββββ β ββββββββββββββββ ssh ββββββββββββββββ β
VPN(ssh)βββββββββββββββββββββββββββββββββββββββββββ
For reasons that are not important here, we are overhauling how we do various
things with respect to security. One part of this is we are turning off the
ability to ssh into Linux machines in favor of
AWS SSM.
SSM gives you an encrypted shell/terminal connection to a host, just like ssh, but
it doesn't use ssh at all.
One motivation is that AWS SSM allows convenient logging of who connected to
a particular machine, when they did, and what shell commands they ran.
Another is that access to resources can be defined at the
AWS permissions level, away from the individual
Linux machines.
With SSM we don't need a gateway to access things inside the VPN.
It works like this:
When the Linux box boots, an agent on the machine registers
itself with SSM, which lives outside
the VPN (it's run by AWS, not us).
Next, when I wish to connect to the box, my laptop authenticates
with SSM, which checks if I'm allowed to connect.
If I am, SSM connects me to the machine inside the VPN by forwarding data
between my laptop and the Linux box.
At the same time, logs are kept of the connection and commands I run.
See the diagram below.
βββββββββββββββ βββββββββββββββ
ββββββββββββββΊβ AWS SSM βββΊβ AWS Logs β
β βββββββββββ²ββββ βββββββββββββββ
β β
βββββββ΄ββββββ β
β Laptop β ββββββββββββββΌββββββββ
βββββββββββββ β VPC β β
β βββββββββββ΄βββββ β
β β Linux Box β β
β ββββββββββββββββ β
ββββββββββββββββββββββ
The official way to connect is via the
AWS CLI tool,
which is written in Python.
Somewhat oddly, the command to connect,
aws ssm start-session --target instance-id --profile somename --region us-east-1,
actually hands off to the Go binary
session-manager-plugin
after authentication is completed.
This all works, but it wasn't satisfactory.
I found it clunky and inconvenient β just compare the long aws ssm
command above to the much shorter command ssh user@host-ip!
Much of that clunky command can be scripted away,
but the official client has some broken functionality.
For example, I don't use the nano text
editor often, but it's useful for quick edits
(I also use vi, if you're wondering).
It uses "Ctrl-key" actions, such as searching ("Ctrl-w"), saving ("Ctrl-o"),
and quitting ("Ctrl-x").
There may be something wrong on my end I never diagnosed,
but I couldn't get any of those "Ctrl-key" commands to work.
Additionally, ssh has its companion program
scp
that transfers files between computers.
You can imagine that this is a useful feature, and it's something that
SSM doesn't include.
Because of this I decided to see what an LLM (Claude)
could do. I asked it to write
a program that worked with AWS SSM but acted more like ssh.
I named it sshaws.
I told it to write it in Rust because Rust is fast,
secure, and I figured that all the required crates would
already exist.
To give away the ending, the LLM did a fine job!
The program doesn't have any of the odd quirks (no "Ctrl-key" problems) that
aws ssm start-session does.
But more than that, I tailored it to work well with my workflow, and it's
now more convenient than ssh ever was, amazingly.
Here are a few examples of neat features it has:
- I had it add a Terminal User Interface (TUI) that auto discovers all the Linux boxes I have access to (see the screenshot below1). It shows if the instance is running, or if I can access the instance (perhaps the SSM agent isn't set up on the Linux machine). Other metadata can also shown, such as instance type, IP address, or environment. I can filter the instances list with a simple text search. The instance listing is especially useful for me because much of my workflow uses temporary Linux machines that exist for minutes to hours, so being able to quickly narrow down to one is great.
-
There is a "recent" hosts pane that is useful for reconnecting to a host I've worked with recently (bottom left). Instances I have connected to that have been deleted are shown with
strike through text, while those simply powered off use greyed out text. -
The application has a
configfile that allows me to define quick shortcuts for machines I access frequently. These shortcuts are available in a TUI pane (top left), and also from the command line, e.g.sshaws webhost. -
Unlike VPN/ssh connections, SSM connections can time out after as little as six hours due to AWS authentication rules. Having a session die while using it is very annoying, so I added a feature where
sshawswill auto-connect to a running tmux session, or start one if needed. This way, if you're cut off, what you were doing on the host is uninterrupted, and you can pick up where you left off by reconnecting. -
To replace
scpI had the LLM add flags to transfer files:sshaws put file.txt webhost:/home/user/orsshaws get webhost:/home/user/file.txt .. But even better, I had it add a second TUI (see below) that allows me to browse my local machine and remote, and mark files and directories for transfer either direction. It auto compresses and decompresses files and directories transparently to speed up transfers.
- I added a command
eachwhich will run a command on more than one host in parallel and return the result, for examplesshaws each 'boxname*' 'uptime'will print out the result of running the uptime command on all hosts that matchboxname*, e.g.boxname01,boxname02, andboxname-prodwould all match.
Why was the LLM so successful at this? The answer is simple: LLMs are advanced prediction engines, like Google autocomplete, but fancier. If you tell it where to start and where to go, you're giving it a path to follow, and that's when they work best. In this case I asked it to put to things together (SSM & ssh) that it knows about because it's all open source, and what functionality I wanted. It didn't have to invent anything new, it just had to mix two things together by following my instructions.
Am I okay with using LLM like this? Yes, yes I am. My job is not writing tooling for accessing AWS SSM. As I said above, nothing new is being created here; existing things were just smooshed together. My job as a human is to create new things with my biological creativity, and offloading this task to an LLM was a win.
Finally, I don't know if I will try to make sshaws open source.
There's nothing proprietary about it, so I could.
I'm not super worried about major issues.
I've passed it through
Claude Fable2,
which has been reported as being excellent at finding code bugs, and it
fixed a few minor ones.
While the tool might be useful for people outside my company,
I would feel more comfortable about releasing it if I and a few other humans
went through it and audited it for hallucinations and confusing comments,
Fable's findings notwithstanding.
Alice in Chains - Unplugged
Unplugged by Alice in Chains was recorded live as part of MTV's Unplugged Series. This is one of the more successful Unplugged albums, perhaps in large part due to the fact that the lead singer, Layne Staley, was on a steep decline toward dying from an addiction to drugs and hadn't performed with the band regularly for years.
When I reviewed the eponymous Alice in Chains last year, my summary was that it wasn't as good as their earlier albums. Happily, the songs chosen for the Unplugged set taken from the Alice in Chains album are the strongest ones off an otherwise weak album.
Unplugged is an excellent album and well worth your time. I don't review live albums frequently (it's not really up to me, of course), and one neat thing is that the performance of this album can be watched anytime thanks to the power of the internet:
Useful Command Line Utilities
Recently I've been doing a little tuning of my shell environment, swapping old tools for new ones and tweaking various settings. I thought I'd highlight a few of them.
Ghostty
For years I used iTerm2 as a replacement for the default Mac OS Terminal app. Recently I've switched to Ghostty. It's just as configurable in the ways I care about as iTerm2, but much, much faster. I sometimes have reason to paste a decent amount of text into the terminal and Ghostty handles it much faster than iTerm2. Overall it just feels more modern and slicker than iTerm2.
Starship
In the screenshot above you can see a few shell prompts showing what Starship can do. For example, when you're in a folder containing a programming project, it will show you the language in use. For example in the "sshaws_rust" folder you can see "π¦ v1.97.1", which shows my current version of Rust installed. Similarly you can see "βοΈ v17.0.8" for Java, "π v3.8.4" for Scala, and "π v3.12.12" for Python. It also shows you stats about your machine (e.g. free RAM), what directory you're currently in, or how long a command took to run.
In the screenshot below, you can see the "π marzipan" which shows that this is a remote machine named "marzipan," which helps prevent confusion about what machine you're on.
zoxide
I haven't been using this very long, and I'm still getting used to it, but
zoxide is a handy way to navigate
around your folder hierarchy.
In the first screenshot above you can see that z core took me straight to that
directory and zi opens an interactive search function.
fzf
Like most, I'm sure, I end up typing the same or very similar commands repeatedly. "Ctrl-r" is the standard way of searching for previous commands. fzf turbo-charges this and works very well.
bat
The Unix/Linux command cat is
over fifty years old, and I've been using it for almost thirty.
bat replaces it and includes syntax
highlighting and line numbers.
Because I've been using cat for so long, and have muscle memory for cat,
I've set an
alias
from cat to bat.
eza
Combined with a Nerd Font
(I use "Inconsolata Nerd Font Mono"),
eza replaces the built in
ls and ls -l with a much fancier directory listing.
In the screenshot above you can see that each document type gets a little
icon, and there are far more color codes than plain ls.
The columns shown in the -l view can also be customized much more than
vanilla ls.
ripgrep
Many years ago I started using grin
which is (was?) a recursive grep utility.
Being a Python 2 utility
and Python 2 reached end-of-life in 2020,
I switched to grin3.
Now I'm getting used to using
ripgrep, which A) is faster than
grin3, and B) is maintained while grin3 is not.
oh my zsh
I've been using zsh for years, and oh my zsh helps configure it with all kinds of goodies.
Raycast
It's not a command line utilty, but Raycast has proven invaluable. It's a supercharged Spotlight replacement. It has many useful features, not least of which is the Clipboard History. The Calculator is great for quick math and unit conversion.
Confguration Files
If you want to see my configuration files, just drop me a line!
A Tribe Called Quest - Beats, Rhymes & Life
It's been a busy week and this review is being posted less than four hours before it would be considered late. I have reasons to keep this short. Beats, Rhymes & Life by A Tribe Called Quest debuted at #1 and went on to sell over one million copies.
In my opinion, it's a decent album, but not as good as The Low End Theory.
No Doubt - Tragic Kingdom
In a sense, I'm late on this review of Tragic Kingdom by No Doubt. It reached #10 last week after 29 weeks on the chart. Luckily for me, this week's chart has the same ten albums, so I'm not delaying a review of any other album by being late, so it all works out.
Tragic Kingdom was No Doubt's big breakout album. It was so popular that they were pulling singles out of the album for three years through 1998. You can still hear these singles played on the radio today.
Because it was (and remains) so popular, I never felt the need to actively seek out songs off this album. They have simply been around, ever-present. I like a fair number of songs off this album, and they do transport me back to the mid-90s. However, because the songs are everywhere, I don't think I need to specifically listen to the album on its own, and you don't either.
LeAnn Rimes - Blue
The most remarkable thing about this weeks #4 album is that LeAnn Rimes was thirteen years old when it was recorded and released. Although this is not my type of music (I had zero listens of her on last.fm before this week), I can say she is clearly gifted and her singing was not that of a teenager.
Naming your album as a thirteen year old Blue is a gutsy thing to do when one of the greatest albums of all time (by Joni Mitchell) is also named Blue. Of course, Blue is a single word and a common color, so it's not like Rimes named her album Sgt. Pepper's Lonely Hearts Club Band or Thriller.
As for the album itself, other than her skills as a singer, I have nothing to say about it. I don't think I've missed anything by not listening to her music and I won't be doing it intentionally going forward. Entirely skippable.
Nas - It Was Written
This week has been a bit of a "staycation" for me and my family. Originally we were planning on driving through southern Colorado for a few days, but there are a number of wildfires there and we decided against that. The fires have been burning for some time, and we might have done something else, but we never got our act together. It's just as well because as it turns out, I've had to do at least a little bit of work each day of the week. Monday I actually went to the office to finish something left over from Friday. I've been doing my best to not do work, and mostly succeeding.
All of this is to say that this week has been a bit unusual. Nevertheless, I will give you what you came for, a review of this weeks #1 album, It Was Written by Nas. I can make this brief: I have no interesting thoughts about this album. It's standard mid-90s rap. I've never been big into Nas, and this album didn't change my mind. Meh.
Public Works and Public Costs
During the school year, I am able to almost never drive a car during the school/work week. I can get where I'm going, with what I'm going there with (e.g. a kid, a laptop, some light groceries, etc), by bicycle. Right now it's summer, and because of where and when various summer camps drop-off and pickups are, I'm driving every day. I would prefer to not do this, but it's only for ten weeks or so, and I can manage it.
What I'm here to complain about, however, is something else. Because I'm driving more, I'm impacted by summer road construction projects, and I find them frustrating. For those of you who don't commute by bicycle regularly, I'll explain. When you commute by bicycle, you know exactly how long it will take to go from A to B. This might not be true in Amsterdam or Copenhagen, but here there's never enough bicycle traffic to impact travel times. But with driving, I have to budget in extra time for construction zones that may or may not have a lane restriction in place. I find this annoying and inconvenient.
Sitting in these backups and seeing only a handful of workers actually doing anything at any one time has given me time to develop an opinion. In short, all publicly-funded works should include the cost to the public in terms of delays and inconvenience when comparing competitive bids. These costs won't actually be paid, but they will be used to compare the true public cost of each project. Let me explain with an example.
Let's say a road needs repaving, and there are two bids:
- Company A will do it for $100,000 and take 30 days
- Company B will do it for $150,000 and take 15 days
Next, using traffic data and other factors, it's found that each day of construction would cost $4,000 from the public in delays, fuel burned in extra traffic, and so on. Bringing in these costs, the true public cost of each bid is:
- Company A $100,000 + 30 * $4,000 = $220,000
- Company B $150,000 + 15 * $4,000 = $210,000
Using this policy, Company B would win the contract despite coming in with a higher bid.
I haven't invented anything here, these are called external costs, and our society would work much better if they were more effectively and consistently applied to taxpayer-funded projects. With penalties for missed deadlines, it would encourage competence and efficiency. Instead of sitting in traffic seeing only five people working at any one time for six weeks (ask me how I know this), you'd see dozens working for only a few days or a week. The public perception of government projects would improve and society would be better for it.
Sadly, because it would be good for society, this will never happen.





