Firehose

This is everything, all in one place, coming ’atcha!

This firehose contains a record of all my micro posts, articles, photography, and other web doings. If you’d like to subscribe to feeds to stay up-to-date with things, then you can do so via my syndication page.

Tone is rather difficult to convey over text, unless writing dialogue where you can write ‘Person said angrily’. Unless careful with chosen message phrasing and choice of diction, it is very easy for the wrong emotion to be conveyed. In speech, intonation is a major part of effective conversation.

Multiple attempts have been made at addressing this issue. Most interesting in my opinion is assorted new punctuation. For example, the ‘snigger point’ or ‘note of cachinnation’ () to be used for indicating ironic sentences or clauses, the SarcMark™ as a sarcasm full stop alternate, or the upside down exclamation point (¡) as another sarcasm indicator. Other similar attempts at new punctuation include the percontation point () for rhetorical questions or the interrobang () as a combination of a question and exclamation mark.

However, much more commonly applied in actual communication are tone indicators. There are a great very many, but the ones which see frequent and common usage are:

Tone Meaning
/j or /jk Joking
/hj Half-joking
/s Sarcastic
/gen or /g Genuine
/gq or /genq Genuine Question
/srs Serious

They’re used by appending the indicator to the end of the message, like so: ‘Nice face /s’. They originate from HTML-style presentations (<sarcasm>Nice face</sarcasm>), but over time people dropped the angle brackets and opening indicator while shortening the indicator’s name to what we have today.

I try not to bloviate, but I am innately verbose in writing.

I have now had multiple people tell me that they enjoy my writing but that they feel unable to read it through to completion for their attention drifts. They cite short-form video platforms and social media for this attention-span harm.

Multiple people have independently told me this personally, so I can’t speak to how many more people have silently stopped reading long-form work, or who have never built the attention-span to discover it.

What shape does information take if it must all be attention-optimised and conveyed within a few short minutes?

Generally, short content means less nuance, more reactionary (due to less time to produce), and less in-depth research per output. I worry for the long-term impacts.

Can’t wait to see what wonderful accessibility horrors people manage with CSSrandom() in regards to focus order, colour palettes, element sizes, and other such non-human tested wonders.

There are quite a few tells that people use in online messaging which can be used to identify a user’s culture or place of origin. Beyond the obvious sentence patterns, word usage, and other language behaviours, there are some small behaviours that can be used to identify groups:

  • In Russia it is common to end messages with ) or ( to indicate expression. This comes from emoticons such as :), but colons can be hard to type on Cyrillic keyboards, so they just became opening and closing brackets. ) generally represents a smiley expression, while ( generally represents a sad expression. Multiple brackets are sometimes used to convey a stronger form of the emotion.

  • ‘XD’ is a commonly used Polish emoticon. Different capitalisations and the number of xs and ds influence the meaning. It was adopted from the West’s usage as an expression akin to 😆 when Poland properly embraced the internet in the 2000s, but unlike in the West it didn’t slide out of fashion and adopted more general, varied usage among Poles. Sometimes it is also used as a noun.

  • Japan frequently uses kaomoji. For example: (^_^) and (づ ◕‿◕ )づ. Their textual construction allows a great variety to be constructed and for them to be easily altered based on context, unlike emoji.

  • In Brazilian Portuguese, ‘kkkkk’ and ‘ksksks’ are commonly used to express laughter. ‘rsrsrs’ is also used as a shortening of ‘risos’, meaning ‘laughter’.

  • Inverted punctuation (¿ or ¡) is commonly used by Spanish speakers, even when writing English.

  • In Thai, the number 5 is pronounced ‘hâaห้า’, so Thai speakers will often write ‘5’ to indicate laughter, with more 5s increasing the intensity: ’555555’.

  • French uses a space before some punctuation, which French speakers will often bring across into English: ‘How are you ?’.

  • In some Nordic cultures, most notably Sweden, it is common to use a double caret (^^) to indicate a smile or nod. It is roughly equivalent to the 😊 emoji, though is used more casually. It is also used as a shorthand of the (^_^) kaomoji more generally across the world.

In light of the Claude watermarking text discussion, I can’t wait to see someone set up a system with Claude to automatically pipe output through a small local LLM that rewrites it to remove the text watermark.

In fact, I’d be surprised if multiple people haven’t already created this. Such a flawed marking.

I’ve got users telling me now that they’re asking AI for help with software I work on.

I’ve gone ahead and made some AI-friendly documentation tweaks to try curb these at least a little just so that hopefully fewer people contact me brandishing an LLM hallucination they’re treating as gospel.

I dunno how this’ll work out. Some people go to the point of borderline harassment to try have me help them with what the LLM has faultily told them.

Feels bad to have people put more trust in AI than my studiously written documentation. Where do these people think the AI is getting the data from?

A microscopic annoyance that forever irks me is the discrepancies between the ‘Get it on Google Play’ and ‘Download on the App Store’ badges. They use the same pure black background, the same #a6a6a6 border colour, and the same general layout, but all the finer details differ.

A badge for Google Play and a badge for the App Store. They're similar at a first glance, but the longer they're inspected, the more tiny differences there are. Size of the badges and elements, alignment of type, fonts used, borders – everything!

It is as if they made a vague, loose attempt at coordinating, then gave up. Indeed, I imagine that this is exactly what happened. Apple and Google attempted coordination, then brand adherence and marketing won out, killing any potential for cohesion. Ironically, this decision has probably harmed their marketing and brand control, because I’ve seen cases where people have modified the badges to work together as a set.

It plays like a game of spot-the-difference. The Play Store icon is larger, different fonts are used, the text is aligned differently, they’re different widths, and one reads ‘Get it on’ in uppercase while the other reads ‘Download on the’ in lowercase. These badges are so very commonly presented next to each other, and I can’t speak to the number of times I’ve seen their alignment wrong or one given precedence over another due to their variation.

At least if they were significantly differing, there’d be no illusion of them intending to match, but because they’re so close, it just looks sloppy. You really get a feel for the differences when the badges are overlayed (here I’ve recoloured the borders for illustrative purposes):

The two badges atop each other with lowered opacities. The App Store badge is more rounded, while the Play Store badge has a tighter radius. Everything is also placed slightly differently.

This style of badge isn’t just employed by Apple and Google, however. They might be the most common to use it, but it is also employed by the Amazon Appstore, the Samsung Galaxy Store, the Microsoft Store, and Huawei AppGallery.

Every now and then, I’ll come across a markup language that I genuinely consider adopting. Most recently, Djot. However, I still use Markdown. Why?

Firstly, Markdown is good enough. The vast majority of my Markdown usage is for writing italics and hyperlinks.

Secondly, Markdown works everywhere. Almost every chat platform, forum, social media platform, and blog comment section I use supports Markdown without issue. Not always the full array of features, but usually the core features I care about. Every popular programming language in which one could want to parse Markdown has a capable library.

The wide support means that content is very portable. I won’t end up with my content stuck in some format that is proprietary or unsupported by modern software.

Thirdly, Markdown is designed to map cleanly into HTML, which is the main case I need it for. I can also author straight HTML in Markdown without stress.

Markdown isn’t perfect, but it is good enough. It might not be perfect, but it is no less perfect than any alternative, and if I am already using it and must continue to use it in some places, then I may as well use it everywhere.

‘Alt-text’ is short for alternative text, and is used to convey the substance of visual content as text. It is important for people with visual disabilities, though is beneficial for a wide range of people. It is useful for low-speed connections where an image might not load, for searching for an image, for SEO/AIO/GEO, for cases where a link to an image is broken, for understanding context, and for a variety of other gains.

Here are some notes on how I write alt-text:

  1. I don’t start my description with ‘image of’, ‘picture of’, or similar superfluous details, unless the medium is relevant. For example, I will note if it is a logo, a graphic, an illustration, or similar.

  2. I always end alt-text with a full stop to avoid further document content being read as if a continuation of the alt-text.

  3. I try to keep my alt-text at one to two sentences, though will expand to more if necessary. In the majority of cases, detail becomes excessive beyond two sentences.

  4. I ask the question, ‘What would I tell someone if I was explaining this to them over the phone?’. This lets me identify what I must include for context and what the most important parts of the image are.

  5. I don’t use AI to write my alt-text. If I have included an image for a reason, then no LLM can precisely tell what that reason is without me telling them, and if I’m telling them then I’m more or less writing the alt-text anyway. I also dislike outsourcing my writing to LLMs, with writing of alt-text being no exception.

  6. I will not write alt-text if it is not relevant or needed. Nothing is gained from explaining a flavour image on a website. It is there for a bit of visual space filling, not for its value or substance. In this case it should be noted that the alt text has purposefully been left blank and hasn’t just been omitted. In HTML, this is done by writing alt="".

Ultimately, I just try to convey with alt-text what I’m trying to convey with the image. That is the goal.

Having a really hard time trying to find broken links on sites now. I get so many anti-scraping blocks that the result of any link checker is just noise.

I understand why, but it wasn’t this bad even just a few months ago.

Lea Verou published a post titled ‘Dark mode toggles: two states are enough’, discussing the UX of light-dark toggles. I can understand the reasoning, but I disagree with it. The system setting option being lumped with the selected theme feels a tad too magical to me (and not in the intuitive way). It feels like it is taking my control away as a user.

I reliably fall exactly into What if users get confused? when interacting with the demo. Even with it front of mind I still stumble over the same interaction while switching it back and forth. It isn’t fitting my mental model of how I expect it to function and it really twists my mind around trying to comprehend it.

Historically, I’ve been lazy with my theme toggle on websites. I’ve typically reached for a cyclical button which toggles between light, dark, and system default. However, this is a far from optimal approach and has major usability issues. It isn’t an intuitive interface pattern:

  • You can’t see all the options until you’ve cycled through them.
  • Switching between the system theme and the explicit theme that matches it doesn’t trigger a change, which causes a weird interactivity disconnect.

However, it is compact, and compactness is one of the main points Lea argues in her blog post, and I do agree that three-state toggles with a button for each are too much. The approach does show the system setting as an explicit setting, however, which Lea argues shouldn’t be exposed to the user. Instead, I’ve come to find a different approach I prefer:

By default, the page follows the system default. Pressing the light mode icon sets the page to light mode. The dark mode icon sets it to dark mode. If the user wishes to return to the system default, they click on the active theme button again, which toggles it off. It only takes up the space of a two-state toggle while representing all three states in an intuitive way. At least, it has been intuitive and immediately understood by the great majority of people I’ve tested it with. The minority usually assume it can’t be returned to a system setting.

This approach treats the system option as something slightly different, too, which feels correct given that system is fundamentally different to light and dark. It also avoids the pitfalls of too many displayed items or the added complexity of a drop-down. It feels like a reasonable middle ground. I look forward to when we get this toggle as a native part of browser chrome eventually.

Online code sandbox site CodePen recently released a major update: CodePen 2.0.

I use CodePen a fairly reasonable amount. I often access CodePen demos embedded in articles, I’ll spin up CodePen for my own experiments, and I’ll use it to share little examples and bits of code. In articles I’ll embed CodePen demos where applicable.

Almost everything I do on CodePen is extremely simple. Anything more complex, and it is just not something I’d go to CodePen for. I’d sooner release it as a Git repository or place it on my tools site. As such, the changes 2.0 have brought aren’t really to my benefit and complicate my existing usage.

However, there might be some rare cases for me where I need to show multiple files or a framework in a demo for an article, though generally in-article demos are best kept extremely simple so the added complexity is of little benefit. Perhaps it could also be useful for demonstrating frameworks or libraries, though that was mostly possible before too – it is just more streamlined now.

It certainly will be brilliant for people just wanting to learn to create websites. Previously I’ve had to coach people through creating a HTML file, opening it in their browser, inputting text formatting files, et cetera, but CodePen 2.0 will provide essentially a pre-configured development environment complete with hosting capabilities.

Overall, it is a solid update that makes CodePen much more versatile. It isn’t an update for me, but it is an update that isn’t hostile against me and is beneficial for many others. The CodePen team are lovely folks, and just to see a product make meaningful improvements rather than hostile regressions is very much welcome.

Thankfully, the old editor can be accessed at https://codepen.io/pen, and the new editor can be configured to function like the old editor using the Classic Block and the Minimal UI option.

My head is on a swivel, left and right. I’m trying to find something to look at as I sit in my chair, hands on keyboard, expected by my own mind to write. I can feel the breath of an editor down my neck, though he isn’t in the room, and I’m just trying to place my gaze anywhere other than that rotten blinking cursor in front of me.

I scrunch up my face and tears well in my eyes before I open them and return them to the page. I blink for a moment before allowing my eyes to grow out of focus, where I look through my screen into my own reflection looking back at me with an expression of weary sickness. My head is splitting down the middle, or perhaps it is from the side.

There is this radiating throb regardless, and I don’t think the sounds of destruction emanating up the stairwell are helping. There is a man doing repair work on the bathroom. Or at least I hope there is. I didn’t see him come in, and I haven’t heard any words from him, but I can hear the vicious smashing of tiles and dull thuds of something hitting something. Perhaps a burglar. I can’t be bothered to check.

‘Oh woe, be ye’, I think, turning my attention back to the infernal blinking caret. It feels as if the air around me is molasses. I’ve got no trouble breathing, but movements are as if through a thick horrible.

They’re smashing about the hammer again, my page is near blank, and my eyelids have taken on the same heavy weight of my pouting lips. Another hour spent. Nothing done.

The International Electrotechnical Commission (IEC) uses binary (base-2), meaning steps of 1,024 (2102^{10}) – KiB, MiB, GiB, etc. Meanwhile, the International System of Units (SI) uses decimal (base-10), meaning steps of 1,000 (10310^3) – KB, MB, GB, etc.

IEC Unit Formula Exact Bytes SI Unit Formula Exact Bytes Difference
KiB (Kibibyte) 2102^{10} 1,024 kB (Kilobyte) 10310^3 1,000 2.40%
MiB (Mebibyte) 2202^{20} 1,048,576 MB (Megabyte) 10610^6 1,000,000 4.86%
GiB (Gibibyte) 2302^{30} 1,073,741,824 GB (Gigabyte) 10910^9 1,000,000,000 7.37%
TiB (Tebibyte) 2402^{40} 1,099,511,627,776 TB (Terabyte) 101210^{12} 1,000,000,000,000 9.95%
PiB (Pebibyte) 2502^{50} 1,125,899,906,842,624 PB (Petabyte) 101510^{15} 1,000,000,000,000,000 12.59%
EiB (Exbibyte) 2602^{60} 1,152,921,504,606,846,976 EB (Exabyte) 101810^{18} 1,000,000,000,000,000,000 15.29%
ZiB (Zebibyte) 2702^{70} 1,180,591,620,717,411,303,424 ZB (Zettabyte) 102110^{21} 1000 Hexillion 18.06%
YiB (Yobibyte) 2802^{80} 1,208,925,819,614,629,174,706,176 YB (Yottabyte) 102410^{24} 1 Septillion 20.89%
RiB (Ronnibyte) 2902^{90} 1,237,940,039,285,380,274,899,124,224 RB (Ronnabyte) 102710^{27} 1 Octillion 23.79%
QiB (Quebibyte) 21002^{100} 1,267,650,600,228,229,401,496,703,205,376 QB (Quettabyte) 103010^{30} 1 Nonillion 26.77%

The Road Traffic Code 2000 outlines rules and regulations for road users in Western Australia. This is an abridged compilation of the parts most relevant for unicyclists and does not constitute legal advice. Sourced from the version as at 14 May 2026.

Notably, a unicycle is considered a ‘wheeled recreational device’, not a bicycle. This means that bicycle-specific restrictions are irrelevant. ‘Bicyclists must dismount’ signs and similar don’t apply, nor are helmets required. Drug restrictions do not apply either. Per the legislation:

wheeled recreational device means a wheeled device, built to transport a person, propelled only by human power, gravity, or both, and ordinarily used for recreation or play —
[…]
(iii) a unicycle,

pedestrian means any person on foot or in a perambulator, or a physically disabled person in an unmotorised wheelchair or in a motorised wheelchair, and includes —
[…]
(c) a person in or on a wheeled recreational device or a motorised scooter; and

Regulation 206:

(1) A person must not travel in or on a wheeled recreational device, motorised scooter or wheeled toy —
(a) on a carriageway with a dividing line or median strip; or
(b) on a one‑way carriageway with more than one marked lane; or
(c) on a carriageway with a speed limit exceeding 50 km/h.
[…]
(3) A person travelling in or on a wheeled recreational device, motorised scooter or wheeled toy on a road must not travel past a “no wheeled devices” sign.
(4) Subregulation (1) does not apply to a person who is crossing a carriageway in or on a wheeled recreational device, motorised scooter or wheeled toy, if the person —
(a) crosses the carriageway by the shortest safe route; and
(b) does not stay on the carriageway longer than necessary to cross the carriageway safely.
(5) Subregulation (1) does not apply to a person who is travelling in or on a wheeled recreational device, motorised scooter or wheeled toy on a carriageway if —
(a) it is necessary to travel on the carriageway to avoid an obstruction; and
(b) the person does not travel on the carriageway for longer than necessary to avoid the obstruction.

Regulation 207:

A person travelling in or on a wheeled recreational device, motorised scooter or wheeled toy on a carriageway —
(a) must keep as far to the left side of the carriageway as is practicable; and
(b) must not travel alongside more than one other pedestrian or vehicle travelling on the carriageway in the same direction as the person, unless the person is overtaking other pedestrians.

Regulation 208:

A person travelling in or on a wheeled recreational device, motorised scooter or wheeled toy on a footpath or shared path must —
(a) keep to the left of the footpath or shared path unless it is impracticable to do so; and
(b) give way to any pedestrian (except a person travelling in or on a wheeled recreational device, motorised scooter or wheeled toy) who is on the footpath or shared path.

Regulation 209:

(1) A person travelling in or on a wheeled recreational device or motorised scooter must not be on a part of a separated footpath designated for the use of pedestrians unless the person —
(a) is crossing the separated footpath by the shortest safe route; and
(b) does not stay on the separated footpath for longer than necessary to cross the separated footpath safely.
(2) A person travelling in or on a wheeled recreational device or motorised scooter on a bicycle path, or a part of a separated footpath designated for the use of bicycles, must keep out of the path of any rider of a bicycle, EPT or electric rideable device.

Regulation 209B:

(1) A person must not travel in or on a wheeled recreational device or wheeled toy on a road during the hours of darkness or in hazardous weather conditions causing reduced visibility.

Regulation 210:

(1) A person travelling in or on a wheeled recreational device, motorised scooter or wheeled toy must not attach himself or herself to, or permit himself or herself to be drawn by, any other vehicle.
(2) A person must not travel in or on a wheeled recreational device, motorised scooter or wheeled toy within 2 m of the rear of a motor vehicle, over a distance of more than 200 m.
(3) The driver of a vehicle must not permit a person travelling in or on a wheeled recreational device, motorised scooter or wheeled toy to attach himself or herself to, or be drawn by, the vehicle.

This is, genuinely, one of the funniest memes I have ever come across. I wish to make an attempt at explaining why.

Firstly, this is a picture from an out of character interview with Freddie Prinze Jr, and yet he refers to Shaggy – not Matthew Lillard, who is the actor who played Shaggy. This implies, on some level, that Shaggy isn’t being played by an actor, or that Matthew Lillard himself is Shaggy.

Secondly, Fred is, to an extent, the straight man in Scooby Doo. For him to be recounting this event implies it actually happened.

Thirdly, ‘killed god’? Shaggy, the scaredy stoner who is first to run away from whatever foes the gang face, killed god? Then, he walked onto set to announce it? ‘Announced’ implies there was some gravitas to his proclamation that god is dead by his hands, but announcing it walking onto set implies that killing god was done casually.

What was his motive for killing God? Also, how did he kill god? These questions aren’t answered or addressed at all by the meme. Freddie Prinze Jr is also mentioning this as a casual aside during an interview?

Combine the sheer absurdity with the fact that I have seen the live action Scooby Doo films an unhealthy number of times as a child, and it all comes together to be extremely humorous to me.

When I go around dropping tabs from different dealers to compare, people say I’ve got a problem, but browsers used to go around doing so-called ‘Acid Tests’ with impunity. Times have changed, I suppose. Either that or double standards.

Am I correct in my understanding that it still used in Opera Mini for extreme data saving mode? It seems it is. Is it updated at all for use in such cases?

Here is my site rendered with extreme data saving mode in the latest version of Opera Mini. I’m pretty sure this is Presto in 2026, which feels an odd thing to say.

Vale.Rocks rendered in Presto. The content is largely present, but most of the CSS is broken.

Sticks and stones may break my bones, but users will not hurt me. Sticks and stones may break my bones, but users will not hurt me. Sticks and stones may break my bones, but users will not hurt me. Sticks and stones may break my bones, but users will not hurt me. Sticks and stones may break my bo…

We were somewhere around line 23,494 on the edge of the framework when the caffeine began to take hold. I remember saying something like ‘I feel a bit lightheaded; maybe you should code…’ And suddenly there was a terrible roar all around us and the screen was full of compilation errors.

Happy AusAlert test warning to all who celebrate.

Even though I knew it was a test during the alert that ran today, I wasn’t checking the time, and it did genuinely surprise me. The alert sound sounds severe, and the follow-up narration of the warning, even as it said it was a warning, felt dire.

Hopefully there will be minimal reason to use it.