開発knokあるソースコードにテーブルが配列として含まれているという状況で、メンテナンス性を高めるためにその内容を別のファイルに分離して、機械処理で配列として出力し、それをincludeするという手段を考えました。これをautomakeで実現するのはそれほど難しくないのですが、autotools依存を避けるためにCMakeで実現する方法を調べてみました。最終的に、以下のようなCMakeLists.txtで実現できました。)src/kk2.cがk2rom_hepburn.cをincludeすることを前提としています。scriptを通してtable/k2rom_hepburn.txtから生成します。生成するスクリプトはadd_custom_commandを使います。OUTPUTに出力するファイル名、COMMANDに実行するコマンドを記述します。行が長くなる場合には、改行を任意の箇所で入れられるようです。出力するファイルk2rom_hepburn.cを直接ターゲットとして扱えないようなので、add_custom_targetでgenerate_headersというターゲットを明示して作成し、その依存関係としてk2rom_hepburn.cを記述します。最後に、作成したターゲットを依存関係へ組み込むためadd_dependencyを使います。これで、libkakasiの生成にgenerate_headersが依存することを明記しました。以上のステップを踏むことによって、k2rom_hepburn.txtからk2rom_hepburn.cが生成された上でkk2.cがコンパイルされ、それをもとにlibkakasi.soが出力されます。ハードウェアknok確認できた範囲の情報を記録しておこうと思います。Watchの記事「DRAMスケーリングの課題と打開策」にて解説がなされています。Hammer問題は、DRAM技術が微細化したことで深刻になり始めたメモリセル間の干渉によって発生するエラーの問題だ。DRAMメモリセルの同じRow(行)に対する連続したアクセスが、隣接したRowのセルのデータを不安定し、エラーを生じさせる。この問題は2012年頃から話題になり始めた。A1など)の中で言及した。Hammerに関する論文が発表されたことで、コンピュータ業界で広く知られるようになった。したメモリで、特定のセル(row)に高い頻度でアクセスすると隣接するrowのメモリ内容が化ける、という現象のようです(Rowhammerの論文PDF)。privileges“)。応用例として、ChromeのNaClサンドボックス上で本来実行できないはずの命令を実行させたり、カーネルの権限上昇を行う手法が解説されています。確認手段userlandで試験を行うツールがgithubで公開されています(“https://github.com/google/rowhammer-test“)。editionにもRowhammerテスト機能が追加されているようです。rowhammer_testを実行して、実際にエラーが起きると以下のような出力をして停止します。(0x100)自分はデスクトップ(non-ECC)x2、ノート(non-ECC)x1、サーバー(ECC)x1に対して実施してみましたが、以前から挙動が若干怪しげなデスクトップマシン1台でのみ検出されました。Groupsにてある程度報告が上がってきていますが、発生するときは数十~数百程度の試行回数で発生するようです(上記自分の例では11回目で発生)。自分の他のマシンでは1万以上行っても問題が出ませんでした。guest上でエラーを検出できたという報告もありました。Cygwinでも確認できるよそうです。10対処方法2ちゃんねるソフトウェア板のMemtest86スレッドにてメモリアクセスに関するパラメータを試行錯誤している様子があります。(VRT)」の3つを挙げている。tRFCだけでなくtWRも関係してくるわけか・・・BIOS等でこれらのパラメータを変える、特にリフレッシュ時間(tREFI)を短くすることで改善が見込めるようです。ところで、ちょうど今日のタイミングで2chのdatアクセスが閉じられてしまいました(窓の杜の記事:「2ちゃんねる”の配信仕様が本日より変更。専用ブラウザーの更新・乗り換えを」)。そのままでは、Debianパッケージにもなっているnavi2chやJDなどが利用できない状態です。Memtest86スレッドのような貴重な情報を得られる場だけに残念です。追記(2015/3/16)マシンを再起動する機会があったので、tREFIを設定してみました。3000を超えて問題なくテストが進んでいます(当該マシンのデフォルト値は1700ぐらい)。前回は11回でエラーが発生したことを考えると、かなり改善されているようです。思い処理(動画エンコード)を差せているのですが、それほど目立った性能低下も感じられません。seleniumknokrubyのselenium-webdriverでgmailの操作を試みた結果、なんとか動くものができたのでメモしておきます。同様のことをC#でやっている事例はあったのですが、rubyのCSSセレクタが思うように動きませんでした。結局、CSSではなくIDを指定してボタンの操作をしました。elem.clickURLはこんな感じの組み合わせでメールの内容を指定できます。GMail“の拡張を参考にしました。