It might be time to unsubscribe from developer related podcasts that talk about new technologies and platforms. It’s stressful seeing all these services being discussed, and thinking to yourself “I should check that out”, even when you know there’s nothing forcing you to do so.
My face is getting sore with all the palm prints on it. π€¦
Bocce in Fitzroy Gardens. Grand final for the 2021 season (yes, my friends and I came up with the idea of grand finals for our little casual comp π).

It’s a shame that there’s a non-insignificant number of people and companies that I admire and appreciate for their contribution to tech, while at the same time I personally would want nothing to do with.
While poking around the Micro.blog XML-RPC documentation, I had a flashback about SOAP. I had some limited experience with SOAP and it was always a huge pain. Looking back on it now, it’s striking how much was touted about SOAP middleware, as if that was what anyone using SOAP cared about.
I’m glad SOAP has been replaced by simpler technologies like REST. Simplicity eventually wins out in the end. I guess that’s why XML-RPC is still around.
PGBC Scoring Rules
I get a bit of a thrill when there’s a need to design a mini-language. I have one facing me now for a little project I’m responsible for, which is maintaining a scoring site for a bocce comp I’m involve in with friends.
How scoring works now is that the winner of a particular bocce match gets one point for the season. The winner for the season is the person with the most points. However, we recently discuss the idea of adding “final matches,” which will give the match winner 7 points, the runner up 2 points, and the person who came in third 1 point. At the same time I want to add the notion of “friendly matches” which won’t count to the season score.
It might have been that a simple solution was to encode these rules directly in the app, and have a flag indicating whether a match was normal, final or friendly. But this was suboptimal as there is another variant of the game we play which do not have the notion of finals, and if we did, we may eventually have different rule for it. So I opted for a design in which a new “match type” is added as a new database entity, which will have the scoring rules encoded as a PostgreSQL JSON column type. Using this as a mechanism of encoding free(ish) structured data when there’s no need to query it has worked for me in the past. There was no need to add the notion of seasons points as it was already present as an easy way to keep track of wins for a season.
For the scoring rules JSON structure, I’m considering the use of an array of conditions. When a player meets the conditions of a particular array element, they will be awarded the points associated with that condition. Each player will only be permitted to match one condition, and if they don’t match any, they won’t get any points. The fields of the condition that a player can be matched to can be made up of the following attributes:
- rank: (int) the position the player has in the match just played in accordance with the scoring, with
1
being the player with the highest score,2
being the player with the second highest score, and so on. - winner: (bool) whether the player is considered the winner of the match. The person with the highest score usually is, but this is treated as an independent field and so it should be possible to define rules accordingly.
- draw: (bool) whether the player shares their rank with another player. When a draw occurs, both winning players will have a rank of
1
, with the player of the second highest score having a rank of2
.
Using this structure, a possible scoring rules definition for a normal match may look like the following:
{ "season_score": [
{ "condition": { "winner": true }, "points": 1 }
]}
whereas a rules definition for the final match may look like the following:
{ "season_score": [
{ "condition": { "rank": 1 }, "points": 7 },
{ "condition": { "rank": 2 }, "points": 2 },
{ "condition": { "rank": 3 }, "points": 1 }
}]
Finally, for friendlies, the rules can simply look like the following:
{ "season_score": [] }
I think this provides a great deal of flexibility and extensibility without making the rules definition too complicated.
π Wordle and IP law: What happens when a hot game gets cloned
I guess the moral of the story is that you might have the legal right to do something like clone a game, but there’s no guarantee that you’ll get off looking honourable doing so.
Wordle 208 6/6
β¬π¨β¬β¬β¬
β¬π¨β¬β¬β¬
β¬π¨β¬π¨β¬
β¬β¬π¨β¬π¨
π©β¬β¬π©β¬
π©π©π©π©π©
Was close to missing it today. The winning guess was a bit of a fluke.
On the Moxie Marlinspike Post About web3
Today, I took a look at the Moxie Marlinspike post about web31. I found this post interesting for a variety of reasons, not least because unlike many other posts on the subject, it was a post that was level-headed and was coming from a position of want to learn more rather than persuade (or hustle). Well worth the read, especially for those that are turned off by the whole web3 crap like I am.
Anyway, there were a few things from the post that I found amusing. The first, and by far the most shocking, was that the “object” of a NFT is not derived from the actual item in question, like the artwork image, or the music audio, etc. It’s essentially just a URL. And not even a URL with an associated hash. Just a plain old URL, as in βexample.comβ, which points to a resources on the internet that can be change or removed at any time. Not really conducive to the idea of digital ownership if the thing that you “own” is just something that points to something else that you don’t actually control.
Also amusing was the revelation that for a majority of these so-called “distributed apps”, the “distribution” part is a bit of a misnomer. They might be using a blockchain to handle state, but many of the apps themselves are doing so by calling regular API services. They don’t build their own blockchain or even run a node on an existing blockchain, which is what I assumed they were doing. I can achieve the same thing without a blockchain if I make the database I use for my apps public and publish the API keys (yes, I’m being facetious).
The final thing I found amusing was that many of these platforms are actually building features into the platform that are not even using the blockchain at all. Moxie made the excellent point that the speed to which a protocol evolves, especially ones that are distributed by design, is usually very slow. Likely too slow if you’re trying to add features to a platform in an attempt to make it attractive to users. So services like OpenSeas are sometimes bypassing the blockchain altogether, and just adding propriety features which are backed by regular data stores like Firebase. Seems to me this is undermining the very idea of web3 itself.
So given these three revelations, what can we conclude from all the rhetoric of web3 that’s currently out there? That, I’ll leave up to you. I have my own opinions which I hope comes through from the tone of this post.
I’ll close by saying that I think the most insightful thing I learnt from the post had nothing to do with web3 at all. It was the point that the reason why Web 2 came about was that people didn’t want to run their own servers, and never will. This is actually quite obvious now when I think about it.
-
Ben Thompson wrote a teriffic post about it as well. ↩︎
Burnt Out on Design
I’ve been doing a heap of design work at my job at the moment; writing documents, drawing up architecture diagrams, etc. I’d thought I would like this sort of work but I realise now that I can only tolerate it in small doses. Doing it for as long as I have been is burning me out slightly. I’d just like to go back to coding.
I’m wondering why this is. I think the biggest feeling I have is that it feels like I’m not delivering value. I understand the need to get some sort of design up so that tasks can be written up and allocated. I think a big problem is the feeling that everything needs to be in the design upfront, waterfall style, whereas the method I’d prefer is to have a basic design upfront β something that we can start work on β which can be iterated and augment over time.
I guess my preference with having something built vs. something perfect on paper differs from those that I work with. Given my current employer, which specialise more in hardware design, I can understand that line of thinking.
I’m also guessing that software architecture is not for me.
I’ve been listening to, and buying, a fair bit of music from Anders Enger Jensen over the last few days. My current earworm is about half the tracks on Retro Grooves Volume 2. Some pretty good retro synth music there. π΅
One of the domains for a blog that I’ve since abandoned is coming up for renewal in a few days. Might be a good as time as any to shut it down.
The latest episode of Core Intuition (496) resonated with me, especially the discussion about settling and sharing creative works near the end. I know this is something that I personally struggle with and would like to get better at this year.
I think I’ve settled on my word for 2022: finisher. Someone who finishes what he starts. This is something that I’m not super good at. I find it easy to start, but I rarely follow through all the way. It’s not in the list of words but I think it’s a good one to go for.
π The Algorithmic Ad Monster Cometh for Podcasts
I’m starting to hear more of these types of ads in the shows I follow, and I despise them. I agree with the statement of the ads being part of the product. I tend to listen to host-read ads. I definitely skip the automated ones.
It’s interesting to see the technical knowledge and priorities of a software development team come through in the product they work on. Case in point: the syntax highlighting options for a code block in Confluence include ColdFusion, Delphi, Java FX, Groovy and Scala; but not Go.
Yet another reminder to myself to write things down when they come to me. I had the perfect word for a post, but when it came time to write it I couldn’t recall what that word was. I know that I know it; I was turning it over in my head a few days ago. Should’ve written it down.
There’s a lot I don’t like about all the “web3” stuff going on: bad actors and environmental impact being on the top of the list. But even if this is set aside, it just doesn’t sound like an appealing way to spend my time. As far as I can tell, it’s just a bunch of projects and people doing the exact same thing seen on the web before, but with an extra layer of trading, hustling, fundraising, etc. completely driven by personal interests. It all seems so distasteful, and even a little boring.
Iβm adding some photos to last yearβs journal in preparation for turning it into a book. Iβm honestly trying to avoid rushing it and just saying βah, thatβs enoughβ. Any effort spent now will be paid back in kind once the book is printed and Iβm looking through it years later.
Iβm also glad that Iβve made Feed Journaler to import blog posts. Looking at the posts made earlier in the year, I can see that many are missing, most likely because they contain images that were not imported. Iβll need to import these manually.
We haven’t had any decent rain for several weeks now. So with the Bureau predicting rain today, I’m looking outside and at the rain radar like a roulette player waiting for the wheel to stop spinning.