Pages

2009/10/27

Emacs設定

auto-complete-acr.el 0.2のインストール』に触発されて、ESSを便利に使いたいと思い、『これからEmacsでR使う人のための設定まとめ』を参考にごにょごにょしてみた。なにげにファイルの配置とかの情報がないし、そもそもロードパスがどこに通ってて、拡張ファイルはどこに置けばいいのかもわかんなかったので結構はまった…。

ダウンロード


auto-complete.elは『テキスト入力中に補完候補を自動的に表示してくれる auto-complete.el をリリースしました』から、その他のファイルは、『myuhe / auto-complete-acr.el』からダウンロードした。

配置


.emacs.dの下にelispディレクトリを作り、auto-complete.el、anythig.el、anything-config.elは直接配置して、yasnippetとsnippetsはelispの下にディレクトリを作って配置した。

.emacs


最後にこれからEmacsでR使う人のための設定まとめにあった内容を.emacsに追加した。ただし、ロードパスの部分だけ変更している。今のところ、僕の.emacsは下のようになっている。これから細かいカスタマイズをしていくと変わっていくだろうけど、まずは今の状態をメモしておく。

; ESSを追加
(require 'ess-site)

; load-pathを追加
(setq load-path(cons "~/.emacs.d/elisp" load-path))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;anything-c-source-R-helpの設定
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(setq anything-c-source-R-help
'((name . "R objects / help")
(init . (lambda ()
;; this grabs the process name associated with the buffer
(setq anything-c-ess-local-process-name ess-local-process-name)))
(candidates . (lambda ()
(condition-case nil
(ess-get-object-list anything-c-ess-local-process-name)
(error nil))))
(action
("help" . ess-display-help-on-object)
("head (10)" . (lambda(obj-name)
(ess-execute (concat "head(" obj-name ", n = 10)\n") nil (concat "R head: " obj-name))))
("head (100)" . (lambda(obj-name)
(ess-execute (concat "head(" obj-name ", n = 100)\n") nil (concat "R head: " obj-name))))
("tail" . (lambda(obj-name)
(ess-execute (concat "tail(" obj-name ", n = 10)\n") nil (concat "R tail: " obj-name))))
("str" . (lambda(obj-name)
(ess-execute (concat "str(" obj-name ")\n") nil (concat "R str: " obj-name))))
("summary" . (lambda(obj-name)
(ess-execute (concat "summary(" obj-name ")\n") nil (concat "R summary: " obj-name))))
("view source" . (lambda(obj-name)
(ess-execute (concat "print(" obj-name ")\n") nil (concat "R object: " obj-name))))
("dput" . (lambda(obj-name)
(ess-execute (concat "dput(" obj-name ")\n") nil (concat "R dput: " obj-name)))))
(volatile)))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; anything-c-source-R-localの設定
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(setq anything-c-source-R-local
'((name . "R local objects")
(init . (lambda ()
;; this grabs the process name associated with the buffer
(setq anything-c-ess-local-process-name ess-local-process-name)
;; this grabs the buffer for later use
(setq anything-c-ess-buffer (current-buffer))))
(candidates . (lambda ()
(let (buf)
(condition-case nil
(with-temp-buffer
(progn
(setq buf (current-buffer))
(with-current-buffer anything-c-ess-buffer
(ess-command "print(ls.str(), max.level=0)\n" buf))
(split-string (buffer-string) "\n" t)))
(error nil)))))
(display-to-real . (lambda (obj-name) (car (split-string obj-name " : " t))))
(action
("str" . (lambda(obj-name)
(ess-execute (concat "str(" obj-name ")\n") nil (concat "R str: " obj-name))))
("summary" . (lambda(obj-name)
(ess-execute (concat "summary(" obj-name ")\n") nil (concat "R summary: " obj-name))))
("head (10)" . (lambda(obj-name)
(ess-execute (concat "head(" obj-name ", n = 10)\n") nil (concat "R head: " obj-name))))
("head (100)" . (lambda(obj-name)
(ess-execute (concat "head(" obj-name ", n = 100)\n") nil (concat "R head: " obj-name))))
("tail" . (lambda(obj-name)
(ess-execute (concat "tail(" obj-name ", n = 10)\n") nil (concat "R tail: " obj-name))))
("print" . (lambda(obj-name)
(ess-execute (concat "print(" obj-name ")\n") nil (concat "R object: " obj-name))))
("dput" . (lambda(obj-name)
(ess-execute (concat "dput(" obj-name ")\n") nil (concat "R dput: " obj-name)))))
(volatile)))

;; anything.elの設定
(require 'anything-config)
(define-key global-map (kbd "C-x b") 'anything)

(setq anything-sources
'(anything-c-source-buffers
anything-c-source-emacs-commands
anything-c-source-file-name-history
anything-c-source-locate
anything-c-source-man-pages
anything-c-source-occur
anything-c-source-recentf
anything-c-source-R-local
anything-c-source-R-help
))


;;yasnippetの設定
(add-to-list 'load-path "~/.emacs.d/elisp/yasnippet");;site-lispにロードパスを通してる場合
(require 'yasnippet) ;; not yasnippet-bundle
(yas/initialize)
(yas/load-directory "~/.emacs.d/elisp/snippets")
;;auto-completeの設定
(require 'auto-complete)
(global-auto-complete-mode t)
(require 'auto-complete-yasnippet)
(require 'auto-complete-acr)

2009/10/20

ESSのインストール

Emacsは最初からインストールされているものの、ESSは自分でインストールしなくてはならないのをすっかり忘れていた。インストールは簡単で「sudo apt-get install ess」で終わる。この後、自分のホームディレクトリに.emacsを作成し、「(require 'ess-site)」と記入しておく。RjpWikiのESSのページにいろいろと詳しく載っているのでそちらを参照しておいた。

2009/10/13

Clam AV

インストールしているウイルス対策ソフトを手動でアップデートしようと思ったので、『sudo freshclam』したら以下のように怒られた。
ERROR: /var/log/clamav/freshclam.log is locked by another process
ERROR: Problem with internal logger (UpdateLogFile = /var/log/clamav/freshclam.log).

とりあえずエラーメッセージで検索してみると、Clam AV update failsというスレッドの3番目に解決策が載っていたのでその通り実行した。今のところうまくいっている様子なのでこのまましばらく静観する。

2009/10/09

ネットワーク関係の設定

最初にファイアウォールの設定を行い、ウイルス対策としてはClamAVをインストールすることにした。ファイアウォールは、gufwを追加と削除からインストールしGUIで設定を行った。ClamAVはプログラム名を知っていたので、『sudo apt-get install clamav』でインストールした。
外からもネットワークを介してログインできるように、IPアドレスを申請して、固定IPアドレスの設定も行った。GUIを利用して設定するつもりだったのだがうまくいかなかったので、結局『Ubuntu で固定IPを使用する』を参考にして、『/etc/network/interfaces』の元々『iface eth0 inet dhcp』だったところを以下のように編集してネットワークを再起動した。
#iface eth0 inet dhcp
iface eth0 inet static
address x.x.x.x
netmask 255.255.x.x
gateway x.x.x.x

sudo /etc/init.d/networking restart

最初のインストールのところでSSHをインストールしておいたので、そちらもアクセス可能なユーザーを限定するように設定した。『/etc/ssh/ssh_config』にAllowUsers xxxxを加えてSSHを再起動した。
sudo /etc/init.d/ssh restart

2009/10/07

Ubuntu Server 9.04インストールメモ

サーバ版のUbuntu 9.04のインストールからデスクトップ環境の構築までをメモしておく。細かいソフトのインストールは別エントリにする。

実際に行った手順
64bitサーバ版Ubuntu 9.04のインストール(OpenSSH serverにのみチェック)
デスクトップ環境の構築
ハードディスクの自動マウント設定
キーマップ変更
デスクトップ環境の日本語化

最初のインストールにおけるほとんどの行程は、『Ubuntu Server インストールめも』と、『Ubuntuメモ Ubuntu Server 9.04インストール、Plagger、MovableType環境構築まで』に従うことで何もトラブルなく進んだ。書かれている手順と違ったのは「キーボードの選択」だけだったと思う。よくわからなかったので一番上のJapanを選択した。ハードディスクの使い方でも少し戸惑った。しかし、後者のページに触れてあるとおりよくわからないままLVMを選択しておいた。これでSSDの方にうまくインストールできたらしい。
デスクトップ環境の構築では、『Ubuntuメモ Ubuntu Server 9.04インストール、Plagger、MovableType環境構築まで』にあるように、以下の4つのコマンドを実行すればよい。
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install ubuntu-desktop
sudo reboot


今回は、日本語環境を整える前にもう1台ぶら下がっている320GBのHDDを起動時に認識させるように、『Ubuntu Tips/ハードウェア/内蔵ディスクを増設するには』を参考にして設定を行った。ここでは必要となるので「gparted」を追加と削除からインストールした。主な手順はハードディスクのフォーマット(ext3)、マウントポイントの作成、ディスクラベルの確認、設定ファイルへの記述となる。マウントポイントの作成では、nautilusを管理者権限で開き、作成したディレクトリのプロパティでアクセス権を開き「root」となっているところを「自分のアカウント」に変更した。ディスクラベルの確認は『sudo fdisk -l』で行い、管理者権限で開いたnautilusから「/etc/fstab」をダブルクリックして、「/dev/「ディスクラベル(sdb1など)」 /media/disk2 ext3 defaults 0 0」を追加した。

ここらでCtrlとCapsLockのスワップを忘れているのに気づいたのでキーボードの設定を行った。

最後に日本語環境の導入を行うのだが、『Ubuntuメモ Ubuntu Server 9.04インストール、Plagger、MovableType環境構築まで』に書いてある情報だけでは足らず、結局『Ubuntuの日本語環境』を参照した。さらに日本語環境セットアップヘルパを利用していくつかのパッケージを導入した。

追記:ディレクトリの名前が日本語だと外からログインした時に不便なのでディレクトリの名前は下のコマンドを使って英語に戻した。via ディレクトリ名が変更しても元に戻ってしまいます
LANG=C xdg-user-dirs-gtk-update