Simplifying my Ansible set-up

Ansible is the worst automation platform out there, except for all others.

— Sir Winston Churchill

You could say I have a "love-hate" relationship with Ansible. After using Puppet and Chef in work environments, I found them to be utter overkill for any personal projects. In contrast, Ansible promised to be a "radically simple IT automation platform" (filthy lies!), and compared to the others, it is. For my use case (maintaining a couple of EC2 instances), it works pretty well. There is no "Chef server" or "Puppet master" orchestrating things at the heart of the system: there is just a Git repo with some configuration files in it (just on my local laptop) and an Ansible executable that I can run directly and which will ssh up into EC2 to do the work.

But it is still pretty complicated. The project itself is huge, and its dependency footprint is big too. The whole thing is in Python, limiting my ability to debug or modify it when things go wrong (seeing as I am not a "Pythonista"). And it is pretty slow: every little command you run requires a new SSH connection to the server (even if you reduce the overhead by using SSH’s ControlMaster functionality, it’s still slow). In the end I’ve had to implement cumbersome workarounds to address the performance issues, like telling Ansible to upload a Bash script to the server that does something to 40 different Git repos all at once, instead of telling Ansible itself to do the work. It kind of feels like having a fancy mesh WiFi network in your home, but then running ethernet cables all over the floor connecting all the rooms together.

The sheer amount of code involved in Ansible makes upgrades scary. Last time I looked, a clean copy of the Ansible repo clocked in at well over 200 megabytes. For a while I was even using Ansible to set up my local laptop, but my trepidation about its footprint and the fear of things breaking on updates eventually led me to throw it out and write my own framework instead. All I need to do on my local machine is edit a file here and there, set up some links, maybe install some things or run some scripts, so my tiny home-grown tool suffices.

For my EC2 use case, however, I’m still not ready to throw out Ansible. I don’t want to have to deal with platform differences and network communications, which are two of the things that Ansible basically has totally figured out at this point.

Amazon has "Amazon Linux 2" now, and the "Amazon Linux" machines that I’ve been using for many years need to be migrated. You can’t just upgrade; you have to set up everything again. There have been some reasonably important changes between versions (like switching to systemd), which mean I may as well start from scratch and take the opportunity to redo, update and simplify things as much as possible. This is an opportunity to pay off technical debt, do some upgrades, and set things up "The Right Way™".

Before starting, I sought to simplify my arrangements on the instances as much as possible. For example, I had some static sites hosted on one of these machines which could be offloaded to GitHub pages. And I had some private Git repos that I was backing up by taking EBS snapshots of their volumes, which I could also just mirror off to GitHub as private repos (and once I had that offsite backup, I could stop doing the EBS snapshots). And this in turn meant that I could simplify the volume structure: instead of having a separate XFS-formatted /data volume, I could just have everything on the root filesystem (XFS is now the default format, and I don’t even care about keeping things separate as I can now recreate any instance from scratch based on data available elsewhere).

I’ve always been skeptical of putting too many eggs into corporate baskets, taking great pains to minimize my dependence on Google, for example. For the longest time I didn’t push anything private to GitHub for this reason, even though their servers are most certainly safer and better maintained than my "lone wolf" amateur EC2 instances. But over the years, I’ve also realized that the real value of a lot of this private data that I’ve been pushing to my secret repos isn’t actually so great after all. It could be irrecoverably lost to virtually no consequence, and it could be leaked or exposed with only a little discomfort and inconvenience. Added to that, I actually started working for GitHub last month and I figure that if a company with a multi-trillion-dollar market cap like Microsoft is prepared to place a bet on GitHub, then little old me shouldn’t have any qualms about it — I have much less to lose, after all.

One of these EC2 instances hosts this blog, and I was able to simplify that too. When I set up the old instance (back in 2015) a large chunk of the content in the blog was written in "wikitext" format, and that was turned into HTML using a Sinatra (Ruby) microservice. Since then, I migrated all the wikitext to Markdown (a fun story in itself) and spun down the microservice. That means the instance no longer needs Ruby or RubyGems.

The other EC2 instance was running PHP for a couple of domains (www.wincent.com and secure.wincent.com). I simplified my set-up on that instance by making a static mirror of all the files and folding them into wincent.com itself, running on the other instance). This is the 5,000-file/1,000,000-line commit where I brought all that content across. The follow-up commit where I ran all the static HTML/"PHP" through Prettier is pretty epic, clocking in at over 3,000,000 lines. I also updated a quarter of a million links in this commit. Fun times.

The great thing about all these simplifications and migrations is that my instances are now close to being, effectively, "stateless". That is, I don’t really have to worry about backing them up any more because I can recreate them from scratch by a combination of bootstrapping with Ansible, and git push-ing data to them to seed them with content. If I lose my laptop and GitHub destroys my data then I’m in trouble, but I feel reasonably safe with three-fold redundancy (ie. the instance + my local copy + GitHub’s). It’s not infallible by any means, but it definitely meets the bar of "good enough"; at least, good enough that I’m not going to lose any sleep over all this.

Moving to Amazon Linux 2 was a pain in some ways (ie. having to rewrite Upstart scripts as systemd units) and great in others (eg. having access to recent versions of Monit, Redis and other software without having to build from source; in the end, the only software I had to actually build was a recent version of NodeJS on one of the hosts). Along the way, I also moved from acme.sh (which recently sold out to commercial interests) to acme-tiny (which sounds like my personal Let’s Encrypt spirit animal, being "a tiny, auditable script … currently less than 200 lines"), and made numerous improvements to make the certificate renewal process more robust. I even went so far as to finally set up a proper "non-root" IAM user for doing my admin work in the AWS console. Key pairs were rotated, security groups cleaned up, Subject Alternate Names trimmed, and so on. Basically, took the opportunity to pay off as much tech debt as I could as I went.

The above simplifications meant that my overall requirements were now basic enough that I could dispense with most of the abstractions that Ansible provides (like group variables, roles, and so on) and just put everything in a single playbook. This is really marvellous for maintenance: it is a 1.5k-line YAML file, but that includes everything (tasks, handlers and variables for two hosts), and it all reads 100% linearly with no abstraction clouding or concealing what’s actually happening — you can just read it from top to bottom and see exactly what is going to happen on both hosts. Now, there is some repetition in there that could be factored out, but the repetition in this case is what keeps the whole thing simple. I’m probably not going to touch it. Additionally, getting rid of roles means that all of my templates and files are consolidated in a single location in the repo root instead of being dispersed over a dozen or so subdirectories hidden three-levels deep.

I was a bit worried that in moving from Ansible 2 to Ansible 4 I was going to have to deal with a huge amount of breakage, but in the end it wasn’t too bad at all. Most stuff still works, and I was able to do almost everything I need using the ansible.builtin collection alone (only dipping into the ansible.posix collection for one task on each host, concretely, using the ansible.posix.authorized_key module). I do find the whole collections thing to be unpleasantly over-engineered, and I wish I didn’t have to know that "Ansible Galaxy" was a thing, but in the end I was able to mostly pretend that Galaxy doesn’t exist, by adding the ansible.posix repo as a Git submodule checked out at vendor/ansible_collections/ansible/posix, and setting collections_paths = ./vendor in my ansible.cfg.

A similar dance with Python, moving from virtualenv (a separate tool) to venv (bundled with Python) for creating a sandbox environment, allowed me to use the aws-cli tool from a submodule without having to reach out over the network with pip every time I wanted to do something. I still wish that isolation and reproducibility were easier to achieve in the Python ecosystem (and maybe it is, for experts), but I was able to get done what I needed to do, in the end.

So with that, that brings to a conclusion my migration from a pair of trusty EC2 instances that had been launched all the way back in 2015. We’ll see whether their 2021 successors also last nearly 6 years, and whether the move to "Amazon Linux 3" ends up being any more straightforward thanks to the simplification and updates I’ve undertaken now. Hopefully, major system components like systemd and yum will still be there, so the next update will be a breeze.

Connecting computers in 2021

It’s kind of crazy how complicated it is to hook up computers, screens, and other things in 2021.

The story starts with my old work laptop. This was a 2018 MacBook Pro. It had four Thunderbolt 3 ports on it. On the bright side, with all the ports the same, and two on each side, you could plug it in pretty much any way you liked. But most devices I needed to connect to didn’t have fancy USB-C connectors on them, and that meant that I needed a dongle. Specifically, I had a dongle that went from USB-C on the laptop to an HDMI port, an ethernet port, and a couple of USB-A connectors. It got the job done, and like I said, the fact that all the ports on the laptop were identical meant that I could put it on either side of the desk, and plug the power and dongle into whichever side suited best.

After working from home for a while I got an external display which had a built-in USB hub. This meant that I could buy the right cables, get rid of the dongle and plug my keyboard and mouse into the monitor. So, the computer now had power going in one side, and out the other side, one USB-C to USB-B connector (running to the monitor’s hub), and one USB-C to DisplayPort to provide the video.

The monitor in question is a BenQ whose model number I can’t remember — maybe PD2700U or something like that. It’s claim to fame is that this USB hub it has can be switched from one computer to another, acting as a kind of integrated KVM (Keyboard, Video, Mouse) switch. So, I grab a USB-A to USB-B cable, and a DisplayPort to Mini-DisplayPort video cable, and run them from my Linux box. This means that I can have both the laptop and the Linux box plugged into the monitor at the same time. When I want to switch between them, I hit a button to toggle the video input from Mini DisplayPort (the Linux box) to DisplayPort (the Mac), and another button to flip the upstream connected to the USB hub, thus moving the keyboard/mouse from one machine to another. It’s not the slickest, fastest, or smoothest transition, but it is pretty easy and surely beats yanking cables out of sockets and plugging in others.

Later on when I started doing more work on the Linux box via SSH (because it is powerful) from the Mac (because it is comfortable), I added an ethernet cable into the mix, via a small USB-C-to-ethernet dongle. So, I ended up using all four USB-C ports, two on each side, but the overall set-up was pretty tidy.

Anyway, I leave that job and the work laptop goes back to its owners. I decide to get my personal laptop working with the monitor. This one is a mid-2015 MacBook Pro: no USB-C connectors or anything, it has a couple of old-school Thunderbolt ports (same form factor as Mini DisplayPort and can connect to it), a couple of USB-A, an HDMI, and a MagSafe 2 socket for the power. Now, the MagSafe is on one side, the left, which means you don’t have the same degree of freedom when it comes to powering it. But I didn’t really have much choice about that, so I soldiered on. I had a Thunderbolt-to-ethernet adapter from the old days, so I was able to use that, but it suffered from the same problem as the MagSafe connector: the two Thunderbolt ports are both on the left, which meant that I had to do some cable rerouting to get things where they needed to go. Finally, I bought another USB-A to USB-B cable to plug this thing into the hub on the monitor, and a Mini DisplayPort to HDMI so that I could transmit video. Once again, I had a basically dongleless set-up (unless you count the tiny ethernet adapter). All was well in the world, or at least adequate.

The story concludes (for now) with a new work laptop). This one is a 13" model with exactly two USB-C connectors on the left side and nothing else. The horror! In order to plug this thing into the monitor, the monitor’s hub, ethernet, and power, I need four ports. But wait, I also need to a YubiKey, so make that five ports. I look on the Apple Store to see what brands have Cupertino’s blessing, without really having any intention of buying from there, but at least wanting to find out an endorsement for something that can be expected to work well. I hit Amazon and am dismayed, but not really surprised, to see approximately 692 different models of "dock", "base", "dongle", "hub", and so on, all purporting to do more or less the same thing in an infinitude of different variations. I wade into the swamp that is the review section and come out disappointed. Even the $300 "Belkin Thunderbolt 3 Dock Pro" (the same one from the Apple Store) is drowning in negative feedback, although in this day and age of bots and paid reviews, who knows how much of it is real. After a little bit of "review" reading from what are supposedly tech reporting outlets, some YouTube "review" viewing, I think I’m going to get something like the OWC Thunderbolt 3 Dock reviewed here.

I hate dongles, but the reason we have such tiny laptops nowadays is that manufacturers like Apple have offloaded a lot of the stuff that used to be inside them into the hands of third-party peripheral makers. The trend probably isn’t going to change, so may as well lean into it. The idea of one of these "docks" is that you plug one cable from it into your laptop, and you can charge the laptop from the dock. So, you don’t even need to juggle a power brick. The YubiKey can go into the one remaining port, and everything else hangs off the back of the dock. In my case, that will be a USB-C (Thunderbolt) running video to a DisplayPort socket on the monitor, a USB-A cable running up to the hub on the monitor, and the thing even has an ethernet socket on it, so I won’t need that dongle any more. Given the cables I have, I could also do Mini DisplayPort (Thunderbolt) to DisplayPort, and USB-C to the hub; it doesn’t really matter. This one isn’t quite as pricey as the Belkin, but the cheapest I’ve seen it for is somewhat north of $200. Not really surprising, I guess… as I said above, they’ve effectively taken a bunch of stuff that used to be inside the computer and externalized it into a separate structure, so you’re actually buying a little "chunk of computer" and one that hopefully won’t uglify your desk too much. Good thing I have a nice cable raceway screwed behind my desk to hide all this stuff away.

My goal in this post has been to illustrate the rather staggering complexity of getting computers to connect to things. Consider the variety of connections and combinations that we’ve seen in in this post — just five short years that span three Mac laptop models from mid-2015 to 2020 — and how when you add a monitor, a hub, and another computer into the mix, things get quickly out of hand. As much as I have hated every step of the way, I must begrudgingly admit that Apple probably did the right thing by streamlining the ports on their machines in the name of making things slimmer and simpler. Even MagSafe, which I loved, isn’t so great when you only have one of them on one side of your computer. Having everything be Thunderbolt/USB-C makes things massively simpler. The place where I wish Apple hadn’t cut corners, though, is in the number of ports: having just two on one side of the machine is simply not enough. A dock ends up being a decent solution (and sure beats having a half-dozen dongles), but is sure would be nice if a pro laptop would come with not just two ports on each side (or worse, on one side only), but three on each side. I can’t really conceive of any realistic situation where having six USB-C ports wouldn’t be more than enough. Now I just hope that this simple USB-C-only modality sticks around for a while before things start getting complicated, again, because I think I need a break before I get back on the merry-go-round.

How to vote in the Madrid elections on 4 May 2021

I was originally going to post this on Twitter but their web UI only lets you prepare 25 tweets in a thread before posting. I’d rather not cut this one short, so here it is as a blog post. My goal here is to explain my thought process for deciding who to vote for, starting from the basis that my main goal is to prevent the (likely) outcome of Ayuso returning to power.

Ayuso became president in 2019 despite her party, the PP (Partido Popular), only securing 30 seats in the election, out of the 132 total seats in the Asamblea de Madrid. It was the PP’s worst performance ever in Madrid in their 26 years of uninterrupted government, coming as it did after a string of corruption scandals afflicting the party. This ultimately brought to an end the presidency of the leader of the PP at the national level, Mariano Rajoy, in 2018, via a motion of no confidence.

The PSOE (socialist) party had 37 seats in comparison, having won more votes than any other party by a large margin (28.67% of the vote compared with 16.69% for the PP), but couldn’t form a majority coalition government. Together with the two other parties on the left, they had 64 seats. On the right, Ayuso was able to form a majority in conjunction with the (only nominally) centrist Ciudadanos party, and the far-right Vox, totalling 68 seats in all. Now, if you like Ayuso or tend to vote to the right, I doubt a Twitter thread or a blog post is likely to change your mind, but I’m at least going to have a shot at explaining why I want to see her and the PP out the door.

Madrid has had right-wing governments continuously since about 1991. Decades of cutbacks and privatization have left public schools and hospitals in a sorry state. On the flip side, Madrid has become somewhat of a fiscal paradise for the rich, with many forms of taxation eliminated or reduced. Inequality is significant in Spain, and Madrid is no exception. If you’re a centrist who believes that an occasional political "changing of hands" from one party to another is a useful way to prevent the excesses of either side from playing out too far, then it is clearly time for a change in Madrid.

And if you’re consistently left-leaning, you’re horrified at the effects of sustained, regressive spending cuts, and can’t figure out why so many Madrileños seem so happy voting for politicians who very obviously represent the interests of only the richest sliver of society. Voting is optional in Spain, and the wealthier, right-leaning classes tend to vote much more actively, allowing them to have an outsized impact in the election results despite their status as a privileged minority. I guess the less wealthy classes have just lost faith in politicians and political parties in general, or they don’t believe that their vote can make a difference. Making matters worse, this year, left-leaning voters face an additional obstacle: Ayuso called the election to take place on a normal working Tuesday, which means that school classes are cancelled. If you don’t have a private nanny, or an idle family member to look after your kids in order for you to vote, voting in 2021 is going to be harder than ever. Postal voting is an option, but the window for that has now closed.

I explained my overall political stance in a post a while back, but the "TL;DR" is basically that I am left-libertarian motivated by a concern for social justice and fairness, and I’ve been in that place for about 25 years now, even as the fringes of the left and the right have adopted ever more radical positions, and the political "mainstream" on both sides of the aisle has become increasingly neoliberal pretty much everywhere in the developed world that you might care to look.

And yet, as much as I am personally persuaded by leftist thinking, I can also appreciate that there are reasonable arguments to be made in defense of conservative politics. My go-to example of a conservative proponent doing the latter would be Douglas Murray (not a politician but rather a "public intellectual"). There are many things he says that I don’t agree with, but I have deep respect for the way his arguments come from a position of "good faith". Sadly, I find far too few examples of his ilk out there in the public space, and even fewer actively involved in politics or journalism.

So — out of the kindness of my heart — let me try to make the most favorable interpretation that I can of Ayuso’s politics, assuming that she is acting in good faith out of a set of sincerely held beliefs. Ayuso believes in small government. She believes the most efficient mechanism for deploying assets in service of the public good is through private enterprise. She and her predecessors in the PP have engaged in a sustained program of privatizations and cutbacks designed to transfer the management of public health into the private realm. Fundamentally, I think Ayuso (in common with her fellow party members) trusts the market, she believes in the power of individual initiative, individual responsibility. She probably considers "all men to be created equal", and attributes differential outcomes to differential levels of effort, of different moral fiber, grit, and determination.

The dark side of all this is that there is an implied (and sometimes explicitly stated) set of complementary beliefs. That the poor are somehow responsible for their own fate, just as how the wealthy and successful must be enjoying the well-earned rewards of their effort and personal merits. Not just that a large public sector is a sign of waste, but that the people who rely on it present a parasitic drain on society, on the fruits of the hard-working and morally superior ruling classes. Ayuso is on the record saying that people in desperate need of food hand-outs are "mantenidos", a word with distinctly negative connotations and implications of being a unproductive drain on the rest of society. Her campaign message is an emotional appeal to the value of "getting up at the crack of dawn" (implying hard work), traditional values and customs (going to church mass and bull fighting), and personal freedom.

She has very little to say about what she plans to do if she gets her wish of being able to govern "alone", with out the bothersome impediment of having to cooperate with Cuidadanos. Incredibly, the letter she sent to all registered voters in Madrid consisted of a single portrait photo accompanied by the word "Liberty" in large type on an otherwise blank page. Even the far-right party, Vox, whose program is more about drumming up fear of "communism" than elaborating policy, spelled out a list of things they wanted to do and why in their letter. At first I thought this was an insult to the intelligence of her supporters, to think that they should be so easily manipulated by such an obviously content-free, emotional appeal (I mean, who doesn’t like "freedom"?). You might think that Ayuso’s advisers have told her that it’s best if she keeps her mouth shut (perhaps that’s why she agreed to appear in only one debate), because she’s in a good position and there’s only one way to go from here (down); but the real truth is that most of the people who vote for the PP already have their mind made up — it’s quite simply unnecessary for Ayuso to persuade them. They know they subscribe to the same ideological beliefs as Ayuso’s party. The details simply don’t matter.

If all of this weren’t concerning enough, the polls suggest that, if Ayuso wins, it will be via a coalition with the far-right Vox, something that the vast majority of PP supporters are apparently perfectly happy with (basically, they don’t care who’s in power, as long as it isn’t those nasty "communists" who are going to raise taxes, strip people of their freedom, and rack up a mountain of economy-destroying public debt).

At this point I’ve established some basis for why I don’t want to see Ayuso getting reelected. Like I said earlier, I don’t really know if a post like this is going to change anybody’s mind, but I still feel compelled to share it. The way I see it, the reason why the left sometimes wins and the right sometimes wins (in general, not in Madrid) is that the answers aren’t actually indisputably clear. If there weren’t any grounds for dispute, we wouldn’t have well over a century of modern political struggle played out in this subtle and changing thing we call "the political spectrum". While it is easy to find the unthinking and uninformed almost anywhere in that landscape, there are also examples of intelligent, well-intentioned human beings who can articulate their positions in a reasonable form all over the place. In short, it’s complicated. It’s all well and good to have an opinion, but you have to admit that their must be at least a seed of truth in a wide variety of political positions, even if they’re not right all the time. And a corollary to that is that, whatever your beliefs are, they’re probably not reflective or reality 100% of the time. I just know that, if I’m going to be wrong, I’d rather be wrong in the direction of trying too hard to defend fairness, to protect the disadvantaged, and to combat structural inequality, even if it isn’t all that we think it might be.

So with that out the way, let’s get into the details of how elections actually work in Madrid.

Madrid uses a proportional voting system. You vote for parties, and each party has a list of candidates. The more votes a party gets, the more seats they win, which means more people from their party go in to occupy places in the assembly. These electoral lists that the parties have are effectively ordered choices. The presidential candidate is at the top of the list, the list itself contains more than enough names to cover even the best-case scenarios that might occur in landslide wins. Often, as a symbolic gesture, the final person on the list (who will never actually enter the assembly in any kind of realistic scenario) is chosen on the basis of propaganda value. For example, it might be an influential person already in government at another level. This year, the PP announced that its list would be closed out by José Luis Martínez-Almeida, the current Mayor of Madrid. Obviously, he’s busy being Mayor and has no intention of leaving that role. His presence on the list is a symbolic gesture of solidarity and support.

There are two big gotchas to this system of proportional representation using electoral lists. The first is that there is a "5% rule"; any party that doesn’t get at least 5% of the vote is excluded from consideration. This is presumably to stop the Assembly from splintering into an ineffective mess of tiny parties or individuals incapable of making legislative progress. But there is a real risk for voters and for parties here. A voter voting for a party that does not make the threshold is effectively throwing away their vote. And for parties which suffer this fate, it is basically a death knell. They are unlikely ever to make a comeback from this kind of electoral ignominy. At the time of writing, it seems like Ciudadanos is going to suffer this fate, as the electorate effectively punishes them for their perceived political opportunism (wherein they seem willing to switch their "bets" and arbitrarily cross ideological boundaries in the name of accessing power).

The second big gotcha with this system is that there are rounding errors. It’s nigh on impossible that the distribution of votes will line up in such a way as to allow integral allocation of seats. The mechanism used in Madrid is "the D’Hondt system". The direction of rounding tends to favor large parties and coalitions. That is to say, voting for a smaller party may bring the downside risk that your vote is somehow less powerful than the vote of a citizen voting for a larger party. The algorithm is described as "the least proportional of all proportional voting systems, but also the most stable one". Whatever, it is what it is, and its parameters are the ones we have to work within.

In practical terms as a voter on the left, you have three options. These are the PSOE (socialists), Unidas Podemos (a newer party, and much farther left), and Más Madrid (newer still, a spin-off of Podemos with a more pragmatic/green tilt). All else being equal, given the nature of the D’Hondt system, a vote for the PSOE is "safer". Safer in the sense that the distortion in the D’Hondt system is likely to make a vote for the PSOE weigh ever so slightly more than a vote for Podemos or Más Madrid. Given that the overall tendency of Madrid is to vote for the right, you don’t want to dilute your left vote. We’re kind of tired of losing here! You might not like the PSOE’s policies, but if your goal is to maximize your chances of getting rid of Ayuso, it makes sense to vote for the PSOE.

But things got weird before and after the election was called. It’s not quite so simple as all that.

First of all, the election was called with great haste to preempt an incoming motion of no confidence. It seems that Ciudadanos was on the brink of teaming up with the PSOE to throw Ayuso out before her term ended, but it backfired on them tremendously when she beat them to it by calling the election first. All the polls indicate that Ciudadanos is going to get punished in the elections as a result of this perceived betrayal and act of opportunistic politicking. It seems likely that they’ll basically get wiped out. Many who voted for them will switch their vote to Ayuso.

As much as I would have loved to see Ayuso thrown out in the middle of her term, I think that these hijinks seldom achieve any useful effect. They often do more harm than good, serving only to further polarize and radicalize the debate. (Just look at all the good not one but two Trump impeachments did.) Unless the leader in question did something scandalously bad, and you have a bullet-proof case for it, a motion of no confidence is probably a bad idea. A rare counterexample in which it actually worked is the already cited motion of no confidence that put an end to Rajoy’s national government in 2018.

The next thing that happened was that the leader of Unidas Podemos, Pablo Iglesias, announced that he was — no shit — quitting the vice-presidency which he held in the national government in order to take the fight to Madrid. Geez. In general, I find him to be articulate, and his arguments to be intelligent and persuasive, but I don’t think I could ever cast a vote to somebody who quits an elected position a little after year into the job. It simply doesn’t matter how important he might allege that the fight for Madrid may be. It seems transparently clear that the real reason he’s getting out of the federal government is that he has been frustrated and disappointed by the amount of power that Podemos has been able to wield as a minority partner in the coalition government. Nobody ever said it was going to be easy.

In response to this, Ángel Gabilondo says, "con este Iglesias, no" ("not with this Iglesias"). Obviously overplaying his hand there. Just because he might want to keep all the power for the PSOE doesn’t mean that he can turn his back on a necessary ally. The only way the left is going to end two-and-a-half decades of conservative rule is going to be by acting in unison. Of course, things change quickly in politics, and he has since softened his posture, but it’s really disappointing that he made an unforced error like that.

So, D’Hondt tells me I should be voting for the PSOE, but I’ve just seen their candidate make a royal fuck-up before the campaign has even started, and furthermore, he is focusing his message on the notion of "serious government" and continuity (ie. a promise to make no changes to the tax system after until the next election, if he wins it, two years from now). I find this utterly lukewarm, like tepid bath water. Of course, I’d be thrilled to see Gabilondo as president if it meant getting rid of Ayuso, but I cannot be excited about him, and at 72 years of age and with the measured tones of the university professor that he is, I can’t see the rest of the public getting all that excited either. (In comparison, Ayuso and Iglesias are both 42 years old, while Mónica García — the Más Madrid candidate — and Rocío Monasterio — the Vox candidate — are both 47.)

Gabilando has since changed his posture about teaming up with Iglesias, which unfortunately just makes him weak in the eyes of his opponents, even if it is a necessary and good thing for the left. And such an easily avoided error. Sigh… He could easily have done exactly what Íñigo Errejón, spokesperson for Más País (the sibling party of Más Madrid, but operating at the national level), did, which is to say that he was open to dialog with anybody at all "with no red-lines and no vetoes", in the name of forming a government that avoided a right-plus-far-right coalition. Simple pragmatism! That’s what I want to see in my political representatives: a get-it-done attitude and a commitment to multi-party dialog in the name of benefiting the people; a refreshing change from the ultimatums, the hostage-taking, the rage-quitting, and the threats.

I start listening to more things from Errejón, of whom I already knew a bit from his time in the national congress. And I start learning more about Mónica García, the candidate in Madrid. It soon becomes clear to me that the party farthest to the left (that of Iglesias) is spending its time hurling accusations of "fascism" against the right, and the parties on the right are hurling back accusations of "communism" in return. And just about everybody is engaged in a vacuous debate about how their side is the guardian of "democracy" or "liberty", or any of a number of abstract words with strong emotive connotations. Meanwhile, the PSOE is really closer to being a centrist party than anything else (in contrast to Ciudadanos, which is "centrist" in name only, and really more like a watered-down version of the PP; let’s call it "PP Light"). Among the entire political spectrum, Más Madrid is the only one that is consistently talking about concrete issues that will make a difference in people’s lives. It’s the only one not spending most of its time engaged in political circus.

Now, you’re probably never going to find a party whose platform you agree with 100% in every aspect, and Más Madrid is no exception. I think in some senses they may be trying to do too much. Their program, for example, includes no fewer than 876 proposed measures(!), ranging from improvements to universal public health care and education, environmental initiatives, investments in research and investigation, and many, many others, in 13 categories. I honestly don’t have time to review them all, but as I scan through the ones that matter most to me, and sample others, I get a sense that this party comes about as close as I could reasonably expect to embodying my political preferences, even though there are surely things in there somewhere that I don’t consider to be optimal.

As such, even though D’Hondt tells me I should vote for the PSOE, I figure it’s also important to use your vote to send a message to the others parties on the left. In this case, a vote for Más Madrid is telling the PSOE that its offer of continuity and "seriousness" just doesn’t cut it. We want more. And it’s telling Podemos that their fervent commitment to an intellectually pure form of leftism isn’t compelling either, because they spend more time getting into fights with their political enemies than making a case for why their policies would benefit the majority. So, Más Madrid it is.

And I made this decision before it was cool to like Más Madrid. Just sayin’. Mónica did pretty well in the debates and the polls now show clear movement towards her party as people get to know her and hear more about the program. Meanwhile, the PSOE’s share of the voting pie continues to shrink. Whatever happens, I have a feeling that this election will be Gabilondo’s last as presidential candidate, unless, by some kind of miracle, he actually wins. Next time around, he’ll be 74.

Now, the left has a long uphill battle to fight if they’re going to win against the right in a community that seems to vote so consistently for Ayuso’s party, but we mustn’t give up hope. It’s easy to say "the right always wins in Madrid", but that would be a mistake. It’s the kind of statement that seems like an inevitable truth until one day the sun rises and it ceases to be true. I don’t know if 2021 is the year that it is going to happen, but I sure hope it is, and I’m going to do my best to make it happen. Obviously, I only get one vote (shame, that, isn’t it?) but I’m volunteering for Más Madrid in a small way, and one of the things I’m doing will be to represent Más Madrid as an "apoderado" (ie. somebody who monitors the voting process at a voting station on election day).

I hope this was helpful, and if you want to talk about any of this, come find me on Twitter; it seems like a lovely place to have a chat.