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

投稿

移転しました

BloggerだとMarkdownで書けなくて辛いのではてなブログに移転しました。 移転先:  http://tsuyosh.hatenablog.com/ 昔の記事はこのままにしておきます。
最近の投稿

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 ...

Sony Smart Wireless Headset pro購入

前機種の MW600 のバッテリーがへたってきたので新機種の MW1 を購入しました。 左がMW1で右がMW600 裏面。SONYロゴの部分がクリップになっている 表面。右側のmicroSDは付属品(4GB)です。 キャップを取るとmicroSDのスロットとmicroUSBがあります。 キャップは紐みたいなのが付いていて失くさないように工夫されています 側面から。左から順に先送り、再生・一時停止、逆送り、モード変換ボタン、最後にmicroUSB もう片方の側面。音量調節ボタンがあります microUSBケーブルで充電しながら音楽が聴けます クリップを上げるとSony Ericssonの名残が見られますw MW600と比べた使用感 曲を聞きながら充電できる 個人的に一番大きいのがこれ。MW600はUSBケーブルをつなぐと問答無用でスリープしてしまっていたがMW1はケーブルをつないでもスリープしないので曲を聞きながら充電可能。 ボタンの種類が増えた モードの切り替えがやりやすい。MW600だと再生ボタン長押しの後にタッチ式のバーでモードを変更して一定時間待つ必要があったがMW1の場合、モード切り替えボタンを押して、逆送り、先送りボタンでモードを変更して再生ボタンで決定と分かりやすい。 あとMW600のタッチ式のバーは服や肌に触れただけで誤動作を起こす場合があったがMW1の場合はボタン式で感触も固くなっているので誤動作は少なくなった。 ボタンが増えてシンプルじゃなくなったがこれはMW600と比べてより多機能化(Smart)になったので仕方ないのかもしれない。次の機種では第6世代iPod nanoのようにボタンを減らしてタッチパネル化したらより魅力的な製品になるんじゃないかと思うんだけどどうなんでしょ? 幅広で薄くなった 幅広になったおかげでディスプレーの情報量が多くなり、ディスプレーの横にある応答ボタンが大きくなったおかげで押しやすくなった。MW600は爪の先で押さないといけないぐらい小さかったがこれのおかげで電話を取る動作や切る動作がやりやすくなった。 あと丸い棒状だったのが平面になったので安定感が増して持ちやすくなった。 Androidとの...

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で確定となりました。 .@ terakinizers bit.ly/RvKiqA n2yo.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を実装してしまっているのでむやみに取り替えられません。また、ソースもありません...