💾 Archived View for duncan.bayne.id.au › gemlog › feed.xml captured on 2024-06-16 at 12:15:39.
⬅️ Previous capture (2024-05-12)
-=-=-=-=-=-=-
<?xml version="1.0" encoding="us-ascii"?> <feed xmlns="http://www.w3.org/2005/Atom"><title>Duncan Bayne</title><link href="gemini://duncan.bayne.id.au/gemlog"/><updated>2024-01-07T18:02:01+11:00 </updated><id>gemini://duncan.bayne.id.au/gemlog</id><generator uri="https://metacpan.org/pod/XML::Atom::SimpleFeed" version="0.905">XML::Atom::SimpleFeed</generator><entry><title>My Gemlog is now built with Halp</title><link href="gemini://duncan.bayne.id.au/gemlog/2024-04-20-halp-gemlog.gmi"/><updated>2024-03-27T23:06:32+11:00</updated><author><name></name><email></email></author><id>gemini://duncan.bayne.id.au/gemlog/2024-04-20-halp-gemlog.gmi</id><summary type="html">After a few hours of work - spread out over many weeks due to other commitments! - my Gemlog is now statically generated by a simple set of Perl scripts called Halp. => https://git.sr.ht/~duncan-bayne/halp Halp It's not that I disliked Kiln, far from it - I think Kiln is a great choice when starting out with a Gemini capsule. I went through my reasoning on my blog at the time (I migrated my Web content onto Halp first). I'll reproduce it here, as none of it has changed. The choice to write my own Web and Gemini software might be seen as a little strange, as might my choice of language (especially given my love of Common Lisp). As I explain in the Halp README, I have several goals for the project:
IMAPAccount foo
Host mail.messagingengine.com
User foo@bayne.id.au
Pass REDACTED
Port 993
SSLType IMAPS
AuthMechs Login
IMAPStore foo-remote
Account foo
MaildirStore foo-local
SubFolders Legacy
Path ~/email/foo/
Inbox ~/email/foo/INBOX/
Channel foo
Master :foo-remote:
Slave :foo-local:
Patterns * INBOX
Create Slave
Sync All
Expunge Both
SyncState *
Having synchronised the mail with:
$ mbsync -c ~/email/foo foo
... the next step was to find the emails I was interested in. This is where the email indexing tool mu came in. I’ve already initialised an email index in ~/email/ with mu init --maildir=~/email as part of my regular email setup, so all I needed to do was to find the files was to use mu along with GNU Parallel:
$ mkdir ~/tmp/mails
$ mu find --skip-dups to:REDACTED or subject:REDACTED --fields=l | parallel -N 1 cp {1} ~/tmp/mails
... where:
--fields=l
... just returns the full path to the email in question. The next step was to install an email pretty-printer. I chose to use Nick Russler’s email-to-pdf-converter tool, which I installed along with wkhtmltopdf. This produces pleasant-looking output out of the box, e.g.:
From: Duncan Bayne <duncan@bayne.id.au>
To: dhgbayne@fastmail.fm
Subject: Test 3
Date: Wed, 09 Jun 2021 16:07:32 +1000
Testing, testing, one two three.
--
Duncan Bayne
+61 420 817 082 | https://duncan.bayne.id.au/
I usually check my mail every 24 - 48 hours. If there's something
urgent going on, please send me an SMS or call me.
... becomes: => /.static/images/rendered-email.png Email rendered into PDF Pretty-printing the emails in PDF format was then just a matter of:
$ cd ~/tmp/mails
$ find . -type f -exec java -jar ~/bin/emailconverter-2.5.3-all.jar {} \;
Finally, then, all that remained was the fourth and final step: sending the PDFs to the printer:
$ find . -type f -name '*.pdf' -exec lpr {} \;
The end result is a stack of email hard copies, and a slightly more insistent low toner warning on my printer :) Thanks to: => https://commons.wikimedia.org/wiki/File:UNIX-Licence-Plate.JPG Wikimedia Commons for the Unix licence plate photo => https://stackoverflow.com/users/15168/jonathan-leffler Jonathan Leffler for the suggestion to use GNU Parallel.</summary></entry><entry><title>COVID again</title><link href="gemini://duncan.bayne.id.au/gemlog/2022-12-14-covid-again.gmi"/><updated>2024-03-27T23:06:32+11:00</updated><author><name></name><email></email></author><id>gemini://duncan.bayne.id.au/gemlog/2022-12-14-covid-again.gmi</id><summary type="html">Well, this is annoying. Back to bed rest with COVID-19, in 2022 (nearly 2023). Fortunately the symptoms are a lot milder, so I should be back to work (and play) tomorrow - although I'll be isolating until the weekend. It's no longer a legal recommendation but I figure it's at least polite. Rant time: so many sites and apps I use nowadays are turning into train wrecks. => https://akashicseer.com/rants/why-amazon-search-sucks-and-how-it-can-be-fixed/ A somewhat unhinged rant about how bad Amazon search is => https://community.spotify.com/t5/Subscriptions/Serving-ads-to-Premium-customers/m-p/5460621#M137335 Spotify keeps trying to foist ads on Premium customers => https://www.productreview.com.au/reviews/aeaa4620-ca3c-48c4-a390-fc39d4b8ca7a Gumtree giving not one single, solitary, fuck about spam ads => https://www.reddit.com/r/ecovacs/comments/whjsul/are_ads_when_opening_the_app_new/ Ecovacs introduces ads into their Android app (I should note that Ecovacs is a Bad Companyâ„¢. They have an awful privacy policy, and steadfastly refuse to release APIs (or even document their existing APIs) for interop with things like Home Assistant. When my fleet of DeeBots finally dies I'll be replacing them with something else). => https://www.reddit.com/r/ios/comments/w27x6j/uber_does_not_respect_notification_preferences/ Uber enabling push ads again, and making it hard to disable them So it's delightful to switch to one that isn't :) A while ago I finished migrating all my projects to Sourcehut: => https://git.sr.ht/~duncan-bayne/ My Sourcehut account ... and I'm loving it. Fast, simple, ad-free, and works on even simple Web browsers (e.g. Netsurf on Plan 9).</summary></entry><entry><title>Back to Android (for the time being)</title><link href="gemini://duncan.bayne.id.au/gemlog/2022-10-10-back-to-android.gmi"/><updated>2024-03-27T23:06:32+11:00</updated><author><name></name><email></email></author><id>gemini://duncan.bayne.id.au/gemlog/2022-10-10-back-to-android.gmi</id><summary type="html">## what about the PinePhone? Sadly my PinePhone experiment has - after several months of running one as a daily driver - come to an end for now and I'm back on my Pixel 2. => /.static/images/android-screenshot.jpg Screenshot of LineageOS 19 lockscreen As much as I love the PinePhone (and I really do; I've really developed quite an emotional bias towards it), I've chosen to swap back to my Pixel 2 for a few key reasons: ## poor stability Even running on the latest Manjaro build, as of September 2019, the phone is just ... crashy. Like, the UI goes away (black screen instead of a lock screen), then a while later the phone reboots. This happens several times a day. In addition, it'll crash while taking or making calls. I'm not quite sure what's happening here but when it does, the usual effect is that the caller can't hear my audio, and then the phone reboots after the call. The most recent failure here was a combination of things. Firstly, the phone wasn't charging properly (or picking up the existence of the external keyboard) because, I think, one or more of the GPIO pins weren't making contact properly. If I flexed the phone in the keyboard case, it detected the keyboard momentarily and started charging. Secondly, because it wasn't charging (when I thought it was), it shut down spontaneously just when I needed it (in the immediate aftermath of a minor vehicle accident). I opened my phone to take down the other driver's details ... and it powered off. Argh! Thirdly, and not for the first time, the shutdown left the filesystem in a bad state. Nothing I couldn't fix by popping the microSD card, inserting it into my ThinkPad, and running fsck on it. But ... not great when I'm stuck by the side of the road needing a working phone. If it were just me, fine - I could deal with all of that. But it's not just me, I need a phone that actually works so I'm reachable when I'm on the support roster at work, and when I need to call the school from the side of the road after an accident. ## inadequate camera I tried carrying a Canon SX610HS point and shoot with me as a substitute for the PinePhone camera, and the Canon is *better*, but ... it's still nowhere near as good as even an obsolete smartphone camera like that in the Pixel 2. I'd be okay with this, but it turns out I'm really missing being able to take easy high-quality snapshots of the kids. => /.static/images/fyfe-pinephone.jpg A photo of our rescue greyhound, Fyfe, using the PinePhone. => /.static/images/fyfe-pixel-2.jpg A photo of Fyfe, taken almost at the same time, using the Pixel 2. Note that this only works as well as it does because Fyfe is, according to greyhound custom, largely immobile. (For athletic dogs they're astoundingly idle - they nap through the day more like cats than dogs). The PinePhone camera is almost completely incapable of dealing with low light or motion, the latter of which is an exceptionally common situation when photographing young children. Also, there's no video recording capability at all. (As an aside, it's remarkable to me how much better the Pixel 2's 12 megapixel camera is than the 20 megapixel Canon SX610HS. Subjectively I find the photos from the Pixel 2 clearer and more detailed, and the actual experience of using the camera is far better with the smartphone. Software has, indeed, eaten the world.) ## ... but everything else somewhat works Other than those two issues, though, the PinePhone *is* a usable daily driver! If I didn't need a highly reliable phone and have kids I wanted to remember when I'm old and senile, I'd still be running it. The basics work as you'd expect:
set -euxo pipefail
shellcheck "$0"
sudo service avahi-daemon stop || echo "Maybe it's already stopped ..."
spotify-qt &
spotifyd --config-path /home/duncan/personal-git/conf/spotify/spotifyd.conf --no-daemon
sudo service avahi-daemon start
It uses a simple config that decrypts credentials using GPG ...
[global]
username_cmd = "gpg --decrypt /home/duncan/personal-git/conf/spotify/username.gpg 2>/dev/null"
password_cmd = "gpg --decrypt /home/duncan/personal-git/conf/spotify/password.gpg 2>/dev/null"
backend = "portaudio"
And now I can have music wherever I go :) So long as I keep paying my Spotify family account bill, that is, and as long as I have a decent network connection. I'm okay with that, though - as much as pirating music is more convenient, I prefer mechanisms that actually get money into artists' hands. </summary></entry><entry><title>My Gemlog is now built with Kiln</title><link href="gemini://duncan.bayne.id.au/gemlog/2022-09-24-kiln-gemlog.gmi"/><updated>2024-03-27T23:06:32+11:00</updated><author><name></name><email></email></author><id>gemini://duncan.bayne.id.au/gemlog/2022-09-24-kiln-gemlog.gmi</id><summary type="html">After a successful evening's messing about, this Gemlog is now built using kiln 🎉 => https://git.sr.ht/~adnano/kiln A simple static site generator Here's how it looks: => /.static/images/gemlog-deedum-pixel2.jpg Gemlog in Deedum on a Pixel 2 => /.static/images/gemlog-lagrange-pinephone.jpg Gemlog in Lagrange on a PinePhone => /.static/images/gemlog-emacs-freebsd.png Gemlog in Emacs on my FreeBSD laptop Along the way I found an interesting bug in kiln; after accidentally creating a broken symlink (by moving a file that happened to be in git annex), kiln was reporting that my entire static directory was missing. This turns out to be a bug. No disrespect to the author of kiln, because I've seen a bazillion variants on this bug over the years: reading more into an error than you can possibly know at the time. In this *particular* case, assuming that a file not found error is always caused by a missing static directory 😇
$ tree
.
├── config.toml
├── content
│ └── _index.gmi
├── public
│ ├── atom.xml
│ └── index.gmi
├── static
│ └── no-such-file -> ../no-such-file
└── templates
└── _default
├── atom.xml
├── index.gmi
└── page.gmi
5 directories, 8 files
$ kiln build
2022/09/24 12:22:36 static_dir 'static' does not exist
So I got to learn how to use the (nifty!) patchset creation UI in sourcehut, and submitted my first (trivial!) bugfix along the way: => https://lists.sr.ht/~adnano/kiln-devel/%3C166398735847.26324.1348945356391968373-0%40git.sr.ht%3E [PATCH kiln] Display detailed error message on static build failure</summary></entry><entry><title>Replacing an X250 trackpad destroyed by a Slurpee</title><link href="gemini://duncan.bayne.id.au/gemlog/2022-07-18-trackpad-replacement.gmi"/><updated>2024-03-27T23:06:32+11:00</updated><author><name></name><email></email></author><id>gemini://duncan.bayne.id.au/gemlog/2022-07-18-trackpad-replacement.gmi</id><summary type="html">Our family has a rule (established by precedent) that when you turn three years old, you get your first laptop. Currently that means a refurbished ex-corporate Lenovo ThinkPad X250, running Ubuntu GNU/Linux. Recently our daughter accidentally poured a raspberry flavoured[1] Slurpee into hers. I took the usual steps (carefully drying it out) but the trackpad was ruined, gummed up and shorted out with condensed sugar water. It was awful to use (the buttons literally felt sticky), and it wasn't registering clicks. My attempt to clean out the trackpad with isopropanol and compressed air just blasted alcoholic raspberry syrup everywhere. Replacement time! => /.static/images/x250-trackpad-being-removed.jpg The X250 opened, both batteries and SSD removed, ready for trackpad removal. => /.static/images/x250-trackpad-destroyed-by-slurpee.jpg A closeup of the old trackpad, destroyed by a Slurpee. => /.static/images/x250-trackpad-replaced.jpg Reassembling the X250 with the new trackpad fitted. It was pretty straightforward.
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⣶⡟⢉⠁⠈⡻⠘⠏⠀⠹⢛⣷⠄⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣰⡞⢿⡄⠀⢻⡴⣇⣀⣷⣴⢄⢀⡖⡾⠁⢀⣼⢛⣦⠀⠀⠀⠀⠀
⠀⠀⠀⣠⣄⠈⠙⢦⣿⣶⠞⠋⠉⠁⣀⣄⡀⠉⠙⠻⢦⣾⣵⠟⠉⢠⣄⠀⠀⠀
⠀⠀⢰⣯⣙⠷⣄⡴⠋⣤⣤⣤⠀⢸⡏⢉⣿⠀⣠⡤⣤⡘⢷⣤⡴⣛⣹⣧⠀⠀
⠀⢀⣄⠀⠉⢛⡿⠁⠘⣧⣀⣼⠃⠀⠙⠛⠁⠀⢿⣄⣸⠇⠀⢹⡟⠉⠁⢀⣄⠀
⠀⡾⡙⣛⣳⣾⠁⠀⡀⣀⠉⠀⠀⠀⣀⣀⠀⠀⠀⠉⢁⡀⡀⠀⢿⣶⣛⣋⣻⠀
⠀⠉⠈⠉⠈⡹⠀⠸⠁⠙⣷⠀⠀⢸⡏⠉⣷⠀⠀⢰⠉⠈⣣⠀⠸⡉⠉⠉⠉⠀
⠀⣿⠛⣛⣻⣿⠀⠈⠛⠙⠁⠀⠀⠈⠛⠛⠁⠀⠀⠀⠙⠛⠉⠀⣼⣽⣛⡛⣹⠀
⠀⠘⠟⠉⠁⣘⣧⠀⢀⡶⠛⢶⡂⠀⢀⣀⠀⠀⣴⠟⢳⡄⠀⢰⣏⠀⠉⠙⠛⠀
⠀⠀⢰⡶⢛⣭⠟⢧⡈⠷⠶⠾⠁⢰⡏⠙⣷⠀⠻⢦⠾⢃⣴⠿⢯⣛⢳⡶⠀⠀
⠀⠀⠀⠻⠟⠁⢀⡴⣿⢶⣄⡀⠀⠈⠛⠚⠋⠀⢀⣠⡴⣾⢷⣄⠀⠹⠟⠁⠀⠀
⠀⠀⠀⠀⠀⢺⣏⣴⠏⠀⣸⠟⠝⠓⠶⠶⠖⠛⠛⣯⠀⠘⢷⣙⡿⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠈⠉⠀⣶⣏⣬⠁⠀⣥⢠⠆⠀⣰⣘⣷⠄⠈⠉⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠀⠘⠳⠾⠛⠀⠉⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀
monkaW
So progress on all of this has been made in tiny fits and starts, in the few windows of energy I have between general house maintenance and sprog care (three kids at home for the holidays). Actually, speaking of sprogs, only one is testing positive to COVID-19 (well, SARS-CoV-2 antibodies, but). I suspect they all have it though, based on symptoms. I am very, very, appreciative of having sick / carer's leave right now. Contracting for years has left me feeling a bit emotionally weird about taking sick leave - fortunately having SARS-CoV-2 cheerfully returning every one of my injuries from the past decade to hurting is helping me get over that ;) But not only do I get sick leave right now, I've been contacted by several of my colleagues to check in on me, and ensure that I'm *actually* resting (not something I'm known for doing well).
| \ \ | |/ /
| |\ `' ' /
| ;'aorta \ / , pulmonary
| ; _, | / / , arteries
superior | | ( `-.;_,-' '-' ,
vena cava | `, `-._ _,-'_
|,-`. `.) ,<_,-'_, pulmonary
,' `. / ,' `;-' _, veins
; `./ /`, \-'
| right / | ;\ |\
| atrium ;_,._|_, `, ' \
| \ \ ` `,
` __ ` \ left ;,
\ ,' ` \, ventricle
\_( ;, ;;
| \ `;, ;;
inferior | |`. `;;, ;'
vena cava | | `-. ;;;;,;'
| | |`-.._ ,;;;;;'
| | | | ``';;;' FL
aorta
____
From: aa906@FreeNet.Carleton.CA (Steve Wendt)
(not the ASCII art heart I was looking for; but very much the one it turns out I wanted). /me departs to cook dinner, feeling weirdly like he's been blogging in the early 2000s </summary></entry><entry><title>First post</title><link href="gemini://duncan.bayne.id.au/gemlog/2022-06-21-first-post.gmi"/><updated>2024-03-27T23:06:32+11:00</updated><author><name></name><email></email></author><id>gemini://duncan.bayne.id.au/gemlog/2022-06-21-first-post.gmi</id><summary type="html">As seems to be tradition, this is my first Gemini capsule post! According to Wolfram Alpha, it's been 5 years, 7 months, and 20 days since the first post on my old Weblog. I looked but couldn't find anything particularly interesting that happened on 2016-10-01, so instead, here's some ASCII art of fireworks over Toronto :)
.''.
.''. . *''* :_\/_: .
:_\/_: _\(/_ .:.*_\/_* : /\ : .'.:.'.
.''.: /\ : /)\ ':'* /\ * : '..'. -=:o:=-
:_\/_:'.:::. | ' *''* * '.\'/.'_\(/_'.':'.'
: /\ : ::::: = *_\/_* -= o =- /)\ ' *
'..' ':::' === * /\ * .'/.\'. ' ._____
* | *..* : |. |' .---"|
* | _ .--'| || | _| |
* | .-'| __ | | | || |
.-----. | |' | || | | | | | || |
___' ' /"\ | '-."". '-' '-.' '` |____
jgs~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
& ~-~-~-~-~-~-~-~-~-~ /|
ejm97 ) ~-~-~-~-~-~-~-~ /|~ /_|\
_-H-__ -~-~-~-~-~-~ /_|\ -~======-~
~-\XXXXXXXXXX/~ ~-~-~-~ /__|_\ ~-~-~-~
~-~-~-~-~-~ ~-~~-~-~-~-~ ======== ~-~-~-~
</summary></entry></feed>