Author Topic: Balanced Keyboard Layout  (Read 70463 times)

philippe.quesnel

  • Valued Member
  • ***
  • Posts: 67
    • View Profile
Re: Balanced Keyboard Layout
« Reply #1300 on: April 04, 2018, 09:32:09 AM »
After trying these CLPs out, going back to BEAKL15 (same thing when trying out X7-1H), I noticed right away how the reach to middle columns bothered me.

So .. my latest layout craziness : take the digits out of the beak syms layer as suggested to free up some nice spots.
And tried "putting the squeeze" on BEAKL15, ie reduce distance by moving the mid-column stuff to the altGr layer and reorganize puncs/syms some.
This of course ends up being at the expense of other measurements, but I am getting interesting results.
Less finger strain, more "brain strain" ! have to get use to this, it is not as intuitive

Gives something like this, the [?] keys are the moved ones.
Tried to keep same fingers (same hand of course) as much as possible..
D stays on main taking M's place, M G W go to AltGr
I also swapped the  , / keys on the left hand
and moved down (squeeze, squeeze !) some of the symbols from the top row, kept the easiest positions (longest fingers)
Code: [Select]
  q h o u [x]  [g] c r f z   
- y i e a [.]  [d] s t n b ;
  j , / k [']  [w] d l p v   
 
    % _              ^ ~     
  : < " >  `       [ = ] @   
- \ ( . ) #      $ m { } | ;
  * - x ' !        g w + &   

« Last Edit: April 04, 2018, 09:36:41 AM by philippe.quesnel »

philippe.quesnel

  • Valued Member
  • ***
  • Posts: 67
    • View Profile
Re: Balanced Keyboard Layout
« Reply #1301 on: April 04, 2018, 11:38:39 AM »
Ian, you had asked about scripts / programs that could help in creating / converting KLA json files,
you might want to have a look at a small go program I wrote : https://github.com/phques/txtkbd2kla
It's pretty basic, but it helps

iandoug

  • Hero Member
  • *****
  • Posts: 793
    • View Profile
    • Keyboard Design
Re: Balanced Keyboard Layout
« Reply #1302 on: April 04, 2018, 11:58:18 AM »
I have it brought it up in the design of my phonetic script. (http://shenafu.com/smf/index.php?topic=117.msg1661#msg1661.) Such that 'TH' and 'NG' should be their own new single letters. Where TH is common in European languages, and NG is common in Europe, Asia, and Africa.

As for how to implement it on a keyboard. What are some ideas without inventing a new letter? Macros? Autocorrect? Replacement? (e.g. typing z becomes th).

Oddly enough I was thinking along these lines the other day, thinking that we really don't need existing 26 letters in English, eg Q or X sounds can be made with other letters.
On the other hand we could do with more vowels, so we can get away from that silly "magic e" that turns rat into rate and not into note etc.

FWIW if you're gonna substitute th with something for phonetic reasons you'll need two characters... for hard and soft th.

But don't get me started on redesigning English spelling... whole different ball game, where smarter people than me have tried and failed (so far).

iandoug

  • Hero Member
  • *****
  • Posts: 793
    • View Profile
    • Keyboard Design
Re: Balanced Keyboard Layout
« Reply #1303 on: April 04, 2018, 12:11:01 PM »
Ian, you had asked about scripts / programs that could help in creating / converting KLA json files,
you might want to have a look at a small go program I wrote : https://github.com/phques/txtkbd2kla
It's pretty basic, but it helps

thanks, interesting.

I did find this on github as well, for converting mac layouts to windows.

https://github.com/adobe-type-tools/keyboard-layouts

I've finished soldering my keyboard and the Teensy board seems to have survived the ordeal, now trying to find a gap and the courage to try to load a driver on it and get it to work... (fear of unknown procedures meets fear of failure -> procrastination.) for which I will eventually need an xkb file as well... so maybe should first do some code to do KLA.json -> xkb, for defined keyboard layouts. Should probably start with ANSI ones first since that's easiest to debug.

Cheers, Ian

iandoug

  • Hero Member
  • *****
  • Posts: 793
    • View Profile
    • Keyboard Design
Re: Balanced Keyboard Layout
« Reply #1304 on: April 04, 2018, 12:12:36 PM »
After trying these CLPs out, going back to BEAKL15 (same thing when trying out X7-1H), I noticed right away how the reach to middle columns bothered me.

What hardware are you on?

Thanks, Ian

Den

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 1122
  • Selina is my Superstar
    • View Profile
    • Amuseum
Re: Balanced Keyboard Layout
« Reply #1305 on: April 04, 2018, 04:10:03 PM »
FWIW if you're gonna substitute th with something for phonetic reasons you'll need two characters... for hard and soft th.

Sure as purely phonetics, the two sounds are distinct. However, in English the two are (mostly) interchangeable allophones. Thus, English only needs one new letter for TH. Then other languages can invent their own method (on top of the new letter, most likely) if they really need to differentiate between hard and soft.

Regardless, this is only an issue if a bigram appears too commonly in particular languages. Which is the case for TH and NG. One can also make the case for some vowels, such as ER.

P.S. There is certainly an uneven distribution of frequency among the letters. But is this actually problematic? That is, one might see this and then attempt to redistribute the usage of letters more fairly. But is this actually a good idea? How would that affect typing, and the position of the letters on the keyboard? That is, would a fairer frequency distribution of letters in a corpus lead to better, smoother typing experience?
« Last Edit: April 04, 2018, 04:16:51 PM by Den »
Support me on Patreon

I saw. I conquered. I came.

philippe.quesnel

  • Valued Member
  • ***
  • Posts: 67
    • View Profile
Re: Balanced Keyboard Layout
« Reply #1306 on: April 04, 2018, 04:22:14 PM »
Quote
What hardware are you on?

at home, my regular keyboard is a Microsoft Sculpt Ergo, I have been trying out a 'matrix' setup w. two single hand SmartYaos (Koolertron on Amazon), cannot say I'm a fan yet, maybe if I manage to correct the problems I'm having... (see attached pic, you know, when you are a Home Block fan and set up your keycaps accordingly hihi).

And at work I have a crapy Dell kbd  :P

Glad to hear your project is coming along !!

philippe.quesnel

  • Valued Member
  • ***
  • Posts: 67
    • View Profile
Re: Balanced Keyboard Layout
« Reply #1307 on: April 04, 2018, 05:03:20 PM »
thanks, interesting.

...for which I will eventually need an xkb file as well... so maybe should first do some code to do KLA.json -> xkb, for defined keyboard layouts. Should probably start with ANSI ones first since that's easiest to debug.

Cheers, Ian
Oooops, just realized I never created a new Readme to go along the new version of my program, not very useful without it !

I guess one of the difficulties converting from KLA to XKB is to figure out the corresponding scancodes for each key id, which will depend on the kbd type

mstacker

  • Member
  • **
  • Posts: 41
    • View Profile
Re: Balanced Keyboard Layout
« Reply #1308 on: April 15, 2018, 07:11:38 AM »
BEAKL 9 is stable candidate recommendation for mass consumption. This leg of the project is on hiatus until new breakthrough.

I'm not good at promotion, but have done some seeding around the 'net. Apparently, there are a few enthusiasts who have heard of BEAKL and have adopted it to their custom keyboards kits (although I know not about their experiences with it.) I do recommend people looking for optimal layouts should give any of the BEAKL layouts a try, or adapt the BEAKL philosophy to achieve a layout to their personal comfort.

I'm overdue for feedback and should have given by now. BEAKL 9 is a fine layout. Ive been using it for months now and plan to stick with it. Had a break from keyboards in general during Jan and Feb due to a sudden health incident. Was wondering if my fingers would remember and they did.

BEAKL 9 is a very low physical effort, high efficiency layout, pro-ergo layout. To date, I have not run into any ergo issues or odd key combos required. Mind you, you must come up with an intelligent way to place all the other keys such as cntr, F1-12, Del, etc. Den and Ian are definitely on to something good here. For reference, I've been a Dvorak on an ansi keyboard guy for probably 10 years. Lost track.

A word of advice; purely my opinion. Don't switch layout if you want to type faster, etc. I switched to Dvorak way back when cause I thought I'd be faster. It did not happen. Any small increase in speed was minor at best. Maybe if I was routinely training for speed I would have better results. I did improve ergonomics a bit so it was worth it. Dvorak will cut down on finger gynastics relative to qwerty but is also a little right hand intensive or it was for my general use.

If you want to switch layouts, do it for fun. It's a big investment in both time and equipment. Keep in mind you must continue to type effectively at work while you transition. Ergonomics are a big motive for me. I did go looking for better options than dvorak when long term keyboard use injuries became a concern. To date, the use of BEAKL 9 seems to have addressed my concerns with my right wrist being over used. If ergo injuries are your primary concern, buy a kinesis advantage (most awesomest keyboard in terms of ergonomics to date although I could offer a list of improvements) and call it good. Learning to adapt to the advantage will be enough of a learning curve.

Me, I'm kinda a keyboard nerd. For months, I've used a couple of ergodox keyboards I adapted via firmware. They work fine. Honestly, an ergolinear will work just as good if you can find one with enough keys. There is at least one guy on this thread who seems happy with BEAKL on a plank. I tried one on an atomic. It seemed to work okay although I felt my hands were too close together. I much prefer to have the keyboard split in half so my next will be a Viterbi <https://keeb.io/collections/keyboard-pcbs/products/viterbi-keyboard-pcbs-5x7-70-split-ortholinear?variant=1302704554014>.

Also, at some point, I'll be modifying my advantage (changing out the brains and firmware) for BEAKL 9. Despite having the keys mounted on a flat plane, and the ridiculous price tag, it is my fav keyboard.

Matt
« Last Edit: April 15, 2018, 07:27:57 AM by mstacker »

mstacker

  • Member
  • **
  • Posts: 41
    • View Profile
Re: not good
« Reply #1309 on: April 15, 2018, 07:49:32 AM »
smashed my left wrist. back on ansi keyboard and mouse on right hand and mostly one handed typing for now. At least it has mech switches (gateron red I think)

How is your wrist doing these days brother?

Matt

iandoug

  • Hero Member
  • *****
  • Posts: 793
    • View Profile
    • Keyboard Design
Re: Balanced Keyboard Layout
« Reply #1310 on: April 15, 2018, 08:18:57 AM »
Oooops, just realized I never created a new Readme to go along the new version of my program, not very useful without it !

I guess one of the difficulties converting from KLA to XKB is to figure out the corresponding scancodes for each key id, which will depend on the kbd type

I'm trying to modify one of the examples from QMK firmware for my keyboard, and the bit that confuses me is that (AFAICS) in QMK I need to define what letter each key sends, and there is a large assumption that "a" and "A" (or 4 and $) will be on the same key, which is not the case these days.
https://github.com/qmk/qmk_firmware

I was expecting (based on what I've seen of XKB config files) that QMK would send "Scancode A1" being first key in top row, and then rely on the PC operating system to decide what to do with it. That would seem the obvious way to do it to me. But no. Possibly this is also related to all the layers/one-shot modifiers/etc/etc/ that QMK supports.

So now it looks like I have to define that a key is sending "/", but no, it's not sending "?" as well. It's a different key that's sending that.

I've done a bare-bones modification, now need to summon up the courage to compile and install it on Teensy board, and then see what Linux says it is getting.

I think QMK takes the approach it does to fake an standard ANSI board for Windows, so that you don't need to worry about custom MKL files on the OS side.

But in solving one issue they create others....

Any QMK experts welcome to jump in at this point :-)

iandoug

  • Hero Member
  • *****
  • Posts: 793
    • View Profile
    • Keyboard Design
Re: not good
« Reply #1311 on: April 15, 2018, 08:27:44 AM »
How is your wrist doing these days brother?

:-) Thanks for asking. It's improved, not back to how it was before though. Some bends are tight (flexion position), one causes pain (tension position), and the supination position (ie palm up) is still not horizontal ... can get it almost horizontal if I twist it with right hand. My age also means things heal slower than when I was a kid. But getting there. :-)

I can type etc okay, just some stretches a little sore.
Got a bit distracted with Forex stuff, but getting back into keyboard issues again too.


philippe.quesnel

  • Valued Member
  • ***
  • Posts: 67
    • View Profile
Re: Balanced Keyboard Layout
« Reply #1312 on: April 15, 2018, 09:30:03 AM »
...  and there is a large assumption that "a" and "A" (or 4 and $) will be on the same key, which is not the case these days.

I was expecting (based on what I've seen of XKB config files) that QMK would send "Scancode A1" being first key in top row, and then rely on the PC operating system to decide what to do with it. That would seem the obvious way to do it to me. But no. Possibly this is also related to all the layers/one-shot modifiers/etc/etc/ that QMK supports.
I don't know QMK, can't help there, sorry.
I did have a similar problem about Aa /? etc when trying to program my SmartYaos : I can tell it which USB HID code a key sends ... and, well, these codes are defined in the standard so that for eg. code 7 is for both d and D

http://www.usb.org/developers/hidpage/Hut1_12v2.pdf

I ended up programing a QWERTY base / ref and doing the actual layout w. AutoHotkey, which means no Linux for now.

So now it looks like I have to define that a key is sending "/", but no, it's not sending "?" as well. It's a different key that's sending that.
strange, not sure I understand how that works, but as long as you do ;-)
Go for it, get that puppy going!!

Very glad to hear that your wrist is doing much better

sdothum

  • Member
  • **
  • Posts: 26
    • View Profile
Re: Balanced Keyboard Layout
« Reply #1313 on: April 15, 2018, 04:33:28 PM »
I was expecting (based on what I've seen of XKB config files) that QMK would send "Scancode A1" being first key in top row, and then rely on the PC operating system to decide what to do with it. That would seem the obvious way to do it to me. But no. Possibly this is also related to all the layers/one-shot modifiers/etc/etc/ that QMK supports.

In QMK the standard modifier keycodes (shift, ctrl, etc.) when held down will issue the standard keycode for the following key presses. Similarly, the built in macros like S(keycode) will issue the ANSI shift value e.g. S("/") == "?".

To map a different key to a "shifted" key or other modifier (or any other designated key for that matter), you can use layers, effectively defining a layer that is raised by the designated "shift" key. The manner in which the layer is raised -- held down, toggled, one shot, multiple taps, etc. -- is up to you. Thus, any key can issue any specific keycode on a particular layer.

A single key can be responsible for many layers. And layers can require multiple keys. Layers can beget layers. It sounds crazy but there are use cases.

To illustrate http://thedarnedestthing.com/split%20redux. Unrelated to this topic but I have since migrated to this BEAKL mashup for the better finger rolls and the least same finger usage http://www.keyboard-layout-editor.com/#/gists/e0c628a2707117813c46611d37dee43e for anyone scrutinizing the layout in the link.

For me, ANSI output yields the most portable solution. Just plug the keyboard into any computer and I am never without my layout.

Hope this helps.

« Last Edit: April 15, 2018, 05:01:30 PM by sdothum »

mstacker

  • Member
  • **
  • Posts: 41
    • View Profile
Re: Balanced Keyboard Layout
« Reply #1314 on: April 15, 2018, 05:17:02 PM »
To illustrate http://thedarnedestthing.com/split%20redux. Unrelated to this topic but I have since migrated to this BEAKL mashup for the better finger rolls and the least same finger usage http://www.keyboard-layout-editor.com/#/gists/e0c628a2707117813c46611d37dee43e for anyone scrutinizing the layout in the link.

Nice website and explanation.

Matt

iandoug

  • Hero Member
  • *****
  • Posts: 793
    • View Profile
    • Keyboard Design
Re: Balanced Keyboard Layout
« Reply #1315 on: April 16, 2018, 12:52:50 AM »
To illustrate http://thedarnedestthing.com/split%20redux. Unrelated to this topic but I have since migrated to this BEAKL mashup for the better finger rolls and the least same finger usage http://www.keyboard-layout-editor.com/#/gists/e0c628a2707117813c46611d37dee43e for anyone scrutinizing the layout in the link.

Thanks, will study.

Cheers, Ian

iandoug

  • Hero Member
  • *****
  • Posts: 793
    • View Profile
    • Keyboard Design
Re: Balanced Keyboard Layout
« Reply #1316 on: April 16, 2018, 02:37:38 PM »
To map a different key to a "shifted" key or other modifier (or any other designated key for that matter), you can use layers, effectively defining a layer that is raised by the designated "shift" key. The manner in which the layer is raised -- held down, toggled, one shot, multiple taps, etc. -- is up to you. Thus, any key can issue any specific keycode on a particular layer.

A single key can be responsible for many layers. And layers can require multiple keys. Layers can beget layers. It sounds crazy but there are use cases.

I can see for example how to send KC_CIRCUMFLEX, but for example KC_G sends both g and G .... or is it actually sending the scancode from an ANSI keyboard for G? ie
<AC05> = 43  (lifted from //usr/share/X11/xkb/keycode/ibm  scancodes file)
 or somesuch?

Like I said, I was expecting QMK to specify that the key in row 3 column 6 sends AC05, and then in
/usr/share/X11/xkb/symbols/us

I would have something like
 key <AC05> { [         g,          G,     copyright, dead_doubleacute ] };

Trying to wrap my head around this, bearing in mind Windows works differently to Linux, I'm guessing Mac works similarly to Linux here, but has their own keyboard layout description files.

But I suppose XKB is only set up for Shift, AltGr and ShiftAltGr, and QMK allows for other fancy tricks.

So when I define the layers, if I want a separate Shift layer, will it effectively be a duplicate in most cases? eg if g and G happen to be on the same key, then we say that base layer and shift layer both send KC_G ?

Which seems somewhat counter-intuitive :-)

Confused, Ian



sdothum

  • Member
  • **
  • Posts: 26
    • View Profile
Re: Balanced Keyboard Layout
« Reply #1317 on: April 16, 2018, 05:50:21 PM »
I can see for example how to send KC_CIRCUMFLEX, but for example KC_G sends both g and G .... or is it actually sending the scancode from an ANSI keyboard for G? ie <AC05> = 43  (lifted from //usr/share/X11/xkb/keycode/ibm  scancodes file) or somesuch?

Like I said, I was expecting QMK to specify that the key in row 3 column 6 sends AC05, and then in /usr/share/X11/xkb/symbols/us

I would have something like key <AC05> { [         g,          G,     copyright, dead_doubleacute ] }; But I suppose XKB is only set up for Shift, AltGr and ShiftAltGr, and QMK allows for other fancy tricks.

So when I define the layers, if I want a separate Shift layer, will it effectively be a duplicate in most cases? eg if g and G happen to be on the same key, then we say that base layer and shift layer both send KC_G ?

Each layer defines a single keycode for each key position. So, if you define a key location with "KC_G", if pressed, it will output lower case "g". If you define a modifier key on that layer (it can inherit this keycode from the calling layer so you don't have to define positional modifiers that you want to exist across layers), say "KC_LSFT", if held down, will cause "KC_G" to output upper case "G".

You can define a key with a macro keycode, such as "S(KC_G)", which if pressed, will output upper case "G" so you don't need to hold down a modifier -- you can even define chained modifier keycodes, e.g. "LCTL(S(KC_G))". And you can define chained modifiers that, when held down (or tapped, one shot, etc.), operate on all the defined keycodes of that layer. You can create complex and convenient key values this way.

So a layer defines a default keycode for the key position, and any modifier alters the ANSI output value.

Now, you also have the ability within QMK to trap the keystroke stream and do what you want to with any of your defined keycodes -- extend QMK macro functionality, manage layers beyond what QMK has macros for, write a calculator, etc. The latter would be over the top but you get the picture. I have extended and added a lot of layer functionality to suit my own workflow. But the QMK library probably fills the needs way beyond what most people would use with its extensive set of key actions, such as one shot modifiers/layers, toggle keys/layers, tap dance, etc.

So, in your above example, you probably need 3 layers: "g" on one with a modifier to produce "G", and separate layers to produce the special characters (unless a modifier would suffice on one of the 2 symbols -- though, I would imagine using two or more layers would make for a much more flexible organization of symbols).

Hope this helps.
« Last Edit: April 16, 2018, 09:19:37 PM by sdothum »

sdothum

  • Member
  • **
  • Posts: 26
    • View Profile
Re: Balanced Keyboard Layout
« Reply #1318 on: April 17, 2018, 05:17:44 AM »
So when I define the layers, if I want a separate Shift layer, will it effectively be a duplicate in most cases? eg if g and G happen to be on the same key, then we say that base layer and shift layer both send KC_G ?

Depends on how you define the keycode on the Shift layer. If the Shift layer uses a Shift modifier (and there are many types of shift key actions -- conventional, one shot, down position of a key that otherwise outputs a character, etc.) then yes, if pressed without a modifier enabled. But you could define the key position with a macro definition "S(KC_G)" to output shift "G" without need of the Shift modifier.

I use 2 Shift layers precisely that way to split the keyboard so each thumb hand holding its designated Shift key (which is not a real modifier but a layer invoking key) can type special symbols (like a keypad) while the opposite hand types shifted characters.

Layers free you from being limited to just a set of modifiers as you can see from the example link I posted earlier. The current limit is 32 layers. I probably use more layers than most and haven't come close to that.

Hope this further clarifies how one approaches QMK.
« Last Edit: April 17, 2018, 12:07:06 PM by sdothum »