[{"data":1,"prerenderedAt":268},["ShallowReactive",2],{"project-13803843":3},{"id":4,"name":5,"line":5,"line_source":6,"title":7,"url":8,"domain":9,"maker":10,"posted_at":11,"year":12,"points":13,"comments":14,"rank_in_year":15,"shown_in_year":16,"top":17,"tier":18,"category":19,"subcategory":20,"format":21,"keywords":22,"reception":27,"sentiment":28,"stance_mix":29,"scored_comments":33,"aspects":34,"strip":38,"post_text":41,"what":42,"said":70,"maker_in_thread":152,"shape":162,"grid":164,"attempts":227,"same_week":232,"maker_shows":39,"maker_hidden":260,"reader_version":261,"card":262},"13803843","Working code for Operational Transformation\u002FCRDT hybrid","title","Show HN: Working code for Operational Transformation\u002FCRDT hybrid","https:\u002F\u002Fmedium.com\u002F@raphlinus\u002Fworking-code-for-operational-transformation-crdt-hybrid-9d04a57309da","medium.com","raphlinus",1488818863,2017,130,28,321,2242,15,"notable","languages","collaborative editing algorithm","library",[23,24,25,26],"operational transformation","crdt","collaborative editing","text merge","curious",0.083,{"positive":30,"neutral":31,"mixed":30,"critical":32},1,4,0,6,{"performance":35,"idea":36,"docs":37},{"positive":32,"critical":32},{"positive":32,"critical":32},{"positive":30,"critical":32},[32,32,32,32,39,32,32,32,39,32,39,32,32,39,32,32,32,32,32,32,32,40,32,32,32,39,32,32],3,5,null,{"problem":43,"audience":50,"pricing":41,"motivation":54,"time_to_build":41,"stack":58,"openness":67,"stage":68,"team_size":69},{"value":44,"source":45,"evidence":46},"Combining OT's RAM efficiency with CRDT's support for arbitrary network topologies in collaborative text editing","maker",[47],{"id":48,"by":10,"text":49},"13803895","Author of the posted article here. For the last year or so, I've been doing a deep dive into operational transformation, trying to figure out why it's so hard, and whether CRDT…",{"value":51,"source":45,"evidence":52},"People building collaborative text editors",[53],{"id":48,"by":10,"text":49},{"value":55,"source":45,"evidence":56},"Deep dive into why operational transformation is hard and whether CRDT is a better approach",[57],{"id":48,"by":10,"text":49},[59,63],{"value":60,"source":45,"evidence":61},"JavaScript",[62],{"id":48,"by":10,"text":49},{"value":64,"source":45,"evidence":65},"Balanced binary tree data structure",[66],{"id":48,"by":10,"text":49},"open_source","prototype","unknown",{"praise":71,"objections":95,"requests":107,"questions":122,"alternatives":134},[72,88],{"value":73,"source":74,"evidence":75},"Interesting, cool work on the hybrid approach","commenter",[76,80,84],{"id":77,"by":78,"text":79},"13804042","Mizza","This is really cool! Have you discussed this work with Joseph Gentle, author of ShareJS\u002FShareDB? (He's the one who first exposed me to the concepts and seems like a sharp guy.)",{"id":81,"by":82,"text":83},"13804711","pspeter3","This is awesome! I think I missed it but is there a link to the JavaScript in the article?",{"id":85,"by":86,"text":87},"13805067","marknadal","@raphlinus, fantastic work! I'd love to connect because I am also one of those people who has been working on CRDT\u002FOT algorithms for a couple years now. I wound up building a…",{"value":89,"source":74,"evidence":90},"Accessible article with working code",[91],{"id":92,"by":93,"text":94},"13806162","sounds","The linked article here is surprisingly accessible! I would add just one small tidbit of advice that might help interested people get up to speed: skim the paper, then look at…",[96,103],{"value":97,"source":74,"evidence":98},"Composing-operations approach is slow compared to the tree solution",[99],{"id":100,"by":101,"text":102},"13809639","josephg","Aw I'm HN-famous! I'm sorry I didn't see this post sooner. I'd love to catch up for virtual coffee if you're interested - check your email. I'm not sure if your tree structure is…",{"value":104,"source":74,"evidence":105},"Not technically a CRDT, still OT with extra properties",[106],{"id":100,"by":101,"text":102},[108,115],{"value":109,"source":74,"evidence":110},"Tutorial on operational transformation for beginners",[111],{"id":112,"by":113,"text":114},"13805037","mochidusk","I would love a good in-depth tutorial on operational transformation but so far haven't found one that is satisfactory (for a complete beginner). Maybe I've been spoiled with all…",{"value":116,"source":74,"evidence":117},"Hosted OT service with SDKs",[118],{"id":119,"by":120,"text":121},"13804031","tarr11","I wish someone should offer a \"firebase for OT\" SAAS that offers an API, SDKs for JS\u002FiOS\u002FAndroid and a few working samples. Every time I want a collaborative OT like environment…",[123,130],{"value":124,"source":74,"evidence":125},"How does OT differ from operation-based CRDT?",[126],{"id":127,"by":128,"text":129},"13804195","polskibus","Great stuff! Would you mind elaborating on how does OT differ from operation-based CRDT? They seem very similar, one described as functions , the other as a data type with…",{"value":131,"source":74,"evidence":132},"How does the approach handle rich text?",[133],{"id":85,"by":86,"text":87},[135,142,148],{"value":136,"source":74,"evidence":137},"Realm",[138],{"id":139,"by":140,"text":141},"13804243","jinjin2","Realm is pretty close (it is not offered as-a-service, but they have a free version you can run yourself).",{"value":143,"source":74,"evidence":144},"GUN",[145],{"id":146,"by":86,"text":147},"13805087","gun is also pretty close, http:\u002F\u002Fgun.js.org\u002F , especially if you watch \u002F read the video series on how the CRDT algorithm and security work in arbitrary P2P environments. The base…",{"value":149,"source":74,"evidence":150},"ShareJS\u002FShareDB",[151],{"id":77,"by":78,"text":79},{"comments":153,"answered":33,"key":154},9,[155,156,159],{"id":48,"text":49},{"id":157,"text":158},"13804071","No, but I did have a conversation with Nate Smith, also involved with that project. That was before I was able to release this code, though.",{"id":160,"text":161},"13804087","Good point, done. Otherwise, it would look like a pretty ham-handed attempt at sock-puppetry :)",{"commenters":17,"max_depth":33,"maker_replies":153,"first_comment_mins":40,"lifespan_hours":163},19,[165,167,169,170,174,176,179,180,183,185,187,189,191,194,196,199,200,201,202,205,208,210,212,214,216,219,221,224],[48,32,32,166,10,30],"project\u002Fpositive\u002Fidea",[77,32,32,168,78,32],"commenter\u002Fneutral\u002Fnone",[157,32,32,168,10,30],[171,32,32,172,173,32],"13805960","other\u002Fneutral\u002Fidea","nateps",[100,32,39,175,101,32],"project\u002Fmixed\u002Fperformance",[177,32,32,168,178,32],"13804060","pjc50",[160,32,32,168,10,30],[181,32,32,168,182,32],"13804420","dang",[127,32,39,184,128,32],"project\u002Fneutral\u002Fidea",[186,32,32,184,10,30],"13804276",[188,32,39,184,128,32],"13804478",[190,32,32,184,10,30],"13804622",[192,32,32,193,82,32],"13804714","other\u002Fneutral\u002Fnone",[81,32,39,195,82,32],"project\u002Fneutral\u002Fdocs",[197,32,32,198,10,30],"13805215","maker\u002Fneutral\u002Fdocs",[119,30,32,193,120,32],[139,30,32,193,140,32],[146,30,32,193,86,32],[203,30,32,204,113,32],"13805187","other\u002Fcritical\u002Fnone",[112,206,32,207,113,32],2,"other\u002Fneutral\u002Fdocs",[209,206,32,198,10,30],"13805245",[92,206,40,211,93,32],"project\u002Fpositive\u002Fdocs",[85,39,32,213,86,32],"commenter\u002Fpositive\u002Fidea",[215,39,32,184,10,30],"13805288",[217,39,32,193,218,32],"13806177","sjansen",[220,39,39,184,86,32],"13806801",[222,39,32,193,223,32],"13808337","amk_",[225,39,32,226,10,30],"13808758","commenter\u002Fpositive\u002Fnone",[228,231],{"id":229,"t":230,"points":206,"comments":32},"13710889",1487813630,{"id":4,"t":11,"points":13,"comments":14},[233,238,242,247,251,255],{"id":234,"name":235,"points":236,"category":237},"13794879","AtomOS",310,"dev_tools",{"id":239,"name":240,"points":241,"category":237},"13783546","kompose",249,{"id":243,"name":244,"points":245,"category":246},"13809462","NoFile.io",231,"infrastructure",{"id":248,"name":249,"points":250,"category":237},"13819447","Gitly.io",230,{"id":252,"name":253,"points":254,"category":237},"13796441","Ffscreencast",76,{"id":256,"name":257,"points":258,"category":259},"13798763","Amazon Price Monitor",61,"web_saas",false,"v2",{"id":263,"name":5,"line":5,"ai":260,"cat":19,"year":12,"points":13,"comments":14,"rec":27,"s":264,"top":17,"kw":265,"maker":10,"domain":9,"tier":18,"attempts":206,"strip":266,"url":8,"mix":267,"praise":73,"objection":97,"sub":20},13803843,0.08,[23,24,25,26],"0000300030300300000005000300",[30,31,30,32],1794036553275]