Profile img

Haze

@nebuleto@hackers.pub · 92 following · 88 followers

Haze Lee but also known as Kihan Park

  • 💻 Make stuff with Computer
  • 💉 Living with Migraine more than 10y, Migraine Advocate [Headache Place]
  • 💬 🇰🇷, Also 🇯🇵 & 🇬🇧🇺🇸
GitHub
@Nebu1eto
X(Twitter)
@Nebu1eto

@foolfitzJiajun Xu

Since I made it with TypeScript and I just only needed it to parse OOXML files and convert them to Markdown, so I didn't consider binding LibreOffice‘s API into Node.js (or any other JS runtime).

However, the tool you mentioned is very useful to understanding LibreOffice’s API and learn how to use. Thank you for letting me know!

1
6
6

오늘 Hackers' Public @ Seoul 송년회에서 이야기한 "코딩 에이전트와 함께 이세계 던전 탐험하기: 새로운 환경의 코드 베이스를 빠르게 분석하는 방법"의 발표 슬라이드는 [다음 링크]에서 다운로드 받으실 수 있습니다! :)

키노트 스크린, "코딩 에이전트와 함께 이세계 던전 탐험하기: 새로운 환경의 코드 베이스를 빠르게 분석하는 방법"
11
2

[미래의 나를 위한 메모지만 미래의 내가 이걸 볼 일이 없었으면 싶은 노트] 0xc000007b 오류를 검색해보면 온갖 글이 나오는데, 대체로 이런 글들이 사용자 입장에서 적힌 글이라서 개발자 입장에선 64bit 환경에서 32bit 바이너리를 혼재해서 사용할 때 생기는 문제라는 것 말고는 아무런 힌트도 못 얻었는데...

빌드와 관련된 설정에서 32bit/64bit 관련 무언가가 혼재되지 않았는지 체크하면 대체로 문제를 해결할 수 있다. 특히 외부 라이브러리. 환경변수, 특히 PATH에서 관련된 라이브러리 폴더 속 아키텍처가 혼재되지 않았는지 체크해보면 큰 도움이 된다. 나의 경우 Qt 애플리케이션이었는데 환경변수에 C:/Qt/Qt5.13.1/5.13.1/msvc2015_64라고 넣어야 할 것을 C:/Qt/Qt5.13.1/5.13.1/msvc2015라고 넣은게 원인이었다.

0xc000007b 오류로 인해 프로그램을 실행하지 못한 사진구글에 해결법을 검색해본 화면. 큰 도움은 안된다.
2

윈도우 + 인텔 CPU 구성이 필요한 프로젝트를 컴파일하고 있는데 아무리 msbuild에서 -m:16 옵션을 줘도 항상 코어가 2개씩 놀고 있다. 255H의 코어 구성이 성능 코어 6개, 효율 코어 8개, 저전력 효율 코어 2개라서 대충 저전력 효율 코어에 배분이 안 되는구나 예상은 했는데... 생각해보니 인텔의 저전력 효율 코어(LP E-core)는 성능 코어 / 효율 코어와는 다르게 컴퓨팅 타일에 존재하는게 아니라 SoC 타일에 있어서 컴파일처럼 컴퓨팅 성능이 필요할 때는 아예 허수아비가 되는 것 같다.

사진은 인텔의 Meteor Lake의 소개 자료, Meteor Lake부터 LP E-core가 도입되었다.

반도체의 제한된 다이 사이즈나 x86_64 아키텍처에서의 전력 효율 문제로 인텔도 AMD도 여러 시도를 하는 것 같지만, 인텔의 LP-E core 전략이 얼마나 좋을진 모르겠다. AMD Zen은 컴팩트 코어에 캐시 등에서 차이는 있어도 일단 "모든 명령어셋"이 호환되니 이론적으로 생각해보면 훨 낫지 않나 싶다. 그리고 인텔도 비슷한 문제를 인식했는지 곧 나올 Panther Lake는 LP E-core도 같은 컴퓨팅 타일에 배치한다고.

컴파일러를 돌리고 돌려도 2코어는 놀고 있는 화면, CPU는 Intel Core Ultra 255H (Arrow Lake-H)Meteor Lake의 아키텍처 특징 정리 화면 1, 칩셋의 전체적인 구조가 담겨있다.Meteor Lake의 아키텍처 특징 정리 화면 2, SoC Tile에 대한 설명이 있다.곧 나올 Intel의 Panther Lake 구조도, LP E-core가 P/E-core와 마찬가지로 같은 컴퓨팅 타일에 있다.
2

오늘은 xml parser와 unzip 처리해주는 라이브러리와 Cursor의 도움을 좀 받아 워드, 엑셀, 파워포인트 ooxml 파일을 파싱해서 텍스트와 서식 정보, 이미지, 파워포인트는 발표자 노트, 엑셀은 셀 데이터를 가져오는 파서를 만들었다.

원랜 야크셰이빙할 생각은 별로 없었는데 기존 라이브러리 등이 내가 원하는대로 안 되는게 커서 결국 삽을 펐다. LLM의 도움이 아예 없었으면 오늘 안에 다 못 만들었을 것 같다.

그래도 이게 OOXML 포맷이 압축 파일이고 그 안에 xml로 되어있는 구조라는걸 알고 있었어서 이런 바퀴를 재발명할 생각도 할 수 있었던 것 같다. 저녁까지만 해도 머리에 쥐날 것 같았는데 다 되니까 세상에 이렇게나 뿌듯할수가…

  • 관성적으로 코딩 관련에는 Claude Sonnet 4.5 위주로 사용했는데 요즘 GPT-5/5.1 Codex 써보고 굉장히 놀라는 중. 역시 AI쪽 분야는 관성적인 행동을 버리고 다양하게 계속 찍어먹어봐야 장단점을 알고 필요할 때 요긴하게 쓸 수 있는 것 같다.
샘플 파워포인트 슬라이드직접 만든 파서로 처리한 결과
5
0
2
2
6
0

알고계십니까? 고대의 언어인 줄 알았던 Smalltalk 친척 Self는 놀랍게도 최근까지도 업데이트가 되고 있습니다. https://selflanguage.org/

JavaScript의 .prototype 개념에도 영향을 주었다고 알려진 Self가 어떤 언어인지 궁금하시다면 Series about Self(lobste.rs)를 읽어보세요. 프로그래밍 언어에 대한 여러분의 시야가 넓어지는 데에 도움이 될 겁니다.

한국어 번역:

  1. 환경
  2. 언어
  3. 디버거, 트랜스포터, 그리고 문제점
  4. 커뮤니티, 역사, 미래, 형이상학
8

진짜 이름만 들어도 아는 프로젝트들 사이에 있는 Fedify...

We invest globally in the open software components that underpin Germany's and Europe's competitiveness and ability to innovate. Improving the security, stability, and reusability of open software components directly enhances the productivity, competitive edge, and capacity for innovation of startups and small and medium-sized businesses. We’re excited to be working with these maintainers and FOSS communities, and to support the software that forms the foundation of the infrastructure of the 21st century.

Here are some of the projects the Sovereign Tech Fund has recently commissioned work on:

Scala, SDCC, Let's Encrypt, Servo, chatmail, Drupal, Fedify, openprinting, PHP, Apache Arrow, Open SSL, R Project, Open Web Docs, conda, systemd, and phpseclib

https://www.sovereign.tech/news/newsletter-october-2025

9

Haze shared the below article:

나만의 연합우주 마이크로블로그 만들기

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

이 튜토리얼은 Fedify를 사용하여 ActivityPub 프로토콜을 구현하는 마이크로블로그를 만드는 과정을 안내합니다. Fedify는 연합 서버 앱 개발의 복잡성을 줄이고, 개발자가 비즈니스 로직에 집중할 수 있도록 돕는 TypeScript 라이브러리입니다. 튜토리얼에서는 Node.js, npm, Hono 등의 개발 환경을 설정하고, SQLite 데이터베이스를 구축하여 계정 생성, 프로필 페이지, 액터 구현, 암호 키 관리, 팔로우 기능, 게시물 작성 및 타임라인 구현 등 마이크로블로그의 핵심 기능을 단계별로 구현합니다. 특히 ActivityPub.Academy 서버를 활용하여 실제 연합우주 환경에서의 연동을 테스트하고, Mastodon과의 호환성을 확인합니다. 마지막으로, 보안 및 기능 개선을 위한 추가 과제를 제시하며, 독자가 프로젝트를 확장할 수 있도록 안내합니다. 이 튜토리얼을 통해 독자는 Fedify를 활용하여 ActivityPub 기반의 분산 소셜 네트워크 서비스를 구축하는 기본적인 이해를 얻을 수 있습니다.

Read more →
13
1

TIL: macOS 12(Monterey)부터 networkQuality라는 명령어가 추가되었고 이걸로 speedtest.net이라던가 fast.com이라던가 필요없이 터미널에서 인터넷 속도를 측정할 수 있다.

  1. -s 옵션을 주면 다운로드와 업로드를 순차적으로 측정할 수 있다.
  2. -v 옵션을 주면 측정한 서버나 프로토콜, 레이턴시 등을 좀 세부적으로 볼 수 있다.
`networkQuality` 커맨드로 속도를 측정한 macOS 터미널 화면
4
0
0

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 (@z9mb1Jiwon), 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 (@z9mb1Jiwon), 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 (@z9mb1Jiwon). 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 (@z9mb1Jiwon). 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.

7
0
1

YTN에서 편두통의 심각성에 대해 기사로 다뤄주시면서 인터뷰에 나오게 되었습니다. 편두통은 단순히 개인을 넘어 사회 전체에 큰 부담을 가져오는 질병입니다. 환자들이 적절한 진단을 받고 필요한 치료를 빠르게 받을 수 있는 환경이 마련되는 것이 환자 개인에게도, 주변 사람들에게도, 우리 사회 전체에 큰 이익을 가져옵니다.

기사에서는 편두통에 심각성을 주로 다뤄주셨는데 저는 잘 치료 받으면서 잘 관리하고 있습니다! 편두통은 전문 치료제를 받아서 전조가 오거나 통증이 시작될 때 빠르게 약을 먹으면 효과가 좋은 편입니다.

https://www.ytn.co.kr/_ln/0134_202510111313538858

노트북 스티커로 같이 나온 펍냥이
11
0
0
0
1
0

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]가 있는데 이렇게 땜빵식으로 해결해야한다는게 참...

LSP 설정을 통해 Swift 프로젝트에서 자동 완성을 띄울 수 있다.
1
0
0

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]가 있는데 이렇게 땜빵식으로 해결해야한다는게 참...

LSP 설정을 통해 Swift 프로젝트에서 자동 완성을 띄울 수 있다.
6
1

Announcement: AltStore becomes a financial contributor to Fedify

We're thrilled to announce that AltStore has become a financial contributor to Fedify! This generous support comes as part of AltStore's broader commitment to strengthening the open social web ecosystem, as they prepare to become the world's first federated app store. Their investment in Fedify and other fediverse projects demonstrates a shared vision for building a more open, interoperable digital future.

AltStore's journey into the fediverse represents a groundbreaking approach to app distribution—connecting their alternative app marketplace with the open social web through ActivityPub. As pioneers who have already pushed Apple to change App Store policies twice in their first year, AltStore understands the transformative power of open protocols and decentralized systems. Their support will help Fedify continue developing robust tools and libraries that make it easier for developers to build federated applications. We're deeply grateful for AltStore's trust in our project and look forward to seeing how their innovative federated app store will reshape mobile app distribution while strengthening the entire fediverse ecosystem.

https://rileytestut.com/blog/2025/10/07/evolving-altstore-pal/

Email notification from Open Collective showing AltStore has become a new financial contributor to Fedify as a corporate sponsor with a $500.00 monthly contribution. The email includes the Open Collective logo, information about AltStore with a link to their Open Collective page, and details about the sponsorship tier and amount.
4
1
0

마이그레이션을 위해 각 페이지들은 TanStack Start/Router에 맞게 다 작업했고, SEO를 위해 만든 웹 페이지기도 하니 이제 렌더링된 페이지의 meta 태그랑 sitemap.xml를 작업이 남은 상황이다.

Next.js는 검색엔진 최적화나 페이지의 메타데이터를 예쁘게 정리해둔 타입에 맞게 담아주면 정말 알잘딱깔센하게 <head> 태그 안에 담아주는데[1], TanStack Start에서는 아래와 같이 직접 meta 태그나 link 태그 등을 하나하나 직접 빚어내야한다.

export const Route = createFileRoute("/articles/$articleId")({
  loader: ({ params: { articleId } }) => fetchArticle({ data: { articleId } }),
  head: (ctx) => {
    // NOTE: 적당히 생략
    return {
      meta: [
        { name: "title", content: title },
        { name: "description", content: description },
        { name: "keywords", content: keywords },
        { name: "og:title", content: title },
        { name: "og:type", content: "article" },
        { name: "og:author", content: post.author.nick },
        { name: "og:image", content: "/ci/logo.svg" },
        { name: "og:url", content: fullUrl },
        { name: "og:description", content: description },
        { name: "og:locale", content: "ko_KR" },
        { name: "og:site_name", content: defaultTitle },
      ],
    };
  },
  component: RouteComponent,
});

그러면 Next.js는 어떻게 각 페이지 컴포넌트 모듈에서 async function generateMetadata() 함수나 metadata 객체를 읽어서 어떻게 처리할까? 궁금해져서 찾아보았다.

Next.js 코드 속 src/lib/metadata에서는 모듈에 있는 메타데이터 정의를 읽고 generateMetadata()면 실행해서 resolve하는 resolve-metadata.ts부터, metadata.tsx를 통해 어떻게 Metadata 타입을 가지고 OpenGraph, Apple, Twitter를 비롯해 각 타입에 맞는 <meta> 태그를 만들어주는지 알 수 있다. OpenGraph라던가 각 세부 항목에 대해선 generate/opengraph.tsx 파일 등을 보면 이해할 수 있다.

이 방식이 꽤 괜찮게 느껴져서 자고 일어나선 해당 코드를 차용해서 새 코드베이스에서도 그대로 활용할 수 있게 만들어보려고 한다.


  1. https://nextjs.org/docs/app/getting-started/metadata-and-og-images ↩︎

4
1

방금 며칠 전 보낸 메일의 회신이 왔다는 알림에 "오늘 일요일 아닌가?" 하는 생각이 들어서 확인해보니 월요일이었다. 추석 연휴 덕에 지난주 금요일부터 대충 요일 개념이 완전히 날아가버린 것 같다.

1
1

대충 일단 게시물을 가져오는데는 성공했으니 나머지는 자고 일어나서 마저 작업하는걸로...

대충 작업된 것들

  • Next.js에서 Tailwind v4 + TanStack Start 바탕으로 프로젝트 옮기기
  • 스타일시트, 컴포넌트, 유틸리티 함수 등등 옮기기

성공적인 마이그레이션까지 남은 것들

  • 검색 엔진을 위한 meta 태그 처리
  • ContentLayer가 아니라 Content Collections를 써서 mdx 파일의 렌더링
  • Server Component가 아닌 형태로 SSR을 지원하는 네이버 스마트에디터 게시물 컴포넌트
  • sitemap.xml 구현
  • Netlify (혹은 CloudFlare) 로 배포하기

그 뒤에 할 것들

  • 사이트 이래저래 개편하기
  • 태그 페이지 추가로 태그를 통한 네이버 카페 게시물 가져오기
  • 같은 코드 베이스로 내 블로그 웹 만들기
작업 중인 웹 페이지, API를 통해 가져온 네이버 카페의 게시물을 렌더링한 내용이다.
1

Next.js를 쓰면서 큰 생각 없이 서버에서만 렌더링될 컴포넌트엔 use server, 클라이언트에서만 렌더링될 컴포넌트엔 use client를 썼는데 Tanstack Start로 옮기면서 하나하나 createServerFn으로 감싸면서 아찔함을 느끼고 있다.

Next.js가 제공해주던 Metadata도 그렇고 지금까지 너무 프레임워크가 제공하던 매직에 편안함을 느꼈던 것 같단 생각도 들고.

마이그레이션 끝나면 좋은 글감이 나올 것 같다.

1

Next.js를 쓰면서 큰 생각 없이 서버에서만 렌더링될 컴포넌트엔 use server, 클라이언트에서만 렌더링될 컴포넌트엔 use client를 썼는데 Tanstack Start로 옮기면서 하나하나 createServerFn으로 감싸면서 아찔함을 느끼고 있다.

Next.js가 제공해주던 Metadata도 그렇고 지금까지 너무 프레임워크가 제공하던 매직에 편안함을 느꼈던 것 같단 생각도 들고.

마이그레이션 끝나면 좋은 글감이 나올 것 같다.

5

한국인의 혐중(嫌中)은 이제 명백히 치료해야 할 사회적 병이 되었다고 생각한다. 몇 년 전까지는 경제발전을 빨리 이룬 국가적 우월감(절대 이런 우월감은 정당화 가능하다는 의미가 아님.)에 따른 차별적 의식 전반이 문제라고 우활(迂闊)하게만 생각했는데, 이제는 명백히 ‘중국과 중국인에 대한 혐오’가 문제임을 부인할 수 없게 되었음. 진짜 큰일났다.

0

@nebuletoHaze 그런 이슈가 있었군요. 저는 그 수준에서는 안해보았고 순전히 직접 데이터 다루고 분석하는 유저 입장에서는 이미 적었듯 이만한 언어가 없다고 생각하거든요. 꽤나 마이너 하다고 생각했던 고급 통계검정 기법까지 지원하는 패키지도 있고 관련 CRAN 문서들도 되게 잘 정리되어 있어서 대학원에서 연구할 때도 많이 애용했었는데 개발자 입장에선 또 많이 불편한 언어가 맞긴 맞나보네요.

@icecream_mable구슬아이스크림 모든 패키지들이 CRAN에 올라온 것도 아니기 때문에 devtools의 install_github()같은걸 써야하고, renv는 lockfile이 있긴 하지만 제가 겪은 프로젝트들에선 라이브러리 설치 과정에서 C/C++ 심지언 포트란 코드를 컴파일 해야하고 이럴 때 컴파일러 버전 등에 영향을 많이 받았습니다.

이게 개발자 입장에서만 불편하면 모르겠는데 연구자들도 어려워합니다 근데 이걸 다른 언어들은 이러한 문제를 공학적으로 어떻게 해결했는지를 모를 뿐이죠.

1
1
0
0
4
0
8
3
0
3
0
2

Optique 0.6.0 is adding shell completion! We already support:

  • Bash
  • zsh
  • fish
  • PowerShell

This covers most users, but should we add more niche shells? Your input helps us prioritize!

5