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 です。

MeCab の形態素解析誤りを修正する生起コストの求め方

「かつおたたき」、「りんごジュース」、「ロース肉薄切り」を MeCab + IPA 辞書で形態素解析すると以下のようになります。

Redshift の UDF では非 ASCII 文字を含む unicode 型を返すとエラーになる

次のように unicode 型を返す UDF を定義すると、返り値に非 ASCII 文字を含む場合にエラーになります。

Rails の send_data で Windows 用の zip ファイルを送る

Windows 用にファイル名の文字コードを CP932 にしたいわけですが、ハマりどころが多かったのでメモです。
次のようなコードで send_data (not send_file) に指定する zip データを生成可能です。

MeCab ソースコードリーディング私的メモ(形態素解析編)

先日、次のエントリーを書きました。
日本語形態素解析の裏側を覗く!MeCab はどのように形態素解析しているか - クックパッド開発者ブログ

日本語を含む Keynote を slideshare にアップロードする

次のエントリーにあるように、最近 Keynote を PDF に変換して slideshare にアップロードすると、Osaka 等一部のフォントを除いて日本語が表示されなくなりました。
KeynoteのスライドをSlideShareにアップロードすると日本語が表示されない問題 - Qiita

MobileSafari でプログレスバーを出さないように画像を読み込む

MobileSafari では、どうやら window load のタイミングで画像の読み込みを開始したとしても、その画像の読み込みが完了するまでプログレスバーが表示され続けます。setTimeout などで読み込み開始時間をずらせば回避できますが、プログレスバーが消えたタイミングを取得する術はありません。
何が困るって、バックグラウンドで画像を読み込みたいのに、プログレスバーの表示が終わる前に読み込みを開始するとめちゃくちゃ重いページみたいな印象を与えてしまうわけです。

広告