Realmのビルドエラーにあせる
Realmの0.88.3を使って開発を始めて3カ月近く。ひさびさにRealmのサイトをチェックしてみると 0.91.0まであがっていたのでアップデートすることにした。
build.gradleファイルのclasspathを「io.realm:realm-gradle-plugin:0.91.0」と書き換えるだけで簡単に移行できると思っていたらビルドエラーがでてしまった。
com.sun.tools.javac.code.Symbol$CompletionFailure: rx.Observableのクラス・ファイルが見つかりません
実は1ヶ月前にもアップデートしようとして同じエラーがでて、もしかしたら外れバージョンを引いたのかと思って放置していたのだが、本腰をいれて調べないといけなくなった。
本家のサイトに情報があった。JSONがデータバインディングで使うリフレクションがRealmが使うRxJavaと競合するらしい(リフレクションが何なのかはJava初心者なので理解してないがw)。
回避策として以下のようなダミークラスを作ってやればOKとあったので試してみるとあっさり解決できた。
package rx;
public class Observable{
}
めでたし、めでたし。
AndroidのメッセージBOX
Androidアプリでユーザへの確認に”はい/いいえ”を表示するメッセージBOXが欲しくてググってみら、やたら複雑なサンプルしかでてこない。
WindowsだとMessageBox.Show("title, "message")みたく簡単にできるのに、AndroidだとOK、Cancelを処理するのにわざわざOverrideとか面倒だ。
独自のMessageBoxクラスをWindows風に作りかけたところで、もしかしてAndroidは同期的にできないんじゃないか? と思って調べてみたらビンゴだった。
メッセージBOXで処理をブロックするとANRになるわけですね。
そういえばWindowsでもスマホ向けのUWPではasyncキーワードとか使って基本、非同期な設計になっていたな。デスクトップ時代の思考をひきづっていると痛い目にあいそうだ。
アイコンに大いに悩む
Lancersにコンペで出していたスマホアプリのアイコン・ロゴデザインがあがってきた。
思ったほどの提案数は集めれなかったが、自分には無い発想の提案も多く頂いた。
その中から製品のイメージに一番マッチしてそうなのを選んで、ちょこっと手直しを依頼し納品してもらった。
そこまでは良かった。
良い仕事をしてもらったと満足していたのだ。
けど、いざそのアイコンとロゴをアプリに実装してみると何かが違う。
端的に言ってしまえば「ダサイ」。
アイコン単体ではいい感じなのに、組み合わせると残念な感じになってしまう。
そこで初めて自分の製品イメージとかユーザのターゲット層とかがかなり曖昧だったことに気づいた。
いや、十分よく考えたつもりではあったが全然足りなかった。
例えばアイコン一つにしても男性をターゲットにするのか、女性も含めるのかで全然、デザインが変わってくる。高級感を出すのか庶民的にいくのかでも全然違う。
ターゲティングの細かさがもう二段階くらい必要だった。
今回、とくに重視したのはインパクトであった。
似たようなデザインのアイコンでは埋もれてしまって目立たないので、見た目のユニークさとインパクトを重視した(今思えばインパクトという点でも不十分だったかも)。
しかし実際に自分のスマホにそのアイコンが並ぶと、インパクトというより浮いている感じがした。レビューに「アイコンが残念なアプリ」とか書かれてしまいそうだ。
どうしよう。もう納品してもらってお金も払っている。新たにコンペにだすか、自分でなんとかするか、、、悩みに悩む。
---------------
5/23追記
結局、自分でなんとかすることにした。
しばらく悩んでいると突然、ぱっと閃いて5分でデザインしたアイコンが意外にもシンプルで良かったのでそれを採用することに。
デザイナさんに作ってもらったアイコンに閃きをもらったところもあるので、デザイン料は無駄にはならなかったと考えようw
凹んでいる場合ではない
昨日は競合製品のあまりの進化に凹んでしまったが、気を取り直して前向きに考えてみる。
まずはマーケティングのやり直し。
searchmanというアプリの順位変動をグラフで見せてくれるサービスがあるのだが、
それを使って色々な競合アプリのここ1年の推移を調べてみた。
やはり更新が止まってしまったアプリは緩やかに人気を落としている。
更新の直後に急降下しているアプリは何かやらかしてしまったのだろうか。
見ていてすごく面白いw
それで結局は製品の差別化、立ち位置を明確にすることだと思い至った。
今つくっているアプリはわりとメジャーなカテゴリのものなのでユーザの母数は多い。
大きな市場のニッチなニーズを満足させる方向でやってもある程度のダウンロード数は見込めるんじゃないかと思う。
そのためにはまず、製品を認知してもらうこと。ASO対策が不可欠だ。
これらの記事がなかなか良かった。
Google Playのランキング上位に入るのは至難の業だが、検索からの流入はASO対策をしっかりやればある程度なんとかなりそうだ。
かならずしもダウンロードが多いものが検索上位になるわけではなく、ASO対策と、使い続けてもらえるアプリにすることが重要みたい。
ようはユーザのニーズに合った良いものを作ることが大切って基本的なところだな。
またやる気がでてきた。
ちょっと凹んでます
スマホアプリをしこしこと開発している。
この企画はほぼ1年前に始めたもので、その当時はかなりいけるんじゃないかと思っていた。競合するアプリを調べても正直、負ける気がしなかった。
ただ、メインの受託開発の仕事が忙しく開発に着手したのは今年に入ってから。
それもやはり受託開発と並行して進めていたので、なかなか進まなかった。
それがようやく形になってリリースできそうなところまで来た。
ということで改めてマーケティングということで競合製品を調べてみたのが今日。
ガーン。
日進月歩のスマホの世界、1年間の進歩は凄まじく、ダサくて使えないと思っていた競合が軒並み進化して凄く良い感じになっていた。。。
どうする? トータル二ヵ月半ほどの作業をドブに捨てるか、とにかくリリースして勝機を見出すか!?
Typescriptは型に厳しい
最近、だいたい午後3時なると集中力が切れる。
だーんと現実逃避モードに落ちてWEBをダラダラと徘徊。
時間ばかりが過ぎていく。。。
一人で作業していると、誰も突っ込んでくれないので非常に困る。
以前、デス行進なプロジェクトでお仕事してた時には何時間でも集中できてたのが、まるで嘘のようだ。
あの時の拘束のキツさには参ってたけど、あまり自由過ぎるのもなかなか厳しいものがある。やはり適度に不自由なほうがいいのかもしれない。
と、こんなことを書きたかったわけではない。
Typescriptがあたり前だけど型に厳しくてちょっとハマッたことを備忘録として記録しときたかったのだ。
JavaScriptのElementクラスにはchildrenというプロパティがあるのだけど、それをtypescriptでさわろうとして怒られた。
error TS2339: Property 'children' does not exist on type 'Element'.
しばらく悩んだがElementではなくHTMLElementにキャストしてやることで解決した。
同様にinputのvalueとかも、HTMLElementじゃダメで、HTMLInputElementを使わないとうまくいかない。
要素固有のプロパティを使う場合はちゃんと、その要素に対応するクラスを使いなさいよという話でした。
あと、昨夜はAndroidStudioのリファクタリングが凶悪すぎてハマっていた。
VisualStudioみたいに関連を調べて変数のリネームを行うものとばかり思っていて、変更箇所をよくよく確認せずidというメンバ変数をbookIdにRefactor!ってやったら、JavaファイルのみならずHTMLやCSS、はてまたSVGの中身まで”id”と名の付くものが全部置換されてしまった(涙)
対象範囲はしっかり確認する必要がある。