2012年5月23日水曜日

UnityのAssetBundleでハマったこと

大量にプリセットで用意された3Dオブジェクトやアニメーションデータをユーザーが好きに組み合わせてシーンを構築するコンテンツをUnity3Dで作っているときにハマったこと。

 

今までUnity3Dで作成したコンテンツはどれもアプリ起動時にメモリ内にすべてのリソースを読み込んでいたけど、今回のはあまりにもリソース量が多い & アプリ本体を更新せずに素材の追加配信を行いたい、ということでAssetBundleという仕組みを利用しリソースをアプリ外に押しやり、必要な時に逐次読み込み & 逐次破棄を行うことにした。

実装自体はパパッと出来たんだけどここで一つ問題が。

読み込んだAssetBundleが不要になったのでAssetBundle.Unloadで破棄しようとしてもメモリが解放されない。

なので、シーンを構築するために3Dオブジェクトやアニメーションデータを色々と読み替えているとメモリ使用量が膨れあがりそのうち「メモリが確保できない」というエラーメッセージとともにアプリケーションがクラッシュすることに...。 

 

前置きはここまでで、この問題の解決方法。

Resources.UnloadUnusedAssets() を呼ぶ。

調べてわかったのですが、これはAssetBundleを破棄するときだけではなく、Resources.Loadでリソースを読み込んで破棄する場合にも呼ぶ必要があるみたい。

勿論 Resources.UnloadUnusedAssets() 呼ぶ前に対象を参照している変数にnullを突っ込まないと残念なことになるので注意。

Resources.UnloadUnusedAssets() を呼んでもメモリ使用量が減らない場合は何処かで参照していないか疑いましょう。

Android版Firefox Betaで中華フォントが使用される

タイトル通りHTC VividにFirefox Betaをインストールしたら何故か中華フォントで表示された。

Screenshot_2012-05-23-21-39-28

ICONIA TAB A500では問題無かったし、周りにこうなった人は見受けられなかったのでHTC Vivid(または自分の端末)に何か問題があるのでしょう。

 

前置きはさておき、ちゃちゃっと解決方法を。

アドレスバーに about:config と入力すると詳細な設定が表示されます。

その中から font.name-list.sans-serif.ja という項目を見つけ出し MotoyaLMaru と MotoyaLCedar (自分が使用しているフォントがモトヤマルベリだからこうなのであって、各自が使用しているフォント名に置き換えてください)を追加。

Screenshot_2012-05-23-21-37-38

以上。

特にFirefoxを再起動する必要も無く即時反映される。

 

about:config を見てもらうとわかるけどフォントに関する設定項目は多い。

なので、あくまで自分が解決したケースがコレというだけで他の人が当てはまるかどうかはわからないので注意。

 

この問題は兎も角、Firefox Betaは動作がサクサクで気持ちがいいですね。

Betaということを理解した上で一度触ってみることをオススメします。

MotoyaLMaru

2012年5月15日火曜日

Bluetoothイヤホン XBA-BT75 を購入しました

前置き

買おう買おうと思ってずっと買えなかったBluetooth(以下BT)イヤホンをようやく買いました。

今まで知り合いがBTイヤホンを買うたびに自分も「買おう!」と思い試しに借りて使用してみると

・ペアリングがうまくいかない

・ペアリングに時間がかかる

・音が切断される

・音質がちょっと厳しい

・利便性のためのBT(ワイヤレス)なのに、ケーブルが長かったりコントロールボックスがあったりして取り回しや装着せいが宜しくない。

と、このような不満が続出。

なので購入は見送っていたのですが、SONYが昨年末頃にこれらの不満を解消したイヤホンXBA-BT75を発売。

しかし実売価格が2万近かったので様子見してたのですが、いつの間にか1万4千円まで下がったので購入しました。

 

開封の儀

P1030259

パッケージ表面。

 

P1030260

裏面。

各種説明文。

 

P1030261

中身。

 

P1030262

付属品。

充電器、ポーチ、microUSBケーブル、イヤーピース。

 

P1030264

マニュアル類。

各社の携帯電話・スマートフォンのためのペアリングガイドも載っている。

 

P1030265

本体。

BT通信部やバッテリは耳のユニットに納められているのでコントロールボックスをぶら下げる必要は無し。

 

P1030266

充電器。

見た目がユニークなので、コレを見た人から「これ何!?」とよく言われる。

 

P1030272

SONYのロゴが眩しい…。

 

P1030277

耳のユニット部は大きいけど重くはない。

リモコンは音量調節だけじゃなく、再生・一時停止・曲送り・曲戻しにも対応している。

 

P1030279

イヤーピースはサイズごとに色分けしているのが良いね。

 

感想

耳に自信は無いのですが3日間使ってみて率直な感想を。

ちなみに今現在他に使用している他のヘッドホン・イヤホンはMDR-CD900STATH-CKS90ATH-A900

そろそろヘッドホンも新しいのが欲しいですね。

 

・音質

BTイヤホンにしてはとてもいい音(好みの音)だと思う。

この価格帯のバランスドアーマチュア型にしてはそれなりに低音も出ているし、中〜高音はなかなか綺麗。 

低音に関してはBTだからというよりも単純にシングルドライバーの限界なのかも...。

全体的に綺麗な音が鳴るけれど、悪く言えば面白みは全くない。

 

・装着感

イヤホンの掛け方が特殊(?)なので最初は慣れなかったのですが、今は問題無し。

しっかり装着すれば軽く走ったくらいじゃ外れることはないと思う。

重さはまったくと言っていいほど感じないのが素晴らしい。

耳周りのコードが柔らかく装着をうまくフィット出来ないときがあるので、ある程度形状記憶するタイプのコードにして欲しかった。

 

・遮音性、音漏れ

電車内のアナウンスが聞こえなくて乗り過ごす程度には遮音してくれる。

音漏れの確認を家族に手伝ってもらったけど、それなりに音量を上げても聞こえない言われたので大丈夫でしょう。

 

・BT接続

主にHTC VividiPod Touchに繋いで使用中。

電源入れるとすぐに繋がるし、満員電車内や地下鉄でも途切れることはない。

ただし、ガラケー(N903i)にHTC VividやiPod touchを密着させているとブツブツと切断される。

音の遅延はちょこっとあるので、ゲームで使用すると辛いケースがあるかも。

 

・バッテリー

充電機能付きケースがあるのでトータル12時間保つけれど、1回あたり3.5時間しか保たないのはちょっと厳しい。

自分みたいに通勤時間だけ使うという人には問題無いけど、家の中でも常用したいという人には使えない 。

そもそもBTイヤホンにそこまで求めている人がいるのかは疑問だけど…。

 

・リモコン

使い心地は悪くないけれどリモコンの場所が場所だけに端から見たら首を掻いている人に見えそう。

曲送り・曲戻しのボタンを長押し手ではなく独立にして欲しかった。

・マイク

恐らく使うことは無いと思うけど試してみた。

テストはSkype(Wi-Fi)で行ったけど、ちゃんとクリアな音声で相手に届いている模様。

ただし、密閉性故か自分の声が頭の中に響き渡るのが困る。

 

まとめ

これぞワイヤレス!という感じの一品。

音質よりも利便性を重視する人にオススメしたい。

が、価格が価格ので正直オススメしにくい…。

 

満員電車内で気兼ねなく使用できるのは本当に助かる。

 

2012年5月13日日曜日

116円ケチるために頑張ってAndroidアプリを開発した

前置き

自分はAndroidタブレットの ICONIA TAB A500 を使用するときはいつも横向きで使用する。

なのでたまーに↓のような縦向き固定のアプリに出くわすととても悲しい気持ちになる。

device-2012-05-13-212834

この問題を解消するアプリないかなーと探すものの、引っかかるのは画面の自動回転をON/OFFするアプリばかり。

そんななか唯一見つかったのが Orientation Control というアプリ。

しかし有料。

いや、116円くらい出せよ!という声が聞こえてきそうなのですが今月はすでに懐が心許ない状態。

あとは出来ればGoogle Checkoutに登録したくないというのも理由のひとつ。

(余談だけどGoogle CheckoutはAppleのiTunes カードみたいにクレカ不要で買えるようにして欲しい。

さらに言うとJCBやPayPalなどにも対応して欲しい。)

というわけで自作してみる。

とは言ったものの、コレにあまり時間をかけたくないので2日間かけて出来なかったら素直にGoogle Checkoutに登録して116円でアプリを購入する。

 

始めに

Orientation Control の説明文やアクセス許可を拝見。

説明文にはrootが不要、必要なアクセスは 端末のステータスと ID の読み取り・システムの全般設定の変更・起動時に自動的に開始 の3つ。

もしrootが必要だったりアクセス許可が多かったら諦めようと思っていたので安堵。

とりあえず超トリッキーなことをしているわけでは無く、普通にAndroidで出来ることをして画面の向きを固定指定しているみたいだ。

それにしても システムの全般設定の変更 と 起動時に自動的に開始 というのは兎も角、端末のステータスと ID の読み取りは何に使っているのだろうか?(未だにわからない...)

 

自動回転

システムの全般設定の変更 というわけで Settings.System | Android Developers をざっと眺めてみる。

目に付いたのは ACCELEROMETER_ROTATION と USER_ROTATION。

あれ?これでいけるんじゃ…。と思いパパッと実装して見るも轟沈。

ACCELEROMETER_ROTATION は予想通り自動回転の有効・無効を設定するものだったけど、USER_ROTATIONは設定した向きに固定するのではなく、自動回転が有効の場合、どの方向に回転出来るのか設定するものでした。

 

表示レイヤー

実はどう巡って 画面上にアプリの情報を常時表示する こちらのページに辿り着いたのか覚えていないけれど(恐らくWindowManagerとServiceらへんを調べていた)、このページの「Androidの画面(View)は複数のレイヤーで構成されており、これらのレイヤーは情報の重要度・優先度によって使い分けられています。」という一文を読んで閃きました。

通常アプリより上のレイヤーに横向き固定のViewを作ればいいんだと。

 

横向き固定のView

こういうのは例によってレイアウトを弄れば良いんでしょう?

というわけでWindowManagerにViewを追加するメソッド addView の第2引数に使われる WindowManager.LayoutParams クラスのドキュメント WindowManager.LayoutParams | Android Developers を読んでみる。

するとフィールドに screenOrientation というもっともらしいものを発見。

この screenOrientation のデフォルト値は SCREEN_ORIENTATION_UNSPECIFIED という特に向きについて指定しないもの。

これを SCREEN_ORIENTATION_LANDSCAPE にするば横向き固定になる。...はず。

 

実装

先ほどの表示レイヤーについて言及しているページに掲載されているソースコードを元にちゃちゃっと実装。

ついでに調べ物をしている最中に殺されにくいServiceの作り方 Service | Android Developers を見つけたので実装してみる。

.

.

.

 

そんなこんなでゴリゴリソースコード書いてちゃちゃっと完成

 

 device-2012-05-13-213433

操作方法は実にシンプルでわかりやすい。

というか寂しい…。

 

device-2012-05-13-213450

先ほどの縦向き固定のアプリもこの通り。

 

というわけでアプリを作ろうと思い立ってから4時間ほどで目標達成。

自分にしては珍しく(奇跡的と言っても過言ではない)目標時間内に終わらせることが出来た。

 

成果物

誰得な感じもするけれどアプリのapkとソース一式。

https://github.com/monkiti/LandscapeLock

https://bitbucket.org/monkiti/landscapelock

GitHubとBitbucketの両方にアップしてますけど当然内容は一緒です。

それにしても初めてまともに使った(Bitbucket自体はPrivateで沢山使っている。)ので色々と不安。

BitbucketとGitHubを同期させるのにえらい戸惑ったなぁ。

 

まとめ

たかが116円ケチっただけでAndroidの表示レイヤーと殺されにくいサービスの作り方を学べたのは大きかった。

とは言え、毎度毎度こう都合良くいく筈も無いので次からは素直にお金を払いましょう(と言いつつも今回のことに味を占めてまた自前で作りそうだけど...)。

 

今気付いたんだけど 対象の気になるアプリを購入する → 15分以内にアプリの動作などを調べ上げる → 購入をキャンセルして払い戻し → 調査結果を元に自前でアプリを作成 とすると(ry

2012年5月9日水曜日

我慢の限界なのでICONIA TAB A500にカスタムROMを入れてみた

前置き

Acer、北・中南米向けICONIA Tab A100/A500のAndroid 4.0アップグレード実施時期を発表 にあるとおりICONIA TAB A500のAndroid OS 4.0へのアップグレードは北・中南米向けにすでに行われている。

が、例によって日本モデルにはまだアップグレードが来ていませんし時期も公表されていません。

恐らく今まで通りなら約1ヶ月遅れでくるので、今月末から来月頭に来るんじゃないかと思われます。

あと一ヶ月くらいなら待てばいいじゃん?と言いたいところだけど、新しい物好きとしては我慢できなかった...。

そもそも去年の末あたりから「A500にICSまだー!」と叫んでいるのでこれでも結構我慢したんです。

 

※追記(2012年11月04日)

Android OS 4.1 (Jelly Bean)のカスタムROMインストールについては ここここ を参照ください。

※追記ここまで

 

※追記(2013年06月04日)

Android OS 4.2 (Jelly Bean)のカスタムROMインストールについては ここ  を参照ください。

※追記ここまで

 

実践

特に難しいところもないので子細は省略。

いつもカスタムROMを入れるのに1日〜2日かかる自分がお昼休みにサクッと入れられる程度には簡単かと。

 

とは言え当然何が起こるかわからない非公式なものなので、やるならば自己責任で。

 

※追記(2012年07月16日)

自分はmicroSDを使いましたがUSBメモリでも出来るみたいです。

※追記ここまで

 

・root化

How to root stock 3.2

↑の一式まとまったツールをダウンロードしてReadme通りにやるだけ(説明は全部英語だけど丁寧だし、セットアップツールは日本語化されている)。

一式セットなのでとても手軽な分、容量結構が結構あるので注意。

ちなみにroot化するときにデータが初期化されるのでバックアップなどは予めやっておきましょう。

 root化すると同時にCWM(ClockWorkMod)もインストールされるのであとは好きなROMを焼くだけ。

 

※追記(2012年07月16日)

・CWMの更新

後述するTegraowners ICSというカスタムROMをインストールする場合、Tegraowners ICS v168以降はCWM rev 1.73が必要(前述のroot化ツールを使用した場合はrev 1.3.4になっているはず)なので先にCWMを更新する。

Forum TegraOwners • View topic - Touch Recovery v1.7.3 からupdate-recovery-thor2002ro-rev1.7.3.zipをダウンロードして解凍せずにA500のmicroSDにコピー。

 一度A500の電源を落とし、ボリュームダウンボタンを押しながら電源ボタンを押してリカバリモード(CWM)を起動。

とりあえず現状を保存するために backup and restore でバックアップを取っておく(バックアップしたデータはmicroSDに入るので空き容量にに注意)。

 install zip from sdcard → install zip from sdcard を選択し update-recovery-thor2002ro-rev1.7.3.zip を選択しインストール。

再起動すれば更新完了。

Touch という名前通りティスプレイをタッチして操作が可能に。

※追記ここまで

 

・カスタムROMのインストール

いくつかICSに対応したカスタムROMがあるけれど比較的安定していそうな Forum TegraOwners • View topic – [Dev]A500/A501 ICS device building Part. 2 に決定。

ダウンロードするのにフォーラムへの登録が必要です。

Tegraowners_ICS_v***(バージョン番号).zipとgapps-ics-***(日付)-signed.zip の2つファイルをダウンロードして解凍せずにA500のmicroSDにコピー。

一度A500の電源を落とし、ボリュームダウンボタンを押しながら電源ボタンを押してリカバリモード(CWM)を起動(A500は向きによってボリュームダウンボタンとボリュームアップボタンの位置が変わるらしくなかなかリカバリモードに入れず四苦八苦してました)。

とりあえず現状を保存するために backup and restore でバックアップを取っておく(バックアップしたデータはmicroSDに入るので空き容量にに注意)。

次に念のため wipe data/factory reset と wipe cache partition を実行しておく。

あとは install zip from sdcard → install zip from sdcard を選択し Tegraowners_ICS_v***(バージョン番号).zip、gapps-ics-***(日付)-signed.zip の順番にインストール。

最後に reboot system now で再起動しておしまい。

 

・フォントの変更

例によって中華フォントなのでサクッと変更する。

MTLmr3m.ttf(モトヤLマルベリ3等幅) をダウンロードし DroidSansJapanese.ttf にリネーム、そしてA500の /system/fonts ディレクトリにコピー。

自分はPC側でダウンロード、A500のmicroSDにコピー、A500のES ファイルエクスプローラー(設定でルートオプションを有効にしておく)というアプリケーションで /system/fonts にコピーしました。

コピーし終わった後は DroidSansJapanese.ttf のパーミッションを0644(rw-r--r--)に変更(ES ファイルエクスプローラーならファイルのプロパティから設定出来る)。

ICS(4.0)以前はこれでお終いだったけど、ICSからは /system/etc/fallback_fonts.xml ファイルに DroidSansJapanese.ttf を使用する旨を追記しないといけない。

追記する内容は

<family>
    <fileset>
        <file>DroidSansJapanese.ttf</file>
    </fileset>
</family>

で、上にあるものほど優先されるので<familyset>の下に追記することをオススメ。

自分はES ファイルエクスプローラーのエディタでそのままファイルの編集を行った。

最後にA500を再起動したら完了。

 

・スクリーンショット

Screenshot_2012-05-09-11-42-43

ホーム画面。

3.xの時にあった右上の+ボタン(カスタマイズボタン?)がなくなった。

 

Screenshot_2012-05-09-11-45-17

アプリ一覧。

公式のものだとごちゃっと大量に不要なアプリがインストールされている(しかも消せない...)のに比べ、随分シンプルで感動した。

 

Screenshot_2012-05-09-11-45-49

ウィジェット一覧。

サムネイルでパッと眺められるようになったのでとても便利に感じる。

 

Screenshot_2012-05-09-18-28-46

タブレット情報。

メモリは1GBじゃなくて720MBなのは何故なんだろう?

VRAMに300MBほど取られているということ?

 

感想

3.xから4.xはそんなに変化がなくあくまでブラッシュアップしたという感じなのと、既にHTC VividでICSを体験しているので特筆すべき感想というのはなかったりする。

ただ、ICSになったからなのか、カスタムROMに無駄なアプリが入っていないお陰なのか、カスタムROMのチューニングによる成果なのかはわからいけれど、今まで使用していた3.2.1より体験的に速くなったと感じる。

前述の通り革新的な新機能やUIの変化というのは無いけれど、

・スクリーンショット撮影機能搭載

・ホーム画面でアイコン同士を重ね合わせてグループ化

・アプリボタンで表示される最近使用したアプリをスワイプで終了

・ロック画面からカメラを起動したり通知が見られる

・カメラアプリのパノラマ撮影

・ギャラリーアプリで画像編集が可能に

・アプリ一覧とウィジェット一覧が統合された

・トグルスイッチの採用により一部設定が手軽になった

などなど細かいところで便利なったのでとても使いやすくなりました。

 

最後にここまでやっておいてなんですが、早くICSを体験したい!、フォントを好きに変更したい!、最初から無駄に沢山入っているアプリを消したい!、バッテリーの保ち改善したい!、root権限必須な便利アプリを使いたい!というのでもないかぎりは公式のものを待った方がいいと思います(あと1ヶ月くらいで日本にも来ますよねAcerさん?)。

自分としては邪魔なアプリを消せるというだけでカスタムROMを入れた甲斐があったなと思いました。

気持ち的にも動作的にも軽く感じる!

 

2012年5月3日木曜日

金環日食に備えて

2012年5月21日は全国的部分日食が、地域によっては金環日食が起きる日。

詳しくは こちら を見てもらうとして、東京近辺で金環日食が見られるのは173年ぶりで次回は300年後のこと。

これは是非とも堪能せねば!というわけで

B005LYSBXI.01.MZZZZZZZ.jpg

こんなものを買いました。

他の遮光グラスと比べると価格が高いのですが、他のモノより3倍大きく見えるというのと使い捨て感が無いのでコレにしました。

 

しかし、若干気が早いような気がしつつ準備したのはいいけれど、これで当日の天気が曇りや雨だったり朝起きられなかったら(7時半頃が最大食)ガッカリだなぁ。

折角の貴重な天体ショーなので今から照る照る坊主でも作ってベランダに並べたいところ。