์ฌํ ๋จ๊ณ:
๋ฐ๋ชจ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
asciinema๊ฐ ์ฃผ๊ธฐ์ ์ผ๋ก ๋
น์ ํ์ผ์ ํ๋ฌ์ํ๋ฉด ๋งค์ฐ ์ ์ฉํ ๊ฒ์
๋๋ค. ๋ฏธ์์ฑ JSON ํ์ผ์ ์์ ํ๊ธฐ ์ฝ์ต๋๋ค( asciinema play
). ์ธ์
๋
น์์ ์์ค์ ๋๋๋ก ๋ค์ ์ค๋ง์ค๋ฌ์ธ ์ ์์ต๋๋ค.
(๋ด dayjob ํ๋ก์ ํธ์๋ ์ฅ๊ธฐ ์คํ ์์คํ ํ ์คํธ๊ฐ ์์ต๋๋ค. ๋๋ asciinema๋ฅผ ์ฌ์ฉํ์ฌ ์คํ์ ๊ธฐ๋กํฉ๋๋ค. ์น UI๋ฅผ ํตํด ํฅ๋ฏธ๋ก์ด ์ง์ ์ผ๋ก ์ด๋ํ๊ณ ํ ์คํธ๋ฅผ ๋นจ๋ฆฌ ๊ฐ๊ธธ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.)
์ข์ ์บ์น @vvv. ๋น๊ต์ ์ฝ๊ฒ ๊ณ ์น ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
๋๋ ์ด๊ฒ์ ๋ณด์๋ค. ํ์ฌ ์๊ฐ:
asciinema๋ JSON ์คํธ๋ฆผ์ ์ฆ์ ์์ฑํ์ง ์์ต๋๋ค. ์ ์ฒด JSON ๋ฌธ์์ด์ ์์ฑํ๊ณ ์ ์ฒด stdout์ด ์บก์ฒ๋๋ฉด ํ์ผ์ ์ ์ฅํฉ๋๋ค. ์ด๊ฒ์ ์ฃผ๋ก Go์ JSON ๋ง์ฌ๋ฌ๊ฐ ์๋ํ๋ ๋ฐฉ์ ๋๋ฌธ์ ๋๋ค.
ํ ๊ฐ์ง ๊ฐ๋ฅ์ฑ์ tmp ํ์ผ๋ก ํ๋ฌ์ํ๋ ๊ฒ์
๋๋ค( foo.json.tmp
๊ธฐ๋กํ๋ ๊ฒฝ์ฐ foo.json
). ๋ค์๊ณผ ๊ฐ์ด ๋ณด์ผ ์ ์์ต๋๋ค.
{ "version": 2, "width": 80, "height": 24, "env": { "TERM": "xterm-256color" } ... }
[0.1, "bash-4.3$ "]
[0.3, "l"]
[0.1, "s"]
...
...
๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ๋ฌ ์ต์์ ๊ฐ์ฒด๊ฐ ์๋ JSON ํ์ผ์
๋๋ค. ์ฒ์์๋ ๋ฉํ๋ฐ์ดํฐ๊ฐ ์๋ JSON ๋งต์ด๊ณ ๋๋จธ์ง๋ ๋ชจ๋ ์ต์ข
ํ์ผ์ stdout
ํค ์๋์ ์์ด์ผ ํ๋ stdout ์ธ์์
๋๋ค.
๋ณต๊ตฌ์ ๊ดํด์๋ ์ค์ค๋ก ์ฝ๊ฒ ํ ์ ์์ต๋๋ค(vim์์ ์ค์ ์ฎ๊ธฐ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค).
์ด๋ฅผ ์๋ํํ๋ ์๋ก์ด ๋ช
๋ น asciinema recover foo.json.tmp foo.json
์ด ์์ ์๋ ์์ต๋๋ค( asciinema play
์ ์ผ๋ถ๋ก ๋ณต๊ตฌํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์์ง ํ์คํ์ง ์์).
ํ ๊ฐ์ง ๊ฐ๋ฅ์ฑ์ tmp ํ์ผ๋ก ํ๋ฌ์ํ๋ ๊ฒ์ ๋๋ค(
foo.json.tmp
๊ธฐ๋กํ๋ ๊ฒฝ์ฐfoo.json
).
์ข์ ์๋ฆฌ! ์ด ๊ธฐ๋ฅ์ Emacs์ ์๋ ์ ์ฅ ํ์ผ ( #foo.json#
) ๋ฐ Vim ๋ณต๊ตฌ ํ์ผ ( .foo.json.swp
)๊ณผ ์ ์ฌ ํฉ๋๋ค .
๋ณต๊ตฌ์ ๊ดํด์๋ ์ค์ค๋ก ์ฝ๊ฒ ํ ์ ์์ต๋๋ค(vim์์ ์ค์ ์ฎ๊ธฐ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค).
์์งํ ๋งํ๋ฉด ์๋ ์ ์ฅ ํ์ผ์ ์๋์ผ๋ก ์กฐ์ํ๋ ๊ฒ๋ณด๋ค "๋ณต๊ตฌ" ๋ช
๋ น์ด๋ ๊ฐ๋ฒผ์ด -r | --recover
์ต์
์ ์ ํธํฉ๋๋ค.
์ด๊ฒ์ ๋ช ๋ฐฑํ๊ฒ ๋งํ๋ฉด #82๋ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๊ฒ์ ๋๋ค.
@xloem #82๋ asciinema.org์ ํ๋ฒ์ rec+uploadํ๋ ๊ฒฝ์ฐ์๋ง ์ ์ฉ๋ฉ๋๋ค. asciinema rec demo.json
๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ์ดํธ์ ์๋์ผ๋ก ์
๋ก๋ํ์ง ์๊ณ ๋ ํ์ผ์ ๊ธฐ๋กํ ์ ์์ผ๋ฉฐ ์ด ๊ฒฝ์ฐ ๋์คํฌ์ ์ฆ๋ถ ์ฐ๊ธฐ๋ ๋๊ฐ์ด ์ ์ฉํฉ๋๋ค.
๋๋ #196์์ asciicast v2
ํ์์ ์ด์ ์์
์ ์์ํ๋๋ฐ, ์ด๊ฒ์ ๋์คํฌ(๊ทธ๋ฆฌ๊ณ ํ์ดํ, ๋คํธ์ํฌ, ๋น์ ์ด ๊ฐ์ง๊ณ ์๋ ๊ฒ)์ ์ค์๊ฐ์ผ๋ก ์ฐ๊ธฐ๋ฅผ ํ๋ฅญํ๊ฒ ํด๊ฒฐํด์ผ ํฉ๋๋ค.
์ด PR์์ ๋ฌธ์์ ๋ํ ์ง์ ๋งํฌ: https://github.com/asciinema/asciinema/blob/asciicast-v2/doc/asciicast-v2.md
ํผ๋๋ฐฑ์ ๋์ด ํ๊ฐํฉ๋๋ค.
@sickill ํ์ผ ํ์ ๋ณ๊ฒฝ(JSON ๋์ NDJSON )์ด ์ถ๋ ฅ ํ์ผ์ ์ฆ๋ถ ์ ๋ฐ์ดํธ์ ์ด๋ป๊ฒ ์ ์ฉ
์ผ๋ฐ JSON ํ์ผ์ @vvv ์๋ ๋จ์ผ ๊ฐ์ฒด๊ฐ ์๊ณ ์ฆ๋ถ์์ผ๋ก ์ธ ์ ์์ต๋๋ค. ์ ์ฒด์ ์ผ๋ก ์์ฑํด์ผ ํฉ๋๋ค(๊ธฐ์ ์ ์ผ๋ก๋ ๊ฐ๋ฅํ์ง๋ง ์ถฉ๋ ๋ฑ์ ๊ฒฝ์ฐ ์๋ชป๋ JSON ํ์ผ๋ก ์ข ๋ฃ๋๊ณ ๋ซํ์ด ๋๋ฝ๋ฉ๋๋ค. ๊ดํธ). NDJSON(๋๋ ๊ฑฐ์ ๋์ผํ JSONLines )์ ์ฌ์ฉํ๋ฉด ํ๋์ ํ์ผ์ ์ฌ๋ฌ JSON ๊ฐ์ฒด๊ฐ ์๊ณ ๊ฐ๊ฐ์ ์ค์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ ๋ฐ์ดํฐ๋ก ์ ์ค์ ์ถ๊ฐํ๊ณ ๋ง์๋๋ก ์ค์ง/์ถฉ๋ํ๊ณ ํ์ผ์ ์ ํจํ์ง ์์ ์ํ๋ก ๋์ง ์์ ์ ์์ต๋๋ค.
๋๊ธฐ ๋ถ์ฌ/ํด๊ฒฐํ๋ ๋ฌธ์ ์ ๋ํด ๋ ๋ช ํํ๊ฒ ํ๊ธฐ ์ํด asciicast v2 ํ์ ๋ฌธ์์ ์ด์์ ์ ๋ฐ์ดํธํ์ต๋๋ค.
@sickill ์ข์ ๊ฒ์ ์ธ์ ์ ์์ ์๊ฐ์ ์ด๊ธฐ ๋ฉํ๋ฐ์ดํฐ์ ์ ์ฅํ๋ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ ๊ฐ์ฌ ๊ฐ๋ฅํ ssh ์ธ์ ์ ์ ๊ณตํ๊ธฐ ์ํด ๋ค๋ฅธ ๋๊ตฌ์์ ์ถ์ถ๋ ์ ์์ต๋๋ค.
๋ํ ๋ฉํ๋ฐ์ดํฐ๋ฅผ "์ฃผ์ "ํ๋ ๊ฒ์ด ํฅ๋ฏธ๋ก์ธ ์ ์์ผ๋ฏ๋ก ์์ฑ๋ ์ธ์ ์ ๋ค์๊ณผ ๊ฐ์ ํ๊ทธ๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ์ผ๋ถ ์ธ๋ถ UI์ ๋ ธ์ถ์ํค์ญ์์ค.
ํธ์ง: ํ์์ ๋ํ PR ์ด ์๋ ๊ฒ ๊ฐ์์ ๊ฑฐ๊ธฐ์ ๋๊ธ์ ๋ฌ๊ฒ ์ต๋๋ค. :)
ํ์ฌ ์๊ฒฉ ์ง์์ ์ธ์
๋ก๊น
์ ์ํด asciinema๋ฅผ ์ค์ ํ์ต๋๋ค.
ssh๋ฅผ ํตํด jumphost๋ฅผ ํตํด ๋ณด์ ๋คํธ์ํฌ์ ์ฐ๊ฒฐํฉ๋๋ค. ๊ตฌํ ์ ์๋ค๋ ๊ฒ,
์คํธ๋ฆผ ๋ฐ ์ฌ์ ์ธ์
์ด ๋ฐ์ํ๋ฉด
ํด๋น ์๋๋ฆฌ์ค์์ asciinema์ ์ ์ฉ์ฑ.
2017๋
4์ 25์ผ ํ์์ผ ์ค์ 5:17 Jose Diaz-Gonzalez <
[email protected]>์ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
@sickill https://github.com/sickill
์ธ์ ์ ์์ ์๊ฐ์ ์ด๊ธฐ ๋ฉํ๋ฐ์ดํฐ์ ์ ์ฅํด์ผ ํฉ๋๋ค.
์ด๊ฒ์ ๊ฐ์ฌ ๊ฐ๋ฅํ ssh ์ธ์ ์ ์ ๊ณตํ๊ธฐ ์ํด ๋ค๋ฅธ ๋๊ตฌ์์ ์ถ์ถ๋ ์ ์์ต๋๋ค.๋ํ ๋ฉํ๋ฐ์ดํฐ๋ฅผ "์ฃผ์ "ํ ์ ์๋ ๊ฒ์ด ํฅ๋ฏธ๋ก์ธ ์ ์์ผ๋ฏ๋ก
์ ์ฌ์ ์ผ๋ก ์์ฑ๋ ์ธ์ ์ ๋ค์๊ณผ ๊ฐ์ ํ๊ทธ๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
- ssh๋ ์ฌ์ฉ์
- ํธ์คํธ ์ด๋ฆ
- ์๋ฒ ํ๊ฒฝ
๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ์ผ๋ถ ์ธ๋ถ UI์ ๋ ธ์ถ์ํค์ญ์์ค.
โ
์ด ์ค๋ ๋์ ๊ฐ์ ํ๊ธฐ ๋๋ฌธ์ ์ด ๋ฉ์์ง๋ฅผ ๋ฐ๊ณ ์์ต๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธ
https://github.com/asciinema/asciinema/issues/127#issuecomment-296872546 ,
๋๋ ์ค๋ ๋ ์์๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AAi2o-cZFmoJonPeabG0UkPfb8MVR3EMks5rzVfNgaJpZM4FuWm_
.
๋๋ asciinema๋ฅผ ์ฌ์ฉํ์ฌ(์ด ๋ฌธ์ ๋๋ฌธ์ ๋ ์ด์ ์คํฌ๋ฆฝํธ๋ก ๋๋๋ฆฌ๊ณ ์์ต๋๋ค) CYA์ ๋ํ ๋ชจ๋ ํฐ๋ฏธ๋ ์ธ์ ์ ๊ธฐ๋ก์ ์ ์งํ๊ณ ์ง๋ ์ฃผ 3์์ ์๋ฒ X์์ ํ ์ผ์ ์์ด๋ฒ๋ฆฐ ๊ฒฝ์ฐ ์ฐธ์กฐ์ฉ์ผ๋ก ์ฌ์ฉํฉ๋๋ค. ์คํ. ๋ฌธ์ ๋ ์ด๊ฒ์ด ์ฑ๊ณต์ ์ธ ์ข ๋ฃ ์์๋ง ํ๋ฌ์๋๊ธฐ ๋๋ฌธ์ ๋ด ์ธ์ ์ ์ ๋ฐ์ ๋ฐ์ดํฐ๊ฐ ์๋ค๋ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด ์ค๋จ๋ ์ธ์ ์ ๋ํ ์ฐฝ์ ๋ซ์ผ๋ฉด ์ธ์ ๊ธฐ๋ก์ด ์์ ํ ์์ค๋ฉ๋๋ค. ์ด๊ฒ์ ์์์น ๋ชปํ ํ๋์ด์๊ณ ์๋นํ ์ค๋ง์ค๋ฌ์ ์ต๋๋ค.
@gizmonicus asciicast v2 ํ์ ๋ฐ ์ค์๊ฐ ๋์คํฌ ์ฐ๊ธฐ๋ ๋ค์ ๋ฆด๋ฆฌ์ค์์ ๊ฐ์ฅ ๋์ ์ฐ์ ์์์ ๋๋ค. ETA๋ ์์ง๋ง ๊ณง ๊ทธ๋ ๊ฒ ๋ ๊ฒ์ ๋๋ค.
@sickill - ๊ฐ์ฌํฉ๋๋ค.
@timofonic ์ฌ๊ธฐ์ ์ง๋ฌธ์ ํ๊ณ ์ฐธ์์ฑ ์๊ฒ ๊ธฐ๋ค๋ฆด ์ ์์ต๋๋ค. ์ด๋ฐ ์์ผ๋ก ์ฌ์ฉ์์๊ฒ ํ์ ๋ณด๋ด ๋ชจ๋ ์ฌ๋์๊ฒ ์คํธ ๋ฉ์ผ์ ๋ณด๋ผ ํ์๊ฐ ์์ต๋๋ค.
์ ๋ฐ์ดํธ: ์ค์๊ฐ์ผ๋ก ๋์คํฌ์ ์ฐ๊ธฐ๊ฐ #196์์ ๊ตฌํ๋์์ผ๋ฉฐ ๋ค์ ๋ฆด๋ฆฌ์ค์ ์ผ๋ถ๊ฐ ๋ ๊ฒ์ ๋๋ค.
๋น์ ์ด ๋ฒ ํ ํ
์คํธ์ํ๊ณ ์ถ์ ๊ฒฝ์ฐ๋ ์ฒดํฌ ์์ develop
์ง์ ๊ณผ ํจ๊ป ์ฒดํฌ ์์ ๋๋ ํ ๋ฆฌ์์ ์คํ : python3 -m asciinema rec filename
. ๋ค์ํ Linux ๋ฐฐํฌํ๊ณผ macOS์์ ์๋ํ๋ ๋ฐฉ์์ ๋ํ ํผ๋๋ฐฑ์ ์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค ๐
์ฐธ๊ณ : ํ์ฌ ์๋ฒ์ ์น ํ๋ ์ด์ด๋ ์๋ก์ด asciicast ํ์์ ์ง์ํ์ง ์์ผ๋ฏ๋ก ๋ก์ปฌ ๋ น์ ๋ฐ ํฐ๋ฏธ๋ ๋ด ์ฌ์์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ํ์ด @sickill! ๋ฐฉ๊ธ ์ด๊ฒ์ ํ ์คํธํ๊ณ ์๋ํ๋๋ก ํ ์ ์์์ต๋๋ค(Ubuntu 17.04).
๊ทธ๋๋ ์ฝ๊ฐ์ ์ค๋ช ; ๋ฌด์์ด ๋คํ๋ฅผ ์ ๋ฐํฉ๋๊น? ํ์ผ ๋ฒํผ๋ง์ ๋๊น ์๋๋ฉด ์๊ฐ ์ด๊ณผ์ ๋๊น? ์ด๋ ์ชฝ์ด๋ , ํน์ ์๊ณ ๊ฐ์ ๋ฌด์์ ๋๊น? ๋ช ๊ฐ์ง ๋น ๋ฅธ ์์ฝ๋ฅผ ์ํํ ํ ํ์ผ์์ ์๋ฌด ๊ฒ๋ ๋ณผ ์ ์์๊ธฐ ๋๋ฌธ์ ๋ฌป์ต๋๋ค. ํ์ง๋ง ๋ ๋ง์ด ๊ฐ์ง๊ณ ๋๋ฉด์ ๋ฌด์ธ๊ฐ๊ฐ ๋ํ๋๊ธฐ ์์ํ์ต๋๋ค.
@metasoarous ์ข์ ์ง๋ฌธ์ ๋๋ค.
์ฐ๊ธฐ๋ฅผ ์ผ๊ด ์ฒ๋ฆฌํ๋ ๋ช ์์ ์ธ ์๊ฐ ์ด๊ณผ ๋๋ ๊ธฐํ ๋ฉ์ปค๋์ฆ์ด ์์ผ๋ฉฐ ๋๊ธฐ์ด์ ํตํด ์ค์๊ฐ์ผ๋ก ์งํ๋ฉ๋๋ค.
"์๊ฐ" ํ๋ก์ธ์ค๋ฅผ ๋ถ๋ฆฌํ๋ ค๋ฉด:
f.write(...)
ํฉ๋๋ค.
ํ์ง๋ง ~8KB ์ฒญํฌ๋ก ์ฐ์ฌ์ง ๊ฒ๋ ๊ด์ฐฐํ๊ธฐ ๋๋ฌธ์ ์ฌ๊ธฐ์ ๋ฒํผ๋ง์ด ๋ฐ์ํ๊ณ ์์ต๋๋ค. Python์ TextIOWrapper
๊ฐ ์ฌ๊ธฐ์ ์ฑ
์์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ฌ๊ธฐ์ ๋ญ๊ฐ ์ ์ผ ์ข์ ๊ฒ ๊ฐ๋? ์ด๋ฆฐ io ๊ฐ์ฒด์์ ๋ฒํผ๋ง์ ๋๊ฑฐ๋ ๋ชจ๋ ์ฐ๊ธฐ์์ f.flush()
๋๋ ์๊ณ๊ฐ์ ๋๋ฌํ ๋ ๋ฐ์ดํธ/์๊ฐ ๊ณ์ฐ ๋ฐ ํ๋ฌ์๋ฅผ ์ํํ๋ ๋ช
์์ ํธ๋ฆฌ๊ฑฐ๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค.
๋๋ io ๊ฐ์ฒด์์ ๋ฒํผ๋ง์ ๋๋ ๊ฒ์ด ๊ฐ์ฅ ์ฌ์ด ํด๊ฒฐ์ฑ ์ผ ์ ์๋ค๊ณ ์์ํฉ๋๋ค. ๊ฐ๊น์ด ์ด์ N์ด๋ง๋ค ์๋ ํ๋ฌ์๋ฅผ ํ๋ ๊ฒ์ ๋๋ค. ๋๋ ๋ ๋ฉ์ง ์ ๋ต์ ์์ํ ์ ์์ง๋ง ๊ทธ ์ ํ ์ค ํ๋์ ๊ฐ๊น์ด ๊ฒ์ด ํธ๋ฆญ์ ์ํํด์ผํฉ๋๋ค.
์ฐ๊ธฐ๋ฅผ ์ํด ํ์ผ์ ์ด ๋ ๋ฒํผ๋ง ์ ์ฑ
์ "๋ผ์ธ ๋ฒํผ๋ง"์ผ๋ก ๋ช
์์ ์ผ๋ก ์ค์ ํ๋๋ก ๋ณ๊ฒฝํ์ต๋๋ค(== ์ฐ๊ธฐ์ \n
ํฌํจ ์ ํ๋ฌ์, ์ด ๊ฒฝ์ฐ ์ฐ๊ธฐ์ 100% ๊ฒฝ์ฐ). ์ง๊ธ ๋น๊ฒจ์ ์๋ํ๋ฉด ํ์ผ์ด ์ฆ์ ์ฆ๊ฐํ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
ํ๋ฅญํ! ๋น ๋ฅธ ๊ด์ฌ ๊ฐ์ฌํฉ๋๋ค!
์ด๊ฒ์ด ๊ตฌํ๋์๊ณ (#227์์) ๊ณง ์ถ์๋ asciinema 2.0๊ณผ ํจ๊ป ์ถ์๋ ์์ ์ด๋ฏ๋ก ์ด ๋ฌธ์ ๋ฅผ ๋ง๋ฌด๋ฆฌํ๊ฒ ์ต๋๋ค.
์ฐธ๊ณ : ๋๊ตฌ๋ ์ง ์ด๊ฒ์ ์๋ํ๊ณ ์ถ๋ค๋ฉด v2
์ง์ ์ ํ์ธํ์ญ์์ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@sickill - ๊ฐ์ฌํฉ๋๋ค.