2012-03-29

図書紹介#014:「Pythonプロフェッショナル・プログラミング」

久しぶりに、渋谷の丸善&ジュンク堂にいった。ここの取り扱いは抜群な気がする。

今日、入手したのは、久しぶりの Pythonの本だ;
  • 「Pythonプロフェッショナル・プログラミング」
    • 株) ビープラウド・著
    • 秀和システム、2012-04
    • ISBN-13: 978-4-7980-3294-8
書名は、むしろ 「Pythonウェブ環境構築マニュアル」といった感じではないだろうか。非常に条件が具体的;
  • 仮想マシン、VirtualBox
  • OS, Ubuntu Server
  • Python/2.7.2
 である。 私も、Lion/10.7.3で、Pythonの環境やApacheにmod_wsgiなどを準備したり、zshに手を染めたりしてきているので、結構行けそうな気がして来た。その意味では、丁度いい指南書かもしれない。

付録に従って、VirtualBox/4.1.10, Ubuntu-11.10-server-i386.isoをインストールした;
  • 説明の図がMacの画面なので、慌てる事無くインストールできた。
  • キーボードの選択で、「指定された文字を入力」する時に、文字が小さくて読みづらいので、慌てた。
  • sshで、ホストのLionからアクセスできて感激した;
    • $ ssh -p 2222 アカウント名@localhost
  • ホストのターミナルからスクリプトで「VirtualBox → Ubuntu」を開き、「sshのログイン」するスクリプトが欲しいな。 
  • と思っていたが、練習の為にSSH_keygenで公開鍵暗号;~/.ssh/id_dsa, id_dsa.pub)を作成して、~/.ssh/authorzed_keysに追加(実際は新規作成)した。さらに、~/.ssh/authorzed_keysubuntsの~.sshの下にコピーして、Ubuntuにアクセスすると;
    • 最初にアクセスすると、「Enter your password for the SSH key "id_dsa"」と言った名称のポップアップが開くので、「SSH_keygenで入力したパスワードを訊かれるので入力すると、二度とパスワードを訊いてこないので、ssh, scpなどが、自分のmacでの操作と同様に扱える。
「vertualenv」までをインストールした。エディタは取りあえず「vim」を使った。難しい事をしなければなんとか使える、ホッツ。細かく「Snapshot」を取った。このバックアップほうほうはスマートだと思う。この間、何度もこの本を見ていたら;
Python
Professional
Programming
というように、PPPとなるような書名にしたかったのだろうと思った。そこでノートなどでこの本を引用する時に「PyPP-p8」などと記入しようかなぁ。

次のステップに進む為に、PyPP-p10にあるサイト;
 には詳しい説明が在る。以前、Pythonの複数ヴァージョン対策で「vertualenvwrapper」を検索したが、見つからなかった。今度は使いながら勉強できるから有り難い。 


ーーーー このポストの履歴
  1. 開始 2012-03-29 (木) 20:04
  2. 追加 2012-03-30  (金) 22:57  付録に従って、VirtualBox/4.1.10, Ubuntu/11.10-serverをインストール
  3. 追加 2012-04-01  (日) 09:34  「vertualenv」までをインストール
  4. 追加 2012-04-03  (火) 15:47 SSH_keygenで公開鍵暗号;~/.ssh/id_dsa, id_dsa.pub)を作成して、



2012-03-28

zshの具体例

ボチボチと「zshの本」を練習しているが、従来のshと大幅に改造されている為に、良くわからない感じがする。そこで、実例を紹介しているサイトを探していたら;
を拝見した。早速、GitHubから一群の設定ファイルを入手してみた。

プロンプトの設定は、とても派手で驚いたが、機能性は高い。これをベースにチューニングがたのしみである。補完はまだ良くわからないが、使い込めば自ずと理解が深まるだろう。ただし、簡単な「cd /uタブ」では「cd /us」まで補完されるだけで、もう一度タブを押すと;


となる。どうやら大文字で始まる「/Users」も候補に成るらしい。ここらは、Linux系とMacとのファイル・システムでの「大文字/小文字」の識別の違いが在るのかもしれない。

エイリアスは、想像以上に強力そうだ。「短期記憶が減少」「指の反応が遅くなった」、いわゆる老人に対し、zshは優しいサポートをしてくれそうだ。

ーーーー このポストの履歴
  1. 開始 2012-03-28 (水) 10:45


2012-03-25

図書紹介#013:「zshの本」

zshの設定は複雑そうなので遂に本を購入しました;
  • 「zshの本」
    • 広瀬 雄二・著
    • 技術評論社、2009-07
    • ISBN-13: 978-4-7741-3864-0
 プロンプトが行の左だけでなくて、右端にも設定できたり、深いディレクトリの表現ができるなどで、表示が判り易い。例えば;
PROMPT=$'%{\e[47m%}%B%6(~|[%~]\n|)%m{%n}%T%{\e[m%}%#%b '
RPROMPT=$'%{\e[47m%}%B%6(~||[%~])%{\e[m%}%b'
とすると;


他方、コマンド補完は充実しているようだが、複雑であり、まだ混乱している。当分、最優先で使えるようにアタッックしたい。


ーーーー このポストの履歴
  1. 開始 2012-03-25 (日) 22:08


簡単なbashスクリプト

自分のネットワーク環境を整備する為に、幾つかのスクリプトを作りました。忘れる前にメモしておきます。
  1. myDate: 自分のタイムスタンプ
  2. myHost: 自分のマシンのホスト名、localhostのIPアドレス
  3. myNet: 自分のマシンが属するネットワーク情報
  4. myScanIP: PINGを連続的にスキャンする。
  5. myDiskutil_list: 「diskutil list」のまんま
  6. myMount_disk1: 外付けhdd, disk1のマウント
  7. myUnmount_disk1: 外付けhdd, disk1のアンマウント
この内、1〜4は便利なので、公開しておきます。

1 myDate
#!/bin/bash
date +'%Y-%m-%d(%a)%H:%M:%S'

2 myHost
#!/bin/bash
#
# myHost: 動作例=>「HOST: name=(div-mm.local); ip=(10.0.1.2)」 
#
# 参考: UNIXシェルスクリプト 逆引き大全 333極意
#        p112, #84 文字列を指定した区切り文字で分割する。


getHostIP() {
 hostName=`hostname`
 localIP=`netstat -r -f inet |grep "localhost" | grep "UHS"`

 _IFS="$IFS"    # save $IFS
 IFS=' '
 set -- $localIP
 IFS="$_IFS"

 # 分割結果:
 # $1: host's IP address
 # $2: localhost
 # $3: UHS
 
 echo "HOST: name=($hostName); ip=(${1})"
              
 return
}

# 実行
getHostIP

3. myNet
#!/bin/bash

echo '"netstat -r -f inet"'
echo " at `myDate`"
netstat -r -f inetdiv

4. myScanIP
#!/bin/bash
#
# myScanIP [ipSpace ipStart ipWidth ] 
#

#localIP=`netstat -r -f inet |grep localhost | grep UHS`
localIP=`myHost`
echo $localIP

declare -i j k ipStart ipStop ipWidth noa

j=1 #start
k=5 #width


# Default values
ipSpace="192.168.1"
ipStart=j
ipWidth=k
noa=$#

#echo "  Number of Arguments = $noa"
#echo "    ipSpace=${ipSpace}"
#echo "    ipStart=${ipStart}"
#echo "    ipWidth=${ipWidth}"

if [ $noa -eq 0 ]; then
    damy=1
elif [ $noa -eq 1 ]; then
    ipSpace=$1
elif [ $noa -eq 2 ]; then
    ipSpace=$1
    ipStart=$2
elif [ $noa -eq 3 ]; then
    ipSpace=$1
    ipStart=$2
    ipWidth=$3
fi

ipStop=$ipStart+$ipWidth-1


if [ $ipStop -gt 256 ]; then
    ipStop=255
    ipWidth=ipStop-ipStart+1
fi


file="ipScan_${ipSpace}.${ipStart}~${ipStop}.txt"
echo "======= myScanIP for ${ipSpace}.${ipStart}~${ipStop}" > $file
echo "===== ping from ${localIP}" >> $file
echo "  Number of Arguments = $noa" >> $file
echo "    ipSpace=${ipSpace}" >> $file
echo "    ipStart=${ipStart}" >> $file
echo "    ipStop=${ipStop}" >> $file
echo "    ipWidth=${ipWidth}" >> $file
echo "=== save file:'${file}'" >> $file

timeStamp=`date +'%Y-%m-%d(%a)%H%M%S'` 

echo "* Scan start:_${timeStamp} " >> $file

echo "======= scanIP for ${ipSpace}.${ipStart}~${ipStop} =============="

echo "===== ping from ${localIP}"

echo "  Number of Arguments = $noa"
echo "    ipSpace=${ipSpace}"
echo "    ipStart=${ipStart}"
echo "    ipStop=${ipStop}"
echo "    ipWidth=${ipWidth}"

echo "=== save file:'${file}' "
echo "* Scan start:_${timeStamp} "

j=ipStart

while [ $j -le $ipStop ];
do
    result=`ping -c 2  "${ipSpace}.$j"`
    yes_response=""
    yes_response=`echo "$result" |grep 'round-trip min/avg/max/stddev'`
    if [ "$yes_response" != "" ]; then
        echo "#ip=${j}: ${yes_response}"  >>$file
        echo "#ip=${j}: ${yes_response}"
    else
        echo  "_ip=${j}:non___" 
    fi
    j=j+1

done

timeStamp=`date +'%Y-%m-%d(%a)%H%M%S'` 
echo "* Scan stopped:_${timeStamp} " >> $file
echo "* Scan stopped:_${timeStamp} "

echo "========= myScanIP finished =============="

上記のスクリプトの28行目の「dummy=1」と言う無意味は命令は、本来コメント「#」でしたが、そうすると次の「elif」がエラーとなるので挿入しました。この経験から、現在zshへ乗り換えをしようとしています。

【関連記事】

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

ーーーー このポストの履歴
  1. 開始 2012-03-25 (日) 13:59

2012-03-24

bashからzshへの移行での簡易設定

iTerm2にしてからbashスクリプトでチョコチョコとネットワーク関連の小さなスクリプトを書いているうちに、bashは意外と脆い事に気がついた。探すとzshが堅牢そうなので、zshを試している。

そこで、bashからの環境移行をしてみた;
  • .bashra → .zshrc
  • .bash_profile → .zshrc
  •  に統合(.zprofileでは駄目だった)
この内、「prompt」部分はbashの設定『マシン名:ディレクトリ名 アカウント名 $』に合わせるように変えた。なお、ディレクトリ名はホーム・ディレクトリを「~」とする形式にした;

.bashrc
export LANG=ja_JP.UTF-8

export PS1='\h:\w \u\$ '
.zshrc
 export LANG=ja_JP.UTF-8

#PROMPTs
PROMPT='%m:%~ %n$ '
PROMPT2="%_%% "
SPROMPT="%r is correct? [n,y,a,e]: "
参考書が手に入る前には、この手の初歩の設定で十分な気がする。


ーーーー このポストの履歴
  1. 開始 2012-03-24 (土) 02:06



2012-03-16

図書紹介#012:「Emacs実践入門」

以前、WindowsでPerlのプログラムを書く時に、Meadowにお世話になった。現在のLionでも「Aquamacs Emacs」を使っているが、初心者用の解説がすくなくて困っていた...。
  • Emacs実践入門 思考を直感的にコード化し、開発を加速する
    • 大竹智也・著
    • 技術評論社、2012-04
    • ISBN-13: 978-4-7741-5002-4
 やはり簡易言語の開発は、Emacsで可能になりそうな気がする。

なお、この本のサポートのページ;
 からサンプルコードのダウンロードをしたが、「init.el 43kB」が一つあるだけで、READMEも含めて何も無いが...。
  •  init.elを眺めると、どうやら、このなかの冒頭のコメントがreadmeで、気に入った部分をコピー&ペーストして使うように。
とのことらしい。ポリポリ。

その後、大雑把に眺めたが、やはり「Emacs」と「Aquamacs」 との設定は違う様なので、自分なりに;
を眺めてみる事にした。

ーーーー このポストの履歴
  1. 開始 2012-03-16 (金) 13:58
  2. 追加 2012-03-17  (土) 10:42 サポートのページ 
  3. 追加 2012-03-17  (土) 11:10  init.elを眺める
  4. 追加 2012-03-17  (土) 16:18 Aquamacs

2012-03-10

「Time Capsule」内蔵HDDの保守

この「Time Capsule 1TB」は「iMac 21.5inc, late 2009」を購入時に合わせて購入し、「Snow Leopard」の「Time Machineによるバックアップ」に使っていた。ところが、昨年の大震災のあと、部屋の空調を使わない方向でいるとiMacもTimeCapsuleもかなり高熱に成る事が判明した。

そこで;
  • マシン:iMac → 「Mac mini, mid 2011」
  • Time Machine先:Time Capsule → 外付けHDD(秋葉館 ケース, FireWire800)
という運用に変更して来た。

 「Mac mini」のLion/10.7.3もそこそこ動くものの、こまかなエラーをつぶす必要がありそうだ。そこで実験的なアカウントを気楽に作る為に、「Time Capsule」中のHDDにある「Snow Leopard」の「Time Machineによるバックアップ」;
  • xxx.sparsebundle, ~630GB
を消去する事にしました。その為に「AirMac ユーティリティ.app」を使うべきだろうと思ったものの、めんどくさくて作業を先延ばしにしていました。

昨日、「iPhone3GS → 4S」の乗り換えに際し、新しいアカウントに3GSのバックアップを作る為に、 「Time Capsule」中のHDDを掃除する事にしました。iPhoneのハンドリングに集中していた為に、Finderから『「Time Capsule」中のHDDのDATA/xxx.sparsebundle』を確認して、それをゴミ箱に放り込みました。食後にみると何か様子が変です;
  • アクティビティ・モニタで見ても転送速度が低いし、
  •  ゴミ箱の「削除数0」
  • コンソールにも4つ程エラーが出ていました。
そこで、「AirMac ユーティリティ.app」の利用を思い出したものの、『「Time Capsule」中のHDD』に何か悪さをいた可能性があるので、アップルのテクニカル・コールセンタに問い合わせしたところ、
  • 「AirMac ユーティリティ.app」→ ディスク:「ディスクの消去...」
 をするだけで十分とのお話でした。

 考えてみると、 『「Time Capsule」中のHDD』はLAN-HDDであるのだから、その保守はむしろ「ディスク・ユーティリティ.app」が担当するべきではないかと、思いました。

あと、「AirMac ユーティリティ.app/7.6.1」の見てくれは大きく変わった。「インターネットとルータ」をイメージし易くしているのかもしれないが、内蔵HDD= LAN-HDDのイメージも明確にしてほしいものだ。ディスクの項目の;
  • WAN経由でディスクを共有
  • 共有ディスクのセキュリティを保護
などは、ボチボチ調べようと思う。ここら辺、iCloudと関係しそうだなぁ。

その後、『「Time Capsule」中のHDD』をFinderの情報を見るで見ていると;
  • サーバ:afp://********._afpovertcp._tcp.local/Data
    • ここで「********」は「Time Capsule」に付けた名前です。
そこで、Finderで外付けHDD(4partitions)もマウントして、iTerm2でmountをみると;
div-mm:~ u1$ mount
/dev/disk0s2 on / (hfs, local, journaled)
devfs on /dev (devfs, local, nobrowse)
map -hosts on /net (autofs, nosuid, automounted, nobrowse)
map auto_home on /home (autofs, automounted, nobrowse)
afp_0TQEw61iU0kr00j3MJ0Pyetl-1.2d000004 on /Volumes/Data (afpfs, nodev, nosuid, mounted by u1)
/dev/disk1s6 on /Volumes/Moku (hfs, local, nodev, nosuid, journaled)
/dev/disk1s4 on /Volumes/Kuri 4 div on Lion1071 (hfs, local, nodev, nosuid, journaled, noowners)
/dev/disk1s3 on /Volumes/Yomo (hfs, local, nodev, nosuid, journaled, noowners)
/dev/disk1s2 on /Volumes/Pyon 4 div on Lion (hfs, local, nodev, nosuid, journaled, noowners)
div-mm:~ u1$
と成っています。そこで、/Volume/を見ると、内蔵&外付けHdd加えて「Data/」があり、通常のHddと同様にiTerm2でも操作(ファイルの読み書きなど)ができました。従って、
  • afp_0TQEw61iU0kr00j3MJ0Pyetl-1.2d000004 on /Volumes/Data (afpfs, nodev, nosuid, mounted by u1)

が『「Time Capsule」中のHDD』のマウント部分と思われます。「Mac OSX ターミナルコマンド ポケットリファレンス、海上 忍・著、p72」でafpを見ると、ファイルシステムの一つで
  • AFP: Apple Filetransfer Protocol
という事らしい。昔のAppleTalkの末裔みたいなものかもしれない。少なくとも、ネットワーク中の「afp_0TQEw61iU0kr00j3MJ0Pyetl-1.2d000004」というディバイスを「/Volume/Data」にマウントして、利用できている訳だ。

で「AFPサーバ」を検索すると;
といった資料があった。 まだ全然理解できていないなぁ。

ーーーー このポストの履歴
  1. 開始 2012-03-10 (土) 13:57
  2. 追加 2012-03-11  (日) 11:48  、『「Time Capsule」中のHDD』をFinderの情報を見るで見ていると

2012-03-07

iTerm2のバックグラウンド・イメージ

最近はターミナル.appよりもITerm2.appを使う事が多くなって来た。始めのうちはTerminal.appの「Novel」という配色に近そうに手動設定した。

そのうちiTerm2のカラー設定を検索するうちに次のサイト;
の実例(Screenshos)を見ていると、基本は暗い背景と明るい背景の2種類で、自分の好みは明るいクリーム色らしい事がわかった。そこで「Download」の直下の;


をクリックすると「solarized」というフォルダを入手できた。その中に、各種のアプリケーションごとの設定ファイルがある。その一つに「iterm2-colors-solaried」があり、お目当ての「Solarized Light.itermcolors」があった。これをダブルクリックすると、iTerm2の「Preferences → Profiles → Colors → Load Preset」 を開くと、標準設定の下に、「Solarized Light」という項目がでるのでそれを選択する。それだけでクリーム系統の設定にできる。本当は、マック・ユーザだから、そこに書いてあるコマンドで入手した方が良かったらしい;

$ git clone git://github.com/altercation/solarized.git

慣れて来たので;
「Preferences → Profiles → Window  →Background Image」をチェックしてみた。すると、画像ファイルを訊ねて来るので Wikiのバックグランド画像をいれたが、元画像が小さいので思わしくなかった。で、ネットで検索すると;
というサイトで、高品位で奇麗な画像を配布していらっしゃるのでダウンロードさせていただいた。

これ設定すると、大変に見易くなった。それにしても、画像を拡大しないで必要なだけ貼付けてくれるともっと嬉しいかもしれない。当面、試用してみることにする。

文字の後ろが均一でないと、どうして目が疲れないのだろうか?

少し運用した所、上記の画像は高品位画像だが、濃淡が結構大きいので、「文字を読む」ときに辛い時があった。そここで模様が細かく・大きめの画像を探した所;
があった。このなかで「indian-cotton.jpg」が 「Solarized Light」との組み合わせで見易かった;


この場合の設定の様子は;


「Tips: コマンドの補完」

偶然間違って「(r)を打って、(tab)*2」を打ったら、「rを筆頭とするコマンドのリスト」が出て来た。うろ覚えのコマンドを探す時は便利かも。$PATHに入れている自作コマンドもでていた。


ーーーー このポストの履歴
  1. 開始 2012-03-07 (水) 16:52
  2. 追加 2012-03-08  (木) 11:31 フリーテクスチャ素材館の「indian-cotton.jpg」
  3. 追加  2012-03-08  (木) 13:24「Tips: コマンドの補完」

注目の投稿

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

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