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.

A line you will find in the head of almost every single HTML document: <meta name="viewport" content="width=device-width, initial-scale=1.0">

The line came into relevance after the first iPhone launched in 2007. As part of the same keynote at Macworld 2007 in which Steve Jobs unveiled the iPhone, he showed off the phone’s web browser loading the New York Times and Amazon. As he proclaimed on stage, the iPhone did not load mobile versions of the sites but instead the full desktop versions.

Mobile versions of websites at the time were usually on their own subdomain or path and were extremely simplified experiences. The iPhone ran the full versions. However, these sites weren’t designed for such small screens. Ethan Marcotte wouldn’t coin ‘Responsive Web Design’ until 2010. The intended interaction was for the user to zoom in and pan around sites designed for desktop.

To allow sites designed for small screens to scale nicely, Apple introduced the viewport meta tag as explained in the Safari Web Content Guide. The viewport meta tag was eventually picked up more universally across browsers such that it became the widely supported way to make a site responsive.

Though width=device-width handled things broadly, initial-scale=1.0 was important for many years to resolve undesired zooming behaviour in older versions of iOS and some other browsers. However, this isn’t the case any more. All the problems are no longer present and don’t need working around.

I can say with confidence that you do not need to declare initial-scale=1.0 if targeting modern browsers. All you need is <meta name="viewport" content="width=device-width">. That’s 19 bytes you can shave from your document head. Maybe not much in isolation, but when you consider the scale of the web, it adds up.

The Curiosity That Is Minecraft: Pi Edition

Left on the windowsill and forgotten about.

The history and details of an obscure Minecraft version that was exclusively available on the Raspberry Pi. Based on the mobile Pocket Edition for phones but with some unique functionality. Namely, a native API for interacting with the game. Primarily created to serve as an educational tool.

https://vale.rocks/posts/minecraft-pi-edition

They’ve aligned the divs, but not the way I like my divs aligned. Now I don’t just have to align the divs, but I also have to unalign the already aligned divs to align them as the divs should have been aligned in the first place. Aligning divs seems like such a simple affair, and then someone ali…

Be careful when adding IDs, classes, or attributes in HTML that could be interpreted as paid content placement. Even if not actually advertisements or sponsored content, there is a good chance they’ll be blocked by content blockers and filters. This is something I’ve experienced firsthand. Trying to troubleshoot elements consistently hidden for only some users across a range of devices and browsers is hell. Even having them test without extensions doesn’t always work due to operating system or network-level filtering.

You don’t know pain until you figure out that the reason that some people can’t see the addition button on your tool is because you gave it the class add-btn and that triggered a selector looking for a class starting with ad. The regex is often very sloppy and vague in content blockers, as being too specific makes the blockers ineffective. It isn’t just advertising-related terms that cause issues, however. Tracking related names can be an issue too, as can references to pop-ups or paywalls. Likewise, so can elements referring to social media or newsletters.

One should also be careful with terms like ‘banner’ and using image sizes commonly used for adverts. Some filters will trigger just because of image resolutions, like 970px by 250px, which is the size of a ‘billboard’ advert, or 160px by 600px, which is the size of a ‘skyscraper’ advert. Even having terms related to advertising, like ‘billboard’ or ‘skyscraper’ in filenames, can trip content blockers.

The obvious question is how to avoid false positives. The most effective method is to reference popular filter lists and blocking systems to see if they’ll trigger on your site. Like testing across browsers, operating systems, and accessibility technologies, there is no better way to test than to actually test. One way that some sites bypass the problem is by creating a ‘namespace’ that is applied as a preprocessor step. For example, prefix every class with the name of your site so that a class such as add-btn becomes valerocks-add-btn. This isn’t a perfect approach but can work.

Though this is good to keep in mind for avoiding false-positives, you shouldn’t try to circumvent these filters if they’re accurate. Your users have made a conscious choice, and to disregard it is to disrespect them.

Event

Meteorological Autumn/Spring

Meteorological beginning of Autumn in the Northern Hemisphere and Spring in the Southern Hemisphere.

A point of consideration when writing about accessibility is between person-first language and identity-first language. Person-first language would take the form of ‘person with disability’, while identity-first language takes the form of ‘disabled person’. There are reasonable arguments in each direction, and different people have different preferences.

If referring to a specific person and they have a preference, then that preference should be respected – much like one would respect a person’s preferred pronouns. Age, gender, culture, language, level of education, and type of condition have all been found to influence people’s preferences.

However, that leaves the question of what language should be used for general writing and discussion or when speaking about people whose preferences you don’t know. I personally choose to use person-first language in these cases, as I think it is the most appropriate default. It emphasises the person over their disability.

The Australian Government Style Manual advises person-first language. The study Person-first and identity-first disability language: Informing client centred care (Lisa B Grech, Donna Koller, Amanda Olley) indicates that ‘it appears there is greater acceptance for person-first language rather than identity-first language when referring to others’.

While there are solid arguments to be made either way, there is unfortunately no universal consensus. The main point is that people should be addressed respectfully as people, not reduced to their disabilities.

While Microsoft establishes more data centres, my Windows install and Xbox console are pestering me in an attempt to persuade me to configure them to use less power.

Thanks, Microsoft. Glad you care so much.

Peer-to-peer (P2P) is a networking model where, instead of using a centralised server which all clients connect to, clients all connect to each other in a distributed model. Peer-to-peer is great in that there isn’t anything to host on an instance level. The onus of distribution is handled by users themselves.

So, why doesn’t Stoat use a peer-to-peer approach for voice and video streaming? Peer-to-peer was briefly considered and experimented with but ultimately deemed unsuitable for a few reasons. They are:

  • Privacy and security. As clients are communicating directly, there is high chance of leaking sensitive data, such as IP addresses. It also limits Stoat’s ability to enforce privacy protections.
  • Latency and scale. Real-time peer-to-peer streaming works reasonably well with a handful of people of close geographical proximity, but as it scales the amount of data throughput becomes larger, which increases latency. Streaming to many people is also hard on device performance. Channels can have hundreds of users in them, and peer-to-peer breaks down at that scale. Implementing peer-to-peer for small-scale situations and client-server for large-scale situations is possible, but is a significant amount of work.
  • Usability. Peer-to-peer often works great, but sometimes it doesn’t. Occasionally there will be firewall issues or devices won’t have the performance required to stream smoothly. Features like scaling video for users on lower bandwidth connections, recording chats, transcribing speech, and smoothly handling moderation are all things that become much more difficult or demanding (and in some cases impossible) in a peer-to-peer architecture.
  • Complexity. While it is possible to engineer around some of these issues, doing so introduces a lot of complexity. Stoat has a small team with limited availability, so avoiding additional overhead is important to be able to actually get something out the door that can be maintained. A server-client model is also consistent with Stoat’s behaviour as a whole.

It is rather hard to describe or explain, but whenever anything lightly touches or brushes against the skin near where I have my magnet implanted, I interpret it as a magnetic field rather than touch.

It is such a weird sensation. It feels like there is a strong invisible magnet somewhere near me.

It is a bit like if you have your phone set to vibrate and you always put it in the same pocket. Whenever you feel anything in that area, such as material sliding against your skin, you automatically interpret it as your phone vibrating.

Imagine that, but you feel a different sense entirely.

A Complete History of Stoat

Sow discord to reap success.

An in-depth history of the Stoat chat platform. From its precursor Riot, through to all the additions and changes the platform has seen and received as it has grown. Details from when it was once Revolt to the change into Stoat and details of all the bumps and successes along the way.

https://vale.rocks/posts/stoat-history

Two places I studied at and got certifications from have shut their doors now. One of them has completely scrubbed itself from the web. I’d suggest this bodes rather poorly for my resumé.

Educational institutes watching in horror as I walk through the door and they realise they’ve got four years before they’re nuked from the face of this planet.

The AT Protocol Harkens An Old Web Ethos

Out with the new and in with the old.

Love for the beauty of the AT Protocol and the older web principles it revitalises with open, public data. The opportunity for integrations and automations as seen of the web from roughly the mid-2000s through to the mid-2010s.

https://vale.rocks/posts/atproto-ethos

Each time we see a major influx of users at Stoat, blocks come with it. An influx can see hundreds of thousands of users signing up on the platform over just a few days, so I can understand it looks suspicious. That’s a huge sudden increase in emails going out and a huge increase in traffic to the site. It probably trips some heuristics somewhere which generally do a good job to remove unscrupulous actors. However, sometimes, they get things wrong.

Ideally, if you get incorrectly blocked, you contact the blocker and they remove the block for you. If you’re lucky you get to go through several levels of support until you finally get to the people who can get you unblocked, then they give you a collection of forms and systems and processes to go through. If you’re unlucky, there are no means of escalation, and you’re simply out of luck – there are no means of appeal. If you do manage to get unblocked, then it’ll only be for a little while, because eventually they’ll do it again and you’ll have to do the process over. It is a futile effort.

The most common and aggressive blockers are internet service providers, email providers, email spam lists, and web filtering services provided by anti-malware companies. Companies that maintain filters for profit seem to keep their lists to themselves, so they’re not too much of an issue. ISPs and email providers and spam listers, however, do share their lists around. Once on one block list, you propagate to them all. Then you have to try to remove yourself from them all in quick succession, because the propagation only works one way. Blocks tend to propagate; unblocks do not. If there are blocks still remaining, then they’ll return, because getting a block removed does not add you to an allow list and merely removes you from the explicitly blocked list.

It is just a sad state of affairs. It really hurts little independent operations who can’t do anything about it. It especially hurts as it comes during periods of growth, where the team is preoccupied and users are forming first impressions. Established operations are obviously far less affected, and if anything does go awry, they have greater sway and lines of contact for resolution. The web is not as open as one would hope, especially when you can be arbitrarily blocked without recourse.

The way I see it, there were a few reasons one would opt to buy a game console:

  • Convenience. Computers take more effort to configure and aren’t optimised exclusively for gaming, so there is more to go awry.
  • Physical media. Owning games in a tangible format is pleasant, especially with included extras like posters and manuals. Discs can contain the game, removing the need for the internet for licence checks or lengthy download periods. A disc also cannot be entirely revoked in the same way a digital licence can. In 50 years, assuming I can find a working Xbox 360, a physical copy of Halo 3 will be playable without strife. Also allows games to be shared or sold, allowing for the existence of a second-hand market.
  • First-class controller support. Consoles are set up for use with controllers, and everything on them can be done via controllers. You never get into a state where you must reach for a mouse or keyboard during a console session.
  • Standardised hardware for optimisation. As the details of a console are known and fixed, developers can target this hardware in particular and achieve performance that isn’t possible when targeting a wider assortment of target platforms. Consider the quality of games on seventh-generation consoles despite their low specs.
  • Hacking and custom firmware. I’ve loved exploiting consoles and customising them or installing homebrew.
  • Console personality. Console interfaces used to have such character that made using them an event.
  • Social features. Consoles make coordinating gameplay easy. Being able to see friends online, create parties, easily voice chat, send messages, and invite people to games was a big deal. Almost every game with social features supports the console’s global social features, including things such as showing achievements.
  • Price. Due to being closed ecosystems with all games being produced via the console manufacturer, consoles can be sold at a loss.
  • Game exclusivity.

However, the ninth-generation of game consoles seem to have done away with most of these reasons, and the tenth-generation looks positioned to take it further. I’m struggling to see the benefit of consoles going forward. No physical media, no personality, very few exclusives (beyond Nintendo), lessened convenience (so many updates, system instability, advertisements and pop-ups everywhere), and increasing console prices.

I struggle to justify the price of a console when my computer will respect me more as a user, now has first-class controller support, allows me to play a wider variety of games (including emulating my existing collection), and the (very slightly) increased cost is offset by my computer being a general purpose machine. The only console I can see value in is a handheld console for the form factor, but even most of those are just general-purpose computers in a handheld form, rather than true console software experiences. Nintendo are perhaps the only member of the big three (Xbox, Sony, Nintendo) who have a device worth purchasing in the Switch. It isn’t perfect, but at least offers experiences that aren’t better done by a computer.

I hope you’re hungry, because we’re serving a greatly improved experience over on PersonalSit.es. We’ve got some cleaned up data and much improved tagging, so you can filter for and check out specific niches.

PersonalSit.es OG image

I delisted a few unfortunately dead sites and such while fetching a complete new set of images, which will be up soon. Also fixed a colour-contrast issue while adding dynamic light/dark switching.

It is sad to say goodbye to things, even things that are silly to be sentimental about. I was added as the primary moderator of what was then the Revolt Lounge in mid-2023. It was my ‘in’ to working on Stoat, and as such, is a special server for me, but all things come to an end. Today, after a solid five-year run, the Stoat server upon Stoat is being overhauled to focus exclusively on the platform itself rather than being a general discussion hub.

I’ve long pushed for the server to be kept around as a melting pot of everyone on the platform. It is a great way to keep a finger on the pulse of the community, and it has led to a great deal of valuable discussions leading to great outcomes. However, Stoat is of such a size now (1.4 million users) that it is time for the server to take on a new form.

It is good and healthy for Stoat as a platform to avoid centralisation of users in one server. It lowers it as an attack vector for undesirable behaviour, freeing up more resources for platform moderation, and it also prompts users to disperse around the platform. More individual thriving servers is good. More niches, more communities, greater variety.

It is sad to see it change, but it is time for change to happen. My thanks to everyone I’ve had pleasant conversations with over the years.

I was really happy with the new loading behaviour I implemented so I’ve been eagerly showing everyone my beautiful new throbber and now human resources has scheduled a meeting with me. I can only assume they want to see it too.

The police just rolled up to check it out as well.

Years ago my father passed on to me his fishing watch, which was released by Casio and purchased by him in the ’90s. It is well worn and has a fantastic ‘fishing time’ function, which is what he bought it for. It shows the moon age, moon phase, moon angle, sun rise/set time, and optimal fishing time based on the aforementioned. This data is based on the longitude and latitude that can be set in the menu. It also has typical features: alarms, light, stopwatch, etc.

A largely grey and very well worn watch. The bottom display portion shows typical watch functions, but the upper portion shows a small moon phase graphic, a single fish, and a waving tide with one segment active. The screen is illuminated a bright blue.
My FT-200 with Movement Module No 1879

I’ve previously paid for battery replacements by professionals, but when the battery needed replacing recently, I figured I’d give it a try myself. For my future reference:

Remove the back plate and pull out the mechanism, getting leverage by depressing the watch’s buttons if needed. Once removed, unclip the metal shield from the plastic. Take care, for there is an extremely miniscule spring inside the watch that is liable to be lost.

There is a small clip holding the battery in place. Release it and replace the 3-volt CR2016 battery. Next, the movement can be reassembled (remain aware that said spring also has a tiny extension on one side which sits inside the movement to stop it moving freely), and an AC reset can be performed. Using a wire or tweezers or what have you, the AC pad (labelled) should be connected with the positive terminal of the battery. This watch face should now be populated. The watch can then be reassembled.

The usage manual with explanation of the fishing functions can be found here: https://www.casio.com/content/dam/casio/global/support/manuals/watches/pdf/18/1879/qw1879_EN.pdf

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.