HN user

Tallain

246 karma
Posts1
Comments115
View on HN

The death of what.cd was also the end of an era for me. I know "replacements" have popped up but the real value of what wasn't in the piracy, it was in the community. It was the best on the internet and nothing has taken its place since.

It's published but I would doxx myself by posting the link here -- I can email you if you'd like.

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
    ```

Two things right now:

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.

Another recommendation is LinearMouse. It lets you fix pretty much every problem that MacOS inflicts on mouse users: pointer acceleration, scroll behavior, click/button behavior. This and Karabiner make the OS much more usable for me.

Very interested to know how you built this; I'd like to see similar data for my own dump even though I quit Spotify some time ago.

Maybe silly is the wrong word. But sometimes I think I would make things easier on myself if I allowed some shade variants. It's good for me to keep the constraint though.

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 do wish there was more conversation around the levels of blackness for dark modes. Black screen and white text is physically painful for me. I usually have to resort to reader mode, or open up dev tools and change colors myself, to make a page like this readable for me.

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.

This continues to be the most tiring response to any criticism of LLM output. It's pretty much guaranteed to show up at this point. I guess with similar enough input tokens, we're guaranteed the same output...

In my experience, Codex / ChatGPT are better at telling you where you're wrong, where your assumptions are incomplete, etc., and better at following the system prompts.

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.

Delphi has an amazing RAD environment. For building small, self-contained desktop apps (with cross-platform support!) it beats any other modern offering... if you can get past the ecosystem. The language and ecosystem very much show their age.

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.

Fair argument, these devices (the Hiby R4, in particular, which is the one I have) are absolute tanks. Way too heavy and big to throw in your pocket for any reason, especially if you use a case. Still, it's nice to be able to (sort of) carry my own library around and never need internet to listen to it.

I think Fiio and Hiby are the closest that exist today. They have dedicated hardware and physical buttons for the things listed in your comment. However, they do still ship with a custom Android OS and you need the touch screen to navigate your library and such. On the upside, this lets you choose your media library app. On the downside, it still isn't as good as the touch wheel on old iPods. I, too, am waiting for something like this to return. The Hiby is good enough until then for me.

When I looked for a Plex alternative I settled on Emby. It still has some "premium" features but they're all just QOL, not necessary things. The base app is great and even has handy little features Plex doesn't, and so far, it runs on all the same devices with a much snappier UX on the client side.

This is the same setup I used for years with no issues, both KeePassXC and multiple Obsidian vaults, along with some other random files and folders. Syncthing is pretty much rock solid. Now I have the KeePassXC database stored on my NAS which is even simpler.

The DSM isn't the only book, and is not the singular source of diagnosis around the world, so believing that because CPTSD is not in the DSM and therefore doesn't exist is also disingenuous.

The ICD does have an entry for Complex PTSD, but it may not match what many people think of as CPTSD, which from what I see is closer to what Bessel van der Kolk called "developmental trauma."

I don't see how any of these could be considered "mystery" veggies in most contexts, let alone on pizza.

You can find a condo cheaper and also much more expensive. There's also often a hidden "farang tax" where you will be charged more simply because they know you can pay more, regardless of the quality of the place. This is where the variance comes in. It happens with certain services, especially things like taxis (but not Grab or Line Man).

But yes, Bangkok / Thailand in general has huge wealth disparity. There are a lot of people living on very little money, and some people grossly rich.