Getting going with Gemini

I’ve been really interested in Gemini space for about a year now, having read the protocol and used a few web proxies to explore Gemini space

I finally gone whole hog and downloaded a Gemini browser, Lagrange on my home computer in order to explore Gemini space better, faster and using the experience the actual Gemini users get. (Kudos to Lagrange for being a browser written in C which actually compiled first time when I wanted to make a small change!)

Gemini has been great!  

It’s incredible to find all these people publishing content on the internet which is totally invisible to the web. It’s been said many times before but it really does feel like the early days of blogging, where people are exploring the new formats, new types of engagement and ways of browsing, editing, uploading and exploring each other’s content.

The limitations of the format (no styles!) means there are some really interesting pieces of functionality in the client, like auto-selecting a colour palette based on the domain name, or adding in-page references or tables of contents as part of the native browser, rather than through a plugin. This works especially well in Gemini because there is no server-side layout to consider, so the browser is free to use the full width of its window to provide affordances in a consistent way across multiple sites.

Another of the really interesting aspects is Titan. This is an extension to the Gemini protocol which allows for editing and uploading of content in Gemini space, in a way much more similar to the original envisioning of the read/write web by Tim Berners-Lee back in the 90s. A good example of this is through using the Phoebe wiki software.

And so the question remains what best to do to join in with this fun?

Well, it turns out that it’s absolutely trivial to run a Gemini server on a Raspberry Pi, of which I have many in a box, and so I chose agate (download binary, execute binary), created some pages, added some firewall rules and lo! up and running!

So, plenty of playing to do now and to see if I can use some conversion tools (and editing discipline) to multi post both to here and its Gemini equivalent. Exciting!

When my bins go out

I had to write some PHP to tell me when to put out my bins because my council doesn’t follow their own rules for collections.

Every week my council organises the collection of our 5 bins – but there is a pattern to how they are collected.

This is a pretty simple pattern, with 3 of the bins going out every week and the two largest (general waste and garden waste) alternating each week.

Except that it’s not. 

What actually happens is that for the first three months the garden waste is collected in the first week and then for the second three months the black bins are collected first, and so on. Mostly this works out fine and it looks like the collections simply alternate each week. But August 2023 (which is in the middle of the third quarter of the year) had 5 weeks, meaning there should have been two weeks in a row where the general waste was not collected, and the garden waste was collected. This did not happen.

This means that the document they provide residents with dates of collections is now wrong. The PDF with this info is also wrong. The way to find out what’s being collected is to use their website. The website does everything using ajax and does not push state to the URL, and so the page with your individual information on it is not bookmarkable. This is annoying.

Luckily, watching the network requests revealed a very simple JSON file that covers the bin collection timing of my area and thus I could extract it trivially to provide the useful service that neither the council leaflet nor website provide.

Prefer planned rework to big bang delivery

We have a few large projects on at work to replace key legacy systems and are discussing how to do that.

Most of the discussions so far have tended to end up in a position where an incremental piece of delivery of the large overall system has been rejected because we know it will require rework later.

In this case, knowing about the rework is good!

For large projects which do not plan to deliver in an incremental way, the total amount of work required is unknown. It is in our interests to make as much of that work as known as possible as early as possible, but if a large system does not go into production until is fully complete, then the amount of bugs and rework to be done are both a) unknown in advance and b) time-critical. This is the worst of all worlds.

Far better is to incrementally deliver over an up-front longer timescale (you’re going to have a longer timescale than your big bang delivery plan accommodates anyway, you can just choose to ignore that fact by drawing a gantt chart of how many days a task 2 years from now will take) and know that what you’re delivering actually works, and that reworking it will be a time-bounded effort because you will have both the experience of doing the delivery and evidence of real-world usage and behaviours of your system.

Riding my bike online

I like riding my bicycle. I like being outside; I like getting exercise; I like that I can do it solo and leave all my daily concerns at home as I cycle on a dedicated paved path which winds its way between crop fields and over bridges.

Or at least I did until I moved house from somewhere I could be on that path in seconds, to somewhere where I have to dismantle my bike, put it in the boot of my car, drive to the path , reassemble the bike and then set off – quite a different experience. I’m sure a bike rack for the car would make things easier, but it’s sort of not the point. Ease of access is key.

So a year ago I bought a turbo trainer and got a subscription to Zwift (wikipedia and official site). I set up my bike in the garage and hooked up my phone to a cheap projector over its USB-C connector and now I get to cycle around the Champs-Élysées or a volcanic island whenever I like. 

I tried several alternatives to Zwift, in particular some of the free ones, but sadly none of them were as good.

It’s not quite a substitute for being outside, but it does tick the boxes for ease of access, gets me some exercise and the gamification and MMO aspect do mean that I forget about everything else whilst I’m cycling, a precious commodity since remote working kicked in and the gap between home and work reduced to zero. 

Look on my works

A few years ago I read Ivanhoe and, as intended, ended up suitably grumpy at the French and felt sorry for the Saxons.

Last weekend some roadworks forced me to drive through Cricklade for the first time. Cricklade was founded in 878 by the Saxons, and its church is dedicated to Samson of Dol, one of the Seven Founder Saints of Brittany.

One of the other notable British missionaries to Brittany was Gildas, who died in about 570, and who wrote the frankly wonderful De Excidio et Conquestu Britanniae (“On the Ruin and Conquest of Britain”) – an excoriation of the kings and priests who failed to stand up to the Saxons when they invaded and allowed the country to fall into what he considered ruin when the culture of Sub-Roman Britain was overthrown. The following is from a 19th century translation:

>KINGS Britain has, but they are as her tyrants: she has judges, but they are ungodly men: engaged in frequent plunder and disturbance, but of harmless men: avenging and defending, yea for the benefit of criminals and robbers. They have numerous wives, though harlots and adulterous women: they swear but by way of forswearing, making vows yet almost immediately use falsehood. They make wars, but the wars they undertake are civil and unjust ones. They certainly pursue thieves industriously throughout the country, whilst those thieves who sit with them at table, they not only esteem but even remunerate.

I keep thinking about how genuinely upset GIldas must have been to have written these screeds against the immorality of the country’s leaders. I guess nothing really changes.

Make it easy to write objectives

I have never worked with a software developer who enjoyed writing their quarterly or annual objectives.

Most had been previously burned out by laborious processes which either meant two objectives take hours to write, or they’re easy to write but vague enough that they take hours to evidence every 3 months. In some cases they’ve even had objectives in which they had no say because they were either handed to them directly by a line manager, or had “trickled down” from group or org OKRs.

My thoughts on this were triggered by Matt Jukes’ post about his feelings on OKRs, which I share. 

I have helped set objectives for dozens of developers in multiple organisations in the last 10 years. My own goals when doing this are:

  1. Try to make the process as painless as possible
  2. Try to align the objectives with what a developer wants to be doing – if possible work with them before the session so they can create some draft objectives of their own
  3. Don’t set more than three objectives for a quarter
  4. Make each objective SMART – you want to be able to look at it and say “yes this is done” or “no, this is not done” in clear terms. If you want to provide “levels of done” then that’s fine, but see point 1.
  5. Set objectives which help someone grow! Whether it’s giving them confidence by building on existing skills, or learning new ones, or even just really getting to a tricky problem they have been wanting to take on, lean into these! Make the objectives desirable! Can they always _all_ be like this? Probably not, but keep your eyes open for opportunities.

None of these sound like revolutionary approaches, but in my experience, they’re still exceedingly rare and this list has taken me pretty far in building both good relationships and good people.

Time management resolution

I don’t do resolutions, but I have changed how I approach something at work for this year, and so I guess that counts, right?

I now have regular blocks of time in my calendar marked out as “Busy. Any meetings added in this time will be declined.”. This was after I realised I had multiple days in a week where in 7 hours I was doing a dozen or more meetings and was feeling totally burnt out at the end of each of those.

I got back in touch with the people who had called those meetings (including myself, clearly my own worst enemy) and asked if my contribution had been valuable, and they said it had. There are very few meetings where I am a quiet observer so I’ll take their word for it, and I already reject meetings I don’t think I can be useful in or I suggest alternative people to attend, but the feedback means that if I’m usefully being glue then I need to take more aggressive direct action to protect my time and this is my first try at that.

Microsoft’s collaboration tools are terrible

Not only are their tools terrible, but everyone involved in their creation should feel bad.

Let’s name the subjects of most of my ire, in no particular order:

  1. Microsoft Teams
  2. Azure DevOps
  3. Office 365 (or whatever this week’s branding is)

Each of these tools is **substantially** behind their competitors. The easiest comparison to draw is with Google’s suite, in particular Google Meet and the G Suite tools. I reckon Word 365 is a decade behind Google Docs. Microsoft Teams has made huge strides forward since the Coronavirus lockdowns, so let’s be generous and say they’re only 5 years behind.

Let’s start shall we?

When sharing docs through Word, and editing collaboratively there are **huge** time delays between contributions showing up on others’ screens – changes that in Google Docs appear instantly. There are times when one person can be typing paragraphs and suddenly those paragraphs disappear from view for other people, leading to delays, communication problems and of course destruction of flow. It deals with change conflicts terribly, locking areas of a page where people are typing, making it basically impossible to do sentence-level collaboration. The user-user sync is nearly unusable, to the point that when I now do collaboration on Word docs, it’s easier to start a video call and get people to shout out their changes rather than actually try and all contribute to the doc together.

Azure DevOps is a dystopian nightmare of a web application. I honestly don’t know where to start. Let’s go with the fact that for accessing any of its wide range of services, if you don’t have JavaScript, or have blocked the wrong script, or have a patchy connection that doesn’t load all those files correctly – you get nothing. Nada. Zip. Zilch. Blank screen for you buddy! What, you wanted something that worked without rendering literally everything on the client side like it wasn’t 2012 any more? Bad luck to you! What, you mean there is a _terrible_ performance cost of doing this on every single page load? Well, you’d better get used to it! When you bring up a menu you want _all_ the items to appear straight away rather than clicking it, seeing 5 options and then 5 seconds later another 10 appear at seemingly random locations in that list? Weirdo. 

My own personal status check of Azure DevOps is that it uses a stylised floppy disk icon for the “save” action. Windows 10 and 11 don’t even come with drivers for floppy disk drives any more. Every single piece of UX across the whole product is trash, and this is just underlined by its **awful** performance, and this is coming from someone who has used Jira.

I could go on and on about all these products, but what I could never do is recommend that anyone ever use them.

Microsoft, you need to do better.