HN user

breadbox

3,118 karma

My personal website is at muppetlabs.com under my username.

Posts122
Comments425
View on HN
www.charlespetzold.com 1y ago

Very Wrong Math

breadbox
192pts105
www.muppetlabs.com 4y ago

My Own Private Binary: An Idiosyncratic Introduction to Linux Kernel Modules

breadbox
5pts1
bit-player.org 4y ago

Does having prime neighbors make you more composite?

breadbox
2pts0
bit-player.org 4y ago

Riding the Covid Coaster

breadbox
2pts0
bit-player.org 6y ago

MathJax Turns 3.0

breadbox
3pts0
bit-player.org 6y ago

We Gather Together

breadbox
3pts0
medium.com 6y ago

The Expanding Universe Might Not Depend on How You Measure It, but When

breadbox
2pts0
shadycharacters.co.uk 6y ago

Emoji, part 10: state of the nation

breadbox
2pts0
www.syfy.com 6y ago

Battle of the bulges: Have astronomers been wrong about spiral galaxies? (2019)

breadbox
57pts29
bit-player.org 6y ago

The Teetering Towers of Abstraction

breadbox
5pts0
www.muppetlabs.com 6y ago

Bootstrapping Understanding: An Introduction to Reverse Engineering

breadbox
148pts10
www.syfy.com 7y ago

Battle of the bulges: Have astronomers been wrong about spiral galaxies? (2019)

breadbox
5pts0
shadycharacters.co.uk 7y ago

Emoji, part 6c: to infinity and beyond?

breadbox
31pts31
bit-player.org 7y ago

737: The Max Mess

breadbox
35pts44
www.charlespetzold.com 7y ago

Reflections on Rereading “Slaughterhouse-Five”

breadbox
2pts0
www.muppetlabs.com 7y ago

Show HN: A Colorized Hexdump Tool

breadbox
3pts0
www.muppetlabs.com 7y ago

Bootstrapping Understanding: An Introduction to Reverse Engineering

breadbox
3pts0
shadycharacters.co.uk 7y ago

The trouble with emoji (part 6a)

breadbox
1pts0
medium.com 7y ago

Is There a Fourth Neutrino Out There in the Universe?

breadbox
128pts41
medium.com 7y ago

Is There Really a Fourth Neutrino Out There in the Universe?

breadbox
1pts0
languagelog.ldc.upenn.edu 7y ago

Chinese translation app with built in censorship

breadbox
4pts0
www.techdirt.com 7y ago

Goolnik Gets Google to Forget Story About Him Getting Google to Forget About Him

breadbox
1pts0
bit-player.org 7y ago

The Mind Wanders

breadbox
1pts0
www.eff.org 8y ago

Author Trademarks the Word 'Cocky,' Earns the Ire of Romance Writers Everywhere

breadbox
2pts0
medium.com 8y ago

The 4 Scientific Lessons Stephen Hawking Never Learned

breadbox
2pts0
www.elsewhere.org 8y ago

The Secret Racist History of Clickbait

breadbox
3pts0
bit-player.org 8y ago

The Threats to the Net

breadbox
1pts0
languagelog.ldc.upenn.edu 8y ago

Is there a practical limit to how much can fit in Unicode?

breadbox
2pts0
www.nytimes.com 8y ago

How the Appetite for Emojis Complicates Unicode's Standardization Efforts

breadbox
1pts0
medium.com 8y ago

The Hubble Space Telescope Is Falling

breadbox
2pts1

So I read the other article, and I saw that bit that disagreed with my essay. My first thought was, "Oh, of course that's how it works. How did I get that so wrong?" My only excuse was that this essay was originally a tech talk and I was under a deadline. (But I really should have caught it when I wrote it up as an essay.)

So I was going to go edit my essay, when I learned that my essay was also posted on Hacker News. And now I discover that someone has already called out my error before I could fix it. Sigh.

Anyway, I just thought I should acknowledge this before I go to fix it.

I couldn't help myself. Despite my better judgement, I wrote an extension to my original essay specifically dissecting this response. (It's now linked at the bottom of the original page.)

Thanks for sharing this transcript with me.

I don't think that's a fair characterization of the statement. It's the type of mistakes, not the bare fact of them, that suggests a lack of what we could call "understanding".

If I complain about an answer given to me by one librarian, I'm complaining about that answer and that librarian. If you can find a more knowledgeable librarian somewhere else, that doesn't affect my complaint.

But to be clear, there are no screenshots in the essay. I assimilated the HTML directly into the document.

Look, I understand your point. I really do. But I feel that (perhaps due to one or more of your acknowledged biases) you're applying the wrong context to the situation at hand.

Namely: this is INTERCAL. There is no freaking standard. The "standard" is a 60-page text file written in 1973. The current compiler was written 90% based on this joke-filled document, and 9% new ideas because ESR came up with something even more ridiculous. (The remaining 1% was Don Woods responding to emailed questions by consulting his memory. He still has paper copies of the SPITBOL source code, but the original compiler hasn't been run in over 50 years.) There is no standard because at any given time there are at most three people on the planet who care one iota about INTERCAL standardization, and are only willing to put in any effort if it would be funny. So, for example, the question of what sort of randomness the double-oh-seven operator is contractually required to use is simply not a contextually relevant question.

You seem to be suggesting that it might be possible, even thinly so, that Chat-GPT somehow misapplied a strict standard of randomness in the formation of its response, instead of simply papering over a hole in its knowledge with a bit of improvised plausible-sounding guesswork, a well-documented behavior of both Chat-GPT and thinking entities worldwide. If not, then I humbly apologize for misunderstanding your point. Otherwise, I must politely agree to disagree.

And I'm sorry that my essay rubbed you the wrong way. Perhaps one day you will find it better than you do now, but if not then I hope it passes from your memory quickly.

And again, a heady mix of accurate observations with complete bullshit. Separating out the misinformation is, as always, left as an exercise for the reader.

Nice to see another approach to this subject! Kudos to the author.

I have a couple of responses to specific points brought up in the article.

The author suggests that the original 45-byte executable no longer works on modern systems. If so, this is news to me. Admittedly my current machine is a bit behind the cutting edge (4.15), but what's there should still work. If people are finding the current version to fail for them, I'd appreciate some details on their setup.

* I respectfully disagree that 32-bit executables are "less relevant" today; I suspect they will continue to be supported for many, many years to come. Of course for a new explorer 64-bit executables are far more interesting, but when you're shaving bytes at a time, you can't beat a 32-bit executable.

* Many people are unaware that my original essay is only the first of a series that I wrote. (All of the essays are linked at the bottom of the original.) I note that my smallest 64-bit ELF executable without introducing invalid fields is also 120 bytes, so that's cool.

* However, by taking advantage of unvalidated fields, I was able to produce a working 64-bit ELF executable that is 84 bytes in size. The overlapping is a bit tricky, but I've verified that it continues to work on my box. See http://www.muppetlabs.com/~breadbox/software/tiny/return42.h... -- all variations of my return-42 executables are collected there.

* My smallest 64-bit ELF executable that prints "hello, world\n" (no punctuation: I always use the string from K&R) is 98 bytes. I don't have the assembly for that one posted on my site, but it uses the same layout as the 86-byte executable.

I find I need to quote myself from 2013, as I can't really add anything further to it:

Wow. I honestly wasn't expecting to ever see this on the front page of HN again, given the current ubiquity of 64-bit Linux. (And yes, before anyone asks, I've played around with minimizing 64-bit executables. Unfortunately they are both larger and less forgiving of tomfoolery. The smallest 64-bit ELF I've created is 84 bytes.)

Since it is here, though, I want to take the opportunity to say thanks to everyone who's expressed their appreciation of my essay. And I should note here that writing that essay, so many years ago now, is one of the better thing I've done for my career. Share what you have to learn the hard way; the effort won't be wasted.

Is the author stating that _start is an interface to the OS then? It's interesting I never thought of this as being an interface.

Perhaps it's not the best term, but it's not really incorrect. I probably wouldn't phrase it that way today (20 years later).

Is this just a long-winded way of saying _start sets up the stack for the new process? WIthout a stack you can't "set up" argc, argv etc.

Well -- to be precise, the stack is created by the kernel during the exec system call. The kernel also copies the argument and environment strings into the process's memory. However, the kernel does not create the argv array of pointers, or the envp array. Building those arrays is the job of _start(), and that is what I meant by "setting up argc and argv".

Please note: That was the case back in 1999. Things are different now -- I think it changed with the 64-bit kernel? In any case, nowadays the ELF loader in the kernel also builds the arrays.

I would also be curious what "among other things" might include.

As before, it depends on the C runtime. The _start() function might ensure proper initialization of libc, for example. (Again, with current binaries that's usually done via an `.init` section, but in 1999 that was not the norm.)

(Note: I'm assuming from the reference to "map layout" that this comment is directed at the original article, and not the video mentioned in the parent comment.)

Reading the assembly language is what many (perhaps most?) people would do at that point. But not everyone is as comfortable with reading assembly, and I wanted to show that a lot can be done without taking that step.

Also, "easier" is a relative term. It was far, far easier for me to examine the data files sitting comfortably in front of my Linux box, than to try to pull together a decent debugging setup inside of a dosbox before making any headway. There's always more than one way to do it.

Yes, part of the usual process of making a tiny binary is jettisoning much of the overhead that debuggers depend on in order to find their way through an external program. Not just the debugging symbols themselves, but things like section header tables and maintenance of linked stack frames in the running code. Dumping all of that saves space, at the expense of making the resulting binary more and more opaque.

Fascinating! Thanks so much to the company for writing this followup -- every year or so I've wondered how this company was doing and if the experiment was still going. It's heartening to learn that it is.

Of course it's a bummer. Reading about sexual abusers getting away with same is always a bummer. But remember that this heads-in-the-sand attitude of I'd-rather-not-find-out is how these people get away with it in the first place. It's how Catholic priests continue to prey upon their own communities.

In short, don't shoot the messenger.

C for All 8 years ago

And therein lies the issue. Everyone does just that, causing needless clashes. If you're writing a library, you can either switch back to the standard type names in your external header file, or you include the typedefs/macros there as well. The former choice ruins some of the point of having these types, and might even mask cross-platform issues. The latter runs the risk of clashing with the user's owns typedefs, or with another library writer's typedefs. (And god help you if exactly one library writer chose to do it via macros.)

While the article is strongly sympathetic to Padgett's answer, various hints seep through that Padgett is actually a bit of a crackpot, and his solution is a bit of a Bible Code. Nothing too obvious, but the sort of thing one recognizes from reading about other crankery. And then, two-thirds of way into the article:

Most Elgar scholars I contacted said they have stopped responding to Padgett’s persistent inquiries.

Sigh. This sentence should have been in the lede.

Interesting, but isn't this kind of the opposite of "do it live"? I would think "lip synch" would be a better name for it.

I've done a couple of live presentations in my career (in fact I just did one last Friday). I think they're great for audiences, when the circumstances permit. People connect to the physicality of the typing in a way that looking at some screenshots just doesn't provide.