Slide 1

Slide 1 text

思考の速さで 使う クライアント ~vimクライアント作ってみた~ Bluesky勉強会 #3 発火大根

Slide 2

Slide 2 text

自己紹介 1/3 自己紹介で3枚も使うだと…? 名前 : 発火大根 Bluesky歴 : 9か月ちょい(2023/5/1開始) 職業 : インフラエンジニア(コードも書くぞい) よくいるSNS : Nostr 趣味 : Nostr 最近ハマっていること : Nostr 好きなエディタ : ???

Slide 3

Slide 3 text

自己紹介 2/3 色々やってます。 主に四谷ラボの名前を借りてます。 ■登壇 2023/8/3 [四谷ラボ] Nostr勉強会 #3 LT 2023/9/2 [四谷ラボ] Bluesky勉強会 #2 企画/司会/LT 2023/12/8 [四谷ラボ] 新時代の分散型SNS勉強会 運営 2023/12/13 [ゴリラ.vim] ゴリラ.vim #29 LT 2024/2/10 [ゴリラ.vim/四谷ラボ] ゴリラ.vim #30 企画/ライブコーディング ■本 Hello Nostr! Yo Bluesky! 分散SNSの最前線 2記事寄稿

Slide 4

Slide 4 text

自己紹介 3/3 Bluesky勉強会 #2 で発表したもの - デスクトップマスコット型投稿専用クライアント - 形態素解析でNGワードチェック・投稿防止機能付き

Slide 5

Slide 5 text

ところで ・みなさんはテキストエディタを使いますか? ・何を使っていますか?

Slide 6

Slide 6 text

ぼくは Vimが好き です。

Slide 7

Slide 7 text

Vimのいいところ 思考の速度で 編集が出来る!

Slide 8

Slide 8 text

思考の速度で編集?

Slide 9

Slide 9 text

切り取り/コピー/削除/範囲選択 等に使うキー(オペレータ)

Slide 10

Slide 10 text

移動に使うキー(モーション)

Slide 11

Slide 11 text

比較的 ホームポジション周辺に 操作キーが集まっている !

Slide 12

Slide 12 text

Vimには複数の動作モードがある →少ないキーで操作できるようになる →ホームポジション周辺のキーで操作できるようになる →指の移動量が少なく、高速で編集できるようになる ! 図の出典 : https://knowledge.sakura.ad.jp/21687/

Slide 13

Slide 13 text

そこで 思いました

Slide 14

Slide 14 text

VimからSNSが出来れば Vimの恩恵を受けられる

Slide 15

Slide 15 text

Vim上でSNS出来るメリット ・作業 <-> SNSのシームレスな移行 ・投稿の検索/スクラップ/引用がしやすい

Slide 16

Slide 16 text

というわけで

Slide 17

Slide 17 text

書きました

Slide 18

Slide 18 text

VimでBlueskyの投稿が見れる PoCコード

Slide 19

Slide 19 text

動いている様子 起動すると ウィンドウ分割で 新しいバッファを表示する

Slide 20

Slide 20 text

function! s:convert_feed_to_row(feed) abort return { ¥"text": a:feed["post"]["record"]["text"], ¥"user": { ¥ "name": a:feed["post"]["author"]["displayName"], ¥ "screen_name": a:feed["post"]["author"]["handle"], ¥ "url": "https://bsky.social/" . a:feed["post"]["author"]["handle"], ¥}, ¥"metadata": { ¥ "created_at_str": a:feed["post"]["record"]["createdAt"], ¥}, ¥"reactions": [ ¥ { ¥ "action": " ", ¥ "count": a:feed["post"]["likeCount"], ¥ } ¥] ¥} endfunction function! s:main() abort let s:winid = s:create_buffer() let s:feed_array = s:get_feed_array() let s:rows = [] for feed in s:feed_array if !has_key(feed, "post") continue endif let s:row = s:convert_feed_to_row(feed) let s:rows += [s:row] call s:draw(s:winid, s:rows) endfor endfunction call s:main() " bsky_client.vim " " use ui.vim: https://github.com/skanehira/ui.vim " use indigo: https://github.com/bluesky-social/indigo let s:cli_path = "./indigo/gosky" let s:auth_path = "./auth.json" let s:pds_host = "https://bsky.social" function! s:set_env() abort let s:env_path ="./env.sh" call system(s:env_path) endfunction function! s:get_feed_array() abort let l:feed_cmd = s:cli_path . " --pds-host=" . s:pds_host . " --auth=" . s:auth_path . " bsky get-feed --raw" let l:feed_json = system(feed_cmd) let l:feed_json_array = '[' . substitute(l:feed_json, '}¥n{', '},{', 'g') . ']' let l:decoded_feed = json_decode(l:feed_json_array) return l:decoded_feed endfunction function! s:create_buffer() silent noautocmd split __Nostr_TL__ setlocal buftype=nofile bufhidden=wipe noswapfile setlocal wrap nonumber signcolumn=no filetype=markdown wincmd p return bufwinid("__Nostr_TL__") endfunction function! s:draw(winid, rows) abort call win_execute(a:winid, 'setlocal modifiable', 1) call win_execute(a:winid, 'normal! G', 1) call win_gotoid(a:winid) call ui#chat#draw(a:winid, a:rows) call win_execute(a:winid, 'setlocal nomodifiable nomodified', 1) endfunction ソースコード(vimscript 75L)

Slide 21

Slide 21 text

見えん

Slide 22

Slide 22 text

Gistか何かに 貼っておきます

Slide 23

Slide 23 text

使ったもの ■bluesky-social/indigo Bluesky公式が出している諸々のATPの実装 PDSやCLIクライアントなどを含む ■skanehira/ui.vim vim上にSNSの投稿を表示させるためのライブラリ

Slide 24

Slide 24 text

Indigoの”gosky”で色々できる USAGE: gosky bsky command [command options] [arguments...] COMMANDS: follow create a follow relationship (auth required) list-follows print list of follows for account post create a post record get-feed fetch bsky feed like create bsky ‘like’ record delete-post actor-get-suggestions notifs fetch bsky notifications (requires auth) help, h Shows a list of commands or help for one command

Slide 25

Slide 25 text

始めよう Vimクライアント開発

Slide 26

Slide 26 text

まだPoCコードしか 書いてません

Slide 27

Slide 27 text

思考の速さで 使う クライアント ~vimクライアント作ってみた~ ~vimクライアント作ってくれ~ Bluesky勉強会 #3 発火大根

Slide 28

Slide 28 text

Nostr + Vimクライアントの PoCコードもあるよ(ボソッ) https://speakerdeck.com/hakkadaikon/gorira-dot-vim-number-30-raibukoteingu 詳細 (speakerdeck)

Slide 29

Slide 29 text

さいごに

Slide 30

Slide 30 text

vim-jp slackに blueskyのことを話す チャンネルがあるよ。 vim-jp slack 詳細 https://vim-jp.org/docs/chat.html

Slide 31

Slide 31 text

#tech-bluesky

Slide 32

Slide 32 text

クライアント開発で キミの青空を ”創って“みないか?

Slide 33

Slide 33 text

Thank you for your attention!