KBuild
banner
kbuild.kr
KBuild
@kbuild.kr
푸니르가 정말 귀여운 도쿄 소프트웨어 엔지니어
Accept-Lang: ko, ja, en

The only cure for loss is gain
Pinned
KBuild @kbuild.kr · Nov 6
손편지 이메일 개인웹사이트 시대로 돌아가자
Reposted by KBuild
December 4, 2025 at 11:44 AM
Reposted by KBuild
<오빠는 끝! 공식 앤솔로지 코믹 1> - 네코토후 (지은이), 김정규 (옮긴이)
길찾기 | 2025-11-15 출간 | 7200원
알라딘 구매 링크

글러먹은 자택경비원 마히로를 갱생하기 위해 동생인 미하리가 약으로 오빠를 여자로 만든 때부터 이야기는 시작되었다. 여자가 되어서도 자택경비원에서 벗어나진 못했지만, 그래도 이전보다는 대화가 많아진 점에 대해서는 다행이라고 생각하고 있었지만….
December 4, 2025 at 2:10 AM
Reposted by KBuild
정부가 10대 치킨 프랜차이즈 업체를 대상으로 치킨 중량 표기를 의무화하기로 했습니다. 최근 교촌치킨 등 치킨 프랜차이즈 업체를 중심으로 가격은 그대로 두면서 중량은 줄이는 ‘슈링크플레이션’(용량 꼼수) 논란이 인 데 따른 대응책입니다.
치킨에 중량 표기 의무화…정부, ‘용량 꼼수’ 규제
정부가 10대 치킨 프랜차이즈 업체를 대상으로 치킨 중량 표기를 의무화하기로 했다. 최근 교촌치킨 등 치킨 프랜차이즈 업체를 중심으로 가격은 그대로 두면서 중량은 줄이는 ‘슈링크플레이션’(용량 꼼수) 논란이 인 데 따른 대응책이다. 정부는 2일 공정거래위원회·식품의약품
www.hani.co.kr
December 2, 2025 at 5:00 AM
Reposted by KBuild
December 2, 2025 at 5:15 AM
카페인을 너무 많이 먹은 것 같다
December 2, 2025 at 6:43 AM
Reposted by KBuild
부처님
November 29, 2025 at 2:46 AM
Reposted by KBuild
역사있는 출판사가 AI, 그러니까 제미나이한테 번역을 맡긴 고전들을 마구 찍어내고 있는데....
(사진은 다른 분 것 가져옴)

처참하네요. 출판사 사장이 AI/기술 리터리시가 후지다는 이야기이기도 하고... 무슨 사회 실험 같네요.
November 29, 2025 at 4:48 AM
Reposted by KBuild
November 29, 2025 at 2:40 AM
November 29, 2025 at 5:16 AM
Reposted by KBuild
DeepSeekが数学的推論に特化したAIモデル「DeepSeek-Math-V2」をリリース、国際数学オリンピックで金メダルを取れるレベルの正答率を記録
https://gigazine.net/news/20251128-deepseek-math-v2/
DeepSeekが数学的推論に特化したAIモデル「DeepSeek-Math-V2」をリリース、国際数学オリンピックで金メダルを取れるレベルの正答率を記録
DeepSeekが、数学的推論に特化したAIモデル「DeepSeek-Math-V2」を2025年11月27日に公開しました。このDeepSeek-Math-V2は定理証明と自己検証機能に重点を置いており、従来の数学AIモデルとは異なり、解答の正確性を追求するだけでなく、推論プロセスの厳密性と完全性も重視しています。
gigazine.net
November 28, 2025 at 1:56 AM
Reposted by KBuild
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░ 90.68%
November 28, 2025 at 12:00 AM
Reposted by KBuild
灼熱の寝床
November 26, 2025 at 10:56 PM
Reposted by KBuild
Optique 0.7.0: Smarter error messages and validation library integrations
We're thrilled to announce Optique 0.7.0, a release focused on developer experience improvements and expanding Optique's ecosystem with validation library integrations. Optique is a type-safe, combinatorial CLI argument parser for TypeScript. Unlike traditional CLI libraries that rely on configuration objects, Optique lets you compose parsers from small, reusable functions—bringing the same functional composition patterns that make Zod powerful to CLI development. If you're new to Optique, check out _Why Optique?_ to learn how this approach unlocks possibilities that configuration-based libraries simply can't match. This release introduces automatic “Did you mean?” suggestions for typos, seamless integration with Zod and Valibot validation libraries, duplicate option name detection for catching configuration bugs early, and context-aware error messages that help users understand exactly what went wrong. ## “Did you mean?”: Automatic typo suggestions We've all been there: you type `--verbos` instead of `--verbose`, and the CLI responds with an unhelpful “unknown option” error. Optique 0.7.0 changes this by automatically suggesting similar options when users make typos: const parser = object({ verbose: option("-v", "--verbose"), version: option("--version"), }); // User types: --verbos (typo) const result = parse(parser, ["--verbos"]); // Error: Unexpected option or argument: --verbos. // // Did you mean one of these? // --verbose // --version The suggestion system uses Levenshtein distance to find similar names, suggesting up to 3 alternatives when the edit distance is within a reasonable threshold. Suggestions work automatically for both option names and subcommand names across all parser types—`option()`, `flag()`, `command()`, `object()`, `or()`, and `longestMatch()`. See the automatic suggestions documentation for more details. ### Customizing suggestions You can customize how suggestions are formatted or disable them entirely through the `errors` option: // Custom suggestion format for option/flag parsers const portOption = option("--port", integer(), { errors: { noMatch: (invalidOption, suggestions) => suggestions.length > 0 ? message`Unknown option ${invalidOption}. Try: ${values(suggestions)}` : message`Unknown option ${invalidOption}.` } }); // Custom suggestion format for combinators const config = object({ host: option("--host", string()), port: option("--port", integer()) }, { errors: { suggestions: (suggestions) => suggestions.length > 0 ? message`Available options: ${values(suggestions)}` : [] } }); ## Zod and Valibot integrations Two new packages join the Optique family, bringing powerful validation capabilities from the TypeScript ecosystem to your CLI parsers. ### @optique/zod The new `@optique/zod` package lets you use Zod schemas directly as value parsers: import { option, object } from "@optique/core"; import { zod } from "@optique/zod"; import { z } from "zod"; const parser = object({ email: option("--email", zod(z.string().email())), port: option("--port", zod(z.coerce.number().int().min(1).max(65535))), format: option("--format", zod(z.enum(["json", "yaml", "xml"]))), }); The package supports both Zod v3.25.0+ and v4.0.0+, with automatic error formatting that integrates seamlessly with Optique's message system. See the Zod integration guide for complete usage examples. ### @optique/valibot For those who prefer a lighter bundle, `@optique/valibot` integrates with Valibot—a validation library with a significantly smaller footprint (~10KB vs Zod's ~52KB): import { option, object } from "@optique/core"; import { valibot } from "@optique/valibot"; import * as v from "valibot"; const parser = object({ email: option("--email", valibot(v.pipe(v.string(), v.email()))), port: option("--port", valibot(v.pipe( v.string(), v.transform(Number), v.integer(), v.minValue(1), v.maxValue(65535) ))), }); Both packages support custom error messages through their respective error handler options (`zodError` and `valibotError`), giving you full control over how validation failures are presented to users. See the Valibot integration guide for complete usage examples. ## Duplicate option name detection A common source of bugs in CLI applications is accidentally using the same option name in multiple places. Previously, this would silently cause ambiguous parsing where the first matching parser consumed the option. Optique 0.7.0 now validates option names at parse time and fails with a clear error message when duplicates are detected: const parser = object({ input: option("-i", "--input", string()), interactive: option("-i", "--interactive"), // Oops! -i is already used }); // Error: Duplicate option name -i found in fields: input, interactive. // Each option name must be unique within a parser combinator. This validation applies to `object()`, `tuple()`, `merge()`, and `group()` combinators. The `or()` combinator continues to allow duplicate option names since its branches are mutually exclusive. See the duplicate detection documentation for more details. If you have a legitimate use case for duplicate option names, you can opt out with `allowDuplicates: true`: const parser = object({ input: option("-i", "--input", string()), interactive: option("-i", "--interactive"), }, { allowDuplicates: true }); ## Context-aware error messages Error messages from combinators are now smarter about what they report. Instead of generic "No matching option or command found" messages, Optique now analyzes what the parser expects and provides specific feedback: // When only arguments are expected const parser1 = or(argument(string()), argument(integer())); // Error: Missing required argument. // When only commands are expected const parser2 = or(command("add", addParser), command("remove", removeParser)); // Error: No matching command found. // When both options and arguments are expected const parser3 = object({ port: option("--port", integer()), file: argument(string()), }); // Error: No matching option or argument found. ### Dynamic error messages with `NoMatchContext` For applications that need internationalization or context-specific messaging, the `errors.noMatch` option now accepts a function that receives a `NoMatchContext` object: const parser = or( command("add", addParser), command("remove", removeParser), { errors: { noMatch: ({ hasOptions, hasCommands, hasArguments }) => { if (hasCommands && !hasOptions && !hasArguments) { return message`일치하는 명령을 찾을 수 없습니다.`; // Korean } return message`잘못된 입력입니다.`; } } } ); ## Shell completion naming conventions The `run()` function now supports configuring whether shell completions use singular or plural naming conventions: run(parser, { completion: { name: "plural", // Uses "completions" and "--completions" } }); // Or for singular only run(parser, { completion: { name: "singular", // Uses "completion" and "--completion" } }); The default `"both"` accepts either form, maintaining backward compatibility while letting you enforce a consistent style in your CLI. ## Additional improvements * **Line break handling** : `formatMessage()` now distinguishes between soft breaks (single `\n`, converted to spaces) and hard breaks (double `\n\n`, creating paragraph separations), improving multi-line error message formatting. * **New utility functions** : Added `extractOptionNames()` and `extractArgumentMetavars()` to the `@optique/core/usage` module for programmatic access to parser metadata. ## Installation deno add --jsr @optique/core @optique/run npm add @optique/core @optique/run pnpm add @optique/core @optique/run yarn add @optique/core @optique/run bun add @optique/core @optique/run For validation library integrations: # Zod integration deno add jsr:@optique/zod # Deno npm add @optique/zod # npm/pnpm/yarn/bun # Valibot integration deno add jsr:@optique/valibot # Deno npm add @optique/valibot # npm/pnpm/yarn/bun ## Looking forward This release represents our commitment to making CLI development in TypeScript as smooth as possible. The “Did you mean?” suggestions and validation library integrations were among the most requested features, and we're excited to see how they improve your CLI applications. For detailed documentation and examples, visit the Optique documentation. We welcome your feedback and contributions on GitHub!
hackers.pub
November 25, 2025 at 3:06 PM
Reposted by KBuild
November 26, 2025 at 3:53 AM
Reposted by KBuild
Reposted by KBuild
어느 사이트 쪽인지는 몰라도 이쪽에서는 안쪽으로 법적대응도 하고 여러모로 하고 있습니다 그런데 생각도 못한 일도 있고 해서 (내부기밀) 최근에 피가 한번 터졌어요 준비하는 것이 많을 수록 조용해보이니까요 🧎‍♂️ 일개 편집자에게도 이야기가 나올 정도로 이것저것 물밑준비를 하고있으니 조금은 부드러운 눈으로 봐주시면 정말 감사드리겠으며 혹시 놓쳤을 수도 있을 불법사이트 제보를 해주세요...
일단 웹툰사이트들이 불법웹툰 단속에 별로 적극적이지 않은 거 보면 배가 불렀구나 싶기는 함. 정작 당하는 작가들은 피그 마르는데. 여러모로 창작하는 작가들한테 돈을 더 주는게 맞다고 생각함. 간절함이 없어.
November 25, 2025 at 12:12 PM
Reposted by KBuild
Trees are amazing! They build their bodies from thin air, move water with pressures that would crush a human, and grow using a system of living cables wrapped in layers of corpses. Watch our video to find out how they work, and why they might even be immortal: https://kgs.link/TreesAreDead
November 25, 2025 at 3:02 PM
Reposted by KBuild
Google検索のAIモードについに広告が表示される、広告はページ下部に表示され「スポンサー」ラベル付き
https://gigazine.net/news/20251126-google-begins-showing-ads-ai-mode/
Google検索のAIモードについに広告が表示される、広告はページ下部に表示され「スポンサー」ラベル付き
Google検索のAIモードに広告が追加されたことが明らかになりました。ただし、Googleはあくまで一部のユーザー向けに実施しているテストであると主張しています。
gigazine.net
November 26, 2025 at 12:00 AM
Reposted by KBuild
🦑~
November 25, 2025 at 2:16 PM
Reposted by KBuild
◤ 新商品情報 ◢

ぬいぐるみ 初音ミク Digital Stars 2021Ver.
__________

✅️ご予約はこちら
https://goodsmile.link/MiTBpZ

#初音ミク #すまぬい #グッスマ
November 25, 2025 at 3:08 AM
Reposted by KBuild
Hatsune Miku. #初音ミク #VOCALOID
November 23, 2025 at 10:41 AM
Reposted by KBuild
AI 때문에 기획자와 디자이너들이 실직할 거라고 떠드는 테키들을 보면 가소롭기 짝이 없음 얘들은 기술이 자기네 거라는 확신에 빠져서 기획자나 디자이너들도 AI를 써서 코딩을 대체할 수 있을 거라는 데까지는 생각이 못 미치는 걸까
November 24, 2025 at 1:26 AM
Reposted by KBuild
구불구불 시리즈 뭐야ㅠ 너무 귀여운데
November 18, 2025 at 3:43 PM