サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大谷翔平
tiro105.hateblo.jp
概要 普通にGCPを使っているとクラウド死する可能性が常につきまといストレスで死ぬ可能性がある ので、GCPの料金上限設定方法についてまとめる 詳細 二種類の方法がある 月ごとに規定の料金になったらアラートを飛ばす、アラート後の処理はユーザー次第 日ごとに一定料金になったら完全に利用を止める、翌日からリセット 前者は月ごとにこれくらいの料金を超えたら気をつけよ、みたいな意味合いで使われるものだと思う 後者はとにかくいきなり料金が跳ね上がって突然死するのを防ぐために使われるものと思う 月ごとアラート Billing Alertを設定して、クラウド死を防ごう! - Qiita webだとこっちの情報がメイン ただしこれだと前述の通り、メールが送られてきてそれからの判断となる 「いきなりサービスに大量のアクセスが来る➡️メールを見逃す=クラウド死」は防げない 目安とするべき 日ごと利用停止 Ap
概要 Android Mから導入されたURLから特定のアプリを優先的に開く方法をまとめる 詳細 従来のAndroidではURLを開く時、そのURLをフックしてアプリを起動した際、ブラウザで開くかアプリで開くかを選択するダイアログが表示された これをAndroid MからはURLを開く際に優先的に開くアプリを設定できる App Linksの制限 基本的にサイトを運営しているサービス提供者しか宣言できない仕組みになっている フックしたいURLと同じドメインに設定ファイルを置く必要があるため App Links対応方法 http://usaganikki.jpというURLをフックして起動するようにアプリを設定してみる アプリ側 AndroidManifestの変更 対応するintent-filterにautoVerifyを追加 <activity ...> <intent-filter andr
前書き この記事はFirebase Advent Calendar 2016の12/23の記事です qiita.com 概要 FirebaseにはデフォルトでFirebase Analyticsという解析機能がある Firebase Analytics | Firebase いろいろFirebase Analyticsには機能があるがイベント機能がよくつかわれる Firebase Analyticsはユーザーがどのような操作をしているかに絞っているため、ga的な使い方をしようとすると面倒くさいことがある 例えば反映時間が少し遅かったり、デフォルトに設定されているタグ以外を使うとイベントに設定されている値が取得できない、イベント発生日時が取得できない、など developers-jp.googleblog.com デフォルトで使えるタグ イベント: すべてのアプリ - Firebase
概要 GoogleVRも新しくリリースされたことだし、Tango + GoogleVRができないかやってみた tiro105.hateblo.jp ちなみに公式ドキュメントはcardboard SDKを使えっていってるので役に立たない Tango with Cardboard | Tango Unity SDK | Google Developers 詳細 結論 Tango Delta CameraによるMotionTrackingを使ったVR空間はなんかできそうな雰囲気ある Tango AR CameraによるARでのMotionTrackingはTango AR Cameraが非対応なのかそもそも表示されない 環境 Unity 5.6beta7 Google VR SDK for Unity 1.20 Google Tango SDK for Unity 1.50(Eisa)
前書き この記事はRecruit Engineers Advent Calendar 2016の12/24の記事です www.adventar.org 概要 こんにちは、VR/ARとかを扱っているusaganiです 今回の記事は不動産におけるVR/ARの現状をまとめたいと思います 書いてみたら全然コードとかなかった 詳細 不動産とVRのイマ 不動産はVRと大変相性がいいと言われることが多い 海外 こんな記事があったり startvr.co こんなまとめがあったりする www.realestate.com.au 日本 日本においてもいろいろなVRサービスが展開されている www.recruit-sumai.co.jp www.homes.co.jp www.megasoft.co.jp 個人的に注目しているのがこちら ハウスマイル徳島店さんのVR動画コンテンツ力すごい www.hou-smi
概要 以前にAWSを使ってwordpress環境を構築した webサーバ上にwordpressを設置 - うさがにっき 今回はこれを発展させて、DBにはRDS, 更にELB, Multi-AZ環境を作ってwordpress環境を構築してみる 詳細 RDB(Amazon Relation Database Service) フルマネージドのRDB 構築が既にされており、パッチ適用やバックアップが自動的に行われるため、構築、運用のコストを削減できる しかし、RDSインスタンスのOSにはログインできなかったりもする 使えるDBは以下 MySQL PostgreSQL Oracle SQL Server 従量課金制を用いている EC2インスタンスのように利用する時だけ起動するという運用ができず、一度起動したらずっと起動することになる 課金されないようにするにはインスタンスを削除するしかない しばら
概要 Floating Action Button(以降fab)を使ったspeeddialを実装したので、その方法をまとめておく こんな感じの 詳細 layout レイアウトでは展開するfabを重ねておく 初期表示で表示しないものはvisible:goneにしておく <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="suum
概要 tiro105.hateblo.jp の続き javaソースの視点からDataBindingの使い方を見てみる 詳細 Bindingクラスの作成方法 ActivityでのBindingクラスの作成にはDataBindingUtilクラスおsetContentView()メソッドを使ったが、このメソッドはActivityクラスのsetContentView()メソッドをラッピングしたものなので、Activity以外では使えない DataBindingUtil | Android Developers Activity以外ではBindingクラスが持つbind()とinflate()メソッドを用いる bind() Fragmentの場合、onViewCreatedなどviewを受け取る部分でbind()クラスを使い、Layoutをbindする Public class MainActiv
概要 ListViewのadapterでgone操作などにより、リストごとのレイアウトを変更しようとするとスクロール時にレイアウトが崩れることがある その際にはレイアウトごとのViewHolderを用意して、異なるレイアウトごとに再利用する 詳細 ListViewのリストごとに違うレイアウトを使おうと以下のようなソースを書くことがある if(convertView == null) { LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.fragment_login_navigation_drawer_normal_cell, null); holderNor
概要 AndroidStudioでのgradleの設定でやっておくと便利なものと、注意すべき点をまとめた 詳細 gradleのビルドが遅いときにやると有効な設定 AndroidStudioの設定 gradleビルドでは最新版がリリースされていないか毎回確認しに行くためビルドが遅くなりがちになる その確認作業を切ることによりビルドを高速化する gradle.propertyの設定 $PROJECT_ROOT/gradle.propertyに以下を記載する org.gradle.daemon=true org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 org.gradle.parallel=true org.gradle.configur
概要 EspressoでonDataを使えばlistviewのadapterをテストできるという記事はよく見かけるが、customAdapterに対してどうすればテストができるかという日本語記事はほとんどなかった のでまとめた 詳細 Espressoとは? ここらへん参照 Testing UI for a Single App | Android Developers 2015年7月時点でのJUnit4やEspressoを使ったAndroidアプリのテストについて - Qiita onDataとは? onDataはAdapterView(ListViewとか)のテストに使う AdapterViewはAdapterからデータを複数読み込み、1データ1項目として展開するView つまり、同じ見た目のViewが複数存在することになる AdapterViewの子要素は必要に応じてView階層に組み
概要 tiro105.hateblo.jp の続き UITableViewCellを使ってUITableView内のCellのレイアウトを変更する 詳細 UITableViewCell UITableViewに表示する行(セル:UITableViewCell)の表示方法をカスタマイズできる カスタマイズする方法は二通りある 文字の大きさや色、行の幅などを変更する方法 セルの中身を自由にレイアウトする方法 文字の大きさや色、行の幅などを変更する方法 セルの種類を選んで使う方法 // UITableViewCellStyle...セルの種類、reuseIdentifier...セルID var cell = UITableViewCell(style: UITableViewCellStyle, reuseIdentifier: String?) セルの種類には以下の4つがある UITable
概要 Espressoを使った自動化テスト環境を作成する - うさがにっき の続き Espressoの主なコンポーネントを理解し、基本的な使い方をまとめる 詳細 基本的な構成要素 Espresso Viewとのインタラクションのエントリーポイント(onView, onDataなど) pressBackのようなViewに紐付かないものも扱う ViewMatchers Matcherの実装を集めたもの それらは現在のViewの構造から目的のViewが何処にあるのかを特定するためにonViewメソッドなどに渡すことができる ViewActions クリックやスクロールといったアクションを表すものを集めたもの それらはViewInteraction.performメソッドに渡せる ViewAssertions ViewAssertionsを集めたもので、ViewInteraction.checkメ
概要 DataBindingを使えばjava側でviewの操作などをxmlで完結することができる ButterKnifeなどを使えばある程度は簡略化できるが、よりプレゼンテーションとロジックを切り離して考えられる様子 その他にも色々できるみたいだが、とりあえずlayout xml内でできることをまとめてみた 詳細 準備 実行環境 AndroidStudio 2.1 preview 3 Android 6.0.1 DataBindingを有効にするには、build.gradleに以下を追記する android { .... dataBinding { enabled = true } } 実装 Layout XMLを作成し、Data Binding用の記述 Data Bindingに利用するデータとなるクラスを作成 生成されたBindingクラスを確認 DataBindingUtilクラスを
概要 AndroidStudioでlib用のjarファイルを追加する方法 詳細 AndroidViewだったらprojectViewに変更 プロジェクト直下にlibsディレクトリを作成し、jarをいれる jarを右クリックし、「Add as Library」を選択後、対象プロジェクトを選択しOK 参考 Android Studioで *.jar, *.soを追加する - Qiita
概要 Design Support LibraryのTabLayoutを調べて使って見ると、いろいろと便利だったのでまとめる 詳細 まずはライブラリ追加 compile 'com.android.support:design:22.2.1'次にxmlにTabLayout指定 Activity <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.v7.widget.T
概要 Android Mから追加されたMIDI操作APIについてまとめる 詳細 MIDI APIには大きく分けて二つの機能カテゴリが存在する MIDIデバイスを使用するためのAPI MIDIを利用したアプリケーションを開発す場合に使う MIDIデバイスサービスを実装するためのAPI MIDIソフトウェアシンセサイザーなどを公開して、他のアプリケーションで使用してもらう場合使う どちら側のAPIにも言えることだが、MIDI APIは「MIDIデバイス」が複数の入出力ポートを持ち、それらを開いて「MIDIメッセージ」を送受信する MIDIデバイスを使用するためのAPI 次のような流れになる MIDIデバイスのリストを取得して、そのひとつをオープン そのデバイスのMIDI入力ポートあるいはMIDI出力ポートをオープン MIDI入力デバイスを使用するなら、入力ポートからのMIDIメッセージを処理
概要 AndroidStudio1.4から追加されたScrolling Layoutを読み解き、CoordinatorLayout, AppBarLayout, CollasingToolbarLayoutを理解する 詳細 生成されたレイアウトxml <?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_
概要 realmで何も考えずにモデルクラスを更新してアプリをアップデートすると以下のエラーを吐いて落ちる io.realm.exceptions.RealmMigrationNeededException: RealmMigration must be provided at io.realm.BaseRealm.migrateRealm(BaseRealm.java:568) at io.realm.Realm.migrateRealm(Realm.java:1064) at io.realm.Realm.migrateRealm(Realm.java:1053) at io.realm.Realm.create(Realm.java:253) at io.realm.Realm.getInstance(Realm.java:219) at io.realm.Realm.getInsta
概要 Support Design LibraryのNavigationViewが色々便利だったのでまとめ 詳細 まずはActivityのlayout <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWin
概要 Design Support LibraryのCoordinatorLayoutを使ってみたまとめ その1 詳細 CoodinatorLayoutはFrameLayoutと同じように扱え、CoodinatorLayoutの子View同士に関係を持たせることができるコンポーネント ある子Viewの動きに合わせてもう一つの子Viewを動かすことができる 何をできるのか直感的には理解しずらい感じがするのでいくつかコードを書いてみて使い方を理解していく Anchor Anchorを使うとCoodinatorLayoutの子孫View同士に関係を持たせることができる 大きく二つの特徴がある 参照先のViewとの相対的なViewの配置 参照先のViewが移動した場合の追従 ToolBarの境界線にFloating Action Buttonを配置してみる <android.support.des
概要 Android Mから導入された自動バックアップのシステムAuto Backup for Appsについてまとめる 詳細 バックアップの仕組みはAndroid2.2から存在していたが、Android Mからは自動的にバックアップがGoogleDriveにとられるようになる ちなみにAndroid2.2のバックアップの方法も生きてるので、Android Mにアップデートしたからといってバックアップの記述を変える必要は無い 注意点 自動的にバックアップがとってもらえて楽にはなったのだが、自動的にバックアップを取られると困るファイルもあるのでそこらへんの注意点 整合性を失ってしまうファイル GCMのregistration idとかは端末ごとに割り当てるものなので、バックアップを取られるとプッシュ通知が送られてこなくなる 端末に依存したファイルがある場合バックアップの対象から外すか、ファイ
概要 Android4.1ぐらいからNotificationで大きな画像だったり、widgetが配置できたりするようになった http://developer.android.com/reference/android/app/Notification.BigPictureStyle.html http://developer.android.com/reference/android/app/Notification.BigTextStyle.html http://developer.android.com/reference/android/app/Notification.InboxStyle.html サポートライブラリを使えば上記のスタイルも使えるのだが、使っているアプリを見かけることが少ない 以前の実装方法(Notification#setLatestEventInfo())
概要 Design Support LibraryのCoordinatorLayoutを使ってみる_1 - うさがにっき の続き 独自Behaviorを指定して、CoordinatorLayout指定時のanimationを独自に作成する Floating Action Buttonを下方向にスクロールしたら消えるようにanimationを作成する 詳細 FloatingActionButtonのBehaviorを継承して独自animationを作成する onStartNestedScrollで縦方向のスクロールだけイベントを拾うようにする public class MyFabBehavior extends FloatingActionButton.Behavior { boolean mIsAnimating = false; public MyFabBehavior(Context
概要 以下3種類のAndroidの非同期処理についてまとめる Handler AsyncTask AsyncTaskLoader 詳細 Handler Androidではメインスレッド以外からUIを書き換えようとしたら例外が発生する そのため、別スレッドからUI(メイン)スレッドを書き換えたいときの処理をLooperというQueueにためて、順番に処理していく機構をHandlerという 基本的な使い方 public static class PlaceholderFragment extends Fragment { private Handler handler = new Handler(); public PlaceholderFragment() { } @Override public View onCreateView(LayoutInflater inflater, View
概要 Notificationで使用するPendingIntentの使う際には第四引数を PendingIntent.FLAG_CANCEL_CURRENT にする まとめ Notificationに設定するPendingIntentを以下のようにしているサイトをよく見る PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0); これには少し問題がある 以前に発行したPendingIntentが生きている場合、intentに設定したExtrasが反映されないのだ さらに、PendingIntentはアプリの起動とは関係なく、Androidのシステムによって管理されているため、アプリを落としてもPendingIntentは作り直されない つまり、アプリを再起動してもintentに設定したExtrasが更新されず、ずっと
概要 CloudFrontはAWSのCDN(Contents Delivery Network)サービスのこと CDNとはなんなのか、S3とCloudFrontとの連携についてまとめる 詳細 CDNとは? コンテンツを配信するために最適化されたネットワークのこと 分散して配置したサーバをコンテンツの配布ポイントとして利用し、効率的にコンテンツを配信する仕組み コンテンツの配布ポイントからコンテンツを配信することにより低レイテンシで効率的に配信することができる ClouldFrontとは? CloudFrontは、AWSが世界中に配置したエッジサーバを利用して効率的にコンテンツを配信する エッジサーバはCloudFrontにおけるコンテンツの配布ポイント ユーザのアクセスを、最も近いエッジサーバに誘導する またCloudFrontは負荷分散としても大きな意味を持つ コンテンツの配信元となるサ
概要 サイズの大きいファイル配信を始めるときに使う「Web Storage」パターンについてまとめる 詳細 サイズの大きいファイル配信を始めると次の問題が顕著になってくる 通信速度の問題 1ユーザのダウンロード速度が回線帯域を占有するため、十分な速度で通信できない サーバのパフォーマンスの問題 一般にwebサーバは「ユーザにファイルを送信したら、すぐにコネクションを切る」ことで同時接続数を減らしパフォーマンスを向上させている だが、ファイルサイズが大きいとなかなかコネクションを切ることができず、コネクション数が増えサーバのパフォーマンスが劣化する そこで検討したいのがWeb Storageパターン Web Storageパターンではサイズの大きなファイルを配信するためにAWSの「S3(Amazon SImple Storage Service)」というインターネットストレージを使う S3は
概要 Amazon S3(Simple Storage service)のWebホスティング機能を使って静的サイトを構築する S3の操作については以前に触れたことがあるのでこちらも参照 負荷の大きなものをS3で提供する「Web Storage」 - うさがにっき 詳細 S3のBucketを作成する、Bucketが静的サイトのホストとなる バケット名でエラー、バケット名は全ユーザで異なる必要があるらしい 修正し再作成したら作成できた 作成した「practicestaticsite-aws」バケットのプロパティから(名前の横の虫眼鏡から表示できる)静的ウェブサイトホスティングを選択 ウェブサイトのホスティングを有効にするを選択しインデックスドキュメントに「index.html」、エラードキュメントに「error.html」を設定する 次にバケットポリシーを変更して、ファイルへのアクセス権を修正
次のページ
このページを最初にブックマークしてみませんか?
『tiro105.hateblo.jp』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く