2014-12-28

Zsh: 擬似ポインタを使った関数の制作

これまでは簡単な関数しか作っていなかったので、結果を戻すには;
  1. 結果をechoで表示して終わる、
  2. 結果をグローバル変数に書き込む、
従って「 インタラクティブな処理(echo read)を必要とした時」には、 2.の方法しか使えないので、手間が掛かる。

そこで「 "From Bash to Z shell", O. Kiddle et.al., ISBN13:978-1-59059-379-9」を探ってみると、「Chapter 12, Variable Indirection, pp305..306」に「function double」の解説があったので試してみた;
#!/bin/zsh
double()
{
 #local i=${!1}  # Bash style didn’t work
 local i=${(P)1} # Zsh style works well.
 (( i=i*2 ))
 eval "$1='$i'"
}

echo ---- test of double ---------------
num=$((3))
echo "\$num=$num before call of 'double'"
echo -----------------------------------
set -x
double num
set +x
echo -----------------------------------
echo "\$num=$num after call of 'double'"
echo -----------------------------------

 その動作結果;
u1@MmM11[~/myZsh]% double
---- test of double ---------------
$num=3 before call of 'double'
-----------------------------------
+/Users/u1/myZsh/double:18> double num
+double:3> local 'i=3'
+double:4> (( i=i*2 ))
+double:5> eval 'num='\''6'\'
+(eval):1> num=6
+/Users/u1/myZsh/double:19> set +x
-----------------------------------
$num=6 after call of 'double'
-----------------------------------
u1@MmM11[~/myZsh]%


Googleで関連を調べると、少数ながら有用なサイトが見つかった;
  • Bash and Zsh pointer 
    • http://yogsototh.wordpress.com/2008/07/03/bash-or-zsh-pointer/
  •  Double and triple substitution in bash and zsh
    • http://unix.stackexchange.com/questions/68042/double-and-triple-substitution-in-bash-and-zsh
      • answered Mar 24 '13 at 3:24 by Gilles
  •  How to return a string value from a bash function 
    •  http://stackoverflow.com/questions/3236871/how-to-return-a-string-value-from-a-bash-function
      • answered Jul 14 '10 at 2:39 by bstpierre
これらの3つの記事を参考にして、私はトライ&エラーをしました。その結果、関数の動作を解釈出来たので紹介します。
#!/bin/zsh
double_2()        # General template for pointer like function.
{
 local p=$1       # Set a pointer,p as the address,num in $1; 
                       # like 「p=&num」 in C language.
 local i=${(P)p}  # Read the pointing value,*p & Set to a variable,i; 
                       # like 「i=*p」 in C language.
 #(( i=i*2 ))     # It works well. But, 
 i=$((i*2))       # I prefer the left form rather than the above form.
 eval "$p='$i'"   # Write new value,i to the pointing value *p.
                       # like 「*p=i」 in C language.
                  # '$i': single quotes are necessary
                       # for the variable including spaces.
}

echo ---- test of double_2 -------------

num=$((4))
echo "\$num=$num before call of 'double_2'"
echo -----------------------------------
set -x
double_2 num
set +x
echo -----------------------------------
echo "\$num=$num after call of 'double_2'"
echo ------------------------------------

 
 その動作結果;
u1@MmM11[~/myZsh]% double_2                             23:10:40
---- test of double_2 -------------
$num=4 before call of 'double_2'
-----------------------------------
+/Users/u1/myZsh/double_2:27> double_2 num
+double_2:2> local 'p=num'
+double_2:4> local 'i=4'
+double_2:7> i=8
+double_2:8> eval 'num='\''8'\'
+(eval):1> num=8
+/Users/u1/myZsh/double_2:28> set +x
-----------------------------------
$num=8 after call of 'double_2'
------------------------------------
u1@MmM11[~/myZsh]%                                             23:10:34

今回の環境をTerminalで確認した;

u1@MmM11[~]% zsh --version                                       11:03:16
zsh 5.0.2 (x86_64-apple-darwin13.0)
u1@MmM11[~]% sw_vers                                             11:03:20
ProductName:Mac OS X
ProductVersion:10.9.5
BuildVersion:13F34
u1@MmM11[~]%                                                     11:03:25


このページの履歴
  1. 開始 2014-12-28(日) 23:18:01 
  2. 追加 2014-12-29(月) 13:51:58 「Terminalで確認 」を直接htmlで放り込んだ。スペースの調節が難しい。

2014-12-15

引用タグ表示の問題点

インターネットの閲覧には、「OS X Mavericks 10.9.5」上で、「Fire 34.0.5」と「Safari 7.1.2」とを使っている。他方、「Google Chrome 39.0.2171.95」での「日本語 → 英語:翻訳機能」を用いて英語表現を確認している。これまでは特に問題はなかった。
「日本語 → 英語:翻訳機能」を設定している。
しかし、引用タグ(blockquote tag)に長めのテキストを入れるようになったところ、日本語表示では問題が無くても、英語表示になると「表示が詰まる」事が起こるのに気がついた。サンプルを下に示します。
 (1) Scalar variable: $s.
   • by command: s='1 2 3'
   scalar: $s=»1 2 3«
   scalar:${#s}=5

(2) Array variable: $a.
   • by command: a='(4 5 6)'
    array: $a=»4 5 6«
    array:${#a}=3

(3) convert scalar:$s to array:$b.
   • by command:  echo $s | read -A b
    array: ${b}=»1 2 3«
    array:${#b}=3

(4) copy array:$a to array:$c.
   • by command:  echo "$a" | read -A c
    array: ${c}=»4 5 6«
    array:${#b}=3
参考に、英語への翻訳モードでのChrome表示のスクリーン・ショットを御覧ください;

私はブロガーの保守をサボっていたので、迷うばかりだ。フォーラムを探して、お伺いを立てるしか無いかなぁ。

SyntaxHighlighter


その後、トライ&エラーをしているうちに、SyntaxHighlighter表示ですら「Chromeの英訳モード」で「奇妙な振る舞い:不要なスペースが追加される」ことが判ったのでサンプルを示します;
!/bin/zsh 
a=($(ls))
i=0
for et in $a; do
    i=$(($i+1))
    echo "$i $et"
done

そのスクリーン・ショットも表示しておきます;








 

自動翻訳だけでも大変なものだが、自動表示も意外と難しいのだろうな。

バーベイタムの表示


昔のwikiでのpre-tagの設定を使ってみました。

pre class="verbatim-hard"

pre.verbatim-hard {
    background-color: #faf0fa;
    border: solid 1px #66f; 
    padding: 1em 1em 1em 1em;
    margin-left: 3em;
    margin-right: 0em;
    line-height: 120%;
}

/Users/u1/myZsh/func_pointer:43> fn ipv
+fn:3> ptr0=ipv 
+fn:4> data0=+fn:4> echo 'd c b a'

+fn:4> data0='d c b a' 
+fn:10> data1='W X Y Z' 
+fn:15> eval 'ipv='\''W X Y Z'\'
+(eval):1> ipv='W X Y Z' 


Screen Shot of above "verbatim-hard"

これを観察すると、不良箇所は系統的に発生している;
  • 不要な空白が挿入される場合;
    • /Users/ → / Users /
  • 逆に、必要な空白が引き抜かれる場合:最終行を例に取ると;
    • ipv='W X Y Z' →ipv = 'WXYZ'
  • 小文字で始まる単語が大文字に変換される場合:
    • +(eval):1> → + (Eval) : 1>
 これらを修正してもらえれば、有難いなぁ。
    # 素人判断では、blockquoteの改良より、こちらのpreの改良が楽では?

___
このページの履歴
  1. 開始 2014-12-15(月) 18:03:41
  2. 追加 2014-12-16(火) 16:20:39  SyntaxHighlighter表示
  3. 追加 2014-12-16(火) 20:26:03  pre.verbatim-hard

2014-12-13

zsh: 配列変数の操作方法

前回の報告、Zsh:「スカラー変数と配列変数の初歩的な処理法」を書いた後で、いくつかの小技を知ったので纏めてみました。


(1) スカラー変数からアレイ変数への変換



「"From Bash to Z Shell", Oliver Kiddle et.al. , Constructing an Array, p281」を眺めていたら;
  • src_files=( **/*.[ch]  )
という記述があった。そこで、簡単な実例を作ってみた;
#!/bin/zsh 
a=($(ls))
i=0
for et in $a; do
    i=$(($i+1))
    echo "$i $et"
done
この変数aは配列変数で在ることが確かめられた。要は標準出力を持つコマンド(ls)を「$()」の中で実行; $(ls)すれば配列変数に変換できる。

そこでスカラー変数,sを表示するコマンド「echo s」について同じことをすると、配列変数,aに無事に変換できました、前回の手法と比較すると直截な表現だと思います。
  • a=( $(echo $s) )        #今回
  • echo s | read -A a     #前回

(2)  アレイ変数の操作


元ネタは「Zsh文法帳なのですー>ω<というサイトです。
この中に、興味深いのが2つありました;
  • 「配列を別の配列変数に代入するときは、()で囲むのです」
    • b=($a)             #配列から配列へのcopy
  • 「要素の追加には+=を」
    • a+=(x y)           #配列へのappend
これらのテスト中に偶然出来たのですが、要素の追加法です;
  • a=(u v w $a x y z)    #append
zshのマニュアルは難しけど、トライ&エラーで思わぬ動作を見つけるのも面白いかな。



関連記事



____
このページの履歴
  1. 開始 2014-12-13(土) 17:49:43 
  2. 修正 2015-06-15(月) 19:22:59  e → a 
  3. 追加 2015-06-15(月) 21:30:08  関連記事 
  4. 修正 2015-06-17(水) 11:14:13  「a=( $(echo s) )  」→「a=( $(echo $s) )   」

2014-12-08

Zsh:「スカラー変数と配列変数の初歩的な処理法」

これまで「os x」でBashスクリプトを使ってきました。最近、中規模のスクリプトを各必要が出てきたので、Zshを使うようになってきた。
初心者にとってZshの特徴は;
  • 強力なprintコマンド群(echo, print, printf)。
  • 配列変数の記法がスマート。 
  • 高速な処理速度。
  • 結果が見やすい:ボールド体や色付き文字の出力。
でも、初心者には「具体的な例題」が手に入れにくいという欠点がある。もちろん上級者のようにマニュアルをよく理解すれば、好き勝手な設定を構築することもできるらしい。

他方、初心者でも配列変数を使い込んで来るに連れて、次のような作業がしたくなる;
  • 「スカラー変数: scalar variable」から「配列変数: array variable」への変換: 
    • 下記(3)参照。
      • 「echo $scalar | read -A array1」
  • 「配列変数: array variable」から「配列変数: array variable」へのコピー:
    • 下記(4)参照。
      • 「echo $array1 | read -A array2」
  •  ファンクションの「引数:arguments」に「配列変数:array variable」を渡したくなる:
    • 下記(5a,b)参照。
      • 関数読み出し:「function "$array1"」
      • 関数内部処理:「echo "$1" | read -A array3」


トライ&エラーの結果、「read -A」というコマンドを利用すると、上記の課題が容易に実行できることが判ったので、下記に【A】結果と【B】スクリプトを示します。

【A】スクリプトの動作結果  


以下の表示でブロックコート(blockquote)を細切れにしたのは、"Google Chrome"で"translate from Japanese to English"を設定すると、表示が乱れるのを防止する為です。

u1@MmM11[~]% t.arr4a            11:36:14
(1) Scalar variable: $s.
   • by command: s='1 2 3'
   scalar: $s=»1 2 3«
   scalar:${#s}=5
(2) Array variable: $a.
   • by command: a='(4 5 6)'
    array: $a=»4 5 6«
    array:${#a}=3
(3) convert scalar:$s to array:$b.
   • by command:  echo $s | read -A b
    array: ${b}=»1 2 3«
    array:${#b}=3
(4) copy array:$a to array:$c.
   • by command:  echo "$a" | read -A c
    array: ${c}=»4 5 6«
    array:${#b}=3
(5a) test of function call.
    • give array variavle,"$a"to the function;
    • by command: test_of_array_input "$a"
  Function $0 begin ------------------
   test_of_array_input: $1=4 5 6
   (5b) convert scalar:$i to array:$d
     by command:  echo "$i" | read -A d
       array: ${d}=»4 5 6«
       array:${#d}=3
  Function $0 stop ------------------
(6) print each element of arrays by for-loop on $a,$b,$c, and $d.
             (2)      (3)     (4)      (5b)
     $j     $a[$j]   $b[$j]  $c[$j]   $d[$j]
    ----    ------   ------  ------   ------
      1       4        1       4        4
      2       5        2       5        5
      3       6        3       6        6
(7) copy array:$a to scalar:$t.
  by command:  t=$a
    scalar: ${t}=»4 5 6«
    scalar:${#t}=5
u1@MmM11[~]%    

【B】スクリプト本体 

#!/bin/zsh 

# t.arr4a:

# 2014-12-08 by iritani/mNeji

test_of_array_input()
{
# input as scalar $1
local i=$1
 echo '  Function $0 begin ------------------'
 echo "   $0: \$1=$1"
 echo "$1" | read -A d
 echo '   (5b) convert scalar:$i to array:$d'
 echo '     by command:  echo "$i" | read -A d'
 echo '       array: ${d}='»${d}«
 echo '       array:${#d}='${#d}
 echo '  Function $0 stop ------------------'
}

#---------------- main ------------------------

echo '(1) Scalar variable: $s.'
echo "   • by command: s='1 2 3'" # scalar
s='1 2 3'
echo '   scalar: $s='»${s}« 
echo '   scalar:${#s}='${#s}
echo

echo '(2) Array variable: $a.'
echo "   • by command: a='(4 5 6)'" # array
a=(4 5 6) 
echo '    array: $a='»${a}«
echo '    array:${#a}='${#a}
echo

echo '(3) convert scalar:$s to array:$b.'
echo '   • by command:  echo $s | read -A b'
echo $s | read -A b
echo '    array: ${b}='»${b}« 
echo '    array:${#b}='${#b}
echo

echo '(4) copy array:$a to array:$c.'
echo '   • by command:  echo "$a" | read -A c'
echo $a | read -A c
echo '    array: ${c}='»${c}«
echo '    array:${#b}='${#c}
echo

echo '(5a) test of function call.'
echo '    • give array variavle,"$a"to the function;'
echo '    • by command: test_of_array_input "$a"'
test_of_array_input "$a" 
 # double-quote necessary for "$a" as function's argument $1
 # $a --> the first element only as all arguments passed
echo

echo '(6) print each element of arrays by for-loop on $a,$b,$c, and $d.'
    echo '             (2)      (3)     (4)      (5b)'
    echo '     $j     $a[$j]   $b[$j]  $c[$j]   $d[$j]' 
    echo '    ----    ------   ------  ------   ------'
for j in {1..3}; do
 echo "      $j       $a[$j]        $b[$j]       $c[$j]        $d[$j]"
done
echo

echo '(7) copy array:$a to scalar:$t.'
echo '  by command:  t=$a'
t=$a
echo '    scalar: ${t}='»${t}«
echo '    scalar:${#t}='${#t}
echo

# end of script

【感想】
配列変数を引数にする方法は系統的に改良してもらいた。当面は、文句を言う前にスキルの向上が先でしょうね。
素人には、「array4=( $scalar4 )」 といった直感的な記述が使えないのが不思議です。

____
このページの履歴
  1. 開始 2014-12-08(月) 21:51:06 
  2. 追加 2014-12-09(火) 11:09:11  【感想】「array4=( $scalar4 )」
  3. 修正 2014-12-15(月) 14:51:46  【A】スクリプトの動作結果  :Chrome対策

2014-05-21

キーボード改造の纏め

私は「キーボード改造で得た重要な知見」の纏めを説明します。

  「Apple Wireless Keyboard」の改良

関連記事の全リスト →「A list of "Notes on Apple Wireless Keyboard(US) with KeyRemap4MacBook"

  • KeyRemap4MacBookの導入、その9:入力装置のフリップ 2013-03-04
    •  キーボードを反転して運用したので、ファンクション・キー(F1~F12)は最下段に配置された。母指によって修飾キーや編集キーとして操作が可能と成り、其のお陰で編集作業が爽快に成った。
    • ファンクション・キーの形状は、横19mm・縦9.4mmと縦が半分程の短さです。 他方、親指の末節骨は長い。これらのキー・キャップには「通常のサイズで、かつ表面がフラットな形状」が適切でしょう。
  • KeyRemap4MacBookの導入、その17: キー配置と編集指使い 2013-04-04
    • 使い易い編集キーを設定出来た。
    • Extra1,2による編集モードは予想以上に効果的です。
    • キーボードのヘルプを組み込んだのも効果的です。
  •   KeyRemap4MacBookの導入、その21: "Where is VK_MOUSEKEY_*"... 2013-08-10
    • キーボードからのマウス・コントロールの強化を今後の課題としたい。

  「Filco MINILA US67key」の改良

関連記事の全リスト → 「A list of "Notes on improvements on FILCO Majestouch MINILA US67key"
  • "Majestouch MINILA US67key Red switch"の導入 No. 05, Res... 2013-01-17
      • [親指シフト]親指シフトキーボードを造る。(HHKB Lite2 for MAC)を参考に、二つの改造をした;
        • 底打ち音の低減。
        •  中央列に修飾キーExtra1,2とデリート・キーを挿入!
          •  「全ての修飾キーと編集キー」は、中央列と第五行と第六行とに集約された。
          • 簡潔な指使いが可能と成った為に、編集が捗るようになっている。
      • 上記のサイトに報告した(2014-01-18)ところ;
        • 「Esrille Keyboard 」を初めて知った(2014-01-18)。
        • その後の遣り取りで、興味深い記事(2014-01-19)に出会った。
          • 段ボールで筐体を作り、CherryMX軸を埋め込んで、エスリルキーボードもどきを作りました。エンコーダは通常のUSBキーボードから移植し打鍵 
            確認しています。
        • 私はこの記事に強い感銘を受けました。そして気づいたのです。
          • 私が満足出来るキーボードを手にするには、「改造」では駄目だ。
          • 私が満足出来るキーボードを手にするには、私自身が「自作」しなければならない! 
  • "Majestouch MINILA US67key Red switch"の導入 No. 06, div... 2014-01-26
    • この記事の中で大切な指摘は次の部分だろうと思われます。
      • 「Aの行 → Zの行」の運動では、屈曲(flexion)と同時に外転(abduction)が入り、
      • 「Zの行」のキー押し下げでは、「指先の腹」ではなくて「指の外側面」でキーを押し込んでいるらしい。 


現状


2013年11月の末頃から「自作キーボード」の検討しました。まず始めに、2013年12月から2014年1月にかけて「幾つもの治具作り」をしました。

  • バンドソーでの治具作り,
  • 「 手の動き」を写真撮影する為の治具作り。写真撮影: iPhone.

「従 来のキーボードでは不自然と思われた指動作」を実験的に明らかにしたいと思いました。観察が簡単に出来るように、"7row 1column"キーボードを作りました。2014年2月から、キーピッチやキートップの表面形状が異なる3つのタイプについて、操作動作を測定しました

上記実験結果を元に、モックアップを製作しました。このモックアップでの「指運動の観察」に対して、「手の運動の解釈」が進んでいます。 記事として順次に発表したいと思っています。

そろそろ、"Esrille keyboard"のように専用のPCBや制御回路にトライしたいです。


____
この記事の履歴
  1. 開始 2014-05-21(水) 19:00

2014-04-10

「私の手の実測データ」と「公開資料」との比較

キーボードの改造を始めて、すでに1年が過ぎた。最近はこれらの結果を多角的に検討している。この検討をするうちに;
  • 私の手のサイズは平均よりも短いでは?
との疑問が出て来た。そこで「手のサイズ」で検索をすると;
という公開資料が有ったので,「素人でも計測し易い項目」に付いて実測して、平均値や標準偏差(σ)などと比較したので、報告します。

なお,被験者(私)の身体特徴は;
  • 身長: 173cm
  • 利き手: 右
  • 性別: 男

1「私の手の実測データ」と「対応する統計資料データ」との比較 



2 「私の手の実測データと対応する統計資料データとの差分」を標準偏差の比として比較




3 「表2の標準偏差の比」のグラフ


  • 左右の手で:
    • 「手掌長第n指」が「第n指長」より有意に長く、
    • 左右の「手掌長第n指」や「第n指長」では、右指(利き手)が系統的に左手より長い。

4 「第n指全長」のグラフ


  • 左手母指全長は有意に短いが、
  • 左手の他の四指全長は,ほぼ統計データの男子平均値全長と一致している。
  • 右手の全ての指は、統計データの男子平均値全長より有意に長い。

5 結論

  • 図4のグラフ:「第n指全長」では;
    • 母指以外の四指では、平均値と同程度かそれ以上である。これを反映した工夫が望まれる。
    • 母指では、
      • 左・母指長が有意に短いが,これは左手の器用さの原因らしい。
      • 右・母指長が平均値に近いが,屈曲性能が劣るようだ。
      • これらについては、KeyRemap4MacBookでの工夫があるかも知れない。
  • 図3のグラフ手掌部の長さが,指先の部分の長さより系統的に短いので;
    • 母指以外の四指での屈伸運動が不利に成る可能性がたかい、
      • これに対する対向手段を考えたい。

6 被験者の手のスキャン画像

左手



右手
  • スキャン解像度 96dpi
上次のサイトに;
に、私の右・「 L02 手長」と数mm長い写真が載っている。これを印刷して自分の右手と比較した所;
  • 指の長さは何れの指の全指長も類似している。
  • 私の「水掻」 が発達しているので、印象が違うようだ。
  • 大きく違うのは「L03 手幅」でした。でも指幅は類似している。

7 感想

  •  手を見ているうちに、「指関節のしわ」から指骨の長さを推定出来る様な気がして来た。これに基づいて、キーボードの最適形状をだせないだろうか?
  • 右・母指の不器用なのは、指の先端部の関節(DIP関節) の動きが悪い為らしい。指のマッサージとか柔軟体操などを調べて見たくなった。



____
この記事の履歴
  1. 開始 2014-04-10(木) 21:00
  2. 修正と追加 2014-04-11(金) 20:52 「5, 6, 7 」
  3. 修正 2014-04-14(月) 23:06 自分 → 私

ExcelからBloggerへのコピペ

Excelでのショートカット;




コピペした結果;


記号
m2 10 2.2
m3 15 3.3

上記をコピペして、配置アイコンで修正;


記号
m2 10 2.2
m3 15 3.3


参考サイト

感想: この「配置アイコン」に気がつかなかった;


2014-01-29

リョービ・バンドソー、"TBS-50"の為のフェンスを自作

キーボードの改造では、細かな部品を作る為の治具が欲しく成って来た;
  • 平行性が高く;±0.2mm/200mmぐらい、
  • 絶対精度も±0.2mm、
  • 着脱が容易で、
  • 固定時に設定がずれない。
バンドソーの本を調べて見るとこのような治具はフェンス(fence)と言うらしいが、残念な事に市販されていない。そこで自作した結果を図1に示します。

図1a. 斜視図:リョービ・バンドソー(TBS-50) と自作フェンス。

図1b. 斜視図:リョービ・バンドソー(TBS-50) と自作フェンス。

使用中のバンドソーのテーブルのサイズ、200mm x 200mmをもとに、製図に使ったT型定規と工作に使うクランプとを探した。其の結果、使えそうな部品として、
を入手して、試行錯誤をした。希望としては、リング・ソーの左右どちらでもフェンスとしたかったが、工作技量が追いつきそうにも無かったので、左側の専用として製作した。試行錯誤したのは、フェンスの左右位置を決めた後にロックを書ける時に、設定位置がぶれない様にする事だった。其の為には;
  •  フェンスを位置決めの為に左右移動させる時も、「丸鋸定規スライドタイプ300mm MJH-300」のスケールを、前後方向に平行に成る様に、バネを利かす事だった。
  • 上記スケールに対して、「ラチェットバークランプ 300mm 14447」のバー一定の間隔で保持する事だった。
組み立てられたフェンスを図2に示します。

図2a. 斜視図:リョービ・バンドソウ(TBS-50) と自作フェンス。

図2b.上面図:自作フェンス。スケールとクランプ・バーの間隔6mm。

図2c. 左側図:自作フェンス。結合部a。完全に固定。

図2d. 右側図:自作フェンス。結合部A。スケールとクランプ・バーの間隔6mm。







結合部の拡大を図3に示します。

図3a. 斜視図: 結合部a。

図3b. 斜視図: 結合部A。

図3c.  図3bの逆側。

図3d. 押しバネの資料。購入先:東急ハンズ渋谷。







疑似テーブルとして厚さ12mmのパイン材にフェンスを装着して、ロック中の様子を図4に示します。

図4a.  テーブルの下部から見上げた状況。

図4b.  テーブルの 側面から、やや見上げた状況。
図4c. クランプの可動部分をロックした時の、接合部a周辺。

図4d. クランプの可動部分をロックした時の、接合部A周辺。レバー、解除ボタン、バネ。



押しバネのバネ定数kは、図3dの右側の説明から、k = 1/15 kgf/mm  で有る。バネを14mmに切断して、フェンスを装着するとバネは9mmに圧縮される。従って、クランプのラッチが解除されてもバネの圧縮は続くので、クランプ・バーに力、F;
    • F = k * バネ圧縮長 = 1/15kgf/mm * (14 - 9)mm = 0.33kgf.
が掛かっている。この為に、平行移動を安定して行う事が可能と成った。


実際に使った結果、
  • 脱着・装着は、解除ボタンを押しながら、直ぐに出来る。
  • 小型で、30cm程の木材なら、ノギスでみても0.2mm以下に揃っている。0.2
    • 角度精度は、±0.2 / 300、と思われる。
  • 絶対精度も、数回の調整をすれば、0.1mmに合わせることができる。
    • 精度向上のノウハウとしては、「捨て切り」が大切なのを実感した! 
  • 「捨て切り」と「マイ・ターゲージ」との併用で、任意角度の切り出しも出来るのに今頃気がつきました。
  • 日常の工作も、設計図に従って部品が出来てくるようで嬉しい。

____
このページの履歴
  1. 開始 2014-01-29-01:07
  2. 追加 2014-01-29-08:38 
  3. 修正 2014-05-21-14:05 バンドソウ → バンドソー

2014-01-26

"Majestouch MINILA US67key Red switch"の導入 #06, divert to Apple Wireless Keyboard

前回報告("Majestouch MINILA US67key Red switch"の導入 #05, Res...)に書いた工作結果;レスト・パッドやキートップ・エンベロープの処理;が正しいかを確認する為に、アップル・ワイヤレス・キーボード(Apple Wireless keyboard; AWK)にその手法を流用してみた。なお、AWKはMINILAに比べると、違いがある;
  • キートップは床に近く、
  • キートップの形状はフラットで、
  • キートップ・エンベロープは同一平面上にある。
以下に、「 1 結果」と「 2 感想」を報告します。

[ 1  Results ]

出来上がった結果を図1a,b,cに示します;

Figure 1a. Over view of MINILA and AWK. 

Figure 1b. Top view of AWK.

Figure 1c. Side view of AWK.



今回の設定の鍵は、通常の設定では手前が低い所を、敢えて持ち上げた事にあります。此れは、マジック・トラックパッド(Magic Trackpad; MTP)で;
  • スムーズな指運び
  • 疲れ難い
が実績としてあるからです。興味が有れば、以前の報告;
を参照ください。


今回は、図1cに示している様に、キーボード表面は水平面に対して1.6°で下向きに傾いています。将来的にはトラックパッドもキーボードも薄く成って行くので、今後が楽しみです。

「第5行目のキー高さ」 今回のAWKと前回のMINILAとの「第5行目のキー高さ」についての比較を図2に示します。

Figure 2.  The typical heights of the AWK and the previous MINILA.


今回の設定では、掌のレスト・パッド(palm rest-pad)の高さも、図2で示された「キートップ第5行目の差、31mm - 23mm = 8mm、に合わせて、単純に製作した。

キーキャップの高さ補正を左手の「tabとローマ字」に限定して実施したのを、図3に示します。

Figure 3. The height correction of keycaps for left hand keys; tab, and roman characters.

この特徴は;
  • 「QやAの行」の「Q, T, G」では、環指や示指の外転(abduction)に起因する補正は AWKでも起こり、
  • 「Aの行 → Qの行」の「W, R」では、環指(ring finger)や示指(index finger)での伸展(extension)に起因する補正も同様に起こるが、
  • 「Zの行」には高さ補正が不要であった。
詳しい事は未だ判らないが、 AWKでは;
  • 「Aの行 → Zの行」の運動では、屈曲(flexion)と同時に外転(abduction)が入り、
  • 「Zの行」のキー押し下げでは、「指先の腹」ではなくて「指の外側面」でキーを押し込んでいるらしい。
    • 図1cに示されているキーキャップの前傾にも関係すると思われる。
前回のMINILAでの「第6行目のキーの拡張」 のイメージを、図4に示します。

Figure 4.  Image of keys extension at AWK like current MINILA in Figure 1a.



[ 2 My Impressions ]
  • 実際の操作感覚は、 MINILAでもAWKでも、類似している
    • 掌レスト・パッドの設計指針が確立した感じだ。
    • 此れまでのAWKの試作品のなかでも、一番使い勝手がいい。
      • 自作でキーの拡張が出来ないのが残念だ。
  • 「AWKの全体の高さ」が低いのは、開放感が有って嬉しい。
  • 「Aの行 → Zの行」の運動を調べると、正しいデザインのヒントが得られそうだ;
    • “Magic Trackpad"と「お絵描きソフトウェア: FireAlpaca」とで、指先の軌跡(finger trajectory)の測定が出来そう。
____
このページの履歴
  1. 開始 2014-01-26-20:07
  2. 修正 2014-05-21-19:36 
    1. 『「Aの行 → Zの行」の運動では、屈曲(flexion)と同時に内転(adduction)が入り、』
    2. 『「Aの行 → Zの行」の運動では、屈曲(flexion)と同時に外転(abduction)が入り、』

2014-01-17

"Majestouch MINILA US67key Red switch"の導入 #05, Results of Handicrafts

前回の報告から一ヶ月半程、工作に時間を費やしてしまったのですがが、漸く一段落が着いたので纏めを報告します。工作結果を図に示した後で、特徴の説明を致します。

【I 結果の図】
Figure 1a.  Over view of handicrafts.


Figure 1b. Side view: keys and rest-pads.


Figure 1c. Top view of all keys.

Figure 1d. Side view of the 1st column(left-most)  keys in silhouette. Comparison of original and current setting.


Figure 1e. Back view for the 1st row keys in silhouette. Blue: Small correction(1mm) in height for middle finger.  Gray: Strong height correction(3mm) for two column adduction of index fingers and for two columns abduction of ring fingers. Red: Medium correction(2mm) for other fingers.


Figure 2.1 Inhibiting  sound when a key is bottomed out. "Agathis sheets with thickness of 3mm are cut and stuck on the iron plate.

Figure 2.2

Figure 2.3

Figure 2.4a Cutting device:  Ryobi bandsaw TBS-50. The homemade fence currently constructed for two weeks is attached on the table.


Figure 3a. Place all fingers of left hand  at  home position.

Figure 3b. Place only left little fingers  with A-key.

Figure 3c. Fully open left hand. The red area make contact with the palm rest-pad. The blue area do with the forearm-restpad. The sky-blue area around the carpals make contact with nothing.




【II 特徴の説明】

  1. 「第六行目キー」は見た目を良くするために、キー周辺に黒いアクリル板を付けたケースとした。この第六行目キーのケースをキーボード本体のケースにネジで固定しまして、拡張キーボードとした。
  2. 全てのキートップのスカート部分に、「底打ち音の低減」対策を施しました(Figure 2.1,2.2,2.3)。其の結果;
    1. 思わぬ効果として、「複数キーの同時打鍵時に、指の左右安定性の向上」が得られた。
    2. 今後、キー・ストロークを、4mm → 2mm、に挑戦したいと思う。
  3. 「掌レスト・パッド: palm rest-pad」を「第六行目キー」のケースにネジで固定しました。
    1. この掌レスト・パッドは、母指と小指の中手骨の遠位を保持する(Figure 3c)。従って掌レスト・パッドはキーボード操作時に細かく運動す為に必要な、「指骨群の屈曲や回内・回外運動」が安定的となる基盤だろうと、思われる。
  4. 「前腕レスト・パッド: forearm rest-pad」を「掌レスト・パッド: palm rest-pad」の手前に、稼働可能・固定可能にした。
    1. この前腕レスト・パッドは、Figure 3cに示されているように、「前腕の遠位部 〜 遠位手根皮線と近位手根皮線との周辺で、フラットな部位」保持する。其の為に、前腕の荷重が掌レスト・パッドに掛かるのを防いでいる。
    2. 前腕レスト・パッドと掌レスト・パッドとの間に「手根骨部分がスムースに入り込む」ように、前腕レスト・パッドの前後位置調整をしてから固定する。これにより、手根骨部分が外力を受けずにリラックスできる、というメリットがある。
  5. 四指の運指をスムーズにする為に、「キートップのエンベロープの円滑化」を目指した;
    1. 第二行目と第三行目のキートップは、180°回転して取り付けた(Figure 1.d)。
    2. 第一行目、第二行目、第三行目、第四行目、第五行目の全てのキートップは凹みを削って平坦とした。更に、指の回内、回外動作によりアクセスされるキートップの高さを嵩上げした(Figure 1.e)。
    3. なお、先に述べた『「底打ち音の低減」対策』のとき、無意識の指使いだと、「Qは左環指で操作」・「Pは右環指で操作」なのに気がついたので、此れに対応した。
    4. 小指は短い為に、指先の軌道半径も小さい。此れに対応して、キートップの高さを嵩上げした。
  6. 操作系のキーをキーボード中心に集約を目指した。「第六行目キー」に入れられなかったキーについて、
    1. リターン( ↩: return)、デリート(⌫: delete)、タブ(⇥)を入れる為に、第二行目、第三行目、第四行目の右手操作のキーを右に1列シフトした(Figure 1.c)。
    2. これらのキー操作は慣れるまでミスをし易かったので、白っぽいキートップにした。なお、2週間程で慣れた。

【III 纏め】

実際に工作を進めると、キー配置も大事だが、指の回内、回外動作に対応したキートップの高さの設定を見直したく成って来た。それにはMINILAは適当でないと思われる。今後、他の機種を検討したい。

他方、現在の改良MINILAについて、KeyRemap4MacBookによるリマッピングの改良に再度手を出そうと、楽しみにしています。


【IV 参考資料】

これらの工作では、何時もご厄介になっているhieroglypheさんのかもめーる通信の記事;


がとても参考に成りました。感謝感激雨霰です。

【関連ページ】
ーーーー

この記事の履歴

  1. 開始 2014-01-17-02:10
  2. 修正 2014-01-20-09:44 Fig. 1e, "Blue: No correction" → "Blue: Small correction(1mm)" 
  3. 追加 2014-01-29-01:14  関連ページ

注目の投稿

Terminalでの、なんちゃってViモドキ

近頃、ようやくKarabiner-Elementsに慣れてきたので、 Terminalで動作する「擬似Vi-Mode」を作って見たので、ご紹介します。 『概要』 「擬似Vi-Mode」の所以は、方向キー「←↓↑→」を通常の「hjkl」ではなくて「jkil」としました。これ...