2015-12-30

iPhoneと顕微鏡レンズの組み合わせ評価

前々回の記事で、ディスプレイ上に表示した色文字を「正三角形のプリズム」で屈曲・分散させると「赤い色」が「青い色」よりも強く屈曲するような不思議なデータとなった;

これの関連を追うために、昔から持っていた小型マイクロスコープ(National製, BF-959: x10..x30)で観察したが、視力の弱った私には明確な結果がでないし、画像データの記録がとれない。そこで、Amazonで調べると「USB 顕微鏡」と言うジャンルがあるが、Macで使えるものは少ないし、高い。そのうちに、iPhoneのレンズの前に装着して顕微鏡とか望遠鏡にするジャンル があるので、一番安い顕微鏡を購入してみた;

この顕微鏡の性能がどれくらいかをテストしたので、以下に説明します。測定対象は;
  1. アルミのスケール(新潟精機製、AS-45): 1目盛 = 1mm.
  2. iMac (21.5", Late 2009)のモニタ表面: 100dpi = 4dot/mm.
    • 「光沢液晶」のまま。
撮影に用いたのは;
  • カメラ: iPhone 6s plus, iOS9.1 +  COM-SHOT装着
  •  アプリケーション: SQUARE mode
    1. スケール撮影: 組み込み "Camera"
    2. iMac撮影: "Camera+" :下記パラメータを独立して設定できるので購入
      1. 焦点設定場所
      2. 露出設定場所
      3. 電子ズーム設定

アルミのスケール

iPhoneの電子倍率=最小。
大目盛間隔=5mm ↔︎ 26mm@iPhone画面。


iPhoneの電子倍率=最大。
小目盛間隔=1mm ↔︎ 25mm@iPhone画面。

  • 「測定倍率」の定義: 「iPhone画面での長さ」/「実際の長さ」
    • 図1:  26mm/5mm = x5.2 ~ x5.
    • 図2:  25mm/1mm = x25.


iMacの液晶での「I」の字

iPhoneの電子倍率=最小。
「I」の実の幅~1mm。

iPhoneの電子倍率=最大。
Magenta = Blue + Red。

  • 図3では、4本のマゼンタ色の縦線にしか見えないが、
  • 図4では、4対の青色セルと赤色セルに分離して見えている、
    • 光の加色の性質:「magenta = blue + red」に一致している。
    • 右に行くにつれてフォーカスが低下している理由はまだ分からない。



検討


図1や図3の「iPhoneの電子倍率=最小」をレンズだけの倍率と考えるのが自然だろう。とすると、図2や図4の「iPhoneの電子倍率=最大」も含めて考えると、次のようになる;
  • レンズ倍率 = x5、電子倍率 = x1、合成倍率 = x5 * x1 = x5。
  • レンズ倍率 = x5、電子倍率 = x5、合成倍率 = x5 * x5 = x25。
合成倍率 = レンズ倍率 * 電子倍率

図4のフォーカス低下の理由は、幾つかの複合した結果かもしれない;
  • 液晶面とレンズの垂直性
  • 固定の剛性
  • Camera+のFocus•Stabilizerの処理能力

レンズの最終的な性能を見極めるには「iPhone 6s plus」の分解能(400dpi ~ 16dot/mm)がどれくらいに見えるかで判定できそうだ。


この記事の履歴
  1.  開始 2015-12-30(水) 01:08  
  2.  追加 2015-12-30(水) 10:05 合成倍率 = レンズ倍率 * 電子倍率

2015-12-29

プリズムによる太陽光の分散

前回の記事で、ディスプレイ上に表示した色文字を「正三角形のプリズム」で屈曲・分散させると「赤い色」が「青い色」よりも強く屈曲するような不思議なデータとなった;

念のために「太陽光」について、同様の実験をした。結論を先に言えば;
  • 太陽光では、「青い色」が「赤い色」よりも強く屈曲する」という通常のデータとなった。

今後の説明のために、簡単に設定を図に纏めました。



図1 全体

図1 全体像:三脚の上部にプリズムを設置。
後方左側にパネル。
  • 太陽光は、写真機(iPhone 6s plus)とプリズムの延長後方から入射している。
  • プリズムの一つの頂角が太陽に向かうようにした。
  • プリズムの右側面から太陽光は入射(30°)し、左後方のパネル方向に出射する。


図2 プリズムとパネル

図2 プリズムとパネルの延長線上からの写真。
  • 図1より右側に移動して、プリズムとパネルの延長線上ちかくから撮影。
  • プリズムの入射面を「X」マークで表示。


図3 パネルの拡大


図3 パネル拡大。



図4 パネルにアルミ製スケール

図4 パネルにアルミのスケールを配置。




図4 アルミ製スケールに露光を合わせた


図5 :  図4と同じ撮影ですが、
スケール部分に、iPhoneの露出(Exposure)を合わせた。
  • 写真では分かりにくいが、肉眼では;
    • 「5cm」の数ミリ左から、
    • 「40cm」の数ミリ右まで、
    • 「全幅〜6cm」までの連続スペクトルと見える。
  • 屈曲の度合い;
    • 青い光ほど左側で、強く屈曲し、
    • 赤い光ほど右側で、弱く屈曲している。
  • プリズムの幅は3cmで、そこからの屈曲光が208cmの距離で、6cm分散された訳だ。


この記事の履歴
  1. 開始 2015-12-29(火) 20:15

2015-12-16

 三角柱プリズムの分散実験用データと測定画像

 測定用サンプル


◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼
◼            A         
                       
           C        

           |           
           |          
           |          
            |          
            |         
            |            
 ◼            |          
◼ ◼︎ ◼︎ ◼︎ ◼︎ ◼︎
           |           
           |          
           |          
            |          
            |         
            |            
 ◼            |         
◼ ◼︎ ◼︎ ◼︎ ◼︎ ◼︎


三角柱プリズムの分散画像

Figure 1.   Photo of the sample whichi is bent and dispersed in the triangular prism(Fig.2)
  • 図1 三角柱プリズム(Fig. 2)で屈曲・分散したサンプルのカメラ画像。


実験のレイアウト 


Figure 2.  Side view.


Figure 3. Top view.

図1の謎

図1の「黒地に白い文字」部分の拡大をを図4に示す;

Figure 4 Enlarged part of the "white text on a black background" in Fig. 1.



この記事の履歴
  1. 開始 2015-12-16(水) 00:19:05
  2. 修正 2015-12-16(水) 07:42:43  タイトル変更  「三角柱プリズムの分散実験用データ」→「三角柱プリズムの分散実験用データと測定画像」

2015-10-28

Chromebookに装着された外部キーボート上のFn-Keysの操作表

Chromebookに装着された外部キーボート上のFn-Keysの操作表
  • Operation Table of Fn-Keys on the external keyboard attached to the Chromebook

 表1.  ファンクション・キーの操作


Fn
F1
F2
F3
F4
F5
F6
F7
F8
F9
F10
Symbol
-D
+D
_S
-S
+S
Action
previous
Page
next
Page
reload
Page
toggle
Frame
show
Desktops
darker
Display
brighter
Display
stop Sound
smaller Sound
larger Sound

表2. Google日本語入力での操作


Fn
F6
F7
F8
F9
F10
Symbol
-D
+D
_S
-S
+S
Action
かな
変換
カタカナ
変換
半角カタカナ
変換
全角英数
変換
英数
変換

  • 外部キーボード: 脳内で指動作がリンクされているので、この表は不要。
  • 内部部キーボード:「Action --> Symbol」が必要でしょう。
  • でも、Google日本語入力ではタブ補完が強力なのでいらないかも。

背景


私と私のMacは、高齢になっている。私は「iMac (21.5" Late 2009)」と 「Mac mini (Mid 2011)」とを使っています。これらのマシンのチューニング中に不都合が生じた時にsshを確保したいと思いました。「小型で安価なLinuxマシ ン」をAmazon日本で検索すると、Chromebookが目にとまりました。

「Chrome OS」はちらほら拝見したことがあるものの、Chromebookは私にとって未知の物でした。Google検索によると、shellが動作するのが判明 した、素晴らしい。この分野では、AcerやASUSなどの台湾勢が評判がいいようだ。2000年に、私はマザー・ボード(ASUS)を使って Windowsマシンを組み立てたが、それは10年間も稼働した。そこで、ASUS製のChromebookの資料を探した。「ASUS Chromebook Flip C100PA」が浮上した;

  • RAMには2/4GBがある。日本での4GB版は極端に高価である。
  • 日本ASUSはUSキーボードが付いたChromebookを取り扱いが無い。
  • 日本Amazonでは、複数の方々がUSキーボードが付いたChromebookを米国Amazonから取り寄せているとリポートしている。
  • 米国Amazonでは;
    • 妥当な価格がついている。
    • 代理店経由せずに直接送付する。
私は「ASUS Chromebook Flip C100PA-DB02, RAM4GB」を発注してから2日で入手できました、UPSに感謝!念のためにASUS日本には直ぐにユーザ登録をしました。
  • IPS液晶ディスプレイは視野角が広いので、Macとの連携作業に適している。
    • Croshでの感触はいい。
    • 色も綺麗なので、静止画が主なウェブ検索にも役にたつ。
  • タブレット・モードが可能なので、外付けキーボードとの最適配置を見出せそうです。
    • 思った以上に遊べそうだ。
  • Google Driveを経由して、Macとのデータ共有もできるか?

私はこのマシンに少し慣れてきた。テント・モードで外付けUSBキーボード を接続して、最適配置を見出すべくテストを始めました。
  •  外付けUSBキーボード::  SANWA: SKB-E3U (USB)

このようなセッティングでは、内部キーボードの最上段行に描かれている操作マークが見えなくなってしまう。その代わりに、外部キーボードのファンクション・キーに対応した操作表(Table 1,2)を作りました。



____
この記事の履歴
  1. 原稿 2015-10-25(日) 17:03:21  
  2. 公開 2015-10-28(水) 19:50:28 
  3. 追加 2015-10-29(木) 09:35:23 表2: 説明  

2015-09-28

Yosemiteで、ClipMenuからConsoleに向けたデータのコピーが直ぐにできない。

経緯


Console画面で「CGSConnectionByID」を検索したくなったので、常用の「ClipMenu 1.0.0 alpha (Build 1)」からペーストしようとしたところ単純にはペースト出来なかった。
色々トライしたけれど、この奇妙な現象は他のアプリケーションでは起こらなかった。ClipMenuの製作者さんにメールで連絡を取ろうと探したのですが、見当たりませんでした。
同じような現象で驚かれる方のために報告しておきます。

現象の図示

Figure 1. (1) Click serchi box at Consele, (2) Select Clipmenu and confirm 1. as searching word.
Figure 2. (3) A black box appearred when I push-down mouse at  "CGSConnectionByID" on ClipMenu.
Figure 3. No word apeared when I push-out.
Figure 5. The word is pasted correctly when I clicked the search window and type ⌘•V.

検討

  • ステップ(5)でペースト出来たという事は、ステップ(4)でClipMenuのクリックされた部分が正しくペースト・バファにコピーされた。しかし、ペースト・バッファからは検索窓にペーストされなかった。
  • 試しに「黒い箱」からConsole画面を遠くに置いたが、改善しなかった。
  • またその他のアプリケーションでは問題が生じていない。

____
この記事の履歴
  1. 開始 2015-09-28(月) 18:58:11

2015-09-19

Yosemiteでの、SSDReporterの導入とデータ状況

最近は"Yosemite 10.10.5"の観察に時間が取られて、このbloggerへの投稿が滞っています。

さて、私の主マシンは"Mac mini (Mid 2011)"ですが、2013年の初頭に内臓HDD*1を内臓SSD*2に換装しました。そのときに「Apple サポート コミュニティ」で有用な論議を頂きました。改めて感謝いたします。

それ以来;
  • 2つのSSDは正常に動作していますし、
  •  "Disk Utility"も "SMART Status: Verified" を示しています。
"Disk Utility"の出力を示します、図1a, 図1b,;
Figure 1a. System drive at Disk Utility

Figure 1b. Data drive at Disk Utility


"Yosemite 10.10.5"は安定した動作を始めたので、内臓ドライブの"SMART Status" を定量的に示すアプリケーションを検索しました。その結果、「SSDReporter」を見つけ、「App Store」から「¥ 480.」で入手しました。2台のSSD情報を下図2に示します;


Figure 2. SSDReporter output


これらのドライブの利用状況は、ターミナルで「df -H」 というコマンドにより得ることが可能です。このコマンド出力の最右列「Mounted on」を付けると見やすくなります。

Figure 3. "df -H / / Volumes / SS2 "


今後、上に示した情報を、長期に渡って計測すると、SSDの経時的劣化の挙動が解るかもしれません。素人予測では「Health: 70%」位を閾値として観察しようかと思います。



(追記)図2から4ヶ月経過のレポート

Figure 4.  SSDReporter output after four months.

図4と図2を比較しても変化が見られません。図2では、初期不良のセグメントが数パーセントもあって 驚きましたが、4ヶ月経過で1%以下ならば安定していると思われます。


この記事の履歴
  1. 開始 2015-09-19(土) 17:25:00
  2. 追記 2015-12-30(水) 12:09:25 図4 4ヶ月経過しても変化無い




2015-08-21

iTunesでCalmRadioを設定する


I wrote the following article in the nearly three years ago.

However connection has become unstable since the end of last year. So I had to e-mail to "CalmRadio" in June of this year. Then, that from September of last year in CalmRadio of to have been the server's update.

So we repeat the registration to the "Playlists of iTuens". Below we will show how to set it.

Figure 0 iTunes: CalmRadio of Playlist: clic

Figure 1 iTunes: Internet Songs

Figure 2A almradio.com: LIST & gt; LOGIN, click iTunes button.

Figure 2B select your channel: this exaple shows the 'Latin' channel.

Figure 2C confirm the selection: select speed and clic.

 Figure 3A iTunes: Type ⌘ • i or Clic left-button and Select get-info.

Figure 3B Check song name. You can edit it. Type enter or clic OK

Figure 3C Confirm 'LATIN AMERICA'

Figure 4A iTunes: Back Figure 0. Perform (1, 2, 3).

 Figure 4B iTunes: Perform (1, 2, 3, 4, 5).



Environment:

  • Yosemite 10.10.5 (14F27) @ Mac mini (Mid 2011)
  • iTunes 12.2.2.25
  • Flets HIKARI 1Gbps with router (PR-500MI)

Impressions

  • The three years ago I felt've been clear sound quality at 192kbps.
  • Now it came out three-dimensional sense of sound at 320kbps.
  •  In three years, 320/192 = 1.7 times.
  • In the CD, 44.1kHz * 2ch * 12bit / ch ~ 1000bps.
  • CD is likely to traffic the Internet in direct. What is the outgoing of.

報告

  • この記事の原稿は日本語で書きましたが、どういう理由か不明ですが、表題以外は英語になってしまっています。
  • 原稿の製作手順としては;
    1. 非公開Bloggerで、Firefox「日本語」で原稿を書き、
    2. それを「Google Chrome」で「日本語 → 英語」表示でブラウズし、
    3. 英語表記が妥当になるまで、(1,2)を繰り返します。
  • でも今度のように原稿が英語になる理由がわかりません。
  •  しばらく検討しますので、お許しください。

____

The history of this article

  1.  Start 2015-08-21 (Friday) 16:12:14 
  2.  追記 2015-08-23(日) 16:28:07  報告





2015-07-13

pdfgrepを使って、pdf形式のzshマニュアルを簡単に検索する

はじめ


Terminalで「man $name」 を見る時には、zshスクリプトを用いて、pdf形式に変換して、閲覧と保存しています。なお、そのスクリプトの要点は次の2行です;
  • man -t ${name} | pstopdf -i -o ${name}.pdf  
  • open $name.pdf
このような手間を掛けるのは、次のようなメリットがあるからです;
  1. Previewでコメントを付けて保存すれば、見返すのが効率的になる。
  2. 過去に閲覧したマニュアルが一瞥できる。

しかし、これらのpdfを検索をするのに、「grep」や「mdfind」は不適切でした。インターネットで調べると、「pdfgrep」が良いらしいです。そこで「brew info pdf  」をすると「pdfgrep」がありました。
% brew search pdf   
cups-pdf        pdf-redact-tools    pdf2svg            pdftohtml
diff-pdf        pdf-tools        pdfcrack        qpdf
djvu2pdf        pdf2htmlex        pdfgrep            svg2pdf
mupdf-tools        pdf2json        pdflib-lite
以下略...

具体例 

図1

Figure 1. pdfgrep on zshall.pdf.





















図1では、検索のターゲット・ファイルとして 「zshall.pdf」としています。4つのケースを示しています;
  1. pdfgrep -inH ' f ' zshall.pdf 
    • ノイズが多い。
  2. pdfgrep -inH '          f ' zshall.pdf
    • ノイズ消失!
  3. pdfgrep -inH '          = ' zshall.pdf
  4. pdfgrep -inH '          @ ' zshall.pdf
表示が素敵なのに驚愕した;
  • ファイル(magenta):ページ番号:(green)が全ての行に明示されていて、
  • 検索語(red)も視認性がいい、
  • 検索結果行(white)も常に1行に収まっている。
これだけでも「zshマニュアル」 を気楽に調べることが出来てうれしい。


 図2

Figure 2. search printf for *.pdf
  • コマンド: pdfgrep -inH printf *.pdf 
    • 検索対象をzshに限定しなくても良いのか。
  • 一部にエラーが出ているが、検索内容には問題はない;
    • poppler/error: Illegal URI-type link
    • ZshWiki_array.pdf: browser Firefox:: html -> pdf.
    • エラー出力は別ファイルに纏めた方がよいだろう。
  • (zshall.pdf: 7) = (zshbuiltin.pdf: 2)+(zshcontrib.pdf: 5)


これから


冒頭で紹介したスクリプト(man2pdf)はマニュアルの管理もする。これにpdfgrepを組み込みたい。


____
この記事の履歴
  1. 開始 2015-07-13(月) 00:44:41




2015-06-15

zsh: ZishWiki’s “scripting: array”に関するコメント


zshは独特の機能が満載だが、初心者には使い方が判りにくい。「man zsh」から遡ると15個ほどのオンライン・マニュアルが見える。でもインデックスがなく苦戦している。
私はzshに少し慣れてきたので、インターネットの資料を探索し始めた。すると、コンパクトに纏まったサイトを拝見した;
この「SITE MAP: scripting: array」に興味深い事例集があった;
この中で,特に興味深い2部分が連続していたので部分的に引用します;

(1) Create an array with each words of string.


私の以前の記事は違う方法を取りました;
そこでは空白区切りのスカラー変数sから配列aを生成する方法として;
  • a=( $(echo $s) )   #以前の記事
  • a=( ${=s} )          # ZshWiki
 

ZshWikiの表式方が短くてスマートだが、覚えにくいなぁ。もしも、次の表現がつかえると、より短くてイメージ的にも覚えやすいが;
  • a=(  =$s )
誰かSwiftでzshを整理してくれないかなぁ。

(2) Create an array of lines from a file


Macでの/etc/hostsには多数のコメント(#)が付いているのでもう少し複雑です。
  • buffer=( "${(f)$(cat /etc/hosts|grep -v '#')}" ); echo $buffer[1]
  • ==>;’127.0.0.1    localhost ’
また、等価な出力として、(“)の配置が違う表現があります。;
  • buffer=( "${(f)"$(cat /etc/hosts|grep -v '#')"}" ); echo $buffer[1]
  • buffer=( ${(f)"$(cat /etc/hosts|grep -v '#')"} ); echo $buffer[1]

私は最後の形式をよく使っています。
参考の為に、rootでのlsを示します;
  • buffer=("${(f)$(ls)}");echo $buffer[1]
  • ==>Applications 
この手法は番号付きls関数を作るのに役立ちました。感謝します。
なお、スカラー変数が改行(\n)区切りで、其の内部に空白( )がある場合では、次になります;
  •  % s="a\nbb cc\nddd"; a=( "${(f)$(echo $s)}" );typeset -p a;echo "\$#a=$#a" ⏎
    • typeset -a a
    • a=(a 'bb cc' ddd)
    • $#a=3

____
この記事の履歴
  1. 開始 2015-06-15(月) 21:15:12 
  2. 追加 2015-06-17(水) 11:04:51  a=(  =$s )
  3. 追加 2015-06-17(水) 11:41:47  s="a\nbb cc\nddd"; a=( "${(f)$(echo $s)}" );
  4. 修正 2015-06-23(火) 23:06:27  段落の後ろの空白行を手動で修正。他のblogへの移行を検討開始した。
  5. 修正 2015-07-25(土) 13:19:55 e → echo

2015-06-10

「Yosemite 10.10.3」と「MarsEdit 3.7」と「Thunderbird 31.7.0」と「Google 2-Step Verification」との関係

「外付けのドライブにYosemite 10.10.2」を新規インストールして、試運転してきました。意外にも安定しているので、内臓ドライブに10.10.3をクリーン・インストール仕様としましたが、インストールを繰り返すようで諦めました。「Recovery HD」からのインストールから「App Store」から内蔵ドライブへのインストールの積りが、「外付けのドライブにYosemite 10.10.2」への上書きになってしまいました。

こういう時に限って「タイム・マシン」のバックアップをしていなかたり、…。数日観察すると、問題点が出ないので「Disk Utility」を用いて「外付けのドライブにYosemite 10.10.2、上書き10.10.3」を内蔵に向けてリストアしました。

概ね「10.10.3」は良好に動作しているようでした、が問題が出てきました;
  • 「Thunderbird 31.7.0」でgmailにアクセスできなくなった。
  • 「MarsEdit 3,6.9」でGoogleのbloggerにアクセスできなくなった。
調べるとGoogleが推めている「2-Step Verification: 二段階認証」に「Yosemite 10.10.3」が対応した為の現象らしい。其の対応には次のサイトが判りやすかった;

Bloggerを運行する私としても、セキュリティの向上には賛成なので、「 二段階認証」を導入した。この時、iPhoneに設定していたメール・アドレスを間違えて入れてしまい、半日もロスをしてしまった。

其の結果、MacもiPhoneも「 二段階認証」に完全に対応した。でも、ThunderbirdもMarsEditも動かない!

慌てて検索すると;
  • 「Thunderbird」は「 二段階認証」に未対応。当面は「Mail」頼み。
  • 「MarsEdit 3.6.9」は「MarsEdit 3.7」との事。

そこで「App Store」から「MarsEdit 3.7」ダウン・ロードしようとしたが駄目だった。アップルのテクニカル・サポートに聞いたら「セーフ・ブートしてみて」と言われたが改善せず。むしろ「App Store」の問題ではないかと思い、相談すると「iTunes Store」にメールを打つように助言をうけた。iTunesの方から;アップルIDなどの問題はない。一度MarsEdi.appを消去したら;との助言をいただく。

「/Application/MarsEdit.app」をTrashに入れて、再度「App Store」から「MarsEdit 3.7」ダウン・ロードすると成功。いま、「MarsEdit 3.7」で原稿を書いています。あ、「MarsEdit 3.7」からこのブログへのアップロードも成功しました。


その後、落ち着いて検索していると、「 二段階認証」に未対応のアプリに対する回避法があるのに気が付きました;

ここから遡って「アプリ パスワード: App-speciffic passwords」の登録に行き、「MacのThuderbird」と入れると「wwww xxxx yyyy zzzz」といった一度切りのパスワードが出ます。それを「Thunderbird 31.7.0」のGmailのアカウント設定にいれると、ログインできました。


其の時に、バックアップ電話番号の登録を強く推められたので登録しました。色々と複座な仕組みが生まれているようです。



____
この記事の履歴
  1. 開始 2015-06-10(水) 21:33:07 
  2. 変更 2015-06-11(木) 11:53:21 タイトルに『と「Google 2-Step Verification」との関係』 を追加。
  3. 追加 2015-06-11(木) 16:36:36 App-speciffic passwords

2015-05-31

zsh: Coloring outputs for here-documents and printf.


経緯


すでにコマンド・ラインから彩色した文字を標示する方法を以下のサイトで説明しました;
   

その後、私は幾つかのスクリプトを作っていて、この「彩色するecho関数群」を楽しんでいます;
  •  要点を効果的に表示できる、
  •  使いやすい。

そこで、「彩色するecho関数群」を2つの事例に応用出来たので紹介します;

  • Here-Documents: a standard shell feature.
  • printf: shell built-in command.


実例


何はともあれ、テストしたスクリプトのターミナル出力を示します。スクリプトを後に紹介します。


Figure 1. Coloring outputs in “here-documents” & “printf”


スクリプトの簡単な説明

I “here-documents”


・彩色する部分を彩色するecho関数に引数として渡し、
・更に、コマンド・サブスティチューション; $(…);に挿入した。


#  EXAMPLE Ia  "abc def ghi"
#             |                    ***
#            ⇣
#  EXAMPLE Ib  "abc $( bc_ 'def'' ) ghi」
#                                  ---------***--

II “printf”


この問題を解くのに、下記の資料が参考になりました。この本の「promptsに関する説明」では、 zsh Form「%1~」に彩色するエスケープ・シーケンスを添付しています;
 ・From Bash to Z Shell”, p149.

そこで「printf format」でも、フォーマット記述子にエスケープ・シーケンスを添付しようと考えました。下の例では、フォーマット記述子「%3d」に操作するとします;

  • 彩色のエスケープ・シーケンスは記述子「%3d」の前後に配置されます
    • \e[36;1m: 彩色する開始シークエンス
    • \e[m: 彩色の停止シークエンス


#  EXAMPLE IIa   "%2d  %3d  %s"
#       |                                ***
#       ⇣
#  EXAMPLE IIb   "%2d  \e[36;1m%3d\e[m  %s"
#       |                                    --------***----
#       ⇣
#  EXAMPLE IIc   "%2d  $bc_%3d$fin  %s"
#                                          ----***----

スクリプト


スクリプトを示します。彩色するecho関数群のうちで、必要なものは先頭に直接書いておきました。従ってこのスクリプトでの単独テストをできます。

#!/bin/zsh 

# t.colors: shows Coloring outputs for here-documents and printf.

# Usage: t.colors⏎

# A paort of Coloring Echoes --------------------
btg(){echo -n "\e[1;38;42m${@}\e[m"}
b_y(){echo -n "\e[1;7;33m${@}\e[m"}
br_(){echo -n "\e[31;1m${@}\e[m"}
bg_(){echo -n "\e[32;1m${@}\e[m"}
bc_(){echo -n "\e[36;1m${@}\e[m"}
by_(){echo -n "\e[33;1m${@}\e[m"}
bt_(){echo -n "\e[38;1m${@}\e[m"}
b_w(){echo -n "\e[1;7;37m${@}\e[m"}
et_(){echo -n "\e[38m${@}\e[m"}
e_n(){echo "\e[38m${@}\e[m"}

#---------------------------- main --------------------------
prg_name=${0##*/}

fluits=( orange kiwi )
unit_prices=( 200 60 )



cat <<-EOF_example_Ia
 ========================================================================
   EXAMPLE Ia of here-documents.
     (1) Here is an $fluits[1].
     (2) There is a $fluits[2].
     ...
     
EOF_example_Ia



cat <<-EOF_example_Ib
 ========================================================================
  $(btg ' EXAMPLE Ib ') for $(b_w ' here-documents ').
     $(b_y '(1)') Here is an $(br_ $fluits[1]).
     $(b_y '(2)') There is a $(bg_ $fluits[2]).
     ...
      
EOF_example_Ib



echo '========================================================================'
echo "  EXAMPLE IIa for printf."

echo "   #   @price    fluit"
echo '   ---------------------'
for j in {1..2}; do
 #                ***     ****
 printf "   %d    %3d     %-8s\n"\
     $j $((unit_prices[$j])) " $fluits[$j] "
done
echo '\n'



echo '========================================================================'
et_ ' ';btg ' EXAMPLE IIb ';et_ ' for ';b_w ' printf ';e_n '.'

echo "   #   @price    fluit"
echo '   ---------------------'
for j in {1..2}; do
 #                --------***----     ----------****-----
 printf "   %d    \e[36;1m%3d\e[m     \e[1;7;33m%-8s\e[0m\n"\
     $j $((unit_prices[$j])) " $fluits[$j]"
done
echo '\n'



bc_='\e[36;1m'; fin='\e[m'; b_y='\e[1;7;33m'
echo '========================================================================'
et_ ' ';btg ' EXAMPLE IIc ';et_ ' for ';b_w ' printf ';\
  et_ ' using ';b_w ' short-cut ';e_n '.'

echo "   #   @price    fluit"
echo '   ---------------------'
for j in {1..2}; do
 #                ----***----     ----****----
 printf "   %d    $bc_%3d$fin     $b_y%-8s$fin\n"\
     $j $((unit_prices[$j])) " $fluits[$j]"
done
echo '\n'
echo '========================================================================'



感想


「EXAMPLE IIc」で、変数;$bc_,;が導入された。このスペルは同じ色を表現するecho関数と同じスペルに設定できた。そこで「coloring short-cut variables」を先に定義して、逆に「coloring echo functions」を定義したいと思います。
 ・bc_=‘\e[36;1m’; fin=‘\e[m’
 ・bc_(){echo -n “$bc_${@}$fin”}

今回までで、zshの彩色環境は整った。今後は補完スクリプトの整備がしたいです。


____
この記事の履歴
  1. 開始 2015-06-02(火) 21:12:46 
  2. 追加 2015-06-03(水) 13:23:38 感想:  coloring short-cut variables

2015-05-18

zsh: echo command

経緯


私は最近まで『改訂版 Mac OS Xターミナルコマンド・ポケットリファレンス、MINAKAMI Shinobu、2006第2版、技術評論社、ISBN4-7741-2877-5』を参考にしていました。でも「bash→zsh』に乗り換えると、流石に最近のMacに則した解説書が欲しくなりました。

そこで次の本を購入しました;

  • “Macintosh Terminal Pocket Guide Third release”, 
    • Daniel Barrett, 2012/7/2,
    • O’Reilly, ISBN: 978-1-449-32834-4.

疑問点


以前から釈然としていなかった「echoのオプション」を見ると
    ・MINAKAMI版, p53: 「-n」
    ・Barrett版, p170: 「-n, -e, -E」

zshを運行している私の経験から見ると、Barrett版が正しいと思います。

そこで、調べて見ました。結果を図1に示します;
 

Figure 1. ' shell built-in echo' and '/bin/echo'


大雑把にいえば;
  • 日常的に使っている「echo」は『shell built-in echo』である。
  • 日常的に使っている「man echo」は『/bin/echoのマニアル』である。

従って、zshで使っている「echo」の挙動を知るには、我々は図2の様な「zshのオンライン・マニュアル」を見るべきです。

と書きましたが、間違えでした。次の図3にお進みください。ただし、最新バージョンの確認には使えますので、図2はそのままとします。


Figure 2. zsh: Shell-Builtin-Commands:: echo
と書きましたが、間違えでした。次の図3にお進みください。


ターミナルでのzshマニュアルズ

Figure 3. “echo” part of the zshbuiltins.pdf displayed in a preview.app.

図2を書いている頃は、 私は「man zsh」だけがzshのオンライン・マニュアルと思っていました。でも、試しにターミナルで「man zshall」と叩くと、zshallがターミナル上に現れました! 当然「zshbuiltins」もあります。 zshの資料検索にとってこれはとてもありがたいことです。

『man→ pdf』の変換には、「man2pdf」という手作スクリプトを使っています。pdfにはコメントやブックマークを付けたりできるからです。


そこで「zshマニュアル(pdf)に対する簡易検索と表示」をするスクリプト(zzz)を試作しました。



Figure 4. A typical operation example of zzz.

pdf資料の検索に「grep」を使うと、不安定な出力が出ます。そこで「mdfind」で代用しています。

「mdfind」: 「Spotlight search」のターミナル版です。

echoの有効活用


「echo -E」は、改行区切りの処理に有用と思う。特に「\n, \t」がコンパクトに表示されるので、問題把握が迅速になると感じます。


メモ

  • 今後、コマンドとmanが食い違う場合、「where」を用いてコマンドが複数あるかどうかをチェックから始めよう。
  • zzzは安定したら、公開します。



____
この記事の履歴
  1.  開始 2015-05-18(月) 22:16:56 
  2.  追加 2015-05-23(土) 18:51:39 ターミナルでのzshマニュアルズ

注目の投稿

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

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