Hashnode 게시글을 불러오는 API를 기반으로 자기만의 정적 사이트 생성기 템플릿 굽는 분들이 계시길래, Hackers Pub도 이런게 되어야 하지 않나 싶었다. 실제로 graphql API를 까봤는데, 이론상으로 불가능하지는 않아서 도즈언 했는데 생각보다 잘 나온다..... Astro에다가 Hashnode API 연결한 예시를 베이스로 해서, hackerspub 버전으로 바꿔달라고 claude code한테 프롬프트 넣어줬더니 진짜 그냥 해줌.

洪 民憙 (Hong Minhee)
@hongminhee@hackers.pub · 927 following · 644 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
자동으로 돌아가지 않는 테스트 코드는 역시 끔찍하다
Quick update on our release schedule! While we initially planned for Fedify 2.0 to follow version 1.9, we've decided to release Fedify 1.10 next instead. A few features originally slated for 1.9 need more time to mature, and we want to ensure Fedify 2.0 gets the careful attention it deserves for its breaking changes. This means you'll get incremental improvements sooner with 1.10—including our new RFC 6570 URI Template implementation for better expansion and pattern matching—while we continue preparing the more substantial architectural changes for 2.0 in parallel. Rest assured, this doesn't change our long-term roadmap; it just gives us more flexibility to deliver features when they're ready rather than holding them back for a major release.
emacs 개발자들은 LLM 시대에 빛을볼 중요한 선견지명을 가지고 있었는데
- 텍스트 에디터는 범용 인터페이스다(반 OS가 되어버린 emacs)
- RAG할 지식데이터베이스를 만들고 관리할수 있어야한다(org-mode).
근데 이걸 알고도 한푼도 못벌었다ㅋㅋㅋ 열매는 cursor와 notion에게로...
I currently making requets-based synchronous ActivityPub client for apkit...
Ok? I did a lot haha. Ive been focusing on this Sep and last days of Oct, as a consequence, the midterm and lots assignments await me?
Fedify 1.9.0: Security enhancements, improved DX, and expanded framework support
We are excited to announce Fedify 1.9.0, a mega release that brings major security enhancements, improved developer experience, and expanded framework support. Released on October 14, 2025, this version represents months of collaborative effort, particularly from the participants of Korea's OSSCA (Open Source Contribution Academy).
This release would not have been possible without the dedicated contributions from OSSCA participants: Jiwon Kwon (@z9mb1wwj), Hyeonseo Kim (
@gaebalgom개발곰), Chanhaeng Lee (
@2chanhaeng초무), Hyunchae Kim (
@r4bb1t톡기), and An Subin (
@nyeongAn Nyeong (安寧)). Their collective efforts have significantly enhanced Fedify's capabilities and made it more robust for the fediverse community.
Origin-based security model
Fedify 1.9.0 implements FEP-fe34, an origin-based security model that protects against content spoofing attacks and ensures secure federation practices. This critical security enhancement enforces same-origin policy for ActivityPub objects and their properties, preventing malicious actors from impersonating content from other servers.
The security model introduces a crossOrigin
option in Activity Vocabulary property accessors (get*()
methods) with three security levels:
// Default behavior: logs warning and returns null for cross-origin content
const actor = await activity.getActor({ crossOrigin: "ignore" });
// Strict mode: throws error for cross-origin content
const object = await activity.getObject({ crossOrigin: "throw" });
// Trust mode: bypasses security checks (use with caution)
const attachment = await note.getAttachment({ crossOrigin: "trust" });
Embedded objects are automatically validated against their parent object's origin. When an embedded object has a different origin, Fedify performs automatic remote fetches to ensure content integrity. This transparent security layer protects your application without requiring significant code changes.
For more details about the security model and its implications, see the origin-based security model documentation.
Enhanced activity idempotency
Activity idempotency handling has been significantly improved with the new withIdempotency()
method. This addresses a critical issue where activities with the same ID sent to different inboxes were incorrectly deduplicated globally instead of per-inbox.
federation
.setInboxListeners("/inbox/{identifier}", "/inbox")
.withIdempotency("per-inbox") // New idempotency strategy
.on(Follow, async (ctx, follow) => {
// Each inbox processes activities independently
});
The available strategies are:
"per-origin"
: Current default for backward compatibility"per-inbox"
: Recommended strategy (will become default in Fedify 2.0)- Custom strategy function for advanced use cases
This enhancement ensures that shared inbox implementations work correctly while preventing duplicate processing within individual inboxes. For more information, see the activity idempotency documentation.
Relative URL resolution
Fedify now intelligently handles ActivityPub objects containing relative URLs, automatically resolving them by inferring the base URL from the object's @id
or document URL. This improvement significantly enhances interoperability with ActivityPub servers that use relative URLs in properties like icon.url
and image.url
.
// Previously required manual baseUrl specification
const actor = await Actor.fromJsonLd(jsonLd, { baseUrl: new URL("https://example.com") });
// Now automatically infers base URL from object's @id
const actor = await Actor.fromJsonLd(jsonLd);
This change, contributed by Jiwon Kwon (@z9mb1wwj), eliminates a common source of federation failures when encountering relative URLs from other servers.
Full RFC 6570 URI template support
TypeScript support now covers all RFC 6570 URI Template expression types in dispatcher path parameters. While the runtime already supported these expressions, TypeScript types previously only recognized simple string expansion.
// Now fully supported in TypeScript
federation.setActorDispatcher("/{+identifier}", async (ctx, identifier) => {
// Reserved string expansion — recommended for URI identifiers
});
The complete set of supported expression types includes:
{identifier}
: Simple string expansion{+identifier}
: Reserved string expansion (recommended for URIs){#identifier}
: Fragment expansion{.identifier}
: Label expansion{/identifier}
: Path segments{;identifier}
: Path-style parameters{?identifier}
: Query component{&identifier}
: Query continuation
This was contributed by Jiwon Kwon (@z9mb1wwj). For comprehensive information about URI templates, see the URI template documentation.
WebFinger customization
Fedify now supports customizing WebFinger responses through the new setWebFingerLinksDispatcher()
method, addressing a long-standing community request:
federation.setWebFingerLinksDispatcher(async (ctx, actor) => {
return [
{
rel: "http://webfinger.net/rel/profile-page",
type: "text/html",
href: actor.url?.href,
},
{
rel: "http://ostatus.org/schema/1.0/subscribe",
template: "https://example.com/follow?uri={uri}",
},
];
});
This feature was contributed by Hyeonseo Kim (@gaebalgom개발곰), and enables applications to add custom links to WebFinger responses, improving compatibility with various fediverse implementations. Learn more in the WebFinger customization documentation.
New integration packages
Fastify support
Fedify now officially supports Fastify through the new @fedify/fastify
package:
import Fastify from "fastify";
import { fedifyPlugin } from "@fedify/fastify";
const fastify = Fastify({ logger: true });
await fastify.register(fedifyPlugin, {
federation,
contextDataFactory: () => ({ /* your context data */ }),
});
This integration was contributed by An Subin (@nyeongAn Nyeong (安寧)). It supports both ESM and CommonJS, making it accessible to all Node.js projects. See the Fastify integration guide for details.
Koa support
Koa applications can now integrate Fedify through the @fedify/koa
package:
import Koa from "koa";
import { createMiddleware } from "@fedify/koa";
const app = new Koa();
app.use(createMiddleware(federation, (ctx) => ({
user: ctx.state.user,
// Pass Koa context data to Fedify
})));
The integration supports both Koa v2.x and v3.x. Learn more in the Koa integration documentation.
Next.js integration
The new @fedify/next
package brings first-class Next.js support to Fedify:
// app/api/ap/[...path]/route.ts
import { federation } from "@/federation";
import { fedifyHandler } from "@fedify/next";
export const { GET, POST } = fedifyHandler(federation);
This integration was contributed by Chanhaeng Lee (@2chanhaeng초무). It works seamlessly with Next.js App Router. Check out the Next.js integration guide for complete setup instructions.
CommonJS support
All npm packages now support both ESM and CommonJS module formats, resolving compatibility issues with various Node.js applications and eliminating the need for the experimental --experimental-require-module
flag. This particularly benefits NestJS users and other CommonJS-based applications.
FEP-5711 collection inverse properties
Fedify now implements FEP-5711, adding inverse properties to collections that provide essential context about collection ownership:
const collection = new Collection({
likesOf: note, // This collection contains likes of this note
followersOf: actor, // This collection contains followers of this actor
// … and more inverse properties
});
This feature was contributed by Jiwon Kwon (@z9mb1wwj). The complete set of inverse properties includes
likesOf
, sharesOf
, repliesOf
, inboxOf
, outboxOf
, followersOf
, followingOf
, and likedOf
. These properties improve data consistency and enable better interoperability across the fediverse.
CLI enhancements
NodeInfo visualization
The new fedify nodeinfo
command provides a visual way to explore NodeInfo data from fediverse instances. This replaces the deprecated fedify node
command and offers improved parsing of non-semantic version strings. Try it with:
fedify nodeinfo https://comam.es/snac/
This was contributed by Hyeonseo Kim (@gaebalgom개발곰). The command now correctly handles various version formats and provides a cleaner visualization of instance capabilities. See the CLI documentation for more options.
Enhanced lookup with timeout
The fedify lookup
command now supports a timeout option to prevent hanging on slow or unresponsive servers:
fedify lookup --timeout 10 https://example.com/users/alice
This enhancement, contributed by Hyunchae Kim (@r4bb1t톡기), ensures reliable operation even when dealing with problematic remote servers.
Package modularization
Several modules have been separated into dedicated packages to improve modularity and reduce bundle sizes. While the old import paths remain for backward compatibility, we recommend migrating to the new packages:
@fedify/cfworkers
replaces@fedify/fedify/x/cfworkers
@fedify/denokv
replaces@fedify/fedify/x/denokv
@fedify/hono
replaces@fedify/fedify/x/hono
@fedify/sveltekit
replaces@fedify/fedify/x/sveltekit
This modularization was contributed by Chanhaeng Lee (@2chanhaeng초무). The old import paths are deprecated and will be removed in version 2.0.0.
Acknowledgments
This release represents an extraordinary collaborative effort, particularly from the OSSCA participants who contributed numerous features and improvements. Their dedication and hard work have made Fedify 1.9.0 the most significant release to date.
Special thanks to all contributors who helped shape this release, including those who provided feedback, reported issues, and tested pre-release versions. The fediverse community's support continues to drive Fedify's evolution.
For the complete list of changes, bug fixes, and improvements, please refer to the CHANGES.md file in the repository.
Every time I try to publish a package to #JSR (JavaScript Registry), it frequently gets stuck in the “processing” state, so I'm seriously considering whether I should stop publishing my TypeScript packages there altogether. 🤔
Notion 패키지 타입 봤다가 블럭 타입 하나에 모든 경우가 하드 코딩 되어 있는 것을 보고 저는 그만 정신을 잃고 말았습니다
심지어 Children 노드 가질 수 있는 블럭의 children
도 다 그렇게 되어 있음
이건 ㄹㅇ 광기다,,,
Notion 패키지 타입 봤다가 블럭 타입 하나에 모든 경우가 하드 코딩 되어 있는 것을 보고 저는 그만 정신을 잃고 말았습니다
딩코하다가 열 받을 때 나는 가끔 리눅스 커널 소스 코드에 버전별로 주석으로 담긴 욕의 빈도를 정리한 그래프를 보면서 위안을 얻곤 한다 (물론 다른 단어도 볼 수 있음)
Helix, gitui, alacritty는 다 windows배포를 하는데, zellij만 공식 미지원 상태라 빌드도 깨져 있다. Helix는 내부에서 터미널을 지원하지 않기 때문에 zellij를 같이 써야 좋겠는데, 아쉽다.
@robin 제가 알기로는 그냥 다들 Mastodon을 따르는 거예요. 안 따르는 구현들도 좀 있더라고요.
@hongminhee洪 民憙 (Hong Minhee)
@robin microformats2 모양이긴 합니다
content에서 멘션 a의 class를 u-url mention으로 주는건 어딘가에 표준화가 된건가요 아니면 그냥 마스토돈을 따르는건가요???
연휴이후 첫 출근, 한글이름 정렬이 안된다는 오류를 받아서, order by name
을 빼먹었을 리 없다고 생각하면서, 오류를 추적했는데,
- 코드는 당연히
order by
가 적용되어 있었고,
결과적으로 문제는 PostgreSQL에서 한글 ORDER BY 정렬 문제 해결하기 COLLATE 이슈와 동일한 현상이었다.
(내부 docker postgre:17.4
와 AWS RDS PostgreSQL 17.2
모두) 기본값 en_US.UTF-8
이 적용되어 있었고, 한글 정렬순서가 올바르게 나오지 않았다.
SELECT datname, datcollate, datctype
FROM pg_database
WHERE datname = current_database();
|datname |datcollate |datctype |
|--------|-----------|-----------|
|postgres|en_US.UTF-8|en_US.UTF-8|
ko_KR.UTF-8
로 새 로케일 지정해서 데이터베이스 새로 만들고, 덤프 백업 & 복원처리를 진행해서 해결은 완료했는데,
간단하게 COLLATE "C"
로도 한글정렬문제를 해결 할 수 있겠다 싶었는데, ChatGPT와 이것저것 논의해본 결과(?) 문자코드순 정렬이라서 사전식 정렬과는 다소 차이가 있어서 완전한 해결책은 아닌 듯 싶다.
(비슷하게나마 해결은 되지만)
데이터베이스를 새롭게 만드는 게 어려우면, 특정 컬럼에만 COLLATE
를 지정해서 변경할 수 있다.
ALTER TABLE 테이블명
ALTER COLUMN 컬럼명 TYPE 데이터타입 COLLATE "C";
서비스가 아직 한국어와 영어만 지원해서, 별다른 고민없이 ko_KR.UTF-8
로 처리하기는 했는데, 일본어나 중국어까지 지원하면 결국 Collation을 C 로 해야하는 것은 아닌가 싶은 생각도 들고,
ko_KR.UTF-8
에서 일본어,중국어도 다 잘 정렬되지 않을까 싶은 생각도 들고, 혹은 정렬이 중요한 포인트라면 언어별로 컬럼을 파야할 것인가 하는 고민은 있는데, 일단은(?) 나중에 다시 고민하기로 했다.
소스코드 뜯어보고 그 뒤에 담긴 원리 덕질하는 거가 딩코할 때 제일 재밌어
해커스펍에서 글 쓸 때 자동으로 언어감지 하는 거 이거 원리랑 구현이 어떻게 되어있는 거지 신기하다...오 이건가 혹시?
Core function은 tinyld 라이브러리에서 나오는 것 같은데 소스코드 보니깐 엔그램 썼구나...! 그래 맞아 길어봐야 몇 문장일 거고 사실 최초 몇 단어 혹은 몇 자, 그리고 어떤 문자인지에 따라 (CJKV 같은 계열엔 더욱 더 명확할 거임) 바로바로 detection 하면 되는 걸테니 굳이 복잡시리한 거 안 써도 됨...내 최애 언어모델 엔그램 🥹 (다른 건 LSTM 🥹)
이거 프로젝트 여러개 셋업하니까 귀찮아서 리포 하나 만들었습니다.
새 에디터 찾다가 helix 고르고는 zellij, alacritty 까지 쓰고, gitui도 다시 꺼내보고 있돠.
해커스펍을 쓰고 있으면서도 정작 연합우주랑 액티비티펍 프로토콜에 대해선 큰 그림조차 사실 감이 잘 안 왔는데(...) 워드프레스에서 작년에 연합우주랑 액티비티펍 관련해서 영상들을 몇 개 올려서 보고 있는데 한방에 팍 이해가 되어서 재밌게 보고 있다. 액티비티펍 공동창시자인 Evan Prodromou랑 찍은 것도 있는데 왜 액티비티펍을 만들었는지에 대한 동기도 설명해줘서 좋았음..
11월 중순~11월 말 사이에 해커스펍 오프라인 밋업 Hackers' Public 두번째 모임을 진행하려고 하는데 "눈물없이 듣기 어려운 프론트엔드의 심연" 특집입니다...... 11월 1일~11월 8일 사이에 모집 공고 올릴듯????? 아직은 오피셜한 공지는 아니지만 정보만 슬쩍 흘려봅니다,,,
Hackers' Public이 어떤 모임이었는지 궁금한 분이 계시다면.... 여기 에서 어떤 느낌의 행사인지 알 수 있습니다
11월 중순~11월 말 사이에 해커스펍 오프라인 밋업 Hackers' Public 두번째 모임을 진행하려고 하는데 "눈물없이 듣기 어려운 프론트엔드의 심연" 특집입니다...... 11월 1일~11월 8일 사이에 모집 공고 올릴듯????? 아직은 오피셜한 공지는 아니지만 정보만 슬쩍 흘려봅니다,,,
I don't like FEP-044f...
I think the idea itself is good, but the problem is that it adopts an opt-in approach. First, it cannot be quoted in software that hasn't implemented it. Second, static file-based servers cannot support quoting (044f requires sending a QuoteAuthorization when approving a quote). I've never actually seen a static file-based ActivityPub server, so you probably don't need to worry too much about that...
Also, since the canQuote policy seems to only serve as advice, it appears we can't make it approval-free... :(
(Please let me know if there are any errors in this; it would be helpful.)
하스켈에서 레코드 타입을 json으로 인코딩할 때 타입이 Maybe
인 필드의 값이 Nothing
이면 그 타입의 값은 null
로 변환된다.(deriving Generic
했다면)
이때 null
이 아니라 해당 필드 자체를 포함하지 않게 하려면 다음과 같이 하면 된다.
{-# LANGUAGE TemplateHaskell #-}
import Data.Aeson.TH
data Foo = ...
deriveJSON defaultOptions { omitNothingFields = True } ''Foo
위와 같이 deriveJSON
했다면 기존에 선언했던 아래 구문은 지워야 한다.
instance FromJSON Foo
instnace ToJSON Foo
#cosmoslide 작업일지 251012
이번에는 Announce
액티비티 지원하는 작업을 진행 중인데, 해커스펍이 어떻게 구현되어 있는지 하나하나 뜯어보면서 작업 중이다. 고려해야 할 사항이 몇 가지 있는데... 당장은 쉬운 것 순서대로 작업할 것들을 정리하고 있다.
- Phase 1 : 내가 팔로하고 있는 원격 계정에서 전달되는
Announce
액티비티를 인박스에서 수신하는 과정을 핸들링한다. (원격에서는 followers에 cc 걸어서Announce
액티비티를 전송하기 때문) - Phase 2 : 나를 팔로하고 있는 로컬 인스턴스 계정의 글을 재공유하는 매커니즘을 구현한다.
- Phase 3 : 나를 팔로하고 있는 원격 계정의 inbox에
Announce
액티비티를 전달하는 매커니즘을 구현한다.
지금은 Phase 1에 신경쓰고 있는 상황. 허나, Phase 1을 작업하고 있는 과정에서 병목이 생겼다. 다행히 해결했다만.
Follow
액티비티가 언제부턴가 전송이 안되고 있어서 왜 그런가 했는데, 프로덕션 배포하는 과정에서 federation 옵션을 바꾼게 화근이 되었음. 백엔드와 프론트엔드가 하나로 합쳐져있을때는 origin 옵션에 URL 하나만 걸어두면 그만인데, 백엔드/프론트엔드 나눠놓은 상황에서는 프론트전용 URL(webOrigin
)/백엔드전용 도메인(handleHost
) 각각 분리를 해야했음. 그와 관련된 패치를 어제 했었던 것으로 기억한다.
변경사항이 있었다는걸 까먹은 상태에서, 로컬환경에서 원격 인스턴스에 Follow
액티비티가 왜 Unauthorized 에러가 뜨면서 전송이 되지 않았나했는데... 역시 이런 맥락이 있었던 것. 즉, handleHost
(백엔드쪽 도메인)은 Tailscale에서 생성한 URL로 들어가는 반면, webOrigin
은 localhost로 설정이 되어 있었기 때문에 서명하는 과정에서 오류가 발생한 것임. NODE_ENV
환경변수가 development 인 경우에만 webOrigin
/handleHost
를 같은값을 쓰는 걸로 임시방편으로 처리함. 관련 코드
TIL:
Zed로 Xcode Swift 프로젝트 셋팅하기
xcode-build-server
와 Swift의 sourcekit-lsp
덕분에 느려터진 Xcode 대신 Zed나 다른 LSP를 이용할 수 있는 에디터에서 Xcode Swift 프로젝트를 셋팅해서 쓸 수 있다. [참고한 문서]
iOS 26의 Slider step 이슈
iOS 26는 버그가 많은데, 26.0.1이 되어서도 SwiftUI Slider에서 step값을 지정했을 때 Slider가 step값을 무시하는 버그가 있다. [Workaround]가 있는데 이렇게 땜빵식으로 해결해야한다는게 참...
TIL:
Zed로 Xcode Swift 프로젝트 셋팅하기
xcode-build-server
와 Swift의 sourcekit-lsp
덕분에 느려터진 Xcode 대신 Zed나 다른 LSP를 이용할 수 있는 에디터에서 Xcode Swift 프로젝트를 셋팅해서 쓸 수 있다. [참고한 문서]
iOS 26의 Slider step 이슈
iOS 26는 버그가 많은데, 26.0.1이 되어서도 SwiftUI Slider에서 step값을 지정했을 때 Slider가 step값을 무시하는 버그가 있다. [Workaround]가 있는데 이렇게 땜빵식으로 해결해야한다는게 참...
TS 에서 쓸 라이브러리 검색했는데 예제가
- JS로 씀
require
씀
그럼 그냥 뒤도 안 돌아보고 도망 감
하스켈에서 Either a b
의 ToJSON
인스턴스 구현이 약간 애매하다.
json 객체의 키 값으로 "Left"
나 "Right"
를 넣는 것 같다. 그런 방식으로 사용하는 사람은 거의 없을 것 같은데... 아무튼 그래서 newtype
은 쓰지 않고 인스턴스를 오버라이딩 하고 싶은데 대충 찾아보면 인터넷이나 LLM의 첫번째 대답은 OverlappingInstances
확장을 쓰라고 안내하는데 이건 deprecated 됐다. 대신 다음과 같은 프라그마(pragma)를 쓰면 된다.
OVERLAPPING
OVERLAPPABLE
OVERLAPS
프라그마는 확장과 다른데 확장은 확장을 적은 파일 전체에 적용되지만 프라그마는 해당 인스턴스에만 적용된다.
다음과 같이 사용한다.
instance {-# OVERLAPPING #-} ToJSON a => ToJSON (Either Foo a) where
toJSON = ...
이렇게 하면 고아[1]를 만들었다며 컴파일러가 내 인성을 비난하겠지만 Either a b
를 통째로 오버라이딩 한 것도 아니고 별로 문제가 될 것 같진 않다.
하스켈에서 타입이나 클래스가 정의된 모듈이 아닌 곳에 인스턴스를 선언할 때 그 인스턴스를 Orphan(고아) 인스턴스라고 한다. ↩︎
그러고보니까 해커스펍을 파이어폭스 새 탭 화면에서 보면 아이콘이 고양이캐릭터가 아니라 Hs'P라고 나오더라
마스토돈 스타일의 새로운 커뮤 플랫폼, 커뮹! 을 런칭합니다. 기성 소셜 플랫폼들을 커뮤 운영 방식에 끼워 맞추던 불편함을 해소하고자 시작된 프로젝트입니다. 당초 예상했던 것보다 뜨거운 관심에, 계획보다 빠르게 출시하게 되었습니다. 많은 응원과 관심 부탁드립니다. https://commu.ng
🪒 야크 셰이빙: 새로운 오픈소스의 원동력
작은 불편함에서 시작된 수많은 프로젝트, 그 연결의 힘은?
야크 셰이빙: 새로운 오픈소스의 원동력
홍민희 (자유·오픈소스 소프트웨어 개발자)
연사 https://2025.fossforall.org/speakers/
티켓 https://event-us.kr/fossforall/event/110400
오는 11月 8日 光云大學校에서 開催되는 FOSS for All 컨퍼런스 2025에서 제가 〈야크 셰이빙: 새로운 오픈 소스의 原動力〉이라는 主題로 基調演說을 하게 되었습니다!
올해 처음 열리는 FOSS for All 컨퍼런스는 “Free and Open Source Software for All”이라는 슬로건 아래, 모두를 爲한 오픈 소스 컨퍼런스를 目標로 하는 非營利 오픈 소스 커뮤니티 컨퍼런스입니다.
NAS 에서 aria2c 2025-10-01-raspios-trixie-arm64-lite.img.xz.torrent
했더니 순식간에 다운로드가 된 것은 좋은데, 그대로 꺼 버리기에는 커뮤니티에 미안한 생각이 들어서, 그냥 켜 두었다. 하지만 며칠째 켜 두어도 SEED(0.9)
정도에서 별로 올라가지 않는다… ㅋㅋㅋ 아무래도 제대로 된 디먼을 설정해 둬야겠다. 상부상조에 동참하기…
의존성 빌드 지옥에 들어섰다. gtk 싫어...
TIL: Use install
to create the directory layout on GNU/Linux.
Suppose you need to create a file at a nested path like /etc/systemd/zram-generator.conf.d/10-writeback.conf
. (Happens all the time.)
That means you need to create the parent directories recursively as needed. The portable, POSIX way would be:
mkdir -p "$(dirname /etc/some/deep/path/to/your/file)" && : > /etc/some/deep/path/to/your/file
Eeek!
But install
can come handy. Originally it's about copying the files from one directory to another. So install SOURCE DEST
copies files in SOURCE
to DEST
. But there's -D
option:
-D
: create all leading components ofDEST
except the last, or all components of--target-directory
, then copySOURCE
toDEST
Together with a good default mod (-m 0644
), you can:
install -m 0644 -D /dev/null /etc/some/deep/path/to/your/file
...And it works! Far more memorable, plus it works nicely with Fish's powerful history autocompletion. No need to add a custom function or script.
The -D
option is GNU/Linux only. On other systems like macOS, you will have to:
install -d "$(dirname /path/to/file)" && install -m 0644 /dev/null /path/to/file
But this would be worse than the mkdir -p
circus above.
#cosmoslide 배포는 어째 성공은 했는데, 이제 실전이다.... 어떤 고난이 날 기다릴까....
UI 바뀌고 batch 기능 못쓰는건 마음이 아프군
Deno 2.5.4 has been released 🎉
For the servers I own and manage, I'd chsh
to Fish. That alone eased the whole sysadmin thing a lot.
But today, configuring a new server, I'm trying out a new approach: Don't chsh
, but always SHELL=/usr/bin/fish tmux
whenever I do stuff manually via SSH.
I'm expecting two advantages: Scripts that expect Bash will have less chance of breakage, and it will remind me to never start anything outside of Tmux.
So far this seems to be working.
잘 알려지지 않은 부분인데, Windows에서도 온디바이스 AI를 지원합니다. 최근에 Windows 노트북 중에 Copilot+ 인증을 받은 노트북들은 단순히 마케팅 수사가 아니라 온디바이스 AI 구동을 위한 NPU를 탑재하고 있는데, 혹시 이런 디바이스를 가지고 계시다면 AI Dev 갤러리 앱을 받아서 테스트해보시면 재미있는 장면이 많이 나올겁니다.
또한 AI Dev 갤러리 앱을 이용하여 곧바로 샘플 코드를 담은 샘플 프로젝트를 동적으로 생성해주는 기능이 있으니 살펴보시면 재미있는 부분이 많을 것입니다. :-D
https://apps.microsoft.com/detail/9N9PN1MM3BD5?hl=neutral&gl=KR&ocid=pdpshare
오늘에야 안 건데 닌텐도 스위치는 5GHz 대역 와이파이를 쓰려면 공유기 설정에서 채널을 100 아래로 설정해야 한다더라. 그래서 34 채널로 설정해봤더니 정말로 되긴 했다. 근데 방에서 신호가 끊기는 증상이 생기기 시작해서 포기하고 다시 149 채널로 도망옴. 다른 설정은 다 같고 34 채널은 주파수도 낮고 겹치는 신호도 오히려 적은데 왜 끊기는 걸까...
Exciting news for #Fedify developers! We've just landed a major milestone for Fedify 2.0—the #CLI now runs natively on #Node.js and #Bun, not just #Deno (#456). If you install @fedify/cli@2.0.0-dev.1761
from npm, you'll get actual JavaScript that executes directly in your runtime, no more pre-compiled binaries from deno compile
. This is part of our broader transition to Optique, a new cross-runtime CLI framework we've developed specifically for Fedify's needs (#374).
This change means a more natural development experience regardless of your #JavaScript runtime preference. Node.js developers can now run the CLI tools directly through their familiar ecosystem, and the same goes for Bun users. While Fedify 2.0 isn't released yet, we're excited to share this progress with the community—feel free to try out the dev version and let us know how it works for you!
https://github.com/be5invis/Sarasa-Gothic
터미널/에디터용 고정폭 폰트를 찾는다면 Sarasa Term K를 추천합니다. 이쪽도 한중일 폰트를 모두 지원합니다. Noto Sans Mono CJK도 좋지만 폰트 미세 조정이 안 되는 환경에서 Sarasa Term이 좀더 정확하게 렌더링됩니다. 영문과 한글만 쓰면 네이버의 D2Coding도 훌륭하지만 이쪽은 가나, 한자 지원이 약하죠.
해커스바라니
해커스펍하고 잘 어울리는
以前、福岡へ旅行した際にEngineer Cafeに立ち寄ったのが印象に残っているのですが、日本の他の地域にもEngineer Cafeのような場所は有りますか?オフラインで日本のソフトウェア開発者の方々と交流したいです。
@hongminhee洪 民憙 (Hong Minhee) カフェではなくバーですが東京の東中野に「ハッカーズバー」、兵庫の神戸に「ハックバー」というのがあります。プログラミングに関する相談などがメインな感じですが、ご参考までに。
액터/사용자만 나열하는 방식으로 러프하게 어드민 페이지 구현 완료. 배포하면 어떻게 될지 모르겠군.
개인적으로는 어드민 페이지는 아예 별개의 서비스로 분리가 되어있어야 한다고 보는 입장이라, 아예 별개의 패키지로 나눔 @cosmoslide/admin
같은 식으로