Lua Table Sort
lua์ table ์ ๋ ฌ lua์์ table.sort(t,func) ํจ์๋ฅผ ์ด์ฉํ์ฌ ์ ๋ ฌํ๋ค. t๋ ํ ์ด๋ธ, func๋ ํจ์์ด๋ค. table.sort(t) ํ์ ๊ฒฝ์ฐ ์์๊ฐ ๋ฌธ์,์ซ์๋ฅผ ๊ธฐ๋ณธ ์ ๋ ฌํ๋ค. ํ์ง๋ง ์ค๋ฆ์ฐจ์, ๋ด๋ฆผ์ฐจ์, ๋์๋ฌธ์ ๊ตฌ๋ณ ๋ฑ ๋ค์ํ ์ ์ด๋ฅผ ํ๊ธฐ ์ํด์๋ ์๋ ํจ์๋ฅผ ๋ง๋ค์ด ํ์ฉํ๋ฉด ํธ๋ฆฌํ๋ค. ์ฃผ์ํ ์ ์ ์๋ณธ table์ ์์น๊ฐ ์ ๋ ฌ์ํ๋ก ๋ฐ๋๊ฒ ๋๋ค. ์๋ณธ์ ์ ์งํ๊ณ ์ถ๋ค๋ฉด ๋ณต์ฌ๋ณธ์ ๋ง๋ ๋ค์ ์ ๋ ฌํด์ผ ํ๋ค. ํํฐ ํจ์ ์ ์ -- *sort.asc* : ์ซ์,๋ฌธ์,UTF8 ๋ชจ๋ ๊ฐ๋ฅ local function ascending(a,b) return a < b -- a๊ฐ b๋ณด๋ค ์์ผ๋ฉด true end -- *sort.desc* : ์ซ์,๋ฌธ์,UTF8 ๋ชจ๋ ๊ฐ๋ฅ local function descending(a,b) return a > b -- a๊ฐ b๋ณด๋ค ํฌ๋ฉด true end -- *sort.bylength* local function bylength(a,b) return #a < #b -- ๋ฌธ์์ด์ ๊ธธ์ด์ ๋ฐ๋ผ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ end -- *sort.iascendig* - ๋์๋ฌธ์ ๊ตฌ๋ถ ์์ด ์ค๋ฆ์ฐจ์ ์ ๋ ฌ local function iascendig(a,b) return string.lower(a) < string.lower(b) end -- *sort.idescending* - ๋์๋ฌธ์ ๊ตฌ๋ถ ์์ด ์ ๋ ฌ local function idescending(a,b) return string.lower(a) > string.lower(b) end -- *sort.bykey* local function bykey(key) return function(a,b) return a[key] < b[key] end end ํ์ฉ local numbers = {5, 3, 8, 1, 2} table.sort(numbers, ascending) -- ์ค๋ฆ์ฐจ์ ์ ๋ ฌ local strings = {"banana", "apple", "cherry"} table.sort(strings, alphabetical) -- ์ํ๋ฒณ ์ ์ ๋ ฌ local objects = { {name = "Alice", age = 30}, {name = "Bob", age = 25}, {name = "Charlie", age = 35} } table.sort(objects, byKey("age")) -- ๋์ด์ ๋ฐ๋ผ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ REFERENCE duck.ai Quick Guide to Lua Table Sort: Mastering Order with Ease https://luascripts.com/lua-table-sort
WSL Alpine Podman ์ค์น ๋ฐ ๊ตฌ์ฑ
์๊ฐ Podman ์๊ฐ Podman์ ์ปจํ ์ด๋๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ์คํ ์์ค ๋๊ตฌ๋ก, Red Hat์์ ๊ฐ๋ฐ. Docker์ ์ ์ฌํ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง, ๋ช ๊ฐ์ง ์ค์ํ ์ฐจ๋ณ์ ์ด ์๋ค. Podman์ ์ฃผ๋ก ๋ฆฌ๋ ์ค ํ๊ฒฝ์์ ์ฌ์ฉ๋๋ฉฐ, ์ปจํ ์ด๋๋ฅผ ์์ฑ, ์คํ, ๊ด๋ฆฌํ๋ ๋ฐ ํ์ํ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ์ฃผ์ ํน์ง ๋ฃจํธ๋ฆฌ์ค ์คํ: Podman์ ๋ฃจํธ ๊ถํ ์์ด ์ปจํ ์ด๋๋ฅผ ์คํํ ์ ์์ด ๋ณด์์ฑ์ด ๋๋ค. ์ด๋ ์์คํ ์ ๋ณด์์ ๊ฐํํ๋ ๋ฐ ํฐ ๋์์ด ๋๋ค. ๊ฒฝ๋ํ: Podman์ ๊ฒฝ๋ ์ปจํ ์ด๋๋ฅผ ์ง์ํ์ฌ ์์คํ ์์์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค. ์ด๋ ํนํ ๋ฆฌ์์ค๊ฐ ์ ํ๋ ํ๊ฒฝ์์ ์ ๋ฆฌํ๋ค. ...
Bash History Command
History ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ $ history # history ๋ชฉ๋ก ๋ณด๊ธฐ $ !! # ์ด์ ๋ช ๋ น ์คํ $ !<๋ฒํธ> # ํด๋น ๋ฒํธ ๋ช ๋ น ์คํ Bash ํ์คํ ๋ฆฌ ํ์ฉ๋ฒ 1. !๋ฌธ์์ด๋ก ์ต๊ทผ ๋ช ๋ น์ด ์ฌ์คํ !ls โ ์ต๊ทผ์ ์คํํ ls๋ก ์์ํ๋ ๋ช ๋ น์ด๋ฅผ ์ฌ์คํ !git โ ์ต๊ทผ์ ์คํํ git์ผ๋ก ์์ํ๋ ๋ช ๋ น์ด ์คํ 2. !!๋ก ๋ฐ๋ก ์ด์ ๋ช ๋ น์ด ์ฌ์คํ !! โ ์ง์ ์ ์คํํ ๋ช ๋ น์ด๋ฅผ ๋ค์ ์คํ ์: sudo !! โ ์ง์ ๋ช ๋ น์ด๋ฅผ sudo๋ก ์คํ (๊ถํ ๋ถ์กฑ ์ ์ ์ฉ) 3. history | grep ํค์๋๋ก ๊ฒ์ history | grep ssh ์ํ๋ ๋ช ๋ น์ด๋ฅผ ์ฐพ๊ณ !๋ฒํธ๋ก ์คํ 4. Ctrl + r๋ก ํ์คํ ๋ฆฌ ๊ฒ์ (๊ฐ์ฅ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ!) Ctrl + r ๋๋ฅด๊ณ ํค์๋ ์ ๋ ฅ โ ์ค์๊ฐ์ผ๋ก ๊ณผ๊ฑฐ ๋ช ๋ น์ด ๊ฒ์ ์ํ๋ ๋ช ๋ น์ด๊ฐ ๋์ค๋ฉด Enter๋ก ์คํ ์: Ctrl + r โ docker ์ ๋ ฅ โ docker ps ๋ช ๋ น์ด ์๋ ์์ฑ 5. fc ๋ช ๋ น์ด๋ก ํ์คํ ๋ฆฌ ํธ์ง ํ ์คํ fc ๊ฐ์ฅ ์ต๊ทผ ๋ช ๋ น์ด๋ฅผ ํธ์ง๊ธฐ๋ก ์ด๊ณ ์์ ํ ์คํ fc -s๋ก ํน์ ๋ช ๋ น์ด๋ฅผ ๋ฐ๋ก ์คํํ ์๋ ์์ 6. .bashrc์ alias ๋ฑ๋กํด์ ์์ฃผ ์ฐ๋ ๋ช ๋ น์ด ๋จ์ถ alias gs='git status' alias ll='ls -alF' ์์ฃผ ์ฐ๋ ๋ช ๋ น์ด๋ฅผ ์งง๊ฒ ๋ฑ๋กํด๋๋ฉด ํ์คํ ๋ฆฌ๋ณด๋ค ๋น ๋ฅด๋ค ** ํ**: HISTCONTROL=ignoredups:erasedups๋ฅผ .bashrc์ ์ค์ ํ๋ฉด ์ค๋ณต๋ ๋ช ๋ น์ด๊ฐ ํ์คํ ๋ฆฌ์ ๋จ์ง ์์์ ๊ฒ์์ด ํจ์ฌ ๊น๋ํด์ง๋ค. ...
busybox - unix command tools
Intro busybox๋ ์๊ณ ๊ฐ๋ณ๊ณ ๋น ๋ฅธ POSIX ํ์ค ์ ํธ ๋ชจ์์ด๋ค. docker์์ ์ฌ๋ฌ ๊ฐ์ง๋ก ์์ฉํด์ ์ฌ์ฉํ ์ ์๋ค. ์์ฉ ์๋ฒ ๋๋ ์์คํ ์ ๋น๋ํ๊ธฐ windows ํ๊ฒฝ์์ Unix Shell, command ์ฌ์ฉํ๊ธฐ HTTP ์น์๋ฒ๋ก ๋๋ฆฌ๊ธฐ Kubernates์ init container๋ก ์ฌ์ฉํ๊ธฐ Docker ๊ฐ์์ปจํ ์ด๋ ๋ณผ๋ฅจ์๋ฒ(์คํ ๋ฆฌ์ง)๋ก ์ฌ์ฉํ๊ธฐ Busybox์ ๊ดํ์ฌ ๋๋๊ฒ๋ busybox๋ httpd๋ฅผ ๋ด์ฅํ๊ณ ์๋ค. ๋ฌผ๋ก ๋๊ท๋ชจ ์ฒ๋ฆฌ๋ ๊ณค๋ํ๋ค. ๋ด์ฅ๋ grep๋ ๊ธฐ๋ณธ ๊ธฐ๋ฅ๋ง ์๋ค. ๋์ฉ๋ ํ์ผ ๊ฒ์์ ์จ์ผํ๋ค๋ฉด ํจ์จ์ด ์ข์ง ์์ผ๋ฏ๋ก gnu grep์ ์น์ด์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค. busybox๋ glibc, musl ๋ฑ์ ์ง์ํ๋ ๋ฒ์ ์ด ์๋ค. ์ด๋ฅผ ํ์ฉํ๋ฉด ์ฌ๋ฌ๊ฐ์ ํ๋ก๊ทธ๋จ์ ๋ฃ์ด์ผํ ๋ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ฉํ ์ ์์ด ํจ์จ์ ์ด๋ค. alpine ๋ฆฌ๋ ์ค๊ฐ busybox + musl + os env ์ด๋ฏ๋ก ์์ ๋ง์ ์ด๋ฏธ์ง๋ฅผ ์ ์ํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค. ๊ธฐ๋ณธ์ ์ธ utf-8์ด ์ง์๋์ง๋ง ์ถ๋ ฅ์ ๊ด์ฐฎ๊ณ ์ ๋ ฅ์ ๋ฌธ์ ๊ฐ ์๋ค. sh, echo, vi ๋ ๊ฐ๋ณ๊ฒ ์ฐ๊ธฐ๋ ์ข์ผ๋ utf-8 ํ๊ธ์ ๋ ฅ์ด ์๋๋ค. ์ด๋ฅผ ๋ณด์ํ๊ธฐ ์ํด์๋ bash, echo, vi๋ฅผ ์ ์ ์ปดํ์ผ ๋ฐ์ด๋๋ฆฌ๋ก ๋์ฒด ๋๋ ๋์ปคํ๋ธ(DockerHub)์ toybox๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. utf-8 ์ ์ถ๋ ฅ์ ๋ชจ๋ ์ง์ํ๋ค. ์ฌ์ง์ด ์ฌ์ด์ฆ๊ฐ ๋ ์๋ค. utf-8์ ์ ์ถ๋ ฅ ํ๊ฒฝ์ด ๋ชจ๋ ํ์ํ๋ค๋ฉด toybox๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ๋ซ๋ค. busybox(์ฝ1.2MB)๋ toybox(์ฝ764K)๋ ์ ๋ง ๊ฐ๋ณ๊ฒ ์คํํ๊ณ ๋ฐฐํฌํ ์ ์๋ ํ๊ฒฝ์ด๋ค. ๊ฒฐ๋ก ์ ์ผ๋ก ์ด๊ฒ์ ๋ํ ํ์ฉ์ ๊ฐ๋ฐํ๊ฒฝ์ด๋ ํฐ๊ท๋ชจ์ ์คํํ๊ฒฝ๋ณด๋ค๋ ์๊ณ ๊ฐ๋ฒผ์ด ํ๊ฒฝ์์ ํจ์จ์ ์ธ ์ด์ฉ์ด ํ์ํ ๋ ์ฌ์ฉํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค. ์๋์ฐ์ฆ์์ ์ ๋์ค ๋ช ๋ น ํ๊ฒฝ ๊ตฌ์ฑ Busybox64๋ ์๋์ฐ์ฆ ํ๊ฒฝ์์ busybox๋ฅผ ํตํด unix ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๊ธฐ์ํ ์ข์ ๋ฐฉ๋ฒ์ด๋ค. ์๋์ฐ์ฆ์์ ๊ฐ๋จํ ํ์ผ ํธ์ง, ์ด๋, ํ์ผ ์กฐ์ ๋ฑ ์ต์ํ 172๊ฐ์ ๋ช ๋ น์ด ์ฌ์ฉ๊ฐ๋ฅ. Shell Script ์์ฑ๋ ๊ฐ๋ฅ : sh, bash, vi ๋ฑ์ผ๋ก ์ฌ๋ฌ ์์ ์๋ํ ์คํฌ๋ฆฝํธ ์์ฑ. ๊ฐ๋ฒผ์ด ์์ ๋ง ํ๋ค๋ฉด cygwin, msys2, git for windows ๋ฑ์ด ๊ตณ์ด ํ์์น ์๋ค. busybox.exe(32bit), busybox64.exe(64bit), busybox64u.exe (64bit unicode) ์ค ์ ํํด์ ์ฌ์ฉํ๋ค. ์ค์น ๋ค์ด๋ก๋: https://frippery.org/busybox/ ์ฌ์ฉ๋ฒ ์ ๋นํ ์์น์ ๋ค์ด๋ก๋ ํ ํ PATH์ ์ถ๊ฐํด ์ค๋ค. command ์ฐฝ ๋๋ Powershell์ ์คํํ๋ค. busybox.exe bash -l : bash ์ ํ๊ฒฝ์ผ๋ก ํฐ๋ฏธ๋์ด ์คํ๋๋ค. (sh, ash, bash ์ง์) busybox.exe --list : ์ฌ์ฉํ ์ ์๋ unix ๋ช ๋ น๋ค ๋ชฉ๋ก (sed, awk, grep, make, wget, vi, ..) busybox.exe --help : ๋์๋ง REFERENCE busybox home: https://frippery.org/busybox/ busybox github: https://github.com/rmyorston/busybox-w32 Using the BusyBox Docker Image for Building Applications : A Complete Guide https://www.sohamkamani.com/docker/busybox-guide/
Lua - mode ์ฒ๋ฆฌ ํจ์
์๊ฐ lua์์ mode ์ธ์๋ฅผ ๋ฐ์ ๋ string, table ๋ชจ๋๋ฅผ ๊ตฌ๋ณํ์ง ์๊ณ ์ฒ๋ฆฌํ๊ธฐ ์ด๋ vim.keymap.set() ํจ์์์ ์ฌ์ฉ๋๊ณ ์๋ ๋ฐฉ๋ฒ์ด๋ค. ๋ด๋ถ์์ type์ด table์ด ์๋๋ฉด {mode}๋ก ํ์ด๋ธ๋ก ๋ฐ๊พธ๊ณ For๋ฌธ์ผ๋ก ์ฒ๋ฆฌํ๋ค. ์์ -- ํจ์ ์ ์ function my_map(mode, short, command, opts) local modes = type(mode) == 'table' and mode or { mode } for _, m in ipairs(modes) do vim.keymap.set(m, short, command, opts) end end -- ์ฌ์ฉ my_map('n','<leader>r', ':source %<CR>', {noremap=true}) my_map({ 'n','v' },'<leader>r', ':source %<CR>', {noremap=true})