295 karma · joined October 31, 2016
I also don't see how trying to emphasize empathy toward users translates to hubris. But sounds like you've got a bone to pick, so keep picking I guess.
This reminds me of frequent conversations with other developers when presented with a bug report. "That's not a bug, it's working as intended." The intention is wrong, then -- the bug is in the design, not the code, but it's still a bug.
Windows doesn't need or deserve defending. It's atrocious. But this is a silly comment.
But if you don't want to and still want to use an LLM, there are low-bar choices you can make (using a technical writing skill, using ASD-STE100 Simplified Technical English, choosing your audience, proofreading at the end with human eyes to make sure it makes sense and doesn't repeat itself uselessly).
I think it shows either a) low respect or consideration for your audience or yourself, or b) laziness.
Trust yourself to write even if it's bad. At least it's human.
There's a conflation too that to approach things with this level of thought and care requires waterfall design (it doesn't), so people shrug it off or resist because if you want to think carefully and design thoughtfully you can't also Move Fast and Break Things.
Ironically, we all complain about enshittification.
The software allows for fine-tuned settings, button remapping, etc. It is awful software, to be sure, but it's not necessary to use the mouse.
In awe at whatever inspired this though
Also, full disclosure, because this was written entirely for myself, the code behind it is 100% LLM generated. I set the specs and direction but didn't touch code at all, just let agents churn while I did my day job and tested the results later.
For the recommendations:
- Seed selection is performed by building a mix of seed artists from recent listening, lifetime favorites, old obsessions, and underexplored artists.
- Seed weight combines `log(1 + play count)`, track diversity, number of listening months, and a recency decay
- Candidates are generated at the union of artists reached by "similar artist" edges through Last.fm and MusicBrainz-enriched local data (APIs are used to enrich DB initially, then after that it's all offline)
- Discovery excludes known artists, hidden and recently-reviewed artists
- Discovery requires edges with at least two distinct seeds, or one strong seed edge
- Discovery is scored by similarity (Last.fm + tag), feedback, and rediscovery thresholds. Then score is subtracted for excessive knownness within a genre, obviousness, recommendation fatigue, and shallow prior listening. The thresholds are by default but configurable:
```
0.35 × calibrated Last.fm similarity
+ 0.25 × calibrated tag similarity
+ 0.10 × rediscovery
+ 0.10 × feedback
```
- Serendipity is additional score provided when a candidate connects several seeds that are themselves weakly connected, or are in separate connected components. This is a weak implementation of the Auralist serendipity algorithm, and will be improved on.- Finally, diversity reranking; a greey MMR-style reranker.
```
rerank score = λ × candidate score
− (1 − λ) × similarity to already selected results
```1. A music recommendation tool based on Last.fm scrobble history.
It's graph-based, no ML or "fancy" techniques, but I've had good results with it so far. It builds recommendations based on a listening window or just recent history. It combines several different recommendation algorithms (including an Auralist-inspired "serendipity" score for novel recommendations, meant to simulate the serendipity of being recommended something novel by a friend), scores and ranks candidates, and takes in feedback that inform subsequent recommendations.
Fun project. Found some good new music with it already. :)
2. A code exploration / indexing tool with CLI and MCP interfaces for exploring concepts and impacts of changes in a codebase.
Essentially, an overwrought "find all uses" that doesn't depend on exact symbol or string matching.
I have a codebase of non-trivial size, but thankfully it's fairly well-structured. This tool indexes the code and bundles modules into "concepts" -- these can be auto-discovered or preconfigured. Dependencies, inheritance trees, symbols and symbol usage are all also indexed.
Then you can ask, "what's the impact of extending the domain model of XYZ" or "I want to remove this property" and it shows where to start, where to look next, and fuzzy edges or dependencies that might need deeper exploration. It surfaces non-obvious connections, too, or things a junior dev (or LLM) might miss, like when a model is mapped to an API DTO, or intermediary states, etc.
It's been useful for a new dev exploring the codebase, because you can ask in terms of business concepts instead of needing to know the exact symbol name in the code. And it's been much more token efficient than grep for exploration subagents. But it's limited to dotnet only.
The Dissolve alumni are all (mostly) writing at various publications: https://thedissolve.com/
While David Bordwell sadly passed, his blog is still a great resource (books, too!) and actively updated: https://www.davidbordwell.net/blog/
I've been spending some time creating a Visual Studio theme using this palette and the way that IDE uses colors is... less than great. Trying to find the right token to change is an exercise in madness, and many things that are visually the same in importance/hierarchy use very slightly different shades for some unknown reason.
I appreciate how hard it can be to make a good dark mode; I've spent months building a custom dark theme I term "mid-contrast". It's still WCAG compliant, but easy on my eyes, and I've stuck with the (maybe silly?) requirement of 16 colors only, like Solarized.
But more importantly, as a coding agent, it follows instructions much better. I've frequently had Claude go off and do things I've explicitly told it not to do, or write too much code that did wrong things, and it's more work to corral it than I want to spend.
Codex will follow instructions better. Currently, it writes code that I find a few notches above Claude, though I'm working with C# and SQL so YMMV; Claude is terrible at coming up with decent schema. When your instructions do leave some leeway, I find the "judgment" of Codex to be better than Claude. And one little thing I like a lot is that it can look at adjacent code in your project so it can try to write idiomatically for your project/team. I haven't seen Claude exhibit this behavior and it writes very middle-of-the-road in terms of style and behavior.
But when I use them I use them in a very targeted fashion. If I ask them to find and fix a bug, it's going to have as much or more detail as a full bug report in my own ticketing system. If it's new code, it comes with a very detailed and long spec for what is needed, what is explicitly not needed, the scope, the constraints, what output is expected, etc., like it's a wiki page or epic for another real developer to work from. I don't do vague prompts or "agentic" workflow stuff.
Anyway, I think this generation is missing out on the experience of building in a real RAD environment. I'm more on the backend, but from what I see the pinnacle is fast hot reload, which pales in comparison to what could be.