SlideShare a Scribd company logo
1 of 37
Download to read offline
Paging Libraryの利用をやめたい
お気持ち表明
Sansan株式会社
古川 真次
【Sansan Tech Meetup】Android開発Tipsを3社のエンジニアが語る
ZOZOテクノロジーズ x クラスメソッド x Sansan  ~Androidエンジニア向け勉強会~
自己紹介
● 古川 真次(ふるしん)
●  @furusin_oriver
● Sansan,Inc. Android Engineer
● 大阪府在住
● 趣味:勉強会の主催、魚を捌く
● ほしいもの:分離キーボード、柳刃包丁
オンライン名刺
Paging…つらくない?
Paging…つらくない?
● Initialize
● 読み込んでるページの管理
● 次に読み込むタイミング
● クルクル
● etc...
Paging Libraryを使わない場合
● 「アイテムの最後が表示された」Listenerを用意して汎用化しておく
Paging Libraryを使わない場合
abstract class OnLastItemVisibleListener : RecyclerView.OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
super.onScrolled(recyclerView, dx, dy)
if (一番下までスクロールしたら) {
onLastItemVisible()
}
}
protected abstract fun onLastItemVisible() {
}
}
● 読み込むページを管理する必要がある
Paging Libraryを使わない場合
recyclerView.addOnScrollListener(object : OnLastItemVisibleListener() {
override fun onLastItemVisible() {
// 次のページを読み込む
loadHogeList(pageNumber = pageNumber.next)
}
})
● 読み込むページを管理する必要がある
Paging Libraryを使わない場合
recyclerView.addOnScrollListener(object : OnLastItemVisibleListener() {
override fun onLastItemVisible() {
val state = hogeStateStore.data.value
if (state is HogeState.Success && state.hasNextPage) {
actionCreator.execute(state.pageNumber.next)
}
}
})
● 読み込むページを管理する必要がある
Paging Libraryを使わない場合
recyclerView.addOnScrollListener(object : OnLastItemVisibleListener() {
override fun onLastItemVisible() {
val state = hogeStateStore.data.value
if (state is HogeState.Success && state.hasNextPage) {
actionCreator.execute(state.pageNumber.next)
}
}
})
(改めて)
Paging…つらくない?
(事前準備することめっちゃあるやん)
Jetpackにお任せ!
Paging Library
2
Paging Libraryの公式ドキュメント
https://developer.android.com/topic/libraries/architecture/paging?hl=ja
● 前提となるコンポーネント
Paging Libraryを使った場合
● 前提となるコンポーネント
Paging Libraryを使った場合
●
DataSourceの例(Paging 3)
class GithubPagingSource(
private val service: GithubService,
private val query: String
) : PagingSource<Int, Repo>() {
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, Repo> {
val position = params.key ?: GITHUB_STARTING_PAGE_INDEX
val apiQuery = query + IN_QUALIFIER
return try {
val response = service.searchRepos(apiQuery, position, params.loadSize)
val repos = response.items
LoadResult.Page(
data = repos,
prevKey = if (position == GITHUB_STARTING_PAGE_INDEX) null else position - 1,
nextKey = if (repos.isEmpty()) null else position + 1
)
} catch (exception: IOException) {
return LoadResult.Error(exception)
} catch (exception: HttpException) {
return LoadResult.Error(exception)
}
}
}
●
DataSourceの例
class GithubPagingSource(
private val service: GithubService,
private val query: String
) : PagingSource<Int, Repo>() {
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, Repo> {
val position = params.key ?: GITHUB_STARTING_PAGE_INDEX
val apiQuery = query + IN_QUALIFIER
return try {
val response = service.searchRepos(apiQuery, position, params.loadSize)
val repos = response.items
LoadResult.Page(
data = repos,
prevKey = if (position == GITHUB_STARTING_PAGE_INDEX) null else position - 1,
nextKey = if (repos.isEmpty()) null else position + 1
)
} catch (exception: IOException) {
return LoadResult.Error(exception)
} catch (exception: HttpException) {
return LoadResult.Error(exception)
}
}
}
●
DataSourceの例
class GithubPagingSource(
private val service: GithubService,
private val query: String
) : PagingSource<Int, Repo>() {
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, Repo> {
val position = params.key ?: GITHUB_STARTING_PAGE_INDEX
val apiQuery = query + IN_QUALIFIER
return try {
val response = service.searchRepos(apiQuery, position, params.loadSize)
val repos = response.items
LoadResult.Page(
data = repos,
prevKey = if (position == GITHUB_STARTING_PAGE_INDEX) null else position - 1,
nextKey = if (repos.isEmpty()) null else position + 1
)
} catch (exception: IOException) {
return LoadResult.Error(exception)
} catch (exception: HttpException) {
return LoadResult.Error(exception)
}
}
}
●
DataSourceの例
class GithubPagingSource(
private val service: GithubService,
private val query: String
) : PagingSource<Int, Repo>() {
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, Repo> {
val position = params.key ?: GITHUB_STARTING_PAGE_INDEX
val apiQuery = query + IN_QUALIFIER
return try {
val response = service.searchRepos(apiQuery, position, params.loadSize)
val repos = response.items
LoadResult.Page(
data = repos,
prevKey = if (position == GITHUB_STARTING_PAGE_INDEX) null else position - 1,
nextKey = if (repos.isEmpty()) null else position + 1
)
} catch (exception: IOException) {
return LoadResult.Error(exception)
} catch (exception: HttpException) {
return LoadResult.Error(exception)
}
}
}
成功:
失敗:
●
DataSourceの例
class GithubPagingSource(
private val service: GithubService,
private val query: String
) : PagingSource<Int, Repo>() {
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, Repo> {
val position = params.key ?: GITHUB_STARTING_PAGE_INDEX
val apiQuery = query + IN_QUALIFIER
return try {
val response = service.searchRepos(apiQuery, position, params.loadSize)
val repos = response.items
LoadResult.Page(
data = repos,
prevKey = if (position == GITHUB_STARTING_PAGE_INDEX) null else position - 1,
nextKey = if (repos.isEmpty()) null else position + 1
)
} catch (exception: IOException) {
return LoadResult.Error(exception)
} catch (exception: HttpException) {
return LoadResult.Error(exception)
}
}
}
● 前提となるコンポーネント
Paging Libraryを使った場合
class ReposAdapter : PagingDataAdapter<Repo, RecyclerView.ViewHolder>(REPO_COMPARATOR) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {}
}
Paging Libraryで何がつらいか
● そもそもAndroid app Architectureを前提としている
Paging Libraryで何がつらいか
● SubHeaderの差し込みがしんどい
○ 「日付ごと」
とか
○ 「人ごと」
でのグルーピング
Paging Libraryで何がつらいか
● SubHeaderの差し込みがしんどい
○ 「日付ごと」
とか
○ 「人ごと」
でのグルーピング
Paging Libraryで何がつらいか
Paging 3で解決されてるかも
SubHeaderの差し込みがしんどい
/**
* Returns a [PagingData] containing each original element, with the passed header [item] added
* to the start of the list.
*
* The header [item] is added to a loaded page which marks the end of the data stream in the
* prepend direction by returning null in [PagingSource.LoadResult.Page.prevKey]. It will be
* removed if the first page in the list is dropped, which can happen in the case of loaded
* pages exceeding [PagedList.Config.maxSize].
*
* Note: This operation is not idempotent, calling it multiple times will continually add
* more headers to the start of the list, which can be useful if multiple header items are
* required.
*
* @see [insertFooterItem]
*/
@CheckResult
fun insertHeaderItem(item: T) = insertSeparators { before, _ ->
if (before == null) item else null
}
● Paging 3で解決する(かも?)
● 特定のアイテムを後から更新…がやりにくい
○ 更新するにはリストの再生成が必要
Paging Libraryで何がつらいか
● 特定のアイテムを後から更新…がやりにくい
○ 更新するにはリストの再生性が必要
Paging Libraryで何がつらいか
Paging 3で解決されてるかも
Paging Libraryのつらみを
解消する方法
2
1. Paging 3を使う
Paging Libraryでのつらみを解消する方法
2
1. Paging 3を使う
a. そもそもまだAlphaなので今すぐには難しい
b. 「ここまだめっちゃ途中なんだよねー」みたいなコメントアウトめっちゃある
Paging Libraryでのつらみを解消する方法
1. Paging 3を使う
a. そもそもまだAlphaなので今すぐには難しい
b. 「ここまだめっちゃ途中なんだよねー」みたいなコメントアウトめっちゃある
2. Paging 2でも力技で使えなくはない
Paging Libraryでのつらみを解消する方法
1. Paging 3を使う
a. そもそもまだAlphaなので今すぐには難しい
b. 「ここまだめっちゃ途中なんだよねー」みたいなコメントアウトめっちゃある
2. Paging 2でも力技で使えなくはない
a. だったらPaging Library使わずに(無理してライブラリに依存せずに)
実現すればよいのでは
b. Paging Libraryの利用を(無理してやるのは)やめたいお気持ち表明
Paging Libraryでのつらみを解消する方法
● 結論
○ 適材適所!
○ ただのリストを表示するだけのところはPaging Libraryが超便利
Paging Libraryでのつらみを解消する方法
● Paging Libraryは「単にリストを表示するだけ」だと最高
● ただし相性が悪いパターンはある
● Paging Libraryは発展途上
● 適材適所!
まとめ
● Codelabs:Paging 3
https://developer.android.com/codelabs/android-paging?index=../../index#0
● Paging library overview
https://developer.android.com/topic/libraries/architecture/paging
● Paging Library ~ アイテムの更新 ~
https://speakerdeck.com/kgmyshin/paging-library-aitemufalsegeng-xin
参考文献
ご清聴ありがとうございました

More Related Content

What's hot

思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8y_taka_23
 
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in TokyoGrails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in TokyoTsuyoshi Yamamoto
 
Google App Engine for Java
Google App Engine for JavaGoogle App Engine for Java
Google App Engine for JavaTakuya Tsuchida
 
GMO TECHNOLOGY BOOT CAMP2015(PHP編)
GMO TECHNOLOGY BOOT CAMP2015(PHP編)GMO TECHNOLOGY BOOT CAMP2015(PHP編)
GMO TECHNOLOGY BOOT CAMP2015(PHP編)Arata Fujimura
 
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...なおき きしだ
 
Rユーザのためのspark入門
Rユーザのためのspark入門Rユーザのためのspark入門
Rユーザのためのspark入門Shintaro Fukushima
 
Synthesijer and Synthesijer.Scala in HLS-friends 201512
Synthesijer and Synthesijer.Scala in HLS-friends 201512Synthesijer and Synthesijer.Scala in HLS-friends 201512
Synthesijer and Synthesijer.Scala in HLS-friends 201512Takefumi MIYOSHI
 
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用Yatabe Terumasa
 
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについてtako pons
 
Develop Web Application with Node.js + Express
Develop Web Application with Node.js + ExpressDevelop Web Application with Node.js + Express
Develop Web Application with Node.js + ExpressAkinari Tsugo
 
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」de:code 2017
 
Lightweight Language Tiger 2010
Lightweight Language Tiger 2010Lightweight Language Tiger 2010
Lightweight Language Tiger 2010biscuitjam
 
Pycon2014 django performance
Pycon2014 django performancePycon2014 django performance
Pycon2014 django performancehirokiky
 
人狼知能セミナー資料案20170624
人狼知能セミナー資料案20170624人狼知能セミナー資料案20170624
人狼知能セミナー資料案20170624Kosuke Shinoda
 
omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜Sotaro Omura
 
Elasticsearch入門 pyfes 201207
Elasticsearch入門 pyfes 201207Elasticsearch入門 pyfes 201207
Elasticsearch入門 pyfes 201207Jun Ohtani
 

What's hot (20)

Yahoo!ボックスAPI Hackathon向け資料
Yahoo!ボックスAPI Hackathon向け資料Yahoo!ボックスAPI Hackathon向け資料
Yahoo!ボックスAPI Hackathon向け資料
 
Yahoo!ボックスAPI Hackday資料
Yahoo!ボックスAPI Hackday資料Yahoo!ボックスAPI Hackday資料
Yahoo!ボックスAPI Hackday資料
 
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
 
Synthesijer hls 20150116
Synthesijer hls 20150116Synthesijer hls 20150116
Synthesijer hls 20150116
 
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in TokyoGrails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
 
Google App Engine for Java
Google App Engine for JavaGoogle App Engine for Java
Google App Engine for Java
 
GMO TECHNOLOGY BOOT CAMP2015(PHP編)
GMO TECHNOLOGY BOOT CAMP2015(PHP編)GMO TECHNOLOGY BOOT CAMP2015(PHP編)
GMO TECHNOLOGY BOOT CAMP2015(PHP編)
 
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
 
Rユーザのためのspark入門
Rユーザのためのspark入門Rユーザのためのspark入門
Rユーザのためのspark入門
 
Jetpack Workshop
Jetpack WorkshopJetpack Workshop
Jetpack Workshop
 
Synthesijer and Synthesijer.Scala in HLS-friends 201512
Synthesijer and Synthesijer.Scala in HLS-friends 201512Synthesijer and Synthesijer.Scala in HLS-friends 201512
Synthesijer and Synthesijer.Scala in HLS-friends 201512
 
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用
 
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについて
 
Develop Web Application with Node.js + Express
Develop Web Application with Node.js + ExpressDevelop Web Application with Node.js + Express
Develop Web Application with Node.js + Express
 
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
 
Lightweight Language Tiger 2010
Lightweight Language Tiger 2010Lightweight Language Tiger 2010
Lightweight Language Tiger 2010
 
Pycon2014 django performance
Pycon2014 django performancePycon2014 django performance
Pycon2014 django performance
 
人狼知能セミナー資料案20170624
人狼知能セミナー資料案20170624人狼知能セミナー資料案20170624
人狼知能セミナー資料案20170624
 
omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜
 
Elasticsearch入門 pyfes 201207
Elasticsearch入門 pyfes 201207Elasticsearch入門 pyfes 201207
Elasticsearch入門 pyfes 201207
 

Similar to Paging Libraryの利用をやめたいお気持ち表明

Lightweight-Stream-APIのあるAndroidアプリ開発
Lightweight-Stream-APIのあるAndroidアプリ開発Lightweight-Stream-APIのあるAndroidアプリ開発
Lightweight-Stream-APIのあるAndroidアプリ開発Shinobu Okano
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDEdcubeio
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」yoshiaki iwanaga
 
ActiveResourceが面白すぎる件
ActiveResourceが面白すぎる件ActiveResourceが面白すぎる件
ActiveResourceが面白すぎる件Kazuki MATSUMOTO
 
外国人旅行者向けラーメン店検索アプリを作る話@Code for KOSEN勉強会#1
外国人旅行者向けラーメン店検索アプリを作る話@Code for KOSEN勉強会#1外国人旅行者向けラーメン店検索アプリを作る話@Code for KOSEN勉強会#1
外国人旅行者向けラーメン店検索アプリを作る話@Code for KOSEN勉強会#1Yoshihiro Wada
 
Functional JavaScript with Lo-Dash.js
Functional JavaScript with Lo-Dash.jsFunctional JavaScript with Lo-Dash.js
Functional JavaScript with Lo-Dash.jsShogo Sensui
 
React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門spring_raining
 
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016Takayuki Shimizukawa
 
Google Dev Fest 2010 Japan LT: OpenSocial JavaScript API is good, Lightweight...
Google Dev Fest 2010 Japan LT: OpenSocial JavaScript API is good, Lightweight...Google Dev Fest 2010 Japan LT: OpenSocial JavaScript API is good, Lightweight...
Google Dev Fest 2010 Japan LT: OpenSocial JavaScript API is good, Lightweight...Nobuhiro Nakajima
 
React+TypeScriptもいいぞ
React+TypeScriptもいいぞReact+TypeScriptもいいぞ
React+TypeScriptもいいぞMitsuru Ogawa
 
おいしいFragment #antama_ws
おいしいFragment #antama_wsおいしいFragment #antama_ws
おいしいFragment #antama_wsTakahiro Yoshimura
 
Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義JPCERT Coordination Center
 
絶対落ちないアプリの作り方
絶対落ちないアプリの作り方絶対落ちないアプリの作り方
絶対落ちないアプリの作り方Fumihiko Shiroyama
 
Data api workshop at Co-Edo
Data api workshop at Co-EdoData api workshop at Co-Edo
Data api workshop at Co-EdoYuji Takayama
 
JavaScriptおよびXPages Vote技術解説
JavaScriptおよびXPages Vote技術解説JavaScriptおよびXPages Vote技術解説
JavaScriptおよびXPages Vote技術解説賢次 海老原
 

Similar to Paging Libraryの利用をやめたいお気持ち表明 (20)

Lightweight-Stream-APIのあるAndroidアプリ開発
Lightweight-Stream-APIのあるAndroidアプリ開発Lightweight-Stream-APIのあるAndroidアプリ開発
Lightweight-Stream-APIのあるAndroidアプリ開発
 
APIKit
APIKitAPIKit
APIKit
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
 
ActiveResourceが面白すぎる件
ActiveResourceが面白すぎる件ActiveResourceが面白すぎる件
ActiveResourceが面白すぎる件
 
外国人旅行者向けラーメン店検索アプリを作る話@Code for KOSEN勉強会#1
外国人旅行者向けラーメン店検索アプリを作る話@Code for KOSEN勉強会#1外国人旅行者向けラーメン店検索アプリを作る話@Code for KOSEN勉強会#1
外国人旅行者向けラーメン店検索アプリを作る話@Code for KOSEN勉強会#1
 
Functional JavaScript with Lo-Dash.js
Functional JavaScript with Lo-Dash.jsFunctional JavaScript with Lo-Dash.js
Functional JavaScript with Lo-Dash.js
 
React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門
 
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
 
Google Dev Fest 2010 Japan LT: OpenSocial JavaScript API is good, Lightweight...
Google Dev Fest 2010 Japan LT: OpenSocial JavaScript API is good, Lightweight...Google Dev Fest 2010 Japan LT: OpenSocial JavaScript API is good, Lightweight...
Google Dev Fest 2010 Japan LT: OpenSocial JavaScript API is good, Lightweight...
 
Rx java x retrofit
Rx java x retrofitRx java x retrofit
Rx java x retrofit
 
React+TypeScriptもいいぞ
React+TypeScriptもいいぞReact+TypeScriptもいいぞ
React+TypeScriptもいいぞ
 
Trait in scala
Trait in scalaTrait in scala
Trait in scala
 
Dotnetconf2017
Dotnetconf2017Dotnetconf2017
Dotnetconf2017
 
Scala on Hadoop
Scala on HadoopScala on Hadoop
Scala on Hadoop
 
おいしいFragment #antama_ws
おいしいFragment #antama_wsおいしいFragment #antama_ws
おいしいFragment #antama_ws
 
Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義
 
絶対落ちないアプリの作り方
絶対落ちないアプリの作り方絶対落ちないアプリの作り方
絶対落ちないアプリの作り方
 
Data api workshop at Co-Edo
Data api workshop at Co-EdoData api workshop at Co-Edo
Data api workshop at Co-Edo
 
JavaScriptおよびXPages Vote技術解説
JavaScriptおよびXPages Vote技術解説JavaScriptおよびXPages Vote技術解説
JavaScriptおよびXPages Vote技術解説
 

More from furusin

Difficulty of managing iOS Engineers as an Android Engineer.pdf
Difficulty of managing iOS Engineers as an Android Engineer.pdfDifficulty of managing iOS Engineers as an Android Engineer.pdf
Difficulty of managing iOS Engineers as an Android Engineer.pdffurusin
 
Google Play In-App Review API 改めて調べてみた
Google Play In-App Review API 改めて調べてみたGoogle Play In-App Review API 改めて調べてみた
Google Play In-App Review API 改めて調べてみたfurusin
 
Google I_O 2022 Sign-in関連
Google I_O 2022 Sign-in関連Google I_O 2022 Sign-in関連
Google I_O 2022 Sign-in関連furusin
 
Sansan androidチームが取り組む コードレビューを早くまわす工夫
Sansan androidチームが取り組む コードレビューを早くまわす工夫Sansan androidチームが取り組む コードレビューを早くまわす工夫
Sansan androidチームが取り組む コードレビューを早くまわす工夫furusin
 
Google I/O 2021 Recap
Google I/O 2021 RecapGoogle I/O 2021 Recap
Google I/O 2021 Recapfurusin
 
コロナ禍でコミュニティ運営はこう変わった
コロナ禍でコミュニティ運営はこう変わったコロナ禍でコミュニティ運営はこう変わった
コロナ禍でコミュニティ運営はこう変わったfurusin
 
Android dev summit 2019 recap
Android dev summit 2019 recapAndroid dev summit 2019 recap
Android dev summit 2019 recapfurusin
 
Android billing library 2.0 recap
Android billing library 2.0 recapAndroid billing library 2.0 recap
Android billing library 2.0 recapfurusin
 
Android Qにおける Gestural Navigation and Dark Theme
Android Qにおける Gestural Navigation and Dark ThemeAndroid Qにおける Gestural Navigation and Dark Theme
Android Qにおける Gestural Navigation and Dark Themefurusin
 
社内システムにおける 「使いやすさ」の重要性
社内システムにおける 「使いやすさ」の重要性社内システムにおける 「使いやすさ」の重要性
社内システムにおける 「使いやすさ」の重要性furusin
 
デザインフローについて考え直す
デザインフローについて考え直すデザインフローについて考え直す
デザインフローについて考え直すfurusin
 
Build your first wear app
Build your first wear appBuild your first wear app
Build your first wear appfurusin
 
ネイティブAndroidエンジニアがVueNativeでiOSアプリを作ってみた
ネイティブAndroidエンジニアがVueNativeでiOSアプリを作ってみたネイティブAndroidエンジニアがVueNativeでiOSアプリを作ってみた
ネイティブAndroidエンジニアがVueNativeでiOSアプリを作ってみたfurusin
 
Pray for hokkaido from osaka
Pray for hokkaido from osakaPray for hokkaido from osaka
Pray for hokkaido from osakafurusin
 
Google Codelabsをやってみた
Google CodelabsをやってみたGoogle Codelabsをやってみた
Google Codelabsをやってみたfurusin
 
個人開発アプリの紹介と実装内容の概要
個人開発アプリの紹介と実装内容の概要個人開発アプリの紹介と実装内容の概要
個人開発アプリの紹介と実装内容の概要furusin
 

More from furusin (16)

Difficulty of managing iOS Engineers as an Android Engineer.pdf
Difficulty of managing iOS Engineers as an Android Engineer.pdfDifficulty of managing iOS Engineers as an Android Engineer.pdf
Difficulty of managing iOS Engineers as an Android Engineer.pdf
 
Google Play In-App Review API 改めて調べてみた
Google Play In-App Review API 改めて調べてみたGoogle Play In-App Review API 改めて調べてみた
Google Play In-App Review API 改めて調べてみた
 
Google I_O 2022 Sign-in関連
Google I_O 2022 Sign-in関連Google I_O 2022 Sign-in関連
Google I_O 2022 Sign-in関連
 
Sansan androidチームが取り組む コードレビューを早くまわす工夫
Sansan androidチームが取り組む コードレビューを早くまわす工夫Sansan androidチームが取り組む コードレビューを早くまわす工夫
Sansan androidチームが取り組む コードレビューを早くまわす工夫
 
Google I/O 2021 Recap
Google I/O 2021 RecapGoogle I/O 2021 Recap
Google I/O 2021 Recap
 
コロナ禍でコミュニティ運営はこう変わった
コロナ禍でコミュニティ運営はこう変わったコロナ禍でコミュニティ運営はこう変わった
コロナ禍でコミュニティ運営はこう変わった
 
Android dev summit 2019 recap
Android dev summit 2019 recapAndroid dev summit 2019 recap
Android dev summit 2019 recap
 
Android billing library 2.0 recap
Android billing library 2.0 recapAndroid billing library 2.0 recap
Android billing library 2.0 recap
 
Android Qにおける Gestural Navigation and Dark Theme
Android Qにおける Gestural Navigation and Dark ThemeAndroid Qにおける Gestural Navigation and Dark Theme
Android Qにおける Gestural Navigation and Dark Theme
 
社内システムにおける 「使いやすさ」の重要性
社内システムにおける 「使いやすさ」の重要性社内システムにおける 「使いやすさ」の重要性
社内システムにおける 「使いやすさ」の重要性
 
デザインフローについて考え直す
デザインフローについて考え直すデザインフローについて考え直す
デザインフローについて考え直す
 
Build your first wear app
Build your first wear appBuild your first wear app
Build your first wear app
 
ネイティブAndroidエンジニアがVueNativeでiOSアプリを作ってみた
ネイティブAndroidエンジニアがVueNativeでiOSアプリを作ってみたネイティブAndroidエンジニアがVueNativeでiOSアプリを作ってみた
ネイティブAndroidエンジニアがVueNativeでiOSアプリを作ってみた
 
Pray for hokkaido from osaka
Pray for hokkaido from osakaPray for hokkaido from osaka
Pray for hokkaido from osaka
 
Google Codelabsをやってみた
Google CodelabsをやってみたGoogle Codelabsをやってみた
Google Codelabsをやってみた
 
個人開発アプリの紹介と実装内容の概要
個人開発アプリの紹介と実装内容の概要個人開発アプリの紹介と実装内容の概要
個人開発アプリの紹介と実装内容の概要
 

Recently uploaded

論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 

Recently uploaded (9)

論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 

Paging Libraryの利用をやめたいお気持ち表明