Kenichi Maehashi's Blog

脳内コアダンプ

RSS
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)。
Category: Computer
【更新 (2017/12/10)】
正式版のリリースに伴いベータ版の配布は終了いたしました。
ご協力いただいた皆さま、ありがとうございました!


【更新 (2017/11/24)】
各歌詞サイトの最新仕様に対応を行った、新しいベータ版を公開しました。また、Mac 版のベータ版も公開しました。
引き続き動作テストにご協力いただければ幸いです。


iTunes 12.7 以降で iTunes 連携が行えない問題を解消したベータ版を配布します。
皆様の環境でお試しいただき、このブログのコメント欄または Redmine にてフィードバックをいただければ幸いです。

また、上記の iTunes 関連の修正のほか、各歌詞サイトの最新仕様への対応や UI の改善も含まれています。

ダウンロード:
  • Lyrics Master 2.4.8.2 Beta2 (Mac)
  • Lyrics Master 2.4.8.2 Beta2 (Windows)

ベータ版では起動時に Debug ウィンドウが表示されますが、閉じていただいても構いません。
また、利用期限が設定されていますのでご了承ください。
Category: Computer
今回もメンテナンスリリースです。
「歌ネット」の検索やダウンロードが行えない問題に対処しました。

また、macOS Sierra で起動が遅い問題にも対処しています。
これまで Lyrics Master は、インストール時に「Lyrics Master」フォルダをアプリケーションフォルダにコピーするようご案内していましたが、今回のリリースからアプリケーションファイル本体 (Lyrics Master.app) をアプリケーションフォルダにコピーしていただくように変更しています。
これは Sierra の仕様変更 (App Translocation というセキュリティ機構の導入) により、アプリケーションファイル自身 (Lyrics Master.app) を手動で移動またはコピーしなければ、アプリケーションファイルがサンドボックス環境で実行されてしまい、起動までの所要時間が長くなる問題が発生するためです。

このため、すでに Lyrics Master をインストールしていただいている環境では、Lyrics Master.app をアプリケーションフォルダに単にコピーしただけでは、旧バージョンの Lyrics Master (「Lyrics Master」フォルダ) が残存してしまう可能性があります。
アップデートの際は、古い Lyrics Master をアプリケーションフォルダから手動で削除していただくよう、お願いします。

ダウンロードはこちらから。変更点について詳しくは更新履歴をご覧ください (Mac OS X / Windows)。