開発

WebPとJPEGの圧縮はどこが違うか

WebPはGoogleが開発した静止画ファイルフォーマットです。 圧縮形式としては大きく2種類あって非可逆圧縮のLossy WebPと可逆圧縮のLossless WebPです。 用途で考えるとLossyはJPEG相当、LosslessはPNG相当と言えます。 どちらにしても拡張子は.webpが使われ…

Web Workerをローカル環境でも使う

Web Workerはブラウザ上でバックグラウンドスレッドを使う仕組みです。UIの応答性を保ったまま画像処理のように時間のかかる処理を実行できるため、画像比較ツールでは積極的に利用しています。 var worker = new Worker('worker.js'); のように簡単にワーカ…

画像の3次元色分布をグリグリ回すツール

コツコツ開発している画像比較ツールに「3次元色分布」という機能を追加しました。これは、画像のピクセルをRGB色空間の中に3次元プロットする機能で、マウスでグリグリ回せます。楽しいです。 普段見ている写真が意外と狭い範囲の色しか含んでいないことと…

画像比較をたすけるツールを作った

画像を並べて比較することに特化したビューワを作ってみました。 Compare.htmlで画像を比較している様子デモページはこちら→ https://tshino.github.io/compare/compare.html コード→ https://github.com/tshino/compare ウェブアプリなのでブラウザ上で動き…

効率的な文字列連結

3つ以上の文字列を何気なく + 演算子で連結すると、必ずしも効率的には動作しないコードになります。 std::string a = "Hello"; const char b[] = "World"; char c = '!'; std::string x = "\n" "<message>" + a + ',' + b + c + "</message>"; 実際は、std::basic_string の実…

C++で構造体の名前付き初期化

C言語のライブラリを使っていると、構造体をデフォルト初期化してから、一部のメンバー変数だけ書き換えて利用することがしばしばあります。 option o = {}; o.name = "hello"; o.size = 1234; func(o); option 構造体のメンバー変数の仕様は一部だけが決ま…

ループ変数を回すだけのFORマクロ

普段、配列と std::vector ばかり使うので、BOOST_FOREACH よりも、単純にループ変数を回すコードが簡単に書ける方が嬉しい。 for (int i = 0, n = v.size(); i < n; ++i) { ... } FOR_INDEX (int i, v) { ... } そのためのマクロを書いてみた。 #include <cstddef> #</cstddef>…

GCCのエラーが見にくいので色を付けた。

コマンドラインでGCCを使っていると、エラーや警告が見つけにくくて不便だと思ったので、色を付けて強調してみた。あと、makeの "make[1]: Entering ..." っていう行がわりと目障りなので、行全体に色を付けて逆に目立たないようにしてみた。 function make_…

書けるコードと書いたコードの間

今はたくさんの「書ける」コードを書くのが忙しい。 「書ける」コードと「書いた」コードの間を埋めるには、ひたすら時間が必要だと思った。もっと「書けるかどうか分からない」コードにチャレンジする時間が欲しい。

svn upする前にそのdiffを全部読む

最近のこだわりは、他の人がコミットした部分の差分をすべて読むこと。モジュール単位でまとめてコードレビューとかじゃなくて、毎日最新の差分を追っかけている方が落ち着く。もちろん前提としてそれなりの規模の小ささがあると思うけど。ほとんどのメンバ…

メンバ変数の強調表示をしよう。

半年くらい前に、ふとテキストエディタの強調機能を使って、C++のメンバ変数に色を付けてみたら、これがとても良かったのでおすすめする。数10行あるメンバ関数のコードを表示したときでも、その中で扱っているメンバ変数が、ぱっと一瞬で把握できる。それが…

フックって大変

Win32のフック機能(SetWindowsHookEx()とか)を試してたのだけど、ちょっと失敗すると簡単に、PCの再起動が必要になって大変。WM_WINDOWPOSCHANGED とかをすべてのウィンドウについてフックする実験をしていたときに、うっかりメインプログラムが例外を起こ…