Re: [Neo] Nordtast und Neo in meinem Test-Script
wettstein...@solnet.ch wrote: Ich überlege gerade, ob es sinnvoll wäre, noch die Streuung der Werte miteinzubeziehen, so dass es möglichst wenige worst case Worte gibt (sowas wie „Völkerball“ in Neo). Meinst du, dass man sich um einzelne Worte scheren soll? Klar, wenn ein wüstes Wort in einem Text dauernd vorkommt ist das vielleicht lästig, aber da kann man sich mit einem guten Editor weiterhelfen. Auf der Ebene ganzer Texte vermute ich, dass schon die Minimierung des Aufwands die Steuung klein macht: Das bezweifle ich. Ich kann mir viele Minima vorstellen, in denen 99% der Bigramme sehr gut tippbar sind, 1% aber richtig schlecht. Und das würde direkt den Textfluss brechen. Deswegen könnten wir die Abweichung der Bigramme (besser noch Trigramme – möglichst große Einheiten) noch quadratisch eingehen lassen (trotzdem gewichtet nach ihrer Häufigkeit). Ein Ausreißer hat dann eine viel negativere Wertung als aktuell, so dass Tastaturbelegungen mit einem gleichmäßigen Textfluss gefördert werden. Summe über { (Häufigkeit des Trigramms) * * (Kosten des Trigramms - Durchschnittskosten pro Trigramm)² / / ((Anzahl Bigramme)*(Anzahl -1)) } (gewichtete Varianz; die Wurzel wäre die Standardabweichung, welche sinnvoller ist, kann die Praxis zeigen) Liebe Grüße, Arne
Re: [Neo] Nordtast und Neo in meinem Test-Script
wettstein...@solnet.ch wrote: Nachtrag: Es ist toll, das in C++ zu sehen! Wie schnell ist dein Skript? Pro Minute kann ich auf einem Kern ungefähr 1 mal eine «lokal optimale» Belegung generieren, in dem Sinne, dass für diese Belegung kein Tausch zweier Tasten noch eine Verbesserung bringt. Das ist klasse! Mein Skript ist deutlich langsamer. Und deutlich heißt um viele Größenordnungen. Um eine einzelne fast optimale Belegung zu erzeugen, brauche ich über 1000 Schritte (geht alles zufällig), von denen jeder etwa eine Sekunde dauert (die Kostenfunktion ist der teuerste Teil). Lokal optimale Belegungen dauern noch länger (für jede mögliche Vertauschung einmal die Kostenfunktion aufrufen und dann nir den Bestmöglichen Schritt gehen). Ich könnte allerdings vermutlich mit zwischencachen einiges sparen – das Skript hat noch viele optimierbare Aufrufe. Erstmal will ich aber an den Parametern drehen. Liebe Grüße, Arne
Re: [Neo] Nordtast und Neo in meinem Test-Script
wettstein...@solnet.ch wrote: Könnte sein. Könnte auch sein dass es garnicht funktioniert und nur eine Reminiszenz an Herrn Dvorak ist. Einwärtsbewegungen gegenüber Auswärtsbewegungen generell zu bevorzugen ist vielleicht nur ein Relikt aus Zeiten der Mechanik, als man zum Tippen noch Kraft gebraucht hat. Aus den Gründen habe ich es erstmal rausgelassen. Wir müssen klären, ob Neo das haben soll. Liebe Grüße, Arne
Re: [Neo] Nordtast und Neo in meinem Test-Script
wettstein...@solnet.ch wrote: Denkst du, dass wir eine Korrelation zwischen unseren Optimierungs- Parametern finden können, um eine gemeinsame Grundlage zum Optimieren schaffen zu können? Ich glaube schon, die Struktur der Beurteilung ist ja ähnlich: Einzeltastengewichte, Bigrammgewichte, eine quadratische Funktion für die Abweichung der Anschlagshäufigkeit eines Fingers vom Soll. Abweichungen gibt es bei der Zahl der berücksichtigten Tasten und vielleicht bei der Behandlung von Shift. Ich glaube die real berücksichtigten Zeichen sind gleich (Kodierung::Klartext[] oder?). Ich habe zwar theoretisch noch andere in der Struktur, aber nur die, die einer Taste zugeordnet werden, sind wirklich für die Bewertung relevant. Einziger Unterschied (glaube ich): Ich habe Space mit drin. Damit sollten wir sie zusammenbringen können (sobald wir überhaupt belastbare Parameter haben) und so einen gemeinsamen Standard für die Optimierung schaffen. Meine aktuellen Kriterien sind in http://wettstae.home.solnet.ch/opt.c, siehe Funktion Aufwandstabelle::intialisiere_aufwandstabelle_andreas(). Klingt gut. Auswärtsbewegung habe ich bisher nicht drin, weil es dazu unterschiedliche Daten gab. Könnte es sein, dass Auswärts- oder Einwärtsoptimierung v.a. deswegen funktioniert, weil dann die Tasten eher in eine Richtung angeschlagen werden? In dem Fall wäre „Handwechsel bei Richtungswechsel“ vielleicht sinnvoll. Ich glaube aber nicht, dass man sich jetzt schon den Kopf über Koordination verschiedener Optimierer zerbrechen muss. An den Kriterien wird sowieso noch eine ganze Weile rumgepfuscht werden. Die eigentliche Schwierigkeit ist eher, nicht den Überblick über die verschiedenen Argumente zu verlieren, auf denen die Kriterien beruhen. Ich habe dafür am Anfang meines Skriptes etwa eine Seite Kommentare für die Argumente, wofür es alles Mali gibt (in Klammern das, bei dem ich nicht sicher bin). Vorgehensweise + Mali: http://bitbucket.org/ArneBab/evolve-keyboard- layout/src/tip/check_neo.py#cl-62 Das ist gleichzeitig meine Todo/Done-Liste, so dass ich hoffe, dass ich es aktuell halte. Liebe Grüße, Arne
Re: [Neo] Nordtast und Neo in meinem Test-Script
wettstein...@solnet.ch wrote: Meine aktuellen Kriterien sind in http://wettstae.home.solnet.ch/opt.c, siehe Funktion Aufwandstabelle::intialisiere_aufwandstabelle_andreas(). Nachtrag: Es ist toll, das in C++ zu sehen! Wie schnell ist dein Skript? LG, Arne
Re: [Neo] Nordtast und Neo in meinem Test-Script
Ich glaube die real berücksichtigten Zeichen sind gleich (Kodierung::Klartext[] oder?). Ja, richtig. Könnte es sein, dass Auswärts- oder Einwärtsoptimierung v.a. deswegen funktioniert, weil dann die Tasten eher in eine Richtung angeschlagen werden? Könnte sein. Könnte auch sein dass es garnicht funktioniert und nur eine Reminiszenz an Herrn Dvorak ist. Einwärtsbewegungen gegenüber Auswärtsbewegungen generell zu bevorzugen ist vielleicht nur ein Relikt aus Zeiten der Mechanik, als man zum Tippen noch Kraft gebraucht hat. Auf Ulfs Seiten gibt es einen Abschnitt zu dem Thema. Andreas
Re: [Neo] Nordtast und Neo in meinem Test-Script
Nachtrag: Es ist toll, das in C++ zu sehen! Wie schnell ist dein Skript? Pro Minute kann ich auf einem Kern ungefähr 1 mal eine «lokal optimale» Belegung generieren, in dem Sinne, dass für diese Belegung kein Tausch zweier Tasten noch eine Verbesserung bringt. Andreas
Re: [Neo] Nordtast und Neo in meinem Test-Script
Hi Andreas, Meine aktuellen Kriterien sind in http://wettstae.home.solnet.ch/opt.c, siehe Funktion Aufwandstabelle::intialisiere_aufwandstabelle_andreas(). Ich überlege gerade, ob es sinnvoll wäre, noch die Streuung der Werte miteinzubeziehen, so dass es möglichst wenige worst case Worte gibt (sowas wie „Völkerball“ in Neo). Damit sollte ein möglichst glatter Schreibfluss entstehen. Was denkst du dazu? Liebe Grüße, Arne
Re: [Neo] Nordtast und Neo in meinem Test-Script
wettstein...@solnet.ch wrote: Sonderzeichen ignoriere ich, und Großbuchstaben werden zu 0.5*(left_shift+key+right_shift+key), weil in der aktuellen Version beim Das Ergebnis sind bei Nordtast 1,8% Fingerwiederholungen; zumindest nach meiner Berechnungsmethode. Ich komme mit Leipziger Korpus auf 0,86% Kollisionen und 16,62% Shift-Kollionen. Letztere beziehen sich nur auf Anzahl geshifterter Zeichen. Mit ca. 6,6% Großbuchstaben komme ich also total in denselben Bereich wie du. Ulf nimmt Shift-Kollisionen nicht mit. Das ist gut zu wissen. Danke für die Info! (auch gut zu wissen, dass ich keinen krassen Fehler drin habe) Denkst du, dass wir eine Korrelation zwischen unseren Optimierungs- Parametern finden können, um eine gemeinsame Grundlage zum Optimieren schaffen zu können? Liebe Grüße, Arne
Re: [Neo] Nordtast und Neo in meinem Test-Script
Denkst du, dass wir eine Korrelation zwischen unseren Optimierungs- Parametern finden können, um eine gemeinsame Grundlage zum Optimieren schaffen zu können? Ich glaube schon, die Struktur der Beurteilung ist ja ähnlich: Einzeltastengewichte, Bigrammgewichte, eine quadratische Funktion für die Abweichung der Anschlagshäufigkeit eines Fingers vom Soll. Abweichungen gibt es bei der Zahl der berücksichtigten Tasten und vielleicht bei der Behandlung von Shift. Meine aktuellen Kriterien sind in http://wettstae.home.solnet.ch/opt.c, siehe Funktion Aufwandstabelle::intialisiere_aufwandstabelle_andreas(). Ich glaube aber nicht, dass man sich jetzt schon den Kopf über Koordination verschiedener Optimierer zerbrechen muss. An den Kriterien wird sowieso noch eine ganze Weile rumgepfuscht werden. Die eigentliche Schwierigkeit ist eher, nicht den Überblick über die verschiedenen Argumente zu verlieren, auf denen die Kriterien beruhen. Andreas
Re: [Neo] Nordtast und Neo in meinem Test-Script
Sonderzeichen ignoriere ich, und Großbuchstaben werden zu 0.5*(left_shift+key+right_shift+key), weil in der aktuellen Version beim Das Ergebnis sind bei Nordtast 1,8% Fingerwiederholungen; zumindest nach meiner Berechnungsmethode. Ich komme mit Leipziger Korpus auf 0,86% Kollisionen und 16,62% Shift-Kollionen. Letztere beziehen sich nur auf Anzahl geshifterter Zeichen. Mit ca. 6,6% Großbuchstaben komme ich also total in denselben Bereich wie du. Ulf nimmt Shift-Kollisionen nicht mit. Andreas
[Neo] Nordtast und Neo in meinem Test-Script
Hi, Kurzform: *Unterschiedliche Daten und Berechnungsgrundlagen machen Ergebnisse scheinbar selbst bei Punkten völlig unvergleichbar.* Ich habe lange Zeit gerätselt, wie Ulf auf seinen wahnwitzigen Wert von 0.8% Fingerwiederholungen kommt, während ich nur mit massivem Rechenaufwand in die Nähe von 1% komme. Gestern habe ich dann, als ich die Nordtast-Seite gelesen habe, einfach mal das Nordtast-Layout meinem Testscript hinzugefügt. Ergebnis: $ ./check_neo.py Neo [['^', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '`', ()], [(), 'x', 'v', 'l', 'c', 'w', 'k', 'h', 'g', 'f', 'q', 'ß', '´', ()], ['⇩', 'u', 'i', 'a', 'e', 'o', 's', 'n', 'r', 't', 'd', 'y', '⇘', '\n'], ['⇧', (), 'ü', 'ö', 'ä', 'p', 'z', 'b', 'm', ',', '.', 'j', '⇗'], [(), (), (), ' ', (), (), (), ()]] # 1.425330573 billion total penalty compared to notime-noeffort # 19.3670078482 million keystrokes disbalance of the fingers # 4.8219113 % finger repeats in file 2gramme.txt # 0.307224610884 % finger repeats top to bottom or vice versa # 4.70844781487 % of trigrams have no handswitching (uppercase ignored) # 3.9755737368 mean key position cost in file 1gramme.txt Qwertz for comparision [['^', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'ß', '´', ()], [(), 'q', 'w', 'e', 'r', 't', 'z', 'u', 'i', 'o', 'p', 'ü', '+', ()], [(), 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'ö', 'ä', (), '\n'], ['⇧', (), 'y', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '-', '⇗'], [(), (), (), ' ', (), (), (), ()]] # 2.079132135 billion total penalty compared to notime-noeffort # 19.6850637926 million keystrokes disbalance of the fingers # 6.72632774411 % finger repeats in file 2gramme.txt # 0.233732243474 % finger repeats top to bottom or vice versa # 11.5644849023 % of trigrams have no handswitching (uppercase ignored) # 5.9598742 mean key position cost in file 1gramme.txt And the Nordtast Layout [['^', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'ß', '´', ()], [(), 'ä', 'u', 'o', 'b', 'p', 'k', 'g', 'l', 'm', 'f', 'x', '+', ()], [(), 'a', 'i', 'e', 't', 'c', 'h', 'd', 'n', 'r', 's', 'ß', (), '\n'], ['⇧', (), '.', ',', 'ü', 'ö', 'q', 'y', 'z', 'w', 'v', 'j', '⇗'], [(), (), (), ' ', (), (), (), ()]] # 1.360731284 billion total penalty compared to notime-noeffort # 7.50010236662 million keystrokes disbalance of the fingers # 1.83742456166 % finger repeats in file 2gramme.txt # 0.260071071233 % finger repeats top to bottom or vice versa # 3.80773505265 % of trigrams have no handswitching (uppercase ignored) # 4.28745556484 mean key position cost in file 1gramme.txt Ich verwende zur Berechnung den vollständigen Leipziger Korpus (bzw. die daraus extrahierten 1- und 2-gramme). → http://lists.neo-layout.org/pipermail/diskussion/2009-December/015238.html → http://bitbucket.org/ArneBab/evolve-keyboard-layout/src/tip/1gramme.txt → http://bitbucket.org/ArneBab/evolve-keyboard-layout/src/tip/2gramme.txt → http://bitbucket.org/ArneBab/evolve-keyboard-layout/src/tip/3gramme.txt Sonderzeichen ignoriere ich, und Großbuchstaben werden zu 0.5*(left_shift+key+right_shift+key), weil in der aktuellen Version beim Behandeln der Großbuchstaben noch nicht bekannt ist, wo die Tasten liegen werden, also welches Shift genommen werden sollte. Das Ergebnis sind bei Nordtast 1,8% Fingerwiederholungen; zumindest nach meiner Berechnungsmethode. Es mag sein, dass ich einen Fehler drin habe, der meine Daten stark verfälscht (ich ihn aber noch nicht kenne, sonst wäre er nicht mehr drin :) ), aber zumindest sehe ich damit, dass meine Optimierungen nicht völlig kaputt sind. Und nach der Methode ist Neo bei weitem nicht so weit abgeschlagen (2,7 mal so viele Fingerwiederholungen statt 7,8 mal so viele). @Ulf: Hast du eine Idee, woran das liegen kann? Hast du andere Daten verwendet als ich? Die unterschiedliche Bewertung der Tastenkosten ist klar, aber warum unterscheiden sich die Fingerwiederholungen so stark? Vielleicht die Shift-Tasten? Fazit: Unterschiedliche Berechnungsmethoden und unterschiedliche Bewertungskriterien ergeben stark unterschiedliche Ergebnisse. Daher ist es wichtig, dass wir die Kriterien hier besprechen und dann klären, was rein soll. Der Computer mag das Denken unterstützen, aber er kann es nicht abnehmen. Egal wie intelligent er wird, wir müssen ihm immernoch genau sagen, was wir eigentlich wollen. Wer das selbst testen will, kann das übrigens auf 2 Arten machen (nur unter GNU/Linux getestet): 1. Tarball-Snapshot (braucht Python3 → http://python.org/download ) - wget http://bitbucket.org/ArneBab/evolve-keyboard- layout/get/55e78a669261.bz2 - tar xf 55e78a669261.bz2 - cd evolve-keyboard-layout/ - ./check_neo.py 2. Versionsverwaltung (braucht Python3 und Mercurial): - (falls noch nicht vorhanden: easy_install mercurial ) - hg clone https://arne...@bitbucket.org/ArneBab/evolve-keyboard-layout/ - cd evolve-keyboard-layout/ - ./check_neo.py Liebe Grüße, Arne PS: Damit klar ist aus welcher