2009/11/29

Qtで言語を作る (8)


 第7回の最後で、翻訳ファイルによって実行コマンドを変えられるんじゃないかとお話ししましたが、試しにやってみる事にしました。トップの画像は、前回の分に今回の分を追加(選択部分)したコードです。

  • cat なら mew と鳴く
  • neko なら nya- と鳴く

事を想定しています。翻訳ファイルを読み込む事で、cat と neko の区別が出来るので、この様に動作する筈です。尚、前者(catの場合)は下の図の様にtranslatorの部分をコメントアウトしてみました。

 結果ですが、翻訳ファイルを読み込まない場合は、 cat が mew と鳴きました。


で、翻訳ファイルを読み込んだ場合は、 neko が nya- と鳴きました。


素晴らしい。動作の変更をする事は出来ましたが、日本語で表示出来ていないのが残念です(- -;。

 日本語でも試してみたのですが、文字コードがどうも合わないみたいで、その分のコードが必要になりそうです。とは言うものの、国際化対応という目的ではなく、アプリケーション自体の挙動が変えられるので、これはこれで面白そうですね。



2009/11/28

Qtで言語を作る (7)


 第6回から随分時間があきましたが、今回はアプリケーションの翻訳について解説します。iPhoneの開発でも同じような機能が使えますが、こちらの方がかなり楽だと思います。

 トップの画像ですが、開発環境のQtCreatorの場所になります。また、下の画像は翻訳環境のLinguistの場所になりますので、アプリケーションの起動時の参考にしてください。


では、早速QtCreatorでプロジェクトを作成します。(説明を簡略化する為、)今回は、Qt4 Console Applicationを選択します。


プロジェクト名称と保存場所を入力します。標準では、ユーザーのホームフォルダが選択されるようです。


使用するモジュールを選択します。今回はQtCoreのみにしますが、実際のアプリケーションの開発時には殆ど選択する事になると思います。


選択が終わると最終確認画面になります。main.cppがソースファイル、translation.proがプロジェクト用のファイルになります。


main.cppを開いた所です。QCoreApplicationのドキュメントには、 The QCoreApplication class provides an event loop for console Qt applications. と書いてありますので、イベントループを処理してくれるものと考えて問題ありません。その為、この状態でビルド(左下のアイコン)/デバッグ(その上のアイコン)を開始すると、何も表示しないアプリケーションが起動します。


このソースに、3,4,10,11行目を追加します。コンソールに cat と表示するだけのアプリケーションですが、QObject::tr()関数を使用している事に注意してください。この形で書いておくと、後で翻訳対象として扱う事が可能となります。QObjectを継承しているクラスでは、tr()のみの記述で対応可能ですが、どうしても継承出来ないクラスを作成する場合にはこの方法が使用出来ます。


実際にデバッガで出力内容を表示させてみました。ソースコード通り、catと表示されています。


この状態で、プロジェクト用のファイルを開き、18行目を追加します。翻訳用のファイルをこの名称で作成する事になるのですが、任意の場所を指定可能です(ここではカレントフォルダになります)。また、各国用の翻訳ファイルを作成する場合も考慮して、分かりやすい名称にしておくと良いです。


次にコンソールから、翻訳ファイルを生成するコマンド(lupdate)を実行します。引数にはプロジェクトファイルを指定します。
$ cd translation/
translation $ lupdate translation.pro
Updating 'ja_JP.ts'...

Found 1 source text(s) (1 new and 0 already existing)
拡張子がtsのファイルが作成されましたので、これをLinguistで編集します。ソースコードに埋め込んだ、catが表示されているのが分かります。


これを日本語に翻訳しますので、 猫 と入力します。猫じゃなくでも大丈夫なので、好きな言葉を選択してもらってかまいません。


ファイルを保存したら、lreleaseコマンドでアプリケーション側で読み込むファイル(qm)を作成します。この時の引数もプロジェクトファイルを使用します。
translation $ lrelease translation.pro
Updating '/Users/masao/translation/ja_JP.qm'...
Generated 1 translation(s) (0 finished and 1 unfinished)

これで翻訳ファイルが作成されましたので、アプリケーション側でそれを読み込みます。この例では、11-13行目を追加しました。QTranslatorをアプリケーションに追加するのですが、各国用の対応をする場合は、必要になった時点で追加をする事になります。例えば、フランス語を表示させる時は、翻訳ファイルを読み込むとその時点から表示がフランス語になりますので、動的に言語を変更する事も可能になります。


その後の実行結果はこのようになります。と表示されているのが分かるでしょうか。


解説は以上になります。翻訳ステップをまとめると以下のようになります。

  1. 翻訳したい部分をtr()関数で囲む。
  2. プロジェクトファイルで翻訳元(*.ts)の作成場所を指定する。
  3. lupdateコマンドで、翻訳元ファイルを作成する。
  4. 翻訳元ファイルをLinguistで翻訳する。
  5. lreleaseコマンドで、翻訳後(*.qm)ファイルを作成する。
  6. 翻訳後ファイルをアプリケーションで読み込む。
設定部分が殆どですので、実際には3から5を繰り返す作業になります。翻訳ファイルが分かれている為、作業も分担出来ますし、アプリケーションのリリース後にも言語対応可能ですので、アプリケーション側に予め組み込んでおいても損は無いと思います。

これ、上手く使えば、各言語でプログラムを作る事が出来そうなんですよねぇ。画面に文字を出力するなら、

英語 : print "Cat".
日本語 : 表示 "Cat".

とすれば、違うコマンドでそれぞれ Cat と表示出来る様になると思うんですが。


2009/11/21

iPhoneアプリをリリース (7)

 承認がすんなり通ると思っていなかったのですが、以外にあっさり終わってしまい拍子抜けしました。

AppStore : Exit

が(無料)公開になりましたので、ご報告致します。アプリケーション中で使用した画像は、 非常口アイコン素材集 から拝借させていただきました。使用に際してコンタクトを試みたのですが反応が無く、非常に残念なのですが、この場でのお礼とさせていただきたいと思います。

 さて、肝心の機能ですが、アプリケーションを立ち上げると全白の画面になります。その後、タップする毎に

  • 灰色
  • オレンジのゆらぎ
  • 白色
と変化する様にしました。同様のアプリ等も見受けられたのですが、非常口の分かりやすいアイコンと、そこに辿り着くまでに必要な機能を一つにすると、この形が良いと思い公開する事にしました。私自身、かなり使用率が高い為、ダウンロードしていただければ 活躍君 になってくれる事まちがい無しです。

 また、オレンジのゆらぎは、光がより拡散するようなものに反射させると雰囲気が出るかなと思います。それっぽいものが出来たらまた投稿します。

2009/11/14

Mac OS X Snow Leopard (4)


 取扱説明書を見ない(そもそも薄い)せいか、Snow Leopardになってからディレクトリサーバーの登録方法が変わっている事に、Snow Leopard Serverを導入してから気づきました(汗。

システム環境設定 - アカウント - ログインオプション - 編集

で上図の様に追加可能です。


 接続時には関連アプリケーションの設定をしてくれますので、とても助かるのものの、ここでログアウトを選択するとシステム環境設定事自体がログインをキャンセルしてくれるので微妙です。

iPhoneアプリをリリース (6)


 第5回では、無料版とPlatinum版の2種類展開をする事をお伝えしたのですが、無事Platinum版の申請が承認されました。使用動画を一緒にアップしましたので、(営業に行く時間も少し減らせますので、)気に入った方は是非ご購入を検討していただけると嬉しいです。


基本機能
  1. 画面のタップで気泡が割れます。
  2. 全ての気泡が割れるとリセットされ、再度割る事が出来ます。
  3. 2本指のスワイプで色を変更出来ます。
  4. 色は全12色あります。
  5. シェイク動作で全ての気泡が割れます。
収録色
  • ピンク
  • 水色
  • オレンジ
  • 黄緑
  • 青紫

Snow Leopard Server搭載Mac mini (5)


 第4回ではネットワークインストールの方法と、UPSが夜な夜なニャーって鳴いて困っているお話をしました。(電力事情があまり良くないので)実は、Snow Leopard Server搭載のMac miniを買った時にUPSを買ったんです。


 定価はあてになりませんが、相応の値段かなと思い買ったものの デカイ&重い です。トップの画像には比較の為にティッシュ箱と一緒に撮影したものを用意しました。ちなみに、テッシュ箱は薄型タイプではありません。また、厚みもティッシュ箱と同じ位なので、Mac miniよりも間違いなく大きいと思った方が購入時のショックは少ないです。

 Mac mini自体ACアダプタ内蔵ではないので、本体より電源が大きい状況は変わらないのですが、Snow Leopardでは(でも)USB接続しただけでUPSを認識してくれます。省エネルギー設定では、バッテリー容量があるパーセンテージを下回るとシステムのシャットダウンをする等、細かい設定も出来ますので電力事情の良い所ではこれで事足りると思います。


 でも、そこは営業中のProject Gunjouですから、ここでは終わりません。電力事情が良くない挙げ句、同じ電源からエアコンの電源もとっている為、朝晩関係なく鳴くんです。Mac OS X用の管理アプリ(PowerChute Personal Edition)もダウンロード出来ますが、どうも上手く動いてくれません。さすがに困ったので、VMwareでwindows用の管理アプリを一時的に立ち上げて設定する事にしました。


ステータスとして現在の電圧も出ます。電圧計でも測ってみましたが、そんなにズレはなさそうです。


設定値をメーカーに送信出来るらしいですが、そこまでの必要を感じないのでオフにしました。そのうち、家の電圧も誰かに管理されるのかと思うとなんだか複雑です。


前述の通り、バッテリー容量に連動してシステムのシャットダウン設定も可能です。OS Xで設定した値が反映されているようなので、UPS自体に設定値が保存されていると思われます。


時間によって警告音を鳴らすかどうかも設定出来ます。これは便利ですねぇ、停電しても気づかないかもしれませんが、とりあえず設定してみます。


これはでもでも良さそうです。画像は中ですが、最終的には高にしました。


過電圧も検出可能です。ここで、下限値を最低の87ボルトに設定しました(デフォルトは90ホルト)。家中で電化製品を使いだすと90ボルトには下がってしまうので、これで鳴き声から解放されそうです。


設定後は、windows用の管理アプリは終了し、UPS(のUSB)をMac mini側に接続しました。しばらくこれで様子を見てみようと思います。

Project Gunjou 営業中


 更新遅れていて、申し訳ないです。今週からしばらくの間、Project Gunjouは営業を予定しています。書く記事は沢山あるのものの、週末にまとめて投稿になるかもしれませんのでご了承くださいませ。

 あと何人かいると助かるんですが、それも含めて営業中です。

2009/11/08

iPhoneアプリをリリース (5)


 申請中のPuchiPuchi無料版(1.1.0)が無事Ready for Saleとなりました。今回の変更では、Platinum版との2種展開になった為、使用出来る色が白とピンクだけになりましたが、一度潰した気泡は全ての気泡が潰れないと潰せない仕様になったので、より本物に近くなったかと思います。

 一部のグラフィックの見直しや、オブジェクト指向を(真面目に)採用したので、外部も内部も一新されていると思います。是非、お試しください。

AppStore : PuchiPuchi version 1.1.0


2009/11/05

iPhoneアプリをリリース (4)


 PuchiPuchiの有料版の申請(2009-11-01)をして、現在審議中です。前回の無料版の申請後、公開までは2週間かかりましたが、今回もその位でしょうか。また、無料版も同時にアップデート予定です。

 先程iTunes Connectを見ていたら、日本語の(iTunes Connect用)デベロッパガイドがあったので目を通してみました。かなり丁寧に書いていて、iPhoneアプリのアップデート時の注意点や会計報告の内容は参考になりましたが、

スクリーンショットを撮るには「Power」ボタンを押しながら「Home」ボタンを押します。これでスクリーンショットがカメラロールに保存されます。

 との事。え、そうなの? いつもはXcodeのオーガナイザを使っていたのですが。取り込みの際にMacに接続する必要があるのは仕方ないのですが、イメージキャプチャを使うと、ファイルの取り込みと任意の編集ソフトでのオープンまで実施してくれるのでかなり重宝しています。


2009/11/03

Snow Leopard Server搭載Mac mini (4)


 うー、寒いです。電気ストーブをあちこちで使うものだから、一緒に買ったUPS(後の投稿でお話しします)が夜な夜なニャーって鳴いて困ってます。

 前回インストールはしたものの、1回で済む訳も無く何度かインストールしています。更にこの寒さ、ルータがある部屋まで行くのもつらくて、WLAN経由でネットワークインストールする事にしました。

実施環境
  • Snow Leopard ServerのISOイメージ
  • その他は前回と同じ
  • 手順も一緒

です。ISOイメージはディスクユーティリティーで作成後、マウントしたものを使用します。そうすると、ディスク選択画面は上の様になります。DVDではなく、ディスクイメージの表示になっています。後は、前回と同じような手順で、ネットワーク接続の選択画面でAirMacを選択しました。

 インストールした後の感想ですが、時間自体は20分から30分に長くなったものの、DVDドライブも動かないので快適です。肝心のデータ転送速度は4.0MB/秒(下の画像を参照)位出ていますので、悪くはないのかと思います。


インストースする時には、OS X Serverのシリアルナンバーハードウェアシリアルの頭8桁を別の紙に控えておくと意外と便利です。


2009/11/02

Snow Leopard Server搭載Mac mini (3)


 まさか次の日(前の日を参照)に届くと思っていなかったのですが、Snow Leopard Server搭載のMac miniが 11/01 に届きました。分解記事等はコチラを参照するとして、光学ドライブが無い為か軽いような気がします。

 と言う事で、早速インストールから始めます。購入直後は既にインストールされた状態で出荷されていますので、共有コンピュータへ接続から読んでいただければ良いですが、RAID1を構成するとかでインストールをし直す場合には始めから読んでいただく事をお勧めします。

実施環境
  • Snow Leopard Server搭載Mac mini 1台
  • MacBook Pro 1台
  • AirMac Extreme 1台 (ルータでも可)
  • USBキーボード 1台 (Windows用でも可)
リモートインストール行いました。ですので、Mac mini用のモニタとマウスは必要ありません(本当はキーボードも使わない予定でしたが)。Mac OS X リモートインストールは/Applications/Utilitiesにありますので、インストールDVDをMacBook Proに入れてからアプリを起動します。


インストールDVDを選択します。ちなみに、DVDまたはCD共有サービス有効にする必要はありません。OSではなく、アプリをインストールする際に必要になります。
 

使用ネットワークはEthernetの方が確実だと思います。


この状態で、Mac mini側のIPアドレスを控えておき、USBキーボードを挿して再起動します。起動メディアを選択する為、再起直後にoptionキー(Windows用であればaltキー)を押し続ける必要があります。


本来なら、ここでMac miniにモニタを繋いで起動ディスクを選択するのですが、モニタを使用しない企画ですので、勘で選択します(汗。具体的には、Mac miniが起動したと思ったら右キーを押した後Enterキーを押します。すると下の画像の様にDVDを読み込み始めますので、インストーラーが起動するまで少し待ちます。


共有コンピューターへ接続
起動後、控えておいたIPアドレスを使用し、MacBook Proから画面共有でMac miniに接続をします。Snow Leopardでは、/System/Library/CoreServices/画面共有 に収録されています。


この時点での接続は、ユーザー名がそもそもありませんので、ユーザー名無し・パスワードはハードウェアシリアルの先頭8桁を使用します。


使用したい言語を設定します。


RAID1(ミラーリング)構成にしたいので、メニューからユーティリティー/ディスクユーティリティーを選択します。


設定中はこのような形になります。これで、作成を押すとRAID1が構成されます。


ディスクユーティリティーを終了し、インストールを続行します。先程構成したRAID1ボリュームが認識されています。


2台目の500GBハードディスクはTime Machineでバックアップ用途に、と想定していると思うのですが、2台のうちどちらかのHDDが壊れた時点で被害は甚大なので、RAID1構成の方が安心だと思います。


インストール後の設定については、次回投稿します。


Powered By Blogger