Re: [Neo] Nordtast und Neo in meinem Test-Script

2010-04-08 Diskussionsfäden Arne Babenhauserheide
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

2010-04-07 Diskussionsfäden Arne Babenhauserheide
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

2010-04-07 Diskussionsfäden Arne Babenhauserheide
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

2010-04-06 Diskussionsfäden Arne Babenhauserheide
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

2010-04-06 Diskussionsfäden Arne Babenhauserheide
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

2010-04-06 Diskussionsfäden wettstein509
 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

2010-04-06 Diskussionsfäden wettstein509
 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

2010-04-06 Diskussionsfäden Arne Babenhauserheide
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

2010-04-05 Diskussionsfäden Arne Babenhauserheide
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

2010-04-05 Diskussionsfäden wettstein509
 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

2010-04-04 Diskussionsfäden wettstein509
 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

2010-03-26 Diskussionsfäden Arne Babenhauserheide
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