pry-debugger と pry-nav の相性が悪い

pry-debugger と pry-nav の両方をインストールしていると pry:23: stack level too deep (SystemStackError)と出て pry コマンドが起動しなくなってしまった. 調べてみると pry-debugger と pry-nav の相性が悪いようで,pry-nav をアンインストールしたら…

vim-smartinput のスマートか分からない設定

Vim

vim-smartinput は @kana さん作の Vim プラグインで,賢い入力補助を行なってくれます. inoremap ( ()<Left> inoremap { {}<Left> とか設定している人には特にオススメです. 詳細については smartinput.txt を見ていただければ分かると思います. インストールするだ</left></left>…

OCaml 4.00.0 で omake 0.9.8.6_0.rc1 をビルドする

Arch Linux で omake が欲しい場合は AUR を使って yaourt -Su omake※すでに AUR のパッケージは修正されたので現在は以下を行う必要はありません.などとすれば良いですが,最新版の OCaml でビルドする場合大量の warning が出て,warning を error として…

unite-n3337 を作った

N3337 という,C++ の現行規格にもっとも近いドラフトがあり,今まで規格について調べたいときは N3337 の PDF ファイルを開いていました. しかし,いちいち開いて検索ワードを打ち込んで検索結果を1つずつ辿って…という作業が面倒だったので,unite.vim で…

Vim で PDF ファイルを読む

Vim

優秀な PDF リーダーは多数あるため基本的にはそちらで読みますが,PDF からテキストをコピーしてくる場合や,ちょっと確認する程度で良い場合はわざわざ PDF リーダーを開くのは億劫ですし,無駄な作業も増えます.そこで,PDF を読むコマンドを作ってみま…

neobundle.vim の遅延読み込みを使って gVim でしか使わないプラグインを定義する

Vim

僕は少しファイルを修正したりするときは zsh から CUI の Vim を,がっつり1つのディレクトリのソースを編集するときは gVim を使うようにしています.そして,プラグインの中には GUI のみでしか動作しないものや,gVim でしか使っていないプラグインも幾…

constexpr 関数を書きやすくする RETURN マクロ

C++

C++11 では関数の戻り値型を後置する構文が新たに入りました. auto plus(int a, int b) -> int { return a+b; } C++ の型はテンプレートが絡むと長くなりがちなので,今までは戻り値型だけで改行したりテンプレートのデフォルト引数を使って戻り値型を定義…

Effective C++ 読書会 Vol.1 に行ってきた

C++

C++ の名著,Effective C++ の読書会パート1に行ってきました. 具体的には,Effective C++ の各項に沿って怖い人達が熱く語る感じの内容でした. 3項までしか進まなかったんですが,2時間ほどかなり濃い内容で楽しめました.id:uskz さんと id:Cryolite さ…

QuickRun から unite-qf へ出力する outputter を書いた.

Vim

ソースは 404 · GitHub に置いています.インストールは他のプラグインと同様に NeoBundle 'rhysd/quickrun-unite-qf-outputter' とするのが簡単です.QuickRun と unite-qf はこちら. thinca/vim-quickrun · GitHub sgur/unite-qf · GitHubunite-qf は qui…

ヒアドキュメントを便利にする String#undent メソッド

元ネタは Homebrew の String#undent メソッドです. ここで紹介するものはそれを少し賢くしています. class String def undent min_space_num = self.split("\n").delete_if{|s| s=~ /^\s*$/ }.map{|s| s[/^\s+/].length }.min gsub(/^[ \t]{,#{min_space_…

GHCi を少しだけカラフルにする ghci-color を書いた

ghci-color 書いたといっても,ただ sed で色つき文字列に置き換えているだけなので色々お粗末です. 一応こんな感じ.

VimFiler で Git のルートディレクトリを一発で開く

Vim

カレントディレクトリが Git リポジトリ内にある場合,そのリポジトリのルートを VimFiler で開くコマンドを fg に割り当てます. .vimrc に次のように書けば OK です. function! s:git_root_dir() if(system('git rev-parse --is-inside-work-tree') == "t…

ちょっと編集したいとき と ガッツリ編集したい時 で読み込む設定ファイルを変える

Vim

Vim の使い方は実に人様々です.「プラグインは1つも入れず,設定だけ変える」派から「100以上プラグインを入れてガチガチに固める」派まで居ます. これはちょっと極端な例ですが,そこまででなくても「プラグインが便利なのは分かるけれど,基本的にシェル…

mikutter の 正規表現フィルタリングプラグインを書いた

ダウンロードはこちらから.regex_filterインストールは $HOME/.mikutter/plugin に regex_filter.rb を放り込むだけです.設定画面に新しいタブが追加されます.最近は Arch Linux で mikutter を使って Twitter を閲覧しているのですが,フィルタ機能が弱…

rbenv は起動が遅い?

僕の環境では zsh の precmd() に Ruby のスクリプトをフックしているので,コマンド入力ごとに Ruby のスクリプトが走るのですが,rbenv に変えた時に precmd() でもたつくような気がしたので,少し測ってみました. rbenv の ruby を使った場合 % time $HO…

Proc に2項演算子を定義してみた

class Proc %w[ + - * / ** % | & ^ > < >= <= == <=> >> << =~ != !~ ].map{|i| i.to_sym }.each do |op| define_method(op) do |rhs| apply_binary(rhs,&op) end end private def apply_binary rhs raise "block is needed" unless block_given? Proc.new{…

Proc#=== の使い道

Proc オブジェクトの呼び出し方法はいくつかあります proc = Proc.new{|i,j| i*j} proc.call(2,3) #=> 6 proc.(2,3) #=> 6 proc[2,3] #=> 6 proc === [2,3] #=> 6 が,一番最後のはどこで使うんだろうと思っていたんですが,case when では === を用いて比較…

REXML で XML を解析し Hash に変換する

REXML は Ruby に標準でついてくる XMLパーサです.XML な文字列を食わせるとパースして REXML::Document として利用できます. しかし,REXML のドキュメントを見て扱いを知らなければならないので,Hash で取りたいこともあると思います.実際 ActiveSuppo…

プリプロセス時標準入力

C++

IOCCC のネタを漁っていたら面白いものがあったのでパクってみた. #include <iostream> int main() { char str[] = "" #include "/dev/tty" ""; std::cout << str << std::endl; return 0; } コンパイル時に "Hello, world!"^Dと入力(^Dは Ctrl+D)してコンパイルし</iostream>…

Awesome のショートカット一覧

Awesome は Linux のタイル型ウィンドウマネージャです. 最近また Awesome を使う機会が増えてきたので,思い出しがてらメモ. キーバインドや挙動,デスクトップウィジェット,はたまたライブ壁紙までカスタマイズ次第でなんでもできますが,とりあえずデ…

可変個数のコンテナに適用できる zipWith のようなもの

C++

std::transform では1つのコンテナに対して所謂 map の操作を行えたり,2つのコンテナに対して所謂 zipWith を行えます.今回は C++11 で新たに導入された Variadic Templates を使って,対象となるコンテナの数を任意個になるように拡張してみました. temp…

インクルードガード用の neocomplcache スニペット

neocomplcache のスニペットには Vim script の式を使って展開する機能があります. c.snip snippet include_guard alias inc_guard prev_word '^' abbr #if !defined HOGE #define HOGE #endif #if !defined `toupper( substitute( expand("%"), "\\.", "_"…

Vimmer 達の vimrc

Vim

有名な Vim 使いが github で公開している vimrc を簡単にまとめてみました. 一段落ついたら参考にして自分の vimrc を見直そうと思います. Shougo さん https://github.com/Shougo/shougo-s-github/blob/master/vim/.vimrc kana さん https://github.com/…

生配列を std::array に変換する

C++

constexpr で扱えて,実行時の効率もよいデータ構造+アルゴリズム - 危ないRiSKのブログ コンパイル時に配列を結合する - iorateの日記index_tuple を使って constexpr な生配列から std::array への変換の処理をする配列を書いてみました. int main() { /…

メタプログラミング入門(2) ネストしたスコープ

Ruby では,一般的な手続き型言語と違いスコープがネストしません. var1 = 0 class Hoge # var1 は見えない var2 = 1 def huga # var1 も var2 も見えない end end class 内で共有できる変数としてインスタンス変数がありますが,特定のメソッドだけ共有し…

Ruby メタプログラミング入門(1) 動的なメソッドディスパッチ

メソッドが存在しない場合に必ず呼ばれるメソッド,method_missing をオーバーライドすることにより実現します. #!/usr/bin/env ruby # -*- coding: utf-8 -*- # 1度の試行につき4回実行されるルーレット.ただし,前回の値より小さい値しか出ない. class …

Homebrewで最新のGCC 4.6.3 をインストールするためのパッチを書いてみた

こちらに置いています. https://github.com/rhysd/others/blob/master/gcc-4.6.0-to-4.6.3.patchインストール方法は Homebrewで最新のGCC ( gcc-4.6.2 ) をインストールするためのパッチを書いてみた と同じなので割愛. 以前この方法でgcc-4.6.2をインスト…

D言語のテンプレートで FizzBuzz

D言語を少し触ってみたので. import std.conv; template fizzbuzz(int n) { static if (n == 0) { immutable string fizzbuzz = ""; } else { immutable string fizzbuzz = fizzbuzz!(n-1) ~ ( n%15 == 0 ? "FizzBuzz" : n%3 == 0 ? "Fizz" : n%5 == 0 ? "B…

rbenv で gem を使った時に rbenv rehash しなくて良くする

rvm が多機能&壊れやすすぎて Homebrew の ruby を直にインストールして使っていたのですが,Homebrew の ruby はバージョンを上げるときにgemで入れたコマンドを引き継いでくれなかったり,gemでインストールしたコマンドを反映してくれないので,rbenv と…

TwitterアプリケーションのコールバックURLにlocalhostを指定する

Twitter Developers でTwitterアプリケーションを登録する際に Callback URL というものを設定することができます. これは,そのTwitterアプリケーションで認証した後にどのURLに戻るかを指定するためのものです. 開発中はローカルにサーバを立ててテスト…