<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: pvh</title><link>https://news.ycombinator.com/user?id=pvh</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sun, 27 Sep 2026 03:13:16 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=pvh" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by pvh in "Ink and Switch Interactive Homepage"]]></title><description><![CDATA[
<p>If you'd like to rebuild a letter, we recently published the editable version of the system (which is also a Patchwork):
<a href="https://tenfold.inkandswitch.com/" rel="nofollow">https://tenfold.inkandswitch.com/</a></p>
]]></description><pubDate>Fri, 25 Sep 2026 16:03:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=49846376</link><dc:creator>pvh</dc:creator><comments>https://news.ycombinator.com/item?id=49846376</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49846376</guid></item><item><title><![CDATA[New comment by pvh in "Keyhive – Local-first access control"]]></title><description><![CDATA[
<p>It does indeed turn out to be a difficult and subtle problem. We've tried to balance minimizing novelty (always risky in cryptographic systems) with achieving the various security and scaling properties we're looking for. We're very lucky at Ink & Switch to be working with Brooke Zelenka on this one.</p>
]]></description><pubDate>Thu, 02 Oct 2025 15:06:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=45450666</link><dc:creator>pvh</dc:creator><comments>https://news.ycombinator.com/item?id=45450666</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45450666</guid></item><item><title><![CDATA[New comment by pvh in "Local-first software (2019)"]]></title><description><![CDATA[
<p>Ideally, you would use existing commodity infrastructure but we have found none of it is really super fit for our purposes. Failing that, we have been developing an approach to low-maintenance reusable infrastructure. For now, I would advise running your own but positioning yourself to take advantage of commodity systems as they emerge.</p>
]]></description><pubDate>Sun, 06 Jul 2025 03:29:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=44477595</link><dc:creator>pvh</dc:creator><comments>https://news.ycombinator.com/item?id=44477595</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44477595</guid></item><item><title><![CDATA[New comment by pvh in "Lies I was told about collab editing, Part 1: Algorithms for offline editing"]]></title><description><![CDATA[
<p>Mechanical merge algorithms can perform better or worse on different kinds of conflicts (the specific example of editing deleted text is just one of many edge cases) but in the end no CRDT can decide if your merged text is what you <i>mean</i> to say.<p>We go into a bunch more detail in the Upwelling paper about the differences between (what we call) semantic and syntactic conflicts in writing: <a href="https://inkandswitch.com/upwelling/" rel="nofollow">https://inkandswitch.com/upwelling/</a><p>Ultimately, my feeling is that serious collaboration is a document review problem as much as anything else. That said, this is particularly true in journalism and scientific publishing and can be mostly ignored for your meeting notes...<p>Anyway, if you see this comment, thanks for a nice piece of writing, Alex. Love to see folks wrestling with these problems.</p>
]]></description><pubDate>Fri, 06 Dec 2024 21:33:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=42344709</link><dc:creator>pvh</dc:creator><comments>https://news.ycombinator.com/item?id=42344709</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42344709</guid></item><item><title><![CDATA[New comment by pvh in "Jacquard lab notebook: Version control and provenance for empirical research"]]></title><description><![CDATA[
<p>Hey, thanks! I don't know what's regressed here but I've emailed the support people for buttondown.</p>
]]></description><pubDate>Mon, 09 Sep 2024 19:44:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=41492684</link><dc:creator>pvh</dc:creator><comments>https://news.ycombinator.com/item?id=41492684</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41492684</guid></item><item><title><![CDATA[New comment by pvh in "Kurt Vonnegut's House Is Not Haunted"]]></title><description><![CDATA[
<p>Of course not. Kurt is up in Heaven now.</p>
]]></description><pubDate>Tue, 21 Nov 2023 01:49:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=38357801</link><dc:creator>pvh</dc:creator><comments>https://news.ycombinator.com/item?id=38357801</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38357801</guid></item><item><title><![CDATA[New comment by pvh in "Automerge-Repo: A "batteries-included" toolkit for local-first applications"]]></title><description><![CDATA[
<p>Automerge does indeed work with live collaboration, though apparently not currently as efficiently as some other solutions. Everyone working in this space is exploring and looking for solutions that will work for users woth slightly differing priorities. In addition to automerge consider checking out yjs, electricsql, diamond types, replicache, vulcn, or any of the other folks. Hopefully one of them will be just right for you.</p>
]]></description><pubDate>Thu, 09 Nov 2023 16:23:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=38207061</link><dc:creator>pvh</dc:creator><comments>https://news.ycombinator.com/item?id=38207061</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38207061</guid></item><item><title><![CDATA[New comment by pvh in "Automerge-Repo: A "batteries-included" toolkit for local-first applications"]]></title><description><![CDATA[
<p>Robust undo/redo remains an ongoing research project. Leo Stewen's work was presented at PLF 2023 a few days ago. It turns out to be a subtle problem to really get completely right, but in my experience you can usually get passable results by letting editors default undo behaviour reverse text input.<p>For applications with more document-structured data, you can now produce inverse patches using Automerge.diff to go between any two points. To implement a reasonable undo in this environment you can record whatever document heads you consider useful undo points and then patch between them.<p>To perhaps expand on why the problem remains unsolved slightly further, there was a robust discussion about what the expected behaviour of "undo" out to be in even simple cases at the conference.</p>
]]></description><pubDate>Thu, 09 Nov 2023 08:21:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=38202405</link><dc:creator>pvh</dc:creator><comments>https://news.ycombinator.com/item?id=38202405</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38202405</guid></item><item><title><![CDATA[New comment by pvh in "Automerge-Repo: A "batteries-included" toolkit for local-first applications"]]></title><description><![CDATA[
<p>The sync protocol does indeed calculate the delta between peers and efficiently catches both sides up.<p>The backends you see are the ones I use, but the API is a binary blob key value store with range queries: supporting other stores should be straightforward.<p>Authentication isn’t exactly left as an exercise to the reader but is an area of active work. I would say securing access to a URL via whatever mechanism you’re used to should be fine for client server applications and peer to peer folk seem to mostly have their own ideas.</p>
]]></description><pubDate>Thu, 09 Nov 2023 02:34:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=38200358</link><dc:creator>pvh</dc:creator><comments>https://news.ycombinator.com/item?id=38200358</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38200358</guid></item><item><title><![CDATA[New comment by pvh in "Automerge-Repo: A "batteries-included" toolkit for local-first applications"]]></title><description><![CDATA[
<p>Please accept my unreserved apologies, Heather! No offense is intended. I can speak for everyone working on Automerge when I say that we've very much appreciated Matthew's work and have indeed spent quite a lot of time studying and responding to it. We spoke about it in person last week, in fact.<p>As for the use-cases, I do not mean to exclude live collaboration from consideration, just to note that it hasn't been our focus or come up often in the use-cases we study. Live meeting notes are definitely a real use-case and I don't dispute the performance results you show.<p>As for Y-js, it's a wonderful piece of software with excellent performance and a vibrant community made by exceptional people like Kevin Jahns. We simply have slightly different goals in our work, which undoubtedly reflect where our engineering investments lie.<p>Indeed, your paper did not measure the same things we look at, and that's why it found new results. Hopefully in time we will join the other systems in performing well on your benchmarks as well.</p>
]]></description><pubDate>Wed, 08 Nov 2023 22:29:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=38198102</link><dc:creator>pvh</dc:creator><comments>https://news.ycombinator.com/item?id=38198102</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38198102</guid></item><item><title><![CDATA[New comment by pvh in "Automerge-Repo: A "batteries-included" toolkit for local-first applications"]]></title><description><![CDATA[
<p>Ink & Switch is behind it; or more expansively mostly Orion Henry, Alex Good, Martin Kleppmann, and myself. As an organization, we have been working on Automerge for about six years now. We also have a wonderful community of other contributors both in industry and research.<p>Automerge is not VC-backed software. Indeed, for a number of years Automerge was primarily a research project used within the lab. Over the last year, it has matured to production software under the supervision of Alex Good. The improved stability and performance has been a great benefit to both our community and internal users. Our intention is to run the project as sponsored open source for the foreseeable future and thus far we have done so thanks to the support of our sponsors and through some development grants.<p>Ink & Switch's research interests drive a lot of Automerge development but funding from sponsors allows us to work on features that are not research-oriented or to accelerate work that we'd like to do but that doesn't have current research applications. If you adopt Automerge for a commercial project, I'd encourage you to join the sponsors of Automerge to ensure its long-term viability.</p>
]]></description><pubDate>Wed, 08 Nov 2023 22:01:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=38197743</link><dc:creator>pvh</dc:creator><comments>https://news.ycombinator.com/item?id=38197743</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38197743</guid></item><item><title><![CDATA[New comment by pvh in "Automerge-Repo: A "batteries-included" toolkit for local-first applications"]]></title><description><![CDATA[
<p>The way I think about it is that if the data should always travel together it should be in one document. For example -- if your TODO list always goes as a unit, then make it an array of objects in a single Automerge document. On the other hand, if you want to build an issue tracker and to be able to link to individual issues or share them individually then a document each is the way to go. Does that help?<p>As for network transports you can indeed have multiple at once. I usually have a mix of in-browser transports (MessageChannels) and WebSocket connections. I suspect we'll need to do a little adjusting to account for prioritization once people really start to push on this with things like mDNS vs relay server connections but the design should accommodate that just fine.<p>As for the docs, my apologies. The "tutorial" was merged into the quickstart as part of extensive documentation upgrades over the last few months. We should update the link in the old blog post accordingly.<p>Here's a link to save you the effort: <a href="https://automerge.org/docs/quickstart/" rel="nofollow noreferrer">https://automerge.org/docs/quickstart/</a></p>
]]></description><pubDate>Wed, 08 Nov 2023 21:54:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=38197645</link><dc:creator>pvh</dc:creator><comments>https://news.ycombinator.com/item?id=38197645</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38197645</guid></item><item><title><![CDATA[New comment by pvh in "Automerge-Repo: A "batteries-included" toolkit for local-first applications"]]></title><description><![CDATA[
<p>Automerge is a library that anyone can adopt, and we are a research organization, not a product company.<p>We have built a variety of projects with Automerge, both publicly and for use in private, including recently the markdown-with-comments editor we call Tiny Essay Editor (<a href="https://tiny-essay-editor.netlify.app/" rel="nofollow noreferrer">https://tiny-essay-editor.netlify.app/</a>) by Geoffrey Litt.<p>That said, sponsoring the Automerge team helps us build faster and is always welcome. (Thanks to our current and past sponsors for their support!)</p>
]]></description><pubDate>Wed, 08 Nov 2023 21:39:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=38197476</link><dc:creator>pvh</dc:creator><comments>https://news.ycombinator.com/item?id=38197476</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38197476</guid></item><item><title><![CDATA[New comment by pvh in "Automerge-Repo: A "batteries-included" toolkit for local-first applications"]]></title><description><![CDATA[
<p>The benchmarks Matt Weidner has been working on are great and outside scrutiny is always welcome, but I should note that I find there's an element of artificiality to them. In particular, testing the performance of the sync system while simulating many users typing into the same document doesn't really measure behaviour we have observed "in the wild". In our research, we've found that editing is usually serial or asynchronous. (See <a href="https://inkandswitch.com/upwelling" rel="nofollow noreferrer">https://inkandswitch.com/upwelling</a> for further discussion of our collaboration research.)<p>The benchmark that concerns me (and that I'm pleased with our progress on!) is that you can edit an entire Ink & Switch long-form essay with Automerge and that the end-to-end keypress-to-paint latency using Codemirror is under 10ms (next frame at 100hz).<p>While these kinds of benchmarks are incredibly appreciated and absolutely drive us to work on optimizing the problems they uncover, we try to work backwards from experienced problems in real usage as our first priority.</p>
]]></description><pubDate>Wed, 08 Nov 2023 21:37:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=38197455</link><dc:creator>pvh</dc:creator><comments>https://news.ycombinator.com/item?id=38197455</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38197455</guid></item><item><title><![CDATA[New comment by pvh in "Automerge-Repo: A "batteries-included" toolkit for local-first applications"]]></title><description><![CDATA[
<p>Thanks, Scott. This API should make it much, much easier for folks to build with Automerge and kind of just encapsulates everything we've been doing in-house over the last few years.</p>
]]></description><pubDate>Wed, 08 Nov 2023 19:24:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=38195584</link><dc:creator>pvh</dc:creator><comments>https://news.ycombinator.com/item?id=38195584</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38195584</guid></item><item><title><![CDATA[New comment by pvh in "Building a collaborative pixel art editor with CRDTs"]]></title><description><![CDATA[
<p>What fun, jake! I am really enjoying your series here. When we built Pixelpusher (<a href="https://inkandswitch.com/pixelpusher" rel="nofollow noreferrer">https://inkandswitch.com/pixelpusher</a>) that was the beginning of a long and ongoing journey into the user experience implications of CRDTs.<p>For instance:<p><pre><code>  * how and when should we merge changes?
  * what if we change our minds later?
  * how do we know if our data is “in sync” with another user
  * what does it mean to depend on another change?
</code></pre>
And so on. Pixelpusher is awfully naive by the standards of today but I have very fond memories of working on it with Jeff Peterson, Jim Pick, and Orion Henry.</p>
]]></description><pubDate>Thu, 12 Oct 2023 15:38:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=37858720</link><dc:creator>pvh</dc:creator><comments>https://news.ycombinator.com/item?id=37858720</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37858720</guid></item><item><title><![CDATA[New comment by pvh in "Show HN: Khoj – Chat offline with your second brain using Llama 2"]]></title><description><![CDATA[
<p>Just a note to suggest that giving away your hard work to those who will profit from it in the hope that they will remember you later seems like a pretty dubious exchange.<p>Have a look at how that worked out for the folks who built node and its libraries versus the ones who maintained control of their work (like npm).</p>
]]></description><pubDate>Mon, 31 Jul 2023 04:11:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=36938739</link><dc:creator>pvh</dc:creator><comments>https://news.ycombinator.com/item?id=36938739</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36938739</guid></item><item><title><![CDATA[New comment by pvh in "The C Standard Library Function Isspace() Depends on Locale"]]></title><description><![CDATA[
<p>To the former, curious people with an interest in how and why the world came to be as it is.<p>To the latter, obviously "it" has improved, but ecosystem effects make certain changes very difficult and expensive to coordinate and what we see here is the scars from that process.<p>Everything you see in the world grew out of things that came before, and was made by fallible people working with limited time, energy, and perspective.<p>Honestly, I'm a bit surprised someone with a three letter handle wouldn't already recognize this. Surely you have been around here for a while.</p>
]]></description><pubDate>Tue, 06 Jun 2023 22:01:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=36219650</link><dc:creator>pvh</dc:creator><comments>https://news.ycombinator.com/item?id=36219650</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36219650</guid></item><item><title><![CDATA[New comment by pvh in "CRDT-richtext: Rust implementation of Peritext and Fugue"]]></title><description><![CDATA[
<p>Hey there! It's great to see more folks building more CRDTs. On behalf of the Peritext authors, Automerge, and Ink & Switch, welcome to the community.</p>
]]></description><pubDate>Thu, 18 May 2023 19:52:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=35993215</link><dc:creator>pvh</dc:creator><comments>https://news.ycombinator.com/item?id=35993215</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35993215</guid></item><item><title><![CDATA[New comment by pvh in "Offline is just online with extreme latency"]]></title><description><![CDATA[
<p>We tried Web Bluetooth in a project. It was extremely flaky. Notably it also only works as a server, so you cant peer two browsers over it either.</p>
]]></description><pubDate>Wed, 19 Apr 2023 15:03:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=35629023</link><dc:creator>pvh</dc:creator><comments>https://news.ycombinator.com/item?id=35629023</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35629023</guid></item></channel></rss>