Live data from Hacker News

Bill Atkinson has died

daringfireball.net

281–290 of 295 posts

Re: Bill Atkinson has died

#282
post #270

I asked Bill if he thought I could become an engineer even after earning my degree in sociology and political science. I really enjoyed writing software at the time but had no formal training. He laughed as he did and said of course, and you will be better than most. He found it as a strength and not a weakness. I will miss him.

These degrees tend to prepare you quite well for programming, since at top-tier universities they are quite heavy on use of R and statistical modelling.

I'm willing to be a cup of coffee that the OP's degree and Atkinson's advice preceded the existence of R. I'm going to excerpt a mid-80's interview of Butler Lampson from Susan Lammer's book 'Programmers At Work' to illustrate my guess at what Atkinson might've been thinking...

LAMPSON: I used to think that undergraduate computer-science education was bad, and that it should be outlawed. Recently I realized that position isn’t reasonable. An undergraduate degree in computer science is a perfectly respectable professional degree, just like electrical engineering or business administration. But I do think it’s a serious mistake to take an undergraduate degree in computer science if you intend to study it in graduate school.

INTERVIEWER: Why?

LAMPSON: Because most of what you learn won’t have any long-term significance. You won’t learn new ways of using your mind, which does you more good than learning the details of how to write a compiler, which is what you’re likely to get from undergraduate computer science. I think the world would be much better off if all the graduate computer-science departments would get together and agree not to accept anybody with a bachelor’s degree in computer science. Those people should be required to take a remedial year to learn something respectable like mathematics or history, before going on to graduate-level computer science. However, I don’t see that happening.

Re: Bill Atkinson has died

#283

Earlier quoted context omitted.

> In fact the folks at PARC had never accomplished it, and they later told him they were amazed that he had done so. Reminds me of the story where some company was making a new VGA card, and it was rumored a rival company had implemented a buffer of some sort in their card. When both cards came out the rival had either not actually implemented it or implemented a far simpler solution

Michael Abrash's black book of graphics programming. They heard about a "buffer", so implemented the only non-stupid thing - a write FIFO. Turns out the competition had done the most stupid thing and built a read buffer. I teach this lesson to my mentees. Knowing that something is possible gives you significant information. Also, don't brag - It gives away significant information. Just knowing something is possible m…

> Turns out the competition had done the most stupid thing and built a read buffer

This isn't really stupid though as explained in the pdf

> Paradise had stuck a read FIFO between display memory and the video output stage of the VGA, allowing the video output to read ahead, so that when the CPU wanted to access display memory, pixels could come from the FIFO while the CPU was serviced immediately. That did indeed help performance--but not as much as Tom’s write FIFO.

VRAM accesses are contended, so during the visual display period the VGA circuitry has priority. CPU accesses result in wait states - a FIFO between the VRAM and the VGA means less contention and more cycles for CPU accesses

Why improve read performance though? Games accessing VRAM I presume would be 99% write. Perhaps it was to improve performance in GUIs like Windows?

Re: Bill Atkinson has died

#284

Earlier quoted context omitted.

> But how was the region implemented? The source code describes it as "an unpacked array of sorted inversion points". If you can read 68k assembly, here's the implementation of PtInRgn: https://github.com/historicalsource/supermario/blob/9dd3c4be...

Yeah those are the horizontal spans I was referring to. It’s a sorted list of X coordinates (left to right). If you group them in couples, they are begin/end intervals of pixels within region (visibles), but it’s actually more useful to manipulate them as a flat array, as I described. I studied a bit the code and each scanline is prefixed by the Y coordinates, and uses an out of bounds terminator (32767).

It's a bit more than that. The list of X coordinates is cumulative - once an X coordinate has been marked as an inversion, it continues to be treated as an inversion on all Y coordinates below that, not just until the next Y coordinate shows up. (This manifests in the code as D3 never being reset within the NOTRECT loop.) This makes it easier to perform operations like taking the union of two disjoint regions - the sets of points are simply sorted and combined.

Re: Bill Atkinson has died

#285
post #221

My time with Atkinson came before the Macintosh, before Hypercard. As a company Apple was struggling and we were preparing for what, in retrospect, was the really terrible Apple III. It was a less optimistic time -- after the Apple II and before the Macintosh. A digression: the roster of Apple-related pancreatic cancer victims is getting longer -- Jef Raskin (2005), Steve Jobs (2011), now Bill Atkinson (2025). The ov…

If there was a link, I would be thinking about all the superfund sites in Silicon Valley, pondering the manufacture of the Apple II, demographic clustering, or whether there was an unusually strong smoking culture at young Apple Computer, rather than some unique mental stress of the job.

Re: Bill Atkinson has died

#286
post #261

Earlier quoted context omitted.

This seems like something completely different? Livecode looks like just another toolkit or SDK for developing standalone apps, which might be great for the handful of developers using it but certainly doesn't do anything to re-shape how users interact with their computers

Nope, is completely the same base. Scroll the homepage, and you'll see an example of Livecode (updated HyperTalk). You can open your HyperCard stacks, or MetaCard stacks, or Runtime/Livecode Stacks in their IDE, code, edit, etc, similar to what you would have back in Hypercard days, but with modern features, updates, and additions. It's backwards compatible with HyperTalk, its current language is an updated HyperTalk…

And how exactly does this re-shape the user's (not developer's) relationship with their computer?

Re: Bill Atkinson has died

#287

Earlier quoted context omitted.

HyperCard was the foundation of my programming career. I treated the HyperCard Bible like an actual Bible.

I miss the days of For Dummies, Bibles, and all the rest. If you'd read that thing carefully a few times, you usually knew your stuff. There was a finish line. Modern continual versioning and constant updates means there is no finish line. No Bible could ever be printed. Ah, nostalgia.

They don't make nostalgia like they used to.

Re: Bill Atkinson has died

#288
post #286

Earlier quoted context omitted.

Nope, is completely the same base. Scroll the homepage, and you'll see an example of Livecode (updated HyperTalk). You can open your HyperCard stacks, or MetaCard stacks, or Runtime/Livecode Stacks in their IDE, code, edit, etc, similar to what you would have back in Hypercard days, but with modern features, updates, and additions. It's backwards compatible with HyperTalk, its current language is an updated HyperTalk…

And how exactly does this re-shape the user's (not developer's) relationship with their computer?

it says "GUI coding built in"

Re: Bill Atkinson has died

#289

Earlier quoted context omitted.

Yeah those are the horizontal spans I was referring to. It’s a sorted list of X coordinates (left to right). If you group them in couples, they are begin/end intervals of pixels within region (visibles), but it’s actually more useful to manipulate them as a flat array, as I described. I studied a bit the code and each scanline is prefixed by the Y coordinates, and uses an out of bounds terminator (32767).

It's a bit more than that. The list of X coordinates is cumulative - once an X coordinate has been marked as an inversion, it continues to be treated as an inversion on all Y coordinates below that, not just until the next Y coordinate shows up. (This manifests in the code as D3 never being reset within the NOTRECT loop.) This makes it easier to perform operations like taking the union of two disjoint regions - the s…

[deleted]

Re: Bill Atkinson has died

#290

Earlier quoted context omitted.

Yeah those are the horizontal spans I was referring to. It’s a sorted list of X coordinates (left to right). If you group them in couples, they are begin/end intervals of pixels within region (visibles), but it’s actually more useful to manipulate them as a flat array, as I described. I studied a bit the code and each scanline is prefixed by the Y coordinates, and uses an out of bounds terminator (32767).

It's a bit more than that. The list of X coordinates is cumulative - once an X coordinate has been marked as an inversion, it continues to be treated as an inversion on all Y coordinates below that, not just until the next Y coordinate shows up. (This manifests in the code as D3 never being reset within the NOTRECT loop.) This makes it easier to perform operations like taking the union of two disjoint regions - the s…

Uhm can you better explain that? I don’t get it. D3 doesn’t get reset because it’s guaranteed to be 0 at the beginning of each scanline, and the code needs to go through all “scanline blocks” until it finds the one whose Y contains the one specified as argument. It seems to me that each scanline is still self contained and begins logically at X=0 in the “outside” state?
Post reply on HN