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
TUI App in Rust
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Yoshihito
October 22, 2020
Programming
220
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
TUI App in Rust
Yoshihito
October 22, 2020
More Decks by Yoshihito
See All by Yoshihito
Custom Runtime Lambda empowered by Rust
yoshihitoh
0
3.1k
Rust tutorial - implement a cli tool.
yoshihitoh
0
280
introduce-rust.pdf
yoshihitoh
2
550
regrowth2018-introduce-reinvent-sessions
yoshihitoh
0
1k
mobilemethod-2-about-analytic-data.pdf
yoshihitoh
0
1.3k
cpp-library-on-browse-nodejs
yoshihitoh
0
2.8k
Other Decks in Programming
See All in Programming
Make SRE Operations Easier with Azure SRE Agent
kkamegawa
0
4.2k
気づいたらRubyで100作品 ー クリエイティブコーディングが生活の一部になるまで / 100 Ruby Sketches Later: How Creative Coding Became Part of My Life
chobishiba
3
550
Lemonade + Foundry Toolkit でお手軽アプリ開発
seosoft
1
310
Why Laravel apps break—Mastering the fundamentals to keep them maintainable
kentaroutakeda
1
340
Modding RubyKaigi for Myself
yui_knk
0
890
Javaの型とAI時代に型が大事な理由 / java types and type in AI era
kishida
2
110
ADKを使って簡単にAIエージェントを作ってみよう
k1mu21
0
230
運用エージェントは "作る" から "育てる" へ - 記憶と自己進化の3層設計パターン / self-evolving-agents-three-layer-agent-design
gawa
12
3.5k
Inside Stream API
skrb
1
650
Oxcを導入して開発体験が向上した話
yug1224
4
290
セキュリティの専門家じゃなくてもできる。「セキュリティ意識」をアップデートして サプライチェーン攻撃への耐性を高めよう。
tk3fftk
5
640
Claspは野良GASの夢をみるか
takter00
0
170
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.3k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.7k
KATA
mclloyd
PRO
35
15k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.3k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
What does AI have to do with Human Rights?
axbom
PRO
1
2.2k
So, you think you're a good person
axbom
PRO
2
2.1k
Test your architecture with Archunit
thirion
1
2.3k
Optimising Largest Contentful Paint
csswizardry
37
3.7k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
200
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
190
Transcript
RustͰ࡞ΔTUIΞϓϦέʔγϣϯ Fukuoka.rs#7 ɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹΫϥεϝιουגࣜձࣾ ɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹ ɹɹฏ 1
About me • Ϋϥεϝιουגࣜձࣾ (Developers.IOͷͱ͜) • ԬΦϑΟεॴଐ • CXࣄۀຊ෦ •
αʔόʔαΠυΤϯδχΞ • ͬͯΔ͜ͱ • AWSڥʹγεςϜߏங • ϞόΠϧΞϓϦ • IoT 2
ΞδΣϯμ • എܠ • TUIΞϓϦέʔγϣϯͱʁ • RustͰͲ͏࡞Δ͔ • ·ͱΊ 3
എܠ • AWS্ʹγεςϜΛߏங͍ͯ͠ΔͱɺCloudWatch Logsͷ͓ੈʹͳΔ͜ͱ͕ଟ͍ • Ϛωδϝϯτίϯιʔϧ͔ΒϩάΛ֬ೝͰ͖Δ͕ຖճϒϥβΛ։͘ͷ໘͍͘͞ • λʔϛφϧ͔Β֬ೝ͍͕ͨ͠ɺAWS CLIࢦఆ߲͕ଟ݅͘Λม͑ͳ͕ΒݟΔ߹গ͠໘ ͍͘͞
• ϩάάϧʔϓͷࢦఆ • ϩάετϦʔϜͷࢦఆ • ରظؒͷࢦఆ ͜ͷ͋ͨΓͷ݅Λ؆୯ʹࢦఆͰ͖ΔΑ͏ʹ͍ͨ͠ 4
ͦ͜ͰTUIΞϓϦέʔγϣϯ 5
TUIΞϓϦέʔγϣϯͱ • Text-based user interfaces • Terminal user interfacesͱݺΕΔΈ͍ͨ •
ࢀߟ: Text-based user interface | Wikipedia • CLIίϚϯυϥΠϯͰૢ࡞͢Δ • GUIΞΠίϯը૾ͱ͍ͬͨάϥϑΟΧϧͳUIͰૢ࡞͢Δ • TUI໊લͷ௨ΓɺςΩετϕʔεͷUIͰૢ࡞͢Δ 6
GDB (TUIϞʔυ) • ιʔείʔυ • ϒϨʔΫϙΠϯτ • step/nextͰιʔείʔυͷද͕ࣔมΘ Δ 7
Tig ը૾tui-rsͷϦϙδτϦΛදࣔͨ͠ͷ 8
bo#om 9
TUIΞϓϦέʔγϣϯͷߏཁૉ • λʔϛφϧ੍ޚ • Πϕϯτ੍ޚ • ΞϓϦέʔγϣϯϩδοΫ • UIඳը 10
λʔϛφϧ੍ޚ • TUIλʔϛφϧը໘શҬʹඳը͢Δ • ΞϓϦىಈ·Ͱͷදࣔ༰͕ফ͑ͳ͍Α͏ʹ͍ͨ͠ • Alternate ScreenΛ͏ • ඪ४ೖྗEnterΛԡ͢ͱೖྗ͕֬ఆ͢Δ
• TUIͰΠϯλϥΫςΟϒʹૢ࡞͍ͨ͠߹ඍົ • rawϞʔυʹΓସ͑Δ • ීஈcookedϞʔυ 11
Πϕϯτ੍ޚ • TickΠϕϯτ • ҰఆִؒͰൃੜ͢ΔΠϕϯτ • σʔλͷߋ৽ը໘ͷඳըͰར༻͢Δ • ೖྗΠϕϯτ •
ϚεೖྗΩʔೖྗͰൃੜ͢ΔΠϕϯτ • ը໘ΛΓସ͑ͨΓɺԿ͔͠ΒͷػೳΛ࣮ߦ͢Δͷʹར༻͢Δ 12
ΞϓϦέʔγϣϯϩδοΫ • ΞϓϦέʔγϣϯݻ༗ͷϩδοΫ • "gͷ߹GitΛૢ࡞͢Δ • bo)omͷ߹γεςϜϓϩηεͷঢ়ଶΛऔಘ͢Δ 13
UIඳը • ΞϓϦέʔγϣϯϩδοΫͰऩूͨ͠σʔλΛඳը͢Δ • GUIͱҧͬͯλʔϛφϧ্ʹදࣔ͢Δ • ςΩετϕʔε͕ͩ࠷ۙϦονͳදࣔ૿͍͑ͯΔ 14
RustͰͲ͏࡞Δ͔ 15
λʔϛφϧ੍ޚ • ৭ʑͳϥΠϒϥϦ͕༻ҙ͞Ε͍ͯΔ • termion • h*ps:/ /github.com/redox-os/termion • crossterm
• h*ps:/ /github.com/crossterm-rs/crossterm Windowsαϙʔτ͍ͨ͠߹crosstermΛ͏͜ͱ͕ଟͦ͏ • Using cossterm for windows support. by TimonPost · Pull Request #99 · Rigellute/spo?fy- tui 16
λʔϛφϧ੍ޚ: crosstermͷ߹ 17
λʔϛφϧ੍ޚ: crosstermͷ߹ 18
Πϕϯτఆٛ ֤ΠϕϯτΛఆٛ͢Δ 19
TickΠϕϯτ - ඪ४ϥΠϒϥϦͰ࣮ݱ͢Δ • std::sync::mpsc Ͱ௨৴༻νϟωϧΛ࡞Δ • std::thread ͰTickΠϕϯτ༻ͷεϨουΛ࡞Δ •
(νϟωϧʹTickΠϕϯτૹ৴ → εϦʔϓ) Λ܁Γฦ͢ 20
TickΠϕϯτ - ΫϨʔτΛར༻͢Δ • crossbeam-channelͷ tick Λ͏ • ytop͕͜ͷํࣜ •
tokioͷ interval Λ͏ • ͜ͷํࣜݟͨΒͣ 21
TickΠϕϯτ - tokioͷ߹ 22
ೖྗΠϕϯτ λʔϛφϧ੍ޚͷϥΠϒϥϦΛ࣮ͬͯݱ͢Δ • termion • termion::input::TermRead Λ͏ • std::io::stdin().keys() ͰΩʔೖྗΛѻ͑ΔΑ͏ʹͳΔ
• ࢀߟ: h,ps:/ /docs.rs/termion/1.5.5/termion/input/trait.TermRead.html#tymethod.keys • crossterm • crossterm::event::read ͰΩʔೖྗΛಡΈࠐΉ • featuresͰ event-stream Λ༗ޮʹ͢ΔͱΩʔೖྗΛඇಉظετϦʔϜͰѻ͑Δ • ࢀߟ: h,ps:/ /docs.rs/crossterm/0.18.0/crossterm/event/fn.read.html 23
ೖྗΠϕϯτ - crossterm event-streamͷ߹ 24
ΞϓϦέʔγϣϯϩδοΫ • ΞϓϦέʔγϣϯݻ༗ͷϩδοΫΛ࣮͢Δ • ࠓճCloudWatch Logsͷσʔλऔಘ͕ϝΠϯॲཧ • ݱঢ়ެࣜͷAWS SDKͳ͠ •
ඇެ͕ࣜͩ Rusoto Λ͏ͱAWSͷ֤छAPIʹΞΫηεͰ͖Δ • h7ps:/ /github.com/rusoto/rusoto 25
UIඳը Կछྨ͔͋ΔͷͰΈͷͷΛ͏ͱྑͦ͞͏ • tui-rs • h)ps:/ /github.com/fdehau/tui-rs • Cursive •
h)ps:/ /github.com/gyscos/Cursive 26
࡞ͬͨͷ • ະɾະެ։Ͱ͢ 27
࡞ͬͨͷ - ߏ • λʔϛφϧ੍ޚ • crossterm • Πϕϯτ੍ޚ •
TickΠϕϯτ → tokio::time::interval • ೖྗΠϕϯτ → crossterm::event::EventStream • ΞϓϦέʔγϣϯϩδοΫ • CloudWatch LogsपΓ → rusoto_logs • UIඳը • tui-rs 28
ৼΓฦΓ ઌʹͬͱ͚/ͬͯΕΑ͔ͬͨܥͷϊϋ • ඪ४ग़ྗͷϩάग़ྗNG • ϑΝΠϧग़ྗ͢Δ • σόοά༻ͷΟδΣοτΛ࡞͢Δ (Φεεϝ) •
CLion͔Βىಈ/σόοάͰ͖ͳ͍ • rawϞʔυʹΓସ͑ΒΕͳ͍ͨΊ • λʔϛφϧͰىಈ͔ͯ͠ΒϓϩηεʹσόοΨΛΞλον͢Εྑ͍ 29
·ͱΊ • RustͩͱखܰʹTUIΞϓϦέʔγϣϯ࡞ΕΔ • ඞཁͳϥΠϒϥϦ͕ॆ࣮͍ͯ͠Δ • termion • crossterm •
tui-rs • CLI→TUIʹ͢Δͱૢ࡞ָ͕ʹͳΔέʔε͋Γͦ͏ • TUIΞϓϦͳͲπʔϧ࡞Λ௨ͯ͠RustͷཧղΛਂΊ͍͖͍ͯͨ 30
ࢀߟ • Tig • h&ps:/ /github.com/jonas/5g • tui-rs • h&ps:/
/github.com/fdehau/tui-rs • ytop • h&ps:/ /github.com/cjbassi/ytop • bo&om • h&ps:/ /github.com/ClementTsang/bo&om • spo5fy-tui • h&ps:/ /github.com/Rigellute/spo5fy-tui 31
͓͠·͍ 32