Juntai Park

@arkjun@hackers.pub · 65 following · 71 followers

中年(중년)中小企業(중소기업) 開發者(개발자), 90年代(년대) Console Gamer(콘솔 게이머). 좋은 하루를 繼續(계속)해 나아간다. 좋은 하루가 모이면 좋은 人生(인생)이 된다.

韓国人のプログラマー、40代、小学生の息子とゲームするのが幸せ😃💕龍が如く 、ゼルダの伝説、マリオ、ピクミン好き

「いい1日を続ける」
いい1日を続けていけば、いい人生になる!

threads
@rkjun
x
@rkJun
uri.life
@arkjun@uri.life
GitHub
@arkjun
5

어제 튜링의 사과를 처음 구경했습니다. 귀인들 만나느라 이용은 안하고 구경만. 조금 과장해서 얘기하면, 다른 공유 오피스와는 다르게 PC방에 개발자 모인 것 같은 느낌이었습니다. 다른 오피스들처럼 조용하고, 조금은 생기 없는 풍경이 아니라, 상대적으로 소음도 좀 있고, 활기가 있어 보여 의외였습니다. 장소 오너분들도 개발자로 알고 있는데, 개발자 이해도가 높은 게, 영향이 있는 것 아닐까요?

(삶에 찌든 사람들 모인 PC방 말고, 젊은이들이 즐겁게 노는 모습의 PC방입니다.)

1

@kkungMinyoung Jeong 글 읽을 때의 번역은 여러 브라우저 확장으로 잘 쓰고 있었는데, 글쓰기를 이렇게 쉽고 편하게, 좋은 퀄리티로 다른 언어로 변환하니, 저에게는 정말 신세계네요! 감사합니다. 😂 (내친김에 일본어용도 살짝 바꿔서 아주 유용하게 쓰고 있습니다.)

0

일전에 @kkungMinyoung Jeong 님께서 올려주신 Vibe Writing 글에, 숟가락을 얹어보았습니다. HammerSpoon 에서 쓰는 lua 코드에서 OpenRouter 의 google/gemini-2.0-flash-001 모델로 살짝 수정했습니다.

  • config, payload, 응답부 변경

바로바로 한영, 영한 변환하니까, 너무 편하고 좋네요. 다른 언어도 추가하고 그외 다른 활용 요소들도 생각 나서, 앞으로도 이것저것 만져볼 것 같네요.

local config = {
  open_router_api_key = "sk-...",
  open_router_api_url = "https://openrouter.ai/api/v1/chat/completions",
  model = "google/gemini-2.0-flash-001",
}

local function callOpenRouter(text, callback)
  if not config.open_router_api_key or config.open_router_api_key ~= "sk-..." then
    hs.alert.show("Config error: Please set your open_router_api_key in modules/ko-en.lua")
    return
  end

  local instruction = "입력된 문장이 영어일 경우 한국어로, 한국어일 경우 영어로 변환해줘. 의미를 모국어 사용자가 자연스럽게 받아들일 수 있게 정확하고 유창하게 전달하고, 불필요한 문장을 생략하여 명료하게 작성해. 번역어 외의 다른 문장을 추가하지 말고 번역 그 자체만 반환해."

  local payload = {
    model = config.model,
    messages = {
      {role = "assistant", content = instruction},
      {role = "user", content = text}
    },
    max_tokens = 4096,
    stream = false
  }

  local request_body = hs.json.encode(payload)

  local headers = {
    ["Content-Type"] = "application/json",
    ["Authorization"] = "Bearer " .. config.open_router_api_key,
    ["HTTP-Referer"] = "https://hammerspoon.ai",
    ["X-Title"] = "Hammerspoon Translator"
  }

  hs.http.asyncPost(config.open_router_api_url, request_body, headers, function(status, response, _)
    if status == 200 then
      local success, data = pcall(hs.json.decode, response)
      if success and data.choices and #data.choices > 0 and data.choices[1].message and data.choices[1].message.content then
        local translated = data.choices[1].message.content
        print("TR: " .. translated)
        callback(translated)
      else
        local error_message = "API call failed. Response: " .. hs.inspect(data)
        print(error_message)
        hs.alert.show(error_message)
        callback(nil)
      end
    else
      local error_message = "HTTP request failed. Status: " .. status .. ", Response: " .. response
      print(error_message)
      hs.alert.show(error_message)
      callback(nil)
    end
  end)
end
3

Juntai Park replied to the below article:

Vibe Writing

Minyoung Jeong @kkung@hackers.pub

Hammerspoon과 OpenAI API를 활용하여 맥에서 선택한 텍스트를 즉시 번역하는 스크립트를 소개합니다. 이 스크립트는 Cmd+Shift+K 단축키를 통해 선택된 텍스트를 OpenAI의 GPT-4o 모델을 사용하여 한-영 또는 영-한 번역을 수행하고, 번역된 텍스트로 선택 영역을 자동으로 대체합니다. Accessibility API를 활용하여 텍스트 선택 및 대체 과정을 자동화했으며, OpenAI API를 호출하여 고품질 번역을 제공합니다. Vibe coding을 통해 개발하려 했으나, API 문제로 직접 구현했으며, 이 스크립트를 통해 영문 작성 시 번거로움을 줄이고 생산성을 향상시킬 수 있습니다.

Read more →
4
1

Juntai Park shared the below article:

Vibe Writing

Minyoung Jeong @kkung@hackers.pub

Hammerspoon과 OpenAI API를 활용하여 맥에서 선택한 텍스트를 즉시 번역하는 스크립트를 소개합니다. 이 스크립트는 Cmd+Shift+K 단축키를 통해 선택된 텍스트를 OpenAI의 GPT-4o 모델을 사용하여 한-영 또는 영-한 번역을 수행하고, 번역된 텍스트로 선택 영역을 자동으로 대체합니다. Accessibility API를 활용하여 텍스트 선택 및 대체 과정을 자동화했으며, OpenAI API를 호출하여 고품질 번역을 제공합니다. Vibe coding을 통해 개발하려 했으나, API 문제로 직접 구현했으며, 이 스크립트를 통해 영문 작성 시 번거로움을 줄이고 생산성을 향상시킬 수 있습니다.

Read more →
4

Juntai Park shared the below article:

OX 테스트 당신은 책중독자인가?

박준규 @curry@hackers.pub

이 글은 톰 라비의 《어느 책중독자의 고백》을 인용하여 독자가 스스로를 "책중독자"로 진단해볼 수 있는 간단한 OX 테스트를 제공합니다. 모르고 같은 책을 두 번 산 적이 있는지, 표지 디자인만 보고 책을 구매한 적이 있는지 등 10가지 질문을 통해 독자 스스로가 책에 대한 애정을 어느 정도 가지고 있는지 되돌아보게 합니다. 이 테스트는 가벼운 마음으로 자신의 독서 습관을 재미있게 평가해보고, 책에 대한 애정을 다시 한번 확인하는 계기를 마련해줍니다.

Read more →
5
1
1
1

아 9월부터 강의를 합니다 (교수가 되었습니다). 무슨 과목을 맡게될지는 모르겠지만 꿈에 그리던 기깔난... 마치 IoT로 도배된 집과도 같은 강의를 해보겠습니다 기대해주세요. 그리고 언젠가 이 경험들이 쌓여서 파이콘에서라도 발표하면 좋겠네요.

0

아 9월부터 강의를 합니다 (교수가 되었습니다). 무슨 과목을 맡게될지는 모르겠지만 꿈에 그리던 기깔난... 마치 IoT로 도배된 집과도 같은 강의를 해보겠습니다 기대해주세요. 그리고 언젠가 이 경험들이 쌓여서 파이콘에서라도 발표하면 좋겠네요.

14

Juntai Park shared the below article:

How to pass the invisible

洪 民憙 (Hong Minhee) @hongminhee@hackers.pub

This post explores the enduring challenge in software programming of how to pass invisible contextual information, such as loggers or request contexts, through applications without cumbersome explicit parameter passing. It examines various approaches throughout history, including dynamic scoping, aspect-oriented programming (AOP), context variables, monads, and effect systems. Each method offers a unique solution, from the simplicity of dynamic scoping in early Lisp to the modularity of AOP and the type-safe encoding of effects in modern functional programming. The post highlights the trade-offs of each approach, such as the unpredictability of dynamic scoping or the complexity of monad transformers. It also touches on how context variables are used in modern asynchronous and parallel programming, as well as in UI frameworks like React. The author concludes by noting that the art of passing the invisible is an eternal theme in software programming, and this post provides valuable insights into the evolution and future directions of this critical aspect of software architecture.

Read more →
11
1
0
7
2
0
4

Juntai Park shared the below article:

VitePress localSearchPlugin 버그 디버깅하기

Lee Dogeon @moreal@hackers.pub

이 글은 Zenn 트렌드 봇 제작 중 VitePress 로컬 검색 기능의 버그를 발견하고 수정하는 과정을 담고 있습니다. Fedify 문서에서 검색 기능이 제대로 작동하지 않는 것을 확인한 후, 코드 블록 내의 특정 마크다운 문법(`markdown-it-jsr-ref` 플러그인)이 문제임을 밝혀냈습니다. VitePress의 `localSearchPlugin.ts` 파일을 분석하여, 헤딩 내의 `<a>` 태그를 처리하는 정규식의 non-greedy한 특성이 버그의 원인임을 알아내고, 정규식에서 `?` 기호를 제거하여 문제를 해결했습니다. PR을 통해 수정 사항을 제안하고 빠르게 머지된 경험을 공유하며, 디버깅 과정과 PR 준비에 대한 회고와 함께 개선점을 제시합니다. 이 글은 문제 해결 과정과 디버깅 경험을 통해 독자들에게 인사이트를 제공합니다.

Read more →
3
9

Juntai Park shared the below article:

If you're building a JavaScript library and need logging, you'll probably love LogTape

洪 民憙 (Hong Minhee) @hongminhee@hackers.pub

LogTape offers a novel approach to logging in JavaScript libraries, designed to provide diagnostic capabilities without imposing choices on users. Unlike traditional methods such as using debug packages or custom logging systems, LogTape operates on a "library-first design" where logging is transparent and only activated when configured. This eliminates the fragmentation problem of managing multiple logging systems across different libraries. With zero dependencies and support for both ESM and CommonJS, LogTape ensures minimal impact on users' projects, avoiding dependency conflicts and enabling tree shaking. Its universal runtime support and efficient performance make it suitable for various environments. By using a hierarchical category system, LogTape prevents namespace collisions, offering a seamless developer experience with TypeScript support and structured logging patterns. LogTape provides adapters for popular logging libraries like Winston and Pino, bridging the transition for users invested in other systems. Ultimately, LogTape offers a way to enhance library capabilities while respecting users' preferences and existing choices, making it a valuable consideration for library authors.

Read more →
9

실제로 Hackers' Pub은 Mac mini M4 깡통에서 돌아가는데, 아직 Asahi Linux가 M4를 지원 안 해서 macOS 안에 컨테이너 띄워서 돌리고 있어요. Asahi Linux가 M4 지원할 때까지 숨 참고 기다리는 중입니다…

2
4
7

내가 Git 쓰다가 왕대빵 커밋 똥히스토리 남기는 전형적인 패턴이다.

  1. 간단한 기능 A를 추가하려고 한다.
  2. A를 추가하려면 기존의 설계 B를 고쳐야한단걸 깨닫는다.
  3. B를 고친다.
  4. A를 추가한다.

이렇게 3, 4의 변경이 한데 들어가 있는 무근본 커밋이 탄생한다. 2 -> 3 사이에 stash를 하면 간단히 해결되는 문젠데 매번 까먹고 실천을 못한다.

5
11
16

@shiromadaraしろまだら @hongminhee洪 民憙 (Hong Minhee) 何年前か、韓国語訳で読みましたが、けっこう役に立ちました。 タイトルは就職の面接のためな本に見えますが、中身はシステムの設計について説明する本です。シリーズで第2弾も出たようですが、それはまだ読んでいませんね。

アレックス・シュウ
システム設計の面接試験
https://www.amazon.co.jp/システム設計の面接試験-アレックス・シュウ/dp/4802614063

2
1
6

요즘 '이건 잘못된 코드지만 당분간 고칠일이 없기를 기도하자'고 하며 넘어간 코드들에서 나온 버그들을 계속 고치는 중이다.

과거의 나의 정확한 안목에 뿌듯해하며 동시에 피눈물을 흘리고 있다.

8

이뿐만이 아니다. 예스24는 낙후된 시스템을 운용하는 것으로 전해진다. 단적인 예로 사이트 개발에 '닷넷 프레임워크'를 사용하고 있다. 닷넷 프레임워크는 현재는 잘 사용하지 않는 개발 언어로 윈도 서버에서만 운영 가능하기 때문에 개발자의 외면을 받고 있다.

닷넷 프레임워크는

  • 현재는 잘 사용하지 않는 -> 아님¹
  • 개발 언어로 -> 아님²
  • 윈도 서버에서만 운영 가능하기 때문에 -> 아님³
  • 개발자의 외면을 받고 있다 -> 일단 점유율은 아님¹

예를 확인 없이 내세운 기사네요 🙃

@nyeongAn Nyeong (安寧) .NET이랑 .NET Framework가 서로 다른 물건이예요. .NET은 .NET Core가 리브랜딩된 거고, 10년 전에 .NET Framework를 대체했습니다. .NET Framework는 Windows에서만 돌아가는 것도 사실이고요. .NET Core, 즉 현재의 .NET은 .NET Framework와 브랜드 측면에서는 연속성이 있지만, 기술적으로는 아예 새로 만들어진 구현입니다. 오픈 소스라는 점도 다르고요. 전반적으로 .NET Framework는 레거시 기술이 맞아요.

4

@chanjin65이찬진 님이 스레드에 올린 글 [1] 을 Hackers' Pub 에도 공유하려고 했는데, Hackers' Pub 에서 @chanjin65이찬진 님의 노트에 해당 글이 올라오지 않는다..


  1. 스레드의 페디버스 연동 기능이 개선되어, 페디버스 공유를 켜면 팔로우하는 페디버스 계정의 게시물들을 볼 수 있는 피드가 생겼고 페디버스 계정을 검색할 수 있다는 내용 ↩︎

0
1

Hackers' Pub에 로그인한 상태에서의 타임라인 구성을 조금 바꿔봤습니다. 기존의 “연합우주” 탭을 “피드”라고 수정했고, “연합우주” 탭과 “Hackers' Pub” 탭은 기본적으로 로그아웃했을 때의 “연합우주” 및 “Hackers' Pub” 탭과 동일한 타임라인이 표시되게 했습니다. 아직 팔로를 많이 하지 않은 분들에게는 “연합우주” 및 “Hackers' Pub” 타입라인이 새로운 콘텐츠를 발견하기 좋은 공간이 될 겁니다.

11
3
5

지금은 아니지만 내가 HHKB 레이아웃을 쓰고 터미널에서 이것저것 하는 것 때문에 vim 에 대해 관심을 가지는 동료들이 있었다. 가장 쉽게 적용할 수 있는 것은 예쁜 터미널 에디터였고 그 첫 후보로 nvchad 를 추천 또는 설치해주었다. https://nvchad.com/ vscode 에서 이걸로 당장 넘어오라고는 당연히 못하고 터미널에서 코드 읽어 볼 때 사용하라곤 했다. 몇몇은 vscode 에서 vim 플러그인을 설치해 사용하기 시작했다. lazyvim 과 nvchad 를 번갈아 가며 쓰고 있다. siduck 의 미감은 훌륭하다.

타이머 패널은 마우스로 드래그할 수 있다.
5

아까 멘토링 시간에, Next.js가 점점 Vercel에 종속적으로 변해가는 모습에 사용자들이 점점 이탈하지 않을까 하는 질문을 했어요. 그랬더니 아직은 걱정할 필요 없다고 3~5년은 더 갈 거라는데, 개인적으로는 아직 잘 모르겠지만 Vite같은 번들러조차도 지원하지 않는데 Deploy까지 Vercel에 모든 것을 맡겨야 한다고 하면... 눈에 보이는 사용자 이탈에 3년도 안 걸리지 않을까 하는 생각을 조심스럽게 하고 있어요.

4

종종 일 앞에 사람이 있다는 점을 간과하는 발언을 들을 때가 있다. 사람을 소울리스 코딩머신으로 취급한다거나, 부서의 상황을 배제하고 일만을 고려하는 의견들. 어느 정도는 일리가 있겠으나 성공적인 의사소통으로 평가하긴 어렵다.

3
2
6
2
7
9

Juntai Park shared the below article:

미리알림을 이용한 생활 루틴 자동화

제이미 @theeluwin@hackers.pub

이 글은 아이폰의 '미리알림' 앱을 활용하여 일상 및 업무 루틴을 자동화하는 방법을 소개합니다. ADHD 성향을 가진 저자는 주기적으로 해야 하는 일들을 잊지 않기 위해 '미리알림'을 통해 알림을 받고, 이를 통해 뇌의 인지 자원을 절약하고 효율성을 높입니다. 작업을 세분화하고, 완료 후 즉시 체크하는 방식을 통해 미루는 습관을 개선하고, 새로운 습관을 형성하는 데 도움을 받습니다. 또한, '미리알림'을 자주 확인하는 습관을 통해 중요한 일들을 잊지 않도록 관리하며, '구글 캘린더'와 일기장을 병행하여 전체적인 일정 관리와 자기 성찰을 돕습니다. 이 시스템은 루틴 관리를 자동화하고, 새로운 습관을 쉽게 만들 수 있도록 도와주는 유용한 방법입니다.

Read more →
5