QtでMacのメニューバーを日本語表示にする

Qtでメニューバー、もっと言えばリンゴマークの隣のアプリケーションメニューの部分を日本語表示するまでに、だいぶWebを彷徨ったのでちょいとメモ。なおMacは日本語設定という前提で。
なにはともあれ、メニューバーを作成します。ここにあるとおり親なしで。

QMenuBar* menu_bar = new QMenuBar(0);

Menuを追加し、Actionを追加します。なお、Actionが入っていないと、Menuだけ追加しても表示されません(ここで少し詰まった)。addActionして適当にconnectしておきます。

// 手元のQt5.2では日本語直書きでOKでした。適当にファイルメニューにします。
QMenu* file_menu = menu_bar->addMenu("ファイル");
// 親がmenu_barなのは適当。何を指定するのが標準的なのだろう?
QAction* dialog_action = new QAction("ダイアログを表示",menu_bar);
file_menu->addAction(dialog_action);
// menu_barでconnectもどうなんだか
// 作成済みのQDialogをmy_dialogとでもして
menu_bar->connect(dialog_action, SIGNAL(triggered()), my_dialog, SLOT(show()));

コードはあまり参考にしない方がいいかも。もっとまともな書き方があるような気がします。
さて、ここまででメニューからぽちっとやればダイアログが表示されるようになりますが、アプリケーションメニューは英語のまま。Info.plistのRegionをいじろうが、Resources/ja.lprojの下にInfoPlist.stringsを入れようがlocversion.plistを入れようが日本語になりません。で、答えはこちらに書いてありました。具体的には、ここにの丸写しで

QTranslator qtTranslator;
qtTranslator.load("qt_" + QLocale::system().name(),
                  QLibraryInfo::location(QLibraryInfo::TranslationsPath));
app.installTranslator(&qtTranslator);

を追加するとついに日本語表示になります。素晴らしい。
ここまで来れば、Macらしくアプリケーションメニューで「MyAppについて」とかやりたくなります。一体どこのメニューに追加すればいいのかといえば、ファイルメニューに追加すればいい模様。

QAction* about_action = new QAction("について",menu_bar);
file_menu->addAction(about_action);

…………え?
こちらにもあるとおり名前で判別されて自動的にMyAppの下に移動します。英語だとaboutですが、日本語だとなんと「について」でマッチがかかるみたいです。ちょっと気持ち悪い挙動ですが、めでたしめでたし。

iconutilで作ったアイコンの表示が崩れるとき

Macアプリのアイコンは原料となる所定サイズのpngファイルからiconutilによって作られるわけですが、遊んでいたらicnsにした途端表示が崩れる事例に遭遇したのでメモ。

  • プレビューで確認すると、原料のpngは各サイズとも問題ないが、icns変換後は各サイズとも崩れる。
  • 崩れるというのは、縞々になるというか、がびがびになるというか、ずれたのが重なるというか、インターレス風というか、なんとも言葉で表現しづらい崩れ方。ずれ幅というか縞々幅というかはサイズによらず一定。

最終的に判明した原因はICCプロファイル。

  • Photoshop(手元はCS4)はpng保存時にICCプロファイルの保存を尋ねてこないが、実はICCプロファイルを埋め込んでいるらしい。確かにFinderから見るとICCプロファイルが入っている。
  • 表示が崩れるのは、たまたま変な設定になってしまっていた(sRGBじゃなかった)作業用色空間が埋め込まれたpngを食わせたせい。sRGB変換して食わせると解決。

確かにAppleのガイドラインにもsRGBプロファイルのPNG推奨って書いてある(汗
英語でググってもいまひとつ情報がなかったので最後にひと言。
If you get corrupted .icns image with iconutil, check that the sRGB color profile is embedded in your PNG files in .iconset.

Mavericks+Clang+OpenMP

ついにGCCが姿を消したMavericksOpenMPを使うには、

  • やっぱりGCCを使う(例えばHomebrewで入れる、とか)
  • 開発中のOpenMP対応Clangを使う

の2通りが考えられます。前者はなんだかすごく負けた気がするので、今回は後者を試してみました。公式ページに書いてある手順に従います。
まずはIntel OpenMP Runtime Libraryをビルドします。落としてきて展開したら

make compiler=clang

GNU Compilerのバージョンがparseできないとかエラーを吐きます。いや、clangなんだけど、ってかNew featuresにThe library can now be built with clangって書いてあるから試したんだけど。
どうやら原因はtools/check-tools.plの448行目あたりにあるようです(記事作成時点で最新の2013/12/23版)。

# check for gnu tools by default because touch-test.c is compiled with them.
push( @versions, [ "GNU C Compiler",     get_gnu_compiler_version( $gnu_compilers->{ $target_os }->{ c   } ) ] );
push( @versions, [ "GNU C++ Compiler",   get_gnu_compiler_version( $gnu_compilers->{ $target_os }->{ cpp } ) ] );

コメントによればclang設定でもgccを探すみたいです。Perlとか読めないので、アバンギャルドに450行目と451行目(上の2行)をコメントアウト(ぉぃ、コンパイルできました。ブツはtmpのhogehogehugahugaの中にありますので、適当な場所に置いて、あとでclangと一緒にPATHを通します。ちなみにGNU Compilerが「ない」じゃなくて「バージョンがparseできない」のは、中身がclangな/usr/bin/gcc*1が存在するせい。
Clangの方は公式通りにcloneして(build掘って)configure、make、make install。書いてあるとおりにPATHを通して完成。OpenMPのpathはさっきhやdylibを置いたところになります。
以上の作業で2threadのhelloが動きました。
Clang側はOpenMP3.1の実装が完了し4.0を実装中とのこと。本家のtrunkに投げるにはまだちょっとリファクタリングしないといけないらしいですが、本家に入り次第Xcodeにも降りてくるのではと期待。

*1:中身はclangみたいなのですが、シンボリックリンクというわけでもないようです。よくわからない…

EX600とuDAC2

上にしれっと出てきましたが、使っていたEX90の老朽化のため、しばらく前になりますがイヤホンをSONYのEX600に更新、さらにNuForceのUSB DACを追加してます。
イヤホンはいろいろ検討、と思いつつ結局同じSONYで買い換え。実売が落ちてるのでコスパは良いと思います。定価で倍、実売で1.5倍くらいの乗り換えではあるので、当然上から下まで良くなってます。EX90の後継って音ではなくてやっぱりあのバランスは唯一無二なんだなあとも思うのですが、EX600は聴いてて楽しい感じ。ミスチルあたりは特に相性UP。
但し書きをつければ、ひとつには当たり前ですが再生側にも気を使ったほうがいいです。かつて音質いいんじゃね?と評したIS12SHですが、EX600直挿しだとしゃわしゃわとノイズがのります。MacBook Proだとホワイトノイズが悲しすぎ、MacBook Airだと表現しづらいんだけどどうにもパンチに欠ける。これはUSB DAC導入に至った経緯でもあります。もうひとつには、どうやら高音の特定の帯域に少し癖があります。再生機器にも依存し、IS12SH直挿しだと前述のノイズと合わさってLiaとか池田綾子とかざくざく刺さりますが、耳の慣らしも終わったいまuDAC2では気になりません。
uDAC2については比較対象を知らないのでコメントのしようがないのですが、当たり前ながらホワイトノイズがほぼ無くなり、全体的に一皮二皮むけて鳴るようになります。久石譲のピアノとか生々しくなりました。少なくともこれまでの手持ちのどの機器よりもイヤホンの能力を出してる感じ。
まあ音は最終的には好みの問題、大阪や東京だとイヤホンを静かに試聴できる店もあるので、自分の一本(複数本でもいいですが)を見つけてはいかがでしょうか。そしてちょっと奮発したならば、音の出口にも少し注意するとちょっと幸せになれるかもしれません。

LogicoolのUnifyingレシーバとuDAC2のノイズ?

時折チャタリングが発生しつつもだましだまし使ってたLogicoolのMX1100、記憶が正しければぼちぼち5年ほどになるので買い換えました。親指ボタンがないと生きていけない?ので今度もLogicool、思い切ってM950。ドライバは入っているので差し替えてちょいと設定を調整すればOK。いやあ、新しいマウスは快適だあ……
と音楽を聴き始めると、何だかザーザーいうノイズが乗っている。なんなんだこれは。
イヤホンはUSB DACに繋がっており、下手くそな絵をかけばこんな感じの接続。ちなみにDACはNuForceのuDAC2、イヤホンはSONYのEX600。

結論から言えば、DACかマウスのレシーバのどちらかをUSBハブから本体にさしかえれば問題は解消。DACを本体接続で運用することにしました。うむ、USBってデジタルだから大丈夫、というわけでもないらしい。プラシーボ効果かもしれませんが、ハブ接続時代より音が良くなった気が(笑)
まあUSB機器はしれっと取説に本体の端子に接続しろなんて書いてあったりしてハブをたこ足にするというのはあまりよろしい環境とは言えないのですが、本体にUSBポートが2つしかないんだから仕方ない。
ぼちぼちUSB3.0ExpressCardとかつけようかな……

MacBook AirをAQUOSにつないでみた

せっかくThunderbolt(MiniDisplayPort)があるので、MacBook Air(Mid 2011)から32インチDZ3に出力してみました。
変換アダプタはELECOMのものを使用。AVポジションをPCにして、明るさ、コントラスト、黒レベル等はスライダの真ん中、色温度は低に下げてみました。青かったり赤かったりせずわりに良い感じになったのでディスプレイ補正アシスタントでガンマだけ(左側のスライダだけ)調整。
ピクセルが千鳥なのでテキストには向きませんが、全画面で動画を見るのは気持ちいいです。音声出力も問題なし*1
やっぱり全画面表示のときはテレビから音が出たほうが違和感ないですね。
がしかし、なんだか発色があっさり。シャープのASVっぽいといえなくもないですが、まあ変換アダプタを介している加減でカラープロファイルがHD 709-A*2とかいう聞き覚えのないものになっていたせいな気もします。
しっかし、あれですね、Mac OSの再生支援対応の関係でメイン機のPro(GeForce 8600M GT)よりサブ機のAir(Intel HD Graphics 3000)の方がCPU食わずに再生できるとか…なんかくやしい(笑)

*1:システム環境設定から切り替えるのをお忘れなく

*2:いわゆるHDTVのプロファイルみたいです

microSDHCが死亡

IS12SHで二年弱使っていたSanDiskのClass 4 microSDHC 32GBが先日死亡。経過はこんな感じでした。

  • 最近になって音楽再生中にプチプチ途切れる事象が発生。ソフトウェア的なものかと思い空きメモリ等確認するも問題なさげ。
  • そうこうするうちに空のSDですとかいってファイルシステムを見失う事象が発生。再起動で復帰するも、カードリーダモードでの楽曲の転送が不能に。読めるけど書けない感じか。
  • USBカードリーダに挿し替えてもディスクを修復できませんでしたといわれて書き込めないが、写真のサルベージはさくっと完了する。読む方は問題ないのか?
  • と思いきや楽曲をディレクトリごとロスト。IS12SHからも見えないのでフォーマット。無事フォーマットできたのでファイルを書き戻そうとするとやはりエラー。
  • ちなみにサンプルでついてきたmicroSDに挿し替えて楽曲を1.5GBほど転送してみるがエラーは吐かないので、IS12SHのカードリーダがぶっ壊れたということではないようだ。
  • どうにもカードの故障な気がするのでUSBカードリーダ経由でSDA謹製ソフトでフォーマット。クイックフォーマットは正常終了するが、書き込みテストにと上書きフォーマットをかけるも上書きされずに終わっている感じ。Macが悪いのか?
  • Windowsで同じくSDA謹製ソフトでフォーマット。クイックフォーマットは完了するが、全容量書き込みテスト*1を兼ねた上書きフォーマットは走り始めるも進捗表示が0%のうちに著しく速度が低下、ペース的に数日以上かかる状態に*2。キャンセルするも、上書きキャンセル後のフォーマットフェーズが完走しない。
  • いよいよクイックフォーマットも不能。論理サイズ調整ON/OFFでも変わらず。死亡と判断。

結局5年の保証期間内だったのでメーカー送りに処しました。
鉄板といわれるSanDiskですが、フラッシュメモリの微細化、多値化で案外使用条件がシビアなのかもしれません。
しばらくIS12SHはサンプルの2GBで仮運用しましたが、特に問題は起きなかったのでスマホ側の問題でもなさそうだし、交換後の個体は何の問題もなく順調に稼働中。
たまたま外れを引いたということのようです……

*1:明らかにフラッシュメモリにはよくないが、いまは寿命を問題にしている場合ではない

*2:SeqWriteだと思うと、4MB/sなら2時間強で終わる計算