Glide Note

glidenote's blog

ackを捨てて、より高速なag(The Silver Searcher)に切り替えた

パターン検索にはackを利用していて、通常利用時には特に不満は無かったんですが、 ファイル数が多いディレクトリだと遅かったので、もっと他の方法が無いかと調べていたら ackの3〜5倍速いというThe Silver Searcherというものが あったので導入。

The Silver Searcherの特徴

公式に書いてあるThe Silver Searcherの特徴

  • ackの3〜5倍高速
  • .gitignore.hgignoreに記載されているものを検索対象から除外
  • 検索対象から除外したいファイルは.agignoreに記載
  • agというコマンド名で、ackと比べてコマンドが短い(33%減!)

なぜ高速なのかは https://github.com/ggreer/the_silver_searcher#how-is-it-so-fast に記載されています。(要約しにくいので、原文を読んでください!)

The Silver Searcherの導入

Macの場合はhomebrewで導入

1
brew install the_silver_searcher

2013/10/31 最近は下記でいけると新卒氏に教えてもらったので追記

1
brew install ag

CentOS6、SL6はRPMが用意されているので、下記を利用

1
2
sudo rpm -ivh http://swiftsignal.com/packages/centos/6/x86_64/the-silver-searcher-0.13.1-1.el6.x86_64.rpm --test
sudo rpm -ivh http://swiftsignal.com/packages/centos/6/x86_64/the-silver-searcher-0.13.1-1.el6.x86_64.rpm

ソースから導入する場合(コンパイルにautomakeとかpcre-develが必要だと思いますので適時入れてください)

1
2
git clone https://github.com/ggreer/the_silver_searcher
cd the_silver_searcher && ./build.sh && install

RHEL6系以外での利用も、specファイルが含まれているのでRPM作成も簡単に出来た。

The Silver Searcherの利用方法

The Silver Searcherはagというコマンドを用い、

1
ag [options] {pattern} [{directory}]

という感じで利用し、ほぼackと同じ。

実際に私の環境(MacBook Air)で、ackagで実行時間を計測した結果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# ファイル数
[akira@dev001] $ find ~/repos -type f | wc -l
    3518

# ディレクトリ容量
[akira@dev001] $ du -sh ~/repos
894M    .

# ackの実行時間
[akira@dev001] $ time ack package ~/repos |wc -l
    1475
    ack package ~/repos  0.84s user 0.26s system 81% cpu 1.341 total

# agの実行時間
[akira@dev001] $ time ag package ~/repos |wc -l
    1668
    ag package ~/repos  0.23s user 0.18s system 172% cpu 0.235 total

3500個くらいのファイル検索でもackと比べて、agが高速なのがわかる。 多分ファイル数がディレクトリだとさらに効果がありそう。

実際にいろいろなディレクトリで何回か検索を実行してみても、agの方が高速でした。

VimからThe Silver Searcherを利用する

ackと同じで、Vimから使うことが多いと思うので、Vimから使えるようにする。 ag.vimというプラグインがあるので、それを利用。

Vundleを利用している場合は.vimrcに下記を記載してBundleInstall

1
Bundle 'rking/ag.vim'

NeoBundleの場合は下記を記載してNeoBundleInstall

1
NeoBundle 'rking/ag.vim'

Vim上から下記のような形で利用

1
:Ag [options] {pattern} [{directory}]

Vim上からも高速にパターン検索が出来るようになって素晴らしい。

ZshからのThe Silver Searcherを利用する

当然zshの補完が効かないと話にならないので、zshの補完関数を書いた。

下記のように補完されます。

追記

zsh-completionsに出していたpull requestがmergeされたので、zsh-completionsからでも利用可能です。

ackと比較して動作もかなり高速だし、vim、zshから快適に使えるようになったので完全に切り替え。

jumping to the finder location in terminal

Markedの作者のBrett Terpstra氏のブログを 読んでいて有益な情報があったので自分用にメモ。(タイトルもそのままで)

MacのFinderで開いているディレクトリにterminal上で移動するTips。(ついでにopen .のaliasを作っておくと逆も楽に出来る)

下記を.zshrcなどに追記

  • fでカレントディレクトリをFinderで表示
  • cdfでFinderで開いているディレクトリをterminalで表示

TotalFinderを使ってるけど、ちゃんと開いているタブで動作してくれた

ThumperでSubsonicを聴き続けるためにSubsonicに寄付をした

先日からThumperというMacのアプリを利用して Subsonicを聞いていたんですが、 急に曲が再生出来なくなったので、調べたところアプリなどからSubsonicを利用している場合、 30日間しか利用出来ないらしく、Subsonicに最低10ユーロ寄付をしないといけないらしい。(知らなかった!)

Subsonicに依存していて、今さら離れることが出来ないので、ちゃんと寄付をしようと Subsonicの画面からpaypalで支払い試みるもうまく出来ず、 これも調べたらどうやら日本からの寄付は出来ない模様。

下記サイトを参考に

paypalで[email protected]を指定して10ユーロ支払いをしたら すぐにライセンスキーが届いて、Subsonic上でライセンス登録をして、 Thumperでまた再生出来るようになった。

SummerFondue.com で公開されているHouse Mixのmp3が1個200MBくらいあって、 iPhoneとかに入れてると容量がかなりきついので、さくらVPSで

1
wget http://www.summerfondue.com/downloads/sfs166

みたいな感じで取ってきて、Subsonic経由で聴いてます。 (ファイル一斉に落とすと先方サーバの負荷になるからsleepとか入れましょう)

最近Shureのイヤホン SE215SPEを買ったんですが、 ダンス系音楽向けに低音が結構強めなので、ハウスとかを聴くのにかなり良い感じ。 Shureのイヤホンは高価なイメージがあったんですが、1万円くらいと手頃な値段で 音質的には好みだったので、良い買い物をしました。
ただかなり音量を小さくしても周りの音がほとんど聞こえないので、遮音性が高すぎるかも。

あとThumperを利用しているとSubsonic+Nginxのアクセスログが結構流れるので、 Nginxのログを今流行のLTSV形式にして、Fluentdに流すとかがいろいろと簡単に検証にも使えて一石二鳥。

最近はMacのiTunesディレクトリをSubsonicのディレクトリにrsyncかけてて、 SubsonicがiTunesのバックアップも兼ねており重要性が増してきた。

tmuxのpipe-paneを利用してリモートサーバでの作業ログをローカルに記録する

sshmoshでリモートサーバに接続する際に、tmuxのwindowを自動で生成しており、 リモートサーバに接続tmuxがセットになっているので、tmuxを使ってリモートサーバでの作業ログをローカルに保存出来ないかと思って調べていたら pipe-paneを利用すると可能ぽいのでやってみた。

利用環境はtmux 1.7です。(OSはMountain Lion、SL6.1、CentOS6.3全てで動作しました。)

ログ用ディレクトリを用意

pipe-paneを利用する前にログ用ディレクトリを作っておく。

1
mkdir ~/.tmux/

.tmux.confの設定

下記のように設定

  • prefix key + Hでロギング開始
  • prefix key + hでロギング終了

という感じです。

そうすると~/.tmux/tmux-hogemoge.logみたいなログが出来上がる。 hogemogeの部分はtmuxのwindow名が入ります。tmuxのバージョンが古いと tmux-#W.logという残念な感じにファイルが出来上がります…

私はリモートサーバごとでtmuxのwindowが自動で生成して分けているので、

  • ~/.tmux/tmux-web010.log
  • ~/.tmux/tmux-db001.log
  • ~/.tmux/tmux-db002.log

といった感じでログファイルが出来上がる。

scriptコマンドと同じで、プロンプトとかに色を付けたりしていると、 ログに制御文字が入ってかなり見にくいので、catless -Rで見ると 良い感じで表示出来ます。

便利。

美しい日記アプリ「Day One」の記事作成支援vimプラグイン NewDayOne.vimを作った

この記事は、Vim Advent Calendar 2012の57日目の記事です。 56日目の記事は@tyruさんのGitHubでの仕事を快適にするVimコマンドを紹介します - Humanityでした。

MacにはDay Oneという非常に美しい日記、テキストログアプリがあり、 今回はそのDay Oneの記事作成が出来るNewDayOne.vimという プラグインを作りましたので紹介させていただきます。

プラグイン名NewDayOne.vimDay One CLIdayone newというコマンド名から取っています。

日記アプリDay Oneの特徴

NewDayOne.vimで出来ること(2013年1月26日現在)

  • 新規記事作成(:NewDayOne)
  • vimからDay Oneの起動(:OpenDayOne)

Day One CLIを利用しているため、既存ファイルの編集は出来ず、新規記事作成だけ可能になります。 (2013年1月26日現在Day One CLIには新規記事作成しか機能がありません)

またDay Oneはmarkdownに対応しているのですが、記事自体のデータはxmlで管理されていて、 xmlファイルをparseしてvim上から管理するのは個人的にちょっと違うかな-と思ったため実装してません。 (そこまでやるとDay Oneを利用している意味も無い気がするので)

どんな感じのプラグインなのか動画を作成しました。

NewDayOne.vimの導入方法

必要なソフト

NewDayOne.vimはDay Oneの記事作成支援プラグインなので、

が必要です。

導入方法

導入にはvundleか、NeoBundle を利用すると楽です。

vundleの場合は、

1
Bundle 'glidenote/newdayone.vim'

NeoBundleの場合は、

1
NeoBundle 'glidenote/newdayone.vim'

を.vimrcに記載し、:BundleInstall:NeoBundleInstallを実行して導入してください。

NewDayOne.vimの使い方

新規記事の作成(:NewDayOne)

1
:NewDayOne

Day One CLIに依存しており、機能的に新規作成しか出来ないため、 記事作成の前に、確認プロンプトを出すようにしています。

Day Oneの起動(:OpenDayOne)

1
:OpenDayOne

NewDayOne.vimを作った理由

エントリー作成後に修正が出来ないのですが、vim-quickrun+Markedで ちゃんと表示確認をして、完成したら:NewDayOneでエントリー作成すれば特に問題ないかなーと。

私は今のところ、memolist.vimで日報や日々の作業ログを作成して、それをDay Oneに渡して閲覧のために活用してます。

Enjoy Vim Life!!

Day One カテゴリ: ライフスタイル
価格: ¥850

次回のVim Advent Calendar 2012は@thincaさんです。