stsnブログ

Android, Kotlin, Python, Go, Developer

Android: Eng modeの紹介

Android: Wireless debuggingでうまく繋がらない時にadb connectを使う

naptを使って、ビルドを高速化する

Gradle: Javaのバージョン差異によるビルド速度の変化

Androidビルド速度改善雑記 その2

Androidビルド速度改善雑記 その1

dev版のJetpack Composeを使って、新しいKotlinに対応する

マルチモジュール環境の開発改善について雑談

Dagger2: 拡張関数を使い、@Bindsの定義をシンプルにする

Android: Gradle Build Scanで、マルチモジュール環境のビルド改善

Kotlin: Sealed class(interface)で実装を隠す

Jetpack Compose: debugInspectorInfoを使って、デバッグを少し楽にする

Gradle: Typesafe project dependencies

Gradle Profilerを使って、ビルドを最適化する

Gradle: 様々なバージョン管理の方法

moleculeライブラリで感動したところ

Android: non-transitive Rの導入と、ビルド時間の変化について

Kotlin: functional interfaceを使うと、少し効率が良いコードが生成される

Kotlin: ローカル関数を使って読みやすいコードを書きたい

KMMでアクセス修飾子をつけるとobjcヘッダーファイルが小さくなって嬉しい話

GitHub Actions: Composite Run Stepsの簡単な使い方

Testifyを使って、Jetpack Composeのスクリーンショットテストをする

Android: Dagger Hiltで推移的な依存を解決する

JetBrains Toolbox Appのススメ

Android: BuildConfigの生成をoffにする

GitHub Actions: 前のGitHub Actionの実行をキャンセルする

Gradle: 新しいバージョン管理方法 Central declaration of dependenciesの紹介

Kotlin: infixのサンプルコード紹介

Paparazziを使って、実機を使わずにスナップショットを取る

KMM: CocoaPodsのPrivate Spec Repoを使う

Kotlin: RxJava -> Coroutineへの置き換えに使えるMigration.ktの紹介

Kotlin: objectクラスで拡張関数をグループ化する

Android: 公式でAssisted Injectがサポートされそう

マルチモジュール環境での、dummyモジュール導入によるビルドの高速化

Android: 既存のDagger AndroidからHiltへの移行について

Android: RIP AsyncTask

Jetpack Compose: IOSchedをJetpack Composeで書く part1

Jetpack Compose: PreviewParameterアノテーションを使っていろいろなプレビューを作る

Android: Dagger HiltとDagger Androidの生成コードの違いについて

Android: エミュレータでFreeformモードを使う

Android: ActivityResultContractを使ってRuntime Permissionsを実装する

avocadoとGitHub Actionsを使って、Vector Drawableを最適化する

Android: ConstraintLayoutの子にRecyclerViewを配置して、Match Constraintsを設定すると良くない挙動をする

GitHub Actions: AndroidプロジェクトのGradle周りの設定メモ

ちょっと複雑なレイアウトをConstraintLayoutで組んでみるpart2

ちょっと複雑なレイアウトをConstraintLayoutで組んでみるpart1

Dagger2: Dagger2.27の新しいエラーメッセージを少し試してみる

Jetpack Compose: Ambientを使ってインスタンスを注入、取得する

Jetpack Compose: Modelとstate

Android: findViewTreeLifecycleOwnerでViewからLifecycleOwnerを取得する

Gradle: BOMを使って依存を指定する

doOnNextLayout、doOnLayout、doOnPreDrawの違いと、Coroutineでこれらを動かしてみる

Dagger2: 2.26時点でのKotlinサポート状況

fitsSystemWindowsの話をつらつらと

FragmentでViewの参照を持つとメモリリークする話と実装

Kotlin: FlowのflowOnオペレータの挙動

2019年のアウトプット振り返り

Material Components: ShapeableImageViewで丸く切り抜かれた画像を表示する

ViewModelとKotlin Coroutinesの書き方あれこれ

GitHub Actionsでエミュレータテストをする

GitHub Actions: 最近使っているGitHub Actionsたち

メモ Android: Navigation Component + Toolbar(ActionBar)周りのコードを読んで見る

Material Components: ShapeとBottomSheetDialogとMaterialButton

Android: Groupieの内部でやっている差分更新周りの話

Android マルチモジュール: Gradle周りで便利だと思う設定

Android: Navigationのdialogタグ周りのコードちょっと読んでみた

Android Studio: Firebaseなどのクラッシュログから関数ジャンプできるようにする

Android Gradle Plugin 4.0でjava.timeがバックポートされるようになりました

ViewPager2で要素をループさせる

ISUCON9 決勝参加ログ

Android マルチモジュール: ライブラリのバージョン管理について

ISUCON9 予選ログ

ViewPager2でカルーセルっぽいものを実装する

Kotlin: FlowのBufferの指定について

GitHubのNotificationsで、androidxライブラリのリリースの通知を受け取れるリポジトリを作りました

Material Components: MaterialTextViewでlineHeightがTextAppearanceから指定出来るようになりました

Android: RestrictToアノテーションのIDE上での振る舞い

Retrofit: Coroutineを使うときの、Response<T>と生のTの使い分け

RxJava 3.xの開発が本格的に始まりました

Kotlinのwildcard importと拡張関数

Google I/O'19: Build a Modular Android App Architectureのまとめ・感想

Dagger2: 2.23に入ったHasAndroidInjectorについて

ViewModel SavedState + Dagger

雑メモ: ViewModel SavedStateのコードリーディング

ViewPager2 with TabLayout

Data Binding 3.5と3.6のまとめ/感想

CameraX: CameraView触ってみた

MvRxの雑な感想

Material Components: MotionSpecを使ってアニメーションをカスタマイズする

ConstraintLayout Flowの紹介

Kotlin: プロパティの変更を検知する

ConstraintLayoutのImageFilterViewって単体でも使えるんやなって

Dagger 2.22にFactoryクラスが導入されました

DataBindingとActivityのコンストラクタ Layout Id指定を一緒に使う

OkHttp: Java to KotlinのPRを見て勉強する

Kotlin: コンストラクタ呼び出しっぽく関数やcompanion objectを使う

Kotlin: CoroutineでRxJavaのzipっぽいものを表現する

Android: JetpackのCoroutine Supportについて

Dagger2: ProvidesはKotlin extension methodと一緒に使うことが出来る

RxAndroidにPull Requestを出した話

Robolectric + JetpackでActivityのonActivityResultメソッドをテストする

マルチモジュールの遷移について考える Part2

でかいappモジュールがあるときに、中間モジュールを入れることで差分ビルドを上手く効かせる

R8/Proguard: JarファイルからProGuard設定ファイルを読み込んでくれるようになりました

FluxのDispatcherをRoomのin memoryで実装するのは、冗長なコードが多くなるので良くない

R8/Proguard: Daggerの生成コードがR8でどのように変わるかを見る

R8/Proguard: Kotlinのlambda最適化について

R8/Proguard: KotlinのCompanion objectとobjectについて

R8/Proguard: Class Mergingについて

Dynamic Feature ModuleでDagger Androidを使う

dexdumpメモ

マルチモジュールの遷移について考える Part1

Coroutine + AutoDisposeを作ってみた

FragmentとgetViewLifecycleの話

Dagger + ViewModelの基本編 + 実例編

GradleのMatching repositories to dependenciesを使ってライブラリのダウンロード先を指定する

Truthのメリット、特徴について

Kotlin: Resultの簡単なまとめ

Android: namespacedRClassフラグでRクラスを小さく保つ

Gradle: Dagger2でapiとimplementationどちらを使うか議論されている

Data Bindingのエラーログが3.4.0-alpha07から見やすくなる

Kotlin Coroutineを導入したらどれだけビルドタイムが増えそうか検証した

MutableなLiveDataを特定のクラス外から更新できなくする

Retrofitでカスタムアノテーションを使う

Activity、Fragment、Viewにコンストラクタインジェクションする

Kotlin: Contracts + 拡張関数でより便利に

Android: デバッグ時にMoshi、Daggerリフレクションライブラリを使いビルド時間を短縮する

KotlinのNon-Null型にnullを代入する方法

拡張関数 + ジェネリック型でよりタイプセーフを得る

Kotlinで3つの関数のパラメータを省略する

UnitテストでViewModelのonClearedをテストする

Inline classesとGsonでprimitive型をクラスで受けとる

Daggerでprivate valで依存関係を取得したかった

RxAndroidのasyncパラメータを試してみた

Android: Dagger 2.17のfastInitを試してみた

Kotlin: Inline Functionだけではメソッドカウントは減らない

Android: ContraintLayoutでネガティブマージンを実現する

Kotlin: typealiasを使ってめんどうなアノテーションを省略する

Dagger-AndroidでUserScopeのようなカスタムのScopeを使い、特定のActivity間のみで同一インスタンスを使う方法

Android: Navigationのsafeargs Gradle pluginだけを使ってもいいかもしれない

Android: 拡張関数でLiveDataのSingle Eventを扱う

CoroutineBindingライブラリを作りました

型の声

Kotlin: ローカルで明示的に型を宣言することについて

Android: Data Bindingを使っていると本当のエラーログが出ない話 + 対処法

ActivityやFragmentにコメントを書くことについて

Android: ViewがどのFragmentに属しているかをViewから取得する

Kotlin: 拡張関数からprotectedメソッドにアクセスする

RxJava: as, toの違いについて

Dagger: MembersInjectorを使い依存を注入する

Kotlin: Companion object + @JvmStaticは冗長なメソッドが作られる

Kotlinでカリー化を表現する

LiveDataのpostValueは全て流れてくるとは限らない

Android: Roomにおけるデータ変更通知の仕組みについて(InvalidationTracker)

Android: RxJava + OkHttpを使って401の処理をいい感じにする

RxJava multicastについて

RxJava 並行でリクエストをして, リクエストした順番で値を受け取る

RxJava: AutoDisposeで自動的にdisposeする

RxJava: Connectable Observableについて

RxJava: SubjectでonErrorを取り扱う時

Android: Dagger2のScopeについてあれこれ

Android: Repository層についてあれこれ

LeakCanary: ソースコードリーディング

Android: Fragmentを使って、画面の向きの変更時にデータを保持する

ISUCON6予選で悲しくも負けてしまいました

Golang: structで宣言したメソッドを明示的に呼び出す

Android: MVPのPresenterの非同期周りのユニットテストの書き方

Linux perf: CPU編

お手軽にローカルにサーバを立てる

Android: テストメソッドの命名規則について

Android: MVP, Dagger2, Retrofitなどなどでアプリを作りました

Improving Android: 列挙にはenumではなくIntDef, StringDef annotationを使う

Android: Picassoで使われているデザインパターン

心理学: 人間は合理的な判断は出来ない

Android: Dagger2でDIをする. u2020から読み解く編 Part2

ReactiveX: Hot, Coldの違い

Android: Dagger2でDIをする. 基本編 Part1

Python: Pythonライクな書き方 Part1

Android: DroidKaigiまとめ

データベース: RDBと第1~3正規形について

データベース: 履歴データについて

[ERROR] InnoDB: Cannot allocate memory for the buffer pool の対処法

Android: FragmentPagerAdapterでハマった話

HTML5: Shadow DOMについて

デザインパターン: Value Object

Go: GojiにPRした話

Android: strings.xmlのまとめ

Android: Pull to Refreshの実装(SwipeRefreshLayout)

tips: 気軽にローカルにサーバを立てる

CSS: Clearfixについて

デザインパターン: Null Object

AnsibleでGhostアプリをデプロイ

Golang: nil pointer receiverの話

AnsibleでGoアプリをデプロイ

様々な言語のフィボナッチ関数

Go: Goji patternマッチ部分のコードリーディング

subproコマンド: Sublime Projectのプロジェクト管理

DroidKaigi2019で「R8/ProGuard 徹底比較」というテーマで発表しました

DroidKaigi2018で「なんとなく動いているProguardから脱出するために」というテーマで発表しました

感想: コーディングを支える技術

感想: オブジェクト指向設計実践ガイド ~Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方

感想: Androidアプリ設計パターン入門

読んだ: 達人に学ぶDB設計 徹底指南書

読んだ: Web API: The Good Parts