[{"data":1,"prerenderedAt":368},["ShallowReactive",2],{"project-6112349":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":46,"post_text":47,"what":48,"said":66,"maker_in_thread":184,"shape":194,"grid":199,"attempts":328,"same_week":333,"maker_shows":33,"maker_hidden":360,"reader_version":361,"card":362},"6112349","boxcars","Easy-to-configure Web Server in Go","title","Show HN: Easy-to-configure Web Server in Go ","http:\u002F\u002Fgithub.com\u002Fazer\u002Fboxcars","github.com","oakaz",1374917593,2013,106,56,214,1739,13,"notable","infrastructure","web server","cli",[24,25,26,27],"go web server","reverse proxy","static file server","configurable server","roasted",-0.429,{"positive":31,"neutral":32,"mixed":33,"critical":34},0,9,2,12,23,{"execution":37,"performance":39,"idea":40,"design":41,"privacy":43,"docs":45},{"positive":31,"critical":38},5,{"positive":31,"critical":31},{"positive":31,"critical":33},{"positive":31,"critical":42},3,{"positive":31,"critical":44},1,{"positive":31,"critical":44},[44,42,44,31,42,31,31,31,31,31,42,31,44,44,44,31,31,31,31,31,42,42,42,44,31,31,42,44,42,44,31,31,31,44,42,31,42,31,44,44],null,{"problem":47,"audience":47,"pricing":47,"motivation":47,"time_to_build":47,"stack":49,"openness":64,"stage":65,"team_size":65},[50,56],{"value":51,"source":52,"evidence":53},"Go","maker",[54],{"id":55},"post",{"value":57,"source":58,"evidence":59},"JSON configuration","commenter",[60],{"id":61,"by":62,"text":63},"6112731","jacques_chester","The point is that it's written in language-du-jour and therefore fascinating and novel. In fairness though, json will probably wind up being a common configuration format anyhow.…","open_source","unknown",{"praise":67,"objections":78,"requests":130,"questions":149,"alternatives":168},[68],{"value":69,"source":58,"evidence":70},"Go version is much easier to write than nginx while performing close to it",[71,75],{"id":72,"by":73,"text":74},"6112914","justinsb","I remain not-entirely-convinced (1) by Go, but things like this are turning the tide. If it is indeed slower than nginx, it is not dramatically so. Considering the amount of time…",{"id":76,"by":73,"text":77},"6113368","I would like to know how the benchmarks are generated, but my point is that it wasn't slower-enough to ignore it, and that's amazing considering how much micro-optimization has…",[79,89,101,112,123],{"value":80,"source":58,"evidence":81},"Runs as root or needs high port; no user ID dropping, which the maker later addressed with a -secure option",[82,86],{"id":83,"by":84,"text":85},"6112700","laumars","A word of warning guys, I've had a look through the code and unless I've missed the obvious, there's nothing in there to change user ID; which means this would either need to be…",{"id":87,"by":11,"text":88},"6114052","just implemented -secure option for this purpose; https:\u002F\u002Fgithub.com\u002Fazer\u002Fboxcars\u002Fblob\u002Fmaster\u002Fsecure.go usage example; http:\u002F\u002Fgithub.com\u002Fazer\u002Fboxcars#security thanks for the…",{"value":90,"source":58,"evidence":91},"Benchmarks are unclear and may not reflect real workloads",[92,96,100],{"id":93,"by":94,"text":95},"6113108","joebo","Looking at the benchmark (https:\u002F\u002Fgist.github.com\u002Fazer\u002F5955772), which measure suggests that its slower than nginx? I was looking at the transaction rate and the longest…",{"id":97,"by":98,"text":99},"6113968","rdtsc","With benchmarks like this it worth asking 3 questions: * Are they relevant. Does this represent the expected production workload. You could find this is 10x better than nginx at…",{"id":76,"by":73,"text":77},{"value":102,"source":58,"evidence":103},"JSON configuration is too limited for web server config",[104,108],{"id":105,"by":106,"text":107},"6112971","tszming","json format is too limited for a web server configuration if you want to be the nginx alternative. Think about how you would represent conditional statements, how to include and…",{"id":109,"by":110,"text":111},"6112962","harrytuttle","json is fine until your config system needs accurate numeric values.",{"value":113,"source":58,"evidence":114},"Not a true web server; more a reverse proxy with static serving",[115,119],{"id":116,"by":117,"text":118},"6113262","stevekemp","So it's a reverse HTTP proxy, which can also serve files locally? That's an interesting thing, no doubt, but it doesn't feel like a web-server. I wrote a flexible reverse…",{"id":120,"by":121,"text":122},"6112435","RyanZAG","It's technically an alternative, but since it performs worse and has less features you would probably never actually use it as an alternative. It should probably be described as…",{"value":124,"source":58,"evidence":125},"No HTTPS support found",[126],{"id":127,"by":128,"text":129},"6113290","JoeAcchino","I'm very interested in this because this is the kind of web server I was planning to write for my work, but from a quick glance I didn't find HTTPS support. Is HTTPS supported or…",[131,135,142],{"value":132,"source":58,"evidence":133},"Add HTTPS support",[134],{"id":127,"by":128,"text":129},{"value":136,"source":58,"evidence":137},"Independent security review",[138],{"id":139,"by":140,"text":141},"6112433","alexchamberlain","Nice to see an alternative on the cards. Of course, we need some independent security reviews before this can be used seriously.",{"value":143,"source":58,"evidence":144},"Support for Windows or non-GNU\u002FLinux platforms",[145],{"id":146,"by":147,"text":148},"6115759","pjmlp","Seems to be GNU\u002FLinux only.",[150,154,161],{"value":151,"source":58,"evidence":152},"How are the benchmarks generated?",[153],{"id":76,"by":73,"text":77},{"value":155,"source":58,"evidence":156},"How are custom 404 pages served with correct status codes?",[157],{"id":158,"by":159,"text":160},"6114383","simonw","The custom 404 page example in the readme looked incomplete - how do you ensure those pages are served with the correct HTTP status code?",{"value":162,"source":58,"evidence":163},"Is this a common Go convention to nest main package in a subdirectory?",[164],{"id":165,"by":166,"text":167},"6112881","pandeiro","Code organization question: is this a common convention in Go, to nest the main package in a subdirectory and put all of the 'modules' in different files but with the same…",[169,174,180],{"value":170,"source":58,"evidence":171},"nginx",[172,173],{"id":72,"by":73,"text":74},{"id":93,"by":94,"text":95},{"value":175,"source":58,"evidence":176},"mod_proxy",[177],{"id":178,"by":117,"text":179},"6113472","Honestly I never have. Because in practise it is fast enough that it just didn't come up. I'm sure that if I were to pimp the project properly then that would be a good thing to…",{"value":181,"source":58,"evidence":182},"Mongrel2",[183],{"id":61,"by":62,"text":63},{"comments":185,"answered":33,"key":186},6,[187,190,191],{"id":188,"text":189},"6112774","thanks! would you mind sending a pull request to https:\u002F\u002Fgithub.com\u002Fazer\u002Fboxcars\u002Fblob\u002Fmaster\u002Fboxcars\u002Fboxcars.go#L16 ?",{"id":87,"text":88},{"id":192,"text":193},"6114736","yeah I saw it, thanks so much. I like this kind of single-purpose small libraries. The only thing is, I hesitate to depend on other people's repositories since they may get moved…",{"commenters":195,"max_depth":196,"maker_replies":185,"first_comment_mins":197,"lifespan_hours":198},31,8,50,65,[200,202,206,208,212,215,216,220,222,224,227,229,232,234,236,240,241,243,245,248,250,252,254,256,259,261,264,267,270,272,273,275,276,278,280,281,283,287,288,291,293,295,298,300,302,304,306,309,311,314,316,317,320,322,324,326],[83,31,44,201,84,31],"project\u002Fcritical\u002Fexecution",[203,31,42,204,205,31],"6112744","project\u002Fneutral\u002Fexecution","1331",[207,31,44,201,84,31],"6112770",[209,31,31,210,211,31],"6113173","commenter\u002Fneutral\u002Fnone","peterbotond",[213,31,31,210,214,31],"6113630","tptacek",[146,31,42,204,147,31],[217,31,31,218,219,31],"6115795","other\u002Fneutral\u002Fnone","coolsunglasses",[188,31,31,221,11,44],"maker\u002Fpositive\u002Fnone",[223,31,31,210,84,31],"6112851",[225,31,31,210,226,31],"6113760","ghotli",[228,31,31,218,84,31],"6114103",[230,31,31,210,231,31],"6113318","SEJeff",[233,31,31,210,84,31],"6113350",[87,31,31,235,11,44],"project\u002Fpositive\u002Fexecution",[237,31,42,238,239,31],"6114465","maker\u002Fneutral\u002Fexecution","sarnowski",[192,31,31,210,11,44],[242,31,44,201,239,31],"6114431",[244,31,31,210,84,31],"6115508",[246,31,44,201,247,31],"6115363","chrissnell",[249,31,44,201,84,31],"6115514",[72,44,42,251,73,31],"project\u002Fmixed\u002Fperformance",[253,44,31,218,110,31],"6112956",[255,44,31,218,73,31],"6113336",[257,44,31,218,258,31],"6113496","gngeal",[260,44,31,218,73,31],"6113541",[262,44,31,218,263,31],"6113545","pcwalton",[265,44,31,218,266,31],"6125037","dragonwriter",[268,44,31,218,269,31],"6114424","pkulak",[93,44,42,271,94,31],"project\u002Fneutral\u002Fperformance",[76,44,42,271,73,31],[274,44,31,218,98,31],"6113984",[97,44,42,271,98,31],[116,33,44,277,117,31],"project\u002Fcritical\u002Fidea",[279,33,31,210,73,31],"6113375",[178,33,31,210,117,31],[282,33,31,271,11,44],"6113727",[284,42,42,285,286,31],"6112426","project\u002Fneutral\u002Fidea","Uchikoma",[120,42,44,277,121,31],[289,42,31,290,11,44],"6112448","maker\u002Fneutral\u002Fnone",[61,42,42,292,62,31],"project\u002Fmixed\u002Fidea",[109,42,44,294,110,31],"project\u002Fcritical\u002Fdesign",[296,42,31,210,297,31],"6113865","shuzchen",[299,42,31,210,110,31],"6114004",[301,42,31,210,297,31],"6115359",[303,42,31,210,110,31],"6115723",[305,42,31,210,297,31],"6116102",[307,42,44,294,308,31],"6114331","stock_toaster",[310,42,31,218,110,31],"6114595",[127,312,42,313,128,31],4,"project\u002Fneutral\u002Fdesign",[315,312,31,210,11,44],"6113704",[165,38,42,313,166,31],[318,38,31,218,319,31],"6112918","redbad",[321,38,31,218,239,31],"6114518",[139,185,44,323,140,31],"project\u002Fcritical\u002Fprivacy",[105,325,44,294,106,31],7,[158,196,44,327,159,31],"project\u002Fcritical\u002Fdocs",[329,332],{"id":330,"t":331,"points":33,"comments":31},"6013733",1373389365,{"id":4,"t":12,"points":14,"comments":15},[334,338,343,348,352,357],{"id":335,"name":336,"points":337,"category":20},"6128700","CoreOS",417,{"id":339,"name":340,"points":341,"category":342},"6133796","GearSketch",201,"learning_science",{"id":344,"name":345,"points":346,"category":347},"6114023","blinklink.me",143,"productivity",{"id":349,"name":350,"points":351,"category":342},"6134789","Bitcast.io",82,{"id":353,"name":354,"points":355,"category":356},"6119797","git-deliver",66,"dev_tools",{"id":358,"name":359,"points":198,"category":347},"6134616","Skipper",false,"v2",{"id":363,"name":5,"line":6,"ai":360,"cat":20,"year":13,"points":14,"comments":15,"rec":28,"s":364,"top":18,"kw":365,"maker":11,"domain":10,"tier":19,"attempts":33,"strip":366,"url":9,"mix":367,"praise":69,"objection":80,"sub":21},6112349,-0.43,[24,25,26,27],"1310300000301110000033310031310001303011",[31,32,33,34],1793990896540]