<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: miguel_martin</title><link>https://news.ycombinator.com/user?id=miguel_martin</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sat, 18 Jul 2026 03:24:14 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=miguel_martin" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by miguel_martin in "Ghost Font: A font that humans can read but AI cannot"]]></title><description><![CDATA[
<p>I'd be interested in seeing the inverse, i.e. a font that only AI can read</p>
]]></description><pubDate>Sun, 12 Jul 2026 00:14:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=48877075</link><dc:creator>miguel_martin</dc:creator><comments>https://news.ycombinator.com/item?id=48877075</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48877075</guid></item><item><title><![CDATA[New comment by miguel_martin in "Good Tools Are Invisible"]]></title><description><![CDATA[
<p>To be fair to the commenter, you didn't provide any details in the example you provided. For all we (the readers) know, Visual Block mode would have worked in the situation you are describing. I have to assume not, but it's not clear from the article.<p>Vim macros are not that hard to write, but I do agree with you, visual feedback is better. It can be annoying to have to re-record a macro, that's why I tend to use :s (search & replace) or Visual Block mode over using a macro (most of the time I don't need a macro).<p>I understand you state vim is "just an example", but you use this example as the main backbone of your article. Add more detail. You're arguing with vague anecdotes which requires the reader to read between the lines.<p>An aside: visual feedback, multi-cursor support and sane defaults is likely what led to new modal editors being created, such as Helix and Kakoune.</p>
]]></description><pubDate>Sat, 11 Jul 2026 00:47:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=48867292</link><dc:creator>miguel_martin</dc:creator><comments>https://news.ycombinator.com/item?id=48867292</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48867292</guid></item><item><title><![CDATA[New comment by miguel_martin in "Odin, Wikipedia and engagement farming"]]></title><description><![CDATA[
<p>fwiw, I think a lot of people just clone odin and build it via `./build_odin.sh release` on MacOS (at least, I do). The compiler builds in ~20s</p>
]]></description><pubDate>Sat, 04 Jul 2026 03:35:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=48782432</link><dc:creator>miguel_martin</dc:creator><comments>https://news.ycombinator.com/item?id=48782432</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48782432</guid></item><item><title><![CDATA[New comment by miguel_martin in "Show HN: Opbox – CRDT based sync for text files on disk"]]></title><description><![CDATA[
<p>This is super cool!<p>This seems super useful for pairing and multiple machine work.<p>Honestly I wish something like this could replace git, but my guess is you’d need to build specialized editors for this. In the direction of: <a href="https://www.inkandswitch.com/upwelling/" rel="nofollow">https://www.inkandswitch.com/upwelling/</a><p>I was wondering if I could use this for multiple processes (codex, nvim) on the same machine, but then I realized this use case is unnecessary (brain fart).</p>
]]></description><pubDate>Fri, 03 Jul 2026 23:42:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=48781317</link><dc:creator>miguel_martin</dc:creator><comments>https://news.ycombinator.com/item?id=48781317</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48781317</guid></item><item><title><![CDATA[New comment by miguel_martin in "Git Is Not Fine"]]></title><description><![CDATA[
<p>There is an open source & git compatible version of Meta's VCS: <a href="https://sapling-scm.com/" rel="nofollow">https://sapling-scm.com/</a></p>
]]></description><pubDate>Sat, 16 May 2026 00:06:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=48155511</link><dc:creator>miguel_martin</dc:creator><comments>https://news.ycombinator.com/item?id=48155511</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48155511</guid></item><item><title><![CDATA[New comment by miguel_martin in "EditLens: Quantifying the extent of AI editing in text (2025)"]]></title><description><![CDATA[
<p>I disagree.<p>1. Constructing a "deterministic algorithmic approaches with complex pipelines" is an ML approach. You're simply changing <i>how</i> you optimize (e.g. gradient descent with human constructed rules) and <i>what</i> you are optimizing (i.e. the model from a statistical one to a set of rules similar to a decision tree)<p>2. "Models can be intentionally poisoned or tricked" this is adversarial examples. Your deterministic and complex pipeline will have attack vectors, but just of a different distribution compared to an LLM (or neural net in general). Adversarial examples are likely unavoidable, you will always have a set of inputs that will cause your model to mis-classify examples. You can aim to minimize the size of this distribution/set, but for language: the set of possible inputs is so large that  you will never fully be able to train or test on them all, and thus you will always have a back & forth between finding new attack vectors vs. defending against them: "deterministic" or not.<p>To expand on 1:<p>How do you construct a complex pipeline? Hopefully, by following roughly standard ML principles.<p>That is, you have a train set that you observe and find patterns/rules in. Then you iteratively construct your complex pipeline until you've minimized the error for a train set. Hopefully after this initial version is constructed you evaluate it on your (independent) val set. Then you iteratively improve your complex pipeline until your validation numbers improve. In the end, since you've optimized a val set, you need to use a third independent test set to ensure that you haven't overfit to your val&train sets. This is standard ML practice.<p>In other words, this process is what an "ML approach" is, just manually performed by a human possibly using some data analysis. Again, you've just replaced the optimization process (e.g. from gradient descent) and the underlying ML model (e.g. an LLM with differentiable parameters) with a more "deterministic approach" similar to a decision tree.<p>Yes you could automate this process to construct the rules and chain them, in which case your process and your complex pipeline will likely look similar to a decision tree (e.g. xgboost), but you're simply closer to the thing you think you are trying to avoid.</p>
]]></description><pubDate>Thu, 14 May 2026 22:32:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=48142133</link><dc:creator>miguel_martin</dc:creator><comments>https://news.ycombinator.com/item?id=48142133</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48142133</guid></item><item><title><![CDATA[New comment by miguel_martin in "Cost of enum-to-string: C++26 reflection vs. the old ways"]]></title><description><![CDATA[
<p>I agree with some other's in this thread: this is example is not great, but I get why it was used: to compare with X-macros. How about something that would require code-generation e.g. via libclang?<p>For example, what does <a href="https://miguelmartin.com/blog/nim2-review#implementing-a-simple-keyvalue-file-format" rel="nofollow">https://miguelmartin.com/blog/nim2-review#implementing-a-sim...</a> look like with C++26's std::meta::info?<p>My guess is: libclang is more suited for this situation if you care about compile times, even if Python is used.</p>
]]></description><pubDate>Wed, 13 May 2026 17:35:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=48124951</link><dc:creator>miguel_martin</dc:creator><comments>https://news.ycombinator.com/item?id=48124951</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48124951</guid></item><item><title><![CDATA[New comment by miguel_martin in "ProgramBench: Can Language Models Rebuild Programs from Scratch?"]]></title><description><![CDATA[
<p>It’s unfortunate that they didn’t eval using subagents/orchestration for such a complex set of tasks (from what I can tell), e.g. analyze program to produce initial spec -> code -> review and rinse&repeat with each of those steps being a separate subagent allocated<p>I would be interested to see if there’s a significant quantifiable difference.</p>
]]></description><pubDate>Thu, 07 May 2026 06:34:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=48046151</link><dc:creator>miguel_martin</dc:creator><comments>https://news.ycombinator.com/item?id=48046151</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48046151</guid></item><item><title><![CDATA[New comment by miguel_martin in "DIY Soft Drinks"]]></title><description><![CDATA[
<p>I highly recommend art of drink: <a href="https://www.artofdrink.com/" rel="nofollow">https://www.artofdrink.com/</a></p>
]]></description><pubDate>Sun, 12 Apr 2026 22:13:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=47745121</link><dc:creator>miguel_martin</dc:creator><comments>https://news.ycombinator.com/item?id=47745121</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47745121</guid></item><item><title><![CDATA[New comment by miguel_martin in "S3 Files"]]></title><description><![CDATA[
<p>thanks</p>
]]></description><pubDate>Wed, 08 Apr 2026 05:23:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=47685649</link><dc:creator>miguel_martin</dc:creator><comments>https://news.ycombinator.com/item?id=47685649</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47685649</guid></item><item><title><![CDATA[New comment by miguel_martin in "S3 Files"]]></title><description><![CDATA[
<p>Dumb Q: what would happen if you used this to store a SQLite database? Would it just... work?<p>My guess is this would only enable a read-replica and not backups as Litestream currently does?</p>
]]></description><pubDate>Tue, 07 Apr 2026 22:42:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=47682289</link><dc:creator>miguel_martin</dc:creator><comments>https://news.ycombinator.com/item?id=47682289</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47682289</guid></item><item><title><![CDATA[New comment by miguel_martin in "A brief history of instant coffee"]]></title><description><![CDATA[
<p>It's unfortunate that instant coffee has such as a bad reputation in the US. In Australia, instant coffee is very common (in the household); it's pretty good.<p>I would much prefer a cup of instant coffee to most coffee that is served at diners, brunch/lunch restaurants, etc. in the US. I prefer espresso still, but there's a lot of burnt tasting coffee in America.</p>
]]></description><pubDate>Mon, 06 Apr 2026 01:30:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=47655885</link><dc:creator>miguel_martin</dc:creator><comments>https://news.ycombinator.com/item?id=47655885</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47655885</guid></item><item><title><![CDATA[New comment by miguel_martin in "Universal Claude.md – cut Claude output tokens by 63%"]]></title><description><![CDATA[
<p>>The “answer before reasoning” is a good evidence for it. It misses the most fundamental concept of tranaformers: the are autoregressive.<p>I don't think it's fair to assume the author doesn't understand how transformers work. Their intention with this instruction appears to aggressively reduce output token cost.<p>i.e. I read this instruction as a hack to emulate the Qwen model series's /nothink token instruction<p>If you're goal is quality outputs, then it is likely too extreme, but there are otherwise useful instructions in this repo to (quantifiably) reduce verbosity.</p>
]]></description><pubDate>Tue, 31 Mar 2026 02:48:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=47582185</link><dc:creator>miguel_martin</dc:creator><comments>https://news.ycombinator.com/item?id=47582185</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47582185</guid></item><item><title><![CDATA[New comment by miguel_martin in "Universal Claude.md – cut Claude output tokens"]]></title><description><![CDATA[
<p>Is there a "universal AGENTS.md" for minimal code & documentation outputs? I find all coding agents to be verbose, even with explicit instructions to reduce verbosity.</p>
]]></description><pubDate>Tue, 31 Mar 2026 02:23:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=47582041</link><dc:creator>miguel_martin</dc:creator><comments>https://news.ycombinator.com/item?id=47582041</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47582041</guid></item><item><title><![CDATA[New comment by miguel_martin in "Methods in Languages for Systems Programming (2023)"]]></title><description><![CDATA[
<p>'We believe that data and code should be separate concepts; data should not have “behaviour”.' is flawed, but I don't believe that's the point being made. Instead, I believe the point actually roots in a "programmer mindset" thing when using methods/member functions, due to this explicit separation of data and procedures. With methods/member functions you naturally fall into an "individual element" mindset, see <a href="https://www.gingerbill.org/article/2026/01/02/was-it-really-a-billion-dollar-mistake/" rel="nofollow">https://www.gingerbill.org/article/2026/01/02/was-it-really-...</a> - yes it's semantically equivalent (given the examples in the article and many other cases), but humans are humans and they are biased.<p>In my opinion: there is a better argument for making new languages <i>not</i> have methods, or more accurately member functions (as what the author describes).<p>Consider the following situation: you are user of a library that declares a type called SomeType which has "methods" (member functions) in it. You want to add more "methods" to this type.<p>Now, there is a problem regarding consisteny w.r.t syntax, your new "methods" now have to be called via `foo(&bar)` instead of `bar.foo()`. You as a user of the library and language have to choice to make (regarding code style):<p>1. Accept this difference in syntax. Maybe you like this style difference, because now you can clearly see what procedures are declared in your codebase vs. the library's codebase, or:<p>2. Use freeform functions everywhere. Well actually, you can't do this without a refactor of the library (or with additional language features), i.e. you will need to fork the library and rewrite SomeType and the associated member functions in this freeform function/procedure style.<p>From a language designer's perspective, you can choose to solve the problem by either (a) forcing the declaration of procedures to be consistent or (b) introducing language features to make the calling code consistent. Odin obviously chose (a), but languages like Swift and C# chose (b) - whereas languages such as Nim chose both (a) & (b).<p>For (b), here's some possible features you could add:<p>* Extension methods (Swift, C#). This let's user declared "methods" feel like like "proper methods" of the class/struct, or<p>* UFCS (Nim, D). Declare everything as a freeform procedure/function but enable the syntax `arr.push(10)` when the procedure is declared as `proc push(arr: var Array, x: int)`<p>From this, you can see why languages such as Odin chose to go with option (a). It's simpler.</p>
]]></description><pubDate>Mon, 16 Mar 2026 22:23:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=47405824</link><dc:creator>miguel_martin</dc:creator><comments>https://news.ycombinator.com/item?id=47405824</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47405824</guid></item><item><title><![CDATA[New comment by miguel_martin in "Defer available in gcc and clang"]]></title><description><![CDATA[
<p>defer is literally just an explicit RAII in this example. That is, it's just unnecessary boiler plate to wrap the newResource handle into a struct in this context.<p>In addition, RAII has it's own complexities that need to be dealt with now, i.e. move semantics, which obviously C does not have nor will it likely ever.</p>
]]></description><pubDate>Fri, 20 Feb 2026 09:09:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=47085528</link><dc:creator>miguel_martin</dc:creator><comments>https://news.ycombinator.com/item?id=47085528</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47085528</guid></item><item><title><![CDATA[New comment by miguel_martin in "Zed editor switching graphics lib from blade to wgpu"]]></title><description><![CDATA[
<p>SDL is not perfect, e.g. you can't get pinch/zoom events on MacOS. IMO, using the OS APIs yourself is better.</p>
]]></description><pubDate>Fri, 13 Feb 2026 18:14:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=47005797</link><dc:creator>miguel_martin</dc:creator><comments>https://news.ycombinator.com/item?id=47005797</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47005797</guid></item><item><title><![CDATA[New comment by miguel_martin in "The Singularity will occur on a Tuesday"]]></title><description><![CDATA[
<p>"Everyone in San Francisco is talking about the singularity" - I'm in SF and not talking about it ;)</p>
]]></description><pubDate>Tue, 10 Feb 2026 18:27:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=46964483</link><dc:creator>miguel_martin</dc:creator><comments>https://news.ycombinator.com/item?id=46964483</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46964483</guid></item><item><title><![CDATA[New comment by miguel_martin in "New code review tool I made"]]></title><description><![CDATA[
<p>Your site is down.</p>
]]></description><pubDate>Thu, 08 Jan 2026 18:54:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=46544914</link><dc:creator>miguel_martin</dc:creator><comments>https://news.ycombinator.com/item?id=46544914</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46544914</guid></item><item><title><![CDATA[New comment by miguel_martin in "Blend2D and AsmJIT development paused due to lack of funding"]]></title><description><![CDATA[
<p>Sad!<p>These are really high quality and performant libraries.<p>Here is video demonstrating text rendered with Blend2D in real time (NO glyph cache used) - on the CPU!<p><a href="https://vimeo.com/1152635716?fl=pl&fe=cm" rel="nofollow">https://vimeo.com/1152635716?fl=pl&fe=cm</a></p>
]]></description><pubDate>Thu, 08 Jan 2026 18:42:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=46544771</link><dc:creator>miguel_martin</dc:creator><comments>https://news.ycombinator.com/item?id=46544771</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46544771</guid></item></channel></rss>