Current status: looking at sqlite3 DBs of an Android app in development while waiting for XCode to update to build a project to write a post on the dealing with breakpoints and coroutines in Kotlin. All while listening to a podcast and following the ABC Coronavirus live-blog.

The interesting thing about the “out of date” messages from Google’s iOS apps is the fact that they have the ability to turn these messages off without modifying the app. It makes you wonder how many of the features within these apps are controlled by server-side feature flags.

It’s a shame that we’ve had to go back into lockdown for 5 days, due to the highly infectious nature of the B117 variant. Hopefully it’s enough to stamp out the current outbreak. But what then? I’d be curious to know how we can continue to use hotels for quarantine given that this variant is spreading at a rate that is stretching the limits of our contact tracers. Maybe we can start using quarantine centres that are fit for purpose?

February Photoblogging Challenge. Day 11: Machine.

My trusty Breezemaster has been pushing air for 25 years now, and is still going strong. Came in quite handy today.

That last post courtesy of “Random Thought”; a simple Mac app I’m working on to publish quick blog posts like this to Blot.im.

Random Thought

It’s still early days with this tool, but I’m hoping that this will allow me to achieve the “passive blogging” form popularised by Dave Winer and enabled by blogging platforms like 1999.io. It’s difficult doing this with static blogging platforms like blot.im and anything managed by Hugo, with blog posts essentially text files tracked in Git or Dropbox. Working with text files is fine when you’re spending a large amount of time on a post, but it just doesn’t allow for quickly posting a thought.

That said, whether it will be advantageous for a blog like this to have these forms of posts is another story.

We’re using Google Meet at work at the moment. Apart from the logo, which looks indistinguishable from most of the other services of Google Suite, it works pretty well. However, there is one annoying thing it does have.

Like most chat apps, Google Meet has an integrated chat feature, which allows participants to post messages during the meeting. However, once the meeting is finished, the chat disappears, and all the messages (as far as I know) are lost.

It would be nice if these chats were kept around at the end of the meeting so that anything that needs to be referenced later can be copied or otherwise noted. It’s not always possible to do this during the meeting — people are usually listening or presenting — so being able to do this afterwards would help here.

Seth Godin on Rank Choice Voting

Seth Godin on Rank Choice Voting:

The surprising thing? In a recent primary in New York, some people had trouble with the new method. It’s not that the method of voting is particularly difficult. The problem is that we’ve trained ourselves to be RIGHT. To have “our candidate” and not be open (or pushed) to even consider that there might be an alternative. And to feel stress when we need to do the hard work of ranking possible outcomes, because that involves, in advance, considering acceptable outcomes that while not our favorite, would be acceptable.

Living in a country that has rank-choice voting across the board, I could be biased in this, but I think that’s one of the beautiful things about this voting system. It changes the thinking of “will my candidate win” to “what candidate can I live with”. A candidate representing several thousand people is not going to be everyones first preference, but they might be happy enough if they’re their second or third.

February Photoblogging Challenge. Day 10: Energy.

Twitter, Subscriptions and Tweetdeck

So, Twitter is now considering subscriptions and charging apps like Tweetdeck. I’m guessing the competition between Twitter and the juggernauts of the online advertising space that is Google and Facebook is getting quite fierce. I believe they also took a hit from banning certain public figures that were good at keeping people engaged with Twitter, but were not necessary good for the general discourse on the platform.

Here’s hoping that with this new revenue stream, one that is independent from the level of engagement of users, they will be incentivised to add some moderation over the types of anti-social behaviour that Twitter is currently plagued with. It makes some sense when you think about it: if I’m paying for the service, I don’t want the negative experience that comes of this. It’s a total inverse of their current business model, whereby the advertisers are the customer, and users are just the harvested eyeballs.

Getting Public IP Address from the Command Line

There is a website at ifconfig.co which can be used to get your public IP address. This is a reasonably nice service, and a nice alternative to Googling “what is my IP address”.

One nice thing about this service is that it also works on the command line. When calling it with curl, it will return a plain-text response, making it possible to use in scripts.

curl -4 ifconfig.co
10.20.30.40

I’m guessing that it’s using the User-Agent header to detect whether the response is coming from curl. Setting it to something else will return the response as HTML:

curl -H 'User-Agent: Mozilla and stuff' ifconfig.co
<see all the angle brackets fly>

Even so, this is a very nice touch with this service.

If someone has access to the AWS console, should it be right for them to also have access to the AWS API? What would be a suitable use-case for them to be granted access to one but not the other?

Note that this is about human users, not services. It makes sense for services to only have API access. I’m wondering more about human users not having API access (or at least an easy way to get API access).

Empty HTTP Headers in Go

Here is a technique for checking for the presence of a HTTP header in a Go request, even if the header has no value.

If there’s a header in a HTTP request that has no value, the parser used by Go will store the header against an empty string value. This string value is available using the Values() method: using the Get() method will not work as that will return an empty string if the header is not present in the request, make it ambiguous for existential tests if empty header values are allowed.

The Values() method can be used to return all the values of a header. This is useful for cases when a header appears multiple times in a request, but it’s also useful here as an empty slice is returned if the header does not appear. In which case, the way to test for the presence of a header can be done using the following line of code:

len(req.Header.Values("My-Header")) > 0

Where “My-Header” is the header you are looking for.

February Photoblogging Challenge. Day 9: Muddy.

It’s rare to find mud around here in February, along with grass this green. Usually everything is brown and dry. This summer has been a welcome exception.

I have all these personal projects that I want to start, but I need to check myself as I’ve got a habit of starting them, getting bored and never actually finishing them. I really need to be more judicious of things I actually want to build.

I watched Spirited Away last night. I really enjoyed it: it’s certainly a beautiful film.

It’s taken me a while to appreciate the works of Studio Ghibli. I remember first watching something from them around 10 years ago and finding it quite strange. Reflecting on this now, I think it’s because I was just not familiar with their style of storytelling. My palette for non-Western style films (that is, films from the West, not films set in the Wild West) was not well developed at the time.

I’m pleased that it’s now matured and that I can enjoy these sorts of films.

February Photoblogging Challenge. Day 8: Hope.

My new, soon-to-be activated Internet setup, courtesy of the NBN. I only hope that it’s as fast, if not faster, than my existing setup.

February Photoblogging Challenge. Day 7: Craving.

Unfortunately, it’s what you’d expect.

February Photoblogging Challenge. Day 6: Sports.

This is probably the closest thing to sports you’ll see me do.

February Photoblogging Challenge. Day 5: Pets

Unfortunately no pets allowed on this walk.

February Photoblogging Challenge. Day 4: Layers.

This is a photo of the geological kind: an exposed cliff face of the coast of Sunderland Bay.