2012-06-10

図書紹介#017:「bash Pocket Reference」

これまで「bash」の文法書を買った事がなかった。試しにポケット版のリファレンスを購入してみた;
  • 「bash Pocket Reference」
    • Arnold Robbins・著
    • O'Reilly, 2010-05
    • ISBN-13: 978-1-449-38788-8
    • US $9.99, ¥898. アマゾン価格
この本はコンパクトながら、要領よく説明している。長らく数値計算が簡単に出来ないので「for」が苦手だったが、次の説明;
  • p77, 「for  --- Start an arithmetic loop.」
  • p36, 「$((expr)) --- Use the value of enclosed arithmetic expression.」
から、気楽に「整数の数値計算」ができるようになった;
#!/bin/bash

for ((x=1; x<=22; x+=2))
do
    # $((expr)) perform arithmetic expression
    echo $((${x}**2 + 1000))
done
今度は「OS X」に関する英語の解説書を探そうと思う。


ーーーー
このポストの履歴
  1. 開始: 2012-06-10-14:10(JST)




2012-06-09

図書紹介#016:「UNIX ショートカットキー ハンディブック」

最近、「Mac mini」につなげている「Wireless Kyeboard」で,「fn」を用いた「scroll to Top/Bottom:↖/↘」、「page up/down:⇞/⇟」、「return/enter:↩/⌤」、「delete/forward-delete:⌫/⌦」を知って喜んでいる;
  • ターミナルでのショートカット設定?
    • 今頃になって、 「Wireless Kyeboard」はノート系のキーボードと類似のあつかいであるのを知りました。そう判れば、検索も楽になるなぁ。
    • それにしても「Terminal.app」のキーボード・ショートカットの設定は不可思議だ。英語版の解説をボチボチ調べるしかなさそうだ。 
 特に、ブラウザやターミナルで「scroll, page」が重宝している。そこでショートカットを調べているうちに、大田区立洗足池図書館にあるので借りてみた;
  •  「UNIX ショートカットキー ハンディブック」 Linumx&FreeBSD&Mac OS X
    • 佐々木 宣文・著
    • 毎日コミュニケーションズ, 2007-10
    • ISBN-13: 978-4-8399-2593-2
この本は、網羅的・具体的に事例を紹介しているので、文章だけの説明をみてもピンとこなかった事が、便利であることに気づかされた。

「ターミナル編」と「シェル編」とが別々に記述されているのには感心した。ここら辺のバックグランドに興味がでてきた。

「ことえり」のショートカットは、一度完全に試して、覚えようと思った。


なお、「enter」は表計算の入力にも使えるのではないかと思っている。

今更ですが、Linux系の動作も興味深いと思うようになりました。


【追伸】

「forward delete」の文字「⌦」は意外と直ぐに見つかった。でも「delete」の文字「⌫」には梃摺った。其の出典は;



ーーーー
このポストの履歴
  1. 開始 2012-06-09-12:49(JST)
  2. 追伸 2012-06-09  (土) 17:19   「⌦」と「⌫」との出典。


2012-06-06

簡単なbashスクリプト: 簡易ストップウォッチ

二つの時刻の間隔を計る簡易ストップウォッチ・スクリプトをBashで作ってみました。計測の単位は「sec」だけです。

#!/bin/bash

# mySec: A Stopwatch script
#
# usage:    mySec 0 ←     Start-time in unit of sec.
#            mySec   ←     Time-interval from Start-time in unit of sec.
#           mySec now ←    Current Time in unit of sec.
#
# example:
#            $ mySec 0; sleep 3;mySec    # Check#
#            3sec
#            $ mySec 0     # Start the Stopwatch
#            ... Somothing done ...
#            $ mySec     # Stop the Stopwatch
#            81sec
#            $mySec now    # Curent Time in unit of sec.
#            1339041714
#
# 2012-06-06  (水) 20:07, by mNeji

#set -x

if [ "$1" = "now" ]
then
# for "mySec now" ------------------------------------------------
    echo `date +%s`
    exit 0
fi

if [ -z $1 ]
then
# for "mySec" -----------------------------------------------------
    Stop=`date +%s`
    Start=`cat ${0}.start`
    time_interval=`expr ${Stop} - ${Start} `
    echo "${time_interval}sec"
    rm -f ${0}.start   
else
# for "mySec 0" --------------------------------------------------
    # echo `date +%s` | tee ${0}.start
    date +%s > ${0}.start
fi


【関連記事】
  1. 簡単なbashスクリプト 
  2. 外付けHDDの特定パーティションのマウント/アンマウント・スクリプト
  3. bashとpythonとの連携スクリプトで「du」を観易くする


ーーーー
このポストの履歴
  1. 開始: 2012-06-06-20:30(JST)
  2. 修正: 2012-06-07  (木) 13:06


2012-06-04

外付けHDDの特定パーティションのマウント/アンマウント・スクリプト

切っ掛けはアップルのサポートコミュニティ、Mac OS X v10.7 Lionでの論議;
で、「timeutil」コマンドを使えば、GUIの「Time Machine」の「今すぐバックアップを作成」を開ける事無く、CUIからのコマンドでバックアップを開始できると思えるようになった事だ。とりあえず最小のコマンド;
#! /bin/sh

# tmback: Manually execute "Time Machine Backup"
# 2012-05-04 by mNeji

echo "+ Script($0) start at `myDate` ++++++++++++++"
tmVol=`tmutil machinedirectory`
#echo "tmVol: ${tmVol};"
noVol=""
#echo "noVol: ${noVol};"

if [ "$tmVol" = "$noVol" ]; then
    echo "Please wakeup External HDD for Time Machine Backup, Try again!"
else
    echo "+ Time Machine Backu Up for `tmutil machinedirectory` "
    #echo "+ sudo tmutil uniquesize \`tmutil listbackups\` ---------------------"
    #sudo tmutil uniquesize `tmutil listbackups`
    echo "+ sudo tmutil startbackup --block  ---------------------------"
    sudo tmutil startbackup --block
    echo "+ sudo tmutil uniquesize \`tmutil listbackups\` ---------------------"
    sudo tmutil uniquesize `tmutil listbackups`
fi   
echo "+ Script($0) finish at `myDate` +++++++++++++"
echo
 で保存するようになった。かれこれ1ヶ月ほど安定的にバックアップがとれている。

問題は、手動でFinderを経由して外付けHDDの内の「Time Machine」のパーシションを起動する必要がある事だ。そこで、今回は『必要なパティション、$tmVol、をマウント/アンマウントするスクリプト』を作ろうと考えた。


手元の資料としては
であった。svensonさんの記事では「/Volumes/」でのパーティション名(partition name)もしくはヴォリューム名(volume name)とディバイス名(/dev/diskNsM)とを必要と読める。

でもユーザがFinderで認識してしているのは、あくまで「パーティション名(partition name)」なのだからと思い、「diskutil」を弄り回した。その結果;
  • 電源が入っている外付けのリストは「diskutil list」で確認できる。この中にパーティション名($NAME)があれば、次に進む。ここに無ければ電源の投入を注意する。
  • マウントの状況は「diskutil info $NAME」で判るが、直裁に「ls /Volumes」を取って、その中に$NAMEがあるかどうかで判定できる。
  • 具体的tmutilコマンドでは、パーティションはフルパス表現は不要の様子;
    • マウント: diskutil mount $NAME
    • アンマウント: diskutil umontDisk $NAME
      • 一部のアンマウントだけに止
      • めたければ、
      • 「umontDisk → umont」
とすれば善い事が判った。

そこでマウント用のHDDonと、アンマウント用のHDDoffとを作った;

マウント用のHDDon
#!/bin/bash

#
# usage: myHDDon Volume_Name
#              ↑ /Volues/に出てくるパーティション名(partition name)、ヴォリューム名(Volume name)。
#
#               引数なし(no argument)だと、get "diskutil list"
# 2012-06-03 by mNeji
#

# debug ################
# set -x

# Refered Information
# A bash script  to mount and unmount the Windows partition in Mac OS X
# http://forums.macrumors.com/showthread.php?t=195891

# Volume Name of the Partition
NAME=$1

# 無引数(no argument) ######################################
if [ -z $NAME ] ; then
    diskutil list
    exit 1
fi

# 引数(argument)=パーティション名(partition name in /Volumes/) ################

# /Volumes/中にパーティション$NAMEがあるかの判定
### p_name=`ls -1 /Volumes/ | grep ${NAME}`
### echo "p_name: '${p_name}'" # debugging output
if [ -z `ls -1 /Volumes/ | grep ${NAME}` ] ; then
    # パーティション$NAME が存在していない
    # check the $NAME in "'diskutil list'"
    ### echo "--> `basename $0`: Checking $NAME in "'diskutil list'" at `myDate`"
    if [ -z `diskutil list | grep " $NAME " | awk '{print $3}'` ] ; then
        # no $NAME in "diskutil list"
        echo "--> `basename $0`: Turn on POWER SW and Retry ----------------"
        diskutil list
        echo "--> `basename $0`: Turn on POWER SW and Retry ----------------"
        exit 1
    else
        # already Powerd the HDD, then mounting
        diskutil mount $NAME > /dev/null
        ### echo "--> `basename $0`: '${NAME}' mounted now."
        exit 0
    fi
else
    # already mounted the partition
    ### echo "--> `basename $0`: '${NAME}' mounted already."
    exit 0
fi


  アンマウント用のHDDoff
#!/bin/bash

#
# usage: myHDDoff Volume_Name
#              ↑ /Volues/に出てくるパーティション名。
#              そのVolune_Nameのmount/unmoutのトグル・スイッチ
#
#               引数なし(no argument)だと、get "diskutil list"
# 2012-06-03 by mNeji
#

# debug ################
### set -x

# Refered Information
# A bash script  to mount and unmount the Windows partition in Mac OS X
# http://forums.macrumors.com/showthread.php?t=195891

# Volume Name of the Partition
NAME=$1

# 無引数(no argument) ######################################
if [ -z $NAME ] ; then
    diskutil list
    exit 1
fi

# 引数(argument)=パーティション名(partition name in /Volumes/) ################
# p_name=`ls -1 /Volumes/ | grep ${NAME}` # for debugging
# echo "p_name='${p_name}'"

# Check existing of directory of /Volumes/$NAME ##############
partition_name=`ls -1 /Volumes/ | grep ${NAME}`
if [ -z ${partition_name} ] ; then
# there is no /Volumes/$NAME:
    # check the $NAME in "'diskutil list'"
    ### echo Checking $NAME in "'diskutil list'" at `myDate`
    if [ -z `diskutil list | grep " $NAME " | awk '{print $3}'` ] ; then
        # no $NAME in "diskutil list"
        echo "--> `basename $0`: Confirm Volume(Partition)-name! ----------------"
        diskutil list
        echo "--> `basename $0`: Confirm Volume(Partition)-name! ----------------"
        exit 1
    fi     
else
# there is /Volumes/$NAME:
    # unmounting the its all Disk
    diskutil unmountDisk $NAME >/dev/null
    ##### echo "--> `basename $0`: '${NAME}' unmounted Disk now."
    exit 0
fi
なお、判定文の”[  -n $string ]"は上手く動かなかったので、仕方なく”[  -z $string ]"のタイプに統一しました。

ーーーー
  1. 開始 2012-06-04  (月) 12:53 
  2. 修正 2012-06-05  (火) 13:38  「HDDoff: partition_name」←「binary operator expected」対策

2012-05-28

外置きファンによる冷却 その2

前回の記事「外置きファンによる冷却」の「4 その後」に書いたように、「Mac mini」の冷却の強化を急ぐ事にした。言わば、「底面側の冷却」の追加である。

簡単に言えば、「Mac mini」の直下の棚の部分にファンを持ってきて、その上下をLアングルではさみ付けるようにしただけである。これを写真で説明する。

図1 正面から。左の「Time Capsule」と比べて背が高くなった。
図2 棚の下から見上げる。
図3 上から見下ろす。


製作して数時間であるが、問題は無い。底の蓋の部分を触ると冷たい。

ケース表面に層流状態の空気が当たるだけで、表面温度が室温に固定できるのはすごいな。

例えば、指で触って熱いと感じる温度が仮に「50℃」として、室温が仮に「35℃」まであがったとしても、室温に固定できれば「15℃」の冷却能力が期待できるわけだ。


次回、秋葉原に行くときに調達したいもの;

  • ファン*5個
    • 外付けHDDケース*3, ルータ, SW-Hub
  • M4ローレット付きネジ:
  • DC12V、2A程度の電源
  • 電圧調整VR:50Ω, 1/4W, SW付き:

【吸入口の位置と冷却との関係】

「Mac mini (mid 2011)」のマニュアルを見ていると、次のような興味深い図;
「mac_mini_mid2011_ug_jp.pdf」のp11より

があった。排気口の位置は、Lion10.7の初期にデュアル・ディスプレイの接続ポートを何度も入れ替えていたので知っている。特に「HDMI」の辺りは強い熱風を感じていた。しかし、吸気口が「底面カバーの周辺」と言うのを今頃知った。
  • この所、図1~3の作業で、コネクタを取り外す事が多いが、コネクタが熱でフニャフニャにので驚いている。
  •  「底面側の冷却」はこの意味でも役にたつと思う。

まさに「面を室温の空気をブローする」という事は、「吸気口近傍の境界層(boundary layer)の厚さを効果的に減少する」と推定できる。当然、「吸気口を経由する吸入空気の温度も室温に近づきやすくなる」事と期待できる。。

今まで「底面カバーが樹脂の為に、その熱伝導が低いので、カバーの冷却には懐疑的だった」けれど、「吸入空気の温度も室温にロックできる」のなら大幅な冷却効果が期待できるかもしれない。

温度計測のプログラムが正常に動作するなら、実験的に上下に配置した冷却ファンの評価ができる訳だ。大変に楽しみだ。

【境界層の厚さの概算値】
一般に、固体表面に沿って流体が流れるときには、固体表面に接した部分は速度がゼロになる;言い換えれば流体といえども固体表面に固定される訳だ。ところが固体表面から離れるに従って流体の速度が上がって行く。いまの場合、ファンで引き起こされた風の速さ(V)が物体にあたるときにゼロまで落ちる。でも、表面から一定の距離(δ)ていど離れるとVに復帰するという。この「δ」を流体力学では「境界層の厚さ」と言います。

で「冷却 ファン 境界層」でインターネット検索すると;
で示された、境界層の厚みを推定値としてみる。実際は垂直入射流に近いので、もっと厚みは小さくなると思われる。さて、具体例を代入
 δ = 境界層の厚み = 5 * SQRT(ν * x / V) ,
ここで、ν = 動粘性係数 = 1.43 * 10 ^(-5) m^(2)/sec,
x = 代表的サイズ = 1cm,
V = ブロア風速 = 1.33m/sec
であるので、
δ = 5.0 * SQRT( {1.43 * 10^(-5) m^(2)/sec} * 1cm / {1.33m/sec})
  = 5.0 * SQRT( 1.43/1.33 *10^(-5) * 100cm *1cm )
  = 5.0 * SQRT( 1.08 * 10^(-3) ) cm
  = 1.6 mm 概算値
 従って、吸入口のスリットのサイズで急速な速度こう配が出来て、その流入気体が効果的に室温近くになりそうだ。

そこで起きがけに覗いてみた。 「底面カバーの表面の断面形」は台形状で、ケースの内部から台形斜面が盛り上がる感じである。その根元に吸引口が2mm位のスリットとして台形の根元を一周している。ついか

この設計者は「吸入空気の流れを、加熱する為にデザイン」しているように思える。いくらなんでも、設計側がフィードバックしてやらないのが異常ではないだろうか。

でも、逆に言えば「底面側の冷却」は意外と効果的かも知れないな。


【底面カバーの内部構造】

やはりカバーの内部を見たくなったので開いてみた;

図4 外しただけ。

  • 本体内部のパンチング・メタルの周辺(前方の前側)に埃がついている(約10ヶ月使用したが)。
  • その下にメモリや排気用ファンが見えている。この部分は、蓋を閉められると、左にある底面カバーの裏側に密閉されるようだ。
  • 従って、冷却には;
    1. 「本体内部のパンチング・メタルの周辺の隙間」から吸気されて、
    2. 「パンチング・メタルの穴」を経て、内部にまわり、
    3. 黒い排気用ファンに駆動されて、後部の排気スリットから出るらしい。
  • 底面カバーの直径は17cm弱でした。
  • 筐体はアルミニウムのダイキャストらしく、素晴らしいできだ。でも熱対策がデザインに盛り込まれていないのでは、デザインの本流から外れると思う。ひょっとして、デザイナのかたはSSDだけしか念頭にないのかなぁ。
    • 百歩譲って、現在のデザインで「底面カバーの金属の蓋の無い部分」には、パンチングメタルような金属とフィルタで
      • 「吸気効率」の向上
      • 「塵の侵入阻止」の向上
    • をするべきだと思うが、如何なものだろうか。

ーーーー
  1. 開始 2012-05-28  (月) 20:35
  2. 追加 2012-05-29  (火) 23:12  【吸入口の位置と冷却との関係】
  3. 追加  2012-05-30  (水) 01:03 【境界層の厚さの概算値】
  4. 追加 2012-05-30  (水) 05:26 吸引口の形状の確認
  5. 追加 2012-05-30  (水) 13:07  【底辺カバーの内部構造】

2012-05-27

外置きファンによる冷却

昨年は、温度が高くなるとルータやパソコン系に横から扇風機を当てていた。

本当は「外付けファン」を機器の上に乗せたかったのだが、右足が不調で出て歩けなかった。先日、秋葉原にいったので「外付けFan, 12V, 0.07A,ファン直径11cm、 中国製@580円」を入手したのでテストしてみた。

実験用電源で、動かすと5~15Vで動く。12Vで~0.07Aだった。DCモータだから、極性をかえると逆回転するかと思ったら、動かない。調べてみると、簡易パルス駆動回路がはいっているらしい。

部品を整理していたら「トランス型の電源、9Vdc, 0.5A」が出てきたので、電圧を見ると14Vもでていた。まず2個を並列に入れると13V, さらに3個を並列にすると12Vになっていた。 この調子なら、あと数個を追加する事も可能そうだ。

で、実装の状況を示します;

1 Mac mini(mid 2011)

  • 昨年購入していた放熱器(黒いアルミ・ダイキャスト)の上に置いた。
  • 空気はファンの上から吸い込まれ、放熱器のキャナルに沿って、左右方向に拡散。
    • プロペラは天井側。

2 Time Capsule (1TB)
 

  • 隙間(1cm強)を作る為に、M4のローレット付きのネジを付けて、振動防止にクッションゴム(住友3M, B-030) をローレットの頭に接着。
  • 空気はファンの上から吸い込まれ、全方向に横向きに拡散。
    • プロペラは天井側。 

3 PR-S300SE

  • この筐体はメッシュ構造なので、内部の空気を引き出す方が冷却効率があがりそうだ。従って、この場合、プロペラ面を下にして、密着させた。簡単に接着させるために、「KOKUYO, ひっつきシート」をファンの四隅に付けた。
  • 内部の空気が上方に向かって吸い出され、そのまま上方に拡がる。
    • プロペラは床側。 

昨日、今日と動かしているが、騒音とか振動の問題はない。あ

まだ室温が27℃以下なので、効果のほどはまだ判らない。でも、ほとんど「暖かみ」が感じられないので、期待が持てる。

たったこれだけの電力;12V*0.07A=0.84Wで、表面を室温に固定できるとは...。

また、微風が上から落ちてくる感触は、意外と善いなぁ。

夏場になれば、扇風機の横風は欠かせないだろうな。


4 その後

2日ほどの連続運転でも問題はなかったので、これでOKと思った。仔細にチェックすると、「PR-S300SE」と「Time Capsule」は完璧に近い感じで運転しているが、「Mac mini」の底は指で触ると暖かい。

そういう意味では「Mac mini」が熱的にシビアな事を如実に物語っているので、至急、「PR-S300SE」のファンを流用して、その底から外気を吹き付ける事を検討した。

単純に、棚の面に直接ファンを乗せ、その上に「Mac mini」を乗せてみた。流石に重い為か、プロペラが棚に接触してしまう。アルミのLアングルで棚の上下から挟むようにすれば、行けそうだ。

暑くなる前に、急いで作る事にした。



ーーーー
  1. 開始 2012-05-27  (日) 13:34
  2. 追加 2012-05-28  (月) 19:38 「4 その後」

2012-05-26

キーボードとトラック・パッドの配置の実験 その2

前回の報告「キーボードとトラック・パッドの配置の実験」で制作したフレームは、位置を動かすとバラバラになりやすかったので、改良版を作った;
  • KB-TPの部分の底板と、パームレストの部分の底板とを、2つの蝶番(ちょうつがい = hinges)で連結し、傾きを調整しやすくした。
  • 全体をアルミニウムの浅いCチャンネルで作り、移動しても壊れにくくした。
ところが、実際に作ると;
  •  壊れなくなったが、全体が重く、
  • 高さの調節がまだ難しい。
という結論になった。

そんな最中に、有楽町に所用で行ったので、アップル銀座に展示されている「MagicWand」を見ようとした。ところが、もはや扱っていないとのこと。外付けHDDケースも買いたいので、秋葉原の秋葉館にいったら、「MagicWand」よりも「Henge Docks:: CLIQUE」 を勧められた。これをベースに自作の蝶番連結板を取り付けると、スマートな配置実験が達成できると思えたので、購入した。
  • 値段は「3680円」でやや高め。
  • 「 Henge Docks の説明」では、「英国・欧州むけには、$24.95」らしい。
  • 今回は、実験部品と考えると、構造も確りしているし、トラックパッドの電源ボタンも工夫しているし...。

早速、これをトライしたので報告する。
図1CLIQUEの裏面にヒンジ付き板を固定。M2のネジで固定。
図2 FILCOのパームレストとの組み合わせ。無難。

図3 ベニアのパーム・レストと母指レスト(位置ガイド付き)
図4 母指レスト(位置ガイド付き:白い低反発樹脂)の拡大。
図5 タッチ・タイピングの待姿勢。
図6 右の母指が右側のガイドにズレて、(return)を打に移動中。
図7 右小指がさらに右のガイドに移動して、中指が「↑」の寸前。
図8 左手で(F)に待機し、右手は(command)へ移動中。
図9 左手で(tab)にアクセス。




母指レストとポジショニングのガイドは、自分の様に「不完全なタッチ・タイピング操者」には;打始めの不
  • 安定動作を抑制するのに効果的で、
  • 制御キー、矢印キー、トラックパッドとの連携もスムーズ。
なお、図3以降のセッティングでは、パームレストの面から見て、トラックパッドの面は前方に20°ほど傾いている。

当面、上記パラメータは固定して、パームレストの形状や接触感などに注目したい。


【関連記事】
  1. Mac mini (mid 2011)のキーボード,マウス,トラックパッド

ーーーー
  1. 開始 2012-05-26 (土) 01:33

注目の投稿

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

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