2012年9月21日金曜日

Mac Blu-ray playerのバグ

Mac上で唯一のBlu-rayディスクプレイヤーソフトであるというMacgo社の
「Mac Blu-ray Player」。

「こんな名前いいのん?」というような名前だが、早く出したもん勝ちである。
(Windows版も同じ名前なのはご愛敬?)

それはどうでもいいとして、最新版V2.8.5になっても「BDプレイヤー」としての挙動が全くなってない。「Mac Blu-ray Filer」に変名した方がいいくらい。


その出ているバグ。


*V2.8.5に更新した後はMacの再起動が必要そう
再起動する前はDVDを読ませようとするとハングアップした。
(BDは読めた。)
Windows版では再起動は不要だった。


*V2.8.3以降で出ているバグ
・音声選択名がおかしい
BDでのみ確認した。
Englishで日本語、無効で英語になり、Japaneseは選択できない。
最初、音声選択ができなくなっているのかと思った。
最新のV2.8.4でも治ってない。
V2.8.5では直ってた。

*V2.8.4以降で出ているバグ
・スリープ明けに必ずハングアップする
しかもこのときディスクのアクセス権を握ったままにするので、ディスクが排出できなくなる。
OSでイジェクト命令を発効しても排出されない上に、そうしてしまうとOSからの認識もされなくなるので、強制排出でディスクを入れ替えても認識されない。結果、OSの再起動しかなくなる。
V2.8.5でも直ってない。

・音がおかしくなる
前の音の一部を引きずるような感じになる。

BD:モーレツ宇宙海賊23~26話の内どれか。重低音が効くところ。
V2.8.5で発生。以前のバージョンは不明。


なんでこんなにエンバグするのか、チェックが甘すぎる。

何回かバグレポート出しているけど一向に治す気配がないので、もはやそういう会社だということで。

・・・従来バージョンからずっと出ているバグ

*ディスクによって出たり出なかったりするもの

・複数話が記録されているディスクで、途中の1話しか再生出来ないことがある
   例)BD:Infinite Stratos 1枚目 第2話しか再生されない。
 最新版では治ってた。

・1話再生するごとに再生が止まってしまう
ファイラー的に動作しているので、各話が独立したファイルになっているディスクではこうなってしまう。
次の話を再生するためには、ディスク選択→オープン、その他のタイトルから話数選択をしなければならない。しかも音声選択していたときはそれも選択し直す必要がある。

・宣伝しか再生されない
 BD:シュタインズ・ゲート
 タイトル選択から本編を選べば本編の再生ができる。
 これもファイラー的動作によるものだろう。
 DVD版では、ちゃんとメニューから再生される。

・話の順番がおかしい
 BD:神のみぞ知るセカイII/けいおん!(第2期)
 そもそも連続再生できないが、「その他のタイトル」から選ぶと、第6話が9話目に入ってる(神のみぞ知るセカイ)。
V2.5.4.0994で治った気がする。でもまだ連続再生はできない。

・いきなり途中から再生が始まることがある
 BD:バカとテストと召喚獣
最新版では発生していない。

・字幕設定が1話毎にデフォルトに戻されてしまう

 DVDでも発生。

・全再生が終わると、メニューに戻るのではなく再生そのものが終わってしまう
・BDのメニューが表示できない
 2つはほぼ同じ意味。
 すべてのBDで発生。
 重大なバグ。

・タッチ反応エリアが狭すぎてディスクメニューがほとんど操作できないことがある
 例)DVD: MOONPHASE、タユタマ、シュタインズ・ゲート
 BDはメニューそのものが表示できないので発生し得ない。

・勝手にチャプターが飛ぶ
 例)BD:FINAL FANTASY VII
 最後最後、主人公のセリフが途中で飛んでしまう。しかもその飛び方が絶妙なのでセリフの意味が全く逆になってしまう。だめじゃん。

・チャプタージャンプが単なる時間ジャンプになってる
最新版では更にわけの解らんジャンプの仕方をする。およそ使いものにならない。

  *ディスクにかかわらず発生するもの
・再生中にスリープに入ると、スリープ明けに再生が継続されない事が多い


・再生中に停止すると、次回再生でファイル選択を求められる
最新版では、ここでディスクを選択すると一応前の再生位置から再生が再開される。
が、音声状態はディスクデフォルトに戻されてしまう。


・「最近の視聴履歴」というものがあるが、全く機能してない
 というか、今見ているディスクの名前しか出てこない。
 必要ないと思う。
これはメニューに出るのではなく、Dockの方に出る物だった。
正常動作している。


・AppleRemoteでの操作法が標準アプリの「DVDプレイヤー」とぜんぜん違う。
 ディスクメニューの操作がマウスで出来ないのにリモコンも使えないので操作不能に陥ってしまう。

・ディスクが排出出来ない
 DVDプレイヤーにはEjectボタンもあるし、ツールバーのEjectからでも排出可能だが、
 こいつはEjectボタンがない上に、 ツールバーのEjectを押しても排出できない。
 Finderからディスクをゴミ箱に入れてもダメ。このアプリを終了しないと排出されないのだ。排出のためにいちいちアプリ終了するなんて面倒な事この上ない。
最新版でも治ってない。
→1つ前版では、Eject出来ないだけでなく、再生中にEjectを実行し、その状態で再生を停止すると「ディスクを開く」を選んでもメディアが認識されないというバグも発生する。OSレベルで認識されていないようなので、Ejectされない事が問題の根本。
これをしてしまうとOSの再起動しか手がなくなる。極めて重大なバク。 


ディスクを取り出すだけなら、ドライブの強制排出を行うか、USBケーブルを抜き差ししてEjectボタンを有効化した方が楽だが(BDドライブは外付けしかないのでこの方法が使える)、OSから認識されない状況は変わらない。


・再生速度が微妙に変わる
これはこのソフトだけじゃなくMac上のほとんどのプレイヤーソフトいえるけど、
再生速度が微妙に速くなることがある。VLCでも発生する。

リズムがはっきりしている音楽再生時に音程が狂うのでよく分かる。
同じデータでもWindows上のプレイヤーでは発生したことがない。
Macの省電力に伴うクロック制御などが影響しているのだろうか。
Mac上での音楽再生はこの理由により、正確な意味では「実用的でない」と判断している。
→これはMacOSのバグだったようで、10.8.3で治ったような感じがする。治ってなかった。発生率は下がったけど未だ出ることがある。出たときのひどさは今までの比ではない。

・・・
特にBDでの再生があまりにもひどい。ちゅうか、DVDならMac標準の「DVDプレイヤー」でいけるのだから、ウリのBDでこの状況は「使いもんにならない」。
ディスク内に記録されているいろいろな情報の読み出しそのもの、またはその解釈が正しくないと思われる。もっとDVD/BDの仕様書を読んで正しく実装してほしい。

とりあえずもっとたくさんのディスクを再生して確認しろ。
テストディスク1枚くらいでしかやってないんじゃないか?
本当にデバッグしてるのか?
少なくとも複数枚組作品なんて見てないと思う。そうでなきゃ排出問題は絶対気づくはずだから。なんか、作品を変えるごとに違う不具合が出るんだけど。まともに操作を含む再生が出来る方が少ない。


徐々に良くなってきてはいるが、まだだめ。
フリーウエアじゃないのだから、メーカーには一日も早い全てのバグの修正をしてほしい。クリスマス対応とかしている暇があったらさっさと直せ。どうでもいいような修正でバージョン番号ばっかりあげてんじゃねぇ。


一向に改善されないので、とうとうメーカーに報告。
まあ、治らない可能性が大だけど。
→返答によると、5~6月頃にメニュー対応を初めとした大バージョンアップがあるらしい。

現状では先にも書いたとおりファイラーの域を出てないので、初心者には「全くおすすめできない」し、熟練者でも「なんとか我慢して使える」レベル。
Mac標準のDVDプレイヤーがBDにも対応してくれることを強くかつ、切に願う。

・・・2013/04/23追記
あまりに出来が悪いので、とうとう使用を中止。
来月以降にあるという大バージョンアップが出るまで使わない(当然検証もしない)。(他にモニタが用意できるなら)、専用BDプレイヤーを買った方がよほど精神衛生上良い。
そういうこと。
→ちゅうことでSONYのBDプレイヤーBDP-S190を買った。安いのにとてもいい機種。
HDMI入力に余裕がある人にはおすすめ。

・・・2012/10/24追記
とうとう新型iMacでも光学ドライブがなくなってしまった。
ということは、AppleはPCでのDVD/BD再生はもはやサポートする気が無さそうなので、
BD対応は将来的にもありえないかも。

2012年9月20日木曜日

NSTimerのバグ

NSTimerの時間指定は基本的に秒単位である。

例えば

+(NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)seconds target:(id)target selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)repeats

のsecondsは秒単位なわけだが、0より大きく1より小さな数を指定すると1秒以下でも指定できる。

ここで、仕様書を読むと「負数を与えるとその負号を取った値を0.1ms単位として使う」と書いてある。これをそのまま理解すると例えば、-1000と指定すると1000*0.1=100msを指定したことになるはずである。

がしかし、実際にはそうはならない。
非常に短い時間でタイマーがかかってしまう。
NSTimerそのもののバグか、仕様書の間違いである。
少なくともiOS5.1まではこのとおりだ。

仕方ないので、0.??の値を使っている。

早々に正しい仕様を公開して欲しいところ。というか、仕様書通りに動くように直してくれ、Apple。

MountainLion v10.8.2での不具合ほか

iOS6にあわせてMoutainLionも10.8.2にバージョンアップされた。

V10.8.1にあったバグの修正具合を確認。update2でも変化なし。

(1)自動スリープ後、Ethernetが切れてしまうバグは修正された模様
   IPv6では接続できるがv4では接続できない状況になる。
  未完全な修正だったということで。
(2)画面共有のログイン画面のスリープでスリープできないバグは修正された模様

が、また例によって新しいバグがいる。

 (3)スリープ明け後最初の受信で、メールが高確率で落ちる
メール側の対応漏れかOS側の問題かはわからないが、落ちたらあかん。

どうもスリープ明けの最初の受信メール有り時に高確率で落ちる様子。


(4)DVDプレイヤーで、話の切り替わり目で数秒〜数分が飛んでしまうことがあるバグは治っていない。
 やはりMac go社のMac Blu-ray Playerでは発生しないのでDVDプレイヤーのバグ。
(Mac Blu-ray Player自体もバグだらけなので使いものにならないが。)

(5)スリープ中にリマインダーの通知が来ると、スリープ明けに通知の「閉じる」を押しても閉じない。しかも二度と通知が操作できなくなる。
ユーティリティのアクティビティモニタで「通知センター」を選んで「プロセスを強制終了」すると一応治る。

アップルは少なくとも、まだ5倍はデバッグ要員を増やせ。

Xcode4.5およびiOS6の動作状況はこれから確認。
iOS5/5.1のバグは今回のアプリ開発でだいぶ見つけたのだけど、それらが治っているかどうか。

・・・ついでのXcode4.5の確認・・・

Xcode V4.4.1であったバグが4.5でどうなっているかの確認ちょっとだけ。

(1)Separate Assistant Editorの右側で補完候補がすぐに消えてしまうバグ
やっぱり治ってない。更に悪いことに、Google日本語入力では日本語入力がまともにできなくなった(ことえりでは未確認)。

(2)ソースファイルの改行コードが0x0d+0x0aのとき(Windowsで作っていたファイルを持ってきた時など)、エディターでDelete To End Of Lineを実行すると行末までを削除すると、次の行が接続されてしまう
これは前のバージョンから治ってない。

他は再現させるのが面倒なので省略。今のところ、ファイルの認識間違いは発生していない模様。

後バグじゃないけど、iPhone5対応のため、Launch ImageにRetina(4-inch)が追加されてる。
そのままでは黒画面画像(Default-586@2x.png)を入れられるので、何らかの置き換えが必要。私は、面倒だったので、従来のRetina(3.5-inch)の画像そのまま入れておいた。おいおい書き換えると言うことで。

2012年9月14日金曜日

NSString UIKit Additions のバグ

NSString UIKit AdditionsにあるsizeWithFont:は、文字列を指定フォントで表示した時の表示サイズを求めるメソッドとされている。


ところがこれ、横幅は正しいのだが、縦幅は正しくないことがある。
表示幅が取得値(size.height)より大きいことがあるのだ。

どのような場合にそうなるか。


指定フォントが英字フォントで、文字列に日本語を含む場合がそれに当たる。

この場合、英字部分は指定フォントが使われるが、日本語に関しては代替フォントが使われる。
例えば、標準的フォントとしてよく使われるHelveticaは英字フォントであり、実は日本語は含まない。それでも日本語も表示できるのは、この代替機能があるからだ。絵文字もこの機能によって、どのフォントでも表示できるようになっている。
(フォントが実際のところどの文字コードに相当するフォントを持っているかは、FontBookで情報を見ると分る。)

そして、殆どの場合その代替フォントのほうが大きいので、高さがそちらに合わせられる。
このため、実表示サイズが取得値と合わなくなる。

 sizeWithFontが返してくるのは指定したフォントのlineHeightであり、文字列に含まれるすべての文字を考慮した高さではないのだ。

その代替となっている日本語フォントのlineHeightを得ておけばいいと思うかもしれないが、それがそう単純ではなく、実際に表示される文字だけのフォント幅に合わせられる。
よって、表示文字列が固定ならいいが、文字列が可変なら高さも可変になる。

ということで、現在出来る回避策は、実際に表示させてみるしかない。
例えばUITextView.textに「改行付きで」代入し、その前後でcontentSize.heightの
差分を取る。これなら正確に取得できる。
ただし、.textへの代入の処理はかなり重いので、すべての行の高さを得ようと思うなら、ちょっと工夫が必要である。


アップルは英語圏なので、こういう日英文字混在の条件下ではデバッグされていないのだろう。iOS5.1でも治っていない。iOS6でどうかは未検証。


2012/09/25追記
drawAtPointの返してくる高さも同様と判明。横幅はなぜかちょっと違う。
sizeWithFontの方が小数点以下を切り上げた幅を返してきている感じ。

あと、ひょっとしたらこの問題はUITextView内に表示した時だけに発生するのかもしれない。UITextViewないならフォントの高さなんて気にしなくていいのではないかと思われるかもしれないが、外部表示との同期をかけようとすると問題になる。
それがどういうことかは、次回アプリを見てもらえばわかるかと。

2013/09/29追記
1年ぶりの追記。実はiOS7では contentSize.heightの返す値が全く意味不明になっておりこの方法が使えなくなってしまった。現状回避策は見つかってない。

2012年9月1日土曜日

Macのゴミ箱の中の消えないファイルの消し方

Macで「ゴミ箱を空にする」を実行しても消せないファイルが残ることがある。

(不要になった)TimeMachineのフォルダを削除したときなど、boot.efiというファイルにロックがかかっていて、情報からアクセス権を変更してロックを外そうにも外せず、
この状態になる。

こういう時は、Optionキーを押しながら「ゴミ箱を空にする」を実行すればよい。

たったこれだけで綺麗サッパリ消してくれる。