スキップしてメイン コンテンツに移動

投稿

2017年を雑に振り返ってみた

TwitterのTLを見てて振り返りの記録を残そうと思い立ったので雑に書きました。来年はちゃんと記録を残そう...

お仕事面での1年間
某デバイス向けAndroidアプリ開発 年頭から8月までやってました。
モデルチェンジに伴う新機能の実装がメインでした。

もう2015年からやってるアプリなのでそこまで炎上はしませんでしたがなんだかんだで500コミット位コードを書いてました。

去年の開発では難航したためにDroidKaigi 2016の参加を諦めた辛い記憶があったので1,2月は猛烈に開発を進めて何とか参加できたのはいい思い出?かもしれません。

この頃からAndroidアプリのアーキテクチャをちゃんと考えないとなぁということでMVPとかMVVMとかDDDとかについて調べだしました。

ソーシャルメディアの分析サービスっぽいの開発 6月〜11月ぐらいまで

TwitterとかInstagramとかソーシャルメディアのツールですがお客さんの要望やイベント対応に合わせて新機能開発をやってました。サービス自体は去年位に始まってたんですが久々にLaravelを触りました。

某アプリのリニューアル開発 9月〜現在進行中

2つの類似するサービス向け(flavorで分けてます)のアプリとそのタブレット対応の開発をしています。フルKotlin & MVVM & Android Clean Architectureの考え方を取り入れて少し今風になりました。(FluxとかAACとかはまだ

現在スマホ版アプリ開発の佳境です。年内リリース目標だったんですが残念ながら年を越しそうです。DroidKaigi 2018までには終わってるといいけどなぁ...(´・ω・`)

発表 potatotips #41で"Android Font Updates"という題目で発表させていただきました。
https://speakerdeck.com/tsuyosh/android-font-updates
映画 34本くらい観てました。印象に残ったのは

ザ・コンサルタントラ・ラ・ランド3月のライオン 前編&後編夜は短し歩けよ乙女メアリと魔女の花ジョン・ウィック:チャプター2ダンケルクアウトレイジ 最終章ベイビー・ドライバーアトミック・ブロンドgiftedスター・ウォーズ VI…
最近の投稿

Sony Smart Wireless Headset pro購入

前機種のMW600のバッテリーがへたってきたので新機種のMW1を購入しました。











MW600と比べた使用感 曲を聞きながら充電できる 個人的に一番大きいのがこれ。MW600はUSBケーブルをつなぐと問答無用でスリープしてしまっていたがMW1はケーブルをつないでもスリープしないので曲を聞きながら充電可能。

ボタンの種類が増えた モードの切り替えがやりやすい。MW600だと再生ボタン長押しの後にタッチ式のバーでモードを変更して一定時間待つ必要があったがMW1の場合、モード切り替えボタンを押して、逆送り、先送りボタンでモードを変更して再生ボタンで決定と分かりやすい。

あとMW600のタッチ式のバーは服や肌に触れただけで誤動作を起こす場合があったがMW1の場合はボタン式で感触も固くなっているので誤動作は少なくなった。

ボタンが増えてシンプルじゃなくなったがこれはMW600と比べてより多機能化(Smart)になったので仕方ないのかもしれない。次の機種では第6世代iPod nanoのようにボタンを減らしてタッチパネル化したらより魅力的な製品になるんじゃないかと思うんだけどどうなんでしょ?

幅広で薄くなった 幅広になったおかげでディスプレーの情報量が多くなり、ディスプレーの横にある応答ボタンが大きくなったおかげで押しやすくなった。MW600は爪の先で押さないといけないぐらい小さかったがこれのおかげで電話を取る動作や切る動作がやりやすくなった。
あと丸い棒状だったのが平面になったので安定感が増して持ちやすくなった。

Androidとの連携が強化 Google Playから公式アプリをインストールすると通話履歴、SMS、Gmailなどをディスプレーに表示するミニアプリが利用できる。ミニアプリは開発者が自由に作れるようになっている。

ファームウェアの更新が可能Smartと銘打っているだけあってファームウェアの更新が可能。ファームウェアは前述の公式アプリ経由でアップデート可能なのでわざわざPCにケーブルをつなぐ必要はない。

単独で音楽再生が可能 microSDに音楽を入れて単独で音楽が聞けますが対応フォーマットがwavとmp3のみなので個人的に要らない機能。最低でもaacサポートが必要でしょ。ファームウェアで対応できないですかねぇ...
あとAndroid端末内の音楽をmicroSDにワ…

NEXUS 7でみちびき(QZSS)を捉えられるらしい

TLを見ていたら
Nexus7 の gps チップ qzss対応ではあるそうだけど、反映されているのかな? だれかNexus7もちで gpsソフトで193番(qzss みちびき)とれるか見てくれないかなあw 
— きみ_Licaさん (@kimi_lica) 10月 10, 2012
ということなので手元のNEXUS 7で捉えられるか確認してみました。 GPS TestとGPS Essentialsというアプリで見ましたが両方とも01番の衛星として表示されました。スマホ(GALAXY NEXUS)でもやってみましたがこちらは01番の衛星は捉えられませんでした。

計測場所: 渋谷某所

NEXUS 7: 真ん中(天頂)付近に02番の衛星と重なる形で01番の衛星が見えます

GALAXY NEXUS: 天頂付近には02番の衛星しか表示されていません

01番の衛星がGPSなのかQZSSなのか判別が付きませんがGPSの方は同時刻では日本上空を飛んでいないのでQZSSで確定となりました。


.@terakinizersbit.ly/RvKiqAn2yo.com/satellite/?s=3… 本来PRN01があたる機体は今日本から見えませんし、位置も違いますのでその01がみちびきであっていそうですね。 ありがとうございます!
— きみ_Licaさん (@kimi_lica) 10月 10, 2012 あと、NEXUS 7はGALAXY NEXUSと比べてもGPSの感度が高いことも確認できました。

Rクラスを直接参照せずにリソースを取得する

たまにRクラスを参照せずにリソース(drawable, layout等)を取得したい場合があります。

今まではresource id(例: R.drawable.hogehoge)の値をリフレクションを使って取得するユーティリティーを作ってしのいでいたのですがそんな物を作らなくてもResources.getIdentifier(String, String, String)というそのまんまのメソッドがありました。
ActivityやService内でこんな感じで使えます
int resId = getResources().getIdentifier("hogehoge", "drawable", getPackageName());

AngularJSを使ってみた

味見部さんでAngularJSを勉強したので簡単なサンプルを作ってみました。



2012-06-19 1st - jsdo.it - share JavaScript, HTML5 and CSS
スケジュール(名前と日時)を入力してリストに名前と残り時間(秒)を表示する簡単なものです。

残り時間はsetInterval()で1000msごとにスケジュールをforEachで回して更新しています。
AngularJSならbindしているView部分が自動的に更新されるはず、と期待していたのですが外れました。

入力欄に何かタイプすると分かりますがUIへのイベントを契機にbindしているViewが更新されます。


AIR for iOSでAPNsをサポートするためのTips

【追記】AIR 3.4から正式にAPNsによるPush Notificationがサポートされました。この記事で紹介しているやり方だと恐らく不具合が生じる可能性がありますので標準のAPIを使うようにしてください。詳しくはプッシュ通知の使用を見てください。

AIRのアプリでAPNsをサポートする必要があったのでANEで実装してみました。
既に実装した人はいるようなのですが(参考)ソースがなかったので自作しました。

iOSアプリでAPNsを使うには大雑把に以下の実装が必要です。
UIApplicationのregisterForRemoteNotificationTypes:メソッドを呼び出す。端末をAPNsに登録しますAppDelegateに以下のメソッドを実装application:didRegisterForRemoteNotificationsWithDeviceToken: APNsの登録に成功した場合の処理application:didFailToRegisterForRemoteNotificationsWithError: APNsの登録に失敗した場合の処理application:didFinishLaunchingWithOptions: Remote通知に含まれる情報を読み取ります(アプリ起動時)application:didReceiveRemoteNotification: Remote通知に含まれる情報を読み取ります(アプリ起動中)

これをANEで実装する場合、いろいろ試して下のような形で実装できました。

UIApplicationのregisterForRemoteNotificationTypes: メソッドを呼び出す
普通にANEの関数内で呼び出します。UIApplicationのインスタンスは[UIApplication sharedApplication]で取れます。UIApplicationはSingletonのようです。

UIApplicationDelegateにPush関連のメソッドを実装
こいつが結構くせ者でしてAIRのRuntimeが既にDelegateを実装してしまっているのでむやみに取り替えられません。また、ソースもありません。

いろいろ調べた結果以下のような方法を採りました。
適当なクラスのload()…

AIR for iOSのStageWebViewで画像の動的表示が出来ない件

AIR for iOS環境でCameraUIやCameraRollingで取った画像をローカルストレージ上に保存してそれをStageWebViewで表示させようとしても表示されない

AIRからStageWebView.loadUrlでJavaScriptを実行してDOMツリーにimgタグを追加したが表示されない。100ms後にsetTimeoutでimgのsrc属性に全く同じ値をあえて代入するようにするとなぜか表示される。

Android版では不要でiOS版の場合だけ必要な処理

TODO

Safariでの動作も調べてみるUIWebViewでの動作も調べてみる


後日コードも交えてまとめる予定