Smart, Sensational, Sun-Protecting (S3) Bucket Hats for Dementia Australia

As you probably know if you’ve followed this blog or any of my social media accounts, back in 2018 I worked for Amazon Web Services and I had the idea to sew myself an AWS dress to wear to tech events around the world. It was so popular, my colleagues even made t-shirts and stickers! In 2023 I raised the bar with the AWS dress v2, which had matching sneakers.

As of 2024 though, I’m retired and it seems a bit silly to hang on to these dresses. Why not turn them into something fun and raise money for an important cause? So the dresses have become 14 Smart, Sensational, Sun-Protecting (S3) Bucket Hats, and you can win one by donating to this fundraiser.

Dementia is a terrible disease that has affected our family in recent years. It really, really sucks to watch someone you know and love just change and disappear. I’d like to help other families going through this, and hopefully even work towards a cure.

To do that I need your help! Please make a donation to support my efforts and help me reach my goal to beat dementia. You can donate through:

  1. My Facebook fundraising page
  2. My standalone Dementia Australia fundraising page
  3. Or if neither of those options work for you, feel free to donate to a dementia-related charity in your own country*.

All funds raised (through channels 1 and 2 above) will support the work of Dementia Australia to provide vital support services for people living with dementia, their families and carers. These services include counselling, support groups, education and training.

For every $25 AUD* you donate, you’ll get one entry into a raffle for one of the 14 hats. I will draw the winners at random on November 1st, 2024, and I will cover postage anywhere in the world. Please make sure you are contactable if you win! You can donate as many times as you’d like but you can only win one hat, and you don’t get to choose which one you get. (They’re all the same size anyway.)

* If you donate via option 3, please email me a screenshot of your donation and I will ensure you are entered into the draw. You’ll get 1 entry for the equivalent of $25 AUD in your own currency.

Disclaimers: Obviously I don’t work for AWS anymore, and I don’t claim ownership over their logo or any of their service icons. The hats were made by me from the dresses I wore as part of my employment for AWS, and I won’t ever be making any more. If I can’t contact you within a week, I reserve the right to draw a new name and send the hat to somebody else.

Thank you for your support.

PS for the sewists: if you’re curious about the pattern I used you can download it for free here! Each hat is fully lined, which means I actually had to sew 28 hats (30 if you count the prototype I made). 😅

FIRE, and the next chapter…

After six years at Amazon, it’s finally time to move on and try out early retirement.

As a few folks have guessed, we’ve been proponents of the FIRE movement for a long time now. I am not in a position to give anyone else financial advice and your circumstances are certainly unique to you, but here are some of the resources we used along the way. (Note: where possible I’ve given you a referral link as we both get a benefit.)

  • Get Rich Slowly – JD Roth has written a lot of excellent posts and articles about personal finance. One that I found really helpful was on the Balanced Money Formula, and we’ve been using the Needs/Wants/Savings categories for our spending since 2013. We’ve tweaked it a bit over the years, but it’s a good high-level framework to get you going.
  • Mr. Money Mustache – A more fun (and sweary!) look at financial independence, this blog has given us a lot of ideas and inspiration over the years.
  • J L Collins – Pretty much the godfather of the FIRE movement. He gave a talk at Google one year that Rodd found really helpful, and his site has a lot of useful resources.
  • Reddit – Rodd’s recommendations in particular are r/Bogleheads, r/ChubbyFIRE, r/EuropeFIRE, r/ExpatFIRE, r/fiaustralia, and r/financialindependence. He notes: “r/ChubbyFIRE is for people targeting a particular range of retirement spending. There’s FatFIRE for the >$10M crowd (“Is NetJets worth it, or should I just fly first class?”). Also LeanFIRE for people happy to eat rice and beans for life if it means not working.”
  • You Need a Budget (YNAB) – I’ve written about this budgeting app in the past, and we’ve been using it for 10 years now. It’s mostly geared towards people getting out of debt (using the envelope system), but it also has really good tracking and reporting tools. It has both Android and iOS apps, and you can have separate budgets in other currencies (which we made use of in Germany). In some countries it can pull in your bank transactions automatically, but Aussie banks aren’t supported so we manually put them in every week.
  • Sharesight – We use this online portfolio manager to track all our different investments. Rodd says it’s particularly useful when it comes time to prep our tax returns.
  • Google Drive – Before we landed on YNAB, we had a shared spreadsheet that broke down our income, spending (Needs and Wants), and savings every month. This means we have our spending data all the way back to 2010. We also have a spreadsheet that covers all of our different accounts and investments. (Rodd doesn’t like how Sharesight handles cash/savings accounts, so he prefers to consolidate them here.) We also have a shared folder where we put all our payslips and tax-related docs every year.

A lot of retirement planning is based on your income. We realised quickly that that’s silly; we needed to set our goals on what we wanted to spend. By tracking our spending over time, we had a pretty good idea of what we needed each month. Then we could work out a target that made sense, and put all our efforts into hitting that. Our Google spreadsheet had a graph that tracked our net worth vs. that goal, and it gave me such satisfaction to see the little line marching up every month. Both of us were lucky enough to receive stock from our employers, which we sold as soon as it vested and put into low-fee mutual funds and other long-term investments (spread across US, EU, and AU to reduce risk).

A graph showing our net worth vs. retirement goal

In truth that red line is a little bit of a lie, because we hadn’t accounted for lifestyle inflation and a few other things. It was a good motivational symbol though. It became clear a couple years ago that we had the option to stop work if we wanted to, and in 2022 Rodd opted for it. He’s been out for nearly two years and is really happy. He managed our move back to Australia, got a part-time job leading craft beer tours, organised the renovation, and has managed the household and our lives to free me up to focus just on work. I’m a bit more anxious, so I kept going to pad things out a bit more and cover the cost of our renovation. By the beginning of this year, I was starting to feel really tired and ready to stop. I love my team and my job, but the pandemic really prompted me to think about what’s important. My values have changed. I want to slow down; to focus on my creative pursuits; and to get healthy. So a few months back I told my manager that I was done, and the time to say goodbye finally arrived.

I am not naive enough to think this is possible for everyone. It involved a huge amount of luck and privilege. While we both needed loans for college, we graduated at a time before tuition costs skyrocketed. We are extremely fortunate to have landed in our particular careers at this particular time in history. Between us we had 40+ years in the tech industry, nearly half of it at some of the biggest companies in the world. We were also incredibly lucky to buy a house for a decent price in a neighbourhood where we don’t need to have a car. We don’t have kids, and we live in a country with strong national healthcare. We haven’t had to deal with relationship breakdown or serious illness. And despite me saying “we” throughout this post, most of the long-term investment efforts have been managed by Rodd. I’m incredibly lucky to have a partner that is interested and capable of navigating this stuff. Obviously we can’t know what will happen in the future, and I’m not ruling out getting a job again at some point. But right now I’m excited to have our time be our own, and to enjoy life for a while. I’m looking forwad to catching up with friends, and to moving back into our house once it’s finished. We’re also exploring options for volunteering, to start to pay it forwards for others.

And of course… expect a lot more blogging! I can’t wait to get back to it. ❤️

Singapore, Melbourne, and the Emergency Room

So many trips to document! After a quiet January settling back in Sydney, in February I headed to Singapore to help deliver the opening and closing keynotes for AWS Innovate AIML edition.

Me in a mask

I headed into the office to meet with a few colleagues. The view is pretty nice…

Working from the office

For the keynotes, we were going to stream them live from a greenscreen studio. I headed over early in the morning for hair and makeup, where I found a special surprise waiting: my colleague Ethan had created a special t-shirt with me wearing my AWS dress!

Me all made up

How cute is that?? We spent a very long day of finalising the content, rehearsing, and pre-recording a dress rehearsal. That night, I headed out to Brewerks in Clarke Quay for dinner. Singapore is such a pretty city.

Singapore

I had a very early start the next day for the actual live stream. It went really well. Thanks to Ethan and my awesome co-host Dean for making everything so fun!

Dean, Ethan, and me

The weather wasn’t great in Singapore that week, but I did manage to work by the pool for a few hours.

Sitting by the pool

I also attended the AWS Singapore meetup one night, which we held in our offices. Massive turnout, and a really great evening of talks.

AWS Meetup Singapore

The next day, I met up with the two members of my team based in Singapore – Cathy and Donnie!

Cathy, me, and Donnie

We also hosted a dinner for some of the AWS Community members in Singapore: AWS Heroes, AWS Community Builders, and user group leaders.

On my very last night, I went out for dinner with my good buddy Gabe and his wife Alex. They took me to a local place that was super crowded, insanely tasty, and so cheap. Singaporeans are spoiled for food, I tell ya.

Gabe and Alex

It was a quick trip – just a week – but it was great getting to catch up with all these folks!

A couple weeks later, the Snook and I both flew to Melbourne where I’d be delivering the closing talk of ServerlessDays ANZ.

Me and Rodd on the airplane

We made it just in time to attend the speakers’ dinner that night, and then had a lovely walk back along the Yarra.

Me and Rodd in Melbourne

The next day was the conference. The venue at Federation Square was gorgeous! My buddies Lars Klint and Pete Hanssens were on the organising committee and kicked things off.

Kicking off ServerlessDays ANZ

Great crowd!

Selfie with crowd

Here are some of the amazing other speakers! The talks are all up on YouTube.

Speakers

My session was the last one of the day…

Mic'ed up and ready to go!

Thankfully it went realy well and I was happy that it was so well received! Thanks to my colleagues Paul, Stephen, Gregor, and Derek for all their help with the event.

Me presenting

Me from the audience

After the conference, we all headed to a nearby bar for the afterparty…

The next morning we headed out into the city to be tourists. We mooched around the Queen Victoria Markets and enjoyed the sunshine. The hot weather helped us justify stopping off at Brick Lane Shed for a sneaky beer!

Me and Rodd

We also had a late lunch of some very tasty bagels from Bowery to Williamsburg.

Snooky with a bagel

We had a plan to meet someone at ACMI but had some time to kill, so we decided to check out the “Story of the Moving Image” exhibition.

Then we headed up to the lab to meet my friend J Rosenbaum and check out their fascinating new artwork Gender Tapestry. We took selfies that were uploaded and featured in some of the creepy generated faces.

That night, the Snook – a notorious hater of musicals – gave me a lovely birthday present of attending & Juliet with me. (It helped that I told him all the songs were from the catalogue of Max Martin, Swedish Pop producer extraordinaire!)

& Juliet

I LOVED IT. It’s a retelling of Romeo and Juliet with loads of pop song mash-ups, a gay romance, great costumes, fantastic dancing, and Rob “Millsy” Mills as Shakespeare. I mean, WAS THIS WRITTEN FOR ME?!

& Juliet

Afterwards, we headed to trendy Bar Ampere for dinner and cocktails.

Bar Ampere

On our last day, we headed down to St. Kilda to enjoy the sunshine and check out the markets.

Luna Park

We were delighted to discover the nearby St. Kilda Community Gardens. Lovely place!

We went for a walk along the beach. I always think of the line from the Paul Kelly song – “Where the palm trees have it hard.”

St. Kilda beach

We finished our trip with a spot of furniture browsing in Collingwood followed by beers at The Craft & Co.

Beers

And that’s where it would have ended, a nice ending to the weekend… except for a little accident on the way back to the hotel. Here’s how I described it to my sister:

So Rodd and I were briefly walking back to our hotel in Melbourne so we could head to the airport. Down one of the busiest shopping streets, people everywhere.
I walk over, like, a manhole or something.
And my left foot lands crookedly
And I start stumbling forward
And I can’t get my feet under me
And it’s like slow motion, and I’m like, yep, I’m going down. 😂
And rather than try to land on my knees or my hands, perhaps sensing that I could risk breaking something that way, instead I face plant.
Literally belly flop on the pavement, taking the brunt of the fall on my boobs.
The Asian couple in front of me were like horrified “ARE YOU OKAY?!?”
And Rodd helped me up and I’m okay
Skinned my elbow a tiny bit
But I suspect my chest is gonna hurt tomorrow.
So that’s me. Still falling on my face, as a grown-ass adult.

Over the course of the next week, my chest started to feel increasingly sore. I didn’t have any visible bruising, but sleeping on my left side was impossible and it got harder and harder to breathe. Finally I started to get worried that something was really wrong, so we headed to the hospital.

In the hospital

A few hours and a couple X-rays and an EKG later, they confirmed that I wasn’t having a heart attack. The doctor couldn’t rule out a cracked rib, but didn’t see one on the X-ray. The only thing I could do was wait until it stopped hurting, which took a few more weeks. In retrospect, seems likely that it was a case of costochondritis, where the cartilage between the ribs gets inflamed. I’m super grateful to the Australian health care system and the doctors for helping me rule out anything more serious! (Oh, and it didn’t cost me anything. 😅)

Sydney, we’re home ❤️

It’s the last day of 2022, and we’ve been home in Australia for two weeks now. It feels… truly surreal.

For the last month or so in Europe, I kept having conversations with people who either A) didn’t realise we were moving back to Australia or B) thought we’d already left. For the record, the plan when we moved to Munich back in 2020 was always to return in a couple years. I had a vague idea that it would likely be in 2023, and that’s the time frame we shared with our German landlord, our Australian tenant, and my manager at AWS.

Things suddenly got real in January 2022 when my manager asked me to call him. It turns out that my buddy who headed up the AWS Developer Relations team in Asia-Pacific had decided to resign and go work for a startup. My manager wanted to know if I was interested in the role. On one hand, it was a promotion of sorts, and it would be the #1 role I’d have wanted if I was moving back. But on the other hand, this was way ahead of schedule. I also knew that if I didn’t go for it, they’d hire someone else and that role wouldn’t be available when I eventually did move. I asked my manager if it would be possible to do the role remotely for the rest of the year, and he said it was as long as I was willing to deal with the timezones. I interviewed for the role, got it, and officially took it on in April 2022. For the last 8 months I’ve been managing a team of Developer Advocates in Asia-Pacific from Germany, which has meant being on calls at 6am and late into the evening.

We left the timeline vague as long as we could. We knew we wanted to experience Oktoberfest and as many Christmas markets as possible, and I wasn’t sure yet whether I’d need to go to AWS re:Invent in November. Then the Snook resigned from his job at Google and finished up at the end of August (after 10 years!), which meant he only had a couple months to stay in the country legally on his visa. Our tenant Kelly let us know that she wanted to go visit family in Perth for Christmas, which meant that we’d need to arrange someone to look after Petey. Honestly, that made everything a lot simpler. On October 1st, we gave notice that we’d be out before the end of the year and we booked our flights for December 14th.

In early November Rodd started organising for the furniture shipment and we had to decide what to keep or get rid of. We quickly decided not to keep the giant TV that we’d shipped from Australia, and I sold it to an Amazonian. We also sold off our gaming chairs, my IKEA desk, the Sodastream, my bike, and a bunch of other houseware items we didn’t need in Sydney. We also donated a bunch of old clothes that we hadn’t worn in ages to charity.

Selling the TV

We got back from our trip to Paris and Luxembourg exactly two weeks before our return flight to Sydney. There was so much to do! We made a “punch list” of sorts to make sure we didn’t forget anything.

Punch list

We used the same shippers we had two years earlier – OSS – and they were scheduled to arrive one week before we left. We set out all our suitcases and started filling them with the things we knew we wanted to carry back to Australia.

Suitcases

Then we started pulling together everything that would get shipped back. The challenge was that we had rented our place furnished, so we had to make sure we didn’t inadvertently ship back anything that belonged with the house. (Thankfully the Snook had taken very detailed photos of every drawer and cupboard when we moved in, which helped a lot!) Everything we were shipping from the kitchen went onto the dining room table, along with the coffee machine, grinder, and KitchenAid.

Kitchen stuff

We also had designated areas upstairs and downstairs so the movers would know exactly what to take.

Rodd also turned off the server and packed it up with the other things from his office, including his standing desk.

Office stuff

The movers turned up on time and got to work packing it all up in boxes. They were finished within a few hours and carted it all away. It was only about five cubic meters in the end. It will eventually be loaded into a shared shipping container in Rotterdam and then begin the long journey back to Sydney. The normal estimate is up to 20 weeks, so we’re not going to see that stuff for a while!

Boxes

To my delight, two days later it began to snow in Munich. It was like the city wanted to give us the perfect send-off.

Snow in Munich

My old team in Europe hosted a fun goodbye session with a special trivia quiz themed all around me. They even got Rodd to help them out with some questions! The highlight was definitely the one about Rodd’s favourite type of nut, to which one of the answer options was “Deez.” 😂

Kris trivia

On our last weekend, we had one last Weisswurst Frühstück at the Augustiner Bräustuben. It’s an odd feeling, knowing that you are doing something for the very last time. I felt really emotional.

Weisswurst Frühstück

We went into the city to do some final shopping. Rodd was very keen to buy himself a Janker before we left. This is the traditional collarless Bavarian jacket. We went to several different shops trying them on before he found the perfect one in Lodenfrey. It’s a grey-green linen, which we figured he’d get more wear from in Australia.

Janker

It was snowing very prettily in the city, and we took the opportunity to enjoy the Christkindlmarkt one last time.

Snowing in Munich

We took the U-bahn to Poccistrasse and walked across the Theresienwiese. It was snowy and foggy, so much that you couldn’t see the far end. It felt like another world. Hard to believe a few months earlier it had been heaving with millions of people at Oktoberfest.

Theresienwiese

Our last few days in Munich were a flurry of cleaning and packing, with occasional breaks to look at the snow outside. We cleaned out the fridge and cupboards, and I returned my work laptop and some office furniture I’d borrowed. I gave the rest of our liquor to my colleague Viktor. We rehung our landlord’s artwork and restored the place the way we’d found it. We set up mail forwarding.

Snowy back garden

And then we were ready! The suitcases were packed full and just within the weight allowance. We did a final inspection and handover of keys the night before the flight, and then headed to an airport hotel for our final evening.

Suitcases

On the 14th, we walked over to the airport and dropped off our bags. We were flying Thai Airways through Bangkok, and we’d splurged on a business class upgrade. (It was the cheapest we could find.) We were chilling in the lounge when Rodd groaned. “The weather forecast,” he said, “is not looking good.” Something about blizzard ice. 😱

We went to the gate at the nominated boarding time, but it was pretty clear we weren’t going to be getting on the airplane anytime soon. Eventually we started hearing announcements that Lufthansa were cancelling all their domestic and short-haul flights, and we saw lots of frustrated travellers lining up for rebookings. Our crew were optimistic though that the long-haul international flights would eventually make it out. After a few hours we started to see some activity from the snowplows on the tarmac.

Snowplows

Four hours after our original boarding time, they announced we could finally board the plane! Everybody cheered.

On the plane

We settled into our seats and I hit the button on my goodbye post. The Thai business class seats were comfy but nowhere near as over-the-top as the ones on Qatar on the way there. The attendants told us that we’d be waiting a bit before the wings could be de-iced. We ended up sitting there for two hours! Eventually it was our turn for the de-icer, and then we could finally take off.

De-icing

Once we were in the air the flight was proceeding smoothly. We were a good six hours behind schedule so I knew we’d miss our connection in Bangkok, but it was out of our hands at that point. I was just hoping that we’d be still be able to stay in business class on whatever flight they got us on.

Right as they were serving dinner, one of the attendants from Economy came running into our cabin and said something frantically to another in Thai that included the word “choking” in English. Clearly a passenger was choking(!), and there was a lot of dashing about and getting first aid kits and such. At that point, I honestly expected them to announce that we’d be turning around and landing somewhere to get the guy medical attention. That didn’t happen though, and our attendant told me later that there was thankfully a doctor onboard and the passenger was okay. Eventually they brought him (in an oxygen mask) and his wife up to sit in two of the free business class seats. Phew! It felt like the universe was really trying to keep us in Europe.

As we got closer to Bangkok, we paid for wifi so we could check whether we’d been rebooked. Nothing yet. I look tired here, but I did manage to get some sleep. A lie-flat bed helps enormously, and I’m happy to report that at 5’10” (178cm) I just fit in the Thai business class seat.

Flying over Myanmar

When we deplaned in Bangkok, we immediately spotted a Thai Airways attendant holding up a sign with our names on it. She collected us and another guy who’d missed his flight as well. She explained that we were being rebooked on Qantas and helped us clear Security and get into the Lounge. We spent several hours in the Lounge waiting for our new tickets to be reissued. (The Lounge was nice enough, but I was disappointed the showers weren’t open.) Eventually we got our tickets, and as expected we’d lost our Business class seats. Not only that, but we were going to be sitting in the middle two seats of the middle block of four. 😩 But I tried to look on the bright side – the staff at Thai had done everything they could, and we were almost home!

Bangkok Lounge

Right before we boarded the Qantas flight, we got a notification on the app that our seats had changed. They moved us to a bulkhead row! Those are the seats that they reserve for people with infants, but there weren’t any on the flight so they bumped us up. That was really nice and had us feeling better about the nine-hour flight. We settled in for the final leg…

Flight to Sydney

We landed in Sydney on schedule and were through immigration and customs quickly. Before you know it, we were in a taxi heading back to town. We had actually booked two nights in a hotel, knowing that the house wouldn’t be in a state to immediately move back in.

In the taxi

We dropped off our luggage at the hotel and then headed to the house. Kelly had moved out a few days earlier but had been coming by to feed and water Petey. We found him in the closet, and thankfully he seemed to forgive us pretty quickly for leaving him.

Petey

It was honestly a little depressing to return to the house. It was in decent shape, but two years of unprecedented rain had taken a toll. There were spots of mold on the ceiling (despite Kelly cleaning it repeatedly), and everything we had put in storage was either musty (at best) or covered in mildew (at worst). We also didn’t have much furniture beyond our bed and dining room table. Kelly had left us an old couch (that Petey had torn to shreds) and a small TV with a broken remote. Rodd said exactly what I was thinking: “This feels like camping.”

We set to work unpacking and cleaning. I tackled the bedroom and the bathroom while he worked on the kitchen. The washing machine broke on the very first load, but we persevered and ordered fresh sheets from Amazon. By Saturday night, we were sleeping in our own bed again. On Sunday we were restocking the kitchen and signing up for new mobile plans.

In bed

Unfortunately by Monday it was clear that I was sick. I started to feel a lot of chest congestion, and then my nose stuffed up completely. By Wednesday I was blowing green goo and I couldn’t smell anything. Repeated Covid tests were negative, so I went in to see my GP. He reckoned it was a sinus infection and put me on antibiotics, with some codeine to help me sleep at night. That knocked me out for the rest of the week, and I couldn’t really do anything but knit. It made for a quiet and rather depressing Christmas. The only highlight was that my sense of smell came back on Christmas Day so I could celebrate appropriately:

Petey eventually left the closet and became very, very clingy. He wants to make sure we never leave him again!

Petey

I am finally on the mend, and the house is starting to come back together. The washing machine repairman came out and estimated a thousand bucks for a new motor for our 14yo machine, so we said “Stuff it” and bought a new set on Appliances Online. They delivered them two days later, hooked them up, and took the old ones away. Yay for clean laundry!

Washer and dryer

We also took advantage of the Boxing Day sales to get a new OLED 4K TV. Hooray for overly giant televisions! (He claims it’s the same size as the old one. 🤔)

Rodd was very happy to get back to his induction stovetop, and he has used it to cook me some very excellent meals over the past fortnight. We’ve made a couple trips to Coles as we begin to restock the pantry, and I’m once again blown away by the quality and variety of produce we get here in Sydney.

And finally this week I was well enough to go into the AWS office. I picked up my new laptop from IT and started tackling a backlog of emails and overdue tasks.

In the AWS office

So… we’re back, and people keep asking me what it feels like. It feels weird. It feels like we never left. It feels like if I didn’t have physical proof that we were there – mainly in the fact that our house is still missing most of its furniture – I’d think it was all a dream. We were gone for 842 days. 120 weeks. Two years, three months and change. Did it actually happen? How did it go so fast?

I’m happy to see Petey. I’m happy to see my friends and neighbours and family again. I’m happy to not struggle daily with a foreign language, and to hear the Ocker accent again. I’m happy to see the ocean, eat amazing Asian food, watch the cricket, and drink a beer that isn’t a Helles. My hair texture has already changed for the better. (Munich water is *very* hard.) Australian cafe culture breakfasts are the best in the world. These are all good things.

But it’s really hard not to miss Munich. I miss having four distinct seasons. I miss the lack of humidity. I miss riding my bike all over the city and not having to worry about an irate driver hitting me. (Sydney is not cycle friendly.) I miss living in a city that is beautifully maintained, where piles of rubbish and empty storefronts are rare. I miss cheap and convenient public transport, and high speed rail between cities. I miss frozen, bake-at-home giant pretzels. I miss not needing to drive a car, pretty much ever.

I completely realise how all that sounds. Believe me, every single European thought we were crazy for being sad about coming back. And I know – I know – how incredibly fortunate we are, no matter where we live. This is just the normal comedown you have after a fabulous vacation, except that the vacation lasted 842 days. We’ll be all right.

Don’t cry because it’s over. Smile because it happened.

Thanks to everybody who helped us out along the way. Thanks to our family and friends who supported us in the move, and to our employers who made it possible. Thanks to our European friends for welcoming us so heartily. And thanks to Kelly for looking after our place and our dear Petey Cat.

It’s nice to be home.

Together in Sydney

AWS folks to follow on Mastodon

I’m still enjoying Mastodon and staying the hell away from Twitter, and it seems like more and more folks are making the switch. If you use AWS and want to follow more folks in the developer community, my colleague Gunnar has curated several lists of employees, Developer Advocates, AWS Heroes, AWS Community Builders, and User Group leaders. Here’s how to get the latest lists and import into your own Mastodon account:

1. Click on the the Actions tab on Gunnar’s Github repo.

Click on the Actions tab

2. Click on the latest workflow, whatever it happens to be.

Click on the latest workflow

3. Scroll down on the page to the artifacts and click on the list to download a Zip file.

Artifacts4. Unzip the file. Then go to the Settings page within your Mastodon instance and select “Import and Export” and then “Import” options.

Importing the list

Leave the Import type to “Following list” and Merge so you don’t overwrite your existing followers list. Then select the list you want to import and hit Upload. Easy peasy!

Incidentally, you can see my Mastodon profile at https://aus.social/@web_goddess and follow me if you like, or you can subscribe to an RSS feed of my posts.

Paris and Luxembourg

At the end of November I had a couple work commitments a week apart in Paris and Luxembourg, so we decided to combine them into a single trip – the last and biggest of our time in Europe. (I suspect it’ll also be the longest blog post!) ❤️

We kicked off with a very early (6:45am!) Sunday morning TGV train from Munich.

Train to France

We bought coffee and pastries to have breakfast on the train, and we just relaxed and watched the scenery as the sun came up.

On the train to Paris

By 10:30am we were crossing the Rhine into France.

Crossing the Rhine

The train had been moving pretty fast through Germany, but you could definitely tell when we crossed over and started really moving. (That’s about 200mph.)

316 km/h

The French countryside is very pretty.

We arrived at Gare de l’Est around 12:30pm and caught a taxi to our hotel. We were staying at the Hyatt Regency Paris Étoile in the northwest of the city. Not an especially touristy area, but it was fairly close to my office. After we dropped off our stuff, we headed out for a walk and ended up at the Arc de Triomphe.

Arc de Triomphe

We took the underground passageway and popped out right at the base of the arch.

Arc de Triomphe

The Arc de Triomphe honours those who fought and died for France in the French Revolutionary and Napoleonic Wars. Those carvings there amused me, as the ones on the right are meant to be bearded Germans while the ones on the left are the French. In the middle under the archway is the Tomb of the Unknown Soldier from World War I.

Tomb of the Unknown Soldier from World War I

Hey, there’s the Champs-Élysées! While it’s considered the most beautiful avenue in the world, on a rainy day with lots of traffic it just looks like any other street.

Champs-Élysées

We next headed towards the Seine, passing by some very fancy shops. Mr. Snook was looking pretty fashionable himself in the Belstaff.

Givenchy

We crossed the Seine at the Pont de l’Alma and got our first glimpse of the Tower.

The Seine and the Tower

We walked along the pedestrian promenade towards the Tower and passed by the Memorial National de la Guerre d’Algerie.

Memorial National de la Guerre d'Algerie

And then we were at the Tower! There’s a lot of work being done around the base, presumably ahead of Paris hosting the Olympics in 2024.

Eiffel Tower

We crossed back over the Seine at the Pont d’Iéna.

Crossing the Seine

On the other side, we walked up past the Trocadero Gardens to the Palais de Chaillot. Our only previous trip to Paris had been in 2001 (21 years ago!), and we both had a vague memory that this had been where we posed in front of the Tower all those years ago. Unfortunately it was fenced off for renovations…

View of the Tower blocked by fence

…but I peeked through the little window. Pretty sure that’s where it was.

Eiffel Tower

The date was Sunday, November 20th, which means it was our 18th wedding anniversary. I had planned something very special for dinner that night – a river cruise with Ducasse sur Seine.

Ducasse sur Seine

This is a beautiful glass restaurant boat docked right at the Pont d’Iéna. (Note: our Uber driver was confused by the directions as the wharves are below the level of the street. He ended up letting us out on the corner and we went down the stairs to the docks.) The host took our jackets and led us to our table, which had a perfect view of the Tower.

Our table at Ducasse sur Seine

I had booked us for 4-courses with matching wines, starting at 19:30. That meant we had an hour before the boat actually left for the 2-hr river cruise at 20:30. We had both dressed up and we were feeling pretty special.

The menu from our dinner is currently on a boat somewhere between Amsterdam and Sydney, so I don’t have exact details on what we ate. (The online menu has been updated since then.) But we started off with some small bites along with bread and butter.

There was also a small soup… potato, I think?

Soup

At 20:00, the twinkle lights went off on the Tower. 😍

Twinkling Eiffel Tower

For the second course, I had a beetroot and pomegranate dish while the Snook had a duck terrine.

At this point, the boat started moving! We slowly cruised east along the Seine. Here we are passing under the ornate Pont Alexandre III bridge.

Pont Alexandre III bridge

We also cruised past the Tuileries Garden, where I knew a big Christmas market was happening!

Tuileries Garden

Mr. Snook was enjoying himself.

Rodd

The cruise goes all the way up to Île de la Cité, under the Pont Neuf, and around the island before heading back. Unfortunately the angles were such that we couldn’t really get a good view of Notre Dame.

Pont Neuf

For the mains, I had scallops while Rodd had lobster.

And then it was time for dessert! Mine involved chocolate and ice cream, while the Snook’s was clementine (orange) flavoured.

On the return trip we got to see the other side of the river (the Left Bank). Here’s the Musée d’Orsay.

Musee d'Orsay

And then the Tower came into sight, and we knew we were at the end of the trip. What a wonderful evening! Good food in an unforgettable setting, with my favourite person in the world.

Returning to the Tower

Continue reading “Paris and Luxembourg”

DACH Community Day in Dresden and the Sächsische-Schweiz

Back in October, I was very honoured to be invited by some of my friends in the DACH (aka Germany, Austria, Switzerland) tech community to be the keynote speaker for AWS Community Day 2022. This was going to be their first time back in person after two years of virtual events, and I was very excited to finally meet some of them in person. Rodd was going to accompany me, of course, and he had planned out some fun touristy things for us to do as well.

We caught the Tuesday morning train from Munich. It was about a 4.5hr trip, including a short transfer in Leipzig. I mostly used the time to finish off my slides for the keynote!

Train to Dresden

On Tuesday night, the local AWS Dresden group were having a pre-Community Day meetup so we went along. Here’s my buddy Mohamed presenting about a couple serverless apps he built, as well as Martin from Groundfog sharing how they built a personalised web experience for visitors.

Wednesday was the big event, so we headed over early in the morning to the conference venue to help set up. My friends Linda (from Vienna) and Markus (from Munich) were going to be kicking things off in the morning.

Me, Linda, and Markus

Markus insisted that I wear the AWS dress. 😂 He was also going to be introducing me on stage.

Me and Markus

Eventually everything was ready and the hosts kicked off the morning. I was very excited to see them launch the Förderverein AWS Community DACH, which brings together all the different AWS groups into a single association. (Bonus points for the pun in the logo – in German, “Dach” means “roof”.)

Launching the Förderverein

Markus gave me a very humorous intro in which he’d scraped some dubious photos from my social media accounts, but thankfully he ended with the nicest one. ❤️

Markus introducing me

My talk started out quite personal, talking about how isolated I felt in the first ten years of my career. It wasn’t until I started going to meetups and hackathons that I finally felt like I belonged. At that point, it turned into a big soppy love letter to the folks in the room, who were my first friends when we moved to Germany. I ended by talking about how much AWS values the external community, and some of our plans to support them even more in the future.

My keynote

One last photo of me with Markus and Linda, who I’m going to really really miss. 😢

Me, Markus, and Linda

We spent the rest of the day at the conference, going to sessions and meeting sponsors and attendees. It was a small but passionate crowd, and everyone was so excited to get back together in person. Thank you to the organisers for inviting me!

We were pretty tired that night but of course had to take advantage of the hotel sauna…

Post sauna

I worked from the hotel the next day, but Rodd got me out into the sunshine for a quick walk and lunch in the city.

Me and Rodd in Dresden

We were very amused to see that there is actually an Australian restaurant in Dresden! The Snook was dubious, but hey, they serve kangaroo goulash soup. 😂

We walked up to Brühl’s Terrace, a large elevated terrace overlooking the Elbe. It was a beautiful day.

The Elbe from Brühl's Terrace

Here we are with the Hofkirche (Dresden Cathedral), the most important Catholic church in the city.

Hofkirche

We also found the Lego store, which had a “Selfie Point.” Okay, then.

Lego Store Dresden

Our hotel was very close to the famous Frauenkirche in Dresden. This Lutheran church was destroyed during the firebombing of the city in 1945 and left in ruins as a war memorial for 50 years. It was only rebuilt after German reunification and was completed in 2005. The darker stones you can see were salvaged from the original church and were able to be reused in the reconstruction.

Frauenkirche

We went inside to take a look as well. It was all soft pastels, trompe l’oeil, and extravagant carvings. Very pretty! The story of how they rebuilt it is truly amazing.

Inside the Frauenkirche

That night we had booked a special dinner at Genuss-Atelier, a local Michelin-starred restaurant. It was described as “rustic vaults” and it felt very cozy.

Genuss-Atelier

One of the coolest things was that the tables had built in drawers with all the cutlery you’d need, so the waiters didn’t need to keep bringing fresh sets. I’ve never seen that before.

Cutlery drawer

We went with the six-course “Surprise” menu, and since it’s all seasonal and not printed, I tried to keep notes on my phone about what we had. We started with a couple small bites: pickled herring with potato chip, and felafel with yogurt.

Small bites

The Snook enjoyed the little bread rolls and butter. (He may have also been drafting a post for We Want Plates.)

Bread and butter

Our first proper course was beef tartar with sour cream and chives.

Beef tartar with sour cream and chives

Next was a vegetarian course – turnip cabbage (aka kohlrabi), celery, and yuzu.

Turnip cabbage, celery, yuzu

Next was the fish course – “eagle fish” (which we think is also called a “meagre“) with radicchio, celery, and capers.

Eagle fish with radicchio, celery, capers

For the meat course, we had lamb with pumpkin and polenta, and of course we opted for the extra shaved black truffle!

Lamb with pumpkin and polenta

Everything was delicious and beautifully prepared. We were also having matched wines with each course, all of them from the local area. Rodd was amused when the waiter excitedly told him how one of them was matured in oak, which is something of a novelty in the region. (It’s very common in Australia!) Needless to say, we were having a wonderful evening.

And we finished with TWO desserts! First was “blueberry, butter cookie, and vanilla.”

Blueberry, butter cookie, and vanilla

And lastly, “banana, coconut, mango sorbet.” Yum!

Banana, coconut, mango sorbet

Highly recommend Genuss-Atelier if you are ever in the Dresden area!

Continue reading “DACH Community Day in Dresden and the Sächsische-Schweiz”

Building the Oscar Contest entry form

As always, I like to use the Oscar Contest as a way to try to learn something new. This year I decided to build it using AWS Amplify, a set of tools and services that can be used to quickly build and host mobile and web apps across a range of frameworks. I’ve somehow managed to avoid touching React, so I figured I might as well use that too. Here’s the basic architecture I went with:

Contest architecture

I figured it might be fun to walk you through the process I used in case you’d like to try something similar. The first step (if you haven’t already) is to install the AWS CLI and Amplify CLI and get them configured with your AWS account credentials. Then I created the basic React project using this command:

npx create-react-app oscars2021

That will download a bunch of stuff and set up the basic project files for you.

You can then switch into that directory and start the app to verify it’s working.

cd oscars2021
npm start

Running React app

Now it’s time to hook your project up to Amplify, using this command:

amplify init

A wizard will walk you through setting up various parameters for your app, including your preferred code editor and the type of app you’re building. Here’s what I selected:

Amplify configuration

This will initialise your project in the cloud and set up some resources for you.

Now it’s time to add storage, which in my case meant an Amazon DynamoDB table. This is where I’d be storing each entry as it came in.

amplify add storage

This will again kick off a wizard that will walk you through some configuration options. I selected “NoSQL Database” and then set up the columns that I wanted in the table.

Database config

I also selected “id” as the partition key, with no sort key, no secondary indexes, and no Lambda trigger.

More DB config

The next step is to add the API and Lambda function that will actually record the user’s entry. This is done with the command:

amplify add api

Again, a wizard will walk you through configuration. I created a REST API with the path “/entry” and created a new Lambda function using the Serverless ExpressJS template. I also gave the function permission to Create and Read from the storage (aka DynamoDB table) we just set up. I didn’t restrict access to the API, as I want anyone to be able to enter.

API configuration

Time to actually update the Lambda function! I went into my preferred code editor (Atom) and opened the project. The function is located in “amplify/backend/function/oscarsfunction/src/app.js”. There are some commented example methods that I deleted and replaced with the code below. This adds the AWS SDK (so I can save to DynamoDB), a method for generating random IDs, and the actual post method to save the entry. (You can download this code from my Github project here.)

Function code

The next step is to use Amplify to push the newly created backend storage, API, and function to the cloud! You can do this with the command:

amplify push

Amplify will ask you to confirm which resources you’re deploying, and then it will start the process using AWS CloudFormation. This can take a little while.

Amplify push

If you make any changes to the function code later, remember to push the changes to Amplify so they are uploaded to AWS! In the meantime, it’s time to install some dependencies I need for the form frontend.

npm install aws-amplify @aws-amplify/ui-react
npm install bootstrap
npm install react-bootstrap

Once all that’s done, you can finally edit the form! The actual React app lives in “src/App.js”. I won’t go through everything I did (you can check the code out yourself), but basically I made sure to include Amplify (so the frontend can talk to the backend) as well as React Bootstrap. I also tweaked the CSS and added a couple images. Each time you save a change, the app will recompile and update in your running browser window. I also opened the “public/index.html” file and changed the title and description of the page.

Form code

You can also test out the form in the browser to ensure it’s working. When I opened the AWS Console and looked in DynamoDB, I could see entries being saved correctly into the dev environment table. 🎉

The final step is to deploy the frontend, and Amplify makes this pretty easy too. I created a new repo at Github and then pushed my code to it.

Github create repo

Then I went to the AWS Amplify console and clicked on my app. If you click on the “Frontend environments” tab, you’re presented with a range of options for hosting your app.

Frontend hosting

I clicked the one for Github and then went through the process of granting access to my Github account. Then I selected the repo I’d just created with the code for my app, and left the branch set to “master.” On the next screen, I left checked the option to “Deploy updates to backend resources with your frontend on every code commit” and created a new “prod” environment as the target. I also had to create a new IAM role for the deployment process. Once you save and deploy, Amplify will grab your code from Github, run the build script and any tests you’ve configured, and deploy the resources into your account. The build for my app takes less than 4 minutes to complete.

Completed deployment

The beauty of the CI/CD pipeline is that whenever I modify the code and push it to Github, the whole process will kick off automatically! The Amplify console also gives me the URL to the hosted app, which is where you can enter the contest. When I check DynamoDB now, I can see entries coming through to the prod environment table. When the contest is finished, I can shut down and remove all the app resources by simply running this command:

amplify delete

If you’d like to try out Amplify yourself, I can recommend a couple resources. The AWS website has a very simple, step-by-step tutorial to Build a Basic Web Application that you can work through, but it doesn’t include React or the CI/CD part. If you want to copy what I did, check out my colleague Marcia’s YouTube videos  on  building a Contact form with React and automating your CI/CD deployments, which gave me the basics of everything I needed to build the contest entry form. Thanks Marcia!