Tangentbord

Här diskuteras programmering och utveckling
MrYdremark
Inlägg: 83
Blev medlem: 07 apr 2007, 18:47
OS: Ubuntu
Utgåva: 12.04 Precise Pangolin LTS
Ort: Linköping
Kontakt:

Tangentbord

Inlägg av MrYdremark »

Tja, jag vill ha ett program som registrerar tangenttryckningar och visar statistik på vilka man använder mest så att om man vill man kan programmera om tangentbordet.!

Jag vet att vanligast är att skriva programmet själv men tänkte att det borde kanske finnas?!
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Tangentbord

Inlägg av Konservburk »

MrYdremark skrev:Tja, jag vill ha ett program som registrerar tangenttryckningar och visar statistik på vilka man använder mest så att om man vill man kan programmera om tangentbordet.!
Vad hade du tänkt dig? Bara registrera vilka tangenter som är vanligast för just dig så att du kan mappa om tangentbordet så att de vanligaste tangenterna hamnar bättre till? Eller ville du ha något mer avancerat som även tar hänsyn till i vilken ordning du trycker på tangenterna? Och isf, räcker det med ett minne bakåt? Eller ska det vara minne i flera steg?
MrYdremark
Inlägg: 83
Blev medlem: 07 apr 2007, 18:47
OS: Ubuntu
Utgåva: 12.04 Precise Pangolin LTS
Ort: Linköping
Kontakt:

Re: Tangentbord

Inlägg av MrYdremark »

mer tänkt mig något som visar villka tangenter jag använder mest så jag kan mappa om dom så de hamnar bättre till!
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Tangentbord

Inlägg av Konservburk »

Jag tycker att det här är ett väldigt intressant ämne. Just att försöka anpassa tangentbordslayouten helt efter egna behov.

Om vi börjar med att skilja vi på tecken och tangenter. Ett tecken kan flyttas till vilken tangent som helst, medan tangenterna sitter där de sitter. En bra tangentbordslayout ska alltså ha de vanligaste tecknen på de bäst belägna tangenterna.

För att kunna jämföra olika tangentbordslayouter behöver vi veta två saker; Hur vanliga de olika tecknen är, samt hur bra de olika tangenternas lägen är.

Du frågar efter ett program som kan hjälpa dig med den första biten. Men den andra biten är minst lika viktig. Det är ganska självklart att tangenter som ligger nära pekfingrarna har bättre lägen än de som ligger vid lillfingrarna. Men det är inte hela sanningen.

Om en tangent har ett bra läge eller inte beror även mycket på vilken tangent som trycktes ner gången innan (Även tangenten som trycktes ner två gånger innan kan vara intressant beroende på hur snabbt man skriver). För att förtydliga... två olika tangenter undre höger pekfinger har var för sig mycket bra lägen, men att trycka på dem efter varandra är betydligt sämre än att trycka på två tangenter med olika fingrar.

Därför är det intressant att ta hänsyn till ordningen, i alla fall i ett minnessteg. Det behövs om man överhuvudtaget ska komma i närheten av tangentbordslayouter som redan finns, t.ex. dvorak. Två steg kostar däremot nästan helt säkert mer än vad det smakar.

Med ett minnessteg så är det inte längre tangentens läge som är viktigt, utan det är följden av två tangenttryckningar som betygsätts. Man ska med andra ord matcha in de vanligaste (två)teckenföljderna så att de hamnar på de bästa tangentföljderna. Vi vet t.ex. att teckenföljden "en" är väldigt vanlig. Då ska e och n ligga på tangenter som tillsammans har ett bra tangentföljdsbetyg.

Om du inte är intresserad av att ta med något minnessteg så kan du lika gärna köra med dvorak eller motsvarande. Det ger helt säkert ett bättre resultat.
MrYdremark
Inlägg: 83
Blev medlem: 07 apr 2007, 18:47
OS: Ubuntu
Utgåva: 12.04 Precise Pangolin LTS
Ort: Linköping
Kontakt:

Re: Tangentbord

Inlägg av MrYdremark »

Jo precis. riktigt intressant det här alltså.. har också tänkt på just det där med olika tangentföljder. men hur får man reda på just dessa?

Man kan ju skriva något program som visar vilka olika tangentföljder som används mest under, ska vi säga, en månads tid. Men min fråga är då, finns det något färdigt sådant program? eller någon här som har skrivit något liknande och vill dela med sig, eller måsta jag börja klura på hur man ska skriva det själv?

Jag vill ju ha det så personligt som möjligt så just de tangentföljder jag använder mest sitter på de ställe där jag tycker det känns bäst..

Skriv gärna vad ni alla andra tycker o om ni har på något annorlunda sätt eller liknande! Intressant att veta.

Pace! O0
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Tangentbord

Inlägg av Konservburk »

MrYdremark skrev:har också tänkt på just det där med olika tangentföljder. men hur får man reda på just dessa?

Man kan ju skriva något program som visar vilka olika tangentföljder som används mest under, ska vi säga, en månads tid.
För att få en riktigt bra tangentbordslayout vill du inte bara veta vilka teckenfölder som är vanligast, du vill veta exakt hur vanliga alla olika teckenföljder är i förhållande till varandra, så att även de ovanligaste hamnar "rätt".

Jag pysslade en del med det här för ett par år sedan. Det du vill ha är två matriser. En för teckenföljder och en för tangentföljder.

Varje element i teckenföljds-matrisen ska representera hur vanlig en viss teckenföljd är... Säg att du numrerar tecknen så att e får nummer 4 och n får nummer 14. Då ska matriselementet (4,14) representera hur vanlig teckenkombinationen "en" är, dvs hur många gånger just den kombinationen förekommer under dina mätningar (delat på det totala antalet uppmätta teckenkombinatinoer). På samma sätt representerar matriselement (14,4) hur vanlig teckenkombinationen "ne" är. Det blir alltså en kvadratisk matris med (antalet tecken)^2 olika värden.

För att få värden till din matris kan du så klart använda ett sånt program som du frågar efter. Jag hade inte så stort tålamod att jag orkade vänta flera månder på resultatet. Så jag gick istället igenom färdiga texter och räknade teckenkombinationer i dem. Jag använde svenska och engelska ordlistor, mängder av nyhetsartiklar från bland annat dagens nyheter, och såklart en massa saker som jag skrivit själv.

När det gäller tangentföljdsmatrisen så är det svårare att få bra värden till den. Varje matriselement representerar här hur bra en viss tangentföljd är. Det ska såklart vara en kvadratisk matris med (antalet tangenter)^2 matriselement. Element (1,2) anger hur jobbigt det är att trycka på tangent 1 följt av tangent 2. Och omvänt anger element (2,1) hur jobbigt det är att trycka på tangent 2 följt av tangent 1. Ett tangentföljd med värde 0 är absolut bäst eftersom den inte kostar något.

Min tangentföljdsmatris tar hänsyn till en massa saker, och är mycket bra om man använder touchtyping. Men den skulle fortfarande kunna behöva en del justeringar när det gäller inbördes kostnadsrelationer, dvs hur mycket dyrare en viss tangentkombination ska vara jämfört med en annan.

För att tillslut få fram ett mätvärde på hur bra en tangentbordslayout är, så är det bara att räkna ihop allting. Multiplicera varje teckenkombinationsvärde med motsvarande tangentkombinationsvärde och addera ihop resultatet. Vi får lägst totalvärden om vanliga teckenkombinationer (höga värden) mutipliceras ihop med bra tangentkombinationer (låga värden), och ovanliga teckenkombinatier (låga värden) mutlipliceras med dåliga tangentkombinatienor (höga värden). Ju lägre totalvärde, desto bättre tangentbordslayout med andra ord.

För att det inte ska vara alltför förvirrande så tar vi ett enkelt exempel:

Vi har två tecken, a och b, samt två tangenter #1 och #2. Vi vet hur oftar de olika teckenkombinationerna förekommer: ab=10ggr, ba=15ggr, aa=0ggr och bb=5ggr. Samt hur kostsamma de olika tangentkombinatinerna är: #1#2=0, #2#1=0.5, #1#1=0.9, #2#2=1.

Om vi väljer att placera a på #1 och b på #2 så får vi följande totalkostnad:
(aa)*(#1#1) + (ab)*(#1#2) + (ba)*(#2#1) + (bb)*(#2#2) = 0*0.9 + 10*0 + 15*0.5 + 5*1 = 12.5

Väljer vi istället att placera b på #1 och a på #2 så blir totalkostnaden:
(bb)*(#1#1) + (ba)*(#1#2) + (ab)*(#2#1) + (aa)*(#2#2) = 5*0.9 + 15*0 + 10*0.5 + 0*1 = 9.5

Det är alltså mycket bättre att placera b på #1 och a på #2 jämfört med tvärt om.
Användarvisningsbild
gasol
Inlägg: 405
Blev medlem: 27 jul 2007, 14:57
Kontakt:

Re: Tangentbord

Inlägg av gasol »

Jag har ett program som räknar hur många tecken du skriver, det är baserat på en keylogger till X (xspy), borde vara ganska simpelt att skriva om så att det kan räkna hur många gånger du skriver alla olika tecken.

Det borde inte heller vara så svårt att utöka till att spara sekvenser heller problemet är väl hur man ska ta å spara dessa på nåt vettigt sätt.
kanske nån tuppel i stilen med (sekvens, antal gånger) typ (apa, 45). Med något timeout värde för hur länge det går innan man påbörjar en ny sekvens.

Kod: Markera allt

/* compile: gcc -o counter counter.c -lX11 -Wall -std=c99
 * usage: counter file
 *
 * Based on:
 *   xspy
 *   Jon A. Maxwell (JAM)
 *   jmaxwell@acm.vt.edu
 *
 */

#include <X11/Xlib.h>
#include <X11/X.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/time.h>
#include <unistd.h>
#include <signal.h>


#define DEFAULT_DISPLAY ":0"
#define DEFAULT_DELAY   10000
#define BIT(c, x)   ( c[x/8]&(1<<(x%8)) )
#define TRUE    1
#define FALSE   0

long int count;
FILE *f;

void usleep(int x) {
   struct timeval  time;

   time.tv_sec= x/1000000;
   time.tv_usec=x%1000000;
   select(0, NULL, NULL, NULL, &time);
}

void sig_hant(int sig) {
   rewind(f);
   fprintf(f,"%ld",count);

   exit(0);
}


int main(int argc, char *argv[]) {
   char    *hostname=DEFAULT_DISPLAY,
           *char_ptr,
           buf1[32],   buf2[32],
           *keys,
           *saved,
           saved_count[256];
   int i, delay=DEFAULT_DELAY;
   Display *disp;
   pid_t pid;

   signal(SIGTERM,sig_hant);

   if(argc < 2) {
      fprintf(stderr,"usage %s file\n",argv[0]);
      return -1;
   }

   if((pid = fork()) < 0) {
      fprintf(stderr,"cant fork(1)!");
   } else if(pid !=0) {
      exit(0);
   }

   if((pid=fork()) < 0)
      fprintf(stderr,"cant fork(2)!");
   else if(pid != 0)
      exit(0);

   setsid();

   f = fopen(argv[1],"r+");
   if(f == NULL) {
      fprintf(stderr,"could not open file\n");
      return -1;
   }

   memset(saved_count,0,256);
   fread(saved_count,256,sizeof(char),f);

   count = atol(saved_count);
   //printf("Initial count %ld\n",count);

   /* setup Xwindows */
   disp=XOpenDisplay(hostname);
   if (NULL==disp) {
      fprintf(stderr, "Cannot open X display: %s\n", hostname);
      return -1;
   }


   XSynchronize(disp, TRUE);

   /* setup buffers */
   saved=buf1;
   keys=buf2;
   XQueryKeymap(disp, saved);

   while (1) {
      /* find changed keys */
      XQueryKeymap(disp, keys);
      for (i=0; i<32*8; i++) {
         if (BIT(keys, i)!=BIT(saved, i)) {
            if (BIT(keys, i) != 0 )  {
               count++;
              /* printf("count %ld\n",count);*/
               if(!(count % 10)) {
               rewind(f);
               fprintf(f,"%ld",count);
               }
            }
         }
      }

      /* swap buffers */
      char_ptr=saved;
      saved=keys;
      keys=char_ptr;

      usleep(delay);
   }
}


The Black Mountain Scorpion Hoedown Bluegrass Experience Gang
From Left to Right: Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle.
MrYdremark
Inlägg: 83
Blev medlem: 07 apr 2007, 18:47
OS: Ubuntu
Utgåva: 12.04 Precise Pangolin LTS
Ort: Linköping
Kontakt:

Re: Tangentbord

Inlägg av MrYdremark »

Tja. Jag testar att köra Dvorak men kan inte byta plats på B och X tangenterna. nån som vet hur man mappar om de två så att jag får dem där jag vill?

//Anders
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Tangentbord

Inlägg av Konservburk »

MrYdremark skrev:Tja. Jag testar att köra Dvorak men kan inte byta plats på B och X tangenterna. nån som vet hur man mappar om de två så att jag får dem där jag vill?
Jag vet hur man gör. Men jag undrar varför du vill byta plats på B och X om du tänkt använda dvorak? Det finns en anledning till att just X sitter där den sitter på dvorak-layouten. Det är nämligen en av de sämsta tangentpositionerna pa hela tangentbordet, och att ha en mycket vanligare bokstav som B där är bara dumt.

Om du skriver mycket mer svenska än engelska så finns det betydligt bättre justeringar att göra än att byta just B och X. Du vill t.ex. nästan helt säkert flytta R så att den hamnar på höger "hemrad". Det är även en bra idé att byta plats på C och K, samt V och W.

Sen har vi det här med Å, Ä, Ö. Det är vokaler, så du vill ha dem på vänstra sidan av tangentbordet. Men ingen av de svenska justeringar av dvorak som jag har sett hittills verkar över huvud taget bry sig om att Ä är mycket vanligare än Å och Ö.
Användarvisningsbild
sontho
Inlägg: 312
Blev medlem: 05 sep 2006, 21:29
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Ort: Karlskoga, Värmland

Re: Tangentbord

Inlägg av sontho »

En lite nyfiken fråga så här mitt i.
Ni som använder andra layouter, hur tycker ni det fungerar när ni kommer till en annan dator, det lär ju med största säkerhet vara gamla vanliga qwerty där.
Är bara lite nyfiken, och vid tillfälle ska jag nog testa dvorak bara för att prova.

Thomas Nyfiken
Användarvisningsbild
mcNisse
Inlägg: 5211
Blev medlem: 06 feb 2007, 20:51
OS: Debian
Utgåva: Vet inte/ingen utgåva passar

Re: Tangentbord

Inlägg av mcNisse »

sontho skrev:En lite nyfiken fråga så här mitt i.
Ni som använder andra layouter, hur tycker ni det fungerar när ni kommer till en annan dator, det lär ju med största säkerhet vara gamla vanliga qwerty där.
Är bara lite nyfiken, och vid tillfälle ska jag nog testa dvorak bara för att prova.

Thomas Nyfiken
För min del går det relativt bra. Det står ju vilket tecken man ska trycka... ;) Men det går långsamt.

Som tur är går det relativt enkelt att byta till amerikansk dvorak på windowsburkar och linux maskiner är det enkelt så länge man håller sig till skrivbordsmiljöerna.

Jag skriver nu enbart med höger hand. Och har av den anledningen bytt tillbaka till qwerty.
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Tangentbord

Inlägg av Konservburk »

mcNisse skrev:Jag skriver nu enbart med höger hand. Och har av den anledningen bytt tillbaka till qwerty.
När det finns en specialanpassad högerhands-dvorak! ;)
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Tangentbord

Inlägg av Konservburk »

sontho skrev:En lite nyfiken fråga så här mitt i.
Ni som använder andra layouter, hur tycker ni det fungerar när ni kommer till en annan dator, det lär ju med största säkerhet vara gamla vanliga qwerty där.
Det är egentligen inga problem. Mest en bekvämlighetsfråga för min del. Lite som att sitta på träpall när man är van vid fotölj.
Användarvisningsbild
mcNisse
Inlägg: 5211
Blev medlem: 06 feb 2007, 20:51
OS: Debian
Utgåva: Vet inte/ingen utgåva passar

Re: Tangentbord

Inlägg av mcNisse »

Konservburk skrev:
mcNisse skrev:Jag skriver nu enbart med höger hand. Och har av den anledningen bytt tillbaka till qwerty.
När det finns en specialanpassad högerhands-dvorak! ;)
:D
Jo jag vet... men det tog mig nästan ett halvår att lära mig dvorak och jag är enarmad bara en vecka till.
MrYdremark
Inlägg: 83
Blev medlem: 07 apr 2007, 18:47
OS: Ubuntu
Utgåva: 12.04 Precise Pangolin LTS
Ort: Linköping
Kontakt:

Re: Tangentbord

Inlägg av MrYdremark »

Jag är också mer ute efter att testa Dvorak lite. kul o se hur de känns. alltså jag vill inte byta plats så att säga. men jag kan inte sätta fast tangenten just där B o X Ska sitta så att säga. de ska ju sitta brevid varandra. så jag skulle bara lägga om de...

Kan någon säga hur man gör? i allmänhet är det bra/kul o veta hur man gör!

//Anders
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Tangentbord

Inlägg av Konservburk »

MrYdremark skrev:Jag är också mer ute efter att testa Dvorak lite. kul o se hur de känns. alltså jag vill inte byta plats så att säga. men jag kan inte sätta fast tangenten just där B o X Ska sitta så att säga. de ska ju sitta brevid varandra. så jag skulle bara lägga om de...
Visst ligger X och B brevid varandra, men med dvorak så skriver du X med vänsterhanden och B med högerhanden. Det blir en j-vla skillnad om du byter plats på just de tangenterna.

Det är helt enkelt inge bra idé. Mixtra inte med layouten om du verkligen vill testa dvorak. Vill du ha något bättre än dvorak så finns det en massa vettiga justeringar du kan göra, men att byta plats på B och X är inte en av dem.
Användarvisningsbild
mcNisse
Inlägg: 5211
Blev medlem: 06 feb 2007, 20:51
OS: Debian
Utgåva: Vet inte/ingen utgåva passar

Re: Tangentbord

Inlägg av mcNisse »

MrYdremark skrev:Jag är också mer ute efter att testa Dvorak lite. kul o se hur de känns. alltså jag vill inte byta plats så att säga. men jag kan inte sätta fast tangenten just där B o X Ska sitta så att säga. de ska ju sitta brevid varandra. så jag skulle bara lägga om de...
Mixra inte med tangentbordet. F och J måste sitta där de sitter för att man ska hitta tillbaka med händerna till rätt position ifall att man tappar bort sig, utan att titta på tangentbordet.

Jag lärde mig dvoak genom att skriva ut layouten med både qwerty och dvorak symbolerna och genom en sajt där man kunde träna på att skriva. Poängen med dvorak är ju att lära sig skriva utan att titta på tangentbordet, och då spelar det ingen roll vad som står på dem!?
MrYdremark
Inlägg: 83
Blev medlem: 07 apr 2007, 18:47
OS: Ubuntu
Utgåva: 12.04 Precise Pangolin LTS
Ort: Linköping
Kontakt:

Re: Tangentbord

Inlägg av MrYdremark »

är det någon som vet hur man mappar om tangenterna. skitsamma om man inte ska eller så, vill veta hur man gör!

/Anders ;)
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Tangentbord

Inlägg av Konservburk »

MrYdremark skrev:är det någon som vet hur man mappar om tangenterna. skitsamma om man inte ska eller så, vill veta hur man gör!
Jo, jag vet hur man gör. Jag ville bara få dig att tänka till en extra gång innan du gör något som du kan komma att ångra senare.

Men för att svara på frågan: Antingen använder du den gamla och enkla xmodmap, eller den nya, mer flexibla (och svårare) xkb.
Skriv svar

Återgå till "Programmering och webbdesign"