TypeScript에서 쓰는 브랜디드 타입(branded type) 패턴, 그럭저럭 쓸만하네.
洪 民憙 (Hong Minhee)
@hongminhee@hackers.pub · 1017 following · 727 followers
Hi, I'm who's behind Fedify, Hollo, BotKit, and this website, Hackers' Pub! My main account is at
@hongminhee洪 民憙 (Hong Minhee)
.
Fedify, Hollo, BotKit, 그리고 보고 계신 이 사이트 Hackers' Pub을 만들고 있습니다. 제 메인 계정은:
@hongminhee洪 民憙 (Hong Minhee)
.
Fedify、Hollo、BotKit、そしてこのサイト、Hackers' Pubを作っています。私のメインアカウントは「
@hongminhee洪 民憙 (Hong Minhee)
」に。
Website
- hongminhee.org
GitHub
- @dahlia
Hollo
- @hongminhee@hollo.social
DEV
- @hongminhee
velog
- @hongminhee
Qiita
- @hongminhee
Zenn
- @hongminhee
Matrix
- @hongminhee:matrix.org
X
- @hongminhee
어 hackers.pub과 hollo.social 은 다른건가? 목적도 다른가보구나?!
@minhoryang Hollo는 ActivityPub을 지원하는 1인 사용자용 설치형 마이크로블로그입니다. 저 hollo.social 인스턴스는 제가 직접 운영하고 있고요. Hackers' Pub은 아예 다른 코드베이스고 설치형도 아니예요!
마스타돈에서 댓글다는 https://hackers.pub/authorize_interaction?uri= 이 API가 아직 없나보네요?
@minhoryang 네, Hackers' Pub은 Mastodon 호환 API는 구현 안 하고 있어요. (앞으로도 구현 안 할 예정입니다.)
We're excited to announce that #BotKit 0.2.0 will introduce custom emoji support! This feature allows your bots to express themselves with more personality and engagement.
What's included:
- Add custom emojis to your bot with
Bot.addCustomEmojis() - Use emoji in messages with the
customEmoji()function - Support for both local image files and remote URLs as emoji sources
- Full integration with BotKit's text formatting system
Simple example:
// Define custom emojis
const emojis = bot.addCustomEmojis({
botkit: { file: "./botkit.png", type: "image/png" },
fedify: { url: "https://fedify.dev/logo.png", type: "image/png" }
});
// Use in messages
await session.publish(
text`Hello world! ${customEmoji(emojis.botkit)}`
);
Want to try it early? You can install the development version from JSR today:
deno add jsr:@fedify/botkit@0.2.0-dev.82+8a0438e6
@hongminhee洪 民憙 (Hong Minhee) Sonnet Thinking이 아닌데도 Gemini가 더 빠른가요?
@bglbgl gwyng 네! 훨씬 빠른 것 같은데요?
바이브 코딩에 줄곧 Claude Sonnet 3.7만 쓰다가, 오늘 Gemini 2.5 Pro를 써 봤는데, 코딩을 더 잘 하는지는 잘 모르겠지만 응답 속도 하나만은 훨씬 빨라서 좋다. 바이브 코딩을 하다가 결국 답답함을 못 참고 내가 직접 코딩하게 되는 까닭 중 하나가 기다림의 지루함이었는데, 그 부분이 많이 완화된달까?
하스켈 패키지 서버 에러 나서 라이브러리 문서를 못보니까 코딩을 못하네!
터미널에 대해 궁금한 점이 생겨 자료를 찾다 보니 Windows Console Team에서 연재한 시리즈물을 발견했는데, 그 내용이 참 유익했다.
Windows Command-Line Series:
- Backgrounder
- The Evolution of the Windows Command-Line
- Inside the Windows Console
- Introducing the Windows Pseudo Console (ConPTY)
- Unicode and UTF-8 Output Text Buffer
콘솔 앱이 터미널과 입출력을 주고 받는 것을 공기처럼 당연하다고 생각했는데, 그 과정에는 커서 이동이나 개행 등과 같은 제어 문자를 렌더링하거나 SIGINT 같은 시그널을 발생시켜주는 처리가 존재했다. 터미널과 콘솔 앱이 서로 분리된 구조가 과거 물리 터미널로부터 비롯된 것도 흥미로웠고 말이다. 사실 이해 못 한 부분이 아직 많아서 다음에 또 읽어볼 생각이다.
암호학에 나오는 Alice와 Bob을 가은이와 나은이로 번역하는 생각
As someone who has developed several #ActivityPub software implementations (Fedify, Hollo, BotKit, and Hackers' Pub), I believe one of the most frustrating features to implement in the #fediverse is #custom_emoji.
The challenges are numerous:
First, there's no standardization. ActivityPub specifications don't define how custom emoji should work, leading to inconsistent implementations across different servers like Mastodon and Misskey.
Rendering is particularly problematic. Emojis must display properly across different contexts (in text, as reactions, in emoji pickers) while maintaining quality at various sizes. Animated emojis add another layer of complexity.
Perhaps most concerning is the poor #accessibility. Most implementations simply use the emoji code (like :party_blob:) as the alt text, which provides no meaningful information to screen reader users (in particular, non-English speakers) about what the emoji actually depicts or means.
What really dampens my motivation to implement this feature is knowing I'm investing significant effort into something that ultimately creates accessibility barriers. It's disheartening to work hard on a feature that excludes part of the community.
동료가 ChatGPT랑 사적이고 감정적인 대화도 점점 더 많이 나누고 있다고 한다. 그리고 그런 서비스 만들면 잘될거같다는데(이미 발전된게 꽤 있음). 근데 나는 도저히 저런 대화를 AI랑 못하겠던데 좀 신기하다. 이건 내가 LLM이 의식이 없다고 꽤 강하게 확신해서 그런거 같은데, 의식이 있다고 생각하는 사람들과 (절대 다수의) 그딴거 1도 신경안쓰는 사람들은 잘만 쓸것이다.
@bglbgl gwyng 그런데 사실 스스로 이외에는 사람들도 의식이 있는지 아주 확신할 수는 없죠… ㅋㅋㅋ 사실 사람한테 의식이 없을 수도 있다는 것은 너무 비현실적인 회의일 수도 있지만, 강아지는 어떤가, 새는 어떤가, 벌레는, 버섯은… 같은 식으로 나아가다 보면 LLM한테 의식이 있다고 볼 수도 있는 건가, 싶은 생각도 들긴 합니다. ㅎㅎㅎ
@hongminhee洪 民憙 (Hong Minhee)
@ayoAyo! We have a roadmap repo for the RFC process: https://github.com/withastro/roadmap
We often have pretty good minimal user docs in the Stage 3/proposal, but even Stage 1 to just propose something encourages adding "end-goal" code examples of what it could look like if you're updating/changing/creating an API.
As for writing about our docs workflow, we've mostly focused on our community contributor process & guides like Astro Docs Docs (AD²) https://contribute.docs.astro.build , but a great idea!
@sarah11918Sarah Rainsberger
@ayoAyo! Thanks for sharing the links! These would help me a lot!
@ayoAyo!
@hongminhee洪 民憙 (Hong Minhee) It can be so helpful during design! Some people do it first-first. At Astro with our RFC process, minimal "docs" are updated as the feature is developed.
For Astro's new experimental Fonts API, we held not only an open API bash, but an API *docs* bash! After 2 hours looking at the draft docs ("Oh, it works like this? Oh, you expect people to do this? Oh, this is what it takes to explain how to use it?")... some design changes were implemented for sure, and everyone wins!
@sarah11918Sarah Rainsberger
@ayoAyo! Wow! I had no idea Astro used this approach too. The concept of an API docs bash is brilliant! I completely agree that creating docs first helps validate the user experience early and dramatically improves development efficiency. Honestly, I didn't realize this was a more common practice. I'd love to hear more about your RFC process! Are there any blog posts or public resources about Astro's documentation workflow?
@ayoAyo!
@hongminhee洪 民憙 (Hong Minhee) It can be so helpful during design! Some people do it first-first. At Astro with our RFC process, minimal "docs" are updated as the feature is developed.
For Astro's new experimental Fonts API, we held not only an open API bash, but an API *docs* bash! After 2 hours looking at the draft docs ("Oh, it works like this? Oh, you expect people to do this? Oh, this is what it takes to explain how to use it?")... some design changes were implemented for sure, and everyone wins!
@hongminhee洪 民憙 (Hong Minhee) I never start writing code before I gather enough context for the problem. Listening to possible customer's voices and collecting prior arts are one of the most important part of designing solutions.
@domatdo도막도 Exactly!
@hongminhee洪 民憙 (Hong Minhee) back in the day, we used to call this a "specification"
@TakTak! Haha, that might be a right word to call it!
For my library and CLI projects, I've been writing documentation before writing any code. It helps me imagine the final interface early on, which usually leads to better design. Sure, sometimes I miss implementation details and have to revise later, but hey—it's just docs. Docs are easy to change.
This tiny habit has surprisingly big payoffs. When I focus on how things will be used rather than how they'll be built, I end up with interfaces that actually make sense.
Anyone else do this? Curious about your experience with documentation-first approaches.
RE: https://hollo.social/@hongminhee/01964c76-ef1e-7994-b3f0-57f967742566
@hongminhee洪 民憙 (Hong Minhee) 잘하셨습니다! 휴식이 중요하죠. 왠지 인기 웹툰의 독자가 댓글로 작가를 응원하는 마음으로 민희 님의 건강을 응원하게 됩니다.
@curry박준규 감사합니다… ㅎㅎㅎㅎ
갑자기 Hackers' Pub 코딩에 손에 안 잡혀서 다른 코딩이나 좀 해야겠다… 그것도 잘 안 잡히면 코딩 자체가 손에 안 잡히는 걸테니 그냥 놀아야지.
어제는 결국 그냥 잤다… ㅋㅋㅋ
갑자기 Hackers' Pub 코딩에 손에 안 잡혀서 다른 코딩이나 좀 해야겠다… 그것도 잘 안 잡히면 코딩 자체가 손에 안 잡히는 걸테니 그냥 놀아야지.
Side quest sneak peek: a browser extension that visualizes (Service Worker) Cache Storage for web sites.
Decided to build this after seeing how difficult it is too see what's stored in Service Worker cache. They can (accidentally) take up quite a lot of storage space.
Repo: https://github.com/cheeaun/stakataka
Not released yet, under review in Chrome Web Store.
살면서 RTL 언어 지원을 한 번도 해 본 적이 없어서 무섭게 느껴진다. 아마 서양 프로그래머들도 CJK 보면 이런 느낌일까?
Sometimes I'm quite amazed by my own code 😳
The RTL work last year was quite insane https://mastodon.social/@cheeaun/112932794480750449
git submodule은 맨날 다시봐도 또 까먹는데 이게 내 문제일까 git submodule의 문제일까...
@bglbgl gwyng 저는 서브모듈 자주 쓰는 편이라 그런지 이젠 편하긴 한데, 자주 안 쓰면 그럴 것 같긴 해요.
I've been considering what to add in the next version of BotKit (v0.2.0) and wanted to share my current plans. After reviewing feedback and examining the #ActivityPub ecosystem, I've identified three key features that would significantly enhance the framework's capabilities:
-
Custom emoji support. This would allow bots to use server-defined custom emojis in their messages, making communication more expressive and allowing better integration with instance culture.
-
Emoji reactions. I plan to implement both sending and receiving emoji reactions to messages. This provides a lightweight interaction model that many users prefer for simple acknowledgments or responses. This would manifest as new event handlers (like
Bot.onReaction) and methods (likeMessage.react()). -
Quote posts. The ability to reference other posts with commentary is an important discourse feature in the fediverse. Supporting both sending quotes and detecting when bot posts have been quoted would enable more sophisticated conversational patterns.
These additions should make #BotKit more capable while maintaining its simple, developer-friendly API. I expect implementation to involve extending the Message class and adding new Text processing capabilities, all while keeping backward compatibility with existing bots. Having built both Hollo and Hackers' Pub, I already have deep familiarity with how various ActivityPub implementations handle these features across the fediverse. I welcome any community feedback on priorities or implementation details before I begin coding.
러스트 넣으니까 그냥 빌드 체감 1시간이네 틱톡 스크롤 50번은 내린듯
@z9mb1Jiwon 이래서 성능 좋은 컴퓨터를 쓰고 싶어지는 것 같아요…
리누스 토발즈의 ‘깃(Git)’ 20주년 소회 “별일 아니었다”
“나는 그냥 내게 필요해서 ‘깃’을 만들었다. 만들고 4개월만에 흥미를 잃었다. 20년 중...
ちなみにLinuxではDebian系がamd64、RedHat系がx86_64の表記を好むらしい
Microsoftはx64表記になることが多い
https://onoredekaiketsu.com/x86-64-x64-amd64-what-is-the-difference-between-these/
@joonnotnotJoon 오, 후원 감사합니다!
@saengmotmi생못미
@jasonkim자손킴 안녕하세요, 어서 오세요!
설정이나 명세를 튜링완전한 언어로 기술하면 안되지 않나, 튜링완전한 언어는 프로그램을 짤때 써야하지 않나란 의견이 있는데, 난 오히려 반대라고 생각한다.
설정/명세를 기술한 코드는 그걸 평가해서 어떤 값을 한번 구하면 끝이고, 임의의 입력에 대해 종료함을 보장할 필요가 없다. 그리고 그 코드의 실행은 서비스 단에서 이루어지는게 아니고, 서비스를 만들고 운영하는 과정에서 이루어지기 때문에 종료되지 않는것에 대해 훨씬 안전하다.
반대로, 실제로 돌아가는 프로그램(말이 좀 이상하지만 excuse부탁드림)이야말로 튜링완전한 언어로 짜면 안된다. 우리가 튜링완전한 언어로 개발하는 이유는 우리가 만드는 프로그램을 기술하는데 필요한 자유도가 얼만큼인지 모르고 작업해야하기 때문에 그렇다. 종료하지않는 엉터리 코드를 짤 가능성을 받아들이면서도, 당장 뭔가 만들긴해야하니까 그런 선택을 하는 것이다.
즉 튜링완전성은 메타프로그래밍을 할때만 허용되는것이 (적어도 이론적으론) 정당하다고 생각한다.
RE: https://hackers.pub/@bgl/019647a2-cd0c-7311-97ce-95b59e5a0696
패스키 쓴 이후 나의 해커펍생 달라졌다-
로그인 자체도 안 풀리고 바로 들어오면 된당 며칠 써보니 매우 편하다
그러고 보니 Hackers' Pub에서 해시태그 팔로가 안 되네… 할 거 많다.
@hongminhee洪 民憙 (Hong Minhee) 근데 Pulumi는 서로 다른 클라우드 서비스의 자원들간에 어떤 공통된 추상화를 넣진 않습니다. 그냥 같이 쓸수있을 뿐이에요.
@bglbgl gwyng 아하, 그렇군요! 인프라 구성을 선언적이지 않은 언어로 작성하는 것에 대한 우려도 조금 드는데, 그런 면에서는 어떤가요?
Pulumi 웹사이트를 보고 Apache Libcloud랑 비슷한 건가 싶었는데, Perplexity에 따르면 둘은 꽤 다른 물건이구나.
@hongminhee洪 民憙 (Hong Minhee) Pulumi 자체는 그냥 인프라용 React같은 거구요. React에 React-DOM이랑 React Native가 있듯이, Pulumi에도 여러 드라이버가 있습니다. 개중에 k8s 드라이버도 있어서 k8s띄운다음에 그위에 TS 코드로 프로비저닝 할수도 있고요. 또 홈서버를 쓰더라도 CDN은 붙이고 싶으실수 있는데 이때 AWS든 CF든 드라이버 깔아서 CDN 붙이면 됩니다. 가장 큰 장점은... 그냥 TS코드로 하다보니 자동완성등 인텔리센스가 최상급이라는 점?
@bglbgl gwyng 오… 뭔가 옛날 Apache Libcloud가 떠오르네요. 한 번 살펴보겠습니다.
- 새 MacBook Air 세팅
- 가끔씩 응답이 늦는 Hackers' Pub 버그 살펴보기
- Hackers' Pub 다국어 콘텐츠 기능 설계
https://hackerspub-ask-bot.deno.dev/message/0196468d-7fd8-7447-b2a6-e974c49e42b8 살아는 있는데 이게 왜 해커스펍에 안보이지
@kodingwarriorJaeyeol Lee 저는 잘 보이는데, 아마 팔로를 안 하셔서 타임라인에 안 뜨는 게 아닐까요?
@hongminhee洪 民憙 (Hong Minhee) IaC 위해서 뭔가 새로 배우기 귀찮으시다면 Pulumi 추천드립니다.
@bglbgl gwyng 잘 모르는데, 홈 서버에서도 쓸만할까요?
Hackers' Pub은 현재 원격 콘텐츠에 포함된 온갖 이미지를 캐시하지 않고 원격 URL 그대로 서빙하고 있는데, 일부 ActivityPub 구현은 계정 프로필 사진이 바뀌면 기존 프로필 사진을 아예 삭제해 버려서 가끔씩 원격 계정의 프로필 사진이 로딩이 안 되고 깨지는 문제가 발생하고 있다. 음… 귀찮아서 캐시를 안 하고 있었는데 역시 캐시를 하긴 해야 하나?
あ、あと。来週頭に公開予定の「しゅいろ」さんのMisskey連載もあるよ。
https://gihyo.jp/list/group/Misskey-Webテクノロジー最前線#rt:/article/2023/02/misskey-01
日本語で申し訳ないけど🙏
@hongminhee洪 民憙 (Hong Minhee)
あ、あと。来週頭に公開予定の「しゅいろ」さんのMisskey連載もあるよ。
https://gihyo.jp/list/group/Misskey-Webテクノロジー最前線#rt:/article/2023/02/misskey-01
日本語で申し訳ないけど🙏
@hongminhee洪 民憙 (Hong Minhee)
@daidaisuke このシリーズ、フェディバースに共有される事が多く、記事数本は読んだ記憶が有りますね。共有ありがとうございます。
@hongminhee洪 民憙 (Hong Minhee) 오 어디서부터 하실껀가요? ㅎㅎㅎㅎㅎㅎㅎ
@ujuc우죽 그걸 모르겠어요. 😂
Hackers' Pub에서는 현재 PostgreSQL 드라이버로 Postgres.js를 쓰고 있는데, 문제는 이 드라이버가 OpenTelemetry 지원하지 않는다… 수동으로라도 계측 코드를 짜려면 훅이 필요한데, 훅 API도 들어올 예정이 없다.
그래서 PostgreSQL 드라이버를 아예 node-postgres로 바꿀까 싶기도 한데, 이미 @fedify/postgres 패키지가 Postgres.js에 의존을 하고 있기 때문에 한 애플리케이션에서 두 종류의 드라이버를 쓰는 꼴이 된다. 음, 아무래도 상관 없으려나?
@hongminhee洪 民憙 (Hong Minhee) 브라우저에선 엔진에 관계 없이 대부분 되는 기능이라 어라...? 했는데 노드가 문제였군요... https://github.com/nodejs/node/issues/51006
@nebuletoHaze 네, 그렇습니다. ㅎㅎㅎ
거의 7년 가까이 DevOps에서 손을 뗀 채 지냈더니 이제 DevOps를 어떻게 하는 건지 도통 모르겠다. 처음부터 다시 배워야 하는 상황.
내가 무슨 쿠버네티스를 쓰고 멀티 AZ 분산을 하고 로드밸런서를 붙이고 수평확장을 하고 매니지드디비를 쓰면 뭐하냐
클라우드프로바이더가 네트워크를 날려먹는데!!!!!!!!!! 아니 그러고도 그걸 감지를 못 해서 내가 티켓을 보낼 때 까지도 모르고 심지어 보낸 직후에도 모르고 몇 번 핑퐁을 해서야 상황파악하고 그 이후로도 해결에 4시간 걸린거 실화냐????????????





![A screenshot of a code editor displaying JavaScript code related to handling keyboard shortcuts and column navigation.
The keyboard shortcuts '[' and ']' will flip based on RTL setting.](https://files.mastodon.social/media_attachments/files/114/358/935/817/775/229/original/741fa8748d14a957.png)
![A GitHub PR on XiNiHa/solid-relay, titled "fix: warn correctly when loading more pages". Fixes the error: "Relay: Expected result to have a string `id` in order to refetch, got `function() { [native code] }`."](https://media.hackers.pub/note-media/eaa01391-ab0d-4742-9e6c-3376320222b8.webp)





