[{"data":1,"prerenderedAt":253},["ShallowReactive",2],{"project-5664187":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":28,"sentiment":29,"stance_mix":30,"scored_comments":35,"aspects":36,"strip":44,"post_text":46,"what":47,"said":67,"maker_in_thread":161,"shape":170,"grid":174,"attempts":215,"same_week":216,"maker_shows":197,"maker_hidden":245,"reader_version":246,"card":247},"5664187","Yugen","An Etherpad clone in Node.js and Socket.io","title","Show HN: An Etherpad clone in Node.js and Socket.io","http:\u002F\u002Fyugentext.com","yugentext.com","JacksonGariety",1367867946,2013,40,20,620,1739,36,"shown","dev_tools","collaborative text editor","web_app",[24,25,26,27],"collaborative editor","node.js","socket.io","etherpad","roasted",-0.333,{"positive":31,"neutral":32,"mixed":33,"critical":34},1,4,0,6,11,{"execution":37,"privacy":39,"idea":40,"performance":42,"design":43},{"positive":33,"critical":38},2,{"positive":33,"critical":33},{"positive":33,"critical":41},3,{"positive":33,"critical":31},{"positive":31,"critical":33},[33,33,41,33,41,33,31,33,31,41,31,45,31,33,33,31,41,31,33,33],5,null,{"problem":48,"audience":46,"pricing":46,"motivation":46,"time_to_build":46,"stack":54,"openness":64,"stage":65,"team_size":66},{"value":49,"source":50,"evidence":51},"Real-time collaborative text editing in the browser","inferred",[52],{"id":53},"post",[55,60],{"value":56,"source":57,"evidence":58},"Node.js","maker",[59],{"id":53},{"value":61,"source":57,"evidence":62},"Socket.io",[63],{"id":53},"open_source","launched","unknown",{"praise":68,"objections":77,"requests":122,"questions":140,"alternatives":141},[69],{"value":70,"source":71,"evidence":72},"Cool design","commenter",[73],{"id":74,"by":75,"text":76},"5664234","colbyaley","This is so cooool",[78,93,104,115],{"value":79,"source":71,"evidence":80},"Editor gets flooded with destructive edits and spam from griefers",[81,85,89],{"id":82,"by":83,"text":84},"5664632","petercooper","I had this opened in a tab and initially forgot what it was.. I thought it was some sort of artificial intelligence or ASCII movie, because it seems 1001 griefers are…",{"id":86,"by":87,"text":88},"5664903","worldsayshi","It kind of shows that it's not really about anonymity (I interpret it as that anyway). When there are enough amount of connected users it really favors destructive edits. And we…",{"id":90,"by":91,"text":92},"5664662","stbullard","I am always amazed by what people do when they're given anonymity and collaborative text editors - rarely positively. But this seems particularly bad. Is HN really so many twelve…",{"value":94,"source":71,"evidence":95},"Already exists: Etherpad and EtherpadLite are open source",[96,100],{"id":97,"by":98,"text":99},"5664459","sethish","Etherpad is open source already. As is EtherpadLite (EPL), its node.js rewrite.",{"id":101,"by":102,"text":103},"5664866","5vforest","etherpad-lite is node.js and socket.io",{"value":105,"source":71,"evidence":106},"Cursor jumps when others edit, text disappears quickly",[107,111],{"id":108,"by":109,"text":110},"5665760","dopamean","If I click the link and wait a few minutes I start to see someone else's message. It last for only a second and then vanishes.",{"id":112,"by":113,"text":114},"5667738","Johnyma22","When it doesn't change under you every 5 minutes....",{"value":116,"source":71,"evidence":117},"Sockets can be emitted from the console, no input protection",[118],{"id":119,"by":120,"text":121},"5664714","javis","You should wrap your JS in an anonymous function. People can just emit sockets from the console. e.g. socket.emit('msg', \"text here\");",[123,129,136],{"value":124,"source":57,"evidence":125},"Keep cursor in place when others edit",[126],{"id":127,"by":11,"text":128},"5666125","Yeah I wanted to try out crypto. There are a number of things about this app I want to change. Namely getting your cursor to stay in place when other people edit. No clue how to…",{"value":130,"source":71,"evidence":131},"Use a proper unique id generator instead of random hex",[132],{"id":133,"by":134,"text":135},"5665942","edtechdev","From https:\u002F\u002Fgithub.com\u002FJacksonGariety\u002FYugen\u002Fblob\u002Fmaster\u002Froutes.js ``` res.redirect(crypto.randomBytes(3).toString('hex')) ``` You probably already know this, but you'd probably…",{"value":137,"source":71,"evidence":138},"Wrap JS in an anonymous function",[139],{"id":119,"by":120,"text":121},[],[142,149,154],{"value":143,"source":71,"evidence":144},"Etherpad",[145,146],{"id":97,"by":98,"text":99},{"id":147,"by":11,"text":148},"5664874","Too bad this aint: http:\u002F\u002Fetherpad.org",{"value":150,"source":71,"evidence":151},"EtherpadLite",[152,153],{"id":97,"by":98,"text":99},{"id":101,"by":102,"text":103},{"value":155,"source":71,"evidence":156},"Share.js",[157],{"id":158,"by":159,"text":160},"5665769","asperous","Share.js is pretty cool too",{"comments":34,"answered":33,"key":162},[163,164,167],{"id":127,"text":128},{"id":165,"text":166},"5664754","about to push some changes, will include this",{"id":168,"text":169},"5664464","Good point, editing title.",{"commenters":171,"max_depth":41,"maker_replies":34,"first_comment_mins":172,"lifespan_hours":173},14,9,17,[175,177,178,180,181,183,185,187,189,191,194,196,199,201,202,205,208,210,211,213],[90,33,33,176,91,33],"commenter\u002Fneutral\u002Fnone",[86,33,33,176,87,33],[133,31,41,179,134,33],"maker\u002Fneutral\u002Fexecution",[127,31,33,179,11,31],[119,38,41,182,120,33],"maker\u002Fneutral\u002Fprivacy",[165,38,33,184,11,31],"maker\u002Fpositive\u002Fprivacy",[97,41,31,186,98,33],"project\u002Fcritical\u002Fidea",[168,41,33,188,11,31],"maker\u002Fneutral\u002Fnone",[82,32,31,190,83,33],"project\u002Fcritical\u002Fperformance",[192,45,41,193,87,33],"5664853","project\u002Fneutral\u002Fidea",[108,34,31,195,109,33],"project\u002Fcritical\u002Fexecution",[74,197,45,198,75,33],7,"project\u002Fpositive\u002Fdesign",[101,200,31,186,102,33],8,[147,200,33,188,11,31],[203,200,33,176,204,33],"5665918","Sayter",[206,172,31,186,207,33],"5664768","restlessdesign",[158,209,41,193,159,33],10,[112,209,31,195,113,33],[212,35,33,188,11,31],"5664701",[214,35,33,188,11,31],"5664933",[],[217,221,226,231,236,241],{"id":218,"name":219,"points":220,"category":20},"5672515","Flattest Route",237,{"id":222,"name":223,"points":224,"category":225},"5643801","Weekend project",196,"languages",{"id":227,"name":228,"points":229,"category":230},"5675229","Uncover",178,"web_saas",{"id":232,"name":233,"points":234,"category":235},"5672354","Nemaload",147,"learning_science",{"id":237,"name":238,"points":239,"category":240},"5663041","Zapier API Status Board",143,"infrastructure",{"id":242,"name":243,"points":244,"category":225},"5645787","Quasar \u002F Pulsar",116,false,"v2",{"id":248,"name":5,"line":6,"ai":245,"cat":20,"year":13,"points":14,"comments":15,"rec":28,"s":249,"top":18,"kw":250,"maker":11,"domain":10,"tier":19,"attempts":33,"strip":251,"url":9,"mix":252,"praise":70,"objection":79,"sub":21},5664187,-0.33,[24,25,26,27],"00303010131510013100",[31,32,33,34],1793990893940]