Update to WordPress Simple Stats

For my February 12 Apps in 12 Months project I wrote a script to produce some simple statistics from a WordPress installation. Looking back at it I realised that it only produced stats for all time and not the previous year, which is what I wanted.

I revisited the code and added in some counts for the previous year and updated the output. You can grab the latest code here but I came across an issue which I thought I would cover here as it might be useful for others.

504 Gateway Timeout

When running the script for another … Read the rest

12 Apps in 12 Months – a Review

Late 2024, I decided that I was going to provide more focus for my development in 2025, and to that end, I would attempt one new project a month, and so 12 apps in 12 months was born.

What did I do?

I very much stuck to my knitting with these projects as every one of them was written in a language that I know very well: PHP. Ten out of the 12 also used a third-party API to source data that was then used as the basis of the project.

Here’s a full list of all the projects completed … Read the rest

Vibe Coding a WordPress Plugin

I’ve written a lot of code this year and the vast majority of it I did without too much help. However, I did turn to AI (mostly ChatGPT) when I needed either a specific function written or some help with a particular issue.

What I hadn’t done was use AI to write a complete program without any code from me. I believe that this is termed “Vibe Coding“, named Collins Dictionary’s Word of the Year for 2025. Not a phrase that particularly appeals to me but I don’t get to choose.

Going with the Flow

Then, yesterday, … Read the rest

Automatic WordPress Plugin Updates

I wrote a plugin for our local U3A group, but I didn’t want to add it to the official WordPress.org repository as it had no relevance to the general WordPress user base. However, I still wanted to make it as easy as possible for people to install and update but WordPress won’t know how to check for updates on its own. That’s where Plugin Update Checker comes in.

Plugin Update Checker is a lightweight PHP library that adds WordPress-style update notifications to custom or private plugins. Once configured, your plugin behaves just like an official WordPress.org hosted plugin: WordPress checks … Read the rest

Exporting Foursquare check-ins to Day One

This is the project that I expected to do for my November 12 Apps in 12 Months challenge but, as you will see, that wasn’t actually possible.

Don’t rely on someone else’s API

I had two projects in mind for Day One: sync my WordPress blog posts and my Foursquare/Swarm check-ins to it. I felt that the latter was probably the easier of the two, so I started with that last September.

I went through the OAuth process to get my key and then started making authenticated calls to the https://api.foursquare.com/v2/users/self/checkins endpoint. This should have returned a list … Read the rest

Exporting WordPress Posts to Day One

For this month’s “12 Apps in 12 Months” challenge I decided that I wanted to try and import my WordPress posts into the Day One app. Given that Day One is now owned by Automattic who also “own” WordPress I was surprised that something like this didn’t already exist as an option within the app.

Into the Unknown

As a local app, albeit one with cloud storage and syncing, there isn’t an API for Day One. Instead there is a CLI which you can use to create new entries from the command line. This was the approach I took to … Read the rest

Using bookshelf – a reading list manager

Yesterday I wrote about my latest project — bookshelf. Today, I am going to show you how to use it. This post assumes that you have already downloaded the code and got it up-and-running.

Views

bookshelf has a number of different views to satisfy the different groups using it.

All Books

The main view (Home) is straight list of all your books which can be filtered by author, title, … Read the rest

bookshelf – a reading list manager

As I have stated previously, I read more than the UK average (40% of Britons haven’t read or listened to anything in the last 12 months), but I get books faster than I can read them. This means that I have a backlog of books waiting to be read. I wanted somewhere that I could record all my books and have a priority list of those that I wanted to read next.

Therefore, for this month’s “12 apps in 12 months” I present bookshelf – a reading list manager a place where you can manage all your … Read the rest

Escaping a Frozen SSH Session

If you use SSH regularly, you’ve probably seen this: you’re happily connected to a remote server, then you close your laptop or lose your network connection. When you open it again, your terminal looks stuck. You press keys, nothing happens, and eventually you get something like:

client_loop: send disconnect: Broken pipe

Until that timeout kicks in, the session feels “locked” and you can’t type anything useful.

Fortunately, there are a few simple tricks to escape frozen SSH sessions without waiting around.

Use SSH’s Built-In Escape Sequences

OpenSSH has a special escape character: ~ (tilde). It only works if … Read the rest

Home Assistant – Bus Stop Times

As I have stated in previous posts I am currently trying to get my head around Home Assistant and Dashboards in particular. I am slowly working up to having a dashboard display on an old Android tablet.

I decided that I’d like a project that could show how Home Assistant could be used for more than simply turning on and off the lights, and what would be useful to me would be a display showing a list of the next bus arrivals at our nearest stop.

I found that our local bus company, Reading Buses, has an api that provides … Read the rest