Yeah, I was going to say, 40ms seems a bit out there. If you consider a touch typist typing 100WPM, that's about 8.3 characters/second, or about 120ms / character. You may think 40ms is fast enough to accommodate that, but not really. Typing is bursty by nature, and so many of those consecutive keystrokes will come close together. If you scan too slowly, you might see two keys "become active" on the same scan, and end up reordering them. At 40ms, that seems entirely likely for a touch typist at 100WPM.
10ms seems far more reasonable.
So, GGGP was less wrong than stated, but for the wrong reasons. Huzzah! That is a rather strange defense. "I thought I was supposed to go south, when actually I was supposed to go north. But, I misread the roadsign and got on a road that goes northeast, so I ended up not too far from my destination. See? I'm not a bad navigator!"
Anyway, in the interest of actual analysis:
Let's go at the low end: 10kHz. And let's pick a beefier keycode, say "R CTRL", that has a 2 byte scan code. No, we're not going to benchmark the hilarious pause key. Get real. The vast majority of the scan codes are 1 byte anyway.
The time to send a key down event should be 2 bytes * 11 clocks, or 22 clock periods at 10kHz. That's 2.2 milliseconds. The time to send a key-up event should be 3 bytes * 11 clocks => 3.3 milliseconds.
Both of those seem pretty fast. The OS itself, though, and whatever layers there are between the PS/2 connector and the OS, will add their own latency. But in a race between a PS/2 keyboard and a USB mouse? I think they're going to both be well under 50ms in any case. 50ms is 20Hz, which is "Intellivision games from the late 70s" speed.
I think it's probably fine to store non-empty cells as objects, as long as you use something like the Flyweight pattern to avoid carrying too much baggage in each cell. It makes for a fine user interface, I'm sure.
To really get good recalc performance, though, you really need to drag the cell dependence graph out of the grid and treat it like an actual program. Once you do that, you could actually JIT the computation represented by all those cells. If you're really walking the object forest for every recalc, you'll never speed up.
I'd like to see you implement an AND gate with just XORs and NOTs. Use as many as you like...
In all seriousness, you can build all other gates from NANDs. Or from NORs. In fact, that's how the Cray 1 was built, apparently. Tons and tons of ECL NAND gates.
Someone else (who I think I saw here on Slashdot the last time Voyager was mentioned) had a great analogy for what we're likely seeing. I can't take credit for this at all, but I think it makes a lot of sense.
Suppose we're a small probe, making our way off an island, down the beach, and into the ocean. All we have is a wind-speed detector, and a water detector. As we near the water, waves start lapping over us. When they do, our wind-speed detector says "no wind", and our water detector says "we're wet." Have we entered the ocean yet? The answer is "not quite, but we're really darn close."
It doesn't seem surprising to me at all that the boundary neither perfectly uniform, nor stationary in time. I think we'll be in this transition band for a while.
Even if this is discrimination, I'm also not clear that this is discrimination against fathers. It might well be discrimination against mothers. Fathers only have to spend eight weeks caring for the new baby. Mothers have to spend twelve.
After which you send it to the centralized child care facility, so the child is never a burden to either parent ever again?
I'm pretty sure both parents are on the hook for child care for as long as the child is a child. The issue is whether they're also on the hook for going to a job other than raising their child.
My high-tech employer only offers TWO weeks paid paternity leave. TWO. Not the generous eight that Yahoo! offers. That was probably considered progressive in the US in the 60s, but seems hopelessly behind the curve in high tech today. One of my coworkers took an extra two weeks out of his own vacation time to spend a total of four paid weeks with his newborn daughter.
I personally have 8 weeks of vacation time built up, because work keeps me busy enough that I never feel like I can take the time I'm entitled to off. I don't even feel like I can ask for the time off, and it's technically already mine. The culture works against it. We're a country of workaholics, and we're made to feel bad when we ask for a little space.
If we really wanted to do things "right" here in the US, I'd have to ensure I built up a big enough cushion that my wife and I could remain unemployed (and thus, unpaid) for a couple years. And then, hope I could find a job after 2 years out of high tech. Hmmm... yeah, seems unlikely. Or, at least, feels unlikely, even if perception doesn't match reality.
Ah, the American dream: To make enough money that you no longer have to work for a living. For the vast majority of us, it will always remain a dream.
Why it is that every time the moron politicians of the world reach for the cutting budget scissors they cut education, healthcare and social programs?
Hint: It's usually a rich politician whose family and friends wouldn't suffer the cuts directly. They sell it by painting the beneficiaries as slackers that are a drain on society, as opposed to the reality. These things solidify the very base of society.
Net result? An ever widening chasm between the haves and the have-nots. That chasm strains the very notion of society.
A mathematician is a device for turning coffee into theorems. -- P. Erdos