[{"data":1,"prerenderedAt":299},["ShallowReactive",2],{"project-3393118":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":45,"post_text":46,"what":47,"said":102,"maker_in_thread":185,"shape":195,"grid":199,"attempts":259,"same_week":260,"maker_shows":32,"maker_hidden":291,"reader_version":292,"card":293},"3393118","logger.conceptis.org \u002F logmon","My weekend project, realtime log viewer in Flask","title","Show HN: My weekend project, realtime log viewer in Flask","http:\u002F\u002Flogger.conceptis.org\u002F","logger.conceptis.org","llambda",1324914669,2011,58,26,218,1097,20,"notable","dev_tools","log viewer","web_app",[24,25,26,27],"realtime log viewer","flask log monitor","tail logs in browser","juggernaut socketio","debated",-0.198,{"positive":31,"neutral":32,"mixed":33,"critical":34},5,4,2,8,19,{"execution":37,"idea":40,"design":41,"performance":43,"privacy":44},{"positive":38,"critical":39},0,3,{"positive":33,"critical":38},{"positive":42,"critical":42},1,{"positive":38,"critical":38},{"positive":38,"critical":32},[38,39,38,38,39,39,42,38,31,39,39,42,38,31,38,31,31,42,38,31,42,42,42,42,42,39],null,{"problem":48,"audience":46,"pricing":46,"motivation":57,"time_to_build":46,"stack":66,"openness":99,"stage":100,"team_size":101},{"value":49,"source":50,"evidence":51},"Watching server log files live in a browser","inferred",[52,54],{"id":53},"post",{"id":55,"by":11,"text":56},"3393194","So if anyone's wondering how this works, it's actually quite simple thanks to juggernaut. I used Flask to build the web app but because it's basically just serving up a page that…",{"value":58,"source":59,"evidence":60},"Weekend project to explore realtime Flask apps","maker",[61,62,63],{"id":53},{"id":55,"by":11,"text":56},{"id":64,"by":11,"text":65},"3393236","Because it's not built in a JS framework such as Node (it just uses those things as a secondary service). Which up until recently was kind of a pain. Juggernaut makes life easier…",[67,71,75,79,83,87,95],{"value":68,"source":59,"evidence":69},"Python",[70],{"id":55,"by":11,"text":56},{"value":72,"source":59,"evidence":73},"Flask",[74],{"id":55,"by":11,"text":56},{"value":76,"source":59,"evidence":77},"gevent",[78],{"id":55,"by":11,"text":56},{"value":80,"source":59,"evidence":81},"juggernaut",[82],{"id":55,"by":11,"text":56},{"value":84,"source":59,"evidence":85},"socket.io",[86],{"id":55,"by":11,"text":56},{"value":88,"source":89,"evidence":90},"Redis","commenter",[91],{"id":92,"by":93,"text":94},"3393220","amix","Why is it that Flask is highlighted when juggernaut, node.js and redis do the realtime communication? :-\u002F",{"value":96,"source":89,"evidence":97},"Node.js",[98],{"id":92,"by":93,"text":94},"open_source","launched","solo",{"praise":103,"objections":129,"requests":153,"questions":165,"alternatives":177},[104,119],{"value":105,"source":89,"evidence":106},"Fun and entertaining to watch",[107,111,115],{"id":108,"by":109,"text":110},"3393214","septnuits","It's fun to watch. You can communicate with your browser agent.",{"id":112,"by":113,"text":114},"3394337","pingswept","Thank you for the entertainment, unknown people of HN. X.X.X.X - - [27\u002FDec\u002F2011:00:26:07 +0000] \"GET \u002Fhey-i-can-send-secret-messages HTTP\u002F1.1\" 404 211 \"-\" \"Mozilla\u002F5.0 (X11;…",{"id":116,"by":117,"text":118},"3393240","jakubw","Nice demo, thanks for enlightening me of juggernaut's existence! If I were to be picky, it's hard to read anything because the scroll position moves to the end even if you…",{"value":120,"source":89,"evidence":121},"Useful for workplace log monitoring",[122,126],{"id":123,"by":124,"text":125},"3393342","joshbaptiste","I can immediately envision some use cases for this RTM at the workplace, yet our log file throughput is extremely high, so I would have to incorporate some type of throttling…",{"id":127,"by":113,"text":128},"3393457","I was planning on writing something like this in the next few weeks for my Flask app that runs on the Rascal (see profile for details), but now I won't have to. Thanks, Max.",[130,145,149],{"value":131,"source":89,"evidence":132},"Cross-site scripting vulnerability in log output",[133,137,141],{"id":134,"by":135,"text":136},"3393303","bflesch","What is really bugging me as a programmer: We live in the 21st century and people still include user-supplied data in their pages as if Cross-Site Scripting (XSS) is totally…",{"id":138,"by":139,"text":140},"3393283","marcuswestin","XSS By bflesch@bf-itservice.de :) nice work",{"id":142,"by":143,"text":144},"3393281","thehodge","Seems to have some XSS vulnerabilities",{"value":146,"source":89,"evidence":147},"Scroll position jumps to end; may miss entries",[148],{"id":116,"by":117,"text":118},{"value":150,"source":89,"evidence":151},"High log throughput would need throttling",[152],{"id":123,"by":124,"text":125},[154,161],{"value":155,"source":89,"evidence":156},"Support for multiple logs",[157],{"id":158,"by":159,"text":160},"3393452","bluemoon","That's pretty cool, hopefully we will have better support for multiple logs soon",{"value":162,"source":89,"evidence":163},"Better scroll handling and efficient tail",[164],{"id":116,"by":117,"text":118},[166],{"value":167,"source":89,"evidence":168},"Can Flask support socket.io given WSGI limits",[169,173],{"id":170,"by":171,"text":172},"3393366","jemeshsu","I understand Flask can not do socketio because it is WSGI app. Any idea if socketio will be supported by WSGI at all?",{"id":174,"by":175,"text":176},"3393445","ak217","In addition to this, I recently discovered that Flask doesn't support Transfer-Encoding: chunked (which is part of the HTTP\u002F1.1 spec), and doesn't fail gracefully either (when…",[178],{"value":179,"source":89,"evidence":180},"multitail over ssh",[181],{"id":182,"by":183,"text":184},"3393336","a_a_r_o_n","Cool. And not to take away from it all, but ... You can do the same or better with multitail locally tailing a remote tail over ssh, and you get multitail's color schemes for…",{"comments":186,"answered":33,"key":187},6,[188,189,192],{"id":55,"text":56},{"id":190,"text":191},"3393379","There was\u002Fis an attempt to do this with gevent via gevent-socketio. However that project seems to have stalled and my last attempt to use it, a couple of weeks ago, did not have…",{"id":193,"text":194},"3393326","You're absolutely right, I overlooked the fact that the log data wasn't being escaped (something that I had realized in a previous chat application I had made last week). A quick…",{"commenters":196,"max_depth":39,"maker_replies":186,"first_comment_mins":197,"lifespan_hours":198},16,17,9,[200,202,204,205,207,209,211,213,214,216,220,222,223,226,228,231,233,238,240,242,243,246,249,252,254,256],[55,38,38,201,11,42],"maker\u002Fneutral\u002Fexecution",[170,38,39,203,171,38],"project\u002Fneutral\u002Fexecution",[190,38,38,203,11,42],[174,38,38,206,175,38],"other\u002Fneutral\u002Fnone",[182,42,39,208,183,38],"project\u002Fmixed\u002Fidea",[158,42,39,210,159,38],"project\u002Fneutral\u002Fdesign",[134,33,42,212,135,38],"project\u002Fcritical\u002Fexecution",[193,33,38,201,11,42],[112,39,31,215,113,38],"project\u002Fpositive\u002Fnone",[217,39,39,218,219,38],"3394344","project\u002Fneutral\u002Fnone","FrankAbagnale",[123,32,39,221,124,38],"project\u002Fmixed\u002Fperformance",[116,31,42,212,117,38],[224,31,38,225,11,42],"3393248","maker\u002Fpositive\u002Fexecution",[127,186,31,227,113,38],"project\u002Fpositive\u002Fidea",[229,186,38,230,11,42],"3393531","maker\u002Fpositive\u002Fnone",[232,186,31,230,113,38],"3393787",[234,235,31,236,237,38],"3393148",7,"project\u002Fpositive\u002Fdesign","jiggity",[92,34,42,239,93,38],"project\u002Fcritical\u002Fdesign",[64,34,38,241,11,42],"project\u002Fneutral\u002Fidea",[108,198,31,227,109,38],[244,245,42,212,219,38],"3394338",10,[138,247,42,248,139,38],11,"project\u002Fcritical\u002Fprivacy",[250,247,42,248,251,38],"3393291","godDLL",[253,247,42,248,135,38],"3393309",[142,255,42,248,143,38],12,[257,255,39,258,159,38],"3393325","maker\u002Fneutral\u002Fprivacy",[],[261,266,271,276,281,286],{"id":262,"name":263,"points":264,"category":265},"3401591","subpug",153,"productivity",{"id":267,"name":268,"points":269,"category":270},"3393167","FnordMetric",151,"data",{"id":272,"name":273,"points":274,"category":275},"3399781","Logging in with QR codes (proof of concept)",86,"security_privacy",{"id":277,"name":278,"points":279,"category":280},"3384133","Codecademy Labs",83,"learning_science",{"id":282,"name":283,"points":284,"category":285},"3393093","Daisy the Dinosaur",57,"languages",{"id":287,"name":288,"points":289,"category":290},"3391841","chat",47,"consumer_social",false,"v2",{"id":294,"name":5,"line":6,"ai":291,"cat":20,"year":13,"points":14,"comments":15,"rec":28,"s":295,"top":18,"kw":296,"maker":11,"domain":10,"tier":19,"attempts":38,"strip":297,"url":9,"mix":298,"praise":105,"objection":131,"sub":21},3393118,-0.2,[24,25,26,27],"03003310533105055105111113",[31,32,33,34],1793990877311]