log

zsh/screen/vim の設定ファイルを Dropbox + github で管理する

今まで Dropbox のみで管理してたけど、どれこれ構わず Dropbox インストールするわけにもいかないので、Dropbox にいれつつ github でも管理するようにした。 ついでに github から clone した後の配置を自動化するスクリプトを書いた。

レポジトリ: https://github.com/yono/dotfiles

zsh

Mac/Linux で設定が異なる部分が多いので、共通部分は zshrc.common にまとめてそれを zshrc.mac/zshrc.linux から source で読み込むという形をとっている。

例えば Linux の場合は以下な感じでシンボリックリンクを張って使っている。

$ ln -s ~/Dropbox/dotfiles/zsh/zshrc.linux ~/.zshrc

screen

環境ごとに変える要素も特にないので、そのまま。欲を言うと、多段 screen するために環境ごとに設定を分けたいところだけどまだやってない。

vim

一番手間取った。

プラグインを vundle で管理してるので、その辺りの設定をほげほげしてた。

まず、bundle(vundle が管理するディレクトリ)は Ignore しておくこと。

$ vim .gitignore
vim/bundle

で、vundle は submodule として扱う。

$ git submodule add git://github.com/gmarik/vundle.git vim/vundle

デプロイするスクリプト

dotfiles を clone した後にやることは以下のとおり。

  1. submodule を読み込む
  2. 各設定ファイルにシンボリックリンクを貼る
  3. vundle で各プラグインを取得

手動でやるのがめんどくさかったので簡単なスクリプトを書いた。

https://github.com/yono/dotfiles/blob/master/init.sh

#!/bin/sh

DROPBOX_DIR="$HOME/Dropbox"
DOTFILES="$DROPBOX_DIR/dotfiles"

if [ ! -d "$DOTFILES" ]
then
echo "Please mv dotfiles to $DROPBOX_DIR"
exit
fi

cd $DOTFILES

git submodule update --init

ln -s $DOTFILES/zsh $HOME/.zsh
ln -s $DOTFILES/zsh/zshrc.linux $HOME/.zshrc
ln -s $DOTFILES/zlogin $HOME/.zlogin
ln -s $DOTFILES/screenrc $HOME/.screenrc
ln -s $DOTFILES/vimrc $HOME/.vimrc
ln -s $DOTFILES/vim $HOME/.vim

vim -c ':BundleInstall!'

こんな感じで、即席で作った仮想マシンにもさくっと自分の環境が持ち出せるようになった。快適。

Debian Squeeze インストールから Rails 3.1 を動かすまで

毎回忘れるので備忘録として。

条件としてはこんな感じ。

OS インストールと VMware Tools インストール

インストールは省略。パッケージのチェックをすべて外すこと。

インストール終わってログインしたら VMware Tools インストールに必要なものを入れる。

# apt-get install make gcc linux-headers-2.6.32-5-686

入れ終わったら VMware Fusion 側でメニューから [仮想マシン]→[VMware Tools のインストール]を選択する。

# mount /dev/cdrom
# cd /tmp
# tar zxpf /media/cdrom/VMwareTools-8.4.7-416484.tar.gz
# umount /dev/cdrom
# cd vmware-tools-distrib
# ./vmware-install.pl

rvm には必須じゃないけど個人的に必要なコマンドを入れる

とりあえず ssh と sudo と zsh とついでに vim を入れる

# apt-get install ssh sudo zsh-beta vim

/etc/sudoers 書き換えて一般ユーザに sudo 権限持たせる

# vim /etc/sudoers
# User privilege specification
root ALL=(ALL) ALL
yono ALL=(ALL) ALL # 追加

sudo 権限持たせたので以降は一般アカウントで作業

# su - yono

ログインシェルを変更する

$ chsh 
パスワード:
yono のログインシェルを変更中
新しい値を入力してください。標準設定値を使うならリターンを押してください
ログインシェル [/bin/bash]: /bin/zsh-beta

一旦抜けてログインし直す。以降は zsh での作業となる。

rvm インストール

rvm インストールに最低限必要なコマンドを入れる

% sudo apt-get install curl git

http://beginrescueend.com/rvm/install/ に従い、rvm をインストール

% bash < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer )

インストール完了時に「Ruby 処理系入れるならこのパッケージをインストールしろ」的なメッセージが出るのでコピペして実行(apt-get のコマンドがそのまま表示される)。

$HOME/.zshrc に以下の記述を加えて読み込む

% vim ~/.zshrc
[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"
% source ~/.zshrc

ruby 1.9.2 をインストール

最新版は 1.9.3 だが今回は 1.9.2 を入れる。 ついでに gemset も作っておく

% rvm install 1.9.2
% rvm use 1.9.2
% rvm gemset create rails3
% rvm gemset use rails3

–no-ri –no-rdoc をデフォルトにする

毎回 gem install 時にオプションで付けるのを忘れるので、.gemrc に記述しておく。

% vim ~/.gemrc
gem: --no-ri --no-rdoc

rails をインストール

rails と、ついでに sqlite3 を apt で入れとく

% gem install rails
% sudo apt-get install libsqlite3-dev

プロジェクトを作成

sample プロジェクトを作って実行してみる。

% rails new sample -d sqlite3
% cd sample
% rails s

すると、以下のようなエラーが出る

/home/yono/.rvm/gems/ruby-1.9.2-p290@rails3/gems/execjs-1.2.12/lib/execjs/runtimes.rb:47:in `autodetect': Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)
from /home/yono/.rvm/gems/ruby-1.9.2-p290@rails3/gems/execjs-1.2.12/lib/execjs.rb:5:in `<module:ExecJS>'
from /home/yono/.rvm/gems/ruby-1.9.2-p290@rails3/gems/execjs-1.2.12/lib/execjs.rb:4:in `<top (required)>'
from /home/yono/.rvm/gems/ruby-1.9.2-p290@rails3/gems/coffee-script-2.2.0/lib/coffee_script.rb:1:in `require'
from /home/yono/.rvm/gems/ruby-1.9.2-p290@rails3/gems/coffee-script-2.2.0/lib/coffee_script.rb:1:in `<top (required)>'
from /home/yono/.rvm/gems/ruby-1.9.2-p290@rails3/gems/coffee-script-2.2.0/lib/coffee-script.rb:1:in `require'
from /home/yono/.rvm/gems/ruby-1.9.2-p290@rails3/gems/coffee-script-2.2.0/lib/coffee-script.rb:1:in `<top (required)>'
from /home/yono/.rvm/gems/ruby-1.9.2-p290@rails3/gems/coffee-rails-3.1.1/lib/coffee-rails.rb:1:in `require'
from /home/yono/.rvm/gems/ruby-1.9.2-p290@rails3/gems/coffee-rails-3.1.1/lib/coffee-rails.rb:1:in `<top (required)>'
from /home/yono/.rvm/gems/ruby-1.9.2-p290@global/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in `require'
from /home/yono/.rvm/gems/ruby-1.9.2-p290@global/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in `block (2 levels) in require'
from /home/yono/.rvm/gems/ruby-1.9.2-p290@global/gems/bundler-1.0.21/lib/bundler/runtime.rb:66:in `each'
from /home/yono/.rvm/gems/ruby-1.9.2-p290@global/gems/bundler-1.0.21/lib/bundler/runtime.rb:66:in `block in require'
from /home/yono/.rvm/gems/ruby-1.9.2-p290@global/gems/bundler-1.0.21/lib/bundler/runtime.rb:55:in `each'
from /home/yono/.rvm/gems/ruby-1.9.2-p290@global/gems/bundler-1.0.21/lib/bundler/runtime.rb:55:in `require'
from /home/yono/.rvm/gems/ruby-1.9.2-p290@global/gems/bundler-1.0.21/lib/bundler.rb:122:in `require'
from /home/yono/sample/config/application.rb:7:in `<top (required)>'
from /home/yono/.rvm/gems/ruby-1.9.2-p290@rails3/gems/railties-3.1.3/lib/rails/commands.rb:52:in `require'
from /home/yono/.rvm/gems/ruby-1.9.2-p290@rails3/gems/railties-3.1.3/lib/rails/commands.rb:52:in `block in <top (required)>'
from /home/yono/.rvm/gems/ruby-1.9.2-p290@rails3/gems/railties-3.1.3/lib/rails/commands.rb:49:in `tap'
from /home/yono/.rvm/gems/ruby-1.9.2-p290@rails3/gems/railties-3.1.3/lib/rails/commands.rb:49:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'

調べてみると JavaScript エンジンが必要とのことらしい(JavaScriptエンジンをインストールする - 祈れ、そして働け 〜 Ora et labora)。

というわけで、therubyracer を Gemfile に追記して bundle 実行。

% vim Gemfile
gem 'therubyracer'

% bundle

改めて rails s を実行すると今度は正常に起動した。

Evernote から Org-mode への移行

今まで Evernote に保存してたテキストをすべて Org-mode へ移行することにした。 画像やPDFはそれほど保存してないし問題ないだろうという判断。

それほど多くないかと思ってたら700ページくらいあって手動は早々に諦めた。

Evernote のエクスポートについて調べてみたらXMLとHTMLがあったので、とりあえず HTML から Org-mode への変換を試してみることにした。

で、できたのを Gist に上げた。HTMLタグを抽出するスクリプトは http://oceanmarine.org/wordpress/?p=184 を使わせていただいた。

細かい置換は端折りまくったけど、とりあえずテキストで取り出せれば修正は後でもいいかなって感じで作った。どっちみち今後は増えないし、どうしても気になる箇所があれば目についたときに直せばいいし。

org2blog で Emacs から WordPress に投稿する

ちょい前に wp-emacs から投稿する設定をしたばかりだけど、他にもないかなと探してたら org2blog なんてものがあった。

こっちだと HTML に変換する手間も省けるしよさげかも、ってことで設定してみることに。

README 通りに書いてみて、とりあえずこの記事を org2blog 経由で書いてみてる。

wp-emacs との違いは

  1. カテゴリが指定できる
  2. タグが指定できる
  3. M-x org2blog/wp-post-buffer の後に y を選ぶとブラウザにプレビューが表示される

ってわけで wp-emacs 使う理由が無くなってしまった。 さようなら wp-emacs こんにちは org2blog

Logicool M510 を買った


現状使ってる有線マウスの線が邪魔に感じ始めてきたので、Logicool の M510 を買った。




今日届いたので少し使ってみたけど、電池の分なのか少し重く感じる。外してみたらそれほど気にならないし、工夫すればどうにかなるのかな。


ちなみに今まで使ってたのは ELECOM の M-M4URBK。安物だけど軽いし持ちやすいしそこそこ満足してた。そもそもマウスをそんなに使わないってのもあるかもしれないけど。





これで少しでも有線のごちゃごちゃが解消されるとうれしい。

Emacs + Org-mode + howm + MobileOrg + Dropbox でテキスト管理環境を構築した


元々 Org-mode でメモやTODO管理してたけど、howm と MobileOrg 設定したらかなり快適になった。



全体の構成はこんな感じ。



https://cacoo.com/diagrams/ZlDcDKihBDjtqHko.png



ちょい前までは Evernote 使ってたんだけど、アウトライナーとして Org-mode が便利すぎるので結局こういう構成になってしまった。



Emacs と Mac のクリップボードを共有する


コピペが不便なので、いつもの如く調べてみたら設定できた。



クリップボード共有は 若き日の過ち: キルリングとクリップボードの共有(とりあえずMac) に書いてある通りに設定した。



ただ、現状の init.el は Linux と Mac 環境で共有してるので、できれば両方で使える状態に保ちたい。



いい方法無いかなーと調べてたらひとつの .emacs で設定を書き分けるための Tips。 - 日々、とんは語る。にて環境を判定する方法が書かれてたので、それを組み合わせた結果うまくいった。



;; system-type predicates
;; from http://d.hatena.ne.jp/tomoya/20090807/1249601308
(setq darwin-p (eq system-type 'darwin)
linux-p (eq system-type 'gnu/linux)
carbon-p (eq system-type 'mac)
meadow-p (featurep 'meadow))

; Emacs と Mac のクリップボード共有
; from http://hakurei-shain.blogspot.com/2010/05/mac.html
(defun copy-from-osx ()
(shell-command-to-string "pbpaste"))

(defun paste-to-osx (text &optional push)
(let *1
(let (process-send-string proc text)
(process-send-eof proc))))

(if (or darwin-p carbon-p)
(setq interprogram-cut-function 'paste-to-osx)
(setq interprogram-paste-function 'copy-from-osx">*2



これで Emacs とその他との連携が楽になる。

*1:process-connection-type nil

*2:proc (start-process "pbcopy" "*Messages*" "pbcopy"))) (process-send-string proc text) (process-send-eof proc)))) (if (or darwin-p carbon-p) (setq interprogram-cut-function 'paste-to-osx) (setq interprogram-paste-function 'copy-from-osx