We spent the long weekend in Coffs Harbour

Shawn stayed at my place the night before, so we could wake up and leave first thing. The sun came up as we drove across the border to NSW, spreading sunbeams across the farmland and leaving misty gulleys where the light didn’t reach. The mountains were beautiful, but truth be told there wasn’t much to see from the highway.

We arrived in Coffs at about 9AM and made a beeline to what turned out to be the greasiest, fingerprint-covered Maccas I’ve ever been in. We got McMuffins and headed down the road to the closest beach we could find.


Overcast with patches of blue sky over Park Beach. Muttonbird Island in the distance.

I didn’t bring swimwear or a towel because the forecast was for overcast and rain all weekend. To be fair, there was a little bit of cloud when we arrived, but it cleared out soon enough to reveal blue skies and a high UV index that continued for the entire trip.

After McMuffins, sunscreen, going back to the car to fetch hats, and sitting on the beach watching the crabs for 53 minutes (according to my Google location history), we set off on a walk.

Coffs surprised me with the amount of walkways and free things to do. I’d only ever passed it from the train. It looked like a nice beach and a handful of banana plantations and that’s it. But the coastline is full of parkland and beaches, and all linked together with a nice wide path that extended further than we were willing to walk.

A concrete and steel bridge spans a tea stained creek, the beach in the distance.
This is the rail bridge where you see the coast for the first time, on the Brisbane to Sydney train. It’s ugly but I like it a lot.

We managed a couple of kilometres to the marina, and poked around the artificial breakwater before reaching Muttonbird Island

The island is attached to the mainland by the marina these days, but is still an important nesting ground for the little birds to dig holes in the ground and raise their chicks. There’s a designated walkway from one end of the island to the other, and signs warning you not to stray, lest you step on a sleepy bird. Or break an ankle.

Panoramic view from Muttonbird Island, over the harbour and mountains beyond

We didn’t see any birds, I think we were a bit late in the season. But I appreciated the cliffs, and sat mesmerised by the overwhelming power of the ocean smashing against the rocks. And there was a pretty cool ocean bird hovering in the air for most of the time we were climbing the island again to get back to dry land. (Black wingtips, not sure what it was.)

Our inappropriate choice of clothes made for an uncomfortable walk, so we started back to the car to check into the hotel. But we stopped at the surf lifesaving club for lunch first. I had a parmi and Shawn had a chowder.

I saw they had Schweppes behind the bar so I asked if they had Pepsi Max, and the man said no, but the other girl said she prefers Pepsi Max, and the man asked if there’s a difference and we both said YES! and he said maybe they should switch from Coke No Sugar.

This conversation continued every time I went to the bar, and also when he came around at closing time (2:30) to pack up the tables. We had a rapport.


Check-in was easy enough. The place was 90s vintage, but pretty clean and had an amazing view of the ocean, islands, heritage lighthouse etc. The lighthouse came to be my main wayfinding point throughout the trip.

The window between the bedroom and the toilet was an unusual choice, but we devised a roster system to prevent surprises.

That afternoon we sat on the balcony and ate far too much, watching the myriad of bird life screech and warble and do its thing. There were two tourist planes as best I could tell; one dropping off paragliders, and the other one just hanging around in the sky soaking up the sights.

The view from the hotel balcony, there are some other holiday units, but we're up high and can see the ocean over the top of them. There are two islands jutting out of the water.

The main gotcha was the lack of wi-fi. Despite the blinking modem on the counter, the lady at the front counter said it stopped working and they removed it from the listing. And lo, turns out I’d booked a place without internet.

That night we tethered to my one bar of Telstra and watched Miriam Margolyes reluctantly trudge around Australia and be grumpy in standard definition.


We decided we didn’t need to spend a whole bunch of money on holiday, so we stocked up on supplies and made sausage & egg muffins again for brekky.

We took them to Moonee Beach and grabbed hot chocolates from the cute coffee shack by the beach called I Bean There, and sat watching the surfers, dogs, and hilariously the kids trying to ride their bikes through the sandy creek.

I spilled chocolate all down my nice white shirt, but it mostly came out with wet wipes.


After brekky we drove up to Korora Lookout. It’s a public access lookout with indigenous significance. There’s a little pedestal to read aloud the story of the area, and a cunty next door neighbour who’s planted bamboo along the edge of their property to stop people enjoying the view.

This was where I saw my first leech: a little inchworm-looking thing attached to the sole of my shoe. I knocked it off, and we both hiked our socks.

We walked to the second lookout, with a purpose built suspension deck that some dude thought would be funny to make swing while we were all standing on it. The views were amazing and I tried (but failed) to spot the train line into town.

A viewing suspension viewing platform juts out over the raingforest, with views of the town and the ocean beyond.

We stayed for a moment before setting off on a bushwalk into what I refer to as leech gully (side note, that’s what Indooroopilly means. It’s a corruption of the Yuggera language.)


We started trekking down the hill in a nice moist rainforest setting. We were planning to take the trail a couple of kilometres out, but as we descended and the path got thicker with foliage. The sunlight disappeared. Fern fronds brushed past our legs.

That’s when we saw them.

Mother and two kids making their way out of the forest, looking stricken.

“Turn back!” she said, with fear in her voice.

“The leeches have leeches!”

One of the kids had blood streaming down his leg.

We tried to make it to the next clearing, but I freaked out. Shawn wanted to go ahead, but I couldn’t enjoy a hike when there’s blood sucking parasites waiting to hitch a ride.

We turned back and took the shorter, better maintained path in a little loop back to the lookout.


From there we drove to Sawtell, stopping at a roadside stall to buy bananas, and enjoyed ate them at the lookout.

A friendly family of magpies came to us to beg for food so I threw them bits of banana peel and they seemed to enjoy it. The seagulls that showed up shortly after didn’t care for it at all and were FURIOUS we didn’t have chips.

There was a little path down to the beaches, but we only went about halfway and sat at a cute bench, watching the ocean and avoiding the walk back up the hill to the car.

A man sits by himself at a bench overlooking the ocean, on the side of a steep hill, with a paved path trailing into the distance.

The next day was a public holiday in Queensland, and I was scheduled to leave on the train to Sydney.

Shawn made up the last of our muffins while I showered and went to the jetty for coffee and a bit of sunlight. There were plenty of cute dogs and little regional planes to spot. But eventually it was time to head to the station.

I’d booked a first class ticket from Coffs to Sydney. Usually I book two, because I’m large, but I figured for the short journey I’d be fine. But a few hours into the trip one of the rail staff started hovering around, awkwardly looking at me.

I popped out an earbud.

“I don’t think I have to tell you you’re a big guy,” she says sheepishly.

“There’s another passenger getting on who’s seated next to you. So I’ve moved you a few seats back to your own seat.”

“Lol,” I laughed.

I swapped seats and the rest of the journey was pleasant, but uneventful.

The XPT train pulls into Coffs Harbour station, painted in yellow white and blue.

How I rolled my own vector map tiles

OpenStreetMap is like the Wikipedia of maps. Back in the earlier days I used to love running around gathering data and mapping every neighbourhood I could.

I reckon I contributed a pretty big portion of street names on the north side of Brissie, by riding around on my bike with my Nokia 6120c (great phone!) and a bluetooth GPS dongle, recording all the points of interest like a pro, to upload to the map when I got home.

It was a great hobby at the time, when vast swathes of Australia were completely blank. Now OpenStreetMap is pretty feature complete, it’s used everywhere.


A short history of maps as a web developer

Back in those days the state of the art for web mapping was the tile-based “Slippy Map”.

Everyone used it, even Google Maps. You’d essentially have a Javascript frontend to let visitors zoom and scroll the map like you do today. But on the server a process would convert all the OpenStreetMap geodata into standardised image tiles (raster tiles).

Tiles were commonly created at 256×256 pixels, and were rendered at zoom levels from 0 (the whole world in one tile) down to zoom level 19 where the world would take up 274.9 billion tiles.

A map of Australia and surrounding nations, split into a 256 pixel grid

This was generally an on-demand process as rendering so many tiles would be infeasible. Ridiculous. Absurd. I can tell you this because I tried a couple of times. Not for the whole world, but a few times I’d tried to scrape, render, cache the entire of Brisbane for assorted projects.


Eventually Mapbox came along with an easy-to-use interface on top of the open source data, and reasonable enough pricing to make it worth switching over.

I gave a talk a decade ago about the cool stuff people were doing with maps, and that included plenty of Mapbox evangelism.

Later Mapbox standardised the Mapbox vector tile format which had a lot of benefits over the older raster tiles.While a raster tile could be styled to look however you want on the server, a vector tile could be styled on the client-side. That meant the same tile could power a hundred different map styles, even dynamically on the client-side. In addition, vector data makes things like animating between zoom levels look great. Generally, a huge step forward.

The new OpenGL map library was released to take advantage of these benefits and it unlocked a lot of really high quality maps for the masses.

By this point high quality maps were par for the course and radical innovation in the space kind of flattened out.

My opinion of Mapbox turned when they went the way of every venture backed startup; got involved in union busting, closed-sourced their tools and started turning the money dial up. 

That’s when I started playing with maps again.


Cycling maps

Since at least 2010 I’ve maintained briscycle.com in some form or another, and always one of the main features has been maps to show safe routes and how infrastructure connects up.

I’ve gone through phases of running my own tile server, using statically rendered tiles, and third party map services including Mapbox (who can’t do very good cycling maps fyi). But recently I figured I’d go back to rendering my own.

I don’t remember where I spotted tilemaker, but it has such a sweet looking website that it inspired me to have a go at building my own vector tiles. It wasn’t as easy as the website led me to believe, but after lots of trial and error, some coding in lua to get the right properties out, I managed to get a decent looking cycling map out of it.

A map of Brisbane. It's fairly desaturated, except for the green cycleways and bike lanes everywhere.

I largely followed the instructions from Wouter van Kleunen’s how-to blog post, then:

  1. extended it by customising the lua processor to pull out more cycling attributes (and skip attributes I wasn’t interested in.
  2. styled the map using a standard json map style, but I also processed that on the client-side to add more repetitive things like road casings. You can check out the code here. (edit 2024: apparently maputnik lets you create style json in a graphical way)
  3. Set up a small Docker machine to serve mbtiles (dockerfile source)

The result is pretty cool.

It’s very fast because it’s hosted in Brisbane for a Brisbane audience, so the map tiles don’t need to transit the globe before being displayed.

The tiles themselves are optimised pretty well and allow me to tweak the styles in almost real time. There’s still a few weird bits, but I reckon it’s a good base layer to add stuff to, like geojson routes (check out the brisbane valley rail trail).

So that’s it from me. You can check out the map at briscycle.com/map or check out some of the cycling trips in Brisbane for more.

DaVinci Resolve 18 render-cached clips show “Media Offline”

Just a quick one because when I tried searching for the solution I couldn’t find it. DaVinci Resolve is my favourite professional, free video editor.

A DaVinci Resolve timeline showing a half-completed render cache over a clip of me riding a bike.

For a while though I haven’t been able to get render caching working. This weird Resolve bug would churn up my GPU, the red line above the clip would turn blue to indicate it had been render-cached, but any render cached clips were showing up as “media offline”.

Some people online mentioned this can happen if your disk is full and the files can’t be written, but I have lots of space remaining.

I tried changing the render cache directory to a custom folder to no effect. However, when I browsed to the render cache folder manually, it had no video files in it. Just a bunch of empty folders.


After some further googling, I found switching from ProRes to DNxHR HQ (High Quality [8-bit 4:2:2]) fixed it. It seems to be choking on ProRes for some reason. Some folks mentioned it was specifically ProRes 422 HQ, but I didn’t test the theory since I was in a rush.

Changing the format and hitting save was enough to trigger all my “offline” render-cache clips to rerender in the new format and start working again.

Optimised media & render cache settings. I've chosen ormat DNxHR HQ and checked all the caching boxes.

This was on an M1 mac running MacOS Ventura, using Resolve version 18.1.4. But I understand from Stack Overflow that it also happens on other v18 version as well. Given Linux and Windows don’t support ProRes I’m not sure if this tip applies there.

Hope this helps you out, traveller. If you want, chuck me a follow on Youtube. <3

Coolify out of disk space

Coolify is an open-source & self-hostable Heroku / Netlify alternative (and even more).

I’ve been using Coolify to self-host a lot of my sites, including this one. But it’s not been without its problems.

I’ve noticed a lot of flakiness, including databases disappearing and taking down services seemingly at random. At one point I was unable to log in to any services, including Coolify itself.

Coolify uses a lot of disk space, and when you run out of space things stop working.


Coolify no space left on device, write

I noticed recently that my Ghost blog couldn’t connect to the database, and assumed it was just some general flakiness.

Then while trying to build another Node.js project I received this error:

[13:09:49.288] #8 12.84 npm ERR! code ENOSPC
[13:09:49.290] #8 12.84 npm ERR! syscall write
[13:09:49.293] #8 12.84 npm ERR! errno -28
[13:09:49.298] #8 12.84 npm ERR! nospc ENOSPC: no space left on device, write
[13:09:49.303] #8 12.84 npm ERR! nospc There appears to be insufficient space on your system to finish.
[13:09:49.306] #8 12.84 npm ERR! nospc Clear up some disk space and try again.

I had already resized the Coolify disk and filesystem up to 70gb and it was full again! What’s going on?


Cleanup storage in Coolify

There’s an easy way to clean up storage under ServersCleanup Storage.

The coolify Servers panel, with an arrow pointing to the Cleanup Storage button.

I hadn’t noticed this button before, but clicking that cleared up 50gb of storage space on my Coolify server and everything started working again.

I don’t know for certain, but I suspect under the hood this is running a docker prune operation to clean up old containers. If you’re unable to log into Coolify and you can’t resize your disk, that might be the next option.

If this doesn’t help, you’ll have to search through, or ask for help on Discord.

Homemade pesto, the new bike, book recommendations and bne.social – a blog

Tonight for dinner I made pesto pasta. It was made all the more delicious by the fact I grew the basil myself, in my own little urban garden, and made pesto from scratch.

My little garden has grown a lot since spring. With the new tower next door finally being built I don’t think I’m going to get any sun at all over winter. So I’m not sure how everything will go over the newly imposed seasons. But it’s best to remain in the moment and admire the basil, parsley, spinach, and multitude of chillis I’ve managed to grow.

A chilli plant. There are white flowers and little green chillis starting to grow.
My chilli plants have started to flower, and this one has little fruits forming.

So dinner was great and I feel very accomplished even though the pasta was store-bought.

Today was any other day. It’s January 26th and I made the decision to work today and take tomorrow off. Part tokenistic, part wanted the long weekend, and partly because I have a bunch of work on my plate at the moment and wanted a chance to get it done in peace.

But let’s not talk about work.

I wanted to write a little retro because it feels like I haven’t been up to much, but I know I have and wanna get it all down.


Time for a new bike

In big news I broke my bike. Snapped the frame nearly in two.

I faffed around for months before finally getting myself a bike fit and starting the process of building a bike that’s gonna last me the next ten years. Unfortunately we’re in a bit of a supply chain crisis at the moment, so looking at months lead time with no bike I picked myself up a cheaper single-speed to get me by.

It’s been an absolute treat.

Truth be told now I have my single speed I’m not entirely sure what I want from my next bike. I know being a heavier guy I’m gonna destroy this one, which is why I want to build something more solid.

But I’m really loving the simplicity of the single-speed system, as well as how powerful it makes me feel climbing hills in entirely the wrong gear. It’s really good exercise. Follow me on Strava if you’re so inclined.


Reading is what?

Over the new year break I had a week to myself and I was driving myself up the wall. Not because of boredom, but with panic that I couldn’t work out what to do with myself. So I picked up a book.

A few, actually. I’ve been really enjoying reading again. This year I’ve gone through:

  • Tom Ballard’s I Millenial – I don’t even know how to summarise this one, other than to say it’s a neat summary of what led to our current day political clusterfuck through a socialist lens. It was a surprise, a joy, and led nicely into the next:
  • The Big Switch by Saul Griffith. It’s a pretty plainly laid out argument that Australia can take action on climate change right now with current technology by replacing all our fossil powered machines with electric ones, putting solar on our roofs, using electric cars to power our houses at night, and save huge amounts of money in the long run. Obviously there’s nuances, but the point is to go all in on the technologies we currently have, while we develop the solutions to the harder climate problems. And the government is listening.
  • I also picked up Stephen Fry’s Mythos which was interesting because I’d never studied greek mythology before, and it was an okay introduction to it. I found it a bit of a slow going, something about milllenia-old stories not having all the hooks of a modern page-turner. But it was interesting connecting the dots on concepts that trace back all the way back.

I think e-ink

After getting excited about it I put in an order for a Kobo reader from JB. The only ones in stock were all the way down on the Gold Coast so I scooted to the train just in time for them to call me to say there’s an error and they don’t have it after all.

A Kobo ereader on the couch showing Tim Richards Heading South book in black & white. there's a bright pink cable coming out the side.

So I sat with the thought and eventually talked myself out of the cheaper device and into the Kobo Elipsa, which finally arrived the other day. And honestly it’s pretty great.

I’ve got three books on the go:

  • Pictured is Heading South by Tim Richards. It’s a travel journal along the second-longest rail journey in Australia, from Queensland to Western Australia. (Fun* fact, the longest is from Queensland to the Northern Territory just due to the inefficient route, but that’s not as exciting)
  • At Tae’s recommendation I’m reading Richard Osman’s Thursday Murder Club. It’s funny, very easy to read, and I can’t wait to find out whodunnit.
  • I’ve also picked up the latest episode of Meanjin on a whim. I don’t know if it’s my usual style but I’ve been enjoying the short essays and different perspectives, and wanted to see how to transfer an ebook onto the Kobo 😆

The Kobo itself is great. I didn’t think I’d use the notetaking nearly as much as I have been, but it’s very slick. I’ve found myself making little checklists and notes that I’d ordinarily add to my phone, as well as keeping my workday organised. Maybe it’s a write-off!


Then there’s the social network

Josh and I have been running bne.social for coming up on a year now. I haven’t written about it yet even though I’ve been meaning to because I don’t know quite how to sum it up.

It’s basically like Twitter without the nazis and the queerphobia, and it’s run by volunteers around the world rather than being owned by one single billionaire idiot. It’s not without its problems but most people agree it’s a Nice Place where the interactions are genuine and it’s not filled with Brands.

I’d encourage you to hop over and make an account and hang out with us! We’re going to organise a meetup or Brisbane folks at some point, so don’t miss out.

A cartoon of a mastodon in a summer hat at South Bank as an ibis swoops in to steal a chip.

Yeah that’s about it I suppose

I dunno, things are good. There’s more I could write about; my perfection of the banana-blueberry smoothie, the way I’ve optimised the lighting in my apartment to keep my indoor plants alive, the absolute classic CDs I picked up at the lifeline bookfest.

But for now I wanna go read some more The Thursday Murder Club and go to sleep, cos tomorrow the long weekend starts and I have a bike ride to do!

Happy new year

It’s 2023.

I like new years. I used to think of it as a sort of atheist christmas. But I think these days I appreciate the opportunity for reflection and realignment.

I haven’t had a lot of energy for introspection lately, which is a nice way of saying I am worn down and tired to my bones. Lately things haven’t been working for me, so the new year is a welcome mental reset. I have resolved to reflect more and be kinder to myself, and taking the first week of the year off work is a nice start.

Other than that I’m entering the year with a few little plans:

  1. I want to go on a holiday. I was hoping to do that over the break, but domestic tourism is hectic and most things are booked out and too expensive.
  2. After my old bike broke in 2022, I want to get my new bike built. Get back into an exercise routine, and take it on trips.
  3. I want to save money and pay down my mortgage.
  4. I want to work out what to do with myself.
  5. And I want to try to blog more.

I think that’s a reasonable place to start.

A self hoster’s guide to port forwarding and SSH tunnels

Self hosting with NAT and port forwarding and dynamic DNS is kinda fragile. I’ve been using a very cheap cloud-hosted nginx VPS to forward traffic to my self-hosted servers and it works nicely.

But tonight I set up a ssh tunnel that punches out from my server skipping the NAT, forwarding, and DNS stuff entirely. It’ll dial home from anywhere there’s network so I could even take my server to the park and it should work over 5g.

I just think that’s neat.

I’ve tried to explain a bit of my thinking, and a loose guide for how to set this up yourself. These instructions are for someone who’s vaguely familiar with nginx and ssh.

  1. How it usually works
  2. A more resilient port forwarding over ssh
  3. How to set up an nginx proxy to forward to your self hosted server
  4. How to forward ports to your self-hosted server over SSH
  5. How to set up a persistent SSH tunnel/port forward with systemd
  6. My observations using SSH tunneling

How it usually works

A typical port forwarding scenario opens ports on each device. When all the right ports are open, traffic flows all the way through from the internet to my self hosted server.

A traditional port forwarding scenario requires dyndns to upate the dynamic IP, as well as forwarding of ports through each device until it reaches the self-hosted server.

In my example, I have a nginx server on a cheap VPS in the cloud that handles forwarding. That VPS looks up my home IP address using a dynamic DNS service, then forwards traffic on port 80 to that IP. In turn my router is configured to forward traffic from port 80 on to the self hosted server on my network.

It works well, but that’s a lot of configuration:

  1. Firstly I need direct access to the ‘net from my ISP, whereas today most ISPs put you behind a carrier grade NAT by default.
  2. If my IP changes, there’s an outage while we wait for the DNS to update.
  3. If my router gets factory reset or replaced with a new one, I need to configure port forwarding again.
  4. Similarly, the router is in charge of assigning IPs on my LAN, so I need to ensure my self hosted server has a static IP.

A more resilient port forwarding over SSH

We can cut out all the router and dynamic DNS config by reversing the flow of traffic. Instead of opening ports to allow traffic into my network, I can configure my self-hosted server to connect out to the nginx server and open a port over SSH

You could also use a VPN, but I chose SSH because it works with zero config.

A self-hosted server creates a ssh tunnel to the remote server and routes traffic that way, without DynDNS or router configuration.

In this diagram, the self-hosted server makes a connection to the nginx server in the cloud via SSH. That ssh connection creates a tunnel that opens port 8080 on the nginx server, which forwards traffic to port 80 on the self hosted server. Nginx is then configured to forward traffic to http://localhost:8080, rather than port 80 on my router.

So the router doesn’t require any configuration, the cloud-hosted VPS server only needs to be configured once, and the dynamic dns server isn’t needed because the self-hosted server can create a direct tunnel to itself from wherever it is.

The huge benefit of this zero-config approach is I can move my self-hosted server to another network entirely and it will dial back into the nginx server and continue to work as normal.


How to set up a nginx server to forward to a self-hosted server

Putting an nginx server in front of your self-hosted stuff is a good idea because it reduces your exposure to scary internet risks slightly, and can also be used as a caching layer to cut down on bandwidth use.

In these examples, I’m forwarding traffic to localhost:8080 and 443 and will set up a SSH tunnel to forward that traffic later.

There are two ways to set up forwarding:

As a regular nginx caching proxy:

This is a good option when you want to utilise caching. However you’ll need to set up your letsencrypt certificates on the server.

server {
  server_name myserver.au
  location / {
    proxy_pass http://localhost:8080/;
    proxy_buffering off;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Port $server_port;
  }
}

As a socket forwarding proxy

This option doesn’t proxy http traffic, it just forwards packets directly.

stream {
        server{
                listen 110.1.1.58:443;
                proxy_pass localhost:8080;

        }
        server {
                listen 110.1.1.58:80;
                proxy_pass localhost:8443;
        }
}

This method is easier for something like Coolify that deals with virtualhosts and ssl for you, but the downside is that there’s no caching, we can’t add an x-forwarded-for header, and it eats up an entire IP address. You can’t mix a socket forward with a regular proxy-pass.


How to forward ports to your self hosted server

First, generate SSH keys on your self-hosted server, and allow logins from your self hosted server to your nginx server. DigitalOcean has a guide to setting up ssh keys.

You can verify this is working by running ssh root@myNginxServer.au on your self hosted server and seeing it log in automatically without a password.

Then test your port forwarding with the following command:

ssh root@myNginxServer.au -R 8080:127.0.0.1:80 -R 8443:127.0.0.1:443

The -R argument opens port 8080 on the remote server, and forwards all traffic to port 80 on the local server. I’ve included two forwards in this command, for both http and https. The 127.0.0.1 address binds traffic to localhost, so only the local machine can forward traffic on these ports, but you could open it to the whole world with 0.0.0.0.


How to set up a persistent SSH tunnel/port forward with systemd

Then, create a systemd service to maintain the tunnel.

I borrowed these instructions from Jay Ta’ala’s notes and customised them to suit:

sudo vim /etc/systemd/system/ssh-tunnel-persistent.service

And paste:

[Unit]
Description=Expose local ports 80/443 on remote port 8080/8443
After=network.target
 
[Service]
Restart=on-failure
RestartSec=5
ExecStart=/usr/bin/ssh -NTC -o ServerAliveInterval=60 -o ExitOnForwardFailure=yes -R 8080:127.0.0.1:80 -R 8443:127.0.0.1:443 root@myNginxServer.au
 
[Install]
WantedBy=multi-user.target

You can then start the systemd service/ssh tunnel with:

# reload changes from disk after you edited them
sudo systemctl daemon-reload

# enable the service on system boot
sudo systemctl enable ssh-tunnel-persistent.service 

# start the tunnel
sudo systemctl start ssh-tunnel-persistent.service

My observations using SSH tunneling

If all is working, those steps should now be forwarding traffic to your self hosted server.

Initially this was difficult to set up because the vagueness of the docs for whether to use -L or -R, but once it was running it seems fine.

The systemd service works well for maintaining the connection and restarting it when it drops. I can reboot my nginx proxy and see the tunnel reestablish shortly afterward. My high level understanding is that when the tunnel breaks after ServerAliveInterval=60 seconds, the ssh command will realise the connection has dropped and terminate, then systemd restarts the service ad infinitum.

You can adjust the ssh command to suit. There’s probably not much point enabling compression because the traffic is likely to already be compressed. But you could tweak the timeouts to your preference.

Gaia, West Village, Brisbane Festival 2022

A twilight shot of a grassy square, an old gentrified factory building in the background, and a giant illuminated planet earth suspended in the air. South America and Africa are visible. There are people admiring underneath.

I went to West Village to check out the artwork Gaia for Brisbane Festival, by artist Luke Jerram.

An intimate encounter with our home planet.

Gaia acts as a mirror, a journey of discovery, and a warning. The viewer may experience a new perspective, a sense that societies of the Earth are all interconnected as well as the realisation that we have a responsibility to one another, to preserve, to protect.

It wasn’t much to look at during the day, so I went to do my shopping while the sun set. At dusk it was illuminated against the sunset sky and just incredible to look at. I spent ages checking it out from all angles, trying to get the best photo along with everyone else.

Measuring 7 metres in diameter, Gaia is the second in a series of three awe-inspiring large-scale installations by Luke Jerram at West Village. 

Here is your chance to see the Earth as if from space; an incredibly beautiful and precious place. An ecosystem we urgently need to look after — our only home.

The Brisbane Festival program lists three separate planets that are rotated out throughout the festival.

I missed seeing the moon at the beginning of the festival, but tomorrow the giant Earth will be swapped out for a simulacrum of Mars.

Created in partnership with the Natural Environment Research Council (NERC), Bluedot and The UK Association for Science and Discovery Centres. With supporting partners Culture Liverpool and Liverpool Cathedral.

I logged on to Flickr for the first time in years to upload this photo, but my account is limited because I need to pay.

But one of the last photos I uploaded caught my eye. Taken on December 22, 2017, the construction of the controversial West Village complex where the installation now sits. What a change.

A concrete building site. A two story historic factory sits in front of three massive, blocky towers under construction.

My gear: how I vlog

People often (once) ask me what I use to create my videos. It’s been a bunch of different stuff over the years, but I think I’ve settled on a good setup.

TLDR: I reckon a good camera and a tripod/selfie stick is pretty much all ya need.

Sony ZV-1 Camera

This thing is amazing and I wish it existed when I started. It’s essentially the latest in Sony’s RX100 compact point & shoot line, but tailored for video. So it’s a massive sensor, zoom lens, integrated stereo mic and 4k recording in a tiny 300 gram package.

This isn’t the perfect camera. The stabilisation isn’t very good and the highest level crops in and makes the image less sharp, so I generally turn it off and take care with the framing. It also caps out at 30fps, so none of that sweet slow mo b-roll. Finally it records in h264 rather than h265, which is fine but the video takes up at least double the space.

But the image quality is stellar and I love it and I’m very happy.

Tripod/selfie stick

It’s easy to giggle at the sheer vanity of a selfie stick, but I am a vlogger after all!

The ones I’ve found the most utility from are essentially mini tripods. They combine a tripod base, telescopic pole, and standard screw thread (1/4-20 UNC) so I can mount pretty much anything from a microphone, my phone, camera or GoPro and stick it in place.

I’ve taken some variation of these around the world, from the windy cliffs of Lisbon to the window in Iceland trying to catch a glimpse of the northern lights.

The BK15 on the left is much more sturdy than the BK10 on the right. These days it’s my mic mount

I’m on my second one now, the Benro BK15 Selfie Stick & Mini Tripod w/Bluetooth Remote. I don’t use the remote, ever. But the stick is sturdy, doesn’t move from wherever you stuck it.

The BK10 started to flex on me after a few years, but the BK15 is the next generation and feels a lot more solid.

Pixel 6 (phone cam)

I was a big believer in using my phone to vlog. I can whip my phone out of my pocket and be recording in seconds. But the quality isn’t there.

I bought into the Apple hype and trialled a 12 Pro Max and it produced such god-awful video that I never released the vlog, destroyed the evidence*, and returned the iPhone for a refund.

I ended up getting the Pixel 6 which apparently uses some form of software HDR while recording video, but I wish I could turn it off because often the sky is blown out to a deep blue colour while the rest of the picture is heavily compressed and mushy looking. The stabilisation is super janky, and I’ve seen the stock standard stabe warp the image. AND I’ve noticed dropped frames in videos at 60fps. If you’re interested you can see all of this in action on my Australian Christmas video which is shot entirely on the Pixel 6.

I’m being hard on the video because it’s a selling point and it’s truly not good enough. I’ve had much better results out of Filmic Pro because it doesn’t use all the Pixel magic, but that’s slower and requires a lot more care to get a good shot.

But I digress! I use my phone from time to time when I don’t have my camera on hand. It’s not amazing quality, but it does alright.

GoPros for B-Roll

I also used a couple of GoPros, the Hero 7 is currently my main wide angle/action/time lapse camera. You can see it in action a fair bit on my Macleay Island video. I have a chest strap which I use on the bike, as well as a standard 1/4-20 UNC mount that I can use on the tripod. The built in mic is not great at all, so I mostly use it for b-roll and time lapses.

I also have a GoPro HERO5 Session which is a tiny baby, but only barely does 4k so I mostly use that for time lapses as well.

The GoPro Session 5 and Hero 7. The 7 is inside an Ulanzi cage on a small handle.

In the pic you can see the Ulanzi cage which holds the microphone adapter for the GoPro. I originally wanted to use this as a handheld vlog cam, and it might still be good for that on hikes and things because of the incredible stabilisation. But I haven’t really found myself using it and I wish the GoPro just came with a damn 3.5mm jack.

Other gear

  • Zhiyun Crane – I picked this up second hand on ebay but I hardly used it because it’s big and chunky and super slow to set up. But I used it recently at Botanica and I think I’m getting a feel for it. It’s great to stabilise the ZV1 when there’s a lot of movement, but I think it’s a special occasions kind of thing.
  • Zoom H1n – this is an excellent microphone. I’ve mostly been using it as my video conferencing WFH mic lately, but it’s a fantastic stereo mic which I use to capture ambience and sound floor for my videos. Or at least, that’s the intention, it runs flat really quickly on rechargeable batteries so I haven’t used it as much as I’d like.
  • Rode VideoMicro – a little shotgun mic I can mount on my camera. It’s good for talking-to-camera vlog style shots because it isolates my voice. But it’s only mono and I haven’t worked out the best way to integrate it with my workflow. Most of the time the built in ZV1 mic is more versatile.
  • DJI Mini 3 Pro – This is a new addition. There was one shot I desperately wanted to get in my Gympie vlog which was an epic drone shot of the Mary Valley Rattler crossing Deep Creek. I didn’t get that shot, but I did get the Mini 3 when it was released shortly after. I’m excited to play with it more.
Imagine this, except as a sweeping panoramic drone shot. “Gympie Mary Valley Heritage Steam Train” by Thirumurugan P is licensed under CC BY-ND 2.0.

Davinci Resolve video editor

I switched to Mac in 2017 in part because video editing on Linux is an absolute nightmare.

I started out with iMovie which I used for all of my vlogs up until 2020. My first real full Davinci vid was last year’s Brisbane Festival roundup, which took a VERY long time to pull together while I learned how stuff works. Quite ambitious.

But I think I’ve gotten a lot better and faster at it.

Davinci Resolve edit window showing the media pool, effects, inspector, timeline, and a proto of me giggling at the noodle markets.

There’s not a lot of other software I use, but in the past I’ve used Krisp to recover bad audio, and I’m generally a fan of youtube-dl to rip old youtube vids of mine, ffmpeg to occasionally perform some repairs on a video, or Handbrake for tweaking the encoding. I also use rev.com for better or worse when I’m in a hurry and don’t feel like doing my own captions.

Honorary mention Pixel 2 XL (retired, 2018-2021)

This was my primary vlog cam for pretty much the entire time I was overseas. This was an awesome little unit. It couldn’t do much, but it was my first 4k camera and it’s what started everything!

One little gadget I used to take everywhere was the Windblocker. That thing saved my audio on countless occasions and if you’re vlogging with a phone I can’t recommend it enough.

After three and a half years, this thing was so battered around that I upgraded to the Pixel 6 on release day and gave this one away for free on Gumtree to a gentleman who seemed to really appreciate it.

A Pixel 2 XL on a bright background. It's showing the welcome screen after being factory reset. There are cracks all over the screen.

That’s about it

What’s your video set up look like? Is there anything I’m missing? Shoot me an email!