[{"data":1,"prerenderedAt":341},["ShallowReactive",2],{"project-6053211":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":27,"sentiment":28,"stance_mix":29,"scored_comments":34,"aspects":35,"strip":43,"post_text":44,"what":45,"said":93,"maker_in_thread":196,"shape":204,"grid":208,"attempts":303,"same_week":304,"maker_shows":299,"maker_hidden":333,"reader_version":334,"card":335},"6053211","Q.js","A library for modern web apps","title","Show HN: Introducing Q.js, a library for modern web apps","https:\u002F\u002Fgithub.com\u002FEGreg\u002FQ.js","github.com","EGreg",1373994876,2013,44,39,572,1739,33,"shown","languages","javascript library","library",[21,24,25,26],"web app framework","front end sdk","async callbacks","roasted",-0.571,{"positive":30,"neutral":31,"mixed":32,"critical":33},1,5,0,21,27,{"idea":36,"privacy":38,"docs":40,"design":41},{"positive":32,"critical":37},13,{"positive":32,"critical":39},3,{"positive":32,"critical":39},{"positive":32,"critical":42},2,[39,30,39,32,30,32,30,32,30,30,30,32,30,32,30,30,30,30,30,32,30,30,32,39,30,39,30,32,30,32,30,39,30,32,30,32,31,30,32],null,{"problem":46,"audience":56,"pricing":44,"motivation":60,"time_to_build":44,"stack":67,"openness":90,"stage":91,"team_size":92},{"value":47,"source":48,"evidence":49},"Provides reusable tools, virtual pages via AJAX, caching, events and middleware for building web apps","maker",[50,53],{"id":51,"by":11,"text":52},"6053856","It has some minor overlap with jQuery but literally it is built to provide a unified solution to all the \"other\" challenges that an WEB\u002FMOBILE WEB APP developer faces. Such as:…",{"id":54,"by":11,"text":55},"6055187","I completely agree. I just wanted to put out one file from our framework and get some early feedback. But Q.getter for example is just that easy. Try this: 1) Include Q.js 2)…",{"value":57,"source":48,"evidence":58},"Web and mobile web app developers",[59],{"id":51,"by":11,"text":52},{"value":61,"source":48,"evidence":62},"Company framework's front-end part released for early feedback",[63,64],{"id":54,"by":11,"text":55},{"id":65,"by":11,"text":66},"6053227","I've open-sourced one part of our company's Q framework -- the library we use on the front end. It contains a lot of stuff that took us a while to design and write and test on…",[68,72,78,82,86],{"value":69,"source":48,"evidence":70},"JavaScript",[71],{"id":65,"by":11,"text":66},{"value":73,"source":48,"evidence":74},"PHP",[75],{"id":76,"by":11,"text":77},"6054812","That's a good recommendation. Maybe we'll call it the Qbix library. It's just that our entire large framework (which primarily runs on PHP and Node.js) is called Q, and what I…",{"value":79,"source":48,"evidence":80},"Node.js",[81],{"id":76,"by":11,"text":77},{"value":83,"source":48,"evidence":84},"socket.io",[85],{"id":51,"by":11,"text":52},{"value":87,"source":48,"evidence":88},"PhoneGap",[89],{"id":51,"by":11,"text":52},"open_source","launched","company",{"praise":94,"objections":107,"requests":157,"questions":175,"alternatives":183},[95],{"value":96,"source":97,"evidence":98},"Open-sourcing useful tools is good","commenter",[99,103],{"id":100,"by":101,"text":102},"6054536","ricardobeat","Releasing useful tools\u002Flibs as open-source is always a good thing, so congratulations and thank you. However, I believe monolithic libraries are on the way out. Having small,…",{"id":104,"by":105,"text":106},"6054110","maxsavin","Nice work Greg!",[108,127,139,150],{"value":109,"source":97,"evidence":110},"Name clashes with the well-known Q promise library",[111,115,119,123],{"id":112,"by":113,"text":114},"6053305","enobrev","This looks like a very interesting library. Thank you for sharing it. In case you didn't already know, there is already a very well known javascript async library called Q.…",{"id":116,"by":117,"text":118},"6053296","nicksergeant","There's a very well-known JS library already named \"Q\", here: https:\u002F\u002Fgithub.com\u002Fkriskowal\u002Fq I'd suggest a name change.",{"id":120,"by":121,"text":122},"6053331","camus","Change the name, there is already a well known lib named q which deals with promises and and async .",{"id":124,"by":125,"text":126},"6054254","tlrobinson","As a long time user of the original Q (which has been around since at least 2009 [1]), I'd also suggest picking a different name for another reason: searchability. [1]…",{"value":128,"source":97,"evidence":129},"Monolithic library covers too many unrelated features",[130,131,135],{"id":100,"by":101,"text":102},{"id":132,"by":133,"text":134},"6053383","aconz2","The internet does not need another 5000 sloc JS library attempting to solve every problem in one file. Please put your effort towards improving upon other, focused libs.",{"id":136,"by":137,"text":138},"6054808","ndnichols","Is there a cohesive idea or approach here? This just feels like a bunch of unrelated utility functions. And there's basically no documentation, right? The readme description of…",{"value":140,"source":97,"evidence":141},"Insecure unsalted MD5 password advice is dangerous",[142,146],{"id":143,"by":144,"text":145},"6054021","dlsym","\"Q.md5 - to one-way-encode passwords etc. in insecure websites before sending to the server\" This is a very bad advice which leads to a false sense of security: 1. A fast hash…",{"id":147,"by":148,"text":149},"6053976","blutack","I agree, it's a neat looking library. ``` Q.md5 - to one-way-encode passwords etc. in insecure websites before sending to the server ``` However, I'm not sure promoting unsalted…",{"value":151,"source":97,"evidence":152},"Lack of documentation",[153,154],{"id":136,"by":137,"text":138},{"id":155,"by":121,"text":156},"6053337","doesnt mean anything and the readme file fails to explain what does that lib do. EDIT : looks like a prototype\u002Fdojo utility library , not a framework.",[158,167,171],{"value":159,"source":97,"evidence":160},"Rename the library",[161,162,163],{"id":116,"by":117,"text":118},{"id":120,"by":121,"text":122},{"id":164,"by":165,"text":166},"6054004","jjsz","This is where you ask yourself \"would I like if someone releases a product with the exact same name as my company's and moved us to the second page of Google?\".",{"value":168,"source":97,"evidence":169},"Split into smaller libraries",[170],{"id":100,"by":101,"text":102},{"value":172,"source":97,"evidence":173},"Add real documentation and tutorials",[174],{"id":136,"by":137,"text":138},[176],{"value":177,"source":97,"evidence":178},"What does Q actually do",[179],{"id":180,"by":181,"text":182},"6053320","j_baker","What does Q do? Apart from providing a \"library for modern web apps\" (whatever that means).",[184,192],{"value":185,"source":97,"evidence":186},"Original Q promise library by kriskowal",[187,188],{"id":112,"by":113,"text":114},{"id":189,"by":190,"text":191},"6054395","cowbertvonmoo","I published Q in 2009. I based it on another project by the same name and API that was published by Tyler Close in 2007.…",{"value":193,"source":97,"evidence":194},"jQuery, Backbone, Underscore",[195],{"id":100,"by":101,"text":102},{"comments":197,"answered":42,"key":198},9,[199,200,203],{"id":76,"text":77},{"id":201,"text":202},"6054814","You are most likely right. I should explain instead that the md5 should be used to verify HMACs sent by a service. However, when sending passwords over the wire, the client…",{"id":65,"text":66},{"commenters":205,"max_depth":206,"maker_replies":197,"first_comment_mins":39,"lifespan_hours":207},29,6,25,[209,211,215,216,218,220,222,225,227,228,231,234,236,239,241,245,248,249,252,255,257,258,262,265,268,269,271,272,273,274,275,277,281,285,290,291,295,298,300],[112,32,39,210,113,32],"project\u002Fneutral\u002Fidea",[212,32,30,213,214,32],"6053733","project\u002Fcritical\u002Fidea","bhouston",[189,32,39,210,190,32],[76,32,32,217,11,30],"maker\u002Fneutral\u002Fidea",[143,30,30,219,144,32],"project\u002Fcritical\u002Fprivacy",[201,30,32,221,11,30],"maker\u002Fneutral\u002Fprivacy",[223,30,30,219,224,32],"6054888","cmircea",[65,42,32,226,11,30],"maker\u002Fpositive\u002Fidea",[116,42,30,213,117,32],[229,42,30,213,230,32],"6053372","stormbrew",[232,42,30,213,233,32],"6053494","lancefisher",[235,42,32,210,11,30],"6053639",[237,42,30,213,238,32],"6053758","alanh",[240,42,32,210,11,30],"6053884",[242,42,30,243,244,32],"6053973","maker\u002Fcritical\u002Fidea","jbigelow76",[246,42,30,213,247,32],"6053978","shardling",[164,42,30,213,165,32],[250,42,30,213,251,32],"6054038","tudborg",[253,42,30,213,254,32],"6053880","shintoist",[256,42,32,210,11,30],"6054105",[124,42,30,213,125,32],[259,42,30,260,261,32],"6053510","project\u002Fcritical\u002Fdocs","devgutt",[263,42,32,264,11,30],"6053631","maker\u002Fneutral\u002Fdocs",[266,42,39,267,238,32],"6059310","project\u002Fneutral\u002Fdocs",[147,39,30,219,148,32],[180,270,39,267,181,32],4,[155,270,30,260,121,32],[51,270,32,210,11,30],[136,270,30,260,137,32],[54,270,32,264,11,30],[100,31,30,276,101,32],"project\u002Fcritical\u002Fdesign",[278,206,39,279,280,32],"6054144","project\u002Fneutral\u002Fdesign","nawitus",[282,283,30,276,284,32],"6054117",7,"joshontheweb",[286,287,32,288,289,32],"6053419",8,"other\u002Fneutral\u002Fnone","robodale",[132,197,30,213,133,32],[292,197,32,293,294,32],"6053481","commenter\u002Fneutral\u002Fnone","pearjuice",[104,296,31,297,105,32],10,"maker\u002Fpositive\u002Fnone",[120,299,30,213,121,32],11,[301,299,32,293,302,32],"6053847","codereflection",[],[305,310,314,318,323,328],{"id":306,"name":307,"points":308,"category":309},"6025221","Raspberry Picrowave",423,"hardware",{"id":311,"name":312,"points":313,"category":20},"6037170","Minified.js",158,{"id":315,"name":316,"points":313,"category":317},"6059481","Distelli","infrastructure",{"id":319,"name":320,"points":321,"category":322},"6046227","WakaTime",126,"dev_tools",{"id":324,"name":325,"points":326,"category":327},"6038053","NameMonk",85,"web_saas",{"id":329,"name":330,"points":331,"category":332},"6025579","stps",83,"productivity",false,"v2",{"id":336,"name":5,"line":6,"ai":333,"cat":20,"year":13,"points":14,"comments":15,"rec":27,"s":337,"top":18,"kw":338,"maker":11,"domain":10,"tier":19,"attempts":32,"strip":339,"url":9,"mix":340,"praise":96,"objection":109,"sub":21},6053211,-0.57,[21,24,25,26],"313010101110101111101103131010131010510",[30,31,32,33],1794036508212]