[00:01] jashkenas: ashb: done reading the thread. did you ever find a workaround? [00:04] abadr has joined the channel [00:05] tmpvar: ah, DRY'ing off. jsdom now uses mjsunit.runner for running it's tests [00:07] CIA-77: node: 03Scott González 07master * r6eff893 10/ src/node.js : Fixed encoding in fs.writeFile(). - [00:07] tmpvar: isaacs, how does npm sit in your list of priorities? [00:07] CIA-77: node: 03Ryan Dahl 07master * r7a8ede6 10/ src/node.js : Add note about Promise removal [00:07] CIA-77: node: 03Ryan Dahl 07master * rc094dda 10/ (lib/http.js src/node_net.cc): Move errors for readPause and readResume [00:07] isaacs: tmpvar: very highly [00:07] isaacs: why? [00:07] tmpvar: i was hoping you'd say that [00:07] isaacs: i'm looking at rejiggering it to work with 0.1.30 node right now [00:08] tmpvar: nice, if you need some help hit me up [00:08] isaacs: mikeal is building a js package registry for it on couchdb [00:08] tmpvar: excellent [00:08] tmpvar: its only a matter of time! [00:08] isaacs: by the end of this week, i hope to have dependency resolution and package activation working [00:08] ryah: response.writeHeader(status[, reasonPhrase], headers) ? [00:08] tmpvar: isaacs, thats really awesome [00:09] eck has joined the channel [00:09] abadr: I'm trying to use an EventEmitter, but only the first listener is getting called. I am checking this.listeners beforehand. What could it be? [00:11] eck: i updated my copy of node earlier today (from git), and it seems like the fs module doesn't return promise objects anymore -- is that right? [00:12] abadr: oh, I see. "Caution: changes array indices in the listener array behind the listener." Perhaps it should be made clear that changing the indices breaks things even if *I'm* not using the indices. [00:12] ryah: eck: yes [00:12] eck: so are you supposed to use the Sync methods to wait? [00:12] ryah: eck: correct [00:12] eck: that's a shame, some of them are unimplemented [00:13] eck: e.g. for readdir [00:13] ryah: yeah - [00:13] ryah: maybe i should throw that in there quickly [00:13] jashkenas: ryah: you still shooting for 0.1.3 tonight? or will it be later? [00:14] ryah: jashkenas: 0.1.30. yes [00:14] abadr: so what's the right way to remove a listener? [00:14] ryah: 0.1.3 was released 2009.08.06 [00:15] ryah: abadr: emitter.removeListener(listener) [00:15] abadr: ryah: see above -- it makes it skip the next one [00:15] abadr: (when I do that in the listener itself) [00:15] jashkenas: ryah: Wonderful. We'll have a completed CoffeeScript 0.5.0 to go alongside, entirely self-compiling under Node. [00:15] ryah: abadr: oh. hmm.. [00:15] isaacs: ryah: so, if i were to rewrite the multipart now to be non-http-coupled, would that be worthwhile? or are you already onto that? [00:16] brandon_beacher has joined the channel [00:20] eck: ryah: just curious, what are the plans for a 2.0 release? i watched the jsconf video a while ago where i think you had said you were shooting for january [00:20] jashkenas: eck: gotta have a 1.0 first. :) [00:20] eck: oh, i think that's what i meant :-) [00:20] eck: the "stable api" release [00:21] isaacs: eck: maybe thinking about 0.2? [00:21] abadr: anyone know what I should do? I want an event listener to remove itself after it has fired once. [00:21] Tim_Smart: abadr: removeListener? [00:21] abadr: Tim_Smart: removeListener makes the next listener for the save event get skipped [00:21] abadr: save=same [00:22] ryah: isaacs: that would be worthwhile - i won't have time to do it any time soon [00:22] isaacs: kewl. i'll start it whenever i get too frustrated with npm's crap. [00:23] isaacs: which is feeling soon. [00:23] ryah: eck: yeah - 0.2 - i prematurely promised will have a moderately stable API - which is why it's getting pushed back [00:24] abadr: I could fire another event to remove it later, but that doesn't seem like a good solution [00:24] ryah: eck: i think most of the API changes will be done after this 0.1.30 release though [00:25] ryah: abadr: it sounds like a a bug. [00:25] abadr: maybe there's a better overall approach: what I'm trying to do is have an object listen to any of a list of events, and repeat the first one that goes off. it does this by creating a listener bound to each of the events that removes itself after its first execution. [00:25] isaacs: abadr: foo.addListener("eventname", function () { doSomething(); foo.removeListener(arguments.callee); }) [00:25] isaacs: abadr: that doesn't work? [00:26] inimino: you would need to use a timeout [00:26] abadr: ryah: seemed like it should be one to me too, but I just started w/node so I wasn't sure [00:26] abadr: inimino: ah, that might be the easiest solution [00:26] unomi has joined the channel [00:26] cloudhead: btw inimino: what were you refering to, when talking about function.length? when could that come in handy? [00:27] inimino: (unless it's changed since I looked) [00:27] cloudhead: for handling variable args [00:27] inimino: cloudhead: when trying to figure out how many arguments a function expects, for 'arguments surgery' [00:28] abadr: isaacs: i think that runs into the same problem [00:28] cloudhead: hmm right, to get the arity [00:28] cloudhead: not sure where I'd need that yet though [00:28] isaacs: abadr: i see. that sounds like a bug, then, because that should work. [00:28] cloudhead: you're talking about examining the callback? [00:29] inimino: cloudhead: but I may have misunderstood what perceived problem people are trying to solve... most of that Rasmus's messages to the list didn't make much sense to me [00:29] mahemoff has joined the channel [00:30] inimino: (it never occurred to me that people would try to generically wrap any arbitrary function that uses node-style callback-in-last-position) [00:31] blackdog` has joined the channel [00:32] cloudhead: inimino: yea, it becomes useful for event libraries [00:32] cloudhead: stuff like [00:32] cloudhead: var fs = wrapper(require('fs')) [00:33] inimino: why not just fs = require('fs-continuable')? [00:33] cloudhead: cause it's not generic [00:33] inimino: well that's what I don't understand the need for [00:33] CIA-77: node: 03Micheil Smith 07master * r05d6da6 10/ (src/node_file.cc test/mjsunit/test-readdir.js): Add fs.readdirSync() - http://bit.ly/aojRhV [00:33] cloudhead: a continuable library should wrap around any node-style async lib [00:33] creationix has joined the channel [00:34] inimino: unless you're expecting node-style varargs-followed-by-callback-who-knows-where style to catch on outside of node core... [00:34] cloudhead: well, I do [00:34] cloudhead: I think that's the idea [00:34] inimino: I don't [00:34] inimino: but maybe it will [00:34] cloudhead: well, it's what I'm hoping for [00:35] cloudhead: but it's what I've been debating too [00:35] cloudhead: which is why I think it was a bad decision [00:35] cloudhead: but we'll see what happens [00:35] inimino: anyway, my SICP meeting was canceled today [00:35] inimino: I'm going to see if I can get fileIO working in HEAD and add a little continuable utility library [00:36] cloudhead: the problem with callback at the end is just that it adds complexity when designing functions which take var args [00:36] inimino: too much kibitzing, too little code :) [00:36] cloudhead: hehe [00:36] inimino: yeah, varargs followed by callback is ugly as hell IMO [00:36] cloudhead: yeh [00:36] ashb: if only the arguments object was a proper array [00:36] ashb: cb = arguments.pop(); [00:36] cloudhead: yea [00:36] cloudhead: well [00:36] ashb: or if oyu could do: [00:36] inimino: arguments[arguments.length-1] [00:36] cloudhead: I wrote a wrapper around arguments [00:37] ashb: funciton(fixed, args, rest..., cb) [00:37] JoePeck: I just finished reading the thread this morning. Var args isn't ugly if you know there will be a callback, what ashb just showed [00:37] cloudhead: to handle that stuff [00:37] inimino: not much worse [00:37] ashb: inimino: doesn't help if oyu need to pass arguments off to somewhereelse [00:37] JoePeck: but how do you know if there is a callback? [00:37] cloudhead: so I do var args = new Arguments(arguments); args.callback() [00:37] JoePeck: I would have liked to have seen a more generic solution [00:37] ashb: this is where the Array.slice(arguments) helps [00:37] ashb: i still dont know why the IE guys fought against that [00:37] inimino: well, you can add it [00:38] spot__: Is there a list of viable encoding strings which can be passed to http.write()? [00:38] jashkenas: 'ascii', 'binary', and 'utf8', no? [00:38] inimino: anyway, bbiab [00:38] inimino: meta-1 [00:38] inimino: erm [00:38] inimino: s/meta-1// [00:38] cloudhead: lol [00:38] cloudhead: later [00:40] creationix_ has joined the channel [00:41] brainproxy has joined the channel [00:42] brainproxy has joined the channel [00:49] brainproxy has joined the channel [00:52] brainproxy has joined the channel [00:56] CIA-77: node: 03Ryan Dahl 07master * r12d78cd 10/ (19 files in 4 dirs): Rename sendHeader to writeHeader; allow reasonPhrase - http://bit.ly/bjNpUC [00:58] jed has joined the channel [00:58] Tim_Smart: Hmm I have installed gnutls via brew install gnutls, version 2.8.5 [00:58] Tim_Smart: Except during configure i get: Checking for gnutls >= 2.5.0 : /bin/sh: pkg-config: command not found [01:00] ashb: Tim_Smart: brew install pkg-config ;) [01:00] Tim_Smart: duh [01:03] Tim_Smart: Yeah that worked :D [01:07] mikeal has joined the channel [01:11] bpot has joined the channel [01:11] abadr: If I want to do cleanup after a request, whether it succeeded or not, would I put that in an event handler for 'close' from request.connection? [01:21] cloudhead: does HEAD have all the new asynch api changes? [01:24] voodootikigod_ has joined the channel [01:24] rektide: HEAD? this is git son. we use master round here. [01:36] cloudhead: rektide: master points to HEAD [01:40] brainproxy has joined the channel [01:54] gf3 has joined the channel [01:54] isaacs: HEAD is a pointer to whatever you're curerntly on [01:54] isaacs: whatever commit youer' on, that is [01:54] JimBastard has joined the channel [01:57] gf3 has joined the channel [02:16] JimBastard: does anyone know if the httpClient docs are up to date? http://nodejs.org/api.html#_http [02:34] isaacs: JimBastard: probably they're up to date with hte 1.29 release. [02:34] isaacs: but maybe not with what's on ry/master [02:34] JimBastard: seems to be working [02:38] brandon_beacher has joined the channel [02:44] JimBastard: could someone help me quickly update this http://github.com/Marak/node_mailer/blob/master/node_mailer.js ? now that promises are gone i'm not sure what to do here [02:48] JimBastard: can i not do var promise = new process.Promise(); ? [02:49] davidjrice: so, any paradigms yet for node apps and 'environments' [02:49] davidjrice: I'm guessing, write my own. :) [02:49] JimBastard: theres been talk about jack and jswsgi or something [02:50] JimBastard: middleware? [02:50] JimBastard: nodecgi [02:51] davidjrice: JimBastard: ah, no I mean actually running a node app and it autodetecting the 'environment' [02:51] davidjrice: perhaps based on an ENV var [02:51] davidjrice: NODE_ENV='production' [02:51] davidjrice: to steal a convention from rails [02:53] davidjrice: ..trying to see how I might read an ENV var [02:56] Tim_Smart has joined the channel [03:01] RayMorgan: JimBastard: It doesn't look like the promise in that file is doing anything... it never gets returned or anything.. so nothing is binding callbacks to it anyways. So all the lines referencing promise can just be removed [03:05] JimBastard: hrmm RayMorgan i remove the references and i'm testing it out now [03:05] JimBastard: no emails in the inbox yet, ill try a little bit more [03:06] JimBastard: ohh yeah i might want to start sendmail [03:06] JimBastard: ^_^ [03:17] JimBastard: awesome, just got my email from obama [03:17] JimBastard: update repo now [03:17] RayMorgan: cool [03:19] JimBastard: updated [03:19] JimBastard: thank you! [03:24] RayMorgan: yep [03:24] bpot_ has joined the channel [03:36] jed has joined the channel [03:42] Zoka has joined the channel [03:43] Zoka: ryah: hi [03:44] ryah: Zoka: hey! [03:44] ryah: Zoka: so, i just tried it seems to work [03:44] ryah: good job :) [03:45] davidjrice: how might I do the equivalent of object.send(:method, [args]) in js? [03:45] Zoka: ryah: so you are happy with it? [03:45] ryah: Zoka: lets PM [03:45] davidjrice: oh okay, silly me I can just do an array access in this case. [03:45] davidjrice: Would still be nice to know :) [03:46] jashkenas: davidjrice: array access for dynamic dispatch is the way to go, for an array of arguments, use apply. [03:46] jashkenas: object['methodname'].apply(object, arg_array); [03:50] mikeal has joined the channel [03:52] rtomayko has joined the channel [03:53] davidjrice: jashkenas: sweet [03:54] davidjrice: Okay, I'm quite happy with this. Working environment switching with node! [03:54] davidjrice: http://gist.github.com/310766 [03:57] jed: jashkenas: "try coffeescript"? AWESOME. [03:57] JoePeck: is there a printf / sprintf node module? [03:57] jashkenas: jed: you saw the new docs? [03:58] jed: yeah, voodootikigod linked to them. [03:58] jed: can't believe how quickly you turned that around since the meetup. [03:58] jed: jashkenas: how are the client-side compile times compared to the old server stuff on ruby? [03:59] JimBastard: so http://github.com/danwrong/restler is kinda broken now [03:59] JimBastard: hrmm [04:00] jashkenas: jed: I haven't benchmarked it extensively, but it feels faster, and there's still plenty of room for optimization. Rebuilding the entire self-compiler (i.e, everything in src) take 1 second. [04:01] jashkenas: so, plenty fast -- this isn't like c++ compile times. Even for a 50,000 LOC coffeescript project (shudder), you should still be able to compile in a couple seconds. [04:02] jed: jashkenas: wow, awesome. i think you should make the TRY COFFEESCRIPT persistent on the page... it's easy to miss and hide due to blur/mouseout. [04:02] jashkenas: jed: nevermind, maybe a little longer -- the entire source is shorter than I thought: 2,958 LOC for everything, coffee and cake. [04:03] jashkenas: jed: will do [04:03] dnolen has joined the channel [04:04] jed: jashkenas: once i get fab v3 out, i'm gonna try rewriting it in coffeescript to learn more about it. [04:04] kriskowal: ryah feedback and some notion of how close CommonJS/Binary/F is to workable for you would be awesome [04:04] kriskowal: i'm working on a test suite [04:05] jashkenas: jed: with your use of iterators and ubiquitous functions in Fab, that could become awfully short and sweet. Sounds like fun. [04:06] jed: jashkenas: fab v3 is actually 100% continuations, though you wouldn't know it. [04:06] jed: jashkenas: using partial application + #2 in this approach: http://www.ps.uni-saarland.de/~duchier/python/continuations.html [04:08] jashkenas: jed: the callback, errback style of the "Continuations as an Ordinary Programming Technique" section there? [04:08] isaacs: hey, anyone else having issues with stat.isSymbolicLink()? [04:08] isaacs: it seems to return false when the thing clearly IS a symlink [04:10] JimBastard: does anyone know what needs to change for http://github.com/danwrong/restler/blob/master/lib/restler.js line #149 to work in the latest version of node? ive updated most of the lib but im stuck on that line [04:10] jed: jashkenas: yeah. every piece of (fab) functionality will be implemented in "middleware". so the "path" middleware is just an app that takes three apps: from, success, and failure, and dishes out to success on match. [04:11] ryah: kriskowal: okay [04:11] jed: jashkenas: i got rid of every fab-specific method and property. the whole thing is a generator that returns a single function, with all state stored in closures. (will be easier to explain when i launch.) [04:12] JimBastard: Error: ClientRequest.prototype.close does not take any arguments. Add a response listener manually to the request object. [04:14] jed: jashkenas: anyway, seeing coffeescript run in the client is well worth having half of my github feed start with jashkenas. serious kudos, i hope you're presenting this at jsconf. [04:15] isaacs: ahhh, found it. [04:15] isaacs: ryah: http://github.com/isaacs/node/commit/725d0659c2854ddc75e80b095d682b8a975e3bb4 [04:20] cdorn has joined the channel [04:24] binary42 has joined the channel [04:28] r11t has joined the channel [04:30] ryah: isaacs: maybe we should expose both [04:30] isaacs: ryah: not a bad idea. [04:30] ryah: eio has both [04:30] isaacs: sometimes you don't care if it's a link, but you want to know whether you can cd into it. [04:31] isaacs: and links to dirs look likefiles. [04:31] isaacs: (to lstat, anyhow) [04:31] jashkenas: jed: is that better now, for the docs? [04:32] jed: jashkenas: the hiding is no longer an issue for sure. but i almost missed it entirely when i first saw the page... do you think it'd make sense to highlight it more as a permanent part of the page? [04:33] jed: jashkenas: i mean, if this were a web app, i'd want people to try it out immediately, right there. similar to the way jquery does it on their landing page. [04:34] jashkenas: jed: eh, that's alright -- it's always visible, and if you're reading through it's mentioned to try pasting in examples. Also, it's not half the repl it could be. creationix is going to update trycoffee.org to use the official version, and build out a real browser repl for it. [04:34] jashkenas: that's a good point though. [04:35] jed: jashkenas: ah, cool. i didn't even know about trycoffee, but that seems like a good direction. [04:36] isaacs: ryah: http://github.com/isaacs/node/commit/df85df1a3b8b50df8f676e9fc7f7d7b0fedafdfd [04:37] ryah: isaacs: ASYNC_CALL(stat, args[1], *path) <--- should be lstat [04:37] isaacs: i see it [04:38] isaacs: ryah: http://github.com/isaacs/node/commits/stat-vs-lstat [04:38] jed: jashkenas: btw, http://github.com/jashkenas/coffee-script/issues/issue/189 [04:39] isaacs: that look rigth? [04:39] jashkenas: jed: thanks -- let's take it to #coffeescript if you've got more to discuss. [04:41] jed: jashkenas: got it, thanks again. [04:45] mikeal: felixge isn't around [04:45] mikeal: damn [04:46] mikeal: does anyone know if there are bugs in the http client in the node master right now? [04:46] mikeal: awe shit [04:47] mikeal: i just pulled and got a ton of http changes [04:47] mikeal: nm [04:49] mikeal: were there any more changes to the HTTP api in this release? [05:08] micheil has joined the channel [05:10] sahnlam has joined the channel [05:12] sahnlam has left the channel [05:12] sahnlam has joined the channel [05:22] Yuffster has joined the channel [05:24] CIA-77: node: 03Zoran Tomicic 07master * rd98ea70 10/ (src/node.cc src/node.js): Configurable debug ports, and --debug-brk - http://bit.ly/ccRj1P [05:44] CIA-77: node: 03isaacs 07master * rcdbc823 10/ (doc/api.txt src/node.js src/node_file.cc): Expose fs.lstat - http://bit.ly/cVsRnl [05:44] ryah: isaacs: thanks--^ [05:44] isaacs: ryah: np [05:44] isaacs: did you get all the commits from that branch? [05:44] CIA-77: node: 03isaacs 07master * r9acc8a6 10/ (4 files in 3 dirs): Expose fs.lstat - http://bit.ly/bMFYrl [05:45] ryah: ^-- oops missed something forced update [05:45] isaacs: sweet [05:45] JimBastard has joined the channel [05:45] isaacs: looks right to me [05:49] micheil: hi all [05:49] JimBastard: sop [05:49] micheil: ryah / isaacs: what's the difference between stat and lstat? [05:49] micheil: JimBastard: not a lot just yet [05:49] isaacs: micheil: lstat doesn't follow symlinks. [05:50] micheil: ah [05:50] isaacs: so isSymbolicLink will actually be true if it's a symlink. [05:50] JimBastard: need to figure out what to do a about http://github.com/danwrong/restler not working now [05:50] isaacs: but with lstat, isDirectory() will be true if it'sa symlink to a dir. [05:50] isaacs: wait, no, other way round [05:50] micheil: isaacs: that'd be useful in figuring out realpath's [05:50] isaacs: stat does isDirectory() true if it's a symlink to a dir. [05:51] isaacs: micheil: yeah, or knowing whether to use rmdir or unlink [05:51] micheil: that too [05:51] micheil: some how I think it'd be good to merge unlink and rmdir in some way [05:51] micheil: both result in the removage of a file [05:52] micheil: isaacs: I'm also still trying to figure out the fchown fghgrp and such ones [05:53] isaacs: micheil: i have a simple rm function here that'll remove anything: http://github.com/isaacs/npm/blob/0.1.30-update-wip/lib/utils/rm.js [05:53] micheil: ryah: I think I have an idea on a better way to manage the fs.* and fs.*Sync methods [05:55] CIA-77: node: 03Ryan Dahl 07master * r4c8889b 10/ (src/node_file.cc test/mjsunit/test-readdir.js): [05:55] CIA-77: node: Revert "Add fs.readdirSync()" [05:55] CIA-77: node: Doesn't work on Linux. [05:55] CIA-77: node: This reverts commit 05d6da6c4af25fc417902ad1bbae9198e58ff37a. - http://bit.ly/bTrFC8 [05:56] micheil: ryah: http://gist.github.com/310846 [05:57] micheil: ryah: odd. it should have worked.. as far as I recall I used the same code as what libeio was using [05:57] ryah: micheil: that's how it works at the binding layer. i split the sync methods out for clarity [05:57] micheil: ryah: I think it'd make sense to merge them together [05:58] micheil: it'd also make it a little clearer I think.. [05:58] ryah: i like the explicitness [05:58] micheil: hmm.. okay [05:59] ryah: micheil: http://buildbot.nodejs.org:8010/waterfall [05:59] abadr has joined the channel [06:01] micheil: hmm.. looks like libeio actually uses fd's [06:02] micheil: opendir, then readdir, then some sort of weird sorting method [06:04] micheil: ryah: y'know if noop was just null, you'd save on that function creation and execution [06:04] micheil: because if people are wanting a callback, they'll provide one (or try and use deprecated api, and get an error) [06:06] micheil: I mean, yeah, you could still provide the fs.*Sync methods, although, really they aren't needed [06:06] micheil: (they mainly mean just more to document and a little extra confusion, from my pov.) [06:13] isaacs: micheil: that opens the door to calling sync functions by accident when you mean async [06:13] isaacs: sometimes, not providing a callback means that you just don't *care* about the result. [06:13] micheil: hmm.. [06:13] isaacs: i sometimes do that. like, make a best effort to remove a tmp file, but if it lingers, meh [06:13] micheil: in which case: fs.stat(fd, function(){}) [06:14] isaacs: ugh, that's awful [06:14] isaacs: noop only gets created once [06:14] micheil: hmm... true [06:14] micheil: I guess there are more important things to spend time on [06:14] isaacs: and this way, the sync functions LOOK synchronous [06:14] isaacs: instead of just looking unremarkable. [06:14] dekz has joined the channel [06:19] bentomas has joined the channel [06:20] bentomas: can anyone else verify that this produces odd results for them? http://gist.github.com/310857 [06:22] bentomas: I updated it with the results I expect and the results I am getting [06:22] bentomas: no one? [06:24] fwg: wait a sec [06:25] fwg: yep [06:26] fwg: confirm [06:26] bentomas: alright, I'll try and figure out what's going on, I think it is from this change http://github.com/ry/node/commit/3bb7ad6fea42545e9d84ba5cbef8b48e470790fc [06:26] bentomas: thanks! [06:26] fwg: np [06:30] shirro has joined the channel [06:31] mnutt has joined the channel [06:34] mnutt: I'm having an issue with fs.readFile...is there any reason that this wouldn't work? http://gist.github.com/310863 [06:37] fwg: the times, they are a-changing [06:37] micheil: mnutt: are you using the trunk / git version of node? [06:37] micheil: if so, the api has changed [06:37] fwg: no more promises (*sniff*) [06:37] micheil: it's now: fs.readFile(fd, callback); [06:37] mnutt: ah, ok [06:38] micheil: fwg: there is a library for them, ryah posted it [06:38] fwg: yea i know ;) [06:38] micheil: http://gist.github.com/310553 [06:40] mnutt: is there any way to do a wait() with the new api? [06:40] micheil: yes, it's now fs.*Sync [06:40] kennethkalmer has joined the channel [06:40] micheil: so, for example, fs.readFileSync(fd); [06:40] micheil: (iirc.) [06:42] bentomas: but that will only work for the fs module [06:43] bentomas: it is up to other libraries to write their own sync functions [06:43] bentomas: most will (should) not [06:44] brapse has joined the channel [06:48] ryah: mnutt: readFile("/etc/hosts", function (err, contents) { puts(contents); }) [06:48] mnutt: ryah: thanks [06:49] ryah: bentomas: thanks for the bug report [06:50] bentomas: ryah: fixed here: http://gist.github.com/310857#file_patch.js [06:51] ryah: ah great - better [06:54] CIA-77: node: 03Benjamin Thomas 07master * r49cd1bb 10/ (src/node.js test/mjsunit/test-process-mixin.js): (log message trimmed) [06:54] CIA-77: node: Fix bug in process.mixin where deep copies would not work at all. [06:54] CIA-77: node: Before, doing this: [06:54] CIA-77: node: var sys = require("sys"); [06:54] CIA-77: node: var obj = { [06:54] CIA-77: node: one: 1, [06:54] CIA-77: node: two: 2, [07:07] CIA-77: node: 03Ryan Dahl 07master * r05ae932 10/ (doc/api.txt src/node_file.cc test/mjsunit/test-readdir.js): Implement fs.readdirSync() - http://bit.ly/bmO11c [07:07] JoePeck: anyone have a particular JavaScript sprintf library they like? [1] http://code.google.com/p/sprintf/ [2] http://phpjs.org/functions/sprintf:522 [3] http://www.webtoolkit.info/javascript-sprintf.html [4] other? [07:08] JoePeck: I couldn't find a popular CommonJS one [07:10] micheil: ryah: where's f.sort come from? [07:10] vjain_ has joined the channel [07:27] ryah: micheil: ? [07:27] micheil: in the test [07:27] micheil: the output from the readdir is then assigned to f, which you call .sort() on [07:27] ryah: Array.prototype.sort() [07:27] micheil: hmm.. oh, okay [07:31] felixge has joined the channel [07:41] vjain_ has joined the channel [07:43] vjain_ has joined the channel [07:45] mikeal has joined the channel [07:58] _ry has joined the channel [08:06] avibryant has joined the channel [08:08] avibryant: anyone around? [08:09] fwg: avibryant: possibly [08:09] mahemoff has joined the channel [08:10] avibryant: I'm trying out --debug, using d8 as the client, but if I hit an uncaught exception, rather than generate an event for the debugger, node just dumps a stack trace and exits [08:11] fwg: um, can't really help you but i've heard d8 is buggy anyway and it's better to use the eclipse debugger [08:12] avibryant: fair enough, though which client isn't really the issue here, it's what node is doing that's the problem [08:13] bentomas has left the channel [08:27] isaacs: just updated node-couchdb so that it works with the latest node and is packageable. [08:33] teemow has joined the channel [08:36] jed_ has joined the channel [09:07] happyelephant has joined the channel [09:20] mahemoff has joined the channel [09:21] kennethkalmer has joined the channel [09:25] jan____: isaacs: you rule [09:25] isaacs: jan____: thanks! [09:26] jan____: open source, where when you wake up your code runs on latest node [09:29] isaacs: it's not that hard, actually. mostly removing code to make it work with callbacks rather than promises [09:30] jan____: I bet it is easy, but it is pretty damn convenient :) [09:36] felixge: isaacs: I'll merge later today, thanks a ton the patch looks awesome [09:36] isaacs: felixge: np. thanks for writing it in the first place :) [09:36] isaacs: my master branch should have everything working, passing all tess. [09:36] isaacs: *tests [09:37] felixge: isaacs: sweet! I'm headed out, but I'll be back on in ~20min to merge [09:37] isaacs: felixge: i'll prolly be in bed by then, but feel free to email if you find any issues [09:38] felixge: isaacs: I will, once my email is back up :| [09:38] isaacs: oh, right.. :\ [09:38] isaacs: github messages work, too [09:38] bentomas has joined the channel [09:38] bentomas: felixge: ping [09:38] felixge: I have trouble understanding how incompetent just about every web hosting / domain company seems to be :( [09:38] CIA-77: node: 03Ryan Dahl 07master * re8363ab 10/ (.gitignore Makefile): delete changelog.html on 'make docclean' - http://bit.ly/cw3bu2 [09:38] CIA-77: node: 03Ryan Dahl 07master * r6ee0bf7 10/ src/node_dns.cc : Fix dns bug - first cb arg wasn't null - http://bit.ly/bBlqpZ [09:38] CIA-77: node: 03Ryan Dahl 07master * rbb0d1e6 10/ (ChangeLog doc/api.txt doc/index.html wscript): bump version - http://bit.ly/dw0UMN [09:38] felixge: bentomas: sup? headed out [09:39] bentomas: oh, just a heads up, http://nodejs.debuggable.com/ isn't working [09:39] felixge: bentomas: yeah - domain issues. Should be resolve in the next 12h [09:39] felixge: I hope [09:39] bentomas: ahh, sorry to bother! [09:39] bentomas: night everyone! [09:39] felixge: np, sorry for the downtime. My explicit request to not change the namservers for the domain when transfering it got ignored [09:39] felixge: :( [09:40] bentomas: that's frustrating [09:40] felixge: yeah, well the domain being down sucks [09:40] felixge: but e-mail bouncing - that's the real issue [09:40] felixge: :( [09:40] bentomas: no kidding [09:40] felixge: ok g2g [09:40] felixge: brb, 20min [09:40] bentomas has left the channel [09:52] micheil: ryah_away: there's an error in the documentation for 0.1.30, I'll email across the patch [10:03] tlrobinson_ has joined the channel [10:06] felixge has joined the channel [10:06] felixge has joined the channel [10:16] mahemoff has joined the channel [10:19] ithinkihaveacat has joined the channel [10:20] xla has joined the channel [10:27] markwubben has joined the channel [10:28] xla has joined the channel [10:28] xla has left the channel [10:29] xla has joined the channel [10:36] xla has left the channel [10:37] Tim_Smart has joined the channel [10:39] xla has joined the channel [11:12] dekz has joined the channel [11:17] rolfb has joined the channel [11:18] markwubben_ has joined the channel [11:45] mahemoff has left the channel [12:03] voodootikigod_ has joined the channel [12:08] paulca has joined the channel [12:12] micheil has joined the channel [12:36] micheil has joined the channel [12:37] jespern has joined the channel [12:39] alex-desktop has joined the channel [13:20] pmuellr has joined the channel [13:22] morgan has joined the channel [13:25] gf3 has joined the channel [13:32] gianni has joined the channel [13:35] bru_ has joined the channel [13:36] felixge has joined the channel [13:36] felixge has joined the channel [13:41] markwubben has joined the channel [13:44] rolfb has joined the channel [13:47] markwubben_ has joined the channel [13:48] markwubben_ has joined the channel [13:55] dnolen has joined the channel [13:57] charlenopires has joined the channel [13:57] creationix has joined the channel [14:04] jashkenas has joined the channel [14:06] gf3 has joined the channel [14:09] gf3 has joined the channel [14:15] n8o has joined the channel [14:41] mahemoff has joined the channel [14:43] markwubben_ has joined the channel [14:44] pdelgallego has joined the channel [14:58] cloudhead has joined the channel [14:58] cloudhead: morning [15:02] davidsklar has joined the channel [15:09] atcrabtree has joined the channel [15:09] piranha has joined the channel [15:14] mnutt has joined the channel [15:17] bryanl has joined the channel [15:27] kennethkalmer has joined the channel [15:29] binary42_ has joined the channel [15:30] cmlenz has joined the channel [15:52] dnolen_ has joined the channel [16:02] dnolen has joined the channel [16:03] alexiskander has joined the channel [16:06] tisba has joined the channel [16:17] tmpvar has joined the channel [16:19] brapse has joined the channel [16:21] steadicat has joined the channel [16:26] rauchg has joined the channel [16:27] pdelgallego has joined the channel [16:37] r11t has joined the channel [16:50] happyelephant has joined the channel [16:52] gf3 has joined the channel [16:53] gf3 has joined the channel [16:54] adamv has joined the channel [17:00] creationix: finally finished my article on node v0.1.30 api changes and "Do" http://howtonode.org/do-it-fast [17:01] gwoo: nice! [17:02] creationix: now to go and update all the other articles to use the newest api [17:03] gf3: cool, nice article [17:04] bpot has joined the channel [17:05] gwoo: creationix: maybe it would make sense to add some kind of version reference to the articles, so you don't have to make it your fulltime job to update the articles as soon as the new api is released [17:06] gwoo: maybe as a sub heading under the title [17:06] creationix: gwoo: that's the plan. the articles will be tagged and the interface will allow you see versions [17:06] gwoo: awesome [17:06] creationix: I'm not going to update everyone elses articles for them [17:06] gwoo: yeah [17:07] creationix: I'd rather be writing new code [17:07] gwoo: totally [17:07] gwoo: is it on the node-blog roadmap? [17:07] gwoo: do you have any specs about how you want to do it [17:07] gwoo: ? [17:08] hyperspace has joined the channel [17:08] creationix: nothing written up. There is some on the irc logs between ryah, michaeil and me [17:08] creationix: we want as much to be git (not github) based as possible [17:09] creationix: so there will be tags that line up with node's release tags, and the site generator will know what tags exist for each article [17:09] creationix: and since git tags are movable, this will allow us to continue to fix typos of past articles if desired [17:10] joshbuddy has joined the channel [17:10] gwoo: hmm, i was thinking directories for articles in different versions [17:11] gwoo: i guess no one is really relying on the tags so it's ok if they change [17:11] gwoo: generally moving tags is a bad idea from what i understand [17:12] creationix: and I'm not sure I'm even going to bother changing many typos of past versions, they would be there for historical reasons mainly [17:12] creationix: yeah, if tags are for release versions for software, then it can cause all sorts of confusion if you move them [17:13] gwoo: does it make it harder for others to work with the repo because they are required to know more git? [17:16] tmpvar: gwoo, absolutely not. [17:17] gwoo: ok [17:24] aurynn has joined the channel [17:25] ithinkihaveacat: creationix: i originally thought the same as you, but according to ininimo, a continuable is formed by taking a function written in continuation passing style, currying it, then calling the curried function. [17:26] ithinkihaveacat: creationix: the return value is the continuable, not the curried function [17:26] ithinkihaveacat: see http://groups.google.com/group/nodejs/msg/e41f162fe750cb40 [17:26] isaacs has joined the channel [17:26] ithinkihaveacat: i think i have this straight now, it's all rather complicated and subtle... [17:27] creationix: was I inconsistent somewhere. I've been trying to call functions that return continuables "actions" and the returned curried version of itself the "continuable" [17:27] ithinkihaveacat: not sure how important this is, though [17:28] creationix: too bad javascript doesn't native currying, that would make this all simpler [17:28] creationix: of course then you could have variable args in the first half [17:29] ithinkihaveacat: i think inimino wants the return value of the curried function (i.e. the return value when the curried function is called) to be the "continuable" [17:29] isaacs: i rather like replacing promises with callbacks. [17:29] isaacs: all my code is getting a lot shorter. [17:30] creationix: ithinkihaveacat: I see it, I blatantly called functions that return continuables as continuables. Oops, fixing... [17:30] mikeal has joined the channel [17:31] ithinkihaveacat: heh, every time a new node version is released i learn git a bit better via having to patch all these libraries i'm depending on [17:32] ithinkihaveacat: creationix: yeah, i think there's another level of function call indirection before you get to a "continuable" [17:34] creationix: ithinkihaveacat: how's the new wording? [17:36] cloudhead: creationix: how would you go about using `do` with namespaced functions? [17:37] cloudhead: or dynamic functions, such as `cradle.database('foo').get()` [17:37] cloudhead: is there anything I can do in the lib, to simplify this? [17:37] creationix: cloudhead: you can call Do.convert on any object, not just the return value of require [17:38] creationix: just specify the keys that you want to convert, and it will pass everything else through as is [17:38] cloudhead: hmmm [17:38] brainproxy has joined the channel [17:38] creationix: I could add a standalone convert that just takes a function and returns a converted function if you think that would be useful too [17:38] cloudhead: I think I'm gonna have to look into exposing some parts of my lib [17:39] cloudhead: well, it might be [17:40] cloudhead: the issue is with stuff like `lib.foo().asyncFunc` [17:40] cloudhead: not sure how I'd go about making that do-compatible [17:41] qFox has joined the channel [17:41] cloudhead: cause it's not part of the public interface [17:42] isaacs: cloudhead: how about Do.convert which takes either: object, "methodstring" or function [17:42] isaacs: not that hard to snif [17:42] cloudhead: yea, that'd help [17:42] isaacs: where "methodName" could be either a string or an array of strings. [17:43] isaacs: then return either the object (or the new function, if it was that way) [17:43] isaacs: you should detect whether or not you have method names, rather than typeof (obj) == "function", though, since I might want to convert a static class method. [17:43] mattly has joined the channel [17:44] cloudhead: how would you convert stuff like: function foo () { return { async1: function() {}, async2: function () {} }} though? [17:44] isaacs: well, you'd have to convert it each time you call foo(), no way round that [17:45] cloudhead: hmm [17:45] isaacs: var f = Do.convert(foo(), ["async1", "async2"]) [17:45] creationix: well, sometimes libraries have the top object being a function with properties on it [17:45] isaacs: right, but that's different. [17:45] isaacs: like function Foo() {}; Foo.async1 = function() {...}; [17:45] ithinkihaveacat: creationix: reading ... i'm not the expert, but i think instead of 'This curried version of the function is the "continuable."' you want 'The return value of the curried function is the "continuable".' [17:46] isaacs: so then you'd have to be clever enough to do Do.convert(Foo, "async1") [17:46] ithinkihaveacat: creationix: not completely sure, we need inimino [17:46] isaacs: and know that you need to treat it object-like, since it's got a method name [17:46] cloudhead: hmm [17:46] creationix: ithinkihaveacat: agreed [17:46] isaacs: to convert a function, you'd have to just pass in the function. [17:46] cloudhead: I'm wondering if it might be in our benefit to have a way to 'specify' an async api from within libraries [17:47] cloudhead: which would facilitate custom asynch lib usage [17:47] isaacs: cloudhead: down that road leads madness. [17:47] cloudhead: hehe [17:47] isaacs: cloudhead: imo, pick one, and expect people to follow. [17:47] isaacs: they will [17:47] cloudhead: well the issue is that someone who wants to use `do` will have to know the internals of a lib, to use it [17:48] keeto has joined the channel [17:48] cloudhead: except of all functions are in a flat namespace, and it's all static [17:49] isaacs: cloudhead: then just say that you require libs to use the fn (args..., cb) style [17:49] cloudhead: yea, I guess you could include it in the docs or something [17:49] isaacs: or at least, that Do.convert only converts those kinds of functions [17:51] creationix: if we could get library authors to put a flag on async functions then it would be easy [17:51] cloudhead: ^ that's kinda what I'm proposing [17:51] creationix: exports.read = function (...){...}; exports.read.async = true [17:51] cloudhead: or just have a function which returns the specs [17:52] isaacs: i don't think it's too out of line to expect the function caller to know that it's async [17:52] stephenlb has joined the channel [17:52] cloudhead: exports.asyncAPI = ['read', ''write', ...] [17:53] creationix: I had several versions of Do.convert, and in the end, I decided to not do any magic and make the person using it specify which functions they want converted [17:53] creationix: but I'm not going to add any special functionality unless node's libraries supports it, if you could talk ryan into putting the asyncAPI flag, then I'll add it [17:54] cloudhead: yea, I'm not really sure what's the right solution yet [17:55] cloudhead: the other solution would simply be to include wrappers for different asynch libraries [17:56] isaacs: cloudhead: yeah... i'd just go with assuming that async functions look a particular way. [17:56] cloudhead: which would be the library author's job [17:56] cloudhead: isaacs: that's tough though [17:57] isaacs: is it? [17:57] cloudhead: if you're not familiar with the code yea [17:57] isaacs: we've all been assuming promises up till now. [17:57] isaacs: and promises were only used because node used them, so it was easier to keep the metaphor going. [17:57] isaacs: (at least, that's why i used them) [17:57] cloudhead: yea [17:58] isaacs: once i had to convert it to cb funcs, i just wrote all my code that way, and it wasn't much of a conversion. cut the code WAY down, too [17:58] isaacs: and a lot of promise utilities that i had were no longer needed. [17:59] cloudhead: the idea though was to strip it down so that people could use whatever they wanted [17:59] cloudhead: but it's not that easy, to 'use whatever you want' [17:59] cloudhead: it's not just a matter of plugin stuff in [18:00] cloudhead: or wrapping a modue [18:00] cloudhead: module* [18:00] felixge has joined the channel [18:00] felixge has joined the channel [18:01] felixge: http://nodejs.debuggable.com/ is back up, sorry for the downtime today [18:01] felixge: I have bad luck with domains and DNS :( [18:01] cloudhead: I personally don't like node's new api, I prefer the continuable style, but it's not gonna be straightforward to use it wherever I want [18:01] cloudhead: felixge: have you converted your couchdb lib yet, to the new api? [18:01] isaacs: cloudhead: i did. [18:02] cloudhead: oh k [18:02] isaacs: felixge: you get the error sorted? it's working for me [18:02] felixge: isaacs: I get HTTP/1.1 405 Method Not Allowed [18:02] felixge: isaacs: which is what I expect for POST to /_uuid [18:02] isaacs: felixge: but does it also write json? [18:02] felixge: but the test case seems wrong [18:02] felixge: no JSON [18:02] felixge: actually [18:02] isaacs: ah, see, that's weird. [18:02] isaacs: that's why it's failing teh test. [18:03] felixge: what couch version are you on? [18:03] isaacs: you should get a response body with {"error":"method_not_allowed","reason":"Only GET allowed"} [18:03] felixge: oh shoot [18:03] felixge: I have an old version running [18:03] isaacs: couchdb - Apache CouchDB 0.10.1 [18:03] felixge: 0.9 -> fail [18:03] felixge: let me try with a newer one [18:03] isaacs: aha [18:03] isaacs: maybe the lib should support 0.9, though? [18:03] lifo has joined the channel [18:03] felixge: isaacs: meh, not really [18:04] isaacs: ok, if you say so :) [18:04] felixge: isaacs: I mean I would accept patches for old versions, sure [18:04] isaacs: i'mok with bleeding edge (clearly) [18:04] felixge: isaacs: but for a pre-1.0 project I think having only cutting edge support is fine [18:04] kriszyp has joined the channel [18:04] felixge: I mean if you use Node + Couch you are clearly not maintaining a legacy system [18:04] isaacs: felixge: exactly [18:04] felixge: ;) [18:05] felixge: isaacs: ok, tests passing now [18:05] isaacs: hooray!! [18:05] felixge: isaacs: merged & pushed [18:06] felixge: isaacs: thank you so much for the help! [18:06] isaacs: mikeal is updating his code to use it, so i'm sure that'll expose some more problems if there are any [18:06] isaacs: felixge: np, like i said, thanks for writing it in the first place. converting to the new api was pretty easy [18:06] felixge: isaacs: np : ) [18:06] edspencer has joined the channel [18:07] keeto has joined the channel [18:08] felixge: I really want to do a full AWS client for all of their services [18:08] felixge: just need to find the time :) [18:08] abadr has joined the channel [18:08] steadicat has joined the channel [18:09] jan____: felixge: node-aws? [18:09] RayMorgan has joined the channel [18:09] inimino: ACTION is back [18:09] felixge: jan____: yes [18:10] felixge: jan____: I already have some initial code, doing signatures and basic requests. But it's a big big task :) [18:10] felixge: I'm kinda waiting for isaacs to say his SAX parser is ready :) [18:10] isaacs: felixge: it's ready. go nuts. post bugs if you find them [18:11] isaacs: the api hasn't changed in a while, though. tmpvar is using it, i believe, and a few other folks who have pinged me about it [18:11] isaacs: (mostly cuz something was broken) [18:11] isaacs: but that's getting less and less frequent [18:12] inimino: huh, I just got an unsolicited DCC send [18:12] inimino: at least I think that's what it is [18:12] inimino: anybody else getting these? [18:12] felixge: isaacs: That's pretty fantastic! Now I lack an excuse for continuing :) [18:12] felixge: * for now [18:12] inimino: ACTION considers asking in a more appropriate channel, like #freenode [18:12] felixge: * for not [18:13] isaacs: felixge: hehe [18:13] ryah: UID PID PPID C SZ RSS PSR STIME TTY TIME CMD [18:13] ryah: ryan 29366 4004 0 10499 5828 0 00:41 pts/2 00:00:08 ../node/node server.js [18:13] ryah: ^^ [18:13] eikke has joined the channel [18:13] ryah: the memory usage is *a lot* better [18:14] ryah: i want to see what happens when plurk upgrades to 0.1.30 [18:15] jan____: felixge: awesome :) [18:15] felixge: ryah: :) [18:19] cmlenz has joined the channel [18:19] ashb: what are the HTTP response codes that dont need a body [18:19] ashb: 300..399, 206 and 1something? [18:19] cmlenz has joined the channel [18:21] inimino: ashb: 300 Multiple Choices takes a body [18:21] inimino: 100 Continue doesn't (and isn't really a normal response) [18:22] inimino: but don't rely on me to get this right :) [18:22] ashb: oh there are more [18:22] ashb: 204 and 205 [18:22] ashb: 204 No Content, 205 REset Content [18:23] inimino: 201 Created [18:23] inimino: probably others... [18:24] ashb: quite a lot in fact [18:27] inimino: creationix: "returns a curried version of itself" I would say actually, it is a partially applied version of itself... the currying is what you do by writing the function in the function f(a){return function(b){... pattern [18:27] okito has joined the channel [18:28] adamv: Maybe I'll apply a curry to myself for lunch. [18:28] inimino: "to curry" is to make it possible to partially apply a function, the partial application is what happens when you call an 'action' [18:28] sahnlam has joined the channel [18:28] ashb: 418 is create [18:28] ashb: 418 I'm a teapot [18:28] ashb: The HTCPCP server is a teapot.[7] The responding entity MAY be short and stout.[7] [18:29] inimino: :) [18:29] ashb: *is great [18:29] ashb: so 301..399, 100, 201, 204 and 205 it looks like [18:33] ryah: ashb: do any need a body? [18:33] ashb: ryah: 'need' no, but almost always do [18:35] technoweenie has joined the channel [18:35] creationix: inimino: thanks [18:35] mikeal has joined the channel [18:38] creationix: inimino: so is the continuable the original curried function or the partially applied version of it? [18:40] inimino: creationix: it's the partially applied function that's returned [18:41] creationix: ok, so it's ok to call the original function an "action" [18:41] creationix: for just async function that uses continuables? [18:41] inimino: it's a "continuable" because the only thing you can do with it is pass a continuation to it, which "continues" doing whatever it was going to do (read a file or whatever) [18:41] inimino: sure, action, or anything [18:42] creationix: hmm, how about just calling it an async function that returns a continuable? [18:42] inimino: (or just "continuable-returning function) [18:42] inimino: yeah [18:42] creationix: cool, time to update the docs [18:45] dnolen has joined the channel [18:46] jcrosby has joined the channel [18:49] RayMorgan has joined the channel [18:49] creationix: inimino: see what you think of the explanation now http://howtonode.org/do-it-fast [18:53] bentomas has joined the channel [18:54] mattly has joined the channel [18:58] ryah: i think we should do an errno exception class thing [18:58] ryah: like in ruby [18:59] ryah: at the moment fs passes Error instances with e.errno set to the code [18:59] ryah: creationix has "if (err.message === 'No such file or directory') {" in his code [18:59] ryah: this really shouldn't be done [19:00] joshbuddy has joined the channel [19:00] creationix: ryah: true, should I use another example that doesn't promote bad habits then? [19:00] ryah: it should really be "if (err instanceof Enoent)" [19:00] ryah: or something [19:01] creationix: that works [19:01] ryah: you can't do that now - it would be nice though [19:02] ryah: err.errno == process.ENOENT is the current way [19:03] creationix: yeah, I was just checking, it's still an instance of Error [19:05] xla has joined the channel [19:05] abadr has joined the channel [19:06] ryah: btw - you should use process.nextTick() instead of setTimeout(fn, 0) [19:06] ryah: it's much faster [19:07] ryah: creationix: --^ [19:07] creationix: ok, I thought it was just an alias [19:10] felixge: creationix: could you use camelCase for function names? [19:10] creationix: sure, I keep forgetting that's the standard in node [19:11] felixge: anyway, cool stuff :) [19:11] abadr has joined the channel [19:11] felixge: zimbatm: yt? [19:11] felixge: zimbatm: are you still working on module code? [19:12] inimino: creationix: looks good [19:13] creationix: inimino: thanks [19:13] inimino: one nit... [19:13] inimino: "partially applied version of the inner function" might be a little confusing... [19:14] maritz has joined the channel [19:15] inimino: the only thing it's the partially-applied version of is the conceptual function taking all the arguments and the callbacks, which doesn't appear in the code... so maybe just say "... is the function returned by the outer function" or something [19:16] creationix: good point [19:16] creationix: less wordy too [19:16] inimino: yeah [19:19] ithinkihaveacat_ has joined the channel [19:20] RayMorgan has joined the channel [19:27] aho has joined the channel [19:27] sudoer has joined the channel [19:29] brandon_beacher has joined the channel [19:30] voodootikigod_ has joined the channel [19:31] creationix: felixge: changed, it's going to take me a while to get used to camelCase [19:32] felixge: creationix: you coming from ruby? [19:32] creationix: somewhat [19:35] bentomas: felixge: for some reason chrome won't open up the log files (it downloads them instead) did you change the content-type or something? [19:35] bentomas: *reaches at straws* [19:36] felixge: bentomas: it's very weird [19:36] felixge: bentomas: only some files are affected [19:36] jan____ has joined the channel [19:36] jan____ has joined the channel [19:37] felixge: bentomas: do you get it for yesterdays log? [19:37] felixge: I'm really not sure what's going on, and if its lighttpd or chrome to blame [19:37] bentomas: yesterday's log works fine [19:41] felixge: bentomas: I have no idea, I can't see anything in the http traffic that would explain chrome's behavior [19:41] felixge: bentomas: but I see the same issue [19:41] bryanl has joined the channel [19:42] bentomas: hmmm [19:46] okito: hi - I thought the new node basically made all the fs modules work sync or async depending on whether you pass a callback or not [19:46] okito: is that wrong? [19:47] okito: readFile() does not seem to work that way [19:49] bentomas: okito: there is an internal fs module that works that way (in process.fs) [19:49] felixge: okito: no, I think it doesn't conform yet. [19:50] felixge: bentomas: the real 'fs' module now works this way too, but there seem to be a few exceptions [19:50] bentomas: ahh [19:50] bentomas: the fs module currently provides synchronous methods by just appending Sync to the file name: readFileSync [19:50] okito: is the intent to get there [19:50] okito: I found the *Sync names [19:50] okito: but this seems to make for a inconsistent API [19:50] okito: fs.open() for example [19:51] okito: appears to look for a callback and go sync/async depending [19:51] okito: [since it is a passthrough to process.fs.open which works like this] [19:51] abadr has joined the channel [19:55] felixge: I guess I misread [19:55] felixge: the aysnc fs methods currently ignore a missing callback, but that does not mean they go sync [19:56] felixge: only the low-level process.fs stuff does [19:56] felixge: and I think that's how it should stay, it would be weird if things just went sync without explicitly asking for it [19:57] charlenopires has joined the channel [19:57] felixge: okito: so no, readFile will stay as it is I think [19:57] okito: ah [19:57] okito: too bad [19:58] okito: that makes for a very clean API [20:03] kriskowal has joined the channel [20:07] bentomas: felixge: the logs thing is so weird, the headers are all exactly the same. chrome appears to have decided randomly which files should be downloaded [20:09] felixge: bentomas: Early signs of google going evil? :) [20:09] felixge: Hidden messages in the Content-Length header? [20:09] felixge: Life in HTTP? [20:09] felixge: :) [20:09] bentomas: :) [20:09] felixge: voodootikigod: yt? [20:14] bentomas has left the channel [20:16] gwoo has joined the channel [20:19] paulca has joined the channel [20:21] CIA-77 has joined the channel [20:21] ithinkihaveacat_: bentomas: there's some non-ascii characters in the few characters of the latest log, maybe chrome is doing some weird heuristics and guessing that the file is binary?? [20:25] ithinkihaveacat_: hrm if there's no charset, clients are supposed to assume ISO-8859-1, wonder if it really is ISO-8859-1 [20:26] paulca has joined the channel [20:26] ithinkihaveacat_: i think it's actually UTF8 [20:31] isaacs: ithinkihaveacat: if the charset isn't specified, then clients kinda just do whatever, i've found. [20:31] isaacs: ithinkihaveacat_: some assume utf8, some assume ISO-8859-1 [20:31] isaacs: ithinkihaveacat_: not sure what the "correct" way is. [20:33] joshbuddy has joined the channel [20:33] ithinkihaveacat_: isaacs: i guess you're kinda asking for it if you don't give a charset [20:34] ithinkihaveacat_: hrm, 2010-02-22.txt on my server with Content-Type: text/plain; charset=UTF-8 still triggers the download, so either it's not UTF-8 either or that theory is completely wrong [20:34] isaacs has joined the channel [20:36] ryah: isaacs: http://pastie.org/837492 [20:37] ryah: seems like a fine technique for middleware [20:37] isaacs: ryah: yep. [20:37] Tim_Smart has joined the channel [20:37] isaacs: you just need SOME kind of response so that it knows whether or not it was handled at all, or modified/replaced somehow. [20:37] isaacs: like i mentioned before, a callstack is one perfectly ok way to chain middleware, but it's not the only way. [20:38] isaacs: btw, what's faye? cool name. [20:40] ryah: http://github.com/jcoglan/faye [20:41] mattly has joined the channel [20:43] bentomas has joined the channel [20:44] bentomas: kriszyp: you around? [20:44] isaacs: neat [20:47] brapse has joined the channel [20:48] mikeal: is there any way to add an event listener to all events on an EventEmitter [20:50] mikeal: i'm trying to debug a weird issue, I'm using client.request() and the response event is never firing [20:51] mikeal: and there aren't any other documented events for either client or response [20:51] mikeal: sorry, request [20:51] mikeal: but something is breaking and I don't have an visibility in to what it is [20:51] kriszyp: bentomas: for just a few minutes [20:52] bentomas: kriszyp: is the only way to use node api's with your node-promise library the convertNodeAsyncFunction? [20:52] drostie has joined the channel [20:52] bentomas: I don't want to have to wrap all the libraries I use, but want to be able to convert functions that take a callback to promises on the fly [20:52] bentomas: is this possible? [20:52] isaacs_home has joined the channel [20:52] kriszyp: hmm, I can add something like that... [20:53] stephenlb: ACTION new favorite command: tail -f | grep --color -i error [20:53] bentomas: yeah, I was just adding one myself: what do you think of calling it "execute" [20:53] kriszyp: do you want it to be of the form execute(someNodeFunction, arg1, arg2); [20:53] bentomas: promise.execute(fs.open, filename).then(function(fd) { // do something }); [20:53] bentomas: yeah [20:53] kriszyp: ok [20:53] kriszyp: I'll add that [20:53] bentomas: sweet! [20:54] kriszyp: although first I need to drive home from my in-laws :) [20:54] bentomas: hey, I was doing that last night! have fun [20:54] kriszyp: it'll take about 7 hrs :/ [20:54] bentomas: ahhh, I think I'll write one up myself then. I'll send you a patch and you can see if you like it. if not you can write one yourself [20:54] kriszyp: ok, cool [20:55] kriszyp: sorry I am not more helpful [20:55] kriszyp: we are just about to head out the door [20:55] bentomas: no worries, it isn't that hard. I just wasn't sure if it was something you had already or were thinking about adding [20:55] kriszyp: I think it is a great idea [20:55] kriszyp: be glad to have the addition [20:58] kennethkalmer has joined the channel [20:59] happyelephant has joined the channel [20:59] isaacs_home has joined the channel [21:00] jan____: ryah: isaacs: others bayers: Friday party at the Couchio offices: http://jan.io/6wzJ [21:03] brainproxy has joined the channel [21:03] bentomas: jan____: next time you should throw the party in Denver so I can come :P [21:03] jan____: right, denver :) [21:04] gwoo: ha [21:04] brainproxy has joined the channel [21:06] hassox has joined the channel [21:06] kriszyp: I forgot, bentomas, you are in denver, I am actually in casper right now, closer to you than my home in slc [21:08] bentomas: I had to look up where casper was, yeah, a lot closer now! [21:08] eikke has joined the channel [21:08] kriszyp: heh, yeah casper is kind of the middle of nowhere :) [21:08] kriszyp: as is most of WY [21:13] ithinkihaveacat_: isaacs: any thoughts on what to do about ejsgi and promises? [21:13] isaacs: ithinkihaveacat: yeah, not sure bout that [21:14] isaacs: i'm quite happy to just get rid of promises. [21:14] isaacs: and, for that matter, spend more effort on making stuff that works right on node directly instead of requiring lots of specs and discussion and whatnot. [21:14] isaacs: seems like it'd be best, if anything, to use a cb/continuation kinda deal. [21:15] isaacs: where your app gets something like function myApp (req, resp, cb) and you call cb() when you're done, which might be right away [21:17] ithinkihaveacat_: cb(req, resp) when you're done? [21:18] ithinkihaveacat_: it becomes very close to node's native http api then [21:21] okito has joined the channel [21:22] isaacs: ithinkihaveacat_: that's the idea. [21:22] isaacs: to the point where it's not even a "thing" ya know? [21:28] CIA-77: node: 03Ryan Dahl 07master * rb8dee2e 10/ lib/url.js : camel case variables in url module - http://bit.ly/aiUTNN [21:28] CIA-77: node: 03Ryan Dahl 07master * r46ebaa0 10/ (src/node.cc src/node_child_process.cc): Encoding 0 length data, returns '' instead of null - http://bit.ly/aaapzi [21:28] CIA-77: node: 03Jérémy Lal 07master * rffb4b47 10/ src/node.cc : Fix for when EV_MULTIPLICITY=1 - http://bit.ly/99zkeV [21:30] ithinkihaveacat_: isaacs: yeah, totally could come to that ;-) [21:39] hassox has joined the channel [21:46] dandean has joined the channel [21:51] dandean: total newbie to node.js... what's the best way to detect the node.js environment *before* calling `require`? [21:51] technoweenie: the environment? [21:51] dandean: to know if my script is running server-side or client side. [21:52] technoweenie: look for some node-specific feature or function? [21:52] deanlandolt: typeof require !== "undefined" should work [21:52] technoweenie: yea like that :) [21:52] deanlandolt: err rather, typeof require === "function" to be more precise [21:53] voodootikigod_ has joined the channel [21:53] dandean: that seems like it infers to much... require could easily be defined to load client-side scripts. [21:53] drostie has joined the channel [21:54] technoweenie: so dont define it [21:54] technoweenie: do any common client side frameworks use 'require' ? [21:55] dandean: I think most of the big ones namespace it (such as dojo), but I was hoping for a more concrete form of detection. [21:56] deanlandolt: dojo uses dojo.require [21:56] deanlandolt: but that's fine...just sniff for other node specific free-vars [21:56] dandean: yeah, that's what I was saying -- it's namespaced. [21:56] deanlandolt: i don't know if there's an "official" way to ducktest node but it should be pretty safe to just look for things like process and require [21:56] dandean: ok -- that's what I was thinking I'd have to do. Thanks for the input! [21:57] deanlandolt: dandean: yeah, sorry, hadn't read that far before i replied :D [21:57] dandean: np! [21:57] deanlandolt: you could test for the process obj and poke at it to make sure it looks nodish plus test typeof require...that should be pretty much a lock [21:58] dandean: deanlandolt: good idea, I'll try that. [22:02] mikeal: are you dandean from Seattle? [22:03] dandean: mikeal: I happen to be sitting on the 8th floor of a building in Seattle right now. You? [22:03] mikeal: i'm in Oakland [22:03] mikeal: but i know you [22:03] dandean: you do? [22:03] mikeal: i'm Jeff DeGolier's step-brother [22:03] dandean: no shit! [22:03] dandean: that is awesome! [22:03] mikeal: hehe [22:03] dandean: hi! [22:03] mikeal: hiya [22:04] dandean: That camera I got from you is dead. It was great while it lasted. [22:04] mikeal: didn't know you were doing node stuff [22:04] mikeal: oh wow, i forgot about that [22:04] mikeal: i had the newer one for a while and then my littler brother inherited it [22:04] dandean: So far, I'm just messing around with it. I mostly work with Prototype in a client-side environment. [22:05] mikeal: cool [22:05] mikeal: i was doing a lot of Python stuff while I was at Mozilla [22:05] mikeal: and when I started my new job i quickly started moving everything to node [22:05] dandean: I didn't know you were at Mozilla. Where are you now? [22:05] dandean: Here's a bunch of my crap: http://github.com/dandean/ [22:06] mikeal: i was at Mozilla for a few years, started at Relaxed / Couch.io at the beginning of the year [22:06] mikeal: http://blog.couch.io/ [22:06] mikeal: this is me http://github.com/mikeal [22:07] mikeal: felixge: i'm gonna send you a pull request [22:07] dandean: That's awesome! I've been following the couch stuff. I read that blog post with you in it but didn't connect the dots (http://blog.couch.io/) [22:07] mikeal: i updated node-couchdb to work with a bunch of the changes over the last few weeks and I also pulled in a huge set of commits from isaacs to make it work without Promises [22:08] dandean: mikeal: this is seriously freaky. [22:08] mikeal: hahaha [22:08] mikeal: yeah, i actually noticed you sometime last week when Dion replied to something you said on twitter [22:08] dandean: I had no idea you even worked with this kind of stuff. last I knew you were at Real, I think... [22:08] mikeal: and i was like "that can't be the same dandean" [22:09] mikeal: yeah, i left there and moved down to the bay, worked OSAF on the Chandler project for a few years, then Mozilla for a few years, now this :) [22:09] mahemoff has joined the channel [22:11] mikeal: dandean: next time you're in the bay you should send me a message :) [22:12] dandean: that sounds fun -- a lot of change. I just added you to gtalk... I am going to bug the shit out of you with node questions! [22:12] mikeal: we have a pretty open door policy in the couch.io office too so you're welcome to come by here and hang out with fun CouchDB people whenever :) [22:12] mikeal: haha [22:12] dandean: mikeal: sounds wonderful. thanks! [22:12] mikeal: np [22:13] bryanl has joined the channel [22:15] paulca has joined the channel [22:15] dandean: [22:16] mikeal: isaacs: i think I'm done with this registry [22:16] sztanphet has joined the channel [22:16] kriskowal_ has joined the channel [22:16] isaacs: mikeal: that is so hawt. [22:17] mikeal: so like, it requiers CouchDB trunk as of last friday :) [22:17] isaacs: i'm not allowed to code until i'm done cleaning my house. but if you wanna send me something, i'll check it out tonight or tomorrow. [22:17] isaacs: bleeding edges are perfectly ok [22:17] mikeal: i'm using some seriously new features :) [22:17] seanbrant has joined the channel [22:17] isaacs: well, that's why i was excited to get you to do it ;) [22:17] mikeal: do you want me to just put together some simple install docs you can run it locally [22:17] kriskowal has joined the channel [22:17] isaacs: sure, that'll work [22:17] isaacs: just document what's required to get it up and running from square 1 [22:18] mikeal: ok, I'll just write in the README and push it [22:18] brainproxy has joined the channel [22:18] isaacs: once i get it running locally, i'll fire up packages.izs.me and maybe ping ashb to put it on packag.es [22:18] mikeal: awesome [22:18] mikeal: i don't have the user validation and semantics ready yet [22:18] isaacs: ok [22:18] isaacs: that's fine [22:19] mikeal: that's the last missing piece, right now it's just anyone can create/edit any package [22:19] isaacs: yikes [22:19] isaacs: ok, so maybe i won't make it public just yet ;) [22:19] mikeal: hehe, yeah, you can only get away with no security for so long [22:20] mikeal: i figured this would make testing easier tho [22:20] isaacs: totally [22:20] isaacs: at least it unblocks me to start on dependency resolution and package activation [22:20] mikeal: the users and auth stuff is already built in to couchdb, so it's fairly trivial to enable [22:20] isaacs: few bikesheds in there, but it's mostly pretty straightforward [22:20] isaacs: right [22:21] seanbrant: i can't seem to locate docs on how to provide your own modules and including them with require..? [22:22] mikeal: seanbrant: you just copy them in and do ./path/to or ../path/to [22:22] mikeal: there isn't a packaging and distribution system for node yet [22:22] mikeal: that's what me and isaacs are working on right now :) [22:23] seanbrant: nice [22:23] seanbrant: when you say copy them in, in where? with the node package? [22:23] mikeal: you can do require("./package") to refer to a package that is relative to the code importing [22:24] mikeal: and you can do "../../path/to/package" as well [22:24] seanbrant: this is my first time playing with node, and can't find anything online that talks about doing anything other than single scripts [22:24] mikeal: here is an example http://github.com/mikeal/node-couchdb/blob/master/lib/couchdb.js#L9 [22:25] mikeal: so how it refers to the ./dep/mime packae [22:25] isaacs: seanbrant: the thing we're working on will let you install a package "foo", and then do require("foo") [22:25] mikeal: that's in a directory at the same level [22:25] isaacs: but yeah, like mikeal said, for most things, it's easier at this point to just pull the requirements into your package and include them with a relative path. [22:25] seanbrant: very cool, yeah i understand it now.. thanks for the help [22:26] mikeal: np [22:26] bentomas: seanbrant: you can also put things in ~/.node_libraries and they'll be available [22:27] bentomas: that is my preference for things I use often [22:27] seanbrant: bentomas: sort of like the PYTHON_PATH? [22:27] bentomas: exactly [22:27] bentomas: if you edit $NODE_PATH you can add other directories [22:27] seanbrant: bentomas: yeah that seems cleaner [22:28] brainproxy has joined the channel [22:28] mikeal: I actually mostly do "../../../package/lib/pkg" [22:28] mikeal: so that it pulls them out of the relative git checkout :) [22:29] mikeal: stuff is changing so quickly i really don't want to deal with stale packages [22:29] ollie has joined the channel [22:29] seanbrant: mikeal: yeah thats true.. i was following some old posts that used res.sendBody :) [22:31] mikeal: the release yesterday removed Promises [22:32] bentomas: well, you can put the git checkout in ~/.node_libraries if you want to do that [22:32] bentomas: I don't like that with relative requires you can't move around as easily (unless you move the whole structure [22:32] bentomas: ) [22:33] mikeal: i like having all my git checkouts in ~/Documents/git [22:33] bentomas: It is actually a complaint of mine that most node libraries aren't written to be able to be dropped in ~/.node_libraries [22:33] bentomas: more projects need to use the index.js scheme so the directory name is used as the require [22:33] bentomas: but if npm gets along farther (and installs into ~/.node_libraries) this will solve that problem [22:34] brainproxy has joined the channel [22:35] mikeal: that's what I'm hoping as well [22:35] bentomas: mikeal: what if you send your code to someone else. then those relative requires break [22:35] markwubben has joined the channel [22:35] mikeal: i also would like a dev mode, where i can have the package linked to a git checkout from .node-libraries [22:35] bentomas: yeah, definitely [22:35] mikeal: bentomas: oh yeah, the code totally breaks right now when it gets sent around :) [22:36] seanbrant has left the channel [22:41] bentomas has left the channel [22:49] markwubben_ has joined the channel [22:50] mikeal: isaacs: when you get a chance I documented install and the API, http://github.com/mikeal/js-registry/blob/master/README.md , please checkout the API and make sure it's all the same as what we agreed upon [22:54] tlrobinson_ has joined the channel [22:59] isaacs: mikeal: i'm perfectly ok with changing the API if you see fit to. [23:00] mikeal: it's pretty much the same [23:00] isaacs: and it'll probably have to change as i uncover edge cases as i try to actually use it [23:00] mikeal: grrrrrr, NaN is just broken [23:00] isaacs: hahaha, broken how? [23:00] Tim_Smart: NaN has never worked as expected [23:00] isaacs: it's kinda supposed to be a poison value [23:00] isaacs: but yeah, it's odd [23:00] mikeal: typeof(parseInt("stable"[0])) == number [23:00] isaacs: oh, no [23:01] mikeal: yeah, typeof NaN is number [23:01] mikeal: that's f'd up [23:01] isaacs: you want isNaN(parseInt(blerg)) [23:01] okito has left the channel [23:01] isaacs: well, what other type would it be? [23:01] mikeal: isNaN is throwing an exception [23:01] mikeal: this is in spidermonkey tho [23:01] deanlandolt: isaacs: you don't want isNaN [23:01] deanlandolt: don't use isNaN...ever ever ever [23:02] isaacs: deanlandolt: why not? [23:02] deanlandolt: just compare to itself to check for isNaN (isNaN is the only thing that will return false) [23:02] deanlandolt: x !== x is true for isNaN and false for everything else [23:02] isaacs: mikeal: this works for me in spidermonkey? isNaN(parseInt("stable"[0], 10)) [23:02] deanlandolt: isaacs: cause mark miller says so ;) [23:02] mikeal: now it works….. [23:02] isaacs: deanlandolt: not sure that's a good enough reason [23:02] mikeal: weird [23:03] isaacs: deanlandolt: crockford says not to use ternaries, and i still do. [23:03] deanlandolt: actually because isNaN can return true for things that aren't isNaN [23:03] mikeal: so it's working now [23:03] isaacs: isNaN will return true for any non-numeric thing [23:03] mikeal: NaN != NaN [23:03] mikeal: that's my favorite [23:03] isaacs: isNaN means "if you coerce this to a Number, it'll be NaN" [23:03] mrd`: isaacs: Are you sure? isNaN("") is false. [23:03] mikeal: this was written by a crazy person [23:04] isaacs: js> Number("") [23:04] gbot2: isaacs: 0 [23:04] isaacs: compare to: [23:04] deanlandolt: isNaN("") is false, isNaN("a") is true [23:04] isaacs: js> Number("hi, there") [23:04] gbot2: isaacs: NaN [23:04] isaacs: deanlandolt: yeah, because "" coerces to 0 [23:04] mrd`: deanlandolt: Ah. [23:04] isaacs: isNaN says, "If, upon coercing the arg to a number, NaN is returned, then return true" [23:04] deanlandolt: there are other reasons not to use isNaN [23:04] mrd`: (Pretend my last two messages were sensibly directed to people.) [23:05] isaacs: deanlandolt: not convinced ^_^ [23:05] isaacs: is it slower? [23:05] bentomas has joined the channel [23:05] bentomas: felixge: ping [23:05] deanlandolt: i'll go back and find mark miller's email...i think it was in one of the unit testing threads [23:05] mrd`: isaacs: I think the point is if you want to test specifically for NaN, rather than a value than can be coerced to NaN. [23:05] deanlandolt: but he had a couple of reasons that scared the crap out of me [23:05] isaacs: mrd`: sure, but who ever wants to do that? [23:05] isaacs: javascript is all about type coercion [23:05] deanlandolt: isaacs: for unit testing ;) [23:05] isaacs: coercible into NaN is the same as == NaN [23:06] isaacs: (and NOT the same as === NaN) [23:06] mrd`: isaacs: Coercion is evil. [23:06] deanlandolt: well, a lot of people say don't ever use == [23:06] isaacs: mrd`: you're just saying mean things about JavaScript now. [23:06] deanlandolt: (i use e4x quite a bit which breaks ===...yay) [23:06] isaacs: that's why, if you really want to make sure it's NaN without coercion, you can use typeof(foo) === "number" && isNaN(foo) [23:06] rauchg has joined the channel [23:06] bentomas: doesn't anyone know the state of the require code currently? [23:06] isaacs: but usually, if you're gonna use foo as a number, you want to coerce "0" into 0 anyhow [23:07] mikeal: ok [23:07] deanlandolt: isaacs: there are edge cases IIRC...but there's no edge cases for !!(foo !== foo) === true [23:07] mikeal: all done and pushed and working and tested [23:07] bentomas: i know it was changing a lot a week or so ago, but has it stabilized some? [23:07] mikeal: isaacs: that should get you moving along [23:07] mikeal: ping me when you need users and validation [23:07] isaacs: mikeal: sweet! [23:07] isaacs: mikeal: ping. [23:07] mikeal: i'm gonna write some proxy code :) [23:07] isaacs: :P [23:07] mikeal: haha [23:07] isaacs: bentomas: it should work fine now. worksforme. [23:07] mikeal: i'm going to wait at least till wednesday [23:08] mikeal: then jchris will be here to explain the user system to me [23:08] isaacs: mikeal: sure, whenever [23:08] mikeal: it is, of course, not documented [23:08] isaacs: kewl [23:08] mikeal: we should hire someone just to write docs [23:08] isaacs: in the meantime, i'll just use felixge's node-couchdb or something to talk to it. [23:08] stephenlb has joined the channel [23:08] deanlandolt: mikeal: my company did that...we still don't have worthwhile docs :_/ [23:09] mikeal: isaacs: you should use node-couchdb to talk to the registry [23:09] mikeal: because it implements it's own HTTP API [23:09] isaacs: anyway, re: isNaN, you can do something pretty easily like this: function isExactlyNaN (n) { return n !== n } [23:09] mikeal: i uses the _rewrite stuff in couchdb to map the API to _show and _update functions [23:09] isaacs: mikeal: yeah, i figured [23:10] isaacs: mikeal: that's the best way to do it, i think [23:10] mikeal: definitely [23:10] mikeal: ok, time to write a proxy [23:10] isaacs: have fun :) [23:10] mikeal: i will! [23:10] bentomas has left the channel [23:14] joshbuddy has joined the channel [23:14] joshbuddy has joined the channel [23:21] gf3 has joined the channel [23:23] bryanl has joined the channel [23:24] nodejs_v8 has joined the channel [23:24] nodejs_v8 has joined the channel [23:25] Tim_Smart: nodejs_v8: "testing bot with new node.js" [23:25] nodejs_v8: Tim_Smart: [23:25] Tim_Smart: Hmm time to go to #botwar :D [23:25] jashkenas has joined the channel [23:26] gf3: Tim_Smart: nice! [23:27] Tim_Smart: gf3: I have had that bot for a while :p [23:27] gf3: ahh [23:28] gf3: I suppose I should pull the latest changes as well [23:29] Tim_Smart: from? [23:29] Tim_Smart: ah node, nevermind [23:29] aguynamedben has joined the channel [23:38] nodejs_v8 has joined the channel [23:39] Tim_Smart: nodejs_v8: Object.getPropertyNames(this) [23:39] nodejs_v8: Tim_Smart: Exception: TypeError: Object function Object() { [native code] } has no method 'getPropertyNames' [23:40] Tim_Smart: nodejs_v8: Object.getOwnPropertyNames(this) [23:40] nodejs_v8: Tim_Smart: ["TypeError", "decodeURI", "String", "Function", "Number", "undefined", "parseFloat", "encodeURI", "encodeURIComponent", "ReferenceError", "RegExp", "escape", "Array", "isNaN", "URIError", "unescape", "RangeError", "Date", "Infinity", "decodeURIComponent", "EvalError", "Math", "Boolean", "Error", "SyntaxError", "Object", "NaN", "eval", "parseInt", "execScript", "JSON", "isFinite"] [23:40] Tim_Smart: Just had to re-compile the eval addon :D [23:43] aurynn has joined the channel [23:52] aguynamedben has joined the channel [23:53] nodejs_v8 has joined the channel [23:59] rtomayko has joined the channel [23:59] Tim_Smart: ryah: Have you looked at the issue of more than one of the same request header being sent? [23:59] Tim_Smart: for http