Rubyで指定バイト数を超えない文字列の取得

文字エンコーディングにUTF-8を使用した場合、1文字は1バイト〜4バイトです。 ある文字列の先頭からn文字の文字列を取り出すには次のようにできます。 str = "本日は晴天なり" n = 3 str[0, n] #=> "本日は" 先頭からnバイトを超えない最大の文字列を取り出…

MySQL X Protocol を解析してみる

前回 MySQL X Protocol で使用している Protobuf について書きましたが、それだけでは MySQL のプロトコルは解析できません。 TCP を流れるデータは区切りがないので、書き込み側が Protobuf データをただ垂れ流しても、読み込む側がどう読んで良いのかわか…

RubyからProtobufを使う

MySQL 5.7.12 から追加された X Protocol は Protobuf というのを使ってるらしいです。 Protobuf というのをそこで初めて知ったので、とりあえず Ruby から Protobuf を利用する方法を調べてみました。 Protobuf はデータ構造をバイト列にエンコードしたり、…

Ruby の文字列データの複製について

Ruby で String オブジェクトを複製しても、文字列データは複製されません。 data = "a"*10*1024*1024 system "grep ^VmSize /proc/#$$/status" t1 = Time.now a = [] 100.times do |i| a.push data.dup end t2 = Time.now system "grep ^VmSize /proc/#$$/s…

最近のCrystal

昨年末に「Ruby脳にはCrystalつらい Advent Calendar 2015」というのを書きました。 qiita.com 当時の Crystal のバージョンは 0.10 だったのですが、その後バージョンがあがって改善されてたりするので、紹介します。 カレントディレクトリに .crystal を作…

MySQL Shell / X DevAPI / X Protocol

MySQL 5.7.12 で突如登場した MySQL Shell とか X DevAPI とか X Protocol とかが面白そうだったので調べてみました。 Document Store とかも同じ文脈で語られてて、それぞれの用語が何を表してるのかややこしかったので、まずその辺から。 X Protocol mysql…

MySQL ソケットピア証明書認証プラグイン

全然知らなかったんですが、MySQLに「ソケットピア証明書認証プラグイン」というのがあるのを知りました。 http://dev.mysql.com/doc/refman/5.6/ja/socket-authentication-plugin.html これを使うとOSのログインユーザーと同じ名前のMySQLユーザーであれば…

Twitter からの文字化けメール

Twitter を名乗るメールアドレスからメールが届いたのですが、Subjectが文字化けしていました。 Subject: ã¨ã¿ãŸã¾ã•ã²ã‚さん、Twitterからの感謝のメッセージです。 いまのTwitterがあるのは、皆さんのおかげです。 10年前の今日、ひとつのツイートからすべ…

flock(LOCK_EX) で EBADF

ちょっとハマったのでメモ。 ファイルを flock() で排他的にロックするために次のようにすると成功します。 % ruby -e 'File.open("hoge").flock(File::LOCK_EX); puts "OK"' OK が、NFS 上で同じことをやると失敗します。 % ruby -e 'File.open("hoge").flo…

Postfix 3.1 の新機能 / JSON形式キュー表示と配送流量制御

Postfix 3.1 がリリースされました。 個人的に気になった新機能は JSON-format Postfix queue listing. Destination-independent delivery rate delay の2つです。 JSON形式キュー表示 今までは mailq や postqueue -p コマンドで次のような表示がされていま…

Crystalの文字エンコーディング

2/16 に Crystal 0.12 がリリースされました。 0.12 では Crystal に文字エンコーディング変換の仕組みが導入されました。 Ruby と同じような感じで String#encode や IO#set_encoding 等が追加されました。 といっても Crystal の文字エンコーディングは Ru…

文字化けメールその2

スパムメール…というかフィッシングメールが送られてきたのですが、文字化けしていました。 文字化けメール研究家としては(ry メーラーで見ると Subject と本文が次のようになっていました。 From: 【りそな_y行】 <mp@resona-gr.co.jp> Subject: 本人_J_^サ_`ビス 文字化けとし</mp@resona-gr.co.jp>…

文字化けメール

DELL にユーザー登録したらメールが送られてきたんですが、そのメールが文字化けしてました。 文字化けメール研究家としては解析せざるを得ません。 メーラーで見ると Subject が次のようになっていました。 デルアカウントに$4EPO?$$$?$@$-!"$"$j$,$H$&$4$6…

1kg 前後のノートPC

自分のメインPCはノートPCで ThinkPad X220 を使ってるんですが、もう4年半前に買ったものだし重いので、新しくてもっと軽いPCが欲しいと思ってます。 重量 1kg 程度、画面は13インチ、CPUは Core i5、メモリ8GB くらいを条件にして探してみました。 なお、…

Crystal でバイナリデータを扱う

前回も書いたように Crystal の String のエンコーディングは UTF-8 固定です。なので Ruby のようにバイナリデータを String オブジェクトで扱うことはできません。 バイナリデータは Pointer, Slice, MemoryIO で扱うことができるようです。 自分でもよく…