[{"data":1,"prerenderedAt":257},["ShallowReactive",2],{"project-2406256":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":29,"sentiment":30,"stance_mix":31,"scored_comments":36,"aspects":37,"strip":44,"post_text":46,"what":47,"said":71,"maker_in_thread":145,"shape":154,"grid":159,"attempts":221,"same_week":222,"maker_shows":42,"maker_hidden":249,"reader_version":250,"card":251},"2406256","jsgif","A GIF player in JavaScript","title","Show HN: jsgif: A GIF player in JavaScript","http:\u002F\u002Fslbkbs.org\u002Fjsgif","slbkbs.org","shachaf",1301921946,2011,128,24,76,1097,7,"notable","languages","javascript gif player","browser_extension",[24,25,26,27,28],"gif player","javascript","canvas","animated gif","bookmarklet","loved",0.385,{"positive":32,"neutral":33,"mixed":34,"critical":35},5,9,1,0,15,{"docs":38,"privacy":39,"execution":40,"idea":41,"design":43},{"positive":34,"critical":35},{"positive":35,"critical":35},{"positive":34,"critical":35},{"positive":42,"critical":35},2,{"positive":35,"critical":35},[32,45,35,35,35,45,45,45,45,45,35,45,32,45,32,35,35,35,35,35,32,45,45,32],3,null,{"problem":46,"audience":46,"pricing":46,"motivation":46,"time_to_build":46,"stack":48,"openness":68,"stage":69,"team_size":70},[49,60],{"value":50,"source":51,"evidence":52},"JavaScript","maker",[53,57],{"id":54,"by":55,"text":56},"2406347","olalonde","``` The source code is a bit of a mess, but if anyone is interested in the non-bookmarkletized code, I can upload it somewhere. ``` How about hosting the source code on GitHub?…",{"id":58,"by":11,"text":59},"2408966","This was meant as a proof-of-concept and has several big inefficiencies that could be fixed pretty easily if someone was actually going to use it for something. The UI could also…",{"value":61,"source":62,"evidence":63},"HTML5 canvas","commenter",[64],{"id":65,"by":66,"text":67},"2409393","runaway","I made a similar Chrome plugin called GIF Scrubber: https:\u002F\u002Fchrome.google.com\u002Fwebstore\u002Fdetail\u002Fgbdacbnhlfdlllckelpdkgeklfjfgcmp It also uses a canvas element to render each frame…","open_source","prototype","unknown",{"praise":72,"objections":88,"requests":103,"questions":116,"alternatives":133},[73,81],{"value":74,"source":62,"evidence":75},"Clever work; the GIF viewer is cool and usable",[76,80],{"id":77,"by":78,"text":79},"2406483","ck2","Some really clever work there. Add a timeline slider and it's really usable! ps. for those wanting to read the source more easily, paste the bookmarklet into…",{"id":54,"by":55,"text":56},{"value":82,"source":62,"evidence":83},"Good idea for browser-based codecs",[84],{"id":85,"by":86,"text":87},"2407210","sedachv","This is the way forward for codecs on the web. Alan Kay has previously complained about how dumbed-down the browsers are in comparison to the possibilities of mobile code, and…",[89,93],{"value":90,"source":62,"evidence":91},"Source code is messy",[92],{"id":54,"by":55,"text":56},{"value":94,"source":62,"evidence":95},"Cross-domain XHR limits client-side loading of external GIFs",[96,100],{"id":97,"by":98,"text":99},"2406883","user24","How strange. Until last month, I was running gifexplode.com, a site where you could share 'exploded' gifs - i.e. it took an animated gif and stepped over it frame-by-frame. I…",{"id":101,"by":98,"text":102},"2407745","No; calling getImageData on an image tag with an external src will fail with a cross domain warning :( You can set up an onload handler on an image though, yeah.",[104,112],{"value":105,"source":62,"evidence":106},"Host source code on GitHub",[107,108],{"id":54,"by":55,"text":56},{"id":109,"by":110,"text":111},"2406760","icefox","And the webpage on a gh_pages branch?",{"value":113,"source":62,"evidence":114},"Add a timeline slider",[115],{"id":77,"by":78,"text":79},[117,128],{"value":118,"source":62,"evidence":119},"What does the pin\u002Funpin button do",[120,124],{"id":121,"by":122,"text":123},"2406946","gojomo","Neat! What does pin\u002Funpin do? (I clicked it with no obvious effect on playback.)",{"id":125,"by":126,"text":127},"2407518","orenbenkiki","It pins the buttons bar; if it isn't pinned, it disappears when you move the mouse outside it.",{"value":129,"source":62,"evidence":130},"How to load external images without cross-domain errors",[131,132],{"id":97,"by":98,"text":99},{"id":101,"by":98,"text":102},[134,138],{"value":135,"source":62,"evidence":136},"GIF Scrubber Chrome extension",[137],{"id":65,"by":66,"text":67},{"value":139,"source":62,"evidence":140},"Server-side proxying of images",[141],{"id":142,"by":143,"text":144},"2408056","crux_","Instead of mirroring, you could proxy. (Solves \"storage\"\u002F\"mirroring\" issue; doesn't solve \"nasty stuff served up through your server\" issue.) In general, though, there's no way…",{"comments":45,"answered":42,"key":146},[147,150,153],{"id":148,"text":149},"2408882","OK, I put it up on GitHub. https:\u002F\u002Fgithub.com\u002Fshachaf\u002Fjsgif",{"id":151,"text":152},"2417535","Yes, but then the canonical URL would be on github.com.",{"id":58,"text":59},{"commenters":155,"max_depth":156,"maker_replies":45,"first_comment_mins":157,"lifespan_hours":158},19,4,43,59,[160,162,164,166,169,170,172,176,177,179,181,183,186,188,192,196,200,203,206,210,211,214,216,217],[54,35,32,161,55,35],"maker\u002Fpositive\u002Fdocs",[109,35,45,163,110,35],"maker\u002Fneutral\u002Fdocs",[148,35,35,165,11,34],"maker\u002Fneutral\u002Fnone",[167,35,35,168,110,35],"2413374","commenter\u002Fneutral\u002Fdocs",[151,35,35,165,11,34],[97,34,45,171,98,35],"project\u002Fmixed\u002Fprivacy",[173,34,45,174,175,35],"2407546","project\u002Fneutral\u002Fexecution","boundlessdreamz",[101,34,45,174,98,35],[142,34,45,178,143,35],"project\u002Fneutral\u002Fprivacy",[180,34,45,178,98,35],"2410125",[58,34,35,182,11,34],"maker\u002Fneutral\u002Fexecution",[184,34,45,178,185,35],"2409128","zcksjdn",[77,42,32,187,78,35],"project\u002Fpositive\u002Fexecution",[189,42,45,190,191,35],"2406623","project\u002Fneutral\u002Fdocs","roryokane",[193,45,32,194,195,35],"2406477","maker\u002Fpositive\u002Fnone","cont4gious",[197,156,35,198,199,35],"2406380","other\u002Fneutral\u002Fnone","icode",[201,156,35,198,202,35],"2406439","de90",[204,156,35,198,205,35],"2406475","TimothyFitz",[207,156,35,208,209,35],"2406637","other\u002Fneutral\u002Fdocs","capnrefsmmat",[65,32,35,198,66,35],[85,212,32,213,86,35],6,"project\u002Fpositive\u002Fidea",[121,18,45,215,122,35],"project\u002Fneutral\u002Fdesign",[125,18,45,215,126,35],[218,219,32,213,220,35],"2407475",8,"s3graham",[],[223,228,232,237,241,245],{"id":224,"name":225,"points":226,"category":227},"2406614","Gumroad",396,"web_saas",{"id":229,"name":230,"points":231,"category":227},"2404752","cantada.ca",212,{"id":233,"name":234,"points":235,"category":236},"2399927","Glowform",182,"creative",{"id":238,"name":239,"points":240,"category":227},"2417194","NationBuilder",109,{"id":242,"name":243,"points":158,"category":244},"2408399","SyncPad","productivity",{"id":246,"name":247,"points":248,"category":227},"2414491","popify.me",45,false,"v2",{"id":252,"name":5,"line":6,"ai":249,"cat":20,"year":13,"points":14,"comments":15,"rec":29,"s":253,"top":18,"kw":254,"maker":11,"domain":10,"tier":19,"attempts":35,"strip":255,"url":9,"mix":256,"praise":74,"objection":90,"sub":21},2406256,0.39,[24,25,26,27,28],"530003333303535000005335",[32,33,34,35],1794036487495]