27 Mar 2015, 12:27

鮮やかにデータを可視化する! coursera で Exploratory Data Analysis を受けた

はじめに

R を利用してグラフを書く方法を学ぶために, coursera で Exploratory Data Analysis を受けた.

[toc]

R を利用してグラフを書く方を学べる内容

この講座は, 探索的データ解析を学ぶ講座. 探索的データ解析とは, 未知の関係性を データの可視化 によって探る方法.

といっても, 前半は グラフの書き方を学ぶ.

3 つの代表的なライブラリが紹介される.

  • Base: “artist’s palette” model
  • Lattice: Entire plot specified by one function; conditioning
  • ggplot2: Mixes elements of Base and Lattice

後半は, クラスタ分析を扱う. これもデータを可視化することで, データの関係性を調べる方法.

Exploratory Data Analysis:

未知の関係性を見つけることが目的.

可視化することで関係性を見つける.

  • To understand data properties
  • To find patterns in data
  • To suggest modeling strategies
  • To “debug” analyses

基本的な手法

  • Five-number summary
  • Histograms
  • Density plot (Scatter Plot)
  • Boxplots (for Numerical Data, ヒゲ)
  • Barplot (for categorical Data)

感想

部内意識調査アンケート

この講座をとったのは, 職場でアンケート調査をする機会があったから. これは, 学んだ統計的手法を生かす絶好の機会だと思った.

集計したデータをまとめて可視化するスキルの取得か急務だったので, 取り組んだ. こういう, 目的があるときは知識の吸収がはかどる ( \^ω\^ )

今まで, R に標準搭載されていた base package で グラフの描写を していたのだが, ggplot2 の qplot をつかうことで良さげなグラフがかける ことに喜んだ. 参考書には, 以下を利用した.

しかし, Excel に嫉妬…

R でグラフを書くには, スクリプトで設定を指定する必要があるので, 使いこなすまでに時間がかかる. なにを指定すれば, どんな図が生成され るのか, いまいちわからない. 試行錯誤しながらも, なんども試しつつ, ようやく一つのグラフをプロットできる. そんな繰り返しだ.

アンケート結果をなんとか R をつかって棒グラフで可視化してみた. しかし, すでに同僚が Excel をつかって帯グラフと折れ線グラフを ちゃちゃっと作成していた…

これには, ショックを受けた. 自分は, 結構苦労して R でグラフ をかけるようになるまでにけっこう時間がかかった. しかし, Excel つかえば, だれでも簡単に, それなりのグラフが作成できてしまうのだ.

Excel すごいと思うとともに, 嫉妬…

もしかしたら, 本格的なデータ解析をする場合以外は, R は必要ないのかも しれない.普通の一般人は, R をつかうよりも Excel を利用するほうが, 学習対効果においてよいのではないかと思う.

CLI と GUI

しかし, 自分はすでに中途半端に R を学んでしまった. こうなったら, い くところまでいこう. Excel にはもう戻れない, 戻らない!!

R と Excel の関係は, CLI と GUI の関係と同じ.

CLI は身につけるまでは苦労するが, 一旦身につければ GUi よりも高い 生産性が出せると信じている.

25 Mar 2015, 04:13

Windows 版 タイル型ウィンドウマネージャーの衝撃!! bug.n の紹介

はじめに

Windows のデスクトップ環境をタイル型 WM bug.n の紹介.

[toc]

背景

以前, タイル型 Window Manager というものを知ってとても驚いた. それ以来ずっと, Linux 上では xmonad を利用するようになった.

タイル型 Window Manager の一番良い所は, マウスを利用しなくてもアプリの移動や管理かできるというところだろう. 今回, 実はマウスが壊れてしまったので, これを機会に Windows で利用でき るものはないか, 調査をしてみた.

Windows 上で利用できるものは, 意外にすくない. bug.n というものを試すことにした.

bug.n をつかう

bung.n は AutoHotKey を利用した, Windows 用タイル型ウィンドウマネージャーだ.

Install

AutoHotKey を入れる. windows はインストーラがある.

次に bug.n のソースをダウンロード.

zip を展開して, 中にある bugn.exe を起動.

つかってみる

まずは, 起動画面.

  • いつくかアプリケーションを立ち上げると, 自動整列 !!
  • しかも, 等間隔に並んでいて気分も上々.
  • Win + 数字 を押すことで 仮想ディスプレイ を利用することも可能.

操作感は, xmonad と同じ. コレはすごいぞ!

ここにデフォルトのキーバインドがある. 一つ一つためして覚えていく.

設定

設定ファイル

C:\Users\tsu-nera\AppData\Roaming\bug.n\Config.ini を作成. 以後, win + ctrl + e で編集を呼び出せる.

xmonad と同じキー操作にする

操作感は xmonad とかなり似ている. そのため, いっそのこと xmonad のキーバインドにする.

かたかなひらがなを changekey で修飾キーにする.

bug.n は Autohotkey を内部でりようしているので, 設定ファイルの書き方も autohotkey と同じ.

Linux 環境ではカタカナひらがなを Default Key に割り当てているが, Windoes 環境でもわりあてようとしたが, ここでひと苦労.

Autohotkey のマニュアル通りに sc070 に なにかを割り当てても動かない.

あくせくした結果, 以下のページを参考に カタカナひらがなキーを F13 に 割り当て, F13 を bug.n のデフォルトキーにした.

カタカナひらがなキーを F13 に割り当てるために, Change Key というソフトを利用した.

おわりに

このアプリケーション, 感動した!!

マウスをつかうことから開放されることが一番の喜びだ. 面倒なウィンドウの並び替えに気を紛らわすこともない. 仮想ディスプレイ間も自由自在に移動できる.

xmonad のような操作が Windows で実現できるなんて, 夢のようだ. もともと Linux で タイル型ウィンドウマネージャーに開眼したのだが, 2 度目の感動.ベートーヴェンは言った.

音楽は人々の精神から炎を打ち出さなければならない

そのように言おう.

プログラミングは人々の精神から炎を打ち出さなければならない

24 Mar 2015, 14:50

ボーイスカウトの規則に従った結果 www

仕事でミスった…

ボーイスカウトの規則とは

まずは, ポーいスカウトの規則とはなにかから. 以下のサイトの解説が詳しい.

以下, 引用.

コードを, チェックアウトしたときよりもきれいにして, チェックインしま す. これを「心構え」として常に持って, 「習慣化」します.

コードの洗練を継続して行う, ということです. それは大仰なことではなく, 変数名をよりよいものにし, 大きすぎる関数を分割し, 小さな重複を排除し, if 文の連なりをなくす, という小さな活動の積み重ねです.

背景

今回の開発は, スクラッチから Java でコードがかけるというまたとない機 会なので, 今まで学んできた TDD を今こそ発揮しようとかんがえた.いつも 以上にはりきって,レッド・グリーン・リファクタリングのサイクルを回し たつもりだった.

失敗したこと

ボーイスカウトの規則に従うと…

ボーイスカウトの原則にしたがって,

  • 変数名をよりよいものにし, マージで競合が発生しまくった.

  • 大きすぎる関数を分割し, 予定コード量が 見積りの 2,3 倍になる.

  • 小さな重複を排除し,if 文の連なりをなくす. 予定完了日が 見積りの 2w に対してさらに 1w 遅延.

    今日は上司に, せっかく動いているのになぜなおすの? と注意された.

そしてマージミス

そして最大の失敗を今日犯す.

SVN で他人のブランチに自分の開発用ブランチをマージしたら, マージミ スが発生.レベルダウンが発生して,チーム全員でマージ箇所のコードレビュー を実視.全員の一日の工数を奪ってしまった.

競合がたくさんでてしまい, 多数の手動マージが必要だった. 注意してい たが, やっぱりまちがってしまった…

もう名前変更もうかつにできない, リファクタリングも相談して許可を得 てからするようにと, 注意される.

ここから学ぶこと

なぜ発生したか?

マージミスがなぜ発生したかというと, あせっていたから.

実は, マージしたときに JUnit がグリーンからレッドになったのは知ってい た. しかし, JUnit は他人のコードをとりこむとすぐにレッドになる, これ は日常茶飯事だったので,気にすることが泣く, 実機確認を急いでしまった.

立ち止まってでも, 実機の前に JUnit をグリーンにしておくべきだった.

また, もっと JUnit をグリーンにすることをチーム内にアピールするべきだっ た. なんかいつも, 自分が壊れたテストコードをグリーンにする作業をし ている気がする.

手動マージのコツとかってなんだろう?? 今回, 自分ひとりで手動マージ作業をすることに無理があった. 他人の修正を把 握できないのに. マージ完了後にレビュー依頼をするべきだった.

リファクタリングは悪いことか

今の状況では, 悪いことだった.

工程の遅延とレベルダウンにつながってしまった. 今の自分のコーディング能力では, リファクタリングをすることのリスク のほうが大きい. くやしいけれども, 力不足を感じた.

家で, ゆっくりときれいなコードを書くのはよい. しかし, お金を対価と して働いているので, 目的を達成するために, リファクタリングが必要か どうか, かんがえることをしなかった. TDD 頑張るぞーという幼い思い込み で今回のようなことになってしまった.

実は今日, このプロジェクトを離れて別のプロジェクトへ移動する話がき た. 今のプロジェクトもあと 1 ヶ月だ. くいのないように, 自分の実力を発 揮してプロジェクトに貢献したい.

22 Mar 2015, 05:20

分散システムの専任アルゴリズム (Election Algorithms) の学習メモ

要約

分散システムにおける専任アルゴリズム (Election Algorithms) の学習メモ.

代表的なアルゴリズムには, 以下がある.

  • Bully Algorithm
  • Ring Algorithm

背景

以前の記事のつづき.前回は, 異常検出についての古典的なアルゴリズムを記事にした.

今回は, 異常を検出したあとの動作についてメモ. coursera で Election Algorithms を学習した.

Master 決定の論理でも, 古典的なアルゴリズムがすでに存在することに驚いたので 詳しくしらべてみた.

Leader Election

選任アルゴリズム.

通常, 分散システムでは, Coordinator が存在する. Coordinator で異常が発生したさい, 次の Coordinator を決定する必要がある.

また, 異常な Coordinator が復旧したときに Coordinator を戻す必要がある.

古典的な Coordinator を決定するためのアルゴリズムは以下.

  • Bully algorithm
  • Ring algorithm

実際の実装例.

  • Google Chubby
  • Apatch ZooKeeper

Bully Algorithm

Bully (ガキ大将) アルゴリズム. つよいものが勝つというもの.

3 種類のメッセージがある. * Election Message: Sent to announce faster election * Answer Message: Respond to the election message * Coordinator message: Sent to announce the identity of the elected process

手順は以下

  1. あるノードが Master の異常を検出したとき, Election を開催する. Master が異常状態から復旧したときも, Election を開催する.
  2. あるノードは自身よりも高い ID をもつノードにたいして, Election Message をおくる. (生存宣言)
  3. Election Message をうけとったノードは, Answer Message をかえす. そして, 自身よりも高い ID をもつノードにたいして, Election Message をおくる.
  4. 2, 3 が続いた結果, どのノードからも応答がない, 送信するノードがな い場合に, そのノードが Master となる. Master は Coordinator messag をおくる.

Ring Algorithm

リング上にノードの ID が割り振られる. あるノードは自身のとなりにならぶノードにメッセージを送る.

となりとなりにメッセージをおくることで, リングを一周したら, リングを構成するノードの生存確認がとれるので, もっとも高い ID をもつノードが Master になる.

Bookmarks

おわりに

以前はストレージ装置における異状検出機能を担当していたことはすでに書いた.

Master-Slave 構成において, Master で異常が発生した際に, 次期 Master を決定する必要がある.

自分の所属していたチーム内ではこのロジックを 次期 Master 決定論理 などど呼んでいた. 自分たちでなんとなく考えたものだった.

世の中をみわたせば, この領域は Election Algorithms と呼ばれていて, 研究も進んでいるのだった.

この分野は 自分がはじめて出した特許に関係する部分だったので, 自身の無知をしった.

18 Mar 2015, 23:18

Emacs で高速快速カーソル移動をするための小技 3 点セット

はじめに

Emacs 上でカーソルを移動するための Tips を紹介.

たいした技ではないのだけれども, この設定でかなり改善されてビックリしたので思わず記事にします.

おまけで, 最近ややビックリした改善もあわせて紹介.

[toc]

背景

Emacs で カーソル移動をするときにもっさりしていたので, なんでこんなことになっているのか調べてみました.

その 1 カーソル移動を速くする

Keyboard に入力をしたときに次の入力までの Delay が OS によって強いられる. この Delay 時間を変更することで, リピートするような入力の入力効率が劇的に上がる.

この改善の効果には感動しました!

Linux

ArchLinux の設定.

以下を.xinitrc 書く

xset r rate 200 25

Windows

windows は 設定が簡単.

  • コントロールパネル > キーボード > 速度を選択.
  • 表示までの待ち時間, 表示の間隔のバーを右にもっていく.

参考: windows でキーボードのカーソル移動速度を上げる. ばびゅーん. - 酒は血液, 呑んだら献血

コントロールパネルからだと, 表示の間隔が 31 までしかさげることができな い.しかし, レジストリをいじると, その限界を越えることができる.

自分は, レジストリをいじって, 25 に設定した.

Mac

Mac をもっていないので, ブックマークだけ. Karabiner というフリーソフトをつかうそうな.

その 2 スクロールを鮮やかにする

この改善もやや感動.

以下の elisp を導入するとスクロールがかっこよくなった.

(require 'smooth-scroll)
(smooth-scroll-mode t)

参考:

その 3 カーソル移動で小指を守る

最近, 小指がいたくなってきて (とくに休日) Emacs の弊害を感じている. たぶん, Emacs じゃなくて, Let’s Note のへんな Ctrl の 位置だと思うのだけれども.

そこで, これは小指をつかわないでカーソル移動をする技.

hydra というパッケージを利用することで, これが可能.

C-z で hydra-move が発動. あとは, 小指を外して移動可能. 先ほどの scroll も組み合わせてみた.

(require 'hydra)

(global-set-key
 (kbd "C-z")
 (defhydra hydra-move ()
   "move"
   ("f" forward-char "right")
   ("b" backward-char "left")
   ("n" next-line "down")
   ("p" previous-line "up")
   ("SPC" scroll-up-command "down")
   ("<backspace>" scroll-down-command "up")
   ("." hydra-repeat "repeat")))

hydra は, おもしろい記事をかく abo-abo さんの作品だ.

17 Mar 2015, 23:11

リッカート法によるアンケートの相関分析を R でする方法のメモ

はじめに

5 段階アンケートで欲利用されるリッカート法と, アンケート結果の相関関係をを調べる方法を紹介します.

アンケート結果はカテゴリカルデータなため, そのままでは相関係数が求められないので, 一工夫必要.

[toc]

背景

職場でアンケートを実施したのだけれども, 分析の仕方が分からなかったので, カテゴリカルデータの相関分析方法を調べてみた.

リッカート法の紹介

リーカート法は, 5 段階評価, 7 段階評価のアンケート.

リッカードの視覚化には帯グラフが適している.

R で 相関を調べる

cor 関数を使う.

二変数の相関

cor (bull$YearsPro, bull$BuckOuts)

多変数の相関. 配列で渡す.

myvars <- c ('YearsPro', 'Events', 'BuckOuts')
cor (bull[,myvars])

カテゴリカルデータの相関

numeric データに変換

ここからが本題. カテゴリカルなデータの相関を出すには, カテゴリを数値に変換する必要がある. as.factor, as.numeric を利用する.

val <- as.numeric (as.factor (var))

plot で描写

相関関係の散布図を一度に生成することは, plot 関数で可能だ. しかし, カテゴリカルデータに対しては, あまりみても情報が得られない.

ここにシャレたグラフの R スニペットがある.

ポリクコック相関係数

相関係数はでピアソンを利用するよりも, ボリクコック相関係数を利用するのがよいらしい.

これはまだ試していない.

以下のようなデータから相関関係を読み取る.

向上心 好奇心 危機感 責任感 勤続 所属


3 3 4 4 21- 長野 3 3 5 5 11-20 川崎 2 3 5 4 11-20 川崎 4 5 4 4 21- 長野 4 3 5 4 -10 川崎 1 1 5 3 21- 川崎 1 1 4 2 -10 川崎 1 1 4 4 21- 川崎 4 2 5 5 11-20 長野 1 1 4 1 -10 川崎 2 1 5 3 21- 長野 4 5 3 4 21- 川崎 4 4 4 4 21- 長野

データ処理

カテゴリカルデータを変換.

answerNum <- answer
answerNum$勤続 <- as.numeric (as.factor (answer$勤続))
answerNum$所属 <- as.numeric (as.factor (answer$所属))
print (answerNum)

向上心 好奇心 危機感 責任感 勤続 所属


3 3 4 4 3 2 3 3 5 5 2 1 2 3 5 4 2 1 4 5 4 4 3 2 4 3 5 4 1 1 1 1 5 3 3 1 1 1 4 2 1 1 1 1 4 4 3 1 4 2 5 5 2 2 1 1 4 1 1 1 2 1 5 3 3 2 4 5 3 4 3 1 4 4 4 4 3 2

相関をもとめる

factors <- names (answerNum)
result <- cor (answerNum[,factors])
result <- round (result, 4)
       向上心    好奇心    危機感    責任感   勤続      所属

向上心 1 0.822 -0.1041 0.6775 0.1867 0.4872 好奇心 0.822 1 -0.3991 0.5277 0.3136 0.2521 危機感 -0.1041 -0.3991 1 0.2198 -0.2306 0.0195 責任感 0.6775 0.5277 0.2198 1 0.3947 0.2823 勤続 0.1867 0.3136 -0.2306 0.3947 1 0.4739 所属 0.4872 0.2521 0.0195 0.2823 0.4739 1

散布図

plot (answerNum)

15 Mar 2015, 02:38

R で Excel のデータを読み込む方法のメモ (Windows)

はじめに

Windows 環境に R をインストールします. また, Excel データを R から読み込んでみます.

[toc]

Environment

<div class="outline-text-3" id="text-1-1">
  <ul class="org-ul">
    <li>
      windows 8.1
    </li>
    <li>
      R version 3.1.3
    </li>
  </ul>
</div>

R のインストール

以下から最新版をインストール.

インストール後, パスを通す.

[sourcecode language=”text” title=””]
C:\Program Files\R\R-3.1.3\bin\x64
[/sourcecode]

コマンドプロンプトをを開いて R と打ち込んで R プログラムが立ち上がれば OK.

文字化けする場合はコンソールで chcp 65001 と入力で UTF-8 になる.

Excel 用のパッケージ取得

xlsx パッケージを利用することで, Excel ファイルを R から読みこむことができる.

CRAN からインストール.R コンソール上で,

[sourcecode language=”bash” title=””]
install.packages ("xlsx", dependencies = TRUE)
[/sourcecode]

使い方マニュアル.

読み込みテスト

<div class="outline-text-3" id="text-3-1">
  <p>
    以下のサイトからサンプルデータ習得して読み込んでみる.
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://www.lanlan.co.jp/mtuinfo/exceldata.html">Excel データサンプル</a>
    </li>
  </ul>

  <p>
    [sourcecode language=&#8221;text&#8221; title=&#8221;&#8221;]<br /> require (xlsx)
  </p>

  <p>
    # read excelsample.xls sheet1<br /> data <- read.xlsx ("C:\\Users\\tsu-nera\\Downloads\\excelsample.xls", 2)<br /> head (data)<br /> [/sourcecode]
  </p>
</div>

<div id="outline-container-sec-3-1-1" class="outline-4">
  <h4 id="sec-3-1-1">
    result
  </h4>

  <div class="outline-text-4" id="text-3-1-1">
    [sourcecode language=&#8221;text&#8221; title=&#8221;&#8221;]<br /> 仮設工事 1 1 401350 320888 401350 79.953 100 401350 320888 401350 33.83 0<br /> 基礎工事及び土工事 1 1 7861394 6296746 7854794 80.098 99.917 7861394 6296746 7854794 0 0<br /> 屋外付帯工事 1 1 435800 348640 435800 80 100 435800 348640 435800 0 0<br /> 木工事 1 1 515720 412576 515720 80 100 515720 412576 515720 0 0<br /> 外壁工事 1 1 3239500 2575650 3207600 79.508 99.016 3239500 2575650 3207600 0 0<br /> 屋根及び板金工事 1 1 402400 321920 402400 80 100 402400 321920 402400 0 0<br /> [/sourcecode]
  </div>
</div>

その他

RExcel を利用すると R へ Excel データを読み込まずとも, Excel 上から R を呼び出すことも可能.

14 Mar 2015, 04:42

LPIC 102 合格

できなかった.. 不合格.

11 Mar 2015, 15:35

Emacs からビッグデータの叡智へ瞬速アクセスだ! 新しい Emacs Evernote Cleient の geeknote がイイ

はじめに

Emacs の Evernote を 2 つ紹介します.

  • evernote-mode
  • geeknote

きっかけ

数年前に Evernote を Emacs でつかう記事をかいた.

記事をかいてしばらくして, Evernote API の仕様変更で一時期使えなくなってしまった.(アクセス token)

メイン PC が Linux に変えたら, Evernote すら利用をしてなかった.

最近, 久しぶりに Evernote にアクセスしてみて, また Evernote を触りたく なってきた.=geeknote= という新手の Evernote クライアントが登場したため, 最近の Evernote 事情について調べてみた.

evernote-mode

本家のリポジトリはメンテされてない.

install

基本は, doc 配下にある readme を読む.

ポイントは ruby 1.9 が必要!! 以下を実行.

$ gem-1.9 install evernote_oauth
$ ruby-1.9 ruby/setup.rb

/usr/bin/enclient.rb error

/usr/bin/enclient.rb がないとエラーする件は, readme に解決方法がかいてあった. 複数 ruby バージョンインストール時に発生.

setup.rb 実施後に, マニュアルでコピーする.

$ sudo cp /usr/bin/ruby1.9/bin/enclient.rb /usr/bin

auth token

事前にトークンを取得して, 以下のようにかく必要あり.

(setq setq evernote-developer-token "Your developer token.")

config

(setq evernote-ruby-command "ruby-1.9")

(require 'evernote-mode)
(global-set-key "\C-cec" 'evernote-create-note)
(global-set-key "\C-ceo" 'evernote-open-note)
(global-set-key "\C-ces" 'evernote-search-notes)
(global-set-key "\C-ceS" 'evernote-do-saved-search)
(global-set-key "\C-cew" 'evernote-write-note)
(global-set-key "\C-cep" 'evernote-post-region)
(global-set-key "\C-ceb" 'evernote-browser)

感想

頑張って導入してみたものの, あまり使えない子だった.

  • スピードが遅い.
  • 通信中のしばしハングが苛立つ.
  • ときどき動かない.
  • evernote-mode でかいたものしか見れない. (これは w3m をつかうと解消できるが)

geeknote

コマンドラインベースのツール. geeknote.el は Emacs の Evernote クライアント.

Geeknote の設定

以下からダウンロードしてインストール.

git clone git://github.com/VitaliyRodnenko/geeknote.git
cd geeknote
sudo python setup.py install

geeknote login
geeknote settings --editor "emacsclient"

Emacs の設定

Emacs は server モードで立ち上げておく必要あり.

(requier 'geeknote)
(global-set-key (kbd "C-c g c") 'geeknote-create)
(global-set-key (kbd "C-c g e") 'geeknote-edit)
(global-set-key (kbd "C-c g f") 'geeknote-find)
(global-set-key (kbd "C-c g s") 'geeknote-show)
(global-set-key (kbd "C-c g r") 'geeknote-remove)
(global-set-key (kbd "C-c g m") 'geeknote-move)

geeknote コマンドを eshell 経由で emacs からコールして, 結果を eshell buffer に出している.

geeknote の elisp wrpper といったところか.

感想

コマンドラインからの検索の サクサク感に驚いた.

  • 早い
  • 簡単
  • 便利

というわけで, すぐに気に入ってしまった.

そして, もう一点気に入ったのは, テキストはすべて Markdown 形式に変換されて表示される こと.

自分は twtitter や ブログや はてぶを全部 Evernote につっこんでいるのだが, これらの情報源から, 単語をもとにサクッと検索できる.

  • 未知のものは eww で Google 検索.
  • 既知のものは geeknote で Evernote 検索.

この二つの情報源に Emacs から素早くアクセスできることは素晴らしい.

さらに, Emacs から geeknote を呼べるというこで, カスタマイズ次第では追加機能を簡単に実装できそうなところも気に入った.

08 Mar 2015, 07:19

Eshell を使い倒すための Tips いろいろ

はじめに

以前から, Emacs の shell 環境として eshell をつかいつづけてきた.

だいたい, ノウハウがまとまりつつあるので, ここらでスナップショットと して設定をメモしておこうと思う.

Eshell 固有

prompt のフォーマット

prompt のフォーマットを自分独自のものにする.

(setq eshell-prompt-function
      (lambda ()
        (concat "[tsu-nera"
                (eshell/pwd)
                (if (= (user-uid) 0) "]\n# " "]\n$ "))))

eshell alias

eshell の alias 設定

eshell 上では eshell/hoge というコマンドは hoge に置き換えられる.

(setq eshell-command-aliases-list
      (append
       (list
        (list "ll" "ls -ltr")
        (list "la" "ls -a")
        (list "o" "xdg-open")
        (list "emacs" "find-file $1")
        (list "m" "find-file $1")
        (list "mc" "find-file $1")
        (list "d" "dired .")
        (list "l" "eshell/less $1"))))

eshell からファイルを開く.

find-file を利用すると, emacs [ファイル名] というかたちでファイル を開くことができる.

(list "emacs" "find-file $1")
(list "m" "find-file $1")
(list "mc" "find-file $1")

eshell から dired を開く.

(list "d" "dired .")

eshell から less を開く

独自巻数を追加.

;; written by Stefan Reichoer <reichoer@web.de>
(defun eshell/less (&rest args)
  "Invoke `view-file' on the file.
\"less +42 foo\" also goes to line 42 in the buffer."
  (interactive)
  (while args
    (if (string-match "\\`\\+\\([0-9]+\\)\\'" (car args))
    (let* ((line (string-to-number (match-string 1 (pop args))))
           (file (pop args)))
      (view-file file)
      (goto-line line))
      (view-file (pop args)))))

新しいシェルを開く

Eshell を複数起動するためには, 一工夫必要.

(defun eshell/make-new-eshell (name)
  "Create a shell buffer named NAME."
  (interactive "sName: ")
  (setq name (concat "$" name))
  (eshell)
  (rename-buffer name))

eshell with helm

Eshell と helm を組合せ.

つかいかた

(use-package helm-eshell
  :init
  (add-hook 'eshell-mode-hook
        #'(lambda ()
        (define-key eshell-mode-map [remap eshell-pcomplete] 'helm-esh-pcomplete)))
  (add-hook 'eshell-mode-hook
        #'(lambda ()
                (define-key eshell-mode-map (kbd "M-p") 'helm-eshell-history))))

shell 共通

ここからは, eshell 以外でも利用できるものを.

shell-toggle

現在ページに移動してでシェルを起動する.

(require 'shell-toggle)
;; eshell をつかう.
(setq shell-toggle-launch-shell 'shell-toggle-eshell)

;; フルスクリーンで切り替え
(setq shell-toggle-full-screen-window-only t)

(global-set-key [M-f1] 'shell-toggle)
(global-set-key [C-f1] 'shell-toggle-cd)

shell-pop

シェルをポップアップ.

設定すると, 下からピョコットシェルがでてくるので便利.

(require 'shell-pop)'

(custom-set-variables
 '(shell-pop-default-directory "~/")
 '(shell-pop-shell-type (quote ("eshell" "*eshell*"
                                (lambda nil (eshell shell-pop-term-shell)))))
 '(shell-pop-term-shell "/usr/bin/zsh")
 '(shell-pop-universal-key "C-t")
 '(shell-pop-window-height 30)
 '(shell-pop-full-span t)
 '(shell-pop-window-position "bottom"))

exec-path-from-shell

環境変数 PATH を引き継ぐ.

(require 'exec-path-from-shell)
(exec-path-from-shell-initialize)

Emacs の起動フォルダを変更する.

C-x C-f で開くディレクトリがデフォルト. Windows だと, Emacs の起動ディレクトリになってしまう.

default-directory を利用する

(when windows-p
  (setq default-directory "C:/cygwin64/home/tsu-nera"))

term-run

interactive なターミナルアプリを動かす.

これで, ますます Emacs に引きこもれる.

(require 'term-run)

(defun term-run-alsamixer ()
  (interactive)
  (term-run-shell-command "alsamixer"))