shinjuku.rs #2: ターミナル遊び
by
コン
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
ターミナル遊び コンティオ プル @GolDDranks Shinjuku.rs #2 2019/1/16
Slide 2
Slide 2 text
自己紹介 • コンティオ プル • Twitter: @GolDDranks • GitHub & GitLab: golddranks • 出身地はフィンランドのシポーという田舎町 • ソフトウェアエンジニア歴2年 • (昔休学してゲームプログラマーやった黒歴史もあるが) • Rust愛する歴n年 (0.11あたりから使っている) • 最近スーパマリオデッセイを始めた & 線形論理に興味津々
Slide 3
Slide 3 text
年末年始は暇!どうしようと? • 何かプログラミングしたい • でも仕事周りのものから開放されたい!
Slide 4
Slide 4 text
SANDSPIEL • すなめ世界(WORLD OF SAND) のクローン • Rust製 • 似たようなものを作りたくなる
Slide 5
Slide 5 text
• Sandspielと同様にWASMで?丸パクリになるやんけ! • Amethyst? • ggez? • 単純にSDLを使う? • 日本企業の休みは短い!こんなの覚える暇なんてあるかボケ! インタラクティブなものを作るには?
Slide 6
Slide 6 text
極めて簡単なのを作りたい → ターミナルを導入
Slide 7
Slide 7 text
NCURSESを使う? • 一番まっとうなチョイスかも • Windowsも対応できそう? • Rust製ではない • もっと…楽しみに柄勉強になる経験はないか?
Slide 8
Slide 8 text
作ってみたライブラリ:TERM_FB •TERM = ターミナル •FB = フレームバッファ
Slide 9
Slide 9 text
ポイント • イベントループがある • 入力を文字として 受け取って、 「ボタン押しイベント」 のイテレータに変換 • バッファにcharを書くだけで ASCIIアートが描ける
Slide 10
Slide 10 text
デモタイム
Slide 11
Slide 11 text
学び・気づき ANSIエスケープコード • ↑ ¥x1b[A • ↓ ¥x1b[B • などのCSIシーケンス • UNIXだから¥nで済むと思いきや…RAW MODEが違う! • カーソルの表示、非表示
Slide 12
Slide 12 text
学び・気づき TERMIOS & RAW MODE • エスケープコードでなんでもできちゃう…というわけでもない • 標準入出力で出来ることを超えるには、デバイスの設定を直接いじる • RAW MODE:バッファリングとエコーを無効に • termiosライブラリでもっと 高度な制御が出来る • POSIXなので、標準化されている(Windows以外は)
Slide 13
Slide 13 text
学び・気づき 全角の面倒くささ • 端末エミュレータの挙動も 微妙に違ったり orz • unicode-widthという crateを使っている
Slide 14
Slide 14 text
共有したいパターン ダブルバッファリング •グラフィックプログラミングから •今使用中のバッファを変えるならアトミックにswap! •CrossbeamのAtomicCellが便利
Slide 15
Slide 15 text
共有したいパターン スピンスリープ •std::thread::sleepの精度が雑!寝坊しちゃうかも! •少なめにスリープして、後は時計を見ながら待つ → 精度が上がる •spin_sleepというcrateで簡単!
Slide 16
Slide 16 text
TERM_FBの0.0.1を今日公開しました! •https://gitlab.com/golddranks/term_fb •これからの課題:端末からの開放 & 色
Slide 17
Slide 17 text
ご清聴ありがとうございました! (結局砂ゲームまでやってない…) • Twitter: @GolDDranks • GitHub / GitLab: golddranks