Photos from my March 2023 trip to New Zealand’s South Island

In the beginning of March 2023, I took my best friend to the South Island of New Zealand as a celebration of 20 years of friendship. Though we flew into Auckland (on the North Island), we took the next flight to Queenstown, which is quite far south on the South Island. We then rented a car and worked our way back north from Queenstown to Christchurch, then onto Blenheim (with a stop in Kaikoura on the way), and lastly to Nelson before departing.

For a photographer who especially enjoys landscapes, I had to resist photographing every beautiful area because that’s essentially the entire country. I took thousands of photos (not an exaggeration), but the ones below were some of my favourites. I have organised them according to the area and timeline of our trip.

Feel free to click on any of the thumbnails to see larger versions (though, even the larger versions are still only 25% of the original size).  If you would like to use the full-resolution image, please leave a comment and I will contact you to discuss.

Queenstown

The first three photos (of Lake Wakatipu) were taken from right down the street from our hotel.  Needless to say, the views were wonderful from our balcony as well.

Lake Wakatipu in Queenstown - just after sunrise
Lake Wakatipu in Queenstown – just after sunrise

Lake Wakatipu in Queenstown - at the rocky shoreline
Lake Wakatipu in Queenstown – at the rocky shoreline

Lake Wakatipu in Queenstown - trees hanging over the shore
Lake Wakatipu in Queenstown – trees hanging over the shore

Halfway Bay in Queenstown - radiant blue-green waters
Halfway Bay in Queenstown – radiant blue-green waters

Halfway Bay in Queenstown - much more dramatic clouds
Halfway Bay in Queenstown – much more dramatic clouds

Moke Lake, which is a short drive northwest of Queenstown, ended up being my favourite place not only in the area, but on the entire trip.  It was so beautifully serene and peaceful, and the hike around the lake was magnificent.

Moke Lake in Queenstown - looking back at the entryway
Moke Lake in Queenstown – looking back at the entryway

Moke Lake in Queenstown - broader scope of the entryway
Moke Lake in Queenstown – broader scope of the entryway

Moke Lake in Queenstown - facing north to the mountains
Moke Lake in Queenstown – facing north to the mountains

Moke Lake in Queenstown - a storm brewing
Moke Lake in Queenstown – a storm brewing

Wānaka

The town of Wānaka is about a 1-hour drive northeast of Queenstown, but it is a challenging drive as the road twists and turns through the mountains.  I had to see it, though, primarily because of the infamous tree.

Wānaka Lavender Farm - a bench to take in the views
Wānaka Lavender Farm – a bench to take in the views

The infamous Wānaka Tree
The infamous Wānaka Tree

Christchurch

The trip from Christchurch to Akaroa (where many go to dolphin watch) is lovely through and through.  Approximately halfway, there is an offshoot into the Kaituna Valley.  That’s where I found the beautiful St. Kentigern’s Anglican Church.

St. Kentigern's Anglican Church in Kaituna - from the street
St. Kentigern’s Anglican Church in Kaituna – from the street

St. Kentigern's Anglican Church in Kaituna - opening the gate
St. Kentigern’s Anglican Church in Kaituna – opening the gate

St. Kentigern's Anglican Church in Kaituna - front view
St. Kentigern’s Anglican Church in Kaituna – front view

Nelson

All around “Sunny Nelson” are beautiful beaches and pristine waters.  Making the ~3-hour drive each way to see Cape Farewellthe farthest north spot on the South Islandmay seem daunting (and it is in spots), but it is worth the time.  I wish we could have stayed the night there so that we could have walked more of the trails.

 

The stunning waters at Cable Bay in Nelson
The stunning waters at Cable Bay in Nelson

 

 

Looking north across the vast Pacific Ocean at Cape Farewell
Looking north across the vast Pacific Ocean at Cape Farewell

 

 

At the edge of the world - Cape Farewell
At the edge of the world – Cape Farewell

 

 

Windswept trees on the trail to Wharariki Beach
Windswept trees on the trail to Wharariki Beach

 

Closer to Nelson, the Riwaka Resurgence (which is the source of the Riwaka River) proved to be one of the most gorgeous areas that I saw.  The waters throughout New Zealand were otherworldly colours, but this spot in particular was unlike anything I’ve ever seen.

 

The underground source of the Riwaka River (The Riwaka Resurgence)
The underground source of the Riwaka River (The Riwaka Resurgence)

 

 

The Riwaka River flowing from its source
The Riwaka River flowing from its source

 

Though there were tons of other beautiful spots throughout the trip, these were taken with my digital SLR and were the shots for which I took a substantial amount of time setting up (e.g. positioning a tripod, taking light meter readings, multiple exposures, et cetera). At some point, I may go through the photos that I took with my mobile and post some of them as well.

Cheers,

Nathan Zachary

Fixing Intel Wi-Fi 6 AX200 latency and ping spikes in Linux

Recently, I purchased a mini-PC with an embedded Intel Wi-Fi 6 AX200 wireless chipset and installed Gentoo Linux on it. The reason I purchased the mini-PC was to replace my ageing music server (running MPD), but I also wanted to use it for playing retro video games through my entertainment centre. Everything went well with the OS installation, but during that time, I had it plugged into my router via a wired connection. Once I moved the mini-PC into place in my sitting room and started using the wireless connection, I noticed that there was substantial lag even when doing something simple like typing in a terminal via SSH.

A quick ping test showed that there was clearly a problem with the wireless. For my home network, I consider any ping response time of >=5ms to be unacceptable and indicative of an underlying network problem:

$ ping -c 20 192.168.1.120
PING 192.168.1.120 (192.168.1.120) 56(84) bytes of data.
64 bytes from 192.168.1.120: icmp_seq=1 ttl=64 time=214 ms
64 bytes from 192.168.1.120: icmp_seq=2 ttl=64 time=30.7 ms
64 bytes from 192.168.1.120: icmp_seq=3 ttl=64 time=54.4 ms
64 bytes from 192.168.1.120: icmp_seq=4 ttl=64 time=75.1 ms
64 bytes from 192.168.1.120: icmp_seq=5 ttl=64 time=97.8 ms
64 bytes from 192.168.1.120: icmp_seq=6 ttl=64 time=122 ms
64 bytes from 192.168.1.120: icmp_seq=7 ttl=64 time=142 ms
64 bytes from 192.168.1.120: icmp_seq=8 ttl=64 time=2.46 ms
64 bytes from 192.168.1.120: icmp_seq=9 ttl=64 time=2.30 ms
64 bytes from 192.168.1.120: icmp_seq=10 ttl=64 time=4.72 ms
64 bytes from 192.168.1.120: icmp_seq=11 ttl=64 time=26.3 ms
64 bytes from 192.168.1.120: icmp_seq=12 ttl=64 time=2.30 ms
64 bytes from 192.168.1.120: icmp_seq=13 ttl=64 time=71.7 ms
64 bytes from 192.168.1.120: icmp_seq=14 ttl=64 time=94.6 ms
64 bytes from 192.168.1.120: icmp_seq=15 ttl=64 time=116 ms
64 bytes from 192.168.1.120: icmp_seq=16 ttl=64 time=139 ms
64 bytes from 192.168.1.120: icmp_seq=17 ttl=64 time=161 ms
64 bytes from 192.168.1.120: icmp_seq=18 ttl=64 time=184 ms
64 bytes from 192.168.1.120: icmp_seq=19 ttl=64 time=205 ms
64 bytes from 192.168.1.120: icmp_seq=20 ttl=64 time=23.5 ms

Though 4 of the 20 ping response times were under my 5-millisecond threshold, the other 16 were not only above it, but many of them were nonsensically high for a small home network (e.g. 214ms).

In this type of scenario, the first thing that I consider is the driver and/or firmware for the wireless adapter (namely, the Intel Wi-Fi 6 AX200). For nearly all modern Intel wireless chips the Linux driver is the in-kernel iwlwifi driver, so I didn’t pay too much attention there. That driver has two possible modules to use in conjunction:

  • DVM (iwldvm)
    • The module that supports the firmware for a specific group of (primarily) AGN chips
  • MVM (iwlmvm)
    • The module that supports the firmware for a much broader scope of Intel wireless chips

I had chosen the iwlmvm module and built it into my kernel for convenience. I also then chose to load the corresponding firmware directly into the kernel as well. The gigantic linux-firmware package contains all the various options for the iwlwifi supporting firmware, and from that table, I saw that the original firmware for the Intel Wi-Fi 6 AX200 was named:

iwlwifi-cc-46.3cfab8da.0.ucode

Looking at the current linux-firmware git tree (at the time of this writing), the relevant firmware packages were:

  • iwlwifi-cc-a0-50.ucode
  • iwlwifi-cc-a0-59.ucode
  • iwlwifi-cc-a0-66.ucode
  • iwlwifi-cc-a0-72.ucode
  • iwlwifi-cc-a0-73.ucode
  • iwlwifi-cc-a0-74.ucode
  • iwlwifi-cc-a0-77.ucode

Using my trial-and-error approach of rebooting and looking at the output of dmesg | grep iwlwifi to find the first version the kernel attempted (but failed) to load, I found that the correct version was iwl-cc-a0-72.ucode, and passed via the kernel’s firmware loader.

After trying various options (such as switching from wpa_supplicant to iwd, and using an older firmware blob), I finally found the fix for the latency and ping spikes: power saving. By issuing iw wlan0 set power_save off, and then starting a new ping test, I could immediately see that the problem was fixed:

$ ping -c 20 192.168.1.120
PING 192.168.1.120 (192.168.1.120) 56(84) bytes of data.
64 bytes from 192.168.1.120: icmp_seq=1 ttl=64 time=2.90 ms
64 bytes from 192.168.1.120: icmp_seq=2 ttl=64 time=1.68 ms
64 bytes from 192.168.1.120: icmp_seq=3 ttl=64 time=2.43 ms
64 bytes from 192.168.1.120: icmp_seq=4 ttl=64 time=2.68 ms
64 bytes from 192.168.1.120: icmp_seq=5 ttl=64 time=3.08 ms
64 bytes from 192.168.1.120: icmp_seq=6 ttl=64 time=2.80 ms
64 bytes from 192.168.1.120: icmp_seq=7 ttl=64 time=3.25 ms
64 bytes from 192.168.1.120: icmp_seq=8 ttl=64 time=3.17 ms
64 bytes from 192.168.1.120: icmp_seq=9 ttl=64 time=2.83 ms
64 bytes from 192.168.1.120: icmp_seq=10 ttl=64 time=3.01 ms
64 bytes from 192.168.1.120: icmp_seq=11 ttl=64 time=2.77 ms
64 bytes from 192.168.1.120: icmp_seq=12 ttl=64 time=2.80 ms
64 bytes from 192.168.1.120: icmp_seq=13 ttl=64 time=3.37 ms
64 bytes from 192.168.1.120: icmp_seq=14 ttl=64 time=2.52 ms
64 bytes from 192.168.1.120: icmp_seq=15 ttl=64 time=2.71 ms
64 bytes from 192.168.1.120: icmp_seq=16 ttl=64 time=2.83 ms
64 bytes from 192.168.1.120: icmp_seq=17 ttl=64 time=3.25 ms
64 bytes from 192.168.1.120: icmp_seq=18 ttl=64 time=2.78 ms
64 bytes from 192.168.1.120: icmp_seq=19 ttl=64 time=2.48 ms
64 bytes from 192.168.1.120: icmp_seq=20 ttl=64 time=3.37 ms

--- 192.168.1.120 ping statistics ---
20 packets transmitted, 20 received, 0% packet loss, time 19036ms
rtt min/avg/max/mdev = 1.679/2.834/3.371/0.379 ms

Now that I had found the solution to the problem, the next task was to make the changes persistent across reboots. Of course, I could throw that iw command command into an rc.local script or something like that, but that seemed hackish to me. Instead, I decided to change my approach for loading the iwlwifi driver and firmware. Rather than having both the driver and the firmware built-in to the kernel, I chose to load them as kernel modules. Doing so allowed me to pass configuration options to the modules when they load. I made a configuration file at /etc/modprobe.d/iwlwifi.conf with the following contents:

$ cat /etc/modprobe.d/iwlwifi.conf 

## Has the same effect has running `iw wlan0 set power_save off`
## Both options sets are needed as iwlmvm will override iwlwifi :(
options iwlwifi power_save=0
## iwlmvm 1=always on, 2=balanced, 3=low-power
options iwlmvm power_scheme=1

As I mentioned in the comments there, BOTH options need to be set: one option passed to the iwlwifi module and the other option passed to the iwlmvm module. Also note the available parameters for the iwlmvm power_scheme:

  • 1 = always on
  • 2 = balanced
  • 3 = low-power

I have validated that these settings work across reboots, and that I no longer see the latency or ping spikes when connecting to this mini-PC over the Intel Wi-Fi 6 AX200. Some of these instructions may be specific to Gentoo and/or the OpenRC init system that I choose to use, but they should be readily adaptable to other distributions and init systems.

Cheers,
Nathan Zachary

Photos from my October 2022 trip to Germany and Switzerland

These days it seems like there simply isn’t enough time in the day. Though my trip to Germany and Switzerland was in October of 2022, I haven’t had time to post some of the photos here on my blog. I’m not going to go through the whole trip, or post all the photos that I took throughout it, but I do want to share some of my favourites.

Feel free to click on any of the thumbnails to see larger versions (though, even the larger versions are still only 25% of the original size).  If you would like to use the full-resolution image, please leave a comment and I will contact you to discuss.

Switzerland:

The mountains in the Swiss Alps are truly remarkable, and I think that some of these shots capture the beauty.  The first few are from the town of Lauterbrunnen, and the latter set is from around Lake Oeschinen (Oeschinensee in German).

Sun caressing the cliff side in Lauterbrunnen
Sun caressing the cliff side in Lauterbrunnen

Last glimpses of light looking south in the valley of Lauterbrunnen
Last glimpses of light looking south in the valley of Lauterbrunnen

Beautiful forests work their way up the mountainside in Lauterbrunnen
Beautiful forests work their way up the mountainside in Lauterbrunnen

The summit footpath down to Lake Oeschinen
The summit footpath down to Lake Oeschinen

Another view to the south from the summit of Lake Oeschinen
View to the south from the summit of Lake Oeschinen

Starkly different view to the north from the summit of Lake Oeschinen
Starkly different view to the north from the summit of Lake Oeschinen

Germany:

The following two photos were from Wiesbaden and the Rheingau region of Germany, respectively. The first is of St. Elizabeth Russian Orthodox Church in Wiesbaden, and the second is at Weingut Robert Weil (a great producer of Rheingau Riesling) with the storms rolling in.

St. Elizabeth Russian Orthodox Church in Wiesbaden, Germany in the sunlight
St. Elizabeth Russian Orthodox Church in Wiesbaden, Germany in the sunlight

Weingut Robert Weil with the ominous clouds of an oncoming storm
Weingut Robert Weil with the ominous clouds of an oncoming storm