Readit News logoReadit News
jonhohle · 2 years ago
I miss this kind of playfulness in computing.

When I was at Amazon my manager told me that several years earlier he was responsible for updating the 404 page so he scanned a picture of a cat his daughter drew and made that the body of the page. In 2009 when I started, that was still the image, but at some point someone must have noticed and replaced it with a stock photo of a dog. The asset was still called kayli-kitty.jpg, though. It’s since been changed again to rotating pictures and references to the original are gone.

varun_ch · 2 years ago
This is really cool! The filename on certain Amazon 404 pages (eg. https://www.amazon.co.jp/404) is still kailey-kitty.gif (but the image has been replaced with a standard icon).

I also found this comment from him on a blog: https://www.davebellous.com/2006/09/25/what-the/#comment-290...

hgs3 · 2 years ago
> The compiler is 324k in size

Playfulness isn't the only thing we've lost. Software bloat has reached comedic levels.

retrac · 2 years ago
Your optimizing compiler today will actually optimize. LLVM was recently ported to the 6502 (yes, really) [1]. An example:

    void outchar (char c) { 
        c = c | 0x80;
        asm volatile ("jsr $fbfd\n" : : "a" (c): "a");
    }

    void outstr (char* str) {
        while (*str != 0) 
            outchar(*str++);
    }

    void main () {
        outstr("Hello, world!\n");
    }
That is compiled to this:

    lda #$c8       ; ASCII H | 0x80
    jsr $fbfd
    lda #$e5       ; ASCII e | 0x80
    jsr $fbfd
    ...
Unrolled loop, over a function applied to a constant string at compile time. An assembler programmer couldn't do better. It is the fastest way to output that string so long as you rely on the ROM routine at $fbfd. (Apple II, for the curious.) Such an optimizing transform is unremarkable today. But stuff like that was cutting edge in the 90s.

[1] https://llvm-mos.org/wiki/Welcome

Aurornis · 2 years ago
There’s nothing stopping anyone from going back and using all of that old software exclusively.

For some reason everyone prefers the newer software, though. Perhaps there’s more to it than binary size?

Deleted Comment

bigbillheck · 2 years ago
The clang executable on my machine is 18kb.
omoikane · 2 years ago
> picture of a cat

I couldn't find this elusive picture of a cat on archive.org, but I found this dog instead:

https://web.archive.org/web/20030113144310/https://www.amazo...

June 2016 appears to be when Amazon adopted the current error pages with the large dog images.

https://web.archive.org/web/20160612232820/http://www.amazon...

mastry · 2 years ago
jonhohle · 2 years ago
I misremembered the dog, it looks like they first replaced it with a ?⃝ icon. A later snapshot has the image name[0] but not the image[1].

mastry found a screenshot of the image in his sibling reply.

0 - http://g-ecx.images-amazon.com/images/G/01/x-locale/common/k...

1 - https://web.archive.org/web/20071030172825/http://www.amazon...

bazbamduck · 2 years ago
Go load www.amazon.com and check the source right after </html> :)
jonhohle · 2 years ago
That's wonderful to see. Also interesting to see the site performance comments around different components.

Another anecdote: somewhere in that time period we (Prime) were using comments for various metadata and pre-release and post-deployment checks would verify the comments were in place. The team responsible for the edge proxies decided they were going to rewrite all the HTML going out on the fly to remove extraneous comments and whitespace in an effort to reduce page-size.

In the middle of testing a release all of the tests related to a particular feature started failing and (I believe) different devs were getting different HTML on their systems (the feature wasn't rolled out to every session). Our QA team was extremely pedantic in the best way possible and wouldn't allow the release to continue until testing could complete, so we had to track down the responsible parties and get them to dial down their transformation. They eventually tried again without stripping comments, but I can't imagine much was saved after compression without much of anything removed (they might have been rewriting other tags as well).

layer8 · 2 years ago
Maybe the daughter sued for copyright infringement when she turned 18. ;)

Serious question: Is this possible when a guardian gave consent earlier?

jonhohle · 2 years ago
I know you’re joking, but she wasn’t 18 yet before they changed the picture.

AFAICT, kids own the copyright to things they create[0], but guardians are responsible and can use it on the child’s interest. IANAL, consult an attorney, etc., etc.

0 - https://www.copyright.gov/help/faq/faq-who.html#:~:text=Can%....

CalRobert · 2 years ago
Where does this playfulness persist? I miss it too.
notbeuller · 2 years ago
On the other hand, I despise the mock playfulness exhibited by, eg, Slack. It’s such a frustrating environment for me - I feel like it’s not-so-subtle attempts at promoting engagement over presenting the content fill me with rage. I want my tools to fade into the background.
jjoonathan · 2 years ago
The punishments continued until the playfulness went away.
beeburrt · 2 years ago
HTTP status code 418?
khiqxj · 2 years ago
> I miss this kind of playfulness in computing.

it's still right here every day when Firefox says "gah this tab crashed".

AnonC · 2 years ago
> "Symbol table full - fatal heap error; please go buy a RAM upgrade from your local Apple dealer"

Ah, the old times when one could purchase a RAM upgrade or upgrade RAM after buying a computer. Now this would be:

"Symbol table full - fatal heap error; please go buy a new Mac with more RAM"

grishka · 2 years ago
Not really. Classic Mac OS didn't support virtual memory so everything had to fit in RAM unless a program itself offloaded data it's not currently using to the disk. Modern OSes, however, all support swapping. Your compilation would continue, just much slower. To truly "run out of memory" on a modern computer, you have to fill up both the RAM and the disk.
IIsi50MHz · 2 years ago
Which version?

Regarding "everything had to fit in RAM": prior to real virtual memory, the Macintosh Resource Manager was capable of loading and unloading resources on the fly. Resources marked purgeable could be discarded when memory was needed. Code segments (another type of resource) could be loaded by automatically by the Segment Manager, but as you said would not unload until the application requested it or exited. INITs (system extensions) unloaded all code after initialisation by default (requiring extra steps to keep anything in RAM).

Virtual memory was built-in by System 7 (and I think available on supported hardware via 3rd party utilities earlier?).

catiopatio · 2 years ago
I understand the arguments for unified RAM on a SoC, but it’s still a shame; even the new Mac Pro doesn’t have RAM slots.
ShadowBanThis01 · 2 years ago
The soldered-in SSD is worse, though. The SSD WILL wear out, so then you get to throw away your Mac?
jonhohle · 2 years ago
The Mac Pro missing RAM slots was disappointing to me. Performance uber alles and all that, but upgradability has benefits as well. Until Apple started soldering RAM, I always did aftermarket RAM upgrades, and even recently doubled the RAM on a 12 year-old file server.
layer8 · 2 years ago
They could still allow adding more RAM that would just be slightly slower.
phendrenad2 · 2 years ago
You can always use a PC if you want upgradeable RAM.
LoganDark · 2 years ago
This is even more true today, because Apple Silicon Macs are able to store twice the amount of information in the same amount of memory, meaning that a paltry 8GB configuration can store 16GB of FizzBuzz boilerplate, 4 Google Chrome tabs, or 20% of the average node_modules.
smoldesu · 2 years ago
I don't think that feature is exclusive to Apple Silicon, or Macs.
mkovach · 2 years ago

  "a typedef name was a complete surprise to me at this point in your program" 
Ah, the joys of fun compiler messages. I miss those days. I remember getting one from a vendor compiler that was:

  "No! But they'll only let me warn you. Danger Will Robinson! Danger!"
and:

  "Really! If you are fussing around with void *, just go home or at least back to your editor!"
I think the IT manager kept that as a vendor just because of the message (the SDK was meh, but also fun!).

jimmaswell · 2 years ago
Not much of a C programmer, what's the context around void* being a big deal?
zer8k · 2 years ago
Void pointers refer to anything and nothing. They are everything and all encompassing. What is pointed to by the void pointer could be what you want or it could be another universe.

Dereferencing a void pointer has no meaning. The compiler can do anything it wants because it doesn't know how to interpret the memory. It could give you the correct thing, it could warp a civilization in from a distant planet, or it could open a world-ending black hole. All are equally probable.

rickreynoldssf · 2 years ago
I was programming on MacOS (the original) since it was possible. I remember many of these error messages! Especially "Too many errors on one line (make fewer)".

...also remember 45 minute builds when a header file changed.

w0mbat · 2 years ago
In those days I wrote exclusively system extensions, plug-ins and XCMDs, using a mix of 68k, C and Pascal. Each project was quite small, so compile time was never a problem and MPW was a paradise. My largest XCMD actually had bits in all 3 languages which MPW happily linked together, and some projects had various little blocks of code to stick in the same file, all of which could be automated easily.

I remember these error messages coming up and laughing out loud when I saw the rare ones. Nice work, whoever did it!

bondolo · 2 years ago
I used this compiler for years and eventually came to be able to “decompile” the 68k object code it produced back to C code in my head on the fly unless the function was too large. Using MacNosy I could rebuild the C source for an app in usually only a couple of hours. I had a script that converted a MacNosy file of an app into an assembler file and rsrc file and I could translate functions to C one at a time while having a buildable app equivalent to the original. I originally used the tools for hacking games but sometimes used it to fix bugs.

The MPW C compiler code generation was so predictable in part because of the symmetry of the 68k instruction set. They wrote a simple compiler and it worked. For the most part effort was spent elsewhere. Since you could reasonably predict what code would be generated if you were unhappy with the code generation you fixed the source. I like that the javac compiler has a similar ethos, With similar effect. Once you know the patterns to use you can generate fairly close to optimal byte code.

zabzonk · 2 years ago
My favourite syntax error message produced by the Glockenspiel C++ compiler (a cfront derived piece of junk that I used in a training company in the early 90s) was simply "core dumped". This was slightly tricky to explain to people already struggling with C++, and who had paid us money for the course.
unnah · 2 years ago
The users could simply run a debugger to get a backtrace from the core file... then with some experience, they would learn to associate different hex addresses with different kinds of errors. No harm, no foul.
zabzonk · 2 years ago
I take it that you have never worked for a training company :-)
13of40 · 2 years ago
"Call me paranoid but finding '/*' inside this comment makes me suspicious"

That, Sir, is none of your business.

Wowfunhappy · 2 years ago
...I kind of wish compilers supported nested block comments. So if there's a /* inside of a /*, it would take two */'s to end it.

Idk, maybe that would be a terrible idea in practice. But there are lots of instances where it would have saved me time.

duskwuff · 2 years ago
You're probably looking for "#if 0" / "#endif".
kevincox · 2 years ago
the D Language supports /+ and +/ as a variant of /* which supports nesting. So you can pick which you need for a given comment.
crazygringo · 2 years ago
Not terrible at all.

It's super-useful to temporarily comment out a bit of code, and then to comment out a larger block surrounding it. Especially when debugging.

Sadly I've never used a language that supported that.

Deleted Comment

arcanemachiner · 2 years ago
How about explicit depth levels, specified by asterisk count?

e.g. '/*' and '*/' would match each other, '/**' and '**/' would match, and so on.

That way, you would have full control of the depth of the comments, removing other comments wouldn't break the inner comments, etc.

I do run into the same issue you're describing, so I think there's value in the idea.

RGBCube · 2 years ago
FYI, Rust and many other modern languages do this.
pjmlp · 2 years ago
Already an option on Borland compilers for MS-DOS.
legobmw99 · 2 years ago
I believe OCaml does this
II2II · 2 years ago
Tangential to the content of the page: I really enjoyed how many MPW utilities generated output, including error messages, in the form of commands. Your terminal was an editor buffer, so you could cursor up (or click) on the appropriate line then press something like cmd-enter to pull up the file in question (among other things).
cschmidt · 2 years ago
I think it was just the enter key to execute the selected text.
II2II · 2 years ago
You're probably correct. I forgot that Apple labelled the enter key as return on the alphanumeric part of the keyboard and as enter on the numeric keypad. I recall some software (possibly MPW) treating cmd-return as enter. Or something to that effect. It has been about 20 years!
ilaksh · 2 years ago
Hm. Sounds like Plan 9.