Hi, I'm who's behind Fedify, Hollo, BotKit, and this website, Hackers' Pub!

Fedify, Hollo, BotKit, 그리고 보고 계신 이 사이트 Hackers' Pub을 만들고 있습니다.

FedifyHolloBotKit、そしてこのサイト、Hackers' Pubを作っています。

嗨,我是 FedifyHolloBotKit 以及這個網站 Hackers' Pub 的開發者!

Website
hongminhee.org
GitHub
@dahlia
Hollo
@hongminhee@hollo.social
DEV
@hongminhee
velog
@hongminhee
Qiita
@hongminhee
Zenn
@hongminhee
Matrix
@hongminhee:matrix.org
X
@hongminhee

Minisforum AI X1 Pro 배송받아 생애 첫 96GB PC 구동에 들어가나 했는데, Wi-fi 이슈로 시작부터 난항입니다. Reddit 게시물들을 뒤져보니 Mediatek 무슨 무슨 와이파이 모듈이 AMD CPU에서 이상하리만치 안 된다, 그러니 무슨 슬롯에 꽂혀 있는 Wifi 카드를 바꿔라... 이런 내용이 많네요.

(Windows 11 에서 블루스크린 보는 진귀한 경험을 했습니다, 덕분에...)

단순히 드라이버 업데이트만 해 주면 되는 문제가 아닌 모양입니다. 어쩐다...

그나저나 원래 이 녀석을 구매했던 이유는 eGPU - oculink 때문이었는데요. 창고 어느 구석에 있는 RTX2080ti 를 평소에 일 좀 시키려는 생각이었는데. 정작 '어느 창고'에 넣어뒀는지를 잊어서 난감하군요.

ps. Reddit 에 구글 로그인으로 계정을 만들면 30일 이내에 유저네임을 변경해야 하고, 시간을 놓치면 계정삭제 후 재생성만이 답이라는 것을... 이번 기회에 알게 되었습니다.

4
1
1

Ghostty's sprite renderer got a major refactor by our font maintainer (Qwerasd). We now support more sprites and they line up perfectly on cell edges. Additionally, our sprites now pack more efficiently on the GPU to save some VRAM. Comparison between terminals as an example.

Ghostty's always had a built-in sprite renderer (actually, rasterizer). The job of the rasterizer is to generate pixel-perfect sprites dynamically for a given grid size.

Practically, this results in much more aesthetically pleasing shell prompts, powerline bars, etc. And things like circles that line up perfectly make for better TUIs.

Some additional amazing background: the rasterizer uses a 2D graphics library written in Zig specifically for Ghostty by a community member (but generalized: github.com/vancluever/z2d). And while I wrote the initial rasterizer, the major work since has been by our font subsystem maintainer Qwerasd who has taken it to new, incredible levels. ❤️

0
1
3
7
6

최근 한 달 동안 분석한 이슈의 결론이 물리 세계 때문이라는 결론이 나기 직전입니다. 측정값이 예상보다 오차가 훨씬 크게 날 수 있다 + 랜덤 생성기가 사실 충분히 랜덤이 아니었다의 환장의 콜라보... 모든 것이 예상 가능하게 돌아가는 컴퓨터 세상에서 살고 싶어요... 🤬🤬

6
1

"오늘의 해커뉴스 요약"이라고 한국어로 매일마다 해커뉴스를 한국어로 요약해서 보내주는 헤임달 프로젝트가 있었습니다. 언제부턴가 다시 다른 이름으로 부활했는데요...... 바로 요겁니다. https://every.news 좀 더 범용적인? 느낌으로 다시 부활한 것 같아요.

Thanks to @anaclumosSunghyun Cho

매일마다 해커뉴스를 요약해서 보내주는 뉴스레터는 요깄습니다 https://every.news/alerts/8XYPTZZVV7ZJ

2

오픈소스에서 아쉬운 점 발견 → 내가 기여해야지! → 혹시 모르니 issue, PR 확인해서 중복이 아닌지 체크 → 이미 해결된 문제였고 내가 사용법을 몰랐을 뿐 (그럼 접근성이 부족하니 문서라도 업데이트 할까? → 문서에도 적혀있었고 그저 내가 게을렀을 뿐)

9
1
1

RxJS의 cold observable은 처음에 배울때 많이 헷갈린다. 하지만 쓰다보면 익숙해지고 오히려 우아해‘보이는’ 코드를 짤수 있게 된다.

근데 그 우아함이 거짓 우아함이란 생각이 든다. Cold observable은 subscribe 메소드를 이펙트풀하게 만든다. 아닌게 낫지않나? 내가 아는 모든 cold observable 사용은 명시적인 함수 호출(이펙트를 발생시키는)을 하나 추가하는 것으로 피할수 있다.

보통 러닝커브가 있는 기능이 오래 존속하고 있으면 고진감래의 미덕이 있는 법인데 얘는 좀 특이한 경우인듯.

2
2

코딩 얘기

  • 어제 Claude API 연동해서, Opus 4 모델로 짤막하게 써봤는데 요청당 거의 0.4$ 정도씩 사라지는 것을 목격하고, API 는 쓰면 안되겠구나 싶었습니다. (대충 5불 순삭)
  • 코드 에이전트 역할로 Claude Code Opus 4gemini-cli gemini-2.5-pro 의 응답 결과물이 개인적으로 꽤 만족스럽네요. Claude Code 는 쓰다 보면 어느 순간 Opus 4 에서 Sonnect 4 로 바뀌어 있네요. 사용제한이 있나 싶습니다.
/status 명령으로 확인 해보면 아래 처럼 적혀 있긴 합니다.

 Model • /model
  LDefault Opus 4 for up to 20% of usage limits, then use Sonnet 4
   (currently Opus)
  • Cursor 를 여전히 쓰고 있고, Cursor Tab 은 훌륭하다고 생각하지만, 연간구독이 만료되고 나면, Cursor 를 계속 사용할지는 고민을 해봐야 할 것 같습니다. VS Code 를 써도 되고, Windsurf 같은 대안도 있고요.
  • 코드 에이전트들이 CLI 에서 동작하니 에디터와는 독립적이지만 Claude Code 는 VS Code 확장으로 (자동 설치되어) 코드 변경사항을 에디터에서 바로 볼 수 도 있어서 좋네요.

그렇게, Claude Codegemini-cli 가 화면의 일정 영역을 차지하기 시작했습니다..

Chat Mode, Claude Code, gemini-cli in Cursor.
2

jekyll 대신 pelican을 써보고 있습니다. Cursor에게 알아서 좀 짜라고 맡겨놨더니 링크가 모조리 깨지고 화면 템플릿도 제대로 안보이고 난리더라구요. 4시간동안 잡도리를 한 결과, 그냥 제가 처음부터 다시 다 짰습니다. 젠장... 암튼 pelican 쓸만 하네요. 어차피 대부분의 기능은 직접 구현해야해서, 최소한의 세팅만을 원했는데 충분히 제공하는것 같습니다. 공개할 수 있게되면 use case로써 공유해볼게요.

1
3
2
3
9
3
해킹 및 온라인 스토킹을 겪어보니, 자유롭게 글을 작성하는 것이 어렵습니다. 
사적인 연락은 메일로 부탁드립니다!
mail@leetekwoo.com

덧붙여 말씀드리자면, 저는 여러분의 프라이버시를 존중합니다.
건전한 교류에는 항상 열려있습니다. 
감사합니다~
5
4
3

Okay, so after an evening hacking session with a 4 hour blackhole of focus, I've managed to get @adonisframeworkAdonisJS Framework working together with @fedifyFedify: an ActivityPub server framework — now, this code is super rough, and definitely not reusable, but may I might make it into a package later.

For now, this is just an experimental demo:

github.com/ThisIsMissEm/adonis

A couple of things to note:

- Testing this between a local mastodon instance and a local Adonis.js server was a royal PITA, due to SSL requirements on Mastodon's side, and not being able to supply an extra certificate to trust (I was using localcan to proxy everything, but it uses a self-signed certificate and mastodon is very unhappy about that)

- Converting between the Request/Response objects that Fedify wants and what Adonis.js has was a little troublesome — it's mostly based on the express code, but modified for Adonis.js — I did have a bug where the body was incomplete for some reason.

- Changing instance URLs is a PITA because everything gets weirdly cached. Here be dragons.

- I did hit into an issue with firstKnock throwing an error, but I can't manage to reproduce it now. I think it may have been SSL related.

1

Okay, so after an evening hacking session with a 4 hour blackhole of focus, I've managed to get @adonisframeworkAdonisJS Framework working together with @fedifyFedify: an ActivityPub server framework — now, this code is super rough, and definitely not reusable, but may I might make it into a package later.

For now, this is just an experimental demo:

github.com/ThisIsMissEm/adonis

1
1
6

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

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

7

AI 시대에 개인 테스트용 프로젝트를 C++ 로 해보면 어떨까 생각해보다가, 요새는 패키지 관리가 좀 개선되었을까 싶어 (vcpkg 나 conan 얘기도 좀 듣고..) 오픈소스들 몇몇을 들쳐보다가..

duckdb - 걍 코드 포크하고 네임스페이스 추가 https://github.com/duckdb/duckdb/blob/main/third_party/httplib/httplib.hpp https://github.com/yhirose/cpp-httplib/blob/master/httplib.h (본래 프로젝트)

clickhouse 의 관리- git 서브 모듈 https://github.com/ClickHouse/ClickHouse/tree/master/contrib

llama.cpp https://github.com/ggml-org/llama.cpp/tree/master/vendor

아 아직 내가 생각했던 그건 아닌 건가..

2
3

일전에 @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

https://questdb.com/docs/third-party-tools/polars/ 를 보다가 ConnectorX 소개가 있어서 보니 https://sfu-db.github.io/connector-x/intro.html https://sfu-db.github.io/connector-x/intro.html#how-does-connectorx-download-the-data

쿼리로 대량 데이터 가져올 때 이걸 파티셔닝 하는 쿼리로 나누고 멀티스레드로 병렬 실행 한 뒤 모으는 식인듯. 아이디어 자체는 간단한지라 한계도 좀 명확할 것 같아서 (만일 쿼리가 서브 쿼리 등 복잡해지는 경우) 한계를 알고 써야 할 것 같긴 하다.

3

요즘 트위터에 하스켈 관련 계정들보면 Go를 가장 싫어하는 언어로 꼽는 경우를 자주 본다. C/C++/Java 등은 역사적인 맥락을 고려해 예우해주고, Python/JS 등등의 이상한 기능은 뭘 몰라서 잘못 만들었다고 이해해주는 반면, Go는 하스켈러들이 중요하게 여기는 가치들을 일부러 다 무시하고 만들기 때문에 괘씸가중치 x10 정도를 적용받는 듯하다.

10

안녕하세요, SNS 프로젝트로 Jeju.social을 만들었습니다. 제주도의 친구, 가족, 기업들이 안전하게 사진과 정보를 공유할 수 있는 온라인 커뮤니티입니다. 외국인들과도 함께요. 즐거운 시간 보내세요.

Hello, I created Jeju.social as a social media project. It is an online community where friends, family, and businesses on Jeju Island can share photos and information safely. Even for foreigners. Please enjoy.

A beach with an island in the background.
2
0
0
4

I'm currently experimenting with a poll creation feature for @botkitBotKit by Fedify :botkit:. If this experiment pans out, the feature will likely be included in the next release, BotKit 0.3.0. So far, so good. Each vote will trigger a Bot.onVote event in real-time. This could open up a lot of interesting possibilities, like a bot that uses emoji selection for one-time authentication.

4
7

https://github.com/mastodon/mastodon/pull/34964/files

마스토돈에 알고리즘 기반의 계정 팔로 추천 기능이 4.4에 들어갈 예정이라고 한다........

레일즈 기반의 Fasp(Fediverse Auxiliary Service Provider) 프로바이더 구현체를 어디선가에서는 공유했던 것 같은데, 기억이 가물가물하다.

2
4
2