It’s the end of an era: Apple has confirmed to 9to5Mac that the Mac Pro is being discontinued. It has been removed from Apple’s website as of Thursday afternoon. The “buy” page on Apple’s website for the Mac Pro now redirects to the Mac’s homepage, where all references have been removed.
I never saw anyone buy one. I’ve never met anyone that owned one. I’ve never been less surprised by a decision.
With continued pressures in the global economic landscape, we’ve made the decision to increase the prices of PS5, PS5 Pro, and PlayStation Portal remote player globally. We know that price changes impact our community, and after careful evaluation, we found this was a necessary step to ensure we can continue delivering innovative, high-quality gaming experiences to players worldwide.
The PlayStation 5 Digital launched in the UK at £359.99 in November 2020. The same console is currently £389.99 on Amazon. The new RRP is £519.99, a £160 increase over its launch price from almost six years ago.
It’s easy to think that this price increase is simply a result of RAM shortages, but Sony’s CFO, Lin Tao, said they’d secured sufficient supply, via Outlook Respawn:
Speaking during a Q3 fiscal earnings call this week, Sony Chief Financial Officer Lin Tao addressed the industry-wide panic regarding the global RAM shortage. Tao assured investors and fans alike that the company has secured the minimum memory inventory needed to meet demand for the next fiscal year, effectively shielding the PS5 from the skyrocketing component costs currently plaguing the tech world.
That was just six weeks ago. More likely this increase is due to the US-Israel conflict with Iran, and the pressure it is placing on the semiconductor supply chain. Sony attributing the increases to the global economic landscape gives them just enough cover to say nothing at all.
These price increases are effective from 2nd April. If you’re in the market for a PlayStation 5, now’s the time to get it.
There’s not much worth quoting in this PC Gamer article but I do want to draw your attention to three things.
First, what you see when you navigate to the page: a notification popup, a newsletter popup that obscures the article, and a dimmed background with at least five visible ads.
Welcome Mat
Second, once you get passed the welcome mat: yes, five ads, a title and a subtitle.
A bit of article
Third, this is a whopping 37MB webpage on initial load. But that’s not the worst part. In the five minutes since I started writing this post the website has downloaded almost half a gigabyte of new ads.
Bandwidth bonanza
We’re lucky to have so many good RSS readers that cut through this nonsense. 1
The BBC surface a bunch of RSS feeds if you know where to look. However, in an RSS reader if you try to follow bbc.co.uk or bbc.com, you’ll invariably get a “No Feed Found” error (or equivalent). Why? Because the BBC don’t surface these feeds under the hood in the <head> element of the HTML, which is what they should do. It’s at this point where RSS becomes difficult and where users drop out.
In these scenarios, my idea was to use Gobbler’s knowledge of feeds available on those domains. If someone put bbc.co.uk into the address bar, Gobbler would surface http://newsrss.bbc.co.uk/rss/newsonline_uk_edition/business/rss.xml (BBC News UK) if it knew an RSS feed existed.
Easy to code, easy to implement, and adds immediate value for discoverability. So, why have I pulled it?
Respecting private feeds.
I subscribe to publications where I receive a unique, private RSS link, that contains articles that I’ve paid for. Imagine a scenario where Gobbler surfaced that URL? It would completely undermine said publication’s business model.
I still think there is merit in the feature. I just need to find a way to not surface the wrong URLs.
Back in September 2025 I released Singapore Buses with a feature that I thought would have little-to-no usage, an App Clip. It wasn’t an easy feature to implement. In addition to the in-app code, there’s the work on Cloudflare:
The clips.singaporebuses.app subdomain is powered by Cloudflare Workers. It serves an AASA, some basic content, and a favicon, but is otherwise there to enable redirects to the app or the App Clip.
Notwithstanding, I’m glad to say the App Clip has met my expectations — since September it’s been used a grand total of zero times.
I’m interested to see how (or if) it affects download statistics.
I’ll be removing the App Clip in the next release.
The Gobbler blog is powered by Astro. This website used to be powered by Ghost. But I like consistency, so this website is now powered by Astro as well.
With the help of Claude, all posts have been moved over while maintaining their original guids for RSS readers, all images downloaded from Ghost, all historical WordPress and Ghost HTML stripped, and all code blocks have been correctly indented 1.
This move means membership and newsletters have been retired. Everything that was previously gated by membership barriers is now available to all. For anyone concerned, Ghost will delete all data around the start of April. So sad.
Tangentially related to all this website work, I have discovered something new 2 (at least new to me): Universally Unique Lexicographically Sortable Identifiers (or ULIDs). They are kind of like UUIDs but sortable and decodable. In previous static sites where posts have had front matter, I’ve always used the post slug or a random UUID as a post identifer for feeds, but ULIDs seem to serve this purpose better. This post, for example, has a unique ID of 01KKC42KAQ8SWA4FTXVGWKJCKE and you can decode that at ulid.page.3 (On the new Gobbler blog I am using nanoIDs as post identifiers. It’s nice to have options!)
For those that are interested, I create a new post by running npm run new "Blog Title", which runs this node scripts/new-post.mjs, which leads to this:
A useful new web app for generating ride briefs is now available at the brilliantly named rolling.bike. Upload your GPX file, or sync your routes via Strava or Ride with GPS, provide some context and Rolling will generate a well structured ride brief.
Here’s a walked through example:
The GPX file
A quick summary of this route:
Start at Botanics
The hilly comb of First-to-Fifth Avenue
Hillview
Lorong Sesuai
Rifle Range Road
Finish at Dempsey at the bottom of the map
Information I provided to Rolling:
Route Name: Hills and Thrills
Category: Steady (2.0 - 2.8 W/kg)
Named Start and End points
Rider Notes:
New Rider Instructions: Lots of short and snappy hills.
Self sufficiency note: Two bottles. One gel.
With that information, Rolling can output various lengths of brief: Regular, Event, or WhatsApp, depending on your selection. In addition, you can pick your brief’s tone (I use cheeky). With the above information, the Regular output for this ride:
Hills and Thrills is exactly what it says on the tin, a fun steady-paced loop round some of the nicer parts of the island. It’s 35.2 kilometres with 635 metres of climbing spread across six proper little kicks, so you’ll get a proper workout but nothing that’ll have you gasping for air round every corner.
This ride is for anyone who fancies a morning out with decent scenery and a few punchy climbs to keep things interesting. We’ve got regroup points dotted through the route, so you can catch your breath and stay together as a group. No heroics required.
The climbs are all short and snappy. Haunted Hill at 14.7 kilometres in is probably the meanest of the lot at 8.7 per cent, but it’s still only 300 metres of pain. Lorong Sesuai later on is similarly spicy at 11 per cent but equally brief. First Avenue and Bukit Timah Road will warm you up early doors, nothing outrageous but enough to let you know your legs are switched on.
You’ll be self-sufficient out there, so bring two bottles and a gel to keep the tank topped up. A spare tube and pump are non-negotiable, as is the usual common sense.
We’re starting at Singapore Botanic Gardens Tanglin Gate on Saturday 7 March at 6am. It’s an early one but worth it for the cooler morning air and quiet roads. We finish at Burnt Ends Bar on Dempsey Road, where we’ll sort out proper breakfast and a coffee that’s actually worth drinking.
Should be a cracking morning.
The Event brief:
This is a steady ride built around short, punchy climbs that’ll keep things interesting without requiring you to sell a kidney. We’re looking at 35 kilometres with 635 metres of elevation crammed in, which is basically Singapore’s way of testing whether you can handle variety on a bike.
We’ll start at Tanglin Gate in the Botanic Gardens and head into familiar territory. The climbs here are properly bite-sized. You’ve got Jalan Dermawan, which is steep enough to remind you that you have legs, and Lorong Sesuai sits in there with a bit of attitude at 11 per cent average. Holland Road rounds out the main event near the end. Nothing’s long enough to really damage you, but they’re all short enough that you have to actually pedal properly.
This isn’t a race, so we’ll regroup sensibly at the bottom of anything notable. Keep things social on the flats, push on the climbs, and try not to look too smug when you get to the top. We’re aiming for around two hours ten minutes of riding, which gives us time to chat, recover between efforts, and generally not take ourselves too seriously.
The route loops us back through some nice sections, so there’s rhythm to it. Early on you’ll pass through Avenues One to Five before heading out toward the real climbing. Bukit Timah Road gets involved early, then we settle into the longer middle section where Jalan Dermawan and Lorong Sesuai are waiting to have their say.
Bring two bottles and a gel minimum. There aren’t convenient shops along the way, so come prepared to look after yourself. Water stops are on you.
We’re finishing at Burnt Ends Bar on Dempsey Road, which is a proper reward for a solid morning’s work. Coffee, food, legs that feel like they’ve done something worth doing. That’s the deal.
See you Sunday morning. And no, you don’t need to be elite to ride this. Just show up with a bike that works and legs that are willing to go up hills a few times.
And finally, the WhatsApp brief:
Saturday 7 March, 6am sharp from Tanglin Gate. We’re doing Hills and Thrills, 35 km of the sort of climbing that keeps you honest. Plenty of short punchy hills that’ll test your legs but won’t bore you. Regroup spots at First through Fifth Avenue at the bottom, then Former Hillview and Lorong Sesuai at the top, plus Rifle Range Road at the end. Bring two bottles and a gel because we’re not messing about. Finish at Burnt Ends Bar, Dempsey Road.
The more you use Rolling the better it gets as it actually learns your tone!
It’s an extremely useful utility, and a bargain at $15 AUD a year.
I’m thinking about releasing a new web-based RSS reader and RSS aggregator called Gobbler. It’s available to test for the next month or so and you can sign up using this link. Everything is still in sandbox, so you won’t be charged for Stripe. All data will be removed at the end of March.
If you want to use Gobbler on mobile:
Reeder: Use Google Reader
NetNewsWire: Use FreshRSS
Current: Use FreshRSS
*or *just add it to your Home Screen from Safari
Gobbler on Desktop
Gobbler on iPhone
You can find out more about Gobbler at gobbler.press.
If you have feedback—I’d be delighted to hear it—please send to support@gobbler.press.
Every month or so I update Singapore Buses with the latest data from the Land Transport Authority. And every month the *What’s New *section on the App Store usually says something along the lines of:
Updated database and routes.
What does that actually mean? Well, starting with 2026.3, which is Waiting for Review, I’ve decided to include the month-to-month differences in the *What’s New *section. For this release, that means:
New Stops (1)
Code
Description
Road
74951
Blk 962A
Tampines St 96
Location Changes (7)
Code
Description
Distance
14521
Village Hotel
320m
28221
Opp Intl Business Pk
53m
28239
Jurong Town Hall Int
48m
28301
Blk 131
21m
43081
Opp St. Joseph’s Ch (Bt Timah)
112m
59069
Opp Blk 757
74m
67759
Compassvale Int
13m
Name Changes (4)
Code
Old Name
New Name
47749
W’lands Health Campus
W’lands Hosp
52241
Blk 105
Bef Caldecott Stn/SAVH
65091
BLK 301A
Blk 301A
67759
COMPASSVALE INT
Compassvale Int
Service Changes (20)
Code
Description
Added
Removed
74949
Blk 961A
18M
74959
Blk 969C
18M
74961
Blk 966
18M
74969
Opp Blk 966
18M
75341
Opp The Clearwater Condo
18M
75349
The Clearwater Condo
18M
84201
Bedok Resvr Stn Exit A
18M
84209
Bedok Resvr Stn Exit B
18M
84221
Blk 109
18M
84229
Blk 111
18M
84251
Blk 99
18M
84259
Blk 88
18M
84261
St. Anthony’s Cano Sch
18M
84269
Blk 95
18M
84271
Aft Bedok Ind Pk E
18M
84279
Aft Bedok Nth St 5
18M
84521
Blk 506
18M
84529
Blk 109
18M
84591
SBST Bedok Nth Depot
18M
84599
Opp SBST Bedok Nth Depot
18M
The biggest surprise to me was the number of bus stops moving around and how far they move. I mean *Village Hotel *is almost half a kilometre away from where it was before — that’d be a shock in the morning if it was where you started your commute.