<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: kolkov</title><link>https://news.ycombinator.com/user?id=kolkov</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Mon, 10 Aug 2026 14:29:14 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=kolkov" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by kolkov in "Ask HN: What are you working on? (August 2026)"]]></title><description><![CDATA[
<p><a href="https://dev.to/kolkov/we-built-a-pure-go-3d-renderer-then-embedded-it-inside-a-gui-widget-4mo4" rel="nofollow">https://dev.to/kolkov/we-built-a-pure-go-3d-renderer-then-em...</a> - We Built a Pure Go 3D Renderer — Then Embedded It Inside a GUI Widget</p>
]]></description><pubDate>Sun, 02 Aug 2026 22:15:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=49148969</link><dc:creator>kolkov</dc:creator><comments>https://news.ycombinator.com/item?id=49148969</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49148969</guid></item><item><title><![CDATA[New comment by kolkov in "Ask HN: What are you working on? (May 2026)"]]></title><description><![CDATA[
<p><a href="https://github.com/born-ml/born" rel="nofollow">https://github.com/born-ml/born</a> --- Production-ready ML framework for Go with zero dependencies. Train and deploy neural networks as single binaries. PyTorch-like API, type-safe tensors, automatic differentiation.</p>
]]></description><pubDate>Mon, 04 May 2026 05:28:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=48004968</link><dc:creator>kolkov</dc:creator><comments>https://news.ycombinator.com/item?id=48004968</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48004968</guid></item><item><title><![CDATA[New comment by kolkov in "Ask HN: What are you working on? (May 2026)"]]></title><description><![CDATA[
<p><a href="https://github.com/gogpu" rel="nofollow">https://github.com/gogpu</a> --- Pure Go GPU Computing Ecosystem — Graphics, Shaders, ML, GUI. Zero CGO.</p>
]]></description><pubDate>Mon, 04 May 2026 05:20:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=48004927</link><dc:creator>kolkov</dc:creator><comments>https://news.ycombinator.com/item?id=48004927</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48004927</guid></item><item><title><![CDATA[New comment by kolkov in "DeepSeek v4"]]></title><description><![CDATA[
<p>How many not-so-smart and not-so-intelligent people can claim Russia occupied you? Never mind, your liberation by the West will come back to haunt you, mark my words... and very soon! You'll remember how well you lived during the years of the USSR and the Warsaw Pact!</p>
]]></description><pubDate>Fri, 24 Apr 2026 15:42:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=47891785</link><dc:creator>kolkov</dc:creator><comments>https://news.ycombinator.com/item?id=47891785</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47891785</guid></item><item><title><![CDATA[New comment by kolkov in "Claude Code's source code has been leaked via a map file in their NPM registry"]]></title><description><![CDATA[
<p>I write it myself, the agent only translates it into English.</p>
]]></description><pubDate>Tue, 31 Mar 2026 17:56:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=47591122</link><dc:creator>kolkov</dc:creator><comments>https://news.ycombinator.com/item?id=47591122</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47591122</guid></item><item><title><![CDATA[New comment by kolkov in "Claude Code's source code has been leaked via a map file in their NPM registry"]]></title><description><![CDATA[
<p>"Prompt injection from the issue?" — That's the best theory so far</p>
]]></description><pubDate>Tue, 31 Mar 2026 17:13:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=47590491</link><dc:creator>kolkov</dc:creator><comments>https://news.ycombinator.com/item?id=47590491</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47590491</guid></item><item><title><![CDATA[New comment by kolkov in "Claude Code's source code has been leaked via a map file in their NPM registry"]]></title><description><![CDATA[
<p>"Is the Claude thank you sarcasm?" — Mostly. But the sequence is real: we filed #39755 asking for source access on March 27, the source map shipped on March 31. The actual explanation is simpler — Bun generates source maps by default, and nobody checked the build output. Which is itself the point: 64K lines of code with no build verification process.</p>
]]></description><pubDate>Tue, 31 Mar 2026 17:13:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=47590484</link><dc:creator>kolkov</dc:creator><comments>https://news.ycombinator.com/item?id=47590484</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47590484</guid></item><item><title><![CDATA[New comment by kolkov in "Claude Code's source code has been leaked via a map file in their NPM registry"]]></title><description><![CDATA[
<p>"Why would you ship tests?" — Fair point. Source maps only include production bundle files — tests wouldn't appear in the map regardless. Tests may well exist in Anthropic's internal repo, and we can't claim otherwise. However, the bugs we found speak for themselves: a watchdog that doesn't protect the most vulnerable code path for 5+ months, a fallback with telemetry that never executes where it's needed, Promise.race without catch silently dropping tool results. If tests exist, they clearly don't cover the streaming pipeline adequately — these are the kind of issues that even basic integration tests would catch.</p>
]]></description><pubDate>Tue, 31 Mar 2026 17:04:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=47590362</link><dc:creator>kolkov</dc:creator><comments>https://news.ycombinator.com/item?id=47590362</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47590362</guid></item><item><title><![CDATA[New comment by kolkov in "Claude Code's source code has been leaked via a map file in their NPM registry"]]></title><description><![CDATA[
<p>[flagged]</p>
]]></description><pubDate>Tue, 31 Mar 2026 13:38:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=47587212</link><dc:creator>kolkov</dc:creator><comments>https://news.ycombinator.com/item?id=47587212</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47587212</guid></item><item><title><![CDATA[New comment by kolkov in "Goffi – Pure Go FFI with hand-written assembly for System V, Win64, ARM64"]]></title><description><![CDATA[
<p>Hi HN! Author here.<p>Some of you may remember the purego discussion from 2023 (<a href="https://news.ycombinator.com/item?id=34763681">https://news.ycombinator.com/item?id=34763681</a>, 268 points). It proved that calling C from Go without CGO is viable. We built on that foundation.<p><i>Why another FFI library?</i><p>We needed to call wgpu-native (WebGPU) from Go — thousands of FFI calls per frame. purego's reflect-based dispatch (RegisterFunc → reflect.MakeFunc → sync.Pool per call) was too much overhead for our use case. We also needed struct passing by value and callback float returns, which purego doesn't support.<p>So we took a libffi-style approach:<p><pre><code>  cif := &types.CallInterface{}
  ffi.PrepareCallInterface(cif, types.DefaultCall, retType, argTypes)  // once
  ffi.CallFunction(cif, fnPtr, &result, args)                         // many times, zero alloc
</code></pre>
Type classification is pre-computed at prepare time, not at call time. The call path is: Go → runtime.cgocall → hand-written asm → C function. The asm loads GP/FP registers per ABI from a flat argument buffer — no interpretation at call time.<p><i>The assembly:</i><p>Three hand-written stubs: System V AMD64 (RDI,RSI,RDX,RCX,R8,R9 + XMM0-7), Win64 (RCX,RDX,R8,R9 + XMM0-3, 32-byte shadow), AAPCS64 (X0-X7, D0-D7, HFA support). Each is ~100 lines of Plan 9 asm.<p><i>What goffi does that purego doesn't:</i><p>Struct passing by value (8B in RAX, 9-16B in RAX+RDX, >16B via sret pointer). Callback float returns via XMM0 — purego panics on float/double return from callbacks. Typed errors — 5 error types with errors.As() instead of generic errors. Context support for timeouts and cancellation.<p><i>What purego does better (being honest):</i><p>purego supports 8 GOARCHes and 20+ OS×ARCH combinations — we cover 6 targets (amd64×4 + arm64×2). purego auto-marshals strings, bools, and slices — we work with raw unsafe.Pointer. purego has a much simpler API — one line to bind a function. purego has full Darwin ARM64 variadic stack packing — we don't yet.<p><i>Related projects worth knowing:</i><p>JupiterRider/ffi (<a href="https://github.com/JupiterRider/ffi" rel="nofollow">https://github.com/JupiterRider/ffi</a>) — pure Go binding for native libffi via purego. Supports variadic and struct pass/return, but requires libffi.so at runtime. If you need variadic calls today, that's a good option.<p><i>Where we use it:</i><p>goffi powers gogpu (<a href="https://github.com/gogpu" rel="nofollow">https://github.com/gogpu</a>) — a pure Go GPU computing platform with WebGPU bindings, zero CGO. It's also used in Born (<a href="https://github.com/born-ml/born" rel="nofollow">https://github.com/born-ml/born</a>) — an ML framework for Go with PyTorch-like API, type-safe tensors, and automatic differentiation. Both projects ship as single binaries with no C toolchain required. 89% test coverage, CI on Linux/Windows/macOS, MIT license.<p>We wrote a deep dive on the architecture, assembly, and callback mechanism: <a href="https://dev.to/kolkov/goffi-zero-cgo-foreign-function-interface-for-go-how-we-call-c-libraries-without-a-c-compiler-ca5" rel="nofollow">https://dev.to/kolkov/goffi-zero-cgo-foreign-function-interf...</a><p>Happy to discuss FFI internals, ABI details, or the trade-offs between the different approaches!</p>
]]></description><pubDate>Mon, 02 Mar 2026 14:42:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=47218567</link><dc:creator>kolkov</dc:creator><comments>https://news.ycombinator.com/item?id=47218567</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47218567</guid></item><item><title><![CDATA[Goffi – Pure Go FFI with hand-written assembly for System V, Win64, ARM64]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/go-webgpu/goffi">https://github.com/go-webgpu/goffi</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47218566">https://news.ycombinator.com/item?id=47218566</a></p>
<p>Points: 4</p>
<p># Comments: 1</p>
]]></description><pubDate>Mon, 02 Mar 2026 14:42:52 +0000</pubDate><link>https://github.com/go-webgpu/goffi</link><dc:creator>kolkov</dc:creator><comments>https://news.ycombinator.com/item?id=47218566</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47218566</guid></item><item><title><![CDATA[New comment by kolkov in "[dead]"]]></title><description><![CDATA[
<p>Author here. I've been practicing what Karpathy now calls "Agentic Engineering"  since January 2026 – a month before he coined the term. Across 35+ open source Go projects (~1M+ LOC total, including a 425K LOC pure Go GPU ecosystem), I found that orchestrating agents isn't enough. The critical missing piece is what I call  Bidirectional Learning: structured knowledge files that the AI reads on session start and updates on exit. Each session compounds on the last instead of starting from zero. Without this, you're conducting an orchestra that forgets the piece they played yesterday.<p>Happy to answer questions about the workflow or any of the projects.</p>
]]></description><pubDate>Tue, 24 Feb 2026 07:25:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=47133953</link><dc:creator>kolkov</dc:creator><comments>https://news.ycombinator.com/item?id=47133953</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47133953</guid></item></channel></rss>