2019-02-01から1ヶ月間の記事一覧

Gitでコミットのdiffを検索する

Git

よく忘れるのでメモ。 git log -G<regex>を使う。 git-log -G<regex> Look for differences whose patch text contains added/removed lines that match <regex>.</regex></regex></regex>

Emacs-Lispのリスト用関数

よく知られたmapcar以外にもリスト操作のための関数がないか探したら、seq-系の関数が該当するようだ。 www.gnu.org (seq-elt sequence index) (seq-length sequence) (seqp sequence) (seq-drop sequence n) (seq-take sequence n) (seq-take-while predica…

RubyのRefinementされたメソッドの性能

通常のメソッドと比べて性能に差があるのかどうか比べてみた。 require 'benchmark' class Integer def to_comma to_s.reverse.scan(/\d\d?\d?/).join(',').reverse end end def method_no_args end module RefineMethod refine Object do def refine_method…

Rubyのaccept_nonblock(exception: false)

Rubyのサーバーソケットのaccept_nonblockは、IOのread_nonblockと同様にexception: falseでIO::WaitReadableを投げないようにできる。 例外を投げる場合と投げない場合で、どれくらい差があるものなのか実験してみた。 require 'benchmark' require 'socket…

Emacsのimenuで選択される関数名の横幅をもっと広くする

Emacsでプログラミングするときにhelm-imenuでよく関数定義へジャンプするのだが、デフォルトだとimenuの候補に出てくる関数名が60文字でぶった切られて、長い関数名が隠れてしまう。名前空間がネストしたり分かりやすいクラス名やメソッド名をつけると60文…

rubyにおけるソケットのaccept_nonblockの競合

Rubyで1つのサーバーソケットを2つのプロセスから同時にaccept_nonblockするとどうなるか。サーバーのgraceful restartでよくありそうなシチュエーションを試してみる。 実験コード: require 'io/wait' require 'socket' s = TCPServer.new(0) p [ :listen, …

LinuxとWSLの差異: UNIX Domain Socket

LinuxはUNIX Domain Socketを何度もlisten(2)できるが、WSL (Windows Subsystem for Linux)は2回目のlisten(2)がエラーになる。backlogを変更しようとしてはまった。Rubyで検証した結果は次のとおり。 Linux: $ uname -a Linux gut 4.14.74-v7+ #1149 SMP Mo…

1月に読んだ本やマンガ

1月の自分的トピック。 正月に修羅の門を読み返し。 ブラックホールの直接観測成功にワクワクし、重力波関連の本をいくつか探して読み漁る。自分が生きてるうちに一般相対論や宇宙論で進展があるかもと思わせてくれた。 津本 陽の剣術物がKindle化されてたの…

GNU screenからssh-agentを使う

GNU screenからssh-agentを使う場合、エージェントソケットのシンボリックリンクを張るのが常道のようなのだが、WSL環境でホームディレクトリをdrvfsにしているとunix domain socketとシンボリックリンクの相性が悪いようでどうにもうまく動かなかった。 そ…

bashでスクリプトからログインシェルを判定する方法

shoptを使う。名前がshとなっているがbash固有の組み込みコマンドのようだ。 $ shopt login_shell login_shell on スクリプトで条件分岐するときは-qオプションを使うとよい。 $ shopt -q login_shell; echo $? 0