Iguazu: Waterfalls, Waterfalls, Waterfalls!

I entered Puerto Iguazu with high hopes. My last two towns, Goya and Ituzaingó, were disappointments. But the ride from Ituzaingó to Puerto Iguazu was immensely satisfying after the boring tar roads that make up most of Corrientes Province in Argentina.

Heading north felt ... Brazilian. The boring, flat farm-scapes of Corrientes suddenly made way for a tropical forest, with the main highway leading a path to the border. There wasn't much of a view. Almost the entire way up saw the road enclosed by a tight treeline. But the top of each rolling hill confirmed that a blanket of trees covered everything in sight so I wasn’t missing much. The further north I rode the more touristic things became with camping, zipline tours, rafting and the like pretty commonplace after a while.

I asked around as I traveled, looking for sights recommended by the locals, and Iguazu falls was always high up on every list. It is the largest collection of waterfalls in the world. Not the largest waterfall, but the largest number of smaller waterfalls. As a bonus, it is also the location of Tres Fronteras, or the three frontiers. The intersecting rivers serve as the borders for Argentina, Brazil, and Paraguay, all visible from one spot.

I had fuel and time, so why not?

My first impressions of Puerto Iguazu were not good. Initially I suspected I chose my accommodation poorly and ended up living in the bad part of town, but it turned out that was just the town. The neighborhood looked run down and unsafe, but I had no safety problems whatsoever, and the owners even parked their vehicle on the street for the duration of my stay so my bike would be behind a locked gate. Centro (downtown) was much nicer than the residential areas, with a fantastic selection of restaurants and the usual  assortment of shops carrying touristy trinkets typical of border towns.
On Saturday, two days after arriving, I visited Parque Nacional Iguazu. The plan was to walk around, see the sights, and take photos of the falls. But shortly after entering the park I found a booth selling tickets for a boat ride and looking for a break from the norm, I decided to go for it. It was one of the best decisions I've ever made!

The experience was far more than a simple boat ride. A truck collected ticket holders at a designated meeting spot, and what followed was a bumpy ride through the wilderness for around 25 minutes, arriving at the banks of a river. A 10 minute walk later and we were collecting waterproof bags for our fragile items and clothing we didn't want to get wet, before donning life jackets and boarding boats. Those who planned to be on this trip were smart enough to carry an extra set of clothes. I was not one of them.

We headed directly for the falls and around 15 minutes later, were greeted by the spectacular sight of more waterfalls than I could count.

Then the real fun began. The boat captain moved us directly into the falls! Having thousands of litres of water pound you from above is an indescribable feeling. The group couldn't get enough of it and we drifted under the falls many more times until everyone aboard was soaked through. Drenched but smiling, our group enthusiastically requested more dips under the largest falls before heading back to land, returning to the trucks and ending an amazing experience.
I spent the remainder of the afternoon walking through the park and photographing the various falls like i had originally planned. The largest falls seemed less spectacular from above after experiencing how they felt a few hours prior. Regardless, the day was anything but a disappointment, and Iguazu Falls remains one of the most amazing highlights of my trip!

The Amazing Road To Andalgala, Argentina

TL;DR; Ruta 65 is awesome, find the GPX file here

Back in August 2019 while in north west Argentina, I traveled from San Miguel de Tucuman to the tiny town of Andalgala.

The aim of my South America trip was always to visit Patagonia. I entered the country about 2 months earlier and realized that while my destination is south, my South African constitution in no way equipped me for the cold I was experiencing. Ushuaia, and the many towns in between would be covered in snow. I knew this beforehand of course, but there is a huge difference between knowing something and understanding it. Feeling the Buenos Aires cold helped me understand I was not yet ready for snow.

So north it was. To Parque Nacional Ibera, to the Cataratas (Iguazu Falls), across Paraguagy, and back into Argentina. After an amazing 2 week vacation in Salta (and much more riding around), I found myself in Tucuman. It was nice. That’s it. Nothing particularly memorable. I lived in not the nicest part of town (though far from the worst), so perhaps my impression is biased.

Regardless, my next big destination was Mendoza, and there aren’t a huge number of amazing cities between the two. In the spirit of adventure, I chose to head to Andalgala, a very not-impressive town surrounded by amazing scenery. But my real reason for going was the road. According to the map, it had everything an adventure rider looks for. It was meant to be mostly gravel, tons of switchbacks, mountain climbs, and those are often accompanied by good views. My expectations were not high, but a ride though the mountains always beats a boring freeway.

My expectations were completely blown away. The views were amazing, the road was amazing. The terrain changed from forest to mountain climbs, to riding in the mountains, and back down again. There were literally moments I stopped riding, looked around and went “WOW, I can’t believe I’m here”.

Thankfully a picture speaks a thousand words, and a video a thousand more.

As it turns out the road I originally planned to ride was a closed off mining route so I followed the main road instead. I have no regrets. As I was leaving, I received a warning from some friendly mining folk not to leave my bike unattended since petty theft and outright robbery, even in more remote areas, were commonplace. I cannot attest to that personally. I always got the impression that Argentina was safe. But of course I’m South African and I understand one’s views on safety is very much a relative concept.

After following the river for a while the long climb up the mountain started, with more switchbacks than I remember. I do remember feeling particularly adventurous on my KTM 1090, overlooking a forest from a mountain I had just climbed, with more peaks to be discovered … until a man on a tiny city scooter passed me on his way down. He didn’t have fancy riding gear and wore the sort of bored expression that convinced me this was a regular journey for him. It’s one of many similar lessons I’ve learned on this trip. It’s not about what you have, it’s about what you do with what you have. My adventure is daily life for many.

The road weaved through the mountains, ever undulating but without any nasty climbs or difficulty of any sort really. The descent was amazing in its own right, but the climb up will forever be burnt in my memory. The road flattened out for a while and switched back to tar until not too far from Andalgala, where a second small climb revealed some of the most stunning views of roads and landscape, with Andalgala in the distance.

I have pictures, videos, memories. But the unexpected experience of finding exactly what I was looking cannot be expressed in words.

For anyone wanting to view the route or better yet, try it yourself, you can find the GPX file for your Garmin or similar GPS device here

Trapped in Bariloche

This is me complaining about my first world Covid problems. I’m thankfully largely unaffected by the disease; I have lost no one near and dear to me and for that I am grateful, but I’m still stuck.

My South America motorcycle trip started over 2 years ago and it was a smashing success. After touring 4 countries (and a smidge of Brazil), I got to see everything I wanted in Patagonia and ended up spending 5 months in the area. Then I returned to Buenos Aires and (dum dum dummmm) Covid.

Fast forward a year and I am now in Bariloche, possibly my favourite Argentinian city. I mean, just look at it!

Last time I was here in Spring and it looked even more stunning!

And with winter just around the corner, I am totally looking forward to snow. I’ve never experienced a snowy winter so there’s that to look forward to.

But Covid means there’s no place to go anymore. The second wave has hit Argentina and we are currently at the tail end of a 9 day full lockdown. Outside the lockdown, curfews prevent moving between provinces without Covid-free health certificates. All land borders to neighbouring countries are shut for the forseeable future. The plan was to head to Chile, then north towards Alaska. Back in May 2020, I thought I’d be heading that way in October 2020, then November, then February. It’s almost June 2021 now.

This sucks.

Rust. An Opinion On The Good, The Bad, and The Ugly

TL;DR Rust is a necessary pain in the butt that will ultimately make the programming world a better place

Less than one year into my career as a programmer, I watched a senior developer, Mike, write some C code. Mike was always ultra productive and wrote simple, easy to read code. His skill and experience were evident in his work. He was the lead coder at the company, and for good reason.

Then he did something that, to my inexperienced eyes, was downright dirty. He used “goto”. I knew about goto statements. They were ugly. They created spaghetti code. Using them was bad programming practice. Every article I had read said so, and my professors agreed. There was always a better way to solve a problem than using “goto”.

In the almost 20 years since I’ve used goto statements a lot, most recently earlier this week. I learned there’s a time and place for everything. Programming languages are just tools. The skill and ultimately the responsibility for creating good code lies with the coder, not the language. But there’s more to it than that …

Enter Rust

Rust solves many memory problems. In many ways, you can’t have bugs due to bad practice because Rust forces good, reliable programming practices. Deviate from that norm and you need to either explicitly mark your code as “unsafe{}” meaning you take responsibility for your bad behaviour, or your code will not compile.

This is the good, arguably.

Rust’s borrow checker ensures you can’t make certain types of errors. As the size of a project grows, whether in terms of complexity, number of lines of code, or even coders, the borrow checker ensures a level of consistency in your code that would be exceptionally difficult to achieve otherwise. Put differently, using Rust instead of, for instance C, ensures my malloc() will not be free()’ed twice when my initially humble hobby project develops into a 12 developer 500k LoC, multi module behemoth 4 years later. The compiler has you covered.

One of the cons of Rust, generally speaking, is the long compile times. Personally I don’t have an issue with this. And the reality is the incremental compile times are not long, only initial and rebuild times. When weighed against the pro of having the compiler save me potentially hours, days, or weeks of future maintenance and bug fixing, a longer than normal compile time periodically is hardly an issue.

Language complexity is far more of a sticking point for me.

I found Rust to be large, complex, and generally difficult to learn. There was a point several months ago when I seriously questioned whether the effort of learning Rust and fighting the compiler on every build was worth it. The answer was usually no.

The Rust learning curve is extremely steep, especially when coming from a more conventional language like C or Java. I suspect this more than anything will prevent wide scale adoption of the language amongst existing coders. But new coders who know Rust as a first or at least one of their first few languages, will find the language much easier given that they simply learn things the Rust way instead of needing to unlearn years of bad habits first. The impact of this will be older code maintained by an older generation with older ways of thinking. The newer generation of coders by contrast will create more reliable, and generally better code.

You can learn the basics of C in a day and be reasonably productive in a week. I would say the same is true of Golang, Java, Python, and numerous other languages. But I often see posts online, even in the Rust forums, where people struggle with Rust concepts months after beginning their Rust journey.

Other languages are just easier.

And despite the correctness that can be achieved with Rust, in many cases easier is better. Microservices should never be large and complex. So while a microservice can be written in Rust, is the steep learning curve worth the effort? My preference would be Java or Golang. Despite the lack of correctness, the problem is small and simple enough that Rust becomes more of a hindrance. The same applies to just about any piece of code where the focus is rapid development. Rust is not the best tool for every job.

However for larger projects, I am leaning more towards Rust than any other language. The benefits of long term consistency within the project enforced by the compiler are huge. And for this reason alone, I suspect companies will be switching much of their future code to Rust. Having a computer tool ensure you have not made mistakes is immensely beneficial.

Once upon a time developers took responsibility for all code. Understanding the rules of a system were important not only because it allowed you to use the system correctly, but because it empowered you to bend those rules where required. Understanding this meant “goto” statements were not bad … when used responsibly. It meant sharing memory without mutexes was acceptable because 8-bit microcontrollers were not used for multitasking anyways, and in that context race conditions would not exist. These things are not bad if you understand the rules. Automated code checkers, at least the ones that exist currently like the borrow checker, do not fully understand these rules. And so the huge benefits of a language like Rust come at the cost claiming that the compiler, not the programmer, knows best, at least by default. For a large enough problem, I believe this is true, for better or worse. Yet this also turns the art of programming into the the science of programming in many ways. In a way, it’s like watching the end of a computing era slowly unfold.

Ultimately I would say Rust is a tool. An extremely powerful tool, but just a tool. Using it makes for better, more reliable code and it should be used whenever appropriate, but it is not a solution to every problem. Regardless, I still believe it to be the most game-changing language currently on the market.