What is Hackers' Pub?

Hackers' Pub is a place for software engineers to share their knowledge and experience with each other. It's also an ActivityPub-enabled social network, so you can follow your favorite hackers in the fediverse and get their latest posts in your feed.

연말이죠, 구글의 "올해의 검색"이 나올 시기입니다. 언제부터인가 딱히 구글의 올해의 검색이 기대가 안되는데, 올해는 타의 추종을 불허하고 형편없기로는 최고네요. 인간 도살장이 되어버린 가자지구에는 0.01프레임도 허용치 않으면서 인류애라던가 슬픔이라던가 회복이라던가 그런걸 말할 수 있나 싶구요. 안나오진 않을거라고 생각했지만 배경음악으로 케데헌 골든을 깔아놓으니 참, 이게 뭔가 싶은겁니다. youtu.be/Vv_sjpclsZ8?...

2025 — Year in Search

0
1
0
1
@StellarMiut@g0v.social流浪貓 :verified: 從Steam的討論看起來,是歷史遺留問題
https://steamcommunity.com/app/221040/discussions/0/601912617062105278/

遊戲可能是使用DirectX 9開發,但是Windows11沒有預先安裝DX9,而遊戲當年發售的時間只支援最高1080P的解析度,現在一堆人用超寬與高解析螢幕。

為什麼在Linux上頭能跑…Steam Proton的設計預先排除了各種相容性問題,並且持續修正,但是Capcom與微軟缺乏這種動機。
0

Released Optique 0.8.0, a type-safe CLI parser for TypeScript. This version adds conditional() for branching based on a discriminator option, passThrough() for forwarding unknown options to underlying tools, and a new @optique/logtape package for configuring LogTape via CLI.

Optique 0.8.0: Conditional par...

0
0
0

그거 아십니까?
배민원(한집배달)은 최대 조리시간이 30분입니다
그 이상 설정이 안됨
님이 만약에 막 스무디 이런걸 10잔 넘게 주문하면 모두가 불행해진다는 사실!
기사님:30분 안에 된다면서요
님:30분 안에 된다면서요
알바: :jokebear_sobbing:
오래 걸릴 것 같은 주문은 일반배달로 시켜주십시오 감사합니다
이상 3시간동안 물도 못 마시고 일한 알바 씀

0
0
1

Released Optique 0.8.0, a type-safe CLI parser for TypeScript.

This version adds conditional() for branching based on a discriminator option, passThrough() for forwarding unknown options to underlying tools, and a new @optique/logtape package for configuring LogTape via CLI.

https://hackers.pub/@hongminhee/2025/optique-080

4

It's not finished yet, but I wanted to show it very much. I guess racing game in ? Not exactly racing, but anyway, cars.

You will also need to pick up gasoline, which will constantly run out

(and I know it does not fit but some of my rough wip music stuff playing in background. Well let's say the driver has very high stakes, so it's a very dramatic moment)

0
0
0
0
0
0

洪 民憙 (Hong Minhee) :nonbinary: shared the below article:

Optique 0.8.0: Conditional parsing, pass-through options, and LogTape integration

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

We're excited to announce Optique 0.8.0! This release introduces powerful new features for building sophisticated CLI applications: the conditional() combinator for discriminated union patterns, the passThrough() parser for wrapper tools, and the new @optique/logtape package for seamless logging configuration.

Optique is a type-safe combinatorial CLI parser for TypeScript, providing a functional approach to building command-line interfaces with composable parsers and full type inference.

New conditional parsing with conditional()

Ever needed to enable different sets of options based on a discriminator value? The new conditional() combinator makes this pattern first-class. It creates discriminated unions where certain options only become valid when a specific discriminator value is selected.

import { conditional, object } from "@optique/core/constructs";
import { option } from "@optique/core/primitives";
import { choice, string } from "@optique/core/valueparser";

const parser = conditional(
  option("--reporter", choice(["console", "junit", "html"])),
  {
    console: object({}),
    junit: object({ outputFile: option("--output-file", string()) }),
    html: object({ outputFile: option("--output-file", string()) }),
  }
);
// Result type: ["console", {}] | ["junit", { outputFile: string }] | ...

Key features:

  • Explicit discriminator option determines which branch is selected
  • Tuple result [discriminator, branchValue] for clear type narrowing
  • Optional default branch for when discriminator is not provided
  • Clear error messages indicating which options are required for each discriminator value

The conditional() parser provides a more structured alternative to or() for discriminated union patterns. Use it when you have an explicit discriminator option that determines which set of options is valid.

See the conditional() documentation for more details and examples.

Pass-through options with passThrough()

Building wrapper CLI tools that need to forward unrecognized options to an underlying tool? The new passThrough() parser enables legitimate wrapper/proxy patterns by capturing unknown options without validation errors.

import { object } from "@optique/core/constructs";
import { option, passThrough } from "@optique/core/primitives";

const parser = object({
  debug: option("--debug"),
  extra: passThrough(),
});

// mycli --debug --foo=bar --baz=qux
// → { debug: true, extra: ["--foo=bar", "--baz=qux"] }

Key features:

  • Three capture formats: "equalsOnly" (default, safest), "nextToken" (captures --opt val pairs), and "greedy" (captures all remaining tokens)
  • Lowest priority (−10) ensures explicit parsers always match first
  • Respects -- options terminator in "equalsOnly" and "nextToken" modes
  • Works seamlessly with object(), subcommands, and other combinators

This feature is designed for building Docker-like CLIs, build tool wrappers, or any tool that proxies commands to another process.

See the passThrough() documentation for usage patterns and best practices.

LogTape logging integration

The new @optique/logtape package provides seamless integration with LogTape, enabling you to configure logging through command-line arguments with various parsing strategies.

# Deno
deno add --jsr @optique/logtape @logtape/logtape

# npm
npm add @optique/logtape @logtape/logtape

Quick start with the loggingOptions() preset:

import { loggingOptions, createLoggingConfig } from "@optique/logtape";
import { object } from "@optique/core/constructs";
import { parse } from "@optique/core/parser";
import { configure } from "@logtape/logtape";

const parser = object({
  logging: loggingOptions({ level: "verbosity" }),
});

const args = ["-vv", "--log-output=-"];
const result = parse(parser, args);
if (result.success) {
  const config = await createLoggingConfig(result.value.logging);
  await configure(config);
}

The package offers multiple approaches to control log verbosity:

  • verbosity() parser: The classic -v/-vv/-vvv pattern where each flag increases verbosity (no flags → "warning", -v"info", -vv"debug", -vvv"trace")
  • debug() parser: Simple --debug/-d flag that toggles between normal and debug levels
  • logLevel() value parser: Explicit --log-level=debug option for direct level selection
  • logOutput() parser: Log output destination with - for console or file path for file output

See the LogTape integration documentation for complete examples and configuration options.

Bug fix: negative integers now accepted

Fixed an issue where the integer() value parser rejected negative integers when using type: "number". The regex pattern has been updated from /^\d+$/ to /^-?\d+$/ to correctly handle values like -42. Note that type: "bigint" already accepted negative integers, so this change brings consistency between the two types.

Installation

# Deno
deno add jsr:@optique/core

# npm
npm add @optique/core

# pnpm
pnpm add @optique/core

# Yarn
yarn add @optique/core

# Bun
bun add @optique/core

For the LogTape integration:

# Deno
deno add --jsr @optique/logtape @logtape/logtape

# npm
npm add @optique/logtape @logtape/logtape

# pnpm
pnpm add @optique/logtape @logtape/logtape

# Yarn
yarn add @optique/logtape @logtape/logtape

# Bun
bun add @optique/logtape @logtape/logtape

Looking forward

Optique 0.8.0 continues our focus on making CLI development more expressive and type-safe. The conditional() combinator brings discriminated union patterns to the forefront, passThrough() enables new wrapper tool use cases, and the LogTape integration makes logging configuration a breeze.

As always, all new features maintain full backward compatibility—your existing parsers continue to work unchanged.

We're grateful to the community for feedback and suggestions. If you have ideas for future improvements or encounter any issues, please let us know through GitHub Issues. For more information about Optique and its features, visit the documentation or check out the full changelog.

Read more →
5

uspol (ambient)

wonder how building security and riot control guidelines have changed in the wake of 6 Jan 2021

this thought brought to you by watching footage of the rioters trying to smash out glass in the Capitol and realizing that somewhere, someone had to have pointed at some of that footage and said: "see? you never fucking know. made it hardened, just in case."

0

Optique 0.8.0: Conditional parsing, pass-through options, and LogTape integration

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

We're excited to announce Optique 0.8.0! This release introduces powerful new features for building sophisticated CLI applications: the conditional() combinator for discriminated union patterns, the passThrough() parser for wrapper tools, and the new @optique/logtape package for seamless logging configuration.

Optique is a type-safe combinatorial CLI parser for TypeScript, providing a functional approach to building command-line interfaces with composable parsers and full type inference.

New conditional parsing with conditional()

Ever needed to enable different sets of options based on a discriminator value? The new conditional() combinator makes this pattern first-class. It creates discriminated unions where certain options only become valid when a specific discriminator value is selected.

import { conditional, object } from "@optique/core/constructs";
import { option } from "@optique/core/primitives";
import { choice, string } from "@optique/core/valueparser";

const parser = conditional(
  option("--reporter", choice(["console", "junit", "html"])),
  {
    console: object({}),
    junit: object({ outputFile: option("--output-file", string()) }),
    html: object({ outputFile: option("--output-file", string()) }),
  }
);
// Result type: ["console", {}] | ["junit", { outputFile: string }] | ...

Key features:

  • Explicit discriminator option determines which branch is selected
  • Tuple result [discriminator, branchValue] for clear type narrowing
  • Optional default branch for when discriminator is not provided
  • Clear error messages indicating which options are required for each discriminator value

The conditional() parser provides a more structured alternative to or() for discriminated union patterns. Use it when you have an explicit discriminator option that determines which set of options is valid.

See the conditional() documentation for more details and examples.

Pass-through options with passThrough()

Building wrapper CLI tools that need to forward unrecognized options to an underlying tool? The new passThrough() parser enables legitimate wrapper/proxy patterns by capturing unknown options without validation errors.

import { object } from "@optique/core/constructs";
import { option, passThrough } from "@optique/core/primitives";

const parser = object({
  debug: option("--debug"),
  extra: passThrough(),
});

// mycli --debug --foo=bar --baz=qux
// → { debug: true, extra: ["--foo=bar", "--baz=qux"] }

Key features:

  • Three capture formats: "equalsOnly" (default, safest), "nextToken" (captures --opt val pairs), and "greedy" (captures all remaining tokens)
  • Lowest priority (−10) ensures explicit parsers always match first
  • Respects -- options terminator in "equalsOnly" and "nextToken" modes
  • Works seamlessly with object(), subcommands, and other combinators

This feature is designed for building Docker-like CLIs, build tool wrappers, or any tool that proxies commands to another process.

See the passThrough() documentation for usage patterns and best practices.

LogTape logging integration

The new @optique/logtape package provides seamless integration with LogTape, enabling you to configure logging through command-line arguments with various parsing strategies.

# Deno
deno add --jsr @optique/logtape @logtape/logtape

# npm
npm add @optique/logtape @logtape/logtape

Quick start with the loggingOptions() preset:

import { loggingOptions, createLoggingConfig } from "@optique/logtape";
import { object } from "@optique/core/constructs";
import { parse } from "@optique/core/parser";
import { configure } from "@logtape/logtape";

const parser = object({
  logging: loggingOptions({ level: "verbosity" }),
});

const args = ["-vv", "--log-output=-"];
const result = parse(parser, args);
if (result.success) {
  const config = await createLoggingConfig(result.value.logging);
  await configure(config);
}

The package offers multiple approaches to control log verbosity:

  • verbosity() parser: The classic -v/-vv/-vvv pattern where each flag increases verbosity (no flags → "warning", -v"info", -vv"debug", -vvv"trace")
  • debug() parser: Simple --debug/-d flag that toggles between normal and debug levels
  • logLevel() value parser: Explicit --log-level=debug option for direct level selection
  • logOutput() parser: Log output destination with - for console or file path for file output

See the LogTape integration documentation for complete examples and configuration options.

Bug fix: negative integers now accepted

Fixed an issue where the integer() value parser rejected negative integers when using type: "number". The regex pattern has been updated from /^\d+$/ to /^-?\d+$/ to correctly handle values like -42. Note that type: "bigint" already accepted negative integers, so this change brings consistency between the two types.

Installation

# Deno
deno add jsr:@optique/core

# npm
npm add @optique/core

# pnpm
pnpm add @optique/core

# Yarn
yarn add @optique/core

# Bun
bun add @optique/core

For the LogTape integration:

# Deno
deno add --jsr @optique/logtape @logtape/logtape

# npm
npm add @optique/logtape @logtape/logtape

# pnpm
pnpm add @optique/logtape @logtape/logtape

# Yarn
yarn add @optique/logtape @logtape/logtape

# Bun
bun add @optique/logtape @logtape/logtape

Looking forward

Optique 0.8.0 continues our focus on making CLI development more expressive and type-safe. The conditional() combinator brings discriminated union patterns to the forefront, passThrough() enables new wrapper tool use cases, and the LogTape integration makes logging configuration a breeze.

As always, all new features maintain full backward compatibility—your existing parsers continue to work unchanged.

We're grateful to the community for feedback and suggestions. If you have ideas for future improvements or encounter any issues, please let us know through GitHub Issues. For more information about Optique and its features, visit the documentation or check out the full changelog.

Read more →
5
1
0
1
2
1
1
1
0
0
0
0
1
0
2

지옥으로 가는 길이 자기만을 위한 선의들로 포장되어 있다면, 지옥에서 나오는 길은 타인을 위한 선의들로 포장되어있지 않겠나 생각해봅니다.

RE: https://bsky.app/profile/did:plc:ijc4yb24tysgjiaiib2ldgyk/post/3m7jofm2ruk23

0

Women in the Third World by Nelly P. Stromquist, 1998

An Encyclopedia of Contemporary Issues

"Provides timely information and insight into the complex issues facing women living in the economically, culturally, and politically diverse Third World. An excellent resource."

"For quick, reliable, coverage of women's issues in developing countries, [this] is a concise reference work written by more than 80 international experts."




0
0
0
0
1
0
2
1
0

I finally got around to reading this and boy is it good:
“If we use 200kW as a baseline and assume all of that power will be fed to GPUs, we'd need a system 12.5 times bigger, i.e., roughly 531 square metres, or about 2.6 times the size of the relevant solar array. This is now going to be a very large satellite, dwarfing the ISS in area, all for the equivalent of three standard server racks on Earth.”

Why training AI in orbit is a non-starter (orbital compute is NOT going to look like the same kinds of use cases we are currently obsessed with on the ground): taranis.ie/datacenters-in-spac

0
0
0

[단독] 김형석, 또 독립기념관서 '예배'…"목사로서 신념 지킬 것" (영상) news.jtbc.co.kr/article/NB12... "그런데 결과 통보 바로 다음날인 6일 토요일. 김 관장은 독립기념관에서 또 예배 행사를 열었습니다. '한국독립운동과 기독교의 만남 개막식'이란 행사였는데 사실상 1시간 짜리 예배였습니다. [내 죄를 씻기 위하여…] 묵도로 시작해 찬송, 기도, 성경 봉독, 특송까지 이어졌습니다. 김형석 관장은 단상에까지 올랐습니다."

[단독] 김형석, 또 독립기념관서 ‘예배’…"목사로서 ...

0
0

'보험금을 노린 과잉 진료' '초등학생 학부모들조차 경쟁적으로 아이들에게 수액 주사를 맞출 정도' 다른것도 아니고 독감에서 비급여 주사제는 페라미플루일건데, 그걸 실비처리 안하고 걍 다 돈 내야 하는게 맞다고? 독감 유행이 심한 상황에서 경쟁적이요? ... 아 예. 애 키우는 부모가 다 죄인입니다. 앞으로 저출생의 ㅈ자라도 꺼내면 서울경제 네놈 새끼들은 진짜 머리를 깨서라도 쳐죽일거에요

과잉 진료에···독감 수액주사 실손보험금 3.3배 폭증

0
2
0
0
0

直近のDID掌握率が0.036%だそうで。直近4.1Mアカウントについてだそうなので、全体では少し変わるかもしれないけど。後からrotation keyを登録するパターンも期待できるわけだし。 https://rob.leaflet.pub/3m7isflo7ls23

0