That's a wrap on February
Look at me actually keeping to a schedule with these newletters!
I shouldn’t speak too soon - this is only the third monthly newsletter. But I’m happy to hit even that small milestone.
So what’s been happening in February?
Perl School Publishing
This is where I should be concentrating my efforts. And I’m certainly doing useful work in this area.
The first month’s royalties for Design Patterns in Modern Perl arrived. It’s not going to change Mohammad’s way of life, but I think he was pleasantly surprised at the amount of money he got.
I spent some time working on getting a dead tree version of Design Patterns ready. It’s not quite there yet, but it’s getting close. And, hopefully, once I’ve solved the problem for one book, I’ll have processes in place to make it easy to do the same for other Perl School books.
The other big project there is, of course, the second edition of Data Munging with Perl. I’m still making progress, but not at the rate I’d like. I’ve set myself a target, but I’m not going to tell you what that is - so you won’t laugh (or shout) at me when it sails past. It doesn’t help that I’ve had an idea that slightly pivots a previous writing project and has really excited me. I’ve told myself I can’t start working on it until Data Munging has been published.
When I first started using the “Perl School” brand (for training in 2012), I registered the .co.uk version of the domain. I mentioned that in a few blog posts at the time. But I soon realised the .com version was also available, so I bought that too. I kept them both for a while (redirecting the .co.uk to the .com), but three or four years ago, I decided to cut back on the domains I owned and let the original (.co.uk) version lapse. Last week, I saw a comment on one of those old blog posts, asking if I had fallen on hard times, because a link to the old domain now displayed a porn site. I guess I should be flattered that a porn gang thought the domain was valuable enough to register and hijack!
Line of Succession
I hadn’t done much work on the Line of Succession site since I redesigned it last year. So it was about time it had a bit of love. So I turned my attention to it for a few days.
Last year, I discovered WikiData, a site that provides machine-readable data about… well, about pretty much everything. I wish I had known about it when I was first filling in the data for Line of Succession six years ago. Back then, I spent many Sundays copying data from Wikipedia into my database. If I had known about WikiData I could have probably automated most of that.
But there’s always more data that can be added. And it’s always a good idea to ensure the data I have is still up to date.
So I’ve written a program that uses WikiData to audit my database. It looks for things like missing death dates and missing children (so I don’t have to spend time poring over the society pages to check for births and deaths). It will even fix many of these problems automatically. It will also help me push my data back in time - as it looks for missing parents and will insert those records based on the information stored in WikiData.
I’ve written a GitHub Actions workflow that runs the audit program every day and produces a report of potential problems. Currently, I don’t let it fix things automatically, but that’s bound to follow as my confidence in the program grows.
I’ve also tried to increase the rate at which I publish articles on the Line of Succession newsletter. If you have any interest in the British royal family, you might like to subscribe to that.
Web servers and directory listings
Back in January, I wrote a blog post about App::HTTPThis, a CPAN module I maintain that runs a simple static web server. I find it invaluable when I’m working on a static website (which is a surprisingly high amount of time).
The blog post led to a slight uptick in interest in the module and I ended up doing a bit more work on it. In particular, I took the code which generates a directory listing and split it out into a separate module (WebServer::DirIndex) in the hope that other people doing similar work could use the same code.
One interesting thing about this project was the way that I wrote almost no code for it. I created issues in the GitHub repo and assigned those issues to GitHub Copilot. A few minutes later, a pull request would show up and I would review it and (usually) merge it without any problems.
I was so impressed by how well this went that I wrote a blog post about it:
Maybe a similar workflow would work for you, too.
Contributing to GitHub Marketplace
I’ve used GitHub since soon after it first appeared. I like to keep up to date with its newest features. I’ve even written a book about GitHub Actions (that probably needs to be updated - I wonder when I’ll have time to do that). But I had never written anything that was available from GitHub Marketplace.
Until yesterday.
Like most good Open Source tools, it does one simple thing. And it scratches a personal itch.
I have a lot of projects on GitHub - I mean hundreds. And I’m a firm believer that a good project should have a website. But when you have hundreds of projects, it’s impossible to maintain that number of websites.
But, many of those projects will already contain a file that could function as a simple, one-page website for the project - the README.md.
I wanted an easy way to take a README.md, convert it to index.html and publish it to GitHub Pages. You can do this with Jekyll, of course, but sometimes, bringing in a whole Static Site Generator ecosystem can feel like overkill.
So, that’s what readme-to-index does. It:
Installs Pandoc in your workflow environment
It uses Pandoc to convert your README.md to index.html
By default, it uses Simple.css to make the page look nice
It publishes that page to GitHub Pages
I wrote a blog post going into more detail - Your README Is Already a Website
KeepAChangeLog on MetaCPAN
I like the idea of using industry standards wherever possible. And I think that sometimes the Perl community prefers its own standards to more widely-recognised ones.
One example is change logs.
There’s a CPAN module called CPAN::Changes that defines a specification for change logs and then parses logs in that format. It’s used on MetaCPAN to present change logs in a very readable fashion.
But there’s an alternative standard called Keep A ChangeLog. And, because that format is widely-used in open source projects, it’s the format I like to use. However, MetaCPAN doesn’t recognise that format, so my change logs get presented in a less satisfactory manner.
Last April, I raised an issue asking for support for the Keep A ChangeLog format. And volunteering myself to implement it. And then promptly forgot about.
I was reminded a few weeks ago, when Olaf Alders posted a comment on that issue, asking if I was still planning to work on it.
That galvanised me into doing something. I’ve now released CPAN::Changes::Parser::KeepAChangeLog, which parses a Keep A ChangeLog-style file and produces a standard parsed change log object. I’m hoping that can be injected into the MetaCPAN page build process to display my change logs in a nice manner. But that’s a project for later this month.
We ❤️ the NHS
At the end of January, I had some routine blood tests, and some of the numbers came back slightly higher than my doctor was happy with. This led to a series of repeated tests, phone calls and a referral to a local hospital for some slightly deeper tests.
I’m sure I’m fine, and this is just my doctor ensuring that no possible avenue is left unexplored. And I think that’s great. I would far rather she order too many tests than too few.
I try to keep politics out of this newsletter, but I want to go on record as saying that the NHS is one of the great things about living in the UK. It’s something I appreciate more and more as I get older.
Anyway, enough sentimentality. That’s about all I achieved in February. Looking back at what I’ve just written, it seems rather more than I thought at the time. I guess that’s a good thing.
How about you? What achievements from February are you particularly proud of?
I’ll be in touch again in about a month.
Dave…

