Skip to content

Instantly share code, notes, and snippets.

@syou6162
Created August 8, 2012 13:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save syou6162/3295056 to your computer and use it in GitHub Desktop.
Save syou6162/3295056 to your computer and use it in GitHub Desktop.

Emacs

Cocoa Emacsをインストールして使っています。

Mountain Lionは素直にsudo port install emacs-appでよいみたい。

Lionはフルスクリーンなどいくつかパッチをあてる必要があるので、自分でコンパイルします。

git commitをしたときなどに必要となるemacsclientの設定も.zshrcなどに書いておきます。

alias emacsclient='/Applications/Emacs.app/Contents/MacOS/bin/emacsclient'  
export EDITOR='/Applications/Emacs.app/Contents/MacOS/bin/emacsclient'  

SKK

AquaSKK

MacではAquaSKKを利用。現在、辞書をホストしているサイトが落ちているので、ミラーからダウンロードする。

git cloneして中身を/Library/Application Support/AquaSKKにつっこんで辞書ファイルの場所をそこに指定すれば解決。

ddskk

git clone https://github.com/hsaito/ddskk.git
cd ddskk

SKK-CFGの終わりの付近をいじる。

;;; Apple Mac OS X self-contained Carbon/Cocoa Emacs 
(setq SKK_DATADIR "/Applications/MacPorts/Emacs.app/Contents/Resources/etc/skk")
(setq SKK_INFODIR "/Applications/MacPorts/Emacs.app/Contents/Resources/info")
(setq SKK_LISPDIR "/Applications/MacPorts/Emacs.app/Contents/Resources/site-lisp/skk")
(setq SKK_SET_JISYO t)
;;

あとはインストールするだけ。

sudo make install Emacs=/Applications/MacPorts/Emacs.app/Contents/MacOS/Emacs

Macports

環境変数の設定をまずしておきます。

export PATH=/opt/local/bin:/opt/local/sbin/:$PATH
export MANPATH=/opt/local/man:$MANPATH

アップデートとかはこの付近で。selfupdateやsyncはプロトコルにrsyncを使っていたりするので、proxy環境下では注意が必要。port installはhttpプロトコルを使っているっぽい。

sudo port -d selfupdate
sudo port -d sync
sudo port install zsh-devel +mp_completion
sudo port install screen

sudo port install ghostscript-fonts-hiragino
sudo port install pTeX +utf8 +motif
sudo port install nkf

sudo port install maxima
sudo port install breqn
sudo port install ImageMagick +lcms +jpeg2
sudo port install wget
sudo port install omake
sudo port install watch
sudo port install graphviz
sudo port install global # for gtags

Clojure

Leiningen

Clojure自体はインストール不要。leinさえあればどうにでもなる。「leinがjavaのversionが古くてleinが動かない」といった環境では(leinを使えるところで作った)jarを使えばこれまたどうにでもなる。

cd ~/bin
wget https://raw.github.com/technomancy/leiningen/preview/bin/lein
chmod +x lein

leinの2.0からはself-installしなくても勝手にやってくれるようになりました。便利ですねー。

よく使うコマンド

lein new # 新しいプロジェクトを作成するとき。srcやtestのディレクトリとかproject.cljの雛形も作ってくれるので便利
lein run # 普通にタスクを走らせるとき
lein run -m Namespace.function # coreとか以外に書いた関数を指定して走らせたい場合
lein uberjar # 依存しているものとかも含めてjarで掃き出してくれる
lein test # testを走らせる

clojure-mode

(require 'clojure-mode)

;; http://paste.lisp.org/display/120878
(add-hook 'clojure-mode-hook
	  (lambda ()
	    (paredit-mode +1)
	    (show-paren-mode 1)
	    (setq minor-mode-overriding-map-alist
		  `((paredit-mode
		     ,@(remove (cons ?\C-j 'paredit-newline)
			       paredit-mode-map))))))

paredit-mode

(autoload 'paredit-mode "paredit"
  "Minor mode for pseudo-structurally editing Lisp code."
  t)

nrepl.el

Emacsからclojureを触ろうと思ったときにREPLをぽんぽん叩けないとすごくストレスなのだが、lein2になってからlein swankが叩けなくなっているので非常に不便感がある。最近は変わったっぽいのでそっちを使うことにする。

結局、nrepl.elを.emacs.dのpathの通ったところにダウンドードして、.emacsに

(setenv "PATH"
	(concat '"~/bin:" (getenv "PATH")))

(require 'nrepl)

を記述。binにパスを通しているのはleinをemacsから見つけてくれないから。

Git

バージョン管理系のソフトウェア。

sudo port install git-core
sudo port install tig
sudo port install git-flow

自分でよく使うコマンド

  • git commit -m
  • 変更内容を確認しながらcommitできるのでよく使う

Ruby

sudo port install ruby19

# 1.8系ならこっち。1.9系はgemsも勝手に付いてくる
# sudo port install ruby
# sudo port install rb-rubygems

Rubygems

sudo gem1.9 install hpricot
sudo gem1.9 install mechanize
sudo gem1.9 install refe
sudo gem1.9 install kramdown

Heroku

Clojureもそのまま動いてくれて便利。

sudo gem1.9 install heroku

herokuにpushするためには少し設定が必要です。

ssh-keygen -t rsa
heroku keys:add
git pull heroku master

LaTeX

MacportsでpTeXと依存しているパッケージをインストール。YaTeXを経由して普段は使用します。

Omake

LaTeXの原稿を変更したら、コンパイルもしなおして欲しいもの。Omakeではそういうった作業を自動化することができます。

omake --installしてできたOMakefileにあれこれ書きますが、雛形としてはこんな感じ。

LATEX = platex
DVIPDFM = dvipdfmx
BIBTEX = jbibtex
DVIPDFMFLAGS = -p a4

LaTeXDocument(template-e, template-e)

template-e.dvi: ref.bib

.DEFAULT: template-e.pdf template-e.dvi

その後、omake -P --verboseなどとしておくと継続的に監視してくれて便利です。

Skim

Day One

KeyRemap4MacBook

  • KeyRemap4MacBook - OS X用のソフトウェア

  • sands(Remap Space KeyをSpace to Shift_L + When you type Space only, send Space)、かな、英数をshiftに

  • emacsキーバインドに変更

  • ついでにspotlightのキーバインドも変更しておく(Ctrl+CMD+Space)

rsync

大きなディレクトリなどで差分だけをネットワーク越しに転送するときに便利。転送が失敗しても途中からやり直すといったことができるのでよい。

とりあえずは

rsync -avnu server://nfs/path/to/dir .

のようなオプションを付けてやってみるのがよい。nはどういう風に展開されるかをプリントしてくれるやつで、面倒だけど、一回かましておくのが安全。最後にスラッシュを付けるか付けないかとかであれこれあるっぽい。

gxp

大量の計算機にjobを投げて一括で管理したい、などの要望があるときに非常に便利なソフトウェア。以下より、ソースコード一式をダウンロード。

~/binなど、パスの通ったところに展開して、.zshrcなどに

export PATH=$HOME/bin/gxp3:$PATH

とやってコマンドを叩いておけるようにする。

Introduction

まず、前提としてローカルとリモートのいくつかのサーバーがpasswordなしでログインできる必要がある。そのためにはssh-keygenなどをした後に~/.ssh/id_rsa.pubの内容をリモートサーバーの~/.ssh/authorized_keysなどにペタペタと貼っていけばよい。

あとローカルとリモートでユーザー名が違うなどの問題がある場合には、~/.ssh/configファイルに

Host radish
  User yasuhisa-y
Host pepper
  User yasuhisa-y

などと書いていけばよい。これでssh pine2とかパスなしで行ければ準備は終わりである。

準備設定

ローカルのマシンの名前がdn156-177、リモートのマシンの名前の一つがpepperだったとしよう。gxpにそれを教えてあげる必要があって

./gxpc use ssh dn156-177 pepper

などとする。引数なしのuseで

/Users/yasuhisa/Downloads/gxp-3.07% ./gxpc use                                        
0 : use ssh dn156-177 pepper
1 : use ssh dn156-177 radish
2 : use ssh dn156-177 carrot
3 : use ssh dn156-177 tomato
4 : use ssh dn156-177 papaya
5 : use ssh dn156-177 parsley

というように教えた一欄が見れる。一つのマシンにタスクをいくつ割りふる(上のやつはそのそも名前を教えただけなので、実際にタスクをふるときにはこれをする必要がある)ときには

./gxpc explore radish 10

などとする。この例だとこのリモートサーバーで10個のタスクが並列して走るが、あまり増やしすぎると一つのタスクで使えるCPUが少なくなるのでかえって遅くなるので適度な数で。

投げるやつ一欄のようなものはstatを使うとできて

/Users/yasuhisa/Downloads/gxp-3.07% ./gxpc stat 
/tmp/gxp-yasuhisa-default/gxp-57861810-session-dn156-177-yasuhisa-2010-08-15-17-08-09-63469-00954402
dn156-177-yasuhisa-2010-08-15-17-08-09-63469 (= dn156-177 dn156-177)
 radish-yasuhisa-y-2010-08-15-17-42-18-2419 (= radish radish)
 radish-yasuhisa-y-2010-08-15-17-42-20-2439 (= radish radish)
 pepper-yasuhisa-y-2010-08-15-17-09-50-22429 (= pepper pepper)
 papaya-yasuhisa-y-2010-08-15-17-08-58-19159 (= papaya papaya)
 papaya-yasuhisa-y-2010-08-15-17-08-58-19160 (= papaya papaya)

という感じ。

色々試す

簡単なテストっぽいものから。gxpc eは引数にコマンドを取って、各サーバーにタスクを投げに行く。

/Users/yasuhisa/Downloads/gxp-3.07% ./gxpc e hostname | head
parsley
radish
radish
parsley
dn156-177.naist.jp
radish
pepper
radish
carrot
parsley

実際に使うようなタスクの例を考えてみる。巨大なテキストファイルをいくつか分割して、分割したものに対して動くようなスクリプトファイルがあったとしよう。例えばkNNで全pairの近傍を探してくるというようなものだとN個サンプルがあれば、(N * N) / 2の類似度の計算が必要になる。こいつを分割したい(近傍探してくるのは、独立に計算できるのがミソ)。gxpではタスクファイルというものを用意するとこいつを並列にやってくれる。以下のようなタスクファイルを用意する。

0 cpp/add_knn_feature data/unlabeled/books.txt data/labeled/books_train.txt_0.txt ../data/labeled/books_train.txt_0_knn_books.txt
1 cpp/add_knn_feature data/unlabeled/books.txt data/labeled/books_train.txt_1.txt ../data/labeled/books_train.txt_1_knn_books.txt
2 cpp/add_knn_feature data/unlabeled/books.txt data/labeled/books_train.txt_2.txt ../data/labeled/books_train.txt_2_knn_books.txt

タスクid、(オプションも付けれるらしいが、ここでは使わない)コマンドという感じ。今はタスクファイルの中身をRubyで生成しているけど、プログラミングっぽいことはできないのかな?

実行する。

/Users/yasuhisa/Downloads/gxp-3.07% ./gxpc ep -H dn156-177 /Users/yasuhisa/java/hadoop/task.txt

今の実験設定だとlocalはmacbookでこいつでは実験しないので、excludeしてくれというのが-Hのオプション。あとはタスクファイルの場所を引数に取る。

実行がうまくいったかは"ローカルの"statusファイルに入っている。関係ないけど、このstatusファイルからどのサーバーでどれくらいのタスクが実行されたかは

/Users/yasuhisa/Downloads/gxp-3.07% cut -f 4 -d " " status | ruby -ne 'puts $1 if $_ =~ /(.*?)_\d\d$/' | sort | uniq -c
  63 carrot
  17 papaya
  30 parsley
  40 pepper
  57 radish

などとすればよい。statusファイルはタスクのどこまでがうまくいったかなどの情報を持っていて、途中でkillした場合、もう一度gxp epすれば残ったものを実行してくれるようだ(どこかのサーバーが遅いとかそういう時に)。

出力を出すようなプログラムだと"リモートの"outputディレクトリ以下に入っている。

Etc

  • Dropbox
  • クラウドでファイル管理
  • Skitch
  • スクリーンショットを取るのに便利
  • Omnifocus
  • Papers

xargs

shellの中でプロセスを気軽にいくつも走らせることができたりして便利。

# ファイルサイズが0のときにのみ削除したい
find . -type f -name \*conflicted\*.txt -print0 | xargs -0 rm

# 特定のパターン以外のものを削除
find . -type f -not -name '*.txt' | xargs rm

# パターンにマッチしたものにnkfでUTF-8に上書き
find . -type f -name '*.txt' | xargs -n1 -t nkf -S -w --overwrite

# 今日のgit commitのメッセージを取得
# http://weble.org/2010/09/21/mac-bash-date
date -v-1d +"%Y-%m-%d"| xargs -I% git log --oneline --since=% | cut -d " " -f 2 | xargs -I% echo "- %"

argsが実行しているコマンドを表示

tオプションで見れる。

並列処理

Pオプションで並列処理をさせることができる。「-P3」とかやると3つの処理がいっぺんに。いくつか数えるのがあれなときは、「-P0」とかってやるとよいらしい。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment