Recent Posts

Another blog migration

It all started innocuously enough with this post from Alex Shroeder

https://octodon.social/@kensanata/101052266709264418

Writing tools.
1. Emacs
2. Wiki
What about you ?

I spontaneously replied.

Emacs
Orgmode
Nikola

This reminded me that since, I had recently migrated my desktop from Arch Linux to Fedora 29, I needed to reinstall Nikola and check that the blog I never use still could be built successfully.

Oh - how exciting. Nikola has recently released version 8.0.1 and I was on the previous version - 7.8.15. I quickly created a Python 3 virtual environment and installed Nikola.

I generated my site as normal but encountered an error. One post failed to be processed correctly. This was strange so I created another virtual environment and tried using the tried and trusted Nikola 7.8.15 which I knew worked. Definitely.

Only, inevitably, Nikola 7.8.15 also failed. Oh well, a lot has changed since I last posted to my blog way back in January 2017. The version of Emacs has changed, the version of orgmode has changed. I examined the blog entry that was causing a problem. It was a fairly standard text article with a single source code block. As the source block was 'BASIC', the language wasn't explicitly specified. This isn't a problem in orgmode normally but the Nikola orgmode plugin got confused so I just pretended the code snippet was 'C' and everything worked again.

As I was researching the issue, I noticed that another static site generator, Hugo, had also added native orgmode support over a year ago. I had previously experimented with Hugo and found it was incredibly fast to generate my site - even when I added in my entire blog output (978 posts).

Clearly, there was no point whatsoever in experimenting with the Hugo orgmode support for a blog I never used any more. So I went ahead and did so anyway and found the Hugo orgmode support was pretty good. The orgmode headers were supported whereas Nikola used a comment section for the front matter.

Actually, there was a reason for this resurrected interest in maintaining a blog. After Google decided to pull the plug on Google Plus, I had ditched that platform in a fit of pique and experimented with Diaspora for longer form articles and Mastodon for microblogging.

The problem with Diaspora is that it doesn't currently federate with the ActivityPub protocol (which includes Mastodon sites) and the other problem is that, just like Google, it could disappear.

A Mastodon/Pleroma instance with no character limit might solve the problem but, to be honest, I prefer to read longer articles on a blog.

So I think there is still a place for a self-hosted blog, complete with an RSS feed.

What I have learned however is that blog migrations are still problematic and time-consuming. Even converting from a Markdown blog to another Markdown blog, the differences in the meta-data (categories, tags), inevitably no-one has though to standardise on a single, universal timestamp format and images (no matter where you locate them) are always a problem so there will always be some sort of migration effort required.

To guard against this, I have re-converted from orgmode to Markdown and my front-matter now consists solely of:-

---
title: "Another blog migration"
date: 2018-11-14T10:43:58Z
---

No categories, no tags, no author, no description, no keywords, no slugs, no comments.

Just words.

The National - You Were a Kindness

I was in a fog,
I didn't notice everything
Was coming all apart inside of me
There wasn't any way for anyone to settle in
You made a slow disaster out of me

There's a radiant darkness upon us
I don't want you to worry
I was careful but nothing is harmless
Baby, you better hurry

You were a kindness when I was a stranger
But I wouldn't ask for what I didn't need
Everything's weird and we're always in danger
Why would you shatter somebody like me?

It doesn't work that way
Wanting not to want you won't make it so
It doesn't work that way
Don't leave me here alone

I'll do what I can to be a confident wreck
Can't feel this way forever, I mean
There wasn't any way for anyone to settle in
You made a slow disaster out of me

There's a radiant darkness upon us
But I don't want you to worry
I was careful but nothing is harmless
Baby, you better hurry

You were a kindness when I was a stranger
But I wouldn't ask for what I didn't need
Everything's weird and we're always in danger
Why would you shatter somebody like me?

It doesn't work that way
Wanting not to want you won't make it so
It doesn't work that way
Don't leave me here alone
It doesn't work that way
Wanting not to want you won't make it so
It doesn't work that way
Don't leave me here alone

Gnus now unbelievably speedy

When I initially revisited Emacs, I used mu4e (instead of Thunderbird) for my email.

I used the wonderful Gmane service to read mailing lists in Gnus and Elfeed to read blogs and RSS feeds within Emacs.

This worked fine but after a while it became a little tiresome having to remember different key bindings to essentially perform the same repetitive tasks; reading messages, navigating (next/previous) messages, moving messages, saving messages, marking messages, deleting messages, searching messages, forwarding messages, replying to messages and occasionally composing brand new messages.

The solution was blindingly obvious. Just use Gnus for everything involving a 'message' instead of three separate packages. One set of key bindings to learn and master and Gnus has comprehensive functionality. Less is more.

Converting all my email processing to Gnus was easy enough to address as I previously used Gnus to handle my email and Gnus natively supports the maildir format.

Accessing mail was fast as I had already invested in establishing a Dovecot mail server and transferred messages from the corporate IMAP server to local Maildir directories (using getmail).

To replace Elfeed for reading RSS subscriptions, Gnus offers a nnrss back end but it was so slow and sequential, it was virtually unusable. Investigations revealed another option. Lars doesn't like anything that is slow and sequential so years ago, he created the Gwene (Gnus Web to Newsgroups) service which took any RSS or Atom feed and converted it to a pseudo newsgroup on the Gwene news server.

Gwene already carries a lot of popular blogs and feeds and if your esoteric favourite blog isn't present, you can simply add it and the content appears immediately.

I was about to celebrate and put the kettle on when, suddenly, unexpectedly and rather inconveniently, Lars decided to shutdown the freely available Gmane (and Gwene) services for understandable reasons (idiots launching DDOS attacks on the servers, threat of legal action).

I then researched alternative methods and experimented with a number of RSS to mail gateways. The best one was rss2leafnode which takes a list of blog subscriptions and periodically fed the content into a local NNTP news server - leafnode.

This solution worked well as I was now using Gnus to read email, mailing lists, newsgroups, blogs and RSS feeds.

Perfect - well almost. One of the advantages of mu4e (and notmuch) is the lightning fast search and powerful abilities. In Gnus, you are able to limit lists of articles by author, subject and marks and use IMAP search functionality.

However, I regularly used combinations of search terms and full text search on the message body. For example, display all messages from Peter to the 'Footy' mailing list in 2016 where he mentions 'Basingstoke'. In mu4e, this search is done using a query

'from:peter to:footy date:20160101..20161231 basingstoke'

I have always tended to use hierarchical directories and mail folders so my mail is archived by year. Gnus could also limit a search by author and full text search can be done using the 'nnir' engine so this type of search is possible in Gnus but unwieldly.

Combinations of multiple search terms were slightly more problematic but as I was already running a local mail server (Dovecot), I decided to use Solr to implement more flexible searching in my mail folders.

Occasionally, I want to search for a message and I have no clue who sent it or when so I need to search all email messages in all folders for 'cobain conspiracy'. This is easy in Thunderbird and I found the best way to achieve this was to create Dovecot virtual folders for 'All Mail' and 'Sent Mail' that spanned all messages regardless of date. Virtual folders can also be used to implement mu4e's built-in queries for 'Last 90 days'.

Why is Gnus unbelievably speedy ? Everything is local.

  • No need for a direct IMAP connection.
  • All email periodically delivered to local folders accessed via Dovecot.
  • Message filtering and spam handling performed by Dovecot/Sieve prior to delivery.
  • Solr maintains search indexes of email transparently.
  • Mailing lists and RSS feeds updated automatically by Gmane/Gwene.
  • Virtual folders automatically maintained by Dovecot.
  • Gnus is simply the most fantastic piece of software.

My only reservations were that the number of Linux packages to be installed, configured and updated but thankfully, in September 2016, new owners stepped forward to resurrect the invaluable Gmane and Gwene services so I was able to dispense with Leafnode.

The only prolonged, expensive network access involved here is fetching articles from the Gmane and Gwene servers but this has proved so fast and reliable that I didn't need to pursue the option of mirroring this small number of feeds locally in leafnode (although, undoubtedly, that would have been an interesting and fun exercise).

life with Emacs

birth

At the tantalising climax of the last episode, I was invited by Steve for a whistle-stop tour of Emacs.

Steve explained that the main reason he used Emacs was pure laziness. Naturally, this immediately got my attention. He explained:

'I'm lazy. It's not a fault. It's a fact. Most decent programmers are lazy. You're lazy'.

'Hang on, just a minute ! What do you mean - I'm lazy ?'

'Andy - you alias cd .. to 'up' and 'l' to ls -ltr. Just to save five characters typing. So don't tell me you're not lazy. Anyway, it's not a criticism'.

'I used to work just like you. xterm open. Edit some C code. Compile the code. Fix the compilation errors. Repeat. Or search for a string a set of files using grep. Identify the file of interest. Go to line 723. Edit the file. That's what most programmers do. But when you think about it, it's a very inefficient process. All that typing, all that mouse movement, all that context switching. You may think having multiple xterm windows open solves it but it doesn't'.

'In Emacs, we can do all of that processing within Emacs. Look.'

Steve then showed me the edit-compile-fix cycle in Emacs. This was fantastic. Edit the source code. Invoke make using M-x compile. Review the errors in a separate buffer. Hit the compilation error and you're immediately positioned on the offending line in the source file.

Similarly, for grep. Invoke search for 'parser' within all C and header files within Emacs. Then select the occurrence of interest and you're immediately taken to the source file at the right place. No more 'grep -n' and jotting down the line number.

The other biggest advantage Steve showed me was perhaps more basic and fundamental; simply the use of multiple buffers and 'C-x C-b' to manage the buffer list.

Previously, I would use multiple 'vi' sessions or ':n' to edit the next file in the list or toggle between two files using :e #. Worse, I thought that was advanced wizardry.

Steve also showed me the Emacs directory editor (dired) whch was impressive and a very quick way of navigating around the Unix file system.

childhood

And thus, my life using Emacs started in 1992. Initially, I was delighted enough with just this basic Emacs functionality as a great improvement over my previous approach.

However, I wasn't converted into an evangelist preacher from day one. I still used the 'elm' email client in a terminal window and 'rn' to read Usenet.

Also, I can admit this now. I would frequently fire up 'vi'; specifically for any global search and replace operations as it was just simpler and quicker than me trying to learn and master the Emacs equivalent.

Then I got moved to an OS/2 project but, Emacs was available for that now dead IBM platform so I copied my .emacs file and was happy.

Once, I got sent to Boston (America not Lincolnshire) to fix a tricky, long-standing problem. I was instructed to take the source code with me, given an open return ticket and was told to stay on-site until it was resolved. Fortunately, it transpired to be a one-liner involving a subtle race condition. Unfortunately, I fixed it on a Saturday and it was a public holiday weekend which meant I now had a lot of free time on my hands.

I remember sitting in the client's empty offices, revisiting the Emacs tutorial and really taking the time to read and understand it fully. I spent a lot of time experimenting and trying out all the features including stuff I never used, failed to understand or had simply forgotten about.

Even now, I still enjoy reading or watching Emacs tutorials to see how other people use it. Or maybe I'm just weird.

teenage years

In 1996, I took a job at Sequent who produced high end, expensive, fast, parallel processing, NUMA based Unix servers. Although I was now working in a Unix environment again, the DYNIX/ptx operating system wasn't the ideal development environment as a lot of my preferred tools, packages and utilities either weren't available or hopelessly out-dated and buggy.

However, the GNU C compiler was available so I embarked on building a lot of the GNU packages. This was a useful and instructive exercise as, occasionally, changes to the source code were needed to build cleanly - normally the addition of a #ifdef ptx macro.

Of course, inevitably there was a modicum of yak shaving involved here. For example, I had successfully built Emacs from source but it didn't interact properly with the brain-dead ptx version of 'grep'. So then I had to go and build grep which needed flex which needed...

honeymoon period

During this time, I was being slightly more inquisitive about extending my use of Emacs. I converted to ViewMail (VM) within Emacs to read my email and Gnus for reading Usenet news groups. I remember thinking that VM wasn't too far removed from 'elm' on an xterm.

I liked Gnus. A lot. I simply loved the Gnus manual which is undoubtedly the best software manual ever written. I was using adaptive scoring, threading and marks but still, I suspect I was (and am) merely scratching the surface of what Gnus is capable of.

I used the Insidious Big Brother Database (BBDB) as an address book for both VM and Gnus and I started to realise that 'ange-ftp' was much better than remotely logging into various Unix servers where 'vi' was the only option for editing files.

I discovered XEmacs looked prettier and had more packages available so I turned to that. Plus I liked Jamie Zawinski's style,.

Then I was forced to leave the comfort of my office based job, was given a Windows laptop and told to go and work in London on an Oracle data warehouse project. I might have done something awful or insulted my manager at the Christmas office party. I can't quite recall.

mid-life crisis

Naturally, Emacs on Windows was available but it wasn't like the real thing. Without a Unix environment, even Emacs couldn't mask the many deficiencies and limitations of using a Windows laptop as a, err, development environment although I later discovered Cygwin which eased the pain (just a little).

To compound the agony, I was now reading and writing a lot of documents in Microsoft Word and I needed to accept meeting invitations in Microsoft Outlook.

It was now 1999 and the dot com boom was well underway so I decided to join a small startup as an Oracle DBA/developer. This was a slightly unusual environment; well, in fact, there was no development environment. It was my job to create one without spending any money (if possible). That was great so we soon had Oracle databases running on Linux servers which doubled as our development machines.

This happy state of affairs lasted for four years until I moved on to a technical consultancy where I enjoyed some challenging work, troubleshooting tricky (and some trivial) problems at call centres located across Europe. My modus operandi now was (don't laugh here) was to make copious jottings in Notepad during meetings, phone calls and while I worked. When I returned home, I collated the notes into a lengthy Word document.

During this period, I talked to a lot of taxi drivers, visited a lot of sports bars and sat in countless anonymous airport lounges but I didn't even install Emacs, let alone celebrate of the arrival of a long-awaited package manager.

rejuvenation

In 2012, after some enforced sick leave, I returned to work and transferred to a role in product development. This was great because my enlightened employer allows me to use Linux on my work computer. OK - it's Oracle Linux and you may scoff - but it's Linux and I can run the latest version of Gnome, the email client of my choice and am able to install all my favourite packages. And still get support from IT.

Why - now I've got WebEx working and my enlightened colleagues use Wikis, I don't even have to fire up my contingency Windows Virtual Machine any more.

Bizarrely, history repeated itself and I found myself firing up a lot of terminal windows and multiple 'vi' sessions which was where this story originated.

Funnily enough, when I realised I was spending an increasing amount of time editing source code, I looked at what editors were out there. I looked at Sublime Text (commercial) and then at Atom (GitHub's excellent offering) which included many (over 5,000) plugins to support language formatting, colouring, compilation, search, ssh...

But wait, hang on a minute. I had invested a lot of time and acquired a lot of knowledge about a powerful text editor that could do all of this and more.

That's when I revisited Emacs. This time, I endeavoured to go even further and attempted to use Emacs for everything. Well, everything apart from a Web browser, SQL developer and LibreOffice.

Now I use the Prelude starter kit which is excellent coupled with the stylish monokai theme. I use Gnus and BBDB for email, news and RSS feeds. I use Python and the SQL modes extensively.

However, the biggest and most interesting addition to Emacs since my departure is the much lauded (and deservedly so) org-mode package. After a few false starts, I am now using org-mode for note taking, blogging, managing my calendar and ToDo's (my work and Google calendars are sync'ed using vdirsyncer). I recently ditched Pidgin in favour of the Emacs Jabber package.

Nirvana

Finally, I configured $EDITOR and alias'ed 'vi' as 'emacsclient'.

life before Emacs

the early years

1962

Entered the world as I intend to leave it. Kicking, screaming, naked, held upside down by a nurse slapping me on the backside.

a night at the Lesser Free Trade Hall

1977

Wrote my first basic program in BASIC on a Tandy TRS-80. Editing facilities were fairly limited. I think to modify Line 10, you had to simply re-enter Line 10. In its entirety. This was rather time consuming, tiresome and almost put me off computers for life.

10 PRINT "DR. HANDS IS A RUBBISH TEACHER"
20 GOTO 10

These lunchtime sessions also taught me how to interrupt a BASIC program rapidly. Useful, particularly when the physics teacher, Dr. Hands, made an unexpected return to the lab.

losing my religion

1981

At Warwick University, the Computer Science lab was equipped with green VT-100 terminals hooked up to a PDP-11. Warwick was where I was introduced to C programming and forcibly indoctrinated into the 'vi' text editor. I remember thinking it was handy that Rogue used the same key bindings for 'up', 'down', 'left' and right'.

1984

I left the confines of my room and went on the milk round. Instead of coming back with a pint of silver-top, I somehow managed to land a job with a software house as a 'Junior Programmer' and started work on a Unix project using 'vi' and state of the art amber VT-100's.

a short stay in purgatory

1986

Reallocated to a project on VMS where I was forced to use a bewildering command syntax and a limited, primeval text editor called EDT that made extensive use of the numeric keypad.

Later, I was made aware of an alternative editor called EVE. Better still, EVE was actually built using an extensible TPU (Text Processing Utility) library for VMS. Joyously, I discovered some clever person had built a 'vi' clone using TPU. It took me 3 days and cost me £79 to download the software over a 2400 baud modem but it was worth it.

New Dawn Fades

1988

Left permanent employment and became a freelancer. My nightmares about the DIRECTORY/SIZE command subsided as did my repetitive strain injury. I now found myself porting an Ada compiler from a mainframe system to Unix, reunited with a decent editor, short commands and the joys of pipelining.

the road to salvation and true enlightenment

1992

Started work for a relational database company. On day one, after coffee and introductions, I was offered the choice of a Sun workstation or 'as you've used VMS a lot, you'd probably prefer this DEC Workstation'. I forcefully elected the sensible option, held up a crucifix and threw some garlic cloves in the direction of the VAXStation. I claimed I'd used a Sun workstation for many years (a lie) and had to surreptitiously watch my neighbour to learn how to manage X Windows.

I sensed my colleague was slightly suspicious but he had a beard and a pony-tail and was quiet but helpful. I noticed that while I had my screen divided equally into 6/8/10 equal sections each running an xterm, his large monitor simply displayed had a background of the Monty Python 'dead parrot' sketch and a single application taking up 90% of the monochrome screen estate.

'What is that program you're using to edit files, Steve ?'

The man with the beard and the pony tail swivelled in his chair and uttered the immortal words

'It's called Emacs. Do you want to see how I use it ?'

extending Bash history

I have used the Unix bash shell for many years. As I am incredibly lazy and forgetful, I have become accustomed to using ctrl-r find to find and scroll though the latest find commands I have issued.

Occasionally, I noticed that a lengthy, complex, useful 'find' command' (which I mercilessly plagiarised from a clever person via Google) was no longer in my shell history.

Investigations revealed the default bash history is a paltry 1000 commands so I decided to increase this to 10000 by adding the following line to '~/.bash_profile'.

HISTFILESIZE=10000

After all, disk space is much cheaper than my time.

adventures with FreeNAS

I had been contemplating and researching the purchase of a dedicated Network Attached Storage (NAS) for a long time. Initially, I considered a few different options; an entry level unit like a Synology DiskStation, a small server like the HP Gen 8 Microserver or Dell T20 and installing the disks or even buying the individual components and building the unit myself.

However, I'm pretty useless with hardware and as a NAS should be high quality, reliable and solid, I decided to purchase a ready made unit.

I decided I wanted something that could run FreeNAS with ZFS rather than some proprietary GUI and I found a lot of helpful advice on the FreeNAS forums.

My main requirements were basic and standard for a home user:

  • Automated reliable backup of photographs, music, DVD's, home videos and documents.
  • Ability to run Plex Media Server (2-4 concurrent users with transcoding). This requirement eliminates a lot of the cheaper NAS units with slow processors.
  • Potential to perform backups to cloud storage (Amazon Glacier).

IXsystems sell ready made FreeNAS units but they are relatively expensive and I would have to pay shipping to the UK so I started to look for a UK supplier.

After procrastinating, delaying, repeatedly shelving then resurrecting the idea and trying to justify the cost, not for the first time, my wife tipped me over the edge. She dropped her laptop. Nothing unusual about that. She'd dropped it before and I paid a man with a soldering iron to replace the power supply jack.

This time, she'd broken it completely so it was (almost) cheaper to replace the laptop than fix it. Like many personal users, my backup strategy wasn't exactly non-existent but certainly sub-optimal. I had photos burned to miscellaneous CD's, I had various photo albums uploaded to Flickr and Google. Obviously, I had all my work data backed up (CrashPlan at work, external USB drive at home). My entire music collection (ripped to lossless FLAC) was also backed up three times. As for the wife's laptop, well, I had an three month old backup from the last time I restored the laptop coupled with her important documents safely backed up on a USB stick. Which was missing.

I could have probably re-assembled and recovered 98% of everything that was crucial and written off the gaps but for one, important, irritating factor. My wife is studying for a course and she had very recent notes, jottings and drafts of essays on her laptop. Inevitably, none of these were backed up anywhere.

I gave her her 5 year old workhorse laptop back, got her email working, restored her Firefox bookmarks and reassured her I would retrieve last night's draft of her essay, err, shortly.

I had already had to pay computer repairman £50 just to tell me the laptop was beyond economic repair and now my misery was compounded as I had to shell out another £99 for 'data recovery'. I knew this simply meant hooking up the disk drive to another computer and pressing 'Copy' but that's the price you pay for being a idiotic cobbler with holes in his shoes.

Thankfully, he managed to retrieve everything - the media library I already had as well as the important documents for the wife.

This episode gave me the impetus and justification to go ahead and purchase a NAS and get a proper backup strategy in place.

I decided to purchase a Mini FreeNAS from a UK company called Server Case who offered pre-built NAS units meeting all the recommended hardware specifications together with the latest version of FreeNAS (9.10) installed. The basic model came with 4 disk bays and 8GB of ECC RAM so I configured a system with 4 x 3TB WD Red disks and upgraded the memory to 16GB.

The technical support from Server Case was excellent and helped me customise the system and answered all my newbie questions fully and promptly. Each unit is assembled to order and the hardware stress tested but even so, the package was delivered within three days.

I unpacked the large, well packed, cardboard box and although I had measured the dimensions, I was immediately impressed with size and appearance of the unit, the modern, stylish black case and the build quality which seemed very professional and solid.

I powered the unit up and heard the disks spin up and blue lights come on. You are supposed to hook up a monitor during installation but I didn't have a VGA cable handy so I just plugged it into the router and determined the IP address so I could login to the FreeNAS Administration interface and configure the system.

I had already decided to configure the four disks in a RAID-Z2 configuration which meant two redundant disks giving me usable space of 6.1TB. As the sum total of everything I currently own is just over 1TB, this was more than adequate and hopefully future proof.

I found the FreeNAS Web admin interface easy to use and I quickly setup NFS shares and got clients working on my various Linux laptops. I also enabled ssh so I could login remotely to access the FreeBSD command line.

FreeNAS includes a number of plugins for popular packages including Plex but I decided to create a jail manually and install it which worked fine.

Then I configured periodic SMART disk tests to check the integrity of the disks and ZFS filesystem as well as a regular backup of the FreeNAS configuration database.

I migrated all my data simply by rsync'ing to the NFS filesystems over my wireless network. With hindsight, this was not the quickest way to do it - a wired connection directly into the router would have been much quicker but it chugged away, was resumable and did the job.

I then degraded the FreeNAS performance still further by moving the NAS out of the bedroom, away from the router and into a spare bedroom using TP-Link Powerline adapters to simulate a wired connection. [ I relocated the NAS as it was quiet but hummed slightly in our bedroom and the air ventilation wasn't great as it was rather cramped sitting adjacent to the router. ]

Inevitably, I then spent a lot of time playing with my new toy. I experimented with all the available plugins, installed a load of software and I learned a little about FreeBSD and jail management.

For the backups, I decided on a pretty simple strategy. I created hourly cron jobs which executed on the FreeNAS server and pulled files to the FreeNAS using rsync (but didn't sync deleted files). If a client was unavailable, the rsync was skipped.

Then I created ZFS snapshots (hourly snapshots retained for 24 hours, daily snapshots retained for a week, weekly snaps retained for a month, monthly snaps retained for a year).

This was adequate but the spectre of my wife losing 59 minutes of work on her essay still haunted me so I installed DropBox to perform real-time backups to the cloud (aka someone else's server) and after looking at many options installed a wonderful open source backup utility called Syncthing in another dedicated jail.

Syncthing is similar to dropbox but uses a notifier utility to detect changes on the filesystem which trigger an efficient, incremental backup when changes are made rather than polling regularly. Syncthing also supports multiple clients (N-way replication) and can also perform one-way sync (master-slave) which is what I required.

In conclusion, I am very pleased with my purchase and FreeNAS setup now. There's something pleasing about having a home server hidden, out of sight, always on, with an uptime of 67 days 17 hours and 3 minutes.

FA Cup Final

On Thursday, a friend offered me two unwanted corporate tickets for the FA Cup Final at Wembley. I gleefully accepted and offloaded the second ticket within minutes.

Saturday dawned cloudy and overcast. I realised I’d planned the journey for a traditional 3pm kick-off. I had the tickets in my hand although it was a bit weird for something so valuable and sought after to be printed out on my mate’s cheap inkjet printer. No holograms, no watermark - just plain A4 paper from WH Smiths.

The obligatory bets were placed:

  • Mata to score first (15/2)
  • Valencia to score first (25/1)
  • United 3-1 (16/1)
  • United 4-1 (28/1)
  • United to win on penalties (11/1)

Set off to Wembley. Stopped off at Clapham Junction for a couple of pints. Fittingly enough, the hostlery was called ‘The Junction’. £10.30 for two pints of Czech Kozel lager. Had another and I fleetingly thought 'We’ve got seats, there’s a nice big screen. Why don’t we offload the tickets for £350 each and just stay here’ but sense prevailed.

Clapham to Willesden Junction, Change for Wembley Central. Quiet trains, subdued mood, mostly Palace fans from Saarf Landaaan trying to get their stupid 'EAGLES’ chant going.

Walked down from Wembley Central (just I like did with my Dad 20 odd years ago). Again, very subdued, no Chevrolet/Retro shirts in sight or Manc accents screaming 'Que sera sera’. Not even a sense of menace in the air. Just kebabs.

Good job we’d stopped in Clapham. All these pubs have security on the door and posters up 'Designated Palace pub’ so, although we had no colours (strict condition of Club Wembley membership), we would have had to adopt our best Chas'n'Dave Cock-er-nee accents to get any more beer here.

Walked down the hill past the Wembley Stadium station with miles and miles of steel barriers later used to herd people homeward.

Where the hell are the United fans ? Disdainfully walk past the split-scarf sellers and anyone wearing one. Walk around the stadium perimeter looking for the Bobby Moore statue.

Entered the stadium, security check, escalator, toilets, Sushi bars, jazz band playing. The original wooden cross bar from the 1966 World Cup Final. Christ what a surreal experience.

Complimentary matchday program - retail value £10. Take up our seats. We are on row 1, in line with the penalty area, overhanging a Crystal Palace section but with a glorious view of the stadium. Plenty of leg room with a cup holder for your overpriced Wembley Cola and giant tub of popcorn.

A lady falls down the steps and headbutts a concrete step. Concerned we all immediately go to her aid and help her up. Thankfully, the only thing hurt is her pride. Her husband is completely oblivious and soaking up the pre-match atmosphere. 'Bloody 'ell, Maureen - what are you doing on the ground love ? Get yerself over here’.

I didn’t think opening ceremonies could get any worse than the infamous 'George and the Dragon’ spectacle at the opening of Euro '96 which I was also unfortunate enough to witness in person but subsequently tried to expunge from my memory.

However, the FA absolutely surpasses themselves here. After the players complete their warm-ups, a hundred soldiers tramp their hobnail boots across the hallowed turf unfurling gigantic United and Palace flags that each cover half of the pitch. Other paraphernalia is brought out - podiums, incendiary devices, red carpets, balloons, royalty.

Then some minuscule hip-hop star clad all in white come out and sings a crap song followed by a gospel choir singing 'Abide With Me’. Sir Alex Ferguson and Steve Coppell come out for something. Then a lady in a shocking (literally) pink dress and watches while the 'SOUTH LONDON MASSIVE’ heartily sing the National Anthem.

I take in the scene. The Palace end is a sea of red and blue foil and a giant black Eagle that looks quite good and they have been allocated a small but vociferous singing section which contributes to the atmosphere.

United have the same number of fans but are strangely quiet although it’s hard to say as we are adjacent to the Palace section. To identify ourselves as corporate day trippers who don’t know who No. 8 is, we are given another freebie under our seats. A lovely split allegiance flag - half United and half Palace.

Thankfully, the pre-match, err, 'entertainment’ comes to an end. The players tease Prince William about Villa’s demise. Bizarrely, the Palace coach puts down cones so the players can have one last 15 yard sprint. Finally, Mark Clattenburg signals the start of the 2016 FA Cup Final.

I am a bar stool correspondent and hardly attend games in person any more. That’s partly because I’m not an MUFC member but mostly because I am lazy. However, I do enjoy attending games in the flesh as you get so much more of of the experience. You can choose what to watch. You can watch the pattern of play. You can watch the coaches, you can watch the fans.

As expected, United dominate possession and create the occasional half chance. Palace are getting men back behind the ball but looking to release the pacy Zaha and Bolasie at every opportunity.

Rooney is playing in midfield, channeling the ghost of Glen Hoddle past. He’s trying hard but frequently misplaces the pass and loses possession or overhits the ball.

I suspect it’s incredibly frustrating for Martial (and Rashford) to play in this team as they get absolutely no service. Martial drifts out wide and Rashford keeps making fantastic runs and drifting into dangerous areas which no-one picks up.

I nearly explode and fall over the precipice when Juan Mata gets into the box and tries to curl the ball past Henessy into the far corner but the keeper saves it. Our section is 75-25 United fans but there’s no chanting at all - just calm and reasoned cliched analysis of the tactics.

Connor Wickham is released on the left wing. Chris Smalling clumsily falls over and brings him down. The Palace fans are enraged when Wickham puts the ball in the net only to find Clattenburg has brought play back for a free-kick and a yellow card for the rugby loving Smalling.

The pattern continues. Fellaini is a troublesome, awkward, clumsy, slow large lump but bizarrely manages to lose headers to Souare who must be a foot shorter.

Our midfield of Rooney, Mata, Carrick and Fellaini has about as much pace as a snail riding on the back of a hibernating tortoise. Rojo, clearly obeying orders, stops any overlapping run half way into their half as if there is an electric fence in his path. Valencia is slightly more adventurous and links well with Mata but we hardly get any crosses in.

United continue probing and passing sideways, backwards and occasionally forwards. It is incredibly frustrating to watch, especially with these stupid, incessant Palace chants ringing in your ears.

The second half gets underway and we get more of the same. Still, all our bets are intact and the queue for the toilets wasn’t too bad.

No changes to playing personnel or tactics. United are determined to grind the opposition down and bore them into submission. Palace are tiring and Yohan Cabaye inexplicably starts a long running feud with the linesman close to us. Firstly, he’s awarded a throw-in which irritates him, Then he’s awarded a free-kick which positively drives him over the edge so he starts leaving his foot in.

Out of the red and blue, a goal. Fellaini clears a corner to a Palace player who instantly passes the ball out wide to the left wing. United defenders are looking for offside but the recently introduced Puncheon runs past Mata and blasts the ball past De Gea on his near post into the root of the net.

We sit in silence as our half of the ground erupts. We watch the replays. 'No - he wasn’t offside’ No - De Gea wasn’t really at fault’.

Pardew, in a sharp blue suit, give a silly little dance. 10 minutes to go. 1-0 up in the Cup Final. I think he’s entitled to that.

I reflect on my pre-match commitment to sit in silence listening to loud music if we lose 'Nothing personal mate. I’m just not a good loser’ as I can’t see United getting back into this game. For all their possession and all the passing, I can hardly recall a shot on goal.

Rooney seems to take the goal as a personal insult and starts playing like David Beckham for England against Greece. He runs diagonally across four Palace players into the box and then pulls back an inviting cross for Fellaini who chests it down into the path of Juan Mata who drives it home through the full-back’s legs.

Euphoria, relief, elation, happiness but most of all surprise !

The Palace fans are silenced. A steward comes and squats down next to us for a vantage point. I look down to see a United fan being led away bleeding from a cut lip. Rather unwisely, he couldn’t contain himself at the excitement and a Palace fan smacked him in the gob for his trouble.

Gratifyingly, he is still taunting and goading the Palace fans as he is led away which makes the situation worse. Loads of stewards and security pounce and get into the crowd try to identify the culprit blocking the view of the disabled section. Women and children look anxious. Men are staring around looking for any more 'Manc bastards’ so I oblige by unfurling one half of my banner and singing 'MANCHESTER, LA LA LA’ from the safety of my balcony.

The Palace players have done a lot of running and starting to cramp up. Wilfried Zaha is still Wilfried Zaha - fast, mazy dribbles with no end product but I reward him with a 'UNITED REJECT’ chant that is well received from down below.

Full-time. Still in it, thank God. Surely we are going to win this now. Cabaye (sly bastard) takes out his frustration by stamping on Rashford who can’t continue and is replaced by Lingard. Rojo and Mata are also substituted for Darmian and Young.

Extra-time. Palace fans find their voice again and urge their team forward. Bolasie is, literally, rugby tackled by the idiotic Smalling who is walking off the pitch before Clattenburg has got the red card out of his back pocket.

10 men. 'You know what happened last time we were down to 10 men in a final’. Yea I do mate as I’m a top Red just like you’.

A tiring, frustrated Rooney gets the red mist and continues his incessant moaning and bleating to Clattenburg and starts charging into ill considered and ill-timed challenges. If he doesn’t get a grip, we’ll be down to 9 men.

Lingard has injected some much needed pace and energy to United. Louis van Gaal’s right hand Dutchman gets off his arse for the first time in two years, walks to the technical area and urges United’s improvised back-line (Blind, Darmian, Young) to advance 10 yards and for Valencia to get forward.

Right wingers are normally better as right wingers than right-backs and so it proves. Tony Valencia drives into the box and I stand up, screaming 'HIT IT VERY HARD AND LOW INTO THE BOX WITHOUT LOOKING’ with any sense of irony.

Inevitably, Valencia hears my urging over 88,748 voices and obliges. A tired Palace defender kicks the ball away but only to Lingard who makes up for the cringeworthy West Ham bus video by volleying the ball first time at the speed of light into the back of the net.

For the first time, after 110 minutes, the United fans finally find their voices and at last we get to join in with some singing. Palace are beaten now - they’re spent. Just enough time for De Gea to waste time, Zaha to continue his diving antics and Pardew to look like a man who’s lost all his bets (like me).

Final whistle. Turns out we are on the same row are Prince Harry, Ed Woodward and all the gang just 80 seats away from Rooney and Carrick lifting the trophy. Loads of excited bloody day trippers and marketing managers come to take snaps and videos, obscuring my view but who bloody cares.

First trophy since Ferguson’s departure but Christ, it was hard work.

optimising Emacs and elfeed

I recently had to re-install my work laptop with Oracle Linux 7. With backups, it didn't take too long to reinstall. The most time consuming task was compiling Emacs 24.5 from source. Emacs 24.5 is required for the excellent Prelude starter kit I have recently adopted. There are a lot of pre-requisite packages for Emacs that are available (but not included) in Oracle Linux 7.

As part of the 'Emacs for Everything' experiment, I have also started to use an Emacs package called 'elfeed' to read RSS feeds and while it worked in my new, shiny environment, I noticed it ran much slower then previously. I tracked this degradation to the fact that OL7 ships with a dated version of 'GnuTLS' (3.3.8 released in September 2014) whereas the latest version is 3.4.9 (released in February 2016).

As GnuTLS is a secure transport communications layer, I decided to upgrade it and recompile Emacs including the updated libraries as I'd done before.

Usually, I remove the bundled software package using yum and install the new version from source in '/usr/local'. However, in this case, lots of packages depend on GnuTLS including fundamental ones like Gnome 3 so I had to leave the existing package alone.

Inevitably, since I last built it, the GnuTLS package had been updated and now depended on a crypto package called Nettle that was installed but version 2.x. More yak shaving ensued involving 'pkgconfig' and LD_LIBRARY_PATH but finally I was able to build Emacs using the latest version of GnuTLS.

I was rewarded by 'elfeed' performance reverting to its previous stellar levels. elfeed fetches feeds in parallel and is very fast. It takes less than 20 seconds to update my 150 feeds and the keyboard interface enables me to process feeds very quickly compared with a Web interface like Feedly although the latter does sync between multiple platforms.

Code highlight example

This is the famous Hello world program written in Python in colour using Markdown.

#!/usr/bin/env python
import sys

def hello(name='world'):
    greeting = "hello " + name
    print(greeting)

if __name__ == "__main__":
    hello(*sys.argv[1:])

This took me a long time to get working.