Rubyの文字列検索いろいろ

単純な文字列検索ならString#include?が速い。 正規表現なら余分なMatchDataを生成しないRegexp#match?が速い。 MatchDataが生成されると遅くなる。 String#~は何らかの最適化が入っているようで、検索後にMatchDataにアクセスしなければRegexp#match?の次に…

5月に読んだ本やマンガ

5月の読書メーター読んだ本の数:51読んだページ数:9700ナイス数:3スライム倒して300年、知らないうちにレベルMAXになってました(4) (ガンガンコミックスONLINE)読了日:05月02日 著者:森田 季節,シバユウスケきっと愛され女子になる!(2) (まんがタイ…

4月に読んだ本やマンガ

4月の読書メーター読んだ本の数:19読んだページ数:2728ナイス数:0うわばみ乙女ずかん 1 (ヤングアニマルコミックス)読了日:04月01日 著者:後藤羽矢子雀荘のサエコさん 4 (近代麻雀コミックス)読了日:04月01日 著者:重野 なおきまほろばきっさ 1 (バン…

MMCXケーブル購入

LDAC対応Bluetoothレシーバで使っていたイヤホンのケーブルが断線したので、新しくリケーブル用のケーブルを購入した。 こんなこともあろうかとMMCX対応のイヤホンにしていたのだった。 https://www.amazon.co.jp/オヤイデ-HPC-26T-MMCX用-イヤホンケーブル-…

AnsibleでDocker APIにアクセスするときのTLSバージョンを指定する

環境変数DOCKER_SSL_VERSIONで設定する。 export DOCKER_SSL_VERSION=TLSv1_2 設定値はPythonのssl.PROTOCOL_...に対応している。以下の設定値が使えるようだ。 ssl.PROTOCOL_TLSv1 ssl.PROTOCOL_TLSv1_1 ssl.PROTOCOL_TLSv1_2

折りたたみロードバイクReach R20

フルサイズのロードバイクやマウンテンバイクの輪行がつらくなってきたので、折りたたみロードバイクのPacific Cycles Reach R20を注文してしまった。 いかにも走りそうな形状。ディスクブレーキ対応。ロードバイクのディスクブレーキのデファクトが固まる前…

DRbでプロセスをまたがった大域脱出ができるか確認した

結論としてはできなかった。 Rubyのバージョン: $ ruby -v ruby 2.6.2p47 (2019-03-13 revision 67232) [x86_64-linux] 確認用のコード: require 'drb/drb' require 'drb/unix' require 'logger' stdlog = Logger.new(STDOUT) module Jump def ping yield('p…

3月に読んだ本やマンガ

3月の読書メーター読んだ本の数:24読んだページ数:4193ナイス数:0天竺熱風録 5 (ヤングアニマルコミックス)読了日:03月01日 著者:伊藤勢明治撃剣会 (文春文庫)読了日:03月01日 著者:津本 陽NHK「100分de名著」ブックス 孔子 論語読了日:03月03日 著…

2月に読んだ本やマンガ

2月の読書メーター読んだ本の数:15読んだページ数:2699ナイス数:0法華経 2018年4月 (100分 de 名著)読了日:02月03日 著者:エイジ’87 1 (1巻) (ヤングキングコミックス)読了日:02月03日 著者:上山 道郎武の心 (文春文庫)読了日:02月07日 著者:津本 …

RubyのRefinementでモジュールincludeやalias定義はどうなるか

確認してみた結果、refineでincludeしたモジュールのメソッドや定義したエイリアスは、refinementをusingしたときだけ有効になった。 refineでincludeしたモジュールはusingしても見えないがメソッドは有効になるようだ。 確認コード: module IncludeMethod …

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

TLSのローカル動作確認用のオレオレ証明書作成

方針 設定ファイルやツールを使うとなにがどうなっているか分からなくなるのでOpenSSLの素のコマンドを使って作る。 OpenSSLには様々なコマンドやオプションがあるが必要最低限のものだけを使う。 作った証明書を実際に使ってTLSで接続できることを確認する…

近況

最寄り駅近くのジョナサンが閉店してた。よく使ってたので悲しい。 帰省時に輪行したロードバイクのトップ側のギアが入らなくなった。 いろいろ調べてみたらどうやらSTIの不具合らしい。直さなきゃならんのだがSTIは高いんだよなあ。

RubyのThread::SizedQueueのチューニング

前提 Thread::Queueは際限なくサイズが伸びるので使わない。Thread::SizedQueueを使う。 生産者(Thread::SizedQueue#pushする)側は1スレッドとする。 消費者(Thread::SizedQueue#popする)側は複数スレッドとする。 結論 いろいろい試してみたが、次のように…

EmacsからRubyのTest::Unitのテストを実行する

経緯 rubyunitからの流れでRubyのテストフレームワークはずっとTest::Unitおよびその互換I/Fを使っている。実は流行りのRspecは使い方を知らなかったりする。 探し方がよくないのかEmacsとTest::Unitを連携させる既存のパッケージが見つからなかったので、Em…

12月に読んだ本やマンガ

12月の自分的トピック。 イダ タツヒコの昔の既刊がKindle化 『キン肉マン』ジャンプ 運命の五王子最強ストーリー列伝!!、最新連載のオメガ・ケンタウリ六槍客編にむけてよいおさらいになった 裏世界ピクニックのコミカライズが面白かったので原作小説を購入…

dRubyのパフォーマンス測定

経緯 プロセス間通信でdRubyを使おうと思ったが、パフォーマンスが気になったので測定してみた。 コード ベンチマークは自作の次のスクリプトを使う。 github.com のbenchmark_basic.rbを使用。 ベンチマークコードの抜粋: n = ARGV.shift || '1_000_000' n …

11月に読んだ本やマンガ

11月の読書メーター読んだ本の数:16読んだページ数:1488ナイス数:1聖闘士星矢THE LOST CANVAS冥王神話 1 (少年チャンピオン・コミックス)読了日:11月03日 著者:車田 正美聖闘士星矢 冥王神話 2 (少年チャンピオン・コミックス)読了日:11月03日 著者:…

かけ算の順序問題

かけ算の順序問題 - Wikipedia 1冊108円のノートを5冊買うと何円でしょう という問題を 108×5=540 と 5×108=540 のどちらか片方だけを正しいとするか両方とも正しいとするかという問題。 ウィキペディアをみても百家争鳴でみなが納得する統一見解はなさそう…

Rakeのタスククラスの作法

Rakeで同じパターンのタスクを繰り返すとき、メソッドでサブルーチン化してもタスク関連の記述(descとか)が冗長なのでいまいち感がぬぐえない。 のでタスククラスの書き方を調べた。 明文化されたルールが見つからなかったが、サンプルを見たりRakeのコード…

QDBMのrubygem化

ラズパイの32bit環境で2GB超のデータベースを扱えるアプリケーション組み込み型のKVS(Key-Value Store)を使いたかったので、QDBMをgem化してみた。 経緯 ラズパイ上でGDBMを使ってアプリケーションを動かしていたが、データベースファイルのサイズが2Gバイト…