SFO guy then says, "Always be closing. Always be closing." Didn't get the reference, so he sent me this YouTube link and told me to watch it. How come I've never heard of this movie before?!
Nybbles & Bytes
Anything Tech and Everything Else
Wednesday, July 1, 2026
Always Be Closing!
Saturday, June 27, 2026
The Push-Up Challenge
I've been doing pushups for the past few years, and I'm currently at 50 per day. I reckon pushing myself to do 80 shouldn't be too hard. And if I do the pushups twice a day, I can hit 160 pushups per day and beat the 3307 target. So I signed up for an account and downloaded the app.
The app gives you daily push-up targets that relate to an important Mental Health Fact. End of the day, you log your pushups and track your progress. Because I do fixed 160 pushups every day, I didn't use the app much.
By 26th of June, I've done 3840 pushups in 24 days. Because I didn't advertise my donation page, I raised zero dollars, but I did improve my pushup game. After the challenge, I went back to 80 pushups per day. Let's see how much I can do next year.
Saturday, December 6, 2025
Bose to Sonos
With the second death of my Bose SoundTouch 20 Portable, I decided to try out Sonos.
How's the sound quality difference? I can't tell because I got the ZonePlayer, instead of actual Sonos speakers.
Sonos ZP100 is the company's first ever product. Introduced back in 2005, I'm surprised these things are still working. Lots for sale on Facebook Marketplace and cheap compared to RRP.
ZP100 and ZP80 are the OG Sonos products. ZP100 comes with a built-in 50W amplifier and a 4-port switch. Paired with my Voll A44 bookshelf speakers, the combo works pretty well. The ZP100 is S1 only and there is no way to upgrade to S2. In a way, that might be a blessing in disguise. S2 is a disaster when it first came out. Maybe S2 got better now, but maybe S1 still more stable, even if it might have less features.
That said, it's a pain connecting to my shared music folder. Took me a while to get it working with my QNAP NAS. Had to enable SMBv1 (on the QNAP) to even get Sonos to see my NAS. Even then, it can only see the Multimedia top folder, and not Multimedia\Audio\Music\Tagged folder that I intended. So what happened is that the ZP100 is indexing ALL my Multimedia content, instead of just the Tagged music albums, and this is taking a looong time.
Solution, create a top-level Tagged shared folder my other Synology NAS and connect that to the Sonos instead. Problem is, Sonos kept saying incorrect username or password, when I know that's not the case. Enabled SMBv1 support and NTLMv1 auth, which I've proven to be required (based on the Synology logs), but still no go.
Gave up using a native integration to the NAS. Used Plex as the bridge instead. Works well enough for me.
Interesting fact. Using Symfonium, I was able to cast / stream FLACs to the Sonos using Chromecast, but the audio sounds average. Tested the same FLAC file using Plex and the resulting audio quality is much much better.
Thursday, August 7, 2025
Film Seen No More
My girlfriend and I used to watch (cheap) movies there, but after we got married and eventually moved suburb, we haven't gone back for many, many years. Did a bit of searching and looks like Film Seen is no more. Can't even access the website. The Wayback Machine's last snapshot for the site was dated June 13, 2025, and this is the blurb on the homepage:
In 2004 local film enthusiasts, with the generous support of Georges River Council and key sponsors, established a local, non-profit community cinema for the St. George region.
There was a great need for a film group to quench local film enthusiasts’ desire for a forum that allowed for the viewing and discussion of a variety of films.
The Film Seen promoted appreciation of a wide range of culturally diverse films, which were of particular interest to the locals residing in the St. George area. These included foreign films, independent films, arthouse films, classics and short/feature films by local film makers.
The Film Seen has shown movies from many countries including Argentina, Sweden, Israel, Japan, China, Russia, Iraq, India, Italy, Saudi Arabia, Korea, France, Holland, Germany, Canada, Belgium, the Netherlands, Denmark, Ireland, Scotland, New Zealand, England, the USA and Australia and on a number of occasions the movies’ Directors have attended for Q & A sessions with our audience.
As an Incorporated Association, attendance at screenings was by membership of the Association. Screenings were usually held on the third Sunday each month at the Civic Theatre, MacMahon Street, Hurstville.
The Film Seen concluded its screenings at the Civic Theatre with the last screening on Sunday 16 June, 2024. We thank our audience members for their strong support over our twenty years operation.
Sad to see that Film Seen is no more. I personally don't know of any other community cinemas. That said, below is a list of their screenings throughout the years. I plan to watch as many of the films as possible:
- 2024: Banshees of Inisherin (Jan), Notre-Dame on Fire (Feb), Farewell, Mr. Haffmann (Mar), Mr Holland's Opus (Apr), The Martian (May), The Fabelmans (Jun)
- 2023: The Duke (Jun), Our Little Sister (Jul), The Quiet Girl (Aug), Eiffel (Sep), Living (Oct), Empire of Light (Nov), November (Dec)
- 2022: Promising Young Woman (Feb), Penguin Bloom (Mar), Antoinette In The Cévennes (Apr), The Courier (May), Six Minutes to Midnight (Jun), Delicious (Jul), Belfast (Aug), The Last Wave (Sep), The Good Boss (Oct)
- 2021: After the Wedding (Jan), Everybody Knows (Feb), The Good Liar (Mar), Parasite (Apr), The Translators (May), Fisherman's Friends (Jun)
- 2020: Woman at War (Jan), The Journey (Feb), Capernaum (Mar), Yesterday (Oct), The Goldfinch (Nov)
- 2019: Darkest Hour (Jan), The Fencer (Feb), Promised Land (Mar), C'est La Vie (Apr), The Insult (May), Two is a Family (Jun), Crazy Rich Asians (Jul), Ladies in Black (Aug), Green Book (Sep), Sometimes, Always, Never (Oct), Greta (Nov), Woman at War (Dec)
- 2018: A Man Called Ove (Jan), Ex Machina (Feb), The Promise (Mar), Perfect Strangers (Apr), A United Kingdom (May), Paris Can Wait (Jun), Ali's Wedding (Jul), The Lovers (Aug), Just To Be Sure (Sep), Sweet Country (Oct), The Teacher (Nov), The Greatest Showman (Dec)
- 2017: Marguerite (Jan), Eye in the Sky (Feb), Planes, Trains and Automobiles (Mar), Mustang (Apr), Mystery Road (May), Grandma (Jun), Truman (Jul), A Month of Sundays (Aug), Rosalie Blum (Sep), Goldstone (Oct), Blancanieves (Nov), My Neighbour Totoro (Dec)
- 2016: Pride (Jan), The Imitation Game (Feb), Planes, Trains & Automobiles (Mar), The Age of Adaline (Apr), Gayby Baby (May), He Named Me Malala (Jun), Hereafter (Jul), Bridge of Spies (Aug), St Vincent (Sep), The Bélier Family (Oct), A Separation (Nov), Spirited Away (Dec)
- 2015: The Best Offer (Jan), Nebraska (Feb), Sunshine on Leith (Mar), Wadjda (Apr), Any Day Now (May), Calvary (Jun), The Immigrant (Jul), Four Minutes (Aug), The Two Faces of January (Sep), The Man from Cox's River (Oct), What We Did On Our Holiday (Nov), The Hundred Foot Journey (Dec)
- 2014: Whistle Down the Wind (Jan), The Hunt (Feb), Happiness Never Comes Alone (Mar), Performance (Apr), Blue Jasmine (May), The Butler (Jun), Backyard Ashes (Jul), The Book Thief (Aug), The Double Hour (Sep), One Chance (Oct), Ben X (Nov), Like Father, Like Son (Dec)
- 2013: Monsieur Lazhar (Jan), Chinese Take-Away (Feb), Arbitrage (Mar), The Intouchables (Apr), Tell No One (May), Your Sister's Sister (Jun), October Sky (Jul), Argo (Aug), Quartet (Sep), Silver Linings Playbook (Oct), Love is all you Need (Nov), Léon: The Professional (Dec)
- 2012: Oranges and Sunshine (Feb), Plots With a View (Mar), Midnight in Paris (Apr), The Women on the 6th Floor (May), Hugo (Jun), The Artist (Jul), Dr Zhivago (Aug), Headhunters (Sep), Salmon Fishing in the Yemen (Oct), My Week with Marilyn (Nov), The Sapphires (Dec)
- 2011: The Concert (Jan), Wild Target (Feb), Winter's Bone (Mar), Heartbreaker (Apr), The King's Speech (May), Another Year (Jun), The Secret in Their Eyes (Jul), In a Better World (Aug), My Afternoons with Margueritte (Sep), Mad Bastards (Oct), Mrs Carey's Concert (Nov), Beautiful Lies (Dec)
- 2010: Departures (Jan), An Education (Feb), The Topp Twins (Mar), Blessed (Apr), Bran Nue Dae (May), Brothers (Jun), A Single Man (Jul), The Girl with the Dragon Tattoo (Aug), Animal Kingdom (Oct), Mother and Child (Nov), City Island (Dec)
- 2009: The Painted Veil (Jan), Welcome to the Sticks (Feb), Blue Lies (Mar), Lemon Tree (Apr), I've Loved You So Long (May), Dean Spanley (Jun), Easy Virtue (Jul), Ryan's Daughter (Aug), My Year Without Sex (Sep), Noodle (Oct), Sunshine Cleaning (Nov), Ponyo (Dec)
- 2008: Black Book (Jan), 4 (Feb), Home Song Stories (Mar), Hunting and Gathering (Apr), Closing the Ring (May), Juno (Jun), La Vie en Rose (Jul), The Kite Runner (Aug), Lars and the Real Girl (Sep), Black Water (Oct), The Orphanage (Nov), Married Life (Dec)
- 2007: The Cave of the Yellow Dog (Jan), A Prairie Home Companion (Feb), Ten Canoes (Mar), As it is in Heaven (Apr), The Queen (May), Pan's Labyrinth (Jun), Priceless (Jul), The Lives of Others (Aug), The Italian (Sep), Guru (Oct), Romulus My Father (Nov), Clubland (Dec)
- 2006: Turtles Can Fly (Jan), Seducing Dr Lewis (Feb), Cabaret (Mar), Joyeux Noel (Apr), Mrs Henderson Presents (May), Welcome to Dongmakgol (Jun), The Ladykillers (Jul), Happy Endings (Aug), Tais-Toi (Sep), Live and Become (Oct), Monsoon Wedding (Nov), De-Lovely (Dec)
- 2005: Amélie (Jan), A Man's Gotta Do (Feb), In My Father's Den (Mar), Gallipoli (Apr), Apres-Vous (May), Les Choristes (Jun), High Society (Jul), Orange Love Story (Aug), Three Dollars (Sep), Nobody Knows (Oct), 2046 (Nov), [Millions](https://www.imdb.com/title/tt0366777 (Dec)
- 2004: Not One Less - Swimming Pool (Jun), The Pirate (Jul), They're a Weird Mob (Aug), Travelling Birds (Sep), Princess Mononoke (Oct), Vertigo (Nov), Crouching Tiger, Hidden Dragon (Dec)
Here's to you, Graham, Robin & Brian!
Wednesday, July 30, 2025
Docker default-address-pools
Have a bunch of new applications I wanted to add to Portainer, so needed to fix Docker's 29-network issue ASAP. Can't keep deleting other containers every time a new container needs to be added.
As a refresher, Docker's default config only gives you 32 subnets:
- 172.16.0.0/12 /16 16 subnets: 172.{16,17,18,...,31}.0.0/16
- 192.168.0.0/16 /20 16 subnets: 192.168.{0,16,32,…,240}.0/20
Once you've hit the limit and try to spin up another Docker container, you get below error message from Portainer - all predefined address pools have been fully subnetted
When I try to change the size of the default address pools in /etc/docker/daemon.json, I get this error message - unable to configure the Docker daemon with file /etc/docker/daemon.json: invalid character '"' after object key:value pair
Maybe I'm not supposed to touch the existing pools??
One solution to try is this: (without breaking existing containers/networks)
{
"default-address-pools": [
{
"base":"172.17.0.0/12",
"size":16
},
{
"base":"192.168.0.0/16",
"size":20
},
{
"base":"10.99.0.0/16",
"size":24
}
]
}
First two are the default docker address pools, while the last one is the new private network. Did this and got the same error as last time.
This time, I ran the file through a JSON validator, and found my mistake. I appended the default-address-pools section to the existing config, but forgot to separate them with a comma. Below is the working config:
{
"data-root": "/mnt/dietpi_userdata/docker-data",
"log-driver": "journald",
"log-level": "warn",
"debug": false,
"default-address-pools": [
{
"base":"172.17.0.0/12",
"size":16
},
{
"base":"192.168.0.0/16",
"size":20
},
{
"base":"10.99.0.0/16",
"size":24
}
]
}
Did a "sudo service docker restart" and no more errors.
Sunday, June 1, 2025
29 Docker Networks
At some point in a homelabber's journey, they will start hitting some limits. You can always add more memory, more storage, but if you don't change the Docker default, you can only run 29 Docker containers. Ought to be enough for anybody, right? Not for me!
Apparently, Docker by default supports up to 32 subnets only. Excluding the host, bridge and none networks, you get 29 remaining. I found out the hard way today.
Was trying to add Caddy and kept getting deploy errors from Portainer. Log says "all predefined address pools have been fully subnetted". I have no idea internal networks are being allocated every time I spin up a container. Checked the networks and most of them are /16 or /20. No way each container needs that many IP addresses.
Checked the Docker docs (https://docs.docker.com/engine/daemon/ipv6/) and apparently below is the default config:
{
"default-address-pools": [
{ "base": "172.17.0.0/16", "size": 16 },
{ "base": "172.18.0.0/16", "size": 16 },
{ "base": "172.19.0.0/16", "size": 16 },
{ "base": "172.20.0.0/14", "size": 16 },
{ "base": "172.24.0.0/14", "size": 16 },
{ "base": "172.28.0.0/14", "size": 16 },
{ "base": "192.168.0.0/16", "size": 20 }
]
}
To get more subnets, the forums suggested editing the /etc/docker/daemon.json file to add this:
{
"default-address-pools": [
{ "base": "172.17.0.0/12", "size": 24 }
]
}
OR
{
"max-networks": 100
}
Second option gave me an "invalid directive" error when I restart the docker service. With the first option, regardless of how I edit daemon.json, I always get "unable to configure the Docker daemon with file /etc/docker/daemon.json: invalid character '"' after object key:value pair" error.
I'm pretty sure I'm doing it correctly, so I can only attribute it to a dietpi quirk. With that, I took the easy way out and deleted some unused containers to free up some networks, so I can deploy Caddy.
Sunday, May 25, 2025
Further Adventures with Segmented Vimeo (and NicoVideo) Videos
As a follow-up to my previous blog post about segmented Vimeo videos, looks like a lot of things have changed since then.
Before, you could get lucky by searching through the network traffic for a direct URL for an mp4 file or even a 9-digit video file ID. Nowadays, I can't even find the master.json file to get the URL.
But I did find a playlist.json file, whose complete URL looks like this: https://vod-adaptive-ak.vimeocdn.com/exp=1746859637~acl=%2F2aed1a26-82e0-4e71-88b4-66b640063a50%2F%2A~hmac=406565bd4b1a97f835870e579db1914821de4d3308674c3679e3653ccdf5192f/2aed1a26-82e0-4e71-88b4-66b640063a50/v2/playlist/av/primary/playlist.json?omit=av1-hevc&pathsig=8c953e4f~ukiVn0xgiuGdzWbAuE_LQry4ltouJ-enH_rU-rIefIU&r=dXM%3D&rh=3fnUuf
Tried below ffmpeg command, but got an error:
ffmpeg -protocol_whitelist file,http,https,tcp,tls,crypto -i "https://vod-adaptive-ak.vimeocdn.com/exp=1746859637~acl=%2F2aed1a26-82e0-4e71-88b4-66b640063a50%2F%2A~hmac=406565bd4b1a97f835870e579db1914821de4d3308674c3679e3653ccdf5192f/2aed1a26-82e0-4e71-88b4-66b640063a50/v2/playlist/av/primary/playlist.json?omit=av1-hevc&pathsig=8c953e4f~ukiVn0xgiuGdzWbAuE_LQry4ltouJ-enH_rU-rIefIU&r=dXM%3D&rh=3fnUuf" -c copy video.mp4
Tried changing the URL from json to mpd, but still didn't work:
ffmpeg -protocol_whitelist file,http,https,tcp,tls,crypto -i "https://vod-adaptive-ak.vimeocdn.com/exp=1746859637~acl=%2F2aed1a26-82e0-4e71-88b4-66b640063a50%2F%2A~hmac=406565bd4b1a97f835870e579db1914821de4d3308674c3679e3653ccdf5192f/2aed1a26-82e0-4e71-88b4-66b640063a50/v2/playlist/av/primary/playlist.mpd" -c copy video.mp4
And apparently, these vimeo URLs time out and get refreshed after less than 5 minutes.
Did some searching and found a working solution: https://github.com/martiGIT/vimeo-download-by-playlist
There's another downloader that runs as a Docker container, which should also work: https://github.com/davidecavestro/vimeo-dl
While we're on the topic of dowloading videos, I found a working downloader for Niconico (aka Nico Nico Douga) videos: https://github.com/AlexAplin/nndownload
I was looking for YOASOBI's performance of Idol during the 74th NHK Kōhaku Uta Gassen (2023), and was told that it can only be found on Niconico, so here we are.
Monday, April 28, 2025
Plex Media Server on DietPi
After more than a year of troubleshooting on and off, I managed to get the Plex app on the PS5 to connect to the Plex Media Server hosted on my DietPi.
- DNS rebinding
- domain whitelisting
- setting plex.direct as private domain
- switching to public DNS servers
- getting your own domain certificate and switching to HTTPS
Wednesday, March 12, 2025
Dell Wyse 5060 SSD Upgrade
I've been using a Dell Wyse 5060 thin client as a Docker box using DietPi. It came with an Apacer 64 GB SSD. With more Docker containers being added and more media (ebooks, audiobooks, documents, etc.) being uploaded, I needed to upgrade the storage.
I watched a couple of YouTube videos about it and it looks simple enough. Open up the case, remove SSD, replace with new SSD, and voila!
Prior to the hardware upgarde, I did take a backup using dietpi-backup utility. It saves the specified folders in /mnt/dietpi-backup/data, and a dietpi-backup.log is generated and a hidden .dietpi-backup_stats file records the start and end time. To make a copy of the backup for offline storage, I did a tar cvfz backup.tgz /mnt/dietpi-backup/*
Couple of things to note:
- The SSD used is mSATA. That said, not all mSATA modules are the same size. I extracted my replacement from an ADATA SU650 SSD, and the module is wider and longer. No screw in the middle, too.
- Because of the bigger size, a part of the aluminum shield for the memory modules had to be removed/reduced for the SSD module to fit.
- When you run tar with a wildcard, hidden dotfiles are not captured and archived. And because the hidden .dietpi-backup_stats file was not archived by tar, dietpi-backup refused to restore my backup. I had to reconnect the original SSD, mount the USB stick, copy the missing hidden file to the USB stick, connect the new SSD, mount the USB stick, then copy over the missing hidden file.
- OR I could've just manually create and edit a new .dietpi-backup_stats file:
- YYYY-MM-DD_hh:mm:ss Backup starting
- YYYY-MM-DD_hh:mm:ss Backup completed
The better way of performing the backup/restore is:
- cd /mnt/dietpi-backup; tar cvfz /root/backup.tgz . (this will archive even hidden files in /mnt/dietpi-backup)
- cd /mnt/dietpi-backup; tar xvfz backup.tgz or tar xvfz /root/backup.tgz (depending where tgz is located)
I also did notice that the installer didn't seem to make use of my settings for /boot/dietpi.txt. It still asked for locale, keyboard settings, layout, etc.
On first boot, make sure network connection is there. DietPi wants to do apt update as part of first boot and will complain if it can't. Restore process also requires apt update, so provide network ASAP.
Also, prior to the backup process, make sure the OS, apps and packages are up-to-date. Purge old files, logs, backups, and Docker images. This drastically reduces backup and restore times.




