[[PageOutline(2-4)]] = Neo 3 = Während der Fokus der Optimierung von Neo 1 zu Neo 2 die Anordnung der Sonderzeichen war, soll nun mit Neo 3 unter anderem die erste Ebene nochmals unter die Lupe genommen werden. Hintergrund ist, dass Neo 1 von Hanno bisher nur „von Hand“ auf die Häufigkeit der deutschen und englischen Buchstaben, Bi- und Trigramme optimiert wurde. In der dritten Version soll nun eine bessere Belegung mt Hilfe computergestützer Optimierung gefunden werden. Wir erzeugen dafür gemeinsam Layouts und sammeln die besten in EvolvedLayouts. Weiterhin existieren Überlegungen zu einer [wiki:Hardwareentwicklung eigenen Hardware] und der [wiki:Neo3/Modifierpositionen Neuanordnung der Modifier]. == Ansätze == Es gibt zwei vollständig lauffähige Optimierungsskripte. Andreas hat ein sehr schnelles [https://sites.google.com/site/ausderneowelt/ Optimierungsprogramm in C++] entwickelt. Arne hat ein langsameres [http://draketo.de/node/282 Optimierungsskript] in Python geschrieben, das als Ziel einfache Definitionen jeglicher Art von Kosten hat. Beide suchen mit evolutionären Algorithmen neue Belegungen. == Optimierungskriterien == [wiki:Neo3/Optimierungskriterien Kriterien] sind: * Gute Tastenpositionen (auf der Grundlinie ist z.B. besser als links unten). * Möglichst wenige Fingerwiederholungen (einen Finger mehrfach hintereinander nutzen). * Handwechsel bei Richtungswechsel (horizontal). * Wenige Zeilenwechsel auf der gleichen Hand. * Handwechsel, wenn eine Hand aus ihrer Grundposition gezogen wird. * Gleichmäßige Fingerbelastung (aber nur halbe Last auf dem Kleinen, weil er sonst frühzeitig aussteigen kann). * Minimierung bestimmter Fingerübergänge (z.B. Mittel- auf Ringfinger). Die Schwierigkeit besteht in der Abwägung der einzelnen Kriterien, da diese von Person zu Person unterschiedlich bewertet werden. Die verwendete Tastatur spielt natürlich auch eine Rolle. Außerdem beieinflussen sich die Kriterien gegenseitig, wodurch einer passenden Gewichtung eine wichtige Rolle zukommt. Um eine gute Gewichtung der Kriterien zu finden, müssen daher optimierte Layouts von möglichst vielen verschiedenen Leuten getestet werden. Außerdem können so noch fehlende Kriterien gefunden werden. Erste Schritte dazu sind die Auswertungen von [http://bitbucket.org/ArneBab/evolve-keyboard-layout/src/tip/empirie/2010-05-05-eval.txt 2010-05-05] und [http://bitbucket.org/ArneBab/evolve-keyboard-layout/src/tip/empirie/2010-06-18-eval.txt 2010-06-18]. Ein erstes Ergebnis der Auswertungen und weiterer Tests ist [http://bitbucket.org/ArneBab/evolve-keyboard-layout/src/tip/config.py config.py]. Um den Vergleich zu erleichtern, können Texte so umgeschrieben werden, dass die einzelnen Buchstaben denen auf der Tastaturbelegung entsprechen. Aus dem Text ASDF von QWERTZ würde bei der Konvertierung UIAE in Neo 2 werden, so dass ein Neo 2 Nutzer den Textfluss des QWERTZ-Layouts testen könnte. Im Optimierer macht das das Skript [http://bitbucket.org/ArneBab/evolve-keyboard-layout/src/tip/convert_text_between_layouts.py convert_text_between_layouts.py]. == Zwischenergebnisse in Benutzung == === Bone === {{{ jduax zclmwq' htieo bnrsgß⇘ fvüäö py,.k ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬──────┐ │ ^ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ ` │ ← │ ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬────┤ │ ⇥ │ j │ d │ u │ a │ x │ z │ c │ l │ m │ w │ q │ ' │ Ret│ ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │ │ ⇩ │ h │ t │ i │ e │ o │ b │ n │ r │ s │ g │ ß │ ⇘ │ │ ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴───┤ │ ⇧ │ M4│ f │ v │ ü │ ä │ ö │ p │ y │ , │ . │ k │ ⇗ │ ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴─┬─┴──┬┴───┼────┬────┤ │Strg│ Fe │ Alt│ Leerzeichen │ M4 │ Fe │ Me │Strg│ └────┴────┴────┴───────────────────────┴────┴────┴────┴────┘ # 8.501819 x100 total penalty per letter # 31.11437 x10 billion total penalty compared to notime-noeffort # 7.514523 mean key position cost in file 1gramme.txt ( 55.00226738 ) # 11.73654 % finger repeats in file 2gramme.txt ( 47.2142408942 ) # 11.75948 million keystrokes disbalance of the fingers ( 17.6392327087 ) # 0.320947 % finger repeats top to bottom or vice versa ( 6.45560905428 ) # 3.340640 % of trigrams have no handswitching (after direction change counted x 1 ) ( 14.7767034133 ) # 8.130151 billion (rows²/dist)² to cross ( 105.691971856 ) # 0.047680 hand disbalance. Left: 0.547680590574 %, Right: 0.452319409426 % ( 1.39598506231 ) # 0.0 badly positioned shortcut keys (weighted). # 17.65044 no handswitching after unbalancing key (weighted). # 20.60072 movement pattern cost (weighted). # 0.846386 asymmetric bigram cost (weighted). # 15.47297 manually assigned bigram penalty (weighted) # 8.397174 unbalancing key after neighboring finger (weighted) }}} Treiber zum Ausprobieren gibt es unter [wiki:Bone] (bone verwendet vereinfachte Tastenkostenkriterien, so dass das Ergebnis hier nicht exakt das Ergebnis mit der bone-config wiederspiegelt). [[BR]][[BR]] Es gibt auch neuere Ansätze: [wiki:Bone2 Bone2], [wiki:Bone3 Bone3] und [wiki:Flux Flux]. === Cry === {{{ bmuaz kdflvjß criey ptsnh⇘ xäüoö wg,.q ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬──────┐ │ ^ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ ` │ ← │ ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬────┤ │ ⇥ │ b │ m │ u │ a │ z │ k │ d │ f │ l │ v │ j │ ß │ Ret│ ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │ │ ⇩ │ c │ r │ i │ e │ y │ p │ t │ s │ n │ h │ ⇘ │ ´ │ │ ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴───┤ │ ⇧ │ ⇚ │ x │ ä │ ü │ o │ ö │ w │ g │ , │ . │ q │ ⇗ │ ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴─┬─┴──┬┴───┼────┬────┤ │Strg│ Fe │ Alt│ Leerzeichen │ M4 │ Fe │ Me │Strg│ └────┴────┴────┴───────────────────────┴────┴────┴────┴────┘ # 8.459790 x100 total penalty per letter # 30.96055 x10 billion total penalty compared to notime-noeffort # 7.596530 mean key position cost in file 1gramme.txt ( 55.60251188 ) # 13.55902 % finger repeats in file 2gramme.txt ( 54.5457690969 ) # 11.79795 million keystrokes disbalance of the fingers ( 17.696936837 ) # 0.503933 % finger repeats top to bottom or vice versa ( 10.1362126748 ) # 3.606038 % of trigrams have no handswitching (after direction change counted x 1 ) ( 15.9506439105 ) # 7.787864 billion (rows²/dist)² to cross ( 101.242234137 ) # 0.027308 hand disbalance. Left: 0.52730894297 %, Right: 0.47269105703 % ( 0.799547069249 ) # 0.0 badly positioned shortcut keys (weighted). # 10.92445 no handswitching after unbalancing key (weighted). # 17.77564 movement pattern cost (weighted). # 0.837732 asymmetric bigram cost (weighted). # 14.84835 manually assigned bigram penalty (weighted) # 9.245518 unbalancing key after neighboring finger (weighted) }}} Treiber zum Ausprobieren (momentan nur für Linux) von cry gibt es unter [https://bitbucket.org/ArneBab/evolve-keyboard-layout/raw/88c8de5ce439/empirie/crie.xmodmap crie.xmodmap] und [https://bitbucket.org/ArneBab/evolve-keyboard-layout/raw/88c8de5ce439/empirie/crie-truly.xmodmap crie-truly.xmodmap]. Testergebnisse zu cry gibt es unter [https://bitbucket.org/ArneBab/evolve-keyboard-layout/src/tip/empirie/Testnotizen.txt Testnotizen.txt]. Cry ist gerade in einem 3-Jahrestest von ArneBab, um Kriterien für Probleme zu finden, die erst bei hohen Geschwindigkeiten auftreten. == Output des Optimierers == Ein aktuelles Zwischenergebnis ist: {{{ x.ovü wcbszq´ heaiu dtnrlm köä,y fgpßj ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬──────┐ │ ^ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ ` │ ← │ ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬────┤ │ ⇥ │ x │ . │ o │ v │ ü │ w │ c │ b │ s │ z │ q │ ´ │ Ret│ ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │ │ ⇩ │ h │ e │ a │ i │ u │ d │ t │ n │ r │ l │ m │ ⇘ │ │ ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴───┤ │ ⇧ │ M4│ k │ ö │ ä │ , │ y │ f │ g │ p │ ß │ j │ ⇗ │ ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴─┬─┴──┬┴───┼────┬────┤ │Strg│ Fe │ Alt│ Leerzeichen │ M4 │ Fe │ Me │Strg│ └────┴────┴────┴───────────────────────┴────┴────┴────┴────┘ # 9.263154 x100 total penalty per letter # 33.90065 x10 billion total penalty compared to notime-noeffort # 7.262877 mean key position cost in file 1gramme.txt ( 53.16035746 ) # 11.74979 % finger repeats in file 2gramme.txt ( 47.2675369885 ) # 11.75396 million keystrokes disbalance of the fingers ( 17.6309401899 ) # 0.334157 % finger repeats top to bottom or vice versa ( 6.72130885165 ) # 1.303662 % of trigrams have no handswitching (after direction change counted x 1 ) ( 5.76651057198 ) # 10.51298 billion (rows²/dist)² to cross ( 136.668790869 ) # 0.032111 hand disbalance. Left: 0.467888374871 %, Right: 0.532111625129 % ( 0.940159265392 ) # 0.0 badly positioned shortcut keys (weighted). # 12.64277 no handswitching after unbalancing key (weighted). # 23.03586 movement pattern cost (weighted). # 0.840812 asymmetric bigram cost (weighted). # 19.51403 manually assigned bigram penalty (weighted) # 14.81745 unbalancing key after neighboring finger (weighted) }}} Ein auf dieses Layout konvertierter Text für Nutzer von Neo 2 sieht so aus: Ket katir rot rlhu ier ,aat Üedlyinit clr siy arsitir Niy,id irnbitrnp adf sei Fhuannir aof siy Ueyyid qo baddir gimarrirp fehu adf ,tlniünltir uitaoffniddnir ors sayen yieri fhudeyyfnir Gibwthunormir gifnänemnirv Für Qwertz-Tipper sieht er so aus: Zfl zdlsk kgl keua sfk ,ddl Yföeäsjsl rek hsä dkhslsk Jsä,sö skjnslkjv döo hfs Ouadjjsk dgo hsä Afääsö pg ndöösk ismdkkskv ofua döo ,lejsyjelsk asldgoojsööjsk gkh hdäfj äsfks ouaöfääojsk Isntluajgkmsk isojcjfmjskw Das Original ist: Wir waren nur noch ein paar Kilometer von dem anderen Tempel entfernt, als die Schatten aus dem Himmel zu fallen begannen, sich als Protektoren herausstellten und damit meine schlimmsten Befürchtungen bestätigten. (Der Text ist mit [http://bitbucket.org/ArneBab/evolve-keyboard-layout/src/tip/textcheck.py textcheck.py] ausgewählt, um möglichst nahe an der normalen Mono-, Bi- und Trigrammverteilung des Deutschen zu sein) === Bedeutung der Werte === {{{ xoä.ü wcslzq´ heaiu dtrnmb köv,y fgßjp # 19.5707274099 billion total penalty compared to notime-noeffort → Gesamtkosten # 5.20537748476 mean key position cost in file 1gramme.txt ( 14.98649801 ) → Durchschnittskosten pro Taste # 1.36734358818 % finger repeats in file 2gramme.txt ( 0.585229696 ) → Fingerwiederholungen in Prozent der Gesamtanschläge # 6.03645600705 million keystrokes disbalance of the fingers ( 0.965832961 ) → Disbalance der Finger: Wie weit weicht die Lastverteilung vom Ziel ab? Welche Einheit hat der Messwert? → Standardabweichung :) (heißt: akut unklar) # 0.0205566265665 % finger repeats top to bottom or vice versa ( 0.140773376 ) → Fingerwiederholungen von der unteren in die obere Zeile (oder umgekehrt) # 1.25755658986 % of trigrams have no handswitching (after direction change counted x 1 ) ( 0.7323468 ) → Keine Handwechsel nach Richtungswechsel (in Prozent der getippten Trigramme) # 2.61460336638 billion (rows²/dist)² to cross ( 0.522920673276 ) → Zeilenwechsel: eine nach oben: 1, zwei nach oben: 4, geteilt durch den Abstand in Spalten und das ganze quadriert. # 0.0274465144465 hand disbalance. Left: 0.472553485553 %, Right: 0.527446514447 % → Belastung der Hände # ( 0.1151616616 badly positioned shortcut keys (weighted).) →  Kosten bei schlecht positionierten xcvz # ( 1.17525416 no handswitching after unbalancing key (weighted).) → Kein Handwechsel nach Tasten, die die Hand aus dem Gleichgewicht ziehen. # ( 3.46710072 movement pattern cost (weighted).) →  Kosten von Fingerübergängen (bisher nur abgeschätzte Kosten der Übergänge) }}} == Andere Layouts zum Vergleich == === Neo 2 === {{{ xvlcw khgfqß´ uiaeo snrtdy üöäpz bm,.j ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬──────┐ │ ^ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ ` │ ← │ ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬────┤ │ ⇥ │ x │ v │ l │ c │ w │ k │ h │ g │ f │ q │ ß │ ´ │ Ret│ ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │ │ ⇩ │ u │ i │ a │ e │ o │ s │ n │ r │ t │ d │ y │ ⇘ │ │ ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴───┤ │ ⇧ │ M4│ ü │ ö │ ä │ p │ z │ b │ m │ , │ . │ j │ ⇗ │ ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴─┬─┴──┬┴───┼────┬────┤ │Strg│ Fe │ Alt│ Leerzeichen │ M4 │ Fe │ Me │Strg│ └────┴────┴────┴───────────────────────┴────┴────┴────┴────┘ # 13.41630 x100 total penalty per letter # 49.10005 x10 billion total penalty compared to notime-noeffort # 7.359111 mean key position cost in file 1gramme.txt ( 53.86473966 ) # 41.17544 % finger repeats in file 2gramme.txt ( 165.64218441 ) # 12.36402 million keystrokes disbalance of the fingers ( 18.546034618 ) # 0.860423 % finger repeats top to bottom or vice versa ( 17.3067224476 ) # 2.526418 % of trigrams have no handswitching (after direction change counted x 1 ) ( 11.175141922 ) # 12.89494 billion (rows²/dist)² to cross ( 167.634334583 ) # 0.009549 hand disbalance. Left: 0.490450663465 %, Right: 0.509549336535 % ( 0.279584019349 ) # 0.0 badly positioned shortcut keys (weighted). # 16.49474 no handswitching after unbalancing key (weighted). # 12.92256 movement pattern cost (weighted). # 0.827429 asymmetric bigram cost (weighted). # 14.65591 manually assigned bigram penalty (weighted) # 11.65114 unbalancing key after neighboring finger (weighted) }}} === Qwertz === {{{ qwert zuiopü+ asdfg hjklöä