2010年11月21日日曜日

Mac os X snow leopard, javaの文字化け

今更ながらjavaを書き始めたが, javacで文字化けしてしまう.
エラーメッセージはSJISで表示されてしまうということをどこかで見たので,

% javac -J-Dfile.encoding=UTF8

としてUTFにする必要がある. めんどいのでこれはaliasとして

alias javac="javac -J-Dfile.encoding=UTF8"
として定義を上書きしておく.

同様にjavaも

alias java='java -Dfile.encoding=UTF-8'

とする.

が, しかし, 日本語をインプットすると文字化けしてしまう. やっぱJDK 1.5を使うべきか...そちらならUTF-8環境なので.
しばらく考えよう.

2010年11月19日金曜日

zsh プロンプト変更

なんとなくプロンプトを変更してみた.

書き方が分かったから今度から自分で変更しよう.

参考にできるのはここ.

zsh:Prompt Expansion

変えたのはこれ

autoload colors
colors
case ${UID} in
0)
    PROMPT="%B%{${fg[green]}%}%n@%m#%{${reset_color}%}%b "
    PROMPT2="%B%{${fg[green]}%}%_#%{${reset_color}%}%b "
 RPROMPT="%{${fg[yellow]}%}[%~]%{${reset_color}%}"
    SPROMPT="%B%{${fg[red]}%}%r is correct? [n,y,a,e]:%{${reset_color}%}%b "
    [ -n "${REMOTEHOST}${SSH_CONNECTION}" ] && 
        PROMPT="%{${fg[cyan]}%}$(echo ${HOST%%.*} | tr '[a-z]' '[A-Z]') ${PROMPT}"
    ;;
*)
    PROMPT="%{${fg[green]}%}%n@%m %%%{${reset_color}%} "
    PROMPT2="%{${fg[green]}%}%_%%%{${reset_color}%} "
 RPROMPT="%{${fg[yellow]}%}[%~]%{${reset_color}%}"
    SPROMPT="%{${fg[red]}%}%r is correct? [n,y,a,e]:%{${reset_color}%} "
    [ -n "${REMOTEHOST}${SSH_CONNECTION}" ] && 
        PROMPT="%{${fg[cyan]}%}$(echo ${HOST%%.*} | tr '[a-z]' '[A-Z]') ${PROMPT}"
    ;;
esac

結局RPROMPTで右っかわにカレントディレクトリ (%~)を表示させ, 左側にはユーザ名@マシン名 (%n@%m) としました.
時刻とか出してる人もいたけどあんまり必要な情報ではないし... とは言えユーザ名もマシン名も自宅PCであれば意味ないか...

今更聞けないUNIXコマンド (3) 公開鍵認証方式+ssh ログイン

職場、学校等のサーバが公開鍵認証方式を採用している場合は多いです。
その設定を昨日やったので、一応書いておきます。windowsではputtyなんかでやってましたが、macではTerminalから全部できて便利。

まずは

% ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/tatsuaki/.ssh/id_rsa): 
Created directory '/Users/tatsuaki/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 

てなかんじでssh-keygenにより公開鍵, 秘密鍵のペアを生成します.
公開鍵は他人に見られてもオッケーですが、秘密鍵は秘密なのでこれは絶対秘密です.
-t オプションは鍵の種類を設定します. dsaとかありますがデフォルトではrsa2である-t rsaが決まっていて,
これが推奨らしいのでこれでやりましょう.

コマンドを入れるとkeyを作る場所を聞かれるのでいれます. デフォルトで~/.ssh/に入ります.

次にパスフレーズを聞かれるので, パスワードを2回いれます. (これでサーバへ認証します)

% cd .ssh
id_rsa  id_rsa.pub
と2つファイルがあり, id_rsa, id_rsa.pubがありますが, 後者が公開鍵です.
これをサーバへ転送します.

とは言え自分はつながっていないので誰かに頼みましょう. 私の場合は違うマシンで入れたのでそっちへ
メールで送り, そこから設定しました.

ここからはサーバ側の設定です.

サーバへファイルid_rsa.pubを送りましょう. sftpやらscpやら単純にftpやらありますが,
scpでやるならば

$ scp [オプション][転送したいファイル名][転送先のパス]
とします.

たとえば
$ scp test.txt USER1@remotehost.co.jp:.ssh
で手元にあるtest.txtをUSER1としてログインするremotehost.co.jpの~/.ssh/へ送ります.
パスワードを聞かれますので入力すればok. ちなみに, scpは-rオプションでディレクトリを転送します.

サーバ管理者がどうしているか分かりませんが, サーバのユーザホームディレクトリに.sshがあるはずなので,
(なければ作る)

$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

でauthorized_keysへ内容を書き込みます. これにて終了.
ちなみに
$ chmod 600 ~/.ssh/authorized_keys
でパーミッションを変更して他から表示できないようにしといた方が安全です.


あとはログインするときは

$ ssh USER1@remotehost.co.jp 

あるいは

$ ssh -l USER1 remotehost.co.jp
で入れます.

あと, 普通にやっていれば公開鍵がユーザの~/.ssh/known_hostsに追加されるはずですが, エラーが出たり
古かったりすると問題です. 書式は以下の通り.

ホスト名, IP  キー種別  ホスト公開鍵
    #  コメント
   例:
    remotehost.co.jp, 192.168.1.2 ssh-rsa AAAAB3NzaC1...nXIDE=.......
改行すれば何個も指定できます.

2010年11月16日火曜日

Carbon Emacs フォント設定

また取り急ぎ

M+2VM+IPAG Circle 14ptにフォント設定しました.
なんかこのフォント好きになりました.


.emacs.elへ以下を追加

;;;;;;;;;;;;;;;;;;;;;;;
;; font
;;;;;;;;;;;;;;;;;;;;;;

 (set-face-attribute 'default nil
                     :family "M+2VM+IPAG circle"
                     :height 140)
 (set-fontset-font "fontset-default"
                   'japanese-jisx0208
                   '("M+2VM+IPAG circle" . "jisx0208.*"))

 (set-fontset-font "fontset-default"
                   'katakana-jisx0201
                   '("M+2VM+IPAG circle" . "jisx0201.*"))

友人とElispファイルを共有してともにEmacsを楽しもうという話になった.
かなり彼は分割して保存していて, 私の.emacs.elもどこにバグがあるか分からないときがある,
というので, 今度思い切って分割しよう. もうこれで設定は終わりにしたいかな...


フォントは
M+IPA合成フォント
からダウンロードさせていただきます. お世話になっております.

2010年11月15日月曜日

zshの設定

さらに取り急ぎ, .zshrcおよび.zshenvの設定


.zshenv
PATH=$PATH:$HOME/bin

export PATH

# MacPorts Installer addition on 2010-09-20_at_22:04:26: adding an appropriate PATH variable for use with MacPorts.
export PATH=/opt/local/bin:/opt/local/sbin:$PATH
# Finished adapting your PATH environment variable for use with MacPorts.

#Manual PATH
export MANPATH=/opt/local/share/man:$MANPATH


#Hadoop Path
export HADOOP_INSTALL=/Users/tatsuaki/workspace/hadoop-0.21.0
export PATH=$PATH:$HADOOP_INSTALL/bin

LANG=ja_JP.UTF-8
export LANG

LISTMAX=0
export LISTMAX

.zshrc
# 新規ディレクトリは755、新規ファイルは644にする
umask 022


## Default shell configuration
#
# set prompt
#
autoload colors
colors
case ${UID} in
0)
    PROMPT="%B%{${fg[green]}%}%/#%{${reset_color}%}%b "
    PROMPT2="%B%{${fg[green]}%}%_#%{${reset_color}%}%b "
    SPROMPT="%B%{${fg[green]}%}%r is correct? [n,y,a,e]:%{${reset_color}%}%b "
    [ -n "${REMOTEHOST}${SSH_CONNECTION}" ] && 
        PROMPT="%{${fg[cyan]}%}$(echo ${HOST%%.*} | tr '[a-z]' '[A-Z]') ${PROMPT}"
    ;;
*)
    PROMPT="%{${fg[green]}%}%/%%%{${reset_color}%} "
    PROMPT2="%{${fg[green]}%}%_%%%{${reset_color}%} "
    SPROMPT="%{${fg[green]}%}%r is correct? [n,y,a,e]:%{${reset_color}%} "
    [ -n "${REMOTEHOST}${SSH_CONNECTION}" ] && 
        PROMPT="%{${fg[cyan]}%}$(echo ${HOST%%.*} | tr '[a-z]' '[A-Z]') ${PROMPT}"
    ;;
esac



#### 補完  ####
#############

autoload -U compinit
compinit

#ディレクトリ名を入力するだけでカレントディレクトリを変更
setopt auto_cd
#タブキーを何度も押せば補完候補が出る
setopt auto_menu
#自動集積機能
setopt correct
#補完機能を詰めて表示
setopt list_packed
# =以降でも補完できるようにする
setopt magic_equal_subst
#補完候補リストの日本語を正しく表示
setopt print_eight_bit

# 補完の時に大文字小文字を区別しない(但し、大文字を打った場合は小文字に変換しない)
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'


# ビープ音を鳴らさないようにする
setopt no_beep



##history#####
# 直前と同じコマンドラインはヒストリに追加しない
setopt hist_ignore_dups

# ヒストリにhistoryコマンドを記録しない
setopt hist_no_store

# 余分なスペースを削除してヒストリに記録する
setopt hist_reduce_blanks

# 行頭がスペースで始まるコマンドラインはヒストリに記録しない
# setopt hist_ignore_spece

# 重複したヒストリは追加しない
# setopt hist_ignore_all_dups

# ヒストリを呼び出してから実行する間に一旦編集できる状態になる
setopt hist_verify

# 履歴ファイルの保存先
HISTFILE=$HOME/.zsh-history
# メモリ内の履歴の数
HISTSIZE=30000
# 保存される履歴の数
SAVEHIST=100000
# 履歴ファイルに時刻を記録する機能を有効化
setopt extended_history
# 履歴をターミナル間で共有する
setopt share_history




# ディレクトリを水色にする。
export LS_COLORS='di=01;36'

# ファイルリスト補完でもlsと同様に色をつける。
zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}

# cd をしたときにlsを実行する
function chpwd() { ls }

# ディレクトリ名だけで、ディレクトリの移動をする。
setopt auto_cd





# lsコマンドの補完候補にも色付き表示
#eval `dircolors`
zstyle ':completion:*:default' list-colors ${LS_COLORS}
# kill の候補にも色付き表示
zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([%0-9]#)*=0=01;31'



zstyle ':completion:*' list-colors \
    'di=01;34' 'ln=01;36' 'pi=40;33' 'so=01;35' 'ex=01;32' \
    'bd=40;33;01' 'cd=40;33;01' 'su=37;41' 'sg=30;43' 'tw=30;42' 'ow=34;42'
autoload -U compinit
compinit -u

  



##


# Carbon Emacs = cemacs
alias cemacs='open -a Emacs'
alias cemacsn='open  -n Emacs'
alias emacs='/Applications/Emacs.app/Contents/MacOS/Emacs -nw'

#alias#
alias ls="ls -G"
alias rm="rm -i"
alias cp="cp -i"
alias mv="mv -i"

# application alias #
alias firefox="open -a Firefox"
alias prev="open -a Preview"
alias itunes="open -a iTunes"
alias texs="open -a  TexShop"

1時間くらいで拾い集めた情報であるため, 今後更新予定.
とりあえずプロンプトを変えたい.

vimの使い方

設定はさておき, vimの使い方を取り急ぎ列挙. PC設定だけで時間が過ぎて行く虚しさ…これは先行投資である.


各モード間の移行

大きく分けて,

  • 通常モード: カーソル移動, 削除など
  • ビジュアルモード: 文章選択用, ここで動いた分選択される
  • コマンドモード: vim制御用. ここで色んな操作ができる.
  • 挿入モード: 名の通り文書書く用
がある.

それぞれ色んな移動方法があるが, だいたいメインの使用法は

通常モードを起点として,

ビジュアルモード > v
コマンドモード > :(コマンド) /(検索)
挿入モード > a (カーソルの後ろ側へ) i (カーソルの手前側へ)

などです. また, 通常モードに戻るには, Escキーで戻ります.


基本操作(ノーマルモード)

  • 削除: x(カーソル位置1文字), *x(カーソルから指定文字分削除), X(バックスペース), dd(1行カット)
  • コピー: yy (行コピー), *yy(指定行コピー), v(選択範囲開始), y(そこまでコピー)
  • ペースト: p(下へ貼付け), P(上へ貼付け)
  • カーソルの移動:h(左), j(下), k(上), l(右), 0(行頭), $(行末),:0(ファイル先頭), :*(指定行)
  • 画面移動: C-f (画面下へ), C-b(画面上へ)

重要な操作

  • 終了: :q(終了), :wq(保存して終了), :q!(保存せず終了)
  • 保存: :w(上書き保存), :w ***(別名で保存)
  • 検索: /*** (後方検索), ?***(前方検索), n(次の候補へ), N(前の候補へ)
  • 取り消し: u(アンドゥ), U(現在行の操作を全て取り消し)
  • 置換: :%s/***1/***2/gc (***1を***2へ置換, c無ければ確認無しで実行)
  • 繰り返し: .(直前操作繰り返し)

こんなとこでしょう. そのうちvimも.vimrcをいじることで快適度をあげます.

2010年11月14日日曜日

今更聞けないUNIXコマンド (3) ジョブとプロセス

UNIXにおけるプロセス, とはOSが管理する実行単位です. それに対して, ジョブは複数のプロセスから成る, シェルが管理するプログラムの実行単位になります.

動作中のジョブは

$ jobs
[1]+  Stopped                 gnuplot

のように確認できます. とはいえ, Stoppedでgnuplotは停止中ですね.
Running : 実行中, Killed: 強制終了, Done: 正常終了, Exit: 異常終了などがあります.

フォアグランドジョブというのが, 現在表で実行中のジョブのことですが, 裏で動作する
バックグランドジョブに切り替えることができます.

$ bg %1
[1]+ gnuplot &

[1]+  Stopped                 gnuplot
とこのようにbg %ジョブ番号でバックグラウンドになります. (%注意)

逆にしたければ

$ fg %1
gnuplot

gnuplot>
でフォアグラウンドにできます. ちなみに引数をいれなければデフォルトでStoppedのジョブが選ばれます.

また, プロセス一覧も見ることができます.

$ ps
  PID TTY           TIME CMD
  478 ttys000    0:00.04 -bash
  995 ttys000    0:00.01 gnuplot
  895 ttys001    0:00.01 -bash
ターミナルを2つ立ち上げていたので, bashが二つプロセスとしてあります.
PIDというのはプロセスを管理するプロセス番号です. 試しに消してみましょう.

$ kill 995
$ ps
  PID TTY           TIME CMD
  478 ttys000    0:00.05 -bash
  895 ttys001    0:00.01 -bash
[1]+  Terminated              gnuplot

とまぁgnuplotが終了されました. これはTERMシグナルというものを送っています.
本気で殺したければkill -KILLとKILLシグナルを送ります.

$ kill -KILL 1041
$ ps
  PID TTY           TIME CMD
  478 ttys000    0:00.07 -bash
  895 ttys001    0:00.01 -bash
[1]+  Killed                  gnuplot

これで無事強制終了されました. なお, Kill PID番号でプロセスを, Kill %ジョブ番号でジョブを殺せます.

シグナルは色々あるらしいので, よくわからんのですが, (kill -lコマンドで確認可能)
とりあえず有名なのはHUPシグナルらしいです.

これはネットワークサービスとして動くデーモンに設定ファイルを再読み込みさせるために使います.
ようするに, 何か設定ファイル変えたときに反映させるためですね.

$ ps -axw
で全ユーザプロセスを省略せずに見ることができます. これでプロセス探して,

$ kill -HUP PID
とすることで, 更新させることができます.

なお, 他にkillallコマンドってのがあって, そっちはコマンド名でシグナルを送るそうです.

$ killall gnuplot
$ ps
  PID TTY           TIME CMD
  478 ttys000    0:00.10 -bash
  895 ttys001    0:00.03 -bash
[1]+  Terminated              gnuplot



ps -axwがでてきたのでついでに書くと, topコマンドを使うと, 色んなシステム状態をリアルタイムで見れます.
アクティビティモニタと同じですね. これも全然知らんかった...


ちなみに, 一緒に書くのがいいかわからんが,

$ df -i -h
Filesystem      Size   Used  Avail Capacity  iused    ifree %iused  Mounted on
/dev/disk0s2   298Gi  100Gi  197Gi    34% 26399483 51659343   34%   /
devfs          107Ki  107Ki    0Bi   100%      610        0  100%   /dev
map -hosts       0Bi    0Bi    0Bi   100%        0        0  100%   /net
map auto_home    0Bi    0Bi    0Bi   100%        0        0  100%   /home
でディスク使用状況を見れます. -iってのはi-nodeの使用状況も表示, -hってのは
勝手に人が見やすい単位を表示してくれてます.


まぁしかしコマンドってのは死ぬほどあるな. 必要になれば, あるいは人が使ってみるのを見て覚えるしかない.
正直こういったことは覚えたから偉いって訳でもなく, ただ便利だよね, てだけなので必要に応じることが大事だと思います. (初心者が学ぶ姿勢ではないか…)

今更聞けないUNIXコマンド (2) シェル変数について

色々と環境を構築するときにはPATHであったり, なんでもシェル変数がつきまといます.
てわけで簡単な操作をまとめておきます.

代入〜表示〜削除まで

$ age=1
$ echo $age
1
$ unset age
$ echo $age

こんなかんじで, スペースなしで変数へ代入する. echo + $変数名で表示.
unset 変数名で削除を行う. なお, 代入の際文字列なら, "文字列"とする.

組み込みシェル変数

と, さっきのは普通のシェルのユーザが定義する変数でした.
特定の変数は現在の設定などのために使用されるそうです.
そういった組み込みシェル変数を見るには

$ set
Apple_PubSub_Socket_Render=/tmp/launch-E3SrVT/Render
BASH=/bin/bash
BASH_ARGC=()
BASH_ARGV=()
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="3" [1]="2" [2]="48" [3]="1" [4]="release" [5]="x86_64-apple-darwin10.0")
BASH_VERSION='3.2.48(1)-release'
CLICOLOR=1
COLUMNS=100
COMMAND_MODE=unix2003
〜省略

といった具合にsetで見れます.

例えば
$ pwd
/Users/Shared
$ echo $PWD
/Users/Shared
とか.



環境変数

さっきまでのは普通のシェル変数でして, そのシェル内でのみ有効なのですが, 環境変数という
他のプログラムまで影響を及ぼす特別な変数があります. 例えばさっき出てきたPATHやLANGなどがそれです.

環境変数の定義に仕方は

$ export ***
です. 削除は例によってunset.

例えば,

$ echo $PATH
/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/texbin:/usr/X11/bin:〜
てかんじで中身を見ることができます.

てわけで

$ export PATH=$PATH:/usr/...
てやつは, PATHの中身プラス/usr/...てパスを代入する, という意味があるんですね.
こんな初歩的なことも知らなかったとは切ない.



今ある環境変数一覧は,
$ printenv
MANPATH=/opt/local/share/man:
TERM_PROGRAM=Apple_Terminal
TERM=xterm-color
SHELL=/bin/bash
CLICOLOR=1
TMPDIR=/var/folders/z-/z-li-9WFH48WCuV3k4AIYE+++TI/-Tmp-/
Apple_PubSub_Socket_Render=/tmp/launch-E3SrVT/Render
TERM_PROGRAM_VERSION=273
〜省略
などで見ることができます.

Carbon Emacs + Wanderlust + IMAP で Gmail

Carbon Emacsが便利すぎますが, メーラとしても使えるということで, 調べてみるとWanderlustというのがありました.
というわけで早速これを導入してみました.

まずはCarbon EmacsのHelpからCarbon Emacs Package > Net Installから選んで終了.

続いて.emacs.elへ設定

;; Wanderlust で Gmail!!
(setq ssl-certificate-verification-policy 1) 
(autoload 'wl "wl" "Wanderlust" t)
(autoload 'wl-other-frame "wl" "Wanderlust on new frame." t)
(autoload 'wl-draft "wl-draft" "Write draft with Wanderlust." t)

そしてルートに.wlというファイルを作り, 下記を書き込み. いろんなサイトを参考にしすぎてよくわかりません.

;;;  Wanderlust 設定ファイル

;; From設定
(setq wl-envelope-from "hogehoge@gmail.com")
(setq wl-from "My Name Is... ")

;; POP サーバの設定, IMAPなので不使用
;(setq elmo-pop3-default-server "pop.***.com") 
;(setq elmo-pop3-default-port 110) 
;(setq elmo-pop3-default-user "hogehoge")
;(setq elmo-default-pop-authenticate-type 'clear)
;; POP3 before SMTP
;(setq wl-draft-send-mail-function 'wl-draft-send-mail-with-pop-before-smtp) 


;; IMAP サーバの設定
(setq elmo-imap4-default-server "imap.gmail.com")
(setq elmo-imap4-default-user "hogehoge@gmail.com") ;
(setq elmo-imap4-default-authenticate-type 'clear) ; 
(setq elmo-imap4-default-port '993)
(setq elmo-imap4-default-stream-type 'ssl)

(setq elmo-imap4-use-modified-utf7 t) ; 日本語フォルダ対策

(setq ssl-program-name "openssl")


;; SMTP サーバの設定
(setq wl-smtp-connection-type 'starttls)
(setq wl-smtp-posting-port 587)
(setq wl-smtp-authenticate-type "plain")
(setq wl-smtp-posting-user "hogehoge") 
(setq wl-smtp-posting-server "smtp.gmail.com")
(setq wl-local-domain "gmail.com")

;; デフォルトのフォルダ
(setq wl-default-folder "%inbox")
;; 削除をGmail仕様に
(setq wl-dispose-folder-alist
      (cons '("^%inbox" . remove) wl-dispose-folder-alist))
;; フォルダ名補完時に使用するデフォルトのスペック
(setq wl-default-spec "%")
(setq wl-draft-folder "%[Gmail]/Drafts") ; Gmail IMAPの仕様に合わせて
(setq wl-trash-folder "%[Gmail]/Trash")
;; 画面を普通のメーラみたいな 3ペインに
;(setq wl-stay-folder-window t)
;; 下書きディレクトリをローカルに設定する.
(setq wl-draft-folder "+Drafts")
(setq wl-folder-check-async t) ; 非同期でチェックするように
;; 大きなメッセージを分割して送信しない(デフォルトはtで分割する)
(setq mime-edit-split-message nil)
;; 起動時からオフラインにする
;; (setq wl-plugged nil)
;; サマリモードで日時を英語表示
;; (setq wl-summary-weekday-name-lang 'en)
;; HTMLファイルは表示しない。
;;(setq mime-setup-enable-inline-html nil)
;; メールを書くときは見出し画面を残して、フル画面にする
(setq wl-draft-reply-buffer-style 'keep)
;; 送信済みIMAPフォルダは送信と同時に既読にする
(setq wl-fcc-force-as-read t)
;; 最初からスレッドを開いておかない
;;(setq wl-thread-insert-opened nil)
;; スレッドを分割するしきい値(デフォルト:30)
(setq wl-summary-max-thread-depth 30)
;; 警告無しに開けるメールサイズの最大値(デフォルト:30K)
(setq elmo-message-fetch-threshold 500000)
;; プリフェッチ時に確認を求めるメールサイズの最大値(デフォルト:30K)
(setq wl-prefetch-threshold 500000)

;;;------------------------------------------
(setq wl-dispose-folder-alist
      (cons '("^%inbox" . remove) wl-dispose-folder-alist))


;;;------------------------------------------
;;; from,to のデコード指定。
(mime-set-field-decoder
 'From nil 'eword-decode-and-unfold-unstructured-field-body)
(mime-set-field-decoder
 'To nil 'eword-decode-and-unfold-unstructured-field-body)

;;;------------------------------------------
;; summary-mode ですべての header を一旦除去
(setq mime-view-ignored-field-list '("^.*"))

;; 表示するヘッダ。
(setq wl-message-visible-field-list
      (append mime-view-visible-field-list
        '("^Subject:" "^From:" "^To:" "^Cc:" 
          "^X-Mailer:" "^X-Newsreader:" "^User-Agent:"
          "^X-Face:" "^X-Mail-Count:" "^X-ML-COUNT:"
          )))

また, 同様に.foldersを以下の通り作成.

%inbox "受信トレイ"
%[Gmail]/Starred "☆"
+Drafts "下書き"
%work "仕事"
%[Gmail]/All Mail "全てのメール"
%[Gmail]/Sent Mail "送信済みメール"
%[Gmail]/Trash "ゴミ箱"
%[Gmail]/Spam "迷惑メール"


最初設定で色んなページの参照と違ったのは, gnutlsがないと怒られた点. portsでインストールしました.

簡単なwanderlustの使い方

Emacsを立ち上げて,
M-x wl

で起動. 基本的にspaceかEnterで決定します.

通常モード
  • s: 未読メール更新
  • Shift+s: サマリ更新
  • o: 未読メールフォルダを開く
  • [, ]: 全てのフォルダを開く, 閉じる
  • Shift+e: ゴミ箱を空にする
  • M-t: オンライン/オフラインの切り替え
  • q: 終了
  • w: メールを書く


サマリモード
  • DEL: 読んでいるメールを上にスクロール
  • ENTER: 読んでいるメールを一行進める
  • -: 読んでいるメールを一行戻す
  • n: 次のメール
  • p: 一つ上のメール
  • Shift+h: ヘッダ表示(. で戻る)
  • s: 現在のフォルダの一覧表示
  • g: フォルダ移動
  • w: メールを書く
  • a: 返信
  • Shift+a: メールを引用してお返事を書く
  • f: 転送
  • Shift+e: メールの再編集
  • y: メール保存
  • Shift+z: ~/.addresses の更新

そしてメールを書くときは
  • C-c C-s: メール送信
  • C-c C-c: 送信してドラフトバッファ消去
  • C-c C-y: メールの引用
  • C-c C-k: 破棄
  • C-c C-x C-m: 最後に読んだメールを挿入
  • C-c C-x C-t: テキスト挿入
  • C-c C-x C-i: ファイルをエンコードして挿入

ちなみにアドレス帳は~/.addressに書きます. こ

2010年11月12日金曜日

Mac Portsについて

Mac Portsとは?

UNIX用ソフトウェアを自動的にダウンロードしてくれる非常に便利なパッケージ管理システム。

Mac Ports
からダウンロードして, インストールします. 環境設定は勝手に.bash_profileにPATHが追加されます.
PATHを見ると, 基本的に/opt/localにインストールされることになります.

ただマニュアルの保存先のMANPATHは追加されていないので, これは自分でしましょう.

$ export MANPATH=/opt/local/share/man:$MANPATH
$ source .bash_profile


欲しいものがあれば (例: lessに文字コード認識機能を追加したページャlv)
$ sudo port install lv
Password: 
でオッケー.

インストールしているport一覧は
$ port installed
The following ports are currently installed:
  atk @1.30.0_0 (active)
  autoconf @2.67_0
  autoconf @2.68_0 (active)
  automake @1.11.1_0 (active)
  bzip2 @1.0.5_3
  bzip2 @1.0.6_0 (active)
  cairo @1.10.0_1 (active)
  cppunit @1.12.1_0 (active)
  ctags @5.8_0 (active)
  db46 @4.6.21_6 (active)
  dbus @1.2.24_1 (active)
  dirac @1.0.2_0 (active)
  docbook-xml @5.0_0 (active)
  docbook-xml-4.1.2 @4.1.2_1 (active)
  docbook-xml-4.2 @4.2_0 (active)
  docbook-xml-4.3 @4.3_0 (active)
  docbook-xml-4.4 @4.4_0 (active)
  docbook-xml-4.5 @4.5_0 (active)
  docbook-xml-5.0 @5.0_0 (active)
  docbook-xsl @1.75.2_0 (active)
  exo @0.3.107_0 (active)
  expat @2.0.1_1 (active)
  faac @1.28_2 (active)
  faad2 @2.7_0 (active)
  ffmpeg @0.6_2 (active)
〜省略〜
で見れます. けっこうたくさんありますね...どれがどれかわからん...
ちょっと整理せねば.


実は定期的に自分でアップデートしないといけないので,
$ port outdated 
で新しいのがあるか調べて,

$ sudo port upgrade ****
でアップデート.

まとめてやりたいなら
$ sudo port upgrade outdated
Password:
で全部やります.


有効/無効の切り替え

$ sudo port deactivate ****
$ sudo port activate ****

削除

$ sudo port uninstall ****
ただ他のportと連携してたら消せません.

以上

2010年11月11日木曜日

Pythonの初歩

Python を仕事でよく使うので, 休みを利用して速習します.

最初は便利なデータ構造の扱いについて.

リスト

まずは定義の仕方. と簡単な扱い方.
>>> list = [1,2,"abc",3,4]
>>> list
[1, 2, 'abc', 3, 4]
>>> list[2]
'abc'
>>> list[-2]
3
>>> list[1:]
[2, 'abc', 3, 4]
>>> list[1:3]
[2, 'abc']

[ ]でくくって定義するのがリスト. どんなもの, 文字列, 数値なども格納可能.
list[: ]のようにして指定箇所のオブジェクトを取り出すことができる. これをスライスという.

基本演算

>>> list += [100]
>>> list
[1, 2, 'abc', 3, 4, 100]
>>> list *2
[1, 2, 'abc', 3, 4, 100, 1, 2, 'abc', 3, 4, 100]
>>> del list[-1]
>>> list
[1, 2, 'abc', 3, 4]

+[100]でリストへ追加. *を使うとそれを何回も繰り返したものを返す. あくまでlistそのものは変わらない.
del list[ ] で要素削除.

様々なメソッド

ソート
>>> list
[1, 2, 120, 3, 4]
>>> list.sort()
>>> list
[1, 2, 3, 4, 120]

リバース
>>> list2 = list.reverse()
>>> list
[120, 4, 3, 2, 1]

追加
>>> list.append([9,10])
>>> list
[120, 4, 3, 2, 1, [9, 10]]
>>> a = list
>>> list.extend(a)
>>> list
[120, 4, 3, 2, 1, [9, 10], 120, 4, 3, 2, 1, [9, 10]]
appendで1個のオブジェクト追加. extendでリスト結合.

ディクショナリ

<key, value> によって保持されるデータ型. リストはkeyに使えないことに注意.


>>> dic = {"name" : "K", "addr" : "JPN", "count" : 100}
>>> dic
{'count': 100, 'name': 'K', 'addr': 'JPN'}
>>> dic ["hobby"] = "guitar"
>>> dic ["hobby"]
'guitar'
>>> dic
{'count': 100, 'hobby': 'guitar', 'name': 'K', 'addr': 'JPN'}

こんなかんじで, { }でくくってkey:valueで定義します. あとは["key"]とすればvalueを探せますし,
["new key"]で新たなkey:valueを追加できます.

もちろん欲しいのkeyの一覧
>>> dic.keys()
['count', 'hobby', 'name', 'addr']

あと, keyが含まれてるかどうか
>>> dic.has_key("count")
True
>>> dic.has_key("hoge")
False


タプル

長さも変えられないし, 書き換えもできないタプルの紹介. ディクショナリのkeyとして使えば便利かと.

>>> tup = (192,168,1,1)
>>> tup
(192, 168, 1, 1)

取り出し, 演算は可能. 他のタプルとして定義すればよいよね.

>>> tup2 = tup + ("abc",11)
>>> tup2
(192, 168, 1, 1, 'abc', 11)
>>> tup2 [3:]
(1, 'abc', 11)

スライスもリストと同じです.


型変換について

もちろん便利な型変換も可能です.

>>> a = list(tup2)
>>> a
[192, 168, 1, 1, 'abc', 11]
>>> a = tuple(a)
>>> a
(192, 168, 1, 1, 'abc', 11)


以上, 今回の話をまとめると,

シーケンス型の組み込み型: リスト, タプル
マップ型の組み込み型: ディクショナリ

変更可能な組み込み型: リスト, ディクショナリ
変更不可能な組み込み型: タプル, (文字列も同じ) 

2010年11月7日日曜日

今更聞けないUNIXコマンド (1)

shellの操作も実は素人なもので、覚えたものを随時書いて行きます。

リンク作成

リンクにはディスク内の同じ領域を指し示す「ハードリンク」と元のファイルのパスを記憶する「シンボリックリング」があります。

シンボリックリンクの作成は

ln -s hoge.txt tmp/hoge_sl.txt

のようにlnコマンドに-sオプションをつけて、リンク先、リンク元の順に記述で作成。
注意点としては、相対パスで記述する場合、リンクファイルからの相対パスでできること。
絶対パスで記述すればこういった心配はありませんが...

ハードリンクの場合はオプションをつけずに

ln hoge.txt tmp/hoge_hl.txt

のように記述。

圧縮、解凍

ファイル圧縮
$ gzip test.txt
$ ls
drwxr-xr-x   7 tatsuaki  staff   238 11  7 14:25 .
drwxr-xr-x+ 39 tatsuaki  staff  1326 11  6 11:19 ..
-rw-r--r--@  1 tatsuaki  staff  6148 11  1 23:36 .DS_Store
-rw-r--r--   1 tatsuaki  staff    37 10 11 19:20 test.txt.gz

gzipファイル解凍
gunzip test.txt.gz

これらはファイルに対しての圧縮。
次はアーカイブに対しての圧縮。


圧縮アーカイブ作成
$ tar cvzf test.tgz test
a test
a test/.test.txt.swp

今度は中身を見る
tar tvzf test.tgz

そして展開
tar xvzf test.tgz

ディレクトリを指定したいなら
tar xvzf test.tgz -C tmp/

のように-Cオプション+展開先を指定できます。

ファイル検索

findコマンド
find Documents -name test -type f
Documentsフォルダ内から、名前がtestを探す。-type fでファイルだけを対象にする。

その他オプションは

  • -type:  d (ディレクトリ) f (ファイル) l (シンボリックリンク) 等
  • -mtime N : 最終修正日 +NでN日前より前, -NでN日前より後 
  • -mmin N : N分
  • -size : +-で以上以下
  • -user : ファイルオーナー指定
  • -empty : 空ファイルを探す

-execコマンド
$ find ~ -name *.txt -exec ls -lh {} \;
-rw-r--r--  1 tatsuaki  staff   134B 10 22 16:19 /Users/tatsuaki/test.txt

こんな感じで、-exec コマンド {} ¥;とするとfind結果を引数にしてコマンドできる。
上記例はtxtファイルを探して、それはls -lhしたもの。

lacateコマンド

findは検索に時間がかかるので、あらかじめ全てのファイル/ディレクトリのパスを
登録したlacateコマンドデータベースがあって、そこから検索するほうが早いらしい。

まずはこれを使うためにデータベースを更新。

$ sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist
com.apple.locate: Already loaded
と思ったらすでに更新済み。手動でやるなら
sudo /usr/libexec/locate.updatedb
結構時間かかる…

しかし検索は激速

とりあえず一回目はこんな感じで。
おさらい

  • ln : リンク作成
  • tar : アーカイブ圧縮(cvzf)、解凍(xvzf)コマンド。中身はtvzfで閲覧
  • find : 検索。-execオプションで他のコマンドと組み合わせて便利
  • locate : 専用データベースから検策

Carbon Emacs の設定

こちらも取り急ぎ備忘録として。
最近webで情報を無理矢理ピックアップしてemacsを使いやすいようにsetupしました。

;; ロードパス
(setq load-path (cons "~/emacs/site-lisp" load-path))
(setq load-path (cons "~/emacs/site-lisp/w3m" load-path))
(add-to-list 'load-path "~/emacs/site-lisp/")

;; 画面の設定

(if window-system (progn 
 ;;ウィンドウサイズでフォルト
 (setq initial-frame-alist '((width . 200) (height . 52) (top . 0)(left . 0)))

 ;;文字の色
 (add-to-list 'default-frame-alist '(foreground-color . "white"))
 ;; 背景色
 (add-to-list 'default-frame-alist '(background-color . "black"))

))
;; カーソルの色を設定  
  (add-to-list 'default-frame-alist '(cursor-color . "Gray"))
  ;; マウスポインタの色を設定します。
  (add-to-list 'default-frame-alist '(mouse-color . "SlateBlue2"))
  ;; モードラインの文字の色を設定します。
  (set-face-foreground 'modeline "white")
  ;; モードラインの背景色を設定します。
  (set-face-background 'modeline "MediumPurple2")
  ;; 選択中のリージョンの色を設定します。
;  (set-face-background 'region "LightSteelBlue1")
  ;; モードライン(アクティブでないバッファ)の文字色を設定します。
  (set-face-foreground 'mode-line-inactive "gray30")
  ;; モードライン(アクティブでないバッファ)の背景色を設定します。
  (set-face-background 'mode-line-inactive "gray85")

;; ビープ音を消す 
(setq visible-bell t)

;; デフォルトの透明度を設定する (85%)
(add-to-list 'default-frame-alist '(alpha . (80 50)))




;; 文字色変更
;(if window-system (progn;
;
;(set-face-foreground 'font-lock-comment-face "MediumSeaGreen")
;(set-face-foreground 'font-lock-string-face  "purple")
;(set-face-foreground 'font-lock-keyword-face "blue")
;(set-face-foreground 'font-lock-function-name-face "blue")
;(set-face-bold-p 'font-lock-function-name-face t)
;(set-face-foreground 'font-lock-variable-name-face "black")
;(set-face-foreground 'font-lock-type-face "LightSeaGreen")
;(set-face-foreground 'font-lock-builtin-face "purple")
;(set-face-foreground 'font-lock-constant-face "gray")
;(set-face-foreground 'font-lock-warning-face "blue")
;(set-face-bold-p 'font-lock-warning-face nil)
;
;))

;; ファイルパス表示
(setq frame-title-format (format "%%f - Emacs@%s" (system-name)))

;; 行数表示
(line-number-mode t)

;; スタートアップページを表示しない
(setq inhibit-startup-message t)

;;バックアップファイルを作らない
(setq backup-inhibited t)

;; Macのキーバインドを使う. optionをメタキーにする
;;(mac-key-mode 1)
;(setq mac-option-modifier 'meta)


;; spotlightにとられないためのコード
;(mac-add-ignore-shortcut '(? )) 
;(mac-add-ignore-shortcut '(control))


;;範囲指定 Ctr+Space
(setq transient-mark-mode t)

;;シフト + 矢印で範囲選択
(setq pc-select-selection-keys-only t)
(pc-selection-mode 1)

;;; タブ文字はスペース4文字分
(setq default-tab-width 4)


;; フォント設定
;(if (eq window-system 'mac) (require 'carbon-font))
;(fixed-width-Set-fontset "hirakaku_w3" 10)
;(setq fixed-width-rescale nil)

;;メニューバーを隠す
;(tool-bar-mode -1)

;;対応する括弧を光らせる
(show-paren-mode 1)

;; hline 編集行
(defface hlline-face
  '((((class color)
      (background dark))
     ;;(:background "dark state gray"))
     (:background "gray10"
                  :underline "gray24"))
    (((class color)
      (background light))
     (:background "ForestGreen"
                  :underline nil))
    (t ()))
  "*Face used by hl-line.")
(setq hl-line-face 'hlline-face)
;;(setq hl-line-face 'underline)
;; 編集行のハイライト
(global-hl-line-mode)

;; ウィンドウ分割時に画面外へ出る文章を折り返す
(setq truncate-partial-width-windows nil)

ここまでがもろもろの設定。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;          コマンド群      ;;;;;;;;;;;;


;;選択範囲をインデントする
(global-set-key "\C-x\C-i" 'indent-region) 

;;リターンと改行でインデント
(global-set-key "\C-m" 'newline-and-indent) 

;;改行
(global-set-key "\C-j" 'newline) 

;;範囲指定コメント
(global-set-key "\C-c\C-c" 'comment-region)
;;上記解除
(global-set-key "\C-c\C-u" 'uncomment-region)  

使いやすくするためのコマンド群.
;;linum 設定
(require 'linum)
(global-linum-mode t)
;(setq linum-format "%d5")
;F5キーにON/OFFの切り替えを割り当てる
(global-set-key [f5] 'linum-mode)


;; Elscreen ;;

;;tab
(require 'elscreen)
(if window-system
 (define-key elscreen-map "\C-z" 'iconify-or-deiconify-frame)
  (define-key elscreen-map "\C-z" 'suspend-emacs))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 使い方
;; C-z c : 新規タブ
;; C-z k : タブ閉じる
;; C-z 0~9 : タブの切り替え(番号)
;; C-z n : 次のタブ
;; C-z p : 前のタブ
;; C-z a : 直前のウィンドウ
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; tab 一覧表示 ;;
;; (defun elscreen-frame-title-update ()
;;   (when (elscreen-screen-modified-p 'elscreen-frame-title-update)
;;     (let* ((screen-list (sort (elscreen-get-screen-list) '<))
;;     (screen-to-name-alist (elscreen-get-screen-to-name-alist))
;;     (title (mapconcat
;;      (lambda (screen)
;;        (format "%d%s %s"
;;         screen (elscreen-status-label screen)
;;         (get-alist screen screen-to-name-alist)))
;;      screen-list " ")))
;;       (if (fboundp 'set-frame-name)
;;    (set-frame-name title)
;;  (setq frame-title-format title)))))

;; (eval-after-load "elscreen"
;;   '(add-hook 'elscreen-screen-update-hook 'elscreen-frame-title-update))



;; 'mcomplete 他

;; ミニバッファで M-x時のインクリメンタル補完
(require 'mcomplete)

;; よく使うヒストリを優先させる
(load "mcomplete-history")
(turn-on-mcomplete-mode)

;; cycle-mini
(require 'cycle-mini)
(define-key minibuffer-local-map [up] 'previous-history-element)
(define-key minibuffer-local-completion-map [up] 'previous-history-element)
(define-key minibuffer-local-must-match-map [up] 'previous-history-element)
(define-key minibuffer-local-ns-map [up] 'previous-history-element)
(define-key minibuffer-local-ns-map [down] 'next-history-element)
(define-key minibuffer-local-map [down] 'next-history-element)
(define-key minibuffer-local-completion-map [down] 'next-history-element)
(define-key minibuffer-local-must-match-map [down] 'next-history-element)


行数を表示するlinum, tab化するElscreen, 補完機能強化のmcomplete, cycle-miniの設定ファイル. いずれも
~/emacs/site-lisp/
配下に

  • linum.el
  • elscreen.el
  • mcomplete.el
  • mcomplete-history.el
  • cycle-mini.el

を置きます。
例によってこれで素人がCarbon Emacsを使える設定となりました。
linumがページを動かすたびに行数表示のため更新されるので少し動作がもっさりするのが不満。



ずぶの素人がなぜemacsかというと、学校でemacsしか使ったことがなく、vimよりも慣れているということです。
ぱっと書く程度のエディタならvimの方が便利そうなので、普通の使い方くらいは覚えます。
それも備忘録としてまた今度。

2010年11月3日水曜日

Terminalの設定

そろそろ会社のmacが到着してしまうので, 備忘録としてせめて家のターミナルの設定を書き出しておきます.

#terminal color
export CLICOLOR=1
export LSCOLORS=Exfxcxdxbxegedabagacad
#
##
# Your previous /Users/tatsuaki/.bash_profile file was backed up as /Users/tatsuaki/.bash_profile.macports-saved_2010-09-20_at_22:04:26
##
#
# MacPorts Installer addition on 2010-09-20_at_22:04:26: adding an appropriate PATH variable for use with MacPorts.
export PATH=/opt/local/bin:/opt/local/sbin:$PATH
# Finished adapting your PATH environment variable for use with MacPorts.
#
#
#
#Hadoop Path
export HADOOP_INSTALL=/Users/tatsuaki/workspace/hadoop-0.21.0
export PATH=$PATH:$HADOOP_INSTALL/bin
#
#
# Carbon Emacs = cemacs
alias cemacs='open -a Emacs'
#
#alias#
alias ls="ls -al"
#
# application alias #
alias firefox="open -a Firefox"
alias prev="open -a Preview"
alias itunes="open -a iTunes"
alias texs="open -a  TexShop"


とりあえず取り急ぎexportしたPATHと使っているaliasの設定を。

Terminal.appの設定は以下の通り。


テキスト:
Monaco 14pt
テキストをアンチエイリアス処理
ANSIカラーを表示

詳細:
非ASIⅡ文字をエスケープ
文字エンコーディング=Unicode (UTF-8) 

ウィンドウ:
Proをデフォルトに. 透明度は75%を指定

あとはTerminal_colorを入れました。

全体的に素人が色々とこれから始めるための環境は整ったのではないかと。
これから必要に応じて追加していくかんじで。


aliasの設定法
alias COMMAND=" command_1"
でCOMMAND_1の内容をCOMMANDで実行できるようになる。