<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: wlamartin</title><link>https://news.ycombinator.com/user?id=wlamartin</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 30 Apr 2026 22:17:01 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=wlamartin" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by wlamartin in "MCP overlooks hard-won lessons from distributed systems"]]></title><description><![CDATA[
<p>I don't think people in this thread aren't really confused about MCP. They are confused that you claimed, or at least insinuated that an LLM might skip the schema validation portion of an MCP tool call request/response, which was originally demonstrated via Claude Code. Hopefully you can understand why everyone seems so confused, since that claim doesn't make any sense when the LLM doesn't really have anything to do with schema validation at all.</p>
]]></description><pubDate>Tue, 12 Aug 2025 20:25:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=44881400</link><dc:creator>wlamartin</dc:creator><comments>https://news.ycombinator.com/item?id=44881400</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44881400</guid></item><item><title><![CDATA[New comment by wlamartin in "GitHub MCP exploited: Accessing private repositories via MCP"]]></title><description><![CDATA[
<p>I'm not sure whether you're confused, or I'm just having a horrible time understanding your point. The MCP server really does just serve requests with responses via a mechanism that satisfies the MCP spec. The MCP hosts (e.g. VSCode) work with an LLM to determine which of those tools to call, and ideally work with users via confirmation prompts to ensure the user really wants those things to happen.<p>What am I missing?<p>I do believe there's more that the MCP Server could be offering to protect users, but that seems like a separate point.</p>
]]></description><pubDate>Tue, 27 May 2025 06:00:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=44104274</link><dc:creator>wlamartin</dc:creator><comments>https://news.ycombinator.com/item?id=44104274</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44104274</guid></item><item><title><![CDATA[New comment by wlamartin in "Ask HN: Those making $500/month on side projects in 2024 – Show and tell"]]></title><description><![CDATA[
<p>I've been using your app for the last 3-4 months very successfully. There are a few niggles here and there but overall it's been exactly what I needed, and I'm very grateful for it!</p>
]]></description><pubDate>Tue, 10 Dec 2024 18:51:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=42380024</link><dc:creator>wlamartin</dc:creator><comments>https://news.ycombinator.com/item?id=42380024</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42380024</guid></item><item><title><![CDATA[New comment by wlamartin in "Sequin: A powerful little tool for inspecting ANSI escape sequences"]]></title><description><![CDATA[
<p>Just as a note, the GitHub CLI doesn't use bubbletea itself right now, though it does use other charm libraries such as lipgloss and glamour. That said, it's quite likely that at some point we will use huh for our prompting library, which does use bubbletea.</p>
]]></description><pubDate>Tue, 19 Nov 2024 11:55:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=42182470</link><dc:creator>wlamartin</dc:creator><comments>https://news.ycombinator.com/item?id=42182470</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42182470</guid></item><item><title><![CDATA[New comment by wlamartin in "Zed Editor automatically downloads binaries and NPM packages without consent"]]></title><description><![CDATA[
<p>Ah, I think you might be pleasantly surprised that this is an area being focused on right now with attestations[1] for example, here are the attestations for the GitHub CLI[2].<p>1: <a href="https://github.blog/2024-05-02-introducing-artifact-attestations-now-in-public-beta/" rel="nofollow">https://github.blog/2024-05-02-introducing-artifact-attestat...</a><p>2: <a href="https://github.com/cli/cli/attestations">https://github.com/cli/cli/attestations</a></p>
]]></description><pubDate>Mon, 08 Jul 2024 12:02:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=40904600</link><dc:creator>wlamartin</dc:creator><comments>https://news.ycombinator.com/item?id=40904600</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40904600</guid></item><item><title><![CDATA[New comment by wlamartin in "What is the difference between a terminal, a shell, a TTY and a console? (2012)"]]></title><description><![CDATA[
<p>Recently I've been wondering if there is a "build your own X" for some of these concepts. For example, there is <a href="https://github.com/xyproto/vt100">https://github.com/xyproto/vt100</a> which seems relatively straightforward (though maybe not "simple") to learn from but are there any resources that would actually teach this stuff?</p>
]]></description><pubDate>Sun, 14 Jan 2024 07:03:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=38988182</link><dc:creator>wlamartin</dc:creator><comments>https://news.ycombinator.com/item?id=38988182</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38988182</guid></item><item><title><![CDATA[New comment by wlamartin in "Huh – Go library for terminal forms and prompts"]]></title><description><![CDATA[
<p>I'm a maintainer for the GitHub CLI. When our prompting dependency became unmaintained, the folks from Charm reached out to us looking to collaborate on a replacement (collaborate is a strong word for the amount of work they actually did compared to us).<p>While we haven't yet been able to prioritise using this package, our discussions with them were great and I think that in typical Charm fashion, they've created something really awesome here. In particular, we mentioned to them our desire to have accessibility as a first class experience and I think they really took that on board.</p>
]]></description><pubDate>Mon, 11 Dec 2023 14:45:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=38601063</link><dc:creator>wlamartin</dc:creator><comments>https://news.ycombinator.com/item?id=38601063</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38601063</guid></item><item><title><![CDATA[New comment by wlamartin in "Asciinema: Record and share your terminal sessions, the simple way"]]></title><description><![CDATA[
<p>Recently, I've been toying with including asciinema in automated tests. Spinning up a TUI or richer CLI experience, sending it keystrokes, asserting on the output, all wrapped up in asciinema so that if it fails I can see what went wrong via the playback.<p>Jury is still out but it's been an interesting experiment.</p>
]]></description><pubDate>Sat, 04 Nov 2023 13:11:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=38140721</link><dc:creator>wlamartin</dc:creator><comments>https://news.ycombinator.com/item?id=38140721</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38140721</guid></item><item><title><![CDATA[New comment by wlamartin in "Asciinema: Record and share your terminal sessions, the simple way"]]></title><description><![CDATA[
<p>When recording finishes you are given the option to upload or save to local file.</p>
]]></description><pubDate>Sat, 04 Nov 2023 13:01:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=38140657</link><dc:creator>wlamartin</dc:creator><comments>https://news.ycombinator.com/item?id=38140657</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38140657</guid></item><item><title><![CDATA[New comment by wlamartin in "Early Europeans ate seaweed for thousands of years"]]></title><description><![CDATA[
<p>Northern Irish, living in the Netherlands, commenting on hacker news, there must be severals of us!</p>
]]></description><pubDate>Thu, 19 Oct 2023 20:01:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=37947942</link><dc:creator>wlamartin</dc:creator><comments>https://news.ycombinator.com/item?id=37947942</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37947942</guid></item><item><title><![CDATA[New comment by wlamartin in "On a great interview question"]]></title><description><![CDATA[
<p>Years ago when I was starting to interview for Uber in Europe I went through some data structure exercise which I failed at horribly. When I asked the hiring manager whether this was representative of the job, because I would probably not be good at it they said "no", and to follow up, when I asked why we did it they said, "in the next round my colleagues in the USA are going to ask you something similar".<p>I guess this wasn't entirely without sense but sort of seemed to be missing the point.</p>
]]></description><pubDate>Thu, 13 Apr 2023 09:55:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=35553205</link><dc:creator>wlamartin</dc:creator><comments>https://news.ycombinator.com/item?id=35553205</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35553205</guid></item><item><title><![CDATA[New comment by wlamartin in "Naming Things Is Hard"]]></title><description><![CDATA[
<p><a href="https://relatedwords.org/" rel="nofollow">https://relatedwords.org/</a> is also pretty neat for this. It's slightly less strict than a thesaurus so it can aid in exploring the semantic space a bit more.</p>
]]></description><pubDate>Sat, 13 Aug 2022 08:49:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=32448043</link><dc:creator>wlamartin</dc:creator><comments>https://news.ycombinator.com/item?id=32448043</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32448043</guid></item><item><title><![CDATA[New comment by wlamartin in "The Big TDD Misunderstanding"]]></title><description><![CDATA[
<p>I don't follow this. My assumption for the repository interface is something like (language, error and domain agnostic):<p><pre><code>   interface Repository<T> {
      FetchAll() T[]
      Fetch(id) T
      Persist(T) id
   }
</code></pre>
Why would the SQL statements be reflected in the behaviour that the interface is providing?</p>
]]></description><pubDate>Mon, 21 Mar 2022 11:46:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=30752935</link><dc:creator>wlamartin</dc:creator><comments>https://news.ycombinator.com/item?id=30752935</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=30752935</guid></item><item><title><![CDATA[New comment by wlamartin in "Hacking sum types with Go generics"]]></title><description><![CDATA[
<p>Such a thing exists: <a href="https://github.com/BurntSushi/go-sumtype" rel="nofollow">https://github.com/BurntSushi/go-sumtype</a></p>
]]></description><pubDate>Mon, 14 Mar 2022 16:29:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=30674441</link><dc:creator>wlamartin</dc:creator><comments>https://news.ycombinator.com/item?id=30674441</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=30674441</guid></item><item><title><![CDATA[New comment by wlamartin in "Ask HN: Who wants to be hired? (March 2022)"]]></title><description><![CDATA[
<p><p><pre><code>  Location: Amsterdam, The Netherlands
  Remote: Yes
  Willing to relocate: No
  Technologies: Go, TypeScript, Rust, Terraform, Kubernetes, Containers, FP
  Résumé/CV: https://www.linkedin.com/in/william-martin-41400517/
  Email: william[dot]la[dot]martin[mailsign]gmail[dot]com
</code></pre>
Things I enjoy:<p><pre><code>  Mentoring
  Pair Programming
  Test Driven Development
  Systems Engineering
  Team Psychological Safety
  Balanced Teams
  Feedback
</code></pre>
Looking for a Senior/Staff level Individual Contributor role. I'd enjoy a job using a language with great domain modelling support (e.g. F#, Rust, Elm) to continue learning how to do that well. I'd enjoy a job where I can continue learning from others directly, as well as mentor others directly.</p>
]]></description><pubDate>Wed, 02 Mar 2022 11:21:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=30526087</link><dc:creator>wlamartin</dc:creator><comments>https://news.ycombinator.com/item?id=30526087</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=30526087</guid></item><item><title><![CDATA[New comment by wlamartin in "Final Fantasy 7: An oral history (2017)"]]></title><description><![CDATA[
<p>I find "A Secret Sleeping in the Deep Sea" really takes me back to my childhood.</p>
]]></description><pubDate>Mon, 21 Feb 2022 22:40:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=30421671</link><dc:creator>wlamartin</dc:creator><comments>https://news.ycombinator.com/item?id=30421671</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=30421671</guid></item><item><title><![CDATA[New comment by wlamartin in "FP techniques that will help you write better JavaScript"]]></title><description><![CDATA[
<p>Sure, there's many ways to skin a cat. Given the option, I wouldn't choose either of these, and instead use something like filterMap[1] which I think conveys intent better than a fold or flatMap.<p>Btw, I'm assuming that the original map questioner wasn't solely using flatMap for side-effectful iteration, which reading again, I'm a bit suspicious about.<p>1: <a href="https://gcanti.github.io/fp-ts/modules/Array.ts.html#filtermap" rel="nofollow">https://gcanti.github.io/fp-ts/modules/Array.ts.html#filterm...</a></p>
]]></description><pubDate>Fri, 11 Feb 2022 15:09:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=30302287</link><dc:creator>wlamartin</dc:creator><comments>https://news.ycombinator.com/item?id=30302287</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=30302287</guid></item><item><title><![CDATA[New comment by wlamartin in "FP techniques that will help you write better JavaScript"]]></title><description><![CDATA[
<p>They don't want to keep the unmapped value in the resulting collection at all. flatMap allows for removal of an element in one traverse, unlike filter+map with eager behaviour.</p>
]]></description><pubDate>Fri, 11 Feb 2022 14:34:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=30301917</link><dc:creator>wlamartin</dc:creator><comments>https://news.ycombinator.com/item?id=30301917</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=30301917</guid></item><item><title><![CDATA[New comment by wlamartin in "Don't make me think, or why I switched to Rails from JavaScript SPAs"]]></title><description><![CDATA[
<p>tRPC is a good choice for TypeScript: <a href="https://trpc.io/" rel="nofollow">https://trpc.io/</a></p>
]]></description><pubDate>Fri, 04 Feb 2022 19:54:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=30212075</link><dc:creator>wlamartin</dc:creator><comments>https://news.ycombinator.com/item?id=30212075</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=30212075</guid></item><item><title><![CDATA[New comment by wlamartin in "A rough proposal for sum types in Go (2018)"]]></title><description><![CDATA[
<p>> The only thing that's different is that you get a single value you have to check for errors rather than a separate value..<p>The type system confines you to a set of reasonable cases that allow a caller to reason about the state of the program. This has two benefits for the caller:<p>1. It is required that the caller check whether a return value is success or failure in order to access the value they want. There is no possibility to mistake one case for another.<p>2. In the space of valid return values for idiomatic Go function signatures, 50% of them are unidiomatic and end up being ignored. It is far clearer for a caller to understand what is expected of them when valid values exactly overlap with the space. It is far clearer for an author to convey expectations to a caller for the same reason.<p>Now I must admit, good conventions and tooling in Go account for the vast majority of cases and I don't personally mind that much, but that's a different conversation than API design.</p>
]]></description><pubDate>Tue, 16 Nov 2021 09:40:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=29238664</link><dc:creator>wlamartin</dc:creator><comments>https://news.ycombinator.com/item?id=29238664</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=29238664</guid></item></channel></rss>