Fluentd 入門 〜運用に必要な基礎知識〜
最近業務で Fluentd を触ることが出てきて入門したんですが、最初のうちはトラブルが起きた時に何が起きているのか、どう対処したら良いのかがさっぱりわからなかったので、「Fluentd ってログの収集とかに使われるやつでしょ?」程度の知識しかなかった過去の自分に向けて「とりあえずこれぐらいは知っておけ!」と言いたい内容をまとめてみました。
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 です。