大学の環境を利用するため以下のキャラクターベースのツールを設定したので解説する。すべて無料である。いまのところ、私の備忘のために項目だけだが、そのうち補充する。
sshによるX11のフォワーディング)
terminalからsshでログインする際に、先にsshに書いたようにTrustedである、-Yオプションをつければ良い。-Xオプションでうまくいくこともある。
DISPLAYのshell変数が設定され、x11対応のプログラムを立ち上がると、ssh経由でX11のデータが転送され、Mac側にwindowが立ち上がる。Mac側のxserverも自動的に起動される。
まず試すにはxeyesとかxclockがお手軽だろう。
emacsは、DISPLAY変数をみて、X11 forwardingされているとリモートウィンドウを立ち上げる。結構遅いので、これがいやな場合には、emacs -nw としてnon windowモードで立ち上げればよい。
大学内のLAN, WLANであれば、電子ブックが読めるので、以下のサイトから、サーバにfirefoxをinstallした。これはローカルにダウンロードして、FUSE+sshfsにマウントしたdiskから転送できる。
http://mozilla.cdn.leaseweb.com/firefox/releases/latest/linux-x86_64/en-US/
画像を飛ばしているので、かなり遅い。
実はもっと良いやり方がある。
- http, httpsをSSHでforwardingする。これは試していないが、以下のようにできると思う。
ssh -L10080:host.stanford.edu:80 -L10443:host.stanford.edu:443 -Y -i ~/.ssh/id_rsa satoshi@host.stanford.edu
最初の引数でhttpのポートである80を10080からforwardし、次の引数でhttpsのポートである、443を10443からフォワードするように、host.stanford.eduに指示しつつ SSHにuser名 satoshiでログインするという設定である。これに対しては、ブラウザに
http://searchworks.stanford.edu:10080/ のように : の後ろに、local port名を指定してloginすれば良い。
- ところがである、ちゃんと大学は、そういうproxyを用意してくれていた。
windows, Mac, iPhone, iPadでの設定の仕方も丁寧に書いてあった。このproxyを設定すると、libraryの電子ブックにアクセスしようとすると、stanford大学のlogin IDとパスワードを要求され、loginが必要になる。学内のWiFiならそれは必要ないが、そもそも学内netに接続するために、loginの設定がされているからである。
この設定をして、自宅でもどこでも電子ブックが読める。もはや参考書に金を払い、重たい本を持ち運ぶ必要はない。MacbookAirと、MiWiをinstallして3Gのルータになった脱獄iPhone(以下参照)だけがあればすむのである。これはまさに理想の環境である。
大学の図書館の電子ブック)
Safariというサイトなど、複数と契約している。webで以下のように読める。こ
れが上記のX11フォワードとfirefoxで自宅で読めるようになった。図書の貸し出しといっしょなので、IDを登録してもらえば、local なブラウザにloginして読めるだろう。 上記のProxy設定でこれは解決した。
電子ブックの利点は、
- 本を持ち歩く必要も無い
- 図書館に出向く必要も無い
- 原則アクセス数リミットがないので、返却を待つ必要も無い
- マウスオーバで辞書が引ける
IDを登録してもらうと自宅からloginしても読めるらしいが、 前節で示したProxy設定で解決した。これなしでアカウントにログインして図書館をアクセスしてもサンプルとなりページの半分が読めない。
電子ブックの蔵書数)
工学部図書館には4万冊の電子ブックがあり、Python, C++など、ほとんどの本はどこからでも読める。webで図書館のhomepageを見ると、Stanford大学全体で、計6,627,606冊のbook,Journalなど検索対象がある模様。(紙の書籍やマイクロィルムを含む)
"C++ program"で検索すると55,493冊がhitする。ただし、C,C#も引っかかっている。 O'Reillyなど有名どころの本はほとんどある。Infinibandだと18冊である。かなり偏りはある。
ほとんどの電子ブックは以下のsafariと契約している。アカウントなしでは、トップページにしかいけないが、個人契約もできるようである。
http://proquest.safaribooksonline.com/
WiFiが完備しているので、学内なら、芝生の上でもカフェでも、webで本が読める。重たい本を持ち運ばずに、Macbookだけで、どこでも、好きな本が読め、仕事ができる。環境を変えると、脳が刺激され発想に幅が出るように思う。理想の環境に一歩近づいた。
bashによるshell script)
Macのxterminal, terminalのshellは、bashである。私は、長いことcshellを使ってきたが、制御性等を考えると本流はbashなどBourne Shell(ボーンシェル)系であろう。shell scriptは、chmod +x ファイル名 で、実行属性を付けておけばよい。別に.batとかいった拡張子はいらない。
Bourne Shell(ボーンシェル)
http://ja.wikipedia.org/wiki/Bourne_Shell
ちなみに/bin/shも/bin/bashも同じbashである。以下
$ /bin/sh --version
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin11)
Copyright (C) 2007 Free Software Foundation, Inc.
$ /bin/bash --version
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin11)
Copyright (C) 2007 Free Software Foundation, Inc.
ATOKを使っているが、terminalでは、設定した入力モード切替に設定したCtrl-Jが通らない。標準のCtrl-Shift-ZやCtrl-Shift-Cは通る。bashがCtrl-Jを食っているのかと思い、~/.inputrcを変更してみたがうまくいかない。
.inputrcについては以下)
http://x68000.q-e-d.net/~68user/unix/pickup?~%2F.inputrc
unixのbashなどのshellは、shell scriptの先頭に以下の行をいれておけば、任意のインタプリタを用いた、scriptが書ける。windowsのbatファイルより、はるかに柔軟性が高い。たとえば、Max OS-Xに最初から入っている /usr/bin/perl を使う場合には、以下のように入れておけば良い。-fというperlのオプションは、起動を高速化するものだと考えておけば良い。bashの機能は、windowsとは比べものにならないくらい高機能で柔軟性が高い。unixは、1970年台から世界中の優秀な研究者達が、オープンソースとして改良を加え続けていのだから当然である。
#/usr/bin/perl -f
bashなどのShell scriptを使うと高度な処理が簡単にできる。例えばフォルダにあるファイル名の一部を付け替えるのは、 ターミナルウィンドウから
$ for i in *
> do
> mv $i `echo $i|sed s/18Dec/17Dec/`
> done
とやることで、18Decの部分を17Decに全部置き換えてくれる。これとfindコマンドなどを組み合わせれば、任意のフォルダ配下のファイル名の一括置換もできる。小さなtextコマンドを組み合わせることで何でも出来るのが、unixの美学なのである。Macでは文字コードがUTF-8に統一されているので、これらの検索やファイル名には日本語も使える。
rsyncによるバックアップ)
/user/bin/rsync は、Macに標準で入っている。
rsyncとは)
http://www.itmedia.co.jp/enterprise/articles/0804/21/news013.html
rsyncの使い方)
http://futuremix.org/2011/02/rsync
さきのbashのシェルスクリプトを使うと以下のようなバックアップコマンドが作れる。
- SRC変数に、バックアップしたいソースのdirectory (MacやWindowsでいうfolder)を入れておく。
- TARG変数に、バックアップ先のdirectoryを入れておく。これは、NASのback先である。
- 除外したいファイルやdirectoryのリストをEXCLに指定したファイルに書いておく。
このシェルスクリプトの引数は、$@で、rsyncに渡る。シェルスクリプトの名前をnas_backup.sh とすると、nas_backup.sh -n で、rsyncに引数 -n が渡り、rsyncは、表示のみする。どのファイルをコピーするかのリストだけが得られる。コピーはしない。
--- nas_backup.sh ---
#! /bin/sh -f
echo
echo '----------------'
echo backup to NAS on `date`
OPT="-av -delete $@"
# OPT="-avn -delete" # for debugging -- dry run. --> -n option with this scripts force dry run.
EXCL=--exclude-from=$HOME/scripts/rsync_exclude.list
SRC=(~/Desktop/ ~/Music/ ~/work/)
TARG=/Volumes/disk/Backup/MacbookAirHomeRsync/ # NAS mount point on Mac OS-X
for f in ${SRC[@]}
do
echo Running : rsync $OPT $EXCL $f $TARG
rsync $OPT $EXCL $f $TARG
done
---
$HOME/scripts/rsync_exclude.list の形式は以下の通り。
- # から始まる行、#の後ろはコメント
- - から始まる行が、除外ファイル。正規表現で指定が可能。directoryの場合には、- で終わる
- + から始まる行は、除外から再度外したいファイルやdirectory
-- execlude.listのサンプル --
# files excluded from ~/Desktop/
- UnUsed/
- work/
# files excluded from ~/Music/
# files excluded from ~/work/
- iTunes\ Media/
# below is precious
+ iTunes\iTunes\ Media/Mobile\ Applications/
- *.dmg
- *~
--
emacsによる編集)
~/.emacsを置くことで、起動時設定が変更できる。これはelispというlisp言語もどきで書かれている。
開発元Gnuのelispリファレンス)
http://www.bookshelf.jp/texi/elisp-manual/21-2-8/jp/elisp.html
簡単な説明)
http://mibai.tec.u-ryukyu.ac.jp/~oshiro/Doc/elisp_primer.html
.emacsのサンプル)
セミコロン ";" 以下はコメントになる。
とりあえず最初の3行があれば、私は使える。yatexモードは今は使っていないが、参考に残した。
1行目がないと、ctrl-hはヘルプになってしまう。2行目で、markをアサインし、3行目でundoをctrl-x ctrl-uにキーアサインしている。
--
(global-set-key "\C-h" 'delete-backward-char)
(global-set-key "\C-@" 'set-mark-command)
(global-set-key "\C-x\C-u" 'undo-only)
;; yatex setting
(setq auto-mode-alist (cons (cons "\\.tex$" 'yatex-mode) auto-mode-alist))
(autoload 'yatex-mode "yatex" "Yet Another LaTeX mode" t)
(setq tex-command "/Users/satoshi/Library/TeXShop/bin/platex2pdf-euc" dvi2-command "open -a TexShop")
(add-hook 'yatex-mode-hook
'(lambda ()
(setq buffer-file-coding-system 'euc-japan-unix)))
--
lrunというコマンドを作った)
#/bin/bash -f
# run with logfile
fname=`date +%Y%m%d`.log
date +"%n----Log: %c ----%n$*%n" >> $fname
cmd="$* 2>&1 | tee -a $fname"
echo log is written to $fname ....
# echo $cmd
eval $cmd
たったこれだけ。
lrun ls -l とかlrunのうしろにコマンドを打つ。すると、20120105.logみたいに日付名のファイルに、標準出力と標準エラー出力を追記する。なければ新規に作る。
どうじに通常通り画面にも出力を表示する。logファイルには、----Log: 日付 ---
の行を挿入するので、----Log: でサーチすれば、区切りに飛べる。
bashの機能と、date, teeという2つのコマンドの組み合わせで、簡単にこういうものが作れる。
teeについてはココ)
http://x68000.q-e-d.net/~68user/unix/pickup?tee
bashのリダイレクトについてはココ)
http://x68000.q-e-d.net/~68user/unix/pickup?%A5%EA%A5%C0%A5%A4%A5%EC%A5%AF%A5%C8
--
Disk spaceが足らなくなってきた)
2012/1/13追記:
MacbookAirは256GBのSSDだが空きdiskが大分減ってきた。調べるのは、terminal windowから、
ベースがBSD UNIXのMac OS-Xは本当に良い。iOSもunixなので脱獄すれば自由に使える。Androidはベースがlinuxである。これは元々ルートになれるものもある。