I got a new phone, the Minimal Phone. It is an e-paper phone with physical keyboard, both rarities in current smartphones. My Samsung S24 is a bit over a year old, pretty much new for me, but I’ve been wanting an e-paper phone for a long time and the S24 was somewhat disappointing in some ways. I’m hoping the e-paper display will reduce eye fatigue, reduce screen time, and help with sleep issues. I haven’t switched over and won’t until I get a case for it, plus there are some issues that I’m hoping get fixed with an upcoming software update.
Continue reading post "New phone: Minimal Phone"Toby's Log
Ideas: Library after-hours lockers
Lockers would be installed outside of a library facility, accessible after hours. If a patron can’t get to the library during its open hours, but wants to take something out, they could request after-hours pickup. A librarian would get those items and put them in a locker. The locker would have a scanner based lock that would be set up for the patron’s library card. At any time, they could come, scan their card, open the door, grab the materials, and close the door.
Continue reading post "Ideas: Library after-hours lockers"Openrsync issues resolved (I hope)
I think I have finally worked through and fixed the issues caused by Mac OS 15.4 switching from rsync to openrsync. With the switch, many of my backup and other rsync scripts broke, throwing errors and not finishing the sync. As of that last post, I had gotten things mostly working, but had to disable incremental snapshotting and still sometimes had failures that I had to deal with.
Some of the errors I’ve had include:
β¦ copy_file dfd: openat: Too many open files β¦
β¦ empty link β¦
β¦ error: unexpected end of file β¦
β¦ No such file or directory β¦
β¦ opendir β¦ failed: Interrupted system call β¦
For Too many open files
, I had to reduce the file count in my really gigantic backups. Instead of backup up the entire /Users
directory, I made a loop to do each user separately. I also excluded various cache directories and the like that have lots of files that aren’t important for a backup. It took searching and repeated runs to find and add enough such folders to the list. These include:
rsync β¦ \
--exclude '.brew' \
--exclude '.cache' \
--exclude '.node-gyp' \
--exclude '.npm' \
--exclude '.pnpm-store' \
--exclude '.sass-cache' \
--exclude 'node_modules' \
--exclude 'Data/Library/Caches/' \
--exclude '/Library/Application Support/Adobe/Fireworks CS6' \
--exclude '/Library/Application Support/Amazon Music' \
--exclude '/Library/Application Support/Firefox/Profiles/*/storage' \
--exclude '/Library/Application Support/Chromium/*/Service Worker/CacheStorage' \
--exclude '/Library/Metadata/CoreSpotlight' \
--exclude '/Library/Caches' \
--exclude '/Library/Cookies' \
--exclude '/Library/Logs' \
β¦
For unexpected end of file
, I had to add the --inplace
option. I think this has some risks to it. The man page mentions possible issues with hard links: Not sure if that relates to the --link-dest
option and if it may cause overwrites of previous snapshots or anything like that. But I needed it for the incremental snapshots to work at all.
For Interrupted system call
, there were certain folders, mostly in user library folders, that I found I needed to exclude. The error message unfortunately gave no hint to where the error happened in the filesystem, so I had to do a time consuming process to find the problem files. I excluded large folders until things worked and then added back items within those until I had added back what wasn’t causing the error, up to the amount of time I was willing to spend going deeper or when I was dealing with folders whose content didn’t matter for backup. I don’t remember all of them, but I believe they included:
rsync β¦ \
--exclude '/Applications' \
--exclude '/Library/Application Support/iTerm2' \
--exclude '/Library/Containers/com.apple.Safari/Data/Library/Caches' \
--exclude '/Previously Relocated Items*' \
β¦
As mentioned in the previous post, for empty link
, I had to remove or exclude symlinks that weren’t pointing anywhere. Some of those were for stuff that does point to something when shared with a virtual machine, which had to be excluded. Others were simply links whose originals must’ve been removed at some point or whatever, and could be removed without issue.
For many use cases, using the homebrew version of rsync (brew install rsync
) will be the normal version and not have these issues. But I don’t want to run homebrew stuff with my root user, and I need to use the root user to broadly back up all of my users’ data at once.
I’m not sure why Apple had to switch to openrsync, and I’m not sure why openrsync has so many troubles that regular rsync doesn’t. It took up a fair amount of my time and frustration to get things fully working again. But I’m glad I seem to have solved the issues.
Got a smartwatch: Bangle.js 2
I bought a Bangle.js 2 smartwatch from Adafruit. I haven’t ever owned or played with a smartwatch, and haven’t even worn a dumb watch in 15 years or more. But I got to thinking that I look at my phone a lot for time and notifications, and this could reduce phone use and simplify that behavior at the same time. An e-paper screen could make it less like looking at a mini phone on my wrist. It also could do some other things like step counting, sleep monitoring, and heart rate monitoring that might be useful, and timers, alarms, and stopwatch so I don’t need to reach for my phone for those either. The Bangle is open source, lightweight, and seems feature filled enough to fit what I’m going for, cheap enough ($89) to not worry too much if I want more later.
Continue reading post "Got a smartwatch: Bangle.js 2"Looks like my Macbook Air (2020 Intel) will not be supported for the next major MacOS update, Tahoe. I knew that was coming at some point when they switched to ARM architecture. Luckily, Sequoia should still receive security updates into 2026 or 2027, and that’s all I really care about. By that point, I will probably transition to a Linux computer for my main, and if I need a new Mac for other stuff, may just get a refurb Mini.
I have read the last novel in the Expanse series, Leviathan Falls. It was good, and so was the series. Perhaps it’s recency bias, but I’d say it’s my favorite book series.
Continue reading post "#4567"My main email app (Fastmail) on my phone logged me out without me noticing for two days. I’ve been trying to not pay as constant attention to my email as it is, so it just seemed nice, but I didn’t even really think about it in that period. Happened to have more than the usual amount of emails when I got back in, though luckily, nothing important. It’d be nice if I could have it only notify me immediately for email from certain addresses or something like that.
Candle incident
Yesterday evening, I lit a candle while watching an episode of Columbo. It’s one of those fat kinds that develops a wall of wax around the outside. Previously, a hole had formed in the wall and some wax had dripped out. I had fixed the hole, but there were still some hunks of this wax left. So I put one in the candle wall yesterday, leaned up against it, hoping it would slowly melt away.
This morning, I woke up and thought to myself that I didn’t remember putting out the candle.
Continue reading post "Candle incident"Mac: 15.4 rsync issues
After running into some problems with some rsync
scripts recently, I discovered that in Mac OS 15.4, Apple switched its built-in rsync
command from standard rsync
to the BSD project’s clone, openrsync
. It is apparently not 100% compatible, because my backup and deploy scripts that use it were failing.
JS: Replace page text
For this year’s April Fools Day, I decided I wanted to replace some text in the content of my site’s pages to something funny, weird, or confusing. Since I’m moving toward a static site, I wanted to do this client side, which meant replacing text with JavaScript. This would be simple with innerHTML
, but that completely replaces the DOM with a new DOM, possibly causing usability and performance issues, and could replace text in URLs, breaking them. Probably a better way is to loop through all nodes on the page, looking for text nodes, and replace text in each of those. So I did this, and it worked nicely. Thought I’d share.