2017年4月27日

Tango + Cardboard/Daydreamの話

(今書いている)某後編に入らない(入れられない)話についてここに書き残しておきます。

【先に結論】
プラットフォーム ライブラリにリンクした NDK アプリ
https://developer.android.com/about/versions/nougat/android-7.0-changes.html?hl=ja#ndk
この話のせいで、DaydreamのためにtargetSdkVersionを24にするとTangoが動きません。2017 AprilにSDKをアップデートしておきながらAndroid 7.0であるtarget24で動作しないとものを出すとかもうちょい足並み揃えてよGoogleって感じです。

ところが、5.4.2f-GVR13のDaydream Technical Previewを使ってDaydream/Cardboardコンポーネントを追加したものにTango SDKを適用すると、min17 target23のままなぜかヘッドトラッキングと二眼Viewだけが動作します。ネイティブVR対応側でCameraのTransformを上書きされるのでRotationやPositionは思うように行きませんが、赤外ToFセンサによるPointCloud表示などは問題なく動作し、Tangoシステムとしては特別に停止されてはいない気配です。

ものすごく誰かががんばるとそれなりポジトラぐらいは動くのではないでしょうか。よろしくお願いしますGoogleさん。

【前提】
・検証Unityバージョンは「5.5以前」「5.6」「5.4.2f-GVR13 Daydream technical preview」の3つです。これは「UnityがVRにネイティブ対応したかどうか」の境界線です。
・VRネイティブ対応のバージョンでは、Virtual Reality supportのチェックを有効にして、それぞれ"Daydream"か"Cardboard"かのコンポーネントをどちらか1つだけ設定しています。
・「min」はminSdkVersion、「target」はtargetSdkVersionを指します。

【Cardboard】
・5.5 + 古いGoogle VR SDK:OK
・5.6 + Google VR SDKあり:target24になってしまい、Tangoが動的リンクエラー
・5.4.2f-GVR13 + Google VR SDKなし:OK
・5.4.2f-GVR13 + Google VR SDKあり:target24になってしまい、Tangoが動的リンクエラー

【Daydream】
・5.5以前はDaydream非対応
・5.6 + Google VR SDKあり:target24になってしまい、Tangoが動的リンクエラー
・5.4.2f-GVR13 + Google VR SDKなし:実は動くけどGoogle VR SDKを入れられないのでコントローラが使えない
・5.4.2f-GVR13 + Google VR SDKあり:target24になってしまい、Tangoが動的リンクエラー

【他補足】



Tangoの動的リンクエラーはこんなlogcatになります。

Daydreamセットアップ済みデバイスにCardboardのQRコードを読み込ませるとDaydream Viewヘッドセットに戻るルートがなくなります。Google VR Serviceのストレージデータを初期化するとDaydreamのセットアップウィザードからやりなおすことができます。 ヘッドトラッキングが二重でおかしいので世界は90度まわるのですが、Tangoは45度分しかSLAMしていないのでこんな表示になります。 →ただのCamera二重化だったので親子でカメラが重なったりしないようにしたら直りました。 5.4.2f-GVR13 + Tango SDKでmin17 target23というトリッキーなDaydream+Tangoに成功。 このPointCloudシーンは点群を示す虹色のキューブだけにTangoのMotioinTrackingが効いており、歩くと遠くへ移動していってしまいますw

2017年3月11日

#DroidKaigi 2017感想

DroidKaigi2017に参加しました。
最近のAndroidはよくしらないのでわからないことばっかりだったのですが、まぁわかんなくてもわからんことを気づくこと自体も楽しかったですよ、うん。

○わからない度合い

・知らない:ReactNative
・知ってるだけ:Kotlin, DDD, Chrome Custom Tabs, LayoutManager
・Hello Worldはしたことがある:Orma, Firebase(Realtime DB)
・どんなものかおさえるため少し試したことがある、採用していない:RxJava/RxAndroid, React, Realm
・試作案件で導入した・経験がある:Data Binding, ActiveAndroid, target23
・商用案件で導入した・経験がある:PubSub(EventBus/Otto), OkHttp, system app, BLE
・MV*については「ViewとModelがちゃんと分かれてば他はだいたいどうにかなるんだよ!どうでもいいよ!」サボり派

○聞いたセッション一覧と感想

【1日目】
・マッチョActivityを改善した話
「どうController/Presenterの肥大化を抑えるか」という話かなと思ったのですが、「とにかくでかいActivityをMVPありきでModelを分離してDI可能なようにstatic排除した」staticおじさんへの呪詛が多く「いいものはいいんだよ!わかるだろ!」がわかりませんでした。

・Android Security 最前線!!
ロックと暗号化つらかったのDirect Bootでどうにかなったのね。まぁロックつらいようなアプリは安易にロックスクリーンしがちですが。「いいからデバイス証明書にこれインポートしろ!」しないで済むNetwork Security Config便利そう。

・Androidリアルタイム通信アプリ作成Tips
OkHttpでWebSocket使えるようになったのですね。ただWebSocketはWeb側ですでに・・・とかじゃないと採用しない気がします。FirebaseとかRealm Mobile Platformの話は中身がコードばっかりすぎて密度高くてきつかったですね。
僕は機能なんかより「OSS度」「ロックイン度」「公式度」からRealmをとくにオススメしないマンだったのですが、Realm Mobile Platformはむしろエンプラでクローズドなプロダクトで便利そう。

・Data Bindingで開発を気持ちよくしよう
初心者向けに優しいところから順番セッションでした。「つらいとこでは使いません」がはっきりしてて良い質疑応答だったなと思います。さらばFindViewByIdとかさらばif(isVisible)ぐらいのあたりまでが一番導入コスパフォ高くていいと思ってます。

・実践アニメーション
アニメGIFらしき実例のフレームレートが足りなかったかな・・・。

・オフラインファーストなアプリケーション開発
かなりあとのほうまで聞いて、「マスタがインターネットにあってローカルがキャッシュという話とは逆で、ローカルDBに対するアプリとして作っても、Realm Mobile Platformを使えば+αいけるよ、オフラインファーストの方がよさそうなアプリでは使ってね」というトータルの言いたいことがわかりました。
ざきさん知ってれば予想はついたとは思いますが、Realm Mobile Platformの単語出さずにこれはちょっとRealm前提すぎて騙し討ちだったような・・・

・React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか
発表材料をでっかく作った上で丁寧に取捨選択・圧縮してある印象で面白かったです。紹介・導入・評価・実例、オチまで30分枠につめた圧縮手法すごい。

・Android Bikeを作ろう
ようこそBLEへ。

【2日目】
・Android ORMの選び方
丁寧だったけど読み物すぎて書籍で読みたかった感じ。Ormaでマイグレしたことがない(カラム追加以外のまともなマイグレが必要になったことがない)ので今度試しますごめんなさい。

・個人で11個のアプリを公開した結果
参考になるかはさておいて、あるある話満載で楽しかったです。みんな作りたいから作ったしような。

・いまからはじめるAndroid 6.0対応 〜Android 7.0から8.xを見つめて〜
あんまり7,8を見つめてなかった感が・・・「去年採択されなかったのを出したら通っちゃいました」、えーと。

・Systemアプリ開発入門
「AOSPビルドしたことがある人」ぐらいじゃないと話にならなかったと思うのですが、まぁセッション参加者も猛者ばっかりで問題なかった気がします。
どちらかというとマルチユーザ対応さらに需要ないと思うんでおまけのAndroid Studio/debug話の方が聞きたかった感がありました。

・Chrome Custom Tabsをさらに使いこなそう
サンプルアプリとスライド事前公開ありがたい、「WebViewはちょっと武器庫すぎたから遊ぶのはこの砂場で我慢してくれよな」がよくわかりました。

・Fireside Chat
あったまった

・LayoutManagerをつくろう
「もう少しいうこときかせられるつもりでとりかかったけど強かった」セッションになってました。質疑応答の「お前はこう、俺はこう」がよかったです。

○KPTのT

Try
・見知らぬ人に突然押し付けるためのコンテンツを用意しよう
・直前にAndroidについてつらい気持ちにならないように業務や人生をコントロールしよう

○その他感想

・VRとかAndroid Thingsとかなくて多様性についてはもう少し欲しかったな、と感じましたがまぁでも「みんなが(=3割ぐらいの人が)聞きたいコードの出てくる話かと考えた際にそんなに需要はないか」とも思ったので、「セッションで話すべき」ではなくて、スポンサーブースとかゲリラデモとかAfter partyとかセッション外でも場がないわけではない気がしてきました。
・ただ、ReactNative/XamarinあたりのAndroidの多様性というプールでキャッキャ遊んでる盛り上がりと比較すると、Rx, MV*満載で「コードはこうあるべきだ」理想追求はちと抽象化されすぎで、「実際の問題についてコードでどう殴るか」まで落ちてないセッションを引いてしまった印象でぐぬぬでした。
・「どう理想の世界をつくるか」よりは「どうなんとか(スキルがつらい、客がつらい、同僚・上司がつらい)やっていくのか」が必要だと思うんですが、みんななんとかなってるんですかね。
・after partyで全然見知らぬ人としゃべらなかったししゃべるネタあんまりもってなかったの反省。個人として退職芸人中のステータスが悪いといえばそうなのですが:)

いろいろ最善とはいえないコンディションだったけどそれでも楽しかったです。

2017年3月 8日

iOSユーザとAndroidユーザを戦わせなくてもいいじゃないか

【デザイナー向け】これからAndroidのデザインをする人へ
http://qiita.com/AAkira@github/items/02814f337f4eb2d30f2e

なんとなく思うことがあったので。

○全般

【デザイナー向け】という枕詞をつけるのであれば、Android用語をもう少し一般的な表現に直した方が良いかな、と思いました。「Androidに詳しい人へ向けたAndroidのデザインに関する愚痴」のテイストが少し強すぎという印象です。

○個別

・見出しが「Android用語」と「デザイン用語」と「(はじめに、や一番いいたいこと、など)文章を構成する一般的な見出し」が混在していて読みづらいと思いました。

・僕の経験則で言うと、すぐれたデザイナーはiOSのデザインコンセプトがきちんと別の体系に翻訳されていますので、単にAndroidを使っているだけではなかなかそのMaterial Designの全容を体系だって体得するには至らないと思います。そのため、「いいから2台もちしろよ」みたいな乱暴で(コストの高い)提案ではなくて、貸してあげるとか、タブレットにでもどうだい、とか、このアプリは比較して30分使ってみるとAndroidについてよくわかるよ、とか、そのぐらいがイイトコロじゃないでしょうか。

>「Android暗黒時代と呼ばれる2系の端末を所持していた経験があり、Androidに嫌悪感を抱いています。」
あんまり暗黒時代と呼ばれてない気がしますし、真にヤバかったのってIS○3とかIS○4とかではないですかね・・・「葬式UI」ではありましたけど2.3は(とくに2.3.3以降)ほどほどだったと思いますし、Honeycombなら暗黒時代と呼ぶのはわかるんですが、「2系は暗黒時代とよばれていた」みたいな表現はちょっと乱暴に感じます。

あと、俺は詳しいんだアッピルするなら「2系」とか「5系」とか小数点以下ふっ飛ばさないでほしいのです、「4.4系(通称 KitKat)」ももう一息丁寧に

>一旦5系以上の端末(日本, 中国製, 低価格帯は除く)を使用してから言って下さい。
これも「中国」といわゆる「中華端末」が区別されてない印象を受けます。例を挙げるとHuawei、Nexus6Pとか、ね?

>dp(dip), sp
>dp
「密度非依存ピクセル」という説明の前にいきなり「○○は大事である」って入ってて思考ジャンプが強いです。
その割には「pxという言葉は忘れてください」ってこれも乱暴ですし、忘れないでもいいじゃないですか。
さすがに5インチWQHDはアレかなー、って思いますが、6インチFHDぐらいならピクセルパーフェクトは結構狙って価値があると思いますよ?

>dpがない場合はこのように表示されます
>dpがあると同じ様なサイズで表示されます
この表現はなんだかよくわからないです。

>sp
>AndroidではiPhoneとは異なり そもそも複数画面サイズがある前提なので、
「iOSとAndroidのシステムフォント設定サイズへの追従度」について、とくに手持ち情報があるわけではないのですが、iPhoneもSEから6P/7Pまで結構サイズ違っちゃってるじゃないですか。
フォントサイズ設定に耐えられるUIの柔軟性設計は(そもそも他言語の方が鬼ではありますが)どちらでもそれぞれ大切だ、ぐらいの方があってるのではないでしょうか。

>4の倍数
さっき「pxという言葉は忘れてください」って言ったじゃないですかー。

https://material.io/guidelines/layout/metrics-keylines.html
"All components align to an 8dp square baseline grid for mobile, tablet, and desktop. Iconography in toolbars align to a 4dp square baseline grid."
Material Designのテンポがそうだから「8dp(4dp)のグリッドに・・・」でいんじゃないですかね。

>戻るという概念
こんにゃろめ、"Up"という単語を使わずに説明しようとしてわかりづらくするなんてハッハッハ

>下タブ
下タブそのものが悪だったのかはよくわかりません。ガイドライン違反はアレだと思いますが。

>WebView
Chrome Custom Tabで概ね勝利なのですが、「iOSはintentという概念が無いので、よく使われます。」というのも少し首をかしげます。
back to appでcustom URL scheme組み合わせるやつとかiOS9からそれなりにいい感じですよね?

>基本構成
IDEのファイル構成を説明するのは本当にデザイナー向けなんですか・・・?なんのための説明・・・?

>アンチパターン
>プルリクエスト
このあたりクライマックスしてて、(気持ちはわかるんですが)「iOSユーザの気持ち」にも「デザイナーの気持ち」にも寄ろうとせずに「Android開発側の流儀ぐらいちゃんと把握しろよ!」テイストを強く感じました。

iOSとAndroidバトらせるんじゃなくて(いやそれはそれで楽しいのですが)、素直にデザインとUIとプログラミングの良い関係を目指していきたいものです。

P.S.
ドラムロールだけはさっさと滅べ>iOS

2016年12月 2日

BT-300メモ #bt300

EPSON MOVERI BT-300が発売になったので、メモを残しておきます。前回はBT-200メモというのを書いてました。

総論:いい意味でも悪い意味でもカタログスペック以外あまりお変わりない印象です。

<オススメ手順>
0. Android開発環境が構築されているPCを準備する。
1. BT-300の設定からビルド番号7回タップで開発者オプションを表示させ、adbを有効にする。
2. Vysorを入れ、以下入力操作をVysor経由で行う。
3. 提供元不明のアプリインストール許可設定を有効にし、WiFiを設定し、ブラウザを起動する。
4. "amazon.co.jp/getamazon"を入力し、Amazonアプリ完全版をインストールする。
5. nicoid(ニコニコ動画プレイヤー)をインストールし、ハーフ(通常のディスプレイで見ると横につぶれている)のside by side動画を探し、3Dで閲覧する。

ハーフのside by side MMD動画の作成方法は、MMM 1日目 物理演算結果を固定したいこのあたりに書きましたが、「つちのこparallax.pyで左右カメラ+MMMによる物理焼き込み+AviUtlでの合成」で特に3年前からとくに変わっていないとおもわれます。

6. Amazonビデオアプリをインストールし、プライムビデオを寝ながら見る。

TODO
・BLE・全天球動画の動作確認
・Cardboard SDKをいじって樽型歪み補正無しでBT-300に提供できるか確認

2016年10月31日

DroidKaigi 2017のCFPを読んでトレンドをおさえた気になってみたい

が出揃ってきて、一通り読んでみています。読んでるだけで面白い。

DroidKaigi 2017 プログラム応募状況
https://docs.google.com/spreadsheets/d/1k4bpUjpAyiJfTCJCFc9y48FYQAujZfCA_fxsmN2M4LI/

104個目まで読んだ感想

・何しゃべるか分からんの結構ある
・「それ以上でもそれ以下でも無い」組がやはり面白そう
・テーマかぶってそうなのは対決とかしてほしい。
・"CFP"というテイストだとこのぐらいが妥当かな、とも思うけど"企画"級に練られてそうなの見たい。


※以下、備忘録メモ。中身は無い。

続きを読む "DroidKaigi 2017のCFPを読んでトレンドをおさえた気になってみたい"

2016年10月25日

Android History 2016

android-history-2016.png

毎年恒例のやつを更新しました。

Android History 2016
http://www.slideshare.net/youten_redo/android-history-2016

以下、年表元データ。

続きを読む "Android History 2016"

2016年7月 2日

Telepathy Walkerがやってきた

KICKSTARTERで事前予約していたTelepathy Walkerが届きました。
https://www.kickstarter.com/projects/telepathy/walker-eyewear-for-entertaining-and-smart-walk

$299のHacker Editionは多分adbが通るAndroidだろうと思ってbackしましたが期待通りのものが来ました。わーい。
電源を入れてUSBで接続すると、adb devicesがすでに効いてましたので、Vysorで一通り普通のAndroidっぷりを確認します。

Hacker EditionとConsumer Editionの差分は以下のForumの話が今の所一番わかりやすいです

Telepathy Developer Forum:電源が入ると普通のandroidの画面で何もできません
https://forum.support-telepathy.com/discussion/9/%E9%9B%BB%E6%BA%90%E3%81%8C%E5%85%A5%E3%82%8B%E3%81%A8%E6%99%AE%E9%80%9A%E3%81%AEandroid%E3%81%AE%E7%94%BB%E9%9D%A2%E3%81%A7%E4%BD%95%E3%82%82%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%9B%E3%82%93

公式サイトをたどっていくと、Consumer Edtion向けのチュートリアル動画があり、目の左右設定(上下が反転する)などの方法が確認できます。

Google GlassとTelepathy WalkerとBT-200を同時につけておおむね満足しました。他の使い方はまたあとで考えることにします。

2016.07.03追記
Consumerの方でもadb通るらしいです。

2016年5月22日

Google VR - Daydreamまとめ

daydream.png

2016.05.18、Google I/O 2016初日のkeynoteでGoogle VRの新たなプラットフォームとしてDaydreamが発表されました。2016 fallにローンチされるまでまだ開発途中でこれからの話やヴェールに隠されたままの話がありますが、誤解を招く様な書き方をしてるニュースサイトがいっぱいあるのでそれがもう少しマシになるといいな、ということでわかっていること、推測できることをがんばってまとめてみました。

と言いながらきっと不適切な表現や間違ったことをかいてしまっていると思いますので、質問や指摘等は気軽にいただけると喜びます。


○公式サイト以上の情報はあまりない

Google公式:Daydream
https://vr.google.com/daydream/
開発者向けGoogle公式:Google VR
https://developers.google.com/vr/

・上記のサイトの構造が示す通り、Google VR取り組みの1つに属します。
・Daydream Readyと言われる、 ある条件を満たしたAndroidスマートフォンを母艦とします。SoC, Sensors, displayが要件として挙げられております。

MediaTek's Next-Gen SoCs To Support Google's Daydream
http://www.androidheadlines.com/2016/05/mediateks-next-gen-socs-support-googles-daydream.html

MediaTekがDaydream ReadyのSoCを、と発表してるので「現行SoCはDaydream Readyではない」と想像でき、現時点ではせいぜいSnapdragon820をターゲットにしている可能性があります。
また、後で述べますがNexus 6P+N Preview3が比較的残念だったのでSnapdragon810機はDaydream Readyではない可能性もあると思っています。

・向き(モーション)の取得、クリック可能なタッチパネル、App Button、Home Buttonの2つのボタンを持った専用コントローラに対応します。

こちらはすでにGoogle VR SDK(DaydreamとCardboardがSDK上の扱いとしては一緒になりました)として公開されていますので、そのAPIドキュメントから能力が分かります。

Google VR SDK for Unity -
GvrController
https://developers.google.com/vr/unity/reference/class/gvr-controller#properties
Google VR SDK for Android(NDK) -
Controller
https://developers.google.com/vr/android/reference/com/google/vr/sdk/controller/Controller#fields

上記2つを確認するに、Quaternionのorientation、タッチパッドのタッチ操作、タッチパッドのクリック(ClickButtonと名前がついています)、AppButtonのクリックが取得できます。UnityだけなぜかVector3のGyroとAccelがとれます。
結論として、ポジショントラッキングには対応していません。

・HMDは専用のものを開発中

というニュアンスの発表でしたが、これはIPDやレンズ距離、装着性をある程度担保した、そして1stローンチの多くのDaydream readyスマートフォンの外観差をカバーできるだけのCardboard互換機であることが想像がつきます。

なぜなら特別な+αの機能はなく、レンダリングもヘッドトラッキングのためのセンサも「Daydreadm readyスマートフォンの中で全て扱う」と発表されているのですから。

Unreal Engine 4, VR and Daydream - Google I/O
https://www.youtube.com/watch?v=CEoDS__sfWA

あなたがある程度のフリークならこのUE4のDaydream紹介公式動画を見た瞬間、「なんだ、Cardboardか」と少しがっかり(安心)したはずです。

Homido
http://www.homido.com/

homido.jpg

これですね。

・Daydream向けHomeアプリの刷新

現状のCardboardアプリもHomeっぽい動きはしていますし、刷新後もおそらくCardboardで使えるんじゃないですかね。Play・Youtube・StreetView・PhotoアプリのVR対応が予定されています。


○Unity 5

あなたのDAYDREAM(空想)を現実に
http://blogs.unity3d.com/jp/2016/05/19/make-your-daydreams-a-reality/

公式にfor Unity SDK同時追従してもらってる割には手抜きかなぁ、もう少し技術的な情報を付加しておいてくれてもいいのよ?という感想は置いといてですね。

・すでにCardboard SDK for Unityをベースに、Google VR SDK for UnityとしてDaydreamとCardboard両方に対応するバージョンアップが発表同日に公開されています。

Google VR SDK for Unity
https://developers.google.com/vr/unity/

・UnityとしてのNative対応(前述のSDKのようなpluginを追加することなく、の意です)は今夏に予定されている。
・また、関連して期待されているVulkan対応はEarly Accessを3Qには予定されているとのことです。この話がProライセンス持ちユーザ限定のclosed betaなのか、現在のUnity5.4のようなopen betaなのかは現時点ではわかりません。


○Unreal Engine 4

アンリアル エンジン 4 が GOOGLE VR プラットフォーム "DAYDREAM" をサポート
https://www.unrealengine.com/ja/blog/unreal-engine-supports-google-daydream-vr

こちらは動画から開発途中、現時点でのいくつかの情報が読み取れます。HomidoにNexus 6Pが刺さっています、現ver.のコントローラは(エミュレータアプリの画像とは違って)細く、少し厚みがあることがわかります。

Let's Enjoy Unreal Engine:UE4 Google VR Daydreamアプリをサクっと試してみた ※追記あり
http://unrealengine.hatenablog.com/entry/2016/05/20/223329

更新履歴のリークがありましたが、公式にはすでに対応が終わっており、UE4のソースリポジトリにアクセスする権限が必要ですが4.12のbranchからソースビルドするとさっくりと使える模様です。

Google VR and Daydream Devices
https://docs.unrealengine.com/latest/INT/Platforms/GoogleVR/Daydream/index.html

UEの公式ドキュメントを見るとNDKまわりの設定が必要とありますので、おそらくGoogle VR SDK(NDK版)をベースにしていると思われます。

mobile向けUEの話ではsimple HMDという名前で樽型歪みとヘッドトラッキングのみ対応していたものが、drift correctionの入ったCardboard/Daydream対応のGoogle VRベースになったということだと思われます。(互換性セッティング用QRコード読み取り画面へのギアマークも入ってますし。)

iOS対応とかSpatial Audio(立体定位音響)対応はどうなんですかね?


○Nexus 6P+N Preview3による開発環境とサンプルアプリ

こちらについてもCardboard SDKとAndroidのOS Previewについて慣れている方なら、タオソフトウェアさんのタオバイザーblogのエントリを読めば一通りわかってしまって以上!という感じですが...。

タオバイザー:Google I/O 2016 で発表されたDaydreamのデモアプリを触ってみた。
http://taovisor.com/news/android-n-daydream-development-kit/

セットアップ上の注意点なども(英語の公式もがんばってるのですが)丁寧に記載されており、ありがたいエントリです。

・VRサービス設定まわりはN Preview 3以降(N5Xとかでもおそらく出るだけは出る)、IFとして動作するのはNexus 6P限定です。
・コントローラエミュレータアプリはManifestとしてはmin19(Android4.4以降)で緩めの制限なのですが、arm64-v8aのバイナリしか入ってないのでARM 64bit石の機種限定の模様です。Nexus5X, Nexus6P, Galaxy6Sで動作することを確認しています。


○試した感想

以下、実際にCardboard 2015とN6PとN5Xで試した際の画面キャプチャを中心としたツイートを雑に並べておきます。
やってる最中は「あー」「なるほどー」「腕疲れるなー」みたいにたるい感じの独り言をつぶやいており、ぶっちゃけあまり感動していなかったことをムダ情報としてお伝えしておきます。

○2016.05.26追記

Qualcommの中の人がSnapdragon820でどうがんばったとか、砂820の自慢話してます。2ページ目も読むのをお忘れずに。(EE Times日本語版は省略して適当翻訳で情報量がかなり減ってますので差分は原文で補完するのをオススメします。)

Google's Daydream is Silicon Reality | EE Times
http://www.eetimes.com/author.asp?section_id=36&doc_id=1329737

2016年5月12日

IO2016まで1週間待てばいい話だけどAndroidVRについて戯言

踊らにゃそんそんとは言うけれど。

続きを読む "IO2016まで1週間待てばいい話だけどAndroidVRについて戯言"

2015年10月20日

Android History 2015

毎年恒例のやつを更新しました。Android 8歳おめ!

Android History 2015
http://www.slideshare.net/youten_redo/20151020-android-history


以下、年表元データ更新版。

続きを読む "Android History 2015"

2015年10月12日

ポエム

とあるお客様のあんまりITと直結しない、とある順調なビジネスがあって、+αを試すために、それなりにIT化したい、というお話の手伝いをすることになった。

シンプルに、そして速やかにという要望のもと、今後しばらくは弊社もお客様も困らない要件とアーキテクチャを提案し、快諾していただいた。今後の戦略もあり、10月始めという期の切り替わりもうまく作用したのか、それなりに優秀と言われるメンバが集まった。

残念ながら好き勝手に考えてもらって実力を試すような余裕はないため、リスキーでピーキーな技術は選択せず、具体的な方針を順番に提案していく。


AndroidはminSdkVersion=21でUIは労力をかけず、開発拠点が離れるのでテストコードはきちんと頼む、コードレビューベースでコミュニケーションをとりたい、と。

サーバはいくつかのモデルが読み書きできるRESTful APIを頼む、もちろん認証での権限違いも最低限は欲しい、と。

デザインはMaterial Designベースだが、今後iOS対応も考慮して両方に使えるテイストで、と。


ごくごくよくある感じのスマホセントリックで、将来を見据えたクラウドシステムと、少しのハード方面な要素を含んだそのシステムの開発方針を説明したところ、次々と期待を裏切る要望と予想を超える作業見積もりが集まった。


Android Studioを使ったことがないAndroidチーム。

RESTfulを知らない、jspを採用したサーバチーム。

Material Design未経験のデザインチーム。


メンバの誰ともSORACOMの話も雑談できない、所属する部門名に入ったIoTの文字はもしかしてInternet of Thingsの略ではないのではないのだろうか?
僕は本当に2015年3Qのソフトウェアの会社に所属しているのだろうか?

2015年8月 8日

#C88 TechBooster本にスマートフォン向けのVR開発入門について書きました

c88-android-m-thumb.png

C88 3日目(2015/8/16)東A39a TechBooster
https://techbooster.github.io/c88/

上記のC88てくぶ本、「Android Masters! ダンジョンにAndroidの最新情報を求めるのは間違っているだろうか」の、「第7章 Unity 5.1で入門するVRアプリ開発」というタイトルの章を担当しました。
私の章の内容はニッチですがCardboard SDK for UnityとGear VR+Unityに関するVRコンテンツ開発の入門向け、現時点ではオンリーワンなものになっていると思います、VRに興味のある方はぜひ。
興味のない人も他の章や本をひっくるめ、大変魅力的なものに仕上がっていますので、購入したついでに私の章も読んでくれるとよろこびます:)

イカ、書き出しのチラ見せと目次です。

c88-android-m-7.png

【目次】
1 はじめに
1-1 VRのR(Reality)と本章で扱う範囲について
1-2 想定読者について

2 VRとスマートフォンの関係
2-1 手持ちのスマートフォンで始めよう
2-2 具体的な機種とコンテンツの選び方について
2-3 よりハイエンドなデバイスと、その価格について

3 スマートフォン向けVRデバイスの紹介
3-1 Google Cardboard
3-2 ハコスコ
3-3 Oculus Gear VR

4 VRと3Dとコンテンツ開発手法
4-1 VRコンテンツは3Dで、3DならUnityで
4-2 Cardboard SDK for Unityのメリット
4-3 コラム つくってみるメリット

5 VRアプリ開発環境の構築
5-1 手順のおおまかな流れ
5-2 Android SDKとインストール
5-3 Unityのインストールとバージョン
5-4 Cardboard SDK for Unityのダウンロード

6 Cardboard向け、VRアプリのHello, World
6-1 新規Unityプロジェクトの作成
6-2 Cardboard SDK for Unityのインポート
6-3 プレビューの再生
6-4 Androidプラットフォーム向けの設定
6-5 ビルドとインストールと実機での実行

7 PONGアプリをCardboard向けに対応させる
7-1 新規プロジェクトとPONG unitypackageのインポート
7-2 Androidプラットフォーム向けの設定
7-3 Cardboard SDKの適用
7-4 VRらしい自機制御スクリプト

8 PONGアプリをハコスコ向けに対応させる

9 PONGアプリをGear VR向けに対応させる
9-1 新規プロジェクトとVirtual Reality Supportedチェックボックス
9-2 Osigファイル(Oculus Signature File)の準備
9-3 Gear VR Service開発者モードの有効化

10 おわりに

<よもやま>
・Unity 5.1.1p3で書き始めて、何度かのUnityのアップデートと戦いつつ、最終的には5.1.2p2でUnityのクラッシュと鉢合わせしました。
・入稿後にCardboard SDK for Unityがv0.5からv.0.5.1になって、よりにもよってunitypackageの数が変わってしまいました。
・紙版では間に合っていませんが、ダウンロードカードの付属する電子書籍版ではUnity 5.1.2p3とCardboard SDK v0.5.1の差分に対応しています。

2015年6月21日

Unity 5.1とGoogle Cardboard SDK for Unity v5.0を試す

タイトルと関係ありませんが突然の宣伝です。てくぶことTechBoosterがC88も当選されたとのことでおめでとうございます、youtenはC87ではやたらと後ろ向きな記事を書きましたが今回はCardboard SDKの話を中心にGear VRまで含めたスマホ向けVRの話を書こうと考えております。(無事に掲載されるかはさておいて)これを読んだAndroid開発者がVRの波動に目覚めて突然開発したくなるような記事にしたいと思います。全裸で。

さて本題に戻りまして、Unity 5.1が出たのでCardboard SDKがおかしなことにならないかを確認してみます。VR的にはUnity 5.1の目玉はVRのNative対応で、その中身はOculus Rift/Gear VR向けなOculusなSDKが組み込まれただけ、という認識なのですがちょっと自信ないです。

Unity 5.1.0p1 2015.06.12
https://unity3d.com/jp/unity/qa/patch-releases

Google Developers:Getting Started with Unity for Android
https://developers.google.com/cardboard/unity/get-started

イカ、作業メモ

u51-01.png
Unity 5.1を起動します。いきなりログインを求められましたがWork Offlineでも良さそうです。
New Projectを作成します。

u51-03.png
CardboardSDKForUnity_v5.0.unitypackageをimportします。"API Update Required"ダイアログが出ますが気にせずI Made a Backup. Go Ahead!を選択します。

Cardboard/DemoScene/DemoSceneを開きます。おもむろに再生します。いつものDemo Sceneが動作します。
u51-04.png

別名のMainというシーンで保存。Build Settingsを開いてAndroidにSwitch Platform。Add CurrentでMain.unityを追加、Development Buildチェックをonに。
Player Settingsを開いて、Company Nameを変更、Resolution and Presentation->OrientationをLandscape Leftに、Other Settings->Bundle Identifierを独自パッケージ名に変更。
Build Settingsに戻ってBuild And Runを選択。U51HelloCB.apkあたりの適当な名前をつけてSave。

v4.10からv5.0の差分を確認しておきます。
https://developers.google.com/cardboard/unity/release-notes

抜粋して紹介。
・iOSサポート。
・C++でヘッドトラッキングと樽型歪み補正を実装、JavaベースのコードはLegacyフォルダに移動。
・Cardboard.csとVRDeviceというクラスでリファクタ、Android, iOS, Unityエディタ上で同様に扱えるよ。
・新しいイベントtilt(横向きに傾ける、BackやExitの意)、trigger(Cardboard v2のトリガーが引かれた状態、タップと同義のはず)に対応
・Cardboard.SDK.BackButtonExitsApp「BACKボタンでアプリ終了」は廃止。
・Cardboard.SDK.IsInCardboard「今Cardboardにスマホが入っているのか」(おそらくmagnet判定だったのでCardboard v2の変更に伴って)は廃止。
・残念ながらDevelopment Build チェックまだは必要?(5.0.0f4で試した限りは、と書かれている。5.1.0p1では大丈夫な気配?)
・Multi-threaded renderingは今はまだサポートされていない。
・細かいですがDemoSceneの真下に出るMenuのVR ModeというButtonのEvent実行先がCardboard.ToggleVRModeからTeleport.ToggleVRModeにお引っ越しされてました。Cubeを消して下のメニューを使い回す際にはご注意ください。

Cardboard/Scripts/Cardboard.csに以下の様なメソッドを追加してやれば代用が効きます。
public void ToggleVRMode() {
VRModeEnabled = !vrModeEnabled;
}

u52-05.png
ちまちま他のこともしてみましたが、Cardboard SDK for Unity v5.0を使う分にはさしあたってUnity 5.1で困らなそうです。

そういえば、今日Cardboard v2触ったんですが適当にGalaxy S6突っ込んだらぜんぜん像が結べなくて3Dに見えなくて苦労しました。QRコードによるProfile調整必須です、Nexus5/Galaxy S6あたりにあわせてあるとダメです。DIVE pluginモノはN6とかiPhone 6plusならちょうどいいんじゃないのかな...。

つまり今後というか現時点ですでにCardboard互換品には例のQRコードが必須ということです。...Googleさん、もう少しアナウンスというか啓蒙がんばった方がいいと思うよ。

2015年6月 8日

PMCA その1

別にお金を払いたくないわけでも3D-Unity(VR)で商用活動がしたいわけでもないのですが、自分で書いたライセンスを自分で守らない人とか、法律も作者の気持ちでどうにかなると思ってる人のことを想うとつらい気持ちになります。Figmyがぶっこみましたね。CC-BYのpmdが欲しい病を長く患っている自分にも少しだけ気持ちは分かりますが、ああなってはおしまいだと思います。

前置きはさておいて、PMCAというパーツPMDからモデルを組み立てるツールがありまして、ちょっと前に存在を知っていたのですが今更試してみることにします。

PMCAv0.0.6について
http://matosus304.blog106.fc2.com/blog-entry-215.html
りどみ.txtを読むとPMCA自体はPDとあるので生成pmdにライセンス制限はかからないことになります。(というかデフォルト設定でAuthorがmato氏のLicense PDという文字列が固定になってしまうのは良いのでしょうか...)

PMCAv0.0.6r10aWindows版
https://bowlroll.net/file/3714

Python実行環境同梱版をダウンロードして、zipを展開してrun.batで起動します。
pmca-01.png
pmca-02.png
適当にポチポチと選択してpmdを出力します。
ちょーかんたんお手軽1分でpmdができました。

pmca-03.png
ちょっとだけテクスチャの色合いだけいじってMMDに持っていきます。

pmca-05.png
なるほど。

Unityに持っていきます。

pmca-06.png
なるほど。

Carboard SDKを適当に放り込んでスマホに持っていきます。

pmca-07.png
なるほど。

これで色々な点が概ねいいんじゃないでしょうか。

2015年6月 3日

延命措置

体調不良につき...という拙作の適当アプリがあります。

用途はPlay側の説明を見ていただくとして、このアプリは2011.08.02に更新して約4年それっきりという、(普段の言動に対して)紺屋の白袴どころか紺屋の全裸みたいな案件です。

逆に言うとminSdkVersion="4"で作ったものが4年間完全放置でここまでもったAndroidよくできてんなという気分なのですが、Galaxy S6(5.0.2)でMENUキーのエミュレートがされなくなってついに死亡が確認されました。

ぶっちゃけ自分用アプリなのでちょっとぐらいおかしな動きをしてもいいだろう、と互換性に注力する気はないのですが、意外と気に入らない点が多くて単純な移植しかしていないにも関わらずイマイチ要素が満載のものになりました。今は寝かせてます。

<移植作業>
・Eclipse → Android Studio
・minSdkVersion 4(1.6) → 15(4.0.3)+AppCompat v7 22.1.1
・Activity → AppCompatActivity
・PreferenceActivity → PreferenceActivity(AppCompatDelegateではない)
・Launcher iconの新規起こし。(某ジェネレータのmipmap-フォルダに配置したが、minSdkVersion15だとダメっぽい?おとなしくdrawableに移動した方が無難そう。)
・AppCompatにしたがって無印とv21のthemeを作成、primary, primary dark, accent, button, navigation barあたりのcolorを設定。
・同じ仕組みでButtonのtext colorが変えられないので、ここを参考にWidget.Holo.Light.ButtonとWidget.Material.Light.Buttonをparentに指定したstyleを用意する。
・setHomeButtonEnabled(true)とかsetDisplayHomeAsUpEnabled(true)とかActionBarまわりを調整。スクロールするほどコンテンツないしToolBarは見送り。
・xml drawableはいったん全部捨て、一部primary colorを適用。

<どうにかしたい>
・WQHD端末なせいかフォントサイズが少し小さい気がする。
・マージンがアンバランス、全体的に足りない。これでもLinearLayoutに透明dividerは入れている。
・ボーダなしSpinnerと今の配置の相性が悪い。
・Spinnerのrowに複数行+自動改行が必要なものを入れるのがダメ。iOSのドリルダウンNavigation Controllerのような他ページでいい気がする。


M来たってのにLollipop時代の話と戦えてない感じです。もっとリハビリしないと話になりませんな。