Skip to content

Instantly share code, notes, and snippets.

View novelview9's full-sized avatar
๐ŸŽฏ
Focusing

Lukuku novelview9

๐ŸŽฏ
Focusing
View GitHub Profile
@novelview9
novelview9 / gureum-input-method.md
Created April 10, 2026 15:24
Ghost Library: ํ•œ๊ธ€ ์ž…๋ ฅ๊ธฐ ์ŠคํŽ™ (gureum/gureum ๊ธฐ๋ฐ˜)

Ghost Library: ํ•œ๊ธ€ ์ž…๋ ฅ๊ธฐ (Korean Input Method)

์›๋ณธ ํ”„๋กœ์ ํŠธ: gureum/gureum โ€” macOS/iOS ํ•œ๊ธ€ ์ž…๋ ฅ๊ธฐ, Swift ~10K LOC (BSD + LGPL) ํ•ต์‹ฌ ์˜์กด: libhangul (C, ํ•œ๊ธ€ ์กฐํ•ฉ ์ƒํƒœ ๋จธ์‹ ), Apple InputMethodKit ์ฆ๋ฅ˜ ๊ธฐ์ค€: gureum v1.13.2 (commit b495b70 ์‹œ์  ์†Œ์Šค ๋ถ„์„)

์ด ๋ฌธ์„œ๋Š” gureum ์ž…๋ ฅ๊ธฐ์˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋ถ„์„ยท์ฆ๋ฅ˜ํ•˜์—ฌ, AI ์ฝ”๋”ฉ ์—์ด์ „ํŠธ๊ฐ€ ๋™๋“ฑํ•œ ์ž…๋ ฅ๊ธฐ๋ฅผ ์žฌ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ž‘์„ฑํ•œ Ghost Library์ž…๋‹ˆ๋‹ค.


@novelview9
novelview9 / gureum-input-method.md
Last active April 11, 2026 02:08
Ghost Library: ๊ตฌ๋ฆ„ ํ•œ๊ธ€ ์ž…๋ ฅ๊ธฐ (gureum/gureum) ์•„ํ‚คํ…์ฒ˜ ์ฆ๋ฅ˜ โ€” AI ์ฝ”๋”ฉ ์—์ด์ „ํŠธ์šฉ ์žฌ๊ตฌํ˜„ ์ŠคํŽ™

Ghost Library: ๋ฃจ๋ฃธ ํ‚ค๋ณด๋“œ (Luroom Keyboard)

๋ ˆํผ๋Ÿฐ์Šค: gureum/gureum โ€” macOS ํ•œ๊ธ€ ์ž…๋ ฅ๊ธฐ (BSD + LGPL) ํ•ต์‹ฌ ์˜์กด: libhangul (C, ํ•œ๊ธ€ ์กฐํ•ฉ ์ƒํƒœ ๋จธ์‹ ), Apple InputMethodKit

macOS ์ „์šฉ ํ•œ๊ธ€ ์ž…๋ ฅ๊ธฐ. 3๊ฐ€์ง€ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์— ์ง‘์ค‘ํ•œ๋‹ค:

  1. ๋ชจ์•„์น˜๊ธฐ โ€” ์ดˆ์„ฑ/์ค‘์„ฑ/์ข…์„ฑ ๋™์‹œ ํƒ€๊ฑด, ์ˆœ์„œ ๋ฌด๊ด€
  2. Vi ๋ชจ๋“œ โ€” ESC/Ctrl+[ โ†’ ์ž๋™ ์˜๋ฌธ ์ „ํ™˜
  3. ๋‚ด์žฅ QWERTY โ€” ์ž…๋ ฅ๊ธฐ ๋‚ด๋ถ€ ํ•œ์˜์ „ํ™˜์œผ๋กœ ์”นํž˜ ์ œ๋กœ
์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” 1๋ฒˆ๋ถ€ํ„ฐ 10๋ฒˆ๊นŒ์ง€์˜ CSS BEM ๊ตฟ ์ผ€์ด์Šค์™€ ๋ฒ ๋“œ ์ผ€์ด์Šค ์˜ˆ์‹œ๋ฅผ ํฌํ•จํ•œ Markdown ํŒŒ์ผ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.
```markdown
# CSS BEM Good Case and Bad Case Examples
## 1. Good Case: Clear Block Naming
```css
/* Good */
.header {
background-color: #f8f9fa;
test
test
@novelview9
novelview9 / download.py
Created May 16, 2022 17:56
python multi image file download
import nest_asyncio # pip install nest_asyncio (for ipython)
nest_asyncio.apply()
import os
import asyncio
import aiohttp # pip install aiohttp
import aiofiles # pip install aiofiles
REPORTS_FOLDER = "reports"
FILES_PATH = os.path.join(REPORTS_FOLDER, "files")
import copy
class PalindromeNode:
def __init__(self, sentence, exception_limit):
self.sentence = sentence
self.exception_limit = exception_limit
def is_done(self):
map <C-n> :NERDTreeToggle<CR>
# remap prefix from 'C-b' to 'C-a'
unbind C-b
set-option -g prefix C-p
bind-key C-p send-prefix
# go to last window
bind-key a last-window
# split window
bind-key v split-window -h