Mysql2 の "MySQL client is not connected" について

Rails アプリケーションのドメインロジックを共有するためにバッチでも Rails を使っているケースはあるかと思います。
先日、長時間稼働しているバッチで MySQL サーバの再起動後に MySQL client is not connected が起きたんですが、数年 Rails を使っていて初めて遭遇したエラーだったので、次の 2 点について調べてみました。

CloudWatch Alarms の暗黙の仕様(予想)

CloudWatch Alarms でアラームを設定しようと思って動作確認をしていたら、ドキュメントを読んでも理解できない挙動がいくつかあったのでまとめてみました。もしかしたらドキュメントに書いてある内容もあるかもしれません。また、バグじゃないかと思う挙動もあるので、その辺はそのうち修正されるかもしれません。

S3 のファイルを HTTP で取得するコマンドを作った

Aws::SSM::Client#get_command_invocation の返り値には standard_output_url, standard_error_url が含まれているんですが、いちいち s3:// の URI に変換して aws s3 cp s3://... - で確認するのも辛いので、URL をそのまま指定すればオブジェクトの内容を出力するコマンドを作りました。

ブラウザのクライアントサイドのみでバイナリを編集して結果を保存する

以前、日本語を含む Keynote を slideshare にアップロードするというエントリーを書いたんですが、普段ターミナルを使わない方でも変換できるように、ブラウザに Drag & Drop すれば変換された PDF を保存できるようにしました。
Chrome 60.0.3112.90, Safari 10.1.1, Firefox 54.0.1 では動きましたが、ちょっと古いバージョンや IE だと動かないかもしれません。

論理型の設定値を RDB に保存する場合の選択肢と各々のメリット・デメリット

ユーザごとに特定の機能に対して ON/OFF の設定値を持たせることはよくあると思います。
RDB にそのような設定情報を持たせる場合の選択肢として大きく次の 5 つが考えるんじゃないかと思います。

Sloppy Phrase Search の slop とは

Solr というか Lucene には Sloppy Phrase Search (Proximity Search) という機能があります。
"foo bar" で検索すると "foo bar" というフレーズの存在するドキュメントしかヒットしませんが、"foo bar"~n だと foo と bar の間に n 単語存在していてもヒットします。この n の値が slop と呼ばれるものです。例えば n = 1 であれば "foo bar"~1"foo baz bar" というフレーズの存在する文書もヒットします。

Rails でも JSON.generate を使って高速にシリアライズしたい 〜Rails の to_json は遅いが何を実現しているのか〜

Rails では JSON モジュールの提供している to_json を上書きしています
JSON モジュールの to_json は C 言語のレイヤーで再帰処理しますが、Active Support の提供している to_json (ActiveSupport::JSON.encode) は Ruby のレイヤーで再帰処理する上、文字列の処理は毎回 ActiveSupport::JSON::Encoding::JSONGemEncoder::EscapedString を生成するので格段に遅くなります。
そのため、速度が求められる箇所での JSON のシリアライズには JSON.generate を使うことを検討すると良いです。

私的アンリーダブルコード―他人を発狂させるための 9 のテクニック

コードはたいてい一度しか書かれませんが、何度も何人も読むことになります。
普段何気なく書いているコードが他人の時間と精神を削っているかもしれません。

GDBM で学ぶ Extendible Hashing

最近仕事で GDBM を使う機会があり、GDBM で使われている extendible hashing に興味を持ったのでまとめてみました。
なお、今回対象にしている GDBM のバージョンは 1.12 です。

InnoDB の行レベルロックについて解説してみる

自分の浅はかな理解だと、Deadlock が起こる理由が説明できないケースに遭遇したので、InnoDB の行レベルロックについて調べてまとめてみました。
「行レベルロックだと、同じ行を更新する場合にしか Deadlock が起こらないんでしょ」と思っているような人が対象です。
また、主に InnoDBのロックの範囲とネクストキーロックの話 - かみぽわーる を参考にさせていただいたので、そちらの内容がすんなり理解できる方には冗長な内容だと思います。
MySQL のバージョンは 5.6.33 です。

広告