Kenichi Maehashi's Blog

脳内コアダンプ

RSS
Category: Computer
個別に記事を書くほどでもないのだが、最近作ったライブラリ/ツールをまとめて紹介。
  • pypict
    • Microsoft PICT (Pairwise Independent Combinatorial Tool) というペアワイズテストケース生成ツールの Python バインディングライブラリ (Cython)。
    • テストモデル(パラメタ/制約条件)を、PICT の DSL ではなく Python の辞書/関数で与えることができるのがポイント。
    • Microsoft PICT はデフォルトでは Linux の共有ライブラリがビルドできなかったので pull-req を出した (Microsoft プロダクトへの初コントリビュート)
    • CLA に sign する過程で CLA Assistant というプロジェクトを知る。コントリビュータの CLA 同意状況を GitHub のログインと紐づけて管理してくれるようだ。便利そう。
  • nvget
    • NVIDIA Developer サイトから、ユーザ認証の必要なファイルを CLI でダウンロードするツール。NCCL のバイナリを Web ブラウザでダウンロードしてから scp するのが面倒だったので書いた。
    • 実装は Selenium の Python Binding と Chrome + Chrome Driver。動作環境を用意するのが大変なので Docker イメージの利用がオススメ。
  • cuda-docker-generator
    • 任意の Docker イメージに任意のバージョンの CUDA/cuDNN をインストールする Dockerfile を自動生成するツール。非 LTS な Ubuntu や Fedora 環境とかに CUDA Runtime を突っ込んだイメージを作りたいときに便利。
あと、sensorbee-python の 0.3.2 をリリースした。依存ライブラリである websocket-client の v0.48.0 が出て、ついに Python 2.6 で動かなくなってしまったので、Python 2.6 サポートを drop した。RHEL 6 で使いたい人もいなそうですし、大丈夫でしょう。
Category: Computer
検索してもあまりドキュメントや事例が無いのですが、Jenkins の Remote Access API を使うとジョブの情報を XML や JSON 形式で取得することができます。特に XML API では XPath-like なシンタックスでデータの検索を行うことができるため便利です。例えば、プロジェクトを GitHub Pull-Request Builder Plug-in でビルドしている場合、以下のような API 呼び出しで Pull-Request 番号に紐づく最新の Jenkins ビルド番号を逆引きすることができます。
http://${HOST}:${PORT}/job/${JOB_NAME}/api/xml?pretty=true&tree=builds[number,actions[parameters[name,value]]]&xpath=/matrixProject/build[action/parameter[name="ghprbPullId"+and+value="${PULL_REQUEST_ID}"]][1]/number/text()&wrapper=result

Jenkins おじさん向けの超ニッチ情報でした。
Category: Apple
iTunes COM API でイベントディスパッチが行えなくなっている件について。ここにも書いたのですが、iTunes 12.7 以降では (何故か) proxy/stub が PSDispatch から PSOAInterface に変更されていることが直接の原因のようです。レジストリキー HKEY_CLASSES_ROOT\Interface\{5846EB78-317E-4B6F-B0C3-11EE8C8FEEF2}\ProxyStubClsid32{00020424-0000-0000-C000-000000000046} から {00020420-0000-0000-C000-000000000046} に直したらイベントが通知されるようになりました。Win32/COM 力が足りなくて、これ以上の追跡はムリ...。
Category: Xojo
あけましておめでとうございます。Xojo のデスクトップアプリ開発を支援するランタイムツール Xojo Instruments を GitHub で公開しました。ライセンスは MIT です。Xcode に付属する Instruments のようにメモリリークを検出したり循環参照を検出することができるツールです。XojoInstruments フォルダを自分のプロジェクトにコピーして、
XojoInstruments.Start()
を書き足すだけで動作します。スクリーンショットを見ていただければ大凡イメージがつくと思いますが、ランタイム状態の Snapshot を任意のタイミングでキャプチャすることができます。ランタイム状態には全オブジェクトの一覧が含まれるため、Snapshot 間の比較を行うことでメモリリークの検出が簡単に行えます。また、Build Reference Graph を有効にしてキャプチャを行うと参照グラフが同時に採取され、参照関係の可視化やバックリファレンス(対象オブジェクトを参照しているオブジェクト)の追跡も行えるようになります。

このツールのポイントは二つです。
  • リークが発生したオブジェクトのクラス名や数が分かるだけでなく(これは MemChecker など既存のツールでもできていた)、実際にリークが発生したオブジェクトがどこから参照されているのかを追跡することができる。また、そのオブジェクトの詳細情報を IDE 上で確認することができる。
  • ランタイムに組み込んで使用するツールでありながら Xojo Instruments 自体の生成するオブジェクトが Snapshot から完全に除外されている。ディクショナリや配列など Snapshot の採取に必要なデータ構造は XojoInstruments.Framework 配下に XIObject interface を実装するクラスとして独自に定義し、XIObject interface を実装しているクラスを Snapshot の採取対象外にすることで実現されている。
反面、Snapshot の取得中は stop the world が生じるというデメリットもあります。内部的には、ランタイム上に存在する全オブジェクトをイテレートして ID を採番した上で各オブジェクトへの弱参照を取得するのでそれなりに時間がかかります(2 回目以降のキャプチャは差分のみ)。高速化のアイディアはいくつかあるのでおいおい取り組みたいところです。

ということで、どなたかのお役に立てば幸いです。

あと、Lyrics Master の Twitter アカウント とは別に 個人の Twitterアカウントを作りました。開発系の情報などはこちらで発信しようかなと思います。
Category: Computer
今回もメンテナンスリリースです。iTunes for Windows 12.7 で iTunes 連携が動作しなくなっていた問題や、洋楽・ボーカロイド曲の歌詞検索が行えない問題などに対処しました。

iTunes 連携が動作しなくなっていた問題について:
iTunes 12.6 と 12.7 で Type Library は変更されていないのですが、12.7 以降 (12.7.0, 12.7.1, 12.7.2) では COM Event が dispatch されなくなってしまったようです。
本リリースでは iTunes へステータスをポーリングするように修正されています。なお、本問題については Apple にも報告済みです (rdar://35951765)。

また、細かい話ですが以下の点も今回リリースで変更されています。
  • Lyrics Master for Mac OS X は Lyrics Master for Mac に改名しました。
  • High Sierra で、AppleScript (AppleEvent) 経由で Lyrics Master から歌詞を取得すると文字化けする問題に対処しました。
  • Windows XP / Vista のサポートを終了しました。
  • Windows 版の UI フォントをメイリオに変更しました。
ダウンロードはこちらから。変更点について詳しくは更新履歴をご覧ください (Mac / Windows)。