Kenichi Maehashi's Blog

脳内コアダンプ

RSS
Category: Computer
追記(2018-07-29) 正式版リリースに伴いベータ版の配布は終了しました。

Cocoa / Retina / 64-bit 対応 & Hi-DPI 対応版のベータを配布します。
皆様の環境でお試しいただき、このブログのコメント欄または Redmine にてフィードバックをいただければ幸いです。

v2.4.8.3 からの変更点は以下の通りです。
  • 新機能
    • Cocoa / 64-bit 対応 (Mac のみ)
    • Retina 対応 (Mac のみ)
    • Hi-DPI 対応 (Windows のみ)
    • 編集メニューに「取り消す」を追加
    • HTTP プロキシ認証で Digest 認証をサポート
  • 改善
    • 歌詞 GET の最新仕様に対応
    • 歌詞ナビの最新仕様に対応
    • LyricWiki の最新仕様に対応
    • UI の改善
    • HTTPS 接続時に TLS 1.2 を利用するように改善
    • 他社製 IM との互換性を向上 (Mac のみ)
    • メイン画面の透明度調整機能を削除 (Mac のみ)
  • バグフィックス
    • 検索結果の選択時に意図せずスクロールしてしまう問題を修正
    • 印刷時、ページ設定が破損している場合に致命的なエラーが生じる問題を修正
    • 起動時にウィンドウの位置が上にずれる問題を修正 (Mac のみ)
なお、今回のリリースからサポート環境が以下の通り変更となります。
  • macOS版: macOS High Sierra 10.13.x / macOS Sierra 10.12.x / OS X El Capitan 10.11.x / OS X Yosemite 10.10.5
  • Windows版: Windows 10 / 8.1 / 7 SP1
ダウンロード:
  • Lyrics Master 2.5.0.4 Beta1 (macOS)
  • Lyrics Master 2.5.0.4 Beta1 (Windows)
ベータ版では起動時に Debug ウィンドウが表示されますが、閉じていただいても構いません。また、ベータ版には利用期限が設定されていますのでご了承ください。

今回のベータ版公開にあたって、31 名の方にアルファテストでご協力いただきました。大変ありがとうございました!
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 回目以降のキャプチャは差分のみ)。高速化のアイディアはいくつかあるのでおいおい取り組みたいところです。

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