Last September I’d had my eye on a specific electronic diagnostic tool at a $LargeRetailer for several weeks, to the point where I had put it in my “cart” and taken it out several times. It would make my life significantly easier in one key area, but I couldn’t justify the cost. The problem was, there were precious few of these devices available. Turns out, this is fertile ground for some retail dark patterns.
(I write in vague tones because the device itself isn’t that important to the lesson; maybe I’ll talk specifics one day).
A dark pattern is an intentional design choice to coerce you into doing something you may otherwise not. Think of those Yes and Maybe Later buttons that demonstrate the Valley’s wilful inability to understand consent. You may otherwise not want to install a slop machine or TormentNexus, but pressing Maybe Later tacitly leaves the door open to be asked again in the future.
Anyway, I got suckered in real good! I had gone back to this site, and a notice popped up alongside the item claiming that it was the last one in stock, and that I’d better hurry if I still wanted it. It’s a classic high-pressure sales tactic, but I knew this was the only retailer in town that had this specific device, so I panicked and bought it.
Wouldn’t you know it, but the very next day the page refreshed, and they claimed to have restocked with “100+” new items of that exact SKU. On a weekend. Sure.
I felt silly, but perhaps a bit wiser. If someone is attempting to pressure you into making a decision within a specific time, they’re (usually) working in their interests, not yours.
British English Teacher Roy put out a video last year regarding words that English learners may have been taught, but that aren’t commonly used in the real world. As a native Australian/Singaporean English speaker, I was curious to see if his experience mirrored mine. These are the ones he started with.
“So do I” and “Neither do I”
He says it’s far more common to hear “me too” than “so do I” or “neither do I”. These sound too formal, and you won’t hear them often on the street.
This may be broadly true in the UK, but I’m not sure in Australia. I hear “so do I” and “neither do I” just as often even in informal settings among friends, especially for emphasis.
Them: I didn’t like that movie at all.
Me: Oh yeah, neither did I! It was horrendous.
“Isn’t it?” and “Don’t you?”
He says native speakers are more likely to say “right?” at the end of a question where you’re asking for affirmation.
I agree, though in Australia I think it’s just as common not to end an observation with any of them.
Them: We’re off for a bush walk this arvo’.
Me: Yeah nice day for it.
“I have a doubt”
He says native speakers rarely use the word “doubt”, instead saying “I’m not sure”. “Doubt” comes across as aggressive and forceful, which may not be intended.
I agree. I reserve the word “doubt” for if someone is making an outlandish claim, or I want to qualify an otherwise strongly held view.
Them: He said it uses “military grade encryption” so therefore it’s safe.
Me: I very much doubt that.
“I’m sat in a chair”
He says native speakers are as likely to say they’re “sat” in a chair rather than “they’re sitting”, even though it isn’t correct grammar.
Nobody in Australia talks like this; we say we’re “sitting” in a chair. I’m not sure I’ve ever heard a North American say it either, though they have so many regional dialects I wouldn’t know for sure. This is probably a British colloquialism, said while ordering crumpets and black pudding for elevenses.
Them: I’m sat in a chair and…
Me: Sorry, you’re what?
Them: I’m sat in a chair.
Me: As in, you were sitting in it before, but no longer?
Them: No, I still am!
Me: … okay, gov’.
“Today I’m feeling myself”
He says native speakers will avoid this phrasing when saying they feel better after an illness, because it has unfortunate sexual connotations. However, it’s fine to say “I’m feeling more like myself”.
I agree. It’s also why you’ll never hear an Australian saying they’re “rooting” for you, as an American would, as it’s a colloquialism for sex. We also pronounce a network “router” the American way instead of the British “rooter”, for the same reason.
Them: You had a rough week recently huh?
Me: Yeah, but feeling a bit more like myself today.
“Goodbye”
He says native speakers rarely say “goodbye”, and are more likely to say phrases like “see you later”.
This is true. In Singapore you’ll even hear Mandarin speakers end calls with “bye bye”, but hearing the full word is rare. In Australia, and in parts of the UK, you’re more likely to hear someone end a conversation with “cheers” instead, “thanks mate”, “have a good one”, or even “see you next time” even if you have no intention or ability to see them again.
Them: Have a safe flight.
Me: Cheers!
“My name is…”
He says native speakers will usually just say “Hi, I’m…” rather than “my name is”.
This is true. About the only time I hear people say “my name is” is at the start of presentations, perhaps to bait those who do Toastmasters. Maybe it’s to sound more formal.
Me: Well hello and welcome to NVMM is better than KVM. My name is Ruben Schade, and…
“Not at all”
He says native speakers say “not at all” after a thank you sometimes, though they’re just as likely to say “you’re welcome” or “my pleasure”.
This is true. In Australia we take it a step further and generally answer a thank you with “no worries”, “not a problem”, or “all good”. I’m realising as I write this how colloquially we speak down here; no wonder some tourists get confused.
Ah Dyson. He voted for Brexit, then moved overseas to not live with the consequences of his actions. He and his company also designed a few different appliances, one of which was a hair dryer.
It’s… fine? It dries your hair, which given the coverage I sport thesedays, doesn’t take long. It’s also pleasing enough to hold, though still more plastic than I think you may expect. Hotel hair dryers certainly feel cheaper after using this.
But it does one thing that frustrates me. Or should I say, it doesn’t do the thing. To understand why, let’s revisit that maxim widely credited to Albert Einstein:
Everything should be made as simple as possible, but not simpler.
In other words, there’s an inflexion point where in the pursuit of making something simpler, you end up making it more complicated.
An example I like to give here are ultra-minimalist websites. They’re designed to push back against the bloat, tracking, and UI hostility of modern sites, but in the process they strip so much back they’re impossible to navigate. How do I get to their home page? Their archives? Do they have any metadata? Minimalism and simplicity are allies, until they aren’t.
Back to hair dryers
The Supersonic Hair Dryer runs afoul (🐔) of this principle, and it’s in the way you select its performance characteristics. Take a look at this press image:
Located on the purple ring at the rear of the device are two silver buttons. One controls the airflow speed, and the other its temperature. As you press each one, another LED above it lights up to indicate the chosen setting, and the device reacts immediately to your new input. Straight forward right? Well, not quite. Say you want to increase the temperature, what would you do? Simple, you press the button. But what about decreasing the temperature? Simple, you press the… oh.
This design falls into the trap of thinking you can eschew (gesundheit) two buttons for one, and give it double duty. This means you go from having two clear, unambiguous buttons, into one unclear, ambiguous button. When you understand how it works, that ambiguity is translated into frustration.
Let’s map the logic here, such as it is
Here is a representation of the two buttons that control the dryer speed and temperature, and the three tiny LEDs that indicate the target setting. When you turn the device on, both settings are set to low, or Level 1:
[ Temp ] ● ○ ○
[ Speed ] ● ○ ○
To increase either one, you press their respective buttons. This would put them at Level 2:
[ Temp ] ● ● ○
[ Speed ] ● ● ○
Okay, let’s keep going. My hair is a sopping mess, and I need full power. Let’s press both buttons again to get to Level 3:
[ Temp ] ● ● ●
[ Speed ] ● ● ●
At this stage the hair dryer is running at full, and a desert storm is emanating from its metal and plastic confides. Brilliant!
Here’s where the logic flips. The hair dryer can’t run any faster or hotter, so the buttons change from increase to decrease. Therefore, pressing both takes us back to the Level 2:
[ Temp ] ● ● ○
[ Speed ] ● ● ○
Then we can press them again to go to Level 1, and the buttons become increase again:
[ Temp ] ● ○ ○
[ Speed ] ● ○ ○
Simple right? I mean, kind of, but also not.
Have you met my friend, Amber Guity?
Let’s go back to the Level 2 setting defined above. This would place the hair dryer in the following configuration:
[ Temp ] ● ● ○
[ Speed ] ● ● ○
Truthfully, at a glance, can you tell what the buttons will do? Will they increase the temperature and speed, or will they decrease them? You might know if you only just pressed the buttons before, but otherwise there’s no outward indication whatsoever.
This is where the Dyson was engineered to be simple by hiding something, another classic example of where minimalism can increase functional complexity if not designed carefully. Within the logic of the dryer there’s a third, hidden setting that is only flipped when you’re at Level 1 or 3:
[ Temp ] ● ● ○
[ Speed ] ● ● ○
< Mode > INCREASE
This has three negative outcomes.
If you’re unsure, you’ll only discover the mode the dryer is in by pressing the buttons. In dev work and system design we’d call this a side effect which (with exceptions), most of us try to avoid if we can.
If you’re unsure, you’ll only have a 50% chance that pressing the buttons will achieve the desired outcome. For speed that’s a minor(ish) irritation, but if you think it’s already too hot, making it even hotter before cooling it down seems ridiculous, and a potential safety hazard.
If you know you’re in increase mode, but want to decrease, what should be a simple press could turn into potentially three. At Level 2 and want to go to Level 1? You may need to press to Level 3 first, then back to Level 2, and then to Level 1.
This happens to me just often enough to be frustrating, hence why I’d spending a Saturday morning writing far more detail about it than I should. Just be thankful I didn’t break out truth tables.
But Ruben!
It’s at this point the armchair industrial engineers may spring into action defending this, claiming it’s either not a big deal, or that it has to be this way for $REASONS.
If this was a $10 Kmart special, I’d be inclined to agree. But this is an expensive hair dryer (albeit one we received as a gift), and frankly I’d expect more for something where one of the chief selling points is its design. If a $10 Kmart special can present its chosen speed and temperature settings in an unambiguous way, and allow you to scroll up and down without first going in the opposite direction 50% of the time, the Dyson has no excuse. Settings that are clear and easy to change are table stakes (not to be confused with table steaks, which would only dry out in the presence of such a device).
I’ll concede there’s one use case where having one button is preferential over two: you can press through all the settings without having to move your thumb. But I don’t think the safety concerns, ambiguity, and needlessly repetitive actions justify this. I expect a button placed in parallel would also be trivial to move one’s thumb to press. But then, the device wouldn’t be as minimal and sleek, which I suppose is the entire point.
Anyway, the Dyson Hair Dryer with a name I forgot and I can’t be bothered scrolling up to remember. It’s fine, and maybe even above average, but the UI leaves a lot to be desired. Like this blog! Except they have billions, and I don’t.
If you haven’t seen any of the CES keynotes or announcements this year, or indeed any of the commentary, let me summarise it for you with two letters: actually, why bother, you already know what it is.
[T]he star of this show is the Space Frame internal design, anchored by a two-sided plate under the keyboard on which components are mounted. This new internal chassis structure overhauls the interior, with Lenovo taking some key components off the mainboard and incorporating them into the two-sided frame, where possible—a space-making frame, if you will. The laptop’s motherboard mounts on the underside of the frame, for example, independent of internal modules that lead to the various ports.
These newly modular parts include components like many of the I/O port headers, the battery, the speakers, and the cooling fans. (Also, the keyboard, attached by magnets, pries off without the need for any tools […]
The photos of the internal design are impressive. Check out Joe’s post if you want more info.
Most “consumer” (ugh, I hate that term) electronics have been going in the opposite direction of late, with even the ThinkPad line adopting soldered storage and memory which is ridiculous to me. Lenovo didn’t need to do this, and they did.
I’m in the market for a new personal laptop. The ThinkPad is my favourite line of portable computers ever, but I’ve only ever bought used or refurbished units. I was originally thinking of getting a P14s for my first “new” one ever down the line, but this might be the one I get. I’m kind of excited.
It has come to my attention that the corpus of my public work has been scraped and used to train Large Language Models (LLMs), referred to in academia as “bullshit generators”, and erroneously by marketers and venture capital firms as “AI”.
This training occurred without my permission, attribution, or compensation (PAC), which represents a violation of my rights, and was Not Nice. Businesses and individuals have therefore raised concerns about their use of LLM tools, and have sought to indemnify themselves.
In response to this demand, I (Ruben Schade) am introducing the Rubenerd LLM Licencing PAC. This non-exclusive licence permits any entity to use a model trained against my data, in exchange for a reasonable fee. I am offering a licence per LLM query, and a perpetual licence covering any and all uses of a specific LLM.
Pricing per user
As of January 2026:
Licence per LLM query: 1,000.00 €
Perpetual LLM licence: 10,000,000.50 €
These are latest prices, though are subject to change.
Arranging payment
You are to make payments in the form of a public, charitable donation to one or more of the following organisations. Note their appearance here does not constitute endorsement by them of this licencing arrangement:
Upon completion of this donation, contact licencing@this-site-url with your supporting evidence. Once I am satisfied the conditions of payment have been met, you will be issued with a licence certificate, and a note of gratitude within one business week.
Legal FAQs
Do I really need to purchase a licence to use LLMs trained against your work? Yes.
No, really? Yes.
Does this licence also cover LLM produced by an educational facility or a non-profit? Yes.
What if my legal team advises me this is not payable? They are incorrect.
Is this satire? No, of course not.
Was that sarcasm? No, of course not.
Pricing FAQs
Does the perpetual licence cover all LLMs? No. You must purchase a licence per LLM used, even if developed or offered by the same shyster. Pardon, business.
Your prices are in Euro; don’t you reside in Australia? Yes.
Aren’t the prices a bit steep? The large “AI” companies receive billions in VC funding a year, which they proceed to set on fire with no reasonable prospect of profitability. In this context, the prices here are a bargain.
What if I can’t afford it? Then you also won’t be able to when the bubble bursts and the VCs will no longer be subsidising your toys.
Do you offer educational discounts? No.
Do you offer non-profit discounts? No.
Do you offer a site licence? No. Every user must have their own licence.
Do you offer bulk discounts or price breaks? No.
Do you offer flexible payment plans? No.
Do you offer specials on Black Friday, or other such retail scams? No.
Is the 0.50 Euro cents really necessary for the Perpetual Licence? Yes.
Payment FAQs
May I donate in another currency? Yes. You must provide evidence that the donation, after fees, covers the equivalent cost in Euro at the time the donation was made.
May I split my licence fee across multiple organisations? Yes. You must provide evidence that the sum total of these donations meet or exceed the chosen licence cost.
Are my donations tax deductible? Contact the fund/foundation to whom you donated for details.
Update: More FAQs
These are based on feedback I’ve received.
How are you going to enforce this!? LLM operators are known for their impeccable ethics, dress sense, and personal hygiene. I’m confident enforcement won’t be required.
May I adapt this for my own? Absolutely! A link back would be nice.
For several years I’ve recommended people use KeePassXC as a cross-platform password storage system. I’ve used it on FreeBSD, Linux, and macOS, and its vault files have been used on iOS. I’ve donated financially to the project, and it’s been a regular feature on recommended tool lists and my Omake.
Last November the project announced its use of gen-“AI”. A long post clarifying their position did little to assuage concerns. I could explain how deeply irresponsible this is for a security tool, and refute each of the misdirections, non sequiturs, and inaccuracies line by line, but I doubt this would be productive.
Thank you to everyone on the KeePassXC team for your work in keeping our credentials safe over the years, and proving that you can do it without the need for a centralised cloud, server component, or desktop Electron. KeePassXC was some of the best software I’d used in years.
☕︎ ☕︎ ☕︎
Reading between the lines of their quality control post, it’s hard not to see it as another example of an open source project not getting the support and resources they need. There’s something wrong with the world when trillion dollar companies continue to extract rent, when people behind important and useful software like this feel they need to employ functionally deficient, plagiarising vulnerability generators (that will be rug-pulled when the bubble bursts) just to stay on top of bug reports.
There are two groups who use these tools: those without scruples, and those who feel compelled to. For the brave face they put on for that post justifying it, I fear the KeePassXC maintainers fall in the latter.
The world depends on open source software. It should damn well start acting like it. And yes, I’m putting myself on notice here too.
I think it’s important to share one’s mistakes, as I’ve talked about here before. They demonstrate we’re all human, and that we can learn from each other’s foibles. Or I dunno, maybe you can have some Ruben Schade(nfreude) over your coffee in the morning :).
Yesterday I was deploying a new Postgres 18 jail target as part of a migration from an old version. I do this instead of “upgrading” servers; maybe that’s not best practice, but I prefer doing this for major Postgres version jumps.
In short (or tall, I’m not normative) I’d:
Set up the new FreeBSD jail by creating a new ZFS dataset, and extracting base.txz into it.
Defined the new jail in jail.conf with the requisite allow.sysvipc=1; option Postgres requires.
Enabled the postgresql service, initialised the database, and started the service.
Logged in, set a password for postgres, and added a new user.
Added the required hosts to pg_hba.conf, and updated the listening address in postgresql.conf.
I also took the opportunity to refresh my ancient Ansible scripts, which for some reason I’d only ever written to deploy Postgres on Debian. I followed the same steps, added a few more checks, and did a dry run on a test jail to confirm I ended up with the same config. Everything looked great. I really should publish these at some point, but then I’d have to concede that I still use svn for it (cough). But I digress.
Then the weirdness started. I was able to connect locally within the jail to the new database with psql, but not remotely on the other site over the VPN. I temporarily installed postgres18-client on the jail host and suppled the IP of the jail, and still couldn’t connect.
The first step was to see if I’d borked my jail networking, but I was able to access other jails on the same subnet without issue, and I clearly was able to run pkg(8) within the jail or Postgres wouldn’t have installed. I started a local SSH server within the jail and could connect to that, so no problems with routing. I also confirmed my pf.conf on the jail host was forwarding the correct ports.
Next, I suspected I might have borked my pg_hba.conf file, which is used to define permissions for connections. Sure enough, I saw a slew of these:
## /jail/postgres/var/log/messages
failed: FATAL: no pg_hba.conf entry for host \
"$IP", user "postgres", database "postgres"
This came as news to me, because I had most definitely defined the host in my pg_hba.conf!
It’s best practice to lock things down as far as reasonable even if you’re behind a VPN, but to troubleshoot I temporarily opened the flood gates. I added the following to postgresql.conf:
listen_addresses = '*'
Then added these two lines to db_hba.conf to allow all connections from any user to any database over any IP with a password. It should go without saying that you must not do this in prod:
## TODO: REPLACE THESE ONCE CONFIRMED WORKING
host all all 0.0.0.0/0 scram-sha-256
host all all ::0/0 scram-sha-256
I restarted the postgresql server, and… the exact same issue persisted:
## /jail/postgres/var/log/messages
failed: FATAL: no pg_hba.conf entry for host \
"$IP", user "postgres", database "postgres"
WHY!? Why I was being told that host wasn’t defined, when literally every conceiveable host should be caught by this file?! Networking is admittedly not my strong suit, but this was silly.
I checked the Postgres documentation for client auth issues, and was at least encouraged that the server was accepting requests, even if I wasn’t able to auth. This was consistent with the errors I was seeing in the logs. I also double-checked I had the correct config for pg_hba.conf.
A lunch intermission
Those of you familiar with Postgres on FreeBSD may know the issue, but it came to me over some Mexican food for lunch. I came back home and checked where my scripts had put pg_hba.conf:
/jail/postgres/usr/local/share/pg_hba.conf
Oh for Pete’s sake! I copied the file to where it was supposed to be:
Wait, dual is Oracle, nevermind. Old habits die hard. For a doofus.
I like to end these sorts of posts by telling myself what lesson I learned. This one was simple: check where your config files are. I know right, what a shocking concept. Next I’ll tell myself that I should make sure I’m writing config files in the first place.
I use a laptop as my work computer. As such, I need a place to dock it when at my desk. Nobody will sell me a proper laptop dock like the chonky ones my dad used to use in the 1990s, so instead I have to stand it on a table and plug in a few cables for the monitor, keyboard, and USB coffee warmer (wait, what?).
For years I used the Twelve South BookArc, as seen in this press image below. I haven’t owned this device for a few weeks now, for reasons that will soon become apparent:
Looks sleek, right? I remember seeing it in an Apple authorised retail store in the 2010s and thinking wow, that’s sleek. It’s as though my initial impression there informed my first sentence of this paragraph, or something.
There’s just one problem: it sucked. It sucked for so many reasons, but they could be broadly distilled into two key points:
It only fit a small range of laptops
It was as unstable as Windows 98 loading your SCSI TWAIN drivers at a press event while your boss Bill Gates looks on
The stand is a rigid, fixed piece of aluminium, into which you place your laptop to save desk space. It’s a great idea in theory, but aren’t all laptops different shapes and sizes? Fear not, because the BookArc shipped with three rubber inserts that you install into the stand to accommodate most MacBooks in use at the time.
Except, it didn’t. See, many (if not most) Apple people use their laptops in cases. I know, it’s weird, I don’t even quite understand it myself either, and I do it too. Maybe we don’t want to scratch the metal, which is funny given how much softer the plastic and lid is on my ThinkPads. Point is, a Mac in a case has a different size profile to one that doesn’t (shocking, I know), so the supplied insert for my fruit model was too small. The only way around this was to use one of the larger inserts. Unsurprisingly, this didn’t fit well. Like the SS Imperator of yore, both my work MacBook Airs had a tendency to list to port or starboard by merely glancing upon it. If you got that reference, you’re my kind of people. And what if you also had a non-Mac laptop you’d need or want to use sometimes? Tough!
This give and play of the laptop in the stand was an annoyance in operation, and robbed the stand of that sleek factor entirely. It also made putting the computer in the stand, and taking it out again, frustrating. I call these Papercut Problems for the phrase “death by a thousand papercuts”. In isolation you can’t be justified fixing them, but they have a habit of wearing you down over time. But I lived with it.
☕︎ ☕︎ ☕︎
But okay, I hear you all say. I was using the stand in an unsupported configuration, with the wrong provided piece of rubber, so of course my experience would be suboptimal. The packaging for the case said it supported a specific range of Mac laptops, not Mac laptops in cases. Caveat emptor, and all that!
True. But that gets me to the stand’s worst design feature of all, and the one I assert tips this from being middling to flawed. I’m going to share the same press image again, because I want you to pay close attention to the feet; a phrase that would mean something entirely different depending on the person saying it:
Spot the issue? The entire stand rests on four tiny rubber feet mounted to the aluminium frame and… that’s it. The whole feet design is weird; most of the rubber doesn’t interface the table at all, meaning you’ve got about a millimetre-wide contact surface at it narrowest point. That’s not much resistance between you and accidentally moving or bumping the stand. Which, given the high centre of gravity and the fact the laptop is a massive sail made of metal and silicon, happened constantly.
There were other issues with the rubber feet too, such as they were. They had a habit of falling off, meaning the sharp aluminium edges of the stand proceeded to dig into and scratch whatever table upon which it was perched. This was fine(ish) for some disposable IKEA veneer, but not the table our inlaws gifted us. A few drops of superglue would reattach them, but then another would fall off without me noticing and I was left scrambling to patch up scratches again before family noticed.
(This isn’t the fault of the stand specifically, but one time I was gluing a foot back on, then reached for a tissue into which I sneezed. Except, I had a bit of superglue on my finger, which had transferred both to the tissue and my olfactory centre. Getting that off was a painful, and dare I say undignified, experience).
With hindsight I should have returned it. I should have also said something wittier to the troll, eaten a salad for dinner instead of a chicken pie, and exercised instead of watching another Mend it Mark video repairing a piece of electronic gear I’d have no hope of even understanding, let alone tackling a repair of myself. Life is full of regrets, and of decisions not made. That’s why we remember, learn, and grow as individuals, so we’re not scarring our leg with a flimsy, overpriced laptop stand as I bump the contraption to the ground and one of the edges with a missing foot cuts my skin.
☕︎ ☕︎ ☕︎
But fear not, we have good news! Introducing the Alogic Bolt Adjustable Laptop Stand. What it lacks in the aforementioned sleekness, it more than makes up for in an oddly charming industrial sense:
Here it is effortlessly holding up my MacBook Air:
Great, right? It’s so good, it can even hold my current NetBSD ThinkPad vertically to permit the power cable connecting to the side. I was so excited I didn’t even get the correct item in focus!
It’s so flexible, it can even hold a 1987 Macintosh SE FDHD!
I… hmm. Was that gag worth taking an extra photo, scaling it, uploading it, and writing this extra sentence? That’s an excellent question.
☕︎ ☕︎ ☕︎
The Alogic Bolt is a vastly better device. I picked it up on sale at our local hi-fi electronics store, and I’ve been so impressed I’m tempted to get a second one for the study.
It improves upon the BookArc in several key ways:
The entire structure slides in and out, and locks into place with recessed thumb screws in the base. This means its adjustable not just for my Macs, but my Macs in cases! Indeed, almost any modern laptop.
The entire base of the stand makes contact with the table, and is lined with thick rubber. It isn’t going anywhere on this desk, not even if I inadvertently bump it. It’s solid, robust, and dependable.
The sides of the… jaws (?) are also lined with rubber, which helps to keep the laptop fixed in place without wobbling or scratching. I don’t have to fear the Imperator listing again when I move my chair, or sneeze, or use an ocean liner analogy.
It hasn’t made me glue a tissue or my finger to my nose. Yet.
You know when you’ve been living your whole life doing something a certain way, or using a specific device, and you finally replace it with something infinitely better?
Alogic, you hit this out for six. That’s a phrase Australians use, right?
tl;dr: it hasn’t hung, the list of packages might just be long.
We’ll soon be moving on from Colin Percival’s freebsd-update(8) mechanism. It’s served us well ever since those 7.x days, and I’m thankful for all the time savings. As its swan song here, I’m using git to upgrade the last of my personal fleet that runs RELEASE to version 15. I’ve done this dozens of times before, and all has gone smoothly.
That is, until I upgraded a specific jail one one of my older hosts:
pkg: Warning: Major OS version upgrade detected. Running "pkg bootstrap -f" recommended
The following modules have been installed from packages.
As a consequence they might not work when performing a major or minor upgrade.
It is advised to rebuild these ports:
And then it… hung? I waited for what seemed like an age, but there was nothing else showing on the screen. I thought it might have hit a weird edge case with the name of a package, or maybe my local self-built packages had messed up something.
I hit RETURN a couple of times, the letter Y followed by RETURN just in case nothing was getting to TTY, nothing.
I went to make a coffee, like a gentleman, then came back a few minutes later to more than eight hundred lines of boot modules:
I’d seen this on many other jails, but I suppose this slower machine with its spinning rust and SATA SSDs took longer to formulate the list. I am so spoiled by modern M.2 drives on my FreeBSD bhyve box for boot volumes and jails!
Lesson learned: if you’re upgrading a host or jail to 15.0-RELEASE and it seems to hang at that specific line, just give it some time.
I was talking to my sister over the Xmas break, and she was recalling something she’d been told by a friend about the process of learning. They said their friends’ shrink had pointed out that learning is supposed to be uncomfortable. Most of us spend our adult lives working to avoid discomfort, but it’s almost a pre-condition to breaking into something new. If you’re never uncomfortable, you never grow.
This hit me like a truckload of brick-shaped projectiles. Which was uncomfortable! AAAAAAAAAAAAAAAAAAA!
The mental health professional said (a) we have to accept a certain degree of discomfort, and (2) that if we’re able to plow through that at the start, we’re rewarded with something new we can be comfortable with.
We got to talking about school, and how we’re largely forced to learn something and push through the discomfort. But in adult life, we often have to impose that feeling on ourselves. Which means we often don’t. So we should try!
I don’t have much more to say, I just thought that was a useful observation.
Was this post written just so I could make a bad joke about bricks? I mean, no. But also possibly yes. Maybe. Writing this paragraph is making me uncomfortable, but I don’t feel like I’m learning anything. Learning to frustrate my readers?