Wilfred's Avatar

Wilfred

@wilfredh

Programming languages, human factors, and a healthy dose of Emacs.

112
Followers
220
Following
171
Posts
19.07.2023
Joined
Posts Following

Latest posts by Wilfred @wilfredh

Writing type params with <> (e.g. List<Int>) seems the most natural to me: probably because I encountered that syntax first.

Between C++, Java and TypeScript I think it's the most common too.

List[Int] seems to be next most common (Scala, Python) but TIL Gleam uses List(Int)!

08.03.2026 22:58 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

Agentic programming workflows rather remind me of genetic programming. The agent has a validation step that looks like a fitness function, and both run iterative trials.

07.03.2026 17:21 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

I'm still not sure whether a language should include a "kitchen sink linter" like Rust's clippy or have a package oriented "thousand flowers bloom" linter like eslint for JS and TS.

Clippy is delightful out of the box but eslint makes it so easy to have project specific lints.

05.03.2026 10:51 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

Is there a good term for "after using this feature we realised that the best design is different from the current design"?

In casual conversation I generally hear "bug" but there was nothing wrong with the original implementation.

05.03.2026 10:30 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

I'm super impressed by how many lint rules can be implemented with just eslint's no-restricted-syntax and selectors. Example:

{
selector: "ExportNamedDeclaration[declaration=null][source=null]",
message: "Add `export` directly to the function instead of a block export."
}

01.03.2026 22:47 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

There's something pleasingly self-referential about configuring an agent by talking to it.

> Remember that [fact about data formats].
Agent: Noted.

... realise nothing happened ...

> Write to your rules file that when I say "remember", I want you to write to the rules file.

01.03.2026 22:32 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

Should lint suppressions be first class syntax or comments?

Adding a proper metadata system (e.g. Clojure or Rust) is a big design space but it's clear which expressions are affected.

Comments are much easier to implement but it's easy for users to get them wrong.

Thoughts?

27.02.2026 22:14 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
An ode to houseplant programming πŸͺ΄ Waxing poetic about hyperlocal phytoid software development

I enjoyed this article about personal project programming, but I particularly liked this definition:

"Production code has a phone number to call when it breaks"

hannahilea.com/blog/housepl...

26.02.2026 12:20 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

Looks great!

Have you considered reducing the size of the images? E.g. highly-expressive-macros.png is nearly 1 MiB on its own and I can see the images gradually load on my current limited wifi.

23.02.2026 04:17 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

One fun way of testing new AI models: take an existing codebase you have and just ask them to "review it and fix bugs".

In principle this should find more issues over time as models get smarter. I've found a few bugs this way at least.

19.02.2026 22:52 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

Cleaned up an old git repo of Ansible playbooks and it's amazing how much is just Docker now.

Docker handles process supervision, centralises logging, and containers coexist without issues. It's nice when things get simpler.

17.02.2026 10:10 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

After further playing with my LLM project, I'm surprised how hard it is to tune with system prompts.

My agent kept saying "obviously" even though my prompt said "helpful, professional". Eventually I found that a "courteous" prompt gets "of course" which is better but not ideal.

14.02.2026 22:10 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

I've been tinkering with an LLM interface with my calendar and it's really nice to use.

"Delete my April trip" is a lot less fiddly than opening calendar, switching to the month view, scrolling to April and so on.

I should probably build an undo as well though.

14.02.2026 13:45 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
Here are all the phones that support bypass charging, and why you should use it Few phones on the market can draw power directly from the wall, bypassing the battery while charging. But are the benefits tangible enough?

Today I learnt about "bypass charging", a phone feature where it can run directly off the mains without using the battery at all. No battery charging, less heat, less battery wear. Nifty.

www.androidauthority.com/phones-with-...

07.02.2026 20:56 πŸ‘ 1 πŸ” 2 πŸ’¬ 0 πŸ“Œ 0
WebP image format | Can I use... Support tables for HTML5, CSS3, etc

I'm considering using WebP more: for example, my websites would load faster and browsers have supported it since 2020: caniuse.com/webp

That said, GitHub just added support in August 2025, so I suspect I'd still find use cases that don't work yet: github.blog/changelog/20...

05.02.2026 23:09 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

Test code is total: we require it to always terminate or it's a failure! It also typically has 100% line and branch coverage.

I feel way less nervous about refactoring tests, you can always just run them.

05.02.2026 10:00 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

I certainly see the appeal of an LLM system with full context and tool use (OpenClaw), but the lethal trifecta puts me off deploying it.

I do like the idea of an agent with a heartbeat though. A bunch of nice cron-style workflows can be built on top.

04.02.2026 20:35 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Date picker showing today

Date picker showing today

Date of birth pickers are a surprisingly nuanced UI problem.

What do you pick as the initial value? How do you allow users to easily move by large amounts (years) as well as small amounts (the exact day)?

Defaulting to today and even allowing future dates is funny though.

03.02.2026 10:24 πŸ‘ 3 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Wilfred miniblog An archive of microblogs

I've written a website that archives all my posts/tweets/toots/skeets across different microblogging platforms!

It's fun to be able to see similar posts that I wrote at completely different times. It also lets me edit links that have bitrotted.

miniblog.wilfred.me.uk

29.01.2026 22:52 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

When I moved back to the UK, I ordered SIMs for both myself and my wife. We ended up with consecutive numbers!

It's really convenient sometimes.

29.01.2026 15:53 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
AI Benchmark Tool - Best AI Models 2025 | Compare Claude vs GPT vs Gemini Ultimate AI benchmarking tool for 2025. Test AI performance, compare AI models, and find the best AI for coding. Real-time AI benchmark results and LLM performance tests.

An AI benchmark website that tries to run comparable benchmarks regularly to discover when LLM performance is degrading:

aistupidlevel.info

25.01.2026 16:24 πŸ‘ 4 πŸ” 1 πŸ’¬ 1 πŸ“Œ 0
Designing a Programming Language for the Desert A high-performance and high-level purely functional data-parallel array programming language that can execute on the GPU and CPU.

Futhark's design is deliberately trying to stay simple to keep long term design sustainable.

The author also has an interesting discussion of relative versus absolute paths in import syntax, and how relative paths can make local analysis easier.

futhark-lang.org/blog/2018-06...

23.01.2026 00:10 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Open Source is one person The Register recently published a story titled Putin on the code: DoD reportedly relies on utility written by Russian dev. They should be ashamed of this story. This poor open source developer is gett...

The vast majority of libraries have a single maintainer. Even if you weight by downloads, roughly half of downloaded libraries have a single maintainer too.

opensourcesecurity.io/2025/08-oss-...

22.01.2026 20:14 πŸ‘ 3 πŸ” 1 πŸ’¬ 0 πŸ“Œ 0
Preview
Prompting 101: Show, don’t tell Improve your prompts with better examples rather than better instructions

Show, don't tell: effective advice for writing for both LLMs and people! www.haskellforall.com/2026/01/prom...

18.01.2026 16:49 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

I've been working on a search tool for a website with 9K items and a dumb implementation works just fine. I'd normally gravitate to a library or tool like elasticsearch (ES).

Adding custom filters etc is trivial on handrolled code. I wonder what scale requires actual search infra like ES.

18.01.2026 00:30 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

I see people advocating for writing a FAQ, but I really struggle to write one from scratch.

The best FAQs are written as a response to, well, frequent questions.

How do you populate the initial FAQ?

16.01.2026 10:26 πŸ‘ 2 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
LLVM: The bad parts

Wonderful post from the lead LLVM maintainer reflecting on how the project is run, the design issues in LLVM today, and opportunities to make it better:

www.npopov.com/2026/01/11/L...

16.01.2026 10:03 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

My default assumption is that external libraries are better than what I (or an LLM) would write in a v1.

The extra effort to publish a project generally signifies that the author has spent a good amount of time on the problem. I end up prompting LLMs to prefer external code.

15.01.2026 20:06 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

LLMs are great at style transfer, and this works surprisingly well for syntactic transformations too.

I rewrote a small website's EJS templates to 1500 LOC of TSX with a oneshot in Claude. It took ~12 minutes, but it just worked.

(TSX seems nicer than EJS for static analysis.)

15.01.2026 00:07 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

It seems really odd to me that git uses 'cached' terminology for staging. For example, `git add somefile.rs; git diff --cached`.

Caching implies state that you don't mind losing. There's very little state I want to lose in version control!

14.01.2026 23:05 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0