<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://mattweidner.com//feed.xml" rel="self" type="application/atom+xml" /><link href="https://mattweidner.com//" rel="alternate" type="text/html" /><updated>2026-08-09T18:00:18+00:00</updated><id>https://mattweidner.com//feed.xml</id><title type="html">Matthew Weidner</title><subtitle>Common Curriculum / CMU PhD student</subtitle><author><name>Matthew Weidner</name><email>mweidner037 [at] gmail.com</email></author><entry><title type="html">Collaborative Text Editing without CRDTs or OT</title><link href="https://mattweidner.com//2025/05/21/text-without-crdts.html" rel="alternate" type="text/html" title="Collaborative Text Editing without CRDTs or OT" /><published>2025-05-21T00:00:00+00:00</published><updated>2025-05-21T00:00:00+00:00</updated><id>https://mattweidner.com//2025/05/21/text-without-crdts</id><author><name>Matthew Weidner</name><email>mweidner037 [at] gmail.com</email></author><summary type="html"><![CDATA[This blog post describes an alternative, straightforward approach to collaborative text editing, without Conflict-free Replicated Data Types (CRDTs) or Operational Transformation (OT). By making text editing flexible and easy to DIY, I hope that the approach will let you create rich collaborative apps that are challenging to build on top of a black-box CRDT/OT library.]]></summary></entry><entry><title type="html">Architectures for Central Server Collaboration</title><link href="https://mattweidner.com//2024/06/04/server-architectures.html" rel="alternate" type="text/html" title="Architectures for Central Server Collaboration" /><published>2024-06-04T00:00:00+00:00</published><updated>2024-06-04T00:00:00+00:00</updated><id>https://mattweidner.com//2024/06/04/server-architectures</id><author><name>Matthew Weidner</name><email>mweidner037 [at] gmail.com</email></author><summary type="html"><![CDATA[This blog post records some thoughts on how to architect a real-time collaborative app when you do have a central server.]]></summary></entry><entry><title type="html">Announcing list-positions</title><link href="https://mattweidner.com//2024/04/29/list-positions.html" rel="alternate" type="text/html" title="Announcing list-positions" /><published>2024-04-29T00:00:00+00:00</published><updated>2024-04-29T00:00:00+00:00</updated><id>https://mattweidner.com//2024/04/29/list-positions</id><author><name>Matthew Weidner</name><email>mweidner037 [at] gmail.com</email></author><summary type="html"><![CDATA[List-positions implements the same abstraction (unique immutable positions) as my position-strings library, but with actually practical performance for text and large lists.]]></summary></entry><entry><title type="html">CRDT Survey, Part 1: Introduction</title><link href="https://mattweidner.com//2023/09/26/crdt-survey-1.html" rel="alternate" type="text/html" title="CRDT Survey, Part 1: Introduction" /><published>2023-09-26T00:00:00+00:00</published><updated>2023-09-26T00:00:00+00:00</updated><id>https://mattweidner.com//2023/09/26/crdt-survey-1</id><author><name>Matthew Weidner</name><email>mweidner037 [at] gmail.com</email></author><summary type="html"><![CDATA[In this blog series, I survey CRDT techniques for collaborative apps. My goal is to demystify and summarize the techniques I know about, so that you can learn them too without a PhD's worth of effort.]]></summary></entry><entry><title type="html">CRDT Survey, Part 2: Semantic Techniques</title><link href="https://mattweidner.com//2023/09/26/crdt-survey-2.html" rel="alternate" type="text/html" title="CRDT Survey, Part 2: Semantic Techniques" /><published>2023-09-26T00:00:00+00:00</published><updated>2023-09-26T00:00:00+00:00</updated><id>https://mattweidner.com//2023/09/26/crdt-survey-2</id><author><name>Matthew Weidner</name><email>mweidner037 [at] gmail.com</email></author><summary type="html"><![CDATA[CRDT semantic techniques help you decide what your app's state should be, given the operations that users have performed. Like the data structures and design patterns that you learn about when programming single-user apps, these techniques provide valuable guidance, but they are not a replacement for deciding what your app should actually do.]]></summary></entry><entry><title type="html">CRDT Survey, Part 3: Algorithmic Techniques</title><link href="https://mattweidner.com//2023/09/26/crdt-survey-3.html" rel="alternate" type="text/html" title="CRDT Survey, Part 3: Algorithmic Techniques" /><published>2023-09-26T00:00:00+00:00</published><updated>2023-09-26T00:00:00+00:00</updated><id>https://mattweidner.com//2023/09/26/crdt-survey-3</id><author><name>Matthew Weidner</name><email>mweidner037 [at] gmail.com</email></author><summary type="html"><![CDATA[Let's say you have chosen your collaborative app's semantics in style of Part 2. CRDT algorithmic techniques help you implement these semantics efficiently.]]></summary></entry><entry><title type="html">CRDT Survey, Part 4: Further Topics</title><link href="https://mattweidner.com//2023/09/26/crdt-survey-4.html" rel="alternate" type="text/html" title="CRDT Survey, Part 4: Further Topics" /><published>2023-09-26T00:00:00+00:00</published><updated>2023-09-26T00:00:00+00:00</updated><id>https://mattweidner.com//2023/09/26/crdt-survey-4</id><author><name>Matthew Weidner</name><email>mweidner037 [at] gmail.com</email></author><summary type="html"><![CDATA[This post concludes my CRDT survey by describing further topics that are outside my focus area. It is not a proper survey of those topics, but instead a lightweight bibliography, with links to a relevant resource or two.]]></summary></entry><entry><title type="html">“Position Strings” for Collaborative Lists and Text</title><link href="https://mattweidner.com//2023/04/13/position-strings.html" rel="alternate" type="text/html" title="“Position Strings” for Collaborative Lists and Text" /><published>2023-04-13T00:00:00+00:00</published><updated>2023-04-13T00:00:00+00:00</updated><id>https://mattweidner.com//2023/04/13/position-strings</id><author><name>Matthew Weidner</name><email>mweidner037 [at] gmail.com</email></author><summary type="html"><![CDATA[I recently published a new TypeScript library on npm: [position-strings](https://www.npmjs.com/package/position-strings).]]></summary></entry><entry><title type="html">Fugue: A Basic List CRDT</title><link href="https://mattweidner.com//2022/10/21/basic-list-crdt.html" rel="alternate" type="text/html" title="Fugue: A Basic List CRDT" /><published>2022-10-21T00:00:00+00:00</published><updated>2022-10-21T00:00:00+00:00</updated><id>https://mattweidner.com//2022/10/21/basic-list-crdt</id><author><name>Matthew Weidner</name><email>mweidner037 [at] gmail.com</email></author><summary type="html"><![CDATA[CRDT collaborative text editing using a binary-ish tree.]]></summary></entry><entry><title type="html">Designing Data Structures for Collaborative Apps</title><link href="https://mattweidner.com//2022/02/10/collaborative-data-design.html" rel="alternate" type="text/html" title="Designing Data Structures for Collaborative Apps" /><published>2022-02-10T00:00:00+00:00</published><updated>2022-02-10T00:00:00+00:00</updated><id>https://mattweidner.com//2022/02/10/collaborative-data-design</id><author><name>Matthew Weidner</name><email>mweidner037 [at] gmail.com</email></author><summary type="html"><![CDATA[Simple CRDT techniques for the data layer of a collaborative app.]]></summary></entry></feed>