Mac shortcut tips – playing live radio stations with a single keypress

Using macOS Mojave, iTunes, some apple script and BetterTouchTool (£)

  • Create a playlist entry for the radio station in iTunes
  • Create a script file like this:
bbcws.scpt:

tell application "iTunes"
play track "BBC World Service"
end tell
  • Add a shortcut in BetterTouchTool, using the Execute Terminal Command option: e.g. osascript /path/to/bbcws.scpt

(Remember you can use modifier keys for variations. e.g. F18, shift-F18, cmd-F18)

Benefits:

Whilst I have streamlined the way I access audio over the years, by putting all my preferred stations in iTunes playlist, to avoid having to launch individual websites or apps, you generally still have to first switch to iTunes etc. (Launchbar currently doesn’t support playing live streams properly).

With this solution, I can literally just hit a button and it’ll start within a second. (If you have a digital watch, e.g. a Casio, I suggest activating the hourly chime if you want to avoid missing the start of news bulletins etc.)

Q: But what about iTunes being abolished in Catalina? Yes, well I’m not planning to upgrade for some time, and when I reach that point I’ll probably switch to VLC or something.

 

Letsencrypt on Debian 10 – switching to new ‘snap’ based Certbot

Official instructions: https://certbot.eff.org/lets-encrypt/debianbuster-nginx

If you’ve upgraded a machine Debian 10 (Buster) or later you’ll see a warning like this:

/etc/cron.weekly/certbot:
Your system is not supported by certbot-auto anymore.
certbot-auto and its Certbot installation will no longer receive updates.
You will not receive any bug fixes including those fixing server compatibility
or security problems.
Please visit https://certbot.eff.org/ to check for other alternatives.

Certbot, the tool for updating Let’s Encrypt certificates, is now distributed via Snap.  If you haven’t heard of that, Snap is a new package format – the point is it’s more cross platform – so a single package will currently support Ubuntu, Debian, Fedora, Arch Linux, Manjaro, and CentOS/RHEL.  More details >

This means you need to:

then, typically you already have a weekly cron file that calls certbot to renew the certificates, and restarts your apache or nginx server (the latter step is important because otherwise it’ll keep serving a cached copy of the old certificate, which will eventually expire).

Here’s the (old) contents of my /etc/cron.weekly/certbot:

#!/bin/bash
/home/william/letsencrypt/certbot-auto renew
service nginx reload

You need to remove the line calling certbot-auto, but leave the one restarting nginx once a week.  You might choose to rename the cron file or add a comment to make it clearer to your future self why it’s needed.

Next, check snap is to up to date:

sudo snap install core; sudo snap refresh core

Install the certbot package:

sudo snap install --classic certbot

Then you can test a manual update either:

sudo certbot certonly --nginx

(on the interactive version you’re presented with a list of sites to choose from)

Finally, do a renewal “dry-run” to check for problems:

sudo certbot renew --dry-run

The key points about dry-runs:

  • they use the Let’s Encrypt staging environment, so you don’t hit rate limits
  • therefore, real certificates aren’t requested or saved
  • it’s basically testing that Let’s Encrypt end is able successfully handshake with your server, can write files to correct places etc.

Renewals

Renewals can use one of three methods: crontab, cron files or systemctl timers.

On the servers I’ve installed so far, certbot has automatically setup a timer. You can verify it has by running systemctl as follows:

$ systemctl list-timers
NEXT LEFT LAST PASSED UNIT ACTIVATES
Mon 2021-02-15 12:12:00 GMT 1h 43min left Mon 2021-02-15 07:57:03 GMT 2h 31min ago snap.certbot.renew.timer snap.certbot.renew.service
```

So certificate refreshes will happen automatically, but remember you need to handle regularly restarting your web server (and weekly is as good an interval as any to do that).

Here’s another link to the documentation:
https://certbot.eff.org/lets-encrypt/debianbuster-nginx

PhpStorm gotcha: all PHP errors missing – “No errors found in this file”

If all your PHP errors and warnings suddenly disappear from your IDE editor window, despite you having the language level configured correctly etc., double check you haven’t turned on Reader Mode by accident, as by default it hides “error and warning highlighting and the inspection widget”.

Therefore you’ll see the message “No errors found in this file” when pressing F2, even though there are some.

Also by default, it turns on font ligatures (the fancier versions of =>, != etc.) so if you’re seeing those and wondering why, even though you have the boxes unticked in Preferences Editor > Font, or Editor > Color Scheme > Color Scheme Font / Console Font – again, check it’s not activated.

All this is configurable in Preferences > Editor > Reader Mode.

Note that Reader Mode is toggled on and off for individual files.

Jetbrains official docs

My UK iPhone mail-in battery replacement experience

Here’s a detailed review of how Apple’s mail-based, UK iPhone battery replacement service works, using two different phones in late 2020.

last update 10 Dec 2020

First you start here: https://support.apple.com/en-gb/iphone/repair/service/battery-power

  • Scroll down and choose ‘arrange a shipment’, which, after Apple ID login, will lead you through picking the device, the cost your address details and a credit/debit card pre-authorisation.

The rule of thumb is that Apple will do repair and battery replacements for phones, tablets, etc. that they were selling until five years ago. After that, the model becomes “vintage” : for the next two years you can get it repaired by an authorised service provider (there are plenty of those in the UK) but not directly by Apple. After that, it’s officially “obsolete”: Apple will no  longer sell replacement parts, so you’ll have to hunt around for someone who has hoarded them and appears trustworthy enough to know what they’re doing.

Therefore, you might plan a battery replacement before your five years are up and you might – as I did with an iPhone 6S – choose to first replace the battery first after, say, 2.5 years – I’d reached close to 1,000 charge cycles at this point – and then again after 4 – 4.5, before time runs out.

The UK mail-in battery replacement option was (I believe) introduced somewhere between 2018 and 2020 – I don’t recall it being available the last time, either that or the turnaround time put me off, though that did mean I got to chat to an Apple certified technician at Storefront and get an idea of what they did (including taking hi-res photos of the phone, including the display, ports, assessing the condition of the screen) and a look at the diagnostic tools they used.  The actual dis/re-assembly process (out of sight) took them, as I recall, around 20-30 minutes.

Back then, Apple offered battery replacements for a reduced £25, due to all the fuss over CPU throttling (for the record – I consider that a feature rather than a drawback, given it kicks in due to a combination of temperature, charge remaining and power draw, it’s not active all the time.  In most situations, having your phone power off in the cold is much more inconvenient than a slight slowdown).  It’s worth noting that Apple changed the power management chip for more recent models.  Where they screwed up of course (personal opinion) was in the transparency and the PR.

As of November 2020, the battery replacement current cost for less expensive iPhones (e.g. for an iPhone 6S) is £37.50 for the repair, £6.20 for shipping, plus 20% VAT, or £52.44 inc VAT in total.)

Sending the phone to Apple

  • roughly 3-4 days after I started the repair (requires credit card details), received a box (slim enough to fit through large letterbox) to send it back in. The box itself (a “single wall” box made by Veritiv, who design and manufacture packaging) is well constructed, and has the manufacture date along with all the weight, burst proof certifications etc. on the back.
  • The pack comes with an instruction book (9 steps, 24 languages, 36 pages) and a spare SIM eject tool: you need to remove the SIM – this is standard for in-store repairs at authorised retailers like Storefront, too – Apple don’t want to worry about looking after your SIM, cases, cables or any other accessories.
  • You do need to turn off Find my… (iPhone), of course (Apple’s website has a mechanism that checks this in real time and doesn’t let you continue until it’s done) – there was some additional advice to remove the phone from your list of devices in iCloud, which I did to be on the safe side.
  • Your phone goes in a thin translucent foam padded bag, which some tape you unpeeled and stick down, then you put it inside a slim iPhone style white cardboard box (you’ll get it back in one of these too, they’re nice and worth holding onto…), then you put that inside the brown cardboard box, which you’re also advised to tape down (no tape provided).
  • You also get a pre-paid (24 hour, tracked) Royal Mail grey polythene bag which has a postage label preattached.
  • You don’t need to include any notes or paperwork (remember Apple can reference both the tracking code and the serial number of the iPhone itself).
  • You can do what I did, and use the new Royal Mail parcel collection service which costs 60p for this item, to avoid a trip to the post office. When the postman delivers your post, s/he takes the parcel, scans the barcode (they have a proper laser barcode reader for that, not a phone camera) and then it’s automatically in Royal Mail’s standard tracking system.  You’ll get a confirmation email from Royal Mail immediately.

Although the entire process – online ordering, status emails, credit card purchase info, payment receipt etc. is fully Apple white-label branded, they contract the servicing out to Unipart Logistics in Lutterworth (they support servicing jobs for London Apple Stores too, apparently).

The day of repair (both repairs took a single day each, with time either side for delivery of return box, the return itself, and the repaired phone being sent back.)

iPhone 6s – Nov 2020

  • 8am – Royal Mail tracking shows parcel received
  • 11:31am – Apple email: “We’ve received your product / we’ll start the repair now”.
  • 5:02pm – Apple email: “Your product will ship soon / our technicians have successfully repaired your product”.
  • 7:01pm – Apple email: “We’ve repaired your product / Your product has been repaired and we’re sending it back to you. You should receive it in about two business days.”  iPhone SE – Dec 2020
  • 10:47am – Apple email: “We’ve received your product / we’ll start the repair now”.
  • 6:47pm – Apple email: “Your product will ship soon / our technicians have successfully repaired your product”.
  • 7:01pm – Apple email: “We’ve repaired your product / Your product has been repaired and we’re sending it back to you.

This is all much faster than I anticipated. (I was expecting a ~ 2-3 day turnaround in normal circumstances, and longer now, given social distancing disruption and the possibility of reduced staff levels due to illness.)

Receiving your phone

  • The “We’ve repaired your product” email identifies the courier as UKMail and had a tracking number to a Syncreon page which was active later that evening.  In fact, UKMail is part of DHL (presumably because they thought UKMail was a friendlier name for the British market).

Syncreon is a “supply chain solutions” company (a bit like Capita or Serco, but not quite) and one of the things they do is handle Apple’s delivery tracking.

In both cases – delivered by DHL the following afternoon. Note the Syncreon page shows basic tracking, including ‘Out for delivery’ status, but you will also find a  ‘manage your delivery’ link – this leads to a DHL UK homepage.  If you paste the tracking code in the email and your postcode again, it will give you a one hour estimated window, based on your position in the courier’s daily drop list (displayed below graphically).

An estimated time and position won’t appear until mid-morning, in one case an hour or two after the package was out for delivery.

As is currently the situation in the UK, couriers put the on the (open) doorstep, take a photo of it sitting there and ask for your name before leaving, as a contactless proof of delivery.

The phone comes wrapped in a UK DHL parcel bag (size medium) with a brand-new, taped grey box and the iPhone protected in the same way as when you sent it – padded bag inside white cardboard box.

I recommend keeping the boxes in case you ever need to send your phone to someone else.

Also in the box: an A5 sheet of paper labelled “AppleCare Product Service Summary”. It confirms you have a 90-day warranty on the repair.  The summary includes your repair ID and the phone’s serial number (which is enough to extract not just the storage size of the phone but also its colour and the various LTE bands).

Did I get my original phone back? Yes. Matching serial number and IMEI, and screen/case appeared in identical condition.

iOS software versions

On powering on, I used Coconut Battery to check the manufacturer date of the new battery:

iPhone 6S –  45 days old (good), 0 power cycles, only 10% charge (probably for safety reasons).
iPhone 5E – 268 days old (presumably because they are in lower demand), 30% charge (printed on the Product Service Summary)

For both a iPhone 6S running iOS14.2, and an iPhone 5E 1st gen running iOS13.7, I received the same phone back but with factory reset to iOS14.2. Upgrading the SE to the latest version before sending it in was deliberate on my part, to see if they would wipe it even though it was up to date. Whereas at a previous in-store replacement at Stormfront (a UK Apple service provider), the technician didn’t reset the device.  My guess is that this UTL load some diagnostic firmware onto the phone first and run tests, though why this wasn’t needed at an AASP I’m not sure (and with a Mac, you can boot a recovery partition from an external drive without needing to do anything to the phone, indeed with Filevault enabled).

Recommendation: as it’s always questionable to describe early versions of iOS releases as “finished”, I wouldn’t get a battery replacement soon after a new version has come out: wait until the .2 or .3 release, so you don’t end up with something that’s unstable, or has poor battery life, or new bugs in 3rd-party apps which the developers have not yet got around to fixing.

The Product Service Summary for both phones states:

“Our technicians also installed the latest operating system and confirmed that your product passed our quality tests”.

Restoring the phone from the backup

This will depend on your backup size, for reference, a 19GB backup took around 18 minutes to the first boot. The restore is enough to get you to the stage where you have an internet connected phone, a working home screen and the app download process has begun. This is very CPU intensive – and needed an additional half hour or so downloading the 140 apps I have on the phone.  iPhones from 2015 are limited not just by the CPU but also the NAND write speed  (e.g. an 7th generation iPod Touch (2019) will be considerably snappier when installing applications.)  Note: all your apps are downloaded online, but you get the version you had installed previously, not the latest one  (although it will often be a more recent app if you’ve migrated from iOS13 to iOS14).

I recommend backing up iOS devices with iTunes, not iCloud, for speed and security reasons.

iTunes will have restored your entire photo library (and seems now to download music too, or at least some of it).

The default COVID-19 exposure tracking settings for an iOS14 restore are for it to remain deactivated if it was previously switched off, but with the app availability notifications enabled.

The default bluetooth setting seems to be inconsistent (Apple used to reactivate it on each update, that isn’t always happening for me now.)

Your previous iOS software and app auto update toggle settings are all preserved, along with most other things (screen brightness, volume level and so on).

In short, iOS restore remains very slick / polished, though I did choose to power-cycle the phone after it apparently stalled on iCloud setting restoration.

Also, I was able to get through the entire reinstall process without the SIM inserted (in previous iterations the phone would have refused to go any further.)

Battery issue with iOS14 (and working fix)

After allowing ~48 hours for things to settle down, I was still losing an alarming amount of battery when the system was idle (e.g. 60% overnight).  Absolutely zero application usage was being reported during this time.  Tried removing widgets, but didn’t seriously expect this to work (and it didn’t) – besides, widget use should be reported in the table.

Battery loss was also happening during the day. It didn’t seem to happen whilst in full airplane mode (with no wi-fi) so my suspicions were Wi-Fi calling, or more likely, a corrupt wifi setting (this was a restore from a iOS 13.7 install to a 14.2 clear install, which could be problematic.)

Resolved by resetting network settings (in practice, all this requires you to do is re-enter wifi passwords – and if necessary, any static networking settings; note that wi-fi calling was still enabled without me needing to do anything.)   So try changing that, make a note of the battery life, and leave the system connected to wifi but idle for an hour or two and see if the battery is stable now.

It might be worth clearing network settings regardless if you’re upgrading to iOS14 – it’s a lot less hassle that starting completely from scratch (i.e. clean system where you restore apps and settings individually).

Overall verdict:

  • Fast process and minimal hassle.
  • Quite expensive (as expected), but thorough repair, was confident in the testing process, use new and genuine parts and you get 3 month warranty.

If anyone wants to fact check me on any of this, do feel free to email.

Switch to Gmail basic HTML with a simple URL change

updated 16 March 2024

Sorry, you can’t do this any more – Google have abandoned it.

HTML view

Rather than needing to use any menus or special links, you can just change the URL from:

https://mail.google.com/mail/u/0/…

to:

https://mail.google.com/mail/u/0/h/…

(where the 0 increments if you are switching between more than one account.)

Mobile view <– recommended

https://mail.google.com/mail/mu/mp/180/#mn

This is the same web app you’ll get in iOS on Safari.  It uses JS, it looks modern, and it’s very fast.  Disadvantages on desktop: you can only see a few messages at a time and there’s a seriously cutdown feature set – e.g. you can’t format or add attachments when composing – though most of the keyboard shortcuts work for navigating folders, searching, starting a new message (but again, not for formatting text).

However, the lack of bloat is a big deal – both from the lack of sluggishness when switching to a pinned tab of your inbox – also the mobile view is exactly what most people would have in mind when describing as a “distraction free” email environment, with the lack of menus, navigation bars, icons etc. (Even the plain HTML view is quite “busy” in this respect.)   You can switch back to desktop at any point via the settings menu.

I recommend using a browser custom stylesheet to make the width sensible on large monitors (unfortunately .qf is the only useful CSS class that Google add to the page, you may need to apply it only to the Gmail site via a browser extension):

 html.qf body {
  width: 600px;
  margin: 0 auto!important;
}

Benefits / situations where basic HTML or mobile views are useful:

  • poor connections
  • reduced memory usage (I had a Gmail tab that had been open for only a few hours, and switching to basic HTML cut memory use from 445MB to just over 200MB)
  • potential battery savings on mobile

Troubleshooting custom WordPress WP-CLI commands running on WP Engine’s SSH Gateway

This is a one line fix if you have missing string/array output from a custom WP-CLI command when using the WP Engine “SSH Gateway”.

Terminology:

    • WP Engine is a WordPress hosting company*.
    • They have an SSH Gateway – where you login to a separate machine and it will pass a limited range of useful commands to your actual server (basic file management, a MySQL console client, WP-CLI)
    • WP-CLI is a timesaving WordPress command line utility.

The problem is the unorthodox way the gateway works suppresses ordinary output from certain commands – e.g. print_r or echo.  Symptom: you run a  WP-CLI command of your own through the SSH gateway and lines of text you’re expecting are missing.

First, you should switch from WP_CLI::line() (deprecated now anyway) to WP_CLI::log() – the line() method doesn’t work because, if you dig into the source code, you’ll see it just echos the output, however log() uses the proper wp-cli Logger class.

That’s fine if you want to output strings. Unfortunately, it doesn’t work if you need to print an array.

This does though:

fwrite( STDOUT, print_r($foo, TRUE) );

To unpack that, we’re using print_r to neatly print the array. The second argument for print_r returns its value as a string.   You need not fopen STDOUT first, as you would for another file handle.

And that’s it.


* Would I recommend WP Engine? No, given I have hosting knowledge myself, and when I asked for their assistance with this particular problem, their support agent told me it was out of scope and I should look at StackOverflow, for which they have earned this mildly passive aggressive paragraph in a blog post that will sink without trace.   However, many people do like them, and if you’re a WordPress developer, you may well inherit a client with a site hosted there one day.

WordPress PSA: disable “Glue for Yoast SEO & AMP” plugin

If you have a site using the AMP plugin in “Reader” (formerly “Classic”) mode – which is to say it uses some simple templates for rendering AMP pages – you should remove Glue for Yoast SEO & AMP:

– it is no longer necessary
– the code in glue-for-yoast-seo-amp/classes/frontend.php adds a duplicate inline CSS selector for

header.amp-wp-header

and

.amp-site-title a

. This means the default colour scheme will override colours you set in Appearance > AMP.

Disabling the plugin fixes this.

(Tested with AMP 1.5.5, WordPress 5.4.2)

Ideas for supermarkets

(File this under things nobody will ever do.)

In store:

  • have a board outside the door listing which sections or products – bread, toilet rolls etc. – are completely sold out.  Have a column indicating roughly when you expect to restock the section.
  • large map of the supermarket aisles posted outside entrance / in car park.  New or less frequent customers can familiarise themselves with the map before they enter, so they do not get confused or unnecessarily interact with other customers while shopping.
  • if entrance has two sets of automatic doors, make one enter only and one exit only
  • sell toilet rolls in smaller pack sizes (1,2,4 etc.) not 16, 24 – to make it easier for people who don’t need or want large packs.
  • have a staff member whose job it to sanitise handles of shopping baskets or trolleys throughout the day
  • purchase UV lamps for each store, to inspect surfaces for germs (staff will need some basic safety training before using these)
  • hand washing station for customers, specifically before/as they enter the store
  • plastic partitions to help protect (and to an extent, reassure) checkout staff, as have already been used in some countries
  • UK Finance (formerly the UK Cards Assocation) to consider raising the £30 contactless limit, to reduce times necessary for customers to touch pin pads
  • Add on screen messaging reminding customers to clean hands after using self-checkout machine or PIN pad. Log frequency of use per checkout, so if staff have limited time, they can clean areas most likely to be infected, and reset the counter
  • coordinated, staggered elderly / key worker staff hours, so they’re available on different times/days at different supermarkets, not the same time everywhere, to help those working varying shifts or relying on public transport.
  • A list of these times to be maintained centrally by council and local press and to be displayed in the supermarket (listing their competitors)
  • once of a week, supermarkets to publish heat map of day and hours, indicating when busy / quiet periods are
  • give loyalty points for people who shop outside of peak or priority hours
  • reverse loyalty points system – award points to people who DON’T panic buy toilet roll or other high demand items, or who regularly buy in smaller quantities.  (Trickier for people to game this system if you apply it only occasionally, averaged over multiple visits rather than at checkout.)
  • reverse multi-buy offers – cheaper prices for buying smaller quantities of high demand items,instead of rewarding buying in bulk
  • suspend Sunday trading restrictions – none of the reasons for having them apply at the moment. It also leads to the policy of ‘letting people in before the tills open’ which again, wasn’t intended for this sort of demand, and will just lead to an increased number of people in close proximity who are unable to leave the store

Home delivery / website:

  • static page (one that specifically does not require registration/login) regenerated at regular intervals showing, per store, remaining available delivery slots by quantity and date
  • a proper system status page for all supermarkets, with website metrics – e.g. page load time and API failure rate, email delivery time – and customer service metrics: outstanding calls/emails and current wait time for both. Let people check status of email tickets.  Heat map showing quiet times to call customer service.  Callback option.
  • make the list of out of stock items mentioned earlier available online too
  • government to provide an API that accepts, say, a postcode and a national insurance number, and will tell you if that person is a key worker. Use this to allow priority choice of online delivery slots etc.
  • If there’s an error, say when attempting to book a delivery slot, don’t immediately redirect people all the way back to the start of the process (time consuming for users and increases server load further)

Revised 12:10pm, 22 March 2020

Text only news websites

as featured on Hacker News in 2023!
(last update 11 August 2024 – changes: considerable tidying up)

TL;DR – the ones to start with

Site by site reviews

CNN

Advantages:

  • fast loading, cleanest possible design
  • plenty of stories 40+ 100
  • default visited link colour! so anything you’ve already read is shown in purple
  • More varied content than before – even in an election year it’s not all Trump/Biden (yet). 
  • Opinion pieces clearly marked
  • Since it launched, if anything the text formatting has actually improved rather than being left to decay. It’s exceptionally rare to see any HTML -> text conversion issues.
  • they’ve also fixed things like citing author names and lack of links back to the full-fat version of each story

Disadvantages:

  • a single list view means stories can feel a little random, sometimes newest stuff appears at the top, sometimes not.
  • no topics headings or pages either, so you need to mentally parse the headline
  • no date/timestamp on the index, though it’s there one individual stories
  • the live audio stream from lite site has been scrapped, but you still can get it from the main one via TuneIn: https://edition.cnn.com/audio (last tested Nov 2022) where you can choose between the US, CNN International and Spanish streams.

Well done CNN! 🙂

68k News

  • a text-only version of Google News. You can choose the ‘edition’ (country) for local headlines. Articles from multiple sources are grouped by topic.
  • the widest range of stories
  • only service with ability to select by country
  • they may not have the news source you want
  • you may find it slightly annoying having to read repeated headlines or headlines from sources you don’t like, or having to choose which newspaper/website you want for every story
  • non-article content and other clutter like newsletter signups may not be stripped out

NPR

  • clean design
  • supports visited link colour
  • nice mix of cultural stories as well as news
  • reliable formatting
  • links to related stories on the text-only site

CBC

  • fast-loading
  • a world news page
  • high-quality: includes stories from Reuters and Associated Press
  • nevertheless a bit limited, you may want more news
  • uniquely, a button to allow to you load any individual images you wish to view
  • links at bottom of page to equivalent page on full size
  • sitemap
  • an actual release notes page! Unfortunately it’s on Medium (which has become incredibly aggressive about registration/paywall subscriptions) rather than CBC’s own site.

The Guardian, created by Phil Gyford

This is a very nice, friction free way to browse a digital version of every story from the printed daily paper. Updated once daily, late at night UK time. Created using the Guardian’s API – how it was built.

The typography is nice (and in keeping with the paper), not quite text only but extremely low bandwidth, javascript to enable you to swipe between stories (horizontally). No other clutter.

BBC News

There is NO BBC text-only or low graphics website, and hasn’t been for years.
Don’t waste your time searching.

One exception: the old BBC On This Day website – which like vast swathes of BBC content, has been archived and abandoned for years – does still exist in low graphics format. You need to choose your own date, but all the linked articles still work. So if you want to read stories between WW2 and 2005…

How should I be reading all these text only sites anyway?

Besides in your desktop or mobile browser (with a plugin like Vimium or Vimari), I also like this W3m Vim plugin for reading in Vim itself.

It hasn’t been updated in years, but I’ve found it very reliable and, if you’re a (n)vim user, I’d recommend this way over Lynx.

W3m puts the site you are reading in a Vim buffer (or buffers).

So you can navigate the page with all your standard Vim keybindings, you can search the text and highlight occurrences of strings, and you can yank text to buffers for use elsewhere. You can even spellcheck it if you like. About the only thing you can’t do is modify text in place.

It also supports an extra ‘f’ shortcut for quickly jumping to specific links.
Tab/shift+tab moves you from one link to the next.
Use backspace to go back in your history.

One other bonus: none of those annoying Lynx cookie prompts.

Could a (paid) news app with an ‘offline’ mode be what you really want?

It might be the time pages take to load is what’s most annoying you, or – to use western countries as an example – you’re often an in area with congested 3/4G masts, or where wifi is spotty.

Certain apps, such as the Financial Times (both the full subscription, and FT Edit which is a much cheaper daily curated set of interesting articles rather than rolling news) will automatically download a full set of stories each time you open the app, and you can then instantly view those regardless of connection status. (The FT gives you a subtle prompt that offline mode is ready). Because the articles are loaded within an app rather than a browser, it will also feel quicker. The disadvantage is it’s more likely articles will contain ads which you can’t block as on a website (though ads may disappear in airplane mode).

For what it’s worth, I’ve found reading cached offline stories in airplane mode quite productive / therapeutic.

Would a smaller/lighter phone suit you?

You don’t need a big display from text. A smaller device will be more comfortable for holding for longer periods of time, and will create less glare in the dark because the display is smaller.

Use it in conjunction with your browser’s “reader” mode, which will strip out navigation, ads etc. and allow you to change the font size/style and background colour. You can set the browser to automatically use reader mode for all articles on specific websites. I sometimes do this for text only sites like CNN Lite, just because the font size is more comfortable, or it’s nicer to have an entirely black background in the dark.

For Apple users – the lightest and most comfortable device for any text only site is the iPod Touch – it’s only 88 grams, candy bar sized and extremely exceptionally comfortable to hold. The iPod Touch was discontinued in 2022, so get one second hand (easy), the earlier the installed iOS version the better your battery life will be. Just don’t use it for anything that would be a security risk (maybe leave it at home).

Alternatively, get iPhone SE (again, personally recommended) – also currently the cheapest iPhone, and the only one left with with an LCD display, which may actually reduce headaches for those people who don’t like OLED, especially those who tend to use their screen on minimal brightness, which is when OLED flickers the most). If you don’t mind OLED and would like a phone with more screen space (no bezels) and a more advanced camera, get an iPhone 13 Mini. It’s more expensive though.

Could an e-reader be what you really want?

(I discuss “save-it-later” apps, reading lists etc. later.)

A Kindle will give you:

  • a dedicated email address you can send documents to
  • if you combine your e-ink Kindle with the iOS Kindle app, you can load a web page and then use the iOS share screen to send it to a Kindle in 4-5 clicks.  The way this works is the text is converted on-device, which means if you are using a site behind a paywall, provided you’ve browsed to the actual page (rather than long-pressing on a link and sharing that) it won’t be a problem and you’ll get the full text.   Curiously, Amazon’s server then makes a request for the CSS file before sending the document, but it doesn’t request the actual contents again.   The only irritation is this method takes 4-5 clicks each time and gets annoying if you are sending a lot at once.
  • Use Reabble’s Send to Kindle, or Five Filters’ pushtokindle.fivefilters.org on the desktop. Both are nicely designed and let you preview/edit what you’re sending before you send it. Again the conversion is client side so paywalls aren’t an issue. It makes a nice job of including images and removing cruft from the header/footer (though a well semantically coded source site – think <article> tags etc.) makes this a lot easier.

Kindle benefits: distraction free, front-lit rather than back lit, so more comfortable on eyes, adjustable font size (e.g. set it larger when you are tired), one-tap dictionary (which is a huge time-saver), may be more comfortable to hold than a smartphone due to a combination of overall weight / weight distribution over larger surface area / texture of the device.

In terms of content, you may also find you enjoy breaking up periods of news reading with books – not necessarily because of the topics you are reading about (and for the record about 95% of what I read is also non-fiction) but if you’re reading a succession of shorter articles, there is considerable mental load involved in the choice of deciding what to read next. With a book, it’s much more linear and you can kind of ‘sink into’ it.  (Perhaps this is why ‘long form’ journalism has become popular online in recent years – again, this is usually best enjoyed with an e-reader.)

E-Reader disadvantages:

Frankly, pushing article after article to an e-reader, remembering to download them, then reading them later isn’t very time efficient, so it’s not fun or sustainable for lots of short articles. Better for long reads. You may also tire of a workflow where you reading headlines or half-read articles once in a browser, then come back to them again on your e-reader. It may make the whole thing more work, even if the reading experience itself is more comfortable.

Downloading full newspapers / magazines to an eReader:

You can buy a Kindle subscription to many newspapers/magazines. The quality/presentation varies depending, mostly, on how much effort the publisher has made. Larger publications (ahem, The Times) can even crash the Kindle.

However you can also use pressreader.com to manually save a day’s edition of whichever paper/magazine you want and copy it to your device.  It’s not perfect – formatting errors are much more common, and it’s a bit slow to generate the file as everything gets watermarked – but it does work, and if you have a library card, hundreds of publications are available free.

If you’re a Facebook user…

mbasic.facebook.com

Ideal if you just want to quickly check the feed and go away again.  No javascript, so feels (and is) faster, less bloated.  Design feels suitably retro.

(last tested Jan 2024. Note the same as m.facebook.com, which just redirects to the full site.)

Sites which aren’t strictly text only, but I highly, highly recommend anyway:

Thomson Reuters Foundation Trust Context

Great if you want to escape the mainstream news agenda, where every news organisation is relentlessly flogging the same story.  The Reuters foundation is a charitable part of the Thomson Reuters agency and focuses on under-reported news and regions.  Often these are stories you won’t read elsewhere but which are still trustworthy and with excellent photograph.

They cover an increasingly wide range of topics and there is bound to be something you are interested in (e.g. climate, technology, cities…) and which I think would appeal to people across the political spectrum – i.e. you can read it without feeling you’re being lectured.  Also, if you’re bored with or not interested in a particular topic, just start from one of the other index pages and you’ll avoid it.

In terms of the design, yes there are (good) photographs, but overall it’s very clean and won’t overwhelm you or your mobile device.  Navigation, search and tagging are simple and reliable.

There are opinions but they’re not clearly separated from the journalism and “thoughtful” rather than “shouty”.

  • Secondly, I’d recommend BBC Future – this is produced by BBC Worldwide (nothing to do with BBC News Online).  They publish less frequently but the articles have more depth.

Other tips:

  • use your browser’s reader mode (see above)
  • use a save-for-later app, such as Apple’s Reading List, Pocket, Instapaper… (as an Apple user who tries to stay in Safari as much as possible, I’ve switched from Instagram to Reading List because there’s less friction.)

The (theoretical) benefits to text only news sites:

  • Save the time waiting for a page to load, or in situations where bandwidth is extremely limited, the difference between being able to access a site and not retrieve a page at all (better chance of success on 3G networks)
  • Quicker to browse a list of headlines on a single page than navigate through a long homepage of photos and video thumbnails.
  • Save bandwidth used, preserve more of your mobile data allowance
  • Increase battery life on mobile devices (there’s little or no JS to load/process, so CPU load is reduced, and because the data transferred over the network is so much smaller the wi-fi or cellular radio on a phone or tablet is on only briefly and uses less power.
  • Less distraction (from other elements of the page) more immersion in content (like reading a book)
  • No iframes / social media oEmbeds
  • Less likelihood the page will reflow (due to DOM changes by javascript)
  • Usually no advertising
  • Usually no irritations like cookie warnings
  • Overall, less stressful

Other sites:

  • BizToc Light – business news website (links are to full content on external sites)

Apps:

The Reuters app isn’t strictly text only but it does have an offline mode and supports iOS dark mode.

It is still available for really old devices too – e.g. iPod Touch 4th generation – and supports offline mode. Not strictly text only, as there are photos at the top (imho, Reuters has the best/fastest range of news photos).  Still loads quickly on hardware that was released in 2010.  Most content sections still working. iPod Touch only weighs 100g so comfortable to read for long periods and easily slips in a bag (just don’t use it for anything that requires up to date security).  Turn javascript off in Safari settings to make websites bearable.