Automatically Rotating Images with php2Bluesky

I have a PHP application that I use to post to my X, Mastodon and Bluesky accounts. This works well but I noticed the last time I posted an image from my iPhone that while it was fine on X and Mastodon on Bluesky the image was upside down (see above and here)!

Interestingly this only happens when posting via the Bluesky API, if you upload the same from the web interface, for example, it works fine.

Enter EXIF

When you take a picture with a modern digital camera, such as an iPhone, it embeds into that … Read the rest

What’s Wrong with Vibe Coding?

TL;DR Nothing*

You are the last of your kind

When I started work as a very junior developer in 1988, one of the first languages I used was ICL’s Application Master. This was what was known as a fourth-generation language (4GL). I was confidently told I would be one of the last developers before the next generation of language allowed anyone to create their own programs. Somewhat later than I think that commentator had envisioned, 40 years later in fact, I think we might be getting close to that democratisation of development.

For those interested, this is what Application … Read the rest

Restricting who can reply to a Bluesky post with php2Bluesky

I had an email from a php2Bluesky user who wanted to know how you could set the restrictions on who could reply to a post. This was something that php2Bluesky didn’t support, but I thought it would be good to, so I have updated the code. Here’s how to use that feature.

Thread Gates

Looking at the Bluesky web app there were six different options you could select to set who could respond to a post:

  • Everyone (the default)
  • Nobody
  • Your followers
  • People you follow
  • People you mention
  • Anyone in a list you provide.

I did a bit of research … Read the rest

Posting to WordPress Microposts with php2Micropost

I have accounts on plenty of microblogging sites (Twitter, Mastodon, Bluesky and even Threads) but they are all owned and controlled by someone else. I decided that I wanted something that I could use and manage, and a quick search came up with Michael Gbadebo‘s WordPress plugin called Microposts.

I installed this and after playing around for a while, I decided that it was just what I was looking for. However, it was quite cumbersome to make a post from a mobile device when I was out and about. What I wanted was a simple … Read the rest

How to turn PHP code into a package that will work with Composer

I’ve learned a lot while developing my php2Bluesky package spurred on by my own desire to make a decent product and by suggestions from users. One such itch I needed to scratch was to take my static code and turn it into something that I could use with Composer, the de facto way of handling dependancies in PHP.

I have to admit that not everyone was thrilled about my proposed move to Composer, as many seemed to prefer not to use it and to manage updates and load the code manually. This meant that I also needed to make … Read the rest

Exporting Last.fm Scrobbles to Day One

Having already written routines to export WordPress posts and Foursquare check-ins to Day One, I hadn’t intended to do any more, but here I am, back with exporting Last.fm Scrobbles to Day One. That’s because I read a post on the Day One Subreddit where someone was asking how you could do it and I rashly said I’d give it a go!

I couldn’t contemplate writing a script to go back over all my 130,947 scrobbles recorded over 21 years so this script just processes scrobbles for the last seven days.

What Exactly is a Scrobble?

Last.fm is a service … Read the rest

Setting a Bluesky Post’s Language with php2Bluesky

A while back I pushed an update to php2Bluesky that allows for multiple language posts and forgot to post the change so I am correcting that now!

Setting the language

By default the language of your posts is set to English but you can override this in one of two ways. Either specify the language when creating the instance of php2Bluesky or pass it when posting. It must be an array even if you are passing a single language.

Setting the Language Globally

If you want all your posts to be labelled in a language other then English then you … Read the rest

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