조만간 Hackers' Pub 티셔츠를 제작하려고 합니다. 가격이 얼마가 될 지는 모르겠는데 마플 기준으로는 1만원–2만원 사이 정도 될 것 같군요. 관심 있으신 분 계신가요?

洪 民憙 (Hong Minhee)
@hongminhee@hackers.pub · 861 following · 607 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
오늘 파이콘에서 모니터에서만 보던 네임드 개발자 분들을 많이 발견하였다. 조용히 아 저분이 그분이군 하고 지나갔다.
조만간 또 추월하겠습니다
파이썬 로고 잘 조절하면 태극 문양처럼 만들 수 있을 것 같은데 이걸로 PyCon Kr 로고를 만들면 어떨까
어제 튜링의 사과에서 @hongminhee洪 民憙 (Hong Minhee) 님과 모각코 하며 건진 것:
- Zed 에디터
- Zed + Rust 디버거
- Zed + GitHub Copilot
제드만세
<파이썬토룡신점> 아주 용하더군요
안녕하세요.
@corazzon박조은 어서 오세요!
해커스펍 550명 돌파!!
어차피 이모지 데이터 다 tag에 딸려 들어오는데 서버-이모지 관계를 분리해서 처리하고 싶은데 그럼 연합되는 쪽에서 다 박살나겠지...
모바일 네이티브 앱개발을 해 보고 싶은걸
해커스펍 고양이가 귀여워
다들 좋은 파이콘을 보냈나보군요... 그래... 그러면 된 거야...
이제 AI가 손금을 보고 점도 봐주는 시대가 왔다!
장안의 화제 〈파이썬토룡신점〉, 나도 쳐봤다!
해커스펍 500명 돌파 나이스~
내일 오후 1시에서 2시 사이에 제가 아래 링크한 파이콘 코리아 2025 발표를 들으러 간다는 소식입니다. 올해는 체력이 부족하여 딱 1개 발표만 듣고 바로 철수할 예정...
발표자를 위한 교훈 하나: 프리젠테이션에 코드 예제를 보여줄 땐 좀 과하다 싶을 정도로 간단하게 한다. 안 그러면 발표 환경/청중의 위치에 따라 코드가 안보이는 불상사가 생길 수 있다. 😂
유시지(usage) 출력까지는 어떻게 구현 했다. 그런데 이건 쉬운 문제고, 도움말이 정말 어려운 문제인데…
optique <main?> $ deno run example.ts
Usage: example.ts one [-a/--allow] -v/--value INTEGER ARG
example.ts two [-f/--foo] -b/--bar VALUE
example.ts three [-d/--deny] -t/--test INTEGER [-z/--baz] -q/--qux QUX
example.ts nest foo [-a/--allow] -v/--value INTEGER ARG
example.ts nest bar [-f/--foo] -b/--bar VALUE
Error: No parser matched.
어라… 도움말 구현 한 것 같은데? 근데 왜 뭔가 빠뜨린 것 같지…
점심시간 한정!!!! 부스 지킴이 용병하고 있습니다
파이콘 와서 더위에 시달리다 정신차려보니 왠지 부스에 앉아있었다
파이콘을 구경갑니다. 그런데 근육통 때문에 노트북을 두고 나온
오늘과 내일 PyCon KR 2025에서 해커스펍 부스 도우미로 나와있습니다! 파이콘 오신 분들 많이 들러주세요 :)
오늘은 파이콘
근데 확실히 사람의 언어든 프로그래밍 언어든 언어를 새로 배울 때마다 해당 언어의 방식으로 생각해보면서 사고 방식의 확장이 이루어지는 것 같음
이 글에서 "switch network 쓰지 말고 hash map 쓰세요 그쪽이 더 빠릅니다" 해서 정말 그런가? 했는데 그런듯 하다.
지금 진행하던 개인 프로젝트의 디버깅을 찍어보는데 특정 토큰/명령어에 대해서 한 조각씩 들어오는 것에 대해 분기 네트워크를 타면 CPU의 분기예측 캐시가 제대로 쌓이질 않아서 case문 내의 모든 case를 중구난방으로 분기하면서 모두 체크하고 있다. (예를 들어 TOKEN_DEFINE을 찾기 위해서 ase TOKEN_BRACKET_OPEN.. case TOKEN_ALLOCATE... case TOKEN_EQUAL.... 같이 전부 중구난방으로 점프해가며 하나씩 체크한다. O(n)과 같은 최악의 케이스는 아니지만 10개의 케이스가 있으면 적어도 5개는 검색해버리는 짓을 벌임)
후반부로 갈수록 캐시가 쌓여서 바로 점프하는 모습은 보이지만 O(1)으로 바로 분기 없이 점프할수 있는 해시맵이 엄청나게 빠른건 사실인듯하다.
재귀하향식 파서로 구현했기 때문에 파서는 어쩔수 없이 switch network를 타버리긴 하지만 case가 극히 적어 분기 점프에 있어 큰 문제는 아니고 최대한 해시 맵 기반으로 짜는 것이 빠르다는 교훈은 얻은듯 하다.
밑바닥에서부터 연합우주 서비스를 만들고 있는데, 기능을 만들고 연합우주 연동을 붙이는 방식으로 접근하려니 자꾸 막히는 것 같음. 연합우주에서 어떻게 호환할지 먼저 생각해서 인터페이스를 만들고 거기에 기능을 갖다 붙이는 방식으로 접근해야 한다... 초기 단계는 수제코딩이 불가피한....
@crohasang크롸상 님이 작명해주신 덕분에, 찝찝한 기분도 덜어내고 진행하고 있는 프로젝트에 좀 더 속도를 낼 수 있을 것 같다..... 압도적 감사.... 기념으로 도메인도 샀다. https://cosmosli.de 뽕을 뽑자 이젠.....
오랫동안 getpocket.com 을 사용해 왔는데 몇 달 전 서비스 셧다운을 했네요. 일단 csv로 그간 모아 놓은 링크들은 다운받을 수 있는 거 같은데 어디로 옮겨 탈지 결정을 못내려서 그냥 불편하게 지내고 있습니다. 혹시 좋은 대안 서비스 추천해주실 분 있으실까요?
젊은 친구가 눈치가 빨라서 좋군 😏
도움말 만드는 게 생각보다 생각할 게 많구나. 사실 정형화되어 있으면 아주 쉬운 문제인데, 파서 컴비네이터를 만들어 놔서 도움말 예쁘게 출력하는 게 어려운 문제가 된 듯…
유시지(usage) 출력까지는 어떻게 구현 했다. 그런데 이건 쉬운 문제고, 도움말이 정말 어려운 문제인데…
optique <main?> $ deno run example.ts
Usage: example.ts one [-a/--allow] -v/--value INTEGER ARG
example.ts two [-f/--foo] -b/--bar VALUE
example.ts three [-d/--deny] -t/--test INTEGER [-z/--baz] -q/--qux QUX
example.ts nest foo [-a/--allow] -v/--value INTEGER ARG
example.ts nest bar [-f/--foo] -b/--bar VALUE
Error: No parser matched.
이번 주말에는 양일 모두 파이콘 한국 2025에 가서 Hackers' Pub 부스를 지킵니다!
제가 좋아하는 문제 풀어보실 분
동명의 문제도 좋아함
헐... 파이썬 range
당연히 Iterator
인 줄 알았는데 Iterable
에다가 Sequence
였어...
제가 좋아하는 문제 풀어보실 분
이번 주말........ 파이콘으로 한참 바쁠 예정입니다.....
- 파이콘 내내 한국 연합우주 개발자 모임 부스 지키기
- 일요일 파이콘 발표
- OSTEP xv6 H2 스타트 끊기...
洪 民憙 (Hong Minhee) shared the below article:
파서 콤비네이터: 하스켈 초보자를 위한 파싱

박준규 @curry@hackers.pub
이 글은 하스켈 초보자를 위한 파서 컴비네이터에 대한 입문 튜토리얼입니다. 파싱은 프로그래밍에서 흔히 발생하는 작업이지만, 정규 표현식이나 문자열 조작만으로는 복잡한 형식을 다루기 어렵습니다. 저자는 `Text.ParserCombinators.ReadP` 라이브러리를 사용하여 파서 컴비네이터를 소개하고, 이를 통해 더 읽기 쉽고 유지보수가 용이한 파서를 작성할 수 있음을 보여줍니다. METAR 보고서 파싱 예제를 통해 `satisfy`, `many1`, `<|>`, `option` 등의 기본적인 파서 콤비네이터 함수를 설명하고, 펑터와 모나드의 개념을 활용하여 파서를 구성하는 방법을 안내합니다. 또한, 파싱된 데이터의 유효성을 검사하고, 결과를 더 의미 있는 데이터 타입으로 변환하는 방법을 제시합니다. 이 튜토리얼을 통해 독자는 파서 컴비네이터의 기본 원리를 이해하고, 실제 데이터 파싱 작업에 적용할 수 있는 능력을 얻게 됩니다. 마지막으로, 저자는 독자들에게 배운 내용을 바탕으로 전체 METAR 보고서를 파싱하는 라이브러리를 만들어 Hackage에 제출해 볼 것을 권장하며, 파서가 없는 데이터를 만났을 때 `ReadP`를 자신 있게 사용할 수 있기를 바랍니다.
Read more →이제 아래와 같이 CLI 파서를 선언하면:
const parser = or(
object("Group 1", {
type: constant("group1"),
allow: option("-a", "--allow"),
value: option("-v", "--value", integer()),
arg: argument(string({ metavar: "ARG" })),
}),
object("Group 2", {
type: constant("group2"),
foo: option("-f", "--foo"),
bar: option("-b", "--bar", string({ metavar: "VALUE" })),
}),
merge(
object("Group 3", {
type: constant("group34"),
deny: option("-d", "--deny"),
test: option("-t", "--test", integer()),
}),
object("Group 4", {
baz: option("-z", "--baz"),
qux: option("-q", "--qux", string({ metavar: "QUX" })),
}),
),
);
InferValue<typeof parser>
타입 함수가 아래와 같은 타입을 반환한다:
const _:
| {
readonly type: "group1";
readonly allow: boolean;
readonly value: number;
readonly arg: string;
}
| {
readonly type: "group2";
readonly foo: boolean;
readonly bar: string;
}
| {
readonly type: "group34";
readonly deny: boolean;
readonly test: number;
readonly baz: boolean;
readonly qux: string;
};
현재 구현한 파서 프리미티브는 option()
과 argument()
두 개, 그리고 파서 컴비네이터는 or()
, object()
, tuple()
, merge()
, optional()
, multiple()
정도. 그 외에 concat()
같은 것도 구현하고 싶긴 한데, 일단 도움말 먼저 만들어 보자.
도움말 만드는 게 생각보다 생각할 게 많구나. 사실 정형화되어 있으면 아주 쉬운 문제인데, 파서 컴비네이터를 만들어 놔서 도움말 예쁘게 출력하는 게 어려운 문제가 된 듯…
한 번 갈아 엎고 다시 만들었고, 기본적인 기능은 완성했다. 이제 살을 붙여야 한다…
이제 아래와 같이 CLI 파서를 선언하면:
const parser = or(
object("Group 1", {
type: constant("group1"),
allow: option("-a", "--allow"),
value: option("-v", "--value", integer()),
arg: argument(string({ metavar: "ARG" })),
}),
object("Group 2", {
type: constant("group2"),
foo: option("-f", "--foo"),
bar: option("-b", "--bar", string({ metavar: "VALUE" })),
}),
merge(
object("Group 3", {
type: constant("group34"),
deny: option("-d", "--deny"),
test: option("-t", "--test", integer()),
}),
object("Group 4", {
baz: option("-z", "--baz"),
qux: option("-q", "--qux", string({ metavar: "QUX" })),
}),
),
);
InferValue<typeof parser>
타입 함수가 아래와 같은 타입을 반환한다:
const _:
| {
readonly type: "group1";
readonly allow: boolean;
readonly value: number;
readonly arg: string;
}
| {
readonly type: "group2";
readonly foo: boolean;
readonly bar: string;
}
| {
readonly type: "group34";
readonly deny: boolean;
readonly test: number;
readonly baz: boolean;
readonly qux: string;
};
현재 구현한 파서 프리미티브는 option()
과 argument()
두 개, 그리고 파서 컴비네이터는 or()
, object()
, tuple()
, merge()
, optional()
, multiple()
정도. 그 외에 concat()
같은 것도 구현하고 싶긴 한데, 일단 도움말 먼저 만들어 보자.
이번에 Amazon SES 메일 발송 처리를 추가해야 해서, Upyo 를 써 볼 수 있는 좋은 기회가 왔습니다. (SMTP 연동이어도 써볼 생각이었지만...)
README.md 의 Caution 을 보니 조금은 조심스럽지만, 한번 써보겠습니다!
Caution
This project is in early development and subject to change without notice.
개인적인 소망으로 https://unstable.upyo.org/logo.svg 로고에 한글도 들어가면 더욱 더 이쁠 것 같습니다!
작성된 유닛테스트들의 유지보수성이 심각하게 떨어져서 DSL을 구축하고 BDD 방식을 부분 적용하기로 했다
なんか色々変
@cocoa甘瀬ここあ OSとウェブブラウザはどうなさいますか?
안녕하세요. 개발자느님들에게 한가지 도움을 요청드립니다. 개발 1도 모르는 초초초초보가 독학으로 공부할 리액트 네이티브(앱 개발)와 파이썬 책을 추천 해주시면 감사하겠습니다. 참고로 파이썬은 https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=308908446 이 책을 생각하고 있습니다. 미리 감사드립니다~
feature-info?
まぁこれはnodeinfoのmeta使ってある程度決まったjsonを埋め込むようにすれば良さそうだけども。
こんな感じにするとか?
[
"fep:8b32",
"rfc:9421",
"protocol:activitypub"
]
@cocoa甘瀬ここあ いい考えですね。これを標準化するFEP提案書を作成してみても良いかもしれません。一緒に作成してみませんか?
実装間でのFEDERATION.mdみたいなのがほしいかもしれない🤔
feature-info?
まぁこれはnodeinfoのmeta使ってある程度決まったjsonを埋め込むようにすれば良さそうだけども。
こんな感じにするとか?
[
"fep:8b32",
"rfc:9421",
"protocol:activitypub"
]