Thanks for reading my newsletter ❤️. This edition was delivered on Monday, March 24, 2025.

Monday, March 24, 2025

March 18#abc.net.au

Lenin's quote that "there are decades when nothing happens and there are weeks where decades happen" is getting a solid workout these days, but last week there was a single day on which decades happened. It was Tuesday, March 18.

Microsoft and a Swiss company called inait announced they were collaborating to commercialise inait's digital brain technology.

I totally missed this digital brain technology.

Whilst this whole column is extremely bleak it is the reality we face.

Sunday, March 23, 2025

The Seneca#norbauer.co

This is beautiful was also probably extremely expensive.

Thursday, March 20, 2025

Caulfield Junior School#theage.com.au

Pretty interesting news coming from my high school.

Siri Sucks Bad Part 2#reddit.com

Sheezus.

Lost Luggage

On our Jetstar flight from Melbourne to Sydney (the first flight of our honeymoon) the bag with our clothes and toiletries was lost.

We waited at the luggage conveyor belt and when everyone else had left due to getting their bags we went

uh ohh

our bag wasn't coming.

We went to the lost luggage help desk in Sydney and we had basically no help. We were told to

get help when you get to Ho Chi Minh City airport

The Sydney Jetstar staff member at the help desk didn't know if the luggage would be delivered to us by courier to the hotel or if we'd need to go back to the airport ourselves again to pickup the luggage.

It sadly turned out to be the latter which was painful as we missed going on a food tour on Emma's birthday. We sat in traffic on the way to the airport instead. Not ideal.

The lesson from all of this: always remember to pack AirTags in each bag. We were silly and forgot to put AirTags in. This way we at least would have known instantly where the bag was and not be unsure for multiple days post flight.

Wednesday, March 19, 2025

Better BOM#beta.bom.gov.au

Whilst this version of BOM is just the mobile app as a web app it's 10x better than normal web app BOM.

You also don't get this message every time:

The Bureau of Meteorology website does not currently support connections via HTTPS.

Tuesday, March 18, 2025

Phar Lap#podcasts.apple.com

Another Sports Bizarre related post but this multiple episode series for Phar Lap was fantastic. I didn't realise that many of the stories about Phar Lap are so Melbourne south eastern suburbs centric.

He was almost killed (by some mobsters) in a street near Glen Huntley station. He was also trained at Braeside Park which has the aptly named Phar Lap Track inside of it.

I almost teared up listening to the way he died. Horses back in the 1930s (and still up to today) were treated so poorly and pumped full of tonics and drugs to make them run better. They're beautiful creatures that don't deserve that.

Server Rendering With Props

Something that I didn't discuss in the last post on hydration and server rendering is passing props.

In the aforementioned example I was just rendering

<Test />

but what if I want to render

<Test hello="Hi" />

The "Hi" string value can be thought of as something fetched from a database.

Here are the steps I followed:

  1. The HTML template rendering logic on the server is able to look at the JSX.Element value passed to it and access the props, we can then inject the props as a data- attribute to a div, from a user point of view this data is invisible but the JS that runs post server rendering will be able to access it
<body className={"bg-sky-100 font-dm max-w-2xl mx-auto px-4"}>
	<main id="root">{props.body}</main>
	<div id="data" data-props={JSON.stringify(props.body.props)}></div>
</body>
  1. As the props type will be used both server and client we want to store it in a types.ts file for shared access
type AboutProps = {
  hello: string;
}
  1. In the top level client React file (where hydration happens) we want to do something like this, we get the dataElement with our injected data via a .getElementById call, we can then use a type assertion to make the JSON.parse have a valid type, we could also use something like zod here to get more confidence that the parsing has worked and the props type is valid
const rootElement = document.getElementById("root");

if (!rootElement) throw new Error("Root element not found");

const dataElement = document.getElementById("data");

if (!dataElement) throw new Error("Data element not found");

const props: AboutProps = JSON.parse(dataElement.dataset.props || "{}");

if (rootElement.innerHTML.trim().length) {
  // Could also spread the props here but being more verbose for the example
  hydrateRoot(rootElement, <Test hello={props.hello}  />);
} else {
  createRoot(rootElement).render(<Test hello={props.hello} />);
}

From here the client should behave like normal React but with slightly better perceived performance due to the server rendering, all of this stuff is handled much better in frameworks like Next.js but it's fun to tinker around with it in my own little projects

Hoi An

Our final stop of our honeymoon in Vietnam was in Hội An.

Day 10: We woke early and headed straight to the clothes tailor. Emma found a trendy place that seemed somewhat Tiktok famous. We ordered what Emma likes to call "a haul"; a bunch of shirts for me and pants and dresses for her. We then did a lot of photo taking and walking around the Old Town. We'd stop at any shops we liked, slowly weaving our way through all the narrow laneways dodging motorbikes. We had lunch at Miss Ly and bought some more clothes. In the evening we walked along the river and went to the night markets.

Day 11: Today was probably our most adrenaline rush risky day where we rented a scooter. You just rock up to a scooter rental location and there's simply no paperwork or checking of licenses. We paid ~120,000 Vietnamese dong (or about $7 AUD) for a day. It was scary navigating the traffic and just generally obeying road rules (or lack thereof) but with Emma on the back seat we got through. For some reason the scooter had no petrol in it so we also got to roll up to a petrol station and fill up the tank. Riding the scooter with the wind whipping in your face really did feel fantastic. I'd love to go for a bigger scooter journey one day. In saying that, it is dangerous as hell and it's just a matter of time before you fall off.

Whilst on the scooter we visited the Pottery Village, Roving Chill House which was a cafe in a beautiful rice field and the Vegetable Village. We had lunch again at Miss Ly and dropped the scooter back. In the evening we picked up our tailoring as well as a bunch of gifts and had dinner at an Italian restaurant (our stomachs were feeling a bit average from so much Vietnamese food). It felt like home eating spaghetti bolognese.

Day 12: We had a quick hair wash and massage (which to my surprise I really enjoyed) before checking out of our hotel and heading to the airport. We flew back to Australia to see our one and only Boots.

Other items:

  • Hội An is your stereotypical overtourism type location, it takes a long time to walk anywhere due to the crush of people, there's also a bit of a rubbish issue
  • We stayed at this hotel, it was a solid pick
  • We were pretty paranoid about getting food poisoning again, for dinner on day 10 we thought the food was okay but didn't feel great the morning of day 11, might have been a minor case of food poisoning but we were fine later in the day

It was a fantastic honeymoon with lots of special memories. Some memories were not so good (again food poisoning and going to hospital sucks) but overall it was a great couple of weeks.

Here are my three Vietnam honeymoon posts:

  1. Ho Chi Minh City
  2. Meliá Ho Tram
  3. Hội An