[00:06] mikeal has joined the channel [00:07] brianmario has joined the channel [00:10] Tim_Smart1 has joined the channel [00:10] Tim_Smart has joined the channel [00:13] mikeal: isaacs: are you doing node knockout? [00:13] isaacs: mikeal: no, i'm gonna be judging and available to support npm [00:13] mikeal: i see [00:13] isaacs: mikeal: i'd like to point out, though, i CAN be bribed. [00:13] mikeal: haha [00:13] isaacs: mikeal: disTURbingly easily. [00:13] mikeal: i will bring whisky [00:14] isaacs: mikeal: like, having me judge these things kinda means that the prize is just gonna go to the highest bidder. [00:14] isaacs: you could walk away a winner if you can draw a sort-of circle on a whiteboard, if you pay enough. [00:15] Tim_Smart has joined the channel [00:16] morganallen has joined the channel [00:20] gf3 has joined the channel [00:21] Tim_Smart1 has joined the channel [00:23] isaacs: mikeal: where will you bring this whiskey? i think that yahoo might be offering up some space [00:24] mikeal: ryah said he was going to try and get some joyent space [00:24] isaacs: (jk, btw, i'm not very bribable.) [00:29] JAAulde has joined the channel [00:29] zaach has joined the channel [00:33] dandean has joined the channel [00:35] Tim_Smart has joined the channel [00:35] grantmichaels has joined the channel [00:37] gerad: mkeal: yeah, we're working on joyent space [00:38] gerad: mikeal: we also might have a silicon valley location [00:38] softdrink has joined the channel [00:38] gerad: for the people who don't want to come up to SF [00:38] gerad: and want to participate in person somewhere [00:38] mikeal: i'm not going to the valley :) [00:39] ryah: i think the joyent option is going to be great [00:39] ryah: assuming the building complies [00:39] gerad: yeah, the joyent space is super nice [00:41] ryah: just thinking outloud.. we should have tunnels to crawl through [00:41] ryah: tunnels are fun :) [00:42] visnup: http://lazeroids.com.s3.amazonaws.com/npm.png [00:42] visnup: http://lazeroids.com.s3.amazonaws.com/npm-box.png [00:42] visnup: isaacs: I took some liberty with the box version [00:42] isaacs: visnup: i like em both [00:42] isaacs: yeah, that's what i plan to do with it. basically just make it red in that bit. [00:42] visnup: hah [00:43] isaacs: i think the plain one kinda "goes" with the others better. [00:43] visnup: true [00:43] visnup: I kinda like the box though [00:43] isaacs: agreed, me too [00:43] isaacs: it's up to you. i'm fine with eitherone [00:43] visnup: I'm going to try generating some random numbers to help me decide [00:44] isaacs: hehe :) [00:44] isaacs: ok, i've flipped back and forth a bit, i like the box better. [00:44] Tim_Smart has joined the channel [00:44] visnup: hahaha [00:44] isaacs: that's my vote, final answer. [00:45] visnup: I'm going to agree [00:45] visnup: choosing whimsy over consistency [00:45] isaacs: visnup: it looks a lot more package managery [00:46] gf3: isaacs: can I give it a go? [00:46] isaacs: gf3: give what a go? [00:46] gf3: the NPM box [00:46] JimBastard: no u [00:46] isaacs: gf3: at a logo? sorry, the game is closed. [00:46] gf3: *gasp* [00:46] gf3: isaacs: balls [00:46] WALoeIII has joined the channel [00:46] isaacs: yeah. [00:46] Tim_Smart1 has joined the channel [00:47] isaacs: i announced the contest via twitter and here in IRC, and mape and fictorial were the winners. [00:47] isaacs: teh box is nice cuz it's kind of the melding of both of their designs [00:47] gf3: isaacs: oh shi- [00:47] gf3: isaacs: I missed the announcement [00:48] gerad: JimBastard: hey! have a sec to chat [00:48] JimBastard: i didnt do it [00:48] gerad: thanks for the help with node knockout [00:48] JimBastard: im here with sid doing databinding templating stuff in yayquery [00:48] JimBastard: whats up [00:48] Tim_Smart2 has joined the channel [00:49] JimBastard: ohh [00:49] JimBastard: it was nothing, anything [00:49] JimBastard: glad to see an event [00:49] gerad: ryah said that I ought to loop you in for more nyc help :-) [00:49] gerad: so I'm attempting to do that [00:49] JimBastard: totally let me know what you need [00:49] JimBastard: i got a team of 4 people ready lol [00:49] gerad: cool [00:49] gerad: suh'weet [00:49] JimBastard: and i guess the mongo chicks got to you [00:50] Tim_Smart has joined the channel [00:51] visnup: isaacs: deployed the logo to nodeknockout.com [00:53] geojeff has joined the channel [00:55] isaacs: sweet! [00:56] isaacs: mongo has chicks? [00:57] isaacs: visnup: you know what's awesome about using hte boxy logo? it means that npm's logo is the 3dest of them [00:59] ryah: gerad: logos don't show up in chrome [00:59] visnup: ryah: do you have adblock? [00:59] ryah: yeah [00:59] visnup: I think adblock is too smart [00:59] ceej: they show for me in chrome [00:59] isaacs: ryah: they work for me [00:59] visnup: I can try to outsmart the smartness [00:59] visnup: that div is #sponsors [01:00] visnup: which is what i'm assuming that extension keys off of [01:00] isaacs: visnup: i think i remember reading it has some heuristics, like #sponsors will be suspect, so will a div containing nothing but images linking to a different domain, which are hosted on amazon aws, etc. [01:00] isaacs: visnup: gotta admit, it sure *looks* like an ad [01:01] visnup: yeah, I was impressed [01:04] visnup: lemme get that extension [01:05] visnup: so far I hadn't fixed it because well, it was doing it's job correctly [01:05] gerad: i vote for leaving it [01:06] visnup: I do feel like I did my semantic html correctly since it found it. [01:08] hdon has joined the channel [01:13] isaacs: hehe [01:13] isaacs: "The ad-blocker blocked my ads. I must be doing something right!" [01:14] tmpvar has joined the channel [01:14] visnup: isaacs: exactly. and I feel bad about subverting the ingenuity on their part. makes me feel ukranian. [01:15] isaacs: hehe [01:17] visnup: I hope there are no ukranians in here [01:20] batasrki has joined the channel [01:23] mikeal: this is insane [01:23] mikeal: i randomly lose all of my closure [01:24] mikeal: my callback gets called a few times and then all of a sudden it loses everything in it's scope [01:24] mikeal: and even require gets a reference error [01:24] CIA-76: node: 03Ryan Dahl 07master * r964ed97 10/ doc/index.html : Fix text about threads on homepage - http://bit.ly/bRvyRU [01:25] CIA-76: node: 03Ryan Dahl 07master * r01a8d27 10/ (7 files in 2 dirs): Add platform files, move getmem to node::OS class. - http://bit.ly/cngWQ9 [01:26] ryah: hm creationix isn't here.. [01:28] isaacs: mikeal: code? [01:28] ryah: so i just added some platform files [01:28] ryah: so i think we can start adding cool stuff [01:28] mikeal: it only happens on one box [01:28] mikeal: doesn't happen on my laptop [01:29] ryah: like OS::GetExecutablePath [01:29] ryah: and OS::SetProcessTitle() [01:29] mikeal: super weird [01:29] isaacs: mikeal: that's extra weird [01:29] mikeal: yup [01:29] isaacs: mikeal: now i'm *really* curious [01:29] isaacs: :) [01:29] mikeal: i thought it was maybe a node version thing, but then i updated it [01:29] zaach has joined the channel [01:29] isaacs: ryah: interesting. [01:30] isaacs: ryah: then i could get the binpath better. [01:30] ryah: there are a bunch of things like that that are pretty much doable, but totally not portble [01:31] ryah: creationix really wants the executable path [01:31] cataska has joined the channel [01:31] ditesh|cassini has joined the channel [01:31] ryah: and i really want the process title to change :) [01:31] ryah: i think process cpu usage should be good too [01:32] ryan_gahl has joined the channel [01:33] isaacs: what's the "process title"? [01:33] ryah: what you see in ps [01:33] isaacs: oh, ok [01:34] isaacs: you want that to be the exe path? [01:34] ryah: people should be able to customize it [01:34] ryah: process.title = "node-chat" [01:34] ryah: process.title = "npm" [01:34] isaacs: yeah, that'd be balls [01:36] tmpvar_ has joined the channel [01:36] CIA-76: node: 03Ryan Dahl 07master * r84c1026 10/ src/platform_linux.cc : Fix platform_linux.cc, missing include - http://bit.ly/baGniB [01:44] joshbuddy has joined the channel [01:45] wilmoore has joined the channel [01:46] mjr_: Being able to change the process title would be excellent, even if it only worked on Linux. [01:49] indexzero has joined the channel [01:50] stevendavie has joined the channel [01:51] mw has joined the channel [01:52] ryah: i'm pretty sure every OS has some way of doing it [01:53] ryah: sometimes it's just modifying argv[0] [01:53] mjr_: Yeah, but I don't think that does anything on OSX. [01:53] ryah: ACTION is trying to find where he read able this... [01:53] ryah: really? [01:53] mjr_: Yeah, I think it changes as you'd expect on Linux though. [01:53] ryah: i've got Google Chrome Render process [01:53] mjr_: It's been a while since I've tried. [01:53] ryah: on osx [01:53] indexzero: trying to install npm + 0.1.98, anyone else hit issues with that? [01:53] mjr_: I think there's some BSD/OSX way to change it though. [01:53] mjr_: Unless I'm wrong. [01:53] isaacs: indexzero: what's up? [01:54] indexzero: isaacs: getting this on 'make', npm ! Error: node.js not compiled with openssl crypto support. [01:54] isaacs: hrm. [01:54] indexzero: installing node was by the book [01:54] indexzero: ./configure, make, make install [01:54] isaacs: indexzero: right, except that it didn't pick up openssl [01:55] indexzero: yeah, it's a fresh rackspace instance, let me check that, didn't realize it was a prereq [01:55] ryah: indexzero: apt-get install openssl-dev [01:55] mscdex: apt-get! :-D [01:55] isaacs: indexzero: ok, i see it. that's definitely a bug. [01:55] isaacs: indexzero: npm should work without crypto, just be super insecure [01:55] indexzero: ok, cool. Oddly enough ubuntu is yelling at me about openssl-dev [01:56] isaacs: or maybe it should just have a better error message. [01:56] ryah: indexzero: sorry install "libssl-dev" [01:57] ryah: then reconfigure and rebuild node. [01:57] mscdex: yeah libssl-dev [01:57] mscdex: ACTION shakes a fist at inconsistencies [01:58] indexzero: ryah: thanks [01:58] isaacs: indexzero: what would have made that error message more helpful for you? [01:59] indexzero: are you doing os targeting at all? [01:59] indexzero: it would have been nice to know what to do [01:59] ryah: "go on irc, ask isaacs" [01:59] indexzero: like "Run 'apt-get install libssl-dev' and recompile node" [01:59] indexzero: hah [01:59] isaacs: haha [01:59] stevendavie has joined the channel [02:00] isaacs: ryah: i should replace all the error messages with "IT BROKED PING ISAAC" [02:00] mjr_: ryah: the man page on OSX mentions setproctitle(3), but I don't actually find that man page on my computer. It looks like Linux and "regular" BSD both use setproctitle(3). [02:01] isaacs: indexzero: the problem there is that you might not be on a system where it's called libssl-dev, or where you have apt-get [02:01] ryan[WIN]: has anyone made a dynamic node module diddy yet [02:01] isaacs: indexzero: might have yum or homebrew or macports or somethign [02:01] indexzero: yeah, os targeting is painful [02:01] ryah: mjr_: i think you have to copy over to argv[0] in osx [02:03] ryah: http://code.google.com/p/py-setproctitle/source/browse/src/spt_status.c [02:04] kriskowal_ has joined the channel [02:07] falconair: according to node wiki, "keys(object)" function should be recognized by node scripts, but I get "keys is not defined" error [02:07] falconair: do i need to 'require' something first? [02:07] mjr_: falconair: use Object.keys(someobj) [02:08] mjr_: It's not a prototype of every object, but rather something in the global Object itself. [02:08] ryah: javascript: not the most beautiful language [02:09] falconair: yup, that worked, thanks mjr_ [02:10] isaacs: ryah: javascript: at least it's not perl. [02:10] chilts: nothing wrong with Perl :) [02:11] mjr_: You know, python is all amazingly well designed and elegant or whatever, but python people seem to write perl-like super clever code that is unreadable to anyone other than the author. [02:11] isaacs: chilts: there's nothing wrong with an ugly girl, either, but i don't wanna dater her. [02:12] Tim_Smart: javascript can be pretty sexy at times though [02:12] isaacs: javascript's freaky! [02:12] Tim_Smart: even when you aren't drunk [02:12] ryan_gahl has joined the channel [02:12] isaacs: it's been aROUND [02:12] isaacs: it goes with ALL the web browsers [02:13] geojeff has joined the channel [02:15] isaacs: ryah: operability > interoperability. you nailed that one. [02:17] ryah: isaacs: :) [02:17] isaacs: these people wanna take away my name:version hash. [02:17] ryah: going through my tweet backlog? [02:17] Sidnicious has joined the channel [02:17] isaacs: no, i've been using that one for a while. [02:18] isaacs: just dropped it on the Package/Mappings discussion going on in commonjs [02:19] ryah: yeah - javascipt has an unhealthy relationship with standardization [02:20] deanlandolt_home: ryah: care to elaborate? [02:20] chilts: watch Douglas Crockford's Google Tech Talk, that gives a little history :) [02:21] mscdex: good ol' dougie [02:21] kriskowal: isaacs, i'm going to look deeper at your last suggestion. i'm not sure at this point how my most recent proposal doesn't address the issue of name and version [02:21] isaacs: kriskowal: there have been a few that address it. [02:21] deanlandolt_home: chilts i know the history...i just think ryah's making a deeper point than es4 [02:21] chilts: and so does Doug :) [02:21] kriskowal: k, then it's just a matter of writing the prose. thanx [02:21] isaacs: kriskowal: i've actually thrown out at least 2 suggestions that would work for both Nodules and npm. [02:21] jmar777 has joined the channel [02:22] isaacs: kriskowal: i think it's a matter of stating at the outset what are the goals of the spec. [02:22] ryah: deanlandolt_home: i just think that javascript has these strange origins [02:22] isaacs: kriskowal: i mean, it seems like name/version actually are offensive for some reason, or viewed as clutter, and i don't really get it. [02:22] isaacs: i mean, name/version - it's SO good! it's worked forever everywhere, and with securable modules and mutable require.paths, we can actually even fix the only problem with it, that whole dependency hell problem. [02:23] grantmichaels has joined the channel [02:23] kriskowal: i'd have to review the log, but i think that everyone who matters doesn't mind putting in name/version [02:23] isaacs: hahaha [02:24] isaacs: burn! [02:24] webr3: (operability && interoperability) > (operability > interoperability) [02:24] isaacs: webr3: (operability - inoperability) > (interoperability - noninteroperability) * 10000 [02:24] isaacs: if it doesn't work, nothing else matters. [02:25] webr3: concur, and if it isn't interoperable then it's a bit of a wasted effort [02:25] webr3: no less than perfection will do! dammit [02:25] webr3: ACTION wanders back off [02:26] jwm: nooooobody caaaares [02:33] jstewart has joined the channel [02:35] rictic has joined the channel [02:37] jstewart has left the channel [02:42] grahamalot has joined the channel [02:52] JimBastard has joined the channel [02:52] jashkenas has joined the channel [02:52] JimBastard: woot im on the front page twice today http://github.com/explore [02:52] felixge has joined the channel [02:52] felixge has joined the channel [02:52] jashkenas: 'evening, Node. is there documentation for doing an async render in express? [02:53] Tim_Smart: JimBastard: Soon you will be on the front page of time magazine [02:53] JimBastard: lol Tim_Smart [02:54] JimBastard: im not sure about that one [02:55] JimBastard: they'll never catch me [02:59] jstewart has joined the channel [03:00] jashkenas: nm, found it. [03:02] mscdex: javascript-fuuuuuuuuuuuuu [03:02] mscdex: :-D [03:02] jashkenas has left the channel [03:05] jstewart: so what happened to JSON.parse() ? [03:05] tav_ has joined the channel [03:05] mscdex: nothing? [03:06] markwubben has joined the channel [03:06] jstewart: I must be missing something then. Playing around with hummingbird, it dies on JSON.parse()) [03:06] technoweenie: whats the error [03:06] jstewart: when using it from the node REPL, I get "..." on the next line. [03:06] mscdex: what's the string it's trying to parse? [03:07] jstewart: node> var t = '{j:1}'; [03:07] jstewart: node> require('sys').puts(JSON.stringify(t)); [03:07] jstewart: "{j:1}" [03:07] jstewart: node> require('sys').puts(JSON.parse(t)); [03:07] jstewart: ... [03:08] Tim_Smart: Thats node.js readline failing [03:08] saikat has joined the channel [03:09] jstewart: do I have a syntax error? [03:09] Tim_Smart: nope [03:10] JimBastard: jstewart: whast the error message [03:10] mscdex: shouldn't t = {j:1}; instead? [03:10] mscdex: then parse the stringified version [03:10] mscdex: ? [03:10] saikat has joined the channel [03:10] mscdex: if you do that, it works [03:11] JimBastard: yo technoweenie im working on this new library now. i reverse a bunch of the code from this russian php webservice that generates really shitty JS based on wonky xmlhttprequests. its awesome. ive deleted like 600 lines already :-) [03:11] JimBastard: russian comments that are bad comments are awesome [03:11] jstewart: node> var t = {j:1}; [03:11] jstewart: node> require('sys').print(JSON.parse(t)); [03:11] jstewart: illegal access [03:11] JimBastard: whoever wrote this needs to get slapped in the face a few times to understand about separating concerns [03:11] mscdex: jstewart: http://gist.github.com/443167 [03:11] technoweenie: jstewart: cant parse an object, it needs to be a string [03:12] technoweenie: JimBastard: cool [03:12] mscdex: JSON.parse can only parse JSON strings, not plain strings [03:12] JimBastard: hee hee we'll see [03:12] JimBastard: if i can get it to work you'll like this one [03:13] JimBastard: its a neat developer tool [03:13] JimBastard: aight back to work [03:15] jstewart: mscdex: if I do "require('sys').puts(t);" I get the same result as your gist [03:15] mscdex: what result is that? [03:15] mscdex: oh, yeah [03:15] jstewart: [object Object] [03:15] mscdex: what were you aiming to do then? [03:16] mscdex: that just shows that parsing is working [03:17] mscdex: you can't JSON.parse() a string like '{j:1}', because that's not valid JSON [03:17] jstewart: var t = {j:1}; is already an object, no? [03:17] mscdex: it is [03:19] jstewart: isn't that what .parse does - convert a JSON string to a javascript object? [03:19] mscdex: it does. but the string has to be a valid JSON string like: '{"j":1}' and not '{j:1}' [03:19] mscdex: like you had in your example [03:19] RussB has joined the channel [03:20] mscdex: that's why it was complaining [03:21] jstewart: Ok. Gotcha. [03:22] saikat has joined the channel [03:22] tmpvar__ has joined the channel [03:23] jstewart: Then I wonder why hummingbird dies here: https://gist.github.com/38617621f37df6dc8193 [03:23] tmpvar: wow, xfce is launching a couple background xchats heh [03:25] mscdex: jstewart: put in a debug statement above the line of code in question that prints out configJSON [03:25] mscdex: see if there's something in there that isn't valid JSON [03:25] jstewart: mscdex: ok [03:26] skampler: say we have "require('dgram').createSocket(function(msg, rinfo) {});", what's the utility of rinfo.size with respect to msg.length? [03:27] ryan_gahl has joined the channel [03:28] ceej: hmmm seems to be some issues with gzip and serving static files in connect still http://pastie.textmate.org/private/h3j1vuy0vgidrfxho3ek8w [03:30] ceej: It displays the static file once then gives that error [03:30] jstewart: mscdex: here you go: https://gist.github.com/de2803c6373001a05ed9 [03:32] mscdex: jstewart: looks fine to me. i dunno why it's causing problems then. [03:32] mscdex: hrmm [03:33] jstewart: Yeah, my debugging was flawed with the invalid JSON, but the config file looks good, to me. [03:34] mscdex: jstewart: I just loaded that as a string into JSON.parse() manually and it parsed it just fine [03:35] jstewart: Maybe it's more of a hummingbird problem, since other have the same problem: http://github.com/mnutt/hummingbird/issues#issue/4 [03:35] jstewart: but it seemed like a pretty standard method... [03:35] mscdex: ah yes! [03:35] mscdex: let me check something [03:36] mscdex: did you try changing on that line, configJSON to configJSON.toString() ? [03:36] jstewart: nope [03:37] mscdex: give that a try [03:38] ryah: whose working on xlib bindings? [03:38] mscdex: that should work, since readFileSync is being used without an encoding argument [03:38] ryah: er [03:38] ryah: who's [03:38] ryah: or xcb? [03:38] ryah: :) [03:39] tmpvar: xlib bindings? wow [03:39] tmpvar: that sounds horrible :( [03:39] mscdex: lol [03:39] ryah: fuse-ll and xcb are the bindings i wat [03:39] gerad has left the channel [03:39] ryah: want [03:40] mscdex: what is fuse-ll? [03:40] Twelve-60 has joined the channel [03:40] tmpvar: fusefs? [03:40] mscdex: it's not googleable [03:40] mscdex: :S [03:41] ryah: yes, fuse [03:41] tmpvar: looks like fuse, userland fs stuff [03:41] ryah: but the low-level API [03:41] mscdex: oh i see [03:41] tmpvar: ryah, why? you want to mount ntfs? :P [03:41] tmpvar: or arbitrary filesystems I would guess [03:41] ryah: no, i want to mount my node-chat [03:41] ryah: ls /node-chat/users [03:42] tmpvar: oh! [03:42] ryah: :) [03:42] tmpvar: so thinking about it from the other direction [03:42] tmpvar: your service becomes a local resource [03:42] tmpvar: nice :) [03:42] tmpvar: ryah, you see node-ogl lately? [03:42] ryah: i saw the cube screenshot [03:42] mscdex: that would be neat [03:43] mscdex: fwrite would send the user a message [03:43] tmpvar: ryah, yeah its getting there :) [03:43] mscdex: :P [03:43] jstewart: mscdex: So, it gets through the last error, but dies with the same error in another file... [03:43] jstewart: with the caret at .parse [03:43] mscdex: jstewart: sounds like the code needs to be updated a bit i guess [03:43] jstewart: and I added the .toString() [03:44] jstewart: Yeah, that's what I figured [03:45] tmpvar: ryah, I'm considering working on a mostly automatic binding creation lib. input .h's output node addon, what do you think? [03:45] jstewart: So there's a encoding argument for readFileSync? [03:46] mscdex: jstewart: it's optional. if it's supplied, a string will be returned instead of a buffer object [03:46] jxson has joined the channel [03:46] tmpvar: ryah, I'm thinking of using using gccxml to aid in the process of getting the definitions out then going from there [03:47] mscdex: jstewart: http://nodejs.org/api.html#fs-readfilesync-131 [03:47] ajpiano has joined the channel [03:48] jstewart: mscdex: I was looking at it right now, thanks! [03:50] ryan_gahl has joined the channel [03:51] ryah: tmpvar: i don't like autobinding stuff [03:51] ryah: tmpvar: http://code.google.com/p/v8-juice/ [03:52] ryah: it tends to be more troube than it's worth [03:52] ryah: imho [03:53] mscdex: wasn't there some project on github that did some automagic communication between js and arbitrary c++ libraries? [03:55] ryah: mscdex: v8-juice does htat [03:55] mscdex: yeah but i thought there was another one [03:55] mscdex: hmm [03:56] tmpvar: node-ffi? [03:56] jstewart: mscdex: Thanks... getting closer with the "encoding='utf8'" [03:56] mscdex: maybe it was node-ffi [03:56] mscdex: jstewart: cool :) [03:56] ewdafa has joined the channel [03:56] tmpvar: ryah, really? It doesn't seem to far off if you want to mirror the c api. [03:57] ryah: i like doing stuff by hand [03:58] technoweenie: hey ryah, what is the crypto iv? should it be a string or a byte sequence [03:58] ryah: i worry about dicking around with some meta-layer [03:59] tmpvar: ryah, yeah I understand that.. but in atleast a few cases (especially with low level libs) you end up writing very similar code over and over [04:01] ryah: technoweenie: binary string [04:02] ryah: technoweenie: this stuff should be buffers.. it just hasn't been updated [04:03] ryah: technoweenie: http://github.com/ry/node/blob/84c10265dbce359feedf8e59f100ecf119cf2b72/src/node_crypto.cc#L957 [04:03] jbrantly has joined the channel [04:03] technoweenie: ryah: ahh, thanks [04:05] tilgovi has joined the channel [04:07] jstewart: any guess when we will be should be able expose node.js to the public and not have a nginx, &c layer in front of it? [04:08] wilmoore has joined the channel [04:10] tmpvar: ryah, I guess im talking about a "thinner" abstraction, taking away much of the grunt work.. I guess I'll see how it goes and let you know :P [04:11] tmpvar: basically taking .h's and building addons that mirror the original api [04:12] tmpvar: by way of an intermediary step of generated .cc's -- there will be custom coding, but not as much [04:13] jakehow has joined the channel [04:15] jstewart: g'night. Thanks, all [04:15] jstewart has left the channel [04:16] tilgovi has joined the channel [04:16] tilgovi: ugh....comcast.... [04:16] tilgovi: I didn't hear anything after my question [04:22] tilgovi: oh, turns out my question didn't even get sent. lols. and the person I was asking left. [04:29] wilmoore has joined the channel [04:29] tilgovi: I could trace this code more, but I have a feeling someone knows: if I write a buffer to a socket and there's a write queue, does the buffer get copied? If I change the original after calling write() will I be changing what gets written eventually? [04:33] ryan_gahl has joined the channel [04:38] tilgovi: actually...I'd like to understand this. Reading the node code is fun. [04:42] tilgovi: lol...setImplmentationMethods... Implment [04:42] joshbuddy has joined the channel [04:42] mostlygeek has joined the channel [04:51] ceej: anyone got connect running on heroku? [04:59] ceej: it does not like running sessions... [05:04] tilgovi: ryah: I'm reading the net.js code and it seems a Buffer that doesn't get fully written to a stream is not copied anywhere, so modifying it after the write() will change what eventually gets written, yes? [05:05] Validatorian has joined the channel [05:06] mtodd_ has joined the channel [05:09] silence has joined the channel [05:12] rauchg has joined the channel [05:12] SamerZ has joined the channel [05:13] boaz has joined the channel [05:13] SamerZ has joined the channel [05:15] SamerZ has joined the channel [05:15] SamerZ: hi [05:16] SamerZ: Anyone knows how to perform an http redirect with node? [05:17] cloudhead: You could send back a 301 status code, and set a Location header [05:17] tilgovi: SamerZ: as a client or a server? [05:18] SamerZ: server [05:18] tilgovi: what he said [05:18] SamerZ: cool, thanks [05:18] cloudhead: anyone here used mongoose? [05:20] mikeal has joined the channel [05:24] jetienne has joined the channel [05:25] Yuffster has joined the channel [05:25] ceej: cloudhead: i'm about to try it tomorrow [05:25] siculars has joined the channel [05:28] gerad has joined the channel [05:32] nsm has joined the channel [05:33] wilmoore has joined the channel [05:39] chrischris has joined the channel [05:47] linuxsable has joined the channel [05:51] ryah: tilgovi: yes [05:51] tilgovi: thanks [05:55] chrischris has joined the channel [05:58] micheil has joined the channel [06:04] micheil: pgriess: sounds interesting. [06:04] joshbuddy has joined the channel [06:11] nsm has joined the channel [06:16] bpot has joined the channel [06:20] mravaux has joined the channel [06:20] jakehow has joined the channel [06:25] mostlygeek has joined the channel [06:26] boaz has joined the channel [06:26] micheil: pgriess: also, I'm going to update my fork of the code and do a re-org on it, to clean it out and try and get a consistent API going. [06:35] b_erb has joined the channel [06:37] JimBastard has joined the channel [06:37] JimBastard: ahahaha lol http://simonwillison.net/2010/Jun/17/pdfjs/ [06:37] JimBastard: i got on simon willison's blog [06:38] TomY has joined the channel [06:56] kuya: hi - is there smething like pythons `if __name__ == '__main__': do_stuff_because_this_file_has_been_launched_directly()` ? [06:58] JimBastard: hey kuya [06:58] JimBastard: you mean like commonjs? [06:58] JimBastard: if you var myModule = require('./myModule'); // where myModule is a folder with a index.js file [06:58] JimBastard: myModule will import the exports of that module [06:59] kuya: hi jim - thats not quite what i meant [06:59] JimBastard: got ya [06:59] kuya: i want to know if the module has been loaded via a require or has been run directly [06:59] JimBastard: what you mean [06:59] JimBastard: ohh [06:59] JimBastard: why [07:00] JimBastard: i think you can do that with a one liner, i just dont know it [07:00] kuya: always handy for minimal silly testing if you can run the module to test itself [07:00] JimBastard: well if you need testing [07:00] JimBastard: vows is the shit [07:00] JimBastard: its about to get its v1 release [07:01] JimBastard: http://github.com/cloudhead/vows [07:01] JimBastard: we are using it on production software [07:01] JimBastard: works great [07:01] nikhil_ has joined the channel [07:01] kuya: that looks nice [07:01] JimBastard: let me show you the secret docs [07:02] JimBastard: http://vows.heroku.com/ [07:02] JimBastard: shhhhhhh [07:02] JimBastard: secret [07:02] kuya: lol thanks [07:02] JimBastard: those arent complete [07:02] JimBastard: or released [07:02] JimBastard: and might document the new API [07:03] JimBastard: i'd use the github [07:08] pufuwozu` has joined the channel [07:08] b_erb1 has joined the channel [07:11] mitkok has joined the channel [07:12] micheil: JimBastard: looks good [07:12] JimBastard: hee hee [07:13] JimBastard: im trying to release this library before i go to sleep [07:13] JimBastard: its done [07:13] micheil: do you know of anything that does something like: assert.emits("event") ? [07:13] JimBastard: just documenting [07:13] JimBastard: i gtg bbl [07:13] micheil: k [07:17] ryah: JimBastard: wow, looks good [07:17] virtuo has joined the channel [07:17] JimBastard: ryah shhhh secret [07:17] micheil: ryah: what do you think of the assert.emits(event) idea? [07:18] micheil: it'd simplify the testing for the emittance of events [07:18] JimBastard: im gonna get yelled at for showing that link [07:18] Tim_Smart: JimBastard: Secret is no longer secret: http://nodejs.debuggable.com/ [07:18] JimBastard: thanks Tim_Smart [07:18] JimBastard: i forgot [07:18] visnup: JimBastard: nice, I like how it's one long page [07:18] JimBastard: thats not released [07:19] kuya: can anyone point me in the right direction to base64 encode a string? [07:19] JimBastard: yeah [07:19] Tim_Smart: JimBastard: Did you do the CSS / HTML for those docs? [07:20] JimBastard: http://github.com/Marak/pdf.js/blob/master/lib/pdf.js#L316 [07:20] dahankzter has joined the channel [07:20] JimBastard: im 99% sure there is a better one kuya [07:20] JimBastard: i gotta go be back in a few [07:20] technoweenie: that looks like the same base64 function i stole [07:20] Tim_Smart: kuya: These is also one by brainfucker [07:21] technoweenie: http://github.com/technoweenie/twitter-node/blob/master/lib/base64.js [07:21] micheil: why not just use node-crypto? [07:21] Tim_Smart: http://github.com/brainfucker/node-base64 [07:21] kuya: thanks guys! [07:21] Tim_Smart: micheil: Doesn't have base64 last time I checked? [07:21] micheil: I'm sure it does. [07:21] ryah: micheil: like, emits in the next few minutes? [07:21] micheil: ryah: yeah [07:21] ryah: micheil: there is some time aspect missing [07:21] micheil: ryah: or, emits before the process.exit() [07:21] ryah: assert.emits("error").before("data") [07:22] technoweenie: wow a c++ lib for base64, ha [07:22] micheil: ryah: before? [07:22] ryah: assert.emits("error").before(process).emits("exit") ? [07:22] ryah: i don't know [07:22] micheil: hmm.. that gets messy [07:22] ryah: just thinking outloud [07:22] micheil: I'd just go for.. say, assert.emits(event, withinTime); [07:23] ryah: assert.emits(socket, "error").beforeEmits(process, "exit") [07:23] boaz has joined the channel [07:23] micheil: hmm.. assert.emits(socket, "error").before(process, "exit") [07:23] Tim_Smart: technoweenie: I wouldn't really want Javascript to be encoding large images to base64 :p [07:24] ryah: Tim_Smart, technoweenie: i'll probably be adding buffer.toString('base64') soon [07:24] technoweenie: cool, cool [07:24] Tim_Smart: ryah: Sounds good [07:24] ryah: in fact, it's like a 5 minute hack [07:24] micheil: technoweenie: listening to the info on github's federated infrastructure's fairly interesting [07:24] ryah: should just do it now [07:24] technoweenie: micheil: oh yea i havent finished listening to the podcast [07:24] micheil: it's good [07:24] Tim_Smart: Would crypto be a better place for it, though ryah? [07:25] micheil: ACTION needs to finish reading up on WebSockets over unix sockets [07:25] ryah: Tim_Smart: i want crypto to start returning buffers too [07:25] micheil: crytpo seems really bloated [07:25] micheil: *crypto [07:25] ryah: so you'd do hash.update("blah").toString('base64') [07:25] teemow has joined the channel [07:25] ryah: (or whatever) [07:26] Tim_Smart: Ah ok [07:26] ryah: crypto is very large, yes [07:26] micheil: ryah: what about splitting off the hashing functions from crypto? [07:26] micheil: so, node-hash.cc, and node-crypto.cc [07:26] technoweenie: i'm redoing the github download server in node right now [07:26] micheil: essentially. [07:26] micheil: technoweenie: okay, uh, wow. [07:26] micheil: :D [07:27] technoweenie: the podcast is funny, josh looks bored as hell [07:28] technoweenie: mmhm [07:29] micheil: technoweenie: "currently rich isn't actually working on anything node.js related" [07:29] micheil: oh, wow, that changed quick. [07:29] technoweenie: oh did someone ask? [07:29] micheil: yeah [07:29] micheil: they talk about node on the podcast [07:29] technoweenie: well the podcast was done a few weeks ago [07:29] micheil: oh, true [07:30] technoweenie: i started hacking on a port of our ci system in node [07:30] technoweenie: so it could stream the testing results as they're running w/ websockets or something [07:30] ryah: yey node at github :) [07:30] ryah: let me know what you need [07:31] kuya: does anyone have an example of fetching a page via https? im not doing something right... [07:37] bpot has joined the channel [07:37] technoweenie: haha he mentioned the LOST episode [07:47] hellp has joined the channel [07:48] micheil: haha, he also lays into the case against threads [07:48] ryah: what's this podcast you're talking about? [07:49] micheil: webpulp.tv [07:49] micheil: it's pretty good [07:55] technoweenie: http://webpulp.tv/post/708686185/github-tom-preston-werner [07:59] micheil: hmm.. [08:00] micheil: things to do: fork websocket-client or rebuild node-smtp-client? [08:01] mravaux has joined the channel [08:03] derbumi_ has joined the channel [08:03] freshtonic_ has joined the channel [08:09] freshtonic has joined the channel [08:10] linuxsable has joined the channel [08:18] ditesh|cassini has joined the channel [08:21] JimBastard has joined the channel [08:21] JimBastard: must finish lib [08:22] JimBastard: i think i gotta wait though i just bought a new domain [08:27] caolanm has joined the channel [08:33] pandark_ has joined the channel [08:37] kpx has joined the channel [08:38] kpx: Hi I was working with the halfhalo IRC client.... [08:38] kpx: There were 2 errors in the test HTML provided [08:38] Tim_Smart: hmm node_mailer is failing on me [08:38] Tim_Smart: anyone know of a decent smtp client for node? [08:43] pandark_ has joined the channel [08:43] micheil: Tim_Smart: see message about 41minutes ago. [08:44] Tim_Smart: Ah ok. Whats the current status of it? [08:44] micheil: Tim_Smart: would you like me to start working on my smtp client again? [08:44] micheil: it's currently broken, as it's niode 0.1.30< [08:45] micheil: and it doesn't implement a lot of stuff [08:45] micheil: it's a lot of work. [08:46] Tim_Smart: I just want to send emails :3 [08:46] micheil: heh [08:47] micheil: yeah, the reason it's a lot of work is because I'm wanting to write the client in such as way that it respects the protocols [08:47] micheil: (meaning that it should work better for everyone.) [08:47] micheil: wow! bloody hell does a 4 shot coffee give you a kick. [08:49] caolanm: micheil: you'll get used to it ;) [08:49] micheil: heh heh [08:49] caolanm: then you'll need one every morning [08:49] micheil: caolanm: when you got 1.5hrs sleep the night / morning before: you definitely need it. [08:50] caolanm: ouch [08:50] caolanm: partying hard? [08:50] caolanm: or just coding? [08:50] jhelwig has joined the channel [08:50] micheil: working hard. [08:51] micheil: school assessments + film/audio editing + coding hard. [08:52] micheil: 20 to 22 hours days are FTW. [08:52] caolanm: go micheil! :) [08:52] micheil: seriously, you get so much done in them [08:54] Tim_Smart: But you get crap all done the next day or two [08:54] caolanm: ACTION agrees [08:54] caolanm: I like my sleep [08:55] micheil: actually, no, you get a lot done.. because the lack of sleep adds adrenaline into your system, making you full of energy. [08:56] jetienne_ has joined the channel [08:56] caolanm: In fact, most days I think I only get about 4 hours of good solid work done... If I could just figure out which 4 it would be in advance I'd be set ;) [08:57] micheil: oh boy.. looking at some of my node-smtp-client code, and it's almost shameful code. [08:57] Tim_Smart: Hehe old code is always like that [08:58] Tim_Smart: Well I got my emails sending... but I have to admit node_mailer isn't a very good smtp client [08:58] micheil: even the forks of it still use promises [08:59] Tim_Smart: I think thats my portfolio site done for now: http://121.79.216.71:8000/ [09:01] unomi has joined the channel [09:02] ryah: Tim_Smart: slow [09:03] ryah: maybe it's the modem [09:03] caolanm: the fonts were slow to load for me [09:03] Tim_Smart: ryah: Its my laptop with a crappy 120-ish kpbs upload [09:04] ryah: Tim_Smart: http://121.79.216.71:8000/assets/images/portfolio-posx.png <-- served from node? [09:04] Tim_Smart: Yeah [09:05] technoweenie: slowww [09:05] ryah: :/ [09:05] micheil: Tim_Smart: not sure if "since age of 15" is a selling point. I tried that once, only, I was 15 at the time. [09:05] ryah: Tim_Smart: is that a string or buffer? [09:05] Tim_Smart: Yeah I suck at words [09:05] Tim_Smart: ryah: buffer [09:05] micheil: Tim_Smart: kaboom: http://github.com/miksago/node-smtp-client/commit/1b7899330423c94fe2f3d009a4b2aca197d8a535 [09:06] ryah: Tim_Smart: hmm [09:06] micheil: loaded fine and fast for me. [09:06] caolanm: ryah: so what are your thoughts on this? http://groups.google.com/group/nodejs/browse_thread/thread/8ed87447660f6013 [09:08] Tim_Smart: ryah: It will most definately be slow due to my crappy NZ internet connection [09:08] ryah: Tim_Smart: yeah, probably [09:08] ryah: getting 2sec pings to you [09:08] Tim_Smart: loads instantly on my local network computers [09:09] micheil: heh, I'm in AU, so it's probably faster for me. [09:09] technoweenie: since 15... [09:09] technoweenie: how old are you guys [09:09] micheil: technoweenie: sound's like me. [09:09] ryah: time curl http://121.79.216.71:8000/assets/images/portfolio-posx.png > /dev/null [09:09] ryah: 0.01s user 0.01s system 0% cpu 9.925 total [09:09] micheil: technoweenie: 17.5? [09:09] technoweenie: jeez are you even allowed to be on the internet [09:09] micheil: :P [09:10] technoweenie: poor aus internet users :(f [09:10] ryah: caolanm: um, will respond tomorrow [09:10] caolanm: damn, 17 and already kicking my arse at JS... ;) [09:10] ryah: caolanm: i think is fine, i just worry about moving things around too much [09:10] caolanm: ryah: sure [09:11] caolanm: yeah I can totally understand that [09:11] micheil: caolanm: I've been in the js community for about 2-3 years though, just really focusing on JS and frontend performance. [09:11] technoweenie: i was really focusing on beer at that age [09:12] caolanm: sounds like you've been focusing on JS longer than me then [09:12] micheil: heh; I was never part of the party scene, which wasn't my fault, but the fact that others were involved. [09:12] caolanm: knew I shouldn't have done a business degree ;) [09:12] Tim_Smart: Heh, I'm 20, so I have been on the scene for 5 ish years now [09:13] Tim_Smart: I should change "since the age of 15" to "5 and counting years" or something [09:13] caolanm: 24 ...and now I'm in the unusual position of feeling old [09:13] micheil: "5 years and counting" [09:13] micheil: would sound better [09:13] technoweenie: i didnt even start php until i was 21 [09:13] nostromo has joined the channel [09:13] ryah: meh [09:13] Tim_Smart: And I might flip the switch on node-asset to google closure all my coffeescript output [09:13] ryah: ACTION <- 29 :~ [09:14] Tim_Smart: lol someone crashed my node server [09:14] Tim_Smart: oh dear [09:16] technoweenie: Tim_Smart: yes, 5 years is way better than 'since 15' :) [09:16] technoweenie: or "since 2005" [09:16] Tim_Smart: http:410 throw new Error("This type of response MUST NOT have a body."); [09:17] ryah: Tim_Smart: hm [09:18] Tim_Smart: Hadn't run into that one before [09:18] ryah: i guess someone sent a head req [09:18] ryah: node probably shouldn't crash on that [09:18] Tim_Smart: ah [09:18] technoweenie: was this related to that issue of mine you fixed ryah? [09:19] technoweenie: http://github.com/ry/node/issues/closed#issue/162 [09:20] technoweenie: oh 1.98 would've included that [09:21] technoweenie: dang you actually set annotated tag messages: http://github.com/ry/node/downloads nice! [09:21] micheil: damn.. some of the output from sys.inspect is really retarded. [09:21] micheil: example: http://gist.github.com/443430 [09:21] technoweenie: ha [09:21] Tim_Smart: micheil: I had that happen a couple times [09:21] micheil: any fixes? [09:22] Tim_Smart: nope [09:24] xla has joined the channel [09:25] Tim_Smart: ryah: Yes, HEAD requests are causing it [09:26] Tim_Smart: Bug in node-router really though [09:28] micheil: ryah: do you want a patch to rename the test files for tcp to net? [09:28] micheil: (for clarity) [09:29] micheil: actually. I'm going to write a quick patch for those.. there's a few other things I've noticed in them [09:32] micheil: also, in test-crypto, you're generating hashes, but never actually testing them. [09:32] PyroPete1 has joined the channel [09:34] Tim_Smart: Lol I just did a really cheap hack to node-route [09:34] Tim_Smart: when there a HEAD request, I just overwrote write() and end() to not send a body [09:37] nostromo: Tim_Smart: bottlepy uses the same technique, clears the body, in case the user returned one, on HEAD and a number of status codes (304...) [09:37] Tim_Smart: ok [09:46] micheil: ryah: so far two patches for tests, another few to come. [09:50] micheil: ack. my terminal's crashed. [09:50] micheil: bbs. [09:52] hellp has joined the channel [10:00] derferman has joined the channel [10:05] micheil has joined the channel [10:07] micheil: wow. that was a crash and a half. [10:25] dabreaka has joined the channel [10:28] nsm has joined the channel [10:47] rolfb has joined the channel [10:49] derbumi has joined the channel [10:53] technoweenie has joined the channel [11:01] nsm has joined the channel [11:08] technoweenie has joined the channel [11:10] kkaefer has left the channel [11:17] jhelwig has joined the channel [11:23] technoweenie has joined the channel [11:27] micheil: ryah: patches incoming. [11:33] geojeff has joined the channel [11:34] Tim_Smart has joined the channel [11:36] SamerZ has joined the channel [11:37] technoweenie has joined the channel [11:44] technoweenie has joined the channel [11:57] phiggins has joined the channel [12:10] slaskis has joined the channel [12:18] micheil has joined the channel [12:19] Dennus has joined the channel [12:22] innu: I use spawn() to create a child process. That child process makes its own sub-child processes. If I kill the child process created by node.js, then the sub-child processes aren't killed. How can I kill all the processes including spawned by the child process? [12:24] mw has joined the channel [12:25] phiggins has joined the channel [12:26] kjeldahl has joined the channel [12:31] chakrit has joined the channel [12:34] xla has joined the channel [12:37] drostie has joined the channel [12:39] technoweenie has joined the channel [12:42] romainhuet has joined the channel [12:44] o_o has joined the channel [12:45] micheil has joined the channel [12:58] technoweenie has joined the channel [12:59] JAAulde has joined the channel [13:01] mravaux_ has joined the channel [13:02] mitkok has joined the channel [13:02] kevm has joined the channel [13:06] mitkok has joined the channel [13:08] drostie has joined the channel [13:09] nsm has joined the channel [13:12] mjr_ has joined the channel [13:15] technoweenie has joined the channel [13:17] davidsklar has joined the channel [13:17] nsm has joined the channel [13:19] technoweenie has joined the channel [13:19] chrischris has joined the channel [13:20] chrischris has joined the channel [13:23] pzich has joined the channel [13:23] pgriess has left the channel [13:24] zaach has joined the channel [13:27] femto has joined the channel [13:28] mitkok has joined the channel [13:33] behmann has joined the channel [13:33] mitkok1 has joined the channel [13:35] ryan_gahl has joined the channel [13:35] nsm has joined the channel [13:39] ryan_gahl: why don't people issue patches as pull requests? i see them come in as gists or .patch files and i'm just curious why not just a pull request against a fork? isn't that the easiest way to merge? [13:39] ryan_gahl: just want to know for future reference so i'm doing it "right" [13:41] chakrit: Don't know for others but for me I'm working off your repo directly as I don't have much skills to hack on the C source directly. So forking and pull-requests is extra work. [13:41] PyroPeter: for non-git people diff seems to be the easiest way [13:41] ryan_gahl: chakrit: i'm not Ryan Dahl [13:41] chakrit: oh ... lol [13:41] chakrit: sry dude [13:41] ryan_gahl: np :) [13:41] technoweenie has joined the channel [13:41] ryan_gahl: but i mean, it has nothing to do with C [13:42] mjr_: ryan_gahl: a while back, ryah said that he couldn't keep track of pull requests [13:42] mjr_: but that he could manage a queue of patches. [13:43] blowery: odd, i sent him a pull request and it got applied [13:43] ryan_gahl: ok ok, that's what i was wondering [13:43] hellp has joined the channel [13:43] blowery: i don't know if it was the "right" way however [13:43] mjr_: Yeah, I think he's been a bit inconsistent in applying this policy. [13:43] blowery: but it worked :D [13:43] mjr_: We really need a better tool for this kind of patch queue management and review. [13:44] ryan_gahl: cuz it seems like not using pulls is like _almost_ using git [13:44] technoweenie has joined the channel [13:45] ryan_gahl: mjr_: like the Attlassian tools for SVN [13:45] ryan_gahl: -t [13:45] ryan_gahl: ACTION wonders if JIRA has git integration yet [13:46] ryan_gahl: yes, looks like it does [13:46] ryan_gahl: not sure how good [13:46] drostie has joined the channel [13:47] ryan_gahl: well, at any rate, it's for ryah to worry about :) - I was just curious [13:47] behmann: ryan_gahl: I was looking into that last week... I found an obscure plugin on atlassian's site, but that was it [13:47] behmann: no actual evidence of integration [13:47] botanicus has joined the channel [13:55] pjb3 has joined the channel [14:00] jakehow has joined the channel [14:01] nsm has joined the channel [14:07] ryan_gahl: so, yeahhhh, github has a "Fork Queue" to manage this - hmm.. now i'll have to ask ryah when he's active what gives [14:09] n8o has joined the channel [14:09] n8o has left the channel [14:10] creationix has joined the channel [14:11] markwubben has joined the channel [14:14] gf3 has joined the channel [14:16] boaz has joined the channel [14:21] ceej has joined the channel [14:21] Yuffster has joined the channel [14:24] morganallen has joined the channel [14:25] nsm has joined the channel [14:26] pgriess has joined the channel [14:32] tjholowaychuk has joined the channel [14:34] jherdman has joined the channel [14:34] ryan_gahl: how are people deleting files? [14:35] cloudhead has joined the channel [14:35] ryan_gahl: had to resort to child_process.exec('rm -r ' + dirName) to whack a directory [14:35] ryan_gahl: (+ callback) [14:46] mjr_: ryan_gahl: http://nodejs.org/api.html#fs-unlink-114 [14:47] mitkok has joined the channel [14:47] ceej: tjholowaychuk: Morning [14:47] tjholowaychuk: ceej: hey! morning man [14:48] ceej: ? have you had connect running on heroku? [14:48] ryan_gahl: mjr_: unlink? thought that was for symlinks [14:48] ryan_gahl: unlink == rm? [14:49] bradleymeck has joined the channel [14:49] tjholowaychuk: ceej: not yet, I have a site that I plan on deploying to heroku but not for a while still [14:49] jos3000 has joined the channel [14:50] ryan_gahl: mjr_: ok my bad, found the unlink command - not a linux pro [14:50] ryan_gahl: but what about the recursive case? [14:51] ceej: tjholowaychuk: ah....I don't think I'm going to be able to do this app on it then :/ It's because everything is wrapped in the connect script right? [14:51] davidsklar has joined the channel [14:51] tjholowaychuk: ceej: you dont have to use bin/connect at all, its just handy (well will be) [14:51] tjholowaychuk: you can just createServer(....).listen(3000); like http.Server [14:51] jakehow has joined the channel [14:51] zomgbie has joined the channel [14:51] jherdman has joined the channel [14:52] ceej: tjholowaychuk: I tried that.... i get a bunch of fails [14:52] ceej: says a lot of things are missing [14:52] tjholowaychuk: gist? might just be a require.paths issue [14:52] zomgbie has joined the channel [14:53] ceej: Ye i can output the error one sec [14:54] ajpiano has joined the channel [14:56] creationix: ceej: I have a connect app on heroku [14:56] creationix: but it has issues with serving binary files [14:56] creationix: http://sousaball.heroku.com/ [14:57] creationix: the heroku guys has no clue what was wrong [14:57] creationix: http://github.com/creationix/sousaball [14:57] kevwil has joined the channel [14:58] creationix: the server.js is an adapter to get connect apps on heroku's system [14:58] creationix: hmm, actually that's not the new code [14:58] creationix: just a sec [14:58] micheil has joined the channel [14:58] ceej: Hey Tim I remember that.... [14:59] micheil: morning' folks [14:59] creationix: micheil: mornin' [14:59] creationix: ceej: that's right you were having the same problem with express right? [14:59] creationix: on heroku [14:59] mjr_: ryan_gahl: unlink is what rm does. [15:00] tjholowaychuk: creationix: not 100% but i think the problem with express is that for larger files we switch to using a stream [15:00] micheil: ACTION is working on his smtp module [15:00] tjholowaychuk: so transfer encoding chunked which fucks up varnish (or something they use) [15:00] mjr_: In Unix files are all basically "links" in the filesystem to the start of a file. There are hard links and soft links. The soft links are also known as symbolic links. [15:01] creationix: tjholowaychuk: strange, I'm just sending the entire body as a buffer in connect [15:02] tjholowaychuk: creationix: that should be fine for most cases but if you have a massive file then not so good [15:02] markwubben has joined the channel [15:02] ryan_gahl: mjr_: got that now (googled unlink) -- but still wondering about how to whack a directory that has files in it without having to manually recurse and unlink the files [15:02] creationix: ceej: ok, pushed the real code http://github.com/creationix/sousaball/blob/master/server.js [15:03] jmar777 has joined the channel [15:03] ryan_gahl: (and without doing what i did with child_process.exec("rm -r " + dirName, callback)) [15:04] creationix: ryan_gahl: I think you have to do it manually, I'm pretty sure there isn't a system level call to recursivly delete a folder [15:04] ryan_gahl: rm -r does it [15:04] creationix: it's just built in as a user-level function in "rm" [15:04] mjr_: ryan_gahl: issacs posted a snippet that did this recently [15:04] mjr_: I can't remember where though. [15:05] micheil: ryan_gahl: rm is a wrapper. [15:05] micheil: it'd be probably on github's gist service [15:05] ryan_gahl: ok, so are we saying rm is a wrapper, therefore don't use it? [15:06] micheil: no [15:06] mjr_: how do you search gist for all gists from a user? [15:06] micheil: I'm saying it's a wrapper around a the gnu c library's unlink function [15:06] creationix: you know you're dealing with low level stuff when you consider posix utilities as high-level wrappers [15:06] ryan_gahl: lol [15:07] micheil: mjr_: http://gist.github.com/isaacs/ [15:07] ceej: sorry I'm on the phone with sprint [15:07] ryan_gahl: micheil: yep, got it... still my question: best node-way to whack a dir? [15:07] micheil: ryan_gahl: for now, write your own wrapper. [15:07] micheil: iirc I did have a patch at one stage for this, but we rejected it, as it can easily be done in JS [15:08] ryan_gahl: which will look like this: child_process.exec("rm -r " + dirName) [15:08] mjr_: yeah, I don't see it in that list. Anyway, the way rm -r works is you read a directory, then call unlink on each file. If you find a directory in the list, then you go into that directory and read it, etc. [15:08] ceej: creationix: tjholowaychuk: http://pastie.textmate.org/private/kd5rafjhq5gve43oeohcg [15:08] micheil: ryan_gahl: nup [15:08] mjr_: ryan_gahl: for now though, you might as well just child_process it. [15:08] micheil: ryan_gahl: use fs.readDir() [15:08] micheil: then a loop, and unlink each file, returning out if there's an error [15:08] tjholowaychuk: ahhh stiff coffee holy fuck [15:09] ceej: lol [15:09] gf3: yo tjholowaychuk, do you work for Sencha? [15:09] ceej: I drink a sugar free rockstar every morning [15:09] gf3: ceej: good god [15:09] tjholowaychuk: gf3: yup! [15:09] ceej: gets me buzzing lol [15:09] gf3: ceej: do you have a hole in your stomach? [15:09] gf3: tjholowaychuk: ahh cool :) [15:09] ceej: I have a lead stomach [15:09] tjholowaychuk: ceej: haha I drink vodka rockstars all the time [15:09] micheil: 1.5hours sleep gets me buzzing every morning. [15:10] ceej: mines minus the vodka :) [15:10] gf3: sleep is for the weak [15:10] gf3: you can sleep when you're dead [15:10] tjholowaychuk: yeah exactly haha [15:10] ceej: 16oz can lol [15:10] tjholowaychuk: fuck sleep [15:10] micheil: gf3: cofffee, seen that poster? [15:10] creationix: gf3: which will be sooner if you don't sleep [15:10] gf3: micheil: I have not! [15:10] gf3: creationix: pffffft! [15:10] micheil: oooh... one sec [15:10] nostromo has left the channel [15:10] ryan_gahl: yeah, i grok how the manual recursion would work. I am, however, a lazy dev looking for existing solutions. If "rm -r" already implements what i want, why on earth would i re-implement [15:10] tjholowaychuk: ceej: yo, that is a weird / interesting way to do the config haha [15:11] ceej: well I'm eventually going to dynamically build the config [15:11] ceej: it works using connect just fine [15:11] micheil: ryan_gahl: to be faster? [15:11] micheil: ryan_gahl: I dunno. [15:11] creationix: ryan_gahl: there is a delay of a couple ms in creating a child process [15:11] ryan_gahl: oh, yeah, not an issue [15:11] creationix: implementing it by hand, while a lot more work may be faster [15:11] creationix: but yeah, usually that doesn't matter [15:11] ryan_gahl: this isn't something that would occur during runtime [15:11] micheil: gf3: not the original, but: http://30.media.tumblr.com/bJDOxJ6OYq4qov3chQjChZpfo1_500.jpg [15:11] tjholowaychuk: fuck this coffee is nasty what the hell [15:12] gf3: micheil: ahaha, priceless [15:12] micheil: it is. [15:12] creationix: ceej: so what's the problem with your app, missing libraries? [15:12] gf3: tjholowaychuk, micheil: doppio espresso twice a day for me! [15:12] micheil: gf3: quad shot latte. [15:12] ryan_gahl: this is for a patch to nodules to allow a "-refresh" flag to make it whack all downloaded dependencies and refetch them [15:12] gf3: micheil: motherfu- [15:12] ryan_gahl: speed optimization not a concern [15:12] micheil: gives a kick in the face. [15:12] sechrist__ has joined the channel [15:13] gf3: micheil: this girl I know get's a 12-shot iced venti latte [15:13] tjholowaychuk: creationix, ceej: maybe we need index.js at root so you can have vendor/{foo,bar,connect} and then just unshift that path [15:13] gf3: she is going to die soon [15:13] micheil: fuuuu. [15:13] gf3: s/get's/gets/ [15:13] tjholowaychuk: ceej: but right now you would need to unshift vendor/connect/lib [15:13] micheil: gf3: that's some serious relationship she's in with with coffee. [15:13] blowery: that's a lot of milk [15:13] gf3: right? [15:14] tjholowaychuk: ceej: rest's router is actually a bit more flexible than express though :) worked a few things i wanted in there [15:14] creationix: ceej: so you only need to put the contents of lib in your vendor folder [15:14] tjholowaychuk: just no fancy dsl (yet) [15:14] creationix: not the entire connect repo [15:14] tjholowaychuk: he might just have a submodule [15:15] creationix: I usually have a folder called "support" that's the same level as lib [15:15] tjholowaychuk: me too, vendor sucks [15:15] tjholowaychuk: or deps even [15:15] creationix: then in "lib" I symlink to the contents of the lib folders in the various libraries in support [15:15] jedschmidt has joined the channel [15:16] creationix: but since heroku doesn't support submodules, I just inlined the contents of connect's lib into my local lib in my app [15:16] tjholowaychuk: i guess index.js would be no good if your trying to path your way down to some connect internals [15:16] botanicus has joined the channel [15:16] creationix: http://github.com/creationix/sousaball/tree/master/lib/ [15:18] tjholowaychuk: i think if i did not have git, i would just kill myself [15:18] tjholowaychuk: cvs [15:18] tjholowaychuk: ftw [15:19] gerad has joined the channel [15:19] creationix: hmm, maybe I should start a beta hosting program for connect apps [15:20] ryan_gahl: cvs, git, svn... for pussies. I just 'save as' every time i edit a file and suffix a datestring to the file name along with a note [15:20] ryan_gahl: "app_6-10-10_added_config_stuff.js [15:20] creationix: ceej: tjholowaychuk: anybody want to be a tester [15:20] creationix: ryan_gahl: :D [15:21] technoweenie has joined the channel [15:21] ceej: member:ceej member:tjholowaychuk: back sorry was on the phone to sprint [15:21] ceej: creationix: [15:21] ceej: lol silly copy and paste [15:22] creationix: ACTION tries to ssh over my tethered edge connection [15:22] tjholowaychuk: ACTION tries to enjoy my nasty coffee [15:23] ceej: member:tjholowaychuk: so there's no way right now to run all the connect modules with http (node) ? [15:23] tjholowaychuk: ACTION dies a little inside [15:23] ceej: can we not just include them? [15:23] gf3: ACTION emails tjholowaychuk better coffee [15:23] creationix: ceej: what do you mean [15:23] tjholowaychuk: ceej: mmm some of them you could just have function(req,res){ require('connect/filters/log').handle(req,res) ..... [15:23] tjholowaychuk: gf3 haha i wish [15:24] tjholowaychuk: ceej: minus the require() in the func, haha just to illustrate [15:24] kevwil has joined the channel [15:24] ceej: creationix: just trying to figure out the best way to use connect on heroku... [15:25] tjholowaychuk: hopefully process.daemonize() is re-written or accepted soon [15:25] ceej: hmm so http://github.com/creationix/sousaball/blob/master/server.js works? [15:25] tjholowaychuk: finish this damn thing up [15:25] micheil: ACTION is busy drinking sort of freshly brewed premium coffee. [15:25] creationix: ceej: yep, except for the binary image corruption [15:25] blowery: micheil: you went to mcdonald's? [15:26] micheil: hmm.. well, that was an easy part: getting the client to connect >_> [15:26] micheil: blowery: yuck. [15:26] ceej: creationix: sweet I'll just make the new app 95 style [15:26] micheil: blowery: I have my own equipment for coffee making. [15:26] ceej: lol [15:26] micheil: blowery: and I buy premium beans every few weeks [15:26] gf3: coffee is one of my highlight words [15:26] micheil: (when I have the money.) [15:26] blowery: micheil: i roast :) [15:26] gf3: LOL: http://img.gf3.ca/e7476623c1e708866ebb5b22f3eb77a0.png [15:26] ryan_gahl: ACTION runs across street to store to get fresh roasted beans to grind up and brew. [15:27] micheil: blowery: I haven't gotten that far in, because I have a roaster within 150km's [15:27] creationix: ceej: btw, where did you want to meet tonight, a coffee shop with wifi? [15:27] blowery: micheil: the roaster in town is terrible, sadly. and greens are less than half the price of roasted, so i just do it [15:28] blowery: micheil: what do you use for brewing? [15:28] ceej: creationix: sure, I have ano idea what's a good place as I'm not familiar with the area yet [15:28] ceej: I know some cohabitat people wanted to meet up too [15:28] ceej: http://cohabitat.us/ [15:28] micheil: blowery: currently a cheap-ish espresso machine or french press. [15:28] micheil: I also have a moka pot [15:28] softdrink has joined the channel [15:28] creationix: ceej: nice, did they want to meet at their place in uptown? [15:29] saikat has joined the channel [15:29] mape: creationix: nice job on the game :) [15:29] creationix: I usually meet in Addison (just north of dallas) [15:29] creationix: mape: thanks, one of these days I'll finish it [15:29] creationix: wrote it years ago [15:29] ceej: not sure, I could give Blake a call.... did you get ahold of the other JS people you were talking to? [15:29] mape: Have you looked at adding some physics feel to the jumping? [15:29] mape: So it isn't linear [15:30] creationix: ceej: crabdude twittered to me saying he was sad he missed the meeting on wednesday [15:30] creationix: I told hi that's fine, it's today instead [15:30] creationix: mape: actually it's 100% grid based [15:30] creationix: so that wouldn't work at all [15:30] mape: so that won't work? [15:30] mape: Ah k [15:31] mape: The jumping kinda makes it feel like it is top down with a wind pushing down sideways [15:31] micheil: reckon I'd ever get a broken packet reply from an smtp server? [15:31] creationix: mape: if you look at the json in the source, then level and the phyiscs and everything are described in json [15:31] sanderjd has joined the channel [15:32] ceej: creationix: you're right it worked like a charm http://sd-test.heroku.com/ [15:32] creationix: ceej: awesome [15:32] ceej: now they just need to fix the binary issue (by maybe upgrading from 1.92 lol) [15:33] d2dchat has joined the channel [15:33] creationix: yeah, that would be nice [15:33] creationix: got to go... [15:34] d2dchat: Anyone know why I might be able to write headers to an ajax call but am having trouble writing out the body? [15:35] ceej: creationix: k speak to you in a few [15:35] d2dchat: http://gist.github.com/443789 [15:37] mattly has joined the channel [15:43] ryan_gahl: res.write(body) [15:43] ryan_gahl: not res.end(body) [15:43] ryan_gahl: (res.end() stays though) [15:45] micheil has joined the channel [15:46] micheil_mbp has joined the channel [15:47] cloudhead has joined the channel [15:49] tmpvar has joined the channel [15:52] technoweenie has joined the channel [15:56] d2dchat: ryan_gahl, modified it and still no cigar.. I'm not getting any json back [15:57] d2dchat: basically same as before [15:57] d2dchat: using firebug to debug and using $.ajax in JQuery to hit the server [15:58] markwubben has joined the channel [16:01] mitkok has joined the channel [16:02] ryan_gahl: is the client sending an accept header for text/json? [16:03] micheil has joined the channel [16:04] TomY has joined the channel [16:04] bpot has joined the channel [16:04] jos3000 has joined the channel [16:05] ryan_gahl: can you gist the request headers and the response(headers and body) you see in firebug? [16:06] tilgovi has joined the channel [16:06] linuxsable has joined the channel [16:15] mscdex: ryan_gahl: you can use res.end(body); also [16:16] steadicat has joined the channel [16:17] ryan_gahl: i stand corrected then, oops [16:18] mscdex: http is the only place you can do that though [16:18] mscdex: afaik [16:18] ryan_gahl: that's not documented [16:18] mscdex: i know heh [16:19] mscdex: you can also specify an encoding as a second parameter [16:19] TomY has joined the channel [16:19] micheil: ryah: there's something seriously funky happening with sys.puts & sys.inspect, they add heaps of whitespace to data. [16:19] ryan_gahl: right, but i assume that's not his issue (i guess it could be) [16:20] ryan_gahl: apparently he doesn't care anymore, or solved it [16:20] ryan_gahl: his request headers would probably tell the story [16:20] mscdex: i don't think so either -- and i should correct myself, it's only http ServerResponse.end that allows those extra params [16:20] mscdex: yeah [16:20] micheil: actually, it's just node-repl, it's been rather odd recently. [16:20] ryan_gahl: sweet, so i retract my standing corrected [16:21] ryan_gahl: i now stand uncorrected [16:21] mscdex: eh? [16:21] mscdex: heh [16:21] ryan_gahl: ;) [16:22] jbrantly has joined the channel [16:22] mscdex: micheil: i was about to suggest try it out in a separate .js file [16:22] mscdex: node-repl does do some strange things [16:22] micheil: yeah.. [16:23] micheil: I've noticed it inserting random characters when using arrow keys to track around in it [16:24] mscdex: escape codes i assume [16:24] micheil: probably. [16:24] micheil: something like ]D [16:24] mscdex: yep [16:24] micheil: hmm.. bbl. [16:25] mscdex: ryah should implement an easter egg in repl that pops up when someone enters the Konami code :-) [16:25] sechrist: Has there been any work done in node to facilitate fastcgi? [16:25] sechrist: ie: route php requests to handlers [16:33] [[zz]] has joined the channel [16:35] maushu has joined the channel [16:43] Dennus has joined the channel [16:43] aglemann has joined the channel [16:46] CIA-76: node: 03Ryan Dahl 07master * r9bd3942 10/ src/platform_none.cc : Add platform_none for cygwin build - http://bit.ly/ae5uLp [16:48] ryah: sechrist: no [16:48] sechrist: ah okay -- I was just curious if I could ditch lighttpd/nginx and live on 80 with node [16:50] ryan_gahl: ryah: how do you prefer patches? no patch ready, just curious because I see them in different flavors. I would think a pull request would be the best because you can use github's Fork Queue console to manage, but someone said you actually didn't like pulls? [16:50] ryah: ryan_gahl: pull requests are annoying, yes [16:51] ryah: patches are best [16:51] ryan_gahl: why though? does the Fork Queue thing on github not work well? [16:51] ryan_gahl: (noted) [16:52] sechrist: I thought people liked pull requests [16:52] ryah: i don't understand the fork queue [16:52] ryan_gahl: ah [16:52] sechrist: ryah obviously wants to be the merge master a la linus torvalds [16:52] ryah: maybe i haven't seen it [16:52] ryah: what does it do? [16:52] ryah: is it this interface to cherry-pick? [16:52] technoweenie: yup [16:52] ryan_gahl: yeah [16:52] ryah: yeah, i'm not merging code without testing it [16:53] ryan_gahl: let's you ignore commits etc [16:53] ryah: this is an actual software project [16:53] ryah: :) [16:53] technoweenie: haha [16:53] ryah: actually the best way, is a link to the commit n github [16:53] sechrist: merge code without testing = awesome [16:54] ryah: cause i can do: curl (commit url).patch | git am [16:54] sechrist: that's a colorful diff [16:54] ryan_gahl: i'm not saying merge without testing :) [16:55] ryan_gahl: gotcha, thanks - i'll keep that in mind [16:56] ryan_gahl: btw, did you find anything useful in that EventEmitter stuff i submitted (via the annoying pull request) a while back? [16:56] n8o has joined the channel [16:57] ryan_gahl: nm... i know the answer :) [16:57] n8o has left the channel [16:57] tmpvar has joined the channel [16:59] mape: tjholowaychuk: Nice with the tm bundle :) [16:59] mape: Now if only we could get tm2.. [16:59] tjholowaychuk: mape: yeah no doubt! [16:59] WALoeIII has joined the channel [17:04] ceej: creationix: you around? [17:06] micheil: night chaps' (yeah, calling an early night.) [17:06] sechrist: tjholowaychuk: is express on hiatus? [17:06] sechrist: or is everything going to Connect? [17:06] gf3: phiggins: I think the best way to indent w/ spaces is to add once space per indentation level *evil grin* [17:07] phiggins: they did it to line up the usage of the variable in the following lines [17:07] tjholowaychuk: sechrist: the plan is to get Connect rich with middleware, and then have Express sit on top of connect [17:07] phiggins: while (that) { [17:07] phiggins: that = getit(); [17:07] phiggins: } [17:07] gf3: phiggins: how useful [17:07] sechrist: I've looked at connect a bit -- I don't really see it's purpose immediately [17:07] sechrist: does it just abstract the http server? [17:08] sechrist: looks like that's what it's intended for [17:08] tjholowaychuk: sechrist: it is basically rack for node [17:08] sechrist: add sessions and stuff [17:09] sechrist: i'm not a ruby person so I have no idea what rack is [17:09] sechrist: but okay [17:10] micheil has joined the channel [17:11] micheil: hmm.. yay for recursion: ssh'ing through a socks5 proxy with my server into my server [17:11] sechrist: secure! [17:12] sechrist: I have a vps that manages all of my keys and stuff -- I proxy everything through it >.> [17:12] sechrist: $5 prgmr vps ftw [17:12] ryah: micheil: thanks for the patches [17:12] micheil: ryah: no worries :) [17:12] ryah: micheil: there's something that you might be interested in fixing.. [17:13] ryah: micheil: the tests create a lot of temp files [17:13] micheil: sechrist: yeah. I have a vps too. 20$/mo, bit different service to prgmr [17:13] ryah: micheil: often writing out to a file in the fixtures directory [17:13] micheil: yeah, I noticed that one ryah [17:13] ryah: and then deleting it after [17:13] sechrist: micheil: you use prgmr or are you saying a different service? [17:13] micheil: sechrist: I use linode. [17:13] sechrist: prgmr's support is nonexistent -- but they straight up tell you that [17:13] ryah: but the tests get fucked up, sometimes, if the test doesn't complete and the fixtures directory is left in a nn-pristine state [17:14] micheil: ryah: I was thinking it'd be good to do stubbing for files, but that doesn't really work [17:14] micheil: ryah: maybe add the fixtures directory to .gitignore? [17:14] ryah: what we should do is have a test/tmp directory [17:14] micheil: or that. [17:14] ryah: and always use that for tmp files/ directories [17:15] ryah: and it would be good if we modified the test runner to rm -rf test/tmp after each test [17:15] micheil: ryah: if you want, I could set that up tomorrow and send the patches across. [17:15] micheil: ryah: yeah, agreed on that. [17:15] ryah: so that each test gets a clean tmp dir [17:15] jetienne has joined the channel [17:15] micheil: ACTION brings up the node src. [17:16] richcollins has joined the channel [17:16] tjholowaychuk: ryah: any word on the daemonization stuff? [17:16] ryah: micheil: http://github.com/ry/node/blob/1c6671aa67c3d7f731fec415a58f7676e1468a15/test/simple/testcfg.py [17:16] ryah: tjholowaychuk: reply today [17:16] ryah: tjholowaychuk: i definitely want to kill the parent [17:16] ryah: i think [17:16] tjholowaychuk: ryah: are you sure? I wouldnt [17:16] ryah: s/definitely// [17:16] micheil: ryah: oh, I always wonder where the test setup stuff was. [17:17] tjholowaychuk: ryah: easy enough to do some of that stuff manually, plus this way you could fork off a bunch of children instead of doing the weird child_process stuff we do right now [17:17] ryah: tjholowaychuk: i don't want a binding to fork though [17:17] tjholowaychuk: yeah [17:17] tjholowaychuk: :S [17:17] tjholowaychuk: gah [17:17] tjholowaychuk: lol [17:17] ryah: tjholowaychuk: i want something that can eventually be done on mingw [17:18] sechrist: man homebrew is amazing [17:18] ryah: tjholowaychuk: anyway, i'll reply later [17:18] sechrist: why did fink and macports ever exist [17:18] tjholowaychuk: ryah: sounds good thanks [17:18] ryah: i did some research on "daemons" in windows [17:18] ryah: and the proper abstracton to cover them both [17:18] gf3: sechrist: because there was nothing better at the time [17:18] gf3: sechrist: and BSD port was already established [17:18] enherit has joined the channel [17:18] ryah: micheil: yeah, so a tmp directory would be super cool [17:18] ryah: micheil: it's been bugging me for a long time [17:19] sechrist: I could apply the same argument and ask why apache is thread based and not event driven -- as threads make more sense now than they did 15 years ago [17:19] sechrist: hehe [17:19] micheil: ryah: the thing that I kept hitting was that I couldn't pull after running tests due to mismatched / changed files. [17:19] sechrist: as we increase in cores we discover asynchronous! hooray reverse logic [17:20] sechrist: then again epoll should have existed in 1994 so whatever [17:20] sechrist: i'm just trollin [17:20] micheil: ryah: do you know if there's an after test callback in the python? [17:21] ryah: micheil: i don't know how the test runner works [17:21] micheil: okay [17:21] ryah: micheil: but i assume it's calling system() and it's sync [17:21] ph^ has joined the channel [17:21] micheil: it actually uses threads. [17:21] micheil: (no kidding.) [17:21] boaz has joined the channel [17:21] sechrist: threaddsss [17:22] ryah: sechrist: is that like a golum voice? [17:22] sechrist: ^ [17:22] micheil: my precious precious threadssss... [17:22] micheil: :D [17:23] markwubben has joined the channel [17:23] sechrist: speaking of which -- node-webworkers is effectively the only way to simulate threading in node right now right? [17:24] sechrist: or is "simulating threading" a bad way to describe it [17:24] micheil: oh fun: [17:24] micheil: def filtre(name, nn): [17:24] micheil: I'm sure that works good. [17:25] sechrist: node-prefork lulz [17:28] ryah: doh, he left [17:28] micheil has joined the channel [17:28] ceej has joined the channel [17:28] ryah: micheil: Renaming tcp tests to net tests, updating test code slightly [17:28] micheil: ? [17:28] ryah: micheil: what got 'updated'? [17:29] sechrist: ryah: how well is udp working? I haven't really checked it out [17:29] micheil: oh, um, there were a few typos in the error reports [17:29] micheil: and a few other things. [17:29] ryah: sechrist: it's working [17:29] femto has joined the channel [17:30] sechrist: there's nothing left to do for it? it's just working? awesome [17:30] micheil: and I just realised what I did there on that patch. [17:30] micheil: >_> [17:30] ryah: hm.. im not good enough with git to know how to get a diff? [17:30] ryah: of what changed... [17:30] micheil: it was the removal of variables that weren't used, like: - have_openssl=true; [17:31] micheil: things that looked much like debris from older tests, which hadn't been removed [17:31] ryah: hm [17:32] micheil: actually. [17:32] micheil: looking at the patch and it didn't actually do that. [17:32] micheil: so, the commit message is wrong. [17:32] micheil: it actually is just a movement of the files. [17:32] mitkok: hey, guys. Is there a way to run vi for example from node or in node-repl ? [17:32] sechrist: dude pdf.js crashes my firefox [17:32] micheil: ryah: look at the lines changed. [17:32] steadicat has joined the channel [17:32] sechrist: jimbastard sploitin my mac [17:33] micheil: [73, 28, 55, 96] and [73, 28, 55, 96] [17:33] micheil: test-net-* and test-tcp-* respectively [17:33] micheil: or rather: 8 files changed, 252 insertions(+), 252 deletions(-) [17:34] micheil: ryah: so, yeah, the commit message there is wrong. [17:35] sechrist: dude homebrew install couchdb has been running for like an hour [17:35] sechrist: wah [17:35] kpx: ryah: you designed the irc chat program right? with the http wrapper? [17:35] micheil: ryah: the best I can do on tests/tmp is make it git ignored and that's about all [17:36] micheil: unless I hitch process.exit or something [17:36] sechrist: gitnored [17:36] ryah: micheil: the mkdir test/tmp and rm -rf test/tmp should be in python [17:36] ryah: kpx: ? [17:36] micheil: ryah: a matter of where. [17:37] softdrink has joined the channel [17:37] kpx: ryah: The irc client in node js with the http instead of tcp [17:37] ryah: kpx: i have made an irc client in node, but i don't think it's public - so i guess that's not what you're talking about [17:38] ryah: kpx: chat.nodejs.org ? [17:39] kpx: ryah :actually halfhalo project on git [17:39] CIA-76: node: 03Micheil Smith 07master * r3f48276 10/ test/simple/test-crypto.js : Coding style changes, added tests in for the md5, sha256, etc methods - http://bit.ly/cjDYJ5 [17:39] CIA-76: node: 03Micheil Smith 07master * re0d30b5 10/ (22 files in 2 dirs): Renaming tcp tests to net tests - http://bit.ly/c6X4WT [17:39] CIA-76: node: 03Micheil Smith 07master * r70c3e66 10/ test/simple/test-child-process-custom-fds.js : test-child-process-custom-fds to cleanup after running - http://bit.ly/bScWtU [17:40] micheil: ryah: I think this'll be a job for someone familiar with the python testing tools. [17:40] ryah: kpx: no, i didn't writ ethat [17:40] kpx: ryah : K [17:40] ryah: micheil: i don't think anyone is familiar with it :) [17:40] micheil: :( [17:40] micheil: we need a better test framework then :P [17:41] micheil: hmm.. 8th on the contributor list.. [17:41] kpx: any one use the halfhalo irc client? [17:43] kpx: http://github.com/halfhalo/Node.js-IRC-Client [17:45] ec: micheil: what’s up with the testing tools? [17:46] micheil: ec: we're wanting to add in a method to empty a directory after each test runs [17:46] cloudhead has joined the channel [17:46] micheil: we're not quite sure were said method needs to go. [17:48] ryah: micheil: i liek the test runner [17:48] ryah: it's v8's [17:48] micheil: ryah: I was joking about replacing it, it's good, but it'd be better if we had someone that understood it 100% [17:48] micheil: (or, 75%, that's awesome too) [17:49] kpx: well [17:49] blowery: so [17:49] kpx: i had this problem with the client.html file [17:49] kpx: says that it cant find the [17:49] kpx: require key word [17:50] micheil: hmm.. that shouldn't be in a clientside file.. [17:51] micheil: night chaps' [17:51] kpx: micheil: well it calls socke.io.js [17:52] kpx: and there the key word require is not found [17:52] kpx: on the first line [17:52] micheil: kpx: uhh.. not sure. [17:52] micheil: ACTION doesn't work with sockets.io [17:56] kpx: Socket.IO anyone!? [17:58] gerad: kpx: you need to use the socket.io client libs on the client side [17:59] kpx: no so i dont understand this by client you mean run a client.html in a browser right? Or do i have to do something else? [18:00] gerad: http://github.com/gerad/lazeroids-node/blob/master/views/layout.html.haml#L12 [18:01] gerad: http://github.com/gerad/lazeroids-node/blob/master/public/javascripts/socket.io/socket.io.js [18:03] kodisha has joined the channel [18:03] kpx: Wait what does this icon on the folder here http://github.com/LearnBoost/Socket.IO-node/tree/master/test/ mean? [18:04] kpx: that icon where ever it is i cant seem to get the files inside one of those [18:06] gerad: it's a git submodule [18:06] gerad: a link to another git repository [18:07] gerad: kind of like a folder symlink or alias [18:07] qFox has joined the channel [18:07] gerad: in your server side socket io git repository [18:07] gerad: you can do git submodule update —init [18:07] gerad: to get that folder [18:17] morganallen has joined the channel [18:19] linuxsable has joined the channel [18:25] kodisha: what is equivalent of PHP's file_exists() in node? [18:25] mape: use fs and check the err [18:26] mostlygeek has joined the channel [18:29] kriskowal has joined the channel [18:30] aconran has joined the channel [18:31] mscdex: someone had a patch for fs.fileExists on the mailing list i think [18:31] kodisha: really, let me google [18:32] mscdex: or maybe it was path.exists [18:32] mscdex: i think it was the latter, sorry [18:33] mscdex: but yeah, you could use fs.stat wrapped in a try/catch i think [18:33] Determinist has joined the channel [18:33] mscdex: that's one way anyway [18:33] stephenjudkins has joined the channel [18:33] fizx has joined the channel [18:34] ryah: kodisha: path.exists() [18:35] kodisha: thanks, is that already in 1.98 ? [18:36] mscdex: but path.exists() doesn't tell you if it's a file or directory? [18:39] kodisha: i guess not [18:39] kodisha: http://github.com/ry/node/blob/master/lib/path.js#L76 [18:39] mape: Then just check the error? [18:41] jakehow has joined the channel [18:42] mscdex: i usually do the stat thing, then if an exception isn't thrown, i check to see if it's a file and not a dir [18:42] kpx: Ok I as able to run the socket.io server listeneing on port 8080 [18:42] kpx: but my socket.io.client keeps saying connecting [18:43] kpx: as in the client.html file... with no errors [18:44] mscdex: kpx: node version and socket.io and socket.io-node version? [18:45] kpx: mscdex: I just cloned it from the git here http://github.com/LearnBoost/Socket.IO.git [18:45] teemow has joined the channel [18:45] kpx: and ran the files [18:45] kpx: I dont know if apache interferes with this... But i shut it down... [18:46] mscdex: ok, but what version of socket.io-node? [18:46] mscdex: HEAD also? [18:46] mscdex: and what browser and version? [18:46] kpx: chrome 5.0.375 [18:48] hdon has joined the channel [18:48] mscdex: hmm [18:48] kpx: mscdex: This is the first time i copied anything from GIT... So i dont what oyu mean by How do I find the version of Socket.io-node... Ijust used the "git clone http://github.com/LearnBoost/Socket.IO-node.git --recursive" [18:48] kpx: and then ran the examples in my test directory [18:49] mscdex: ok, that's latest then [18:49] kpx: actually the ./test directory in the root has those two files server.js [18:49] kpx: and client.html [18:49] kpx: the server is running for sure [18:50] kpx: cause in the browser it displays "Try the chat example" [18:50] kpx: when i say http://localhost on chrome aftr i started the server [18:50] namelessjon has joined the channel [18:51] kpx: CLI : 18 Jun 11:43:54 - socket.io ready - accepting connections [18:55] technoweenie has joined the channel [18:56] webr3: ACTION notes that etherpad has a huge amount of js goodness in it, lot's that could be ported [18:58] creationix has joined the channel [18:59] ryan_gahl: those poor cygwin people - always gonna have shit breaking :) [19:02] ryan_gahl: webr3: you have a good link handy to look at this treasure trove you speak of [19:02] ryan_gahl: ? [19:03] femtoo has joined the channel [19:04] kpx: mscdex: Ok i guess i will debug [19:04] kpx: I am able to send messages though [19:04] kpx: as in through chrome debugger [19:05] kpx: the server is recieving that [19:05] kpx: just the chat server is not working for some reason... [19:08] binary42 has joined the channel [19:09] kpx: thanks all ill be back once i figure out whats wrong [19:09] ceej: creationix: is there a reason you use http://github.com/creationix/microtemplates instead of http://github.com/cramforce/node-asyncEJS ? [19:09] ryan_gahl: webr3: nm, i had to resort to the internet to find the repo myself [19:09] kpx: BTW is there a chance that the latest version is not stable [19:09] ryan_gahl: ;) [19:09] kpx: mscdex:? [19:10] creationix: ceej: microtemplates are simpler [19:10] creationix: sousaball has hardly any server-side logic [19:10] agnat has joined the channel [19:10] creationix: I should really just ajax the data instead of embedding it on the page [19:10] ceej: I get you [19:11] webr3: ryan_gahl, http://code.google.com/p/etherpad/source/browse/trunk/ [19:11] cadorn has joined the channel [19:11] webr3: loads in both etherpad and infrastructure [19:11] ryan_gahl: you're like 120 seconds too late webr3, but thanks anyway [19:11] webr3: websockets clients the whole lot (yes i know covered, but lots to play with) [19:11] webr3: lol np [19:11] mikeal: i can't wait for someone to do a Redis + node + Bespin replacement for etherpad [19:11] kpx has left the channel [19:12] teemow has joined the channel [19:12] webr3: mikeal, and wrap it all up in distributed webid provided goodness (hopefully) [19:12] ryan_gahl: mikeal: Bespin is in my framework, nowhere near releasing yet [19:12] agnat: mikeal: if you can't wait .. just do it ;-) [19:12] mikeal: i wrote one with CouchDB like a year ago that used _changes [19:13] ryan_gahl: but backend's gonna be more like Pintura + whatever db you want [19:13] mikeal: but Bespin kinda sucked for embedding back then [19:13] mikeal: the new stuff looks much nicer [19:13] ryan_gahl: (not whatever, but whatever db has adapters ready) [19:14] mikeal: no [19:14] mikeal: you don't want a db backend [19:14] ryan_gahl: lol [19:14] mikeal: seriously [19:14] mikeal: you want a message queue [19:14] ryan_gahl: by db i mean "place to put shit" [19:14] mikeal: and Redis makes a better message queue than any of the *MQ guys [19:15] mikeal: so, you can't make it a system where everyone is updating a record [19:15] mikeal: that won't work [19:15] ryan_gahl: it will if ACID is a requirement, and you need to use OLTP [19:16] ryan_gahl: there's not a "right" way [19:16] ryan_gahl: my framework will accept that [19:16] mikeal: if the db has good consistency then the revision you're trying to update will be out of date once the update interval is faster than the delay to the client [19:16] mikeal: if the db has crap consistency then you'll just keep overwriting each others changes [19:16] ctp has joined the channel [19:16] mikeal: you need to create a new record for each edit, and you need a realtime channel to the updates on that collection [19:17] mikeal: thats Redis [19:17] ryan_gahl: yeah yeah, different applications use different sides of the CAP triangle... you're speaking about like one specific use case that's in your head [19:17] mikeal: when you clear the set because nobody is actively updating the document, then you store it somewhere else [19:17] mikeal: I'm talking about a use case, and how to solve it [19:17] mikeal: and no single datastore can [19:18] mikeal: Redis does almost all of it, but you still need to stick the document somewhere when nobody is editing it [19:18] ryan_gahl: right, and i said "my framework will use Pintura + whatever db has adapters ready" - speaking to a use-case agnostic framework [19:18] jameshome has joined the channel [19:19] ryan_gahl: like, redis for this, cassandra for that, voltdb for quuz [19:19] ryan_gahl: heh... foo bar baz [19:19] cloudhead: anyone got a nice way of converting {0: 1, 1: 2} into [1, 2] ? [19:19] mikeal: i don't see why you need Pintura [19:19] mikeal: or "adapters" [19:19] ryan_gahl: ANYWHO... yeahhhh bespin's pretty cool eh [19:19] mikeal: the application code is minimal [19:19] cloudhead: setting the __proto__ to Array.prototype works, but I was hoping there's a nicer way [19:20] ryan_gahl: what do you mean "the application code" [19:20] ryan_gahl: yours? [19:20] creationix has joined the channel [19:21] fizx has joined the channel [19:22] creationix has joined the channel [19:22] jxson has joined the channel [19:23] gerad has left the channel [19:24] namelessjon: How would I go about writing a node.js server to handle a protocol which consists of a 4 byte integer length, and then an xml body of that length? I don't see how to get from the echo server setup to there. As in, how to treat the len + message as one 'message'. Where would people suggest I start to look? [19:24] ryan_gahl: yeah ok, now i get where our streams crossed - you said redis+node+bespin replacement for etherpad - and I saw "bespin" and got excited and said something about me "general framework" i'm working on - and then you were all "wha??" and then I was like "psssh"... [19:24] webr3: namelessjon, which protocol [19:25] ryan_gahl: s/me/my/ [19:25] fizx has left the channel [19:26] creationix has joined the channel [19:27] namelessjon: webr3: It's how OpenRPG expects messages. (So I'm almost 100% there isn't a handler out in nodeland already). Anyway, each message should look as I described. [19:28] creationix: wow, my connection is especially flakey today [19:28] stagas has joined the channel [19:32] boaz has joined the channel [19:32] creationix: ryah: did you ever decide on the platform specific stuff [19:32] creationix: looks like I missed a conversation earlier [19:33] softdrink has joined the channel [19:34] technoweenie has joined the channel [19:35] bradleymeck: namelessjon is it sent over tcp or http? [19:36] mape: Anyone know of how many have signed up for node knockout? [19:36] namelessjon: bradleymeck: tcp [19:40] bradleymeck: namelessjon:id recommend using grabbing first 4 bytes then using x=0|chunk[0]|chunk[1]<<8|chunk[2]<<16 etc dep on endian, then fire the rest at http://github.com/tautologistics/node-htmlparser and deal w/ that output [19:41] d2dchat has joined the channel [19:42] namelessjon: bradleymeck: Doesn't that assume len + data all comes in the same packet? [19:42] bradleymeck: that parser can go chunk by chunk [19:42] bradleymeck: so slice off the first 4 and then send the parser chunks until done [19:44] technowe_ has joined the channel [19:46] wink_ has joined the channel [19:47] creationix has joined the channel [19:47] sveisvei has joined the channel [19:47] wink_: what is the proper node idiom for implementing synchronous tasks? a simple example would be, say i have a db query that depending on the results returned will need to issue N more db queries, surely there is a better pattern than deep nesting? [19:48] creationix: wink_: there are libraries that help [19:48] maushu has joined the channel [19:48] creationix: http://github.com/creationix/step is my favorite, but there are many others [19:48] mape: creationix: Glad to see you aren't being partial ;) [19:49] wink_: creationix: ok thank you, i've read alot of your stuff on howto node [19:49] namelessjon: bradleymeck: So how do I tell when I'm 'done'? I'm having difficulty getting my head around how I figure out which message I'm in? (I wasn't so much bothered by the parsing, as by how to deal with it in logical chunks?) [19:49] wink_: <3 [19:49] zomgbie has joined the channel [19:49] mape: wink_: The main thing is that the way to do it isn't to make it sync. That will not play nice with the other kids [19:50] creationix: I think by sync he means sequential [19:50] wink_: i do [19:50] creationix: not blocking [19:50] wink_: correct [19:50] bradleymeck: set up a flag to see how many bytes you have recieved, if its above 4 keep sending stuff to xml parser, if its below 4 slice off the first few bytes until you have 4 to be made into the int [19:50] creationix: also if you like dojo style promises, node-promise is really good for that [19:50] wink_: its not the blocking im concerned with, its executing things in order without having to nest stuff 18 levels deep [19:51] maushu: Ok, mongoose is making me twitch. [19:51] maushu: WHY WONT IT CHANGE THE VAR?! [19:51] ryan_gahl: state machines are the bomb, just sayin [19:51] mape: oh k [19:52] creationix: wink_: also proper error handling is a pain when manually nesting [19:52] bradleymeck: and the message itself should fire off the 'end' or 'close' listener for your connection if it closes after all that [19:52] creationix: you "should" try..catch at every level of callback, which double the nesting level and really bloats code [19:53] creationix: Step and node-promise and others handle all this for you [19:53] ryan_gahl: or a state machine with an error state [19:53] maushu: creationix, hide the code inside a function? [19:53] creationix: maushu: what do you mean? [19:53] wink_: step looks like it would be suitable for my experiments :> [19:53] maushu: Put all that code and catching exceptions in a function with a callback. [19:54] namelessjon: bradleymeck: It's a continuous stream of len + message sets, rather than connect + send + disconnect. [19:54] maushu: Then hide the function in shame. [19:54] creationix: maushu: that's kinda what step does [19:54] bradleymeck: so after your flag > len reset the flag to 0 [19:54] maushu: Shame on it. [19:55] bradleymeck: and slice the first part of the message that made it go over to be sent to the xml parser, act as if the rest is a new msg [19:55] namelessjon: bradleymeck: Ok, so. On connect, set flag = 0; read bytes til I have 4, figure length, read bytes til I have length, then repeat? [19:55] bradleymeck: yub [19:56] creationix: bradleymeck: it would be really nice if someone made a c library that worked like tcp streams, but did the framing and chunking for you [19:56] creationix: maybe line based json or have the first 4 bytes be the length and then send binary data [19:57] ryah: creationix: yeah i just put in platform files [19:57] bradleymeck: not sure i figure your spec creationix [19:57] ryah: creationix: so i want to get GetExecPath() in there [19:57] creationix: ryah: nice! [19:57] namelessjon: bradleymeck: Okay, I'll try that, thanks. Oh, how would I have one counter per user? [19:57] ryah: creationix: patches welcome as always :) [19:57] ryah: creationix: the second thign i want is "process.title = 'npm'" [19:57] creationix: ryah: maybe when I have a proper internet connection and a home [19:58] creationix: yeah, that would be cool [19:58] namelessjon: bradleymeck: Well, per connection. [19:58] bradleymeck: use a closure id say [19:59] wink_: creationix, the Step call doesn't block does it? [19:59] creationix: nope, nothing blocks [19:59] creationix: it will call the first step right away too [19:59] creationix: it's impossible to make anything block in node without writing c code [19:59] wink_: ok, let me rephrase with some pseudo code, one sec [20:00] ewdafa has joined the channel [20:01] maushu: AAAAAAAAAAHHHHHHh [20:01] gerad has joined the channel [20:01] maushu: Thats it. I'm changing to redis. [20:01] creationix: ryah: I have a question about stream's pause [20:01] bradleymeck: creationix -> while(true){} [20:01] ryah: creationix: yes [20:01] maushu: while(meaning_of_life == 42) {} [20:01] creationix: bradleymeck: ok, that's cheating though ;) [20:02] creationix: maushu: :D [20:02] mape: maushu: vs? [20:02] mape: memcache? [20:02] mape: mongo? [20:02] creationix: ryah: if I call pause immedietly on an http request object, will it pause all events [20:02] gerad has left the channel [20:02] maushu: mape, mongo. [20:02] maushu: It's flipping me. [20:02] mape: maushu: What was the issue? [20:02] maushu: ...and I think it's mostly mongoose's fault than mongo itself. [20:02] ryah: creationix: no [20:02] mape: Heard some nasty/of the cuff hackernews stuff [20:03] maushu: mape, wat? Link. [20:03] ryah: creationix: you can still recv 'data' events. [20:03] mape: maushu: isn't mongoose bad since it is doing sync stuff? [20:03] creationix: ryah: so it might emit some that were already pending [20:03] ryah: ye [20:03] maushu: Isn't it async with cache? [20:03] wink_: creationix: http://pastebin.com/bgJdpxUQ , my understanding is that all of the rows would attempt to execute their respective 'steps' as async as possible? [20:03] creationix: ryah: ok, so pause is only good for data throttling [20:03] ryah: right [20:03] creationix: dang, that complicates things [20:03] ryah: you might recv another 10kb , but not another 2mb [20:03] creationix: oh well [20:03] namelessjon: bradleymeck: Right, I'll give it a try. Thanks for your suggestions. [20:04] ryah: creationix: i've been thinking about changing that [20:04] mape: maushu: hmmm hacker news isn't the best place to find old links, but had to do with issues of a dude using experimental builds on a 32bit system, corrupted and lost data and all kinda nasty stuff [20:04] ryah: creationix: if you wanted to go into http code and make it queue those events, i wouldn't be opposed to it [20:04] wink_: mape: i've lost data on 32 bit mongo as well [20:04] wink_: 64bit has been a-ok so far [20:04] ryah: creationix: on sockets, you can assume you won't recv more events. [20:04] creationix: ryah: here is my workaround for now http://github.com/extjs/Connect/blob/master/lib/connect/providers/static.js#L32 [20:05] maushu: mape, http://news.ycombinator.com/item?id=1434489 ? [20:05] creationix: I basically manually buffer the events and re-emit them later [20:05] mape: wink_: Yeah.. Seems like a big stink, but then again I don't see why people run server OSes with 32bit [20:05] ryah: creationix: why do you need that? [20:05] mape: maushu: jup [20:05] creationix: I think that's safe since emit is synchronous as far as I can tell [20:05] wink_: mape: well especially when mongo has very low 32 bit limits :P [20:05] creationix: ryah: because the static middleware may sit in front of another middleware [20:05] creationix: and it doesn't know where to branch till after a stat call [20:05] maushu: Maybe key-value is better than objects. [20:06] creationix: but by then data events have already fired [20:06] ryah: creationix: hm [20:06] ryah: creationix: we should probably just do this in http.js [20:06] ryah: probably other people want it too [20:06] mape: Perhaps a dumb question? But why use memcache when you have js objects? unless you want to share the cache? [20:06] creationix: yeah, will simplify a lot of stuff [20:06] maushu: Mongodb looks alot more like a black box to me than redis and besides, since I understand redis protocol pretty well (waaay more easy than mongodb's protocol) I can maintain the lib. [20:07] maushu: mape, memcache? [20:07] mape: maushu: Yeah? [20:07] maushu: redis is different from memcache, for one thing it keeps a record in disk that its saved from time to time. [20:07] mape: Oh yeah.. sorry. Yeah "dumb" key storage thingy like memcache [20:07] dahankzter1 has joined the channel [20:07] wink_: creationix: once you get a sec, check out http://pastebin.com/Bc8fQqsa if you don't mind :D [20:07] mape: Yeah non persistant stuff [20:07] creationix: ryah: I can try a patch, where should I look [20:07] creationix: wink_: ok, looking... [20:08] maushu: And besides that, redis has sets and lists. Pretty useful stuff. [20:08] wink_: thx <3 [20:08] stagas: and pub sub [20:08] maushu: mape, you can keep a record with a set of the users ids in your application and the get is O(1). [20:09] stagas: redis rulez [20:09] stagas: :P [20:09] creationix: wink_: So Step functions work just like nested callbacks [20:09] bradleymeck: anyone know how to duplicate a with statement in C++ for v8? [20:09] creationix: the "this" object is a callback to the next function [20:10] wink_: right, i suppose my question is more of confirmation of my understanding in that the outter Step() call won't block, so in that for loop, it'll spawn off as many of them as fast as it can, assuming sufficient IO waits [20:10] mape: maushu: well, what is the difference in using memcache->get('key'); from cacheObj['key'] ? Besides the latter being faster [20:10] bradleymeck: O(2) > O(1) [20:10] creationix: wink_: yep, all the queries in the outer loop will be parallel [20:10] creationix: Step also supports parallel waits if you want [20:10] wink_: yeah thats pretty baller :P [20:11] mape: Since memcache isn't more persistant then the app, granted you might restart the app more then the memcache but yeah.. [20:11] mape: Still will be events where you have to reset memcache since the app structure changed [20:13] ceej: creationix: any idea why i'd get http://local.cj.nu:3000/ when the file does exist? [20:14] creationix: wink_: https://gist.github.com/e3451859be6f4695641f [20:14] creationix: ceej: loading… (slow connection) [20:14] ceej: It's running off my machine [20:14] jakehow has joined the channel [20:15] creationix: well, I'm running over edge through a vpn [20:15] creationix: dns takes a couple minutes usually [20:15] ceej: ew :/ [20:16] wink_: creationix: ah, gotcha [20:16] creationix: wink_: also I used Step all over the place in http://github.com/creationix/wheat/tree/master/lib/wheat/ [20:16] utgo has joined the channel [20:16] wink_: im going to use the tits out of step ;P [20:16] creationix: wink_: don't have too much fun now [20:17] creationix: ceej: it's not responding for me [20:17] bradleymeck: the howtonode link is down [20:17] syntaxritual has joined the channel [20:17] creationix: what are you seeing [20:17] ceej: basically it's telling me the files missing when it's there [20:17] creationix: bradleymeck: which one? [20:17] creationix: http://howtonode.org/ [20:17] creationix: the site is up for me [20:17] o_o_ has joined the channel [20:17] ceej: it's doing http://pastie.textmate.org/private/mqfn5mmjlvyosvveexhgrq [20:17] creationix: ceej: 404? [20:17] bradleymeck: http://github.com/creationix/wheat [20:17] bradleymeck: its in the readme [20:18] ceej: Missing template: /Users/blank/Dropbox/sd/test/helloworld/application/modules/welcome/views/index.html [20:18] kodisha_ has joined the channel [20:18] pandark_ has joined the channel [20:18] ceej: the thing is that file does exist [20:18] creationix: ceej: that's strange [20:18] creationix: bradleymeck: oh, thanks, that's really old [20:19] ceej: creationix: http://screencast.com/t/OTM5MjdhMj [20:19] dahankzter1: Are you all gonna join nodeknockout? :) [20:20] wink_: last silly question, is there a way to just 'include' other files without needing the module stuff? i'd like to be able to break some functions into their own file without needing to roll them as modules [20:20] creationix: wink_: you can always do eval(fs.readFileSync("file.js")) [20:20] creationix: but modules are really better [20:21] mape: wink_: well, is it that hard to just do exports.myStrangeThingy = customFunctionSomeoneOneDid; ? [20:21] ceej: nm got it working, was calling tmpl instead of Tmpl *doh* [20:21] creationix: ceej: that will do it [20:22] creationix: wink_: also module.exports = someObjectOrFunction is great when you want to control the entire exports object [20:23] wink_: ah ok [20:23] wink_: i've gotta run, thanks a ton for the help [20:23] wink_: everyone [20:24] creationix: dahankzter1: I was thinking about being a judge or getting my company to sponsor it [20:24] creationix: but that probably keeps me from being a contestant ;) [20:24] linuxsable has joined the channel [20:25] stagas: how will they know that you actually build the app in 48 hours [20:25] stevendavie has joined the channel [20:25] creationix: stagas: noders would never cheat [20:26] BrianTheCoder has joined the channel [20:26] maushu: Back. [20:26] stagas: I'll cheat :P [20:26] maushu: stagas, pub sub doesn't make sense in redis. [20:26] maushu: At least I can't see it. [20:27] isaacs has joined the channel [20:27] maushu: mape, the difference is that they are two different processes. [20:27] BrianTheCoder: can you have node make a system call? [20:28] maushu: So, multiple node.js applications can use a single memcache. [20:28] mape: maushu: Yeah.. but that means you trust memcache more the then node app? [20:28] mape: Yeah [20:28] mape: Ok so yeah that was what I was wondering [20:28] maushu: Technically, memcache should be faster. *Technically.* [20:28] mape: Well yeah, if you are running multiple instances of node apps [20:28] maushu: Unless the coders screwed it up. [20:28] mape: Which hasen't been the case until rencetly [20:29] maushu: Memcache also allows remote connections, good for clouds and so on. [20:29] mape: Yeah.. I guess it comes down to usage, but for single app usage I don't see a reason using memecahe [20:30] mape: *cache [20:30] maushu: Redundancy? [20:30] mape: At the loss of speed [20:30] mape: Then you might as well use redis for presistant data? [20:31] maushu: I never said I wanted to use memcache in the first place. :P [20:31] mape: maushu: Well don't be rude [20:31] maushu: I'm not. :3 [20:31] mape: Hehe hopefully I'm not either [20:32] mape: I just thought I would ask the question, for the greater good [20:32] mape: So yeah, memcache is good for sharing instances of node apps and redundancy [20:32] tmpvar: yo [20:32] maushu: Well, that question implied that I wanted to use memcache and that redis would be better. [20:32] mape: But it surely must be faster to usa js obj [20:33] mape: maushu: Not really? Just asked if memcache was better [20:33] maushu: mape, it is, and in a single instance its better, but redis has some nifty stuff, like lists. [20:34] maushu: mape, http://code.google.com/p/redis/wiki/Features [20:34] maushu: Check "Support for Data Structures" since thats the most important point in your question. [20:34] mape: maushu: yeah, it isn't a pure key-value store [20:35] mape: which is what I was asking about [20:37] maushu: mape, ok, so my answer is: Redis is better than using local json objects because of the data structures, persistence and allows scaling. [20:37] maushu: At the sacrifice of speed. [20:38] mape: Yeah, so yeah.. That isn't the question though. All I'm asking is why use memcache for a single node app [20:38] mape: (besides redundancy since it is a separate process) [20:38] maushu: None. Don't use memcache for a single node app. [20:38] mape: Hehe k [20:38] mape: Great ;) [20:40] saikat has joined the channel [20:42] teemow has joined the channel [20:42] creationix: yuck, downloading node at 5 KiB/s, this is worse than dial-up [20:43] mitkok has joined the channel [20:43] creationix: tmpvar: yoyo [20:43] tmpvar: creationix, how goes man? [20:44] creationix: it's going, packing my house and finishing the move to CA [20:44] mape: tmpvar: What is the deal with htmlparser and arias effort? [20:45] joshbuddy has joined the channel [20:47] ceej: creationix: with connect what is the best way to grab your get/post/put data ? [20:47] creationix: ceej, the body-decoder filter [20:48] creationix: decodes it based on Content-Encoding [20:48] creationix: and puts it in req.body [20:48] creationix: and the raw body is at req.rawBody [20:48] mape: creationix: have you thought about having a "how do do that" faq kinda thing and make examples out of it? [20:49] creationix: mape: something like stack overflow? [20:49] mape: Well, more like useful examples [20:49] creationix: or more of a howtonode article [20:49] mape: Feels like most node projects just have the bare minimum stuff [20:49] creationix: sounds neat [20:49] mape: Nothing that a user can actually relate to [20:50] creationix: my goal with howtonode is to give simple examples and teach the needed theory [20:50] ceej: creationix: hmmm req.body is always blank.... [20:50] mape: Having more "chunky" exmaples might get people exited since it "fits right into what I'm trying to do" [20:50] creationix: mape: yeah, but I think a new site would be good [20:50] creationix: there is always the node wiki [20:51] mape: *examples [20:51] mape: Well the node wiki has nothing to do with connect? [20:51] isaacs: chunky ex-maples? like, chubby former trees? [20:51] creationix: orh, for connect [20:51] creationix: tjholowaychuk: has been working on better docs for connect [20:51] mape: Well this is just a general idea, but could be implemented in each project [20:51] creationix: and there are a few small examples in there [20:51] mape: Just have the bare minimum just means everything seems the same [20:52] creationix: the sousaball example is a real app with db, views and a couple of routes [20:52] mape: More or less [20:52] mape: The better docs the more people can imagine [20:52] creationix: mape: yeah, like the original rails screencasts [20:52] tjholowaychuk: http://extjs.github.com/Connect [20:52] mape: And imagination == better adoption == more contribs == better adoption == community wins [20:52] tjholowaychuk: man connect [20:53] creationix: that really helped rails explode [20:53] tjholowaychuk: man connect-log; man connect-static etc [20:53] creationix: ceej: how do you have it setup [20:53] creationix: I use bode-decoder in sousaball [20:53] creationix: s/bode/body/ [20:53] mape: tjholowaychuk: I don't think man pages hook people [20:53] mape: At least not at a larger scale [20:53] mape: man pages means that the person took enough time to look at them [20:54] tjholowaychuk: for sure, but they are there [20:54] tjholowaychuk: used to generate the html as well [20:54] mape: Sure, doesn't change anything though [20:55] mape: Guess it is a rtfm mentality vs top 10 list of cool stuff you can do with jQuery [20:55] mape: And it seems the latter gains a lot of adoption [20:55] tilgovi has joined the channel [20:55] mape: Perhaps that isn't the crowd a project wants to attract but it sure does help a lot in adoption [20:56] mape: So even if it isn't the crowd you want it might be the face that more people know about it [20:56] ceej: creationix: http://pastie.textmate.org/private/bvcscu8haabeuha58tzda [20:56] mape: And if 1% of all the crappy ones you enlighten are people that will contrib to the project that is still a win [20:57] mape: Since that will grow the userbase, which will end up being modules/plugins/middleware [20:57] creationix has joined the channel [20:57] mape: Which makes the project seem more grown up, and therefor more people will use it [20:57] tmpvar: mape, what do you mean? [20:57] creationix: mape: do you think connect is for the mainstream audience [20:58] mape: creationix: Are you targeting it for the non mainstream audience? [20:58] mape: tmpvar: In regards to the examples of all the node projects? [20:59] ceej: I have body-decoder set.... [21:00] tmpvar: mape, in regards to html parser [21:00] mape: tmpvar: Oh does this go way back to the aria part or just general usage examples? [21:01] tmpvar: mape, this goes back to the first thing you said to me haha [21:02] mape: Hehe k, so yeah, what is up with using an old fork and not using arias work which seems to handle it better? (I'm using your stuff but that means I have to parse everything through htmltidy cli since the html parser you use breaks on everything I throw at it) [21:03] tmpvar: mape, are you working on the readability on node thing? [21:03] creationix: ceej: what is this controller thing you linked to me? [21:03] mape: tmpvar: No I used your code for parsing a site alongside the jQuery example code [21:03] tmpvar: mape, there have been some conversations about how to best support various parsers [21:04] tmpvar: i dont like having this static dep on node-htmlparser [21:04] mape: But I can't really use the code unless I clean the html to insaneness since any little bug will break the htmlparser with heavy errors [21:04] tmpvar: yeah, that makes sense [21:04] ceej: It's where i have req.body [21:05] mape: tmpvar: So where are the issues in using arias implementation? Just it is a pita? And wouldn't it be better to have an API in between so anyone could create their own parser? [21:05] mape: Cleaner and easier to maintain, but probly heavy on the time to get it running [21:07] softdrink1 has joined the channel [21:07] tmpvar: right, which is probably fine :P [21:07] jsilver has joined the channel [21:07] tmpvar: but hardcoding a lib in, is definitely not the way to go [21:07] keyvan has joined the channel [21:07] creationix: ceej: you're sure you have body decoder in front of the rest provider and have a proper Content-Type header on the request [21:08] ryah: ACTION is excited about the node knockout :) [21:08] creationix: it should set req.rawBody regardless [21:08] jon_ has joined the channel [21:08] mape: For sure, so what is stopping you from creating that API allowing people to get jQuery running with a nice html parser on node? :) [21:08] ceej: I'm pretty sure... I'll check again [21:08] jon_ has left the channel [21:08] tmpvar: mape, I have bandwidth problems on my end ;) [21:09] mape: tmpvar: huh? [21:09] jsilver has joined the channel [21:09] tmpvar: mape, I have a full plate at the moment [21:10] mape: Ah ak [21:10] tmpvar: I'll get to it soon :) [21:10] mape: Perhaps throw it at the community? :) [21:10] tmpvar: yeah, I've been talking with various people about how to do this [21:11] tmpvar: the path is *clear* [21:12] creationix: ceej: I actually haven't had a chance to look at tjholowaychuk's rest provider, looks like that's what you're using [21:12] ceej: yep [21:12] keyvan has joined the channel [21:12] mape: tmpvar: Nice, I just thing something like this is a big deal, it might not BE a big deal, bit it is a good PR deal. [21:13] tjholowaychuk: the one thing i want to maybe change about rest, is so that it can generate middleware (maybe) to support next() [21:13] tjholowaychuk: actually nvm [21:13] mape: Having a GREAT parser on the server side is something a lot of people is longing fore [21:13] tjholowaychuk: dont need that [21:13] isaacs: mape: GREAT parser for what? [21:13] mape: isaacs: html? [21:13] isaacs: oh, i see. [21:13] isaacs: yeah [21:13] isaacs: Aria seems to be getting close. [21:14] mape: That is what we are talking about [21:14] mape: more or less [21:14] mape: Having great examples [21:14] mape: use node to parse websites on the serverside using jQuery is a good PR item [21:14] isaacs: yeah [21:15] mape: Which hopefully will benefit the community [21:15] isaacs: i really want to use node as a test framework for web development [21:15] creationix: mape: what do you think about a site devoted to node modules where people can host api docs and the community can submit comments and examples php.net style [21:15] isaacs: that'd be awesome [21:15] softdrink1 has joined the channel [21:15] mape: Might bring in 20 shitty devs but 1 good [21:15] isaacs: and also, scraping and spidering. [21:15] isaacs: it'd be badass to write a search engine in node. [21:15] mape: That that one will write something greatm and the 18 will tell their co workers which are hopefully great [21:15] mape: 1 will just be to drunk do tell anyone [21:15] mape: but that is ok [21:15] isaacs: creationix: that's actually where i'd like to see mape's work on the npm site get to eventually [21:16] creationix: npm site? [21:16] mape: isaacs: I already have tmpvars code running with htmltidy through cli and it works fine, but it isn't "clean" enough [21:16] isaacs: creationix: yeah, like a front-end for the registry [21:16] creationix: nice, might as well integrate with the registry [21:16] isaacs: creationix: and then figure out a consistent way to say "this is where the docs are for this package" [21:17] isaacs: creationix: maybe something like "directories": {"doc" : "./docs" } which contains a set of markdown files that'll get parsed in some consistent manner or something. [21:17] eck` has joined the channel [21:17] creationix: that could be nice [21:17] isaacs: creationix: and then, if it has a test script, npm could even remotely run the tests in some kind of sandbox or something. [21:18] eck has joined the channel [21:18] creationix: tests would be awesome, hard to do right though [21:18] mape: isaacs: creationix Yeah.. So yeah, that is a good idea.. That is what I tried.. http://doc.mape.me/api.html if you check that and hoover a headline [21:18] isaacs: yeah [21:18] isaacs: creationix: especially since a lot of times, tests require other packages or setup that are on the dev machine, but not part fo the package. [21:18] brianmario has joined the channel [21:18] mape: And click the "submit a patch" [21:18] eck has left the channel [21:19] isaacs: mape: yeah, i saw that, it's neat [21:19] mape: What I pasted would probly enable a LOT of people to help without the git knowledge [21:19] isaacs: +1 [21:19] creationix: cool [21:19] mape: Just mail a patch and stuff would improve [21:19] creationix: mape: showdown? [21:19] mape: creationix: Like a fight with knives? [21:19] creationix: no showdown.js, for the markdown [21:20] creationix: or are you using something else [21:20] mape: oh [21:20] mape: A js markdown thingy [21:20] mape: and a patch one [21:20] mape: which is shown if you change and click the submit a patch [21:20] creationix: my markdown module I've been using is based on showdown [21:21] hober: I've been using node-discount [21:21] creationix: cool, haven't heard about that one [21:21] tjholowaychuk: thats mine :D [21:22] richcollins has joined the channel [21:22] creationix: ahh, c based [21:23] kersny has joined the channel [21:23] maushu: 10358 requests completed in 0.43 seconds - 1000 parallel clients [21:23] maushu: Everytime I see it... it's still damn impressive. [21:24] gf3: NO U [21:24] mape: creationix: so yeah, uses js all though. But I think it is a great way of makings docs better [21:24] maushu: NO U! [21:25] mape: And docs probly the best way of building a community [21:25] bmizerany has joined the channel [21:25] creationix: well, you know I believe in documenting and educating people on node ;) [21:26] mscdex: 0.1.93? that's old! [21:26] mscdex: :P [21:26] pandark_: ^^ [21:26] maushu: 0.1.30 is so much better. [21:26] mscdex: update your api listing mape :-D [21:27] mape: mscdex: huh? npm? ) [21:28] mscdex: node api [21:28] mscdex: http://doc.mape.me/api.html [21:28] mape: mscdex: oh yeah that is old as hell, just a proof of concept [21:28] mscdex: hehe [21:29] creationix: it's newer than what's on heroku [21:29] mape: I'm really really bad at github so I just throw idea at the wall and hope people find they are good enough so they take the time to implement it [21:31] mattly has joined the channel [21:32] pandark_: How do you (yes, *you*) start developing a new module/library ? do you use some tool like nodule/node-DJs/... ? [21:33] creationix: pandark_: just create a folder with a "lib" folder in it and start typing [21:33] creationix: oh and a README.markdown file [21:33] creationix: and put it on github once it's usable to someone [21:34] creationix: pandark_: or were you asking for a more technical explination [21:36] creationix: pandark_: for a little help on the contents of the js file http://howtonode.org/creating-custom-modules [21:37] pandark_: creationix: no I think that's find... I'm wasting some time trying to understand how it all works but I think that at the end of the day I'll have actually learned something (maybe) :p On the other hand, a little help is never a bad thing :) [21:37] pandark_: creationix: I have allready read this but thanks :) [21:38] markwubben has joined the channel [21:38] isaacs: pandark_: what creationix said, but also, a package.json file. [21:38] isaacs: ACTION should write a "npm-hello-world" module and put it up on github.... [21:39] mattly has joined the channel [21:39] creationix: pandark_: so what's your question? What folder structure is the best practice? How to you share the module? What goes in a module file? [21:39] creationix: isaacs: with a bin folder, tests and docs [21:40] isaacs: creationix: yeah [21:40] isaacs: exactly. [21:40] creationix: and maybe some sub files [21:40] isaacs: i mean, almost NO code, but just an example of all the scaffolding [21:40] creationix: sounds good, isaacs, you should write a howtonode article about it, to expound on Aaron's one [21:40] isaacs: i actually have something like that kicking around. i should just bundle it with npm and get off my duff and write a bunch of tests for npm [21:41] pandark_: creationix: That was basically how to start and what were the first things to do. So that's ok for now :) [21:41] isaacs: it's called "foo", but i never published it [21:41] malkomalko has joined the channel [21:41] creationix: foo it is then... [21:41] isaacs: hehe [21:41] isaacs: it's also really out of date. i've been testing out new features with live data for the lsat few months as people have been reporting real issues and making requests [21:41] creationix: just don't go and name a testing framework cucumber and plan to rename it later [21:42] creationix: pandark_: yeah, I never use tools, just start creating folders and files and put it on github [21:43] pandark_: creationix: Don't worry, I'll come back to anoy you more seriously when I'll face real problems :p [21:43] creationix: :) [21:44] mjr_ has joined the channel [21:46] jakehow has joined the channel [21:48] cloudhead: why is sys.error not documented? [21:48] isaacs: cloudhead: so that you'd be able to send in a patch! [21:49] cloudhead: isaacs: oooooh I see! [21:49] isaacs: cloudhead: it's a present! we were all waiting for you to find it! [21:49] isaacs: surprise!! [21:49] cloudhead: ! [21:49] cloudhead: I've been wanting to document sys.error all my life. [21:49] cloudhead: I'll get to it! [21:50] creationix: I always just assumed ryah wanted to leave it undocumented, but that's not a safe assumption [21:50] cloudhead: creationix: I thought so too [21:50] creationix: of course, if it's meant to be undocumented, I should stop using it in all my examples [21:51] cloudhead: :) [21:51] creationix: I think it's just an oversight, go ahead and submit a patch [21:51] cloudhead: or document it [21:51] cloudhead: hehe [21:51] cloudhead: ok [21:51] isaacs: right, a documentation patch [21:51] isaacs: a patch to api.markdown [21:51] cloudhead: yea I don't like using undocumented stuff cause you never know when it's just going to just go 'poof' [21:51] cloudhead: and disappear [21:55] jxson has joined the channel [22:00] LowValueTarget has joined the channel [22:04] ceej: man heroku is dead to me until they update node.js lol [22:04] tjholowaychuk: tests taking 1.1 seconds makes me maddd [22:07] bradleymeck: rawr optimize that junk! [22:08] bradleymeck: tjholowaychuk, why not have a compiled version w/ Closure Compiler or something? [22:08] tjholowaychuk: bradleymeck: haha its actually not that bad, just .. lame. but im not mocking anything and testing against hundreds of http.Servers [22:12] pufuwozu` has joined the channel [22:12] bradleymeck: as long as the code profile seems sane i guess [22:16] jsilver has joined the channel [22:17] gerad has joined the channel [22:20] pufuwozu` has joined the channel [22:22] JimBastard has joined the channel [22:23] JimBastard: ACTION is the king of github [22:23] JimBastard: what you know about holding down the home page [22:23] JimBastard: :-D [22:25] mau2 has joined the channel [22:27] bradleymeck: dont get too cocky [22:28] mscdex: javascript-fu! [22:33] mau2 has joined the channel [22:33] hellp has joined the channel [22:33] JimBastard: bradleymeck: its just kinda a joke. all you need is a good readme and demo and picture [22:34] bradleymeck: love jsonml for template serialization, just mucked up an extends for it based upon ids ... http://gist.github.com/444315 ... need to figure out something a little better so ajax can have chunks rather than whole elems [22:34] isaacs: it's like getting to the top of Digg, but nerdier [22:34] bradleymeck: ill wait for you to hit top of stackoverflow and stay there somehow [22:34] JimBastard: fuck SO [22:34] JimBastard: whats the problem with JUP bradleymeck [22:35] bradleymeck: nothing really, just wanted to be able to extend a set of Jsonml w/ another set [22:36] bradleymeck: makes widgets a bit easier im finding [22:36] JimBastard: im not sure your problem based on your gist, but i might be able to help [22:36] bradleymeck: nah, its not a problem its a goal haha [22:40] joshbuddy has joined the channel [22:40] joshbuddy has joined the channel [22:40] joshbuddy_ has joined the channel [22:41] pufuwozu` has joined the channel [22:44] brianmario has joined the channel [22:44] jakehow has joined the channel [22:44] jstewart1 has joined the channel [22:45] [[zz]] has joined the channel [22:46] jstewart1 has joined the channel [22:47] aho has joined the channel [22:55] o_o has joined the channel [22:56] bradleymeck has left the channel [23:00] rictic has joined the channel [23:01] cloudhead has joined the channel [23:13] pandark_ has joined the channel [23:15] k23z__ has joined the channel [23:15] sh1mmer has joined the channel [23:15] k23z__: the "require" from Node.js , where does it come from ? I want to use it on client-side also, can I do that ? [23:16] technoweenie: NO [23:16] technoweenie: er caps lock [23:16] technoweenie: its a node.js specific thing [23:17] technoweenie: well any server side js that supports the commonjs module system [23:17] Tim_Smart has joined the channel [23:18] mde: k23z__: There are some client-side libs that try to do a CommonJS-style require. [23:19] mde: I can't remember the details, but I think one of them is called Yabble. [23:19] k23z__: mde: ok, gimme some [23:20] mde: A quick Google shows something called Seedjs too. [23:20] mde: There are people here in the channel who know more about it than I do -- you might try asking again later on. [23:21] mde: I'm writing a bunch of code that has to run both client- and server-side, but I'm not trying to do a unified require. [23:22] tmpvar: i think nodules does that [23:22] tlrobinson: k23z__: yeah there's several projects that implement commonjs modules in the browser [23:22] k23z__: tlrobinson: yea, just tell me the most popular [23:22] mde: There we go. Thanks, tlrobinson. :) [23:23] linuxsable has joined the channel [23:23] tlrobinson: k23z__: i don't know, i haven't used any of them except this really really simple one i wrote http://github.com/tlrobinson/minibundler [23:29] creationix has joined the channel [23:30] tjholowaychuk: mmm segfaults [23:30] jbrantly: I wrote Yabble. It works pretty well :) [23:31] jbrantly: k23z__: ^ [23:31] jbrantly: k23z__: others I know are seedjs and requirejs. I think narwhal also has something. [23:33] jbrantly: http://github.com/kriszyp/transporter supports requirejs and yabble [23:37] mikeal has joined the channel [23:37] k23z__: what's transporter ? [23:39] jbrantly: it's a server-side bundler [23:41] keyvan has joined the channel [23:44] pufuwozu` has joined the channel [23:44] gf3 has joined the channel [23:48] mikeal: so [23:48] mikeal: is there a working Google OAuth client? [23:48] ryah: i think so... [23:48] mikeal: haha [23:48] mikeal: there have been countless arguments about OAuth in here [23:48] ryah: http://github.com/ciaranj/node-oauth [23:49] mikeal: i tried using that a few months ago and failed [23:49] isaacs: OAuth is made of arguments and fail. [23:49] ryah: what is oauth? is that the same as openid? [23:49] mikeal: is it seriously 300 lines of code to do oauth? [23:49] isaacs: ryah: no, it's like openid, but more complicated, and less secure. [23:50] mikeal: oauth2 is 100 lines [23:50] isaacs: ryah: openid is where you go login at your own site, and it redirects you back with a token, and proves the generally accepted wisdom that URLs are Not For Humans. [23:50] isaacs: ryah: oauth is where you give Facebook access to your Yahoo page to do things to it [23:51] mikeal: i hate jspec [23:51] skampler: @seen tits [23:51] isaacs: we all laugh at the dumbshits who thought ReadWriteWeb was a Facebook redesign, but really, shit like oauth and openid are specifically misleading by design, so it's hardly any surprise. [23:51] skampler: whoops :( [23:51] isaacs: skampler: congratulations [23:52] mikeal: function(requestUrl, accessUrl, consumerKey, consumerSecret, version, authorize_callback, signatureMethod, nonceSize) [23:52] mikeal: seriously? [23:52] mikeal: how the fuck do i use this [23:52] isaacs: mikeal: why are you dealing with oauth? [23:52] mikeal: Gmail [23:52] isaacs: ah [23:52] skampler: isaacs: given sufficient context, you'd understand that it'd would be a very normal comment in another channel which has a bot with a @seen command [23:53] isaacs: skampler: i grok, i'm just being goofy :) [23:53] skampler: :P [23:53] k23z__: jbrantly: but I don't need a serv-side bundler [23:54] k23z__: jbrantly: what does Node.js use for require() ? does it use requirejs ? [23:54] k23z__: jbrantly: or does it have its own implementation of require ? [23:55] k23z__: mikeal: first you need to know what all those parameters mean, then read about the gmail protocol and then you're done [23:55] jbrantly: k23z__: it has its own implementation [23:55] jbrantly: k23z__: the transporter thing was just FYI [23:55] mikeal: the mark of a terrible spec is that you have to understand the entire spec in order to use a client library