• You are not logged in.

How about this layout??

  • Started by nawfal
  • 77 Replies:
  • Reputation: 0
  • Registered: 02-Nov-2010
  • Posts: 38

When I visited this forum( as a part of my quest to find the best layout possible, I've been reading forums, doing my own research etc etc), I realized I'm late to this field :). Good to see the sheer amount of hard work, diligent research and enthusiasm, fervor and frenzy that has gone into this field ever since one man brought up an idea of a scientifically designed alphabetic layout, Dvorak, especially in this small community of few hundred members by Colemak developer.. Probably the most active forum on keyboard designs. I appreciate one and all, the creator and his co-enthusiasts. Also heartening is to see the constructive nature of dialogues here rather than rants, ridicules and ramblings we get to see in many public forums…
         Well, I'll go with a bit more on the intro part, I want to. I didn't want to initially, but as I started writing, I felt it's more appropriate to elaborate on what I'm and how I and why I'm interested in this subject, so that it gives u a better picture. I beg your pardon and YOU ARE MOST WELCOME TO READ MY SECOND POST ALONE WHICH IS WHAT REALLY IS ABOUT MY LAYOUT.
       I top out at 70 wpm on QWERTY and ranges from 40 to 70 wpm depending on the quality of the keyboards. As I encounter a myriad range of keyboards (the same QWERTY of different manufacturers), I realize how important the quality of keyboard and its ergonomics are. There are of course better and worse ways to be typing. Now my speed is not as high as anything serious, but I decided to drop it there as I could quickly realize QWERTY is a poor design. Alas, I only tried to ponder about alternatives recently and I could read all what u too must have come across. Regarding Dvorak, I was impressed with his design principles, but I could readily notice that he hasn't maximized his own design principles. Also deeply unimpressed with his loading of right pinky.
        As a person who has spared quite a lot of time and effort on this topic, I believe I really understand the ins and outs (as you all do) of this art of keyboard of keyboard designing, say for instance why there occur difference of opinion on technical specs of the same layout when evaluated by different people (‘coz of the corpus being nonlinear) or why different people end up in different layouts( the algorithm revolving around the highly subjective cost, penalty etc being different and also ‘coz of the limitation of our computers to calculate all the possible layouts); and I do feel there's a way to solve this, more or less. Please excuse me for not furnishing a lot of details on all that, my intent now with this post is just to know your feedback on the layout I manually designed just now. I don't wanna detail further, let me just point some quick thoughts why I tried designing a layout of my own:
•    As mentioned earlier, dvorak doesn't maximize his own design principles; also he loads right pinky to a painful level. I just start with the first major alternative I saw, studied and tried.
•    Most importantly, I give aesthetics a lot of importance and I don't wish to see punctuations getting clubbed along alphabets. Well, not many fall under my school of thought, but that's OK-I'm just citing reasons for why I tried my own design.
•    Many of the layouts out there- almost all the notable layouts - distributes finger load non-uniformly. For instance, Colemak has left pinky more used (slightly) than left ring finger- It's ok as left pinky isn't over loaded. But many other layouts are really worse in this aspect, notably Arenisto. It could be well with the statistics I have with me, so I'm not sure about this criticism of mine.
•    Many layouts have misplaced keys, i.e. I've an idea that this and that letters shouldn't fall in certain places. E.g. C in Colemak, B in my own design (in the next post) etc.
•    Many of the layouts out here have been designed for a standard keyboard which is excruciatingly awful in my opinion. I meant the standard keyboard not your layouts. I say this because an ergonomic keyboard will have slightly different design principles.
•    I want the best layout possible, so shortcut constraints are not my cup of tea.

Offline
  • 0
  • Reputation: 0
  • Registered: 02-Nov-2010
  • Posts: 38

I perfectly understand the discrepancies that rise from corpus nonlinearity and limitation of our computers, so I don't make that a point here... fair enough; now let me post my layout.


Q    P    C    F    ,     .    M    U    Y    V
A    N    S    T    H    L    R    E    I    O
J     B    G    D              W    Z    K   x


May I know from more knowledgeable people over here how this fares in your different tests? I designed this manually and I've just started learning programming to develop something better. I based my design on maximizing inward rolls (quick rolling over consecutive keys is what I mean), reducing outward rolls (the opposite of inward rolling), minimizing hurdling (jumping over home row) and same finger. I perfectly understand there are plenty more criteria to be considered, same hand is what is missed while designing this notably. I also haven't designed this layout keeping the varying (in accordance with different finger combinations) penalties in mind. For all that I need a program to design based on complex calculations.

Few things I have to say:
•    I left the spots under H and L blank as in my ergonomic design, there's no room for those spots which will collide with the thumbs (mind you, H and L doesn't fall in straight line, instead they curve downward in a suitable stroking fashion along the home row; so the spots under H and L fall a bit more downwards which will collide with thumb. It's a subjective thing, so leave it to my personal preference).
•    Keys T and H don't contribute to high same finger usage as we stroke it in one easy roll with middle n index finger- thereby we maximize the effort of moving our left hand towards right and also some load (on index finger on T) is distributed to middle finger.
•    I try to keep hurdling the least possible (of course I can design a layout with even less home row jump, but loses out on other facets then). The reason is, a home row jump is twice a hurdle compared to same finger usage. It is not true on a standard keyboard as we already incline our hands on horizontally aligned letters, so stroking with index finger on bottom row and with ring finger on top row in succession is easy. But in my already curved ergonomic layout, a same finger is just half the hurdle as that of a home row jump (which moves twice). I hope I could drive the point home.
•    This layout has the least hurdling as I could calculate.
•    It has the maximum percentage of strokes on home keys (as many other layouts have, though not all)
•    This has maximum inward rolls and maximum inward to outward rolls difference (again as I could calculate)
•    This has a same finger ratio slightly more than MTGAP 2.0 and colemak but compensates easily when we calculate the cumulative effect of total hurdles.

        I would love to know how my layout fares on your corpus on various parameters mentioned and not mentioned (I couldn't calculate same hand or distance at all due to lack of language awareness)

p.s. a programmer friend of mine recommended vb.net platform for me to start learning a serious language (I know vb already, so that could be why he recommended vb.net. I'm not sure if there's a connection at all) citing that's a lot easier to learn. I would love to know from you people if it's as fast as languages like C, and other infos on how effective vb.net will be in helping design a keyboard layout. Or are there better languages to do the same? Cheers..

Offline
  • 0
  • Reputation: 0
  • Registered: 19-Dec-2008
  • Posts: 14
nawfal said:

p.s. a programmer friend of mine recommended vb.net platform for me to start learning a serious language (I know vb already, so that could be why he recommended vb.net. I'm not sure if there's a connection at all) citing that's a lot easier to learn. I would love to know from you people if it's as fast as languages like C, and other infos on how effective vb.net will be in helping design a keyboard layout. Or are there better languages to do the same? Cheers..

You're looking for Carpalx. Not a language, but a program.

As an aside, I would say that C# is probably better to learn than vb.net, but you should do your own research and see what makes the most sense to you.

Offline
  • 0
  • Reputation: 0
  • Registered: 02-Nov-2010
  • Posts: 38

ease of learning is something im looking for. hence i feel vb.net is what i want. C# on console or windows? former is harder to implement i guess. . moreover, which is faster, C#.net or vb.net??

Offline
  • 0
  • Reputation: 0
  • Registered: 17-Mar-2008
  • Posts: 192

I don't feel that Visual Basic is particularly easy to learn. If you want a .NET platform language, I would recommend C#. I would guess C# is a goodly bit faster as well.

If you want a non-Microsoft language that is easy to learn, look at Python.

Last edited by tomlu (04-Nov-2010 13:16:19)
Offline
  • 0
  • Reputation: 0
  • Registered: 02-Nov-2010
  • Posts: 38

thanks tomlu. i've heard the same as well. so i'll learn C# and basic C as well (to accelerate math intensive algorithms)

Offline
  • 0
  • Reputation: 0
  • Registered: 04-Nov-2009
  • Posts: 23

If you are serious about learning how to program, start with Java and then move into C++, and then into C. It doesn't really matter which on you start off with from those 3 that I gave you.

C# and VB.NET speeds don't compare to C. C is the fastest high level language there is, it isn't "very high level" but it's a step up from ASM and binary :).

Last edited by FearedBliss (04-Nov-2010 21:12:48)
Offline
  • 0
  • Reputation: 0
  • Registered: 02-Nov-2010
  • Posts: 38

fearedbliss, thanks for the help. I'll surely rely only on C if I've to program a layout from zillion combination available. But I'll start with C#.net or VB.net to get acquainted to art of programming, to get it easy. I know VB already. I've other interests as well with programs, so I can do it on .net platform. I'll learn C then to do this keyboard thing. Once again I appreciate for help.

Offline
  • 0
  • Reputation: 0
  • Registered: 05-Jan-2010
  • Posts: 91
FearedBliss said:

If you are serious about learning how to program, start with Java and then move into C++, and then into C. It doesn't really matter which on you start off with from those 3 that I gave you.

I'd try to avoid C++. Mostly because it is such a poorly standardised language which doesn't fill any real purpose nowadays. Also, I'm kind of reluctant to encourage someone to start programming in a strictly object-oriented language as it might be very confusing at first.


FearedBliss said:

C# and VB.NET speeds don't compare to C. C is the fastest high level language there is, it isn't "very high level" but it's a step up from ASM and binary :).

And compilers most often generate a lot more efficient machine code than the non-hardcore assembly hacker can do.

Offline
  • 0
  • Reputation: 0
  • Registered: 04-Nov-2009
  • Posts: 23

C++ is a very nice language. Whether you are learning objects with C++ or Java, you still with be learning objects (eventually). You can of course learn C++ just in a procedural way.. but if you are going to do that, might as well just learn C first.

For your second comment about machine code, I agree with you, but if you know how to use C properly and use the pointers properly, you can do some serious manipulation without any ASM at all.

Overall as long as you start with a C-derived language (C++, Java, C#), you should be good. I was actually looking at a program Microsoft released called "Small Basic". It teaches you in a fun way how to program. It has an object and C# style approach, but it's meant for kids or beginners. It can definitely be a good stepping stone that you use just before you get into procedural programming (structured) or OO.

Offline
  • 0
  • Reputation: 0
  • Registered: 05-Jan-2010
  • Posts: 91
FearedBliss said:

C++ is a very nice language. Whether you are learning objects with C++ or Java, you still with be learning objects (eventually). You can of course learn C++ just in a procedural way.. but if you are going to do that, might as well just learn C first.

Yes, learning the concepts of objects is important (even though it shouldn't really be the first lesson.) The main problem I have seen in students starting out with a fully object oriented language (like C# and Java) is that you can't really introduce the concept of scope and objects in the first lesson, and therefore a lot of the code you begin any project with is mystical to the student.

Objects is a quite advanced issue, and many books about C++ takes the objects in the around tenth chapter, when you've already learned about variables, scope, the most common language constructions and so on. The problem with fully object oriented languages is that you kind of have to make objects the first lesson, but you don't want to. Many teachers and books take great steps to avoid introducing objects so early, even though all the code resides in an object. I've seen many strange constellations as to variables' scopes, just because the student didn't really grasp where to declare a variable, so s/he just moved around the declaration until the compiler stopped complaining.

That is a major problem I see with starting out with a fully object oriented language. And as to C++, the language is just so huge and poorly standardised so I recommend against using it for just about anything. Especially for learning. C is far smaller and simpler, and doesn't require three years to get to know every part of it. The drawback of course being that memory allocation (and pointers) is really, really difficult to do correctly. Not because it is advanced, just because it requires hell of a lot of thinking from the programmer.


FearedBliss said:

For your second comment about machine code, I agree with you, but if you know how to use C properly and use the pointers properly, you can do some serious manipulation without any ASM at all.

Yes, also it is very easy to blast your leg off while you're at it. ;)

Last edited by kqr (06-Nov-2010 02:41:37)
Offline
  • 0
  • Reputation: 0
  • Registered: 04-Nov-2009
  • Posts: 23

Actually the basic concept for getting a student to learn about objects isn't hard at all. My teacher (which gladly knows how to teach and wth he is talking about) teaches in an MIT style. Many subs, and one main. I don't recall him introducing objects right at the beginning but it was very close. You really just have to learn how to organize and explain your topics.

I agree with you about C being small. It is definitely a small language. I would say pointers is pretty advanced. Maybe the concept of "that's a memory address, that's the value at the address" seem simple. But when you actually try to apply it.. with the C syntax.. oh man, let the games begin !

As for blasting my leg, I will, soon enough lol.

Last edited by FearedBliss (06-Nov-2010 02:58:38)
Offline
  • 0
  • Reputation: 0
  • Registered: 05-Jan-2010
  • Posts: 91
FearedBliss said:

Actually the basic concept for getting a student to learn about objects isn't hard at all. My teacher (which gladly knows how to teach and wth he is talking about) teaches in an MIT style. Many subs, and one main. I don't recall him introducing objects right at the beginning but it was very close. You really just have to learn how to organize and explain your topics.

I guess the students I've observed just haven't had good enough teachers. I stand corrected: with a good teacher, you may as well start out with a fully object oriented language; otherwise it might turn out confusing.


FearedBliss said:

I would say pointers is pretty advanced. Maybe the concept off "that's a memory address, that's the value at the address" seem simple. But when you actually try to apply it.. with the C syntax.. oh man, let the games begin !

And you'll know just using pointers is pretty simple as soon as you've tried manually allocating memory for a dynamic array of structs. Preferably without any memory leaks. I still have nightmares from the times I've desperately gone over line after line for a few days hunting for those leaks.

Offline
  • 0
  • Shai
  • Administrator
  • Reputation: 5
  • Registered: 11-Dec-2005
  • Posts: 375

nawfal, overall your layout is very good in most aspects, but it's not very good in the same-finger. I have explained many times why that is a critical element in designing a keyboard layout. However since it's the most difficult aspect of keyboard layout design, it is the aspect that is the easiest to compromise on.

Other aspects such as similarity to QWERTY, maintaining shortcuts, and ease of learning are also not taken into consideration.

For doing keyboard layout design, I would highly recommend the D programming language. It is a relatively obscure language, but it achieves performance on par with C/C++ with a much saner language design, and it's very easy to pick up if you already know C/C++/Java/C#.

Offline
  • 0
  • Reputation: 0
  • Registered: 04-Nov-2009
  • Posts: 23

@kqr, yea allocating memory manually isn't fun at all.

@Shai, Fedora 14 recently included the D programming language into their distribution (with the proper tools to develop in the D language I assume).

Offline
  • 0
  • Reputation: 0
  • Registered: 02-Nov-2010
  • Posts: 38
Shai said:

nawfal, overall your layout is very good in most aspects, but it's not very good in the same-finger. I have explained many times why that is a critical element in designing a keyboard layout. However since it's the most difficult aspect of keyboard layout design, it is the aspect that is the easiest to compromise on.

same finger isn't substantially high, its marginally more than your layout. Or I suppose u have counted T and H positions (in my layout) to be of same finger sequence, which shouldn't be in my opinion. It's easy to roll with your middle and index finger in one easy rolling motion. Our mind works so quick that we don't press T with index finger and then again H with the same index finger. The moment we sense a TH combination we roll it with middle-index fingers. The benefits are two:

1. You anyway have to move your index finger of left hand towards right to key H. Now this finger travel (or effort) is more efficient if we can make use of that (undesired) movement to press one more key. "T" is the best position hence. Hence "TH" should be a frequent combination.

2. if we are pressing T-H with middle-index fingers, then that means some load of index finger is distributed to middle finger which makes sense on layouts that heavily uses index finger (for eg, mine)


Shai said:

Other aspects such as similarity to QWERTY, maintaining shortcuts, and ease of learning are also not taken into consideration.

I didn't have this in mind. As I said, I'm trying it for fun and not really to get it implemented.


Shai said:

For doing keyboard layout design, I would highly recommend the D programming language. It is a relatively obscure language, but it achieves performance on par with C/C++ with a much saner language design, and it's very easy to pick up if you already know C/C++/Java/C#.

A big thanks for help. I've zeroed in on C, D and C#/VB.net and python. I would start learning with latter lot and start keyboard thing with D as u suggested

Offline
  • 0
  • Reputation: 0
  • Registered: 02-Nov-2010
  • Posts: 38

Shai, I've read great news on D programming language. I've zeroed in on D (and VB.net to start with)

.

Tomlu, Python is definitely easier but i do feel vb.net is a tad easier again (may be because i'm used to VB and was always repelled by C kinda syntaxes)

Offline
  • 0
  • Reputation: 0
  • From: Ann Arbor, MI
  • Registered: 25-Sep-2008
  • Posts: 36
Shai said:

For doing keyboard layout design, I would highly recommend the D programming language. It is a relatively obscure language, but it achieves performance on par with C/C++ with a much saner language design, and it's very easy to pick up if you already know C/C++/Java/C#.

Just throwing this out there.. why not Go?

Offline
  • 0
  • Shai
  • Administrator
  • Reputation: 5
  • Registered: 11-Dec-2005
  • Posts: 375

Go's compiler isn't yet as optimized as the alternatives, hardly no ecosystem around it, almost nothing in terms of libraries/documentation, and it is still considered experimental, although the concurrency features might be interesting.

Offline
  • 0
  • Reputation: 0
  • From: Ann Arbor, MI
  • Registered: 25-Sep-2008
  • Posts: 36

I don't really see how any of those would deter someone from learning and using Go.  The Go compilers (not gccgo) are quite new, but build on ideas from Rob Pike's other compilers in Plan 9.  Optimization (at least in GCC) also almost always leads to incorrect machine code. If anything, I would prefer something that produces correct rather than fast and buggy code.  gccgo is there if you really want it though.

Libraries and documentation:

https://golang.org/doc/docs.html
https://golang.org/pkg/
http://go-lang.cat-v.org/
http://go-lang.cat-v.org/pure-go-libs

About the ecosystem: I really have no clue how D is any better.  If anything, it's (IMHO) worse since it appeals more to C++ users rather than Go, which attracts more C and Python programmers.

Disclaimer: I haven't used Go; no support for OpenBSD yet.  Until then, it's C all the way.

Offline
  • 0
  • Reputation: 0
  • Registered: 04-Nov-2009
  • Posts: 23

D and Go both look like great languages to learn. It's not the language that makes the computer scientist (developer), it's the way they think ;P

Offline
  • 0
  • Reputation: 0
  • Registered: 02-Nov-2010
  • Posts: 38

Hmmm, Go looks impressive. But its still experimental.

https://golang.org/doc/go_faq.html#Performance

Offline
  • 0
  • Reputation: 0
  • Registered: 02-Nov-2010
  • Posts: 38

Done some search work. Came to learn that Go is simpler but D is much faster. And I cant trade speed for simplicity when it comes to keyboard programming. D performs on par with C. Here's a comparison from D's official site against C++.

http://www.digitalmars.com/d/2.0/cppstrings.html

Shootout alioth debian site says .net languages can be faster than Go. Though Go is faster than some really high level languages like Python

Offline
  • 0
  • Reputation: 0
  • From: Ann Arbor, MI
  • Registered: 25-Sep-2008
  • Posts: 36
nawfal said:

And I cant trade speed for simplicity when it comes to keyboard programming.

Then don't.  Use C and get both.

Offline
  • 0
  • Reputation: 2
  • Registered: 21-Apr-2010
  • Posts: 764

I think once you know what you want to measure and optimise for - with reference to layouts - picking a programming language should be easier.  You pick a language that lends well to the problem.  Speed isn't always everything.

Did you try the layout on carpalx?  Perhaps his methodology is at odds with your own.  If not you might be able to adapt the available source code for your own needs.

Has anyone else run your layout against their metrics, or care to comment upon it as it stands?

Last edited by pinkyache (11-Nov-2010 00:46:53)

--
Physicians deafen our ears with the Honorificabilitudinitatibus of their heavenly Panacaea, their sovereign Guiacum.

Offline
  • 0