Notes, fixes and guides.
Sixteen years of working notes on Linux and networking, Django and Laravel deployment, SwiftUI and AWS. Written down mostly so I can find them again.
Flutter Login and Signup Screen tutorial: iOS + Android + PHP 8 + Biometrics
A Flutter app for iOS and Android with signup, login, logout and Face ID or fingerprint unlock, talking to a PHP 8 API. The session token goes in the Keychain or the Android Keystore, and the forms work with password AutoFill on both platforms.
iOS Login and Signup Screen tutorial: SwiftUI + iOS 26 + PHP 8 + Face ID
Eleven years after the Swift 2 version, here is the login and signup tutorial again: SwiftUI screens, async/await networking, the session token in the Keychain, Face ID unlock, and a PHP 8 API that stores passwords and tokens the way they should be stored.
SwiftUI navigation bars on iOS 26: style the system bar, don’t hide it
Hiding the navigation bar to draw your own has always cost you swipe to go back. On iOS 26 both swipe gestures stop working, and the usual delegate workaround never even gets asked. Here's what the system bar can do instead, and where a custom bar still makes sense.
wp cache flush doesn’t flush what your site is actually serving
Three times in one week I changed something on this site, verified the change, and watched the old version keep going out. Each time the change was correct. Each time a different cache was holding it, and the command I used to check was testing a layer that wasn't the problem.
edge-tts won’t give you WordBoundary events until you ask
One keyword argument, keyword-only and missing from most tutorials, and then two things about ASS that cost me a lot longer than the keyword did.
Never run django.template.Template() on HTML you didn’t write
A single stored record took an endpoint down for a week. It contained valid, working markup for a different template language. Django compiled it anyway, because that is what you asked it to do.
Fix Gunicorn’s TimeoutError: [Errno 110] Connection timed out in sock.sendall()
Your view already finished. The worker got stuck handing the response over - and raising --timeout, the usual first move, makes it last longer instead of fixing it.
SwiftUI: Create a Custom Navigation Bar
In this article we create a reusable navigation bar in SwiftUI: a centred or large title, leading and trailing buttons, your own colours, and a Back button that actually pops the screen. It's applied as a modifier, so it sits where the system bar would.
How to Use msmtp with PHP’s mail() Function to Send Email
In this guide, let's explore how to set up PHP to use msmtp, a lightweight SMTP client, as its MTA.
How To Deploy a Django project on an Ubuntu server with Nginx
Here's a general outline of How to Deploy a Django project on an Ubuntu server with Nginx: Server Setup: Start by setting up an Ubuntu server. SSH into…
How To Mount an AWS S3 bucket on an Ubuntu Server
To mount an AWS S3 bucket on Ubuntu, you can use a tool called "s3fs." S3fs allows you to access your AWS S3 bucket as if it were…
How To Mount a Remote hard drive on an Ubuntu server
If you want to mount a remote hard drive on an AWS Ubuntu instance, you can use the SSHFS (SSH File System) utility. SSHFS allows you to mount…