OK, TIL you can just do <foo.txt. I didn’t think that worked. Thanks!
Aussie living in the San Francisco Bay Area.
Coding since 1998.
.NET Foundation member. C# fan
https://d.sb/
Mastodon: @dan@d.sb
OK, TIL you can just do <foo.txt. I didn’t think that worked. Thanks!
I’d recommend self-hosting healthchecks and using runitor for your cronjobs. Runitor pings healthchecks when the cronjob starts, then pings it again on completion with the status (success or fail) along with the stdout and stderr.
Healthchecks can be configured to expect a ping periodically (once per day, once per hour, whatever) and alert you if it doesn’t receive one.
For backups, Borgmatic has a healthchecks integration.
RFC3339 is better than ISO8601 since it doesn’t allow some of the esoteric formats, and allows some useful formats that ISO8601 doesn’t (like separating date and time by a space instead of by T)
For example, 2026-W32-1 is also a valid ISO8601 date: Monday on the 32nd week of 2026. That format isn’t allowed with RFC3339.
RFC3339 is better than ISO8601 since it doesn’t allow some of the esoteric formats, and allows some useful formats that ISO8601 doesn’t (like separating date and time by a space instead of by T)
For example, 2026-W32-1 is also a valid ISO8601 date: Monday on the 32nd week of 2026. That format isn’t allowed with RFC3339.
Thanks - I didn’t know this either!
Admittedly I still use cat for this.
This also works too, but it’s more verbose:
echo "$(<foo.txt)"
It’s mentioned in the Bash man pages:
The command substitution $(cat file) can be replaced by the equivalent but faster $(< file).
EDIT: I was just informed that simply <foo.txt works too.
It wouldn’t be at the end, since you’d still be piping into program
program <file | grep | cut
I know, but I just wanted to mention this since a lot of new Linux users end up using cat this way :)
cat is misunderstood a lot. The purpose of cat is to combine multiple files together (it’s literally short for “concatenate”), like cat *.log to combine all log files together.
If you’re just using it for a single file, then you should just redirect the file to stdin. These two command lines behave similarly:
cat foo.txt | some-command
some-command < foo.txt
For head, tail, grep and some other commands, you can just pass in the file name directly as an argument (e.g. grep whatever foo.txt).
This looks like an AI edit rather than an actual renovation.
The shelf thing on the left has exactly the same items on it. Why would they keep the hole with the CRT TV in it? Also I’d hope that nobody would actually put a square table in a round space.
For other alternatives with their own engine - the main ones are Yandex, Mojeek, and Qwant. DuckDuckGo is good, but most of their results come from Bing.
Kagi is priced well for what you get. Search engines are very expensive to run. You don’t have to pay for the premium AI, and the pricing of the starter ($5/month for 300 searches) and pro ($10/m for unlimited searches) plans hasn’t been affected by AI. They’ve remained the same price ever since they launched in 2022.


Accurate. At work I’m finally getting around to paying down tech debt from a temporary hack that was supposed to only be in the code for a month or so, but now it’s been in our production code for around five years.
It would have been maybe a week or so to do it the right way initially, but we had hard deadlines and were pressed for time and just couldn’t get around to doing it. Now it’s over a month of work for one senior engineer (me) to clean up, because there’s so many interdependencies between the hacky code and other parts of the system that depend on side effects of the hacky code, or the order of updates performed in the hacky code. What a mess.
At least AI can help a bit. Even the newest models aren’t so great at system architecture in brownfield projects though (projects building into existing systems).


Not sure if this counts, but as a software engineer, pretty much all major software you use is hacks on top of hacks on top of something someone built as a ‘temporary’ solution or as a proof-of-concept that’s still in use years later. It’s amazing that anything works properly at all. Stable software is basically just software with 10+ years of bug fixes layered on top of it.
Part of the reason that Windows backwards compatibility is so good (plenty of Windows 95/98 apps still work fine on Windows 11!) is because Windows automatically applies compatibility fixes, including simulating bugs that were in older versions of Windows, because old apps could be relying on those bugs.
My wife gets very frustrated when she encounters bugs, whereas I’m usually like “well, it’s not nearly as bad as it could be” lol
AI loves inserting comments like this.
Either that or 20-line comments documenting the bugs in the old code, what this code does differently, and the exact implementation.
Comments describing the exact implementation become stale very quickly. Comments shouldn’t explain what the code does (eg “add two to rowCount”); they should explain why it does it (eg “include header and footer row in count too”). Extra details are what the commit message is for, and history is what source control is for.
I call it out in a lot of my code reviews (“code looks good but clean up the AI slop comments before landing”) but a lot of other developers don’t care as much about code and documentation quality.
Please may I have a crumb of context? What is Tesseract? I only know the OCR engine.


It’s not way more than they thought because it’s within the limits they set for the subscriptions. They wouldn’t have set the limits that high if they didn’t think people would use it.


Yeah I think I was thinking of DPAPI. Updating my comment!


There’s other approaches to automatically unlocking. For example, you can combine Clevis with Tang to use Network Bound Disk Encryption, which lets you automatically decrypt only when on a trusted network. (the password is stored on a different system on the same network)
You can have multiple different LUKS keys, and any of them can be used to decrypt the disk. This lets you automatically unlock via a network server when your system is at home, while still prompting for an unlock password when not at home.
At my workplace, our laptops have two LUKS keys - one for me and one for IT / tech support. It lets IT boot the system (eg if I send it in for repair) without having to know my LUKS password.


Bitlocker stores the key required to boot the system in the TPM.
You can do that on Linux too if you want to, using Clevis or systemd-cryptenroll.
As far as I know, Bitlocker uses two keys to boot: There’s a key in the TPM, that’s used to decrypt a key stored on the drive, that’s used to decrypt the data.
I think some data (maybe just user-specific data?) is encrypted with a user-specific key too, that isn’t unlocked until you log in. Edit: I think I was thinking of DPAPI.
I’m not 100% sure about the specifics of its design.
I use healthchecks + runitor for notifications. Would recommend. I posted another comment about them.