2017年1月8日日曜日

Androidでタッチイベントが取得できないだと!/ その3

tetatailでも解決できないので、地道に自分で解析中。
まだ解決はできていません。

最近のプロジェクトは、速度重視のため、SurfaceView ⇒ GLSurfaceView に作り変えたもの。

基本システム以外、入力なども全て一旦削除(コメントアウト)して、
GLでのシステムができたので、徐々に機能を追加している途中で、
初回タッチが入力できていない、ということが発覚した。

なので、昔のプロジェクトを実行してみたところ、問題なく全てのタッチが取得できている。
ということは、

・GLSurfaceViewのタッチ入力
・その他の改良部分

のいずれかであることは間違い、ということだ。

次の検証。

GLSurfaceView をそのまま使用していた部分を、MyGLSurfaceView に変更し、
APIをラップして動作を確認してみる。

まず、onTouchEvent() だが、Activityと同様に、2回目しかコールされていない。

起動時に、onWindowFocusChanged(boolean) が、 true でコールされていることを確認。
これで、フォーカス移動に1タッチ取られている、という可能性も低くなった。

ちなみに、onWindowFocusChange() 内で、ブレークしているときに、画面を2回タップして再実行すると、やはり、1回分のタップが認識される。

ブレーク中もきちんとタッチした回数を覚えていて、その回数 -1 回、onToucheEvent() がコールされている。

以上のことから、タイミングなど不確定要素が絡んでいる可能性は低く、確実に、初回の1タップ処理が、何か別の処理に搾取されていると推測できる。

一体、何なんだ…。



2017年1月7日土曜日

teratail / Androidでタッチイベントが取得できないだと!

Androidで、初回のタッチイベントが取得できないという、
もうどうしようもないバグが出たので、
前から気になっている質問サイトに、投稿することにした。

https://teratail.com/

広告として出てくるので、見たことある人も多いと思う。
売り文句としては、

 「15分悩んで分からなければteratail」
 「最短○○分で回答が来た!」

とか、言ってるんで、だったら聞いてみよう、と。

実際の質問が、これ。
https://teratail.com/questions/61089


いやー、回答きませんな!

Google絡みの問題が発生したときにも、サポートセンターが無いので、
プロダクトフォーラムというのに質問したんだが、
これまた返事がこない。

https://productforums.google.com/forum/#!topic/google-plus-ja/W1J048JtmDY

Googleの方も、エキスパートって人が返答してくれてるが、
スレ違いだがら、スレ移動しといたわ、ってだけ。

エキスパートなら、答えてよ。
こっちは、マニュアルどおりの操作しかしていないんだから、
この程度の質問に答えられなくて、エキスパートってなんだよ…。

結局、こういうサイトって、素人がちょっと困っているってのに役立つだけで、
エンジニアが本気で困っている質問に、答えられる人は居ない

ってことの証明にしかならんわ。





2017年1月6日金曜日

Androidでタッチイベントが取得できないだと!

ごく一般的なつくり方で、いくか自分用のアプリも作ってきたのだが、
ここにきて、タッチという、超基礎の部分で不具合が発生した。

Activityの onTouchEvent() が反応しないのだ。

最初のタッチのみ反応して、2回目以降反応しない

これは良くある問題で、検索すればいくらでも対処方法はでてくる。
onTouchEvent() の最後で、

 return true

と、trueを返すようにするだけだ。

だが今発生している問題は、

初回のタップのみ反応せず、2回目以降は反応する』だ。

意味が分からない。

onTouchEvent() の内部に、ブレークポイントを仕掛けておくと、
最初のタッチでは無反応なのに、2回目以降は、しっかりブレークしてくる。

たしか、去年アプリを作った時は、こんな問題は発生していなかったはず。
こんな大きな問題を見落とすはずがない。

とすると、最近大改造して、surfaceView ⇒ GLSurfaceView にしたのが一番怪しい

MotionEvent ev = MotionEvent.obtain(10, 20, MotionEvent.ACTION_DOWN, x, y, 0);
this.onTouchEvent(ev);

↑これを使うと、疑似的にプログラムから、タッチイベントを呼べるらしい。
onCreate() の最後に付け加えると、確かに onTouchEvent が呼ばれている。

が、その後、タッチすると無反応で、2回目から反応する。

どういうことなのだろうか?

一番考えられるのは、初回、別のどこかにフォーカスが当たっていて、
初回タップで GLSurfaceViewにフォーカスが移り、反応するようになった、だろう。

念のため、起動時に、

view.bringToFront();

で、一番手前に持ってきているはずなのだが…。


2016年12月23日金曜日

知人の企業サイトの更新

本職は(たぶん)ゲームプログラマですが、まあ途中色々あって、
Webサイト運営だとか、校閲だとか、デジタルサイネージだとか。

最近、同僚から、経歴が謎すぎると言われたばかりですが。


知人の会社のオフィシャルサイトの制作・運営をやっていたりします。
昔お世話になったので、運営費などは頂いていません。

なので、空いている時間に更新するスタンスで、即反映とはいきませんが、制作はしっかりとやっています。

PC/スマホ、それぞれレスポンシブルデザインで見やすくしたり、
スマホで会社の地図を見たとき、ページスクロールがそこで停止しないとか(笑

ホームページの制作・更新というビジネスは今どうなってるんですかね。
当時は、初月(デザイン込み)30万円~、毎月の更新5万円~とかだった気がする。

で、知人のサイトは、以前は WordPressで作成されていたんですが、作成した人が田舎に帰ったか何かで居なくなりまして。
私が後を引き継いだわけですが、もうどうやって作ってるのかサッパリ分からず

1から作り直しました。

以前作られていたものは、管理サイトにログインすれば、記事を作成でき、画像を追加でき、最後に本番サイトに公開すればOK、と一通り機能ができてはいたのですが、それをやるのが知人なのです。

知人は、そういうことが一切分からない

いわゆるエンジニアがサイトを作るとこうなっちゃうんですよね。
枠は作った!後はどうぞ、的な。

いや、更新することを考えようよ。
更新する人にHTMLタグの知識を要求するのは酷だよ…。

というわけで、1から作り直すに辺り、以下のように設計。


・サイトは作り直すが、個々の商品のURLは踏襲。(他からのリンク切れを防ぐ)
・更新をしやすくする (どうせ私が更新するんだし、楽なほうがいい)

という2点。

さらにいうと、そのサイトは、平均して月に1つ、商品が追加になるかどうか、という頻度。
放っておくと、私が更新の仕方を忘れる可能性があるw
という点からも、構成は簡潔にすべき。

結果、本来データベースに格納する商品データを全て、最初から変数で保持。
Javaで言うと、public static final String hoge = "100円"; みたいな
必要な商品画像とレイアウトのテンプレートファイルを、商品番号のフォルダに入れるだけでOK、という形になった。

そして必要に応じて、お知らせや、ピックアップなども、同じように追加していけばいいだけ。

知り合いから、商品画像と商品説明のテキストがメールで送られて来たら、
画像のサイズ加工、商品データ追加で、10分もあれば終了。

こうしてみると、やっぱ色々な知識がいるな!

2016年12月21日水曜日

Google Consoleを導入のその後

結局、最近の検索は、Googleだけでなく、Yahoo、Bing、どれも httpsを使用しているので、キーワード取得できないね…。

GoogleConsole導入しても全く関係なかった。

今まで忍ツールズのアクセス解析で取得できていたものも、どこかに残っている、http: の検索からの分しか取得できていない。

検索ワードって、別に個人を特定できるものではないし、そこまで保護するものじゃ無い気がするんだけど。

そもそも、親玉である Googleとか、もっと色々情報抜いてるだろ…。

Android端末持ってて、位置情報ONにしてたら、
Googleタイムラインみると、驚愕するぞ。
https://www.google.co.jp/maps/timeline

移動経路や移動手段、立ち寄った場所とか、そこそこ正確に取得できてるし、
Googleフォトの写真バックアップを利用していたら、それもすべて張られてるぞ。


2016年12月20日火曜日

MOVERIO カメラアプリを真面目に考えてみる

今年こそは、Google Playに何か公開するぞー、と正月くらいに言った気がするが、もう12月も終わりだ。

Google Playにあるフリーのアプリも充実してきているので、色々なアイディアを詰め込まないと、目に留まる事すらないだろうな。

今回趣味で、エプソンのMOVERIO BT-300を購入したのだが、アプリが非常に少ない。
プリインアプリも少ないし、専用の AppStoreにも、アプリは少ない。

 ←これ

さらに操作しにくいなどの問題もあるので、たとえ、AmazonAppをインストールしても、
普通のアプリをするのにも、正直向かないと思う。

ガジェットのブログで、MOVEIRO BT-300 のレビューを書いていて、
http://latache-gadget.blogspot.jp/search/label/MOVERIO

そこでも解説しているとおり、プリインのカメラアプリがいけてない

現在、MOVERIO App Store にある、普通のカメラアプリは、PIPカメラくらいしかない。
これは、写真に任意の画像を重ねて撮影できるというもの。

ホワイトバランスなどの一部の機能は使えるようになっているが、撮影操作や、画面UIなどに一部気になる点がある。

というわけで、これらを踏まえ、ふつーのカメラアプリを AppStore で公開することを目標として、企画(仕様)を考えてみよう。
今回、動画の撮影については、対象外とする。

まず、カメラアプリに必要な機能と、操作、MOVERIOの実際のスペックなどをリストアップする。

必要な機能
 写真を撮影する操作
 ズーム
 メニュー(設定)を呼び出す操作
 アプリを終了する操作

カメラのプレビュー映像が表示されている、アプリの基本画面で必要な操作は、この4つ。
メニューの中にアプリ終了を内包してもいいが

メニュー詳細
 ホワイトバランス切替
 シーン切替
 エフェクト切替
 設定
 戻る


これらを誤動作しないようなUIで操作したい。

使用できる機能
 コントロールボックス
  ボタン3つ
  タッチパッド
  十字ボタン
 ジャイロ
 ミュートタップ

このうち、ミュートタップは使えたものではないので、却下。
やっぱり、タッチパッドか…。

2016年12月19日月曜日

Google Consoleを導入してみる

前回、フィルタを設定することにより、リンク元のフルパスを取得できる、という設定をしてみた。

勘違いしていたのだが、これは、あくまで、リンク元のURLを記録するだけらしい。

Google検索などで、

 url?keyword=検索ワード 

という感じで、検索ワードがURLに付加されるのだが、これはフルパスには含まれない。
そもそも、 Google Analytics では、キーワードは取得できないんだそうな。

え、それでいいの?
検索ワードって結構重要だと思うんだけど。


というわけで、色々調べた結果、Google Console を導入したら、
検索ワードがすべて分かるらしい。

ので、早速導入してみた。
ただし、結果が表示されるようになるには、しばらく掛かるらしいので、気長に待ってみる。

これらがうまくいって、初めて 忍者ツールズのアクセス解析タグが外せる。
面倒だな >Google

----追記

ちょうど1日経過したくらいに、エラーが出なくなった。
これが正常動作と思われるが、検索で来たログが無いので、
正しい動作かは、確認取れず。