References

โ€œ๊ทธ๋Œ€๋“ค์€ ์–ด๋–ป๊ฒŒ ์‚ด ๊ฒƒ์ธ๊ฐ€ #์• ๋‹ˆ๋ฉ”์ด์…˜.โ€ 2024. In ์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „. https://ko.wikipedia.org/w/index.php?title=๊ทธ๋Œ€๋“ค์€_์–ด๋–ป๊ฒŒ_์‚ด_๊ฒƒ์ธ๊ฐ€&oldid=37829417.

Han, Jung. (2025) 2025. โ€œJunghan0611/Dotemacs.โ€ https://github.com/junghan0611/dotemacs.

Jason Walsh. 2025. โ€œJwalsh/Hy-Algorithms: Algorithms and Data Structures Implemented in Hy, a Lisp Dialect for Python.โ€ https://github.com/jwalsh/hy-algorithms/tree/main.

โ€œLearn Anything.โ€ n.d. Accessed September 12, 2024. https://learn-anything.xyz/.

โ€œLearn-Anything/Books: Awesome Books.โ€ n.d. Accessed March 27, 2025. https://github.com/learn-anything/books.

โ€œLearn-Anything/Learn-Anything.โ€ (2016) 2024. Learn Anything. https://github.com/learn-anything/learn-anything.

MatthewZMD. 2025. โ€œMatthewZMD/Aidermacs: Emacs AI Pair Programming Solution.โ€ https://github.com/MatthewZMD/aidermacs.

neo. 2025. โ€œHacker News ์œ ๋ช…๋„ ๊ธฐ์ค€ ์ตœ๊ณ ์˜ ๊ฐœ์ธ ๋ธ”๋กœ๊ทธ๋“ค.โ€ GeekNews. March 26, 2025. https://news.hada.io/topic?id=19972.

susam. 2025. โ€œIndieweb์€ ๋Œ€์ค‘ํ™”๋  ํ•„์š”๊ฐ€ ์—†๋‹ค.โ€ GeekNews. March 22, 2025. https://news.hada.io/topic?id=19889.

Zeng, Matthew. (2025) 2025. โ€œMatthewZMD/Emigo Spiritual Successor of Aidermacs.โ€ https://github.com/MatthewZMD/emigo.

2025-03-24 Mon

03:16 ๊นจ๋‹ค. ๊ณต์ด์š” ์—ฐํƒ„์žฌ

06:51 ๊ธฐ์ƒ

09:16 ๋ฐ”๋ก ์ด ๋“ฑ์›

10:51 ์šฐ์ฒด๊ตญ ๋น ๋ฅธ๋“ฑ๊ธฐ - ํƒ๋ฐฐ ์˜๋ฅ˜ ์ฒ˜๋ฆฌ : ์•„๋‚ด

๋ฐ˜๊ฐ’ํƒ๋ฐฐ ๋ถˆ๊ฐ€. 5kg ์ด์ƒ์ด๋ผ.

13:01 ๋ฐ”๋ก  ํ”ฝ์—…

14:00 ์•„์ฃผ๋Œ€ ์ฒญ์†Œ๋…„์˜ํ•™๊ณผ ์•Œ๋ ˆ๋ฅด๊ธฐ -> ๋กฏ๋ฐ๋ชฐ ์˜ํ™”๊ด€ -> ๋ถ€๋ชจ๋‹˜ ๋Œ ์ด๋™

18:14 ์น ๋ณด ์‹์‚ฌ ์ค‘

19:54 ์ง‘๋„์ฐฉ ์ž์ž

21:02 ์™„์ „ ํ”ผ๊ณค ์ž”๋‹ค

23:37 ์ž ์‹œ ๊นผ๋‹ค ์™œ์ง€?

2025-03-25 Tue

01:38 ๋˜ ๊นผ๋‹ค

05:20 ์ผ์–ด๋‚˜๋ผ ๋ฐ˜๋งŒ๋…„์˜ ๋Œ€ํ•œ๋ฏผ๊ตญ!

07:01 ๋ฐฑ์น˜์—ฌ!

07:33 ์•„๋‚ด ์ถœ๊ทผ ์ง์ „ ๋งŒ๋‹ด

08:57 ๋ฐ”๋ก  ๊ธฐ์ƒ

10:00 ์ค‘์•™๋„์„œ๊ด€ ์ฒดํฌ์ธ

12:01 ์•„์ฃผ ๊ท€์ฐฎ์€ ๋ฌธ์ œ ํ•ด๊ฒฐ - ๋‘ ์ด๋งฅ์Šค

#LLM: Warning (emacs): Org version mismatch. ์‹ค๋งˆ๋ฆฌ๋ฅผ ์žก์•˜๋Š”๋ฐ, ๊ฑด๋“ค์ง€ ๋ง๋ผ๋Š” ๊ฒƒ. ๊ธฐ๋ณธ์—์„œ ๊ฑด๋“œ๋‹ˆ๊นŒ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋ผ๋Š” ๊ฒƒ

13:34 ์ข‹์•„. ์ฑ…์„ ๋งŒ๋‚˜๋Š” ๊ฒƒ ๋ง์ด์•ผ.

14:24 ํ”„๋กœ๊ทธ๋ž˜๋จธ ์ฐฝ์˜์„ฑ ๊ด€๋ จ ์ฑ…๋“ค์ด ๋งŽ๋‹ค

14:28 ๋ฐฐ๊ณ ํ”„์ง€๋งŒ ์ญ‰ ๋‹ฌ๋ฆฌ๊ธฐ๋กœ

16:01 ๊ธด๊ธ‰ ๋ธŒ๋ ˆ์ธ์›Œ์‹œ

16:33 ์ข‹์•„ - ๋ญ๊ฐ€?

18:49 ๋“œ๋””์–ด ์‹์‚ฌ

2025-03-26 Wed

02:48 ๊นจ์–ด๋‚˜ ๋…์„œ - ๊ฟˆ

06:18 ๊ธฐ์ƒ

08:52 ๋ฐ”๋ก  - ๋“ฑ์› ๋ฃจํ‹ด - ์—…๋ฐ์ดํŠธ

10:30 ์ค‘์•™๋„์„œ๊ด€ ์ฒดํฌ์ธ

12:10 ๋ฐฐ๊ณ ํ”„๋‹ค ์˜์–‘ ๋ณด๊ธ‰

13:33 Lex Friedman ํŒŸ์ผ€์ŠคํŠธ(ThePrimeagen ์ธํ„ฐ๋ทฐ) - Emacs vs. NeoVIM (feat. ADHD)

14:12 POSSE ๋ธ”๋กœ๊น… ์ „๋žต - ๋””์ง€ํ„ธ๊ฐ€๋“  - ์ธ๋””์›น - ๊ณต์œ 

์ด๊ฒƒ์„ ์žŠ์ง€๋งˆ๋ผ

15:25 ๋ธŒ๋ ˆ์ธ์›Œ์‹œ ๊ธด๊ธ‰ -> ์™„๋ฃŒ

15:48 ์‹ ๊ธฐํ•œ ๊นƒํ—™

17:02 jira ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ ํ˜‘์—… - ์ด๋งฅ์Šค ์ด๊ฒƒ์ด ๋ˆˆ์— ๋“ค์–ด์™”๋‹ค

18:00 ์ฒดํฌ์•„์›ƒ - ๋šฑ์ด๋„ค๋ท”ํŽ˜ 5500์› ๋‘ ๊ทธ๋ฆ‡ -> ๋ฐ”๋ก  ์ž์ „๊ฑฐ ๋Œ๊ณ  ์ง‘์œผ๋กœ

19:00 ์ง‘์— ์™€์„œ ๋ ‰์Šค ์ธํ„ฐ๋ทฐ ๋“ค์œผ๋ฉฐ ์ž‘์—…

19:43 ๋ฐ”๋ก  ํ• ์•„๋ฒ„์ง€ ์ฐจ ํƒ€๊ณ  ์˜ค๋Š” ์ค‘

20:46 ๋ฐ”๋ก ์ด์™€ ์ด ๋‹ฆ๊ณ  ์ž์ž - ์˜ค๋””์˜ค๋ถ ๋“ฃ๋‹ค๊ฐ€ ์ž˜ ์˜ˆ์ •

22:33 ์•„๋‚ด ์™”๊ตฌ๋‚˜ ๊ฑฐ์‹ค๋กœ ์ด๋™ ์ž์ž

2025-03-27 Thu

01:09 ํ†จ๋ž˜ ์„ ์ƒ๋‹˜

05:50 ๊ธฐ์ƒ

07:06 ๋น„๊ฐ€ ์˜ค๋Š” ๊ตฌ๋‚˜

08:15 ๋ฐ”๋ก ์ด๋ž‘ ์ŠคํŽ€์ง€๋ฐฅ ๋ณด๋Š” ์ค‘

09:29 ์ค‘์•™๋„์„œ๊ด€ ์ฒดํฌ์ธ

10:40 ์™€ ๋งํฌ ํญํƒ„์ด๋‹ค

  • ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ ๋ชจ์Œ
  • ๋Œ€๊ทœ๋ชจ ์–ธ์–ด ๋ชจ๋ธ ์ฑ…

10:53 ํ•ด์ปค์Šค๋‰ด์Šค ์œ ๋ช…ํ•œ ๋ธ”๋กœ๊ทธ ๊ทธ๋ฆฌ๊ณ 

์ด๋“ค์˜ ๊ตฌ๋… ์‹œ์Šคํ…œ๊ณผ ๊ธ€ ๋ถ„๋ฅ˜

Hacker News ์œ ๋ช…๋„ ๊ธฐ์ค€ ์ตœ๊ณ ์˜ ๊ฐœ์ธ ๋ธ”๋กœ๊ทธ๋“ค

(neo 2025)

  • neo
  • Hacker News์—์„œ ์ธ๊ธฐ ์žˆ๋Š” ๊ฐœ์ธ ๋ธ”๋กœ๊ทธ๋ฅผ ์ˆœ์œ„๋ณ„๋กœ ๋‚˜์—ดํ•œ ๋ชฉ๋ก์œผ๋กœ, ๊ฐ ๋ธ”๋กœ๊ทธ์˜ ์ €์ž, ์ฃผ์ œ ๋ฐ ์ด ์ ์ˆ˜๋ฅผ ํ‘œ์‹œ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ  ๋ฐ ๋น„์ฆˆ๋‹ˆ์Šค ์ฃผ์ œ๋ฅผ ๋‹ค๋ฃจ๋ฉฐ, ๋…๋ฆฝ ์ €๋„๋ฆฌ์ŠคํŠธ๋ถ€ํ„ฐ ๊ธฐ์ˆ  ๋ถ„์„๊ฐ€์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ ๋‹ค์–‘ํ•œ ๋ฐฐ๊ฒฝ์˜ ์ €์ž๋“ค์ด ํฌํ•จHacker News ์ธ๊ธฐ ๊ฐœ์ธ ๋ธ”๋กœ๊ทธ ์ˆœ์œ„paulgraham.com์ด ์ ์ˆ˜: 96,443์ €์ž: Paul Graham์†Œ๊ฐœ: Y
  • 2025

12:00 ํด๋กœ์ € ์ฝ”ํ‹€๋ฆฐ - ์ž๋ฐ”๊ฐ€์ƒ๋จธ์‹  - ๊ทธ๋ฆฌ๊ณ  ํ’€์Šคํƒ

[2025-03-27 Thu 10:55]

#LLM: JVM ์ž๋ฐ”๊ฐ€์ƒ๋จธ์‹  - ์ฝ”ํ‹€๋ฆฐ ํด๋กœ์ € #์ฝ”ํ‹€๋ฆฐ๊ณผ ํด๋กœ์ € ์ž๋ฐ” ๊ฐ€์ƒ๋จธ์‹ ์˜ ๋ฏธ๋ž˜์— ๋Œ€ํ•œ ์ƒ๊ฐ

11:18 ๋ฒ„๊ทธํ”ฝ์Šค ํ•„์š” - vertico childframe

#LLM: marginalia vertico-multiform - sort-modified - emacs

13:04 defrecord - ํด๋กœ์ € ํ•˜์ด๋žญ ์กฐ์ง๋ชจ๋“œ ์ด๋งฅ์Šค LLM

๋†€๋ผ์šด ์กฐ์ง์ด๋ผ.

13:29 ๋งํฌ ์ค์ค์ด์˜ ํ•˜๋ฃจ - ์ด๊ฑธ ๋…ธํŠธ๋กœ ๋งŒ๋“ค๋ ค๋‹ค๊ฐ€?!

๋‹ค๋“ค ์–ด๋–ป๊ฒŒ ํ•˜๋Š”๊ฐ€? ๊ถ๊ธˆํ•˜๋„ค

14:53 ๋ฐฐ๊ณ ํ”„๋‹ค - ์ดํ›„ ์ผ์ •์„ ์žก์•„๋ณด์ž

15:19 ๋‚˜๊ฐ€์ž

16:18 ๋šฑ์ด๋„ค๋ท”ํŽ˜ 5500์› ์‹์‚ฌ -> ์œ ์น˜์› ์ปดํ“จํ„ฐ ๋ด์คŒ

17:00 ํผ์ŠคํŠธ์ถ•๊ตฌํด๋Ÿฝ

18:29 ์ง‘ ๋„์ฐฉ

19:24 ๋ฐ”๋ก ์ด์™€ ์ €๋… ๋จน๋Š” ์ค‘

19:53 ์”ป์ž ๋ฐ”๋ก ์•„

21:16 ๋ฐ”๋ก ์ด์™€ ์˜ค๋””์˜ค๋ถ ์žฌ์šฐ์ž

22:24 ์งฆ์€ ๋งŒ๋‚จ์—์„œ๋„ ๊นŠ์€ ๋‚˜๋ˆ”

์˜ค๋Š˜ ์ด ์‚ฌ๋žŒ์˜ ์ธ์ƒ์„ ์งง์€ ๋งŒ๋‚จ์—์„œ ๋‚˜๋ˆด์—ˆ๋‹ค.

2025-03-28 Fri

02:13 ๊ฐ‘์ž๊ธฐ ๊นจ์„œ ์ž‘์—… ์ค‘

05:56 ์ผ์–ด๋‚ ๊นŒ? ๊ทธ๋กœํ‚นํ•˜๋ผ

07:25 ์ž„๋ฐฑ์ค€๋‹˜ ์ฑ… ๋‹ค์‹œ ๋“ค์œผ๋ฉฐ ๋งˆ์ธ๋“œ์—…

08:20 ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๋ฐฐ์šฐ๋ฉฐ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ• - grok API

ํŒŒ์ด์ฌ?!

09:03 khoj RAG - ํŒŒ์ด์ฌ ๋ฒ ์ด์Šค์ฝ”๋“œ ๋ถ„์„

khoj-ai: personal AI second brain

11:12 ์„ ๊ฒฝ๋„์„œ๊ด€ ์ฒดํฌ์ธ

๊ทธ๋Œ€๋“ค์€ ์–ด๋–ป๊ฒŒ ์‚ด ๊ฒƒ์ธ๊ฐ€ #์• ๋‹ˆ๋ฉ”์ด์…˜

(โ€œ๊ทธ๋Œ€๋“ค์€ ์–ด๋–ป๊ฒŒ ์‚ด ๊ฒƒ์ธ๊ฐ€ #์• ๋‹ˆ๋ฉ”์ด์…˜โ€ 2024)

  • ใ€Š๊ทธ๋Œ€๋“ค์€ ์–ด๋–ป๊ฒŒ ์‚ด ๊ฒƒ์ธ๊ฐ€ใ€‹(์ผ๋ณธ์–ด: ๅ›ใŸใกใฏใฉใ†็”Ÿใใ‚‹ใ‹ ๊ธฐ๋ฏธํƒ€์น˜์™€ ๋„ ์ดํ‚ค๋ฃจ์นด[*])๋Š” 2023๋…„ ์ผ๋ณธ์˜ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์˜ํ™”์ด๋‹ค. ๋ฏธ์•ผ์žํ‚ค ํ•˜์•ผ์˜ค๊ฐ€ ๊ฐ๋…์„ ๋งก๊ณ  ์ŠคํŠœ๋””์˜ค ์ง€๋ธŒ๋ฆฌ์—์„œ ์ œ์ž‘ํ•˜์˜€๋‹ค. 2013๋…„ ์˜ํ™” ใ€Š๋ฐ”๋žŒ์ด ๋ถ„๋‹คใ€‹ ์ดํ›„ ๋ฏธ์•ผ์žํ‚ค ํ•˜์•ผ์˜ค ๊ฐ๋…์˜ 10๋…„๋งŒ์˜ ๋ณต๊ท€์ž‘์ด๋‹ค. ์š”์‹œ๋…ธ ๊ฒ์ž๋ถ€๋กœ์˜ ์†Œ์„ค ใ€Š๊ทธ๋Œ€๋“ค, ์–ด๋–ป๊ฒŒ ์‚ด ๊ฒƒ์ธ๊ฐ€ใ€‹๋กœ๋ถ€ํ„ฐ ์ž‘ํ’ˆ์˜ ์ œ๋ชฉ์„ ๋”ฐ ์™”์ง€๋งŒ, ์›์ž‘์„ ์ง์ ‘์ ์œผ๋กœ ๊ฐ์ƒ‰ํ•œ ๊ฒƒ์€ ์•„๋‹ˆ๋ฉฐ, ์ด ์†Œ์„ค์ด ์ฃผ์ธ๊ณต์—๊ฒŒ ํฐ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„๋‹ค๋Š” ํ˜•์‹์œผ๋กœ ์—ฐ๊ด€์ง“๊ณ  ์žˆ๋‹ค. ์žฅ๋ฅด ์ž์ฒด๋Š” ๋ชจํ—˜ ํŒํƒ€์ง€๋กœ ์†Œ๊ฐœ๋˜๊ณ  ์žˆ๋‹ค. ์ œ96ํšŒ ์•„์นด๋ฐ๋ฏธ์ƒ ์žฅํŽธ ์• ๋‹ˆ๋ฉ”์ด์…˜์ƒ ์ˆ˜์ƒ์ž‘์ด๋‹ค.

  • 2024

Learn Anything - ๋ฌด์—‡์ด๋“  ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋Š” ๋ญ”๊ฐ€๋‹ค

[2025-03-28 Fri 02:19] (โ€œLearn Anythingโ€ n.d.)

2024-09-12 ์ด๋•Œ ์ฐพ์€๊ฒƒ์ธ๋ฐ ๋˜ ๋งŒ๋‚˜๋„ค

learn-anything/books: Awesome Books

(โ€œLearn-Anything/Books: Awesome Booksโ€ n.d.)

learn-anything/learn-anything

(โ€œLearn-Anything/Learn-Anythingโ€ [2016] 2024)

  • Organize worldโ€™s knowledge, explore connections and curate learning paths

  • 2024

11:45 ์ผ๋‹จ ๋ฌด์‹ํ•˜๊ฒŒ ํ•œ ๊ถŒ์€ ์ข€ ๋ณด์ž ์ง€๋ฃจํ•ด๋„

13:10 ๋ฆฌ์Šคํ”„๋กœ ํ†ต์ผํ•˜๋Š” ๊ฒƒ - ์ „์ฒด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด

ํด๋กœ์ € ํ•˜์ด๋žญ ํ•˜๋‚˜๋กœ ํ•˜์œ„ ์ธํ”„๋ผ๋Š” ๋™์ผํ•˜๊ฒŒ ๊ฐ€๋Šฅํ•˜๋‹ค. ํ•˜์ด๋žญ ํ•˜๋‚˜๋งŒ ํ…Œ์ŠคํŠธ ์ž˜ ๋  ๊ฒƒ์ด๋‹ค.

13:31 ์†์“ฐ๋ฆฌ๋‹ค ๋ถ€๊ธ€๋ถ€๊ธ€ @๋‚˜์˜ค๋ฏธ๋ฐฐ๋Ÿฐ (1946-) ์ฝ๊ธฐ ์“ฐ๊ธฐ์˜ ๋ฏธ๋ž˜ - ์–ธ์–ดํ•™์ž ๋ฆฌ๋”ฉ

15:15 ๋šฑ์ด๋„ค 5500์› ์‹์‚ฌ - ์ง‘ ์™”๋‹ค. ์ปจ๋””์…˜.

16:31 #aider ํŽ˜์–ดํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ด๋งฅ์Šค ๊ฐœ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•

(MatthewZMD 2025) ์ด๋…€์„ ํƒ‘์žฌ

17:47 Cursor - The AI Code Editor ์•Œ์•„์•ผ ๋„˜๋Š”๋‹ค.

17:54 ํ—‰ ๋ฐ”๋ก ์ด ํ”ฝ์—… ๋‚˜๊ฐ€์ž

19:06 ๋‹ค์ด์†Œ ๊ฐ”๋‹ค๊ฐ€ ์ง‘ ๋„์ฐฉ. ์ €๋… ์ค€๋น„. ๊ฐ„๋‹จํžˆ ๋จน๊ณ  ์žฌ์šฐ์ž.

20:32 ์ด์ œ ์”ป๊ธฐ์ž

21:25 ์ปค์„œ ์ดˆ๊ธฐํ™” ๋ฐฉ๋ฒ•

vscode ๊ฐ€์ ธ์˜ค์ง€ ๋ง๊ณ  ๊ทธ๋ƒฅ ์Šคํฌ๋ž˜์น˜์—์„œ ํ•ด

rm -Rf ~/.cursor
rm -Rf ~/.config/Cursor

>

21:38 ์ฝ”๋””์›€์—์„œ ๋งŒ๋“  ๋…€์„์ด ์œˆ๋“œ์„œํ”„๊ตฌ๋‚˜

21:52 ์•„๋‚ด ๋ฐ”๋ก  ์ž๋Š” ๋“ฏ - ์ž๊ณ  ์ผ์–ด๋‚˜๋Š” ๊ฒŒ ์–ด๋– ๋ƒ

2025-03-29 Sat

01:21 ํ™• ๊นจ์„œ ์ปดํ“จํ„ฐ ์ค‘

@ํ”ผํ„ฐ์Šค์ฝง-๋ชจ๊ฑด ๋‚˜๋Š” ์‚ฌ์ด๋ณด๊ทธ๊ฐ€ ๋˜๊ธฐ๋กœ ํ–ˆ๋‹ค - ๋ฃจ๊ฒŒ๋ฆญ - ๋กœ๋ด‡๊ณตํ•™

02:02 ๋””๋…ธํŠธ

Emacs: Denote query links (links that trigger a search)

02:08 ๋”ฐ๋ผ๊ฐ€๋ผ ์•„์ด๋”๋งฅ์Šค

06:31 ๊ธฐ์ƒ ๋†€๋ผ์šด ์ˆ˜๋ฉด

07:42 ๋†€๋ผ์šด ์ฑ… ์ค์ค

07:55 ๊ทธ๊ฐ€ ์ฑ…์—๊ฒŒ ์ฑ…์ด๋ž€? ์ฑ…์„ ์ฝ๋Š” ๋ฐฉ์‹ - ๋ฆฌ๋”ฉ๋ฆฌ์ŠคํŠธ

๋ฌด์˜์‹ ์™„๋ฃŒ ์—†์Œ ๋Œ๋ฆฌ๋Š” ๋Œ€๋กœ

08:02 ๋””๋…ธํŠธ(Denote) ๊ทธ๋ฆฌ๊ณ  Prot

์˜ค. ํ”„๋กฏ! ๋””๋…ธํŠธ์— ๋ฌด์Šจ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์„ ๋ณด์ด๋Š” ๊ฒƒ์ธ๊ฐ€?

๋””๋…ธํŠธ(Denote)๋Š” ์ด๋งฅ์Šค์˜ ๋…ธํŠธ๊ด€๋ฆฌํŒจํ‚ค์ง€ ์ด๋ฆ„์ด๋‹ค. ์˜์ƒ์— ๋‚˜์˜ค๋Š” ํ”„๋กฏ์ด ์‹œ์ž‘ํ–ˆ๋‹ค. ์ œํ…”์นด์Šคํ…๊ณผ ์œ ์‚ฌํ•œ ๋…ธํŠธ ๊ด€๋ฆฌ ์ฒด๊ณ„์ด๋‹ค. ์ด๋Ÿฌํ•œ ๋…ธํŠธ ๊ด€๋ฆฌ์˜ ํ•ต์‹ฌ์€ ์—ฐ๊ฒฐ์ด๋‹ค. ๋งˆ์น˜ ๋‡Œ์˜ ์‹ ๊ฒฝ๋ง์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ์—ฐ๊ฒฐ์—๋Š” ์ต์ˆ™ํ•œ ์œ„ํ‚คํƒ€์ž…์˜ ๋ฐ”๋กœ๊ฐ€๊ธฐ(๋งํฌ) ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ”์ (ํƒœ๊ทธ, ์šฉ์–ด, ์ธ์šฉ ๋“ฑ)์„ ๋‚จ๊ธฐ๋Š” ๊ฒƒ๋„ ์žˆ๋‹ค. โ€˜๋ฌด์˜์‹โ€™์— ๋ฌธ์„ ๋‘๋“œ๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ”์ ์„ ๋‚จ๊ธฐ๋Š” ๊ฒŒ ๋” ์ค‘์š”ํ•œ ๊ฒƒ ๊ฐ™๋‹ค.

์•„๋ฌดํŠผ, ์ด๋Ÿฐ. ์•„๋‚ด์™€ ์•„์ด๊ฐ€ ์ผ์–ด๋‚ฌ๋‹ค. ๊ธ€์„ ์“ธ ์‹œ๊ฐ„์ด ์—†๋‹ค. 5๋ถ„ ์•ˆ์— ํ•ต์‹ฌ์„ ๋‚จ๊ธฐ๊ฒ ๋‹ค.

์ด๋งฅ์Šค ์„ธ๊ณ„์—๋Š” ์„ธ์ƒ์˜ ๋ชจ๋“  ๋…ธํŠธํ…Œ์ดํ‚น ๊ธฐ๋ฒ•์˜ ๊ตฌํ˜„์ฒด๊ฐ€ ์žˆ๋Š”๋“ฏํ•˜๋‹ค. ๊ทธ ์ค‘์—์„œ ๋””๋…ธํŠธ๋Š” ํŒŒ์ผ์ด๋ฆ„์ฒด๊ณ„๋งŒ์œผ๋กœ ๋ชจ๋“  ์—ฐ๊ฒฐ์„ ์ด๋ฃจ์–ด ๋‚ธ๋‹ค. ๊ณ ๋กœ ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋„ ํ•„์š”๊ฐ€ ์—†๋‹ค. ๋†€๋ž๋„๋ก ๋‹จ์ˆœํ•˜๋‹ค. ํžฃ์€ ์ด๋งฅ์Šค์—์„œ ์ด๋Ÿฐ ์ €๋Ÿฐ ๋…ธํŠธ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•์„ ๊ฑฐ์ณ์„œ ์—ฌ๊ธฐ์— ์ •์ฐฉํ–ˆ๋‹ค.

ํ•˜๋‚˜ ๋”. ์ธ๊ณต์ง€๋Šฅ์„ ํ•„๋‘๋กœ ์—„์ฒญ๋‚œ ์ง€์‹ ์‹œ์Šคํ…œ์˜ ๋ณ€ํ™” ์†์—์„œ ๋„ˆ๋ฌด ๋งŽ์€ ์ •๋ณด๊ฐ€ ํ˜ผ์žฌํ•œ๋‹ค. ํ”๋“ค๋ฆด ํ•„์š”๊ฐ€ ์—†๋‹ค. ๊ทธ ๋„๊ตฌ์™€ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ์‹ ๋ขฐํ•˜๋ฉด ๊ทธ ์•ˆ์—์„œ ํ•˜๋‚˜์˜ ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

ํ”„๋กฏ์€ ๋ชจ๋“  ๊ฒƒ์„ ๊ณต๊ฐœํ•œ๋‹ค. ์†Œ๋ช…์ด์ž ์šด๋ช…์ธ ๊ฒƒ์ฒ˜๋Ÿผ ๊ทธ๋ƒฅ ๋‹ค ๊ณต๊ฐœํ•œ๋‹ค. ๊ทธ๋Š” ์‹ค์ œ๋กœ ์ฒ ํ•™์ž์ด๊ธฐ๋„ ํ•˜๋‹ค. ์•„. ์•„๋‚ด๊ฐ€ ์™”๋‹ค. ์ด ์ •๋„๋กœ ์ •๋ฆฌ๊ฐ€ ๋˜๋‚˜?

์•„. ํ•˜๋‚˜ ๋งŒ ๋”. ์Šคํฌ๋ฆฐ์ƒท ์„ค๋ช…ํ•ด์•ผ์ง€.

์Šคํฌ๋ฆฐ์ƒท1 : ๋ฌด์ ์ฒ ์ธ๋žŒ๋ณดํŠธ๊ฐ€ ๋– ์˜ค๋ฅธ๋‹ค. ํžฃ์ด ์‚ฌ๋ž‘ํ•˜๋Š” ํƒ€์ผ์ฐฝ๊ด€๋ฆฌ๋Š” ํ™”์žฅ์‹ค ํƒ€์ผ์กฐ๊ฐ์ฒ˜๋Ÿผ ์ฐฝ์„ ๊ด€๋ฆฌํ•œ๋‹ค. ๋งˆ์šฐ์Šค๊ฐ€ ํ•„์š”๊ฐ€ ์—†๋‹ค. ๊ฐ€์šด์— ํˆฌ๋ช…ํ•˜๊ฒŒ ์˜ค๋ฌ˜ํ•œ ํ…์ŠคํŠธ ์ฐฝ์€ ๋ฌด์—‡์ธ๊ฐ€? ํžฃ์˜ ๋„๊ตฌ๋‹ค. ์•„์นจ์—๋Š” ํƒ€ํฌ์ดˆ์ฝ” ์•„๋‹ˆ๊ฒ ๋Š”๊ฐ€? ์™œ ๊ฐ€์šด๋ฐ ํ™€๋กœ ๋– (ํ”Œ๋กœํŒ…)๋˜์–ด ์žˆ๋Š”๊ฐ€? ์ด๊ฑด ๊บผ๋‚ด ์“ฐ๋Š” ๋งฅ๊ฐ€์ด๋ฒ„ ์นผ์ด ์•„๋‹Œ๊ฐ€?

์Šคํฌ๋ฆฐ์ƒท2 : ํ”„๋กฏ์˜ ๋‹ค๋ฅธ ์˜์ƒ ์†Œ๊ฐœ. ์‹œ๊ฐ„์ด ์—†๋‹ค. ์•„์ด๋„ ๋‚˜์™”๋‹ค. ํ”„๋กฏ์˜ ์ด์ „ ์˜์ƒ์˜ ์Šค์ƒท์„ ๋‹ด๋Š”๋‹ค. ์ฐพ์„ ๊ฒƒ๋„ ์—†๋‹ค. ํ”„๋กฏ์€ ์ง€์ค‘ํ•ด. ๊ทธ๋ฆฌ์Šค. ์ž‘์€์„ฌ. ์‚ฐ๊ณจ์— ์•„ํ‹€๋ผ์Šค๋ผ๋Š” ๋ฉ๋ฉ์ด๋ž‘ ์‚ฐ๋‹ค. ๊ทธ๋Š” ์‚ถ์ด ๊ณง ์ฒ ํ•™์ด๋ฉฐ (์‹ค์ œ๋กœ ์ฒ ํ•™์ „๊ณต์ด๋‹ค) ์˜คํ”ˆ์†Œ์Šค, ์ด๋งฅ์Šค๋Š” ๊ทธ๊ฐ€ ์‚ถ์— ๋ณด๋‚ด๋Š” ์กด๊ฒฝ๊ณผ ๊ฐ์‚ฌ์˜ ํ‘œํ˜„์ด๋‹ค.

๊ฐˆ๋ฌด๋ฆฌ๋Š” ๋‹ค์Œ์—. ๊ทธ๋ž˜์„œ ํžฃ์€ ๋ฌด์Šจ ๋ง์„ ํ•˜๊ณ  ์‹ถ์€๊ฐ€?

์‚ถ์˜์ฒ ํ•™. ์ง€์˜ ์ฒ ํ•™์ด๋‹ค. ์•Œ๋ ค์ค„ ๊ฒƒ์€ ์—†๋‹ค. ๋งํ•  ๊ฒƒ๋„ ์—†๋‹ค. ๊ทธ๊ฒƒ์€ ๊ฐ์ž ๋ชซ์ด๋‹ค. ๋‹จ โ€˜๋„๊ตฌโ€™๋ฅผ ์†Œ๊ฐœํ•ด์ฃผ๊ณ  ์‹ถ์„ ๋ฟ์ด๋‹ค. ์†๊ณผ ๋ฐœ์ด ์ถค์ถ”๋„๋ก. ์กด์žฌ๊ฐ€ ๋“œ๋Ÿฌ๋‚˜๋„๋ก. ์˜จ์œ ํ•œ ๋งˆ์Œ์—์„œ ์—ฐ๋ฏผ์ด ๋‚˜์˜ค๋ฉฐ ์–ด์ฉŒ๋‹ค ์ฐฝ์กฐ๋„ ๋‚˜์˜ค๋‹ˆ ์‚ถ์€ ์–ธ์ œ๋‚˜ ์—ฌ์—ฌํ•˜๋‹ค๋Š” ๊ฒƒ.

์ด๋งŒ ์•ˆ๋…•. ์•„์ด์™€ ์ŠคํŽ€์ง€๋ฐฅ์„ ๋ณด๋ฉฐ ์•„์นจ ์ค€๋น„.

https://www.youtube.com/watch?v=zqzAFj50MhE

Emacs: Denote query links (links that trigger a search)

์Šคํฌ๋ฆฐ์ƒท

>

08:43 ์•„๋‚ด ๊ธฐ์ƒ ๋ฐ”๋ก  ์•„์นจ

09:49 cursor quartz ์ˆ˜์ •์ค‘

Hugo tags and category

https://www.perplexity.ai/search/hugo-eseo-tag-categoryga-dareu-bGEnxhEzQl2t8P_EvPmhOA

์ฃผ์š” ์ฐจ์ด์ 

  1. ๋ฒ”์œ„์™€ ํŠน์„ฑ
    • ์นดํ…Œ๊ณ ๋ฆฌ: ๋ณด๋‹ค ๋„“์€ ์ฃผ์ œ๋‚˜ ๋ถ„์•ผ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์›น์‚ฌ์ดํŠธ์˜ ์ฃผ์š” ์„น์…˜์ด๋‚˜ โ€œ์ฑ…์˜ ์žฅโ€๊ณผ ๊ฐ™์€ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค[6].
    • ํƒœ๊ทธ: ๋” ๊ตฌ์ฒด์ ์ด๊ณ  ์„ธ๋ถ€์ ์ธ ์ฃผ์ œ๋‚˜ ํ‚ค์›Œ๋“œ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ฝ˜ํ…์ธ ์˜ ํŠน์ • ์ธก๋ฉด์„ ์„ค๋ช…ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค[6].
  2. ๊ตฌ์กฐ
    • ์นดํ…Œ๊ณ ๋ฆฌ: ์ผ๋ฐ˜์ ์œผ๋กœ ๊ณ„์ธต์  ๊ตฌ์กฐ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ํƒœ๊ทธ: ์ฃผ๋กœ ๋น„๊ณ„์ธต์ ์ด๋ฉฐ, ๋” ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  3. ์‚ฌ์šฉ ๋ฐฉ์‹
    • ์นดํ…Œ๊ณ ๋ฆฌ: ํฌ์ŠคํŠธ๋‹น ํ•˜๋‚˜ ๋˜๋Š” ์†Œ์ˆ˜์˜ ์นดํ…Œ๊ณ ๋ฆฌ๋งŒ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค.
    • ํƒœ๊ทธ: ํ•˜๋‚˜์˜ ํฌ์ŠคํŠธ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํƒœ๊ทธ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค[1].

๊ตฌํ˜„ ์ธก๋ฉด

Hugo์—์„œ๋Š” ํƒœ๊ทธ์™€ ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ๊ธฐ์ˆ ์ ์œผ๋กœ ๋™์ผํ•˜๊ฒŒ ์ทจ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค[4]. ๋‘˜ ๋‹ค taxonomy๋กœ ๊ตฌํ˜„๋˜๋ฉฐ, ์ฝ˜ํ…์ธ  ํŒŒ์ผ์˜ front matter์—์„œ ์ •์˜๋ฉ๋‹ˆ๋‹ค[2][5]. ์˜ˆ๋ฅผ ๋“ค์–ด:

---
title: "๋ธ”๋กœ๊ทธ ํฌ์ŠคํŠธ"
categories: ["์›น ๊ฐœ๋ฐœ"]
tags: ["Hugo", "์ •์  ์‚ฌ์ดํŠธ", "๋ธ”๋กœ๊ทธ"]
---

์ปค์Šคํ„ฐ๋งˆ์ด์ง•

ํƒœ๊ทธ์™€ ์นดํ…Œ๊ณ ๋ฆฌ์— ๋Œ€ํ•ด ์„œ๋กœ ๋‹ค๋ฅธ ๋ ˆ์ด์•„์›ƒ์„ ์ ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ„๋„์˜ ํ…œํ”Œ๋ฆฟ ํŒŒ์ผ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค[8]:

  • /layouts/categories/terms.html
  • /layouts/tags/terms.html

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํƒœ๊ทธ์™€ ์นดํ…Œ๊ณ ๋ฆฌ ํŽ˜์ด์ง€์— ๋Œ€ํ•ด ์„œ๋กœ ๋‹ค๋ฅธ ๋””์ž์ธ๊ณผ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก ์ ์œผ๋กœ, Hugo์—์„œ ํƒœ๊ทธ์™€ ์นดํ…Œ๊ณ ๋ฆฌ์˜ ์ฃผ์š” ์ฐจ์ด์ ์€ ๊ทธ๋“ค์˜ ์‚ฌ์šฉ ๋ชฉ์ ๊ณผ ๋ฐฉ์‹์— ์žˆ์œผ๋ฉฐ, ๊ธฐ์ˆ ์ ์ธ ๊ตฌํ˜„์€ ๊ฑฐ์˜ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ์›น์‚ฌ์ดํŠธ์˜ ๊ตฌ์กฐ์™€ ์ฝ˜ํ…์ธ  ์กฐ์ง์— ๋งž๊ฒŒ ์ ์ ˆํžˆ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

Citations: [1] https://hugo-in-action.foofun.cn/docs/part1/chapter4/4/ [2] https://staticmania.com/blog/hugo-taxonomy [3] https://www.jessicahuynh.info/blog/2020/06/hugo-taxonomies/ [4] https://smhk.net/note/2018/03/hugo-tag-and-category-pages/ [5] https://www.jakewiesler.com/blog/hugo-taxonomies [6] https://stackoverflow.com/questions/70149736/hugo-difference-between-tags-and-categories [7] https://discourse.gohugo.io/t/adding-tags-and-categories-to-blog-post/27020 [8] https://discourse.gohugo.io/t/different-layout-for-tag-and-category-pages/34699 [9] https://discourse.gohugo.io/t/i-dont-want-tags-and-categories/12091 [10] https://discourse.gohugo.io/t/listing-tags-in-posts-of-specific-category/22391 [11] https://www.youtube.com/watch?v=pCPCQgqC8RA [12] https://discourse.gohugo.io/t/whats-the-concept-of-the-categories-taxonomy/6486 [13] https://discourse.gohugo.io/t/how-to-add-tag-and-category/3202 [14] https://ox-hugo.scripter.co/doc/tags-and-categories/ [15] https://discourse.gohugo.io/t/using-content-type-to-categorise-list-of-posts/7950 [16] https://gohugo.io/content-management/taxonomies/ [17] https://discourse.gohugo.io/t/hugo-isnt-making-different-pages-for-categories-and-tags/23786 [18] https://aioseo.com/the-difference-between-tags-and-categories/


Perplexity๋กœ๋ถ€ํ„ฐ์˜ ๋‹ต๋ณ€: pplx.ai/share

09:58 ** quartz ์ฝ”๋“œ๋ฒ ์ด์Šค์— taxonomy ๋ถ„๋ฅ˜๋กœ category๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ ํ•ด.

์š”์ฒญ์•„์ด๋””: 8432adc5-15f0-4e6e-8895-69021c1baa1f

Ran tool Quartz ํ”„๋กœ์ ํŠธ์—์„œ taxonomy ๊ด€๋ จ ํŒŒ์ผ์„ ์ฐพ์•„๋ด…์‹œ๋‹ค. ๋จผ์ € quartz ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด๋ถ€๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Ran tool Quartz ํ”„๋กœ์ ํŠธ์—์„œ taxonomy๋‚˜ ์นดํ…Œ๊ณ ๋ฆฌ ๊ด€๋ จ ๊ธฐ๋Šฅ์„ ์ฐพ๊ธฐ ์œ„ํ•ด ๋” ๊นŠ์ด ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ํ™•์ธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Ran tool transformers ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— taxonomy๋‚˜ ์นดํ…Œ๊ณ ๋ฆฌ ๊ด€๋ จ ๊ธฐ๋Šฅ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Ran tool frontmatter.ts ํŒŒ์ผ์ด taxonomy ๊ด€๋ จ ๊ธฐ๋Šฅ์„ ๋‹ค๋ฃฐ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ™•์ธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Read file: quartz/plugins/transformers/frontmatter.ts ์ด์ œ ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ ํŒŒ์ผ์ธ quartz.config.ts ํŒŒ์ผ์„ ํ™•์ธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Read file: quartz.config.ts ์ด์ œ ํƒœ๊ทธ ๊ด€๋ จ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ดํŽด๋ด…์‹œ๋‹ค. ํƒœ๊ทธ์™€ ์นดํ…Œ๊ณ ๋ฆฌ๋Š” ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ ์ด ๋ถ€๋ถ„์„ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Ran tool ํƒœ๊ทธ ํŽ˜์ด์ง€ ๊ตฌํ˜„์„ ํ™•์ธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Read file: /home/junghan/git/notes/quartz/plugins/emitters/tagPage.tsx ์ด์ œ TagContent ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ดํŽด๋ด…์‹œ๋‹ค.

Ran tool TagContent ์ปดํฌ๋„ŒํŠธ ๋‚ด์šฉ์„ ํ™•์ธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Read file: /home/junghan/git/notes/quartz/components/pages/TagContent.tsx Quartz ํ”„๋กœ์ ํŠธ์— ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๋ถ€๋ถ„์„ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š”์ง€ ํŒŒ์•…ํ–ˆ์Šต๋‹ˆ๋‹ค. ํƒœ๊ทธ์™€ ์œ ์‚ฌํ•œ ๋ฐฉ์‹์œผ๋กœ ์นดํ…Œ๊ณ ๋ฆฌ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ ๋‹จ๊ณ„๋กœ ์ง„ํ–‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค:

  1. frontmatter.ts์— ์นดํ…Œ๊ณ ๋ฆฌ ๊ด€๋ จ ์ฝ”๋“œ ์ถ”๊ฐ€
  2. ์นดํ…Œ๊ณ ๋ฆฌ ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ ๋งŒ๋“ค๊ธฐ (TagPage์™€ ์œ ์‚ฌํ•˜๊ฒŒ)
  3. quartz.config.ts์— ์นดํ…Œ๊ณ ๋ฆฌ ํŽ˜์ด์ง€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ถ”๊ฐ€

๋จผ์ € frontmatter.ts๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ์นดํ…Œ๊ณ ๋ฆฌ ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค:

// ... existing code ...
const tags = coerceToArray(coalesceAliases(data, ["tags", "tag"]))
if (tags) data.tags = [...new Set(tags.map((tag: string) => slugTag(tag)))]
 
const categories = coerceToArray(coalesceAliases(data, ["categories", "category"]))
if (categories) data.categories = [...new Set(categories.map((category: string) => slugTag(category)))]
 
const aliases = coerceToArray(coalesceAliases(data, ["aliases", "alias"]))
// ... existing code ...
 
// ... existing code ...
declare module "vfile" {
  interface DataMap {
    aliases: FullSlug[]
    frontmatter: { [key: string]: unknown } & {
      title: string
    } & Partial<{
        tags: string[]
        categories: string[]
        aliases: string[]
        modified: string
        created: string
        published: string
        description: string
        socialDescription: string
        publish: boolean | string
        draft: boolean | string
        lang: string
        enableToc: string
        cssclasses: string[]
        socialImage: string
        comments: boolean | string
      }>
  }
}
// ... existing code ...

์ด์ œ CategoryPage.tsx ํŒŒ์ผ์„ ๋งŒ๋“ค๊ฒ ์Šต๋‹ˆ๋‹ค. TagPage.tsx๋ฅผ ๋ณต์‚ฌํ•˜๊ณ  ์ˆ˜์ •ํ•˜์—ฌ ์นดํ…Œ๊ณ ๋ฆฌ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค๊ฒ ์Šต๋‹ˆ๋‹ค.

Read file: /home/junghan/git/notes/quartz/plugins/emitters/tagPage.tsx ์ด์ œ CategoryContent.tsx ํŒŒ์ผ์„ ๋งŒ๋“ค๊ฒ ์Šต๋‹ˆ๋‹ค:

Read file: /home/junghan/git/notes/quartz/components/pages/TagContent.tsx ์ด์ œ CategoryContent.tsx ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค:

```typescript jsx:/home/junghan/git/notes/quartz/components/pages/CategoryContent.tsx import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from โ€œ../typesโ€ import style from โ€œ../styles/listPage.scssโ€ import { PageList, SortFn } from โ€œ../PageListโ€ import { FullSlug, getAllSegmentPrefixes, resolveRelative, simplifySlug } from โ€../../util/pathโ€ import { QuartzPluginData } from โ€../../plugins/vfileโ€ import { Root } from โ€œhastโ€ import { htmlToJsx } from โ€../../util/jsxโ€ import { i18n } from โ€../../i18nโ€ import { ComponentChildren } from โ€œpreactโ€ import { concatenateResources } from โ€../../util/resourcesโ€

interface CategoryContentOptions { sort?: SortFn numPages: number }

const defaultOptions: CategoryContentOptions = { numPages: 10, }

export default ((opts?: Partial) => { const options: CategoryContentOptions = { โ€ฆdefaultOptions, โ€ฆopts }

const CategoryContent: QuartzComponent = (props: QuartzComponentProps) => { const { tree, fileData, allFiles, cfg } = props const slug = fileData.slug

if (!(slug?.startsWith("categories/") || slug === "categories")) {
  throw new Error(`Component "CategoryContent" tried to render a non-category page: ${slug}`)
}
 
const category = simplifySlug(slug.slice("categories/".length) as FullSlug)
const allPagesWithCategory = (category: string) =>
  allFiles.filter((file) =>
    (file.frontmatter?.categories ?? []).flatMap(getAllSegmentPrefixes).includes(category),
  )
 
const content = (
  (tree as Root).children.length === 0
    ? fileData.description
    : htmlToJsx(fileData.filePath!, tree)
) as ComponentChildren
const cssClasses: string[] = fileData.frontmatter?.cssclasses ?? []
const classes = cssClasses.join(" ")
if (category === "/") {
  const categories = [
    ...new Set(
      allFiles.flatMap((data) => data.frontmatter?.categories ?? []).flatMap(getAllSegmentPrefixes),
    ),
  ].sort((a, b) => a.localeCompare(b))
  const categoryItemMap: Map<string, QuartzPluginData[]> = new Map()
  for (const category of categories) {
    categoryItemMap.set(category, allPagesWithCategory(category))
  }
  return (
    <div class="popover-hint">
      <article class={classes}>
        <p>{content}</p>
      </article>
      <p>{i18n(cfg.locale).pages.tagContent.totalTags({ count: categories.length })}</p>
      <div>
        {categories.map((category) => {
          const pages = categoryItemMap.get(category)!
          const listProps = {
            ...props,
            allFiles: pages,
          }
 
          const contentPage = allFiles.filter((file) => file.slug === `categories/${category}`).at(0)
 
          const root = contentPage?.htmlAst
          const content =
            !root || root?.children.length === 0
              ? contentPage?.description
              : htmlToJsx(contentPage.filePath!, root)
 
          const categoryListingPage = `/categories/${category}` as FullSlug
          const href = resolveRelative(fileData.slug!, categoryListingPage)
 
          return (
            <div>
              <h2>
                <a class="internal category-link" href={href}>
                  {category}
                </a>
              </h2>
              {content && <p>{content}</p>}
              <div class="page-listing">
                <p>
                  {i18n(cfg.locale).pages.tagContent.itemsUnderTag({ count: pages.length })}
                  {pages.length > options.numPages && (
                    <>
                      {" "}
                      <span>
                        {i18n(cfg.locale).pages.tagContent.showingFirst({
                          count: options.numPages,
                        })}
                      </span>
                    </>
                  )}
                </p>
                <PageList limit={options.numPages} {...listProps} sort={options?.sort} />
              </div>
            </div>
          )
        })}
      </div>
    </div>
  )
} else {
  const pages = allPagesWithCategory(category)
  const listProps = {
    ...props,
    allFiles: pages,
  }
 
  return (
    <div class={classes}>
      <article class="popover-hint">{content}</article>
      <div class="page-listing">
        <p>{i18n(cfg.locale).pages.tagContent.itemsUnderTag({ count: pages.length })}</p>
        <div>
          <PageList {...listProps} sort={options?.sort} />
        </div>
      </div>
    </div>
  )
}

}

CategoryContent.css = concatenateResources(style, PageList.css) return CategoryContent }) satisfies QuartzComponentConstructor

์ด์ œ categoryPage.tsx ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค:
 
```typescript jsx:/home/junghan/git/notes/quartz/plugins/emitters/categoryPage.tsx
import { QuartzEmitterPlugin } from "../types"
import { QuartzComponentProps } from "../../components/types"
import HeaderConstructor from "../../components/Header"
import BodyConstructor from "../../components/Body"
import { pageResources, renderPage } from "../../components/renderPage"
import { ProcessedContent, QuartzPluginData, defaultProcessedContent } from "../vfile"
import { FullPageLayout } from "../../cfg"
import { FullSlug, getAllSegmentPrefixes, joinSegments, pathToRoot } from "../../util/path"
import { defaultListPageLayout, sharedPageComponents } from "../../../quartz.layout"
import { CategoryContent } from "../../components"
import { write } from "./helpers"
import { i18n, TRANSLATIONS } from "../../i18n"
import { BuildCtx } from "../../util/ctx"
import { StaticResources } from "../../util/resources"
 
interface CategoryPageOptions extends FullPageLayout {
  sort?: (f1: QuartzPluginData, f2: QuartzPluginData) => number
}
 
function computeCategoryInfo(
  allFiles: QuartzPluginData[],
  content: ProcessedContent[],
  locale: keyof typeof TRANSLATIONS,
): [Set<string>, Record<string, ProcessedContent>] {
  const categories: Set<string> = new Set(
    allFiles.flatMap((data) => data.frontmatter?.categories ?? []).flatMap(getAllSegmentPrefixes),
  )
 
  // add base category
  categories.add("index")
 
  const categoryDescriptions: Record<string, ProcessedContent> = Object.fromEntries(
    [...categories].map((category) => {
      const title =
        category === "index"
          ? i18n(locale).pages.tagContent.tagIndex.replace("Tags", "Categories")
          : `${i18n(locale).pages.tagContent.tag.replace("Tag", "Category")}: ${category}`
      return [
        category,
        defaultProcessedContent({
          slug: joinSegments("categories", category) as FullSlug,
          frontmatter: { title, categories: [] },
        }),
      ]
    }),
  )
 
  // Update with actual content if available
  for (const [tree, file] of content) {
    const slug = file.data.slug!
    if (slug.startsWith("categories/")) {
      const category = slug.slice("categories/".length)
      if (categories.has(category)) {
        categoryDescriptions[category] = [tree, file]
        if (file.data.frontmatter?.title === category) {
          file.data.frontmatter.title = `${i18n(locale).pages.tagContent.tag.replace("Tag", "Category")}: ${category}`
        }
      }
    }
  }
 
  return [categories, categoryDescriptions]
}
 
async function processCategoryPage(
  ctx: BuildCtx,
  category: string,
  categoryContent: ProcessedContent,
  allFiles: QuartzPluginData[],
  opts: FullPageLayout,
  resources: StaticResources,
) {
  const slug = joinSegments("categories", category) as FullSlug
  const [tree, file] = categoryContent
  const cfg = ctx.cfg.configuration
  const externalResources = pageResources(pathToRoot(slug), resources)
  const componentData: QuartzComponentProps = {
    ctx,
    fileData: file.data,
    externalResources,
    cfg,
    children: [],
    tree,
    allFiles,
  }
 
  const content = renderPage(cfg, slug, componentData, opts, externalResources)
  return write({
    ctx,
    content,
    slug: file.data.slug!,
    ext: ".html",
  })
}
 
export const CategoryPage: QuartzEmitterPlugin<Partial<CategoryPageOptions>> = (userOpts) => {
  const opts: FullPageLayout = {
    ...sharedPageComponents,
    ...defaultListPageLayout,
    pageBody: CategoryContent({ sort: userOpts?.sort }),
    ...userOpts,
  }
 
  const { head: Head, header, beforeBody, pageBody, afterBody, left, right, footer: Footer } = opts
  const Header = HeaderConstructor()
  const Body = BodyConstructor()
 
  return {
    name: "CategoryPage",
    getQuartzComponents() {
      return [
        Head,
        Header,
        Body,
        ...header,
        ...beforeBody,
        pageBody,
        ...afterBody,
        ...left,
        ...right,
        Footer,
      ]
    },
    async *emit(ctx, content, resources) {
      const allFiles = content.map((c) => c[1].data)
      const cfg = ctx.cfg.configuration
      const [categories, categoryDescriptions] = computeCategoryInfo(allFiles, content, cfg.locale)
 
      for (const category of categories) {
        yield processCategoryPage(ctx, category, categoryDescriptions[category], allFiles, opts, resources)
      }
    },
    async *partialEmit(ctx, content, resources, changeEvents) {
      const allFiles = content.map((c) => c[1].data)
      const cfg = ctx.cfg.configuration
 
      // Find all categories that need to be updated based on changed files
      const affectedCategories: Set<string> = new Set()
      for (const changeEvent of changeEvents) {
        if (!changeEvent.file) continue
        const slug = changeEvent.file.data.slug!
 
        // If it's a category page itself that changed
        if (slug.startsWith("categories/")) {
          const category = slug.slice("categories/".length)
          affectedCategories.add(category)
        }
 
        // If a file with categories changed, we need to update those category pages
        const fileCategories = changeEvent.file.data.frontmatter?.categories ?? []
        fileCategories.flatMap(getAllSegmentPrefixes).forEach((category) => affectedCategories.add(category))
 
        // Always update the index category page if any file changes
        affectedCategories.add("index")
      }
 
      // If there are affected categories, rebuild their pages
      if (affectedCategories.size > 0) {
        // We still need to compute all categories because category pages show all categories
        const [_categories, categoryDescriptions] = computeCategoryInfo(allFiles, content, cfg.locale)
 
        for (const category of affectedCategories) {
          if (categoryDescriptions[category]) {
            yield processCategoryPage(ctx, category, categoryDescriptions[category], allFiles, opts, resources)
          }
        }
      }
    },
  }
}

components/index.ts ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜์—ฌ CategoryContent๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

Ran tool

Read file: /home/junghan/git/notes/quartz/components/index.ts ์ด์ œ CategoryContent๋ฅผ components/index.ts์— ์ถ”๊ฐ€ํ•ฉ์‹œ๋‹ค:

import Content from "./pages/Content"
import TagContent from "./pages/TagContent"
import CategoryContent from "./pages/CategoryContent"
import FolderContent from "./pages/FolderContent"
// ... existing code ...
 
export {
  ArticleTitle,
  Content,
  TagContent,
  CategoryContent,
  FolderContent,
  // ... existing code ...
}

๋งˆ์ง€๋ง‰์œผ๋กœ quartz.config.ts ํŒŒ์ผ์— CategoryPage ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

// ... existing code ...
    emitters: [
      Plugin.AliasRedirects(),
      Plugin.ComponentResources(),
      Plugin.ContentPage(),
      Plugin.FolderPage(),
      Plugin.TagPage(),
      Plugin.CategoryPage(),
      Plugin.ContentIndex({
        enableSiteMap: true,
        enableRSS: true,
      }),
      // ... existing code ...

plugins/index.ts ํŒŒ์ผ์— CategoryPage๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

Read file: /home/junghan/git/notes/quartz/plugins/index.ts ์ด์ œ plugins/emitters/index.ts ํŒŒ์ผ์„ ํ™•์ธํ•˜๊ณ  CategoryPage๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

Read file: /home/junghan/git/notes/quartz/plugins/emitters/index.ts CategoryPage๋ฅผ plugins/emitters/index.ts์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค:

export { ContentPage } from "./contentPage"
export { TagPage } from "./tagPage"
export { CategoryPage } from "./categoryPage"
export { FolderPage } from "./folderPage"
// ... existing code ...

quartz.config.ts์˜ generateSocialImages ์—๋Ÿฌ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค:

Ran tool

Read file: /home/junghan/git/notes/quartz/cfg.ts GlobalConfiguration์— generateSocialImages ํ•„๋“œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ๋ถ€๋ถ„์„ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

// ... existing code ...
    ignorePatterns: ["private", "temp", "templates", ".obsidian"],
    defaultDateType: "created",
    // ์ฃผ์„ ์ฒ˜๋ฆฌํ•˜์—ฌ ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ  ์—๋Ÿฌ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค
    // generateSocialImages: false,
    theme: {
      // ... existing code ...

ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค! ์ด์ œ ๋ชจ๋“  ํ•„์š”ํ•œ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ์ •๋ฆฌํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค:

  1. frontmatter.ts์— categories ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  2. CategoryContent.tsx ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.
  3. CategoryPage.tsx emitter๋ฅผ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.
  4. components/index.ts ํŒŒ์ผ์— CategoryContent๋ฅผ ๋“ฑ๋กํ–ˆ์Šต๋‹ˆ๋‹ค.
  5. plugins/emitters/index.ts ํŒŒ์ผ์— CategoryPage๋ฅผ ๋“ฑ๋กํ–ˆ์Šต๋‹ˆ๋‹ค.
  6. quartz.config.ts ํŒŒ์ผ์— CategoryPage ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ ๋งˆํฌ๋‹ค์šด ํŒŒ์ผ์˜ frontmatter์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

---
title: ๋ฌธ์„œ ์ œ๋ชฉ
categories: [์นดํ…Œ๊ณ ๋ฆฌ1, ์นดํ…Œ๊ณ ๋ฆฌ2]
---
 
๋ฌธ์„œ ๋‚ด์šฉ...

๋˜ํ•œ categories ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๊ฐœ๋ณ„ ์นดํ…Œ๊ณ ๋ฆฌ์— ๋Œ€ํ•œ ์„ค๋ช… ํŽ˜์ด์ง€๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค:

mkdir -p content/categories

10:20 ์•„๋‚ด ๋“ฑ์žฅ

11:10 ๋™๋„ค ๋นฝ๋‹ค๋ฐฉ ์ฒดํฌ์ธ 3์‹œ๊ฐ„ ๋”ฅ์›Œํฌ

์•„์ด๋”๋งฅ์Šค๋กœ ๊ฐ€์ž.

13:51 ์ง‘์—๊ฐ€์ž - RAG ์‹คํŒจ - hy ์ด์ƒํ•ด

15:00 ๋ฐ”๋ก  ํƒ€์ด๊ฑฐ ์˜์–ด๊นŒํŽ˜ - ์ž์ „๊ฑฐ ํƒ€๊ณ  ๋ฐ๋ฆฌ๊ณ  ์˜ด 3์‹œ๊ฐ„ ๋”ฅ์›Œํฌ

17:23 conda ์“ธ๊ฑฐ์•ผ.

#ํŒŒ์ด์ฌ: #ํ™œ์šฉ๋ฒ•: ๋ฏธ๋‹ˆ์ฝ˜๋‹ค::์ฝ˜๋‹ค์—์„œ ํ•„์š”ํ•œ ํŒจํ‚ค์ง€ ์„ค์น˜ ์„ค์น˜ํ•ด์ค˜

17:31 pip install hy ํŽธํ•˜๊ฒŒ

โžœ pip3 install --user hy
Collecting hy
  Using cached hy-1.0.0-py3-none-any.whl
Collecting funcparserlib~=1.0 (from hy)
  Using cached funcparserlib-1.0.1-py2.py3-none-any.whl.metadata (7.1 kB)
Using cached funcparserlib-1.0.1-py2.py3-none-any.whl (17 kB)
Installing collected packages: funcparserlib, hy
Successfully installed funcparserlib-1.0.1 hy-1.0.0
(base) ~ via ๎œ˜ v20.14.0 via ๐Ÿ v3.12.9 on โ˜๏ธ  gtgkjh@gmail.com
โžœ whereis pip3
pip3: /usr/bin/pip3 /home/junghan/miniconda3/bin/pip3 /home/junghan/.local/bin/pip3 /usr/share/man/man1/pip3.1.gz
(base) ~ via ๎œ˜ v20.14.0 via ๐Ÿ v3.12.9 on โ˜๏ธ  gtgkjh@gmail.com
 

conda install hy ์•ˆ๋œ๋‹ค.

โžœ conda install hy
Retrieving notices: done
Channels:
 - conda-forge
 - defaults
Platform: linux-64
Collecting package metadata (repodata.json): done
Solving environment: failed
 
LibMambaUnsatisfiableError: Encountered problems while solving:
  - package hy-0.19.0-py38h32f6830_0 requires python >=3.8,<3.9.0a0, but none of the providers can be installed
 
Could not solve for environment specs
The following packages are incompatible
โ”œโ”€ hy =* * is installable with the potential options
โ”‚  โ”œโ”€ hy 0.12.1 would require
โ”‚  โ”‚  โ””โ”€ python =2.7 *, which can be installed;
โ”‚  โ”œโ”€ hy 0.12.1 would require
โ”‚  โ”‚  โ””โ”€ python =3.5 *, which can be installed;
โ”‚  โ”œโ”€ hy 0.12.1 would require
โ”‚  โ”‚  โ””โ”€ python =3.6 *, which can be installed;
โ”‚  โ”œโ”€ hy [0.18.0|0.19.0|0.20.0] would require
โ”‚  โ”‚  โ””โ”€ python >=3.6,<3.7.0a0 *, which can be installed;
โ”‚  โ”œโ”€ hy [0.18.0|0.19.0|0.20.0] would require
โ”‚  โ”‚  โ””โ”€ python >=3.7,<3.8.0a0 *, which can be installed;
โ”‚  โ”œโ”€ hy [0.19.0|0.20.0] would require
โ”‚  โ”‚  โ””โ”€ python >=3.8,<3.9.0a0 *, which can be installed;
โ”‚  โ””โ”€ hy [0.19.0|0.20.0] would require
โ”‚     โ””โ”€ python >=3.9,<3.10.0a0 *, which can be installed;
โ””โ”€ pin on python 3.12.* =* * is not installable because it requires
   โ””โ”€ python =3.12 *, which conflicts with any installable versions previously reported.
 
Pins seem to be involved in the conflict. Currently pinned specs:
 - python=3.12
 

#LLM: hyrule ์„ค์น˜ ํ•˜์ด๋žญ ํ”Œ๋Ÿฌ๊ทธ์ธ ์•„๋ฌดํŠผ ์„ค์น˜ํ•ด์„œ ํ–ˆ๋‹ค.

17:39 ๋ฐ”๋ก ์ด ํ”ฝ์—… -> ์ž์ „๊ฑฐ ํƒœ์›Œ์„œ ํ•จ๊ป˜ ๊ฑธ์–ด ์ง‘์œผ๋กœ

19:12 ์ง‘์—์„œ ์•„๋‚ด ๋ฐ”๋ก ์ด์™€ ์ €๋… ์‹์‚ฌ

21:16 ํ‰ํ™”๋กœ์šด ์ €๋… ๋งˆ๋ฌด๋ฆฌ -> ์˜์–ด๊ธ€๋„ ์˜ฌ๋ฆฌ์ž. ๋ฒˆ๊ฑฐ๋กญ์ง€ ์•Š์€ ์ˆ˜์ค€์—์„œ

21:31 py2hy - ์ด๊ฑฐ ํ™•์ธํ•ด๋ผ

#LLM: ํŒŒ์ด์ฌ ๋ชจ๋“ˆ ์„ค์น˜ ์ „์—ญ ํ™œ์šฉ๋ฒ• ์ด๊ฑธ ์ค€๋น„ํ–ˆ๋‹ค.

print("Hello, World!")

์ด๋ ‡๊ฒŒ ๋œ๋‹ค.

~/git/clone/py2hy master ?1 via ๐Ÿ v3.12.9 on โ˜๏ธ  gtgkjh@gmail.com
โžœ python -m py2hy hello.py
(print "Hello, World!")
~/git/clone/py2hy master ?1 via ๐Ÿ v3.12.9 on โ˜๏ธ  gtgkjh@gmail.com

21:43 ์ž”๋‹ค. ์ •๋ง. ์ซ€์ซ€ํ•˜๊ฒŒ ํ•˜๋ฃจ ๋ณด๋ƒˆ๋‹ค.

2025-03-30 Sun

03:15 ๊ตณ๋ชจ๋‹? ์–ดํ—ˆ. ์ด๋ฅธ๊ฐ€ - ์นธ๋ฏธ๊ณ ? ์ด๋ฏธ๊ณ ?

03:26 ์Šคํ…Œ์ดํŠ  ์ด๊ฑฐ ๊ธ€๊ฐ์ด๋‹ค ์ด๋ฏธ๊ณ 

(Zeng [2025] 2025) ์—ญ์‹œ ๋Œ€๋‹จํ•˜๊ตฌ๋งŒ

jwalsh/hy-algorithms: Algorithms and data structures implemented in Hy, a Lisp dialect for Python

(Jason Walsh 2025)

์ด๊ฒŒ ๋ญ์•ผ!!

04:56 ์—ด์ด ์˜ฌ๋ผ์˜จ๋‹ค

05:19 ์ž ์‹œ ์‰ฌ์ž

junghan0611/dotemacs - README

(Han [2025] 2025)

  • Han, Jung

  • dotemacs - doomemacs / spacemacs

  • 2025

>

08:46 API ์žฌ๋ฐœ๊ธ‰

10:36 ์•„์นจ ์‹์‚ฌ

10:55 ๋ฐ”๋ก 

11:43 ๋ฐ”๋ก ์ด ์•„๋‚ด ์‡ผํ•‘ - ์ด์ฒœ ๋กฏ๋ฐ์•„์šธ๋ ›

18:24 ์ง‘ ๋„์ฐฉ

21:49 ์•„ ๊ณ ๋œํ•˜๋ฃจ. ์ž์ž. ๊ทผ๋ฐ 1์ฃผ์ผ ์ •๋ฆฌํ•˜๋ ค๋ฉด ์—„์ฒญ ํ• ๊ฒŒ ๋งŽ์„๋“ฏ