ოპტიმალური განლაგების შერჩევა

ISO კლავიატურის შიდა ნაწილის 35 კლავიში საკმარისია ქართული ასოების და ორი ყველაზე გავრცელებული სასვენი ნიშნის დასაბინავებლად. საკითხავია მხოლოდ რა მიმდევრობით უნდა განვალაგოთ ასონიშნები რომ კლავიატურა საბეჭდად ოპტიმალური გამოდგეს.

ISO კლავიატურა

ხანდახან მარტივ კითხვაზე მარტივი პასუხის გაცემა არ არის მარტივი. თუმცა ამ დარგში ბევრი რამე უკვე გაკეთებულია. არსებობს კლავიატურის განლაგების შეფასების მოდელები, მათ შორის საკმაოდ კარგი ბეჭდვის ძალისხმევის შეფასების მოდელი რომელიც Carpalx ღია პროექტის ფარგლებში შეიქმნა.

არსებობს ქართული ვიკიპედია, რომლის სტატიების არქივი ღიად მისაწვდომია და შესაძლებელია მისი გამოყენება როგორც ასოთა კომბინაციების სიხშირული განაწილების დასადგენან ასევე სანიმუშო ტექსტად კლავიატურის განლაგების შეფასების და ოპტიმიზაციის პროცესში.

ძირითად სირთულედ რჩება შესაძლო განლაგებათა დიდი რიცხვი, რაც შეუძლებელ ხდის ყველა მათგანის სათითაო შეფასებას. 35 ასონიშნის დალაგება 35! გზით შეიძლება რაც 1040 რიგის რიცხვია და დღევანდელი პროცესორების შესაძლებლობების გათვალისწინებით ეს ის შემთხვევაა როცა ხერხი ჯობია ღონესა. ერთ-ერთი პრაგმატური მიდგომაა სტოქასტიკური მეთოდების მოშველიებაა, რაც კარგი გამოსავალია. ამ გზით მოიძებნა ოპტიმალური ინგლისურ, ჰოლანდიურ და ლატვიურენოვანი განლაგებები. ოპტიმიზაციის პროცესი ხანგრძლივია, მაგრამ შედეგი დახარჯულ დროს ამართლებს.

ხელდასახმარი განლაგება

ხელდასახმარი განლაგება არის Carpalx ოპტიმიზაციის გზით მიღებული ISO კლავიატურაზე გათვლილი ქართული განლაგება. საწყისი ოპტიმიზაციის პროცესში ჩართული იყო ISO კლავიატურის სამივე შიდა მწკრივი, 33 ქართული ასო და ორი ყველაზე გავრცელებული სასვენი ნიშანი (წერტილი და მძიმე). როცა ოპტიმიზაციის პროცესში გამოჩნდა, რომ სასვენი ნიშნების კლასიკური განლაგება ხელსაყრელ ვარიანტებს შორის ფიგურირებს მათი მდებარეობა დაფიქსირდა და ამით შესაძლო კონფიგურაციების რიცხვი შემცირდა 33! მნიშვნელობამდე. ფიქსირებული მდებარეობის მიუხედავად სასვენი ნიშნები გათვალისწინებულია ბეჭდვის ძალისხმევის შეფასებისას და გავლენას ახდენენ მთელ განლაგებაზე ოპტიმიზაციის ყველა ეტაპზე.

გავრცელებული QWERTY ფუძეზე აგებული კლავიატურებთან შედარებით ის ორჯერ ამცირებს ბეჭდვის ძალისხმევას, და თითების ხორიზონტალურ მოძრაობას, ორჯერ ეფექტურად იყენებს შინა მწკრივს, მოუხერხებელი ქვედა მწკრივზე მოსული დატვირთვის ორჯერ შემცირებთან ერთად. მცირდება მოუხერხებელი მოძრაობების და მწკრივებს შორის ნახტომების სიხშირეც.

⟵ 20.4%
⟵ 71%
, . ⟵ 8.6% (სასვენი ნიშნების ჩათვლით)

დატვირთვის დიდი ნაწილი მოდის შინა მწკრივზე და 60% რვა კლავიშზე რომლებიც კონტაქტური ბეჭდვისას უშუალოდ თითის წვერებზეა. და ზოგადად გავრცელებული ასოები განთავსებულია შინა და ზედა მწკრივების საუკეთესო პოზიციებზე, მაშინ როცა იშვიათ ასოებს ნაკლებად მოსახერხებელი ქვედა და კიდურა ადგილები ეთმობა. გავრცელებული მომიჯნავე წყვილები და სამეულები ნაწილდება სხვა და სხვა თითებზე, რაც სწრაფ მბეჭდავებს სისწრაფის შენარჩუნებაში ეხმარება.

თითებზე დატვირთვის განაწილება

ათ თითზე დატვირთვის განაწილება დათვლილია ბოლოკიდური ასოების სიხშირური განაწილების გათვალისწინებით იმ დაშვებით რომ ნიშანსივრცეზე პასუხისმგებელია თავისუფალი ხელის ცერი. რვა თითზე ასონიშნების განაწილება დათვლილია ტრადიციული გზით ნიშანსივრცის გამოტოვებით. დატვირთვის ძირითადი ნაწილი მოდის მოქნილ საჩვენებელ და ძლიერ შუა თითებზე.

განლაგების ძირითადი მახასიათებლები მოყვანილია Carpalx ანგარიშში. 1.717 ბეჭდვის ძალისხმევაა. ეს შედეგი შესადარია საუკეთესო ინგლისურენოვან კლავიატურების მაჩვენებლებთან და საგრძნობად უკეთესია არსებული ქართული კლავიატურების მაჩვენებლებზე. გასათვალისწინებელია ისიც რომ ზემოხსენებული ინგლისურენოვან კლავიატურების ძალისხმევის მაჩვენებლები დათვლილია მხოლოდ ანბანური ნაწილსთვის (26 ასო), მაშინ როცა აქ საუბარია 35 ასონიშანზე ხოლო ანბანური ნაწილისთვის გადათვლის შემთხვევაში (33 ასო) მიიღება უკეთესი შედეგი (1.675).

Keyboard effort
------------------------------------------------------------
k1                      0.781  82.9  82.9
k1,k2                   0.926  15.4  98.3
k1,k2,k3                0.942   1.7 100.0
b                       0.384  22.4  22.4
p                       0.559  32.5 168.7
ph                      0.000   0.0   0.0
pr                      0.168  30.1  30.1
pf                      0.347  62.1  92.2
s                       0.774  45.1 100.0
all                     1.717 100.0 100.0

#data effort_k1=>[0.781,82.907,82.907],
#data effort_k12=>[0.926,15.386,98.293],
#data effort_k123=>[0.942,1.707,100.000],
#data effort_base=>[0.384,22.350,22.350],
#data effort_penalty=>[0.559,32.544,168.677],
#data effort_penalty_hand=>[0.000,0.000,0.000],
#data effort_penalty_row=>[0.168,30.102,30.102],
#data effort_penalty_finger=>[0.347,62.134,92.237],
#data effort_path=>[0.774,45.106,100.000],
#data effort_all=>[1.717,100.000,100.000],

keyboard row frequency
------------------------------------------------------------
1                     7924939 20.4  20.4
2                    27589914 71.0  91.4
3                     3325133  8.6 100.0

#data row_data=>[qw(1 2 3)],
#data row_frequency=>[0.204,0.710,0.086],
#data row_cumulative=>[0.204,0.914,1.000],

keyboard hand frequency
------------------------------------------------------------
0                    19934224 51.3  51.3
1                    18905762 48.7 100.0

#data hand_data=>[qw(0 1)],
#data hand_frequency=>[0.513,0.487],
#data hand_cumulative=>[0.513,1.000],

keyboard finger frequency
------------------------------------------------------------
0                     1767581  4.6   4.6
1                     2839826  7.3  11.9
2                     6147206 15.8  27.7
3                     9179611 23.6  51.3
6                     8000604 20.6  71.9
7                     4931561 12.7  84.6
8                     3226525  8.3  92.9
9                     2747072  7.1 100.0

#data finger_data=>[qw(0 1 2 3 6 7 8 9)],
#data finger_frequency=>[0.046,0.073,0.158,0.236,0.206,0.127,0.083,0.071],
#data finger_cumulative=>[0.046,0.119,0.277,0.513,0.719,0.846,0.929,1.000],

keyboard left hand run length
------------------------------------------------------------
1                     5996177 51.9  51.9
2                     3363640 29.1  81.0
3                     1438879 12.5  93.5
4                      464834  4.0  97.5
5                      183974  1.6  99.1
6                       66434  0.6  99.7
7                       23027  0.2  99.9
8                        9143  0.1 100.0
9                        2987  0.0 100.0
10                       1243  0.0 100.0
11                        396  0.0 100.0
12                        165  0.0 100.0
13                         46  0.0 100.0
14                         19  0.0 100.0
15                          5  0.0 100.0
16                          1  0.0 100.0
17                          3  0.0 100.0
18                          1  0.0 100.0
23                          1  0.0 100.0

#data left_hand_run_data=>[qw(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 23)],
#data left_hand_run_frequency=>[0.519,0.291,0.125,0.040,0.016,0.006,0.002,0.001,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000],
#data left_hand_run_cumulative=>[0.519,0.810,0.935,0.975,0.991,0.997,0.999,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000],

keyboard right hand run length
------------------------------------------------------------
1                     6592398 57.1  57.1
2                     3072220 26.6  83.7
3                     1203944 10.4  94.1
4                      439847  3.8  97.9
5                      149458  1.3  99.2
6                       59839  0.5  99.7
7                       22383  0.2  99.9
8                        6969  0.1 100.0
9                        2577  0.0 100.0
10                        853  0.0 100.0
11                        314  0.0 100.0
12                         96  0.0 100.0
13                         42  0.0 100.0
14                         18  0.0 100.0
15                          5  0.0 100.0
16                          4  0.0 100.0
17                          1  0.0 100.0
18                          1  0.0 100.0
19                          1  0.0 100.0
20                          1  0.0 100.0
25                          1  0.0 100.0
26                          1  0.0 100.0
32                          1  0.0 100.0

#data right_hand_run_data=>[qw(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 25 26 32)],
#data right_hand_run_frequency=>[0.571,0.266,0.104,0.038,0.013,0.005,0.002,0.001,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000],
#data right_hand_run_cumulative=>[0.571,0.837,0.941,0.979,0.992,0.997,0.999,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000],

keyboard hand run length
------------------------------------------------------------
1                    12588575 54.5  54.5
2                     6435860 27.9  82.3
3                     2642823 11.4  93.8
4                      904681  3.9  97.7
5                      333432  1.4  99.1
6                      126273  0.5  99.7
7                       45410  0.2  99.9
8                       16112  0.1 100.0
9                        5564  0.0 100.0
10                       2096  0.0 100.0
11                        710  0.0 100.0
12                        261  0.0 100.0
13                         88  0.0 100.0
14                         37  0.0 100.0
15                         10  0.0 100.0
16                          5  0.0 100.0
17                          4  0.0 100.0
18                          2  0.0 100.0
19                          1  0.0 100.0
20                          1  0.0 100.0
23                          1  0.0 100.0
25                          1  0.0 100.0
26                          1  0.0 100.0
32                          1  0.0 100.0

#data all_hand_run_data=>[qw(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 23 25 26 32)],
#data all_hand_run_frequency=>[0.545,0.279,0.114,0.039,0.014,0.005,0.002,0.001,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000],
#data all_hand_run_cumulative=>[0.545,0.823,0.938,0.977,0.991,0.997,0.999,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000],

keyboard top row run length
------------------------------------------------------------
1                     5021341 78.3  78.3
2                     1179387 18.4  96.7
3                      183698  2.9  99.5
4                       21883  0.3  99.9
5                        7432  0.1 100.0
6                         622  0.0 100.0
7                         114  0.0 100.0
8                          34  0.0 100.0
9                           1  0.0 100.0
10                          1  0.0 100.0

#data t_row_run_data=>[qw(1 2 3 4 5 6 7 8 9 10)],
#data t_row_run_frequency=>[0.783,0.184,0.029,0.003,0.001,0.000,0.000,0.000,0.000,0.000],
#data t_row_run_cumulative=>[0.783,0.967,0.995,0.999,1.000,1.000,1.000,1.000,1.000,1.000],

keyboard home row run length
------------------------------------------------------------
1                     2836053 32.0  32.0
2                     1721756 19.4  51.4
3                     1264189 14.3  65.7
4                     1039777 11.7  77.4
5                      629416  7.1  84.5
6                      461691  5.2  89.7
7                      301414  3.4  93.1
8                      205909  2.3  95.4
9                      135480  1.5  97.0
10                      89608  1.0  98.0
11                      59070  0.7  98.6
12                      38106  0.4  99.1
13                      26481  0.3  99.4
14                      17628  0.2  99.6
15                      11892  0.1  99.7
16                       8354  0.1  99.8
17                       5921  0.1  99.9
18                       3921  0.0  99.9
19                       2691  0.0  99.9
20                       1851  0.0 100.0
21                       1228  0.0 100.0
22                        793  0.0 100.0
23                        571  0.0 100.0
24                        376  0.0 100.0
25                        299  0.0 100.0
26                        166  0.0 100.0
27                        118  0.0 100.0
28                         92  0.0 100.0
29                         57  0.0 100.0
30                         36  0.0 100.0
31                         33  0.0 100.0
32                         21  0.0 100.0
33                         11  0.0 100.0
34                         10  0.0 100.0
35                          4  0.0 100.0
36                          1  0.0 100.0
37                          2  0.0 100.0
38                          1  0.0 100.0
39                          3  0.0 100.0
40                          1  0.0 100.0
41                          1  0.0 100.0
42                          1  0.0 100.0

#data h_row_run_data=>[qw(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42)],
#data h_row_run_frequency=>[0.320,0.194,0.143,0.117,0.071,0.052,0.034,0.023,0.015,0.010,0.007,0.004,0.003,0.002,0.001,0.001,0.001,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000],
#data h_row_run_cumulative=>[0.320,0.514,0.657,0.774,0.845,0.897,0.931,0.954,0.970,0.980,0.986,0.991,0.994,0.996,0.997,0.998,0.999,0.999,0.999,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000],

keyboard bottom row run length
------------------------------------------------------------
1                     3092927 93.7  93.7
2                      193166  5.9  99.6
3                       11959  0.4  99.9
4                        1615  0.0 100.0
5                         209  0.0 100.0
6                          43  0.0 100.0
7                          17  0.0 100.0
8                           5  0.0 100.0
9                           5  0.0 100.0
10                          3  0.0 100.0
11                          1  0.0 100.0
12                          2  0.0 100.0
14                          2  0.0 100.0
15                          1  0.0 100.0
26                          2  0.0 100.0
32                          1  0.0 100.0

#data b_row_run_data=>[qw(1 2 3 4 5 6 7 8 9 10 11 12 14 15 26 32)],
#data b_row_run_frequency=>[0.937,0.059,0.004,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000],
#data b_row_run_cumulative=>[0.937,0.996,0.999,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000],

keyboard row run length
------------------------------------------------------------
1                    10950321 58.9  58.9
2                     3094309 16.7  75.6
3                     1459846  7.9  83.4
4                     1063275  5.7  89.2
5                      637057  3.4  92.6
6                      462356  2.5  95.1
7                      301545  1.6  96.7
8                      205948  1.1  97.8
9                      135486  0.7  98.6
10                      89612  0.5  99.0
11                      59071  0.3  99.4
12                      38108  0.2  99.6
13                      26481  0.1  99.7
14                      17630  0.1  99.8
15                      11893  0.1  99.9
16                       8354  0.0  99.9
17                       5921  0.0  99.9
18                       3921  0.0 100.0
19                       2691  0.0 100.0
20                       1851  0.0 100.0
21                       1228  0.0 100.0
22                        793  0.0 100.0
23                        571  0.0 100.0
24                        376  0.0 100.0
25                        299  0.0 100.0
26                        168  0.0 100.0
27                        118  0.0 100.0
28                         92  0.0 100.0
29                         57  0.0 100.0
30                         36  0.0 100.0
31                         33  0.0 100.0
32                         22  0.0 100.0
33                         11  0.0 100.0
34                         10  0.0 100.0
35                          4  0.0 100.0
36                          1  0.0 100.0
37                          2  0.0 100.0
38                          1  0.0 100.0
39                          3  0.0 100.0
40                          1  0.0 100.0
41                          1  0.0 100.0
42                          1  0.0 100.0

#data all_row_run_data=>[qw(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42)],
#data all_row_run_frequency=>[0.589,0.167,0.079,0.057,0.034,0.025,0.016,0.011,0.007,0.005,0.003,0.002,0.001,0.001,0.001,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000],
#data all_row_run_cumulative=>[0.589,0.756,0.834,0.892,0.926,0.951,0.967,0.978,0.986,0.990,0.994,0.996,0.997,0.998,0.999,0.999,0.999,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000],

keyboard finger run length
------------------------------------------------------------
1                    34356732 92.7  92.7
2                     2527064  6.8  99.5
3                      170241  0.5 100.0
4                        9482  0.0 100.0
5                         498  0.0 100.0
6                          92  0.0 100.0
7                          22  0.0 100.0
8                           8  0.0 100.0
9                           8  0.0 100.0
10                          8  0.0 100.0
11                          3  0.0 100.0
12                          2  0.0 100.0
13                          1  0.0 100.0
14                          2  0.0 100.0
15                          2  0.0 100.0
17                          1  0.0 100.0
21                          1  0.0 100.0
25                          2  0.0 100.0
32                          1  0.0 100.0

#data finger_run_data=>[qw(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 17 21 25 32)],
#data finger_run_frequency=>[0.927,0.068,0.005,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000],
#data finger_run_cumulative=>[0.927,0.995,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000],

keyboard same-hand row jump length
------------------------------------------------------------
1                    25121657 79.9  79.9
2                     4329015 13.8  93.6
3                     1560612  5.0  98.6
4                      300291  1.0  99.6
5                      109240  0.3  99.9
6                       21919  0.1 100.0
7                        5671  0.0 100.0
8                         793  0.0 100.0
9                         236  0.0 100.0
10                         65  0.0 100.0
11                         67  0.0 100.0
12                         79  0.0 100.0
13                         21  0.0 100.0
14                          4  0.0 100.0
15                          1  0.0 100.0
18                          1  0.0 100.0

#data row_jump_data=>[qw(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 18)],
#data row_jump_frequency=>[0.799,0.138,0.050,0.010,0.003,0.001,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000],
#data row_jump_cumulative=>[0.799,0.936,0.986,0.996,0.999,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000],

რიცხვითი მწკრივი ოპტიმიზაციის პროცესში არ იყო ჩართული.

პირველი დონე

⇪ Caps Lock კლავიშს სხვა ფუნქცია მიენიჭა და ის Backspace კლავიშის მსგავსად წასაშლელად შეგიძლიათ გამოიყენოთ. ქვედა მწკრივის მოდიფიკატორები უცვლელი რჩება.

მეორე დონე

განლაგების მეორე დონე ეფექტურად იყენებს შინა და ზედა მწკრივების ყველაზე მოსახერხებელ პოზიციებს. მოუხერხებელი ქვედა და რიცხვითი მწკრივები ბოლომდე განტვირტულია. სიმბოლოები რომლებიც უშუალოდ ბოლოკიდურ ასოებს მოყვება ხოლმე, განლაგებულია ისე რომ გავრცელებული კომბინაცები არ მოხვდნენ ერთი და იგივე თითის ქმედების არეში.

ხელდასახმარ განლაგებაზე ყველაზე მარტივი ასაკრეფი სიტყვებია: მესამე, მესამედი, საიმედო, არემარე, ააირება, მესაათე, სიდიადე, ემისია, წესიერი, მედიანა. ყველაზე რთულია: ხუჭუჭა, ჟინჟღლი, ჩონჩხი, ბჟუტვა, ბუზღუნი, უჭკუობა, ჭანჭყატი, ფიფქია, ჭმუჭნა, ჟრჟოლა. სრული სია მისაწვდომია ხელდასახმარი განლაგების სიტყვარის სახით.

დაყენება

განლაგება გათვლილია ISO კლავიატურაზე (105-კლავიშიანი ევროკლავიატურა) და არათავსებადია ANSI კლავიატურასთან (104-კლავიშიანი სტანდარტური ამერიკური კლავიატურა). უფრო ზუსტად არსებობს საცდელი საჯარო მონახაზები ABNT, ANSI, ISO, JIS და KS კლავიატურებისთვისაც მაგრამ ამ ეტაპზე რეალიზებულია მხოლოდ ISO ვერსია.

Linux მომხმარებლებისთვის მისაწვდომია XKB კონფიგურაცია, რომელშიც ხელდასახმარი კლავიატურა რეალიზებულია როგორც მარტივი ორდონიანი განლაგება.

დასაყენებლად ჩამოტვირთეთ ქართული კონფიგურაციების შემცველი არქივი და გადაიტანეთ კლავიატურის კონფიგურაცია /usr/share/X11/xkb/symbols/ დირექტორიაში: sudo cp bmia /usr/share/X11/xkb/symbols/bmia ამის შემდეგ შეგიძლიათ განლაგების არჩევა: setxkbmap bmia ან ძირითად განლაგებად დასმა: localectl --no-convert set-x11-keymap bmia pc105

Windows მომხმარებლებისთვის მისაწვდომია განზადებული msi კონფიგურატორი, ხოლო შესწორებათა შეტანის მსურველებისთვის klc საკონფიგურაციო ფაილები.

19 აგვისტო 2020. გიორგი ჭავჭანიძე.