[{"data":1,"prerenderedAt":207},["ShallowReactive",2],{"project-1805623":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":34,"aspects":35,"strip":41,"post_text":42,"what":43,"said":77,"maker_in_thread":133,"shape":139,"grid":144,"attempts":172,"same_week":173,"maker_shows":37,"maker_hidden":199,"reader_version":200,"card":201},"1805623","A\u002FBingo for PHP","title","Show HN: A\u002FBingo for PHP","http:\u002F\u002Fgithub.com\u002Fwaverz\u002Fcog\u002Fblob\u002Fmaster\u002Fcog-guestbook\u002Fengine\u002Fcog_splittest.php","github.com","sdrinf",1287445691,2010,33,12,52,370,15,"shown","dev_tools","a\u002Fb testing library","library",[23,24,25,26],"a\u002Fb testing","php","split testing","redis","curious",0.053,{"positive":30,"neutral":31,"mixed":32,"critical":33},3,5,0,2,10,{"idea":36,"design":38,"execution":39,"performance":40},{"positive":37,"critical":32},1,{"positive":37,"critical":37},{"positive":32,"critical":37},{"positive":32,"critical":32},[31,32,37,30,31,31,32,37,30,30,30,30],null,{"problem":44,"audience":55,"pricing":42,"motivation":60,"time_to_build":42,"stack":64,"openness":75,"stage":76,"team_size":76},{"value":45,"source":46,"evidence":47},"Running A\u002FB tests in PHP web applications","maker",[48,51],{"id":49,"by":10,"text":50},"1805632","Cog is a little webdev framework of mine, a work-in-progress steal from spending couple of years in different companies. Since A\u002FB testing is considered pretty fundamental to…",{"id":52,"by":53,"text":54},"1805726","patio11","Thanks -- PHP developers need better alternatives for A\u002FB testing than Google Website Optimizer. Your code is about the minimum viable A\u002FB testing library for a developer: you…",{"value":56,"source":57,"evidence":58},"PHP web developers","commenter",[59],{"id":52,"by":53,"text":54},{"value":61,"source":46,"evidence":62},"Clients need A\u002FB testing; shares an implementation from years of client work",[63],{"id":49,"by":10,"text":50},[65,69],{"value":66,"source":46,"evidence":67},"PHP",[68],{"id":49,"by":10,"text":50},{"value":70,"source":57,"evidence":71},"Redis",[72],{"id":73,"by":53,"text":74},"1806536","I try to keep most of the A\u002FBingo work in a cache store (Redis, by choice) because sites with traffic two orders of magnitude or so higher than mine would blow up if they used…","open_source","unknown",{"praise":78,"objections":89,"requests":108,"questions":113,"alternatives":121},[79,83],{"value":80,"source":57,"evidence":81},"Good minimal starting point for learning A\u002FB testing",[82],{"id":52,"by":53,"text":54},{"value":84,"source":57,"evidence":85},"Identity handling across users is useful",[86],{"id":87,"by":53,"text":88},"1806726","A\u002FBingo has a notion of \"identity\" (a string which is unique among users of an application). If you don't have one, you get one assigned randomly. Your identity gets associated…",[90,98,104],{"value":91,"source":57,"evidence":92},"Implementation choices like global state and tight coupling will cause maintenance pain",[93,97],{"id":94,"by":95,"text":96},"1805700","Nycto","> review is more, than welcome. You opened the door, so here is my feedback: - You never have to explicitly define any of the super globals as global... you can delete any line…",{"id":52,"by":53,"text":54},{"value":99,"source":57,"evidence":100},"Possible race condition when creating new tests",[101],{"id":102,"by":53,"text":103},"1805803","Your mileage may vary, and I don't guarantee I'm reading your code right, but: 1) You will find it useful to be able to coerce A\u002FB test values, particularly in testing and…",{"value":105,"source":57,"evidence":106},"Same user on multiple devices can get different variants",[107],{"id":102,"by":53,"text":103},[109],{"value":110,"source":46,"evidence":111},"Code review and feedback",[112],{"id":49,"by":10,"text":50},[114],{"value":115,"source":57,"evidence":116},"Why Redis instead of MongoDB or MySQL for storage",[117],{"id":118,"by":119,"text":120},"1806525","armandososa","This is an honest question: is REDIS the best option for storing A\u002FB tests or is just a matter of taste? MongoDB or even MySql could work?",[122,126],{"value":123,"source":57,"evidence":124},"Google Website Optimizer",[125],{"id":52,"by":53,"text":54},{"value":127,"source":57,"evidence":128},"Vanity (Ruby A\u002FB testing) and a PHP port using Redis",[129],{"id":130,"by":131,"text":132},"1805787","aliasaria","As an alternative, I wrote a port of Vanity for PHP that we use for A\u002FB testing. It uses redis to store data http:\u002F\u002Fgithub.com\u002Faliasaria\u002FPHP-redis-A-B-Testing",{"comments":33,"answered":32,"key":134},[135,138],{"id":136,"text":137},"1805737","Thanks. Would you mind pointing out implementation choices, that will come back biting us down the road? :)",{"id":49,"text":50},{"commenters":140,"max_depth":141,"maker_replies":33,"first_comment_mins":142,"lifespan_hours":143},7,6,4,19,[145,147,149,151,155,157,160,162,164,168,169,171],[52,32,31,146,53,32],"project\u002Fpositive\u002Fidea",[136,32,32,148,10,37],"maker\u002Fneutral\u002Fexecution",[102,32,37,150,53,32],"project\u002Fcritical\u002Fdesign",[152,32,30,153,154,32],"1806707","project\u002Fneutral\u002Fdesign","tomjen3",[87,32,31,156,53,32],"project\u002Fpositive\u002Fdesign",[158,32,31,159,154,32],"1808324","maker\u002Fpositive\u002Fnone",[49,37,32,161,10,37],"project\u002Fneutral\u002Fidea",[94,37,37,163,95,32],"maker\u002Fcritical\u002Fexecution",[165,37,30,166,167,32],"1806109","project\u002Fneutral\u002Fexecution","lmz",[130,33,30,161,131,32],[118,33,30,170,119,32],"project\u002Fneutral\u002Fperformance",[73,33,30,170,53,32],[],[174,179,184,189,192,196],{"id":175,"name":176,"points":177,"category":178},"1804261","Autotag",274,"ai",{"id":180,"name":181,"points":182,"category":183},"1791880","Glancely",18,"web_saas",{"id":185,"name":186,"points":187,"category":188},"1792780","too long; didn't read",8,"productivity",{"id":190,"name":191,"points":187,"category":183},"1799000","cmpgns.net",{"id":193,"name":194,"points":30,"category":195},"1791677","Instant Youtube playlist","creative",{"id":197,"name":198,"points":30,"category":19},"1806186","Tuxtorial",false,"v2",{"id":202,"name":5,"line":5,"ai":199,"cat":19,"year":12,"points":13,"comments":14,"rec":27,"s":203,"top":17,"kw":204,"maker":10,"domain":9,"tier":18,"attempts":32,"strip":205,"url":8,"mix":206,"praise":80,"objection":91,"sub":20},1805623,0.05,[23,24,25,26],"501355013333",[30,31,32,33],1793990868109]