HNHacker News
TopNewBestAskShowJobs

klodolph

25,845 karma · joined August 31, 2009

Negative, I am a meat popsicle.
submissionscomments
klodolph··on Japanese verb conjugation the simple hard way
hanasimasu = 話します
klodolph··on Japanese verb conjugation the simple hard way
:(

Romaji are great, and in some ways more instructive because they reveal patterns which are otherwise a little hidden. You just have to realize that S+I is shi, T+U is tsu, etc. I don’t want to get too deep into it but there is a regularity to the language, and rules, and different choices of writing system reveals different pieces of the puzzle.

Next, the conjugation itself. There are massive categories of conjugations missing! Like, how do you get from taberu / nomu in this system to tabereru / nomereru? It turns out that these ichidan and godan verbs actually do have some differences in conjugation. Who’d have thought? (There is the -i stem, but there are other forms.)

klodolph··on JSON-LD explained for personal websites
I would encourage people who have the pragmatic bent to read about JSON-LD from the Google documentation for web sites;

https://developers.google.com/search/docs/appearance/structu...

You’ll also notice that a lot of the information is relevant to only a small subset of sites. Rotten Tomatoes can publish the critic rating for movies using JSON-LD, but that’s not relevant for me (even if I write a review for a movie).

JSON-LD is nice because it’s easy and it is actually used by search engines. Yes, it can duplicate information in the web page itself, but I think the dream of perfectly annotating information so it only appears exactly once in your document is, well, a dream of spherical cows and massless ropes. It takes human effort to make a webpage and I am ok with a little duplication in the final product. My <h1> duplicates information in <title> anyway.

klodolph··on JSON-LD explained for personal websites
I think if you are using Dublin Core, it’s because you’re a library. Maybe I am off the mark, but that is the sense I get from this—not all these standards should be used for all pages on the web.

I think you should just think about what metadata you actually care about, and the main metadata I care about (choose your own list) is authorship, publish date, last update, subject keywords, thumbnail (OpenGraph 1200x630), and summary.

There’s a long list of additional metadata that I could put in my webpages because there are standardized ways to do it, but, why bother?

klodolph··on JSON-LD explained for personal websites
IMO this is going overboard. Any time you are duplicating data from HTML into JSON-LD, consider just omitting that data from JSON-LD, unless the data isn’t consistently present in HTML (because it is a bitch to be consistent about this stuff).

I tried using RDFa and liked the property that it was theoretically less redundant, but switched to JSON-LD because it JSON-LD is just easier to get working. And this is speaking as somebody who uses a hand-rolled static site generator—the issue here is that whether information is present in the raw HTML is something contextual, and if something isn’t present in the HTML then you need to put it somewhere else or it’s not mechanically parseable from the page. Like, to a human reader, a post on “Alice’s Blog” is assumed to be authored by Alice, so I may omit the “by Alice” text from the document, and then I would want to put that metadata in the page some other way.

Putting the metadata in JSON-LD lets me just be dumb about it. The metadata is always in JSON-LD, and the HTML may or may not contain an explicit representation of that same metadata. Easy.

But the JSON-LD does not need to contain the URL of the page (which is <link rel=canonical>) or the title (which is in <title>), for example.

klodolph··on JSON-LD explained for personal websites
I have used JSON-LD in my own websites and found that it fills a separate need from semantic HTML. Your semantic HTML will specify things that the browser processes, like the title and headings. The JSON-LD data is metadata, like date created, date updated, tags, authorship. These things can be expressed in the HTML using micro data, but I stopped using micro data because JSON-LD was easier.

The JSON-LD I populate from the same data that I use to generate my site, and I use the JSON-LD metadata to generate things like index pages (list of blog posts from 2024, all posts related to topic X, etc). The main consumers of JSON-LD are search engines.

If you are interested in getting offended, then think about how we are also putting OpenGraph metadata in our web pages. Two different metadata formats for the same page.

klodolph··on I hate compilers
> Just like the difference between 'him' and 'her' is inscrutable taken out of context,

The context is pretty flexible, like "Do you know Jim? I saw him at the store." Or, "Do you know Jim? Fifteen days ago, I saw him at the store." There’s a relatively small universe of pronouns (him, her, that, who, etc) and the pronouns refer to a token nearby (in this case, Jim).

With machine code, there’s a massive set of jump offsets, and the referent isn’t a token, but rather a location to start processing.

> In fact, I think LLMs are actually surprisingly good at this kind of abstract symbol manipulation,

When you’re manipulating machine code, you’ve stepped away from abstract symbol manipulation and you’re just manipulating byte values now.

I don’t think your argument here is convincing. Maybe you can point to a demo or some architecture where this works. But my sense is this—once you start designing a harness to make LLMs capable of writing machine code, or designing an architecture for LLMs to write machine code, something in your implementation probably looks like an assembler, and something in your internal tokenization of the machine code probably looks like a higher-level language.

klodolph··on I hate compilers
> I'm evaluating them using an objective metric,

I don’t think the metric is at all reasonable, and the fact that it’s “objective” doesn’t make up for its other shortcomings. I don’t think we have a basis for agreement here—I think you’ve framed the argument in a way that supports a “calculus is hard” conclusion merely by defining “hard” in such a way that supports your conclusion from the start, but I think that approach is only useful as a way to win an argument, and we’ve failed to share ideas once you start using that tactic.

klodolph··on I hate compilers
> Calculus is definitely the harder task,

You’re only evaluating “harder” or “easier” based on the perspective of somebody who has a mammalian brain with millions of years of selective pressure to make it suitable for solving inverse kinematics problems.

The point here is that when we start constructing agents or tools with different architectures to ourselves, it makes sense to reevaluate notions of whether something is ‘hard’ or ‘easy’. LLMs are bad at counting not because counting is hard, but because their architecture makes it hard.

klodolph··on I Hate Compilers
No, I don’t think so. LLMs are good at a lot of simple tasks, but bad at certain simple tasks. Moravec’s paradox in a new iteration.

It applies to humans too. Calculus is “simple” but it takes something like sixteen years to train a human to do it, if all goes well. Meanwhile, most humans think that inverse kinematics is, like, the easiest thing in the world (it’s a super complicated task).

klodolph··on I hate compilers
I think the idea that AOT is inherently faster than JIT, or vice versa, is a thoroughly debunked idea.

You can have LLMs help you optimize code but I don’t think you can do this unattended for non-trivial code.

klodolph··on I hate compilers
> I don't see why that's the case. LLM trained on binary would totally see it, not?

It would not. You find the correct version by counting the number of bytes to the destination. LLMs are famously bad at this kind of problem (counting).

> Also the tool can also be running the test and a debugger.

The test needs to provide a good amount of signal. That’s too hard if you are throwing machine code at the wall.

In order for debuggers to work, you need some kind of model that describes what the code should do and what state the computer should be in after each instruction. That model is high-level code.

I can understand the intuitive appeal of training LLMs with machine code, but all of my experience with LLMs suggest that they are incredibly ill-suited to the task, and we just don’t have the capacity to train them to make useful machine code.

klodolph··on I hate compilers
On the off chance that you’re serious, that would result in disastrously bad output. The difference between “jmp $+15” and “jmp $+16” is inscrutable and the LLM would not be able to pick the right one without tooling.

That tooling is a compiler. The higher level, the better chance the LLM can be steered to good output. Machine code is hopeless, don’t bother.

klodolph··on Lore – Open source version control system designed for scalability
IMO this is just garden variety effects of being a programming influencer. It’s a weird position to be in.

I think being influential just does that to people, with high regularity.

klodolph··on Want your images back? Sure... That'll be $5!
Back in the 2000s I think a much larger fraction of the web was running out Chad’s garage.

You got a Pentium III and a DSL connection? Run a website! Run an IRC server!

klodolph··on The time the x86 emulator team found code so bad they fixed it during emulation
I think it’s pretty rare for files to be unbuffered like that. AFAIK it’s mostly stderr that ends up unbuffered, at least on Unix-like systems.
klodolph··on Show HN: Homebrew 6.0.0
I am, like, two minutes away from getting my configuration back on a fresh Mac or Linux system without Nix, so configuration management is just irrelevant to me. I am evaluating it as a package manager and a way to setup development environments.
klodolph··on Show HN: Homebrew 6.0.0
I’m not sure what I would get out of nix-Darwin. It looks like it does not solve any of the problems I am trying to solve? I don’t need or want configuration management on my personal systems, except for the web servers, which I manage using Terraform and Ansible (I am happy with these).

We use Nix at work for all sorts of stuff. Binaries run in production from Nix paths. Software we build has dependencies in Nix. People on workstations run commands from Nix paths. The OS is not Nix, but the Nix package manager looks like it’s on its way to consuming most of our dependencies. It is not used for building or deploying our code, though.

klodolph··on Show HN: Homebrew 6.0.0
I recently switched back to Homebrew from Nix, and the three big factors in that switch are:

- Brew seems to have better support for the packages it has, compared to Nix where it seems a percentage of packages are not as well maintained,

- Better Mac support; some Nix packages have features disabled on macOS, I think just because the maintainers of this packages don’t have a Mac for testing,

- Better UX.

Obviously I miss the reproducibility of Nix environments and the ability to easily create my own flakes with specific packages, but on the balance, Brew has won me back. (I still like Nix, and FWIW we use Nix at work.)

klodolph··on APC–2 – A professional record cutter for producing original playback discs
(I know you didn’t ask me)

I think a willingness to listen to unfamiliar albums and unfamiliar genres is all you really need. I look for “best of X” lists, which get posted everywhere from actual newspapers to niche sites nline forums, Twitter, and personal blogs. Type in different values for “X” and you get exposure to more music.

klodolph··on APC–2 – A professional record cutter for producing original playback discs
That took my comment to a much darker place than I anticipated—I think basic marketing is ok, and even if you’re passionate about design, you still should be thinking about the business’s bottom line.

But, like, https://teenage.engineering/store/field-desk

Or maybe the TP-7 is a better example.

They are obviously following the playbook from brands like Supreme. At least in part.

klodolph··on APC–2 – A professional record cutter for producing original playback discs
Teenage Engineering seems to run partly on hype and halo effect. It makes cool things you can’t afford, and you buy something cheaper. Selling a vinyl cutting machine keeps them in the news, which keeps them in your mind, and then you think about how you always wanted an OP-1 but oh maybe you could buy the EP-133 instead.

I’m sure there’s a price at which the vinyl cutter is profitable.

klodolph··on Do we fear the serializable isolation level more than we fear subtle bugs (2024)
My experience is that there’s a percentage of developers who get it right and intuitively understand the serializable isolation level.

And database performance is a crapshoot. By “crapshoot”, I mean you mix some developers, data, and database technologies together and you get all sorts of weird performance profiles. Why sacrifice safety for performance, when you’re going to get performance problems anyway? It’s a lot easier to turn down the isolation level for a transaction, and it’s a lot harder to fix an unknown amount of inconsistent data in your database.

(The problem is that there are also a big cohort of developers who aren’t prepared to make their transactions retryable, and they’re writing their code in languages which don’t enforce transaction safety. By “languages which don’t enforce transaction safety”, I mean “languages other than Haskell”.)

klodolph··on Google to pay SpaceX $920M a month for compute capacity at xAI data centers
One of which has more capacity and wants even more, one of which has less capacity and is renting it out.
klodolph··on Go Experiments Explained
The reason why so many programs could be allocated upfront is because if they couldn’t, maybe we just didn’t write the program.
klodolph··on Go Experiments Explained
I’m leaving JSONv2 enabled and writing my JSON code to use that API directly.

From what I understand, it’s not default because there are performance regressions in some edge cases. But the typical performance is much better and the API is also much better.

To anyone writing new code that does anything with JSON—turn it on. Use it. I think it will be on by default soon enough anyway (1.27).

klodolph··on If AI data centers are so great, why are they being built in secret?
When I’ve visited the big data centers, they had gates and security relatively far out from the buildings. How would you get close enough? It’s not like the World Trade Center in 1993 where you can just drive up next to the building. (It’s also not like the World Trade Center in 2026 where there is an anti-terrorism perimeter of steel-reinforced concrete bollards, but somewhere in the middle.)

Of course there are also data centers in the middle of cities but these are smaller.

klodolph··on Should you normalize RGB values by 255 or 256?
It’s unbiased, but amplifies the signal.
klodolph··on macOS needs its grid back
Ah, I can see what you’re getting at. There is actually a system which is a better fit for me, which is the Mac. I can still run the software I want on it, and even though the security model isn’t tight enough, it’s improving.

Linux is also doable, but there’s extra work involved with setting up separate user accounts for running specific pieces of software, configuring namespaces for those processes, that sort of thing. But this is backwards. I’d rather start with a secure default state and have to configure exceptions. Back in the day I could get that from SELinux strict policies but it seems like those have fallen by the wayside.

klodolph··on Should you normalize RGB values by 255 or 256?
The 0.5 comes from debiasing the round-trip.

If your conversion from high precision -> 8-bit is just multiplication by 256 and then truncation, then you’ve got the mid-riser quantizer. The +0.5 comes from interpreting a value of 0 as bucket from 0-1, just like the value of 255 is the bucket from 255-256. It’s introduced in the conversion back from 8-bit to high precision.

← PreviousPage 4 of 34Next →