B0073D | 1 year ago | on: PiML: Python Interpretable Machine Learning Toolbox
B0073D's comments
B0073D | 1 year ago | on: Wigle.net: All the networks, found by everyone
B0073D | 2 years ago | on: Clicks – Physical keyboard for iPhone
B0073D | 2 years ago | on: Cursor – The AI-First Code Editor
B0073D | 2 years ago | on: Oscilloscope watch ships after 10 years on Kickstarter
B0073D | 2 years ago | on: Splitting the Web
B0073D | 2 years ago | on: The Psychology of Cults
B0073D | 3 years ago | on: Jaccard Index
I essentially wanted to use this as a way to flexibly filter out items without having to come up with a regex for every line item.
I wonder if anyone has done this before...
B0073D | 3 years ago | on: Sweet Home 3D is a free interior design application
Of course you did....
Gods above I love org-mode.
B0073D | 3 years ago | on: Dwarf Fortress’ graphical upgrade provides a new way into a wildly wonky game
B0073D | 3 years ago | on: Animating Prompts with Stable Diffusion
B0073D | 8 years ago | on: Supreme Court Sides with Consumers–Affirms Your Right to Repair Stuff
B0073D | 9 years ago | on: Notepad++ V 7.3.3 – Fix CIA Hacking Notepad++ Issue
Then again I've seen a few of Linus' emails... shrugs
B0073D | 9 years ago | on: Pixel Recursive Super Resolution
Do any datasets even exist where the images are at sensor pixel level?
That way the model would 'know' about imaging effects (I can't think of any specifically mechanical effects that could be in play here right this second) etc?
Or am I way off base here....
B0073D | 9 years ago | on: Tile Studio: development utility for graphics of tile-based games
B0073D | 10 years ago | on: Fiat Chrysler Faces Record $105M Fine for Recall Lapses
B0073D | 10 years ago | on: How Naughty Dog Fit Crash Bandicoot into 2MB of RAM on the PS1
Here's a related anecdote from the late 1990s. I was one of the two programers (along with Andy Gavin) who wrote Crash Bandicoot for the PlayStation 1.
RAM was still a major issue even then. The PS1 had 2MB of RAM, and we had to do crazy things to get the game to fit. We had levels with over 10MB of data in them, and this had to be paged in and out dynamically, without any "hitches"—loading lags where the frame rate would drop below 30 Hz.
It mainly worked because Andy wrote an incredible paging system that would swap in and out 64K data pages as Crash traversed the level. This was a "full stack" tour de force, in that it ran the gamut from high-level memory management to opcode-level DMA coding. Andy even controlled the physical layout of bytes on the CD-ROM disk so that—even at 300KB/sec—the PS1 could load the data for each piece of a given level by the time Crash ended up there.
I wrote the packer tool that took the resources—sounds, art, lisp control code for critters, etc.—and packed them into 64K pages for Andy's system. (Incidentally, this problem—producing the ideal packing into fixed-sized pages of a set of arbitrarily-sized objects—is NP-complete, and therefore likely impossible to solve optimally in polynomial—i.e., reasonable—time.)
Some levels barely fit, and my packer used a variety of algorithms (first-fit, best-fit, etc.) to try to find the best packing, including a stochastic search akin to the gradient descent process used in Simulated annealing. Basically, I had a whole bunch of different packing strategies, and would try them all and use the best result.
The problem with using a random guided search like that, though, is that you never know if you're going to get the same result again. Some Crash levels fit into the maximum allowed number of pages (I think it was 21) only by virtue of the stochastic packer "getting lucky". This meant that once you had the level packed, you might change the code for a turtle and never be able to find a 21-page packing again. There were times when one of the artists would want to change something, and it would blow out the page count, and we'd have to change other stuff semi-randomly until the packer again found a packing that worked. Try explaining this to a crabby artist at 3 in the morning. :)
By far the best part in retrospect—and the worst part at the time—was getting the core C/assembly code to fit. We were literally days away from the drop-dead date for the "gold master"—our last chance to make the holiday season before we lost the entire year—and we were randomly permuting C code into semantically identical but syntactically different manifestations to get the compiler to produce code that was 200, 125, 50, then 8 bytes smaller. Permuting as in, "for (i=0; i < x; i++)"—what happens if we rewrite that as a while loop using a variable we already used above for something else? This was after we'd already exhausted the usual tricks of, e.g., stuffing data into the lower two bits of pointers (which only works because all addresses on the R3000 were 4-byte aligned).
Ultimately Crash fit into the PS1's memory with 4 bytes to spare. Yes, 4 bytes out of 2097152. Good times.