[00:01] bpot has joined the channel [00:05] hassox has joined the channel [00:05] Tim_Smart: npm install socket.io - ftw [00:06] JimBastard: nice [00:06] Tim_Smart: Hopefully we can change "ownership" of the npm package, if LearnBoost want to maintain it [00:06] Tim_Smart: wants* [00:13] isaacs[away]: Tim_Smart: there's an issue for that [00:13] Tim_Smart: ok cool [00:14] _announcer: Twitter: "asciimo - create awesome ascii art with javascript! works in the browser or node.js http://ff.im/mq0XB" -- Fabrizio Codello. http://twitter.com/Fabryz/status/16654360650 [00:15] JimBastard: LOL NICE [00:18] stephenjudkins has joined the channel [00:19] _announcer: Twitter: "Now is the coffee and some NodeJS programming." [zh-TW] -- Didiet. http://twitter.com/lynxluna/status/16654623280 [00:19] stephenjudkins has joined the channel [00:19] fizx has joined the channel [00:27] stephenjudkins has joined the channel [00:29] stephenjudkins has joined the channel [00:34] Tim_Smart: mape: On http://npm.mape.me/ , the socket.io entry hasn't picked up the metadata. Does it take time? [00:34] softdrink has joined the channel [00:38] stagas has joined the channel [00:43] Vekz: what is everyone using to manage node processes? [00:43] Vekz: just setup supervisor [00:43] sechrist has joined the channel [00:45] Tim_Smart: Vekz: I usually deploy with monit and upstart [00:47] Tim_Smart: Hmm I got an idea, how about converting several popular API to streaming versions, and then serve them for developers to use [00:49] Vekz: BRILLIANT [00:50] Tim_Smart: There needs to have some sort of way of covering the hosting costs though [00:50] Tim_Smart: *to be [00:56] _announcer: Twitter: "Anyone interested in a "code club" that focuses on reading and building on large codebases? LLVM & Clang, Node.js & V8, emacs, etc." -- Dave Peck. http://twitter.com/dangerdave/status/16656601757 [01:01] jakehow has joined the channel [01:05] jedschmidt has joined the channel [01:09] JimBastard: yeah if only there was something for like hooking together web services for developers Tim_Smart [01:09] isaacs: ugh, i'm realizing more and more than npm will have to start using zips instead of tarballs at some point [01:09] isaacs: feh. zip. bastard child of compression technologies. [01:09] Tim_Smart: JimBastard: Not so much hooking things together, just giving data sources to developers in a decent form [01:10] JimBastard: lol you are the funniest [01:11] Tim_Smart: JimBastard: I thought you were continuing hook.io btw? [01:12] JimBastard: who said i wasnt? [01:12] Tim_Smart: github? [01:12] JimBastard: repo is still up [01:12] JimBastard: im sorting out some other things first [01:12] Tim_Smart: ok :) [01:12] JimBastard: im blocked on a few items [01:13] JimBastard: mostly hosting [01:13] Tim_Smart: I'm trying out http://prgmr.com/ atm [01:14] JimBastard: do they have a deployment API? [01:14] sechrist: mscdex: hows dat socket.io [01:14] sechrist: I use prgmr [01:15] sechrist: I have a 512mb and a 64mb [01:15] Tim_Smart: naw. They just give you a vps with a pipe [01:15] JimBastard: yeah [01:15] sechrist: they had a fucking catastrophic network failure last night [01:15] sechrist: luke was like [01:15] sechrist: duuuude [01:15] JimBastard: i need to be able to dynamically create new machines [01:15] Tim_Smart: sechrist: They got ddosed :o [01:15] sechrist: JimBastard: pay amazon [01:15] JimBastard: thanks sechrist , i never thought to look into amazon [01:15] maushu: I read some reviews where linode scored higher than prgmr even if it's more expensive. [01:15] sechrist: LUL [01:16] sechrist: ec2? what's that [01:16] maushu: JimBastard, linode also scored higher than amazon. [01:16] sechrist: maushu: many things are more expensive [01:16] maushu: And amazon is more expensive. [01:16] sechrist: amazon is ridiculously expensive [01:16] JimBastard: maushu: do they have a deployment API [01:16] Tim_Smart: maushu: Most likely because the people giving ratings need hand holding [01:16] maushu: Linode? Yeah. [01:17] JimBastard: i should check that out [01:17] JimBastard: how old is it [01:17] maushu: http://www.linode.com/api/ [01:17] sechrist: prgmr is fine for my uses [01:17] sechrist: everything else is on dedis [01:17] maushu: also http://www.linode.com/stackscripts/ [01:17] sechrist: I run my own kernel on my prgmr boxes [01:18] sechrist: I've never seen another place let you do taht [01:18] maushu: You can do that on linode. [01:18] sechrist: no wai [01:18] maushu: Man, they should pay me for advertisement. [01:18] sechrist: $8/m for negligible performance difference [01:18] sechrist: meh i'll stick with prgmr until I need more [01:19] maushu: Oh yeah, I know: http://www.linode.com/?r=a113449b8aa5681ef7bdc2e71d8f91ffcad6ae0f [01:19] maushu: Use that. [01:19] maushu: :p [01:19] Tim_Smart: Do linode offer annual deals? [01:19] maushu: Yes. [01:20] sechrist: man I don't know how hostgator sells vpses [01:20] maushu: The problem is that they don't give boxes with less than 512mb. [01:20] sechrist: I worked for them for awhile [01:20] sechrist: they're vz and they stink [01:20] maushu: Tim_Smart, with 10% discount for one year. [01:20] sechrist: linode seems to be taking the market [01:20] sechrist: it was slicehost for awhile [01:21] sechrist: but slicefags refuse to lower their pricing for 256mb [01:21] sechrist: so they'll die [01:21] maushu: Linode's support is much better. [01:21] Tim_Smart: I'm currently testing a 256 prgmr for a month [01:21] sechrist: dude for what little it costs [01:21] Tim_Smart: then I might buy a year or something [01:21] sechrist: it's amazing [01:21] maushu: Performance too since they know what they are doing, they only hire people that know their crap. [01:21] sechrist: btw the linode vs prgmr benchmarks are totally skewed [01:22] sechrist: you can't accept one benchmark done a few years ago [01:22] sechrist: there's no performance problem [01:22] maushu: It didn't change anything.. well besides they increasing ram for free. [01:22] sechrist: except for the one time they got ddosed [01:22] sechrist: last night [01:22] zaach has joined the channel [01:23] sechrist: I have an uptime of over 2 years on my 512 [01:23] sechrist: serious business [01:23] maushu: Of the 4 years I have been with linode my box only went down once. For 2 minutes. [01:23] sechrist: are they cloud based yet? [01:24] maushu: No, vps. [01:24] sechrist: there's cloud vpses [01:24] sechrist: bro [01:24] maushu: Vps as an single machine. [01:24] sechrist: but yeah with all of the support features and stuff they look pretty dope [01:24] sechrist: I used their ajax console [01:25] sechrist: it was cool [01:25] maushu: I prefer creating my own cloud. [01:25] sechrist: ok al gore [01:25] maushu: MY OWN CLOUD. [01:25] sechrist: MY OWN NIMBUS [01:25] maushu: ... [01:25] maushu: BLOOD FOR THE BLOOD GOD! SKULLS FOR THE SKULL THRONE! [01:25] sechrist: http://www.youtube.com/watch?v=3-Hjf43k3Cs [01:26] maushu: ACTION rips sechrist's head off. [01:27] sechrist: ACTION pops another head out [01:31] sechrist: mscdex: [01:31] Tim_Smart: sechrist: Btw I npmified socket.io, so you can npm install socket.io now [01:32] sechrist: that's cool but the app i'm working on keeps it's libs appliance style [01:32] sechrist: for easy deployment [01:32] sechrist: require.paths.unshift("./libs/") [01:32] Tim_Smart: stellar [01:33] sechrist: yeah do you use twitter [01:33] Tim_Smart: Not really, but my thing is Tim_Smart [01:34] deanlandolt_home has joined the channel [01:41] bmizeran_: how does one compile their extension with debug support? [01:44] bmizeran_: I think I got it. [01:45] sechrist: it required a patch last time I used it [01:45] sechrist: it was a pita [01:45] sechrist: but the patch was easy [01:46] jspiros has joined the channel [01:47] sechrist: ryah: you there? [01:47] Tim_Smart: ./configure --with-debug or something [01:56] SvenDowideit has joined the channel [01:57] jspiros has joined the channel [02:00] derbumi has joined the channel [02:11] fizx has joined the channel [02:11] ditesh|cassini has joined the channel [02:13] jspiros has joined the channel [02:23] mattly has joined the channel [02:24] BrianTheCoder has joined the channel [02:32] SamuraiJack has joined the channel [02:37] _announcer: Twitter: "haha "It's not Rails terrible" -- Ryan Dahl on Node.js speed when serving large-ish files" -- Kevin R Barnes. http://twitter.com/vinbarnes/status/16662421013 [02:38] Tim_Smart: What do people think about this sort of router syntax? http://gist.github.com/446317 [02:42] _announcer: Twitter: "Example WSH: 3m30s is Node.js: 0m8s now. Gin.js parsing program, the target text file 367. Thanks to the Gin # parse V8 overwhelmingly fast. Then I slowly WSH file input and output. I can spit out a log difference in input and analysis." [ja] -- 天沢(弱). http://twitter.com/amasawa/status/16662711263 [02:57] jedschmidt has joined the channel [03:06] isaacs: Tim_Smart: it's pleasingly jquery-ish [03:06] Tim_Smart: isaacs: Yay. That was my goal. [03:07] isaacs: Tim_Smart: what about something like r.addModule("gzip").handle(function () ...) or even just r.addModule("gzip", function ...) [03:07] fizx has joined the channel [03:07] isaacs: maybe if it's just a function, then it's considered to be like {handle:fn} [03:07] Tim_Smart: isaacs: It will accept addModule('name', 'filename'); addModule(name, function); aswell [03:08] isaacs: oh, cool [03:08] Tim_Smart: (this will be the router for the biggie framework) [03:09] Tim_Smart: After I have something that people are happy with, I might move on to the orm [03:12] jedschmidt: can someone here answer a simple http question for me? [03:13] Tim_Smart: jedschmidt: A few people around here could, for sure [03:13] jedschmidt: namely, can a response be sent during an upload? [03:13] Tim_Smart: I can't see why not, tcp connections are duplex [03:14] Tim_Smart: All depends how the browser handles it :/ [03:14] jedschmidt: Tim_Smart: interesting... so potentially an http "transaction" could be a conversation? [03:14] Tim_Smart: jedschmidt: Yup :) [03:15] jedschmidt: so do resume/pause work on a tcp level? [03:15] Tim_Smart: tcp yes [03:16] Tim_Smart: I think felixige has done a whole lot around the uploading spectrum [03:16] jedschmidt: Tim_Smart: cool, thanks. yeah, haven't seen felixge online in a long time. [03:17] Tim_Smart: jedschmidt: http://debuggable.com/posts/parsing-file-uploads-at-500-mb-s-with-node-js:4c03862e-351c-4faa-bb67-4365cbdd56cb [03:20] hassox has joined the channel [03:23] hassox has joined the channel [03:27] jedschmidt: thanks, Tim_Smart. [03:27] JoePeck has joined the channel [03:27] _announcer: Twitter: "blog wrote: node.js on Twitter ChiarpUserStream created a Web application to view - Hatena Diary liquor branch http://bit.ly/b0xa5p" [ja] -- FUJIWARA Shunichiro. http://twitter.com/fujiwara/status/16665380469 [03:34] mscdex: sechrist: [03:35] sechrist: yarly [03:35] sechrist: I saw your commit history [03:35] sechrist: cool stuff [03:36] mscdex: oh [03:36] mscdex: most of what i had has been merged in one way or another into the main repo though [03:36] mscdex: i just updated it to match learnboost's today [03:37] mscdex: more or less anyway :-P [03:37] sechrist: hmm [03:37] boaz has joined the channel [03:37] sechrist: it needs a timeout callback [03:37] sechrist: serious [03:37] mscdex: timeout on clientside? [03:37] sechrist: I bet that has to be implemented per transport [03:37] sechrist: yeah [03:37] mscdex: i doubt it, just a setTimeout should be sufficient? [03:37] sechrist: I mean a setInterval checking socket.connected would work sort of [03:37] siculars has joined the channel [03:37] mscdex: well [03:38] sechrist: but reconnecting a disconnected socket [03:38] mscdex: for multipart i implemented a ping-pong type thing [03:38] sechrist: is like [03:38] sechrist: so screwed [03:38] mscdex: because there's no way otherwise to tell disconnection [03:38] sechrist: ping-pong yarly [03:38] sechrist: what is multipart anyway [03:38] sechrist: it's not polling? [03:38] mscdex: no [03:38] mscdex: it's a constant connection [03:38] sechrist: oh woahzor [03:39] sechrist: that sounds better than xhr longpullz [03:39] mscdex: it's like xhr but instead of concatenating content, it replaces [03:39] mscdex: multipart/x-mixed-replace [03:39] mscdex: so it doesn't use up a gargantuan amount of memory over time [03:40] mscdex: but not all browsers support it i don't think? i know FF does [03:40] mscdex: not sure about IE [03:40] mscdex: or chrome [03:41] mscdex: yeah to me long poll is pretty much second to last choice i'd want, with last being htmlfile [03:42] sechrist: know of a way to detect to see if the flash swf loaded? [03:42] sechrist: like with https://addons.mozilla.org/en-US/firefox/addon/433/ in firefox? [03:43] mscdex: dunno. like i said earlier, i haven't messed with the flash stuff at all yet [03:43] mscdex: mostly because i detest flash [03:43] sechrist: with flashblock it just DIEZ [03:43] jspiros has joined the channel [03:43] sechrist: mscdex then I may fork your fork when I wake up [03:43] sechrist: and add some cool stuff [03:43] mscdex: heh [03:44] sechrist: socket.io needs to be robust [03:44] creationix has joined the channel [03:44] sechrist: what's the main difference between your fork and origin now? [03:44] mscdex: yeah [03:44] mscdex: um [03:44] sechrist: did you just pull it or manually apply stuff [03:45] mscdex: i had to manually apply because my fork was quite different [03:45] mscdex: but the differences are mostly style and implementation-related in parts [03:46] sechrist: pretty much all I can think of adding is real swf fail detection, timeout cbs, and reconnection with the same socket object [03:46] mscdex: there's still more improvement that could be done [03:46] sechrist: ah, are there inefficiencies with queuing up crap for xhr/multipart? [03:46] sechrist: I never really tested that hardcore [03:47] mscdex: no, there's nothing wrong with multipart, at least that i'm aware of. [03:47] sechrist: well I mean either [03:47] mscdex: from my testing i haven't encountered anything awry [03:47] sechrist: going from a tcp-like stream to xhr there's gotta be performance considerations [03:47] sechrist: ah ok [03:48] mscdex: well, there's going to be some overhead compared to something like websockets [03:48] mscdex: because you have to send headers with each part and stuff like that [03:48] deanlandolt_home has joined the channel [03:48] sechrist: does it combine messages into one response? [03:48] sechrist: like at the wire level [03:49] sechrist: say there's 10 messages queued up during the slowness of re-requesting the longpoll [03:49] sechrist: that should spill out 10 in one response right [03:49] mscdex: right [03:49] sechrist: right or right it should lol [03:49] mscdex: it's whatever the server sends at one time [03:49] sechrist: ah crap then it may just chip off of a queue [03:49] sechrist: when you xhr [03:50] sechrist: one at a time [03:50] sechrist: anyway sleep [03:50] sechrist: ACTION sleep [03:50] mscdex: when you connect it sends out a json string of the entire queue [03:50] mscdex: so that's one response [03:50] mscdex: ok [03:51] creationix: marshall_law: sup [03:52] smtlaissezfaire has joined the channel [03:53] bpot has joined the channel [03:54] temp02 has joined the channel [03:55] creationix has joined the channel [03:56] creationix: ryah: you around? [03:57] smtlaissezfaire has joined the channel [03:58] creationix: oh well, better get to bed anyway, been a long week [04:05] dabreaka has joined the channel [04:10] stephenjudkins has joined the channel [04:12] brianmario has joined the channel [04:20] away01 has joined the channel [04:22] _announcer: Twitter: "[Web] node.js on Twitter ChiarpUserStream created a Web application to view - Hatena Diary liquor branch http://bit.ly/986BTC (from Hatena B!)" [ja] -- ツイッターのニュース by 法なび. http://twitter.com/hounavi_tweet/status/16668531057 [04:26] _announcer: Twitter: "Twitter: node.js on Twitter ChiarpUserStream created a Web application to view - Hatena Diary liquor branch: http://d.hatena.ne.jp/sfujiwara/20100621/1277090751" [ja] -- bsiyo. http://twitter.com/bsiyo/status/16668732373 [04:26] _announcer: Twitter: "Web browsing on Twitter ChiarpUserStream node.js made the application - Hatena Diary liquor branch http://bit.ly/d0rIVy" [ja] -- ヒサヤ大黒堂. http://twitter.com/hisayadaikokudo/status/16668736380 [04:26] _announcer: Twitter: "Web browsing on Twitter ChiarpUserStream node.js made the application - Hatena Diary branch sake: In recent Perl + AnyEvent Dara made the flow of Twitter ... http://bit.ly/d0rIVy ChirpUserStreams" [ja] -- mamasan84. http://twitter.com/mamasan84/status/16668739525 [04:30] mscdex: dang, 4 dupes in a row :o [04:30] mscdex: maushu: ^^ [04:33] mattly has joined the channel [04:40] mikeal has joined the channel [04:44] kriskowal has joined the channel [04:45] charlesjolley- has joined the channel [04:47] _announcer: Twitter: "Web browsing on Twitter ChiarpUserStream node.js made apps - wine branch Hatena Diary: node.js on Twitter ChiarpUserStream created a Web application to view - alcohol diary ... http://bit.ly/d0rIVy" [ja] -- きゅび情報索敵部隊. http://twitter.com/cubisme_tech/status/16669840444 [04:50] softdrink has joined the channel [04:51] JimBastard_ has joined the channel [04:51] JimBastard_: hee hee the guy who i stole the the figlet parsing code from is on reddit and bitching [04:52] JimBastard_: hes upset someone rewrote his code and wants me to "take it down" [04:52] JimBastard_: :-D [04:52] Tim_Smart: He open sourced it right? [04:53] aho: linky? [04:53] JimBastard_: http://www.reddit.com/r/programming/comments/cgyn0/asciimo_a_javascript_ascii_art_creating_robot/c0sjrm5 [04:53] JimBastard_: i mean Tim_Smart , he has no copyright notices and its unobfuscated javascript [04:53] JimBastard_: and i rewrote probaly 80+ % of it by now [04:53] JimBastard_: the last 20% would be just the parser which is kinda shitty anyway [04:53] JimBastard_: its like a joke [04:53] stephenjudkins has joined the channel [04:54] JimBastard_: we are taking about ascii fonts from 1996 [04:54] JimBastard_: what is this guys problem [04:54] Tim_Smart: JimBastard_: Legally you could get into trouble, but meh [04:54] JimBastard_: no i couldnt [04:54] JimBastard_: what do you know about the US legal system [04:54] JimBastard_: you are 19 and in NZ [04:55] Tim_Smart: >.> Bastard, I don't get time to reply [04:55] chilts: heh [04:55] chilts: Tim_Smart: you in NZ? I'm in Wellington :) [04:55] Tim_Smart: I'm actually 20 too [04:55] chilts: awesome [04:55] BrianTheCoder: so I'm trying to write a tcp load balancer as a way to learn node, but after the first request the socket gets closed and then I can't write to it, is there some way to keep it persistent? [04:55] Tim_Smart: Yeah, I'm in Palmerston North (actually) Feilding [04:56] chilts: good stuff, good to know other people in NZ are using Node :) [04:57] aho: i mean Tim_Smart , he has no copyright notices and its unobfuscated javascript <- doesn't that mean it got regular copyright in most countries? :> [04:57] Tim_Smart: Yes [04:58] sunpin has joined the channel [04:58] Tim_Smart: Every digital work made after a year I forgot, is automatically copyright unless specified [05:07] BrianTheCoder: http://github.com/BrianTheCoder/proxy-js [05:07] BrianTheCoder: anyone mind critiquing my code? I'm a node noob and probably am doing some things wrong or more complicated than they need to be [05:10] aho: client.js line 7 bad formatting, line 30 same - also, == instead of === [05:11] _announcer: Twitter: "Watching some talks about Node.js by Ryan Dahl and kind of mesmerized." -- Joe Hewitt. http://twitter.com/joehewitt/status/16671000163 [05:12] aho: server.js also got 2 functions clobbed into a single line [05:12] aho: not that it changes anything... it's just annoying to read :> [05:12] Tim_Smart: Also, don't be afraid of the spacebar [05:17] mscdex: Tim_Smart: it was some time in the 1980's when explicit copyright marks became optional [05:17] mscdex: iirc [05:17] mscdex: but still, i can't imagine it would be difficult to rewrite it completely [05:18] joshbuddy has joined the channel [05:20] mostlygeek has joined the channel [05:20] mscdex: but automatic copyrights are nowhere near as useful as formal copyright registration [05:20] _announcer: Twitter: "@joehewitt link to the talks? I am interested in Node.js..." -- Jason Emerick. http://twitter.com/jemerick/status/16671433152 [05:20] mscdex: in the US anyway [05:24] _announcer: Twitter: "@joehewitt node.js rocks. Been living in it for the last few months, already coded two sites with it." -- rentzsch. http://twitter.com/rentzsch/status/16671634806 [05:24] keyvan has joined the channel [05:25] JimBastard: sorry for the quip Tim_Smart im just a little annoyed at this patorjk guy [05:25] JimBastard: he has some nerve [05:26] JimBastard: if someone reworked some of my shitty code from a few years ago and rereleased it, id be annoyed....but id either sprint driven develop a new version or just be humbled that someone actually took the time to improve on my work [05:26] JimBastard: and like, we arent talking about missle guidance firmware here [05:26] JimBastard: like seriously [05:27] mscdex: was it specifically licensed at all? [05:27] JimBastard: naaah, he built it as a "learning experiment" [05:27] JimBastard: and like honestly, the majority of his code is completely gone [05:27] JimBastard: and the remaining part would be easy to rewrite [05:28] JimBastard: i just didnt do it because it was literally the only piece outside of the figlet fonts that could be saved [05:28] JimBastard: his code was terribly written [05:28] JimBastard: UI and business logic and framesets all mashed together [05:29] Tim_Smart: JimBastard: No problems, I'm guessing you read the backlog? [05:29] JimBastard: yeah yeah, i was on my other machine [05:29] Tim_Smart: :p [05:29] _announcer: Twitter: "Wow, I love DreamHost. Got my own node.js up and running with absolutely no hassle at all!!!" -- Ruben. http://twitter.com/cha0s6983/status/16671864581 [05:31] JimBastard: also happy birthday [05:39] brainproxy has joined the channel [05:41] _announcer: Twitter: "Web browsing on Twitter ChiarpUserStream node.js made the application - Liquor http://bit.ly/986BTC # programming branch Hatena Diary" [ja] -- プログラミングニュース. http://twitter.com/programming_j/status/16672398563 [05:42] SamuraiJack_ has joined the channel [05:42] ewdafa has joined the channel [05:49] charlesjolley- has joined the channel [05:53] _announcer: Twitter: "@plukevdh have you checked out Node.js? what do you think of it?" -- josh a.. http://twitter.com/joshaber/status/16672928944 [06:02] _announcer: Twitter: "Slowly, it's time to make time to do with node.js. http://bit.ly/aLoiO7 # nodeJS" [de] -- Markus Wolf. http://twitter.com/KnisterPeter/status/16673327540 [06:03] SamuraiJack__ has joined the channel [06:15] k3yvn has joined the channel [06:19] agnat has joined the channel [06:19] SteveDekorte has joined the channel [06:21] _announcer: Twitter: "I really need to make time to write something with node.js and/or Underscore.js. Speaking of which, what happened to #CBusjs, anyway?" -- Kevin Munc. http://twitter.com/muncman/status/16674147988 [06:27] saikat has joined the channel [06:30] bpot has joined the channel [06:36] cloudhead has joined the channel [06:38] slaskis has joined the channel [06:39] stephenjudkins has joined the channel [06:43] _announcer: Twitter: "vertex.js: #graph dB inspired by filesystems, built on #nodejs & #tokyocabinet. http://is.gd/cXeDL @communicating" -- Ali Sohani. http://twitter.com/alisohani/status/16675086542 [06:45] bmizerany has joined the channel [06:45] markwubben has joined the channel [06:51] b_erb has joined the channel [06:59] keyvan has joined the channel [07:00] keyvan has joined the channel [07:01] k3yvn has joined the channel [07:03] ayo has joined the channel [07:04] wilmoore has joined the channel [07:06] ph^ has joined the channel [07:14] JimBastard: hey check it out [07:14] JimBastard: http://patorjk.com/blog/2010/06/21/asciimo/ [07:14] kriskowal has joined the channel [07:16] virtuo has joined the channel [07:16] JimBastard: AHAHAHA [07:16] JimBastard: soo funny [07:21] mostlygeek has joined the channel [07:22] ph^ has joined the channel [07:22] SteveDekorte has joined the channel [07:23] _announcer: Twitter: "@joehewitt Wow, I'd never seen Node.js before. Thanks for the heads up!" -- Brent Phillips. http://twitter.com/UltimateBrent/status/16676732115 [07:24] virtuo has joined the channel [07:26] b_erb has joined the channel [07:27] JimBastard: Tim_Smart [07:27] JimBastard: that dude blogged at me [07:28] Tim_Smart: hehe [07:28] Tim_Smart: Welcome to the interwebz [07:31] N` has joined the channel [07:31] JimBastard: did you see the post [07:31] JimBastard: http://patorjk.com/blog/2010/06/21/asciimo/ [07:32] mikeal has joined the channel [07:34] pquerna: i guess i missed the point of asciimo, shouldn't it just be a 100% client side app :-/ [07:35] _announcer: Twitter: "@bramcohen Asynchronous I/O is more difficult in Python than in node.js, isn't it?" -- Andreas Kalsch. http://twitter.com/kalsch/status/16677231693 [07:36] zomgbie has joined the channel [07:36] pquerna: people not understanding copyright and just copying code because there wasn't a LICENSE file is scary though. [07:38] JimBastard: pquerna: it is [07:38] JimBastard: a 100% client side app [07:38] JimBastard: and the javascript parsing code is a fucking joke [07:38] JimBastard: its nothing [07:38] JimBastard: this guy is just upset because i called him out for having terrible code [07:39] JimBastard: look at the commit logs [07:39] JimBastard: you'll see the delettions [07:39] JimBastard: it also works in node [07:40] linuxsable has joined the channel [07:41] Tim_Smart: JimBastard: I'm working on biggie-router atm. The core is almost done :) [07:41] JimBastard: http://github.com/cloudhead/journey ? [07:42] Tim_Smart: naw, this router is hawt [07:42] pquerna: I guess i just get paranoid. First thing I do on any new code I see is look for the license. If there isn't one, i just close the tab. Unless its super-cool idea and then I might try to email the author... [07:42] pquerna: but most of the time, licensless code on random website = close tab [07:43] pquerna: someone who takes that though, and puts it up on their own 'thing' scares the shit out of me, because they will someday take something not theirs, call it license X, and then others will build on it [07:43] pquerna: and then you end up with dumbass lawsuits against open source projects .> [15:39] mscdex: that's one way you could do it [15:39] mscdex: you can also go by headers and other things too [15:39] sechrist: oh so it does parse urls? [15:40] sechrist: then that would owrk [15:40] mscdex: you can have it check the requested path and route to either lighttpd or node [15:40] mscdex: based on that [15:40] mscdex: that's what i do anyway for work [15:41] sechrist: that's neat if it will throw non-http activity to something else AND do protocol-specific reading [15:41] sechrist: so I could run ssh on 80 alongside lighttpd? [15:41] mscdex: ssh on port 80? :S [15:42] sechrist: just sayin -- if it will throw all non-http traffic to another port [15:42] sechrist: seems like that'd work [15:42] mscdex: i suppose.... [15:42] kodisha has joined the channel [15:42] mscdex: i gotta get going, got a meeting in a few [15:43] unomi has joined the channel [15:43] ajpiano has joined the channel [15:45] unomi: Congrats on all the recent attention [15:45] manveru: heya [15:45] tmpvar has joined the channel [15:46] sechrist: http://nginx.org/pipermail/nginx/2010-June/021075.html [15:46] sechrist: holy jesus [15:46] manveru: can someone point me to a guide on how to use libraries like http://github.com/raycmorgan/Mu in my apps? i'm not sure about the conventions regarding require [15:46] sechrist: you mean just the library include? [15:47] sechrist: or actually using mu [15:47] manveru: in this case using mu [15:47] manveru: since it's not a single .js and i'd like to keep it in a different location from my app [15:47] sechrist: uh [15:47] sechrist: the normal convention is ~/.node_libraries [15:48] caolanm: or adding to require.paths before running your code [15:48] sechrist: var Mu = require('./lib/mu'); that's a hack for appliance style [15:48] sechrist: the demo.js uses it [15:48] sechrist: so I can see how you assumed that's how you do it [15:48] kodisha: sechrist: this nginx stuff looks cool [15:48] sechrist: you can drop mu in ~/.node_libraries and be on your way [15:48] sechrist: kodisha: hell yeah [15:48] kodisha: impressive figures [15:48] manveru: ok [15:49] sechrist: seems like it's to have queries setting right on the wire like couch [15:50] sechrist: that is neat [15:50] kodisha: sechrist: implementing same thing in node would be pretty easy, not sure about same performance [15:50] sechrist: well of course [15:50] manveru: require.paths.push('/home/manveru/github/raycmorgan/Mu/lib/') [15:50] _announcer: Twitter: "Node.js Connect http://bit.ly/9YkVHz #design #JavaScript" -- Jessyka. http://twitter.com/yummymashup/status/16702720779 [15:50] manveru: var mu = require('mu') [15:50] sechrist: ya [15:50] manveru: something like that? [15:50] sechrist: basically ~/.node_libraries is default in the require.paths [15:50] kodisha: but, i must admit i hate making all that regexp stuff [15:50] sechrist: you can add your own paths [15:50] sechrist: by doing require.paths.unshift('/var/lib/lol'); [15:51] kersny_ has joined the channel [15:51] manveru: yeah, but .node_libraries seems more suited for single file libs [15:51] sechrist: uh nah [15:52] sechrist: well welcome to node.js [15:52] manveru: heh :) [15:52] sechrist: there's package managers but nothing really standardized [15:52] sechrist: you really should know what it's doing to thrive [15:52] sechrist: strace/dtruss your stuff [15:53] manveru: well, i figure it's going through require.paths, appending the string from require and looking whether there's a file of that name [15:53] sechrist: the require logic is a bit more in depth [15:53] sechrist: it checks for index.jses in folders too [15:53] sechrist: and stuff like that [15:54] _announcer: Twitter: "@dagda1 jQuery or other framework (bonus points for node.js), but also able to write native. In-depth knowledge of DOM, closures & scoping" -- Aaron Bassett. http://twitter.com/aaronbassett/status/16702988391 [15:54] sechrist: that made no sense [15:54] rauchg: hahaha [15:55] skampler: job ad? [15:56] _announcer: Twitter: "@eschnou node.js" -- Xavier Damman. http://twitter.com/xdamman/status/16703126301 [15:56] boaz has joined the channel [15:56] caolanm: I tend to put an index.js in my modules that points to lib/mymodule.js to make it easier to require... is that still useful or is node smarter about requiring modules with a lib directory now? [15:56] boaz has joined the channel [15:56] slaskis_ has joined the channel [15:57] caolanm: because its a bit of a pain ;) [15:57] _announcer: Twitter: "First # webtech sessions online http://webtechcon.it/2010/sessions - Node.js, mash-ups, AS3 Design Patte ... and HTML 5 box with Patrick!" [lt] -- WebTech Conference. http://twitter.com/WebTechConf/status/16703213667 [15:57] jstewart1 has joined the channel [15:57] jakehow has joined the channel [16:02] grahamalot has joined the channel [16:02] mikeal has joined the channel [16:02] bradleymeck has joined the channel [16:03] markwubben_ has joined the channel [16:03] dabreaka_ has joined the channel [16:05] kevwil has joined the channel [16:07] jstewart1 has joined the channel [16:07] texodus has joined the channel [16:07] tjholowaychuk: which websockets implementation is the most "complete" ? [16:08] creationix: tjholowaychuk: either socket.io or micheils's new one [16:09] _announcer: Twitter: "Node.js Connect - http://su.pr/16IUFQ" -- Richard Laksana. http://twitter.com/rlaksana/status/16703997890 [16:10] tjholowaychuk: cool ill check it out [16:11] mape: tjholowaychuk: Mind taking a sec to check out the bottom part of http://mape.me:8081/test.html to see if what I'm doing is a sane way of handling stuff? [16:12] mikeal: where is micheil's? [16:12] mape: Ie the cacheTimestamps to be used in templates to invalidate cached assets [16:13] bmizerany has joined the channel [16:13] tjholowaychuk: mape: if its in the path you have to change anything pointing to it each time its changed no? [16:14] tjholowaychuk: why not just use the query string [16:14] tjholowaychuk: rest looks good tho [16:14] JimBastard: tjholowaychuk: im going to steal the express code and rename it as my own code base [16:14] JimBastard: its what i do [16:14] JimBastard: jimPress? [16:14] mape: tjholowaychuk: query string is wonky with proxys [16:14] mjr_: mikeal: I think this is the one: http://github.com/miksago/node-websocket-server [16:14] tjholowaychuk: JimBastard: haha wtf? why? its being completely revamped right away anyways [16:14] mikeal: nice [16:14] mape: So better to change the virtual path to the file rather then adding ?nocache=*** [16:14] JimBastard: :p [16:15] JimBastard: tjholowaychuk: joking sorry, its been a rough day [16:15] JimBastard: the internet is mad at me (again) [16:15] tjholowaychuk: haha, i saw some of that stuff [16:15] tjholowaychuk: people get pretty worked up about things hey [16:16] tjholowaychuk: mape: not sure ive seen it done that way [16:16] fermion has joined the channel [16:16] tjholowaychuk: mape: guess it doesnt really matter if its dynamic anyways [16:17] tjholowaychuk: gotta get that connect-contrib repo going [16:17] creationix: JimBastard: well connect is MIT so it's a bit safer [16:17] mape: The idea is that you supply AssetsManagerHandler.cacheTimestamps.cssGroup into the template and that way stuff is always fresh for the user [16:17] jstewart1 has joined the channel [16:17] JimBastard: hee hee [16:18] mape: And you can put the expire 2 years a head without having users stick with old ones [16:18] JimBastard: creationix: im pretty sure we'll be making broodmother a connect app [16:18] JimBastard: but we are still a bit away [16:18] creationix: nice [16:18] JimBastard: we need to balance across the wire before we start worrying about balancing across cores [16:18] JimBastard: but its in the pipeline [16:18] creationix: remember that connect is really two distinct parts [16:18] mape: tjholowaychuk: repo and perhaps a naming convention [16:18] JimBastard: ii really just want the multicore stuff [16:18] creationix: the executable will technically work with any node http server [16:18] creationix: and the connect http subclass is a middleware engine [16:19] JimBastard: i'll have to do more research, but i think it will be a good choice [16:19] JimBastard: probaly a few months away from that though [16:19] JimBastard: gotta launch first version [16:19] JimBastard: (first) [16:21] kurokikaze: hey [16:21] technoweenie has joined the channel [16:23] joshbuddy has joined the channel [16:23] kurokikaze: how can I check that child process got the right file descriptor? [16:24] creationix: kurokikaze: what do you mean [16:24] kurokikaze: I'm testing that FD passing stuff [16:24] creationix: http://gist.github.com/430932 [16:24] marshall_law: hey creationix :) [16:25] kurokikaze: everything seems ok, workers are listening [16:25] mitkok has joined the channel [16:25] kurokikaze: but i cannot open site with browser [16:25] kurokikaze: I know I must be doing something wrong [16:25] creationix: kurokikaze: have you called listenFD with the passed fd yet [16:25] kurokikaze: Yep [16:25] kurokikaze: It's a function of http.server? [16:25] creationix: marshall_law: have you had a chance to hack on node yet? [16:25] kurokikaze: I'll throw it in gist [16:25] creationix: kurokikaze: yep, since node v0.1.98 [16:26] kurokikaze: oh wait, it WORKS [16:26] rauchg has joined the channel [16:26] caolanm: \o/ [16:26] creationix: kurokikaze: :) [16:26] kurokikaze: Holy Emperor's Throne, that was not so hard after all :) [16:26] aglemann has joined the channel [16:27] creationix: marshall_law: I'm having trouble finding the stack overflow article with all the various solutions for the platforms [16:27] creationix: (path to executable problem) [16:27] linuxsable has joined the channel [16:27] kurokikaze: (though I ripped around 70% of code right from connect script ) [16:28] jstewart1 has joined the channel [16:28] bpot has joined the channel [16:28] kurokikaze: i'll have to tweak it to see which worker are dispatched to do the job [16:29] creationix: kurokikaze: good luck [16:30] stevendavie has joined the channel [16:30] marshall_law: creationix: a little, just playing around though, nothing major.. i couldn't remember exactly what it was that was needed.. :) [16:30] steadicat has joined the channel [16:30] creationix: ahh, I think I found the article http://stackoverflow.com/questions/1023306/finding-current-executables-path-without-proc-self-exe [16:30] marshall_law: ah there you go [16:31] riottaba has joined the channel [16:31] creationix: marshall_law: you're more than welcome to submit a patch, I'm swamped this week catching up from last week [16:31] sh1mmer has joined the channel [16:31] creationix: but once I have that feature in node, I can make a node distro [16:32] tmpvar has joined the channel [16:32] marshall_law: creationix: didn't you need to set the process name as well? or just get it? [16:32] creationix: yes, that's something ryah wants [16:32] marshall_law: setting it is a little more tricky.. [16:32] marshall_law: IIRC in POSIX environments you need to actually overwrite argv [16:32] creationix: something like that [16:33] creationix: check with ryah, he knows what he wants, and I think he knows how to implement it [16:33] TheEnd2012 has joined the channel [16:33] marshall_law: cool [16:33] creationix: I just need the path to the "node" executable" so I can make libraries not be hardcoded relative to the $PREFIX [16:33] marshall_law: ah yes [16:33] marshall_law: that part is easy then [16:33] creationix: $PREFIX doesn't make sense in portable binaries [16:33] marshall_law: :) [16:34] creationix: maybe expose it as process.procPath or something [16:34] marshall_law: exePath? [16:34] creationix: not sure what to make it, but it should probably be on the process global [16:34] marshall_law: maybe prcPath makes more sense [16:35] creationix: sure, I'm not picky [16:35] marshall_law: yeah, that's what i figured [16:35] marshall_law: cool [16:35] creationix: awesome :D [16:35] marshall_law: exe is a little windowsy [16:35] marshall_law: :) [16:35] maushu: My first prototype of my user interface: http://graphnode.com/stuff/dragzoom.html [16:35] maushu: Only works perfectly on chrome. [16:35] maushu: Need to find the zoom equivalent for firefox. [16:36] gb_str has joined the channel [16:36] pgriess: creationix [16:36] pgriess: creationix: you can get the node executable from process.argv[0] [16:36] pgriess: creationix: at least on *nix [16:36] quirkey_ has joined the channel [16:37] kurokikaze: Yep, now I see which worker was dispatched for request [16:37] kurokikaze: Cool [16:37] admc has joined the channel [16:37] dajobe has left the channel [16:37] gb_str: hi there, is there anything specific i need to know in order to run multiple instances of node or it's as easy as running it with load balancer? [16:37] kurokikaze: Gotta sum it up in a blog post or something [16:38] mjr_: gb_str: it all depends on what your multiple instances of node are doing. [16:38] creationix: pgriess: It's not near reliable enough [16:38] kurokikaze: creationix: Would you mind if I use some bits of connect code in article? [16:38] technoweenie: hey does anyone have a god config for node? [16:38] mjr_: gb_str: if they aren't trying to listen on the same ports or unix sockets, it should be fine. [16:38] mjr_: I'm not sure we've got a god config yet. [16:38] pgriess: creationix: how is it not reliable enough? its an absolute path [16:38] mjr_: up down up down, left right left, etc. doesn't work? [16:39] jstewart1 has joined the channel [16:39] maushu: mjr_: FIRING UP SECRET POWER! [16:39] gb_str: how many instances do i need rougly in order to support 2K req/sec of super simple inserts into mongodb? [16:39] mjr_: gb_str: 1? [16:39] JimBastard: gb_str: one node can handle that [16:39] JimBastard: not sure about the mongo part [16:39] maushu: IO is heavy. [16:40] maushu: Like gravity. [16:40] pgriess: gb_str: i think you'll need 2 node instances to reliably hit 2k req/s [16:40] jbrantly has joined the channel [16:40] kurokikaze: mjr_: It's up up down down left right left right B A start ) [16:40] pgriess: gb_str: i've benchmarked single-process node as an http proxy and it maxes out around 1700 reqs/s [16:40] gb_str: thx guys! [16:41] mjr_: Man, I should really spend more time memorizing console cheat sequence codes. [16:43] bpot_ has joined the channel [16:43] fermion: pgriess: do you remember what the resource utilization was at 1700 req/second? [16:43] aglemann has left the channel [16:43] fermion: amount of RAM, etc. [16:43] sechrist: how hard is it to fix a xss [16:43] pgriess: fermiton: that saturated a single CPU. i don't recall what the memory usage was, but iirc it was "low" [16:43] sechrist: http://getsatisfaction.com/thoora/topics/thoora_crash_my_computer_plz_help [16:43] sechrist: jesus [16:44] sh1mmer has joined the channel [16:44] fermion: right, comparable to what Apache might be using :-D [16:44] fermion: cool, thanks! [16:44] JimBastard: lol hey sh1mmer [16:44] JimBastard: i didnt realize you were tom! [16:44] pgriess: fermion: well, apache will use a process per connection which will take up a lot of memory [16:44] sh1mmer: JimBastard: yeah [16:44] JimBastard: :-) [16:44] sh1mmer: JimBastard: I'm sh1mmer everywhere [16:44] JimBastard: im really nice, just not on the internet [16:44] sh1mmer: except RL [16:44] JimBastard: the internet is a tough place [16:44] fermion: pgriess: right :-D [16:44] JimBastard: okay, im not really nice IRL, but im nice! i swear [16:45] JimBastard: :-p [16:45] kevwil_ has joined the channel [16:45] sh1mmer: JimBastard: the internet can shove it. I'm sure there is enough information about me online that someone could totally screw with me if they wanted to [16:45] sh1mmer: but I'm kind of over that [16:45] JimBastard: i mean [16:45] JimBastard: i have a sex tape out [16:46] JimBastard: a well publicized one [16:46] JimBastard: that i went to jail for [16:46] JimBastard: i kinda lost my internet cred 10 years ago [16:46] sh1mmer: I have a scar from a fight with a drug dealer. I'm not really scared of /b/tards [16:46] sh1mmer: huh. Really? [16:46] kurokikaze: :) [16:46] JimBastard: lol yeah [16:46] JimBastard: google "jimbastard" sometime [16:46] JimBastard: sh1mmer: http://nymag.com/news/features/27341/index5.html mentions it [16:47] JimBastard: im not allowed to tell people how to find the tape though, injunction and all [16:47] sh1mmer: ACTION reads the dramatica article [16:47] JimBastard: www.jimbastard.com too [16:47] kurokikaze: It seems that with FD passing OS is distributing load not so even [16:47] JimBastard: old site [16:47] JimBastard: how so kurokikaze ? [16:47] rauchg: JimBastard: asciimo is trending in HN [16:47] kurokikaze: though at this request rate it's normal, I suppose [16:47] kurokikaze: for me it's 0,0,0,0,2,2,2,2 (of 4 workers) [16:48] JimBastard: rauchg: lol [16:48] jos3000 has left the channel [16:48] pgriess: kurokikaze: yeah, throw a bunch more requests at it and it should even out [16:48] kurokikaze: that the sequence of workers doing the requests [16:48] kurokikaze: Yep, I thought so [16:48] JimBastard: rauchg: theres a bunch of internet drama around asciimo today [16:48] kurokikaze: Oookaaay, time to go home ) [16:48] JimBastard: apparently im an unoriginal asshole who has no talent and cant code. i also steal peoples work and dont give them credit [16:49] marshall_law: creationix: http://pastie.org/1013828 [16:49] marshall_law: :) [16:49] JimBastard: in all fairness i dont remember the majority of the code i write anyway, its all just JSON and closures [16:49] jstewart1 has joined the channel [16:49] JimBastard: sometimes a if statement if im feeling spicy [16:49] creationix: marshall_law: that was fast [16:50] marshall_law: just for Darwin so far [16:50] marshall_law: I have code in for Linux but i need to build it in my vm [16:50] technoweenie: JimBastard: the comments you wrote were pretty rude though [16:51] ceej: marshall_law: hey... nice :) [16:51] technoweenie: in the code and on reddit [16:51] softdrink has joined the channel [16:52] JimBastard: technoweenie: i agree [16:52] softdrink: "Every last ball on the court is ORPPRB branded." [16:52] JimBastard: technoweenie: i was pretty drunk / frustrated with battling the dudes bad code for 20+ hours straight [16:52] JimBastard: but yeah, i was pretty rude to him [16:53] JimBastard: im not sure if hes gonna try to get any of that stuff taken down but my priority is to not get github mad at me [16:53] JimBastard: if this doesnt just blow over in the next few days ill rewrite whatever is left of his code (which is like < 10% of the codebase at this point) [16:55] JimBastard: its such silly trivial code too, that just makes the whole thing a bit funny [16:55] JimBastard: the combination of me being an asshole and this guy being an idiot is powerful [16:57] xla has joined the channel [16:58] technoweenie: heh [16:58] charlesjolley- has joined the channel [16:59] _announcer: Twitter: "@ Wengzhiwen me to refer to the direction of it, that is node.js!!!" [zh-CN] -- aki. http://twitter.com/aki_xavier/status/16707182162 [16:59] technoweenie: if its so trivial why'd it take 20 hours? [16:59] technoweenie: maybe you shouldnt be drunk while coding :) [16:59] jstewart1 has joined the channel [17:01] boaz has joined the channel [17:01] pandark_ has joined the channel [17:02] softdrink: there's apparently an art to it, technoweenie: http://xkcd.com/323/ [17:02] technoweenie: the rule of thumb i got from defunkt was you write your unit tests sober and the rest drunk [17:02] mape: hehe [17:03] JimBastard: technoweenie: the non trivial parts were documentation, examples, node code, and deleting all his bad code [17:03] kevwil has joined the channel [17:03] JimBastard: and figuring out what the fuck the guy was thinking [17:03] JimBastard: ive never seen concerns soo mashed together [17:04] technoweenie: javascript is a hard language to get a hang of [17:04] JimBastard: lol yeah [17:04] technoweenie: pretty much everyones code looks like shit [17:04] pandark_: softdrink, I knew it! (too) [17:04] rauchg: technoweenie: hahaha [17:04] technoweenie: but thats because i have a certain style (which sucks too) [17:04] rauchg: that's funny [17:04] rauchg: cause it's true [17:04] technoweenie: and its javascript.. it _cant_ look good [17:04] JimBastard: this was like having browser detection and frame checking code inside the text parser [17:04] riottaba_ has joined the channel [17:05] JimBastard: technoweenie: does coffeescript count? [17:05] technoweenie: no, coffee script is pretty nice looking [17:05] technoweenie: imvho [17:05] tjholowaychuk: i think js looks fine, coffescript looks nasty to me [17:05] JimBastard: CF is JS for RB [17:05] JimBastard: lol [17:05] JimBastard: if you know RB and want to dive into JS, get on CF [17:06] technoweenie: tjholowaychuk: sure, js looks fine, but you wrote jspec right? [17:06] technoweenie: its kind of a rubyish syntax for tests [17:06] tjholowaychuk: yeah and i dont like it lol that was my first js project [17:06] tjholowaychuk: most of my older stuff looks rubyish [17:06] technoweenie: coffee script looks just like js w/ all the weird symbols removed [17:07] reid\work has joined the channel [17:07] namelessjon: How would people recommend testing a tcp server applicate. For example, checking for correct handshake etc.? [17:07] JimBastard: i hope sh1mmer didnt fall into a rabbit hole and is spanking it to my sex tap [17:07] rauchg: namelessjon: expresso ? [17:07] JimBastard: e [17:07] rauchg: using a tcp client [17:07] rauchg: and async testing [17:08] namelessjon: rauchg: expresso? [17:08] rauchg: http://github.com/visionmedia/expresso [17:08] rauchg: by tjholowaychuk [17:08] sh1mmer: JimBastard: nah. I just didn't respond, but it's kind of a jerk move [17:08] stephenjudkins has joined the channel [17:08] sh1mmer: so I was being passive aggressive and not saying so [17:09] JimBastard: hee hee [17:09] JimBastard: its cool [17:09] pandark_: funny how the guy call "attention freak" and then gives him as much attention as he can :D http://groups.google.com/group/nodejs/browse_thread/thread/464b7a097755af89?hl=en [17:09] JimBastard: yeah pandark_ , that guy has problems [17:09] JimBastard: i hear he lurks in the node.js room too [17:09] namelessjon: rauchg: I'll have a try with that. Thanks. [17:10] niklasfi has joined the channel [17:10] jstewart1 has joined the channel [17:10] niklasfi: what is the best way to parse json? [17:10] liucougar has joined the channel [17:10] gb_str: is anybody using node.js with mongodb? if so, what's the preferred driver? [17:10] technoweenie: niklasfi: JSON.parse [17:11] technoweenie: niklasfi: theres a yajl extension if you're dealing with streaming json or large documents [17:11] technoweenie: its pretty low level still [17:11] JimBastard: gb_str: is mongo a requirement for you? ive been having a lot of success with couchdb and cradle [17:11] ryah: good morning node people [17:11] gb_str: : yah, it's mongo [17:12] JimBastard: ACTION bows before our asynchronous lord [17:12] tjholowaychuk: yo, morning [17:13] _announcer: Twitter: "Interested in http://nodejs.org/" -- jittiang. http://twitter.com/Jittiang/status/16708081559 [17:13] ryah: you're infamous, marak [17:15] rauchg has left the channel [17:16] frode has joined the channel [17:17] creationix has joined the channel [17:18] brianmario has joined the channel [17:20] jstewart1 has joined the channel [17:22] creationix: marshall_law: is your node branch posted anywhere, I was wanting to play with it [17:22] kersny: gb_str: two big ones: node-mongodb-native and mongoose [17:22] mape: isnt mongoose blocking? [17:23] niklasfi: just updated node to .98 make test threw an error: [17:23] niklasfi: Error: node.js not compiled with openssl crypto support. [17:24] derferman has joined the channel [17:24] kersny: I thought mongoose was mostly just a wrapper around most node-mongodb-native functions + some extra stuff like models [17:24] CIA-77: node: 03Ryan Dahl 07master * rcb79614 10/ (9 files in 3 dirs): Don't encourage strange ideas about req race conditions - http://bit.ly/cBdBdf [17:24] CIA-77: node: 03Ryan Dahl 07master * r545e10f 10/ wscript : wscript shouldn't fail if 'git describe' doesn't work - http://bit.ly/dlxNJO [17:24] gb_str: niklasfi: are you sure? what's the point of writing blocking drivers for node? [17:25] kjeldahl_ has joined the channel [17:25] gb_str: mape/kersny: are you sure? what's the point of writing blocking drivers for node? [17:25] agnat has joined the channel [17:25] kodisha has joined the channel [17:25] marshall_law: creationix: not atm [17:26] marshall_law: creationix: i'll push it soon, i need to get it for my linux test [17:26] creationix: ok, just wondering [17:26] mikemike86 has joined the channel [17:27] creationix has joined the channel [17:27] marshall_law: creationix: is there a way to get the path of the current script? [17:27] kersny: gb_str: I'm fairly certain its not blocking... I could be wrong though [17:28] gb_str: kersny: yah, it's not [17:28] gb_str: http://www.learnboost.com/mongoose/ [17:28] BrianTheCoder has joined the channel [17:29] creationix: marshall_law: __filename [17:29] marshall_law: i can get process.cwd() to work in my unit test, but it's not reliable if the test is started outside of the top level of node build [17:29] marshall_law: oh sweet... [17:29] marshall_law: thanks [17:29] marshall_law: :) [17:29] creationix: doesn't resolve symlinks though [17:29] marshall_law: that's fine [17:30] admc has joined the channel [17:30] jstewart1 has joined the channel [17:31] kriszyp has joined the channel [17:32] mjr_ has joined the channel [17:37] o_o has joined the channel [17:38] pgriess: ryah: do you have a list of http headers which should not be concatenated if multiple instances are found in a request? [17:38] pgriess: ryah: your comment in lib/http.js is ... not so useful ;) [17:38] pgriess: ryah: See https://www.google.com/reader/view/?tab=my#overview-page [17:39] kersny has joined the channel [17:39] pgriess: ryah: the advice that i'm getting internally is to concat only 'cookie' and 'x-*' fields and drop other duplicates, but im trying to square that w/ the http spec [17:39] mjr_: pgriess: that link is probably not the link you mean to paste [17:40] pgriess: mjr_: actually, it is. but it's not the link that ryah meant to check in to git [17:40] mjr_: oh, ha [17:40] pgriess: :) [17:40] caolanm has joined the channel [17:40] jstewart1 has joined the channel [17:40] caolanm: I thought a forms module would be really useful so I wrote one: http://github.com/caolan/forms [17:40] caolanm: feedback welcome [17:41] ryah: pgriess: um, no [17:41] aho has joined the channel [17:41] ryah: we should probably just put an array as the value [17:42] ryah: (but that's very annoying too) [17:42] pgriess: ryah: yeah [17:42] ryah: when i started node i felt ery passionately about this issue [17:42] pgriess: ryah: and would break api compatability [17:42] ryah: and if you look back at the list like a year ago there were many argumetns about this [17:43] ryah: originally headers were not objects but arrays of tuples [17:43] ryah: which i felt was the proper ds to represent http headers [17:43] ryah: as it maintained order, and allowed for multiple values per feild [17:43] ryah: field [17:44] ryah: but it was too many objects - the GC was heating up too quickly [17:44] JimBastard: cool caolanm , will check out [17:44] pgriess: ah, interesting [17:44] mjr_: And most people won't care about all of that flexibility for duplicate headers, etc. [17:44] ryah: so i switched to objects to fix my benchmakrs and punted the problem [17:44] rope has joined the channel [17:44] ryah: yes [17:44] gwoo: caolanm: how does it compare with http://github.com/felixge/node-formidable [17:44] ryah: everyone was very happy [17:44] mjr_: IMO the current way is the best. If you want fancy HTTP header handling, then you can split 'em out with a library. [17:45] gwoo: ACTION remembers the header debate [17:45] pgriess: ryah: so i'm creating a patch for interanl use that will only concat 'cookie' and 'x-*' headers. i assume you wouldn't be interested in this for core [17:45] pgriess: it will drop other dupes [17:45] ryah: pgriess: what if we always use arrays for cookie headers [17:46] creationix: I think being consistent is good [17:46] creationix: it's a pain to have to check the type before using it every time [17:46] ryah: yes [17:46] caolanm: gwoo: I think its tackling a different issue to node-formidable in that its more about describing forms so they can be easily rendered/validated/manipulated [17:46] pgriess: ryah: that doesn't really solve my problem. i'm looking to drop invalid headers (e.g. multiple instances of Host) from poorly implemented or malicious clients. [17:46] ryah: checking type every time is very annoying [17:46] ryah: pgriess: ah [17:46] caolanm: gwoo: the actual request handling isn't as advanced [17:46] gwoo: caolanm: ah ok. so it's more of a helper [17:46] creationix: (by consistent, I'm agreeing with array all the time for some fields vs dynamicly changing) [17:46] ryah: yes, let's give a list of things that we're not concating [17:46] caolanm: gwoo: yeah, exactly [17:46] gwoo: nice [17:47] caolanm: gwoo: if anything it would be nice if it worked with node-formidable [17:47] gwoo: ACTION should have looked at the readme [17:47] gwoo: :) [17:47] ryah: host, content-type, transfer-encoding, content-length [17:47] ryah: u [17:47] gwoo: caolanm: for sure [17:47] ryah: i'm pretty sure there is somethign about this in rfc 2616 [17:47] pgriess: ryah: yeah, slogging through that now [17:47] creationix: I think tjholowaychuk was working on a Lint middleware for connect, not sure how far he got in that [17:47] pgriess: ryah: i haven't found a section that spells all this out explictly, but the EBNF for most headers indicates comma-separated values [17:48] derferman has joined the channel [17:48] ryah: but cookies is pretty annoying - i hate to make people reparse the string [17:48] ryah: to split on , [17:48] creationix: maybe node should do cookies ? [17:48] pgriess: ryah: meh. they'll have to parse it anyway [17:48] pgriess: ryah: and split is cheap [17:48] creationix: since they are so different [17:48] ryah: creationix: what would that mean? [17:48] pgriess: ryah: so would you be interested in a whitelist of valid headers to concat and dropping of dupes that aren't in the list? [17:49] mjr_: ryah: why is it bad to make people parse out cookies manually? Some people don't care about cookies, and for those that do, they need additional parsing of the value of the cookie header anyway. [17:49] creationix: ryah: have node remove cookies from the headers completely and present them in a more specific interface [17:49] ryah: pgriess: i think it's better the other way around? [17:49] ryah: pgriess: or.. i'm not sure. [17:49] pgriess: ryah: our security experts are strongly in favor of a whitelist vs. a blacklist [17:49] ryah: pgriess: yes, either a white list or a black list.. not sure what's best [17:49] pgriess: ryah: (fwiw) [17:49] ryah: okay [17:49] ryah: i defer to the security experts then [17:50] pgriess: ryah: ok, patch incoming in a few hrs [17:50] jherdman has joined the channel [17:50] ryah: mjr_: because in node they're already parsed into separate lines [17:50] ryah: mjr_: we're unparsing them internally and then having users reparse them [17:50] ryah: i guess it doesn't matter much [17:51] ryah: important not to break current api though [17:51] jstewart1 has joined the channel [17:51] ryah: if we left them unparsed we might have to use a different field [17:51] ryah: "_cookies" or something [17:51] mjr_: My point is that cookie users are going to have to parse out the cookie values to understand their meaning as cookies, not just as HTTP headers. [17:51] mjr_: But many people will not need or want that extra parsing. [17:51] ryah: creationix: maybe [17:52] creationix: either have node parse them all the way or stay out of the way as much as possible, but still make it possible for a library to parse them [17:52] ryah: creationix: as long as 'ab' and httperf don't send cookie headers - i might be okay with parsing them internally [17:52] ryah: it can't effect the benchmarks though [17:52] creationix: ryah: on another node, marshall_law is preparing a patch for the path-to-executable-problem [17:53] pgriess: creationix: i still don't understand this problem. why is using process.argv[0] undesirable? [17:53] creationix: pgriess: because it's not reliable [17:53] creationix: it's arbitrary [17:53] creationix: it just happens to be correct 80% of the time [17:53] ryah: pgriess: it's not always the executable path [17:54] pgriess: creationix: really? i thought posix defines it to be the path to the executable invoked [17:54] ryah: no [17:54] creationix: pgriess: it's the convention, but it's not enforces [17:54] creationix: *enforced [17:54] pgriess: ah, thx [17:54] mjr_: you can set what goes in there at exec time, and it doesn't have to be the path to the executable. [17:54] creationix: and usually it's just "node" if you execute node through env [17:54] marshall_law: procPath -> full absolute path [17:55] hdon has joined the channel [17:55] marshall_law: actually, this probably doesnt' follow symlinks yet [17:55] creationix: marshall_law: are you doing symlink resolving or just returning the raw string from the os? [17:55] marshall_law: creationix: i can if needed [17:55] marshall_law: right now it's just raw [17:55] creationix: I think leave it raw for now, ryah what do you think? [17:55] ryah: it's just the command that was executed [17:55] creationix: there's a sync version of readlink now right? [17:55] ryah: i join it with cmd [17:56] ryah: er [17:56] ryah: i join argv[0] with cwd if it doesn't start with '/' [17:56] ryah: it's totally hacky [17:56] marshall_law: hehe [17:56] marshall_law: CWD is also pretty unreliable [17:56] ryah: posix does not define how to get the executable path [17:56] marshall_law: yeah [17:57] marshall_law: ryah: i have it done for Darwin ATM [17:57] blowery: how often does posix change? [17:57] ryah: blowery: never [17:57] marshall_law: my linux vm is building node atm, should be able to test soon [17:57] creationix: posix is about 40 years old now right? [17:57] kodisha has joined the channel [17:57] creationix: ACTION really has no clue [17:57] blowery: i guess the better question would be "when was the last time posix changed, and when will it change again" [17:58] blowery: but, never is a fine answer [17:58] creationix: blowery: well if it does change, there is more to worry about than node internals [17:58] gb_str: has anybody done anything with mongoose? [17:58] gb_str: i can't get it to work at all [17:58] marshall_law: gb_str: I cloned it, does that count? [17:58] marshall_law: :) [17:59] blowery: http://www.opengroup.org/austin/papers/posix_faq.html seems to be a good read [17:59] gb_str: marshall_law: not really :) [18:00] creationix: gb_str: I plan on using it someday, that probably doesn't count either [18:01] gb_str: nope :) [18:02] jstewart1 has joined the channel [18:02] BrianTheCoder: creationix: if you have some time, could you look at http://github.com/BrianTheCoder/proxy-js and critique. Its my first node project, so I'm sure there are things I'm doing that are bad practice or what not [18:03] creationix: BrianTheCoder: just a second, I've got to run to a meeting, maybe someone else can review it? [18:03] BrianTheCoder: no rush [18:04] utgo has joined the channel [18:04] kodisha_ has joined the channel [18:06] creationix_ has joined the channel [18:09] mostlygeek has joined the channel [18:09] rockstar has joined the channel [18:09] rockstar has joined the channel [18:12] jstewart1 has joined the channel [18:13] sechrist: the current revision of posix is 1997 I believe [18:13] sechrist: except some oneoffs like in 04 and 08 [18:13] caolanm_ has joined the channel [18:14] jxson has joined the channel [18:18] [[zz]] has joined the channel [18:21] ewdafa has joined the channel [18:21] ryan_gahl has joined the channel [18:21] gwoo has joined the channel [18:22] jstewart1 has joined the channel [18:24] gf3 has joined the channel [18:26] mrjjwright has joined the channel [18:27] quirkey has joined the channel [18:27] mrjjwright: does anybody know how to get the Eclipse Chrome debugger to remember breakpoints from the last time it ran? [18:30] wink_: just out of curiosity, is there any work being done on attaching a debugger to node scripts? [18:30] joshbuddy has joined the channel [18:31] mindeavor has joined the channel [18:33] niklasfi has joined the channel [18:34] jstewart1 has joined the channel [18:43] jstewart1 has joined the channel [18:43] b_erb has joined the channel [18:44] ryan_gahl: wink: http://github.com/smtlaissezfaire/ndb [18:45] JimBastard: damn, my boss kinda gently yelled at me [18:45] JimBastard: why must everyone read HN [18:46] kriskowal has joined the channel [18:47] quirkey has joined the channel [18:47] siculars has joined the channel [18:48] jakehow has joined the channel [18:48] _announcer: Twitter: "Using jasmine-node (http://github.com/mhevery/jasmine-node) for node.js testing is surprisingly painless." -- schleyfox. http://twitter.com/schleyfox/status/16713765872 [18:50] niklasfi: how do i list the files in a dir? [18:52] mape: creationix_: There? Getting Error: ENOENT, No such file or directory 'logs/connect.log' [18:52] kersny: niklasfi: http://nodejs.org/api.html#fs-readdir-120 [18:52] mape: But not using the log module [18:52] niklasfi: mape: thanks [18:52] mape: niklasfi: hehe np ;) [18:54] stalled has joined the channel [18:57] mattly has joined the channel [18:58] mikeal has joined the channel [18:59] joshbuddy has joined the channel [19:00] tjholowaychuk: mape: hmm the latest code should create that for you [19:00] tjholowaychuk: mape: its bin/connect, redirects stdout / stderr from the workers [19:00] mape: Hmm k, yeah it dies and leaves children after [19:01] tjholowaychuk: make install from the repo for now, the npm release is a little old [19:01] tjholowaychuk: unless that is what your doing [19:01] mape: Yeah did a pull, seems to work now.. [19:03] mape: Hmm seems that new workers won't increase the req/sec though.. [19:05] mape: Might be the network though [19:05] mape: Yup, around 100MB/sec [19:06] CIA-77: node: 03Peter Griess 07master * r51bd1b4 10/ (lib/http.js test/simple/test-http-server-multiheaders.js): [19:06] CIA-77: node: Only concatenate some incoming HTTP headers. [19:06] CIA-77: node: - Concatenate 'accept', 'accept-charset', 'accept-encoding', [19:06] CIA-77: node: 'accept-language', 'connection', 'cookie', and 'x-*' headers. [19:06] CIA-77: node: - For all others, drop duplicates. - http://bit.ly/apSabJ [19:07] ryah: tjholowaychuk: i havent forgot about daemonize [19:07] ryah: just got delayed [19:07] tjholowaychuk: haha k :) [19:07] saikat has joined the channel [19:12] Validatorian has joined the channel [19:13] pkrumins: JimBastard: you should troll the shit out of everyone [19:13] JimBastard: lol sup pkrumins [19:14] softdrink has joined the channel [19:14] pkrumins: JimBastard: i see nothing wrong in what you did [19:15] pkrumins: and all those people are talking nonsense, so you should troll them for good! [19:15] JimBastard: i was a little bit of a jerk pkrumins , and by little bit i mean a lot [19:15] JimBastard: but like, you are a real coder [19:15] JimBastard: would you ever get mad over this shit? [19:15] JimBastard: parsing FIGlet files with JS? [19:15] pkrumins: not at all sir [19:16] pkrumins: javascript figlets, bah. [19:16] JimBastard: yeah i mean like, there is real code happening all day [19:16] JimBastard: way more important then this bs [19:16] pkrumins: exactly [19:16] pkrumins: absolutely [19:17] mape: Nice, pushing 850MB/sec of js [19:17] ajpiano has joined the channel [19:18] pkrumins: mape: wowsies [19:18] pkrumins: mape: what are you benchmarking? [19:18] mape: Transfer rate: 1041555.96 [Kbytes/sec] received [19:18] mape: pkrumins: http://mape.me:8081/test.html [19:18] speedy1 has joined the channel [19:19] speedy1: hey ppl, is anyone working on chrome and websockets? [19:19] pkrumins: speedy1: got them working [19:19] technoweenie: whiny blog posts and whiny hacker news posts are a dick move, as is all trolling regardless of the reason [19:20] pkrumins: mape: pretty exciting [19:20] speedy1: i'm occasionaly getting "INVALID_STATE_ERR: DOM Exception 11" on send() JS method [19:20] mape: pkrumins: Jup think it is really neat, really like the pre/post hooks for generation, so you can use less/sass/fix stuff while still having asset management [19:20] speedy1: do you know anything about it? sometimes it appears, sometimes not.. x_x [19:21] pkrumins: speedy1: don't know anything about it. [19:21] sechrist: JimBastard: would you do it again?! [19:21] JimBastard: ? [19:21] JimBastard: no [19:21] JimBastard: ohh [19:21] JimBastard: um [19:21] speedy1: kk.. btw. i've got them working, too - building a web MMO game with my own server :) [19:21] JimBastard: no, i would probably just remove the guys name and never get caught [19:21] JimBastard: great lesson learnt [19:21] sechrist: ^^ [19:21] sechrist: don't give credit where credit is due [19:21] JimBastard: yep [19:22] JimBastard: im hoping this dies down in a couple of days [19:22] jakehow has joined the channel [19:22] JimBastard: i dont need the stress over such bullshit [19:22] sechrist: so I wonder -- if non-specified licenses get put on github [19:22] sechrist: and somebody forks it [19:22] sechrist: are they breaking the law? [19:22] Validatorian: JimBastard: fyi, link to 'interactive demo' of javascript-fu is broken [19:22] JimBastard: Validatorian: aye, yeah js-fu isnt released [19:22] pdelgallego has joined the channel [19:22] sechrist: this whole bit-property thing is retarded [19:22] inimino: JimBastard: if you want it to die down, take down the code and apologize [19:22] JimBastard: i had a warning message in there at the top of the readme [19:22] JimBastard: inimino: never and never [19:22] pkrumins: mape: I actually haven't used assetManager. What is it exactly? I just googled but can't find good info on it. [19:22] Validatorian: ah, alright [19:23] inimino: JimBastard: then don't bitch about the heat [19:23] JimBastard: Validatorian: ill add the message back [19:23] technoweenie: JimBastard: well, then it wont die down.. or even if it does you'll still look like a douche in the comments [19:23] sechrist: JimBastard: just re-implement all of his code and insult him more [19:23] JimBastard: inimino: heh, they were asking me [19:23] pkrumins: mape: oh i see, the 1st sentence on 'What it does' :) [19:23] pkrumins: mape: merges, minifies and serves in a single request [19:23] pkrumins: mape: good stuff. [19:23] mape: Yeah [19:23] JimBastard: someone offered to white room it for me, i might just do that [19:23] JimBastard: i gtg work time [19:23] derferman has joined the channel [19:24] technoweenie: he loves it, haha [19:24] sechrist: I guess you can't whiteroom it if you've seen the code [19:24] sechrist: that's so hairy [19:24] mape: So it should minify/group/gzip/long expire and manipulate stuff easily [19:25] _announcer: Twitter: "http://bit.ly/dynxSA A brand new (rough draft) Node.js swiftiply clone in 70 lines :P hot." -- Keith Hanson. http://twitter.com/keith_hanson/status/16715918830 [19:27] brainproxy has joined the channel [19:28] _announcer: Twitter: "The use of multiple cores / processors in Node.js: give birth vorkery: http://wp.me/pfjwm-gP" [ru] -- Serge Shirokov. http://twitter.com/kurokikaze/status/16716045528 [19:42] saikat has left the channel [19:50] pandark_ has joined the channel [19:54] softdrink has joined the channel [19:55] kersny has joined the channel [19:56] bradleymeck: ACTION flops about like a dead fish [19:57] derbumi has joined the channel [19:57] mscdex: dead fish don't flop [19:57] bradleymeck: they've been known to! [19:57] mscdex: then they're not dead ;-) [19:57] bradleymeck: their muscles are still spasming, but they are dead [19:57] bradleymeck: wow spelling [19:58] softdrink: "Fish don't stink… underwater, the fish don't stiiiiink…" — Bobby's World [19:59] richcollins has joined the channel [19:59] softdrink: wow… it's on youtube lol: http://www.youtube.com/watch?v=ggkQ6JPew2E [20:08] ryah: http://gist.github.com/447410 [20:09] mjr_: What's that? [20:09] mjr_: Also, I'm number 8! [20:09] ryah: commits [20:09] phiggins has joined the channel [20:12] linuxsable has joined the channel [20:12] gwoo: ryah: http://www.ohloh.net/p/node_js/contributors [20:12] gwoo: you have not claimed all your commits [20:14] sunpin has joined the channel [20:15] _announcer: Twitter: "http://bit.ly/9A1lQ2 ◊ Connect - Middleware layer for Node.js" -- François-G. Ribreau. http://twitter.com/FGRibreau/status/16718739197 [20:17] teemow has joined the channel [20:22] creationix has joined the channel [20:23] ryah: any objections to cutting a relase now? [20:23] sechrist: only objections to not cut a release [20:24] mjr__ has joined the channel [20:24] tjholowaychuk: no objection from me [20:25] javajunk1 has joined the channel [20:26] sechrist: ryah: would it be possible to provide the fd or be able to bind the fd that's in a http.Client? I have to load balance requests to serve from different ips and I have to hack up net.js every release :\ [20:26] javajunk1: wowzer looks like jimbastards taking some flak this evening ;) [20:26] sechrist: he luvs it [20:27] sechrist: ryah: speaks c++ and Ryan Dahl speaks javascript [20:27] sechrist: everything makes sense now [20:29] creationix: ryah: what's new in the release? [20:29] creationix: I really want marshall_law's patch in if possible [20:29] javajunk1: OOOOO iphone upgrade time [20:29] gwoo: sechrist: hahaah [20:30] gwoo: javajunk1: thanks for reminding me [20:30] gwoo: mine failed an hour ago [20:30] sechrist: http://blog.iphone-dev.org/ [20:30] sechrist: waiting on these guys [20:30] sechrist: they have a unlock for the current baseband? oh SNAP [20:30] bmizerany has joined the channel [20:31] tilgovi has joined the channel [20:31] sechrist: or is it a hack to let ios4 use an older vulnerable baseband [20:31] sechrist: anticipation [20:33] mitkok has joined the channel [20:34] ryah: creationix: what is marshall_law's patch? [20:34] javajunk1: gwoo: failed, as in bricked, or failed as in rolled back ok ? [20:35] gwoo: rolled back. there was an issue with my download [20:36] creationix: ryah: I don't think he's done with it yet [20:36] ryah: what is it? [20:36] creationix: the one that provides process.procPath [20:36] creationix: or whatever he called it [20:36] ryah: ah, okay [20:36] creationix: I've been in a meeting all day, when I left, he was almost done [20:36] sechrist: ryah: http://github.com/ry/node/blob/master/lib/net.js#L901 [20:36] ryah: that can wait for the next one [20:37] ryah: creationix: is it cross platform? [20:37] sechrist: can you make that if(!self.fd){self.fd = sock [20:37] creationix: ryah: yep, done right [20:37] creationix: he has darwin and linux done [20:37] ryah: hm [20:37] ryah: ok, well i'll wait then [20:37] ryah: :) [20:37] creationix: unless he gets sidetracked by work and doesn't work on it for a few days [20:38] ryah: nah, i'll just do the release [20:38] ryah: there's always the next one :) [20:38] creationix: yep :) [20:38] maushu has joined the channel [20:39] javajunk1: ryah: I don't suppose anyone offerred up a windows build bot did they? if not i'll keep plugging away at cygwin on wine on linux ! [20:39] creationix: ryah: I was kinda surprised how few of my commits actually made it to node's code base [20:40] creationix: I guess I'm more a library developer than core developer [20:40] keyvan has joined the channel [20:40] _announcer: Twitter: "@jeremydmiller As will I...how does Fubu help with Client side code? Most UI is now being pushed down. No frameworks (except Node.js) do..." -- ScottGal. http://twitter.com/scottgal/status/16720126865 [20:40] kersny has joined the channel [20:41] mattly has joined the channel [20:41] wink_: creationix: do you have a few moments for me to bug you about Step? :> [20:41] ryah: javajunk1: does buildbot not run on cygwin? [20:41] ryah: why not a virtualized one? [20:41] creationix: wink_: sure if it's quick [20:41] sechrist: ryah: or actually.. does the the fd emit solve my issue? [20:41] stagas_ has joined the channel [20:41] wink_: creationix: it will be, give me 20 seconds to get it typed up :P [20:41] javajunk1: ryah: not sure, my ssh forwarded x11 keeps dying ;) [20:42] javajunk1: a win licence would be required for virt. plus thats a lot more resource req. than I've got spare atm [20:42] wink_: creationix: http://pastebin.com/fKbtB4sj [20:42] ryah: sechrist: hm [20:43] cloudhead has joined the channel [20:43] creationix: wink_: yes [20:43] wink_: ok, thanks. [20:43] wink_: just making sure i wasnt losing my mind :P [20:43] creationix: step is async by default, you have to either return a non-undefined value or call the "this" callback [20:43] pgriess: ryah/sechrist: i think it does not [20:44] pgriess: ryah/sechrist: the right api there is, imo, the abililty to pass a net.Stream to http.Client [20:44] sechrist: I posted to the list but :\ [20:44] wink_: and whatever value i return gets passed into the next function as the 2nd parameter? [20:44] sechrist: oh it is? [20:44] creationix: wink_: yep [20:44] pgriess: sechrist: well, that's just what i think ;) but yeah [20:44] wink_: roger that, thanks. [20:44] creationix: wink_: and if you throw an exception it will be caught and forwared to the first paremeter [20:44] pgriess: sechrist: functionality doesn't exist yet [20:44] stagas_: wink_: you need to set this or this.parallel() in a callback [20:44] sechrist: noooooooo >.> [20:45] wink_: i think im still getting used to js's scoping semantics [20:45] wink_: :P [20:45] sechrist: more like scoping awesomeness [20:45] riottaba has joined the channel [20:45] wink_: im sure it is once you get your arms around it [20:45] pgriess: sechrist: unfortunately fixing this suggests some serious re-factoring, since http.Client extends net.Stream [20:45] stagas_: wink_: and using this.parallel() would pass each returned value in 2nd, 3rd, etc. argument in the second function [20:46] stagas_: (if I got it right) [20:46] wink_: i thought this.paralell() would remove the ordering of the execution of the functions [20:46] wink_: er parallel [20:46] stagas_: yes they execute parallel but the return values should be ordered [20:47] ryah: i still not understand the sechrist's problem [20:48] creationix: wink_: parallel and group are for multiple callbacks per step [20:48] pgriess: ryah: he wants to create an http.Client that is bound to a particular interface [20:48] sechrist_ has joined the channel [20:48] creationix: each step is always sequential [20:48] ryah: how do you do that? [20:48] javajunk1: we still trying to bind the exit interfaces ? that conversation started a week ago!! [20:48] mjr__: ryah: check out the -s option for telnet [20:48] pgriess: ryah: you cannot currently [20:49] pgriess: my suggestion would be to use net.Stream and process.binding('net') primitives to create a socket that's properly bound, create a net.Stream around it, then hand that stream to http.Client [20:49] rictic has joined the channel [20:49] pgriess: but the http.Client internals make that impossible now, and difficult to build due to http.Client inheriting from net.Stream [20:49] sechrist_: ACTION nods [20:49] ryah: what if we just allow streams to bind.. [20:49] ryah: stream.bind(addr) [20:50] pgriess: hm [20:50] wink_: creationix: i have one more question if you'll be around for about 2 more minutes so i can get an example drawn up :D [20:50] sechrist: that might work if http.client exposes the stream [20:50] pgriess: i think that works, since streams exist as unconncted intiailly [20:50] creationix: wink_: sure [20:50] pgriess: sechrist: httpclient is a stream [20:50] ryah: the second problem is getting the http client to not connect immediately [20:50] ryah: so i think [20:50] ryah: c = new http.Client() [20:51] ryah: c.bind(7000, "myhost.com") [20:51] ryah: c.request() [20:51] ryah: ? [20:51] pgriess: yeah that works for me [20:51] sechrist: I'm binding after request() [20:51] sechrist: but before request.end() [20:51] pgriess: (but, admittedly, i'm not the one w/ a use case ;) [20:51] ryah: sechrist: but you want to bind before it connects [20:51] ryah: or? [20:52] ryah: suffex those verbs with () [20:52] ryah: you want to bind() before you connect(), right? [20:52] sechrist: oh oh -- I mean in code. I forgot it's nonblocking. [20:52] _announcer: Twitter: "Anyone have benchmarks between #expressjs and #geddy? #node.js #lazyweb" -- Nick Campbell. http://twitter.com/ncb000gt/status/16720764016 [20:52] sechrist: race condition I guess [20:52] sechrist: hehe [20:52] ryah: httpClient.request() calls connect() [20:53] wink_: creationix: hm, it seems to be working in my example ;) [20:53] wink_: so i must've flubbed something else up, nm [20:53] sechrist: well my goal is just to bind to the outgoing ip, I don't mind how it works [20:53] sechrist: but binding after a connect seems.. not possible? [20:53] skampler: hey, require('url').parse('file://foo').pathname should return 'foo', right? [20:53] ryah: sechrist: yeah, i'd think it'd result in error [20:54] sechrist: ryah: http://gist.github.com/447469 [20:54] sechrist: that's what I'm using currently [20:54] sechrist: however [20:54] markwubben has joined the channel [20:54] sechrist: my net.js modification is when it opens the socket [20:54] sechrist: so you're correct yeah [20:55] sechrist: i'm racing the dns lookup i tlooks like [20:55] ryah: ACTION nod [20:55] ryah: okay so we'll add a bind to the stream. [20:56] _announcer: Twitter: "First steps with node.js + websockets + coffee-script + mongodb => Eventful night :) Event-based programming takes some getting used to." -- Ratan J. Sebastian. http://twitter.com/rjsvaljean/status/16720967120 [20:56] sunpin has joined the channel [20:56] pgriess: ryah: ok, i can do that if you want [20:57] ryah: pgriess: okay, thanks [20:57] pgriess: evidently i have some work to do to move up the contributor list ;) [20:58] pgriess: i'll be sure to break the patch into 10 submissions [20:58] sechrist: ryah: how do releases work? do you just pick a time and tar up the head? [20:58] mjr_: pgriess: ryah almost always combines them though [20:59] mjr_: as if he was planning on doing a commit count leader board all along [20:59] pgriess: mjr_: yeah. i was joking [20:59] ryah: :) [20:59] ryah: i'd do a LoC count, but i don't know how [21:01] sechrist: thanks pgriess [21:01] mape: ryah: +1 for each LoC added and +2 for every LoC removed? ;) [21:01] pgriess: sechrist: np. mind if i send you a patch for testing? [21:01] sechrist: sure [21:04] _announcer: Twitter: "#nodejs v0.1.99 released http://groups.google.com/group/nodejs/browse_thread/thread/7fe10512dfd96d44" -- Ryan Dahl. http://twitter.com/ryah/status/16721366801 [21:04] CIA-77: node: 03Ryan Dahl 07master * ra620b72 10/ (AUTHORS ChangeLog doc/api_header.html doc/index.html wscript): bump version - http://bit.ly/bZ4q8I [21:05] mtodd has joined the channel [21:05] sechrist: http://www.youtube.com/watch?v=aJQZnK3RAv4 [21:06] b_erb: ry, you really listen to sido? :D [21:06] sechrist: prince neutered youtube of all of his songs -- jeeze [21:07] ryah: b_erb: agro berlin! [21:07] keyvan has joined the channel [21:07] b_erb: ry: haha, can't believe it [21:09] mAritz: oh god... that changes everything. i might have to go back to php if you don't change your taste in music fast! :D [21:09] sechrist: http://www.last.fm/user/_ry banned user? [21:09] sechrist: haha [21:09] b_erb: ry: the genious behind one of my favorite and sophisticated tool, node.js, likes that music that is regarded soo ' lower class' in germany. but hey, i like that stuff also :) [21:09] sechrist: du, du hast, du hast mich [21:09] mAritz: that's not sido [21:10] sechrist: it's german [21:10] mAritz: german lyrics at least. :P [21:10] sechrist: rammstein is german [21:10] marshall_law: creationix: ryah: it'll probably be later tonight before i can submit the patch, got some work stuff keeping me busy until then :) [21:11] mAritz: yeah, but what you quoted there is not a valid sentence in german at all *duck* [21:11] b_erb: sechrist: it's misspelt, though [21:11] sechrist: how so? [21:11] creationix: marshall_law: later today is great [21:11] sechrist: it's a proper noun [21:11] rauchg has joined the channel [21:11] ryah: b_erb: ich hab fuer ein paar jahre in koeln gelebt [21:11] creationix: we just released v0.1.99 anyway [21:12] tsyd has joined the channel [21:12] _announcer: Twitter: "@ryah It doesn't get closer to 0.2.0 then this! #nodejs" -- Rob Ellis. http://twitter.com/rob_ellis/status/16721785247 [21:12] sechrist: next version: v0.1.99.1 [21:12] creationix: hmm, my version checks so far are alphabetical [21:12] creationix: I guess c0.1.100 will break them [21:12] marshall_law: creationix: oh cool [21:12] b_erb: ryah: for real? well, that explains how you got to know such stuff [21:13] _announcer: Twitter: "Allllmooosstttttt thereeeeeeeee. 0.1.99 of #node.js http://nodejs.org" -- Chase Sechrist. http://twitter.com/chasesechrist/status/16721830891 [21:14] mape: moving closer to 0.2.0 [21:14] rauchg: no, next is 0.1.99.1 [21:14] rauchg: till 99 [21:14] sechrist: of course [21:14] mape: or just jump to 0.3 [21:14] mAritz: or v0.1.999 [21:14] sechrist: or the next release is a month off and there's a release party [21:15] creationix: mmm, party [21:15] mAritz: in cologne... bwahahaha [21:15] sechrist: at YC [21:15] sechrist: i'm game [21:15] creationix: ryah: by the way, my company wants to host regular node meetups like the last one [21:15] b_erb: mAritz: i'd be there [21:15] aaron___ has joined the channel [21:16] ryah: creationix: cool [21:17] ryah: creationix: i like meetups and node [21:17] creationix: ryah: they will even provide food every time [21:17] rauchg: wow, i'm coming every time then [21:17] ryah: i'm there [21:17] mAritz: b_erb: I wouldn't :P [21:18] ryah: node was first introduced at a webmontag in cologne [21:18] ryah: no one cared :/ [21:18] jxson has joined the channel [21:19] sechrist: poor fools [21:19] mAritz: i would've cared in potsdam/berlin... didn't know about node until after jsconf in berlin though. [21:19] mjr_: ryah: node LoC count: https://gist.github.com/932dc1bd0c895b7e1a9d [21:19] sechrist: I still have friends that don't get it, or think node.js is stupid because it's javascript [21:19] sechrist: i lulz at htem [21:19] ryah: mjr_: nice [21:19] sechrist: but rhys jones died in 2007 [21:20] sechrist: http://en.wikipedia.org/wiki/Murder_of_Rhys_Jones [21:20] BrianTheCoder has joined the channel [21:20] mjr_: my perl one-liner skills are still intact. [21:20] mAritz: all i get when i tell others about node is vague interest and then reluctancy to learn something new... (mostly backend guys that have little clue about javascript) [21:20] b_erb: ryah: funny, i introduced node.js at a webmontag some weeks ago in ulm, germany. almost no one cared either. but here webmontage are more talks about cms platforms zzZZzzz [21:20] ryan_gahl: sechrist: startup in my incubator has same attitude... "j2ee is more mature" [21:20] ryah: b_erb: yeah, in cologne too [21:20] sechrist: ryan_gahl: you have an incubator? [21:21] ryan_gahl: in a startup [21:21] mjr_: creationix: check out the LoC count. Your contributions seem more significant that way. [21:21] ryan_gahl: that's in one [21:21] sechrist: ah ok [21:21] joshbuddy has joined the channel [21:21] sechrist: j2ee is more mature [21:21] sechrist: but it's j2ee [21:21] ryan_gahl: yes [21:21] ryah: mjr_: hm, seems like felix should be on there [21:21] ryan_gahl: more mature is moot [21:21] b_erb: i'm currently using node.js for an university project. even some of our supervisors didn't get the idea behind it [21:21] mscdex: ew java! [21:21] mjr_: another thing that is more mature is COBOL [21:21] sechrist: I agree [21:21] ryan_gahl: but they don't get it [21:21] mscdex: :-P [21:21] aaron___: ryah: can I ask you a philosophical question on stream.pause? [21:22] ryah: aaron___: sure [21:22] LOLWUT_ has joined the channel [21:22] mjr_: ryah: oh, my \w thing doesn't match his unicode name [21:22] hellp has joined the channel [21:22] sechrist: ryan_gahl: the maturity thing comes in to play when you want a "framework", or want to render html pages. I still only use node for ajax services and non-web things. Rendering pages is kind of grey area for me until there's something good. [21:23] creationix: I'm running out to lunch [21:23] LOLWUT_: hey guys [21:23] creationix: I just got approval for monthly node meetups [21:23] sechrist: LOLWUT_: wut [21:23] creationix: we'll plan when I get back [21:23] mscdex: hi Jim [21:23] LOLWUT_: sechrist: idunnolol [21:23] LOLWUT_: just sayin hi [21:23] aaron___: ryah: cool; ideally, it would make my pattern of "receive incoming connection -> do db lookup -> decide to stream connection or proxy it" code more straightforward if calling stream.pause paused all events that hadn't been emitted to observers yet, including data & end, even if nodejs itself was ready to fire them. Right now, calling pause on a request that I'm being asked to bind to, but is already 'completed' causes end to fire immedi [21:23] aaron___: irrespective of pause, and forces my code into buffering it. [21:24] _announcer: Twitter: "@alangraham I shit you not: http://nodejs.org/ and http://jaxer.org/ very viable and makes Server->Client more logical." -- ScottGal. http://twitter.com/scottgal/status/16722412093 [21:24] aaron___: ryah: so my question is, why is it that way, and not the way I just described? Am I missing something? would changing it be useful/viable? [21:24] ryah: aaron___: it is that way for sockets [21:24] ryah: for the http objects it continues parsing the packet that it has [21:25] ryah: but others have complained about it, and i suppose it should be changed to how you described [21:26] LOLWUT_: hey, is there any way to retrieve the remote address of a client when using the regular tcp server? [21:26] aaron___: ryah: so I understand it's more 'correct' from the data-received-from-the-socket perspective, but it creates oddball situations when talking to the API. Anyway, that's my 2cents, and I'm coding my proxy around it for the time being :) Happy to weigh in on any github issue for it if one exists [21:26] LOLWUT_: iirc the http version is request.connection.remoteAddress, but I haven't found any equivalent for the other version [21:26] aaron___: ryah: on a more important note: I love nodejs! the project I'm working on is a blast because of it [21:26] LOLWUT_: aye, it's very cool [21:27] mscdex: !seen JimBastard [21:27] mscdex: huhuhuh [21:27] LOLWUT_: the only thing I'm really having trouble with it at this point is having a way to identify my users [21:28] mde: aaron___: ryah: FWIW, I was tripping over that same thing over the weekend. The actual behavior was a little surprising, considering it's called 'pause.' [21:28] ryah: aaron___: yeah, i think your complaint is valid [21:29] JimBastard has joined the channel [21:29] ryah: it requries slightly more work at the http.js level, but that's okay [21:29] _announcer: Twitter: "Now I'm probably a homicide case for Node.js. @ Ryah, the head behind it, stands on "Aggro Berlin! Who can contradict?" [de] -- Benjamin Erb. http://twitter.com/b_erb/status/16722674194 [21:29] LOLWUT_: say, for example I wanted to do a sort of emulated irc, where the messages reach only the clients intended [21:29] LOLWUT_: rather than the clients sorting through all the messages [21:29] b_erb: argh, i hate my tweets being translated here [21:29] LOLWUT_: has anyone devised a way of doing this or working with the descriptors themselves? [21:29] aaron___: ryah: happy to help in some way, just let me know. Haven't yet done a github contribute to anyone, but if thats most helpful, I can shoot fo rit [21:29] mjr_: b_erb: what an elegant translation that was. [21:30] b_erb: mjr_: yeah especially knockout argument == homicide case [21:30] mscdex: lol [21:30] LOLWUT_: anyone? [21:31] mscdex: kid.js [21:31] javajunk1: LOLWUT_: it rather depends on the situation,is this websockets ? [21:32] LOLWUT_: yes it is [21:32] LOLWUT_: I'm using node.ws.js [21:32] Tim_Smart has joined the channel [21:32] LOLWUT_: I figured "growing into" a websocket design was going to be less headache over longpolling and dinking around with that over something that's inherently asynchronous [21:32] javajunk1: k, so when they connect you can uniquely identify them, and collect all your request objects together to do pretty much whatever you want ? [21:33] mikeal has joined the channel [21:33] LOLWUT_: basically I'd like the server to determine who is supposed to retrieve what [21:33] javajunk1: based on what rules [21:33] LOLWUT_: for all intents and purposes the project would be IRC in javascript [21:33] LOLWUT_: and operate exactly as IRC would [21:34] LOLWUT_: just trying to do a first project with some good potential for reuse [21:34] javajunk1: LOLWUT_: okay, so you're asking how you might operate 'rooms' .. .i.e. some groups of people can only see each other, but not the other groups of people ? [21:34] LOLWUT_: correct [21:34] JimBastard: hey LOLWUT_ [21:34] JimBastard: you should fork http://chat.nodejitsu.com/ [21:34] technoweenie has joined the channel [21:35] LOLWUT_: yeah, I kinda wanted to do it from the ground up to help my grasp more of the concepts going on [21:35] aaron____ has joined the channel [21:35] JimBastard: http://github.com/scottgonzalez/node-chat/ [21:35] JimBastard: i got ya [21:35] LOLWUT_: and because this extends beyond the chat example [21:35] LOLWUT_: for instance I'd like to try doing a MUD [21:35] LOLWUT_: which operates under the same principles [21:36] LOLWUT_: the problem being I don't see anywhere in the documentation for manipulating the descriptors [21:36] LOLWUT_: or at least finding an IP address [21:36] LOLWUT_: the only workaround I've thought of so far is some convoluted keypairs and encryption [21:36] LOLWUT_: to prevent snooping of private messages [21:37] LOLWUT_: if I could just plop the descriptors into an array [21:37] LOLWUT_: as they came in [21:37] LOLWUT_: I'd be golden [21:37] indiefan has joined the channel [21:38] mjr_: updated node LoC count with regex that works: https://gist.github.com/932dc1bd0c895b7e1a9d [21:39] cloudhead has joined the channel [21:39] sechrist: so like 15k for ryah [21:39] mape: hehe [21:40] mape: Something worth spending time on ;) [21:40] Sou|cutter has joined the channel [21:41] namelessjon: Can I find my own ip using node? [21:41] LOLWUT_: you can, no idea how though [21:41] sechrist: you mean like system interface [21:41] sechrist: or [21:41] Tim_Smart: namelessjon: remoteAddress? [21:42] sechrist: remote ip [21:42] namelessjon: sechrist: The former. [21:43] sechrist: pipe ifconfig into grep/awk/whatever? [21:43] mjr_ has joined the channel [21:43] sechrist: :X [21:43] namelessjon: Actually, I realised I might not need it. [21:43] LOLWUT_: that sounds messy [21:44] sechrist: I don't think there's an other wa [21:44] LOLWUT_: :/ [21:45] LOLWUT_: that'd probably be real high up on my wishlist [21:45] mscdex: hostname -i [21:45] LOLWUT_: session management and a full networking toolkit of functions [21:46] mscdex: that gets you your lan ip [21:46] LOLWUT_: it's still hacky [21:46] LOLWUT_: and ugly.. [21:46] LOLWUT_: lol [21:46] LOLWUT_: and forks an additional process [21:48] slaskis has joined the channel [21:48] konobi: who all is working on npm? [21:49] ryah: konobi: isaacs [21:49] konobi: ACTION sees a problem already [21:49] namelessjon: Seems like I don't need it, anyways. [21:49] konobi: mainly that the package list is a single file [21:49] mape: ? [21:49] LOLWUT_: fortunate for you :/ [21:49] LOLWUT_: my design kind of relies on what appears unimplimented [21:50] konobi: that gets out of hand very quickly and hard to recover from... anyone remember when the ruby gems list could no longer fit into memory on VPSs? [21:50] LOLWUT_: nah, not a ruby guy. [21:50] ryah: konobi: i'm pretty sure it's in couchdb [21:51] mape: konobi: you mean the website listing stuff? [21:51] mape: or package.json [21:51] konobi: package.json [21:52] mape: You are worried the package file would become so large it will not fit into RAM? [21:52] namelessjon: Thanks for the suggestions, anyway. [21:52] konobi: mape: it's happened before [21:52] konobi: and I don't want to download gigantic files every time I load up a commandline [21:52] Kiba has joined the channel [21:53] ryah: konobi: package.json is a description of one package [21:53] ryah: it's not a list of all of them [21:53] mape: Isn't the issue more that the files are gigantic rather then it not fitting in ram? [21:53] Tim_Smart: The longest package.json I have seen is like 30 lines or something [21:53] konobi: http://registry.npmjs.org/ [21:53] Kiba: hello [21:53] Kiba: how do I integrate a loop into server.js [21:53] Kiba: err [21:53] Kiba: into node [21:53] konobi: that's what i meant [21:53] ryah: konobi: ah [21:53] mape: konobi: http://npm.mape.me/ [21:53] Kiba: I need to run a game server [21:53] Kiba: and that automatically require a loop of some kind [21:53] ryah: konobi: i'm pretty sure that can be paginated, queried [21:53] LOLWUT_: Kiba: same way you would in js [21:54] konobi: mape: ha... nice [21:54] Kiba: but will it block the event listeners? [21:54] LOLWUT_: you just have to tie your events to your functions [21:54] konobi: ryah: yeah... probably similar to the CPAN indexes [21:54] LOLWUT_: it's concurrent in design [21:54] LOLWUT_: so no [21:54] markwubben_ has joined the channel [21:54] Kiba: how can I do that, LOLWUT_? [21:54] LOLWUT_: everything in node is non-blocking by default [21:54] LOLWUT_: or so I'm told [21:54] mape: konobi: That is just a couchapp showing an index, you can do packages specificly.. [21:54] ryah: konobi: it's just a couchdb - so i think it's fine. afaik it doesn't require downloading descriptions of all packages in order to install one [21:54] Kiba: I heard JimBastard got mentioned on Hacker News. Is that true? [21:54] LOLWUT_: Kiba: basically it'd be like.... [21:55] JimBastard: LOL [21:55] JimBastard: SEVERAL TIMES [21:55] LOLWUT_: if you had a server running taking input from a client [21:55] LOLWUT_: you'd bind to the 'data' event [21:55] JimBastard: now you'll have to excuse me, im going home to pay a developer to get rid of this assholes code forever [21:55] JimBastard: good day [21:55] mape: konobi: like http://registry.npmjs.org/fab/ [21:55] LOLWUT_: and specify the function to call on the event [21:55] konobi: ryah: ah... so it doesn't need "search" by downloading the file [21:55] LOLWUT_: do all your looping in said function [21:55] Kiba: The world is a very small place O_o [21:55] LOLWUT_: node runs concurrently, so while the looping is taking place for that one client [21:56] LOLWUT_: other clients can perform other tasks [21:56] Kiba: a regular loop function will be just fine? [21:56] LOLWUT_: should [21:56] LOLWUT_: I've had no problems thus far [21:56] Kiba: o_O [21:56] LOLWUT_: well [21:56] mjr_: Kiba: you don't get to control the event loop in node, just like you don't get to control the event loop in browser-based JS. [21:56] LOLWUT_: aside from being able to tell who's who [21:56] LOLWUT_: once everyone is connected [21:56] LOLWUT_: I suspect that's something the devs need to implement though [21:56] konobi: so to run an npm mirror you have to have couchdb, etc. etc.? [21:57] mjr_: Kiba: so you just listen for events, and node will run the event loop for you. [21:57] Tim_Smart: konobi: isaacs is working on a next version [21:57] mape: Tim_Smart: not sure if you care but: http://mape.me:8081/test.html [21:57] LOLWUT_: mjr_: pretty sure he's talking about looping within loops [21:57] konobi: ah, k... [21:57] LOLWUT_: within the event loop anyhow [21:57] Kiba: how many of you will play my online tetris game when I am done? [21:58] LOLWUT_: depends on how long I sit here waiting for my socket descriptor api [21:58] LOLWUT_: lol [21:58] Tim_Smart: mape: Oh yeah. I made a asset package also :) [21:58] Tim_Smart: packager* [21:58] mape: hehe yeah thats why I figured you might be interested [21:59] pandark_ has joined the channel [22:01] _announcer: Twitter: "Why node.js matters. http://bit.ly/byCuB6 (I'm currently in the same sense of awe. Also, playing with the same stack.)" -- Rakesh Pai. http://twitter.com/rakesh314/status/16724392479 [22:04] Kiba: interesting to see my eassy length comment on hacker news goes unvoted practically [22:05] LOLWUT_: don't worry too much over peer approval [22:05] LOLWUT_: :) [22:07] Kiba: there was one time that I suggested letting the robots do the sweeping, taking out of the trash..I got downvoted to negative. Then positive. [22:07] fowlduck has joined the channel [22:07] keyvan has joined the channel [22:07] jashkenas has joined the channel [22:09] jashkenas: anyone got a nice example of a deploy script for running a Node.js server? I'm trying to get something cooking with nohup, and can't seem to get it to demonize properly. [22:10] tjholowaychuk: jashkenas: i just use nohup right now [22:10] tjholowaychuk: works fine for me [22:10] Tim_Smart: I'm using upstart + monit [22:10] jashkenas: tjholowaychuk: this is using express ... so if you don't mind Gist-ing an example of how you do it, I'd greatly appreciate it. [22:11] tjholowaychuk: just regular old `nohup node app.js &` [22:11] tjholowaychuk: once process.daemonize() is in connect will be great [22:11] tjholowaychuk: for this [22:11] jashkenas: ok. [22:11] konobi: `node foo.js >/dev/null 2>&1 & disown` [22:11] drostie has joined the channel [22:11] konobi: svc++ [22:12] sunpin: @jashkenas: http://pastebin.com/wNJNkbjg [22:12] jashkenas: thanks folks. [22:12] sunpin: what i've been using [22:13] ryan_gahl: tmpvar: biting my tongue now [22:13] ryan_gahl: except for saying that ;) [22:14] jxson has joined the channel [22:16] joedev has joined the channel [22:17] joedev: Hi ryan_gahl [22:18] joedev: as luck would have it, this is also the day of this story: http://opinionator.blogs.nytimes.com/2010/06/20/the-anosognosics-dilemma-1/?hp [22:22] joedev: the original paper is of course more enlightening, and a funny read to boot. but I wouldn't want to tax you too much [22:23] _announcer: Twitter: "Photo: Node.js is very continuationesqe… http://tumblr.com/x1ebyl61o" -- kyleburton. http://twitter.com/kyleburton/status/16725586234 [22:23] jashkenas: konobi: sunpin: one last question ... After I run the nohup or disown command over "ssh -t", it doesn't seem to let me disconnect from SSH. Any tips for getting it to disconnect? [22:23] charlesjolley- has joined the channel [22:23] steadicat has joined the channel [22:25] jashkenas: nevermind. think I figured it out... [22:30] kodisha has joined the channel [22:34] saikat has joined the channel [22:35] saikat: how do people who run long-running web apps (like chat clients) handle updates to the backend that break the client/server protocol? [22:36] saikat: for example, say i change the way chat messages are sent to the backend [22:36] JimBastard has joined the channel [22:36] saikat: and when i restart my backend server, older clients messages are now not understandable (without a translation layer) [22:36] mape: migration? [22:36] joedev: well, you can build updateability in [22:36] rektide has joined the channel [22:36] sechrist: you have downtime [22:36] sechrist: or you get really overly complexed [22:36] saikat: yeah so far my approach has been [22:36] LOLWUT_: ^ [22:37] saikat: to add code to understand older messages on the backend [22:37] sechrist: but since it's javascript to javascript you could give it a serialized function [22:37] saikat: and translate them [22:37] sechrist: that's neat [22:37] joedev: but after the fact, yeah you would need to force a refresh [22:37] saikat: but it's annoying to maintain [22:37] LOLWUT_: maybe have the current script eval and exec the new one? ;3 [22:37] sechrist: function overwrite baby [22:37] saikat: LOLWUT_: yeah i've been toying with ideas like that - i wonder if anyone already does it? [22:37] saikat: it is more complicated than it seems [22:37] LOLWUT_: I've considered it [22:37] LOLWUT_: for exception recovery [22:37] LOLWUT_: in certain cases [22:37] sechrist: exceptions? who has exceptions? [22:37] ryan_gahl: add a "version" tag to the data [22:38] saikat: or rather, it depends on the change [22:38] LOLWUT_: as you seemingly can't set your conditions for when they occur [22:38] saikat: ryan_gahl: yeah i do that too [22:38] saikat: but it doesn't get around the problem [22:38] saikat: that i still need version conversion code [22:38] ryan_gahl: well yes [22:38] saikat: and i hate having all this extra code hanging around for a long time [22:38] jashkenas has left the channel [22:38] sechrist: this is an interesting problem -- I wonder if there's academia papers on solving issues like this [22:38] LOLWUT_: saikat: what I had been considering previously for recovering from exceptions was something like: [22:38] ryan_gahl: FWIW, long-running APIs like that usually use versions, and then keep older versions around for legacy clients for a reasonable period of time [22:39] sechrist: systems like erlang allow hotswappable code [22:39] joedev: well, I tend to have returns which can insert new script tags [22:39] sechrist: so surely there's a formed method to this [22:39] joedev: if you adopt something like that you can load your version conversion layer [22:39] saikat: sechrist: interesting - hotswappability is what i want, but not sure how complicated it is - have you looked into how erlang does it? [22:39] LOLWUT_: 1) whatever occurs triggering your switch, 2) eval a separate file and execute within scope, 3) somewhere between 1 and 2 swap the files [22:39] sechrist: saikat: not on the node side -- but on the client side you can just overload the function [22:39] LOLWUT_: or I suppose even afterwards [22:39] joedev: saikat: it depends entirely on how much you are changing and how your code is structured [22:39] saikat: like another idea i had for my specific case [22:40] LOLWUT_: I just don't know if that's an efficient way of doing that [22:40] saikat: i am going to end up with clients with socket connections to my node server [22:40] LOLWUT_: but if you're seldomly updating [22:40] sechrist: node hotswapping is a bit of a pipe dream right now [22:40] LOLWUT_: I don't think it would matter [22:40] saikat: so doing something where my node server pushes the new code to the clients [22:40] ryan_gahl: sechrist: nodules does a decent job of this [22:40] LOLWUT_: why not "spill" over to another port [22:40] sechrist: are you using web sockets or anything persistent? [22:40] saikat: LOLWUT_: yeah i update often, but the actual client/server protocol breaks rarely - just when it does it's a pain [22:40] LOLWUT_: until the code change happens [22:40] LOLWUT_: like [22:40] LOLWUT_: two versions of your servers [22:40] saikat: sechrist: i'm using websockets [22:40] saikat: or well, socket.io [22:40] LOLWUT_: for a fallback while you're updating the main [22:40] saikat: so yes, persistent connection [22:41] LOLWUT_: the clients switch ports for the time being [22:41] sechrist: <3's socketio [22:41] LOLWUT_: and switch back after the update is done [22:41] saikat: LOLWUT_: but the trick is [22:41] saikat: i still need to force the client to update [22:41] saikat: somehow [22:41] saikat: without making it hugely annoying [22:41] ryan_gahl: saikat: if this is production stuff, you definitely want to maintain multiple versions for a clean switchover [22:41] saikat: my users might be in the middle of doing work (i run a wireframing tool) [22:41] LOLWUT_: send