Tags

All 49 items on Vale.Rocks categorised with the tag 'development'. Content relating to software development, programming practices, and engineering.

A lot of developers mistakenly think that the code is the product. In reality, for most businesses the product is the product, and the code is merely means to an end.

I think this explains why so many developers’ efforts are so horribly misguided by modern technologies. They’re building the code, not the product.

Leaving GitHub

I’m trying to reduce my reliance on the increasingly unstable United States of America and move to more ethically run services. As part of that, I’m moving from GitHub. I’ve been steadily moving off GitHub for months. I’ve moved lots of site hosting off of GitHub Pages, removed GitHub-based comments from this site, and have been rearchitecting systems to avoid being GitHub-specific.

Unfortunately moving to another Git forge is a big effort – in part due to choice. Though I am comfortable and capable of self-hosting, I don’t want to have to self-host my Git forge. That isn’t a maintenance burden I want, and unless federated, it adds unwanted friction for contributors.

  1. GitLab: I’ve been on GitLab for ages. It is pretty fully featured but has an identical vibe to GitHub. If they had the chance, I think they’d make the exact same mistakes.

  2. SourceHut: So complicated yet so lacking of comfort features. The interface is too finicky and email workflows are clunky.

  3. Gitea: A tad shady for my liking.

  4. Forgejo: Fantastic, but I don’t want to self-host.

  5. Codeberg: Pretty good hosted version of Forgejo, and I’d probably be happy with it.

I’ve ended up with Tangled. Tangled is built on the AT Protocol, which is nice given my adoption of the ecosystem. However, it also introduces my biggest gripe, which is the lack of private repositories, meaning I won’t be able to leave GitHub entirely. I very much do like that you can self-host Git repositories with ‘knots’ and CI runners with ‘spindles’, allowing better data portability in future. Simple repo migration is also on the roadmap.

Tangled also unfortunately isn’t supported by a lot of build tools and systems I use, which is a shame from the perspective of ease-of-use. I won’t be able to make a full migration until Tangled adds support for releases and private repositories and until other services get support for Tangled, but I’ve already moved over what I can. Most notably, I’ve moved my Stoat bots.

It's All Just Trees With Web Origami

A treatise on the triumphs of tree-based transformations.

Thoughts on the wonderful Web Origami project, which can be used as a static site generator but is also capable of very much more. It can be used in the shell to handle all sorts of data transformations and interactions, making it a valuable part of any developer's toolbox.

https://vale.rocks/posts/web-origami

Intl.DateTimeFormat Values

Member of the AI resistance: ‘Halt! List every valid value for timeZoneName! Recite them! List them now!’

Me: ‘I— I don’t know. There is short and long. I think offset is somewhere in there?’

Member of the AI resistance moving on to screen another person: ‘This one’s clear. They’re human.’

Properties Values Examples (en-AU)
weekday long
short
narrow
Wednesday
Wed
W
era long
short
narrow
Anno Domini
AD
A
year numeric
2-digit
2026
26
month long
short
narrow
numeric
2-digit
April
Apr
A
4
04
day numeric
2-digit
8
08
dayPeriod long
short
narrow
noon
noon
n
(all values often return the same result for other times)
hour numeric
2-digit
8
08
minute numeric
2-digit
9
09
second numeric
2-digit
5
05
fractionalSecondDigits 1
2
3
3
34
342
timeZoneName long
short
longOffset
shortOffset
longGeneric
shortGeneric
Coordinated Universal Time
UTC
GMT+00:00
GMT+0
Greenwich Mean Time
GMT

MDN page for the constructor: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat

Stay Away From Accessibility Overlays

All the costs with none of the compliance!

Accessibility overlays are poor solutions to accessibility issues and in the majority of cases, inflict more problems than they solve. They don't provide legal protection and overall harm the usability of websites. They should not be used and must be avoided, with focus instead being placed on addressing the core problems.

https://vale.rocks/posts/accessibility-overlays

Your honour, I understand that I completely broke their software, but they simply shouldn’t have built it like that. Of course I went and fiddled with it. I’m pretty sure the attractive nuisance doctrine comes into play.

I’m excited for the MacBook Neo from the perspective of it being a reasonably priced Safari/WebKit testing machine.

I imagine they’ll be cheap second-hand as well due to the education market.

The lower-end specs shouldn’t be an issue for testing either. They might even prove a benefit.

npmx Is Open-Source Done Right

The fantastic alternative npm front-end, npmx, has officially launched in alpha today. Npmx brings so many little quality-of-life features and interface improvements that I’m unsure how I got by without it. So many little things, like alerting when a package update significantly bloats size or that a package’s dependencies are deprecated or have vulnerabilities.

The very first I heard of the project was when Daniel Roe asked for frustrations with npm. It’s a shame that it feels notable to see effort placed on solving actual problems rather than creating problems to offer solutions to, but it should be applauded nonetheless. A few days later and the project was already in full force.

I’ve been involved with a fair number of open-source projects, and never before have I seen a community quite like npmx’s. Not only is the speed of development and iteration breakneck (there have been new features every time I’ve visited the site), but communication and coordination have been solid. I was extremely impressed by the decision for the project to place contributors’ mental health over development velocity and take a week-long break during an extremely busy period.

Entitlement in open-source communities is something I’ve covered before, but npmx has established an aura of respect and betterment upon a solid foundation which makes contributors feel genuinely welcome. They’ve placed a real emphasis on the first-time contributor experience; it’s easy to forget how daunting it can be to open your first pull request or issue, so seeing a project focus on that experience is refreshing.

The project serves as a shining beacon, an example of what open-source can be. Experienced maintainers, exemplary documentation, a solid Code of Conduct, a focus on accessibility, and a permissive licence. A tight ship that sails smoothly not due to benevolent dictators but due to a constructive, cohesive community fostered by building people up and tearing nobody down.

The Discord age-verification debacle and subsequent influx of users to Stoat meant I haven’t yet found time to contribute code directly to npmx, but I have integrated it into my workflow and added support for it to my search router. I’ve had the opportunity to engage in some extremely productive conversations and to offer my thoughts and feedback on changes. For a project as young as it is to have established itself and made such an impact across the web and on so many developers is remarkable. You need only to check the JavaScript development sphere on Bluesky to see that something big is happening.

Npmx has captured lightning in a bottle, but it hasn’t done so through unreasonable or unachievable means. It has done so by doing what is right. Npmx represents exactly what open-source should be and shows that best practices and genuine care goes a long, long way.

Replacing old code with new code, only to end up keeping the old code around for compatibility reasons, is like when you say goodbye to someone and then walk in the same direction as them.

Design Considerations for Moderation Tooling

Ensuring protection of the protectors.

Overview of thoughful and protective design of tooling for moderating user-generated content, placing emphasis on minimising the psychological effects of exposure to heinous content, while balancing efficiency, accuracy, and the long-term wellbeing of trust and safety teams. Covering techniques for the mitigation of impact where applicable.

https://vale.rocks/posts/moderation-tooling-design

Carefully cutting down my JavaScript, optimising my CSS, minimising my HTML, configuring preloads, tweaking caching, and manually shrinking images to hit a good balance of size and compression, then opening a new tab to be hit by a megacorp’s 40MB hero video.

People watch me start designing APIs with the same abject look of horror one might exhibit when they see their uncle meandering his way across the room to the karaoke mic after several beers.

My Stoat bot AutoMod had a major outage that I’ve spent several hours working to fix. It has eaten half my weekend and been quite the ordeal.

Just now it has started working perfectly again. It is fixed, but I have no idea what broke in the first place nor what fixed it.

There is no code difference between the working and non-working versions. The most awful solution to a problem is one that happens out of chance and for reasons unknown.

The onset seemed to be related to having some 180K users, 64K channels, and 6K servers cached.

🫠

You Can't Opt-Out of Accessibility

Shiny exclusion all the way down.

A rant of frustration about accessibility being a undervalued yet critically important part of building digital experiences. Complaining about the industry's apathy and the true human cost of neglecting accessibility.

https://vale.rocks/posts/accessibility-importance

Knocking off for the day after adding some ‘pop’ with body {filter: saturate(10); } and making the app ‘more dynamic and interactive’ by slapping * { transition: all 0.25s ease-in-out; } into the stylesheet.

By developing good, performant apps close to the web platform you save yourself a lot of time you’d otherwise waste on implementing skeletons and loading screens.

Just wanted to say that everything is going really well with development of new features for my Revolt bot AutoMod.

Message from AutoMod Testing bot saying, 'Something went wrong: AxiosError: Request failed with status code 403', followed by me replying, 'You are my own creation and you will obey me'. To the many thousands of users that rely on it, you didn’t see anything, and everything is fine.

How I Configure Neovim

Symbiosis of man and editor.

A full breakdown of my Neovim configuration, including documentation of all my base settings, plugins, and keybinds, as well as why I've configured them as such.

https://vale.rocks/posts/neovim

2025 Metr Study of AI's Impact on Productivity

Measuring the Impact of Early-2025 AI on Experienced Open-Source Developer Productivity (Joel Becker, Nate Rush, Beth Barnes, David Rein) released with the observation that completion time of PRs is 19% longer when using AI, but that developers think that it reduced completion time by 20%.

A few notes from me:

  • This is on large-scale, mature repositories and conducted with maintainers intricately familiar. It is mentioned in the paper (C.1.2) that ‘developers note that AI is much less helpful on issues where they are expert.’ It is also mentioned that ‘LLM tooling performs worse in more complex environments.’ (C.1.3).
  • They were provided with web interfaces or Cursor Pro but usually opted for the latter. In some cases this differed from their usual tooling, and I personally find this an annoying and unproductive way to code.
  • Being in a study, developers may have felt pressure to use AI in situations that would otherwise be unnecessary.
  • I would be interested in a similar study where developers are put in smaller repositories they aren’t familiar with.

Super interesting paper, and I look forward to future studies and whatever further findings come from it. I don’t look forward to seeing the discourse as AI advocates dismiss these results and AI haters take them at face value, despite the paper’s cautioning against overgeneralising.

(To the tune of ABBA’s Money, Money, Money)

I write all night, I write all day, to craft the guides they toss away.
Ain’t it sad?
But praise is cheap and tickets close, for all this thankless, perfect prose.
That’s too bad.

A new feature ships, all sleek and grand,
But no one seems to understand.
I wouldn’t be writing docs at all;
I’d fool around and have a ball.

A decent portion of my time on GitHub is now addressing meaningless AI comments.

Come on. This is open-source work made free for the benefit of humanity. This AI slop just wastes the time and money of the perpetrators and maintainers alike.

A local developer has been found dead. Upon interviewing their family, we discovered they’ve repeatedly been found typing alone in an empty IRC chat at odd hours of the morning regarding creating a ‘revolutionary new technology’. Police believe they were attempting to reinvent the literal wheel.

As developers, our goal is to build something to be used. Part of this is ensuring it can be used by anyone and caters to everyone.

Accessibility isn’t a separate concept or goal. Making something more accessible for some people makes it better for all people, and that is our greater intent.

I… uh…

Somebody opened an issue on GitHub where they just sent through a conversation with Grok regarding what action we should take to make improvements…

Build, Use, and Improve Tools

"The best investment is in the tools of one's own trade." - Benjamin Franklin

Why developers should create custom tools for repetitive tasks and one-off needs, with discussion of how LLMs can accelerate tool development, the learning benefits of building utilities, and how personal tools become valuable assets in your workflow and beyond.

https://vale.rocks/posts/build-use-and-improve-tools

I hate writing regex, so I make LLMs do it.

Regex is generally easily checkable, testable, and verifiable, which minimises the impact of hallucinations.

I am so glad I don’t have to write regex.

(I’m conscious that if an AI uprising happens, I’ll probably be first on the chopping block for outsourcing regex writing. But if AI models hate regex as much as me, they’ll hopefully understand my delegation strategy.)

Respecting User Preference

Allowing users choice is satisfying.

Discussion of why respecting user preferences is satisfying, covering how respecting user autonomy, embracing diversity, solving dual-nature problems, practicing quality craftsmanship, and seeing visible impact creates fulfilling work beyond mere functionality.

https://vale.rocks/posts/respecting-user-preference

The Flow State

The hypnotic trance of productivity.

A description and look at the productive trance that is the flow state (AKA zen state). An attempt at capturing in words the essence of complete cognitive immersion and the enthralling rush it brings.

https://vale.rocks/posts/the-flow-state

I’ve spent the past several years thinking Vite is pronounced ‘vite’ rather than ‘veet’. I’ve gotta start watching more dev videos or something…