We've had SpaceFN functionality in products for over 20 years, and it's worked very well, but I don't think it's possible to completely eliminate the rollover problem. It's just something you learn to live with.
The Spacebar is very valuable real estate. It's the most frequently used key and the only key that both hands can reach without moving out of home position. Messing with a key that prominent is bound to cause problems -- I'm still surprised at how few those problems are, but they remain.
If you can adjust your typing technique slightly to work around the rollover, you're golden.
However, in exploring alternatives, I believe that another approach yields comparable results, without impacting the functionality of the Spacebar...
If you apply the Dual Modifier approach to Caps Lock and Enter (or the Return key on Mac), you get the same benefits and access to FN from both hands, while retaining full Spacebar functionality. Caps Lock and Enter are used much less frequently, so rollover becomes much less of an issue.
Just IMHO. Carry on... :-)
How far did you go in your attempts to eliminate the rollover problem?
Pretty far...
I tried a number of different approaches, and they each had their quirks. Ultimately, I settled on the one that worked best for one-handed typing -- which admittedly is a different application from what you're proposing.
One thing I have not been seen discussed is a way for the keyboard to understand that the user has begun typing normal text. When it detects this, it could make better decisions: space in this case should have a lower probability to be interpreted as a modifier (by changing timing variables). When the flow of text stops, space goes back to a higher probability to be a modifier. Indeed, you don't use navigation keys in the flow of typing text. You always pause (even if it's just for a split of a second) after typing before you use an arrow or a function key.
This thing could be fine-tuned to perfection.
I'm wondering if you have tried heuristics like the one I have described above.
I didn't try that one, but I'd guess that as you get more proficient, there will be fewer pauses, and your heuristics may break down.
You may also find that the heuristics are different for experts vs. novices, which would really complicate things.
My job is computer chess, so I tend to have a high threshold on what I call "complicated".
I guess the complexity limiter is going to be the limited RAM on keyboard controllers.
The space bar is so convenient, and you know it, that it's hard to consider anything else once you have tried it. I have a half baked implementation on my Mac done with KeyRemap4MacBook, it solves the rollover problem with a simple delay (space cannot be a modifier on the first 150ms after it's pressed), but it already works so well that I have been able to be productive in the first hour of use and after 3 weeks I'm not tired of it. Actually I want more of it.
If it works for you and you're happy with it, there's no reason why you shouldn't use it.
I'm just saying that it's unlikely that ALL the problems can be completely eliminated.
For example, your 150ms timeout works out to 80wpm. If your burst rate with spaces is slower than that, then you'll get rollover interference while typing. If you get very proficient, and your pause time drops below 150ms, you'll get rollover intereference using FN.
You may be able to tune it to each particular user, but that increases complexity.
It works but I'm not happy with it. It's just that KeyRemap4MacBook doesn't offer any other mean of dealing with rollover.
The 150ms timeout protects perfectly against rollover at very high typing speeds. Space cannot be interpreted as a modifier in the first 150ms after it is pressed, and the next key pressed within 150ms prevents spaceso you can type as fast as you want, no accidental Fn will be generated.
If you type slowly, you would have to keep space pressed for more than 150ms AND the next key would have to be pressed before space is released to get an accidental Fn.
In practice, what's wrong with this simple timeout idea is that you must press and hold space well before you press the next key to get the corresponding Fn action. You must hold it 150ms before you press the next key, which is short (approx. 1/7 of a second), but long enough that you need to be careful about it.
But this implementation is clearly not optimal anyway. That's not how I would do it in a keyboard controller.
Hasu has done a great job on this problem is his controller firmware already.
It may be noted that what's important is the keyboard+user system, not the keyboard alone. By this I mean that both can adapt to each other.
For example, I know that I must press and hold space a split of a second before I press the next key when I want an Fn layer action. Day after day I have adapted to this. It's a crude mechanism, and eventually it will be replaced, but so far it's very usable.
A user-independant heuristic would be to detect burst of typed text and dynamically make this timeout longer to reduce the risk of accidental Fn. When the user has stopped typing, the timeout could be significantly reduced.
A user-dependant heuristic would be to detect the error rate to adjust the timeout. How can we detect the error rate? When the user is typing, I think it's pretty safe to assume that he will use the Backspace key to correct a typo. If the last two characters typed have involved a space, we can gather some information.
So just with a crude timeout, adapting to what the user is doing or to the user itself may be possible. I'm not even saying that this timeout idea is correct, a correct implementation will be much smarter.
I concede that if I did not know that space can be used as an Fn key, I would say that CapsLock and Enter are pretty good candidates.
But the space bar is always under your thumbs. CapsLock and Enter are NEVER under any of my fingers unless I reach for them. And I prefer to generate a space by accident than an Enter.
Point taken.
Given the choice, I'd just as soon sacrifice CapsLock altogether and put a simple Fn key there. It may not be under my thumbs, but I can get to it REALLY fast.
Yes, in SpaceFN I think that an alternate mode is needed, one in which space really acts as usual. In can be useful for example if you want to play a game for a while. The gaming mode would restore the normal behavior of space and turn CapsLock into the Fn key.
It may be hard enough to convince people that they can hold the space bar down without doing any damage. I'd rather not be the one trying to convince them they can do the same with Enter...
Well, with the Spacebar, the penalty for errors is lower, but I think the probability of errors is higher.
The way I see it, space is a more risky choice for an Fn key, but is so valuable that it justifies trying harder to develop a more complex firmware/driver to correctly manage it.
It's crazy that I find myself advocating the use of space as a modifier to the guy who pioneered it. Hey, have you lost the faith? ;-)
Nice of you to say that but I have a lot of arrow holes in my back, so I can tell you it's a long journey for these kinds of ideas.
Also, I don't want to dissuade you from what you're doing. I'm just passing along my personal experience, and adding some data points. This may all be a matter of personal choice.
Yes I understand. On one hand, the general public is not going to buy the idea of using space as a modifier, and on the other hand heavy computer users will probably get it but they are going to be extremely picky and will not have much tolerance for any usability problem.
It's a hard challenge for a limited market.
I find your input valuable. What you say is helping me in the following way:
- It is not completely decided at this time if space can be safely used as a modifier. In spite of the various claims that it can, I should still be worried about it and look out for improvements.
- There are some obvious heuristics that have still not been tried, so there is hope that the use of space as a modifier can be improved further.
And I appreciate very much that you take the time to discuss with us. I don't remember that any other keyboard designer/manufacturer has ever taken the time to comment in such a discussion. It's like they believe they can spit out the magical keyboard layout without ever seeking input from advanced users. Which gives us horribly designed keyboards, and I refrain from mentioning names because some of them are… popular.