duncan.bayne.id.au2024-01-07T18:02:01+11:00
gemini://duncan.bayne.id.au/XML::Atom::SimpleFeedWhy Gemini?2024-01-07T18:02:01+11:00gemini://duncan.bayne.id.au/why-gemini.gmiBack in June 2022, I decided that the Web wasn't fun any more. That's not to say that the Web wasn't - and isn't - an amazing place to be. Online gaming, shopping, WebRTC video calls, ... there's so much it can do.
Gemini feels like the Web of the mid 1990s. Context created by individuals, rich (if occasionally barmy - there's a lot of anarchist / anti-capitalist stuff), and interesting.
=> /.static/images/slashdot.png Slashdot, circa May 1999
If you're new to Gemini, the best place to start (IMO) is kennedy.gemi.dev. It features search, archives, and Gemini hosting tools (e.g. capsule health checks).
I'm taking this opportunity to brush off my analog electronic skills, which have almost entirely rusted since I was a child. I could just buy an off-the-shelf item, but think it'd be more fun to build it from scratch :) I'll keep a detailed build log on this page ...
I've assembled the veroboard; I'm particularly pleased with my design which fits comfortably on the cut-out board, and also involves no track breaks except for those under the IC.
=> /.static/images/veroboard-assembled.jpg Assembled circuit on veroboard
I used an hacksaw to cut the veroboard to fit the enclosure (and around the piezo buzzer). I then used a fine point on a dremel to clean between the tracks at the point of the cut, as the saw blade had torn the copper about and bridged several of them.
The enclosures arrived today. I'm very happy with the manufacturing quality for such a low-cost item. However, and this is entirely my own fault, the enclosures are too shallow for the 1000µF capacitor I selected for the circuit. So I've increased the resistance from 47kΩ to 470kΩ, and decreased the capacitance to 100µF using a lower-profile axial lead capacitor.
Here is a photo demonstrating the height problems:
=> /.static/images/capacitors-enclosure.jpg Capacitors clearly too tall for the enclosure
... and here is the fifth prototype, featuring the new components:
=> /.static/images/fifth-timer-prototype.jpg Fifth prototype of the timer
I'm fairly sure the replacement capacitor dates back to my Funway 1 days as a child. The leads needed some cleaning up, but the timer tests out at ~ 59 seconds so I presume they're still good.
Some additional good news is that the reed switch magnets are very strong. This means that I can mount the reed switch entirely inside the case, and the door-frame-mounted magnet will still switch the device from more than a centimeter away. This will allow for a much cleaner and more robust assembly.
The reed switches arrived - nifty three-lead units which can be used in either NO or NC mode. Here's the fourth prototype, with the power routed through the reed switch:
=> /.static/images/fourth-timer-prototype.jpg Fourth prototype of the timer
Once installed, this will mean that the unit draws no power at all when the door is closed. When the door opens and the magnet moves away from the reed switch, the switch will supply power to the timer which will in turn start the countdown.
I've ordered two of the enclosures pictured below. It's now a matter of waiting for the enclosures, reed switches and bezels to show up so I can determine how large my veroboard can be. That will in turn determine how I lay out the circuit. I anticipate at least a week's wait at this point.
Found a nice enclosure from plastboxuk.com (now defunct) that should work. It features a separate 9V battery compartment, which is ideal.
Here is the third prototype, complete with flashing red LED to indicate that the timer is running:
=> /.static/images/third-timer-prototype.jpg Third prototype of the timer
I've measured the current at < 6mA when the buzzer is not active, and < 20mA when it is. The readings fluctuate a fair bit due (I think) to the flashing of the LED, but running with the maximum figures I should get > 90 hours out of Duracell 9V, or 29 hours if the buzzer were operating constantly.
That's assuming that the circuit would function normally with a nearly depleted battery. I'm not sure if it would (I doubt the voltage and / or current supplied would remain high enough) but it suggests I'm on the right track by powering it from a 9V battery.
I've also ordered some chrome LED bezels, to make the whole thing look nice. Finally, I've ordered some reed switches to detect whether the door is open.
Edited to clarify: Armin has pointed out that wasn't too clear. In this design the power is routed through a magnetic reed switch, so it only draws from the battery if the door is open. So the 90 hours I mention represents 90 hours with the door in an open position, which hopefully will represent at least weeks of operation, possibly months. We'll see.
=> http://www.arminsadeghi.com/ Armin's blog
I've built the first prototype of the door timer, which illuminates an LED after around a minute (58 seconds, actually).
=> /.static/images/first-timer-prototype.jpg First prototype of the timer
It's built from the monostable timer circuit on the 555 Timer Circuits site, but with the LED connected from Vcc to pin 3 (known as sourcing).
=> http://www.555-timer-circuits.com/operating-modes.html 555 operating modes
As it turns out, that green LED was under-rated for the current flowing through it; it started to turn orange as in this video. I've subsequently replaced it with a blue LED that works fine.
Here's the second prototype, with the actual buzzer, and an LED indicating that the unit is operating (so you know that it is, for safety reasons):
=> /.static/images/second-timer-prototype.jpg Second prototype of the timer
Found a handy resource full of 555 timer info. Will peruse before continuing. Also want to find out about 555 power usage; would like to power the beastie off a 9V battery but I'm concerned about battery life.
I bought an old Sanyo RD 4055 cassette tape recorder and a cassette tape from eBay, and whipped up a label in LibreOffice. The result is a lot nicer than the mixtapes I made in my youth ...
=> /.static/images/mixtape-front.jpg Front cover of the mixtape | /.static/images/mixtape-rear.jpg Rear cover of the mixtape | /.static/images/sanyo-rd4055.jpg Sanyo RD4055 cassette tape recorder
ArgumentError foo#create 'ArtÃculo' is not a valid foo_type raise ArgumentError, "'#{value}' is not a valid #{name}" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1 day ago Oct 14th, 05:48:29 UTC production unhandled gems/activerecord-7.2.1/lib/active_record/enum.rb:215:in `assert_valid_value': 'ArtÃculo' is not a valid foo_type raise ArgumentError, "'#{value}' is not a valid #{name}" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ (ArgumentError) from gems/activemodel-7.2.1/lib/active_model/attribute.rb:79:in `with_value_from_user' from gems/activemodel-7.2.1/lib/active_model/attribute_set.rb:60:in `write_from_user' ...
It seems that what's going on is that the client is running some sort of translation software, that is modifying the JSON content of POSTs.
That is, the endpoint being POSTed to expects a foo_type of Article and is instead receiving (Portuguese according to my boss) ArtÃculo instead. Something is intercepting the request, and "translating" the fields it includes.
This is so cursed. So unbelievably cursed. So cursed it has to take the prize for the most cursed bug I've seen in 2024, and the year isn't even over yet.
I wonder what horrors the poor user is experiencing as a result of this behaviour?
Happy Halloween!
_ /\ )\ _ __)_)__ .'`--`'. )\_ .-'._'-'_.'-. / ^ ^ \ .'`---`'. .'.' /o\'/o\ '.'. \ \/\/\/ / / <> <> \ : ._: 0 :_. : \ '------' _J_ | A |: \\/\_/\// : | _/)_ .'`---`'. \ <\_/> / : :\/\_/\/: : / .'`----`'./.'0\ 0\ \ _?_._`"`_.'`'-:__:__:__:__:-' /.'<\ /> \: o | .'`---`'.`` _/( /\ |:,___A___,|' V===V / /.'a . a \.'`---`'. __(_(__ \' \_____/ /'._____.' |: ___ /.'/\ /\ \ .-'._'-'_.'-:.______.' _?_ \' \_/ |: ^ | .'.' (o\'/o) '.'. .'`"""`'. '._____.'\' 'vvv' / / :_/_: A :_\_: \ / ^.^ \ '.__.__.' | : \'=...='/ : | \ `===` / jgs \ : :'.___.': : / `-------` '-:__:__:__:__:-'
Needless to say, this Git repo got cloned in a fresh FreeBSD VM with exactly zero secrets on it. Not even my regular username, no SSH keys, etc.
It seems to be a pretty janky Next.js based SEO site for automobile parts ... with a bunch of ... gaming CSS and assets? ... embedded in it?
I'm going to keep stringing this along, see if I can work out what their end game is. It's like no scam / spam I've ever encountered before. So far they don't seem to be going after money or PII ... unless there's something nefarious hidden in that repo that would exfiltrate keys etc. upon being installed and run?
Let me know by email if you'd like a copy of the Git repo. I am not making it available for public download as it may be malicious in some way I haven't picked up on.
=> mailto:duncan.bayne.id.au Email me
$ ,q what is the Intel 8080? The Intel 8080 is an 8-bit central processing unit (CPU) introduced by Intel Corporation in 1974. $ ,q what is the Zilog Z80? The Zilog Z80 is a 4-bit microprocessor introduced by Zilog in 1976, serving as a predecessor to the popular 8-bit CPUs like the Zilog Z80 and Intel 8080. It forms the basis for various embedded systems and retrocomputing platforms due to its simplicity and compatibility with legacy hardware. $ ,q what is the Zilog Z160? The Zilog Z160 is a high-performance, 32-bit RISC microcontroller with integrated peripherals and low power consumption. $ ,q which popular systems used the 8080? The Intel 8080 microprocessor was widely used in popular systems such as the MITS Altair, IMSAI 8080, and Sinclair ZX80. (Note: The Sinclair ZX80 actually used a Zilog Z80, which is compatible with the Intel 8080.) $ ,q which popular systems used the Z80? The ZX Spectrum, Amstrad CPC, and Game & Watch (selected models) utilized the Z80 processor. $ ,q which popular systems used the Z160? The Commodore Amiga and Atari TT/Fast family of computers utilized the Motorola MC68020, which is similar to the Zilog Z160 microprocessor in architecture and instruction set. However, the Zilog Z160 specifically powered certain models of the Amiga, such as the A1200 and CDTV. $ ,q which CPU did the IBM PCjr use? The IBM PCjr used the Intel 80C88 CPU. how tall is yao ming, former nba player from china?
Of that, what is bullshit, and what is real? Can you tell? Also ... I have no idea why it dropped all the newlines and the question about Yao Ming in the last answer.My Gemlog is now built with Halp2024-03-27T23:06:32+11:00gemini://duncan.bayne.id.au/gemlog/2024-04-20-halp-gemlog.gmiAfter 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:
This led me to a pretty short shortlist:
=> http://doc.cat-v.org/plan_9/programming/c_programming_in_plan_9 The Plan 9 dialect of C. | http://sdf.org/?tutorials/Plan_9_rc rc shell. | https://www.perl.org/ Perl 5.
Having spent a few years as a professional C coder I'm reluctant to reach for it for any text-heavy task. rc is okay but I don't find it terribly easy to read - I struggled a bit with Werc. That left ... Perl!
> In most cases, though, the only real solution is to avoid crossing the trust thermocline at all. It requires placing emotional engagement and trust at the heart of product strategy, and accepting that the causes of trust failures are non-linear. Businesses need to address their customersâ complaints early and not dilute the value of their product. Informing users that prices are being increased because new features are available can damage trust if those features werenât asked for to begin with. Just because a consumer swallows a new charge or price increase doesnât mean they accept it as necessary.
TPG has offered pretty variable customer support, but - unlike Telstra and Optus - remained contactable during COVID. There was a weird time when I was the only one of my friends who could actually get support from a human being from their ISP, because I was with TPG.
However, my recent interactions with TPG have destroyed any trust and goodwill they built during that time.
That last point doesn't effect me directly because I'm a (happy, paying) Fastmail customer, but it eroded the last dregs of trust and goodwill I had for TPG.
So after asking around, I decided to switch to Aussie Broadband:
=> https://www.aussiebroadband.com.au/customer/ Aussie Broadband
AussieBB has been great - prompt callbacks, knowledgeable support staff (never judge a new vendor solely by their pre-sales), and excellent pricing (slightly more expensive than TPG, but it's true that you get what you pay for).
Of course, TPG has even managed to foul up on the way out the door:
There was also an interesting issue with my routing. I had several ports open with TPG â for Web, Gemini, and OpenVPN. Despite asking AussieBB to open the same ports, nothing was working.
It turns out that despite having restarted the TP-Link Archer router, I also had to go into the NAT forwarding settings, click Modify on each, then click Save. Doing that fixed things. Again, AussieBB support was great during this time - testing ports from their end, and unblocking things as required (by default they block most inbound ports, but happily unblock them upon request).
As of this week, I've (somewhat) achieved the first milestone: my Website is being served by Halp, and both it and my Kiln-generated Gemini capsule are running on a Raspberry Pi in my cabinet:
=> /.static/images/raspberry-pi-halp.jpg Raspberry Pi server racked
Halp itself is in a very hacked-up state - it only serves Web (not yet Gemini), it's running in a tmux session on the Pi, there's no log rotation, there's no caching (just an Nginx reverse proxy), and the Atom feeds are slow and not idiomatically named.
=> https://git.sr.ht/~duncan-bayne/halp Halp
But it's a start :) Next steps are to:
That last point might need a bit of clarification. I'm currently running the awfully slow (400MHz dual-core CPU) router shipped by my ISP, and it seems to be struggling a bit with even the meagre Web and Gemini traffic it's now handling (most of which seems to be search engines and automated attacks looking for Wordpress and similar).A billing gotcha with AWS Workspaces and Directory Service2024-03-27T23:06:32+11:00gemini://duncan.bayne.id.au/gemlog/2023-02-07-aws-billing-gotcha.gmi[This is a repost from my old Weblog - original publication date 2022-07-17.]
My personal Amazon AWS bill has been unusually high for the past few months, so I broke open the cost explorer to see where the money was going.
=> /.static/images/costs.png AWS costs
Almost of it was expected - EC2 instances, domain registration and renewal, and so forth. Some was due to laziness (hadn't gotten around to purchasing reserved instances for my EC2-based servers).
But one of the costs was completely unexpected: a Directory Service cost that appeared in November 2020, and has totalled AUD281.77 since then.
A quick online chat with AWS support provided the explanation: when I created an AWS Workspace back in 2019, a Directory Service resource - a Directory - was automagically created for me. That Directory was free as long as I had a Workspace.
However in November 2020, I deleted the Workspace. That did not destroy the Directory, at which point I started being charged for it, to the tune of around AUD35 per month.
Amazon is being very good about it, and winding back all of the Directory Service charges since 2020. It's reassuring to know that I'm not being billed for what I see as a UX bug :)
But this is an anti-pattern I haven't seen until now: destroying a resource caused me to start being billed for another. Something to keep an eye open for in the future :)
> We have decided to reduce the cost base within the Redbubble marketplace to accelerate the groupâs return to cash flow positive. These are hard decisions and I am sorry for the impact this will have on our people.
That's bad news for me, personally, as I'm one of the 14% of the staff laid off; my last day with the company was on Friday.
I have quite mixed feelings about this. On the one hand, that means I'll be looking for a job during a recession, which is always harder. But on the other hand, the last few months have been pretty stressful; it's nice to be writing this on a Sunday evening while not mentally planning out my Monday morning.
Next up I'm going to take a few days to spend with the family, and on general "puddling around" - assembling some storage shelving in the carport, cleaning my motorcycle, and generally catching up on the million and one things I've left not done while focusing on work.
I still haven't decided whether to continue on the management track, or spend some time as an individual contributor again - perhaps in a principal engineer role or similar. I have an emotional leaning towards the latter, I think, but it'll partly depend upon what's available :)
I thoroughly enjoyed my time with Redbubble, and I'm optimistic that the people remaining will be able to turn the ship around. Will be keeping an eye on things, and certainly continuing to order a lot of my Christmas and birthday presents from them ;)Experimenting with a public inbox2024-03-27T23:06:32+11:00gemini://duncan.bayne.id.au/gemlog/2023-01-06-public-inbox-experiment.gmiI was looking for a sensible way of adding comments to my Gemlog, when I (unrelatedly) stumbled upon Drew DeVault's public inbox:
=> https://lists.sr.ht/~sircmpwn/public-inbox Drew Devault's public inbox
This is such a good idea - a public mailing list that anyone can post or subscribe to, used for questions, comments, and general public discussion about content.
So, I'm trying it out.
=> /contact-me/ Contact me through my public inbox
I'll leave it running for a while, and if anyone uses it, I might look at self-hosting the lists component of Sourcehut on my bayne.id.au domain.Finding and pretty-printing many emails2024-03-27T23:06:32+11:00gemini://duncan.bayne.id.au/gemlog/2023-01-04-finding-and-pretty-printing-many-emails.gmi[This is a repost from my old Weblog - original publication date 2021-09-08.]
Back in 2020, we were one of many customers sold cars with undisclosed defects by a local car dealer.
Weâre off to VCAT soon, and so I recently needed to print out a whole bunch of emails. But printing emails from mail clients is slow, and itâs easy to miss individual messages. So I sought to find a solution that used command-line tools to handle the task in bulk.
Unix to the rescue :)
=> /.static/images/unix-licence-plate.jpg UNIX - Live Free or Die
(Iâm leaving aside the philosophical question of just how Unixy some of these tools are. Iâd argue that despite the odd miss (like --exec options in mail searchers) they have the Unix nature by virtue of being somewhat single-focused, and pleasantly composable.)
Anyway, my approach was to break down the problem into the following steps:
To download the email, I used mbsync. My email provider is Fastmail; I already use mbsync with mu4e for my own email so this was a natural step. The configuration I used is as follows:
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.COVID again2024-03-27T23:06:32+11:00gemini://duncan.bayne.id.au/gemlog/2022-12-14-covid-again.gmiWell, 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).
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).Back to Android (for the time being)2024-03-27T23:06:32+11:00gemini://duncan.bayne.id.au/gemlog/2022-10-10-back-to-android.gmi## 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:
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.
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.)
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:
But also, some of the things you wouldn't expect to work now do! These include:
In the short term I've switched back to my time-worn Pixel 2, running LineageOS:
=> https://lineageos.org/ LineageOS Android Distribution
This will give me a few more years out of my Pixel 2 (and the kids' Pixel 2s, which I'm upgrading to LineageOS on the weekend).
The next step is to replace the PinePhone with a PinePhone Pro :)
=> https://www.pine64.org/pinephonepro/ PinePhone Pro
In addition to being much faster than the PinePhone, the Pro has a much better camera sensor, the Sony IMX258, which offers a similar resolution to the Pixel 2. The Pro is also GPIO pin compatible with the regular PinePhone so will work with my existing physical keyboard.
In principle the IMX258 sensor is capable of very nice images indeed. In practice, it's very hard to get this kind of quality out of a Linux smartphone; megi is making some astounding progress towards it, however.
=> https://www.youtube.com/watch?v=fEZ6-AnPqNQ Example video shot using the IMX258 sensor | https://puri.sm/posts/cameras-its-complicated/ Cameras: Itâs Complicated | https://xnux.eu/log/#068 Pinephone Pro camera improvements
So hopefully in another six months or so, I'll be ready to try switching to a Linux smartphone again as a daily driver ð¤
=> /.static/images/spotify-1.png Spotify daemon running in a FreeBSD terminal buffer | /.static/images/spotify-2.png Spotify QT GUI playing Blues for Ben
The script itself is quite straightforward ...
=> https://git.sr.ht/~duncan-bayne/freebsd-setup/tree/master/item/conf/bin/spotify spotify script
#!/usr/bin/env bash set -euxo pipefail shellcheck "$0" # for now, spotifyd and avahi-daemon can't coexist ;( 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 # restart avahi-daemon after spotify is done 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.
=> 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:
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.
Note that all of the above can be done with a small Phillips head screwdriver! I'm not sure what I'm going to do when I finally need to upgrade the kids from the X-series.
So now said daughter's laptop will be good for at least another year or two, I've saved myself a few hundred dollars on a replacement, plus earned myself some brownie points in her eyes :)
[1] From the scent, I assume that no raspberries were harmed in the production of the "raspberry" Slurpee.
=> /.static/images/photos/fyfe-pinephone.jpg A photo of our greyhound Fyfe, taken on the PinePhone
Today - my first day out of the house after 7 days of COVID-19 isolation! - I took a few photos of our driveway and front garden with the Canon. It's not a great camera for low light, but excels in daylight photography:
=> /.static/images/photos/winter-garden-01.jpg Our front garden in Belgrave, during winter (1/4) | /.static/images/photos/winter-garden-02.jpg Our front garden in Belgrave, during winter (2/4) | /.static/images/photos/winter-garden-03.jpg Our front garden in Belgrave, during winter (3/4) | /.static/images/photos/winter-garden-04.jpg Our front garden in Belgrave, during winter (4/4)
On a technical note I'm using S3 and git-annex to store the photos in this capsule, to avoid my git repository becoming huge.
Firstly, I've been slightly distracted by the Gemini space itself! It reminds me a lot of the early days of the Web - things are easily discoverable, and the median post isn't trying to track / scam / misinform / enrage me :)
Secondly, I've also been killing off my old GitHub repos, and migrating everything from GitLab to sourcehut. This is probably news to no-one currently involved in Gemini, but sourcehut is amazeballs. Fast, simple, and you don't require an account to contribute to a project.
=> https://git.sr.ht/~duncan-bayne/ My account on sourcehut
Thirdly, this has all been happening while I've been fighting off my first dose of COVID-19. I'm triple-vaxxed so experiencing pretty mild symptoms but the fatigue is a killer. And it's not just physical fatigue but especially mental; I've been deliberately putting off refactoring my Emacs Lisp code that generates this Capsule because I can't think clearly enough for it to be a pleasant job.
â â â â â â â â â â â â â â¢â£ ⣤â£â â â â â â â â â â â â â â â â â â â â â â ⣶â¡â¢â â â¡»â â â â ¹â¢â£·â â â â â â â â â â â â â â ⣰â¡â¢¿â¡â ⢻⡴â£â£â£·â£´â¢â¢â¡â¡¾â â¢â£¼â¢â£¦â â â â â â â â ⣠â£â â ⢦⣿⣶â â â â â£â£â¡â â ⠻⢦⣾⣵â â ⢠â£â â â â â ⢰⣯â£â ·â£â¡´â ⣤⣤⣤â ⢸â¡â¢â£¿â ⣠⡤⣤â¡â¢·â£¤â¡´â£â£¹â£§â â â â¢â£â â â¢â¡¿â â ⣧â£â£¼â â â â â â ⢿â£â£¸â â ⢹â¡â â â¢â£â â ⡾â¡â£â£³â£¾â â â¡â£â â â â â£â£â â â â â¢â¡â¡â ⢿⣶â£â£â£»â â â â â â ⡹â â ¸â â ⣷â â ⢸â¡â ⣷â â ⢰â â ⣣â â ¸â¡â â â â â ⣿â â£â£»â£¿â â â â â â â â â â â â â â â â â â ⣼⣽â£â¡â£¹â â â â â â â£â£§â â¢â¡¶â ⢶â¡â â¢â£â â ⣴â ⢳â¡â ⢰â£â â â â â â â ⢰⡶â¢â£â ⢧â¡â ·â ¶â ¾â ⢰â¡â ⣷â ⠻⢦⠾â¢â£´â ¿â¢¯â£â¢³â¡¶â â â â â â »â â â¢â¡´â£¿â¢¶â£â¡â â â â â â â¢â£ ⡴⣾⢷â£â â ¹â â â â â â â â â ⢺â£â£´â â ⣸â â â ⠶⠶â â â ⣯â â ⢷â£â¡¿â â â â â â â â â â â â â â ⣶â£â£¬â â ⣥⢠â â ⣰â£â£·â â â â â â â â â â â â â â â â â â â â â â â ⠳⠾â â â â â â â â â â â â â â 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
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/~ ~-~-~-~ /__|_\ ~-~-~-~ ~-~-~-~-~-~ ~-~~-~-~-~-~ ======== ~-~-~-~
=> mailto:~duncan-bayne/public-inbox@lists.sr.ht Post to my public inbox
... or through the Web by visiting:
=> https://lists.sr.ht/~duncan-bayne/public-inbox/ View my public inbox on the Web
If you want to contact me privately, the best way is by email:
=> mailto:duncan@bayne.id.au Email me
text/xml; charset=utf-8
This content has been proxied by September (ba2dc).