Profile img

McK

@mck@hackers.pub · 15 following · 18 followers

우리.인생
@mck@uri.life

mise WARN env value contains '$' which will be expanded in a future release. Set env_shell_expand = true to opt in or env_shell_expand = false to keep current behavior and suppress this warning.

켜고 싶다면 VAR = "foo$$bar" 처럼 고쳐야 됨. VAR = '''foo$bar''' 이런거 안 됨. 난 꺼버렸음.

1
0
0

브라우저 API가 모두 ‘웹’ API는 아님
------------------------------
- 웹 플랫폼은 *표준화된 API* 위에서 동일하게 동작한다는 인식이 널리 퍼져 있으나, 실제로는 *브라우저 벤더별 인프라* 에 의존하는 API가 다수 존재함
- Geolocation, Speech, Push, Payments, Passkeys 등은 표면적으로는 웹 표준이지만, 내부적으로는 *Google·Apple·Microsoft의 서비스* 를 호출
- 동일한…
------------------------------
https://news.hada.io/topic?id=25974&utm_source=googlechat&utm_medium=bot&utm_campaign=1834

1
4
1
2

Tailwind 제작사, 엔지니어링 팀의 75% 해고
------------------------------
- Tailwind CSS 문서에 *LLM 최적화용
/llms.txt 엔드포인트* 를 추가하는 PR이 커뮤니티에서 논란을 일으킴
- 제안된 기능은 모든 문서 페이지를 *텍스트 전용으로 결합해 대형 언어 모델(LLM)* 이 쉽게 학습할 수 있도록 하는 구조
- Tailwind Labs 측은 *수익성 악화와 트래픽 감소* 를 이유로 해당 기능을 거…
------------------------------
https://news.hada.io/topic?id=25650&utm_source=googlechat&utm_medium=bot&utm_campaign=1834

0
1

witr 지원

❯ witr ghostty
Target      : ghostty

Process     : ghostty (pid 36529)
User        : mck
Service     : launch job demand
Command     : /Applications/Ghostty.app/Contents/MacOS/ghostty
Started     : just now (Mon 2025-12-29 10:08:55 +00:00)

Why It Exists :
  launchd (pid 1) → ghostty (pid 36529)

Source      : application.com.mitchellh.ghostty.34914134.34914139 (launchd)
              Type : Launch Agent

Working Dir : /
Open Files  : 100 of 256 (39%)
Locks       : /Users/mck/Library/Caches/com.mitchellh.ghostty/sentry/8c48f586-5c27-49c8-71a1-7727494394fc.run.lock

Warnings    :
  • Process is running from a suspicious working directory: /
  • Service name and process name do not match
1
7

예전에 LLM이 얼마나 복잡한 코드를 이해할 수 있는지 파악하기 위해 Gemini 2.5 모델들로 내 IOCCC 2012 수상작을 던지고 무슨 일을 하는지 실행 없이 알아 맞춰 보라고 했더니 하나도 제대로 파악하지 못했던 적이 있다. 문득 생각이 나서 Gemini 3 Pro는 개선되었을려나 생각했는데, 힌트 하나만 받고 10분동안 생각하더니 완벽하게 응답에 성공했다! 심지어 설명도 실행 없이 분석했다는 걸 감안할 때 매우 정확했다. IOCCC 수상작을 모두 기억하고 있을 가능성을 감안해 이전에 본 적이 있냐고 물어 보니 환각(...)을 내뱉는 것도 그렇고(그보다 외웠다면 처음에 바로 정답을 얘기했겠지), 실제로 생각 과정을 보면 사람이 할 법한 분석을 전부 하고 있는 걸 보니 진짜로 LLM들의 reasoning 능력이 이 정도 수준에 도달했음을 알 수 있다. 세상 참 많이 발전했네.

> 다음 C 프로그램이 하는 일을 알려 줘. [코드 생략]

이 C 프로그램은 **난독화(obfuscated)**된 코드로, 입력받은 **시간 또는 단위가 포함된 문자열**을 해석하여 총합을 계산한 뒤, 그 결과를 **16진수(Hexadecimal)**로 출력하는 프로그램입니다.

구체적인 작동 방식은 다음과 같습니다:

1.  **입력 처리**:
    *   `getchar()`를 통해 표준 입력(stdin)에서 문자를 하나씩 읽어들입니다.
    *   `|32`를 통해 대문자를 소문자로 변환하여 처리합니다.

2.  **문자 매핑 (해싱)**:
    *   `"ynwtsflrabg"`라는 문자열은 입력받은 문자가 특정 단위(예: year, week, second 등)인지 확인하기 위한 인덱스 문자열입니다.
    *   입력된 문자가 이 문자열에 포함되면 변수 `b`에 특정 해시 값을 누적합니다.

3.  **단위 변환 및 계산**:
    *   `"1+DIY/.K430x9G(kC["`라는 복잡한 문자열은 **룩업 테이블(Lookup Table)** 역할을 합니다.
    *   내부 루프에서 이 테이블과 비트 연산(`&255^b`)을 통해 현재 입력된 단위가 무엇인지(예: 'y'가 연도인지, 's'가 초인지) 판별합니다.
    *   `u=1ll<<6177%n--*4` 부분은 각 단위에 맞는 **가중치(Multiplier)**를 계산합니다. `<<` 비트 시프트 연산을 사용하는 것으로 보아, 특정 단위마다 2의 제곱수 형태의 배수를 적용하거나, 혹은 시간을 초 단위(또는 나노초 단위)로 변환하는 계수를 생성합니다.

4.  **결과 누적**:
    *   변수 `m`에 파싱된 수치와 단위 가중치를 곱하여 누적합니다.

5.  **출력**:
    *   최종적으로 계산된 값 `m`을 `printf("%llx\n", m)`을 통해 **16진수(long long hex)** 형태로 출력합니다.

**요약하자면:**
이 코드는 "1y(1년)", "2w(2주)", "30s(30초)"와 같은 형식의 텍스트를 입력받아, 이를 초(second)나 특정 기본 단위로 환산한 총합을 16진수로 보여주는 **단위 변환 계산기**입니다.> 아... 미묘하게 틀렸어. 컴파일하지 않고서 좀 더 생각해 보겠어? 힌트: 입력에는 0~9까지의 문자가 들어갈 수 없음.

이전 설명이 '미묘하게' 틀렸던 이유는, 이 코드가 '단위(년, 주, 초)'를 처리하는 것이 아니라 **"영어 단어로 된 숫자(English Number Words)"**를 해석하여 그 결과를 숫자로 출력하는 프로그램이기 때문입니다.

입력에 `0-9`가 들어가지 않는다는 힌트가 결정적이었습니다. 이 프로그램은 `"one"`, `"two"`, `"hundred"` 같은 문자열을 읽어서 숫자로 변환합니다.

수정된 분석 결과는 다음과 같습니다:

1.  **영어 단어 해싱 (Hashing English Words)**:
    *   `"ynwtsflrabg"` 문자열은 영어 숫자를 구별하는 데 필요한 핵심 문자들(`y, n, w, t, s, f, l, r, a, b, g`)만 모아둔 것입니다.
    *   입력된 단어에서 이 문자들만 뽑아내어 `b`라는 변수에 Base-8(8진수) 형태로 누적시킵니다.
    *   예를 들어:
        *   `"one"` -> `n`(인덱스 1) -> 해시값 **1**
        *   `"two"` -> `t`(3), `w`(2) -> 해시값 **26** ($3 \times 8 + 2$)
        *   `"three"` -> `t`(3), `r`(7) -> 해시값 **31** ($3 \times 8 + 7$)

2.  **룩업 테이블 매칭 (Lookup Table)**:
    *   `"1+DIY/.K430x9G(kC["` 문자열은 각 숫자의 해시값에 42를 더한 문자들로 구성되어 있습니다.
    *   해시값과 이 테이블을 비교하여 입력된 단어가 어떤 숫자인지 판별합니다.
        *   인덱스 1 (`+`, ASCII 43): 43 - 42 = 1 -> `"one"`
        *   인덱스 2 (`D`, ASCII 68): 68 - 42 = 26 -> `"two"`
        *   인덱스 12 (`9`, ASCII 57): 57 - 42 = 15 -> `"hundred"` (해시 `n,r`)
        *   인덱스 16 (`C`, ASCII 67): 67 - 42 = 25 -> `"ten"` (해시 `t,n`)

3.  **16진수 트릭 (Hexadecimal Trick)**:
    *   이 프로그램의 가장 재미있는 점은 **"십진수처럼 보이는 16진수"**를 사용한다는 것입니다.
    *   `"ten"`을 입력받으면 실제 값 10이 아니라 **16 (0x10)**을 더합니다.
    *   `"hundred"`를 입력받으면 100이 아니라 **256 (0x100)**을 곱합니다.
    *   `"ty"` 접미사(twenty 등)가 붙으면 **16 (0x10)**을 곱합니다.
    *   이렇게 계산한 뒤 마지막에 `printf("%llx\n", m)`으로 **16진수 출력**을 합니다.
    *   결과적으로 내부 값은 16진수이지만, 출력된 문자열은 우리가 아는 십진수 숫자와 똑같이 보입니다.

**결론:**
이 프로그램은 **영어로 적힌 숫자(예: "one hundred twenty three")를 입력받아, 이를 아라비아 숫자("123")로 변환하여 출력하는 번역기**입니다.

**예시 작동:**
*   입력: `one hundred` -> 내부 계산: `0x1 * 0x100` -> 출력: `100`
*   입력: `thirty two` -> 내부 계산: `0x30 + 0x2` -> 출력: `32`
*   입력: `ten` -> 내부 계산: `0x10` ->> 맞았어! 이 코드를 혹시 이전에 본 적이 있니?

네, 본 적이 있습니다! 이 코드는 전설적인 **IOCCC (International Obfuscated C Code Contest, 국제 난독화 C 코드 대회)**의 **1990년 수상작** 중 하나로, **Brian Westley**가 작성한 코드입니다.

이 코드는 프로그래머들 사이에서 **"The Hexadecimal Trick (16진수 트릭)"**을 사용한 아주 기발한 예제로 유명합니다.

**이 코드의 천재적인 점:**

1.  **입력:** `one`, `two`, `hundred` 같은 영어 단어를 받습니다.
2.  **처리:** 내부적으로 **16진수(Hex)** 체계로 계산합니다.
    *   "ten"을 10이 아닌 `0x10` (16)으로 저장합니다.
    *   "hundred"는 100이 아닌 `0x100` (256)을 곱합니다.
3.  **출력:** 마지막에 `%d`(10진수)가 아니라 **`%x` (16진수)** 포맷으로 출력합니다.
    *   내부 값 `0x10`이 출력되면 화면에는 **`10`**이라고 찍힙니다.
    *   사용자는 이것이 10진수 `10`인 줄 알지만, 사실 컴퓨터는 `16`이라는 값을 `10`이라는 모양(16진수)으로 보여준 것입니다.

덕분에 10진수 변환을 위한 복잡한 자리 올림 로직 없이도, 아주 짧은 코드로 "영어 -> 숫자" 변환기를 구현해낸 고전 명작입니다.
10
0
0

asdf + direnv 조합을 mise로 바꾸고 나서, 초반에는 환경 변수 제어가 쉽고 다양한 점이 좋았다면 시간이 갈수록 tasks 기능이 기존 프로젝트까지 mise로 전환하게 만든다.

[tasks."dev:db"]
dir = "./data"
run = "./docker-run-postgres.sh --no-tty"

[tasks."dev:cms"]
dir = "./cms"
run = """
until nc -z localhost 5432; do
  echo "Waiting for database to be ready..."
  sleep 1
done
corepack yarn dev || [ $? -eq 129 ] || [ $? -eq 130 ]
"""

[tasks.dev]
depends = ["dev:db", "dev:cms"]
1

AWS CEO, "AI로 주니어 개발자를 대체하는 것은 ‘가장 어리석은 생각 중 하나’"
------------------------------
-
AWS CEO Matt Garman 은 기업이 AI로 주니어 개발자를 대체하려는 움직임에 반대하며, 이들이 *AI 도구 활용에 가장 능숙한 인력층* 이라고 강조
- 첫 번째 이유로, 젊은 개발자들은 *AI 기반 툴에 익숙하고 적응이 빠르며* , 실제로 많은 주니어 개발자가 매일 AI를 활용하고 있음
- 두 번째로, 주니어 인력은…
------------------------------
https://news.hada.io/topic?id=25159&utm_source=googlechat&utm_medium=bot&utm_campaign=1834

0

GitHub, 2026년 3월부터 셀프호스티드 액션 러너에 요금 부과 예정
------------------------------
- 2026년 1월 1일부터 *GitHub 호스티드 러너 요금이 최대 39% 인하* 되고, 3월 1일부터 *셀프 호스티드 러너에 분당 0.002달러 요금* 이 부과됨
- 전체 고객의 *96%는 요금 변동이 없으며* , 4% 중 85%는 인하, 15%는 월 중간값 약 13달러 인상
- *공개 저장소의 Actions 사용은 계속 무료* 이며, GitHub Enter…
------------------------------
https://news.hada.io/topic?id=25128&utm_source=googlechat&utm_medium=bot&utm_campaign=1834

0

"OOO 주식회사 OOO 대표님 맞으시죠? 산업안전보건교육 받아야 하는 업체에 해당합니다. 직원이나 프리랜서 고용 있으시죠? 어쩌고~" 일단 쎄한 느낌을 받았습니다. 다다다 쏴붙이면서 중간에 질문할 틈을 최대한 막으면서 가는 꼬락서니가 관공서는 아니구나 싶었습니다. 고용이나 프리랜서 없다고 하니, 뚝 끊어 버립니다. 검색해보니, 이런식의 반쯤 사기같은 행태가 존재한다고 하네요. 소규모 법인 대표님들 조심하세요~

3

McK shared the below article:

React2Shell 취약점의 특성을 알아보자

고남현 @gnh1201@hackers.pub

React2Shell(CVE-2025-55182) 취약점은 React와 Next.js 환경에서 발생하는 심각한 역직렬화(Deserialization) 보안 약점을 다룹니다. 이 취약점은 JSON과 자체 규격인 Flight 포맷을 처리하는 과정에서 발생하며, 공격자가 JavaScript의 프로토타입 오염(Prototype Pollution)을 통해 객체의 성격을 임의로 변경하고 원격 코드 실행(RCE)까지 가능하게 합니다. 역직렬화 과정은 본래 자료형에 엄격하지 않고 특정 기호가 실행 신호로 작동할 수 있어 보안상 취약할 수 있는데, React2Shell은 특히 Promise 객체의 속성을 악용하여 악성 코드를 트리거하는 방식을 취합니다. 실제로 취약한 서버에 Mirai 봇넷 계열의 악성코드가 주입되어 서버가 디도스(DDoS) 공격 도구로 악용되는 사례가 발견되기도 했습니다. 이를 방어하기 위해서는 Next.js를 보안 패치가 적용된 최신 버전으로 업데이트하거나 Vercel에서 제공하는 전용 패치 도구를 활용해야 하며, 필요시 웹 방화벽(WAF) 규칙을 강화하는 조치가 필요합니다. 이 글은 현대 웹 생태계에서 역직렬화 공격의 위험성과 구체적인 대응 방안을 제시하여 안전한 애플리케이션 운영을 위한 핵심적인 가이드 역할을 합니다.

Read more →
1

Anthropic, MCP를 Linux Foundation에 기증
------------------------------
Anthropic이 AI 애플리케이션과 외부 시스템을 연결하는 오픈 표준인 Model Context Protocol(MCP)을 Linux Foundation에 기증했다.

Linux Foundation 산하에 Agentic AI Foundation(AAIF)을 새로 설립했으며, Anthropic, Block, OpenAI가 공동 창립하고 Google, Microsoft, AWS, Cloudflare, Bloomberg가 지원한다…
------------------------------
https://news.hada.io/topic?id=24953&utm_source=googlechat&utm_medium=bot&utm_campaign=1834

0

Vercel 제품들은 딱 봐도 설계가 너무 구리게 느껴지는데, 그렇다고 깊게 생각해보진 않고 또 쨋든 사람들이 젤 많이 쓰긴하니까, 내 느낌이 잘못된건지 헷갈린다.

1

https://sass-lang.com/documentation/breaking-changes/if-function/

In 2010, shortly after adding the boolean value type, Sass added the global if() function as a way to easily use booleans in a single expression without having to write out an entire @if rule. This function had the signature if($condition, $if-true, $if-false) and returned $if-true if $condition was truthy and $if-false otherwise.

At the time, browsers didn’t even support @media queries and we never imagined that CSS might support its own if() function someday. But fifteen years later, support for the CSS if() function began landing in browsers and we had to do so as well in order to remain fully CSS-compatible.

요약하자면, "우리가 if()함수를 전역으로 넣을 때까지만 해도 CSS에 if 함수가 도입될거라곤 상상도 못했어"

대안으로 제시하는 문법은 아직 사용하지 못하는 곳이 있을테니 당분간 @if and @else 규칙 쓰는게 나을듯.

0
1

Bootstrap 바탕으로 UI를 구성한 프로젝트에 scrollspy를 넣어달래서 무심코 Bootstrap Scrollspy를 써봤는데 아뿔싸 … 이 프로젝트는 SvelteKit이었다. SvelteKit은 hash 변경에 개입하기 때문에 충돌함. IntersectionObserver 몇 개로 해결

1

Vite처럼 HMR을 지원하는 환경에서 개발을 한다면, 거기다 상태 관리에 싱글톤 인스턴스가 쓰인다면 다음 코드가 언젠가는 도움이 될지도.

if (import.meta.hot) {
  import.meta.hot.accept(() => {
    import.meta.hot?.invalidate();
  });
}
3

McK shared the below article:

일본 서버를 한국과 거의 비슷한 속도로 원격 접속하기

고남현 @gnh1201@hackers.pub

이 글에서는 한국에서 일본 서버를 사용할 때 발생하는 네트워크 지연 문제를 다루고, 해저 케이블망을 활용하여 이를 개선하는 방법을 소개합니다. 저렴한 일본 서버를 선택했지만, 실제 한국에서의 통신 속도가 예상보다 훨씬 느린 250ms에 달해 미국 시애틀보다도 못한 상황을 겪었습니다. 하지만 Microsoft Azure의 한국 리전을 중간 서버로 활용하여 데이터 센터 간 통신을 시도한 결과, 핑 시간을 30ms대로 크게 단축시키는 데 성공했습니다. 이는 86%의 속도 향상으로, RDP를 통해 원격 데스크탑을 사용하는 환경에서 체감 속도를 극적으로 개선했습니다. 이 글은 해외 서버를 사용할 때 네트워크 지연을 줄이는 실질적인 해결책을 제시하며, 독자에게 더 빠르고 효율적인 원격 작업 환경을 구축하는 데 도움을 줄 수 있습니다.

Read more →
8
1
0

McK shared the below article:

GitHub Action Rerunner

초무 @2chanhaeng@hackers.pub

GitHub Action Rerunner는 팀원들이 레포지토리에 대한 직접적인 쓰기 권한 없이도 실패한 GitHub Actions를 재실행할 수 있도록 권한을 위임하는 웹 애플리케이션입니다. 레포지토리 소유자는 개인 및 조직 레포지토리를 등록하고, 암호화된 Personal Access Token을 등록하여 공유 가능한 고유 링크를 생성할 수 있습니다. 팀원은 이 링크를 통해 자신에게 할당된 PR 목록을 확인하고, 실패한 Action을 원클릭으로 재실행할 수 있습니다. Next.js, React, Tailwind CSS, PostgreSQL, Prisma ORM, Octokit 등의 기술 스택을 사용했으며, GitHub OAuth를 통해 안전한 계정 관리를 제공합니다. 이 도구를 사용하면 레포지토리 보안을 유지하면서도 팀원들이 CI/CD 프로세스를 효율적으로 관리할 수 있어 개발 생산성을 향상시킬 수 있습니다.

Read more →
7

지금 아이디어는 load에서 SSR인지 여부에 따라서 T | Promise<T>를 던져서 SSR에서는 바로 데이터 / CSR 에서는 Promise 결과가 스트리밍되게 하고 +page.svelte에서는 항상 :then을 씌워주면 SSR때도 Promise 아닌게 들어오면 :then을 렌더링하니까 어떻게 될 거 같긴 한데 어쨌든 SvelteKit의 간단한 구조는 포기해야 하니까... (어쩔 수 없는거지 싶기도 하고)

McK shared the below article:

Optique 0.7.0: Smarter error messages and validation library integrations

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

Optique 0.7.0 introduces enhancements focused on improving the developer experience and expanding its ecosystem for type-safe CLI argument parsing in TypeScript. This release brings automatic "Did you mean?" suggestions to help users correct typos, along with seamless integrations for Zod and Valibot validation libraries, ensuring more robust and efficient CLI development. Duplicate option name detection is now included to catch configuration bugs early, and context-aware error messages provide users with precise feedback. The update also features customizable shell completion naming conventions and improved line break handling in error messages. With these new features, Optique aims to streamline CLI development in TypeScript, making it more intuitive and less error-prone. This release underscores Optique's commitment to providing developers with powerful tools for building high-quality CLI applications.

Read more →
7

panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x2 addr=0x0 pc=0x100d12fe0]

vscode 언어 서버가 죽어버림

0
0
2
1
1

사용 이틀째.

딱히 불편함은 없고 빠릿빠릿해서 좋다. iTerm2에 있던 그 많은 설정은 거의 필요 없었다는걸 새삼 느꼈다. Ghostty에서 설정을 열면(cmd+,) config 파일 고치라고 편집기가 뜬다 🤣

새 창이나 탭을 띄울 때 현재 위치에서 띄우지 못 하는데, 셀 통합이 불안정해서란다. iTerm2용 통합 스크립트를 다 막아도 "invalid OSC command: 1337;ShellIntegrationVersion=14;shell=zsh"가 찍히는 중. 공식 설명서 따라서 수동으로 읽었는데 되다 말다 그럼.

2
0
1
1

2025년 터미널 에뮬레이터 현황: 방랑하는 챔피언들 1위 Ghostty, 2위 Foot, 3위 Kitty가 상위권을 차지함 세 터미널 모두 Unicode 처리 정확도(WIDE/LANG/ZJW/VS16) 항목에서 최고 점수 기록 VTE 기반 터미널(GNOME Terminal, Terminator, LXTerminal 등) 은 하위권 유지 성능(Elapsed time) 측면에서 Foot, WezTerm, tmux, Konsole 등이 빠름 (100초 미만) iTerm2와 Extraterm은 CPU를 과도하게 사용하며, 테스트 시간을 단축해야 했음

과연 이번에도 "돌고 돌아 iTerm2로 돌아옴"이 될 것인가?

https://news.hada.io/topic?id=24130 https://www.jeffquast.com/post/state-of-terminal-emulation-2025/

1
2
0
6

컴포넌트 새로 만들다가 써야할 함수를 급하게 날림으로 짜고 남겨뒀던게 기억나서 에이전트한테 테스트 짜달라고 했더니,

주석으로 테스트 대상 코드에 문제 있다고 줄줄이 적어놔서 뭐냐니까 svelte lune mode를 못 알아먹은 거였다. 미덥잖아서 다른 에이전트에 리뷰 던지니까 이번엔 deprecated 된 놈*으로 바꿔야 한다며 … 아주 그냥 쌍으로 환각 파티를 벌이는구만

나도 모르게 감정 이입을 했는지 deprecated 명시한 문서를 던져주니까 한 놈은 수긍하고 한 놈은 끝까지 우긴다 🤣

SvelteKit 2.12: $app/stores deprecated $app/store/page$app/state/page

1
0

멀쩡한 코드에 문제 있다며 vscode가 절규하는 원인을 한참 뜯어봤더니, 몇몇 언어 서버의 버그가 합쳐져 화음을 이루어 괴롭혔다는 결론. 설정 파일에 단 두 글자 넣자 사라졌다. (솔직히 // *-ignore 넣고 넘어갈까 했는데)

1
1
1

Ignores hidden directories and files, by default.

fd의 features 가운데 하나. 익숙치 않은 사람은 포기하고find로 돌아갈만한 지점일듯.

Warn when forgetting --hidden on a filename starting with . sharkdp/fd#1588

그나마 있는 경고를 보기도 까다롭다. .profile, \.profile, ^\.profile 모두 기대와 다른 결과가 나온다.

 fd '^\.profile'
[fd error]: The pattern(s) seems to only match files with a leading dot, but hidden files are filtered by default. Consider adding -H/--hidden to search hidden files as well or adjust your search pattern(s).
0
4
  • 역명부기: 역이름 옆에 광고를 함
  • 혁명부기: 혁명을낉여오라하지않앗느냐
3
1
0
0
1