[{"data":1,"prerenderedAt":319},["ShallowReactive",2],{"project-4600572":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":45,"post_text":47,"what":48,"said":70,"maker_in_thread":191,"shape":196,"grid":199,"attempts":281,"same_week":282,"maker_shows":235,"maker_hidden":311,"reader_version":312,"card":313},"4600572","WebcamSwiper","a JS library that watches for hand swipes in the air","title","Show HN: WebcamSwiper - a JS library that watches for hand swipes in the air","https:\u002F\u002Fgithub.com\u002Fiambrandonn\u002FWebcamSwiper","github.com","iambrandonn",1349150658,2012,47,35,497,1677,30,"shown","languages","javascript library","library",[24,25,26,27,28],"gesture recognition","webcam","getusermedia","javascript","hand swipe","mixed",0.135,{"positive":32,"neutral":33,"mixed":34,"critical":35},9,6,7,5,27,{"execution":38,"design":40,"idea":42,"privacy":44},{"positive":39,"critical":35},8,{"positive":41,"critical":41},0,{"positive":43,"critical":41},1,{"positive":41,"critical":41},[46,46,46,43,46,46,46,41,43,35,43,35,35,35,35,35,35,43,35,41,41,46,46,41,46,46,46,46,41,41,35,46,41,41,43],3,null,{"problem":49,"audience":47,"pricing":47,"motivation":47,"time_to_build":47,"stack":55,"openness":68,"stage":69,"team_size":68},{"value":50,"source":51,"evidence":52},"Detects hand swipe gestures in the air using the webcam","maker",[53],{"id":54},"post",[56,60],{"value":57,"source":51,"evidence":58},"JavaScript",[59],{"id":54},{"value":61,"source":62,"evidence":63},"getUserMedia (WebRTC)","commenter",[64],{"id":65,"by":66,"text":67},"4600645","tylerlh","Same issue, browser and hardware here. This is the error I see in my js console: Uncaught Error: INDEX_SIZE_ERR: DOM Exception 1 Awesome idea and use of getUserMedia though.","unknown","prototype",{"praise":71,"objections":100,"requests":140,"questions":152,"alternatives":176},[72,88],{"value":73,"source":62,"evidence":74},"Cool idea and impressive use of getUserMedia in pure JS",[75,76,80,84],{"id":65,"by":66,"text":67},{"id":77,"by":78,"text":79},"4600763","batgaijin","That is damn cool; I didn't even know there was an api for pure js. I thought you were stuck using flash if you wanted to use the camera.",{"id":81,"by":82,"text":83},"4601774","prezjordan","Wow, had a VERY nice experience with this - I am impressed. MacBook Air, OSX 10.8 on latest version of Chrome. Well done, hope I can plug this into a pet project someday.",{"id":85,"by":86,"text":87},"4600766","TeMPOraL","Worked for me. Amazing! A very nice experience. (Chrome, Windows 7) It's also nice to know that you can do this kind of things in JS.",{"value":89,"source":62,"evidence":90},"Worked well for some users after refresh",[91,95,96],{"id":92,"by":93,"text":94},"4600701","treelovinhippie","Worked for me after a refresh. A little buggy, but very cool. Imagine putting this on audio\u002Fvideo playlists for a simple skip feature.",{"id":81,"by":82,"text":83},{"id":97,"by":98,"text":99},"4600917","whatusername","Demo worked for me on Chrome 22 \u002F Lenovo w510 \u002F Win 7.",[101,121,129],{"value":102,"source":62,"evidence":103},"Demo failed for many users in Chrome on MacBook with INDEX_SIZE_ERR",[104,108,109,113,117],{"id":105,"by":106,"text":107},"4600636","tomasien","Cool idea! Demo didn't work for me on latest version of Chrome and a brand new MacBook Air though, and gave it a pretty good shot. I'm sure you didn't put this up without testing…",{"id":65,"by":66,"text":67},{"id":110,"by":111,"text":112},"4600720","nirmal","Same error MacBook Air and Chrome 23.0.1271.10 dev",{"id":114,"by":115,"text":116},"4600735","colmvp","Same, using 22.0.1229.79 on Mountain Lion.",{"id":118,"by":119,"text":120},"4600854","nu2ycombinator","It did not work on my macbook pro with Chrome browser.",{"value":122,"source":62,"evidence":123},"Picks up non-swipe movements and is buggy",[124,128],{"id":125,"by":126,"text":127},"4607403","asher_","I love this, really cool. I found it a little buggy too, in that it picked up non-swipe movements quite a lot, but an awesome demo nonetheless. Are you planning on continuing to…",{"id":92,"by":93,"text":94},{"value":130,"source":62,"evidence":131},"Swipe back to start position registers as opposite swipe",[132,136],{"id":133,"by":134,"text":135},"4600885","chacham15","The demo was awesome! The only thing is that after i swipe left with my right hand, I move my hand back to the normal position which appears to the camera to be a swipe to the…",{"id":137,"by":138,"text":139},"4600998","bhoomit","This happened for me as well.",[141,148],{"value":142,"source":62,"evidence":143},"Show webcam frames with recognition overlay to aid debugging",[144],{"id":145,"by":146,"text":147},"4600718","kevingadd","Same problem here. For a demo like this where failures can be caused by user error instead of app error, you should consider overlaying a tiny rectangle on screen that shows the…",{"value":149,"source":62,"evidence":150},"Use hand orientation to ignore return movement",[151],{"id":133,"by":134,"text":135},[153,172],{"value":154,"source":62,"evidence":155},"Could the library be exploited to access webcams without permission?",[156,160,164,168],{"id":157,"by":158,"text":159},"4600724","samstave","Question: how could this be exploited to provide unknowing access to a webcams via modifying this .js to run on a subjectively trusted page? Forgive me if I am being naive but…",{"id":161,"by":162,"text":163},"4600736","jmaicher","Well, it's opt-in. So unknowing access is (at least without further actions) not possible. getUserMedia: \"Prompts the user for permission to use their Web cam or other video or…",{"id":165,"by":166,"text":167},"4600913","franze",">Possibly if someone managed to include it on a page you had already given permission. nope, the \"use webcam\" permission is per \"getUserMedia\" call, so 2 getUserMedia calls = 2…",{"id":169,"by":170,"text":171},"4602396","showerst","The 'allow getusermedia' policy is handled by the browser, not javascript. It's possible that some day there will be a browser bug for bypassing it, but you can't just write…",{"value":173,"source":62,"evidence":174},"Will development continue?",[175],{"id":125,"by":126,"text":127},[177,184],{"value":178,"source":62,"evidence":179},"Crunchfish Active3D",[180],{"id":181,"by":182,"text":183},"4601314","orjan","Without having tried it, this sounds a bit like Crunchfish's Active3D[1]. [1] www.crunchfish.com",{"value":185,"source":62,"evidence":186},"flutterapp.com",[187],{"id":188,"by":189,"text":190},"4601104","kaolinite","Like https:\u002F\u002Fflutterapp.com\u002F did? :-)",{"comments":43,"answered":41,"key":192},[193],{"id":194,"text":195},"4600872","I just made a small change that may help (thanks to evanc). If you have the error again, try refreshing.",{"commenters":197,"max_depth":35,"maker_replies":43,"first_comment_mins":15,"lifespan_hours":198},33,34,[200,202,203,205,207,211,214,215,217,220,224,225,228,229,232,233,237,240,243,246,250,253,257,258,260,262,263,265,268,270,271,272,274,277,279],[105,41,46,201,106,41],"project\u002Fmixed\u002Fexecution",[65,41,46,201,66,41],[145,41,46,204,146,41],"project\u002Fneutral\u002Fdesign",[110,41,43,206,111,41],"project\u002Fcritical\u002Fexecution",[208,41,46,209,210,41],"4600646","project\u002Fmixed\u002Fdesign","ecaroth",[212,41,46,204,213,41],"4600817","jrnkntl",[92,41,46,201,93,41],[188,41,41,216,189,41],"other\u002Fneutral\u002Fidea",[218,41,43,206,219,41],"4600715","hunterowens",[221,41,35,222,223,41],"4600809","project\u002Fpositive\u002Fexecution","serialpreneur",[114,41,43,206,115,41],[226,41,35,222,227,41],"4600878","sumukh1",[97,41,35,222,98,41],[230,41,35,231,106,41],"4601667","maker\u002Fpositive\u002Fexecution",[81,43,35,222,82,41],[234,235,35,222,236,41],"4600861",2,"aeurielesn",[238,235,35,222,239,41],"4600880","pingu",[241,46,43,206,242,41],"4600747","cstrat",[77,244,35,245,78,41],4,"project\u002Fpositive\u002Fidea",[247,35,41,248,249,41],"4600956","other\u002Fneutral\u002Fnone","pooriaazimi",[251,35,41,248,252,41],"4600967","clockstrikesten",[254,33,46,255,256,41],"4601420","project\u002Fmixed\u002Fidea","darklajid",[133,34,46,201,134,41],[137,34,41,259,138,41],"commenter\u002Fneutral\u002Fexecution",[157,39,46,261,158,41],"project\u002Fneutral\u002Fprivacy",[161,39,46,261,162,41],[264,39,46,261,158,41],"4600756",[266,39,46,261,267,41],"4600775","mithras",[165,39,41,269,166,41],"commenter\u002Fneutral\u002Fprivacy",[169,39,41,269,170,41],[85,32,35,222,86,41],[125,273,46,201,126,41],10,[194,275,41,276,11,43],11,"maker\u002Fneutral\u002Fexecution",[181,278,41,216,182,41],12,[118,280,43,206,119,41],13,[],[283,288,293,297,302,307],{"id":284,"name":285,"points":286,"category":287},"4601366","foldable.me",240,"web_saas",{"id":289,"name":290,"points":291,"category":292},"4584865","Bubbles",188,"games",{"id":294,"name":295,"points":296,"category":292},"4604099","LinkDAQ",184,{"id":298,"name":299,"points":300,"category":301},"4602377","tl;dr",131,"productivity",{"id":303,"name":304,"points":305,"category":306},"4593823","What's Your Browser's Age?",56,"dev_tools",{"id":308,"name":309,"points":310,"category":20},"4581948","Programming Languages Influence Network",51,false,"v2",{"id":314,"name":5,"line":6,"ai":311,"cat":20,"year":13,"points":14,"comments":15,"rec":29,"s":315,"top":18,"kw":316,"maker":11,"domain":10,"tier":19,"attempts":41,"strip":317,"url":9,"mix":318,"praise":73,"objection":102,"sub":21},4600572,0.14,[24,25,26,27,28],"33313330151555555150033033330053001",[32,33,34,35],1794036499992]