2009年12月29日火曜日

自動で外部ディスクをバックアップ(同期)する on Mac

Time Machineを使えば出来るじゃん!って言われそうですが,僕の目的はサーバーのバックアップを内蔵ディスクに取ることなので,これはTime Machineでは出来ない(と思う).
まず,バックアップを取る方法ですが,rsyncを使います.
rsyncはファイルやフォルダの同期を簡単に行うことができるCUIアプリケーションです.
Mac OS Xでは,標準ですでにインストールされていると思います
(ターミナル.appでrsyncと入力してみよう.何かしらいろいろ表示されればインストール済み).
無かったら,インストールを頑張って下さい.

まず,バックアップしたい外部ディスク,ファイルサーバーをマウント.
これはFinderでも,何でもマウントすれば良い.
普通にUSB接続だったり,sambaだったりすれば,特に指定しなければ/Volumes以下にマウントされるはず.
仮に外部ディスクの名前がsenddiscだった場合,/Volumes/senddisc/以下に外部ディスクのファイルがあります
(確認するには「ls /Volumes/senddisc」とターミナルで入力).
ディスクの名前(senddisc)はFinderか,ディスクユーティリティ.appで変更できると思われます.
この中にある/Volumes/senddisc/senddirを/Users/hoge/backup/以下に同期したい場合,ターミナル.appで以下のように入力します.
rsync -avz --delete /Volumes/senddisc/sendir/ /Users/hoge/backup
--deleteっていうオプションで同期元で削除したファイルも同期先で削除します.
とりあえず,このコマンドでbackup以下にバックアップされると思います.

これを僕は自動でしたいと思いました.
つまり,「外部ディスクを接続」→「あら,バックアップが自動でとれてる!」ってことです.
この設定は,launchdを設定すれば良い.
lauchdとはサービス管理に使われている何とか,かんとかでよく分かりません.
設定ファイルはXML形式で書かれているらしいんだけど,どうやって編集すればいいんだよってことで,GUIで簡単にこれを設定できるLingonを使います.
まずはインストール.
ダウンロードページはこちら
リンクの最初にはLingon-1.2が最初に出てきますが,このバージョンは使いにくかったので,すぐ下のLingon-2.1.1.zipでインストールしました.
バージョンが違うとインターフェイスが違うので,この後の記事が分かりづらいかも.
ZIPファイルを解凍して,出てきたLingon.appを適当なフォルダに移す.
インストール完了だ!

Lingonを起動すると,現在,launchdに設定されているプロセスがサイドパネルに表示されます.
com.apple.xxxxxとか,良く分からない名前ですな.
ここで,「MY AGENTS」,「USERS AGENTS」,「USERS DAEMONS」とあるのですが,よく分からない.
多分,新たに追加する場合は「MY AGENTS」に追加すれば良い.
ツールバーの「New」を押せば,新たなサービスが追加できる.
「New」を押して「My Agents」を選択,「Create」を押すと,1(Name),2(What),3(When)とステップ毎に分けられた編集画面が出てくる.
まず,1(Name)ですが,こんな感じで適当につけました.
abc.hoge.SenddirBackup
次に2(What)ですが,さっきのrsyncのコマンドを入れます.
rsync -avz --delete /Volumes/senddisc/sendir/ /Users/hoge/backup
3(When)は「Run it every time a volume is mounted」を選択します.
意訳すると,「ボリュームを挿した(マウントした)ときに起動するぜ」ってことです.
これをちゃんと保存すれば出来るはずです.
再ログイン後,有効になります.
確認は,再ログイン後に適当に同期元のファイルを変更して,ボリュームをマウントし直せば同期されているはずです.

最後に注意ですが,複数のボリューム名が一緒だと,これを区別できないので,思わぬところで,上書きされてしまう恐れがあります.
全部のボリュームの名前は変えておきましょう.


番外として,Lingonを使って,壁紙をスクリーンセーバーにする.
  1. Name,sys.hoge.ScreensaverDesktop
  2. What,/System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine -background
  3. When,Run it when it is loaded by the system (at startup or login)
非常におしゃれですね.

2009年12月21日月曜日

gvimrcの設定

私,エディタはMacVimを使っています.
基本的に,プログラムもTeX文書もMacVimです.
Mac上でgVimを導入する場合,いくつか方法があって,全部は調べきれないんだけど,何となく一通りやってみて,macvim-kaoriyaを使ってます.
こっちのmacvimよりも,日本語切り替えがいい感じ.
日本語の文章も打つ僕にはこれが一番よかった.
インストールも簡単だし.

mvimというシェルスクリプトがあって,コマンドラインから起動出来るのも良い.
このシェルスクリプトをどうやってインストールしたか全然覚えてないんだけど.
たしかバイナリの中にあったような気がしたんだけど,今見たら無かった.
多分これ
これを/usr/local/binとかに置いとけば良いと思います.
すみません,テストはしてません.
あと,mvimからじゃないと,設定ファイルがきちんと読み込まれないことがある.
謎.

基本的に設定ファイルは,~/.gvimrcに書いてます.
.vimrcに書くと,普通のvimにも影響が出そうなので,何となく.
vimはデフォルトの状態で使いたい.何となく.
この設定にはいろんな記事を参考にして書きました.
この設定ファイルで,自分好みに出来ることが,一番の魅力.
逆に,デフォルトの状態で使うと,すんげー使いづらいのよね.
とりあえず晒しときます.長いよ.
" ウインドウの幅
set columns=100
" ウインドウの高さ
set lines=52
" コマンドラインの高さ(GUI使用時)
set cmdheight=1
let s:ext = fnamemodify(bufname(""), ":e")

"Mail.appの外部エディタとしての使用
if s:ext=="mail"
set columns=80
set lines=40
end

"Safari.appの外部エディタとして使用"
if s:ext=="safari"
set columns=80
set lines=40
end


" マウスに関する設定:
set mouse=a
" マウスの移動でフォーカスを自動的に切替えない (mousefocus:切替る)
set nomousefocus
" 入力時にマウスポインタを隠す (nomousehide:隠さない)
set mousehide
" ビジュアル選択(D&D他)を自動的にクリップボードへ (:help guioptions_a)
set guioptions+=a

set number
set incsearch
set autoindent
set ic
set ts=4
set noexpandtab
set shiftwidth=4

"リマップ関連
inoremap ¥ \
"<ESC>
inoremap <C-q> <Esc>
vnoremap <C-q> <Esc>

"<移動>
inoremap <C-l> <Right>
inoremap <C-h> <Left>
inoremap <C-b> <S-Left>
inoremap <C-w> <S-Right>
inoremap <C-x> <BS>

"<cm>によってコメントアウト
nmap cm :call EnhancedCommentify('', 'guess')<CR>

"補完ウィンドウの色
highlight Pmenu guibg=#666666
highlight PmenuSel guibg=#AA0000 guifg=#FFFFFF

"vi-latexプラグインに関する設定
filetype plugin on
filetype indent on
"ファルタイプが.texの時のみスペルチェックする
autocmd FileType tex set spell

"Octave, Matlab用にリマップ
if s:ext=="m"
"括弧の補完
inoremap ( ()<++>5<LEFt>
inoremap { {}<++>5<LEFt>
inoremap [ []<++>5<LEFt>
inoremap '' ''<++>5<LEFT>
"行末に;を挿入
nmap ; <S-a>;<ESC>0
end

"インクリメントコピー,数字部分だけをインクリメントしてコピーする.
map <C-I> Yp:s/\d\+/\=(submatch(0)+1)/g<CR>

"インプットモード内で<C-w>で単語毎のbackspace
inoremap <C-w> <ESC>bdwa

"vim-cocoaとMacVimの共通設定
if has('mac')
set showtabline=2 " タブを常に表示
set guioptions-=T
set guioptions+=ai
autocmd VimEnter * tab all
set transparency=30 " 透明度を指定

set formatoptions+=m
set backspace=indent,eol,start
set wildmenu
set wildmode=list:full
set noswapfile
set showcmd
set ffs=unix,dos,mac

set complete+=k " 補完に辞書ファイル追加
set termencoding=utf-8
set encoding=utf-8
set fileencodings=utf-8,cp932,euc-jp

set smarttab "行頭の余白内で Tab を打ち込むと、'shiftwidth' の数だけインデントする。

"フォント関連
set guifont=Courier:h12
set guifontwide=Courier:h12
set antialias

colorscheme desert
hi NonText guibg=NONE guifg=NONE
hi Normal guibg=grey5
hi LineNr gui=bold
hi LineNr guifg=#DDDDDD

highlight ZenkakuSpace cterm=underline ctermfg=darkgrey gui=underline guifg=darkgrey "全角スペースの可視化

"ステータスラインの設定
set laststatus=2 "表示
set statusline=%t<%<%F>%m%r%h%w
set statusline+=%{'['.(&fenc!=''?&fenc:&enc).']['.&fileformat.']'}
set statusline+=%=%l-%c[%p%%]
"ステータスラインの色
highlight StatusLine term=NONE cterm=NONE guifg=white guibg=NONE gui=bold
highlight StatusLineNC term=NONE cterm=NONE guifg=grey50 guibg=NONE
" highlight StatusLineNC cterm=reverse

"検索ハイライトの色
highlight IncSearch guifg=white guibg=black
highlight Search guifg=white guibg=blue

"カーソルの色
highlight Cursor guibg=white guifg=black

"vsplit時の境界の色
highlight VertSplit guifg=black guibg=NONE
" set fillchars=vert:I

"折りたたみ
highlight Folded guibg=gray10

"スクロールバーの非表示
set guioptions-=r
set guioptions-=L

"行送り
set scrolloff=10

"<C-e><C-y>によるスクロールを速くする
nnoremap <C-e> <C-e><C-e><C-e><C-e>
nnoremap <C-y> <C-y><C-y><C-y><C-y>

"OSのクリップボードとリンクさせる
nmap _ :.w !nkf -Ws\|pdcopy<CR><CR>
vmap _ :w !nkf -Ws\|pdcopy<CR><CR>

set visualbell

"タブ移動リマップ
nnoremap t gt
nnoremap T gT

"セパレートウィンドウを切り替えをリマップ
nnoremap <C-w> <C-w><C-w>

"NERDTreeの表示と非表示
let NERDTreeWinPos="right"
let NERDTreeWinSize=25

"vim-cocoa用のサイズ
set columns=1000
set lines=1000
endif

" MacVim用
if has('gui_macvim')
set columns=100
set lines=52
set transparency=30 " 透明度を指定

map <silent> gw :macaction selectNextWindow:
map <silent> gW :macaction selectPreviousWindow:

" フルスクリーン切り替え関数
function! FullAndHideTab()
set fuoptions=maxvert,maxhorz
set invfullscreen
set transparency=50
if &showtabline==0
set showtabline=2
"set columns=columns
"set lines=lines
set fuoptions=lines,columns
set transparency=30
else
set showtabline=0
end
endfunction
nnoremap <silent><space>f :call FullAndHideTab()
endif

" Windows用gvim-kaoriya
if has('win32')
colorscheme desert
set transparency=200
nmap ; :
set guioptions=-c
"IME状態に応じたカーソル色を設定
if has('multi_byte_ime')
highlight Cursor guifg=#000d18 guibg=#8faf9f gui=bold
highlight CursorIM guifg=NONE guibg=#ecbcdc
end
set guifont=MS_Gothic:h11:cSHIFTJIS
set linespace=1
if has('kaoriya')
set ambiwidth=auto
endif
end

長かったわ〜.一応,Windows用の設定も書いてます.
ときどき追加するんで,順番とか一貫性が無いですな.
見づらいですが,コメントも一応つけといたんで,気になる箇所だけチェックしてみて下さい.
ポイントとしては
  • インプットモードからのESCをC-q
  • set fileencoding=utf-8,cp932,euc-jpとかいて文字化け防止
  • 全画面モード(多分MacVim限定)への切り替えをFullAndHideTabで定義
  • 半透明(set transparency=数値)
  • 試行錯誤したhighlightの設定
  • フォントはMonaco,Osakaあたりが人気なのに,敢えてCourier
こんなところです.
使ってるプラグインは
  • vim-latex(latex文書の入力支援,コンパイルをキーバインドに割り当てることができる)
  • YankRing(ペースト後にC-p,もしくはC-nで前にヤンクしたものを辿れる)
  • autocomplpop(補完ウィンドウを自動的に表示する)
  • EnhCommentify(コメント記号を自動的に認識して挿入,削除できる) 
  • NERDTree(サイドウィンドウにカレントディレクトリのファイルを表示,開くことが出来る.ディレクトリを辿ることも可)
に落ち着いてます.
あんまりプラグインを増やすのもアカン.
こんな感じで,vim人生を送ってます.

2009年12月5日土曜日

LaTeXの数式をsvgにする

LaTeXの数式を画像に入れたい,ってときありますよね.
僕はあります.
そういうときは,結局,TeXでつくる書類に入れる図だったりするので,今まではpicture環境で入れてた.
ただ,数式の数が増えるとめんどくさい.
いちいち,場所を調整するのも面倒だし,図の大きさを変えたいときとか,位置調整したり,\unitlengthを調整したりと,結構手間がかかるのよね.
見栄えはいいけど.

LaTeXの数式をInkscapeに挿入できるエクテンションがあるらしい(参考).
調べると,pstoeditというので,eps --> svgへの変換が可能らしい.
というか,ここに書いてあった通りにできました.
手順は,
とりあえず,pstoeditをインストール.
fink install pstoedit
もしくは,
sudo port install pstoedit
LaTeXのソースを作る.
\documentclass[30pt]{jsarticle}
\usepackage{txfont}
\begin{document}
\thispagestyle{empty}
$$\sum_{k=1}^{n} k = \frac{n(n-1)}{2}$$
\end{document}
こんな感じで.日本語は入れちゃ駄目.
あと,documentclassをjsarticleにしないと,30ptというデカ文字は指定できないっぽい.
できたら,LaTeXのコンパイル.
platex math.tex
できたmath.dviをepsに変換するよ.
dvips -Ppdf -E math.dvi -o math.eps
さらにこのmath.epsをアウトライン化.
eps2eps math.eps math1.eps
eps2epsはghostscriptについてくるコマンドなので,TeXがコンパイルできるなら,多分インストール済み.
上書き保存はできないので,ファイル名を変える必要あり.
最後に,math1.epsをsvgに変換だ.
pstoedit -f plot-svg math1.eps math.svg
以上で完成です.

Inkscapeに読み込むには,ファイル --> インポートで出来る.
グループ化されているので,オブジェクト --> グループ解除する.
文字内で円になっている箇所が,塗りつぶされている可能性があるので,その箇所を範囲指定してから,パス --> 排他を選ぶ.
いや〜出来た,出来た.
コマンドがたくさん出てきたので,関数としてzshrcに書いておいたら,快適になりました.