PowerShellスクリプトでbuild.gradleをオレオレ記述化
Android Studioでプロジェクトを初期化したときに生成されるbuild.gradleをオレオレ記述化したのでメモ。
書き換える動機はこちらの記事が基です。
今まで手動で直していましたが、あまりにもめんどうだったのでテンプレート化してみました。 なお筋肉で解決しているので、ps1ファイルに処理べた書きです。必要に応じ function に切り出し等行ってください。
- どのように書き換えるか
- 使った技術
- PowerShell スクリプト
- init_gradle.ps1
- build-template.gradle
- スクリプトの実行
Firebaseの初期化でハマった
Firebaseの初期化でめちゃくちゃハマったのでメモ。
ネット上をさまよったが、どうもFirebaseの新旧のバージョンで書き方が変わったため、かなり情報がごちゃごちゃになってるっぽい。
- 環境
- 何ができなかったのか
- 何が原因だったか
- どうやって解決したか
- コード上でFirebaseを初期化する
- 所感
CLIP STUDIO PAINTファイルからプレビュー画像を生成する
CLIP STUDIO PAINT ファイル(.clip)のプレビュー画像を node.js で出力したのでメモ。
なお、fs.readFileSync/writeFileSync
を使用しているが、
テスト用に記述してるだけなので、実装する場合はfs.readFile/writeFile
推奨。
- コード
- 解説
- 感想
- 参考
- 主にPowerShell関係
MVVM+DataBinding+RecyclerViewでカレンダーを作る - 1
2021年7月12日 追記
RecyclerView.AdapterのアイテムにDataBindingを用いるため、コンストラクタで LifecycleOwner (FragmentのviewLifecycleOwner) を渡すのは誤った実装でした。
発見に至った経緯
まったく別のアプリ開発でLifecycleRegistry.java
内のObserverWithState.dispatchEvent
を確認していたところ、newState = event.getTargetState
にて、本来生きているはずの親FragmentのON_DESTROY
が渡ってきていました。
static class ObserverWithState { State mState; LifecycleEventObserver mLifecycleObserver; ObserverWithState(LifecycleObserver observer, State initialState) { mLifecycleObserver = Lifecycling.lifecycleEventObserver(observer); mState = initialState; } void dispatchEvent(LifecycleOwner owner, Event event) { State newState = event.getTargetState(); mState = min(mState, newState); mLifecycleObserver.onStateChanged(owner, event); mState = newState; } }
ハッと、binding.lifecycleOwner = parentLifecycleOwner (実体はviewLifecycleOwner)
を渡していたことを思い出しググってみたところ、上記の記事を発見したところです。
RecyclerView+DataBindingはどうすればいいんでしょうかね……。
以下、ご参考まで。
RecyclerViewでカレンダー風の表示を作ったので、備忘録的なまとめその1。 MVVM+DataBinding でViewに表示させるまでです。
- 発見に至った経緯
- できるもの
- 使用した技術的なモノ
- 項目を sealed class で用意する
- sealed class Content の定義
- データバインディングレイアウトファイルの作成
- CalendarActivity の定義
- CalendarActivityViewModel の定義
- CalendarAdapter の定義
- RecyclerView の拡張関数の定義
- CalendarFragment の定義
- レイアウトファイルとバインド
- Fragment の定義
- GitHub
Firebase Hosting+Functionsのメモ
Firebase Hosting
プロジェクトを作成するフォルダに移動してinit
コマンド
cd /project firebase init
Hosting: Configure and deploy Firebase Hosting sites
を選択してポチポチ。
するとプロジェクトフォルダに(デフォルトなら)public
というフォルダとindex.html
等のファイルが生成される。
public
フォルダ内にHtml, CSS等を配置していく。
Hostingへのデプロイ
deploy
コマンドでデプロイする。
firebase deploy
# Hostingのみの場合
firebase deploy --only hosting
最後に下記の形式でURLが発行されるので、ブラウザで開くと作成したページが見られるはず。
projectID.firebaseapp.com
再デプロイしてもうまく反映されないとき
再デプロイをしてもブラウザで見たときに反映されない場合があるが、キャッシュを削除することで直る場合がある。 「chrome キャッシュクリア」あたりでググって見てください。 (Chrome前提ですみません)
Cookieの削除等は不要、「キャッシュされた画像とファイル」の削除だけでおk。
Firebase Functions との連携
あるページにリクエストが来たとき、Functionsで動的にコンテンツを生成して返す方法。
基本全部こちらに載っている。
今回はprojectID.firebaseapp.com/hoge
にアクセスされたとき、Functionsにて生成したHtmlを返すような例。
index.ts
にて関数を定義(ここではdynamicChange
)し、ステータスコードと返すHtmlを書く。
なお、今んところFunctionsによる動的コンテンツ生成はus-central1
リージョンでしか対応していないそうなのでご注意を。
import * as functions from 'firebase-functions' exports.dynamicChange = functions .region('us-central1') .https.onRequest((request, response) => { response.status(200).send( // 公式の例では返すHtmlをハードコーディングしている。。。 ) })
次にfirebase.json
にて、rewrites
を次のように書き換える。
{ ... "hosting": { "public": "public", "ignore": [ "firebase.json", "**/.*", "**/node_modules/**" ], "rewrites": [ { // トリガーとなるページと関数 "source": "/hoge", "function": "dynamicChange" } ] } }
これで再デプロイすると、hoge
にアクセスしたときdynamicChange
関数で生成されたページが返ってくる。