<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: nikki93</title><link>https://news.ycombinator.com/user?id=nikki93</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Tue, 20 Oct 2026 14:13:26 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=nikki93" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by nikki93 in "Using Claude Code to modernize a 25-year-old kernel driver"]]></title><description><![CDATA[
<p><a href="https://github.com/terryyin/lizard" rel="nofollow">https://github.com/terryyin/lizard</a> has been useful to track when functions get too convoluted or long, or when there's too much duplication -- in code generated by agents. Still have to see how well it works long term but it's caught things here and there, I have it in the build steps in my scripts so the agent sees its output.</p>
]]></description><pubDate>Mon, 08 Sep 2025 09:37:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=45166289</link><dc:creator>nikki93</dc:creator><comments>https://news.ycombinator.com/item?id=45166289</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45166289</guid></item><item><title><![CDATA[New comment by nikki93 in "The Bitter Lesson Is Misunderstood"]]></title><description><![CDATA[
<p>A relevant paper: <a href="https://arxiv.org/abs/2306.11644" rel="nofollow">https://arxiv.org/abs/2306.11644</a> -- the Phi models (and many others too) are based on this idea.</p>
]]></description><pubDate>Thu, 04 Sep 2025 03:21:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=45123173</link><dc:creator>nikki93</dc:creator><comments>https://news.ycombinator.com/item?id=45123173</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45123173</guid></item><item><title><![CDATA[New comment by nikki93 in "Understanding Transformers Using a Minimal Example"]]></title><description><![CDATA[
<p>Pasting a comment I posted elsewhere:<p>Resources I’ve liked:<p>Sebastian Raschka book on building them from scratch<p>Deep Learning a Visual Approach<p>These videos / playlists:<p><a href="https://youtube.com/playlist?list=PLoROMvodv4rOY23Y0BoGoBGgQ1zmU_MT_&si=9dSvEJ-Pe7cIbgn9" rel="nofollow">https://youtube.com/playlist?list=PLoROMvodv4rOY23Y0BoGoBGgQ...</a>
<a href="https://youtube.com/playlist?list=PLoROMvodv4rOwvldxftJTmoR3kRcWkJBp&si=ny2Gth4xlNM3YkKV" rel="nofollow">https://youtube.com/playlist?list=PLoROMvodv4rOwvldxftJTmoR3...</a>
<a href="https://youtube.com/playlist?list=PL7m7hLIqA0hoIUPhC26ASCVs_VrqcDpAz&si=o4rMp31F4TjpKjTd" rel="nofollow">https://youtube.com/playlist?list=PL7m7hLIqA0hoIUPhC26ASCVs_...</a>
<a href="https://www.youtube.com/live/uIsej_SIIQU?si=RHBetDNa7JXKjziD" rel="nofollow">https://www.youtube.com/live/uIsej_SIIQU?si=RHBetDNa7JXKjziD</a><p>here’s a basic impl that i trained on tinystories to decent effect: <a href="https://gist.github.com/nikki93/f7eae83095f30374d7a3006fd5af1d31" rel="nofollow">https://gist.github.com/nikki93/f7eae83095f30374d7a3006fd5af...</a> (i used claude code a lot to help with the above bc a new field for me) (i did this with C and mlx before but ultimately gave into the python lol)<p>but overall it boils down to:<p>- tokenize the text<p>- embed tokens (map each to a vector) with a simple NN<p>- apply positional info so each token also encodes where it is<p>- do the attention. this bit is key and also very interesting to me. there are three neural networks: Q, K, V – that are applied to each token. you then generate a new sequence of embeddings where each position has the Vs of all tokens added up weighted by the Q of that position dot’d with the K of the other position. the new embeddings are /added/ to the previous layer (adding like this is called ‘residual’)<p>- also do another NN pass without attention, again adding the output (residual)
there’s actually multiple ‘heads’ each with a different Q, K, V – their outputs are added together before that second NN pass<p>there’s some normalization at each stage to keep the numbers reasonable and from blowing up<p>you repeat the attention + forward blocks many times, then the last embedding in the final layer output is what you can sample based on<p>i was surprised by how quickly this just starts to generate coherent grammar etc. having the training loop also do a generation step to show example output at each stage of training was helpful to see how the output qualitatively improves over time, and it’s kind of cool to “watch” it learn.<p>this doesn’t cover MoE, sparse vs dense attention and also the whole thing about RL on top of these (whether for human feedback or for doing “search with backtracking and sparse reward”) – i haven’t coded those up yet just kinda read about them…<p>now the thing is – this is a setup for it to learn some processes spread among the weights that do what it does – but what those processes are seems still very unknown. “mechanistic interpretability” is the space that’s meant to work on that, been looking into it lately.</p>
]]></description><pubDate>Thu, 04 Sep 2025 01:50:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=45122565</link><dc:creator>nikki93</dc:creator><comments>https://news.ycombinator.com/item?id=45122565</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45122565</guid></item><item><title><![CDATA[New comment by nikki93 in "Rust's Sneaky Deadlock With `if let` Blocks"]]></title><description><![CDATA[
<p>I think a 'linear types' ish model where the compiler flags an error if you didn't write the explicit unlock call, and only compiles if some acceptable unlock call (or set of calls) is added, would be a good design. It can / would also prevent use-after-consume. I do want the static checks, but I don't think that means that implicit function calls need to be generated on a } or a = (assigning to a variable causes a drop) etc. This is what Rust already does with `.clone()` -- needing the explicit call -- and I think it makes sense for a lot of cases of implicit drop. I have seen discussions about implementing this for Rust and I have it implemented in a C borrow checker experiment I'm trying. ATS is also an example of this, and going further is something like Frama-C or seL4 and so on.<p>The main point being: the implicitness is not necessary for "compiler makes sure you don't forget". So the original comment about how usage of the explicitly named and paired APIs can clarify intent both for the writer and reader can still stand while not implying that forgetting is involved. I see this dichotomy often being drawn and I think it's important to consider the language design space more granularly. I think a reminder is a better fix for forgetting, rather than assuming what you wanted and doing it for you.<p>(the explicit calls also let you / work better with "go to defintion" on the editor to see their code, learn what to look up in a manual, step in with a debugger, see reasonable function names in stack traces and profiles, pass / require more arguments to the drop call, let the drop call have return / error values you can do something about (consider `fclose`), let the drop call be async, ...)</p>
]]></description><pubDate>Wed, 13 Nov 2024 08:45:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=42124095</link><dc:creator>nikki93</dc:creator><comments>https://news.ycombinator.com/item?id=42124095</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42124095</guid></item><item><title><![CDATA[New comment by nikki93 in "CIL: C Intermediate Language"]]></title><description><![CDATA[
<p>Frama-C uses CIL.</p>
]]></description><pubDate>Fri, 01 Nov 2024 07:45:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=42014820</link><dc:creator>nikki93</dc:creator><comments>https://news.ycombinator.com/item?id=42014820</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42014820</guid></item><item><title><![CDATA[New comment by nikki93 in "John Carmack on inlined code (2014)"]]></title><description><![CDATA[
<p>GCC and clang (and maybe others) have 'statement expressions': <a href="https://godbolt.org/z/sqYnbh4Ej" rel="nofollow">https://godbolt.org/z/sqYnbh4Ej</a></p>
]]></description><pubDate>Wed, 09 Oct 2024 19:13:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=41791571</link><dc:creator>nikki93</dc:creator><comments>https://news.ycombinator.com/item?id=41791571</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41791571</guid></item><item><title><![CDATA[New comment by nikki93 in "Show HN: PGlite – in-browser WASM Postgres with pgvector and live sync"]]></title><description><![CDATA[
<p>This would be nice also to have an API that's usable from C/C++ code running in Wasm. I see libraries often do this where they expose a C/C++ library like Postgres to Wasm and the main / documented API is JS and you have to dig a bit to find the C/C++ API if it's possible to access it that way.</p>
]]></description><pubDate>Mon, 12 Aug 2024 17:31:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=41227084</link><dc:creator>nikki93</dc:creator><comments>https://news.ycombinator.com/item?id=41227084</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41227084</guid></item><item><title><![CDATA[New comment by nikki93 in "Compile-time JSON deserialization in C++"]]></title><description><![CDATA[
<p>I use this static reflection hack in C++ -- <a href="https://godbolt.org/z/enh8za4ja" rel="nofollow">https://godbolt.org/z/enh8za4ja</a><p>You do have to tag struct fields with a macro, but you can attach contexpr-visitable attributes. There's also a static limit to how many reflectable fields you can have, all reflectable fields need to be at the front of the struct, and the struct needs to be an aggregate.</p>
]]></description><pubDate>Wed, 10 Jul 2024 00:16:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=40922640</link><dc:creator>nikki93</dc:creator><comments>https://news.ycombinator.com/item?id=40922640</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40922640</guid></item><item><title><![CDATA[New comment by nikki93 in "Making games in Go for absolute beginners"]]></title><description><![CDATA[
<p>Nice! Ebiten is a super nice API for Go. Lots there to be inspired by in API design. Another API I like a lot is Love for Lua (which also actually can be used from C++).<p>Re: the comments on here about the GC etc. -- I've posted about this a couple times before but I've been using a custom Go (subset / some changes) -> C++ compiler for hobby gamedev, which helps with perf, gives access to C/C++ APIs (I've been using Raylib and physics engines etc.) and also especially has good perf in WebAssembly. Another nice thing is you can add in some reflection / metaprogramming stuff for eg. serializing structs or inspector UI for game entity properties. I was briefly experimenting with generating GLSL from Go code too so you can write shaders in Go and pass data to them with shared structs etc.<p>The compiler: <a href="https://github.com/nikki93/gx">https://github.com/nikki93/gx</a> (it uses the Go parser and semantic analysis phases from the standard library so all it has to do is output C++) (it's a subset / different from regular Go -- no coroutines, no GC; just supporting what I've needed in practice -- typechecks as regular Go so editor autocomplete works etc.)<p>A game made with it a while ago for raylib game jam along with the raylib bindings and other engine stuff: <a href="https://github.com/nikki93/raylib-5k">https://github.com/nikki93/raylib-5k</a><p>Very old video of a longer term game project I'm using it on which also shows state-preserving reload on rebuilds and also the editor inspector UI: <a href="https://youtu.be/8He97Sl9iy0?si=IJaO0wegyu-nzDRm" rel="nofollow noreferrer">https://youtu.be/8He97Sl9iy0?si=IJaO0wegyu-nzDRm</a> (you can see it reload preserving state across null pointer crashes too...)</p>
]]></description><pubDate>Sat, 25 Nov 2023 07:54:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=38412022</link><dc:creator>nikki93</dc:creator><comments>https://news.ycombinator.com/item?id=38412022</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38412022</guid></item><item><title><![CDATA[New comment by nikki93 in "WASM by example"]]></title><description><![CDATA[
<p>Hello world just needs to call console.log, so doesn't need libc. Here's an example that builds without libc / emscripten to produce a very small wasm hello world: <a href="https://github.com/nikki93/cxx-wasm-freestanding">https://github.com/nikki93/cxx-wasm-freestanding</a> There's actually some other stuff in there right now but console.cc is the main thing -- it calls consoleLog which js exposed to wasm from the js code at <a href="https://github.com/nikki93/cxx-wasm-freestanding/blob/master/index.html#L50">https://github.com/nikki93/cxx-wasm-freestanding/blob/master...</a> .<p>You do need some JS code that asks the browser to run the wasm blob. You can't eg. just have a script tag that refers to a wasm blob yet.<p>libc does help with things like having an allocator or string operations etc., or for using C libraries that use libc. And that's where emscripten becomes helpful.<p>Browser functionality like the  console or making html elements is exposed through JS interfaces, and the wasm needs
to call out to those. But they may be directly exposed to wasm later (or they may already be at this point in new / experimental browser features).</p>
]]></description><pubDate>Wed, 15 Nov 2023 15:45:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=38277942</link><dc:creator>nikki93</dc:creator><comments>https://news.ycombinator.com/item?id=38277942</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38277942</guid></item><item><title><![CDATA[New comment by nikki93 in "Show HN: DSLCad – a programming language and interpreter for building 3D models"]]></title><description><![CDATA[
<p>Does Grasshopper in Rhino count?</p>
]]></description><pubDate>Fri, 10 Feb 2023 20:01:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=34744947</link><dc:creator>nikki93</dc:creator><comments>https://news.ycombinator.com/item?id=34744947</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34744947</guid></item><item><title><![CDATA[New comment by nikki93 in "Show HN: I made a 2D shoot 'em up game with Go, using Entity Component System"]]></title><description><![CDATA[
<p>I do also really like Go for various reasons, and have been working on a Go -> C++ transpiler and associated ECS libs to make a personal game project with. I used it to make a game for Raylib game jam earlier this year too: <a href="https://github.com/nikki93/raylib-5k" rel="nofollow">https://github.com/nikki93/raylib-5k</a> You can see what the development workflow looks like in this video (the ECS stuff also has a built-in editor like a much more minimal version of Unity's): <a href="https://www.youtube.com/watch?v=8He97Sl9iy0" rel="nofollow">https://www.youtube.com/watch?v=8He97Sl9iy0</a><p>I'm trying to decide how much time I should devote to making this easier to set up / use by other people in the medium term, since it's just a side project for me. Might make a codespaces template so it's quick to get started.</p>
]]></description><pubDate>Thu, 01 Dec 2022 18:47:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=33820712</link><dc:creator>nikki93</dc:creator><comments>https://news.ycombinator.com/item?id=33820712</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=33820712</guid></item><item><title><![CDATA[New comment by nikki93 in "Cppfront, Herb Sutter's proposal for a new C++ syntax"]]></title><description><![CDATA[
<p>I've been using my own little Go (subset / my own extensions) -> C++ compiler -- <a href="https://github.com/nikki93/gx" rel="nofollow">https://github.com/nikki93/gx</a> -- and found it to be a fun way to add some guardrails and nicer syntax over C++ usage. You get Go's package system and the syntax analyzers / syntax highlighters etc. just work.</p>
]]></description><pubDate>Sat, 17 Sep 2022 20:25:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=32881240</link><dc:creator>nikki93</dc:creator><comments>https://news.ycombinator.com/item?id=32881240</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32881240</guid></item><item><title><![CDATA[New comment by nikki93 in "Build Pong in Your Terminal with Go for Some Reason"]]></title><description><![CDATA[
<p>Re: perf for hobby gamedev, I basically agree for native builds, but lately I've felt like Wasm support seems key for hobby gamedev (so you can have more people play your game / without downloading it / it works directly on mobile too without dealing with app or play store). And Go perf in Wasm unfortunately is not so good (I was hitting big GC pauses when trying to make a game with Ebiten and large images).<p>I ended up writing a Go -> C++ compiler. Go's standard library parser/typechecker made it very doable. The games I've done with it don't use the GC at all but also don't manually manage memory -- they use an ECS api which helps. <a href="https://github.com/nikki93/gx" rel="nofollow">https://github.com/nikki93/gx</a> -- the README links to development workflow video and complete example game code. I get the perf, interop/libs and portability of C/C++ but with Go's developer experience (well the build system involves C/C++ of course but I have something set up there that I now just use).</p>
]]></description><pubDate>Tue, 26 Jul 2022 16:52:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=32240773</link><dc:creator>nikki93</dc:creator><comments>https://news.ycombinator.com/item?id=32240773</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32240773</guid></item><item><title><![CDATA[New comment by nikki93 in "Why am I excited about WebAssembly?"]]></title><description><![CDATA[
<p>For the client I use a simple go -> c++ compiler I wrote and compile to wasm from that actually, on my side projects. It had zero overhead interfacing to / calls to C/C++ (including generics<->templates) since it's just generating that. Example web game made with that: <a href="https://github.com/nikki93/raylib-5k" rel="nofollow">https://github.com/nikki93/raylib-5k</a><p>I think I've seen wasmtime before. If I needed to interface to any C/C++ things on the server I would probably just write in C/C++ (or Gx) yeah.</p>
]]></description><pubDate>Mon, 18 Jul 2022 17:48:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=32141076</link><dc:creator>nikki93</dc:creator><comments>https://news.ycombinator.com/item?id=32141076</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32141076</guid></item><item><title><![CDATA[New comment by nikki93 in "Why am I excited about WebAssembly?"]]></title><description><![CDATA[
<p>Personally I'm not super familiar with its benefits if any on the server and would actually not use it on the server myself and just build binaries directly, probably using Go. But I've seen some references to Wasm on the serverside for something similar to containerization or loading plugins. It does seem less obvious to me than the client side.<p>What makes you say Wasm is a server side runtime / imply that it's meant to be one?</p>
]]></description><pubDate>Sun, 17 Jul 2022 18:48:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=32129813</link><dc:creator>nikki93</dc:creator><comments>https://news.ycombinator.com/item?id=32129813</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32129813</guid></item><item><title><![CDATA[New comment by nikki93 in "Why am I excited about WebAssembly?"]]></title><description><![CDATA[
<p>GC implementations over Wasm definitely have perf issues. eg. Go compiled to Wasm has these with its GC. The main way when compiling to Wasm now is to not use a GC, which is reasonable depending on the application in question. It's quite reasonable for games or graphics applications.<p>But yeah Wasm has definitely been used successfully with performance results in production, eg. in Figma: <a href="https://www.figma.com/blog/webassembly-cut-figmas-load-time-by-3x/" rel="nofollow">https://www.figma.com/blog/webassembly-cut-figmas-load-time-...</a></p>
]]></description><pubDate>Sun, 17 Jul 2022 18:42:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=32129756</link><dc:creator>nikki93</dc:creator><comments>https://news.ycombinator.com/item?id=32129756</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32129756</guid></item><item><title><![CDATA[New comment by nikki93 in "Why am I excited about WebAssembly?"]]></title><description><![CDATA[
<p>The extent of Wasm's availability on browsers is quite big right now. Both iOS and Android and all major desktop browsers. That sort of reach is what I meant by the term "the browser" used generically. Different from being an extension to one or a few browsers or something like that.</p>
]]></description><pubDate>Sun, 17 Jul 2022 18:36:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=32129678</link><dc:creator>nikki93</dc:creator><comments>https://news.ycombinator.com/item?id=32129678</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32129678</guid></item><item><title><![CDATA[New comment by nikki93 in "Why am I excited about WebAssembly?"]]></title><description><![CDATA[
<p>One of the things that killed Flash was not being supported on iOS while Wasm runs fine (and actually pretty well!) on iOS which is pretty good for reach.</p>
]]></description><pubDate>Sun, 17 Jul 2022 18:31:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=32129609</link><dc:creator>nikki93</dc:creator><comments>https://news.ycombinator.com/item?id=32129609</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32129609</guid></item><item><title><![CDATA[New comment by nikki93 in "Why am I excited about WebAssembly?"]]></title><description><![CDATA[
<p>I think you missed the part about it running in the browser? But yes, some previous technologies are similar to some new technologies, that's not really an insight at this point. Especially not about bytecode interpreters which seems like a standard practice.</p>
]]></description><pubDate>Sun, 17 Jul 2022 18:30:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=32129599</link><dc:creator>nikki93</dc:creator><comments>https://news.ycombinator.com/item?id=32129599</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32129599</guid></item></channel></rss>