Hacker News

Latest

Disney Imagineering Debuts Next-Generation Robotic Character, Olaf

2025-12-21 @ 21:46:20Points: 69Comments: 30

Engineering dogmas it's time to retire

2025-12-21 @ 21:26:09Points: 18Comments: 9

The gift card accountability sink

2025-12-21 @ 21:07:01Points: 82Comments: 58

A guide to local coding models

2025-12-21 @ 20:55:15Points: 204Comments: 95

More on whether useful quantum computing is “imminent”

2025-12-21 @ 20:53:34Points: 62Comments: 51

Rue: Higher level than Rust, lower level than Go

2025-12-21 @ 20:46:02Points: 80Comments: 53

I can't upgrade to Windows 11, now leave me alone

2025-12-21 @ 18:43:20Points: 345Comments: 322

Mullvad VPN: "This is a Chat Control 3.0 attempt."

2025-12-21 @ 18:39:46Points: 457Comments: 143

You’re not burnt out, you’re existentially starving

2025-12-21 @ 18:28:56Points: 210Comments: 217

Logging Sucks

2025-12-21 @ 18:09:52Points: 505Comments: 187

Get an AI code review in 10 seconds

2025-12-21 @ 17:21:05Points: 91Comments: 49

Autoland Saves King Air, Everyone Reported Safe

2025-12-21 @ 16:57:57Points: 105Comments: 45

Show HN: Books mentioned on Hacker News in 2025

2025-12-21 @ 16:21:04Points: 334Comments: 127

Show HN: WalletWallet – create Apple passes from anything

2025-12-21 @ 16:04:05Points: 288Comments: 88

I got my Apple developer certificate and built a simple app to solve a problem I had. One shop I buy from doesn't have Apple Wallet passes. Since you need signed certificates to build these very simple things, I created a minimal app that signs them. It's available if you need it too. It won't scan cards with AI - you manually enter the barcode, which I think makes it less prone to error.

E.W.Dijkstra Archive

2025-12-21 @ 15:29:31Points: 109Comments: 8

CO2 batteries that store grid energy take off globally

2025-12-21 @ 15:27:36Points: 139Comments: 112

ARIN Public Incident Report – 4.10 Misissuance Error

2025-12-21 @ 15:19:41Points: 134Comments: 35

Structured outputs create false confidence

2025-12-21 @ 15:06:46Points: 116Comments: 58

Three ways to solve problems

2025-12-21 @ 14:35:29Points: 116Comments: 21

Coarse is better

2025-12-21 @ 12:57:44Points: 178Comments: 95

Show HN: Shittp – Volatile Dotfiles over SSH

2025-12-21 @ 12:33:11Points: 115Comments: 64

Ruby website redesigned

2025-12-21 @ 07:06:48Points: 358Comments: 138

Indoor tanning makes youthful skin much older on a genetic level

2025-12-21 @ 05:21:42Points: 216Comments: 160

Waymo halts service during S.F. blackout after causing traffic jams

2025-12-21 @ 05:12:03Points: 190Comments: 274

Evaluating chain-of-thought monitorability

2025-12-19 @ 05:49:33Points: 24Comments: 3

FWS – pip-installable embedded process supervisor with PTY/pipe/dtach back ends

2025-12-18 @ 06:19:32Points: 15Comments: 4

This is meant for environments where you don’t want to stand up a full supervisor stack (or don’t have one): quick multi-service prototypes, dev environments, constrained userlands, etc.

### What it does

* Spawn/manage shells with:

  * **PTY**: interactive terminal sessions (resize, input, stream)
  * **Pipes**: stdin/stdout/stderr streams (good for daemons/LSPs)
  * **dtach**: persistent sessions you can attach/detach to (survives manager restarts)
* *Runtime isolation* (the big feature): shells are namespaced by `~/.cache/framework_shells/runtimes/<repo_fingerprint>/<runtime_id>/...` so two clones of the same repo can run concurrently without cross-adoption or cross-control. * *Control surfaces*: CLI + optional FastAPI/WS UI for listing, logs, and lifecycle actions. * Optional *hooks* for host integration (external registries/telemetry).

### CLI quickstart

```bash # list shells fws list

# run a one-off shell (no spec) fws run --backend pty --label demo -- bash -l -i

# apply a YAML shellspec (recommended) fws up shells.yaml

# terminate shells fws down

# attach to a dtach-backed shell fws attach <shell_id>

# show managed shells + procfs descendants fws tree --depth 4 ```

### Shellspec example

```yaml version: "1" shells: worker: backend: proc cwd: ${ctx:PROJECT_ROOT} subgroups: ["worker", "project:${ctx:APP_ID}"] command: ["python", "-m", "your_module.worker", "--port", "${free_port}"] ```

### Isolation + security model (simple by default)

* `FRAMEWORK_SHELLS_SECRET` derives the `runtime_id` (namespace) and API tokens. * If the secret is set, mutating API endpoints require:

  * `Authorization: Bearer <token>` (or `X-Framework-Key`).
* If the secret is unset, auth is disabled (dev mode).

Hard limit: if two runtimes share the same OS user/UID, the OS may still allow signaling each other’s processes. The guarantee is: no cross-count/adopt/control *through the library’s control plane*.

### Real-world usage

I use this as the substrate of a full dev environment where “apps are shells” (terminals, IDE + LSP, agent/MCP, aria2 RPC, file explorer, llama.cpp runner, etc.). Repo:

```text https://github.com/mrsurge/termux-extensions-2 ```

### Feedback I want

* Does the secret/fingerprint/runtime isolation contract feel right? * Any obvious foot-guns in the default API/CLI? * Expectations vs systemd/supervisord/tmux/dtach: where would you use this?

github.com/mrsurge/framework-shells

pip install "framework-shells @ git+https://github.com/mrsurge/framework-shells@main"

```bash fws --help ```

Why "negative vectors" can't delete data in FAISS – but weighted kernels can

2025-12-17 @ 06:26:59Points: 8Comments: 1

Standard FAISS-style indices store vectors and compute:

argmax ⟨q, vᵢ⟩

If you insert -v, nothing happens. It’s just another point. The original vector is still maximally similar to itself and remains rank-1.

This isn’t a bug—it’s a consequence of selection-based retrieval.

If instead you store (vector, weight) pairs and evaluate: φ(q) = Σ wᵢ · K(q, vᵢ)

you get a different object entirely: a field, not a selection. Now inserting the same vector with w = −1 causes destructive interference. The contribution cancels. The attractor disappears.

Deletion becomes O(1) append-only (add the inverse), not a structural rebuild.

FAISS-style: Vec<Vec<f32>> → argmax (selection) Weighted form: Vec<(Vec<f32>, f32)> → Σ (field)

We validated this on 100k vectors: • FAISS: target stays rank-1 after “deletion” • Field-based model: exact cancellation (φ → 0), target unretrievable

The deeper point is that this isn’t a trick—it’s a semantic separation. • FAISS implements a selection operator over discrete points. • The weighted version implements a field operator where vectors act as kernels in a continuous potential. • Retrieval becomes gradient ascent to local maxima. • Deletion becomes destructive interference that removes attractors.

This shifts deletion from structural (modify index, rebuild, filter) to algebraic (append an inverse element). You get append-only logs, reversible unlearning, and auditable deletion records. The negative weight is the proof.

Implication: current vector DBs can’t guarantee GDPR/CCPA erasure without reconstruction. Field-based retrieval can—provably.

Paper with proofs: https://github.com/nikitph/bloomin/blob/master/negative-vect...

I Program on the Subway

2025-12-16 @ 21:23:18Points: 168Comments: 106

I'm just having fun

2025-12-16 @ 11:19:29Points: 138Comments: 42

Show HN: Autograd.c – a tiny ML framework built from scratch

2025-12-16 @ 06:26:01Points: 53Comments: 5

perfect for learning how ml frameworks work under the hood :)

Archives

2025

2024

2023

2022