선비 브라우저 擴張 프로그램 테스트 用 글.
Lee Dogeon
@moreal@hackers.pub · 102 following · 86 followers
어느 한 개발자입니다.
GitHub
- @moreal
Why glibc is faster on some Github Actions Runners
https://codspeed.io/blog/unrelated-benchmark-regression (한국어)
jemalloc이 archive 되었던 것 같은데 unarchive하고 다시 작업을 이어간다네요
Trusted Publishing 설정 언제 다 하나 했는데 npm trust github "$pkg" --repo <repo> --file ci.yaml -y 같이 명령어로 할 수 있어 다행이다
- https://moreal.github.io/slidev-addon-subtitle/demo/basic-ko.html
- https://speakerdeck.com/moreal/slidev-addon-subtitle-demo
아직 배포는 못 했는데 개밥먹기 싸이클(?) 한 번 돌아본 것 같다. Slidev 버그(?) 디버깅 하는데 시간을 좀 썼고.. 나중에 진짜 발표할 일 생기면 쓰면서 개밥먹기 더 해봐야지.
지금 해보고 있는 작업 과정에서 optique, optparse-applicative 같은 류의 커맨드라인 파서의 (개인적으로) 신기한 점을 알게 되었다. --server 가 있을 때 --server-port 도 함께 require할 수 있게 의존 관계를 표현할 수 있다, 같은 느낌에서 "와" 였었는데 오늘 알게 된 것은 같은 옵션을 상황에 따라 다르게 쓸 수 있다는 점이었다.
예를 들자면 --server가 있을 때 -P의 의미가 --port의 short option이라고 할 때 --server가 없을 때 -P의 의미가 --program[1]의 short option이 될 수도 있다. 이렇게 -P가 여러 의미를 가지게 되는 것이 좋은가 같은 이야기와 별개로 신기했다.
p로 시작하는 더 좋은 옵션이 당장 생각 안 나서
--program이라 하였다 ↩︎
이미 시간 소요를 많이 해서 코멘트 남기고 다른 거 보려다가 뭐가 문제인지 찾은 것 같기도 하고... ㅠㅠ
음 조금 보니까 나머지는 다 dl.deno.land (Google IP, 아마 GCP?) 에서 가져오는데 버전 목록만 deno.com (Deno Deploy)에서 가져와서 Deno Deploy에 문제가 생기면 setup-deno 가 모두 실패한다. 이거 deno.com/versions.json 도 dl.deno.land/versions.json 로 옮기면 안 되려나... 는 다음에 또 장애 생기면 이슈 만들어야겠다
Secretive(혹은 1Password)로 SSH 키를 관리하는데 Touch ID로 인증을 해야하다 보니 노트북 저 멀리에 두고 모니터와 별도 키보드를 쓰는 상황에서 팔을 쭉 뻗어 Touch ID에 손가락을 올리는 것이 여간 불편한 것이 아니었다. 예전에 Apple Watch로 인증이 되고 그랬다고 했던 기억이 나서 오늘에서야 써보는 데 팔을 뻗지 않아도 되서 매우 편하다 :D
https://blog.moreal.dev/2026/01/reproducible-commit/ 예전에 일할 때도 들었던 생각인데 요즘 이슈 적으면서 생각나서 적어봤습니다. (사실 여기 단문으로 써도 되는데 장황(?)해서..)
Zed에서 hongdown으로 포매팅하기
{
"languages": {
"Markdown": {
"formatter": {
"external": {
"command": "hongdown",
"arguments": ["-"]
}
}
}
}
}
최근에 Manim-community 들어갔다가 GitHub에 있던 저장소가 Codeberg로 가게 된 걸 알게 되었는데 (지금은 또 GitHub에 돌아와있다) 그때 홈페이지에 How my GitHub Pages got Hacked 라는 글과 함께 해당 사실을 알리고 있었다[1]. 오늘 아마 이와 같은 내용으로 도메인을 뺏기는(?) 현상을 주변에서 봐서 verified domain들을 등록해놓았다.
오늘은 고등학교 때 만들다 말았던 라이브러리를 얼추 마무리 지었다. Claude랑 같이 스펙 문서 만들고, 이를 바탕으로 작업하도록 했다. 당시에 하라는 FAT 덤프 파싱은 안 하고 Python에서 편하게 파싱하고 싶어서 만들기 시작했던 라이브러리고 취업하게 되서 이후로 안 봤었는데, Claude Code 덕분에 이제는 보내줄(?) 수 있을 것 같다.
근데 당시에 파서 콤비네이터를 몰랐어서 그랬고 지금은 파서 콤비네이터를 쓸 것 같다. 그리고 오늘 작업하면서 보게 된 건데 비슷한(?) 느낌으로 construct[1] 라는 라이브러리의 존재도 알게 되었다.
이제 Python을 잘 안 쓰고, 원래 시작점이었던 포렌식도 안 하니까 쓸 일은 없겠지만 그래도 당시 2019년 Hacktoberfest 시기에 필드 추가 기여도 받아보고 좋은 기억의 라이브러리였다.
https://github.com/moreal/pystructs/
deno install 명령어를 실행할 때 패치 패키지가 암묵적으로 npm 패키지로 덮어쓰여지는 버그를 수정하였습니다! 😊
Optique 문서를 보다가 argument ordering 파트에서 프로퍼티가 나타난(? appear) 순서대로 파서가 동작(? consume)한다고 되어 있어서 Object 타입인데 이게 작성한 순서대로 Object.entries() 같은 곳에서 순회되기를 기대할 수 있나 의문이 들었다(Object가 Map같은 거라고 생각했어서).
아래와 같이 타고 가면:
20.1.2.5 Object.entries ( O )(User call)7.3.23 EnumerableOwnProperties ( O, kind )(called by2. Let entryList be ? EnumerableOwnProperties(obj, key+value).10.1.11 [[OwnPropertyKeys]] ( )(called by1. Let ownKeys be ? O.[[OwnPropertyKeys]]().)10.1.11.1 OrdinaryOwnPropertyKeys ( O )(called by1. Return OrdinaryOwnPropertyKeys(O).)
아래와 같은 대목을 만나는데:
- Let keys be a new empty List.
- For each own property key P of O such that P is an array index, in ascending numeric index order, do
- Append P to keys.
- For each own property key P of O such that P is a String and P is not an array index, in ascending chronological order of property creation, do
- Append P to keys.
- For each own property key P of O such that P is a Symbol, in ascending chronological order of property creation, do
- Append P to keys.
- Return keys.
만약 key가 array index가 아닌 문자열 혹은 Symbol이라면 프로퍼티 생성 발생의 오름차순 순서(? ascending chronological order of property creation)대로 순회(?)해야한다고 적혀있다.
아마.. 잘 못 찾아서 못 본 걸수도 있지만 chronological이나 creation 같이 검색했을때 스펙에서 이를 다루는 방법을 정의하지는 않는 것 같았다. 예를 들어, PropertyDescriptor이 auto increment 되는 고유 ID를 갖고 있어야 하고 이를 통해 정렬해야한다, 거나?
실제 구현을 보고 싶어서 GitHub에 있는 V8 미러로 가서 보니 key들을 OrderedHashSet으로 갖고 있는 듯 했다. 생각해보니 그러면 되네, 싶어서 더는 안 찾아봤다.
암튼 Optique 문서대로 생성 순서대로 동작할 것 같다!
.kr 도메인이 두 배 이상 비싸져서... clig.kr 만 미리 다년 연장해놓고 다른 건 다른 TLD로 옮겨야지
어라 뭔가 단문에도 임시 저장 기능이 있네 (원래 있었나)
그젠가 Hashnode as Headless CMS 글 보고 Ampcode로 바이브 코딩 해봤습니다. 글 목록이랑 태그 목록은 물론, 글 보여주는 부분에서는 리액션도 보여주고 번역된 버전이 있다면 볼 수 있도록 하였습니다.
https://moreal.github.io/hackerspub-astro-template/
Hackers' Pub 로컬 서버에 붙어서 빌드하고 수동으로 gh-pages에 배포했고, hackers.pub 에서 데이터를 가져다 쓰려면 올려놓은 GraphQL 관련 PR들이 반영되어야 합니다.
ampcode free 써보는데 이렇게 광고가 나온다 😲
인용 테스트 용 글
Permission sets in config 필요하다고 생각했는데 나왔구나!
Hackers' Pub web-next 작업하다가 https://hackers.pub/@moreal/2025/debugging-deno-vite-plugin-part-1/ 이슈를 만나서 PR을 올렸다.
deno-vite-plugin 디버깅 1편
이 글은 Deno 런타임 환경에서 SolidStart와 `deno-vite-plugin`을 사용할 때 발생하는 라이브러리 임포트 문제를 해결하는 과정을 담고 있습니다. 특히, `jsr:@fedify/fedify` 라이브러리를 임포트할 때 `deno task build`가 실패하는 상황을 재현하고, 원인을 분석하여 임시 해결책을 제시합니다. 문제의 원인은 `deno info` 명령어가 `kind: asserted`인 모듈을 제대로 처리하지 못하는 데 있었으며, 이를 `esm`으로 취급하도록 수정하여 해결했습니다. 다만, 근본적인 해결책은 아니며, 추가적인 `npm` 관련 에러가 남아있음을 언급합니다. 이 포스팅은 Deno 생태계에서 Vite 플러그인을 사용할 때 발생할 수 있는 문제와 그 해결 과정을 보여주며, 유사한 문제를 겪는 개발자들에게 실질적인 도움을 줄 수 있습니다.
hackers.pub · Hackers' Pub
Link author: Lee Dogeon@moreal@hackers.pub
킵올빌런 은퇴식 퍼포먼스 대박이다
ast-grep 알듯 모를듯.. 아래같이 하면 innerHTML prop를 넘겨주고, 여닫는 사이에 내용은 없지만 self-closing 안 하는 케이스들을 잡을 수 있겠다.
id: innerhtml-not-self-closed
language: tsx
severity: error
rule:
all:
- kind: jsx_element
pattern: <$TAG $$$ARGS></$TAG>
all:
- has:
kind: jsx_opening_element
has:
kind: jsx_attribute
regex: innerHTML
- has:
kind: jsx_closing_element
fix: "<$TAG $$$ARGS />"
¤ 같은 텍스트가 있는 부분이 ¤로 보이는 게 이상해서 보니 찾아보니 ¤ 라는 HTML character reference가 있다. 그래서 오.. 하다가 뒤에 세미콜론이 붙지도 않는데 왜 그러지 의문이 남았는데, HTML 스펙 문서로 가서 보니까 세미콜론이 없는 버전(¤)도 있다(??). 아마 이 스펙을 충실히 구현해서 그렇게 표시되는 듯 하다. 보여주는 쪽에서 code 태그로 감싸지 않아서 그런 것 아닐까..
별개로 세미콜론 없는 버전은 CommonMark 플레이그라운드에서 해볼때 동작하지 않는데 CommonMark 스펙이거나 버그일 것 같다.
Gitify, GitHub 알람 들려주는 프로그램인데 GitHub 이슈나 PR에 코멘트 달리는 거 매번 GitHub 들어가서 확인 안 하고, 알림으로 받을 수 있어서 좋습니다
끝자락에 나오는 Matt Parsons가 작성한 Junior Code를 장려하는 글은 아마 이거인 것 같다. 가상의 이야기(?) 파트가 웃기다 😂
https://www.parsonsmatt.org/2019/12/26/write_junior_code.html
Boss: You’re going to be allowed to make a new project in whatever language you want. Even Haskell.
Employee: Oh yeah!! Time to write FANCY HASKELL!!
Employee writes a ton of really fancy Haskell, delivers fantastically and in about 1000 lines of code. Everyone is very impressed. The project grows in scope.
Boss: It’s time to hire another Haskeller. What are the job requirements?
Employee: Oh, they’ll need to know type-level programming, lenses, servant, Generics, monad transformers, mtl, and advanced multithreading in order to be productive anytime soon.
듀오링고 켰다가 이상한거 봤다. 이젠 영어 공부하려면 유니코드도 해석할 줄 알아야 하는건가 (아님)
$ python3 -c "print('\uc785\ub2c8\ub2e4')"
입니다
macOS에서는 Xcode에서 git을 함께 주지만 brew install git으로 별도로 설치해서 사용해야 한다. 왜냐하면 Git 취약점 최신 패치버전은 2.50.1인데 Xcode git 버전은 2.39.5 버전이다 😱 (다른 패치버전들도 있는데 2.43 및 이후 버전들만 관리 중인가 보다[1])
https://github.blog/open-source/git/git-security-vulnerabilities-announced-6/
음 변경사항이 저장소 생성시 연결할 GitHub App을 설정 가능하다는 점 정도네
아마 폰트에 없어서인지 다 네모 박스로 표시되는구나 했는데, 자세히 보니 네모 박스 안에 16진수 값으로 표시해 주고 있었네 👀 이게 어떻게 이렇게 되지 했는데 렌더링 해주는 쪽 재량이라는 듯 하다. Chrome (그리고 Electron) 은 그냥 네모로 보인다.
최신 Unicode Han Database 중 숫자 표현을 보면 아래 라인이 포함되어 있다. 근데 저 유니코드를 검색해보니 兆가 나오고 이는 두번째 값인 1000000000000 이 맞는 값인 것 같은데
U+5146 kPrimaryNumeric 1000000 1000000000000
kPrimaryNumeric 속성 설명에 의하면 첫 번째 값이 가장 일반적인 것으로 취급되는 것이 맞다는 것 같아서 의문이 들었다 🤔
If an ideograph has more than one numeric value, the first one is to be considered the most common one, and that first value is used for the Numeric_Value property of the ideograph.
Claude에게 물어보니 지역적이거나 역사적인 이유가 있을 것이라 해서 중국에서 다르게 쓰나 싶었는데, 위키백과 문서들을 참고하니 兆의 의미가 시대에 따라 달라져 왔기도 했고, 표기법(셈법?)에 따라 또 다른 듯 하다. 지금 사용하는 단위마다 10000배씩 변화하는 방식은 만진법이라고 하는 것 같다.
엥 벌써 선별 결과가 나왔나?
"대안: 의도를 선언하기" 부분이 아하 모먼트였습니다. 🤯
CPython 저장소에는 라벨을 달아놓으면 백포팅 PR을 알아서 만들어주는 봇이 있다 😲
https://github.com/python/cpython/pull/136027#issuecomment-3013426273
블로그 글로도 적어봤습니다. 재현 환경 구성 하는거 너무 노가다인데 어떻게 잘 할까..















