Day 23: plain

Although quite plain in appearance compared to other native birds, what the currawong lacks in pigments they more than make up with their wonderful melodic calls. I never get tired of listening to it. #mbmay

Day 22: textile

Wool shopping with my Nonna about a month ago. Trying to decide the best colour and thickness for a blanket. #mbmay

Balls of wool in hand

Day 21: symmetry

Okay, I’ll come clean. I have no idea what this is. It’s located in a park I usually walk through, and there’s nothing else like this around. In any case, it’s the closest thing that’s symmetrical I see in my daily life. #mbmay

The cafe that I go to on weekends is just across the road from a polling station, so it’s having a bumper of a day. A lot of people getting take-away coffees before lining up to vote. I’ve not seen it this busy since it opened two years ago.

Day 20: beverage

Enjoyed during the same meal I had yesterday: a mixed-berry smoothy. #mbmay

Day 19: indulgence

Full disclosure: this isn’t the type of muffin I actually ordered. My goto is usually raspberry and white chocolate, but today the cafe made a mistake. Even so, I got to admit that this was nice. 😋 #mbmay

A chocolate muffin

Booked flights yesterday for Canberra. Got my itinerary and confirmation email. Ok, good.

Then got an email offering “ideas” of places to go in Canberra. Then one welcoming me to the booking agent’s newsletter.

Stop! Guys, you had it right after the second email.

Day 18: random

Tails. #mbmay

Tails of a 20c coin

Day 17: hold

Holding my reusable cup as it’s holding my morning coffee. #mbmay

A keep-cup being held.

WWDC Videos In Broadtail

Some more work on Broadtail. This time, I added the ability to use it to download Apple WWDC videos.

The way it works is based on the existing RSS feed concept. In order to get the list of videos for a particular WWDC year, you “subscribe” to that by setting up a feed with the new “Apple Developer Videos” type. The external ID is taken from the URL slug of the web-site that Apple publishes the session videos. For example, for WWDC 2021, the external ID would be “wwdc2021”.

Downloading the videos is more or less the same.

There are a few differences between this feed type, and the YouTube RSS feed. For instance, it only makes use of what is available from the website, which means details like publishing date or duration are not really available. This is why the “Publishing” date is displayed as “unknown”. That’s also why the videos are arranged in alphabetical order and the feed itself is not automatically refreshed (although doing so manually by clicking “Refresh” within the feed page will work). These are actually properties that can now be applied to all feeds of one wishes, although the YouTube feeds are still arranged in reverse chronological order by default.

From a coding perspective, this involved a lot of refactoring. I was hoping to move to a more generic feed and video type, but this was the feature that eventually got me to do so. Thing is that if I wanted to add more feed and video types in the future, it should be easier to do so.

Currently reading: Build: An Unorthodox Guide to Making Things Worth Making by Tony Fadell 📚

So far an excellent read.

Day 16: time

My kitchen clock, which occasionally breaks in such a way that it’s not even right twice a day. #mbmay

Day 15: clouds

Taken during the Summer, which is usually when we get our most interesting cloud formations. #mbmay

Watching the Google I/O presentation on Google Wallet reminds me of all the presentations I’ve watch over the years of products and frameworks that Google touted, then killed off. I wonder how long Google Wallet will last. 😕

Day 14: fence

#mbmay

Day 13: community

#mbmay

Cloud Formation "ValidationError at typeNameList" Errors

I was editing some Cloud Formation today and when I tried to deploy it, I was getting this lengthy, unhelpful error message:

An error occurred (ValidationError) when calling the CreateChangeSet operation: 1 validation error detected: Value ‘[AWS:SSM::Parameter, AWS::SNS::Topic]’ at ’typeNameList’ failed to satisfy constraint: Member must satisfy constraint: [Member must have length less than or equal to 204, Member must have length greater than or equal to 10, Member must satisfy regular expression pattern: [A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}::[A-Za-z0-9]{2,64}(::MODULE){0,1}]

It was only showing up when I was tried adding a new SSM parameter resource to the template, so I first thought it was some weird problem with the parameter name or value. But after changing both to something that would work, I was still seeing this.

Turns out the problem was that I was missing a colon in the resource type. Instead of using AWS::SSM::Parameter, I was using AWS:SSM::Parameter (note the single colon just after “AWS”). Just looking at the error message again, I notice that this was actually being hinted to me, both in the regular expression and the “Value” list.

I know making good error messages take effort, and for most developers this tend to be an afterthought. I’m just as guilty of this as anyone else. But if I could make just one suggestion on how this message could be improved, it would be to get rid of the list in “Value” and replace it with the resource type that was actually failing validation. It would still be a relatively unhelpful error message but at least it will indicate what part of the template was actually falling over.

In any case, if anyone else is seeing an error message like this when you’re trying to roll out Cloud Formation changes, check for missing colons in your resource types.

🔗 A New Hope for Object Storage: R2 enters open beta

I’ve been looking forward to giving R2 a try for a while.

Is it really necessary for Amazon to prefix AWS services with “Amazon” or “AWS”? It’s not SQS, it’s Amazon SQS. It seems a little redundant to me. Maybe they’re leaving the door open for third party vendors to offer their services in AWS as well. 🤷

Day 12: tranquility

Part of a walk I occasionally do, near Macedon. There’s nothing special about this particular spot, but I always feel at my calmest here. #mbmay