<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: mwsherman</title><link>https://news.ycombinator.com/user?id=mwsherman</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 23 Jul 2026 05:53:37 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=mwsherman" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by mwsherman in "So, you want to chunk really fast?"]]></title><description><![CDATA[
<p>While this article is about perf — and trading off semantic precision by design — there is a Unicode standard for sentence boundaries, may be interesting: <a href="https://www.unicode.org/reports/tr29/#Sentence_Boundaries" rel="nofollow">https://www.unicode.org/reports/tr29/#Sentence_Boundaries</a><p>I implemented the sentence boundaries, but also thought that the notion of a “phrase” might be useful for such applications: <a href="https://github.com/clipperhouse/uax29/tree/master/phrases" rel="nofollow">https://github.com/clipperhouse/uax29/tree/master/phrases</a></p>
]]></description><pubDate>Mon, 05 Jan 2026 20:15:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=46504238</link><dc:creator>mwsherman</dc:creator><comments>https://news.ycombinator.com/item?id=46504238</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46504238</guid></item><item><title><![CDATA[New comment by mwsherman in "Go's escape analysis and why my function return worked"]]></title><description><![CDATA[
<p>Shameless plug, if one wishes to track down allocations in Go, an allocations explorer for VS Code: <a href="https://marketplace.visualstudio.com/items?itemName=Clipperhouse.go-allocations-vsix" rel="nofollow">https://marketplace.visualstudio.com/items?itemName=Clipperh...</a></p>
]]></description><pubDate>Thu, 11 Dec 2025 15:22:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=46232489</link><dc:creator>mwsherman</dc:creator><comments>https://news.ycombinator.com/item?id=46232489</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46232489</guid></item><item><title><![CDATA[New comment by mwsherman in "A “frozen” dictionary for Python"]]></title><description><![CDATA[
<p>I’ve found C#’s frozen dictionary to be useful: <a href="https://learn.microsoft.com/en-us/dotnet/api/system.collections.frozen.frozendictionary-2?view=net-10.0" rel="nofollow">https://learn.microsoft.com/en-us/dotnet/api/system.collecti...</a><p>It’s optimized for fast reads in exchange for expensive creation.</p>
]]></description><pubDate>Thu, 11 Dec 2025 14:17:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=46231657</link><dc:creator>mwsherman</dc:creator><comments>https://news.ycombinator.com/item?id=46231657</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46231657</guid></item><item><title><![CDATA[New comment by mwsherman in "Go subtleties"]]></title><description><![CDATA[
<p>That’s true, converting in either direction will typically allocate. Which it must, semantically.<p>One can use unsafe for a zero-copy conversion, but now you are breaking the semantics: a string becomes mutable, because its underlying bytes are mutable.<p>Or! One can often handle strings and bytes interchangeably with generics: <a href="https://github.com/clipperhouse/stringish" rel="nofollow">https://github.com/clipperhouse/stringish</a></p>
]]></description><pubDate>Wed, 22 Oct 2025 15:44:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=45670870</link><dc:creator>mwsherman</dc:creator><comments>https://news.ycombinator.com/item?id=45670870</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45670870</guid></item><item><title><![CDATA[New comment by mwsherman in "Go subtleties"]]></title><description><![CDATA[
<p>There is mention of how len() is bytes, not “characters”. A further subtlety: a rune (codepoint) is still not necessarily a “character” in terms of what is displayed for users — that would be a “grapheme”.<p>A grapheme can be multiple codepoints, with modifiers, joiners, etc.<p>This is true in all languages, it’s a Unicode thing, not a Go thing. Shameless plug, here is a grapheme tokenizer for Go: <a href="https://github.com/clipperhouse/uax29/tree/master/graphemes" rel="nofollow">https://github.com/clipperhouse/uax29/tree/master/graphemes</a></p>
]]></description><pubDate>Wed, 22 Oct 2025 15:01:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=45670197</link><dc:creator>mwsherman</dc:creator><comments>https://news.ycombinator.com/item?id=45670197</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45670197</guid></item><item><title><![CDATA[New comment by mwsherman in "Go subtleties"]]></title><description><![CDATA[
<p>In Go, string effectively serves as a read-only slice, if we are talking about bytes.<p>ReadOnlySpan<T> in C# is great! In my opinion, Go essentially designed in “span” from the start.</p>
]]></description><pubDate>Wed, 22 Oct 2025 14:55:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=45670075</link><dc:creator>mwsherman</dc:creator><comments>https://news.ycombinator.com/item?id=45670075</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45670075</guid></item><item><title><![CDATA[Making Unicode things fast in Go]]></title><description><![CDATA[
<p>Article URL: <a href="https://clipperhouse.com/go-unicode/">https://clipperhouse.com/go-unicode/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=45568347">https://news.ycombinator.com/item?id=45568347</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Mon, 13 Oct 2025 13:52:07 +0000</pubDate><link>https://clipperhouse.com/go-unicode/</link><dc:creator>mwsherman</dc:creator><comments>https://news.ycombinator.com/item?id=45568347</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45568347</guid></item><item><title><![CDATA[New comment by mwsherman in "Ask HN: What are you working on? (October 2025)"]]></title><description><![CDATA[
<p>A Go allocations explorer for VS Code. Extension: <a href="https://marketplace.visualstudio.com/items?itemName=Clipperhouse.go-allocations-vsix" rel="nofollow">https://marketplace.visualstudio.com/items?itemName=Clipperh...</a><p>Source: <a href="https://github.com/clipperhouse/go-allocations-vsix" rel="nofollow">https://github.com/clipperhouse/go-allocations-vsix</a></p>
]]></description><pubDate>Sun, 12 Oct 2025 23:28:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=45563029</link><dc:creator>mwsherman</dc:creator><comments>https://news.ycombinator.com/item?id=45563029</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45563029</guid></item><item><title><![CDATA[New comment by mwsherman in "Show HN: I wrote a full text search engine in Go"]]></title><description><![CDATA[
<p>Shameless plug, you may wish to do Lucene-style tokenizing using the Unicode standard: <a href="https://github.com/clipperhouse/uax29/tree/master/words" rel="nofollow">https://github.com/clipperhouse/uax29/tree/master/words</a></p>
]]></description><pubDate>Thu, 09 Oct 2025 21:48:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=45533460</link><dc:creator>mwsherman</dc:creator><comments>https://news.ycombinator.com/item?id=45533460</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45533460</guid></item><item><title><![CDATA[New comment by mwsherman in "Safe zero-copy operations in C#"]]></title><description><![CDATA[
<p>I move between Go and C#. I wrote a zero-allocation package in Go [1] and then ported to C# — and the allocations exploded!<p>I had forgotten, or perhaps never realized, that substrings in C# allocate. The solution was Spans.<p>Notably, it caused me to realize that Go had “spans” designed in from the start.<p>[1] <a href="https://github.com/clipperhouse/uax29" rel="nofollow">https://github.com/clipperhouse/uax29</a></p>
]]></description><pubDate>Tue, 30 Sep 2025 14:36:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=45426021</link><dc:creator>mwsherman</dc:creator><comments>https://news.ycombinator.com/item?id=45426021</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45426021</guid></item><item><title><![CDATA[Show HN: Go Allocations Explorer for VS Code]]></title><description><![CDATA[
<p>I’ve learned that my intuitions about where an allocation is coming from aren’t always correct. One tracks it down by creating a -memprofile then go tool pprof, and then some searching. It’s all fine, but tedious.<p>So, I’ve put that process into a VS Code sidebar, where one simply clicks a benchmark and gets a list of allocations, with a link to the source line.<p>Hope you’ll try it and give feedback. Marketplace link is above, you can also search for it in your Extensions sidebar, and the source is here: <a href="https://github.com/clipperhouse/go-allocations-vsix" rel="nofollow">https://github.com/clipperhouse/go-allocations-vsix</a></p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=45387577">https://news.ycombinator.com/item?id=45387577</a></p>
<p>Points: 4</p>
<p># Comments: 0</p>
]]></description><pubDate>Fri, 26 Sep 2025 15:24:17 +0000</pubDate><link>https://marketplace.visualstudio.com/items?itemName=Clipperhouse.go-allocations-vsix</link><dc:creator>mwsherman</dc:creator><comments>https://news.ycombinator.com/item?id=45387577</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45387577</guid></item><item><title><![CDATA[Allocations Are a Dependency]]></title><description><![CDATA[
<p>Article URL: <a href="https://clipperhouse.com/allocations-dependency/">https://clipperhouse.com/allocations-dependency/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=45212606">https://news.ycombinator.com/item?id=45212606</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Thu, 11 Sep 2025 15:13:44 +0000</pubDate><link>https://clipperhouse.com/allocations-dependency/</link><dc:creator>mwsherman</dc:creator><comments>https://news.ycombinator.com/item?id=45212606</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45212606</guid></item><item><title><![CDATA[I deal with copyright claims [video]]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.youtube.com/watch?v=BNSxOFlOUAg">https://www.youtube.com/watch?v=BNSxOFlOUAg</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=45151932">https://news.ycombinator.com/item?id=45151932</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Sat, 06 Sep 2025 18:56:52 +0000</pubDate><link>https://www.youtube.com/watch?v=BNSxOFlOUAg</link><dc:creator>mwsherman</dc:creator><comments>https://news.ycombinator.com/item?id=45151932</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45151932</guid></item><item><title><![CDATA[Yagni for Distributed Rate Limiting]]></title><description><![CDATA[
<p>Article URL: <a href="https://clipperhouse.com/yagni-distributed-rate-limiter/">https://clipperhouse.com/yagni-distributed-rate-limiter/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=45063931">https://news.ycombinator.com/item?id=45063931</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Fri, 29 Aug 2025 13:34:43 +0000</pubDate><link>https://clipperhouse.com/yagni-distributed-rate-limiter/</link><dc:creator>mwsherman</dc:creator><comments>https://news.ycombinator.com/item?id=45063931</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45063931</guid></item><item><title><![CDATA[New comment by mwsherman in "The GitHub website is slow on Safari"]]></title><description><![CDATA[
<p>Putting on eng manager hat, the problem to solve is that this regression went undetected, not that Safari is slow.<p>The solution is a test that fails when Chrome and Safari have substantially different render times.</p>
]]></description><pubDate>Wed, 27 Aug 2025 14:48:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=45040493</link><dc:creator>mwsherman</dc:creator><comments>https://news.ycombinator.com/item?id=45040493</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45040493</guid></item><item><title><![CDATA[Show HN: A more composable rate limiter for Go]]></title><description><![CDATA[
<p>Having seen how complex rate limiting becomes in production, I thought layering should be more expressible.</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=45027695">https://news.ycombinator.com/item?id=45027695</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Tue, 26 Aug 2025 15:10:36 +0000</pubDate><link>https://github.com/clipperhouse/rate</link><dc:creator>mwsherman</dc:creator><comments>https://news.ycombinator.com/item?id=45027695</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45027695</guid></item><item><title><![CDATA[Casey Handmer on powering data centers [video]]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.youtube.com/watch?v=3cDHx2_QbPE">https://www.youtube.com/watch?v=3cDHx2_QbPE</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=44916406">https://news.ycombinator.com/item?id=44916406</a></p>
<p>Points: 4</p>
<p># Comments: 0</p>
]]></description><pubDate>Fri, 15 Aug 2025 19:17:43 +0000</pubDate><link>https://www.youtube.com/watch?v=3cDHx2_QbPE</link><dc:creator>mwsherman</dc:creator><comments>https://news.ycombinator.com/item?id=44916406</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44916406</guid></item><item><title><![CDATA[Is a "routing" LLM isomorphic with a single large model?]]></title><description><![CDATA[
<p>Article URL: <a href="https://twitter.com/clipperhouse/status/1954962814386180364">https://twitter.com/clipperhouse/status/1954962814386180364</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=44870795">https://news.ycombinator.com/item?id=44870795</a></p>
<p>Points: 2</p>
<p># Comments: 1</p>
]]></description><pubDate>Mon, 11 Aug 2025 23:50:46 +0000</pubDate><link>https://twitter.com/clipperhouse/status/1954962814386180364</link><dc:creator>mwsherman</dc:creator><comments>https://news.ycombinator.com/item?id=44870795</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44870795</guid></item><item><title><![CDATA[Designing a Composable Rate Limiter]]></title><description><![CDATA[
<p>Article URL: <a href="https://clipperhouse.com/composable-rate-limiter/">https://clipperhouse.com/composable-rate-limiter/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=44652158">https://news.ycombinator.com/item?id=44652158</a></p>
<p>Points: 4</p>
<p># Comments: 0</p>
]]></description><pubDate>Tue, 22 Jul 2025 19:48:11 +0000</pubDate><link>https://clipperhouse.com/composable-rate-limiter/</link><dc:creator>mwsherman</dc:creator><comments>https://news.ycombinator.com/item?id=44652158</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44652158</guid></item><item><title><![CDATA[New comment by mwsherman in "SIMD-friendly algorithms for substring searching (2016)"]]></title><description><![CDATA[
<p>C# has implemented some SIMD for IndexOf: <a href="https://github.com/dotnet/runtime/pull/63285">https://github.com/dotnet/runtime/pull/63285</a></p>
]]></description><pubDate>Sat, 14 Jun 2025 17:34:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=44277625</link><dc:creator>mwsherman</dc:creator><comments>https://news.ycombinator.com/item?id=44277625</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44277625</guid></item></channel></rss>