[00:00] tjholowaychuk: does crypto expose base64? [00:00] isaacs: tjholowaychuk: if it does, then i need to remove the base64 module in npm [00:01] isaacs: tjholowaychuk: i don't see it in there. [00:01] tjholowaychuk: damnit [00:01] tjholowaychuk: its in the cc [00:01] gerad: k23z__: nobody mentioned it, but if you want to be gross, you can also use global (not that I'd advise!) [00:02] isaacs: gerad: there are a lot of other gross things no one mentioned. [00:02] pufuwozu has joined the channel [00:02] ajpiano has joined the channel [00:04] gerad: isaacs: hahaha, global has uses, maybe not for libraries, but certainly for convenience in other things :-) [00:04] isaacs: yeah, i usually just dump all over the global space in tests. [00:04] isaacs: cuz i mean, why not? [00:04] gerad: that [00:05] gerad: 's exactly what I was thinking [00:05] isaacs: but tests are like, behind closed doors... [00:05] isaacs: anything goes [00:05] isaacs: it doesn't have to be pretty, it just has to keep things good. [00:05] gerad: though jashkenas makes it kinda hard to be too gross with coffeescript [00:07] dgathright has joined the channel [00:08] k23z__: isaacs: http://github.com/isaacs ? [00:09] isaacs: k23z__: that's me [00:10] k23z__: what does exports = module.exports = thing mean ? [00:11] k23z__: can you give an example on this ? [00:11] k23z__: also , assert.equal(true,true,"wooohoooo!!!"); doesn't output nothing for me [00:11] k23z__: I'm running that in node-repl [00:11] k23z__: and see nothing [00:11] isaacs: so... module.exports is what's actually returned after your module runs. [00:11] isaacs: exports is a reference to it [00:12] isaacs: but you can just set module.exports to something, and that's what'll be returned when you require("module") [00:12] isaacs: re: assert.equal(true, true) ti's showing nothing because successful asserts are silent. [00:12] isaacs: failed asserts throw [00:15] hpoydar has joined the channel [00:15] k23z__: isaacs: can a module return something ? how ? [00:16] isaacs: k23z__: foo.js ~ module.exports = "foo"; [00:16] k23z__: isaacs: isn't the assert supposed to show the message I wrote as 3rd parameter or something ? [00:16] isaacs: k23z__: bar.js ~ require("./foo") === "foo" // true [00:16] isaacs: k23z__: it only shows it if it fails [00:16] isaacs: k23z__: assert.equal(true, false, "ONOES!!") [00:16] k23z__: hmm ok [00:17] isaacs: k23z__: the idea is that you should see nothing when you run your test script [00:17] k23z__: hmm, I'm used to seeing things when tests pass [00:17] k23z__: this is common in Google Test [00:18] k23z__: or Perl's popular test module Test::More [00:18] k23z__: or Python's testing module [00:18] isaacs: k23z__: then just do sys.puts("ok") at the end or something [00:18] k23z__: which I can't remember the name of .. [00:18] isaacs: or put some debug output in there. [00:18] isaacs: but assert is just like the C function of the same name. [00:18] isaacs: if it's ok, it does nothing. if it fails, it throws [00:18] isaacs: crashes, explodes, etc. [00:19] k23z__: can someone .. like .. notify the author of assert module that everybody is doing things "This" way and he's doing it "The other" way ? [00:20] k23z__: isaacs: ah ok then .. [00:20] k23z__: then I'll stop complaining [00:20] isaacs: k23z__: the idea is that you could write something fancier if you want, but this is minimal and all node reallyneeds. [00:20] isaacs: k23z__: you might wanna check out jspec or one of those other things. [00:21] k23z__: no assert's ok I'll just use it like that [00:29] richcollins has joined the channel [00:40] falconair has joined the channel [00:42] falconair: is the "const" keyword discouraged in node.js code? I just ran jslint (node-jslint) on my code and it crapped out after seeing a const [00:42] Tim_Smart: const is seamonkey only I thought? [00:44] isaacs: falconair: yes, it's discouraged by v8's lack of support for it [00:44] falconair: no const for v8? node doesn't complain and it seems to work fine ... jslint doesn't like it however [00:44] fictorial: chuckle [00:44] isaacs: weird. [00:44] isaacs: i didn't realize v8 supported const. [00:45] isaacs: ACTION doesn't like const anyway. let is wonderful, but const is almost always a bad idea. [00:45] isaacs: whaddaya know... it does work fine. [00:45] isaacs: weird. [00:45] malkomalko has joined the channel [00:46] isaacs: no let though. that's sad. [00:46] k23z__ has joined the channel [00:47] fictorial: let makes me think of lisp and ocaml [00:48] jashkenas: does let() give you anything you can't already do with a closure? [00:49] richcollins has joined the channel [00:49] Tim_Smart: jashkenas: https://developer.mozilla.org/en/New_in_JavaScript_1.7#Block_scope_with_let_(Merge_into_let_Statement) [00:49] jashkenas: Yeah, read it... just not sure if any of those examples are anything really new. [00:50] jashkenas: Having to keep in mind, quote: "An implicit block is one that is not bracketed by braces; it's created implicitly by the JavaScript engine." ... does not inspire great confidence in let. [00:51] dabreaka_ has joined the channel [00:52] dabreaka__ has joined the channel [00:52] Tim_Smart: Does v8 support yield yet? [00:55] fictorial: This is interesting, and by no means an endorsement. I've heard both good and bad things about The Planet. That said, you guys might want a server to toy with: http://www.theplanet.com/sand-castle/ [00:56] fictorial: in short, apply for a server, and it's free for a year. I'm happy with a linode but hey, whatever. [00:57] stephenjudkins has joined the channel [00:57] batasrki has joined the channel [00:59] fictorial: Nevermind, they're out of servers. Use Joyent anyway. :) [01:00] stephenjudkins: what's the best persistence solution for a node app? i'm looking for one that facilitates fast prototyping. (easy API and bug free). ACID compliance is not a high priority, although I am fine with using a SQL database. [01:00] Tim_Smart: Urgh I wish they still had some left. I'm currently on low income and would love a "sandbox" to play with ideas [01:00] fictorial: Tim_Smart: http://prgmr.com/xen/ [01:00] Tim_Smart: Yeah low income is low [01:00] k23z__: I get this kind of stuff from sys.p [01:00] k23z__: , statusCode: null [01:00] k23z__: , client: [Circular] [01:00] k23z__: , httpVersionMajor: 1 [01:00] k23z__: , httpVersionMinor: 1 [01:01] k23z__: I don't like them [Circular] things [01:01] k23z__: how can I actually see what's there instead of getting these "[Circular]" things [01:01] pquerna: prgmr <3 [01:01] k23z__: I understand that it's probably some self-reference but I need to know what it's refering to exactly [01:01] technoweenie: stephenjudkins: mongo probably [01:01] fictorial: k23z__: use non-circular objects? [01:02] fictorial: stephenjudkins: also, redis is really simple to admin, reason about, and use. [01:02] k23z__: fictorial: it's not like I can choose, I didn't build those [01:02] k23z__: fictorial: Node did [01:02] k23z__: fictorial: I'm actually doing sys.p(req) [01:02] fictorial: k23z__: I know, I was being flip. Sorry, I forgot the :) [01:03] pufuwozu has joined the channel [01:03] polotek has joined the channel [01:03] stephenjudkins: fictorial, technoweenie : do both of these have async client libs for node? [01:03] technoweenie: yup [01:04] fictorial: stephenjudkins: yes, here's the redis client: http://github.com/fictorial/redis-node-client [01:06] richcollins has joined the channel [01:06] stephenjudkins: fictorial: it appears you're acquainted with the author. thanks [01:06] stephenjudkins: technoweenie: thanks [01:06] webr3 has joined the channel [01:07] webr3: ryah, around? [01:07] fictorial: stephenjudkins: yes, I wrote that client starting a year ago to become acquainted with Node and Redis [01:08] fictorial: stephenjudkins: there are lots of choices for persistence. the 'modules' page in the node wiki lists a number of them... sqlite, postgres, couch, mongo, redis, dirty, persevere, etc. [01:10] webr3: anybody know of a way to get the full client certificate when using a http+tls (https) server? connection.getPeerCertificate() only returns a subset of the certificate info [01:10] ryah: webr3: hey [01:11] webr3: hey ryah, as above :) I've been getting used to node.js, ported w3c tabulator rdf serializers/parsers over to it and working at getting FOAF+SSL implemented [01:11] webr3: ryah, only thing I'm missing is a way to get subjectAltName, and public modules + exponent from the client cert, even if I can get the full cert i can parse the details myselfs [01:11] webr3: s/modulus* [01:11] reid\work has joined the channel [01:12] stephenjudkins: fictorial: yes, there are a lot. too many to evaluate myself. a lot of them seem pretty immature right now, as well. i'm impressed at how quickly people are writing libraries for node [01:13] fictorial: yeah, it's gaining momentum [01:14] _richcollins has joined the channel [01:15] ryah: webr3: req.connection.getPeerCertificate() [01:15] webr3: ryah, that has a very limited subset of the client certificate [01:16] _richcollins has joined the channel [01:16] k23z__: err, how can I see the request object in a serialized form so I can see the data in it inside Node ? [01:17] webr3: ryah, any chance of getting the pure cert exposed as an extra prop on the return from connection.getPeerCertificate() [01:17] ryah: webr3: yeah, i suppose you can add more, see src/node_crypto.cc SecureStream::GetPeerCertificate [01:17] k23z__: I can't see the data I've put into it when I look there .. :( [01:17] webr3: ty :) [01:17] ditesh|cassini has joined the channel [01:18] k23z__: so I have a browser app and I wrote an AJAX request and put it on 127.0.0.1 [01:18] k23z__: now I wrote a node.js server and I want to see my data inside the req [01:18] k23z__: and I can't [01:18] k23z__: I receive the request but sys.inspect doesn't show the data I've put in the request [01:18] k23z__: what am I supposed to use ? [01:20] batasrki has left the channel [01:20] polotek: k23z__: what do you mean by "data I put into the request"? you mean query string or post data? [01:20] batasrki has joined the channel [01:20] k23z__: req.setData(somestring); [01:20] k23z__: post data [01:21] k23z__: polotek: [01:23] mscdex has joined the channel [01:23] polotek: where are you getting that method from? that's not how you read request data [01:23] polotek: k23z__: that's not how you set request data I mean [01:23] mscdex: i've recently became the owner of a new hardware platform i want to port node to [01:24] k23z__: polotek: ok, how do you set the request data then ? [01:24] polotek: and you can't just read it out of a property on req. [01:24] k23z__: polotek: I'm using the qooxdoo framework for the UI ... so the API is specific to it [01:24] mscdex: it's a trs-80 model 100 :-D [01:24] k23z__: polotek: I don't expect to read it from a property, I did sys.inspect(req) and was expecting to see somestring inside the output that node.js would generate ... [01:25] k23z__: polotek: but I did not see it there [01:25] k23z__: polotek: and this fact upset me [01:25] k23z__: ACTION is upset [01:25] polotek: k23z__: node http works based on data streams [01:25] polotek: you can't just read a property [01:25] polotek: you have to read the data stream [01:26] k23z__: polotek: ok give me a proof-of-concept example so I can use it in meh code [01:26] _announcer: Twitter: "Ok, #nodejs and #rstats NEED to get together. Is any one working on this? If not, who wants to help me?" -- Soren Macbeth. http://twitter.com/sorenmacbeth/status/16191017980 [01:26] jashkenas has left the channel [01:27] polotek: I thought there was an example of handling post data on howtonode [01:27] polotek: anybody got a good reference for k23z__? [01:29] mscdex: you mean for an http server? [01:29] polotek: mscdex: for reading post data [01:29] polotek: or any data from the request really [01:29] mscdex: well [01:29] mscdex: for posts you can simply use the querystring module [01:30] polotek: Someone that's not me needs to write a good tutorial post on node streams :) [01:30] mscdex: if you need file support, i'd suggest node-formidable [01:30] polotek: mscdex: I was just suggesting a simple example so k23z__ can get the hang of working with req/res streams [01:30] polotek: right now he's just trying to "see the data". [01:31] polotek: or she #notsexist [01:31] k23z__: I'm a he [01:31] polotek: k23z__: http://github.com/felixge/node-formidable [01:31] polotek: nice lib for working with request data [01:31] mscdex: yeah [01:32] polotek: suggest you get a handle on the fundamentals of streams though [01:32] mscdex: but you can't parse the post form data as it streams in though, you can only parse it once it's all read in iirc (with felix's implementation) [01:33] polotek: yeah it's not async yet [01:33] stephenjudkins has joined the channel [01:34] k23z__: so how come this basic need is not in CORE ? [01:35] mscdex: k23z__: it is, you can parse form data using the built-in querystring module [01:36] mscdex: k23z__: but if you're sending files along with the form, you're getting into multipart territory which felix's node-formidable module handles nicely [01:37] polotek: ryah: are there plans to integrate multipart request data handling into core? [01:37] _announcer: Twitter: "New blog post: Node.js web development with Express: http://bit.ly/cElzxv" -- Hernan Garcia. http://twitter.com/theprogrammer/status/16191677565 [01:37] _announcer: Twitter: "@sorenmacbeth so im basically doing ALL web dev now with #nodejs. Really, no reason not to..." -- Joe McCann. http://twitter.com/joemccann/status/16191692700 [01:37] ryah: polotek: not in the near future [01:38] ryah: polotek: i'll probably pull in felix's multipart thing after 0.2 [01:38] polotek: ryah: yeah that's what I was thinking. once it can parse asynchronously I assume [01:39] polotek: So this is fun. libxmljs handles most entities properly [01:39] polotek: but " always get converted to " [01:39] mscdex: cool [01:42] k23z__: mscdex: I don't have multipart [01:42] k23z__: mscdex: I'm just putting some data using req.setData(somestring); and then req.send(); [01:43] mscdex: setdata? [01:43] polotek: I'm assuming that's some other lib he's using to send data [01:44] polotek: He's just trying to see how to get somestring on the other side in node [01:44] k23z__: mscdex: it's qooxdoo, a js ajax framework .. nevermind the API, that matters less [01:44] mscdex: k23z__: ah ok. [01:44] kersny: http://qooxdoo.org/ <~ the framework he's using, I believe [01:44] k23z__: kersny: true. [01:44] mscdex: k23z__: do you have a start on the node http server code? [01:44] k23z__: mscdex: I do [01:45] mscdex: k23z__: is it gisted somewhere? [01:46] k23z__: mscdex: http://github.com/wsdookadr/Q-Chess/tree/master/server/ [01:47] k23z__: mscdex: http://github.com/wsdookadr/Q-Chess/blob/master/server/serv.js to be precise [01:47] k23z__: line 35 [01:47] fictorial: very zen: JSON will be used [01:47] polotek: wow, clean git merge from a big branch. I feel like I should be nervous about that [01:48] k23z__: fictorial: indeed [01:48] k23z__: fictorial: :) [01:51] Tim_Smart1 has joined the channel [01:54] quirkey has joined the channel [01:54] Tim_Smart1 has joined the channel [01:56] mscdex: gah he left [01:57] polotek: mscdex: heh, guess he got tired of waiting [01:57] polotek: maybe he wasn't clear that you were working up a helpful example [01:57] mscdex: sigh [01:57] mscdex: oh well [01:57] Tim_Smart has joined the channel [01:57] mscdex: it'll be here waiting for him then :P [01:59] Tim_Smart has joined the channel [02:00] mscdex: http://gist.github.com/438595 [02:01] mscdex: k23z__: ^ [02:04] hpoydar has joined the channel [02:13] _announcer: Twitter: "This is very interesting, a Rails Rumble style contest but for node.js http://nodeknockout.com/ @node_knockout" -- Hernan Garcia. http://twitter.com/theprogrammer/status/16193890061 [02:13] softdrink has joined the channel [02:13] sechrist: is there a way to set a timeout on http.Client/Request? [02:13] sechrist: I see the stream.setTimeout() but not where to call it from the clientrequest [02:15] polotek: sechrist: I don't think http clientreq supports setTimeout yet [02:16] polotek: do you get an "error" event on timeout? [02:16] polotek: or anything? [02:17] sechrist: haven't looked -- I don't really care to know when it occurs, but I want to make sure it happens after a specific timeframe [02:17] sechrist: i'll add a listener [02:17] stepheneb has joined the channel [02:18] sechrist: nevermind -- there's no event [02:18] sechrist: not at the http level -- at the stream level yes [02:18] sechrist: which doesn't appear to be exposed [02:18] brianmario has joined the channel [02:19] _announcer: Twitter: "node.js and ruby, sitting in the a tree => http://bit.ly/dnIW24 becoming quite common." -- grantmichaels. http://twitter.com/grantmichaels/status/16194264826 [02:20] mattly: i don't think that was the link that @grantmichaels meant to post [02:21] kersny: haha yeah... [02:22] sechrist: node.js and ruby: running on saudi arabia's nukes since 2009 [02:27] Tim_Smart: Is there a UTC / GMT equivilent of Date.prototype.getTime()? [02:27] Tim_Smart: *equivalent [02:29] polotek: getUTCDate [02:29] polotek: Tim_Smart: ^ [02:29] _announcer: Twitter: "@thewonggei Interesting. Talking with another programmer I think we're going to tackle node.js architecture together and see what we get.." -- Matt Darby. http://twitter.com/mattdarby/status/16194895020 [02:29] Tim_Smart: polotek: That returns the day of month [02:30] polotek: Tim_Smart: yeah there's one for day and month [02:30] polotek: so you can make a new Date [02:30] Tim_Smart: toUTCString() is probably the best way then [02:31] polotek: yeah if you don't mind reparsing [02:31] Tim_Smart: new Date(new Date().toUTCString()).getTime() [02:31] Tim_Smart: heh [02:31] Tim_Smart: seems a little hackish [02:32] polotek: Tim_Smart: a little inefficient, but not necessarily hackish [02:32] polotek: you could also do: [02:33] polotek: new Date(d.getUTCFullYear(), d.getUTCMonth(), ...) [02:33] polotek: very ugly [02:33] polotek: but no parsing [02:36] SamuraiJack has joined the channel [02:37] falconair: if i pass a function to an even listener, can I assume that only one event at a time will be passed to it? [02:38] polotek: falconair: yes [02:38] polotek: it gets fired once for each occurrence of the event [02:38] Tim_Smart: polotek: Date.now() - Date.UTC(1970,0,1) [02:39] jashkenas has joined the channel [02:39] Tim_Smart: Actually nvm [02:39] polotek: doesn't that equal 0? [02:39] polotek: the Date.UTC I mean [02:40] polotek: Tim_Smart: yeah it does [02:40] Tim_Smart: Yeah it does [02:40] ditesh|cassini has joined the channel [02:40] falconair: polotek: but the events are put in a queue, and taken off the queue only after each individual event has been processed...correct? [02:40] sudoer has joined the channel [02:40] falconair: you can never have two different "data" events being processed at once? [02:41] falconair: (for a single connection) [02:41] polotek: falconair: node is single threaded, nothing runs in parallel [02:41] polotek: and for requests, data events are guaranteed to fire in the order they were received [02:42] jedschmidt has joined the channel [02:42] falconair: i see, so if my "data" even takes 10 seconds to process, NO other events will be processed during this 10 seconds..correct? (sorry, just trying to make sure i have the right model in my head) [02:43] polotek: falconair: be careful, if your function runs synchronously you can be assured nothing else will run [02:43] jashkenas: falconair: yeah. If you're running an expensive computation, you can use process.nextTick() to break it up. [02:43] polotek: but if your function calls any async functions [02:43] Tim_Smart: falconair: Nope. Whatever enters back into the event loop first gets processed [02:43] polotek: something else may run in between [02:44] falconair: ok, perfect, thanks! [02:44] jashkenas: falconair: FYI, process.nextTick is more efficient that doing setTimeout(func, 0) [02:45] polotek: falconair: I really mean be careful. It's very easy to run into async functions in node [02:45] polotek: better not to count on your event func finishing before anything else [02:45] polotek: unless you're absolutely sure it's synchronous [02:46] SvenDowideit has joined the channel [02:47] falconair: i'm trying to solve a strange problem where a string gets strange values out of no where (somewhere it gets set to [object Object] even through I never set it to that) [02:47] _announcer: Twitter: "Finally kicked #libxmljs 0.4.0 out the door. Gonna try to get a post up about some of the changes. http://bit.ly/blVBdJ #nodejs" -- Marco Rogers. http://twitter.com/polotek/status/16195961686 [02:47] falconair: I was trying to see if that string was getting mutated while I was processing it [02:47] Tim_Smart: polotek: Duh. new Date().getTime() / Date.now() is GMT by default >.> [02:47] rob has joined the channel [02:49] polotek: Tim_Smart: haha, yeah [02:49] polotek: one of those days I guess [02:52] Tim_Smart: I guess :) [02:54] _announcer: Twitter: "loving these head hunters looking for frontend devs, must be the js. Sorry folks, no. I want to build apps in #nodejs" -- Elijah Insua. http://twitter.com/tmpvar/status/16196374742 [02:57] mscdex: heh [02:58] elliottcable: sr: Is this you? http://www.antipope.org/charlie/blog-static/2010/06/geopolitics-in-the-raw.html#comment-46290 [03:00] jxson has joined the channel [03:03] isaacs has joined the channel [03:06] isaacs: jashkenas: let is block-scoped [03:06] isaacs: jashkenas: so, yeah, it gives you the ability to have scoped vars without a closure [03:06] isaacs: jashkenas: which you can't do with a closure ;P [03:07] jashkenas: ha. [03:07] jashkenas: you like the notion of having two variables ... being affected by two different scoping rules, and having to look back to the var or let declaration to see which is which? [03:08] jashkenas: Seems like an exercise purely to fix the fact that for() { } doesn't introduce a scope... [03:08] dgathright has joined the channel [03:09] isaacs: jashkenas: well, the idea is that "var" will go away in ES5 strict [03:10] Tim_Smart: isaacs: This wouldn't work as expected http://gist.github.com/438647 [03:10] isaacs: jashkenas: and you'll have let, which is block-scoped, and const, which is globally obnoxiou [03:10] isaacs: Tim_Smart: that depends on what you expect. [03:10] isaacs: Tim_Smart: i expect that you have two separate "i" vars, one inside the loop, and another outside it [03:11] isaacs: Tim_Smart: but i expect that becasue i've read the spec :) [03:11] jashkenas: issacs: I haven't seen that about ES5 strict ... you have a link? [03:11] isaacs: jashkenas: no, just hearsay there [03:11] mtodd has joined the channel [03:11] jashkenas: isaacs: then I don't think it's the case... [03:11] Tim_Smart: Yeah, well.. If 'var i' wasn't immediately visible, you would get pretty confused [03:12] jashkenas: link for the curious: http://www.ecmascript.org/docs/tc39-2009-043.pdf [03:12] isaacs: Tim_Smart: the idea is that the closest "let" is the one that matters, just like the closest "var" is the one tha tmatters today [03:13] jashkenas: isaacs: wouldn't it be nice if ECMA 5 strict killed both "let" and "var", and made it work just like you said? [03:13] isaacs: jashkenas: you mean, just remove the auto-global bs? [03:13] Tim_Smart: right. I thought let will never overwrite a declared variable [03:13] isaacs: Tim_Smart: once you get out of the loop, i goes back to being 30 [03:13] isaacs: Tim_Smart: a let in a for-loop is like a var inside a function [03:14] Tim_Smart: But if you go var i = 30; let i = 10; in the same scope, i is 30 [03:14] isaacs: see, now that's odd [03:14] isaacs: if you're using let, really you shouldn't be using var with it [03:14] _announcer: Twitter: "#nodejs driven html5 compatible web-service #vs ipad-app. I suppose both, but which one is gonna be first?" -- D. Sohin. http://twitter.com/noformnocontent/status/16197477024 [03:14] isaacs: that's like with/eval bad [03:15] isaacs: but it's not like i have a lot of experience using "let" in programs of any size, since i'm coding for v8 and webkit, rather than spidermonkey [03:15] Tim_Smart: Yeah, I'm pretty content with just 'var' for now [03:16] Tim_Smart: yield would be nice though. Does v8 support that yet? [03:16] jashkenas: isaacs: hang on a minute. [03:16] jashkenas: I don't think that "let" is part of ECMA5 at all. [03:16] jashkenas: I know there's lot [03:16] isaacs: Tim_Smart: js> var j = 10; let j = 20; j [03:16] isaacs: Tim_Smart 20 [03:16] jashkenas: lots of stuff in JS 1.7 and 1.8 from Mozilla. But not all of it is ECMA5. [03:17] Tim_Smart: isaacs: Hah, that does against the MDC docs. [03:17] Tim_Smart: *goes [03:17] stevendavie has joined the channel [03:17] isaacs: jashkenas: yeah, interesting, i could've sworn "let" was in the spec at one point [03:17] isaacs: jashkenas: but i see it right there under "future reserved words" [03:17] jashkenas: It was probably definitely in ECMA 4. [03:17] isaacs: jashkenas: "The identifiers ̳let‘, and ̳yield‘ may be used in a future version of this standard." [03:17] jashkenas: Sure, but so is "class". [03:17] jashkenas: bingo. [03:17] isaacs: jashkenas: no, it was an earlier not-yet-fully-ratified es5 spec [03:17] jashkenas: gotcha. [03:18] isaacs: i never bothered to follow es4 development [03:18] jashkenas: but I guess that means we're not too likely to see it in the next few years. [03:18] jashkenas: all for the best. [03:18] isaacs: i took one look at that pile of trash and was like, "well, this is dumb, crockford agrees, screw it." [03:18] zaach: let is a proposal for harmony [03:18] Tim_Smart: isaacs: Nvm, I misread [03:19] polotek: the var global thing made sense for js as a browser language [03:19] polotek: I believe they wanted to prevent lots of scope checking or error handling [03:19] isaacs: polotek: no, it was a bad idea then, and i'ts still a bad idea. [03:20] isaacs: polotek: the default should be lexical scoping, and it should take a special keyword to make it global [03:20] polotek: isaacs: sure it was a bad idea. I'm just saying there was a reason behind it [03:20] isaacs: polotek: that's what i'm disagreeing with. i don't think there was a reason. i think it was just a dumb oversight. [03:20] isaacs: polotek: not that i'm calling mr eich dumb, of course, but these things happen. [03:21] jashkenas: I've got a quote from Mr. Eich, from Coders at Work: [03:21] stepheneb has joined the channel [03:21] polotek: isaacs: that's possible, but I wouldn't bet on it. I've read/watched enough form eich to know he thought through quite a lot [03:21] polotek: couldn't point you at anything concrete though [03:21] JimBastard has joined the channel [03:21] isaacs: ACTION curious about jashkenas's quote... [03:21] jashkenas: "But I didn't stick to Scheme and it was because of the rushing. I had too little time to actually think through some of the consequences of things I was doing... [03:21] jashkenas: "I was economizing on the number of objects that I was going to have to implement in the browser... [03:22] polotek: jashkenas: ha, touche [03:22] isaacs: yay! score 1 for stupid! [03:22] isaacs: er, careless [03:22] polotek: ACTION facepalm [03:22] isaacs: if he thought it out and decided wrong, then that's stupid [03:22] JimBastard: trying node patch now to see if it resolve UTF issues.... [03:22] JimBastard: ACTION crosses fingers [03:22] jashkenas: "So I made the global object be the window object, which is a source of unknown new name bindings and makes it impossible to make static judgements about free variables. So that was regrettable." [03:22] polotek: JimBastard: what issues? [03:23] JimBastard: i get general UTF fail on occasion [03:23] Tim_Smart: It sounds like he was making a apology [03:23] JimBastard: i deal with a lot of file writing and blocks of text [03:23] Tim_Smart: *an apology [03:23] jashkenas: I can continue, if you like. [03:23] JimBastard: jashkenas: gist plz :-) [03:23] jashkenas: ah, of course. [03:24] zaach: jashkenas: but make it an executable coffeescript program [03:25] isaacs: polotek: you tweeted about visual differs, have you seen http://www.kaleidoscopeapp.com/? [03:25] polotek: yep [03:25] polotek: it's okay. I like changes.app better [03:26] polotek: but none of these support command line usage that integrates cleanly with git [03:26] isaacs: weird, i thought that the kaleidoscope page seems to indicate that it does exactly that with git and svn [03:27] isaacs: yeah, it installs a "ksdiff" program that works out ofthe box with git [03:27] polotek: isaacs: ? [03:28] polotek: so there's a separate utility for command line? [03:28] polotek: actually this says git/svn out of the box and for everything else you can use this ksdiff utility [03:29] zaach: re "let" proposal: http://wiki.ecmascript.org/doku.php?id=harmony:let [03:31] polotek: Oooooo. I may not have given Kaleidoscope enough benefit of the doubt. [03:31] polotek: Would rather it didn't take this many steps to integrate [03:31] polotek: but might be worth it [03:31] polotek: thanks isaacs [03:32] jashkenas: zacch: there you go. here's the full quote. [03:32] jashkenas: http://gist.github.com/438657 [03:32] pedrobelo has joined the channel [03:33] jashkenas: That's just a page from a 34-page interview with Eich, by the way. I highly recommend the book. [03:33] zaach: ugh, so many books to read [03:37] isaacs: you know, i've spent so long using the command-line vertical diff, side-by-side diffs are just HARD to look at now. [03:37] sixthgear has joined the channel [03:37] isaacs: it's like my brain can't handle all that repeated content. [03:37] polotek: isaacs: if command line diff was colored that might go a long way [03:38] isaacs: polotek: it is [03:38] polotek: But honestly the other thing I'm looking for is nice merging functionality with keyboard shortcuts [03:38] isaacs: yeah, i do miss that aspect of winmerg [03:38] isaacs: winmerge [03:38] isaacs: it's so far the *only* thing i really miss about windows. [03:38] polotek: isaacs: just about the only windows software I recommend to people [03:38] isaacs: yeah [03:39] polotek: it would be awesome if I could get mergetool to use emacs ediff [03:39] isaacs: there've been quite a few times i've been tempted to fire up a VM just to open up winmerge and bask in its wonderful ugly utilitarian beauty [03:39] polotek: isaacs: I can't even get Kaleidoscope to ignore whitespace differences :( [03:40] isaacs: polotek: then either it is fail, or you are. [03:40] mrjjwright_ has joined the channel [03:40] isaacs: polotek: i'll keep using the cli diff [03:40] polotek: both are equally likely [03:40] isaacs: patch files colored red and green, like christmas [03:49] saikat has joined the channel [03:57] zomgbie has joined the channel [04:03] JimBastard has joined the channel [04:03] JimBastard: so ive got continuous githubergration going on [04:03] JimBastard: http://github.com/Marak [04:03] JimBastard: anyone see anything fishy? [04:08] Clooth has joined the channel [04:08] benoitc has joined the channel [04:09] sechrist: twitter is down [04:09] sechrist: ACTION rage [04:09] jashkenas: JimBastard: what's up your sleeve tonight? [04:10] JimBastard: jashkenas: i can haz ordered github repos [04:10] sechrist: twitter has had the worse uptime in like a year this month [04:10] sechrist: http://www.pingdom.com/reports/vb1395a6sww3/check_overview/?name=twitter.com%2Fhome [04:10] JimBastard: so i put all my favorite projects up top [04:10] Tim_Smart: Not sure, but I think he ddosed twitter [04:11] sixthgear: oh ya, sorry guys, i deleted twitter [04:11] sechrist: damnit [04:11] sechrist: sixthgear: put it back up i'm working on an app >:( [04:11] sixthgear: i just deleted it, sry [04:11] zaach: JimBastard: useful if you have 80+ repos :) [04:12] JimBastard: hell yeah [04:12] JimBastard: let me paste the description [04:12] Tim_Smart: Does twitter use eventmachine? [04:12] JimBastard: kohai - a digital protege for maitaining your open source empire [04:13] JimBastard: :-D [04:13] JimBastard: its gonna do some more stuff too [04:13] JimBastard: like generate skeletons for varies languages / stacks [04:14] sechrist: Tim_Smart: it uses fail [04:14] sechrist: hardcore twitter fail [04:14] JimBastard: i could take over the github timeline [04:15] sechrist: also the page says "Twitter is over capacity." that's a lie [04:15] sechrist: nobody can get to it to overload it! [04:15] JimBastard: http://github.com/timeline [04:15] JimBastard: that would be trivial right now lol, but not worth it [04:16] Tim_Smart: sechrist: They use rails http://twittown.com/social-networks/twitter/twitter-blog/new-info-twitter-back-end-and-infrastructure [04:16] tilgovi has joined the channel [04:16] sechrist: more like [04:16] sechrist: FAILS [04:16] Tim_Smart: sechrist: Try to explain yourself in #rails or #ror or w/e [04:17] sechrist: nah nah they'll invade #node.js [04:17] Tim_Smart: "Yo Rubyists. Rails fails. Rap on that." [04:17] sechrist: however.. my logic.. twitter uses rails. twitter is down. therefore all rails apps fail. rails = fail [04:17] sechrist: pretty sound [04:17] sechrist: no fallacy [04:17] JimBastard: stop [04:17] JimBastard: heimer time [04:20] isaacs: ryah: you around? [04:21] isaacs: ryah: i got that query string code working, but it's yelling about modifying something after being freed. when i take out the delete at the end of thefunction you wrote, it works fine, but i'm concerned that that means it's leaking somewhere. [04:21] isaacs: ryah: node_g(60262) malloc: *** error for object 0x100a01410: incorrect checksum for freed object - object was probably modified after being freed. [04:21] isaacs: *** set a breakpoint in malloc_error_break to debug [04:22] tilgovi: is there an easy way in js to grab an array of an object's property values? [04:23] tilgovi: I'd love to have a simple keyed way to access some things, but still be able to chuck the whole object into a Function.prototype.apply() call easily [04:24] tilgovi: this might be treading in territory best left unexplored [04:25] jbrantly has joined the channel [04:25] sixthgear: you can iterate through any objects properties [04:25] sixthgear: for (p in obj) { // use p } [04:26] tilgovi: yeah, in this case I wanted to grab them as an array and pass them as arguments, but it's cool [04:26] tilgovi: I'll deal without [04:26] tilgovi: I'll just name them explicitly [04:26] tilgovi: I guess I'm uselessly trying to hide api details from myself [04:26] sixthgear: :) [04:27] tilgovi: hiding details from other objects is nice, but hiding them from yourself is kinda silly I realize [04:27] fictorial: pgriess: wasn't this fixed (issue #4)? http://github.com/pgriess/node-msgpack/blob/master/src/msgpack.cc#L70 [04:28] ryan[WIN]: heep [04:28] pgriess: fictorial: issue #4 was fixed by switching away from SetHiddenValue [04:28] fictorial: pgriess: my bad, thanks [04:28] pgriess: fictorial: np [04:30] pufuwozu has joined the channel [04:34] ryah: isaacs: hm [04:34] ryah: isaacs: send me the patch? [04:34] isaacs: ryah: sure, just a sec.. [04:34] malkomalko has joined the channel [04:35] richcollins has joined the channel [04:35] hammerdr has joined the channel [04:36] jsilver has joined the channel [04:36] isaacs: weird, there's other stuff on that branch for some reason.. [04:36] jsilver: I know Twitter is a cliche use case for Node but is it really that bad when Twitter goes over capacity and it's possible this sort of situation can be prevented with Asychronous? [04:37] jsilver: btw, Has anyone done this? Written a Twitter style API with Node [04:37] jsilver: i.e. Identi.ca but with node [04:38] jsilver: lmk [04:38] jsilver: btw I'm downloading and zipping a bunch of node talks if anyone's interested. New coffeescript talk included [04:38] isaacs: ryah: http://gist.github.com/438699 [04:38] Tim_Smart: Which coffeescript talk was it? [04:38] jashkenas: tilgovi: http://github.com/documentcloud/underscore/blob/master/underscore.js#L426 [04:39] tilgovi: yeah, thanks. I know about that. [04:39] sechrist: what is coffee [04:39] sechrist: and why would I talk coffeescript [04:39] Tim_Smart: A caffeine loaded beverage [04:40] sechrist: Tim_Smart: wrong [04:40] jsilver: ummm [04:40] jsilver: so [04:40] isaacs: ryah: line 170 in teh patch [04:40] Tim_Smart: sechrist: also http://jashkenas.github.com/coffee-script/ [04:40] jsilver: I guess not [04:40] jsilver: ? [04:40] jsilver: im making it for my friend [04:40] jsilver: hes interested in node-coffee too [04:40] jsilver: jashkenas I liked your talk [04:40] jsilver: i watched it [04:40] jsilver: good job [04:40] Tim_Smart: jsilver: Which talk was that one? [04:41] jsilver: the new one someone sent me @ js conf [04:41] Tim_Smart: Could I take a look? [04:41] jsilver: watched the whole thing, helped me 'get it' more [04:41] jashkenas: sorry about all the mumbling & muttering. I don't know how coherent it was. [04:41] jsilver: sure [04:41] jsilver: Jash do you have the link for it? [04:41] sechrist: javascript is already simple enough -- I'm trying to think of a reason to use coffeescript [04:41] jashkenas: yep. [04:41] jashkenas: jsilver: Tim_Smart: http://blip.tv/file/3735066 [04:41] jsilver: sechrist, it makes JS work more like Ruby. that's a good enough reason [04:41] sechrist: ACTION pukes [04:41] Tim_Smart: jashkenas: Cheers [04:42] jsilver: *rolleyes* [04:42] sechrist: make js more like php [04:42] jashkenas: jsilver: you probably don't want to start that in here. bottles will be broken. [04:42] sechrist: then we'll talk [04:42] jsilver: LOL ^ [04:42] jsilver: a ruby hater [04:42] jsilver: okay [04:42] jsilver: jashkenas, oh [04:43] jsilver: both languages suck and are wrong - jsilver's official viewpoint. used to do php too [04:43] jsilver: [04:44] jsilver: sechrist, sorry if I didn't sell you on coffee [04:44] sechrist: well from what little I know about coffee it's a build tool [04:44] jsilver: nope [04:44] jsilver: it's a 1 to 1 converter using a JISON transformer parser basically [04:45] sechrist: oh that's capistrano [04:45] sechrist: another delicious starbucks drink [04:45] jsilver: it's written in itself [04:45] jsilver: are you trolling or something [04:45] hammerdr: jsilver: the Cappuccino issues app on Heroku exposes the GitHub api, if that's what you mean [04:45] gerad has joined the channel [04:45] sechrist: wtf there's a Cappuccino too? [04:45] sechrist: gat damn [04:45] jsilver: hammerdr, i saw that, thats cool [04:46] jsilver: but no I mean a twitter clone in node proper [04:46] jsilver: same API as twitter [04:46] jsilver: same object (tweets) [04:46] hammerdr: sechrist: yeah! And a JAVA too! Who knew?! :) [04:46] jsilver: but noSQL and node/coffee [04:46] hammerdr: jsilver: ah, no idea :) [04:46] jsilver: the web frontend can be in ruby or something [04:47] isaacs: jsilver: why not do the web frontned in node? [04:47] jsilver: or that [04:47] jsilver: thats cool too [04:47] jsilver: imo could have it built right into the engine [04:47] isaacs: there are a few frameworks for doing web stuff in node, i think [04:47] sechrist: I'm having real trouble understanding how you can render real world webpages syncly [04:47] gerad has left the channel [04:47] jsilver: isaacs, I think I would rather go raw, but I like express a little [04:47] sechrist: even do is kind of O.o [04:47] dgathright has joined the channel [04:48] hammerdr: isaacs: I don't think async/evented programming is ideal for application development [04:48] jsilver: node+coffee is probably fine [04:48] jsilver: for me [04:48] isaacs: hammerdr: really? [04:48] isaacs: hammerdr: what's "application development"? [04:48] jsilver: sechrist, I agree Ruby sucks but saying PHP is so funny. U so funny guy [04:49] sechrist: isaacs: how the hell do you render a webpage properly in node without having the client populate dynamic areas via js? [04:49] jsilver: you don't [04:49] sechrist: with the callbacks and such [04:49] sechrist: jsilver: shaddap [04:49] jsilver: it's impossible [04:49] jsilver: you can't [04:49] jsilver: you have to use ERB blocks [04:49] isaacs: sechrist: um... i don't get what you're asking [04:49] jsilver: with blocking ruby calls [04:49] hammerdr: isaacs: twitter would be an application [04:49] isaacs: hammerdr: node is actually an awesome fit for something like twitter. [04:49] jsilver: <% while 1 %> [04:49] isaacs: it might not be failwhaling all over the damn place [04:49] sechrist: jsilver: I've never used ruby in my life [04:49] jbrantly has joined the channel [04:49] sechrist: not going to start now [04:50] jsilver: i dont regret learning it [04:50] jsilver: i dont know any other scripting languages as well [04:50] jsilver: everyone sticks by their scripting language [04:50] jsilver: etc [04:50] sechrist: I'm the most versed in php which is why I stand by it, yeah [04:50] jsilver: isaacs: my opinion exactly [04:50] isaacs: sechrist: what makes you think the client would have to populate anything via js? [04:51] jsilver: I would look for a 1/1 reproduction of the Twitter API so that stuff like TweetDecks might work [04:51] isaacs: sechrist: i mean, node has javascript. javascript can do all kinds of string manipulations. just spit out markup. [04:51] sechrist: isaacs: because if you need to do db queries on html generation [04:51] sechrist: that gets retarded [04:51] sechrist: if they're not synchronous [04:51] isaacs: sechrist: ok, so do your db queries, and when they're done, do your markup [04:51] isaacs: sechrist: just use callbacks. i don't get what the problem is. [04:51] jsilver: Twitter as we know it is a sychronous machine atleast on the front-end [04:52] sechrist: isaacs: yeah I get the concept, but in practice it's not that simple [04:52] isaacs: sechrist: it's less unsimple than you think [04:52] hammerdr has joined the channel [04:52] sechrist: you either nest callbacks -- or block on all of them [04:52] isaacs: sechrist: not block. jsut wait. different. [04:52] hammerdr_ has joined the channel [04:53] isaacs: sechrist: i chain together oodles of callbacks in npm, and i don't have to nest anything except when i need the results. [04:53] isaacs: or rather, when i need to know more than just "it worked" [04:53] sechrist: so you're saying do all of the queries, make sure they return, then generate the html? phooey [04:53] sechrist: but yeah I guess that works [04:53] sechrist: is there a simpler way to chain via some library? or is it just Do? [04:54] isaacs: sechrist: or even use something more sophisticated to generate what you can, and then pause on the generation until you get the data you need, then go back to it, etc. [04:54] isaacs: but really, "generating the markup" is so butt burningly fast, it hardly matters. [04:54] isaacs: that's just joining together relatively small strings, and v8 is AWESOME at that. [04:54] hammerdr: isaacs: sorry, internet went out. Node.js is perfect for a twitter api/backend but poor for the 'client side' which, granted, may just be static HTML files in that case [04:55] isaacs: so you may as well just do all your queries asyncly, and when they get back, do the markup bits, filling in with data. [04:55] jsilver: hey guys, what's a respectable torrent tracker for open source material? [04:55] jsilver: is there one? [04:55] isaacs: even if you don't use a templating engine and just do string concatenation, it's not that hard. [04:55] hammerdr: isaacs: but imagine writing a twitter client.. you probably wouldn't want node.js for that [04:55] jashkenas: sechrist: here's an old gist that shows both serial-style and parallel-style async loops. [04:55] jashkenas: http://gist.github.com/354834 [04:55] jashkenas: a little bookkeeping. [04:56] isaacs: hammerdr: well, there's not any great way right now in node to do visuals, so yeah, i mean, unless it was a cli thing, and that'd be lame. [04:56] isaacs: or would it... [04:56] sechrist: isaacs: but if I wait on a group of queries to finish before continuing the program flow, it would take as long as the slowest query.. but I guess that's true in the normal procedural method as well [04:56] isaacs: sechrist: right, except that in the normal procedural method, you're making *everything* wait for the slowest query [04:56] jashkenas: sechrist: that's why it's nice to run them in parallel. [04:56] isaacs: sechrist: and there's no reason why you even need to do it that way [04:56] sechrist: true -- I do see your point now [04:56] steadicat has joined the channel [04:57] sechrist: then if queries are dependent on each other, they can just sit in eachother's callbacks [04:57] isaacs: right [04:57] jsilver: Twitter didn't scale [04:57] isaacs: or you could use something like do to add a layer of callback juggling to the equation, and visually it doesn't look as deeply nested in your actual application code. [04:57] isaacs: i use a function called "chain" in npm, which does *almost nothing* [04:58] isaacs: you just give it a s et of functions to call, and a final callback, and it'll call your callback when either a) everything worked, or b) there was a problem [04:58] sechrist: the jquery style of chaining with queries would be interesting [04:58] isaacs: and it serializes em all [04:58] sechrist: oh that's cool [04:58] sechrist: that sounds like do [04:58] sechrist: sort of [04:58] sechrist: but if it's easy to do and handles all of that crap [04:58] isaacs: so, it doesn't do stuff in parallel, and doesn't pass the results from one function into the next. [04:58] sechrist: i'm game [04:59] sechrist: ah so if one breaks [04:59] sechrist: they all stop [05:01] jsilver: I am uploading node-and-coffee-talks.tar.gz to RapidShare if anyone wants it [05:01] polotek: sechrist: getting comfortable with async code is the biggest barrier to entry for node. [05:01] fictorial: ACTION had to change irc clients to one that supports ignore [05:01] jsilver: it was all the node talks I could find [05:01] polotek: it requires a new mental model [05:01] jsilver: fictorial, LOL [05:01] polotek: but once you get it, the benefits are great [05:01] sechrist: polotek: i'm already familiar with it -- it's just the normal paradigm of html generation [05:01] isaacs: sechrist: right [05:01] sechrist: is not something I think of doing async [05:01] isaacs: and you give it one ultimate callback [05:02] hammerdr: isaacs: heh. To be fair, I've never seen an async framework. It'd be hard to imagine. I just can't see the mental overhead being fun. [05:02] hammerdr: application framework* [05:02] isaacs: sechrist: since npm is always doing stuff that has to work or not work, and needs to sometimes clean up (or abort with an error, at least) when something fails, that's important. speed is not as much a factor there. [05:02] polotek: sechrist: yeah, everything, including templating engines, need to be broken up into asynchronous chunks [05:03] isaacs: but, when npm may be doing installs and also acting as a server, that'll be nice. [05:03] markwubben has joined the channel [05:03] isaacs: hammerdr: hae you checked out connect or fab or express or any of hte other web framework things out there? [05:03] isaacs: hammerdr: node-jsgi, etc. [05:04] polotek: hammerdr: I think it's only a matter of time before we stumble on a nice way to manage async code [05:04] hammerdr_: isaacs: briefly, but those are server side (not sure about fab) [05:04] isaacs: the thing is, node makes it a little harder to write programs. but it makes it MUCH harder to write slow awful bad programs, and possible at all to write fast awesome programs. very few serverside languages can say as much [05:04] polotek: particularly with it getting so much attention nowadays [05:04] isaacs: hammerdr: i don't get what you're after if it's not "serverside" [05:04] isaacs: hammerdr: i mean, node isn't jquery [05:05] hammerdr_: Jsgi, for example, is just a platform for handling request/response middleware [05:06] polotek: hammerdr_: what are you used to? php, rails? [05:06] hammerdr_: A typical application framework is one you'll see with MVC (though not always) [05:07] hammerdr_: polotek: I'm a polyglot. I've worked in lots [05:08] polotek: so what is it about node that feels so different from these others? You get a request, you generate a response and you send it back. [05:08] polotek: the only difference is that process is broken up into asynchronous chunks [05:08] polotek: so you have to manage callbacks [05:08] isaacs: hammerdr: express is explicitly an MVC framework, iiuc [05:08] sechrist: wtf.. tc is reporting twitter could be down another 5 hours [05:08] isaacs: hammerdr: but they're all "serverside" [05:09] hammerdr_: Just as a disclaimer, I am using nodejs for my current project [05:09] isaacs: hammerdr: sure [05:09] isaacs: hammerdr: or have you seen pintura? that's got a bunch of parts, i think. might even qualify as a framework. [05:09] polotek: Twitters recent problems seem to be more related to hardware or network architecture as opposed to the application [05:09] hammerdr_: Nope [05:10] polotek: "Our load balancers were overwhelmed" [05:10] polotek: that type of thing [05:11] hammerdr: I'll have to look more into express. That is probably more along the lines of what I say with "application framework" [05:11] mde: hammerdr_: Some of us are just JavaScript guys who are sick of writing everything twice. [05:11] hammerdr: mde: I'm with you there :) [05:11] mde: hammerdr_: Maybe also kick the tires on Geddy, while you're at it: http://geddyjs.org/ [05:11] polotek: mde: word [05:11] sixthgear has left the channel [05:11] mde: It's very Merb/Rails/Django/Pylons-influenced. [05:12] mde: With an eye toward sharing as much code between server and client as possible. [05:12] sechrist: a template library that lets me right everything like I would sync, but transparently make it async [05:12] sechrist: would be gold [05:12] hammerdr: The reason I'm use nodejs is because I have close-to-the-protocol needs and because I like the idea of an entire stack built in one language [05:12] hammerdr: And 'cause node is the hip thing now :) [05:13] mde: sechrist: The default EJS setup in Geddy buffers, but loads and renders all the partials async. [05:13] polotek: hammerdr: unfortunately using the word hip is no longer hip. we wil accept "new hotness". [05:13] mde: And you don't have to manage it yourself. [05:13] hammerdr: sechrist: that would be one way to do that.. unforunately you've always gotta debug eventually. [05:14] hammerdr: sechrist: that might be the way to go.. I'm not sure. Async programming is.. erhm.. the new hotness and people are experimenting right now :) [05:14] polotek: debugging async code is still harder than it needs to be. I'll agree with that [05:15] mde: Now, it doesn't do anything smart as far as streaming the data to the partials that need it, but that's a hard problem to solve without putting any onus on the end-user dev. [05:15] mde: Baby steps. :) [05:15] sechrist: eh, just a replacement for my 'mysql_query() in the middle of php code' habit would work [05:15] mde: Heheh [05:16] hammerdr: you should find a way to get rid of your 'php code' habit :) [05:16] sechrist: O.o php is fantastic [05:16] sechrist: facebook is php, and it's up [05:16] sechrist: t [05:17] sechrist: twitter is rails [05:17] sechrist: and it's down [05:17] sechrist: SEE MY LOGIC [05:17] polotek: php has come a long way. 5.x doesn't totally suck [05:17] sechrist: 5.3 is pretty awesome [05:17] polotek: or rather a subset of it doesn't suck. it's easier to write good code [05:17] sechrist: the GC is a really crappy implementation -- but it's quick [05:17] hammerdr: php is so bad that facebook rewrote it.. :P [05:17] polotek: unfortunately the spectre of backwards compatibility means all the bad stuff is still there too [05:17] sechrist: hammerdr: they were CPU bound -- most applications are _not_ [05:18] sechrist: most of their work was reworking kv stores and memcached -- other than various thrift services they use internally [05:18] hammerdr: sechrist: and twitter has terrible server architecture [05:18] sechrist: from my understanding [05:18] hammerdr: well, and the ability to 'compile' php [05:19] jsilver: does anyone have an FTP or something where I can upload this 800mb+ archive of node and coffee talks I made? where it would be useful for people? [05:19] sechrist: well they did that to solve the cpu bound problem [05:19] sechrist: jsilver: pay like 2 cents and throw it up on s3 [05:19] jsilver: when Tengh-ridden love for technology gets in the way of scalable architecture, apps fail [05:19] polotek: sechrist: actually it feels to me like they just optimized their version of php for their code path [05:20] polotek: they probably broke lots of other use cases [05:20] sechrist: I was talking about hip hop [05:20] sechrist: and yeah -- most of pecl doesn't work [05:20] sechrist: lol [05:20] mscdex has joined the channel [05:21] jsilver: i dont jhave s3 account [05:21] polotek: exactly, they should've just been real and called it "php for uber high scale web apps" [05:21] jedschmidt has joined the channel [05:21] polotek: disclaimer: don't use for anything else [05:21] sechrist: jsilver: get one bro [05:21] jsilver: lol [05:21] sechrist: s3 rox [05:21] hammerdr_: Recap: cool people experiment and play with asynchronous/event driven application frameworks [05:21] jsilver: go on [05:21] sechrist: jsilver: you don't know what s3 is? [05:21] jsilver: yes i do [05:22] jsilver: : [05:22] jsilver: :p [05:22] polotek: anybody recommend a good tool for putting together a quick diagram [05:22] sechrist: mspaint [05:23] polotek: graphically, and ability to export to image [05:23] sechrist: see above [05:23] polotek: sechrist: windows = fail [05:23] sechrist: preview.app [05:23] sechrist: annotations! [05:23] hammerdr: polotek: what sort of diagram? [05:23] polotek: also, I thought "good" was implied [05:23] hammerdr: polotek: I like yuml.me for umls/class diagrams [05:24] polotek: just an object graph, maybe some nice boxes for delineation [05:24] jsilver: Windows, ahahah!!!!! [05:24] jsilver: Windows users, AHAHHHH [05:24] sechrist: woah I just got my twitter timeline [05:24] sechrist: ACTION claps [05:24] sechrist: still can't tweet [05:24] sechrist: ACTION reverses clap [05:25] isaacs: whenever i see that little yellow triangle in tweetie, the first thing i do, i mean the FIRST thing, is try to tweet to ask if twitter is down. [05:25] isaacs: and it always is [05:25] isaacs: and i always feel like a retard. [05:25] mscdex: reverse clap? how does that work? [05:25] isaacs: what is the sound of -1 hands clapping? [05:25] sechrist: something along the lines of jsonloops [05:25] mscdex: absorbing sound? [05:26] polotek: a reverse clap sounds just like a normal one [05:26] polotek: same mechanism [05:26] polotek: there's just a more sarcastic air around it [05:26] sechrist: sarcastic air -- i like it [05:27] jsilver: so I'm right yeah [05:27] jsilver: Async could fix twitter [05:27] jsilver: or make a better twitter [05:27] jsilver: yeah [05:27] jsilver: I'm right [05:27] sechrist: jsilver: wut [05:27] jsilver: I'm right [05:27] sechrist: UDP could fix twitter [05:27] jsilver: stroke your neckbeard to that [05:27] sechrist: tweets are datagramz [05:27] sechrist: UDP is for datagramz [05:27] sechrist: IT MAKES SENSE [05:27] jsilver: can't say I disagree with that, but HTTP doesn't use UDP so tough [05:28] sechrist: woof [05:28] polotek: I think they should just reduce the char count to 32 [05:28] jsilver: what uses UDP that typical consumers use anymore? Half-life [05:28] jsilver: ? [05:28] polotek: jsilver: live video streaming? [05:28] sechrist: sorry -- all fpses use UDP [05:28] jsilver: RealPlayer? [05:29] jsilver: yea [05:29] sechrist: most multiplayer games use UDP [05:29] sechrist: it's necessary [05:29] jsilver: FPSes and video streams? [05:29] jsilver: does node have UDP yet? [05:29] sechrist: no it doesn't [05:29] jsilver: oh [05:29] jsilver: interesting [05:29] sechrist: if you add it i'll give you a cookie [05:29] polotek: I think experimental support was added recently [05:29] jsilver: i can't code C [05:29] jsilver: sorry [05:29] mde: sechrist: pquerna just added it. [05:29] sechrist: polotek: o rly [05:29] jsilver: ruby only [05:30] sechrist: mde: hi5 pquerna [05:30] jsilver: ruby is my "day job" right now [05:30] jsilver: i don't work for a company though [05:30] sechrist: jsilver: you're pretty useless if you can only write ruby and ruby one [05:30] jsilver: no I used to do PHP [05:30] sechrist: alone* [05:30] mattly: eew [05:30] mattly: :p [05:30] polotek: http://github.com/ry/node/commit/02da5ed4a1f63bb0990b8e7b1fd0793cd045cbb0 [05:30] jsilver: I can do Python too [05:30] jsilver: a bit [05:30] sechrist: jsonloops is totally out of sync [05:30] jsilver: and I used to do .NET and VB (now you can say ew) [05:30] sechrist: if this were a band the director would be yelling [05:30] mscdex: PHP and apache can be so weird sometimes [05:30] jsilver: apache is a retard and php is a bitch [05:31] jsilver: and ruby is a retard [05:31] jsilver: :) [05:31] sechrist: apache is a dinosaur [05:31] mscdex: i had an odd thing happen earlier where PHP under apache couldn't resolve hostnames, but PHP under CLI could resolve them just fine [05:31] jsilver: this is an unsafe-zone for projects that use n-thread type models [05:31] jsilver: just like how git hates svn [05:31] mscdex: apachectl restart didn't work, i had to do 'apachectl stop' and then 'apachectl start' [05:31] sechrist: mscdex: were you using anything weird like suphp, suexec, or anything? [05:31] mscdex: nope [05:31] polotek: git doesn't hate svn [05:31] sechrist: I used to manage shared hosting boxes [05:31] jsilver: I hate SVN tho [05:31] sechrist: i've seen my share of apache weirdness [05:31] mscdex: after i did that, it worked fine [05:31] polotek: it looks down upon it with scorn and disdain [05:32] jsilver: apache is trash [05:32] sechrist: mscdex: poll the process list -- grab the pid while it's running -- and plop it into strace [05:32] polotek: just like node does on threaded platforms [05:32] jsilver: php is a clusterfuck [05:32] mscdex: meh [05:32] jsilver: and ruby is a circlejerk [05:32] sechrist: where is jimbastard when I want to insult him [05:33] sechrist: afplay I guess is the only way he could do it right now [05:33] sechrist: :( [05:35] mscdex: JimBastard is a mac head [05:35] mscdex: which is one of the reasons he's on notice [05:35] jsilver: if I make a reloader for node, will I get to be captain? [05:35] mscdex: ;-) [05:35] jsilver: will I get ops [05:35] sechrist: mscdex: i'm a machead too [05:35] sechrist: you're on notice [05:35] mscdex: http://i46.tinypic.com/8yuayp.jpg [05:36] jashkenas: whao. [05:36] sechrist: ryan_ghal -- i'm looking at you [05:36] mscdex: huhu [05:37] sechrist: http://www.afternic.com/name.php?domain=node.net [05:37] sechrist: $25k for node.net [05:37] sechrist: what a STEAL [05:37] sechrist: HAHAH! [05:37] sechrist: notice worked [05:37] jsilver: guess [05:37] jsilver: guys* [05:37] jsilver: what's stopping node from having a reloader? [05:38] sechrist: you mean like [05:38] sechrist: hotswapping code? [05:38] jsilver: i restate my questions from earlier: [05:38] sechrist: the sheer intertwangleness of javascript [05:38] sechrist: good luck with that [05:38] sechrist: every implementation so far as been pretty fail [05:38] jsilver: why shouldn't one use a ruby program to terminate and restart the process ? [05:38] jsilver: on save [05:38] trochala has joined the channel [05:38] jsilver: i know it's not reloading [05:38] sechrist: that made no sense [05:38] jsilver: a ruby program with a filesystem watcher [05:38] jsilver: watching the node directory for saves [05:39] polotek: jsilver: reloading on save works [05:39] sechrist: how about a node program with a filesystem watcher [05:39] jsilver: since when? [05:39] polotek: but a true hotswapper has issues [05:39] jsilver: polotek, is there any stock reloaders I can use [05:39] jsilver: or should I make one [05:39] polotek: jsilver: not in node I mean as a separate process [05:39] jsilver: i know [05:39] jsilver: thats also what im talking about [05:39] jsilver: start() or whatever [05:39] polotek: node doesn't have a good implementation, because file watching functionality is pretty different across OSes [05:40] polotek: at least that was my impression [05:40] sechrist: fs.* [05:40] sechrist: flawless victory [05:40] mscdex: iirc watching files in node is fine unless you're on osx :P [05:40] polotek: mscdex: yeah I think it was a mac thing [05:40] sechrist: who runs node on osx unless they're trying to run marak's fat beatz [05:40] sechrist: via jsonloops [05:40] mscdex: in which case it does a bad polling thing [05:40] polotek: sechrist: I definitely use a Mac [05:40] sechrist: ew [05:41] jsilver: so a Ruby forking process watcher might be better? [05:41] sechrist: polotek: so do I -- but I rarely run node on it [05:41] polotek: I develop my node libs on a Mac :) [05:41] sechrist: jsilver: s/ruby/bash [05:41] jsilver: I'm not good at bash scripting [05:41] jsilver: why the fuck not ruby [05:41] jsilver: stop the ruby hating this instant [05:41] sechrist: how much memory does ruby take up per instance? [05:41] jsilver: cause it's not flying [05:41] sechrist: that sounds retarded to use [05:41] polotek: Don't sleep on Macs. I think people get turned off because it doesn't do things just like *nix does [05:42] jsilver: negligable [05:42] polotek: but it has equivalents for most things [05:42] sechrist: negligible my ass [05:42] jsilver: yeah [05:42] jsilver: Mac: Plastic Unix [05:42] jsilver: OS X: Plastic Unix [05:42] polotek: it's head and shoulders above windows as a programming environment [05:42] jsilver: true [05:42] jsilver: but still [05:42] sechrist: I use mac for mac software -- not unix [05:42] jsilver: plastic unix [05:42] polotek: even if it's not quit at the level of a linux [05:42] hammerdr: jsilver: the problem with a reloader is that all dependencies on that particular module will need to be found and the module swapped out [05:42] hammerdr: jsilver: sounds trivial but it really isn't [05:42] sechrist: though it is nice to have a semi-familiar terminal [05:42] polotek: and it's also a kick as environment for other types of computing [05:43] polotek: linux still sucks for everything except dev IMO [05:43] sechrist: yeah :\ [05:43] jsilver: hammerdr, I understand there's design flaws but I'm trying to see if there's a reason NOT to do something like filesystem watching, kill and restarting with a daemon (in development mode) [05:43] sechrist: mac is the middle grown between windows and linux [05:43] sechrist: and it's shiny [05:43] polotek: sechrist: yep [05:43] polotek: jsilver: no reason not to. knock yourself out [05:43] hammerdr: jsilver: and the ruby idea isn't a reloader but a restarter.. that could easily be done in javascript itself using github.com/chandlerkent/fsevents [05:44] jsilver: okay [05:44] mscdex: speaking of mac, i think it's funny how engadget always makes a post every time the apple store goes down [05:44] jsilver: I will give it a shot now [05:44] mscdex: like it's news-worthy [05:44] sechrist: it is [05:44] sechrist: for the 150k crapps on the crapp store [05:45] hammerdr_ has joined the channel [05:45] jsilver: i'm gonna try to make a ruby script now to do it [05:45] sechrist: jsilver: if you say ruby one more time [05:45] sechrist: I swear [05:45] jsilver: not only will I say ruby [05:45] jsilver: I will actually write some [05:45] jsilver: :) [05:45] jsilver: <^> [05:46] hammerdr: jsilver: just writing a node script to do it :P [05:47] sechrist: polotek: I didn't think udp would be that difficult to do [05:47] hammerdr: jsilver: ohh.. you're not on a mac.. that's why you can't.. [05:47] jsilver: well right yeah I use Linux so I can't troubleshoot any Mac problems sorry :) [05:47] sechrist: so now I can re implement my gameserver [05:48] polotek: sechrist: my tcp-fu sucked before I started getting into node [05:48] jsilver: one thing to contribute I think I can do though is make a good ruby restarter [05:48] polotek: working with the lower level api made me step my game up [05:48] polotek: but still don't know much about udp [05:48] jsilver: oh [05:48] jsilver: wait [05:48] sechrist: i've already done async work with boost::asio and shit in c+= [05:48] jsilver: you guys want me to do it in JS? [05:48] jsilver: ok [05:48] jsilver: so [05:48] sechrist: polotek: udp is pretty simple [05:49] jsilver: if you did it in JS you would want to have it done like this: shotgun node example.js [05:49] jsilver: correct? [05:49] sechrist: the only difference is if you want anything similar to a connection -- you group by source ip and source port [05:49] sechrist: and it's not really a connection [05:49] sechrist: in practice yes in technicality nah [05:49] jsilver: so the restarter script would take the interpreter and the path-to-script as argv[0] and argv[1] [05:50] jsilver: and then control a node child process somehow? [05:50] jsilver: via fsevents save? [05:50] sechrist: jsilver what about libraries? [05:50] sechrist: requires and stuff? [05:50] polotek: sechrist: I'm all about practice [05:50] jsilver: it would be one node managing another [05:50] sechrist: are you going to sniff the syscalls to see what js files it loads? [05:50] jsilver: not a shared node process [05:50] jsilver: if i did it [05:50] jsilver: no way [05:50] jsilver: hard restart on save [05:51] jsilver: not dynamic reloading [05:51] jsilver: someone else smarter can make that [05:51] jsilver: if they care [05:51] sechrist: I didn't mean dynamic reloading [05:51] sechrist: I mean if you save a require to a script that's loading [05:51] sechrist: you should restart the parent script [05:51] sechrist: since the code changed [05:51] sechrist: bazinga [05:52] Tekerson: just make sure all code is under one tree and watch the whole tree? [05:52] sechrist: http://s.twimg.com/images/please_fix.png [05:52] sechrist: Tekerson: that works [05:52] jsilver: no [05:52] jsilver: send it TERM and restart it [05:52] jsilver: synchronously [05:52] jsilver: :) [05:52] sechrist: jsilver obviously wants the crappiest solution ever [05:52] jsilver: why is it crappy [05:53] sechrist: you're only watching the launching js file? [05:53] sechrist: none of it's dependencies? [05:53] jsilver: wait [05:53] jsilver: i see what you're saying [05:53] sechrist: yarly [05:53] jsilver: require doesn't fork new processes though in node does it? [05:53] jsilver: new threads? [05:53] sechrist: wtf? [05:53] jsilver: no [05:53] sechrist: it might for loading the file [05:53] jsilver: oh [05:53] sechrist: node does a thread pool magic [05:53] jsilver: parse the include and watch them too [05:53] jsilver: right [05:54] jsilver: **require [05:54] sechrist: ACTION facepalms [05:54] polotek: jsilver: what you're doing has nothing to do with the node threadpool [05:54] jsilver: polotek: trying to conceive of doing [05:54] jsilver: :) [05:54] mape: Why are people longing for node binaries? [05:54] sechrist: jsilver you'd have to recursively parse requires too [05:54] rictic has joined the channel [05:54] sechrist: since a require'd script can have requires [05:54] jsilver: ohh [05:55] sechrist: yeah your whole idea is pretty bupkis [05:55] polotek: jsilver: you need a process that watches all of the files that you're concerned about [05:55] jsilver: that's not unreasonable is it? you're saying it would be better to intercept it? [05:55] sechrist: just restart the damn service when it updates [05:55] polotek: and restarts node when they change [05:55] jsilver: why not explicitly tell it [05:55] jsilver: what files you care about [05:55] jsilver: :) [05:55] nsm has joined the channel [05:55] sechrist: that works but it's half-assed [05:55] sechrist: ok [05:55] jsilver: "everything in git" ? [05:55] jsilver: are we getting anywhere [05:55] jsilver: lmao [05:55] polotek: sechrist: half-assed is better than nothing [05:56] sechrist: I don't know why you would want to restart the service automatically if code changes [05:56] polotek: we're taking about personal development right? [05:56] jsilver: yes [05:56] sechrist: yeah god I hope so [05:56] jsilver: ... [05:56] jsilver: stop trolling so hard [05:56] mape: hehe [05:56] jsilver: i'm just jsilver [05:56] jsilver: relax [05:56] sechrist: ryan commited something to node -- lets update node and run it production [05:56] polotek: I agree restarting on every save is inefficient [05:56] polotek: but would work [05:56] sechrist: oh wait.. fs.seek requires 5 arguments now? MY WHOLE SITE HAS BEEN DOWN FOR AN HOUR [05:57] polotek: actually now that I think about it [05:57] jsilver: yeah [05:57] polotek: I would be happy with a simple global hotkey that restarted node whenever I needed it [05:57] sechrist: I hit command/control+s after like every line I write [05:57] sechrist: so that solution [05:57] sechrist: would be retarded for me [05:57] polotek: we're just talking about skipping the tedious workflow [05:57] polotek: switch over to your terminal from your editor [05:57] polotek: ctrl-d to stop node [05:57] jsilver: right [05:57] polotek: up arrow and enter to restart [05:57] polotek: bleh [05:58] jsilver: i'd be cool with it doing it on-save like shotgun for sinatra does [05:58] sechrist: bind a hotkey with a local listener app that hits a service [05:58] sechrist: that restarts your app [05:58] jsilver: i was going to use ruby but if ruby is so damn uncool I can use coffee [05:58] jsilver: :P!!!!!!!!!! [05:58] jakehow has joined the channel [05:58] polotek: sechrist: not if you have 8GB of ram and an SDD :) [05:58] polotek: you won't even feel it [05:58] sechrist: you have to use creamer [05:58] Tekerson: while [ true ]; do inotifywait -r /my/src/path && killall node && node /my/src/path/main.js; done [05:58] Tekerson: ? [05:58] hammerdr_: Visor is nice because it doesn't interupt te workflow very much [05:58] sechrist: what do you mean feel it, i'm not following you polotek [05:59] sechrist: I hit command+s after every line of code I write -- it's like habit [05:59] polotek: sechrist: re: saving and restarting very often [05:59] sechrist: oh [05:59] sechrist: but you lose state [05:59] sechrist: wahhh [05:59] jsilver: Tekerson: yeah [06:00] CIA-76 has joined the channel [06:00] Tekerson: except... it needs to be backgrounded.. but something like that. [06:00] jsilver: yes [06:00] jsilver: screen'd [06:00] jsilver: that's good [06:00] jsilver: +saved [06:01] polotek: sechrist: what kind of state do you need to save during development that's not in a datastore somewhere? [06:01] sechrist: I can't answer that without getting flamed [06:01] sechrist: so I refrain [06:01] sechrist: I would say queues [06:02] sechrist: so does node-worker work properly? [06:02] sechrist: last update was may 14th [06:02] sechrist: that's old in node-land [06:02] polotek: http://creately.com is nice [06:03] polotek: like 80% of ms visio but online [06:03] utgo has joined the channel [06:03] polotek: unfortunately I'm tired of dicking around with this for the night. [06:03] polotek: this is why I don't blog more often. too much of a time commitment [06:04] polotek: anyway, in case folks here didn't catch it. libxmljs is updated [06:04] polotek: http://github.com/polotek/libxmljs/tree/0.4.0 [06:04] polotek: now with more awesome and less suck [06:04] jsilver: Tekerson, I am trying your bash script [06:04] jsilver: with $0 and $1 instead of the example paths [06:04] jsilver: :) [06:05] riottaba has joined the channel [06:05] Tekerson: I think this is closer. but I haven't got node intalled here to try it: [06:05] Tekerson: while [ true ]; do killall node && node /my/src/path/main.js & inotifywait -r /my/src/path; done [06:06] Epeli has joined the channel [06:06] _announcer: Twitter: "Josi: A framework that looks just like @sinatra, for node.js http://j.mp/9nuUCt" -- Jesse Cooke. http://twitter.com/jc00ke/status/16200272101 [06:07] sechrist: jsilver: i told u bash [06:07] sechrist: u bawked [06:08] sechrist: though killall node is kinda lulzy [06:08] isaacs: Tekerson: wha'ts the use case you're trying to handle? [06:08] jsilver: yeah [06:08] sechrist: wait [06:08] sechrist: how did that tweet come through [06:08] polotek: sechrist: don't tell me you've never seen the _announcer [06:08] jsilver: we lose stdout tho [06:09] jsilver: with Tekkerson's script [06:09] sechrist: polotek: were you aware that twitter has been down for hours -- with hours more estimated time? [06:09] isaacs: why don't you guys just use node-supervisor? that's what it does. it restarts your program when the files change. [06:09] polotek: oh yeah, you mean how if twitter down [06:09] polotek: "down" is relative [06:09] polotek: the announcer runs off the streaming api [06:09] isaacs: sechrist: it's been up and down [06:09] sechrist: it was global not long ago [06:09] sechrist: lol [06:09] jsilver: Tekkerson: [06:09] jsilver: #!/bin/bash [06:09] jsilver: while [ true ]; do inotifywait -r $0 && killall node && node $1; done [06:09] polotek: so as soon as twitter is serving it's picking it up [06:10] sechrist: jsilver: store the pid [06:10] sechrist: kill only that pid [06:10] jsilver: sechrist ok [06:10] isaacs: jsilver: node-supervisor --watch my-program.js --program my-program.js [06:10] jsilver: ok [06:10] sechrist: there's a node-supervisor? [06:10] isaacs: sechrist: npm install supervisor [06:10] sechrist: i prefer kiwi [06:11] isaacs: sechrist: or http://github.com/isaacs/node-supervisor [06:11] sechrist: :P [06:11] isaacs: sechrist: kiwi's been discontinued [06:11] sechrist: express still uses it :( [06:11] isaacs: true that [06:11] isaacs: tjholowaychuk is busy [06:11] isaacs: i might make a package.json for express if i get around to it [06:11] sechrist: once npm wins the package management war [06:11] Tekerson: isaacs, I have tried it previously, but found it very slow/or inconsistent to reload. I never knew if my error was still there because I hadn't fixed it or if it just hadn't reloaded. [06:11] polotek: sechrist: no you don't, you just haven't used npm enough [06:11] sechrist: i'll switch over full time [06:11] isaacs: sechrist: it's not a war. [06:12] sechrist: oh, npm already won? [06:12] isaacs: sechrist: there's no "win" [06:12] isaacs: don't you see? [06:12] isaacs: npm didn't win. it LOST. [06:12] jsilver: kiwi install supervisor failed [06:12] polotek: isaacs: it's like a cold war [06:12] isaacs: polotek: no, it's more like "oh, no, i got the job, now i have to do all kinds of work" war [06:12] isaacs: i kid, i kid [06:12] isaacs: npm is fun [06:13] sechrist: how do you pronounce it? [06:13] sechrist: nippum? [06:13] isaacs: en pee em [06:13] sechrist: that's silly [06:13] isaacs: but nippum is acceptable. i don't pronounce it often, mostly i just type it [06:13] riottaba_ has joined the channel [06:13] isaacs: and it's super easy to type [06:13] sechrist: chmod is cha-mod for example [06:14] isaacs: sechrist: i prefer to pron it shmod [06:14] polotek: sechrist: I prefer schmod [06:14] sechrist: when you pronounce silly acronyms in a working environment you gotta make these up [06:14] sechrist: schmod sounds like chahmod when I say it [06:14] pufuwozu has joined the channel [06:14] sechrist: the different phonetically is nothing [06:15] isaacs: sechrist: you can call npm whatever you like, really. [06:15] sechrist: unless schmod is scuh-mod [06:15] sechrist: which is lul [06:15] isaacs: as long as you spell it "npm" [06:15] isaacs: it'll work [06:16] jsilver: is node supr visor any good [06:16] jsilver: im updating node [06:18] isaacs: jsilver: sure. it's definitely *any* good [06:18] isaacs: jsilver: i'm sure it's got all kinds of problems. it's been handy for the uses i've used it for [06:18] _announcer: Twitter: "Understanding node.js http://icio.us/ntrbaq" -- Daniel Cohen. http://twitter.com/danielissimo/status/16201089650 [06:18] sechrist: NOBODY CAN UNDERSTAND NODE [06:19] isaacs: felixge can [06:19] sechrist: in sovietrussia.js -- node understands YOU [06:19] isaacs: (he's debuggable) [06:19] polotek: wow, I'm not sure I can handle the sudden deluge of bad jokes [06:19] jsilver: cool isaacs [06:20] sechrist: so like I can run gdb ./felixge? [06:20] mikeal has joined the channel [06:20] jsilver: whats a Node [06:20] sechrist: I don't understand why it's called node [06:20] jsilver: I'm listening to mad node screencasts [06:20] sechrist: there's no cluster of js [06:20] isaacs: sechrist: because it's a program tha tyou can use to write nodes that exist in a giant network that is the interwebz [06:20] isaacs: sechrist: it is a client and a server [06:21] jsilver: pipes and nodes... [06:21] zaach has left the channel [06:21] jsilver: a series of them [06:24] linuxsable has joined the channel [06:25] riottaba has joined the channel [06:36] hammerdr has joined the channel [06:39] _announcer: Twitter: "FW/1 CF framework and Node.js for a new pet project. Its gonna be awesome. If not, learning tons of cool stuff either way. Win-Win!" -- Eric Mitchell. http://twitter.com/ericmitchell1/status/16203166877 [06:40] sechrist: can you search through a projects code on github? [06:41] sechrist: or only a global search? [06:42] riottaba_ has joined the channel [06:44] sechrist: the lack of documentation for express is disturbing [06:44] sechrist: the app starts up saying development mode -- it's apparently the "environment" [06:44] micheil has joined the channel [06:44] sechrist: but there's no docs on that whatsoever [06:44] mikeal: for some reason I'm losing my reference to sys [06:44] mikeal: after i've start it [06:44] sechrist: overwriting it? [06:46] linuxsable has joined the channel [06:47] mikeal: it's super weird [06:47] jedschmidt has joined the channel [06:47] mikeal: i wonder if it's the latest npm [06:47] mikeal: cause i don't have this issue on my box with an older npm [06:48] isaacs: mikeal: wut? [06:48] mikeal: is SUPER weird [06:48] mikeal: i have a callback in request [06:48] mikeal: and sys is defined in my main module [06:48] mikeal: and it's fine getting called a lot throughout the script [06:48] mikeal: and then in the callback to request, it's undefined when called [06:49] mikeal: it should be fully accessible in the closure [06:49] mikeal: fuck man [06:49] mikeal: require is not defined [06:49] mikeal: what the fuck is going on [06:49] isaacs: weird. npm couldnt be doing that, i dont think [06:50] mikeal: this is so messed up [06:54] TomY has joined the channel [06:54] geojeff: isaacs: npm ! Error: ENOENT, No such file or directory '/usr/local/lib/node/.npm/supervisor/0.0.3/package/build/node-supervisor' (dir is supervisor-0.0.3) [06:54] ewdafa has joined the channel [06:55] isaacs: geojeff: bedtime. plz post an issue on node-supervisor [06:55] mikeal: this is insane [06:55] mikeal: this cannot be happening [06:55] geojeff: ok [06:55] mikeal: i'm literally losing all of closure refernces [06:55] mikeal: for no fuckin reason [06:58] nikhil_ has joined the channel [06:59] riottaba has joined the channel [06:59] derbumi has joined the channel [07:04] polotek: mikeal: I had something like that happening once [07:04] polotek: then it just went away [07:04] polotek: this was a long time ago though [07:04] mikeal: this is a new box with a brew install of node [07:04] mikeal: and a new npm and everything [07:04] mikeal: and i think something was just fucked when it was compiled or something [07:05] mikeal: i'm giving up for tonight [07:05] polotek: ACTION nods sleepily [07:05] polotek: I'm out too [07:05] mpoz2 has joined the channel [07:05] polotek has left the channel [07:08] derbumi has joined the channel [07:08] riottaba_ has joined the channel [07:09] dabreaka__ has joined the channel [07:10] Aria has joined the channel [07:13] jsilver: so [07:13] jsilver: I can't npm install node-supervisor [07:13] jsilver: npm ! Error: not found in registry: node-supervisor [07:13] jsilver: at /home/jonathan/.node_libraries/.npm/npm/0.1.16/package/lib/install.js:123:32 [07:13] jsilver: at IncomingMessage. (/home/jonathan/.node_libraries/.npm/npm/0.1.16/package/lib/utils/registry/request.js:74:7) [07:13] jsilver: at IncomingMessage.emit (events:42:20) [07:13] jsilver: at HTTPParser.onMessageComplete (http:102:23) [07:13] jsilver: oops [07:18] sechrist: woah [07:18] sechrist: so I can get the new iphone 4 for free? [07:18] sechrist: if I trade in my 3gs to radioshack? [07:18] sechrist: cooool [07:18] benoitc has joined the channel [07:19] mape: huh? [07:19] sechrist: radioshack is offering $200 trade in on all iphone 3gses [07:19] sechrist: regardless of capacity [07:19] sechrist: when you buy a i4 from them [07:20] sechrist: so with the subsidy [07:20] sechrist: you only pay tax [07:20] sechrist: for the cheapest i4 [07:20] mape: yeah free, only an i4.. [07:20] sechrist: what? [07:20] sechrist: it's not free [07:20] jsilver: fuck apple [07:20] sechrist: it's you giving radioshack your phone for $200, then applying that to buy the cheapest iphone 4 [07:20] sechrist: which levels out so you pay just tax [07:20] jsilver: fuck i*.^ [07:21] jsilver: i*. [07:21] jsilver: or something [07:21] riottaba has joined the channel [07:21] micheil: hm.. [07:21] sechrist: I mean I'd be giving up $100 because I want the 32 [07:21] sechrist: but whatever [07:21] jsilver: sup micheil [07:21] jsilver: i knew you'd be here! [07:21] micheil: not a lot [07:21] jsilver: caught you finallyy [07:21] sechrist: I could probably sell the 32gb 3gs, unlocked, for more than $200 [07:21] sechrist: so that may not be ideal [07:21] jsilver: its only 12:21am here [07:21] micheil: hmm.. [07:24] mitkok has joined the channel [07:24] virtuo has joined the channel [07:26] Judofyr has joined the channel [07:26] _announcer: Twitter: "@dahankzter @peter_lind näe verkar fritt fram så man kan ju bygga not coolt med node.js! får gå en snabbkurs i javascript först bara..." -- Fredrik Rubensson. http://twitter.com/froderik/status/16206891953 [07:26] Tim_Smart has joined the channel [07:29] Validatorian has joined the channel [07:30] Validatorian: Tim_Smart: you around? [07:30] Tim_Smart: Validatorian: Yes [07:30] derbumi has joined the channel [07:30] Judofyr has joined the channel [07:31] Validatorian: d'you have an example using two parallels in succession? example: http://gist.github.com/438803 [07:31] Validatorian: this takes ~1.5 seconds to run -- without the second parallel, it takes ~20 milliseconds... something is wrong :) [07:32] riottaba_ has joined the channel [07:35] Tim_Smart: Validatorian: http://gist.github.com/438805 [07:35] Tim_Smart: wait a sec, just need to make a change [07:37] jsilver: NIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIGHT [07:39] Tim_Smart: Validatorian: http://gist.github.com/438805 [07:40] Tim_Smart: The add syntax is: Parallel.prototype.add(id, [function, arg1, arg2...]); [07:40] Validatorian: ahh, that makes sense [07:41] Tim_Smart: You can then bind to certain task id's etc [07:41] Tim_Smart: I should probably make a example that I can show people [07:42] Validatorian: that would probably be helpful -- though fictorial has a pretty extensive test doc, that uses every aspect of the module, and I still manage to get lost [07:43] Validatorian: (for the redis module) [07:43] felixge has joined the channel [07:44] felixge has joined the channel [07:44] felixge: ryah: hey, you still up? [07:44] Tim_Smart: Yeah I tried to keep Parallel to general Javascript confections, so it is a bit more flexible and easy to pick up [07:44] Tim_Smart: *convections [07:44] sechrist: anybody used a recent version of node-html5? [07:44] sechrist: if so, has the speed improved any? [07:45] Validatorian: was it slow previously, sechrist? [07:45] Validatorian: I was under the impression it was already really fast? [07:45] sechrist: waaaat [07:45] Validatorian: just from what I've heard here [07:45] sechrist: 7 seconds for something htmlparser can do in 18ms [07:45] sechrist: it was pretty dramatic [07:46] Validatorian: huh -- yea, that's a fairly big difference. [07:46] sechrist: but she moved it to buffers, so I'm guessing it got a lot faster recently [07:46] Validatorian: this is Aria's project, right? [07:46] sechrist: yeah [07:46] mape: Buffers are snippy [07:47] sechrist: yeah then it's worth another try [07:47] sechrist: tough part is getting it to work -- seems like she had a disagreement with tmpvar [07:47] Validatorian: hopefully she and tmpvar will have a blazingly fast jQuery-based forgiving html-parser by the time I need it :) [07:47] sechrist: may need to use her branch [07:47] sechrist: of jsdom [07:47] mape: Validatorian: hehe I already kinda do it but it is really nasty using html tidy and curl [07:47] Validatorian: mape: I'm using regex. [07:48] mape: Works really well though [07:48] mape: ouch :S [07:48] Validatorian: desperate times.... [07:48] mape: Using selectors really makes it easy [07:49] Validatorian: yea, I would love to do that [07:49] Validatorian: how fast is your implementation? [07:49] micheil: anyone know if jsilver is a mac user? [07:50] dabreaka__ has joined the channel [07:51] Validatorian: mape: have your implementation in a gist or a repo somewhere? [07:51] mape: Hmm think I pasted a gist a while ago [07:52] Validatorian: don't worry about it if you have to search for it, mape -- it's more of a curiosity [07:53] Validatorian: I'm not going to need it for two weeks or so, and who knows what will be going on that far away :) [07:53] mape: it is pretty much the old jsdom stuff just that I pipe it through curl and htmltidy so it doesn't break on every single page [07:53] _announcer: Twitter: "@froderik @peter_lind node.js rockar! Jag är på med det. Hur blev det med namnet?" -- Henrik Johansson. http://twitter.com/dahankzter/status/16208435877 [07:53] Validatorian: ah, okay [07:59] teemow has joined the channel [08:00] derbumi has joined the channel [08:01] mape: But works as advertised, and I've scraped quite a bit using it [08:01] mape: Using step so they run in parallell [08:04] sechrist: TypeError: Cannot redefine property: defineProperty [08:04] sechrist: what a lovely error [08:06] Tim_Smart: Validatorian: http://gist.github.com/438828 [08:06] Validatorian: awesome, Tim_Smart [08:09] felixge has joined the channel [08:09] felixge has joined the channel [08:10] Tim_Smart: Validatorian: Does it explain itself well enough? [08:10] Validatorian: I'm pretty tired, but most of it made sense :) [08:11] _announcer: Twitter: "node-bufferlist is really HOT, THANK YOU! http://github.com/substack/node-bufferlist/blob/master/bufferlist/binary.js" -- Rob Ellis. http://twitter.com/rob_ellis/status/16209286632 [08:18] jjenzz has joined the channel [08:18] jjenzz: hello =) [08:18] mape: hi [08:18] jjenzz: that's all... for now [08:19] mape: for you perhaps [08:19] mape: the ride is just getting started [08:19] _announcer: Twitter: "learning about node.js and event-loop based programming models" -- Angel Machin. http://twitter.com/trapalas/status/16209590875 [08:19] jjenzz: ooo exciting ;) [08:20] jjenzz: ah nice, it feeds in tweets related to node.js? [08:20] jjenzz: that must get irritating after a while [08:21] Tim_Smart: It only really gets triggered every 20-30 minutes [08:22] caolanm has joined the channel [08:22] linuxsable has joined the channel [08:22] Validatorian: I thought it would get irritating at first, but I actually quite enjoy seeing what other people are saying about node without having to actively seek it :) [08:24] mape: why every 20-30min? [08:24] Tim_Smart: It filters out certains tweets from memory [08:25] mape: Oh yeah mean it only shows stuff every 20-30min? I thought you meant fetched [08:25] Tim_Smart: Oh nah, its uses the streaming api [08:26] mape: yeah [08:32] _announcer: Twitter: "Cool - Github issues and my Draw Together demo both got linked off the node knockout site - http://bit.ly/avKP9W #nodejs #cappuccino" -- Saikat Chakrabarti. http://twitter.com/saikatc/status/16210114024 [08:34] _announcer: Twitter: "node.js本体のバグかとおもったらWebSocketライブラリのバグ(というより設計ミス)だった件" -- KOBA789. http://twitter.com/koba789/status/16210160372 [08:36] keyvan has joined the channel [08:36] sechrist: hmm [08:37] sechrist: did jsdom stop using node-htmlparser? [08:37] sechrist: or what [08:38] mape: It uses a fork? [08:40] sechrist: oh now I remember [08:40] sechrist: node-htmlparser updated the implementation [08:40] sechrist: I've been through this >.> [08:44] ryan_gahl has joined the channel [08:51] gawker2 has joined the channel [09:03] sveimac_ has joined the channel [09:04] _announcer: Twitter: "Hrm, contrary to popular belief, node.js has no monopoly on invent high concurrency, evented I/O. You /have/ choices!" -- samfosteriam. http://twitter.com/samfosteriam/status/16211361161 [09:06] linuxsable has joined the channel [09:06] botanicus has joined the channel [09:11] mAritz has joined the channel [09:29] pandark_ has joined the channel [09:51] zhesto has joined the channel [09:53] sechrist: CHOICES? [09:56] kodisha has joined the channel [10:02] pandark__ has joined the channel [10:03] pandark_ has joined the channel [10:04] pandark_ has joined the channel [10:05] hellp has joined the channel [10:08] temp01: choices! [10:21] botanicu_ has joined the channel [10:26] joshbuddy has joined the channel [10:26] _announcer: Twitter: "Hacking node-cryto in node.js to add in support for foaf+ssl, subjectaltname done; now for exponent and modulus!" -- nathan. http://twitter.com/webr3/status/16214700836 [10:41] dgathright has joined the channel [10:44] sh1mmer has joined the channel [11:06] dgathright has joined the channel [11:06] sechrist: atmos: you here? [11:09] jetienne has joined the channel [11:11] sechrist: anybody know how to use express-session-redis? I did the Object.merge thing [11:11] sechrist: but *shrug* after that [11:13] k23z__ has joined the channel [11:14] k23z__: I was expecting this to show me the POST data http://pastebin.com/BbdDgDB2 [11:14] k23z__: it doesn't do that [11:14] k23z__: how do I see the POST data of a request that I receive ? [11:14] k23z__: ? [11:16] sechrist: ah, damnit -- express-session-redis isn't compatible with latest express [11:16] sechrist: triggerz [11:20] k23z__: THE POST data, how do I see it ? [11:20] webr3: anybody know if there's a c level method to turn hex in to i64 or equiv of apr_strtoi64? (in v8 or node.js) [11:20] webr3: ACTION notices his tweet announced ^o) [11:20] k23z__: webr3: why not just rip it off wherever you're using it, writing it in v8 and then recompile v8 & node.js and try it [11:21] webr3: k23z__, that's plan b :) [11:21] jetienne: man ryah is a good leader. modest, efficient, skilled. [11:22] rnewson has joined the channel [11:24] k23z__: HOW DO I see POST data using node.js ? [11:27] k23z__: should I use net.createServer(function(stream){...}); instead of http.createServer ? [11:27] k23z__: I need to read the data from the request I'm getting [11:27] k23z__: how do I do that ? [11:27] k23z__: it's a POST request [11:28] fitzgen has joined the channel [11:31] jetienne: k23z__: looking at the doc. post request seems like any request. you get a "data" event in http.serverrequest [11:31] jetienne: k23z__: i would espect the posted data to be notified in this event [11:32] k23z__: jetienne: please see http://pastebin.com/BbdDgDB2 [11:32] k23z__: jetienne: I have tried that and I see no data on my screen [11:33] jetienne: k23z__: hmm ok. sorry i dunno more [11:33] k23z__: jetienne: how do you do it ? [11:33] k23z__: jetienne: maybe I have something written wrong [11:33] jetienne: k23z__: i dont :) just trying to help you [11:33] jetienne: k23z__: i would expect that something that basic to work tho. So yes i think you did something wrong. i dunno what tho [11:34] jetienne: k23z__: maybe to find a post example on github ? [11:34] jetienne: npm may have a post [11:35] k23z__: jetienne: yes I need a post example [11:35] k23z__: jetienne: I cannot find any [11:35] k23z__: any working one that is [11:37] Ori_P has joined the channel [11:38] k23z__: this is lame [11:38] k23z__: where do I get a working example of a Node.js server that can read POST data of a request and print them to the screen ?> [11:38] k23z__: any idea on this please ? [11:38] kodisha: where is the listen method? [11:39] hpoydar has joined the channel [11:40] k23z__: kodisha: are you reading my paste ? [11:40] kodisha: yes [11:40] k23z__: kodisha: exports.server.listen(8124, "127.0.0.1"); [11:41] k23z__: kodisha: any idea ? what can I do to make that example work [11:42] k23z__: I'm missing something very little, it shouldn't be that hard to write a working http server [11:42] k23z__: I'm stuck on this since yesterday afternoon [11:42] k23z__: and I was on here yesterday night and asked the same question [11:42] k23z__: got no answer [11:44] kodisha: sec [11:44] k23z__: kodisha: thanks, I'm waiting over here [11:46] k23z__: kodisha: ? [11:46] jetienne: http://www.componentix.com/blog/13 "File uploads using Node.js: once again" k23z__ this is likely to have post [11:50] k23z__: jetienne: are you serious ? [11:50] k23z__: I can't believe this ? is it that complicated ? [11:50] k23z__: that guy is making a parser for multipart data [11:50] k23z__: I *DON'T* have multipart data [11:51] kodisha: no it is dumb simple [11:51] jetienne: k23z__: :) no, this stuff is doing a lot more than you need [11:51] kodisha: i have working example [11:51] k23z__: I am not UPLOADING files [11:51] kodisha: in a sec [11:51] k23z__: I just want to see my POST data that's all ! [11:51] jetienne: k23z__: relax [11:51] k23z__: jetienne: I am trying to [11:51] micheil: hmm.. [11:53] k23z__: kodisha: looking forward to the working example please [11:53] kodisha: http://pastebin.com/PDCi7uni [11:53] k23z__: kodisha: thanks, looking now [11:55] micheil: and data there is a Buffer [11:55] zomgbie has joined the channel [11:55] micheil: so, if it's utf8 data, do: data.toString("utf8") [11:55] k23z__: ok it works kodisha [11:55] micheil: or, you may want to create a req buffer, and append data to it [11:55] k23z__: apparently my problem is on client-side then :( [11:56] kodisha: k23z__: try to add this to your listener [11:56] kodisha: sys.puts("REQUEST METHOD: "+req.method); [11:56] kodisha: to see if that is really post [11:56] k23z__: kodisha: are you sure what you wrote, the curl is a POST request ? [11:56] micheil: k23z__: if you're on os x, try testing with a program called HTTPClient (http://ditchnet.org/httpclient) on unix, probably curl [11:56] kodisha: yes, that is POST [11:57] k23z__: it's POST alright [11:57] k23z__: micheil: I'm on Linux [11:57] jetienne: http://pastebin.com/M81tutif <- this is a stackdump from nodejs crash, anybody knows what "at Client.ondata (http:861:22)" means ? [11:57] k23z__: I think I need to use some Firefox extension to test my current AJAX [11:58] micheil: jetienne: it's a problem with your code I think [11:58] phiggins has joined the channel [11:58] kodisha: try firebug + there is "poster" addon [11:58] micheil: jetienne: could you provide your code [11:58] micheil: kodisha: that's a good one too, forgot about that.. not using firefox these days. [11:58] kodisha: https://addons.mozilla.org/en-US/firefox/addon/2691/ [11:58] jetienne: micheil: nope, http is not my stuff this is nodejs [11:58] jetienne: micheil: i can but this is big [11:58] micheil: jetienne: uh. [11:59] jetienne: i will commit, all this is on github [11:59] micheil: jetienne: I've seen that throw from my websocket server, and it's always been my code [11:59] micheil: the error just comes out at a weird trace location [11:59] jetienne: micheil: this is when http client is talking to my own http server, when talking to appache, nodejs is not crashing [12:00] k23z__: do you know what Node.js is telling me when it receives an AJAX request from QOOXDOO ? [12:00] k23z__: REQUEST METHOD: OPTIONS [12:00] k23z__: this is like ... crazy or somehting [12:00] k23z__: what must be in the mind of qooxdoo devs I wonder [12:00] jetienne: http://github.com/jeromeetienne/node-neoip/blob/master/tmp/oload_stress_test/oload_stress_test.js <- micheil this is the exec producing it [12:01] kodisha: k23z__: you can roll your own request method ;) [12:01] k23z__: kodisha: yes but I'm supposed to use qooxdoo since I'm learning it ... [12:02] kodisha: well no matter how they call it, req.addListener('data' ... should work [12:03] kriszyp has joined the channel [12:04] micheil: kodisha: unless they're sending data and the method doesn't expect data [12:04] kodisha: k23z__: man that's is one ugly framework :D [12:05] hpoydar has joined the channel [12:05] micheil: k23z__: I'd recommend dojo toolkit, but I'm a bit biased. [12:06] k23z__: micheil: I would use jQuery myself but I'm learning this qooxdoo thing [12:07] kodisha: you must learnit? [12:07] kodisha: or you want to learn it? [12:07] micheil: jetienne: yeah, I'm not sure then, but I've always seen it from my own code, but my own code is just other JS, not C [12:07] micheil: because if you want to learn it, I'm not sure why. [12:07] jetienne: micheil: ok but how can i read this stack trace ? [12:08] micheil: I'm not sure [12:08] sr: elliottcable, lol, no! [12:08] micheil: something's wrong in the http handler [12:08] micheil: jetienne: more then likely coming out at parser level, hence the ondata failure; ondata is the "faster" but private way of handling data on network sockets [12:09] jetienne: micheil: would make sense but i cant figure out where to look at the code [12:09] micheil: jetienne: for instance, if node used the "data" event internally, you'd probably get an error bubbling from the events emitter [12:10] jetienne: hmm ok [12:10] k23z__: kodisha: I want to learn it [12:10] micheil: jetienne: first thing to eliminate issues, is I'd split the two tests out [12:10] rnewson: k23z__: this script does request and response body proxying, it should get you moving again: http://github.com/rnewson/lode/blob/master/src/proxy.js [12:10] micheil: k23z__: each to your own; but I've actually never heard of anyone using qooxdoo; it's mainly a dojo realm or extjs [12:10] jetienne: micheil: yep, i should find a way to reproduce this easily. or i owuld have to fix the bug myself [12:11] k23z__: micheil: I know, I'm just trying to learn it for fun I guess [12:13] micheil: jetienne: I think it could certainly be the double http:// in the url [12:13] jetienne: micheil: serious ? [12:13] micheil: possibly. [12:14] jetienne: micheil: good point i will see how to remove it to test [12:14] micheil: but then again, to me, that code looks rather convoluted. so, yeah. [12:16] Judofyr has joined the channel [12:17] jjenzz has joined the channel [12:18] _announcer: Twitter: "Node.js のメーリングリストに「Jailbreak した iPhone でも動くかい?」って質問が。そりゃ動くかもしれんけど何がやりたいんだろ?" -- edvakf. http://twitter.com/edvakf/status/16220041371 [12:18] stepheneb has joined the channel [12:18] jjenzz has left the channel [12:23] jetienne: ACTION is thinking on how to split the issue... http parser is one, http network stack may be another [12:24] Aria has joined the channel [12:29] temp01 has left the channel [12:29] temp01 has joined the channel [12:30] jetienne: ok it is crashing only on partial content [12:30] jetienne: and this is not the special url with 2 http: [12:30] temp01 has joined the channel [12:31] jetienne: now i have to find another server with which it crash too [12:32] _announcer: Twitter: "なにこれ、おかしいだろww node.jsでhhtpサーバー作って、abでテストしたら秒間7500ほどのリクエストを処理しやがったwww (同時1000接続で計50000アクセス)" -- KOBA789. http://twitter.com/koba789/status/16220829433 [12:32] jetienne: so i bet this is in http network... something bogus with partial content which is rarely tested [12:35] webr3: anybody know how to call the v8::internal functions from c? [12:35] webr3: StringToInt is not a member of 'v8::internal' apparently.. [12:36] zomgbie has joined the channel [12:36] k23z__: so the people at qooxdoo are suggesting that I use JSONP so that I don't get "OPTIONS" request method on server side and I get "POST" which would be correct [12:37] jetienne: http client with range request but with the range being the whole content length, and it doesnt crash [12:37] k23z__: apart from the fact that I think that's nuissance,weird and whatnot [12:37] k23z__: what is JSONP anyway ? [12:37] k23z__: and why would anyone use such a thing ? [12:38] webr3: cors.. lmfao [12:40] _announcer: Twitter: "さっきのベンチマークをPen3 550MHzのサーバーで試した。nginx:412/sec、node.js:325/secだった。なかなかの健闘w" -- KOBA789. http://twitter.com/koba789/status/16221288490 [12:40] _announcer: Twitter: "Learning Server-Side JavaScript with Node.js | Nettuts+ http://ow.ly/17Kfqc" -- Javascript News. http://twitter.com/del_javascript/status/16221334919 [12:40] _announcer: Twitter: "Geddy -- webapp-development framework for Node.js - web framework for node.js * A modular, full-service web fra... http://ow.ly/17Kfqd" -- Javascript News. http://twitter.com/del_javascript/status/16221334862 [12:46] Judofyr has joined the channel [12:47] Judofyr_ has joined the channel [12:47] mscdex: k23z__: the OPTIONS method indicates a preflighted request [12:48] zomgbie has joined the channel [12:50] jetienne: https://developer.mozilla.org/en/HTTP_access_control#Preflighted_requests <- if, like me, you didnt know what "preflighted request" mean [12:53] webr3: you'll want to read the CORS spec too [12:54] mAritz: tj or tim caswell or someone else who knows a bit about connect here? got a theoretical question for the cache filter: it filters all GET requests, right? is there any way to specify only some routes/folders to be cached, or is that planned or do i have to put all userspecific responders before the cache? (i'm pretty sure i'm just misunderstanding something :D ) [12:54] mscdex: k23z__: here's a gist i made the other day containing modifications for your serv.js: http://gist.github.com/438595 [12:59] jetienne_ has joined the channel [12:59] _announcer: Twitter: "え、node.js使ったら、Javascript+HTML+CSSだけでサイト作れるんじゃね? PHPとか要らない気がしました、サーセンww" -- KOBA789. http://twitter.com/koba789/status/16222455606 [13:02] b_erb has joined the channel [13:04] jherdman has joined the channel [13:07] webr3 has joined the channel [13:13] davidsklar has joined the channel [13:15] k23z__: mscdex: shows "body ==" [13:15] k23z__: mscdex: and that's all it shows [13:16] mscdex: k23z__: i'm assuming this is due to the OPTIONS request [13:16] k23z__: mscdex: most likely [13:16] mscdex: k23z__: in which case a few modifications will need to be made [13:18] JAAulde has joined the channel [13:19] _announcer: Twitter: "node.js api 中文化计划 http://drp.ly/1cfL9Z" -- aki. http://twitter.com/aki_xavier/status/16223681818 [13:20] _announcer: Twitter: "Holy shitballs! @node_knockout: Node.js Knockout will be 8/28-8/29. Registration starts next week. More at http://nodeknockout.com/" -- Lachlan Hardy. http://twitter.com/lachlanhardy/status/16223797961 [13:21] k23z__: mscdex: ok [13:21] mscdex: k23z__: try this: http://gist.github.com/438595 [13:21] k23z__: I've no idea what modifications need be made [13:21] k23z__: mscdex: trying [13:23] sveimac has joined the channel [13:25] mravaux has joined the channel [13:25] _announcer: Twitter: "@JJenZz Just hacked (and I mean really hacked) together a chat room with node-websocket-server.js :D" -- Stuart Elmore. http://twitter.com/digitalgravy/status/16224136523 [13:32] _announcer: Twitter: "@digitalgravy Goddamnit, I want the time to just hack about. Take it node.js is easy enough to muck around with?" -- Lee Griffin. http://twitter.com/Niaccurshi/status/16224584149 [13:33] kodisha has joined the channel [13:34] k23z__: mscdex: not working [13:34] mscdex: k23z__: what is the problem? [13:35] k23z__: mscdex: "body ==" [13:35] k23z__: meh nevermind [13:35] k23z__: I'll just give up [13:35] k23z__: it's what I do best [13:35] phiggins has joined the channel [13:36] mscdex: what browser are you using? [13:36] k23z__: firefox 3.6.3 [13:37] mscdex: let me test this locally [13:37] k23z__: I'll just replace all the qooxdoo API with raw XMLHttpRequest [13:38] jetienne has joined the channel [13:42] felixge has joined the channel [13:42] felixge has joined the channel [13:42] _announcer: Twitter: "@mvalente #nodejs modules: http://bits.blogs.nytimes.com/2010/06/14/one-on-one-fred-wilson-union-square-ventures/?src=twt&twt=nytimesbits" -- Paulo Gaspar. http://twitter.com/PauloGaspar7/status/16225209184 [13:44] k23z__: mscdex: this preflight thing, is it like standard nowadays [13:44] mscdex: on newer browsers for xmlhttprequest, yes [13:45] _announcer: Twitter: "@digitalgravy I'm yet to make a business case for node.js, so no worky based hack attack for me! Cheers for the link" -- Lee Griffin. http://twitter.com/Niaccurshi/status/16225443585 [13:46] k23z__: mscdex: when was this preflight thing invented ? [13:46] mscdex: i dunno exactly, but it was fairly recently [13:47] k23z__: crazy people , inventing all this things [13:47] mscdex: it only occurs when you use xmlhttprequest on a different domain or port [13:47] k23z__: ACTION is not sure how long he's going to keep track of this stuff [13:47] mscdex: with older versions of browsers xmlhttprequest would just fail completely due to the same origin policy [13:48] mscdex: it wouldn't send the preflighted request [13:52] jetienne: hence the script stuff [13:52] jetienne: this same domain origin on xmlhttprequest was so silly [13:53] b_erb: are there any academic papers towards node.js? [13:53] k23z__: b_erb: academic papers ? [13:54] jetienne: b_erb: just some slides and video of ryan explaining it [13:54] b_erb: basically stuff i could quote [13:54] micheil: b_erb: who needs an academic paper? by the time it's written the content will be out of date. [13:54] jetienne: http://nodejs.org/#about <- b_erb maybe here [13:55] mscdex: b_erb: here's a ry quote: "it's not rails slow" [13:55] mscdex: :P [13:55] mscdex: or whatever it was [13:55] mscdex: heh [13:55] micheil: mscdex: scientific_quote_strength++; [13:56] mscdex: shorten that variable name! [13:56] micheil: sqs++; :F [13:56] micheil: and then maybe make it "faster": ++sqs; [13:58] creationix has joined the channel [13:59] quirkey has joined the channel [14:00] voodootikigod has joined the channel [14:02] mcarter has joined the channel [14:04] mscdex: k23z__: ok retry: http://gist.github.com/438595 [14:04] jeffreyt has joined the channel [14:04] slaskis_ has joined the channel [14:04] mscdex: k23z__: i just tried that locally and it worked for me on firefox 3.6.4 [14:05] slaskis_: can i use fs.writeFile to append to a file? [14:05] mattly has joined the channel [14:06] mscdex: slaskis_: not using writeFile, but you can with fs.open [14:06] k23z__: mscdex: that is great mscdex but did you use qooxdoo ? [14:06] mscdex: k23z__: no, i used jquery actually [14:06] slaskis: mscdex: thanks [14:06] _announcer: Twitter: "Socket.IO и Node.js: пробное использование: http://wp.me/pfjwm-gv" -- Serge Shirokov. http://twitter.com/kurokikaze/status/16226887861 [14:06] mscdex: k23z__: no qooxdoo voodoo ;-) [14:07] k23z__: qooxdoo is really voodoo [14:07] gf3 has joined the channel [14:09] mscdex: k23z__: the jquery oneliner i used was: $(function() { $.post('http://127.0.0.1:8124/blah', "some text", function(data) { $('body').html(data); }); }); [14:10] slaskis: how do i use the fs.createWriteStream? [14:10] rnewson has joined the channel [14:10] rnewson has joined the channel [14:11] steadicat has joined the channel [14:12] mscdex: slaskis: just supply a path and any options you may need (the api doc shows the possible options), then just .write() to it [14:13] mscdex: then .end() when you're done [14:13] slaskis: mscdex: hmm, that's what i thought, but stream.writable is false, even though there's very loose permissions on it [14:14] mscdex: slaskis: and the current user has write access to the directory? [14:14] slaskis: mscdex: yep [14:15] kodisha has joined the channel [14:15] phiggins has joined the channel [14:17] slaskis: mscdex: actually, it seems like it's only the stream.writable that returns false, i seem to be able to write to it anyway... [14:18] mscdex: hmmm [14:18] mscdex: not sure what it is then. i tried it locally and writeable is try and i can write to it [14:18] mscdex: *true [14:20] mrjjwright_ has joined the channel [14:20] _announcer: Twitter: "Ухх, вроде разобрался с вебсокетами. Socket.IO - очень удобная вещь, как оказалось ) #socketio #nodejs" -- Serge Shirokov. http://twitter.com/kurokikaze/status/16227844821 [14:24] jos3000 has joined the channel [14:26] zaach has joined the channel [14:32] stepheneb has joined the channel [14:41] _announcer: Twitter: "@karlseguin if I'm writing my app in node.js, it absolutely does!" -- Matthew Podwysocki. http://twitter.com/mattpodwysocki/status/16229272989 [14:43] softdrink has joined the channel [14:45] ajpiano has joined the channel [14:45] rnewson has joined the channel [14:46] Yuffster has joined the channel [14:49] ph^ has joined the channel [14:50] stevendavie has joined the channel [14:53] _announcer: Twitter: "TJ Holowaychuk: NodeJS Package Manager - › If you use [node] you may have heard of the [Kiwi Package... http://tumblr.com/xeeblfsk7" -- KOBA789. http://twitter.com/koba789/status/16230082756 [14:55] phiggins has joined the channel [14:56] jakehow has joined the channel [14:58] zomgbie has joined the channel [15:11] botanicus has joined the channel [15:21] richcollins has joined the channel [15:25] bradleymeck: rfc on http://gist.github.com/439216 for npm-ls [15:26] jetienne: bradleymeck: include from examples at the end [15:27] jbrantly has joined the channel [15:29] markwubben has joined the channel [15:32] zomgbie has joined the channel [15:35] steadicat has joined the channel [15:38] jetienne: oh apparently the nodejs crash is due to a bug in my code [15:39] jetienne: yep [15:39] sanderjd has joined the channel [15:39] jetienne: if partial content response is sending more data than content-length, then nodejs http client is crashing [15:43] kevwil has joined the channel [15:43] zomgbie has joined the channel [15:46] slaskis_ has joined the channel [15:46] webr3: jetienne, imho it should take that error gracefully - but the response really shouldn't be breaking the http protocol [15:46] jetienne: webr3: agreed on both [15:48] mojodna has joined the channel [15:48] brianmario has joined the channel [15:48] _announcer: Twitter: "My way of taking a break, download node.js and port an example to use it. :)" -- Luke™. http://twitter.com/LukeInTH/status/16233861295 [15:50] mitkok has joined the channel [15:50] _announcer: Twitter: "released patch for #node.js exposes needed details for #foaf+ssl (exponent,modulus,subjectAltName) http://bit.ly/b2Pvsk" -- nathan. http://twitter.com/webr3/status/16233993097 [15:55] ceej has joined the channel [15:56] JimBastard has joined the channel [15:56] JimBastard: about to have a all tech team meeting [15:57] JimBastard: im gonna make everyone install node [15:57] JimBastard: as the first meeting item [15:57] JimBastard: next meeting item is cloning this project i have [15:57] JimBastard: so now everyone must use node [15:57] JimBastard: mwahahaha [15:57] romainhuet has joined the channel [15:57] JimBastard: +4 developers for node [15:57] JimBastard: fuuu rails [15:58] jetienne: http://gist.github.com/raw/439287/e36b6c97ff3f55be425df301e240306350852e0d/bug_server.js [15:58] _announcer: Twitter: "Thanks @andrewvc for updating node-paperboy for #nodejs HEAD and fixing a bunch of other stuff! http://bit.ly/6DGVhF" -- Felix Geisendörfer. http://twitter.com/felixge/status/16234569346 [15:58] JimBastard: response.end('0123456789'); ? [15:58] mape: JimBastard: what kinda people are you meeting with if it takes one meeting to install node? [15:58] jetienne: https://gist.github.com/raw/4616e80bf7bb55a76786/f237022567a11e4caca79b104eb749f8f0d22ba7/bug_client.js [15:58] JimBastard: mape: thats the first item [15:59] JimBastard: its a front-end meeting lol [15:59] jetienne: JimBastard: yep this is the key which makes nodejs crash [15:59] JimBastard: nice [15:59] JimBastard: nodejs exploits [15:59] JimBastard: i can see the blog posts now [15:59] JimBastard: "nodejs unsafe" [15:59] jetienne: arf :) [16:00] jetienne: JimBastard: na this is just a bug in http client [16:00] JimBastard: if i run into BUILD errors on any of these guys machines ill be droppin here [16:00] JimBastard: hopefully all goes well [16:00] MessageFromXenu has joined the channel [16:00] MessageFromXenu: hey all [16:01] JimBastard: sop MessageFromXenu [16:01] yatiohi has joined the channel [16:03] _announcer: Twitter: "jquery & atmosphere to write portable websocket & comet applications http://bit.ly/c25XPS #websocket #nodejs #atmosphere #comet #jquery" -- Régis Gaidot. http://twitter.com/rgaidot/status/16234910887 [16:03] bradleymeck: whew finally added the examples [16:04] gf3 has joined the channel [16:04] MessageFromXenu: just wondering if anyone knows how to write two Set-Cookie headers [16:04] trochala has joined the channel [16:04] geeks_bot has joined the channel [16:04] xla has joined the channel [16:04] sdgvf has joined the channel [16:04] onar has joined the channel [16:04] trodrigues has joined the channel [16:05] _announcer: Twitter: "Meeting with designers about my top-secret #node.js project ... oh yeah, it's awesome ... @tmpvar knows it" -- Charlie Robbins. http://twitter.com/indexzero/status/16235043152 [16:05] mikemike86 has joined the channel [16:06] bradleymeck: messagefrom xenu, use a module? node-cookiejar / cookie / request do that [16:06] technoweenie has joined the channel [16:07] markwubben_ has joined the channel [16:07] zomgbie has joined the channel [16:08] jstewart1 has joined the channel [16:13] gf3 has joined the channel [16:13] bpot has joined the channel [16:14] _announcer: Twitter: "I'm really glad #nodejs switched form gnutls to openssl, more widely available." -- Guillermo Rauch. http://twitter.com/rauchg/status/16235668712 [16:15] webr3: the challenge is to get keygen support (ie spcak) going for node.js - leave that one till later i think! [16:19] qFox has joined the channel [16:20] micheil: jetienne: caught thy bug? [16:22] bradleymeck: he did [16:23] micheil: coolio. [16:27] bradleymeck: micheal does http://gist.github.com/439216, fit your bill of what you wanted from npm-ls? [16:27] bradleymeck: s/micheal/micheil/ ... [16:28] micheil: bradleymeck: I was more after just a plain search [16:28] micheil: eg: npm-search websockets [16:28] richcollins has joined the channel [16:28] micheil: returns a list of modules with either tagged websockets or name includes websockets [16:29] micheil: from that, I could then do a npm-info modulename [16:29] bradleymeck: it has that, just a lot more for the crazy stuff, around 60% done w/ code you could just npm-ls websockets from the draft [16:29] _announcer: Twitter: "#RDF support in #node.js http://bit.ly/d09mE0 - ported tabulator rdflib.js over to work on the serverside - happy hacking!" -- nathan. http://twitter.com/webr3/status/16236754634 [16:29] micheil: okay [16:29] bradleymeck: npm-info mmm never used that /looks about [16:30] kersny has joined the channel [16:33] stevendavie has joined the channel [16:35] mojodna has joined the channel [16:37] aglemann has joined the channel [16:37] jetienne: micheil: yep, emailed report to reproduce [16:38] jbrantly has joined the channel [16:45] jakehow has joined the channel [16:45] gf3 has joined the channel [16:47] LowValueTarget has joined the channel [16:49] ntr0py has joined the channel [16:49] ntr0py: Why was udns replaced by c-ares? [16:50] sztanpet: features and licensing [16:50] isaacs has joined the channel [16:51] felixge has joined the channel [16:51] ryah: ntr0py: as sztanpet said. [16:52] ryah: ntr0py: in particular udns doens't look at /etc/hosts [16:52] ryah: which is annoying [16:52] reid\work has joined the channel [16:54] zomgbie has joined the channel [16:54] ntr0py: ryah: Do you know libasyncns? I am asking because i am searching a good async dns lib for a c project... [16:57] ryah: ntr0py: yes [16:57] ryah: libasyncns hardly requires a lib - execute getaddrinfo in a thread pool [16:58] benoitc has joined the channel [17:00] _announcer: Twitter: "reading the node.js docs. evented i/o for javascript. totally *ossum*" -- Quinton Parker. http://twitter.com/quintonparker/status/16238970698 [17:01] skampler: then there's getaddrinfo_a .. [17:01] ryah: which is the same, and not portable [17:02] skampler: yes [17:02] ryah: c-ares actually uses epoll() on a UDP fd [17:02] ryah: so it's like *much* faster [17:02] ryah: (udns too) [17:04] sveimac has joined the channel [17:06] jetienne: ryah: any of those support Name Service Switch (NSS) ? [17:07] JimBastard has joined the channel [17:08] ryah: no [17:09] benoitc has joined the channel [17:09] JimBastard: nice, got 3 more developers using node today. the 4th guy didnt have his laptop with him [17:09] JimBastard: take that rails! [17:14] _announcer: Twitter: "Just started the ground work on what should be a very interesting (and exciting) new node.js project." -- Micheil Smith. http://twitter.com/miksago/status/16239919036 [17:14] mtodd has joined the channel [17:15] fizx has joined the channel [17:17] kersny has joined the channel [17:17] devtime has joined the channel [17:18] charlesjolley- has joined the channel [17:22] innu: how should i delete a directory that has files inside. fs.rmdir gives an error because there a files inside it. do I need to unlink each file before removing the dir. isn't there something shorter? [17:22] charlesjolley- has joined the channel [17:23] richcollins has joined the channel [17:24] ryah: innu: yes, unfortunately [17:24] ryah: innu: there might be some fs tools around on github [17:24] ryah: soeone has implemented rm -rf before [17:25] innu: ryah, thanks. just found the rm -rf implementation [17:26] voodootikigod has joined the channel [17:28] devtime: innu: can you give us the link? [17:28] ryanmcgrath has joined the channel [17:28] bradleymeck has joined the channel [17:29] micheil: hmm.. y'know, I wonder how quick a node fs.rmrf("/") would be, y'know async and all :P [17:29] innu: devtime, sure, http://github.com/isaacs/npm/blob/master/lib/utils/rm-rf.js [17:30] devtime: innu: thx [17:31] _announcer: Twitter: "from node.js IRC :) <micheil> hmm.. y'know, I wonder how quick a node fs.rmrf("/") would be, y'know async and all :P" -- Indrek Juhkam. http://twitter.com/indrekj/status/16241067413 [17:31] micheil: oh man. >_> [17:32] _announcer: Twitter: "@indrekj http://github.com/isaacs/npm/blob/master/lib/utils/rm-rf.js Not very hard at all. #nodejs" -- Ⓘⓢⓐⓐⓒ. http://twitter.com/izs/status/16241130923 [17:33] micheil: night chaps. [17:33] isaacs: YO DAWG! I HEARD YOU LIKE TWEETING ABOUT NODE AND CHATTING ABOUT NODE SO I PUT NODE TWEETS IN YOUR NODE CHAT SO YOU CAN CHAT NODE WHILE YOU TWEET!! [17:33] ntr0py: ryah: thx [17:37] xer0xM has joined the channel [17:38] xla has joined the channel [17:40] aho has joined the channel [17:41] richcollins has joined the channel [17:42] richcollins has joined the channel [17:43] kriszyp: fd passing doesn't work on cygwin yet, I take it? [17:43] kriszyp: or is that even possible on cygwin... [17:44] devtime has joined the channel [17:45] Aikar has left the channel [17:45] Aikar has joined the channel [17:46] ryah: kriszyp: unknown [17:47] ryah: kriszyp: i would have guessed that is does [17:48] stb has joined the channel [17:48] kriszyp: yeah, seems to be a fail for me, I get "data" messages, but no "fd" messages on cygwin (same thing works fine on osx) [17:49] ryah: hm, i guess not then [17:49] kriszyp: :) [17:50] stb: I am experimenting with file uploads in node.js and have noticed that the data event isn't triggered on files smaller than 1k, though anything larger works fine... anyone know what might be going on with the smaller requests? [17:50] christiaan has joined the channel [17:52] tilgovi has joined the channel [17:53] er1c_ has joined the channel [17:53] ryah: stb: are you adding the listener fast enough? [17:54] stb: ryah: good question - i am doing some validation/authentication prior to the request... it seems that all >1k requests require the 100 Continue response so everything works fine there... will try and put my listener before the rest and see what happens [17:56] stb: hmm ok... that triggers... now to rethink the pre-auth and validation routines [17:56] stb: thanks :) [17:59] Ori_P has joined the channel [18:02] cloudhead has joined the channel [18:03] pdelgallego has joined the channel [18:04] jetienne: ryah: is there a explaination on how to read node stack trace ? [18:09] stephenjudkins has joined the channel [18:09] stb: ryah: perfect, all working now... thanks again [18:17] jeffreyt: ryah: that issue stb had where the listener wasn't being added fast enough... by fast enough, do you just mean before the next tick? [18:18] _announcer: Twitter: "@DanaDanger They need to port that shit to a hybrid Scala / Erlang / MongoDB / node.js, and then wear sunglasses ALL THE TIME. #futureisnow" -- cz. http://twitter.com/netshade/status/16243981879 [18:18] mitkok has joined the channel [18:18] stepheneb has joined the channel [18:18] jeffreyt: or does that not matter? [18:20] ryah: jeffreyt: yes [18:20] ryah: jeffreyt: stack trace? [18:20] webr3: ryah, cheers for the pointer re getPeerCertificate() last night, just what i needed - did code, sent you patch [18:21] jeffreyt: i am not having the issue. just wrapping my head around the e.loop. :-) [18:21] jeffreyt: ty [18:21] webr3: ryah, semi related, answer anytime, how do you call the v8::internal functions like StringToInt( string, radix ) from node? [18:22] webr3: (in c code) like from node_crypto.cc etc (and from js if you can say easily) [18:24] softdrink has joined the channel [18:24] ryah: webr3: string->ToInteger() [18:24] webr3: and just add in radix? [18:25] markwubben has joined the channel [18:25] ryah: webr3: doesn't look like that's exposed to c++ interface [18:26] webr3: shame, some v handy methods in the internals / conversion.h etc [18:27] ryah: webr3: i think it's generally preferable to do the coding in js wrappers [18:27] ryah: and use simple bindings [18:27] webr3: +1 agree, will be a while before i have to do anything in c for node anyways, only other thing i can think of is spcak support [18:28] webr3: (fro html 5 keygen) [18:30] admc has joined the channel [18:31] brainproxy has joined the channel [18:31] siculars has joined the channel [18:32] ryah: webr3: i'm working on your patch [18:32] ryah: webr3: i want to send it back to you to add more tests [18:32] ryah: is that okay? [18:33] webr3: ryah, damn thought you'd get me on the tests - if you send me it back :p [18:33] webr3: ACTION waits.. [18:33] bradleymeck: mmm, whats the best way to reset a timeout (make it not execute until at least x More seconds occur) [18:34] ryah: webr3: http://gist.github.com/439483 [18:34] webr3: ryah, i may have to change a few of the tests btw - to add in a new certificate which has a subjectAltName set [18:35] ryah: webr3: i'd like you to change the certs so that subjectAltName is gotten [18:35] ryah: you can just replace the existing pem files [18:35] webr3: np [18:36] ryah: webr3: but make sure it the cert is exercising all the cert properties [18:36] webr3: will do [18:36] ryah: like here's what it is now: [18:36] ryah: expectedPeerCert = { subject: '/C=UK/ST=Acknack Ltd/L=Rhys Jones/O=node.js/OU=Test TLS Certificate/CN=localhost' , issuer: '/C=UK/ST=Acknack Ltd/L=Rhys Jones/O=node.js/OU=Test TLS Certificate/CN=localhost' , valid_from: 'Nov 11 09:52:22 2009 GMT' , valid_to: 'Nov 6 09:52:22 2029 GMT' , modulus: "F1DF0773A6ADABBF09B751CBA7D6A003FC2941FB05BE4614759D58B1DBCE90BDA36A78F01D080C302CBF , exponent: "10001" }; [18:37] webr3: may need to add in a note that exponent is hex [18:37] webr3: looks like an int but it's not [18:37] jxson has joined the channel [18:37] bmizerany has joined the channel [18:37] ryah: webr3: sure [18:38] ryah: i think storing it as a string is fine [18:38] ryah: js isn't good with bignums [18:39] ryah: webr3: otherwise the patch looks good [18:39] ryah: webr3: i had to fix some style issues (4 space indent instead of 2) [18:39] ryah: and i think it's valuable [18:40] ryah: (the changes) [18:40] webr3: lol sorry (I'd blame my IDE, but i converted the tabs to 4 spaces myself..)! [18:41] fizx has joined the channel [18:41] pjb3 has joined the channel [18:43] ryah: pgriess: when you send patches in the future, can you do it format-patch style? [18:44] pgriess: ryah: yeah, sure. how do i do that with git? reading git-diff, that appears to be the default [18:45] ryah: pgriess: git-commit the changes, then git format-patch HEAD^ [18:45] pgriess: ryah: got it. will do. [18:45] kersny has joined the channel [18:45] CIA-76: node: 03Peter Griess 07master * rc9dde72 10/ test/simple/test-listen-fd.js : Test case for net.Server.listenFD() - http://bit.ly/97eLQY [18:45] webr3: ACTION follwed the handy notes at http://nodejs.org/#contributing [18:48] ryah: pgriess: thanks for the test :) [18:48] pgriess: ryah: np [18:49] gerad has joined the channel [18:54] indexzero has joined the channel [18:55] indexzero: anyone poked through the multi-node codebase yet? [18:55] indexzero: I've seen a few underdocumented node api calls I'd like to understand better [18:56] mrjjwright_: does anybody have any automatic solutions for restarting a crashed node instance? [18:57] mikeal has joined the channel [18:57] pgriess: indexzero: i've looked at it a bit, what's up? [18:58] indexzero: netBinding = process.binding("net"); [18:58] indexzero: what does process.binding do? [18:58] pgriess: indezero: process.binding() exposes some of the more lower-level C++ bindings in node [18:58] indexzero: ok [18:58] pgriess: indexzero: the stuff that's just require('http') etc [18:58] pgriess: indexzero: those are all built in lib/*.js in the node source [18:59] pgriess: indezxero: all the system calls and whatnot are in src/*.cc, which require process.binding() to get at [18:59] indexzero: that's very helpful, I was wondering the difference between lib/*js and src/*.cc [18:59] pgriess: indexzero: more or less. i may have that slightly wrong [19:00] kodisha has joined the channel [19:00] indexzero: so he needs that to get access to the low level bind apis? [19:00] indexzero: netBinding.bind(tcpDescriptor, options.port || 80); [19:00] indexzero: and [19:00] indexzero: netBinding.listen(tcpDescriptor, 128); [19:00] pgriess: indexzero: yup [19:00] kodisha: hi guys, how to spawn process like this: "netstat -n | grep -c tcp" [19:00] indexzero: lines 42 / 43 respectively [19:00] indexzero: ok [19:01] indexzero: var childProcess = require('child_process'); childProcess.exec("netstat -n | grep -c tcp"); [19:01] indexzero: kodisha: http://nodejs.org/api.html#child-processes-83 [19:02] kodisha: thanks [19:02] kodisha: ! [19:04] indexzero: pgriess: another thing about multi-node is that there are string constants used throughout on the addListener calls that I can't find documented [19:04] pgriess: indexzero: you mean the 'fd' event? [19:04] pgriess: everything else should be documented [19:04] indexzero: yeah [19:04] indexzero: the fd in particular [19:04] indexzero: I'm familiar with 'data' [19:05] pgriess: indexzero: yeah, that's my fault. it's supported but i just never submitted a patch for the docs. i'll do that shortly. [19:05] pgriess: indexzero: its emitted whenver a file descriptor is received from a UNIX domain socket [19:05] indexzero: pgriess: ok, that's helpful [19:05] pgriess: indexzero: there is a corresponding change to net.Stream.write(), which can now accept a third paramter: an integral file descriptor to send [19:05] indexzero: ahh [19:06] pgriess: indexzero: and, of course, that's not documented either [19:06] pgriess: :) [19:06] indexzero: I've been working with JimBastard on a solution that pipes a lot of the data to child processes over local http [19:06] indexzero: but it seems the that unix sockets is a more elegant approach [19:06] jjenzz has joined the channel [19:06] kriszyp: pgriess: using websocket as an ipc framing mechanism sounds good to me [19:07] pgriess: kriszyp: cool. if done over UNIX sockets + using high-bit framing, it should be quite performant [19:07] kriszyp: although for inter-process, could you just skip the whole handshake and just use 0x00-utf8-0xFF frames? [19:07] indexzero: yeah? I would think that the UNIX sockets are lower level, closer to the metal. thoughts? [19:08] kriszyp: and pgriess you haven't tried fd passing on cygwin, have you? seems to be a fail for me [19:08] pgriess: kriszyp: yeah, you could. but why bother? it's such low overhead anyway, as the socket is long-lived [19:09] kriszyp: only motive would be to reduce deps [19:09] pgriess: kriszyp: no, havne't tried on windows. no clue how to do that there, though ryah seems to think its possible (albeit using different APIs, i'd assume) [19:09] indexzero: kriszyp: Now that you're here, got a second to walk through some of the multi-node code? [19:09] pgriess: kriszip: yeah, understood w/ the dependencies. imo web sockets should go into core at some point, but until then, yeah [19:09] kriszyp: sure [19:10] indexzero: namely lines 54 -84 [19:10] indexzero: all of the calls to netBinding are directly into the *.cc files, the lower level stuff [19:10] kriszyp: namely most of the code :) [19:10] kriszyp: yeah [19:10] indexzero: hehe, well most of the interesting stuff anyway [19:11] indexzero: what does socketpair do? [19:11] kriszyp: that's what creates the unix socket [19:11] kriszyp: I think [19:11] kriszyp: mainly going off of pgriess example code, and making it work to do the child-to-child comm [19:11] _announcer: Twitter: "Monitor #1: Sony E3 press conference... Monitor #2: Brazil vs N. Korea... Monitor #3: Linux CLI for node.js development." -- Elliott Carlson. http://twitter.com/elliottcarlson/status/16247253678 [19:12] kriszyp: the one part that continues to stump me is how to determine when the sockets are actually ready to be written to [19:12] indexzero: ok, so child-to-child is important for your use case [19:12] kriszyp: which is apparently not when you get the fd [19:12] pgriess: kriszyp: socketpair() returns sockets which are already connected [19:12] kriszyp: but you get write errors if you write to them too early from a child [19:13] linuxsable has joined the channel [19:13] indexzero: I see [19:13] pgriess: kriszyp: oh? [19:13] bradleymeck: isaacs, how complex do you want the formatting syntax to be (i dont mind it being very complex)? [19:13] pgriess: kriszyp: you sure they're write errors, not read errors? [19:13] isaacs: bradleymeck: anything is fine, really. it's not the kind of thing you'll probably modify very often. [19:13] kriszyp: well, I can get those later too if do writes first :/ [19:14] kriszyp: I can give you stack traces if you want [19:14] pgriess: kriszyp: yeah, that'd be helpful [19:14] pgriess: kriszyp: i can see off the bat that you're constructing streams and attempting to use them w/o calling net.Stream.resume() first [19:14] isaacs: bradleymeck: as long as there's support for "--pretty verbose" and "--pretty terse" and "--pretty format:'some-huge-funky-thing'" then people can default it however they want. [19:14] pgriess: kriszyp: that should only affect reads, but i could believe that some write-type stuff might be caught in that machinery as well [19:14] kriszyp: the child does the resume [19:15] kriszyp: #L31 is the resume [19:15] isaacs: bradleymeck: if you feel like mocking git's API, I do that all the time. [19:15] romainhuet has joined the channel [19:15] bradleymeck: i dont like it at all, posted an idea of something thats readable [19:15] isaacs: bradleymeck: or if apt-get or rubygems or whatever has something similar. just steal it. [19:16] isaacs: ok, cool [19:16] fizx has joined the channel [19:16] isaacs: lunchtime, i'll read it when i get back [19:16] pgriess: kriszyp: you should be calling resume() on any stream you create directly from an FD. e.g. before line 64 [19:17] pgriess: kriszyp: but, again, afaik that only affects reads. i just wonder if there is some write stuff jumbled up with that that would cause problems. [19:17] kriszyp: siblingConnection is the socket pair that go to the children, but if I resume from the parent, than it seems the reads become non-deterministically routed between the parent and the child process [19:17] utgo has joined the channel [19:18] kriszyp: I basically have would have two processes that have both "resumed" reading from the socket, and it seems that data goes to one or the other (not both, and not deterministically) [19:19] Ori_P has joined the channel [19:19] pgriess: kriszyp: ah, yeah [19:19] pgriess: kriszyp: i don't think unix sockets are designed to support broadcast like that [19:19] pgriess: kriszyp: you need to have a fully-connected graph if you want to use unix sockets, i believe [19:20] pgriess: kriszyp: or route all messages through the parent process [19:20] pgriess: i.e. each pair of siblings needs to have their own dedicated socketpair [19:20] pgriess: the socket is a fifo: only one process can read data from it, then its gone. [19:20] kriszyp: well, yeah, I don't want the parent process to listen or write to the socket [19:21] kriszyp: just want it to create the socket [19:21] kriszyp: pgriess: here is the error: http://gist.github.com/439575 [19:22] indexzero: pgriess: do you know what this does? netBinding.listen(tcpDescriptor, 128); [19:23] indexzero: where netBinding = process.binding("net") [19:23] indexzero: this is in multi-node, line 43 [19:23] indexzero: is 128 a port to listen to or some kind of signal code? [19:23] pgriess: indexzero: yes. it just calls the listen() system call [19:23] pgriess: http://www.manpagez.com/man/2/listen/ [19:23] indexzero: so 128 is a port then? [19:23] indexzero: k [19:24] pgriess: 128 is the backlog [19:24] indexzero: ohhhh [19:24] MessageFromXenu: hmm, why can't I set multiple cookies in node? I can only set one cookie per request [19:24] indexzero: I see now [19:24] pgriess: kriszip: reading your code again, from the beginning [19:25] pgriess: kriszip: sending the same socket to multiple children is a bad idea (well, its not going to behave as you seem to want), but i don't know if it's causing the errors you're seeing [19:25] indexzero: pgriess: there's some good stuff in there, but I imagine some crazy stuff happening when child nodes require('multi-node') [19:25] creationix has joined the channel [19:25] kriszyp: the child process goes into the if(process.env._IS_CHILD_) branch [19:26] kriszyp: and there is some crazy hackery in there for cygwin process launching (only to discover that fd passing doesn't seem to work in cygwin :/ ) [19:26] indexzero: kriszyp: you set the ischild flag yourself, clever [19:26] pgriess: kriszyp: the 'fd' event is not guaranteed to be delievered after the 'data' event that you're hoping for [19:26] kriszyp: you mean they might be out of order? [19:27] pgriess: kriszip: afaict fd sending works like this [19:27] pgriess: you have to send an fd with data [19:27] kriszyp: I was wondering if that was case, but never observed that to happen [19:27] pgriess: the data obeys normal fifo ordering rules w/ any other un-read data in the socket [19:27] pgriess: the fd is delivered immediately on next read [19:27] stepheneb has joined the channel [19:27] kriszyp: ok [19:27] pgriess: kriszyp: i've never seen it happen either, but the manpages seem to suggest that [19:27] richcollins has joined the channel [19:28] pgriess: kriszyp: node-web-workers wraps all messages in a special sequence number to handle this garbage [19:28] pgriess: so that you can postMessage() with an fd and have it arrive w/ the message w/ which it was sent [19:28] pgriess: anyway, still reading [19:28] kriszyp: ok, that makes sense [19:28] keyvan has joined the channel [19:29] kriszyp: and I suppose that might answer another question, if web-workers would get in the way of passing fds for doing this type of child-to-child communication [19:29] indexzero: pgriess: you da man, going to rework some stuff with this inspiration [19:29] pgriess: indexzero: via con dios [19:30] pgriess: kriszyp: i'm not sure what you mean by web workers getting in the way. they need to own the communication medium that they're using (an fd) [19:30] kriszyp: the web-worker way would seem to be to use SharedWorkers, but that doesn't look like very reasonable with the current architecture [19:30] kriszyp: I just mean that we can still pass fds around with web-workers [19:30] pgriess: kriszyp: yeah, shared workers are exactly what you want. i just haven't implemented them yet ;) [19:30] pgriess: kriszyp: working on web socket stuff first to get rid of the msgpack dependency, which is preventing easy installation/adoption [19:31] kriszyp: shared workers seem like they would be very difficult to do because they require some shared registry of worker names that point to workers [19:31] kriszyp: I couldn't figure out how that could be done on top of this stuff [19:31] zomgbie has joined the channel [19:32] pgriess: kriszyp: yeah i haven't completely decided on a design there. a fully-conncted graph isn't hard to do, but that's a lot of sockets floating around. otoh, web workers are theoretically supposed to be long-lived and there should be relatively few-ish of them. so O(n^2) where n < 20 or so isn't awful [19:32] pgriess: kriszyp: otherwise, we can route all messages through the master, which is not hard, but a performace drag [19:32] stagas has joined the channel [19:33] b_erb1 has joined the channel [19:34] kriszyp: yeah [19:34] b_erb has joined the channel [19:35] creationix: I was actually going back to my notes from last semester where we learned about all these nice protocols for distributed state [19:36] creationix: Where you only needed to lock a subset of all nodes on read and writes and still have global consistent Tate [19:36] creationix: State [19:36] creationix: I'm just not sure that actually faster then having the central process sync up everything [19:36] indexzero: creationix: seems like a distributed reader / writer lock, no? [19:37] creationix: Not for small quick operations at least [19:37] creationix: Something like that [19:38] pgriess: creationix: sure there is. performing 1 read, 1 write and 1 context switch is always going to be better than 2 reads, 2 writes and 2 context switches. the question is whether or not the fully-connected graph model breaks down due to scalabilty [19:38] jetienne: is there a explaination on how to read node stack trace ? [19:39] creationix: ceej: You up for a hack naught this week [19:39] creationix: . [19:39] pgriess: creationix: the garbage collector, for example, will take linearly-increasing amunts of CPU to do its work. this kills the high-latency HTTP proxy benchmark, for example [19:39] creationix: I see, yuck [19:40] pgriess: i suspect that, in practice, i don't know if it's worth bending over backwards to efficiently support deployments w/ > 20-30 connected workers [19:40] creationix: I can't imagine more than 16 [19:40] pgriess: yeah [19:40] pgriess: really you're not going to ever want more workers than CPUs anyway [19:41] pgriess: unless you're worried about crashy plugins [19:41] pgriess: in which case you have bigger problems ;) [19:44] creationix has joined the channel [19:44] pdelgallego has joined the channel [19:47] zomgbie has joined the channel [19:48] pgriess: kriszyp: ok, so i competely misunderstood mutli-node.js the first (and second) time i read it [19:48] pgriess: oops [19:49] kriszyp: did I do something wrong? [19:49] kriszyp: (or how many things did I do wrong :) ) [19:50] pgriess: kriszyp: the only thing that i can find that's suspicious is not calling resume() right away, but i doubt that's the problem [19:50] kriszyp: yeah, and I haven't definitely tried that, but I couldn't find a deterministic way to get the child to resume and the parent to pause with the correct timing with that approach [19:51] kriszyp: I think maybe the right solution is to have the children actually create the socket pairs [19:51] awenkhh has joined the channel [19:51] kriszyp: and have the parent tell each child how many socket pairs to create, pass the fds from the child to the parent, and then have the parent pass the fds to the other children [19:51] kriszyp: I guess [19:52] kriszyp: just more complicated [19:52] kriszyp: oops, I have definite tried that.... [19:52] pgriess: ahhhhh [19:52] CIA-76: node: 03Ryan Dahl 07master * r14414f8 10/ (17 files in 4 dirs): [19:52] CIA-76: node: Soft deprecation of 'listening' event. [19:52] CIA-76: node: Add callback param to listen() instead - http://bit.ly/9aVeba [19:52] CIA-76: node: 03Ryan Dahl 07master * r5f88097 10/ src/node_crypto.cc : Remove unused code from node_crypto - http://bit.ly/aScXYI [19:52] pgriess: i know what the problem is [19:53] pgriess: oh, crap [19:53] pgriess: well i thought i did [19:54] pgriess: i was thinking that the kernel might prevent writes to fd 0 [19:54] pgriess: since it's supposed to be stdin [19:54] pgriess: but i think that's just convention, not a hard impl fact [19:54] pgriess: e.g. you should be able to dup2() something to 0 and write to it [19:54] pgriess: so hm [19:55] bradleymeck: does connect have some more documentation on the stup function [19:55] DracoBlue has joined the channel [19:55] pgriess: i think somehow the net.Stream destroy/shutdown/end codepahts are running [19:57] pgriess: can you add some debugging to check out what the value of 'fd' is that you're constructing the stream around in http://github.com/kriszyp/multi-node/blob/master/lib/multi-node.js#L29 ? [19:57] pgriess: if the fd value is < 0, stream.writable will be set to false [19:57] pgriess: i wonder if you're somehow being passed a busted fd [19:57] tjholowaychuk has joined the channel [19:58] mindeavor has joined the channel [19:58] kriszyp: the fds are all 7,8, or 9 [19:58] pgriess: hm [19:58] kriszyp: and note that some of the writes are working [19:58] JimBastard has joined the channel [19:59] JimBastard: sup indexzero [19:59] jetienne: ok so nobody knows how to read those nodejs stacktrace ? [19:59] kriszyp: jetienne: each line in a stack trace points to a module/line number of the call stack where the error occurred [20:00] pgriess: kriszyp: in the read callback, if read fails, we transparently destroy the stream [20:00] pgriess: (marking it non-writable) [20:00] pgriess: http://github.com/ry/node/blob/master/lib/net.js#L470 [20:01] pgriess: same w/ write failure [20:01] pgriess: http://github.com/ry/node/blob/master/lib/net.js#L744 [20:01] pgriess: my bet is that one of these is failing and we're blowing up after the fact [20:02] jetienne: http://github.com/ry/node/issues/issue/181 <- kriszyp can you read this one for me ? [20:02] kriszyp: jetienne: the whole stack trace is in node code (not your code) [20:03] jetienne: kriszyp: i got that. but how do i read it ? [20:03] kriszyp: it is indicating the line numbers in the node modules where the error occurred [20:03] jetienne: kriszyp: where can i find " at Client.ondata (http:861:22)" for example [20:03] JimBastard: just read the backlog [20:03] JimBastard: word [20:04] JimBastard: yeah indexzero is one of my partners in crime [20:04] JimBastard: coauthor of broodmother [20:04] kriszyp: those are node's lib directory [20:04] jetienne: kriszyp: my question is more complex than it seems. i mean i looked at the code and i cant find the source [20:05] indexzero: jetienne: source to what? [20:05] kriszyp: you mean you can't find line 861 in http.js? [20:05] jetienne: indexzero: source which produce this stack trace [20:05] mscdex: # node kid.js [20:05] mscdex: oops wrong window [20:05] maushu has joined the channel [20:06] mscdex: maushu: _announcer doesn't auto-translate anymore? :S [20:06] jetienne: kriszyp: http://github.com/ry/node/blob/master/lib/http.js#L861 <- this line you mean :) [20:06] maushu: No. [20:06] mscdex: :-( [20:06] jetienne: ! [20:07] kriszyp: jetienne: yeah, that looks like it [20:07] jetienne: maushu: it was a nice idea tho. how come ? [20:07] maushu: Someone didn't like it. [20:07] maushu: It was also doing too many false positives. [20:07] jetienne: kriszyp: well it doesnt make much sense tho.... [20:08] kriszyp: jetienne: sorry, welcome to async programming [20:08] maushu: It was also crashing the bot. [20:08] jetienne: kriszyp: hehe, well i do async for a while :) [20:09] jjenzz has left the channel [20:10] kersny has left the channel [20:11] kersny has joined the channel [20:11] jetienne: maushu: ok this is another issue then [20:11] pgriess: kriszyp: do you have sample code that i can use to repro the multi-node errors? [20:11] maushu: It was having some problems connecting sometimes. [20:11] fizx has joined the channel [20:12] kriszyp: just a sec, I'll isolate some [20:13] maushu: I will probably add it later after I fix the code a little more. [20:13] JimBastard: maushu: if this helps, http://github.com/marak/translate.js [20:14] slaskis has joined the channel [20:15] kriszyp: pgriess: this seems to do it for me: http://gist.github.com/439667 [20:15] pgriess: thx [20:16] kriszyp: note that all I have to do is wrap the write in a setTimeout with a decent delay (1000) and it works fine [20:16] pgriess: k [20:17] maushu: JimBastard, checked the code. Not much different from what I did. [20:17] JimBastard: yeah, i mean i did that module in less then a day [20:18] JimBastard: but like, i figure maybe it would make sense for you to just do a drop in replacement and if you have issues with the translate functionality itself, i can help out [20:18] JimBastard: or someone else can [20:18] JimBastard: separate the concerns a bit [20:18] kriszyp: and with a 10ms delay I can get "Cannot resume() closed Stream. errors" [20:19] maushu: JimBastard, nah, the problem is error fallback. [20:19] JimBastard: ? [20:19] JimBastard: how so? [20:19] JimBastard: error in translation? [20:19] JimBastard: error with google being down? [20:19] softdrink: liking jspec so far... [20:19] JimBastard: i dont see the benefit to having to roll your own translate stuff [20:20] JimBastard: if there is anything you are doing that translate.js cant id want to add it [20:20] maushu: Basically, "La la la... Ooooh! A new tweet! Sweet! Connecting to google-chan for translation! ... ... ... Whats wrong? Something is wrong! Nooooooooo! *CRASHES*" [20:20] JimBastard: yeah i mean, uhh what [20:21] maushu: From the bot perspective. [20:21] JimBastard: where is the code for this? [20:21] maushu: It's the same as yours. [20:21] JimBastard: i meant the accouncer [20:21] JimBastard: seems thats where your issue is [20:21] maushu: http://graphnode.com/stuff/ircbot.js [20:22] maushu: translate function. [20:22] maushu: Perhaps I need a try and catch there. [20:23] JimBastard: yeah i dont see the error, whats crashing [20:23] maushu: Of course I added uncaught Exception so... the bot shouldn't crash anymore but the tweet will not show. [20:23] JimBastard: whats the message [20:23] maushu: ECONNECTION something. [20:23] JimBastard: thats wierd [20:23] maushu: Let me check the logs. [20:23] JimBastard: maybe bad node version [20:24] maushu: ECONNREFUSED [20:24] maushu: I think. [20:24] maushu: That was also the twitter error before I fixed it. [20:25] maushu: Anyways, I will just add the translation thing again since I'm using uncaughtException. [20:25] JimBastard: sure [20:26] ntr0py has joined the channel [20:26] stepheneb has joined the channel [20:28] maushu: I can also use this change to update the bot's node version to the latest. [20:28] maushu: (And probably make everything explode.) [20:28] JimBastard: and then we never saw the annoucer or maushu again [20:29] maushu: ^ [20:29] JimBastard: maushu: hows the graphnode project going [20:29] maushu: Going well. [20:29] JimBastard: anything to show? [20:29] maushu: I'm using mongodb, btw. [20:29] maushu: Nope. [20:29] JimBastard: databases are for pussies [20:29] pgriess: kriszyp: fixed [20:29] maushu: I'm also using websockets for realtime logging. [20:29] pgriess: kriszyp: bug in fd passing in node [20:29] JimBastard: real mean keep everything in memory [20:29] JimBastard: thats cool maushu [20:29] pdelgallego has joined the channel [20:29] JimBastard: we just keep static logs [20:29] kriszyp: oh, not my fault? [20:29] kriszyp: cool [20:29] maushu: Including user accounts? [20:30] pgriess: kriszyp: thanks for the test case ;) [20:30] JimBastard: maushu: ohh yeah for sure [20:30] kriszyp: ACTION usually assumes it is his fault [20:30] kriszyp: well, thank you [20:30] JimBastard: maushu: i even load the codebase into memory so i can eval it from there [20:30] maushu: Awesome. [20:30] JimBastard: lolwut [20:30] JimBastard: i got some php in there too [20:30] maushu: Just don't trip on the electrical cord. [20:30] kriszyp: assume you don't have any idea how to fix cygwin do you? [20:30] JimBastard: its solar power [20:30] maushu: Blow up the sun. [20:31] JimBastard: its moon powered [20:31] pgriess: kriszyp: none [20:31] JimBastard: im fucking with you maushu [20:31] maushu: ...do what that namek guy did. [20:31] maushu: I know. Now I forgotten what I was talking about. [20:32] maushu: Oh yeah, the websockets logging. [20:32] pgriess: kriszyp: looks like DuplicateHandle() can do this [20:32] JimBastard: yeah that seems pointless [20:32] maushu: Thats for the user, he receives the realtime logs for debugging. [20:32] pgriess: kriszyp: not that i want to fight w/ implementing this, but it looks doable [20:33] JimBastard: maushu: i dont understand why you would do that at all [20:33] maushu: JimBastard, similar to the console.log from javascript... but for server side. [20:33] JimBastard: http://maraksquires.com/node_debug/ [20:34] JimBastard: a web console debugger for nodejs? [20:34] maushu: Yeah, like that. [20:34] JimBastard: why are people debugging in real time on the production server? [20:34] JimBastard: more so, why wouldnt you just parse the logs after the fact [20:35] maushu: Because it's not the production server. [20:35] JimBastard: got ya [20:35] maushu: Thats before the publish/release. [20:35] JimBastard: well , if you release your debugging tool i might be motivated to spite driven develop another node_debug version [20:35] JimBastard: possibly rename [20:36] pgriess: kriszyp: can you apply http://gist.github.com/439690 to your local node, rebuild, and test? [20:36] CIA-76: node: 03Ryan Dahl 07master * r5bc00ab 10/ src/node_crypto.cc : Lint node_crypto.cc - http://bit.ly/a8sZBS [20:36] CIA-76: node: 03Ryan Dahl 07master * r9854216 10/ src/node_crypto.cc : Fix a bunch of memory leaks in node_crypto - http://bit.ly/c9PyCM [20:36] maushu: The debugging tool is too integrated and it doesn't do much besides what yours already does. [20:36] CIA-76: node: 03Ryan Dahl 07master * r4594408 10/ src/node_crypto.cc : More lint on node_crypto - http://bit.ly/9AyqIi [20:36] isaacs: bradleymeck: what do you think about using something like mustache for the npm ls output formatting? [20:37] maushu: JimBastard, well, besides the websockets. [20:37] technoweenie has joined the channel [20:37] JimBastard: you seem to be a fan of taking my projects and rebuilding them as hardcoded pieces of your apps [20:37] JimBastard: i like it! [20:37] isaacs: bradleymeck: it could even actually use mu.js, and just hand it the format string and the merged local-and-remote data set [20:38] maushu: JimBastard, wat. [20:38] _announcer has joined the channel [20:38] JimBastard: sup _announcer [20:38] isaacs: JimBastard, maushu: you know, that's what npm is FOR [20:38] JimBastard: isaacs: i should try creating some packages sometime [20:38] isaacs: abstract out small pieces that do one thing well, then assemble them. [20:38] maushu: isaacs, oh, you mean mpm obviously. [20:39] isaacs: mpm? [20:39] JimBastard: isaacs: dunno if you follow me on github or not, but im close to getting my automated OSS management working [20:39] maushu: maushu's package manager. [20:39] isaacs: neat [20:39] kriszyp: pgriess: awesome, it works! [20:39] isaacs: ahh, i see [20:39] pgriess: kriszyp: sweet [20:39] bradleymeck: isaacs that should work, have to check about slices and joins and indices based upon numbers [20:39] JimBastard: ive got kohai handling most of my projects now [20:39] maushu: isaacs, just kidding. [20:39] JimBastard: yeah, its really JBPM [20:39] pgriess: kriszyp: cool, i'll submit it to ryah [20:39] isaacs: maushu: oh, for a second i got excited. [20:39] maushu: JimBastard, I will let you know that I didn't even remember node_debug before I coded this. :p [20:40] JimBastard: yeah [20:40] JimBastard: thats why im using kohai now [20:40] maushu: isaacs, for yet another package manager? [20:40] JimBastard: to help with the visibility of my projects [20:40] JimBastard: among other things [20:40] JimBastard: i should add a feature that will randomly submit a project to reddit / HN [20:40] isaacs: maushu: yeah. since tjholowaychuk said he was bored with developing kiwi, it's like i have no competition and a lot more pressure to actually deliver. [20:41] isaacs: maushu: super lame. [20:41] maushu: If this keeps up a yanpm will show up. (Yet Another Node.js Package Manager) [20:41] isaacs: ;P [20:41] isaacs: maushu: you could just call it "yayaa" [20:41] isaacs: maushu: "yet another 'yet another' acronym" [20:41] maushu: Yeah competition is good for that isn't it? [20:41] isaacs: well, competition makes it like a game. [20:41] isaacs: if you're the only one doing it, it's less like a game, and more like a job. [20:42] maushu: Good thing I have competition worthwhile for my graphnode project. [20:42] hellp has joined the channel [20:42] maushu: *no competition, I mean [20:42] JimBastard: i think you were right the first time [20:42] maushu: No I wasn't. [20:42] maushu: :p [20:42] maushu: ACTION pokes JimBastard. [20:43] maushu: *pooooke* [20:43] isaacs: but i think a lot of good ideas came out of kiwi. the whole idea of letting developers basically specify their own install process easily is nice, and really informed the behavior of the "scripts" hash [20:43] maushu: isaacs, steal the ideas! [20:43] isaacs: maushu, JimBastard: if you're gonna keep poking each other, you should get a room. [20:43] isaacs: nodejs is pg13 [20:44] JimBastard: not if i have anything to do with it [20:44] maushu: I'm not that kind of girl. [20:44] JimBastard: ACTION is rated R [20:44] JimBastard: NC-17 is most southern states [20:44] mw_ has joined the channel [20:44] JimBastard: NC-17 in most southern states [20:44] mscdex: NC-17 sounds like a startrek thing [20:44] JimBastard: ACTION is rated I for internet [20:44] maushu: ACTION is rated H. [20:44] maushu: For Human. [20:44] JimBastard: for HUGS [20:44] maushu: >_> [20:45] isaacs: awwww [20:46] mscdex: so when is npm going to get debian/yum-like commands so i have less to remember? [20:46] mscdex: ;-) [20:47] isaacs: mscdex: that's a tricky one, ya know? [20:47] mscdex: er apt-get/yum [20:47] isaacs: mscdex: if you have any ideas for how something could be more like yum/apt-get, suggestions are always welcome [20:48] isaacs: but there will always be some discrepancies, simply because nodejs packages aren't all that much like dpkg packages [20:48] jetienne: .deb are pretty good. they handle a LOT of package. [20:48] jetienne: a LOT >= 20000 [20:49] richcollins has joined the channel [20:52] tjholowaychuk: isaacs: yo, for express if I need an install script to update the submodules is "install": "git submodule update --init" [20:52] tjholowaychuk: ideal? it seems to fail though [20:52] tjholowaychuk: wait nvm [20:52] jetienne: their dependancies, the way they handle the state automata... we should not discard such experience [20:52] tjholowaychuk: doesnt matter [20:53] isaacs: tjholowaychuk: just a sec... work convo [20:53] mscdex: isaacs: i mean like the same commands and syntax for doing operations that npm and apt-get share in common. i.e. doing something like "npm install foo" would install the latest version of foo, for a specific version it would be like: "npm install foo=0.1.2" [20:53] isaacs: tjholowaychuk: i don't think that works because it's not a git repo [20:53] mscdex: etc [20:53] isaacs: tjholowaychuk: i mean, the code you get isn't a git repo [20:53] tjholowaychuk: np nvm me im dumb they are checked out locally so they will be in the archive anyways [20:53] isaacs: mscdex: the problem there is that = is a valid char in a name. npm install foo@=0.1.2 would work, though [20:53] isaacs: or foo@0.1.2 [20:54] mscdex: = is a valid character? :S [20:54] mscdex: why? [20:55] isaacs: mscdex: cuz it's not specifically disallowed, i guess [20:55] isaacs: mscdex: don't think anyone's using that, though [20:55] jetienne: isaacs: do you have experience/advisors on debian packaging ? [20:55] mscdex: i think there is a better chance someone would use @ in a name than = [20:55] isaacs: jetienne: nope. i've built a few .debs and use apt a bunch, but nothing in the internals [20:55] isaacs: mscdex: yeah, using @ in teh name will break. [20:55] isaacs: mscdex: i don't think either is likely [20:56] mscdex: right. i don't think .deb allows anything outside of A-Za-z0-9_- [20:57] mscdex: which is sane imho [20:57] mscdex: maybe . too [20:57] isaacs: mscdex: a few packages use ., actually [20:59] mscdex: also, while on the subject, are there any plans down the road to decentralize npm? [20:59] isaacs: mscdex: yes. not very far down the road. this summer. [20:59] mscdex: ah ok [21:00] isaacs: mscdex: already, you can set the registry wherever you want. [21:00] mscdex: yeah i saw that [21:00] isaacs: but i want to make any npm install act as a registry, and allow a git-like peer to peer thing [21:00] mscdex: why peer to peer? [21:00] tjholowaychuk: blahh so much legacy crap in express [21:01] saikat has joined the channel [21:04] DracoBlue: tjholowaychuk: while looking into expressjs some days ago, I noticed that one has to have express in require path, to make a express app work. Is there a reason why express.js says: Class = require('support/class/lib/class').Class, where it could say: Class = require('./support/class/lib/class').Class ? [21:04] tjholowaychuk: DracoBlue: im changing that right now actually [21:04] DracoBlue: awesome ;) [21:04] benoitc has joined the channel [21:04] creationix: There was once a time when node didn't have relative requires [21:04] creationix: Express is old [21:05] creationix: ;) [21:05] isaacs: mscdex: because it's neat that way :) [21:05] isaacs: mscdex: also, there are some internal benefits. [21:05] isaacs: mscdex: and deployment would be easier to accomplish that way, too [21:05] DracoBlue: whoo, I am on node since december 09 :( - guess that was before [21:05] tjholowaychuk: creationix: yes yes it is lol [21:05] mscdex: easier than having a simple repo-like setup? [21:05] creationix: tjholowaychuk: Do you remember when you started it? [21:05] tjholowaychuk: 1409 commits to express [21:05] tjholowaychuk: lol [21:06] tjholowaychuk: so pretty old [21:06] mattly has joined the channel [21:06] isaacs: mscdex: well ,there'll be one "official" npm repo [21:06] tjholowaychuk: june 26th 2010 is when it started [21:06] tjholowaychuk: 2009 [21:06] tjholowaychuk: sorry [21:06] mscdex: right [21:07] creationix: Almost a year, that's old for a node library [21:07] DracoBlue: tjholowaychuk: how do you see the commit count? on github? [21:07] isaacs: mscdex: that'll still live on registry.npmjs.org [21:07] tjholowaychuk: i really want to get express running on connect [21:07] mscdex: but why not just have the ability to have multiple repos setup (with the official one setup by default) and just pull them in that way instead of p2p? [21:07] _announcer: Watched: Ryan Dahl - Less is More with Node.js - http://blip.tv/file/3735944 #nodejs -- George Stagas. http://twitter.com/stagas/status/16255019500 [21:07] tjholowaychuk: DracoBlue: git log --oneline | wc -l [21:07] creationix: tjholowaychuk: That would be great [21:07] DracoBlue: thanks [21:07] mscdex: like debian repos [21:08] isaacs: mscdex: that too [21:10] gerad has joined the channel [21:13] pgriess1 has joined the channel [21:16] isaacs: tjholowaychuk: so, git submodules... [21:16] tjholowaychuk: isaacs: no worries, its all good, just fixing some shit before i publish it [21:17] isaacs: tjholowaychuk: the best way to handle that use case is to have dependencies, and then link them into the proper locations using the "link" hash [21:17] isaacs: tjholowaychuk: that's an experimental feature (ie, like all of npm, really) and may change to more closely match whatever comes out of the "mappings" discussion on commonjs [21:17] tjholowaychuk: isaacs: once i have haml / sass etc on there I will utilize the npm dependencies [21:17] tjholowaychuk: but for now its safe / easy to have them in the tarball [21:17] isaacs: tjholowaychuk: so, you'd have: { "dependencies":{"foo":"0.2.1"}, "link" : {"foo" : "./deps/foo" } } [21:18] isaacs: then, in your code, you can have require("../deps/foo") and get the version of "foo" that meets the dep [21:18] ryan_gahl has joined the channel [21:20] ryan_gahl: damnit JimBastard's not here for me to tell him how much of a bastard he is [21:20] xer0xM: that bastard [21:20] ryan_gahl: he might already know [21:22] _announcer: @ Janl ah you made me think about to viewserver in nodejs. Damn. [fr] -- j m. http://twitter.com/feuervogel83/status/16255850041 [21:23] maushu: ... [21:23] maushu: What the hell just happened. [21:25] maushu: That should fix it. [21:25] tjholowaychuk: cool, `npm install express` seems to be good to go [21:25] _announcer has joined the channel [21:26] isaacs: tjholowaychuk: nice! lemme see if it works for me. [21:27] gerad has joined the channel [21:27] derbumi has joined the channel [21:27] _announcer: Twitter: "Node.js looks brilliant. I want to try it." -- Sam Jesso. http://twitter.com/xiofire/status/16256116408 [21:30] isaacs: tjholowaychuk: seemed to install properly, but it doesn't export anything, so i can't tell in the repl if it worked or not [21:30] isaacs: still though, that's nice! [21:30] tjholowaychuk: isaacs: thats because i have legacy globals that im to lazy to get rid of :D haha [21:30] Tim_Smart has joined the channel [21:30] isaacs: tjholowaychuk: suresure [21:30] isaacs: and the repl is executed in an evalcx, so they're not even on "global" ;P [21:31] tjholowaychuk: when I port to connect it will be nice I can turf most the cruft, let connect handle that, and get rid of some legacy code in the process [21:31] tjholowaychuk: snap [21:31] isaacs: yep. excited to see that. [21:32] isaacs: for now, though, since express is in npm, it'll be a lot easier for you to retire kiwi ;) [21:32] tjholowaychuk: yup haha. i will still publish to kiwi for a bit since people are still using it [21:32] isaacs: suresure [21:32] tjholowaychuk: but i will have time on the weekend to push my other stuff to npm too [21:33] tjholowaychuk: even though ill have to name haml something else : [21:33] tjholowaychuk: :( [21:33] isaacs: that's fantastic [21:33] tjholowaychuk: haml2 [21:33] tjholowaychuk: haha [21:33] isaacs: oh, right, i think creationix snagged that one ;) [21:33] tjholowaychuk: more-compliant-haml [21:33] tjholowaychuk: haha [21:33] tjholowaychuk: i dont know [21:33] tjholowaychuk: haml.js [21:33] tjholowaychuk: i guess [21:33] isaacs: right [21:33] isaacs: you and he can fight it out [21:33] isaacs: ideally merge the two together [21:34] tjholowaychuk: yeah ideally [21:36] maushu: Woah, I got 10 visits from the usa to my empty page. [21:38] derbumi has joined the channel [21:40] maushu: Maybe I *should* make a landing page or something. [21:48] JAAulde has joined the channel [21:49] siong1987 has joined the channel [21:54] tilgovi has joined the channel [21:56] stevendavie1 has joined the channel [22:00] admc has joined the channel [22:00] richcollins has joined the channel [22:05] ryah: pgriess1: http://code.google.com/chrome/extensions/manifest.html#permissions [22:06] ryah: would be cool for workers [22:06] ryah: createWorker('worker.js', { permissions: ["file:///home/ryan/*", "http://*.joyent.com/"] }) [22:09] jxson has joined the channel [22:10] KungFuHamster has joined the channel [22:12] saikat has joined the channel [22:12] romainhuet has joined the channel [22:13] polo has joined the channel [22:14] CIA-76: node: 03Ben Lowery 07master * rf3cd7bb 10/ lib/sys.js : Coerce each argument to a String before attempting to print it via sys.print - http://bit.ly/9MhooX [22:14] CIA-76: node: 03Ryan Dahl 07master * rbc76624 10/ (36 files in 8 dirs): Upgrade V8 to 2.2.17 - http://bit.ly/auLyzN [22:14] CIA-76: node: 03Peter Griess 07master * r4b48042 10/ lib/net.js : [22:14] CIA-76: node: Wrap FD in closure before emitting from Stream. [22:14] CIA-76: node: - Without this, recvMsg can be invoked before the event emitter gets a [22:14] CIA-76: node: chance to run. In this case, recvMsg.fd will be overwritten and the [22:14] CIA-76: node: original caller can end up emitting null. - http://bit.ly/acxLKi [22:14] derbumi_ has joined the channel [22:15] brianmario has joined the channel [22:18] pjb3_ has joined the channel [22:19] pgriess1: ryah: reading [22:23] Tim_Smart: Now that passing around fd's is easier, you think work on a Web Workers lib with a socket-pair for ipc is a welcome addition? [22:23] Tim_Smart: *working on a [22:26] ryah: Tim_Smart: sure [22:26] ryah: socketpair should be easy [22:26] pgriess1: ryah: not sure how you'd implement that permissions model [22:26] pgriess1: ryah: for workers, that is [22:26] ryah: pgriess1: me neither, it'd be hard [22:26] ryah: you could do it at the binding layer though [22:27] pgriess1: ryah: yeah. i guess you could LD_PRELOAD some stuff to interpose on system calls [22:27] pgriess1: ryah: but, yikes [22:27] Tim_Smart: permissions model? Is this for creating sandboxes? [22:27] mitkok has joined the channel [22:28] pgriess1: tim_smart: what benefit would a socketpair have vs. the existing web workers impl (which uses a named UNIX socket) [22:28] pgriess1: tim_smart: don't let me stop you, by the way. just wondering what you're hoping to improve [22:28] Tim_Smart: Not much. There is the current implementation? [22:28] Tim_Smart: *Where [22:28] richcollins has joined the channel [22:28] pgriess1: http://github.com/pgriess/node-webworkers [22:29] pgriess1: ryah: you could limit http access by mandating use of a proxy under the covers, and seed that proxy w/ permissions [22:29] pgriess1: ryah: one proxy per worker (or haev workers identity themselves to the proxy) [22:30] pgriess1: seems like more trouble than it's worth, though [22:32] ryah: advantage of socketpair, unnamed [22:32] keyvan has joined the channel [22:33] ryah: pgriess1: i think you could do something in the Connect binding [22:34] pgriess1: ryah: how do you pass the socketpair to the child? [22:34] Tim_Smart: Send one of the fd's to it [22:34] Tim_Smart: and listen on it [22:34] pgriess1: tim_smart: how? [22:34] pgriess1: there is a chicken + egg problem here ;) [22:34] pgriess1: you need a unix socket to send the FD over [22:34] ryah: yeah, i guess [22:35] pgriess1: you can use stdin/stdout/stderr, but i really don't like doing that [22:35] ryah: we could do a special binding for fork/exec which passed a socketpair [22:35] ryah: but whatever [22:35] ryah: yeah you're right [22:36] Tim_Smart: I would have just used stdio hehe. But yeah UNIX socket it fine [22:36] Tim_Smart: *is [22:39] bradleymeck: after some hacking think i got session support for Connect... just have to get Timeouts to work nicer on expires, can hog cpu at this point, perhaps a garbage collector interval? [22:39] tjholowaychuk: bradleymeck: where at? [22:39] tjholowaychuk: gist / repo [22:39] bradleymeck: not done testing [22:40] tjholowaychuk: because that is what im working on haha :) perhaps we can merge some stuf [22:40] bradleymeck: http://gist.github.com/439854 [22:41] bradleymeck: works off cookies / ip, need to figure out the setup function to see if i can make it easier to have the layer set to secure only or http only [22:42] bradleymeck: session id hash should also prolly be more complex [22:44] tjholowaychuk: ill take a look in a minute [22:48] Judofyr has joined the channel [22:50] ajpiano has joined the channel [22:50] bradleymeck: basically, just had node-cookiejar hold a session cookie with a ttl and ip associated w/ it. populates req.cookies, req.session and you go from there have to check for req.session before use which is a little annoying but cant make a session w/o some stuff, like req.header.host (can connect provide current host somehow?)... right now it holds sessions indefinately, prolly should have them collected on some interval (using setTimeout on many sessions [22:50] bradleymeck: caused bad juju) [22:51] sanderjd has left the channel [22:51] Judofyr_ has joined the channel [22:54] _announcer: Twitter: "→ speed node.js trivial part made in C + + rewrite of the flow" [ja] -- KOBA789. http://twitter.com/koba789/status/16260824718 [23:00] Gruni has joined the channel [23:03] stepheneb has joined the channel [23:05] bradleymeck: tjholowaychuk, send me email w/ concerns, i gtg [23:05] bradleymeck has left the channel [23:09] gf3 has joined the channel [23:12] mostlygeek has joined the channel [23:14] ryah: /names [23:15] ryah: oops [23:15] zomgbie has joined the channel [23:17] [[zz]] has joined the channel [23:18] JimBastard has joined the channel [23:18] mikeal has joined the channel [23:20] mostlygeek_ has joined the channel [23:20] saikat has left the channel [23:24] tilgovi: Is it not possible right now to bind a udp socket so that send can be called without an address? [23:25] tilgovi: I thought I remember that being possible in C [23:26] tilgovi: oh, maybe it's connect() [23:26] tilgovi: not bind [23:29] mattly has joined the channel [23:29] jashkenas has joined the channel [23:30] tilgovi: basically, I'm feeling like the dgram send() should have the port and message information last [23:30] stevendavie has joined the channel [23:30] tilgovi: it would make the addition of connect() and address-less send() more straightforward [23:30] Tim_Smart has joined the channel [23:32] towski has joined the channel [23:32] kersny has joined the channel [23:33] tilgovi: i guess I don't really care. I can always shove it in there. [23:34] pavelz: this is sick. doing rjs from node? what kind of place is this ?:) [23:36] JimBastard: pavelz: ? [23:36] pavelz: on more professional note, i think there should be a way to 'pickle' a function so you can exec it in browser & node. Having text for eval and passing it around doesn't really give a handle on the code. so it feels like it. [23:37] JimBastard: whats up pavelz ? [23:37] JimBastard: you are saying interesting things [23:37] sr: tjholowaychuk, any experience putting connect on production? looks like throwing monit at it would be super simple, was wondering i you had any experience with doing that [23:37] JimBastard: i have a few libraries that work dual-sided with the same codebase [23:37] JimBastard: sr: there are some articles for setting up node with monit [23:38] tjholowaychuk: sr: daemonization is not is not implemented yet [23:38] tjholowaychuk: I only have a few small apps in production, that are not crucial so I just detach from the shell and use nohup [23:38] pavelz: JimBastard: heh, well rjs is javascript packaged for execution in browser. It is sort of 'normal' when you have one language generating another. But same language generating same language ... [23:38] freshtonic has joined the channel [23:38] freshtonic has left the channel [23:38] JimBastard: pavelz: yeah, my shit works way better then RJS [23:38] sr: tjholowaychuk, hehe :) re. daemon, it is not necessary for monit, is it? [23:39] JimBastard: RJS is the rails thing right? [23:39] pavelz: JimBastard: do share [23:39] JimBastard: if so its lame as shit [23:39] JimBastard: well [23:39] Tim_Smart: You can daemonize stuff with upstart as well [23:39] sr: tjholowaychuk, maybe better with god [23:39] JimBastard: pavelz: http://github.com/marak/Faker.js works dual sided [23:39] JimBastard: with the same .js file [23:39] tjholowaychuk: or monit.js :D haha ( i never did really finish that, but it might work ) [23:39] JimBastard: but im cheating a lot [23:40] tjholowaychuk: i keep forgetting what is missing from node to support daemons but it was mostly there [23:40] JimBastard: im working on something now (kinda) that will allow you to run native node code in the browser without modification [23:40] JimBastard: the amount of hackery in it though scares me [23:40] sr: do you know what is felix using to keep transcodit up and running? [23:40] JimBastard: i dont think ive ever written more fragile JS [23:40] tjholowaychuk: JimBastard: haha sounds cool [23:40] JimBastard: tjholowaychuk: did i not send you the link? [23:40] sr: nice one re. monitjs btw :P pretty fun [23:40] pavelz: JimBastard: native code ? [23:40] jashkenas has left the channel [23:41] tjholowaychuk: JimBastard: i dont think so [23:41] JimBastard: pavelz: plain ole node code [23:42] Tim_Smart: Does opening a child_process then process.exit()'ing daemonise? [23:42] pavelz: thought you meant binary bindings in the browser :) that'd be :o [23:42] Tim_Smart: Or does the child drop? [23:43] freshtonic has joined the channel [23:43] stagas: http://www.dhteumeuleu.com/no-click/ [23:44] tjholowaychuk: Tim_Smart: not sure actually [23:47] JimBastard: Yo dog, I heard you liked configuring your interface's inversion of controller containers using the class interface polymorphism library that dynamically redistributes your instantiation requests back to the factory interface generator factory generator through XML files. #bastardfacts [23:47] JimBastard: stupid JAVA developers [23:47] JimBastard: ACTION like a JBoss [23:49] JimBastard: yo stagas i clicked the button mad times and nothing happened [23:49] stagas: how did you catch it [23:50] stagas: it's supposed to avoid the mouse you need js [23:50] stagas: on [23:50] JimBastard: umm [23:50] JimBastard: i got mad skills? [23:51] JimBastard: if you fast enough you can do it [23:51] stagas: lol or the browser slow enough :P [23:51] JimBastard: i do like to run 20+ apps and probaly 100+ tabs [23:51] JimBastard: apparently my computer runs very slow at all times but i never notice [23:51] JimBastard: i type very deliberately [23:52] JimBastard: ahah [23:52] stagas: this guy at dhteumeuleu is does some very impressive stuff [23:52] hdon has joined the channel [23:53] stagas: i wish i knew to code physics too [23:53] hdon: /join #pmi [23:53] hdon: sorry [23:55] maushu: ACTION facepalms. [23:55] mape: stagas: god damit that is aggrevating [23:55] blowery: woo! patch landed! [23:56] jetienne: http://box2d-js.sourceforge.net/ <- stagas [23:58] stagas: jetienne: yeah but it's only an api you still need to know all about vectors and physics though [23:58] mrjjwright has joined the channel [23:58] stagas: and its documentation sucks [23:58] jetienne: hard to get around that [23:58] tjholowaychuk: jetienne: how does it perform on mobile devices? do you know? [23:58] jetienne: tjholowaychuk: nope