Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
tubeplayR v1.0への道
Search
Kazuhiro Maeda
December 05, 2020
Programming
2
210
tubeplayR v1.0への道
Japan.R 2020でLT発表した内容のスライドです
https://japanr.connpass.com/event/194867/
※ 資料は 2020-12-05 現在での内容となります。
Kazuhiro Maeda
December 05, 2020
Tweet
Share
More Decks by Kazuhiro Maeda
See All by Kazuhiro Maeda
積もってく会議メモをどうにかしたかった
kazutan
0
210
分析システムにR Markdownを組み込む
kazutan
0
430
Rに管理されてみる
kazutan
0
420
私とR、そしてキャリア
kazutan
2
3.3k
R, Git, Droneを使ってconfluenceへのKPI予測レポートを自動化した話
kazutan
2
530
週次KPIレポートをconfluenceへUpするためにやったこと
kazutan
1
1.3k
xaringanパッケージの内容をちょっとだけ
kazutan
0
940
最近のRパッケージ開発事情
kazutan
0
330
Other Decks in Programming
See All in Programming
Parallel Socket Communication in Swift
s_shimotori
0
220
Enhancing Applications with Accessibility API
kishikawakatsumi
3
890
自動テスト実行結果の目的を整理する / Organizing objectives of automated test results
twada
PRO
10
2.1k
デザインシステムで Tailwind CSSとCSS in JSに分散投資をしたら良かった話
fsubal
14
3.2k
WebComponentsで フレームワークを1ページに共存させる
webuilder240
0
150
【KMC春合宿2024】実装視点で見るNeural Radiance Fields
runningoutrate
0
150
OpenAPI を守るのは難しい
ohmori_yusuke
1
140
incrementalモデルの理解を深める
ikkimiyazaki
2
640
Learning PHP and Static Analysis with PHP Parser
inouehi
1
250
マイ隙間家具OSSたちのご紹介
karupanerura
2
150
とにかくHTTP3をライトニングに話す / Anyway, I'll talk to Lightning about HTTP3.
seike460
PRO
0
120
Open Source Swiftc Workshop
kitasuke
1
180
Featured
See All Featured
RailsConf 2023
tenderlove
0
510
Build The Right Thing And Hit Your Dates
maggiecrowley
23
1.9k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
272
12k
Being A Developer After 40
akosma
56
580k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
14
1.3k
4 Signs Your Business is Dying
shpigford
174
21k
Code Reviewing Like a Champion
maltzj
512
39k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
501
140k
Web Components: a chance to create the future
zenorocha
304
41k
Why Our Code Smells
bkeepers
PRO
330
56k
Git: the NoSQL Database
bkeepers
PRO
421
63k
Fontdeck: Realign not Redesign
paulrobertlloyd
75
4.8k
Transcript
tubeplayR v1.0への道 Japan.R 2020 kazutan(前田 和寛) 2020-12-05
はじめに 2 / 29
はじめに 自己紹介 名前/アカウント 前田和寛(Maeda Kazuhiro) @kazutan Twitter GitHub Qiita, r-wakalang,
etc... 所属 LINE Fukuoka株式会社 開発センター - DataLabs - DataAnalysisチーム マネージャー 3 / 29
Rソーシャル本 #宇宙本 #犬四匹本 はじめに 4 / 29
はじめに 担当業務 LINEグループにあるデータを活用して様々な課題にアプローチ サービス関連 サービスの成長につながる分析 施策の効果検証など オペレーション関連 オペレーションの可視化 オペレーションの効率化につながる分析など 福岡で一緒にEnjoyしませんか?
http://linefukuoka.blog.jp/archives/81637302_people_engineer_interview.html お気軽にご連絡ください 5 / 29
今日のお話 6 / 29
今日のお話 概要 私が開発/公開している tubeplayR パッケージのお話です tuveplayR とは 機能的な不満 新機能の実装 v1.0への道
留意事項 分析や業務に関する話はありません 今回はRが大好きな一個人としてお話します かなり駆け足です 今日のスライドは公開した後に、Twitterに#japanr のハッシュタグをつけて流し ますので、細かいところなどはあとでそちらを参照してください 7 / 29
tubeplayRとは 8 / 29
tubeplayRとは 概要 RStudio上でYouTube動画を再生できるパッケージ Webinerを見ながらコーディング可能 作業用BGMを楽しめる インストール remotes install_github("kazutan/tubeplayR") #安定版 remotes
install_github("kazutan/tubeplayR", "dev") #開発版 使い方 動画閲覧用URLをコピーしてくればOK(プレイリストにも対応) tubeplayR tubeplay("want/play/the/url") 9 / 29
tubeplayRとは 使用画面はこんな感じです: 10 / 29
機能的な不満 11 / 29
利用者からの声 履歴について YouTubeのプレイリストURLを利用して毎日同じURLを再生しているのです が、再生するたびにYouTubeを開いてはURLをコピーしてConsoleで実行して います。 どうせなら、過去に再生したのを簡単に持ってくるようなのはできないものでし ょうか? 匿名希望(40代男性・福岡県) 動画リストについて いつもRで分析するときに利用しています。
メドレー的な動画を気分によって再生したりするのですが、動画リストをストッ クして自由に再生できるようになりませんか? あと、そのストックしたのを他の人に共有するのを簡単にしたいです。 P.N. ごぼう天うどん大好き 12 / 29
そんな機能はない 13 / 29
...でも、 14 / 29
なければ 作ればいい 15 / 29
要件整理 リプレイ(history)機能について 以下の機能を実現する関数を実装すればOK 1. 再生するたびに、その動画情報をどこかにストックさせる 2. ストックしている再生履歴情報を呼び出せる 3. 再生履歴にアクセスしてリプレイさせる 4.
再生履歴を消去させる urlストック・共有(playlist)機能について 以下の機能を実現する関数を実装すればOK 1. 動画情報をまとめたものを作成/呼び出し/消去する 2. 動画情報をまとめたものをtubeplayにセット(staged)する 3. tubeplayにセットしたものを再生する いざ実装へ 16 / 29
新機能の実装 17 / 29
全体的な変更点 user directoryについて historyもplaylistも情報をストックしなければならない そのユーザーのホームディレクトリに.Rtubeplay ディレクトリを作るように tubeplayRパッケージでデータを保存するときは、全てここに格納 消去したいときはtp_clean_user_dir() (引数なし)でOK 関数名について
メイン関数であるtubeplay() はこれまで通り 各種exportしている関数についてはtp_* で統一 動画情報について title, type(single/playlist), url, timestampを取得 この4つを動画情報として定義し、tube_info とした 18 / 29
history機能の実装(1) 実装の内部的なものは時間の都合により省略 tubeplay() の修正 引数history = TRUE を追加 再生すれば、historyがストックされるように historyの取得
tp_get_history(view = FALSE, print = FALSE) 再生履歴へアクセス オブジェクトに引き渡せば、tube_info 形式の情報をdata.frameで格納可能 view = TRUE でView() へ送る print = TRUE でprint() へ送る 19 / 29
history機能の実装(2) 実装の内部的なものは時間の都合により省略 historyの消去 tp_clear_history() 再生履歴をすべて消去 引数なし、Undoなし historyから再生 tp_replay(backto = 1,
add_history = FALSE) 再生履歴から再生 backto = で遡る件数を指定。デフォルトは直前のを再生 add_history = で履歴に残すかどうかを指定。デフォルトはFALSE 20 / 29
history機能の活用例 # 履歴 取得 df_history tubeplayR tp_get_history() # 動画情報 抽出
tube_infos df_history[c(1, 6),] # 確認 knitr kable(tube_infos) title type url timestamp 1 【初音ミク】グリーンライ ツ・セレナーデ / Greenlights Serenade【オ リジナルMV】 - YouTube single https://www.youtube.com/watch? v=XSLhsjepelI 2020-12-05 13:59:21 6 作業用BGM - YouTube playlist https://www.youtube.com/playlist? list=PLfBmEmueFr_T3q- rHpuXegBPmyM_IJOli 2020-10-30 19:36:10 21 / 29
playlist機能の実装(1) 新規playlist(plist )の作成 tp_create_new_plist(urls = NULL, tube_infos = NULL, label)
与えたYouTube urlsまたはtube_info のオブジェクトからplaylist(plist )を作成し て保存 urls にはurlの文字列ベクトルを受け付ける tube_infos にはhistoryなどから抽出したtube_info オブジェクトを受け付け る urls とtube_infos の両方を与えると、両方をbind_rowsして一つにする label はそのplaylistの名前を指定 プレイリストは複数作成可能 内部的にはプレイリストのtube_info 形式のdata.frameをリストとして保持 この関数はあくまで作成と保存 プレイリストの呼び出し(staged)は別の関数で準備 22 / 29
playlist機能の実装(2) playlistの確認(show) tp_get_plist(label = NULL, view = FALSE, print =
FALSE, create_new = FALSE) 保存しているplaylistにアクセス label = NULL で、plist全体にアクセス 指定したい場合は文字列で与えればOK view = TRUE で対象をviewに送り、print = TRUE でリストの要約を出力 オブジェクトに渡せば、返り値として対象のプレイリストを格納 playlistの削除(remove) tp_remove_plist(plist_id = NULL, plist_label = NULL) 保存しているplaylistを削除 plist_id は通し番号、plist_label はlabelによって指定 23 / 29
playlist機能の実装(3) playlistの呼び出し(staged) tp_start_plist(plist_id = NULL, plist_label = NULL, shuffle =
FALSE) plist_id またはplist_label で指定したプレイリストを呼び出す(staged) plist_id は通し番号、plist_label は付与したlabelによって指定 呼び出しているplaylistの確認(get)、動画を再生(next) tp_get_staged_plist(view = FALSE, print = FALSE) tp_next_plist(skip = 1) tp_get_staged_plist は、呼び出しているプレイリストへアクセス view , print 、および引数は他のget系と同じ tp_next_plist は、呼び出しているプレイリストから再生 skip = 1 で次のを再生 再生された動画はstagedからはdropされる 24 / 29
playlistの活用例 # history 持 tube_infos playlist tubeplayR tp_create_new_plist(tube_infos = tube_infos,
label = "kosaki") # 作成 playlist 呼 出 tubeplayR tp_start_plist(plist_label = "kosaki") # 呼 出 plist 次 動画 再生 tubeplayR tp_next_plist() # playlist # csv 適切 形 export可能 kosaki tubeplayR tp_get_plist(label = "kosaki") # 作 playlist 削除 tubeplayR tp_remove_plist(plist_label = "kosaki") 25 / 29
「とりあえず動いたからデプロイしよう ぜ」 現在、devブランチでv0.1.4.9001 で公開中 でも… まだ「動作した」レベルなので、十分に作り込んでない 実はヘルプ全く書いてない ぶっちゃけExperimental そもそもなんでここまで作り込むの?必要なの? でも、私のQOLは向上した
26 / 29
v1.0への道 27 / 29
Roadmap to v0.2 エラー回避を書く ヘルプを書く vignetteを書く パッケージのWebサイトを作る to v1.0 R
Consoleからのコマンドで 「再生している動画をコントロール」 できるようにする ...多分できると思う 28 / 29
Enjoy! 29 / 29