Android, Kotlin, Python, Go, Developer
Blogs
-
Jetpack Composeライブ編集(Live Edit)でPrintデバッグをする
-
Android at Scale(with Circuit)の感想
-
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のプロジェクト管理