Skip to main content

On Being Together

(Some raw thoughts I've written down solely to help me clarify my thinking.)

Being together with people I love and who love me in return is a source of great joy and solace.

Yet being with people can also lead to distress.

Like many, I've encountered rejection and resulting feelings of loneliness, I've been the target of ignorant nastiness, and some make it clear I am of no value while others happily place unreasonable burdens upon me. My own experiences are but a small selection from the menu of unwelcome situations that could be, and often are, meted out to people.

Dealing with complicated experiences and finding a way to work through challenging encounters often feels painful and can lead to a sense of failure or hopelessness. But I believe this process is also an opportunity for growth, albeit through small, difficult, and often misplaced, steps. Allowing complicated feelings, pain and failure to manifest is certainly better than the alternative: sweeping things out of sight means the distress is never addressed, explored or dealt with.

So, being together requires conscious work and reflection.

The good stuff can take as much effort as the bad. To be loving, compassionate, tolerant and forgiving towards others requires great strength of character. The bad stuff shows we are all flawed sensitive beings whose strength often fails us. We have an endless capacity to hurt and be hurt by each other. This is especially true if we don't allow ourselves the time and energy to reflect upon and consciously adjust our behaviour towards each other.

Sadly, some simply don't care for others or for such self reflection.

For example, narcissists (by definition) lack empathy or compassion and only make an effort in relationships if they see a benefit to themselves. This is a tragic form of ignorance, for they will never know the joy of relationships shared with loved ones who reciprocate emotional investment and mutual care. For them, being together is an exercise in self aggrandisement, domination or profit.

The origins of such self-centredness are complicated. Ironically, introspection and self-reflection - the very traits such people fail to exercise - would help address and overcome such origins.

I believe everyone has a unique and valuable journey through life, even if their current location or direction of travel is deeply problematic. Recognising this applies to a narcissist or other difficult individual takes (the afore mentioned) strength of character. But it means it is possible to be together without getting crushed by the weight of their ego or toxic behaviour. Sadly, sometimes this is simply not possible and you have to cut your losses and move on.

I often wonder how to respond to the difficulties that arise from being together with others. I continue to believe that being together is often a privilege and a source of happiness and growth. Yet some of my recent collaborations have also been a source of great pain (interactions with aspects of the Python community spring to mind). As a result, my feelings about being together have changed significantly over the past couple of years.

I used to be all about promoting "the community" as a way of being together. An immediate problem is "the community" is an amorphous blob of a term that folks never pin down. This is a significant cause of many problems as misunderstanding is rife. In any case, I naively contributed and volunteered my code, time, effort and money. In short, I tried very hard to be a positive part of "something". For the past 12 years or so, this "something" was the Python programming community.

In my experience, there are two common contrasting ways folks describe or think about the notion of "community": top-down (meaning the community is managed) and bottom-up (where the community emerges through participation).

I've always been reticent about top-down bureaucratic, formal and hierarchical notions of community. Often they are well meaning yet ineffectual (or sometimes even damaging) self defeating processes. They can also easily turn into toxic dumpster fires full of malice (politics and power plays being well known examples of contributing factors to such a sorry state of affairs). Finally, they tend to gain a momentum that makes it easy to squash and ignore rather than cherish and nourish individuals and creative innovation. While my experience of the "formal" Python community has mostly been extraordinarily positive, there has been enough not-so-good-stuff that I've chosen to step away. I can only but wish the Python community well, but it's a ship in which I no longer sail.

But I don't want to find myself in a chaotic bottom-up community either. While these are ad hoc, improvised and informal, there is still a hierarchy, along with impositions of power and other negative political machinations. These are lived out through hidden communication channels, gossip or because the loudest or most charismatic folks hold the floor. People are either "in" or "out" of the circle of these "movers and shakers".

At least more formal communities appear to be up front about hierarchy, the exercise of power, the scope and relations of roles and how one assumes positions therein..!

I can't help but feel that something is missing when we view communities as such formal structures. Communities are collections of individual people and, perhaps, the missing element to make sense of being together is an explicit focus on the "character" of participants. Just how do individuals reflect and choose to behave when being together?

I'm reminded of this rather interesting essay, by C.S.Lewis. I first read it when I was a music undergraduate and found it via my Christian room-mate. Lewis describes an "Inner Ring", something akin to the circle of "movers and shakers" vying for influence, power and prestige that I describe above. The part of the essay that most speaks to me comes at the very end:

"And if in your spare time you consort simply with the people you like, you will again find that you have come unawares to a real inside: that you are indeed snug and safe at the centre of something which, seen from without, would look exactly like an Inner Ring. But the difference is that the secrecy is accidental, and its exclusiveness a by-product, and no one was led thither by the lure of the esoteric: for it is only four or five people who like one another meeting to do things that they like. This is friendship. Aristotle placed it among the virtues. It causes perhaps half of all the happiness in the world, and no Inner Ring can ever have it."

Reaching back in time to feel like my 18 year old undergraduate self, I want to be with folks who are open to compassionate, collaborative, cooperative ways of working but without any extra problematic notions of "community" (as described above). I simply want to bring myself, and welcome others who want to join me, in a place where there's recognition, a connection, frisson or creative energy from which we can mutually grow.

In other words, I am inviting friendship.

Friendship requires trust, honesty, tolerance, compassion and forgiveness... all those things that depend upon strength of character. Putting in such effort for others is the antipode of the machinations needed to become one of the "in" crowd or a member of the organisational elite.

So here's the thing... the tech world has its fair share of folks who forget or don't understand what I believe makes a place positive, friendly and safe when being with each other. Such folks see collaboration in terms of gaining prestige and power. This is the stuff of narcissistic day dreams.

In an organised community such behaviour is addressed by a code of conduct (and the Python community spend a lot of time and energy acting on this with varying degrees of success, from [alas] hollow virtue signalling through to very effective networks of support centred on extraordinarily kind and caring individuals). Conversely, informal communities tend to lack this sort of public or explicit "framework" often with detrimental results (folks are able to capitalize, abuse or manipulate the informal "hidden" networks and relationships to selfish or unpleasant ends with no clear way to call them out).

My focus on self-reflection and things within my own control explains why I've found myself writing a sort of poetic personal code I call "on being together". I'll make it a part of all my future coding projects (and encountering Xe's Creator's Code inspired this effort). It's very much a work in progress and has become an expression of what you can expect from me and what I hope from you should we find ourselves "being together" in a place to collaborate with each other.

When working together or if things go wrong,
we acknowledge and work through differences.
In so doing, we transform and enlarge each other.

To nurture our mutual growth,

    this is a place of
        learning, understanding, and sharing;

    this is a place to
        affirm tolerance and compassion;

    this is a place for
        collaborative creativity.

All the aspects of yourself you choose to bring to this place
are welcome here.

Reciprocate! Welcome, embrace and learn from others
(even in the face of apparent hostility or misunderstanding).

To act against this spirit invites ostracism,
a loss that diminishes us all.

Thank you.

Twisty Passages at EuroPython 2020

EuroPython took place last month and the raw video footage of the talks has just been published online. EuroPython has always been one of my favourite conferences and is a special place for me: it's where I gave my first ever programming talk back in 2010. It's also one of the most culturally cosmopolitan programming conferences and was the world's first community organised Python programming conference. I always come away feeling enriched by EuroPython.

Thanks, as always, to the volunteer organisers who work so hard to bring about this remarkable event. Such thanks are especially well deserved in 2020 since it was held online due to the spread of the COVID-19 virus. The potential for technical mishaps and problems was huge, yet the friendly and supportive team behind the conference ensured a slick and engaging event.

As always, there were many great talks with a particular highlight for me being a fascinating explanation of building "artistic artefacts" (computer generated pictures in the style of human painters) with Generative Adversarial Networks.

However, I sorely missed the corridor track - when you walk around the physical conference venue and bump into an old buddy, find yourself striking up a conversation with a friendly co-attendee in the coffee queue, or join a huddle of welcoming folks discussing something interesting. The corridor track is where the community comes alive. I'll have more to say about this in a moment...

I was delighted to make two contributions to this year's conference.

The first was a wonderful opportunity to bring some music to the conference. My friend and EuroPython's own force of nature, Marc-André got in touch to say that they were looking for musical contributions to a "jam session". I have, on several occasions, inflicted my love of tubas on Marc-André so he knew I used to be a professional classical musician. I can only assume his Germanic inclination for oompah-bands was at the back of his mind when he reached out. I responded that tuba music is "rather niche" at the best of times, let alone as part of a "jam session". Nevertheless, I agreed to contribute something, "perhaps a piece of classical piano music?" (since I'd been playing lots of piano during lock-down here in the UK).

In the end, I went for some Brahms ~ an Intermezzo written "as a token of friendship" for his friend, the concert pianist and composer Clara Schumann. It's my musical token of friendship towards everyone at EuroPython.

I hope you like it.

My second contribution was a presentation. The slides I prepared, including the links to all the resources I mention can be found here.

The presentation is an exploration of how one might recreate a remote corridor track via the internet. I think it speaks for itself (honestly, go watch it, I had a lot of fun preparing and presenting it).

The summary is that I feel deeply uncomfortable about the way friendships, conversation and community are mediated in a technical context at this moment in time. This is something we should be especially concerned about given how much of our interactions have taken place online during these times of virus related lock-down.

I offer a quick explanation of what I find so uncomfortable about the current state of the art and look into the history of computing for other, more humane, respectful (of users) and creative means of communication via computers.

Ultimately, I describe how I'm using Python to recreate a programmable MUD (a multi-user, real time text based virtual world) based upon ideas first explored in the late 1970s and which I encountered in both the 1980s (while at school) and in the mid-1990s (when I was at university). Such creations were famous for their mazes of twisty passages that players could explore and inhabit together.

If you've never heard of MUDs before, here's Richard Bartle (one of the authors of the original MUD and author of the bible for virtual worlds) describing an old technology for talking directly to the imagination...

As always, I love feedback, comments and constructive criticism offered in good faith. Assuming the lock-downs have eased, next year's EuroPython will be in Dublin, Éire.

I love Ireland. Can't wait!

See you at next year's EuroPython!

2020 Changes

I've spent today updating everything to do with Many thanks to my buddy Kushal Das for the invaluable advice on various technical matters.

Here's what I've done:

  1. The website is run using Nikola ~ a Python based static site generator. It was very easy to migrate away from my previous hand-coded solution made with a custom Flask script and HTML.
  2. It's hosted on GitHub Pages which is both free and makes it very easy to manage code and deployment.
  3. I've switched email hosting to Fastmail, who made the whole migration process extraordinarily easy.
  4. I've archived the code for the old website for "safe keeping", even though all the content has moved over to the new site.

Lots of things have changed in addition to my own technical infrastructure.

I've just finished a very busy period of freelance work with two clients - the Freedom of the Press Foundation for whom I contributed Python code to an application for journalists, and NHSDigital for whom I fulfilled the remote role of a code mentor / developer coach (like an agile coach, but much more technical). I was collaborating with a team of Java developers who were learning Python and Django while building APIs for internal customers and users. I also provided Python training, which was very rewarding since I love teaching and the NHSDigital folks were already technically very strong and lots of fun. Both teams were exceptionally talented and friendly. I had a blast and made lots of new friends.

In just over a week I'll be starting a new gig with the Ministry of Justice as a senior Python engineer. I'm really looking forward to this since the work is useful, interesting and challenging. I'm looking forward to learning from my new colleagues and making contributions to our collective effort.

What does this mean for all my other projects (for instance CodeGrades or Mu)..? Ironically, I believe I'll have more rhythm to my day and so my work on these projects will continue in my own time, but at a more predictable pace. Watch this space. :-)

Finally, the current Corona virus pandemic is affecting life in rather unforeseen ways: my daughter and older son have had their summer exams cancelled. Apparently, their results will be based upon their predicted grades. It means my daughter is going to read Mathematics at university with a scholarship (dependent on her achieving her target grades, which she will in light of the current situation) and my son will have the grades needed to go onto study Physics, Maths, Music and Design Technology at "A" level (his current plan is to read engineering at university). My youngest son continues school lessons, completed at home via an online platform.

We've also had to purchase some home-studio equipment (mics, pre-amp, monitor speakers, midi keyboard and related audio software). Mary, my wife, uses this to teach her many instrumental students remotely via video calls. It soon became apparent that laptop or mobile phone mics are not great for cello or piano teaching. Happily, the new equipment is proving to be a great success and Mary is able to continue teaching most students without disruption and from the comfort of our own music room:

Our home studio

It also means I have the equipment available to produce my own (Python) training materials and the kids are having a great time mixing all sorts of different types of music.

Here's hoping you stay safe and remain healthy during this challenging time. Since most of us are in lock-down, don't hesitate to get in touch if you fancy a chat..! Social distancing rules don't mean you have to be anti-social.



The majority of the code I write is given away for free for the benefit of others. This is unsustainable so I often think about how such voluntary work could be supported. One solution is related to my CodeGrades idea. But this is a slow burn project that has involved, and continues to demand, a huge amount of time, effort and money before I'll have anything to show for it.

Another solution is simply to ask folks for money.

Having been a musician, I'm used to this feeling. I used to busk with some buddies as a way of trying to make ends meet. However, as my grandmother once pointed out, it's a form of begging. In one sense, this is a tragedy: begging is a last resort because nothing else you do is of value. You're forced to rely on the compassion and generosity of others. Yet in another sense it's like the activity of a mendicant asking for alms for their service or contributions to society. In any case, no matter how you "spin" it, it's a precarious situation to find oneself in ~ be you a musician or free software developer (and I'm both!).

While there are some kind hearted individuals and (even rarer) companies or organisations who are happy to help support such work, most think, "meh, I'll just use the software" (without so much as a thank you). Even worse (and I have personal experience of this) some folks will pass off such voluntary work as their own and reap the rewards for such a lie. This is why I actually earn money-to-live by writing software as a freelance developer (it gives me the flexibility I need to work on my own coding projects).

Therefore, it was with some interest that I noticed GitHub had created what they describe as account sponsorship. "Sponsorship" is an interesting word to use because it makes the begging / mendicant aspect of the situation more palatable. It also cheerfully suggests that the free/open-source software world is full of generous hearted folks or organisations just waiting to give back to the selfless volunteers who make all this code available via their GitHub account.

This is, of course, a fiction. It's also normalising begging as a solution to funding free software volunteers.

But I'm open minded and willing to give anything a go, especially if it means it'll cover my costs. So I've signed up and now you can give me money for my efforts. As of the time of writing, and after tweeting about this to my 3,000+ followers, this is what my account looks like:

I can't help but think that in six months time, it'll still look the same. But at least I can say I gave it a go. Despite my misgivings, I feel it important to give ideas a chance to flower and I'm trying very hard (yet failing) to view this as a mendicant rather than beggar.

So, if you've ever found my work or activities useful, beneficial or supportive, please consider helping me sustain my efforts. You can do so by visiting my "sponsorship" page to find out more about what I do and how to give "alms". The summary is that I focus on education: I develop software that helps folks learn the skills and knowledge they need to imagine, develop and program the stuff they want. If you believe this is important work, sponsor me with a monthly contribution.

Alternatively, and many thanks to the small number of you who have already done this, you can send me a virtual hug-as-a-book by buying me something from my Amazon wish list (none of the items are particularly expensive). Small gestures, such as gifting books or music with a supportive message, can actually mean a lot.

I'll report back in a few months to let you know how I get on. I have to admit, I don't hold out much hope. Best knuckle down on CodeGrades.

Well... what are you waiting for..? Go on... get your wallets out. :-)

(Honestly, I quite understand if you don't. I have the same misgivings you're probably having after reading the sentence above. Such a feeling is the nub of what I want to demonstrate in this blog post.)

CircuitPython 2020

My buddy Scott, one of the wonderful people at Adafruit, recently asked folks in the wider CircuitPython community to share their thoughts about what they'd like to see for the project and community during 2020. This is my contribution to the conversation.

There are three aspects to my hopes for CircuitPython in 2020:

  1. Things I hope will continue,
  2. Developments I hope to happen,
  3. "Moon on a stick" wishes for the future.

I want to start by reaffirming my belief that Adafruit, and those involved with CircuitPython in particular, do inspiring stuff when it comes to fostering an open, welcoming, supportive and collaborative tech community. This is an extraordinary achievement. My own experience in the wider Python community is that it takes a huge amount of effort, patience, compassion and thoughtfulness to grow and sustain such a "scenius" (and, sadly, this can be destroyed very quickly by only a few bad actors). So my wish for continuation in 2020 is that everyone involved in the CircuitPython community grasp opportunities to enlarge positive aspects of ourselves such as mutual appreciation, the sharing of tools and techniques, latent network effects, and a spirit of tolerance, compassion and fun.

What I hope happens this year is a broadening of CircuitPython's horizons. My passion for tech can be summed up by a quote from David Allen, the producer on the original BBC micro from the 1980s -- my first computer. He explained that, "[t]he aim was to democratise computing. We didn't want people to be controlled by it, but to control it." CircuitPython feels to me like it sits very much in the hobbyist / enthusiast "segment" of users who already know something of programming. I'd love CircuitPython to make inroads into beginner related education. This probably involves a focus on learning what teachers would like from a coding platform, honest appraisals of how beginner coders (no matter their age or background) find their first steps with CircuitPython and Adafruit boards, as well as making the results of such findings accessible to all. This final point is important. Learning to code shouldn't just be an option for English speaking, able bodied folk from a cultural background that means examples and cultural assumptions are easily understood. I hope you agree that education should be an inclusive endeavour, and this takes concerted and conscientious effort. I hope the CircuitPython community find the time and space to invest in the (never finished) work such a focus entails.

My "moon on a stick" is a CircuitPython based mobile phone with a touch screen and a simple (PyperCard like?) Python UI that's easily hackable. Think of it as the open, easy-to-assemble, relatively cheap and "hack friendly" version of something like the Light Phone with all the schematics and design assets (e.g. files for 3d printing the case) available under open source licenses so folks can go mod-crazy. Now wouldn't that be a turn up for the books..?

I'll finish by wishing everyone in the CircuitPython a flourishing and happy new year. Here's to wonderful things in 2020.

Let's go..!