[00:00] cedricv has joined the channel
[00:03] cedric_ has joined the channel
[00:03] okito has joined the channel
[00:06] cedric__ has joined the channel
[00:07] rtomayko_ has joined the channel
[00:10] cedricv has joined the channel
[00:12] cedric_ has joined the channel
[00:15] cedric__ has joined the channel
[00:18] cedric_ has joined the channel
[00:20] sudoer has joined the channel
[00:21] cedricv has joined the channel
[00:26] cedric_ has joined the channel
[00:27] isaacs: ryah: seems like the http-parser doesn't handle cases where header values are continued onto the next line with 8 spaces.
[00:27] isaacs: it just kinda freezes up or something.
[00:29] cedric__ has joined the channel
[00:29] bryanl: node.js is getting some love right now at the baltimore js user group
[00:29] bryanl: actually its getting a whole hour
[00:30] dnolen has joined the channel
[00:30] creationix: bryanl: awesome
[00:30] itistoday has joined the channel
[00:30] dekz has joined the channel
[00:31] isaacs: ryah: btw, i'm not sure what spec that's actually allowed in, but it happens all over the damn place.
[00:31] isaacs: ugliest thing evar.
[00:34] jed has joined the channel
[00:34] sudoer has joined the channel
[00:36] konobi: isaacs: http://tools.ietf.org/html/rfc2822#section-2.2.3
[00:37] isaacs: oh, wow, so it's any amount of white space.
[00:37] cedric_ has joined the channel
[00:38] isaacs: ayep, node chokes on that.
[00:38] isaacs: server just doesn't respond.
[00:38] davidsklar has joined the channel
[00:39] jed: hey isaacs, in that gist of yours, what is psgi?
[00:39] isaacs: jed: i'm not entirely sure.
[00:39] isaacs: i forked it from tlrobinson
[00:39] isaacs: pintura, maybe?
[00:39] isaacs: no diea.
[00:39] jed: ah, or perl?
[00:40] jed: that's the first googit for "psgi javascript"
[00:40] jed: but yeah, pintura is more likely i guess.
[00:41] tlrobinson: jed: it's the perl equivalent of WSGI/Rack/JSGI
[00:42] tlrobinson: i've updated the gist http://gist.github.com/293552
[00:42] jed: tlrobinson: cool, thanks.
[00:42] tlrobinson: isaacs: if you can look over it and make sure i haven't made any mistakes on the EJSGI examples i'd appreciate it
[00:42] cedric__ has joined the channel
[00:43] isaacs: tlrobinson: actually, in the 2-async, EJSGI requires all apps to return a stream for the body, no exceptions.
[00:43] isaacs: if you want to return a foreachable, you use the middleware adapter for that.
[00:43] Nathan_ has joined the channel
[00:43] tlrobinson: isaacs: if it changes the interface its not really middleware
[00:43] paulca has joined the channel
[00:43] tlrobinson: isaacs: also, i don't like that :)
[00:43] isaacs: tlrobinson: well, then the app isn't compliant.
[00:44] isaacs: hhaha
[00:44] isaacs: true, though, it's not a middleware, precisely, it's an adapter.
[00:44] isaacs: it wouldn't be hard to bundle into the server, but i wanted to keep the spec as small as possible.
[00:45] isaacs: also, you can do s.write() immediately, no need for timeouts, but i guess you'e trying to show how it works.
[00:45] tlrobinson: isaacs: ok i think i fixed it, refresh
[00:46] tlrobinson: the timeout is just a placeholder for "generic async event"
[00:46] isaacs: you need to s.close()
[00:46] cedricv has joined the channel
[00:47] tlrobinson: isaacs: k
[00:47] isaacs: you're doing noble work, btw.
[00:47] isaacs: this gist is relevant to our discussions.
[00:48] tlrobinson: so, IMHO EJSGI is nice for streaming responses, but thats about it. AJSGI is simpler for the async response without streaming
[00:49] cedric_ has joined the channel
[00:49] tlrobinson: which i expect is more common
[00:49] isaacs: yeah, the more i see of these various proposals, honestly, the more i just want to support all of them, and i'm realizing it wouldn't be terribly difficult, even.
[00:50] isaacs: i'm not a fan of deep nesting, though
[00:50] noob has left the channel
[00:50] tlrobinson: yeah, the AJSGI without using a promise manager gets pretty hairy
[00:51] tlrobinson: i geuss even with it it's a bit cumbersome
[00:51] jtoy has joined the channel
[00:51] isaacs: at the third indent, my skin starts to crawl.
[00:51] tlrobinson: but as i mentioned before the EJSGI style API can be implemented in a fairly simple helper object
[00:51] isaacs: it's a physical reaction.
[00:52] cedric__ has joined the channel
[00:55] cedric_ has joined the channel
[00:58] cedric__ has joined the channel
[01:01] itistoday has left the channel
[01:02] cedricv has joined the channel
[01:03] RayMorgan: can you point me to an example of an AJSGI app?
[01:05] cedric_ has joined the channel
[01:06] Yuffster has joined the channel
[01:07] kriskowal: RayMorgan http://gist.github.com/293510
[01:07] kriskowal: that's a sketch, mind, and i am not deep in the councils of *JSGI
[01:08] cedric__ has joined the channel
[01:08] tlrobinson: RayMorgan: that's middleware, here's apps: http://gist.github.com/293552
[01:10] creationix: isaacs: what do you think about this idea: http://gist.github.com/294257
[01:10] tlrobinson: RayMorgan: (the EJSGI examples could also work on AJSGI by making env.jsgi.stream an object that acts like both a promise and a stream)
[01:10] creationix: though mine is not an app, just an idea for cleaning up the syntax
[01:10] isaacs: creationix: that's pretty.
[01:10] creationix: and you could nest them too
[01:11] cedric_ has joined the channel
[01:11] creationix: the arguments are only required to be functions expecting callbacks
[01:11] creationix: The Do.parallel and Do.serial methods themselves would return functions expecting callbacks
[01:12] dnolen_ has joined the channel
[01:14] cedric__ has joined the channel
[01:14] r11t has joined the channel
[01:16] isaacs: wow, my C skills are laughably out of shape.
[01:17] cedric_ has joined the channel
[01:18] binary42 has joined the channel
[01:20] cedric__ has joined the channel
[01:22] isaacs: ryah: http://github.com/isaacs/node/commit/8a586490ff4035af6384165af814396766818262
[01:23] isaacs: not a patch, just the spot in the code where the bad thing is happening.
[01:23] isaacs: i'm gonna retreat back to JS where my powers are strongest.
[01:23] JimBastard has joined the channel
[01:23] JimBastard: really random question, does anyone here play league of legends?
[01:24] cedric_ has joined the channel
[01:24] technoweenie: hey jed
[01:25] jed: hey technoweenie.
[01:25] technoweenie: does the order matter in fab
[01:25] technoweenie: if i do (fab)('hello', '...')(middleware)(fab)
[01:25] jed: technoweenie: it shouldn't.
[01:25] technoweenie: will the middleware be called after the hello request
[01:25] technoweenie: ok
[01:25] jed: if it does, i consider it a bug.
[01:26] jed: fab automatically sorts lexicographically by regexp source.
[01:26] JimBastard: fancy!
[01:26] jed: technoweenie: btw, i should have a fix that allows you to embed (fab) subpaths like we talked about earlier, pushed tonight.
[01:26] jed: (TYO time)
[01:26] technoweenie: yea!
[01:27] technoweenie: my next blog post will be about fab
[01:27] technoweenie: i added it to wheres waldo
[01:27] technoweenie: tried to structure it so you could get the waldo fab object all prefixed in case you wanted to mount other paths on it
[01:27] Tim_Smart: JimBastard: I'm doing the module loader atm
[01:27] jed: yeah, i saw that, cool stuff. i've been in transit and working on other stuff for the past few, but will get back to it today.
[01:28] JimBastard: yeah Tim_Smart i saw you made a bunch of changes
[01:28] JimBastard: im gonna focus on JSSS for a few days
[01:28] Tim_Smart: yeah start the router
[01:28] Tim_Smart: *started
[01:28] Tim_Smart: JSSS?
[01:28] JimBastard: json stylesheets
[01:28] Tim_Smart: ah
[01:29] Tim_Smart: if we use haml, we can use sass or w/e
[01:29] JimBastard: jsss is a replacement for haml or sass or less
[01:30] JimBastard: im really not comfortable writing any code for a framework yet im not sure what you are planning on writing
[01:30] Tim_Smart: I'm just getting the core generic bits done
[01:30] JimBastard: i just wanted to mentally map out what a god like framework would have
[01:30] JimBastard: well i mean, by all means
[01:30] Tim_Smart: I'm not touching the templating etc etc yet, until we can sort something out
[01:31] JimBastard: theres lots of code for routing out there, id steal something
[01:31] Tim_Smart: Hmmm, but does it take into account streaming? and client side routing?
[01:31] cedric__ has joined the channel
[01:32] JimBastard: it doesnt
[01:32] JimBastard: but theres a good base
[01:32] JimBastard: there are client side routing plugins too
[01:32] Tim_Smart: ya well I'll see how this goes, if it is bad, we can hack it out
[01:32] JimBastard: jed how far along have you come in getting fab to work client-side?
[01:32] jwm: hehe
[01:32] jwm: you guys like to brainstorm in the channel a lot
[01:33] Tim_Smart: lol
[01:33] jed: JimBastard: not at all, alas. been busy client work for the past week.
[01:33] JimBastard: i wish there were logs of the chat, i think i might be the most active person
[01:33] JimBastard: i mean
[01:33] jwm: /set autolog on
[01:33] JimBastard: aggregates of the logs
[01:33] jwm: hehe
[01:33] jwm: irssi :)
[01:33] JimBastard: there are node.js logs going
[01:33] jwm: ahh yeah
[01:33] jwm: one of those lame stats page
[01:33] jwm: what are you guys working on
[01:33] jwm: I'm interested :)
[01:34] Tim_Smart: JimBastard: http://github.com/Tim-Smart/node-ircbot-framework go for your life
[01:34] JimBastard: jed have you started any
[01:34] Tim_Smart: jwm: http://github.com/biggie/biggie
[01:34] JimBastard: errr
[01:34] JimBastard: http://github.com/marak
[01:34] JimBastard: i fucking hate java.freenode.net
[01:34] JimBastard: who do i have to kick in the stomach to get mibbit unbanned?
[01:34] cedric_ has joined the channel
[01:35] jwm: hah
[01:35] jwm: I am doing something like biggie
[01:35] JimBastard: jvm we have a google wave going too
[01:35] _Ray_ has joined the channel
[01:35] JimBastard: im not sure about Tim_Smart but i really only intend on designing a framework now instead of trying to build one
[01:35] JimBastard: i wanna figure out all the most awesome things that could be done
[01:35] jwm: really like an everything2 object namespace
[01:35] jwm: network platform
[01:35] JimBastard: and write them down
[01:35] jwm: hehe
[01:36] jwm: that's cool guys
[01:36] jwm: at least there are two of you
[01:36] Tim_Smart: Yeah basically all the code I'm doing now is concepts
[01:36] jwm: my co developer just bought his first book on html
[01:36] jwm: kind of far off
[01:36] jwm: hehe
[01:36] JimBastard: https://wave.google.com/wave/#restored:wave:googlewave.com!w%252BayXwiDRMA.1
[01:36] Tim_Smart: I'll probably delete the repo and start over when we have settled things
[01:37] jwm: cool
[01:37] JimBastard: jed ive been thinking really hard on how to make things like routing and templating work fluidly on the front-end and back-end with a common code base
[01:37] jwm: I'm in the design stage too
[01:37] jwm: I want to shove all my objects into redis
[01:37] jed: JimBastard: yeah, that would be huge.
[01:37] jwm: hehe
[01:37] JimBastard: well jed i think ive got it kinda figured out....
[01:37] JimBastard: ive done a shit ton of client-side routing
[01:38] JimBastard: and mustache is mustache
[01:38] JimBastard: jsss might be the missing link for me
[01:38] cedric__ has joined the channel
[01:38] jed: JimBastard: i'm not going to try that with (fab), in term of integration, but would like one way to build sites on either.
[01:38] jed: JimBastard: yeah, could be a good cocktail.
[01:38] Tim_Smart: JimBastard: Chuck your idea on the wave. I want to look :p
[01:38] JimBastard: which one?
[01:39] Tim_Smart: dunno, all of them?
[01:39] _Ray_: What's (fab)?
[01:39] JimBastard: hee hee
[01:39] JimBastard: www.fabjs.org
[01:39] _Ray_: Thanks :)
[01:39] JimBastard: all the pieces are on there Tim_Smart just soo sample implementation yet
[01:39] JimBastard: jsss time me thinks, im gonna start coding
[01:40] Tim_Smart: do it
[01:40] jed: JimBastard: nice, dive in.
[01:40] JimBastard: just for refernce, its based off http://maraksquires.com/json_stylesheets/
[01:43] cedric_ has joined the channel
[01:43] Tim_Smart: I'm going to continue hacking at this uber routing system
[01:47] cedricv has joined the channel
[01:49] JimBastard: jwm unless you really want to get into framework code you should use one of the existing solutions
[01:49] JimBastard: express, fab, picard, etc
[01:49] cedric__ has joined the channel
[01:50] JimBastard: im only thinking about another framework, if i had to start a new node project today i'd probaly use express
[01:50] JimBastard: or i'd use fab and bother jed everyday
[01:50] cloudhead has joined the channel
[01:50] jed: JimBastard: +1
[01:52] isaacs: i don't know why there are so many routing libraries.
[01:52] isaacs: it seems like the easier part of the problem.
[01:52] JimBastard: right
[01:52] isaacs: maybe that's why.
[01:52] isaacs: i dunno.
[01:52] JimBastard: i think you answered your own question
[01:53] isaacs: who's gonna step up and write a full-on MVC that talks to a generic data backend, abstracts out the models, let's me plug in any random template engine i like, etc?
[01:53] cedric_ has joined the channel
[01:53] isaacs: oh, and also, has a router?
[01:53] JimBastard: i could do that fairly easily, but mvc doesnt work when you get to the front-end
[01:53] JimBastard: you need mvvm
[01:53] bryanl has joined the channel
[01:54] JimBastard: and express has a plugin system
[01:54] isaacs: kewl.
[01:54] isaacs: ACTION adds express to the "take a look" list.
[01:54] JimBastard: dude it has like 300 followeres
[01:55] JimBastard: not having a spellchecker and getting a 4 second lag for keystrokes really fucks with my IRC diction ugh
[01:55] JimBastard: fucking java.freenode
[01:55] joshbuddy_ has joined the channel
[01:55] joshbuddy_ has joined the channel
[01:55] RayMorgan has joined the channel
[01:56] jed: yeah, express is definitely the most mature/followed on node.js.
[01:57] cedricv has joined the channel
[01:57] isaacs: JimBastard: what would it take to convince you to not drop everything in the global space?
[01:57] JimBastard: you mean spamming chat in node?
[01:57] isaacs: haha
[01:57] isaacs: no, i mean, in express.
[01:57] isaacs: are you visionmedia?
[01:57] JimBastard: ahahaha okay
[01:57] JimBastard: no
[01:57] JimBastard: that is not me
[01:58] isaacs: ok
[01:58] JimBastard: it might be creationix ?
[01:58] isaacs: this stuff is what i'm talking about: http://github.com/visionmedia/express/blob/master/lib/express/core.js#L3-9
[01:58] jed: isaacs: visionmedia == TJ Holowaychuk
[01:58] isaacs: ah, yeah, just saw it
[01:58] cedricv has joined the channel
[01:59] jed: i think he works with ryah at joyent, no?
[01:59] isaacs: don't know
[02:00] isaacs: but yeah, that's exactly why i kinda turned away from express.
[02:01] isaacs: it seems to very unapologetically declare that it owns the global space, and just put everything there automatically.
[02:01] isaacs: bit too brazen for me.
[02:01] jed: isaacs: almost every framework does.
[02:01] isaacs: jed: not in javascript, they don't.
[02:01] isaacs: yui owns YAHOO or YUI, and that's it. jQuery takes over jQuery and $. etc.
[02:01] jed: the server frameworks tend to.
[02:02] isaacs: right
[02:02] jed: isaacs: oh, i completely agree, as you know.
[02:02] cedric_ has joined the channel
[02:02] isaacs: totally
[02:02] jed: that's the one thing i get really OCD about.
[02:02] isaacs: yep.
[02:02] isaacs: you don't even need to use ANY globals or vars to use fab!
[02:02] isaacs: (require("fab").fab)(.....)
[02:02] Tim_Smart: JimBastard: Why, what client are you using?
[02:02] jed: isaacs: well, actually, you do.
[02:03] Tim_Smart: Lol my window was scrolled bad
[02:03] isaacs: oh? you can't just use the ref from the require()?
[02:03] jed: as of last week, when i use ( fab )( fab ) to end it.
[02:03] jed: the second fab calls the adapter, for node.js currently.
[02:03] isaacs: so, you do that again. module's cached, no significant wait :)
[02:03] jed: ah, really?
[02:03] isaacs: (require("fab").fab)( ... )(require("fab").fab)
[02:03] jed: that's good to know. i didn't know whether it'd return the same object.
[02:03] isaacs: it's fabfabfabfabfab!
[02:04] isaacs: yeah, it does. but it uses a wait(), even unnecessarily.
[02:04] jed: no, i took your tip... it's now require("fab").
[02:04] jed: i return the function.
[02:04] isaacs: oh, neat!
[02:04] isaacs: require("fab")( ... )(require("fab"))
[02:04] jed: isaacs: i even credited you in the commit, heh.
[02:04] isaacs: heh
[02:04] isaacs: cuz i invented functions....
[02:04] jed: i know how much you like getting credit, nyuk nyuk.
[02:04] jed: ha, yeah.
[02:05] isaacs: ACTION invented the internet
[02:05] cedric_ has joined the channel
[02:05] creationix: cool
[02:08] cedric__ has joined the channel
[02:09] Tim_Smart: Hmm does node have email bindings yet?
[02:12] cedricv has joined the channel
[02:12] isaacs: Tim_Smart: nope.
[02:12] isaacs: working on making multipart handle crazy email junk now, though, so that'll help.
[02:13] Tim_Smart: Well if C++ has any libraries that would help, I could probably cook something up
[02:14] Tim_Smart: It will need to be non-blocking though :/
[02:14] cedric_ has joined the channel
[02:17] charlenopires has joined the channel
[02:17] JimBastard: isaacs yes it does
[02:17] cedric__ has joined the channel
[02:17] JimBastard: there are two
[02:17] JimBastard: node_mailer and node-smtp
[02:17] JimBastard: Tim_Smart
[02:18] Tim_Smart: ah ok
[02:18] creationix: aw, my Do library won't work with promises. The addCallback functions aren't bound to the promise directly, they depend on `this` scope
[02:19] creationix: it's a simple fix, but I think it will make promises a little slower to create
[02:20] JimBastard: inimino are you alive? i wanted to ask you about some PEG
[02:20] tmpvar has joined the channel
[02:20] Tim_Smart: JimBastard: Did you see my idea for static CSS / Javascript files at the bottom of the wave?
[02:20] brandon_beacher has joined the channel
[02:21] cedric_ has joined the channel
[02:25] cedricv has joined the channel
[02:26] JimBastard: Tim_Smart can i just share that wave link or do i have to invite people
[02:27] Tim_Smart: it is a public wave, so I dunno
[02:27] cedric_ has joined the channel
[02:28] JimBastard: well anyone who wants to contribute we've got a google wave going for a proposed javascript framework that works the same on the front-end and back-end https://wave.google.com/wave/#restored:wave:googlewave.com!w%252BayXwiDRMA.1
[02:29] cedric__ has joined the channel
[02:31] rictic has joined the channel
[02:33] cedricv has joined the channel
[02:35] tmpvar: what up JimBastard
[02:35] tmpvar: and Tim_Smart
[02:35] cedric_ has joined the channel
[02:35] Tim_Smart: Yo
[02:35] Tim_Smart: Jim is afk apparently
[02:36] tmpvar: i see
[02:36] Tim_Smart: Google wave keeps crashing >.<
[02:36] tmpvar: im going away as well.. really want to get this done
[02:36] tmpvar: hehe
[02:36] tmpvar: beta, right?
[02:37] Yuffster has joined the channel
[02:39] Tim_Smart: what is beta?
[02:39] cedric__ has joined the channel
[02:39] creationix: Is github down for anyone else?
[02:39] Tim_Smart: Ah right, Google Wave
[02:39] Tim_Smart: creationix: Appears so
[02:42] cedricv has joined the channel
[02:43] creationix: I made ade a quick implementation of the Do library I mentioned earlier.
[02:43] creationix: http://pastie.org/808738
[02:43] creationix: but it doesn't work unless you bind the addCallback functions to the promises directly.
[02:44] isaacs: creationix: http://twitter.com/github/status/8615253619
[02:44] tmpvar: 2 minutes ago
[02:44] tmpvar: im so out of the loop :P
[02:45] creationix: here is a quick patch to make addCallback be bound for File.read and File.write http://pastie.org/808739
[02:49] cedric_ has joined the channel
[02:52] cedric__ has joined the channel
[02:56] cedricv has joined the channel
[03:00] cedric_ has joined the channel
[03:03] cedric__ has joined the channel
[03:03] tmpvar: cmon github
[03:04] tmpvar: i like the Do patch btw
[03:04] tmpvar: handy
[03:05] hassox: the do patch?
[03:05] tmpvar: Do library, sorry
[03:05] tmpvar: http://pastie.org/808738
[03:05] tmpvar: posted by creationix
[03:05] creationix: I'm still working on it, but I think it may be a good syntax
[03:06] creationix: I'm not sure I need promise patched either, now that I think about it. I'll just have to wrap any function before using it.
[03:06] tmpvar: i think an addition would to have an add method as well
[03:06] creationix: add method?
[03:07] tmpvar: yeah, you're choice of constructor/setter injection
[03:07] tmpvar: s/you're/your
[03:08] tmpvar: ill proof it
[03:08] creationix: sounds interesting, some sample code would help
[03:08] cedric_ has joined the channel
[03:09] creationix: I'm adding a serial method now to compliment the parallel one
[03:09] hassox: nice :D
[03:10] creationix: it's slightly harder to implement.
[03:10] creationix: should be quite possible though, just a brain warper
[03:11] JimBastard: yeah github fuuuuuuu
[03:11] JimBastard: ffffffuuuuuuuuu
[03:11] rtomayko has joined the channel
[03:11] stephenlb: heh
[03:11] JimBastard: how am i suppose to review what i did today
[03:11] tmpvar: curious .. where does fns.forEach come from?
[03:12] creationix: v8 has Array.prototype.forEach built in
[03:12] tmpvar: ah
[03:12] cedricv has joined the channel
[03:13] unomi has joined the channel
[03:13] creationix: http://wiki.github.com/ry/node/ecma-5mozilla-features-implemented-in-v8
[03:13] creationix: I made a wiki page showing the parts of ECMA5 implemented in v8
[03:14] creationix: oh, but of course, it's on github, nevermind
[03:14] Tim_Smart: github is broke
[03:14] JimBastard: i know
[03:14] JimBastard: sup tmpvar
[03:14] cedric_ has joined the channel
[03:14] tmpvar: whats gonig on
[03:14] tmpvar: going even
[03:14] JimBastard: jsss
[03:14] JimBastard: json goes in, css comes out
[03:15] itistoday has joined the channel
[03:15] JimBastard: i was trying to figure out writing a PEG for it but im just gonna hack together a JS one and a Ruby one
[03:15] JimBastard: see what happens
[03:15] tmpvar: hrrrm
[03:15] tmpvar: Chris Dary made something like this
[03:16] tmpvar: i wonder if its public
[03:16] itistoday has left the channel
[03:16] RayMorgan: anyone know of a good node command line option parser?
[03:16] creationix: have you tried jison?
[03:16] creationix: for parsing, not option parser
[03:16] tmpvar: http://lab.arc90.com/2009/01/09/json-css-a-more-powerful-css-proof-of-concept/
[03:17] tmpvar: JimBastard, not sure if it helps.. but there it is heh
[03:17] JimBastard: yeah just like that
[03:17] JimBastard: http://maraksquires.com/json_stylesheets/ is a quickie version
[03:17] cedric__ has joined the channel
[03:17] bentomas has joined the channel
[03:18] creationix: Promises don't wait for you to attach a callback before they start to execute do they?
[03:18] RayMorgan: creationix: nope
[03:18] tmpvar: JimBastard, ah yeah. very similar
[03:18] RayMorgan: they wait for the next event loop tick though
[03:19] creationix: well, can't add serial quite as easily as I would have liked
[03:19] bentomas: creationix: I believe promises can be late binding now.
[03:19] JimBastard: going to be focusing more on the grammar for doing it
[03:19] creationix: yeah, but what I'm needing it a level up
[03:20] JimBastard: and defining the grammar so you can do it for all languages
[03:21] creationix: *is a level up
[03:21] JimBastard: tmpvar is that guy on IRC?
[03:21] tmpvar: i dont think so
[03:21] tmpvar: they are out on an "arc90 happy hour" atm
[03:21] tmpvar: i came home to finish jsdom level 1 and found github down!
[03:21] JimBastard: oofa
[03:22] cedricv has joined the channel
[03:22] creationix: aha!, I can make Do blocks chainable
[03:22] JimBastard: well let him know im running with that idea a bit and making an opensource project out of it
[03:22] tmpvar: creationix, that fixes the problem i mentioned i think then.. right?
[03:23] tmpvar: JimBastard, will do man
[03:23] creationix: tmpvar: not sure, I never understood what you were trying to tell me
[03:23] JimBastard: ill post to hackernews once i get some code checked in
[03:23] JimBastard: fffffffffuuuuuuuuu github
[03:23] tmpvar: creationix, simply adding callbacks later
[03:23] tmpvar: haha
[03:23] cedric_ has joined the channel
[03:24] inimino: JimBastard: ping
[03:24] tmpvar: yo inimino
[03:25] cedric__ has joined the channel
[03:25] JimBastard: hey inimino
[03:25] Tim_Smart: Stupid github! Wak up!
[03:25] Tim_Smart: *wake
[03:25] JimBastard: i was gonna bug you about PEG but i bothered my roomate for a while i think im good for now
[03:25] tmpvar: yes, this is crazyness
[03:25] JimBastard: ill come back when i need to implement my PEG in JS
[03:26] JimBastard: if only there was a way i could work on my git projects locally when github was down.....FUUUUCCC
[03:26] JimBastard: ohh nm
[03:26] tmpvar: JimBastard, yes.. im in a different boat though.. need to grab a commit before i can get this rolling
[03:26] JimBastard: word word
[03:26] tmpvar: who's going to nyc.js tomorrow?
[03:26] JimBastard: is it tommorow?
[03:26] tmpvar: dunno
[03:27] tmpvar: thursdays, no?
[03:27] JimBastard: the second thursday
[03:27] inimino: hey tmpvar
[03:27] JimBastard: of every month
[03:27] tmpvar: ag
[03:27] tmpvar: ah*
[03:27] JimBastard: and i actually have a conflict this month which sucks
[03:27] tmpvar: should be every day
[03:27] tmpvar: lol.
[03:27] tmpvar: hackers unite
[03:27] tmpvar: hack the planet, all that noise
[03:27] JimBastard: would be awesome to have a hackspace in nyc
[03:28] JimBastard: i got a 3 story townhouse if that counts
[03:28] tmpvar: out in CT?
[03:28] JimBastard: 27th and lex
[03:28] tmpvar: nice dude, thats on my way home
[03:28] inimino: ACTION skims backscroll
[03:28] JimBastard: its not as nice as it sounds trust me
[03:28] tmpvar: wink
[03:28] inimino: this channel is hopping
[03:28] JimBastard: ahaha
[03:29] cedricv has joined the channel
[03:29] JimBastard: if you really wanna get the party started you just gotta summon binary42
[03:29] binary42: **POOF** And you said party?
[03:29] tmpvar: ping binary42
[03:30] JimBastard: whats up with nyc.js this month
[03:30] binary42: Not sure.
[03:30] tmpvar: we should just take over some atrium
[03:30] JimBastard: im kinda fucked now too, my company does a huge designers meetup every second thursday at the exact same time
[03:30] tmpvar: damn
[03:30] binary42: I don't think we can do pivotal so I need a spot.
[03:30] binary42: I might ask my client tomorrow... just need to find a wall to project onto.
[03:30] hassox: ACTION is organising a meetup in melbs too
[03:30] tmpvar: like i said, kick the bums out of the atrium
[03:30] tmpvar: :P
[03:31] hassox: is there a common place to put info on groups about?
[03:31] JimBastard: would moving the day be out of the question?
[03:31] nodejs_v8 has joined the channel
[03:31] tmpvar: damn, we do need a hackspace
[03:31] tmpvar: its now very evident
[03:31] JimBastard: caus i think im deaded from 630 to 9 every second thursday
[03:31] tmpvar: ouch
[03:31] JimBastard: yeah i know
[03:32] creationix: if you're ever in north dallas, we're meeting every first Wednesday
[03:32] geelen: damn, second thursday is the 11th, yeah?
[03:32] tmpvar: yes
[03:32] cedric_ has joined the channel
[03:32] tmpvar: binary42, you are the organizer for this meetup?
[03:33] binary42: Hmmm. Okay. Well, we _will_ do something for NYC.js.
[03:33] geelen: when are the SF meets?
[03:33] tmpvar: creationix, you're in dallas?
[03:33] creationix: yep
[03:33] JimBastard: yeah binary42 is the organizer
[03:33] geelen: i'm from Melb, heading across next weekend, travelling before SXSW
[03:33] tmpvar: creationix, nice, what area
[03:33] binary42: I do have a hack meetup planned with drop.io... I've just been busy.
[03:33] geelen: would love to catch a meetup while I'm there
[03:34] JimBastard: ffffffffuuuuuuuuu drop.io and their awesome software
[03:34] creationix: tmpvar: Richardson (Just north of dallas proper)
[03:34] tmpvar: got ya, ive been around there
[03:34] binary42: ACTION just likes the title dictator... he makes other people to the hard things like present.
[03:34] tmpvar: damn you github.
[03:34] creationix: ruby and js peeps here meet in Addison ususlly
[03:34] tmpvar: fail whales
[03:34] tmpvar: creationix, got ya
[03:34] binary42: JimBastard: Just sayin'. You can skip that one if you want.
[03:34] tmpvar: i was in san antonio a week ago
[03:35] tmpvar: pretty far away though hehe
[03:35] JimBastard: i cant hate on cool software
[03:35] tmpvar: yeah
[03:35] tmpvar: this is major though
[03:35] tmpvar: probably got some little nerdy guy on the phone yelling
[03:35] tmpvar: love it
[03:35] creationix: SanAntonio, so you planted a bug in the github servers then huh?
[03:35] tmpvar: lol nah, was there on arc90 business
[03:35] cedric__ has joined the channel
[03:36] creationix: it seems all my JS employments have been for NewYork jobs lately
[03:36] tmpvar: yeah? if you done mind me asking.. what companies?
[03:37] binary42: creationix: Yeah. It's kind of a meta-tech-boom here right now.
[03:37] JimBastard: yep
[03:37] creationix: the last two were DocumentCloud and NYU
[03:37] creationix: both open-source related
[03:37] JimBastard: i just got hired as a 100% JS and UX guy
[03:37] cedric__ has joined the channel
[03:38] JimBastard: all front-end javascript and user interaction, clicky click draggy drag stuff
[03:38] JimBastard: lots of node people are in nyc actually
[03:38] binary42: I call it meta because it's the sort of thing that is going to fuel the mainstream tech work... it's all crazy creative stuff now.
[03:38] binary42: creationix: DocumentCloud's team rocks. Love their work.
[03:38] tmpvar: JimBastard, i cant wait until you reveal at what co
[03:38] JimBastard: its not like a secret or anything
[03:39] creationix: yeah, Jeremy at DocumentCloud is awesome, I'm excited for their JS framework coming out this summer
[03:39] JimBastard: i was working at lab49 for a bit
[03:39] JimBastard: doing flex and AS
[03:39] JimBastard: ugghhhhhhh
[03:39] JimBastard: didn't work out to well
[03:40] stephenlb: mmmurrrhh. github :-/
[03:41] bpot has joined the channel
[03:41] Tim_Smart: Hmm there is always assembla.com
[03:42] stephenlb: Tim_Smart: interesting
[03:43] JimBastard: yeah theres also unfuddle
[03:43] JimBastard: and basecamp
[03:43] JimBastard: i've been using github hooks + campfire
[03:44] JimBastard: so i can see team commits
[03:44] stephenlb: JimBastard: cool
[03:44] binary42: I'd got with darts, cork board, felt markers, and 3x5 cards.
[03:44] rictic has joined the channel
[03:45] binary42: If it doesn't solve all your problems, it will at least waste some time.
[03:45] Tim_Smart: http://www.assembla.com/catalog?type=public
[03:45] Tim_Smart: Assembla isn't the best for open source though..
[03:45] Tim_Smart: The ticket system is cool however
[03:46] tlrobinson_ has joined the channel
[03:46] cedricv has joined the channel
[03:48] tmpvar: github is up
[03:48] Tim_Smart: woo
[03:48] scudco has joined the channel
[03:49] Tim_Smart: hmm not on my screen its not
[03:49] Connorhd_: I'm seeing an angry unicorn
[03:50] tmpvar: haha
[03:50] tmpvar: its responding to pings
[03:50] tmpvar: sorry
[03:50] tmpvar: jumped the gun a bit
[03:50] tmpvar: SORRY.
[03:50] Tim_Smart: why does github fail so much :(
[03:50] Tim_Smart: yet it is so win
[03:51] tmpvar: its all about those pipes
[03:51] tmpvar: im going to go download the internet to make sure this doesnt happen again
[03:51] Connorhd_: maybe its all part of their plan, failing regularly seems to work for twitter
[03:51] tmpvar: lol
[03:51] Tim_Smart: haha
[03:51] creationix: I got crying octocat here
[03:52] Connorhd_: http://github.com/images/error/angry_unicorn.png
[03:52] Connorhd_: appears to be for a different kind of error
[03:52] cedric_ has joined the channel
[03:53] creationix: unicorn makes hosting ruby apps bearable
[03:53] tmpvar: magic is fails
[03:53] cedric__ has joined the channel
[03:54] creationix: well, I got my parallel logic pretty simplfied http://pastie.org/808807
[03:55] creationix: still can't come up with a good syntax for sequential actions, I need to somehow use the return value on the first function as one of the arguments in the second function
[03:55] creationix: without evil nesting syntax
[03:56] Tim_Smart: lol all the gists around the web have failed
[03:56] stephenlb: creationix: it's pretty
[03:56] stephenlb: Tim_Smart: heh
[03:57] creationix: ok, updated with full source for anyone interested. Same as before, but with wrapped readfile functions
[03:57] tmpvar: link?
[03:57] stephenlb: link
[03:57] cedricv has joined the channel
[03:58] creationix: http://pastie.org/808807
[03:58] creationix: pasties are editable just like gists
[03:58] hassox: creationix: so you pass it a bunch of promises and when they're all finished it calls the callback?
[03:58] creationix: sortof, yes
[03:59] creationix: you pass it a bunch of addCallback functions and when all the callbacks get called you get the results in the same order you registered them
[03:59] hassox: right
[03:59] hassox: nice
[04:00] creationix: the problem with chaining serial actions is that they depend on eachother and it's not always one to one
[04:00] cedric_ has joined the channel
[04:00] creationix: the output of function1 might not be the only argument to function 2
[04:00] inimino: creationix: looks nice :-)
[04:00] inimino: ACTION uses that pattern everywhere
[04:01] Tim_Smart: since when did node have the file module?
[04:01] Tim_Smart: It's not on the api page :o
[04:01] tmpvar: peace!
[04:02] creationix: did it never get added? well about the only thing I ever use out of it is File.read
[04:02] steadicat has joined the channel
[04:02] creationix: works like posix.cat, only in reverse
[04:02] creationix: err File.write
[04:02] creationix: File.read is posix.cat
[04:02] stephenlb: heh
[04:03] Tim_Smart: ACTION goes off and tries it
[04:03] creationix: there is a File class in there too that tries to be higher level, but I never liked it. I even wrote the first version.
[04:03] dnolen has joined the channel
[04:03] Connorhd_: didn't the File stuff have issues?
[04:04] creationix: the original had issues, so I rewrote it for ryan, and I think the one in File is based on my code
[04:04] Connorhd_: ahh ok
[04:04] creationix: not sure if it's ever been battle tested though
[04:05] jed has joined the channel
[04:05] creationix: I think the posix commands and File.write and File.read would be plenty high level if we had better constructs for handling the async nature of node.
[04:06] creationix: I also have a patch that never made it to ry/node that allows posix.open and friends to accept "r", "w", "a+", etc for file modes
[04:06] creationix: ORing together the bit flags never seemed very JavaScript to me
[04:08] creationix: the reason my patch got rejected was because that abstraction was already in the File class in file.js, and it was supposed to end up the primary api for most developers
[04:08] Tim_Smart: woo, time to work on my hot-loading module idea now that file is around
[04:09] creationix: ryah: are you there?
[04:09] inimino: creationix: I think it's best if stuff like this stays out of node core
[04:09] inimino: and gets layered on top
[04:10] creationix: like which? I agree my Do library should not be in core, but I think the patch to posix should be in core.
[04:11] inimino: I don't think "r" and such should be in core, I think posix can be just a direct translation of the POSIX API
[04:11] inimino: which is why OR-ing is OK, because it's a C API, and just a JavaScript binding
[04:12] Tim_Smart: the github is alive
[04:12] Connorhd_: quick, everyone refresh at once �_�
[04:12] creationix: yes, but then new developers have to learn c api's to use node
[04:12] Tim_Smart: (partially)
[04:12] stephenlb: Connorhd_: lol
[04:12] creationix: the convention in all scripting languages is to use the string flags
[04:13] creationix: maybe node should ship with a more robust file io library that sits on top of posix
[04:13] creationix: and new developers never need know that posix exists
[04:13] inimino: yes, there should be such a library
[04:13] inimino: I don't think it should ship with node, but I think people should have a common set of libraries that they use for these things
[04:14] stephenlb: ACTION aggrees with inimino about that point very much
[04:14] Tim_Smart: ACTION thinks we need a module / package repo
[04:14] Connorhd_: inimino, do you think the http stuff should ship with node?
[04:15] Connorhd_: (just OOI)
[04:15] stephenlb: ACTION was thinking something similar to what Tim_Smart just said. (package repo)
[04:15] inimino: Connorhd_: right now, it pretty much needs to, but in principle and eventually, no, it should be split out
[04:15] Tim_Smart: and node ships with a python script that lets you grab them easily
[04:15] inimino: Connorhd_: right now I think that's impractical for technical reasons
[04:16] creationix: my only problem with splitting everything out is that most programs will need pretty much the same 5 require statements at the top
[04:16] Connorhd_: ok, it just seemed a little odd to ship with that, and not a higher level file library than just posix bindings
[04:16] creationix: what do we really gain by making node so lean it's unusable by itself?
[04:16] inimino: creationix: several things:
[04:16] Connorhd_: creationix, surely you need them anyway, even if they are included right now they need to be required
[04:16] inimino: first, Ryan doesn't have to maintain stuff that's not essential to node
[04:17] inimino: second, competition in higher-level libraries is good for us all
[04:17] inimino: and it does away with a lot of bikeshedding...
[04:17] creationix: fair enough
[04:17] stephenlb: absolutely
[04:17] creationix: tim: plans on making a high-level file library soon...
[04:17] inimino: stuff like file I/O libraries A and B can just live in harmony and compete on their merits
[04:18] creationix: agreed
[04:18] inimino: creationix: if you like the continuable style, maybe we can collaborate on something in the fileIO direction
[04:19] creationix: It's not too much overhead (less than promises), and works great with the Do pattern I'm working on
[04:19] creationix: inimino: sounds great
[04:19] inimino: yeah, I've written that pattern before, it's great
[04:19] inimino: (or something close to it, anyway)
[04:20] creationix: inimino: did you ever find a good way to do it without creating the extra closure? (making the callback simply the last argument)
[04:20] inimino: I like the extra closure because it provides laziness and you can pass things around and combine them without any overhead
[04:21] creationix: true, Do.parallel wouldn't work with traditional cps
[04:21] inimino: for example, you can construct a list that concat's 20 files, and then stream them, but it won't open the file handles until you get to that file
[04:21] bentomas has left the channel
[04:22] isaacs has joined the channel
[04:22] creationix: inimino: what time zone are you in? I'm about to write my daily article on howtonode.org and I'm thinking explaining the idea of continuables would be a good idea
[04:22] Tim_Smart: for modules, it is not hard to do this: http://pastie.org/808844
[04:23] creationix: Tim_Smart: yeah, I've done that before, didn't know if it was kosher
[04:23] inimino: creationix: awesome. I'm in Mountain Time
[04:24] creationix: inimino: do you want to write part of the article, or just give me some good docs to read through and play with so I know what I'm taking about?
[04:24] Tim_Smart: ACTION is waiting for his VM server so he can run node 24/7
[04:24] JimBastard: node package manager
[04:24] JimBastard: like gems
[04:25] JimBastard: dependencies
[04:25] JimBastard: versions
[04:25] JimBastard: conflict resolution
[04:25] inimino: creationix: you've probably seen all the docs there are, pretty much the README and the code
[04:25] JimBastard: package x requires package y v1.4 and package z2.4
[04:25] creationix: I lost the link, where's the code?
[04:26] inimino: creationix: http://inimino.org/~inimino/blog/fileio_first_release
[04:26] inimino: that's the blog post with the links to all of that
[04:26] creationix: oh yes, that one, thanks
[04:26] inimino: creationix: the current code is pretty close to the released version
[04:27] creationix: hey, it's not on github, I can get to it :P
[04:27] inimino: I can probably write a few paragraphs if you want me to, but I'm equally happy to leave it in your capable hands :)
[04:27] inimino: hehe, yeah
[04:28] creationix: I like the unicode arrows, makes it look all smart
[04:28] inimino: hehe
[04:28] tlrobinson_ has joined the channel
[04:28] creationix: reminds me of my ocaml days
[04:28] inimino: ah, fun
[04:28] JimBastard: inimino put it on the wave!
[04:28] inimino: ACTION is a fan of Unicode syntax
[04:29] inimino: JimBastard: fileIO? Ok, sure.
[04:29] creationix: Jim, unicode on wave, you're asking for unstability
[04:29] JimBastard: put the link up where we talk about a File.js module
[04:30] JimBastard: i remember when wave was cool (before they released it)
[04:30] inimino: heh
[04:30] inimino: before anybody had actually seen it... yes
[04:30] creationix: lol
[04:30] creationix: we should make a better wave in node
[04:30] creationix: node is good at that live interaction stuff
[04:30] inimino: I remember the three days of "OMG Wave changes EVERYTHING!!!1!" hype, too
[04:31] inimino: it is :)
[04:31] JimBastard: creationix hell yeah
[04:31] JimBastard: that would be a good hackday
[04:31] creationix: I'm still waiting on a good MVC framework for the browser (like SproutCore, only better)
[04:31] JimBastard: dude
[04:31] JimBastard: you dont want mvc for the browser
[04:31] JimBastard: you want mvvm
[04:32] JimBastard: once you start doing heavy UI you need mvvm
[04:32] creationix: what's the diff?
[04:32] JimBastard: http://en.wikipedia.org/wiki/Model_View_ViewModel
[04:32] JimBastard: the silverlight guys are big on this
[04:32] JimBastard: i do mvvm using jquery and jquery.data or straight up databinds
[04:33] creationix: ahh, never made it past the first sentence. used in software engineering that originated from Microsoft.......
[04:33] Tim_Smart: I loled when Google mentioned Wave took like 100000 lines of code
[04:33] Tim_Smart: And the boasted about it...
[04:33] Tim_Smart: *they
[04:33] inimino: heh
[04:33] JimBastard: creationix dont be ignant
[04:34] creationix: I'm kidding of course, still reading
[04:34] JimBastard: ViewModel: the ViewModel is a 201cModel of the View201d meaning it is an abstraction of the View that also serves in data binding between the View and the Model. It could be seen as a specialized aspect of what would be a Controller (in the MVC pattern) that acts as a data binder/converter that changes Model information into View information and passes commands from the View into the Model. The ViewModel exposes public properties
[04:34] creationix: so basically it's what MVC meant before rails changed the meaning for everyone
[04:35] inimino: what the hell, is cutting and pasting in Wave totally busted?
[04:35] JimBastard: wave sucks
[04:35] inimino: Wave--
[04:35] JimBastard: i vote on building a wave clone in node
[04:35] JimBastard: tsunami
[04:36] creationix: well, whatever you call the architecture, it looks like what I'm looking for
[04:36] JimBastard: mvvm is the shit
[04:36] creationix: I started one a while back called TopCloud. I'd link to it, but github is down again
[04:36] Tim_Smart: What does Wave run on? Java?
[04:36] JimBastard: probaly
[04:36] creationix: http://chat.creationix.com/ uses TopCloud some
[04:37] kriszyp: wave runs on GWT
[04:37] inimino: ACTION types it in
[04:37] okito has joined the channel
[04:38] JimBastard: tsunami is a great name for a wave clone in node
[04:38] deanlandolt_: ^^ e.g. waves compiles to the jsvm but is written in java (how backward does that sound :)
[04:39] inimino: ACTION uses reactive programming over MVC
[04:39] inimino: deanlandolt_: yeah, I'm not a fan of GWT
[04:39] deanlandolt_: prediction: js will be /the/ compile target once es-harmony starts getting traction (or just catchall support in all good engines)
[04:39] okito has joined the channel
[04:39] inimino: deanlandolt_: but if you start with an organization full of Java programmers.... I guess you are bound to get something like that
[04:39] Tim_Smart: Google loves their GWT, and it makes all their apps feel slow
[04:39] RayMorgan: that is b/c javascript is a crazy unwieldy language that only a structured strongly typed compiled language like Java can contain
[04:40] inimino: hehe
[04:40] Tim_Smart: Only ninjas can handle the javascript
[04:40] inimino: `ninja
[04:40] gbot2: http://ejohn.org/apps/learn/
[04:40] inimino: get your ninja on
[04:41] deanlandolt_: yeah, i /would/ write in assembly but js just feels like more of a challenge :D
[04:41] Tim_Smart: coffeescript looked cool
[04:41] RayMorgan: yeah, doing == for string comparison is just plain craziness!
[04:41] inimino: deanlandolt_: seriously, who ever heard of an assembly language with a Date abstraction that numbers days from 1 and months from 0
[04:42] mattly has joined the channel
[04:42] deanlandolt_: heh!
[04:43] Tim_Smart: https://bespin.mozilla.com/ <3
[04:45] creationix: bespin was the first open source project I ever actually contributed to
[04:45] stephenlb: Tim_Smart: attending the google js meetup this month? bespin being the topic.
[04:45] creationix: I write the highlighter for ruby code
[04:45] Tim_Smart: stephenlb: Where is it?
[04:45] stephenlb: Tim_Smart: google. in Mountain View.
[04:45] Tim_Smart: Meh I'm in New Zealand and I'm poor
[04:46] creationix: google maps will give you directions to get here on foot
[04:46] stephenlb: creationix: hah
[04:46] creationix: will probably include building a log-raft or something like that
[04:46] Tim_Smart: oh shi
[04:47] JimBastard: man fucking github
[04:47] JimBastard: Tim_Smart HAVE YOU BEEN TO MORDOR!?!?!?!
[04:47] Tim_Smart: of course
[04:47] JimBastard: damn kiwis
[04:47] inimino: creationix: ah... I finally found what I was thinking of...
[04:48] creationix: inimino: what's that?
[04:48] inimino: creationix: http://boshi.inimino.org/3box/revstore/dispatch.js search for "parallel ::"
[04:49] Tim_Smart: JimBastard: When github is working http://github.com/waveto/node-compress/
[04:49] inimino: creationix: it collects n results of n continuables, and when they are all done, returns the lot
[04:50] creationix: looks a lot like mine, I see what you mean
[04:51] inimino: yeah, that's what I thought of when I saw it
[04:51] creationix: so is that a home-grown git written in javascript or something?
[04:51] inimino: yeah
[04:51] inimino: runs on node
[04:51] inimino: (of course)
[04:52] inimino: and it's not sophisticated like git or anything... very dumb
[04:54] Tim_Smart: Haha JimBastard got owned by the java
[04:56] creationix: inimino: 3box is quite the project, is it for work or your pet project?
[04:56] inimino: creationix: pet project, but if I can figure out how to make a living at it I will
[04:57] creationix: I understand that
[04:57] jcrosby has joined the channel
[04:58] inimino: I have an idea that people can work on cool software and those who end up using it can cover the development cost by donations
[04:58] inimino: 3box might be a testbed for that idea if it turns into something useful and cool
[04:59] creationix: inimino: what class of grammars can peg support LR(1), LL(1), LALR(2), other?
[04:59] tlrobinson_ has joined the channel
[04:59] inimino: creationix: it's got unlimited lookahead, so it's more powerful than all of those
[05:00] creationix: ok, does it handle left recursion in grammars?
[05:00] inimino: not yet, there's ways of detecting it and working around it
[05:00] creationix: ok, so you have to factor it by hand for now?
[05:00] inimino: yes
[05:01] creationix: I'm using Jison for my projects right now, it's a basic LALR(1) Bison style parser generator
[05:01] inimino: I remember looking at it recently
[05:01] creationix: but it allows for left recursion because of the type of parser it generates
[05:01] creationix: bottom-up I think
[05:01] inimino: yeah
[05:02] creationix: packrat is a memoized recursive descent right?
[05:02] inimino: yes
[05:02] creationix: ahh that's why left recursion is bad
[05:02] inimino: indeed :)
[05:02] inimino: kind of a problem
[05:03] creationix: yep, I started to write a packrat parser a couple of weeks ago
[05:03] jspiros has joined the channel
[05:03] inimino: there's a lot of optimizations you can do though...
[05:03] inimino: when you optimize PEG enough, it starts to look like a hybrid
[05:09] creationix: If you could add in left recursion handling then I know some people who would be very interested in using peg
[05:09] inimino: creationix: left recursion doesn't come up too often, because you have nice repetition operators
[05:10] creationix: really? that's cool
[05:10] inimino: so you'd write Expr ← Term ( Op Term ) *
[05:10] inimino: instead of Expr ← Expr [ Op Term ]
[05:12] itistoday has joined the channel
[05:16] creationix: but you can't do Expr ← Expr ( Op Expr ) *
[05:16] inimino: right
[05:16] creationix: of course I guess that would end up ambiguous
[05:17] inimino: but you can express the same grammar using whatever it is that Expr can be made up of in place of Expr
[05:17] creationix: ok, it's getting late, I better get on writing that article about continuables
[05:17] creationix: I'll get back to peg later
[05:18] inimino: cool
[05:19] itistoday has left the channel
[05:24] creationix: inimino: what do you think about continuable.either(callback, errback) instead of continuable(either(callback, errback))
[05:24] creationix: it's one character shorter and we don't need either in the global scope
[05:27] inimino: creationix: I think the functional style is less confusing and more consistent
[05:28] inimino: creationix: but I'm open to suggestions for making either() better, I think it's one of the areas of design difficulty
[05:28] inimino: (as error handling often is)
[05:28] creationix: I just think you're going to get a of of pushback for requiring `either` to be defined in the current scope
[05:28] inimino: but as it is, you can implement continuables without having to use any particular library or give them any particular prototype
[05:29] inimino: that could be
[05:30] inimino: it could be something like continuable(c.either(a,b)) with a var c=require('continuable_utils') or some such
[05:30] inimino: but I admit that's extra typing
[05:31] creationix: yeah, no good for me
[05:31] creationix: I know you don't like type checking, but it's pretty reliable to check between a function and an object
[05:32] creationix: continuable(callback) continuable({success: callback, error: errback}), etc...
[05:32] creationix: or make the distinction like node does between promises and full eventemitters
[05:33] creationix: promise like ones take one or two callback functions as arguments, and event like ones take a hash of events you want to listen to
[05:33] creationix: I think that would be the prettiest syntax at least
[05:34] inimino: hm
[05:35] inimino: yeah, I think event-emitter or stream-like things are going to have to be a bit different
[05:37] inimino: but I think the consistency of having a continuable be a function that takes a single function that takes a single argument is important
[05:38] creationix: yes, except for the single function part
[05:38] creationix: with that restriction you have to have constructs like `either` to make error reporting work
[05:39] creationix: I'll play around with it and see how it feels
[05:39] inimino: yeah, that's the cost
[05:39] inimino: alright
[05:39] creationix: you have inspired me, now I'll go and change it a bit to fit my tastes
[05:39] inimino: something like rightContinuation (terrible name) is interesting too
[05:39] inimino: hehe, ok :-)
[05:40] creationix: functionally it's a lot like promises, but the subtle differences are important
[05:40] inimino: yes
[05:40] creationix: can I still call them continuables if I break the one function rule? or should I use another name for now?
[05:41] inimino: hm, you can say it's a slight variation on them
[05:41] creationix: I could just call it the Do pattern and say it's based on continuations
[05:41] inimino: it's still the same basic idea I think
[05:42] creationix: yep, pretty close
[05:46] tlrobinson_ has joined the channel
[05:49] creationix: inimino: http://pastie.org/808922
[05:49] creationix: it's a start
[05:51] inimino: creationix: cool
[05:54] inimino: creationix: does parallel take an array, or arguments?
[05:55] inimino: ACTION needs sleep
[05:55] rektide: where do these continuables come from?
[05:55] inimino: bbl
[05:55] rektide: what software are you talking about?
[05:55] inimino: rektide: http://inimino.org/~inimino/blog/fileio_first_release
[05:56] inimino: ACTION afks
[05:56] creationix: inimino: it takes both, runtime type check
[05:57] creationix: it will flatten all arrays into a single arguments list
[05:57] creationix: so you could pass in an array of actions and also a single action
[05:58] creationix: I still can't figure out the serial case though, there has got to be a way that's easy to type
[05:59] creationix: it's easy if all your action methods take one single argument, but that's now a good requirement
[05:59] rektide: why is there tmpvar's jsdom and env-js
[05:59] rektide: this is silly
[05:59] creationix: *hot a good
[05:59] creationix: ** not good
[06:04] rektide: someone please write a uri template matching engine
[06:04] rektide: tia; ty
[06:05] Tim_Smart: rektide: I'm going to try port env-js to v8
[06:06] [k2] has joined the channel
[06:06] Tim_Smart: well node.js more specifically
[06:08] rektide: Tim_Smart: i will join your crusade
[06:09] Tim_Smart: OK. I will commit a fresh copy of env.js to a repo now
[06:09] rektide: i have high falutin notions of the importance of this task
[06:12] rektide: there was a env-js thread discussing node not too long ago; thatcher chipped in that platform specific code is isolated
[06:12] rektide: the thing i dont really fathom
[06:12] rektide: is isolation
[06:13] rektide: how to have multiple pages loaded
[06:13] rektide: env-js is very monotonic in its focus; one runtime, one page, one global namespace
[06:13] Tim_Smart: All I want is the dom stuff
[06:14] Tim_Smart: for awesome template engines
[06:14] rektide: you're not going to get env-js's dom without the rest of it
[06:15] Tim_Smart: yeah I know, I'll do the whole thing while I'm at it
[06:16] kennethkalmer has joined the channel
[06:17] Tim_Smart: http://github.com/Tim-Smart/node-env-js
[06:18] rektide: not particularly useful but iface vail inet dhcp wireless-essid wireless wireless-key1 s:"vc382"
[06:18] rektide: please dont steal my wifi
[06:18] rektide: where the hell did that even come from
[06:18] rektide: http://groups.google.com/group/envjs/browse_thread/thread/2d5acefd5cb62e4d
[06:19] Tim_Smart: rofl
[06:19] Tim_Smart: Hey look, free wifi!
[06:19] rektide: its wep secured
[06:19] rektide: not like you couldnt crack it with an abacus
[06:20] Tim_Smart: bbs
[06:21] rektide: away for a spell
[06:23] inkubus08 has joined the channel
[06:27] tlockney has joined the channel
[06:40] Tim_Smart: rektide: Hmm we would have to re-implement some aspects of it in c++
[06:40] Tim_Smart: I might check the chromium project and see how modular the DOM is there
[06:43] Tim_Smart: Hmm I wonder if we can use webkit to parse HTML into DOM
[06:52] micheil: Tim_Smart: man.. you know, most people would think "dude, I'm on the server, horaay no more DOM, but noooo..."
[06:52] micheil: :P
[06:52] Tim_Smart: lol
[06:52] micheil: creationix: with node-blog, do you want to just have the authors as static html?
[06:53] Tim_Smart: DOM on the server would be awesome. If we could get webkit to parse it, it could probably be really fast...
[06:53] creationix: micheil: what do you mean. I want their bio source data stored in markdown files like now
[06:53] micheil: okay
[06:53] creationix: I'm fine with them being on one single page instead of one page each
[06:54] micheil: creationix: I'm just wondering ways to make compile time less.
[06:54] creationix: compile is pretty fast
[06:54] creationix: the git pull takes way longer than recompiling everything
[06:54] micheil: even so, that's with 2 articles and two authors
[06:54] creationix: true, but there could be some smart dependency tracking later on that only recompiles changed files.
[06:54] micheil: also, sans extension would be nice
[06:55] micheil: so, howtonode.org/control_flow
[06:55] micheil: I still thing there needs to be dates though
[06:55] micheil: eg, howtonode.org/2010/01/flow_control
[06:55] creationix: why dates in the url? we don't plan on having duplicate article titles do we?
[06:56] micheil: we might end up with them
[06:56] micheil: plus it just.. looks right for some reason
[06:57] micheil: anyone done much work on: http://www.mongodb.org/display/DOCS/GridFS+Specification ?
[06:59] creationix: ok, made quick nginx config change, html extension is now optional
[06:59] creationix: http://howtonode.org/control_flow
[07:00] micheil: k
[07:01] micheil: creationix: actually, would it make more sense to do: howtonode.org/articles/control_flow
[07:02] micheil: or something?
[07:02] creationix: why the extra stuff? I like to keep it simple
[07:03] creationix: the site will never have anything other than articles and three static pages (index, authors, feed.xml)
[07:03] micheil: like I said, it just looks right
[07:03] Tim_Smart: :D http://www.google.com/codesearch/p?hl=en#h0RrPvyPu-c/webkit/glue/dom_serializer.cc&q=webkit%20dom%20lang:c++%20file:\.cc$%20package:src.chromium.org/svn/trunk&sa=N&cd=4&ct=rc&l=171
[07:04] kennethkalmer has joined the channel
[07:07] hassox: creationix: nice post
[07:07] creationix: thanks, I'm working on part II right now
[07:08] micheil: creationix: maybe make the titles more specific in the urls then
[07:09] micheil: creationix: eg, "flow-control-with-nodejs" vs "control_flow"
[07:09] creationix: good idea
[07:09] creationix: I'm afraid to rename the two existing ones though
[07:09] micheil: it should be fine.
[07:10] micheil: just setup the 404 to redirect to the frontpage
[07:11] creationix: so in the morning there should be an article at http://howtonode.org/flow-control-with-nodejs-part-ii
[07:11] creationix: sounds like a good short-name
[07:11] micheil: well, it makes sense though, doesn't it?
[07:12] micheil: if we want, we could setup tiny urls or whatever, but it's not worth the effort.
[07:13] creationix: hmm, removing the html extension prevents me from testing locally
[07:13] creationix: breaks all my links at least
[07:14] micheil: make it not care about extension then, duh :P
[07:16] creationix: well, my filesystem cares, I'm testing locally by just pointing to the static file on my harddrive
[07:16] creationix: no http server required
[07:16] creationix: it's not a big deal either way
[07:18] bpot has joined the channel
[07:21] brapse has joined the channel
[07:27] r11t has joined the channel
[07:29] mattly has joined the channel
[07:31] isaacs: i have a multipart parser that handles nested messages. w00t.
[07:31] micheil: creationix: ah
[07:32] micheil: creationix: also, I might be making a few layout revisions soon
[07:32] creationix: sounds good
[07:33] micheil: creationix: I'm also interested in experimenting with mongodb, and writing a blog app in that
[07:33] micheil: ACTION wishes he knew how oAuth worked
[07:33] creationix: that's a great idea. Ryan is looking for a full blog app to do benchmarks on
[07:35] isaacs: creationix: it'd be cooler if http://howtonode.org/ was running on node.
[07:35] richcollins has joined the channel
[07:35] micheil: isaacs: it sort of is
[07:35] richcollins: Are there any docs on making C bindings?
[07:35] isaacs: hm, i see Server: nginx/0.7.62
[07:35] micheil: isaacs: at least, it's using node to compile to static html
[07:35] Tim_Smart: richcollins: Not really
[07:35] isaacs: you back-proxying or something?
[07:35] creationix: isaacs: It is, it's just got heavy page caching :P
[07:36] micheil: isaacs: nginx is just proxying it afaik
[07:36] richcollins: Tim_Smart: Any projects that bind to c apis?
[07:36] micheil: richcollins: check out the api doc page, it links to one
[07:36] Tim_Smart: richcollins: I have messed with libev and v8
[07:36] creationix: isaacs: someone could write a disqus replacement in node and I'd gladly use that for comments
[07:36] Tim_Smart: I used c++ though
[07:36] micheil: creq
[07:36] micheil: bah!
[07:37] richcollins: Tim_Smart: I'm trying to convince stevedekorte to write http://github.com/stevedekorte/vertexdb2 in nodejs instead of Lua
[07:37] micheil: creationix: maybe I'll do that if I decide to actually write something that uses http
[07:37] isaacs: creationix: comments are overrated
[07:37] bpot has joined the channel
[07:37] richcollins: Tim_Smart: He doesn't want to mess with writing the TokyoCabinet binding
[07:37] isaacs: just link to the HN page.
[07:37] creationix: micheil: nginx only proxies the github post hook, the content is served directly by nginx
[07:37] micheil: oh
[07:38] richcollins: Tim_Smart: Ah V8 is C++ isn't it
[07:38] Tim_Smart: yes
[07:38] Tim_Smart: It is far easier to write addons in C++
[07:38] isaacs: creationix: this is hot: http://github.com/creationix/howtonode.org/raw/master/articles/control_flow.markdown
[07:39] isaacs: just like markdown http messages.
[07:40] micheil: creationix: actually, there's that api... parallel or something
[07:40] richcollins: ah http://nodejs.org/api.html#_addons
[07:40] micheil: (fn1, fn2, fn3, fn4)(onSuccess, onError)
[07:41] creationix: micheil: I'm writing about that one right now, it's based on iminios work
[07:41] micheil: okay
[07:41] richcollins has left the channel
[07:41] creationix: just pushed my nginx config in node-blog's readme
[07:42] micheil: creationix: I have to say, your smile is still creepy.
[07:42] micheil: :P
[07:43] isaacs: node-blog is pretty sweet
[07:44] creationix: I'm having fun at least
[07:44] creationix: not sleeping much I'm afraid, it's 2am here
[07:46] aho has joined the channel
[07:51] scudco has joined the channel
[08:02] creationix: article is live http://howtonode.org/flow-control-in-nodejs-part-ii
[08:02] creationix: creationix: is going to bed
[08:03] creationix has left the channel
[08:07] r11t has joined the channel
[08:08] paulca has joined the channel
[08:24] Tim_Smart: ACTION is making a module that returns json directory structures
[08:50] paulca has joined the channel
[09:12] paulca has joined the channel
[09:13] teemow has joined the channel
[09:14] lifo has joined the channel
[09:29] felixge has joined the channel
[09:29] felixge has joined the channel
[09:35] hassox has joined the channel
[09:35] jed has joined the channel
[09:49] Tim_Smart: For your pleasure: A directory serialise-r, which turns a dir tree into objects and such. Can also export to JSON http://gist.github.com/294488
[09:50] jed: Tim_Smart: nice work. you should put some usage examples in the comments or something.
[09:50] Tim_Smart: All add a section to it
[09:50] Tim_Smart: *Ill
[09:50] jed: nice.
[09:51] paulca has joined the channel
[09:59] Tim_Smart: http://gist.github.com/294488 :p
[10:02] Tim_Smart: jed: If you can test it, that would be appreciated!
[10:10] unomi has joined the channel
[10:11] jed: Tim_Smart: am about to head out to dinner, will give it a spin when i get back.
[10:11] Tim_Smart: have a good nom nom :)
[10:16] rektide: the indexing capabilities of couchdb are...
[10:16] rektide: hot
[10:16] rektide: physically arousing
[10:17] rektide: i'm delighted some of that work is being worked on in WebSimpleDB http://www.w3.org/TR/WebSimpleDB/
[10:24] Tim_Smart: haha
[10:28] micheil: Tim_Smart: email that directory thing around, might be useful to see in node-blog or similar projects
[10:28] Tim_Smart: yeah, I'm fixing a couple bugs atm
[10:42] lifo has joined the channel
[10:44] Tim_Smart: gah now git won't let me access my gist >.<
[10:46] felixge has joined the channel
[10:46] felixge has joined the channel
[10:49] Tim_Smart: oh shi not again http://twitter.com/#search?q=%40github
[10:50] micheil: http://pastie.org/809135
[10:51] Tim_Smart: ah good the example is still there
[10:51] Tim_Smart: I just have updated code that's all
[10:52] Tim_Smart: http://pastie.org/809137
[10:58] Tim_Smart: Hmm Github's file servers keep crapping out... Maybe they need to re-look that...
[10:59] micheil: Tim_Smart: I'd guess that anchor systems are really busy atm
[11:00] Tim_Smart: well I guess Facebook released hiphop today on github
[11:00] Tim_Smart: all the PHP gurus would be a tap tappin the refresh button
[11:03] micheil: hiphop
[11:03] micheil: ?
[11:04] Tim_Smart: JIT compiler for PHP. Transforms the source code to C++ then compiles it with G++
[11:05] micheil: oh, right, the one that they just rewrote their site in
[11:06] Tim_Smart: Well ideally they would have to re-write the site >.>
[11:06] Tim_Smart: just re-compile it
[11:06] Tim_Smart: *wouldn't
[11:06] micheil: no, from what I heard it's a different syntax / language
[11:07] Tim_Smart: :/ Hmm I swear it is just standard PHP
[11:08] unomi: looks like it should be just std php (5.2)
[11:09] Tim_Smart: yay http://gist.github.com/294488
[11:09] Tim_Smart: the github arose from the ashes
[11:10] sztanpet: its not a jit
[11:12] sztanpet: its also not on github yet
[11:13] unomi: http://developers.facebook.com/news.php?blog=1&story=358
[11:13] Tim_Smart: Hmm. Node.js debugger is failing "node.js:26209: Uncaught TypeError: Cannot call method 'charAt' of undefined"
[11:14] unomi: well, I guess its going to undercut the market for zend engine etc
[11:14] sztanpet: nah
[11:14] sztanpet: there are very few people who have use for it imo
[11:14] Tim_Smart: only large co-ops that have massive use-bases
[11:14] unomi: and are those people different from the people who have use for zend engine?
[11:15] Tim_Smart: it can't make IO any faster...
[11:15] sztanpet: zend engine? the vm behind php since version 4?
[11:15] sztanpet: yes
[11:16] unomi: s/zend engine/zend server/
[11:16] sztanpet: zend server is just a ready made bundle of nice things to run php
[11:16] sztanpet: so yes again
[11:17] unomi: yet people pay for it because of opcode caching and performance benefits, no?
[11:17] sztanpet: it uses APC for opcode caching
[11:17] sztanpet: nothing you cant get from everywhere else
[11:18] unomi: anyway, yay for faster code
[11:18] sztanpet: the value is in the support zend is giving
[11:18] micheil: what's the point of placing a C++ app compile for speed behind a threaded web server?
[11:18] sztanpet: hiphop has its owen non-threaded server
[11:18] sztanpet: using libevent
[11:19] Tim_Smart: libev is the awesomesauce
[11:19] sztanpet: not to be confused with libevent
[11:19] Tim_Smart: oh
[11:19] Tim_Smart: are they similar at all?
[11:19] sztanpet: sure they are
[11:20] Tim_Smart: How can you use PHP with libevent?
[11:20] Tim_Smart: does it have a PHP extension?
[11:20] sztanpet: you dont
[11:20] sztanpet: they just have their own webserver built around libevent and interfacing with php
[11:21] sztanpet: just like everything else out there
[11:21] Tim_Smart: oh right
[11:21] bpedro has joined the channel
[11:21] bpedro: hi there
[11:22] unomi: http://github.com/facebook/hiphop-php/wikis still down
[11:22] Tim_Smart: so is the home page
[11:23] bpedro: oh yeah github is down
[11:23] unomi: Site is back to normal. Looking into cause of load spike and ways to mitigate future instances.
[11:23] unomi: 17 minutes ago from API
[11:23] unomi: :|
[11:23] Tim_Smart: Hmm soon I'm going to be switching code hosting...
[11:23] micheil: unomi: there was an update 10mins ago, talking of a few hiccups still
[11:24] sztanpet: im on codebase personally, its not at the "github" level but its usable without hiccups
[11:24] micheil: Tim_Smart: you wouldn't find service like github anywhere else.
[11:24] bpedro: anyone wants to discuss a possible implementation of a module reflection API?
[11:24] unomi: micheil: there are a number of sites like that
[11:24] Tim_Smart: micheil: http://www.assembla.com/catalog?type=public is good
[11:24] micheil: not to the same way github is
[11:25] unomi: what would you like to see?
[11:25] micheil: I don't need to see anything, I'm happy with github.
[11:25] unomi: are you a mac guy?
[11:26] micheil: Granted, there are times when websites will be down, that's just a fact of life, I'm not going to change away from (in my opinion) the best code hosting site around, just because they have a few hiccups
[11:26] micheil: unomi: mac+arch linux
[11:26] unomi: what I am wondering is why you consider it the 'best'
[11:27] Tim_Smart: assembla did make some silly decisions in the past however, which has tainted there presence on the web
[11:27] unomi: anyway, with sites like assembla you can have github + their repos
[11:27] unomi: just set up 2 push targets
[11:27] micheil: unomi: biggest community, easy to navigate, etc.
[11:27] unomi: yeah the community aspect is a strong point
[11:28] Tim_Smart: And the fork queue is amazing
[11:28] Tim_Smart: It's like email for code
[11:28] micheil: exactly
[11:29] jed has joined the channel
[11:30] micheil: I don't need any other tools, github gives them to me, I think what github provides me as a service out weighs any times that they may be down
[11:32] sztanpet: thats very nice, but when you look at another contender and see that its faster, more responsive and you dont miss the extra features of github the decision is pretty simple
[11:32] sztanpet: the same reasons i switched to google chrome
[11:32] micheil: sztanpet: each to your own.
[11:32] sztanpet: ineed
[11:32] Tim_Smart: http://gitorious.org/ Looks like a decent back-up
[11:33] micheil: but I mean, seriously, it's not like github is svn or something.
[11:33] micheil: you can commit locally and push later
[11:33] paulca has joined the channel
[11:33] sztanpet: http://www.codebasehq.com/ have a look at this too if your looking at alternatives
[11:34] sztanpet: micheil sure, thats not the problem, the problem arises when needing some of the basic features
[11:34] micheil: sztanpet: the biggest thing missing: community.
[11:34] Tim_Smart: unomi: Did you get my link to the irc-bot thing?
[11:34] micheil: for private hosting, yeah, sure, codebasehq, I'd rather like
[11:34] unomi: I did, hold let me dl
[11:34] sztanpet: micheil community is only important for non-private things
[11:34] micheil: sztanpet: which is what most of my development is
[11:34] Tim_Smart: unomi: The latest is on github I think
[11:35] unomi: great :)
[11:35] unomi: ill uh, wait a bit
[11:35] sztanpet: thats where we diverge yea micheil, anyway im not saying github is not the best out there, just that switching away because of issues is a valid reason and understandable for some
[11:36] Tim_Smart: unomi: I'll just make a tarball
[11:36] unomi: gitorious does look pretty sweet
[11:37] unomi: simple ui
[11:38] Tim_Smart: http://dl.dropbox.com/u/396394/ircbot_frame.tar.gz
[11:39] unomi: got it, thanks
[11:42] unomi: an gitorious is itself available under agpl
[11:42] micheil: "#github: mojombo: looks like Yahoo spider is DDOSing us"
[11:42] unomi: that should be a quick fix then
[11:43] unomi: assuming it honors robots.txt
[11:43] micheil: and if it isn't, then you have a problem
[11:46] charlenopires has joined the channel
[11:51] Tim_Smart: Yeah they banned yahoo haha
[12:13] unomi: poor yahoo
[12:14] unomi: and the hip hop wiki has been taken private
[12:17] geelen has joined the channel
[12:27] Tim_Smart: modules are pouring in fast http://wiki.github.com/ry/node/modules
[12:36] alex-desktop has joined the channel
[12:40] unomi: its great to see
[12:56] cedricv has joined the channel
[12:57] cedric__ has joined the channel
[13:03] unomi has joined the channel
[13:08] micheil has joined the channel
[13:11] micheil has joined the channel
[13:22] charlenopires has joined the channel
[13:40] jed has joined the channel
[13:49] geelen has joined the channel
[13:50] ijsthijs has joined the channel
[13:50] mahemoff has joined the channel
[14:07] pmuellr has joined the channel
[14:08] kriszyp has joined the channel
[14:10] ijsthijs: is a http "sendBody" not activity? I need to set the timeout to 0 in order to keep my connections open (nodejs server, telnet/browser client) even though I keep sending "pongs" in order to keep them active
[14:25] keeto has joined the channel
[14:26] keeto has left the channel
[14:26] keeto has joined the channel
[14:27] davidsklar has joined the channel
[14:33] paul_ has joined the channel
[14:37] bryanl has joined the channel
[14:42] pdelgallego has joined the channel
[14:46] cedricv has joined the channel
[14:48] steadicat has joined the channel
[14:48] blackdog` has joined the channel
[14:55] binary42 has joined the channel
[14:59] brandon_beacher has joined the channel
[15:05] cloudhead has joined the channel
[15:11] Yuffster has joined the channel
[15:15] paul_ has joined the channel
[15:18] felixge: ijsthijs: can you show that in a test case?
[15:26] paulca has joined the channel
[15:28] paulca has joined the channel
[15:47] Yuffster has joined the channel
[15:49] bentomas has joined the channel
[16:00] mindware has joined the channel
[16:08] charlenopires has joined the channel
[16:14] joshbuddy has joined the channel
[16:21] n8o_ has joined the channel
[16:23] brainproxy has joined the channel
[16:24] steadicat has joined the channel
[16:26] _Ray_ has joined the channel
[16:29] RayMorgan has joined the channel
[16:32] _Ray_ has joined the channel
[16:41] mattly has joined the channel
[16:42] sudoer has joined the channel
[16:43] jtoy has joined the channel
[16:54] dnolen has joined the channel
[17:07] Connorhd_ has joined the channel
[17:07] scudco has joined the channel
[17:13] felixge has joined the channel
[17:13] felixge has joined the channel
[17:20] n8o has joined the channel
[17:20] dnolen_ has joined the channel
[17:26] devinus has joined the channel
[17:34] inimino: deanlandolt_: "offer a configurable map for those folks that *really* want their headers a specific case on the wire" are we talking about request headers or response headers here?
[17:38] felixge has joined the channel
[17:38] felixge has joined the channel
[17:39] felixge: ryah: can I bother you with a promise question? I don't understand the 'process.assert(self._blocking == false);'?
[17:39] bpot has joined the channel
[17:40] felixge: Under what condition does this assert fire, I keep running into it raising an error but I don't understand why
[17:45] sudoer has joined the channel
[17:48] bentomas has left the channel
[17:50] creationix has joined the channel
[17:53] brapse has joined the channel
[17:57] RayMorgan_ has joined the channel
[18:00] eikke has joined the channel
[18:01] RayMorgan has joined the channel
[18:01] davidsklar has joined the channel
[18:03] joshbuddy_ has joined the channel
[18:13] mahemoff has joined the channel
[18:14] aguynamedben has joined the channel
[18:20] jcrosby has joined the channel
[18:22] SlexAxton has joined the channel
[18:22] stephenlb has joined the channel
[18:23] ericflo has joined the channel
[18:28] isaacs_mobile has joined the channel
[18:32] bentomas has joined the channel
[18:34] ryah: felixge: hmm...
[18:49] felixge: ryah: ok, I'll have to look further
[18:50] felixge: ryah: I have a nice hot loading patch which works sweet. But you'll get too many wait() warnings if you go on a hotloading rampage
[18:51] felixge: ryah: http://github.com/felixge/node/commits/hotload
[18:51] ryah: cool
[18:51] felixge: probably the most interesting change is this: http://github.com/felixge/node/commit/20ddf6b623a929506a213971a0468e3313acd038
[18:51] ryah: so i guess we need to make require sync?
[18:51] felixge: I think createModule was causing more problems than it was solving
[18:51] felixge: ryah: would be excellent
[18:51] kennethkalmer has joined the channel
[18:52] ryah: i'm very slow at the moment. trying to use my new computer
[18:52] ryah: haven't figured out copy/paste :)
[18:52] richtaur has joined the channel
[18:52] felixge: ryah: *g*
[18:53] ijsthijs has joined the channel
[18:57] okito has joined the channel
[18:57] richtaur has left the channel
[19:00] jcrosby has joined the channel
[19:00] felixge: ryah: ok, do you want me to work on sync require() ?
[19:00] felixge: ryah: http module loading would continue to rely on wait(), oh well
[19:01] rictic has joined the channel
[19:03] ryah: felixge: yeah, i guess your old patch still applies
[19:04] ryah: i forget what was not good about it
[19:04] felixge: ryah: no, it would probably cause merge conflicts.
[19:04] felixge: but I had to fix one issue with it anyway
[19:04] felixge: ryah: well it was passing all tests, but not working in any real project *g*
[19:04] felixge: ryah: probably bad path resolution or sth
[19:05] isaacs has joined the channel
[19:05] felixge: ryah: anyway, I could re-work it
[19:05] felixge: ryah: but I heard a compelling argument against it: It would cause the entire server to block for hot reloading
[19:06] ijsthijs: felixge: http://pastie.org/809781 this for example
[19:06] felixge: ijsthijs: ?
[19:06] ijsthijs: (few hours back ;)
[19:06] felixge: oh, the test case?
[19:07] ijsthijs: yeah,not sure if that is what it is suppose to do
[19:07] ijsthijs: at least I'd expect the timout to be reset when I send something to a client
[19:13] felixge: ijsthijs: will look into it
[19:13] felixge: ACTION doing accounting right now, hell on earth
[19:14] ijsthijs: ;) ok
[19:20] dnolen has joined the channel
[19:23] jan____: felixge: I saw all your commits, but haven't had time to look at the code yet
[19:24] mattly has joined the channel
[19:25] felixge: jan____: I'm pretty much done : ). Just gotta do /_changes and write the docs
[19:25] felixge: I think it turned out pretty well so far
[19:27] bentomas: felixge: I'm confused, require is synchronous now? I thought ryah was talking about removing the synchronous option for require all-together...
[19:28] jan____: felixge: that's awesome :)
[19:28] felixge: bentomas: nothing is sync now, but we are thinking of making require sync
[19:28] orlandov: i thought require was the only sync function in node
[19:29] orlandov: ACTION wanders into the covnersation
[19:29] RayMorgan has joined the channel
[19:29] deanlandolt_: wait...i thought require /is/ sync now, and just uses wait under the hood?
[19:29] felixge: deanlandolt_: yes
[19:29] felixge: we are talking about making it *truly* sync
[19:30] felixge: using sync FS operations
[19:30] deanlandolt_: aye
[19:30] septiq has joined the channel
[19:30] bentomas: felixge: and this will make writing require.hot a lot easier?
[19:31] felixge: bentomas: nous
[19:31] felixge: * no
[19:31] felixge: require.hot is done
[19:31] felixge: but you cannot do massive hot requiring in parallel
[19:31] qFox has joined the channel
[19:32] felixge: b/c node will complain about too many wait()s
[19:32] bentomas: oh, then why make require synchronous? sorry, apparently I am coming into this decision quite late (stupid work)
[19:32] felixge: caused by the sub-modules that use require
[19:33] felixge: bentomas: I think ryan would like to get rid of wait()
[19:33] felixge: not sure I want that as well, but I don't mind minimizing the use of it
[19:34] bentomas: oh, I thought he wanted to get rid of wait as a means to get rid of synchronous code. but I guess it is because wait is a pain and can be unreliable?
[19:35] felixge: I actually have not seen wait() being unreliable
[19:35] felixge: ryah: what's the exact issue with wait(), outside it's know limitations?
[19:36] teemow has joined the channel
[19:39] felixge: isaacs: cent os? Run ... fast.
[19:39] isaacs: felixge: yeah, i'm not liking it as much as debian
[19:39] isaacs: but my employer uses that for all their servers.
[19:39] isaacs: so it makes sense to use it.
[19:40] felixge: isaacs: yeah, we used to use it for debuggable, but boy am I glad we got away from it :)
[19:43] ijsthijs: we prefer gentoo
[19:43] Tim_Smart has joined the channel
[19:43] nodejs_v8 has joined the channel
[19:45] stephenlb has joined the channel
[19:46] isaacs: centos is fairly user-hostile
[19:46] isaacs: but it seems to be working
[19:46] isaacs: once i figured out how to add rpm archives that actually had useful packages in them, yum got a lot more handy, and it's just ssh anyhow.
[19:47] rictic has joined the channel
[19:48] ijsthijs: ahh crap: Segmentation fault
[19:50] Tim_Smart: ijsthijs: Yeah they happen sometimes
[19:53] Connorhd has joined the channel
[19:54] ijsthijs: yeah I need to make sure it restarts when it happens, luckily I don't didn't make it live yet
[19:54] Tim_Smart: There was a blog post on using it with monit
[19:55] Tim_Smart: So it opens on start-up etc etc
[19:55] ijsthijs: thanks, ill have a look
[19:55] Tim_Smart: Just a thought: node.js would make a awesome torrent tracker
[19:56] felixge: yeah, monit works great
[19:56] felixge: we use it
[19:56] ijsthijs: don't think tpb will switch :p
[19:56] deanlandolt_: Tim_Smart: node.js would make an event better torrent client...or better yet, an http replacement for bittorrent entirely :D
[19:57] orlandov: are there any asynchronous torrent trackers?
[19:57] orlandov: seems like it'd be a great fit
[19:57] Tim_Smart: The most popular track is written in C I think
[19:57] Tim_Smart: *tracker
[19:57] Tim_Smart: opentracker
[19:57] ijsthijs: opentracker for example
[19:57] ijsthijs: we use xbt
[19:58] creationix: where is the tutorial on monit?
[19:58] creationix: I would like to use that myself
[19:59] Tim_Smart: http://kevin.vanzonneveld.net/techblog/article/run_nodejs_as_a_service_on_ubuntu_karmic/
[19:59] Tim_Smart: I think
[19:59] Tim_Smart: no that isn't monit
[20:00] Tim_Smart: Ah awesome: http://wiki.nginx.org/NginxLoadBalanceExample
[20:03] Tim_Smart: I this would suit node better http://wiki.nginx.org/NginxRubyonRailsMongrel
[20:04] Tim_Smart: *I think
[20:10] technoweenie has joined the channel
[20:10] ryah: felixge: wait() is a bad idea :)
[20:10] ryah: was
[20:10] ryah: felixge: it's nondeterminisitic
[20:10] felixge: ryah: why? it's useful
[20:10] felixge: ryah: why is it nondeterministic?
[20:10] ryah: because you can't know what the event loop will do while you wait
[20:11] ryah: we could try to do something crazy like reorder the call stack
[20:11] ryah: on the fly
[20:11] ryah: memcpy the top slow parts of the call stack to the bottom
[20:12] Tim_Smart: felixge: I'm going to play with node / nginx / monit today, I'll let you know how I get on
[20:12] felixge: Tim_Smart: we use all 3, so hit me up if you have problems :)
[20:12] Tim_Smart: no sorry, creationix
[20:12] Tim_Smart: :p
[20:13] stephenlb: Tim_Smart: i've done this as well. excited to see what you come up with.
[20:13] Tim_Smart: but yeah I'll probably will be pinging you at some point
[20:13] felixge: ryah: ok, so the gist of it is that doing it right would be much more complicated and you just don't want that?
[20:13] creationix: Tim_Smart: that's fine, I needed the upstart tutorial too
[20:15] Tim_Smart: I could probably turn the process into a blog post while I'm progressing
[20:17] felixge: ryah: I mean it seems like proper co-routines would be really convenient to have ... : )
[20:18] ryah: meh
[20:18] binary42: ACTION stays quiet.
[20:18] binary42: ACTION makes pictures signifying the actor model using his hands.
[20:19] ryah: we're going to use callbacks and we're going to like it.
[20:19] ryah: ACTION shakes his fist
[20:19] felixge: ryah: I know, I know. I wish I'd have the skills for implementing it, but if nothing else I guess I'd rather have a limited implementation than none at all for now
[20:19] felixge: haha
[20:19] felixge: ryah: well, if we do - then at least let's do it right
[20:19] binary42: I'll say one thing, all or nothing in either direction sucks. Coros are overkill until they fit things just right.
[20:19] felixge: and by right I mean that we keep require.async async, but the regular require would be sync
[20:20] ryah: i don't want coroutines - even if you could :)
[20:20] ryah: there is something beautiful about one execution stack
[20:20] felixge: then we could say that we only support remote module require for require.async
[20:21] ryah: we could just use all async module loading
[20:21] creationix: what's wrong with wrapping your whole program in a single callback
[20:21] felixge: ryah: ouch
[20:21] binary42: ryah: Hate to say it but your deferrables/promises are execution stacks... just ones where you manually allocate stack frames.
[20:21] dnolen has joined the channel
[20:22] dnolen_ has joined the channel
[20:22] felixge: ryah: then please let's do compiler macros :)
[20:22] ryah: no
[20:22] felixge: #require 'http'
[20:22] felixge: :(
[20:23] felixge: damn
[20:23] isaacs: noooo!!! no compiler macros!!
[20:23] felixge: hah
[20:23] deanlandolt_: what if there were a pre-execution hook to resolve all deps?
[20:23] deanlandolt_: so that require could be sync and safe
[20:23] felixge: deanlandolt_: cool idea
[20:23] binary42: felixge: You don't need ryah to support coros actually since he already has something thats transformationally equivalent. It does mean you have to write a compiler though.
[20:23] deanlandolt_: that's what hte module-transport format's all about (so that it can work in the browser)
[20:23] dnolen__ has joined the channel
[20:23] isaacs: at the very least, can we make the compiler macros look like regular javascript?
[20:23] isaacs: require("http")?
[20:24] binary42: pre-execution execution just sounds wrong...
[20:24] deanlandolt_: binary42: heh...fair enough
[20:24] felixge: binary42: For one, I feel brain dead now, but regardless of that it seems tons of work - and I'm lazy
[20:24] felixge: :)
[20:24] deanlandolt_: more like a bundled list of deps that get resolved before execution
[20:24] Tim_Smart: :D http://gist.github.com/295055
[20:24] creationix: ryah: http://pastie.org/809878
[20:25] binary42: felixge: I think coros are a good idea to have but I won't say ryah is wrong either. I just think he is judging coros too differently from everything else already supported.
[20:25] ryah: creationix: yes
[20:25] JimBastard has joined the channel
[20:25] felixge: isaacs: I'd rather not pretend that something looks like JS that is not. I get sick enough looking at eval/with powered DSLs
[20:26] ryah: what if we don't have exports anymore - just load into the global scope
[20:26] inimino: binary42: it's not node's place to extend JavaScript, IMO
[20:26] ryah: load("file.js")
[20:26] ryah: process.addListener('loaded')
[20:26] isaacs: ryah: gaah!
[20:26] isaacs: no
[20:26] felixge: creationix: how would File become part of the local scope?
[20:26] binary42: inimino: It's not an extension of the language though. At all. i.e. look at web workers.
[20:26] isaacs: please can we not dump stuff into the global scope?
[20:26] Tim_Smart: ryah: No, as sometimes you want to hide "helper" methods for the methods you export
[20:26] creationix: require would probably use with internally
[20:26] inimino: binary42: yes, it is. Web Workers aren't coroutines, at all.
[20:26] binary42: inimino: That's literally just a library. Coros can be handled the same way.
[20:26] ryah: then we'll follow the webworker api
[20:27] ryah: i think we're trying to force js in directions it's not supposed to go with sync require and exports
[20:27] inimino: binary42: well, that's not coroutines, but sure, Web Workers in node are great
[20:27] binary42: ryah: If it'd be possible for you to add non-thread bound workers I'd be happy.
[20:27] binary42: Then it's basically a coro.
[20:27] Tim_Smart: creationix: Javascript has a pattern of usually passing the callback directly to "addEventListener", I think we should stick to those
[20:28] Tim_Smart: or w/e the method that needs a callback is
[20:28] isaacs: creationix: what about this? http://gist.github.com/295061
[20:28] isaacs: ryah: ^^
[20:28] ryah: isaacs: requires you to preseve order
[20:28] isaacs: ryah: but that's not too hard.
[20:28] creationix: isaacs: that can get real hairy since your variables don't line up next to their libraries
[20:29] creationix: what happens if you have 10 requires
[20:29] isaacs: creationix: then you do this: :P http://gist.github.com/295061
[20:29] felixge: reminds of writing arrays in Obj-C, which has to be the dumbest shit I've ever seen
[20:30] isaacs: just trying to get around the "yet another hash table" issue.
[20:30] Tim_Smart: Hmm did you see my version above? http://gist.github.com/295055
[20:30] felixge: actually
[20:30] felixge: we could keep our current approach
[20:30] felixge: and just return an empty object from require()
[20:30] felixge: which get's filled once the module is loaded
[20:30] deanlandolt_: isaacs: instead of a string list what about an object whos keys are free-vars of the function?
[20:31] Tim_Smart: felixge: We could return a promise instead
[20:31] felixge: you'd only need a module.addListener('ready') for your top module
[20:31] isaacs: deanlandolt_: gist?
[20:31] felixge: not mouch else would change
[20:31] deanlandolt_: isaacs: http://gist.github.com/295068
[20:31] inimino: ryah: what's the problem with having sync require?
[20:32] felixge: deanlandolt_: would not work unless you initialize all those variables as empty objects
[20:32] inimino: deanlandolt_: that's not really implementable cleanly
[20:32] creationix: if we do allow for async requires, then we need async exports
[20:32] creationix: http://pastie.org/809889
[20:32] elliottcable: lol creationix
[20:32] elliottcable: creationix: have you seen my JESS?
[20:32] deanlandolt_: ugh..you people and your /logic/ :/
[20:32] isaacs: deanlandolt_: inimino said what i was gonna say
[20:32] elliottcable: creationix: it’s a JS preprocessor with similar goals
[20:32] elliottcable: creationix: also, Paws: not a preprocessor, but a full-blown language, sitting on top of JS
[20:33] ryah: i donno.
[20:33] elliottcable: creationix: Jack seems to sit somewhere between those; similar goals to JESS (be JS-y, but more usable), but not just a preprocessor… a new language?
[20:33] ryah: maybe we should just add coroutines
[20:33] creationix: elliottcable: yeah, I'm working on a couple of languages on top of JS too, but not everyone wants to use those
[20:33] isaacs: creationix: you should use gist instead of pastie. forking ftw.
[20:33] elliottcable: ACTION points at what isaacs just said
[20:33] elliottcable: that!
[20:33] ryah: since i already opened the door with the stupid sync require
[20:33] inimino: ugh, let's not add coroutines
[20:33] creationix: isaacs: I know, I'm mad at gist for being down yesterday, I'll get over it soon
[20:33] ryah: apparently we'll never get away with it
[20:33] elliottcable: creationix: /join ##Paws, if you would, I’m curious
[20:34] elliottcable: ryah: don’t do it! nooo!
[20:34] inimino: doing that right is way too much work for too little gain
[20:34] ryah: its either sync loading or coroutines
[20:34] elliottcable: also, “< ryah> since i already opened the door with the stupid sync require”
[20:34] elliottcable: didn’t I say that was a bad idea?
[20:34] ryah: elliottcable: yes
[20:34] elliottcable: ACTION pulls out the ‘told you so’ card
[20:34] ryah: you did
[20:34] elliottcable: ACTION gives it to you with an ‘it’s okay, we still love you’ cookie
[20:34] inimino: heh
[20:35] creationix: ryah: I say break it! async isn't that hard, just different
[20:35] inimino: ryah: what about async require, but supporting require('literal_string') for dependencies?
[20:35] inimino: ryah: would that satisfy everyone, if it was implemented?
[20:36] felixge: inimino: not sure I understand
[20:36] inimino: then we still have async loading, but CommonJS compatibility too
[20:36] inimino: felixge: you call async_require('foo')
[20:36] deanlandolt_: and the "foo" module can do all the sync it wants
[20:36] deanlandolt_: rather, all the sync requires
[20:37] inimino: felixge: it parses foo.js, finds all require('bar') and resolves them all (transitively) asynchronously
[20:37] elliottcable: seems like a good comprimise (though I *hate* `async_require` as a name)… given that we’re stuck with sync, now )-:
[20:37] ryah: we could also just git rid of http module loading
[20:37] felixge: inimino: that's a pre-processor
[20:37] deanlandolt_: why not require.async, per commonjs?
[20:37] inimino: felixge: no it isn't, it's a module loader that does some parsing
[20:37] elliottcable: hahaha
[20:37] elliottcable: it’s a module loarder preprocessor!
[20:38] elliottcable: there!
[20:38] elliottcable: I should put some clothes on.
[20:38] inimino: felixge: it doesn't require any extra pre-deployment step
[20:38] ryah: inimino: no preprocessing
[20:38] felixge: ryah: we need a separate require/require.async implementation anyway, so we could just make remote module loading async-only
[20:38] inimino: ryah: it can be built on top of node easily, why not have it?
[20:38] creationix: how about "load" for async and "require" for sync
[20:39] creationix: require sounds like a declaration and load sounds like a verb
[20:39] isaacs: ryah: http module loading IS pretty nice for installing stuff, though
[20:39] inimino: ryah: my question is just if that solution would satisfy everyone
[20:39] felixge: inimino: it's a preprocessor. If we wanted that we could support it in an "elegant" fashion
[20:39] elliottcable: also, for what it’s worth, I think `from` should be shipped with Node.js *anyway*: http://github.com/elliottcable/from
[20:39] isaacs: course, it sucks that it's broken...
[20:39] Tim_Smart: felixge: Can I look at your monitrc file?
[20:39] felixge: isaacs: I think so too ... but - I never used it so far
[20:39] elliottcable: and it’s an obvious solution, as it works with CommonJS `require()`, *and* is fully async
[20:39] inimino: felixge: it's compatible with existing modules, though, and some other projects already do this
[20:40] felixge: Tim_Smart: link?
[20:40] isaacs: but curl http://foo/bar.tgz | tar -zx && node bar/bar.js; is way less pretty than node http://foo/bar.js
[20:40] elliottcable: so `from` could replace `require.async()`, and we could keep the CommonJS `require()` d-:
[20:40] Tim_Smart: felixge: Can you paste your monitrc file to gist or something, is what I meant :p
[20:40] felixge: isaacs: we could support "sync" loading for the entry module easily - without any wait()
[20:41] felixge: isaacs: maybe that is the most compelling and only interesting use case for it anyway
[20:41] isaacs: felixge: so, the issue is if bar.js doesn't know it's remote, and does require("./blurb")
[20:41] isaacs: now you have to make another http request to http://foo/blurb.js
[20:41] felixge: isaacs: oh, well - that sucks
[20:41] isaacs: right, and that's what node doesn't do.
[20:41] isaacs: probably because it sucks.
[20:42] felixge: Tim_Smart: http://gist.github.com/295082
[20:42] dnolen has joined the channel
[20:42] Tim_Smart: thanks
[20:43] inimino: ACTION will live with whatever happens, gets back to work
[20:43] felixge: So why is everybody against true co-routines?
[20:43] isaacs: but, if we had a good async require story to tell, and it worked with http relative urls, then maybe we could support it, because it wouldn't suck so much.
[20:43] felixge: Would it have any effect on our code if we don't use them for anything but module loading?
[20:43] isaacs: it'd just be, if you want your program to work remotely, use async require.
[20:43] tlrobinson: require.async is what the commonjs async require will be called, btw. you could use that
[20:44] felixge: tlrobinson: we're already using that :)
[20:44] inimino: felixge: because extending JavaScript isn't what node is about... it's an over-complex solution to a simple problem
[20:44] inimino: felixge: that's what we have now, with wait(), and it's broken
[20:44] felixge: inimino: I don't see co-routines as extending JS
[20:44] Tim_Smart: felixge: Are you using upstart?
[20:44] felixge: Tim_Smart: y
[20:45] felixge: inimino: but I guess that depends how you look at it.
[20:45] creationix: well, I just want to have nice simple syntax for async requires. I've got to run, I'll put up a better proposal later.
[20:45] felixge: inimino: if you assume that file i/o is naturally async, then yeah - sync require looks like extending JS
[20:46] inimino: felixge: well, the single threaded execution model is an essential characteristic of JavaScript in the browser and just about everywhere else it is used
[20:46] felixge: ryah: so what about a truly sync require(), and a truly async require.aync()? Remote module loading would only be supported for require.async()
[20:47] isaacs: felixge ++
[20:47] inimino: I'd be perfectly fine with one truly sync require()
[20:47] isaacs: then get rid of wait()
[20:47] inimino: yep
[20:47] felixge: I'd still like the additional require.async() because I think hot code reloading should be async
[20:47] inimino: and async require can be in a module
[20:47] felixge: your server shouldn't take a break while reloading code
[20:48] isaacs: felixge ++, again
[20:48] inimino: agreed
[20:48] bentomas: felixge: definitely
[20:48] isaacs: ACTION is gonna back out of this discussion, and just assume that felixge is handling his pov.
[20:48] inimino: (which you can build today using cat+eval)
[20:49] felixge: inimino: I'd like to make the module system a little more transparent. So you could more easily re-use the parts of node you like
[20:49] felixge: inimino: like resolution of module paths being exposed for everybody to use
[20:49] inimino: felixge: I'm not sure I follow
[20:49] inimino: hm, ok
[20:49] ryah: felixge: how does one do a sync http get?
[20:49] inimino: felixge: well it seems people have diverging opinions on how module should be done, so if it's easier for us to move everything that's not essential into modules I'm all for it
[20:49] felixge: ryah: not at all. Remote module loading would only be supported by require.async()
[20:50] ryah: oh yeah
[20:50] ryah: i mean the problem is that everyone uses require()
[20:50] isaacs: ryah, felixge: then node blarg.js would use require.async
[20:50] isaacs: ryah: so? it wouldn't work if it was relative and http. it doesnt' work today, so nothing lost.
[20:51] ryah: what if i want to do node http://foo.com/bar.js
[20:51] felixge: isaacs: right, I think supporting relative http require is overkill
[20:51] inimino: ryah: require() probably isn't going away, since CommonJS uses it
[20:51] isaacs: ryah: the entry point would alwyas use require.async
[20:51] ryah: and bar.js does require("./blah")
[20:51] felixge: I mean I'd love it, but if a remote module has sub-modules it should use require.async()
[20:51] isaacs: ryah: then it'd fail.
[20:51] inimino: who is actually using remote require()?
[20:51] isaacs: just like it does now.
[20:51] felixge: the only thing this is really useful for is install scripts
[20:51] isaacs: inimino: i'd really like to.
[20:51] inimino: and who else but node supports it?
[20:51] felixge: and if those are a little tricky to write - so be it
[20:51] ryah: inimino: i think node has more traction than commonjs, at this point
[20:52] felixge: inimino: I don't use it
[20:52] isaacs: it'd be great for npm
[20:52] felixge: isaacs: right, but you could build a package manager without
[20:52] isaacs: felixge: true.
[20:52] isaacs: or i could fetch it and bash it.
[20:52] isaacs: like, install with $(http://blahrg/install.sh) or something
[20:53] inimino: ryah: so you'd like to kill off sync require() entirely and get everyone writing modules to use async require only?
[20:53] felixge: I would like this as much as anybody else - but it seems like it's a huge problem for very little results
[20:53] ryah: inimino: which is just my way of saying - let's not pull the "previous unchangable art" card. this is certainly still changable
[20:53] okito has joined the channel
[20:53] ryah: inimino: maybe
[20:54] ryah: felixge: yes let's do that for now
[20:54] felixge: ryah: I would like all module inclusion to be async, but JS is a bad language for it.
[20:54] inimino: ryah: perhaps it is, I think require() has pretty good traction... but if there's an overwhelmingly better solution, it would have a chance
[20:54] ryah: no http sync require
[20:55] isaacs: no http sync nothin
[20:55] isaacs: that's bad.
[20:55] deanlandolt_: but that's what a module transport format is all about
[20:55] felixge: If JS had a way to extract an object's properties as variables into the global scope - we'd not be having this discussion
[20:55] felixge: * into the local scope
[20:55] deanlandolt_: you get your deps in one fell swoop, cache 'em, then run
[20:55] felixge: sorry, bad typo
[20:55] paulca has joined the channel
[20:56] ryah: felixge: so if you want to do the sync require() just redo it with process.fs() ops
[20:56] felixge: isaacs: we can load a url parameter to the node binary sync-ish
[20:56] felixge: ryah: yeah, I got the patch for it, just need to re-work it
[20:56] inimino: ok
[20:56] felixge: ryah: my only question is if you like this: http://github.com/felixge/node/commit/20ddf6b623a929506a213971a0468e3313acd038
[20:57] mikeal has joined the channel
[20:57] felixge: basically making the module caching logic of node much simpler
[20:57] ryah: felixge: one sec
[20:57] inimino: ACTION goes back to work for real
[20:58] elliottcable: regarding ‘overwhelmingly better solution’
[20:58] elliottcable: … http://github.com/elliottcable/from/blob/Master/lib/from.js
[20:58] elliottcable: that is all.
[20:58] elliottcable: ACTION goes to breakfast
[20:58] elliottcable: d-;
[20:58] ryah: felixge: is there supposed to be refs to hotloading stuff?
[20:58] felixge: elliottcable: you gotta change that comment: "This is a complex system" right under "Philosophy"
[20:59] felixge: elliottcable: makes me want to ignore the rest
[20:59] elliottcable: felixge: heh
[20:59] elliottcable: felixge: yes, I know /-:
[20:59] elliottcable: felixge: but I’m not going to lie, that’s why the comment’s there
[20:59] felixge: ryah: no, this is just a basic change that makes hot loading much easier
[20:59] elliottcable: felixge: I sat down and worked out what I want in a module loading system, and, unfortunately, it’s complex. I tried building smaller alternatives, but none of them made me happy.
[20:59] ryah: felixge: looks like there are some 'git rm's in there
[20:59] felixge: ryah: hot loading as implemented on top is really trivial: http://github.com/felixge/node/commit/9f2d653bda911c4a44475ede4a84cfac29155cc5
[20:59] JimBastard: damn this room is busy during the day
[20:59] JimBastard: stupid work
[21:00] felixge: ryah: yeah - because I based it on blaine's patch which I like except for his test cases
[21:00] elliottcable: heh JimBastard, ’sup
[21:00] elliottcable: JimBastard: blame ryah’s timezone
[21:00] felixge: ryah: blaine's patch basically just added local cache to each module
[21:00] felixge: ryah: but also 20mio. test files
[21:00] JimBastard: its cool, im the graveyard shift / .au time manager
[21:00] felixge: ryah: I can clean up the whole history a bit
[21:00] felixge: ryah: I just wanted to leave his credit in there
[21:01] ryah: felixge: so this is something that should be added after blaine's patch?
[21:01] felixge: ryah: http://github.com/felixge/node/commits/hotload
[21:02] felixge: ryah: I used blaine's patch as the base (commit #1). Then I simplified the module system by throwing out createModule (patch #2). And create recursive hot module reloading as patch #3
[21:02] felixge: blaine's module reloading didn't take care of reloading the children
[21:02] felixge: because the parent cache was still inherited
[21:03] ryah: can the simplification be extracted so it applies to ry/master?
[21:03] felixge: ryah: yes, I could do that.
[21:03] ryah: okay
[21:04] felixge: ryah: I can ping you in 10, will you be around?
[21:04] ryah: i mean - glancing at it it looks okay - and i like simplifications :)
[21:04] ryah: yeah
[21:04] felixge: ryah: I understand, the module system is full of subtleties - I wouldn't apply crazy patches like this if I was you either ;)
[21:05] felixge: I'll make it simple, hang on
[21:08] beppu: whois mistermocha
[21:09] beppu: whoops
[21:10] jcrosby has joined the channel
[21:12] hassox has joined the channel
[21:13] stephenlb: heh
[21:16] Connorhd_ has joined the channel
[21:23] creationix has joined the channel
[21:27] steadicat has joined the channel
[21:28] rednul has joined the channel
[21:28] creationix has left the channel
[21:30] felixge: ryah: http://github.com/felixge/node/commit/a5c9127b473bfd779a8a16841f4b79abf7f9c6cf
[21:33] neaf has joined the channel
[21:34] Tim_Smart: felixge: What about un-caching? or have you decided against that?
[21:34] felixge: Tim_Smart: this is just a patch leading up to that. Groundwork so to speak
[21:34] Tim_Smart: ah nice
[21:34] felixge: Tim_Smart: I want hot module reloading, that's the only thing I care about
[21:34] felixge: :)
[21:34] Tim_Smart: :D
[21:36] felixge: Tim_Smart: but it's hard to integrate a branch with multiple commits, so I'm trying just restructuring the commits for ease of review
[21:36] Tim_Smart: Yeah I had a cool syntax for hot-loading: var var = require('./hot').hot('./themodule');
[21:36] Tim_Smart: but async will change things
[21:37] Tim_Smart: For now you can just create a temp duplicate of the module with file, and require it, then delete the temp file
[21:39] felixge: Tim_Smart: I think we'll have require.hot() which is require.async() without cache
[21:39] felixge: Tim_Smart: at least that is what I'm trying to push for
[21:39] Tim_Smart: Ah ok
[21:40] ryah: felixge: brb
[21:40] felixge: Tim_Smart: blaine and I also discussed a potential require.watch() which is a callback that would fire if a module or any of it's sub-modules change. But I'm not sure we can sell that to ryan
[21:40] felixge: :)
[21:41] Tim_Smart: standard require() is fine for app start-up, but require.async would be good for loading stuff on request
[21:41] felixge: Tim_Smart: why would you need hot module loading on startup?
[21:41] felixge: Tim_Smart: I think it's exclusively useful for reloading code after startup, thous async makes the most sense here
[21:41] isaacs: felixge: quick question, when you emit "body" events from the multipart stream, you probably want to strip off the trailing CRLF before the boundary, yes?
[21:42] Tim_Smart: felixge: Lets say you want to make config changes without restarting the server
[21:42] isaacs: like, if a body bit is --boundary\r\nhello, world\r\n--boundary
[21:42] isaacs: then you want to emit "hello, world", and not "hello, world\r\n"
[21:43] felixge: isaacs: yeah, I think I'm doing that - no?
[21:43] isaacs: yeah, it hink so
[21:43] felixge: Tim_Smart: yeah, but those are lame. I actually want to reload 99% of my entire app :)
[21:44] isaacs: i found you can trigger some interesting edge cases by having your stream emit like 1 char at a time.
[21:44] felixge: Tim_Smart: everything except the primitive http server that listens for incoming requests
[21:44] felixge: isaacs: *g*
[21:44] felixge: isaacs: That would suck
[21:44] isaacs: so when it sees a trailing CR, it has to be wise enough to not emit it yet.
[21:44] isaacs: since it might turn into a CRLF+boundary
[21:44] felixge: isaacs: but I believe you, my code is largely real-world driven, I never tried to theoretically break it
[21:45] isaacs: felixge: sure, and if you haven't broken it yet, you might not ever.
[21:45] isaacs: usually the uploaded chunks are pretty big, and it's probabilistically very unlikely that it'd happen to split the boundary anyhow.
[21:45] felixge: isaacs: I would absolutely like a more tight implementation so.
[21:45] isaacs: sine the UA would probably feed the file through in chunks, and then send the boundary in its own chunk.
[21:45] brandon_beacher has joined the channel
[21:46] isaacs: but when you get into proxies and stuff, weird things happen.
[21:46] isaacs: the proxy might declare that http chunks shall be 500bytes, all the time, forever.
[21:46] sudoer has joined the channel
[21:46] isaacs: i don't know why i feel so drawn to problems like this. it's like crack.
[21:47] Tim_Smart: Anyone tries writing node apps in coffeescript? http://jashkenas.github.com/coffee-script/
[21:47] isaacs: addictive, and bad for you.
[21:47] mahemoff has joined the channel
[21:48] felixge: isaacs: I wrote a http client in PHP once. I probably spend 60-70h for it, accounting for imaginary edge cases. Turns out none of my unit tests ended up catching the actual problems people had with it :)_
[21:48] isaacs: hehe
[21:49] felixge: isaacs: not saying that you shouldn't take great care. But it's hard to focus on the right things
[21:49] felixge: ;)
[21:49] isaacs: reminds me of the 500+ line test file for url.js...
[21:49] felixge: hehe
[21:50] felixge: yeah, sometimes less is more. I mean you making multipart better - awesome. But I think having a simple working implementation first is the way to go, refine later
[21:50] isaacs: yeah, i've learned the hard way that the internet is full to the brim of jerks and idiots and crazy wackass specs.
[21:50] isaacs: agred.
[21:51] deanlandolt_: isaacs++ (the jerks and idiots part...but that's why it's important to /ultimately/ have a correct implementation :D)
[21:51] isaacs: everyone should spend some time working at a Big Internet Corp. yahoo and google are great for that. really a great way to learn how to be properly paranoid in your coding.
[21:51] felixge: isaacs: so don't be discouraged. Just allow yourself the luxury to procrastinate on less-critical problems in favor of solving more important ones ;)
[21:51] isaacs: hahaha, sure.
[21:52] isaacs: it turns out, this is actually gonna be pretty handy for me soonish.
[21:52] isaacs: and i know there are some folks using node to parse email now, so it'd be handy for them.
[21:52] felixge: isaacs: I'd like to work for a big internet corp. one day, but they have to relocate head quarters to berlin first ;)
[21:52] isaacs: felixge: you need to move to the internet!
[21:53] felixge: isaacs: well, I think part of the experience is to be in the office with some really smart folks
[21:53] isaacs: i'll keep pestering my government to open its borders.
[21:53] felixge: I really love running my small little company, the only thing I miss is working with very smart people on projects
[21:53] felixge: that's why I do open source I guess
[21:53] felixge: ;)
[21:54] deanlandolt_: felixge: hire some smart people and your in business (it's a /lot/ easier to hire smart people when you're in charge of the hiring decisions!)
[21:56] felixge: deanlandolt_: I don't want to grow bigger than 2 people. It would mean that at least 1 person eventually ends up doing business/management stuff only
[21:56] felixge: and I don't want to be that person
[21:56] deanlandolt_: heh...fair point
[21:56] felixge: and if it's somebody else, then how much running-your-own-company is left?
[21:56] felixge: :)
[21:57] felixge: I'm fine with my business model being absolutely non-scalable for now
[21:57] isaacs: felixge: if you're payin the bills and enjoying it, then you're Doing It Right.
[21:57] felixge: http://transload.it/ might go a different way. But that's a product - I'm cool with that. I'm not cool with a big consulting shop, that's just lame
[21:57] deanlandolt_: i'm a firm believer that companies /shouldn't/ be scalable
[22:00] jcrosby has joined the channel
[22:00] felixge: ACTION taking a beer break with some friends who are over :)
[22:00] felixge: ACTION is a bad host
[22:00] felixge: brb
[22:00] deanlandolt_: yet another perk to running your own shop :D
[22:01] isaacs: ACTION .oO( is not taking a beer break, or at home, or with friends who are over. is sitting in a cubicle. felixge wins. )
[22:01] felixge: isaacs: not sure, is it 11pm where you are?
[22:01] felixge: ;)
[22:01] isaacs: no, it's 14:00 here
[22:02] felixge: my days have no start or end, its a continuous stream of typing stuff on a keyboard :)
[22:02] isaacs: felixge: same here, it's just a matter of where i'm sitting, really
[22:02] felixge: with some sleep, food and socializing mixed in ocassionally (feeling guilty for not being on the computer while doing so)
[22:02] isaacs: but i hear ya
[22:02] felixge: haha
[22:02] isaacs: felixge: go be with real people, not fake internet people, jee
[22:02] isaacs: jeez
[22:02] felixge: ACTION will try
[22:04] geelen has joined the channel
[22:07] rtomayko has joined the channel
[22:09] ryah: felixge: will blaine sign off on this commit?
[22:10] ryah: hows it different from his?
[22:10] elliottcable: felixge: ditto
[22:10] elliottcable: felixge: more code, always more code, lots more code
[22:10] elliottcable: felixge: I’ve turned into a hackercave dweller since starting my interpreters >,>
[22:10] ryah: well whatev. looks good
[22:11] CIA-78: node: 03Felix Geisendörfer 07master * rb73f61a 10/ (src/node.js test/mjsunit/test-module-loading.js): (log message trimmed)
[22:11] CIA-78: node: Simplified module system
[22:11] CIA-78: node: createModule got removed as it was unnecessary and caused issues by
[22:11] CIA-78: node: doing its own cache checks independent of loadModule. Internal modules
[22:11] CIA-78: node: are now the only globally cached modules, all other modules are only
[22:11] CIA-78: node: cached by inheriting their parent modules cache.
[22:11] CIA-78: node: Credits: Module specific cache and a few other diffs by Blaine Cook
[22:11] ryah: look forward to hot reloading patches on top of that :)
[22:11] elliottcable: my desktop is covered by interesting code
[22:12] Tim_Smart: hot loading is teh sex
[22:12] elliottcable: tinyc.c, inimino’s fileIO_cps.js, some Paws example code, the pair of XMPP RFC drafts…
[22:12] JimBastard has joined the channel
[22:12] JimBastard: err noob regex question, why is this fail? replace(/(.+)(\.)/, '\1_tiny_cropped.')
[22:12] JimBastard: it works in ruby but not JS
[22:13] JimBastard: im assuming i need to escape something?
[22:13] elliottcable: JimBastard: it looks like boobs! d-:
[22:13] JimBastard: i know man, my first thoughts too
[22:13] elliottcable: JimBastard: … not that that was relevant to your question.
[22:13] elliottcable: JimBastard: … just sayin’.
[22:13] hassox has joined the channel
[22:13] elliottcable: JimBastard: it *looks* like it should work.
[22:13] elliottcable: JimBastard: how do you mean, ‘works in Ruby but not in JS?’ What, exactly, doesn’t work?
[22:13] Tim_Smart: JimBastard: Test case, test case
[22:14] deanlandolt_: JimBastard: use $1
[22:14] JimBastard: its doing the thing in firebug where it shows a symbol instead of text
[22:14] deanlandolt_: instead of \1
[22:14] isaacs: JimBastard: use $1, not \1
[22:14] JimBastard: thanks
[22:14] elliottcable: hahahahahahaha
[22:14] isaacs: \1 is for in-the-regex replacements.
[22:14] isaacs: s/replacements/matches/
[22:14] Tim_Smart: I thought he was replacing the slash lol
[22:14] elliottcable: didn’t realize that that was intended to be a part of the regex d-:
[22:14] elliottcable: ditto Tim_Smart
[22:14] isaacs: v8> you here?
[22:14] elliottcable: in JS< \1 is actually a Unicode literally, right?
[22:14] Tim_Smart: ACTION knows no ruby
[22:15] isaacs: guess not.
[22:15] Tim_Smart: nodejs_v8: hey
[22:15] nodejs_v8: Tim_Smart: Exception: ReferenceError: hey is not defined
[22:15] inimino: js> "hi isaacs"
[22:15] gbot2: inimino: "hi isaacs"
[22:15] elliottcable: nodejs_v8: /(.+)(\.)/.exec('\1_tiny_cropped.')
[22:15] nodejs_v8: elliottcable: ["_tiny_cropped.", "_tiny_cropped", "."]
[22:15] elliottcable: hah it is!
[22:15] elliottcable: U+0001 “START OF HEADING”
[22:15] isaacs: nodejs_v8: /(fo+)bar\\1/.exec("foooooobarfoooooo")
[22:15] nodejs_v8: isaacs: null
[22:15] isaacs: nodejs_v8: /(fo+)bar\1/.exec("foooooobarfoooooo")
[22:15] nodejs_v8: isaacs: ["foooooobarfoooooo", "foooooo"]
[22:15] isaacs: there ya go
[22:16] elliottcable: only need \\1 if you’re in a string literal
[22:16] isaacs: right
[22:16] isaacs: otherwise you'er escaping the \ for the regex engine
[22:16] elliottcable: nodejs_v8: new(RegExp)("(fo+)bar\\1").exec("foooooobarfoooooo")
[22:16] nodejs_v8: elliottcable: ["foooooobarfoooooo", "foooooo"]
[22:16] JimBastard: yeah that totally worked thanks you isaacs elliottcable
[22:17] isaacs: hey, whoa, guess \1 works in the replacement, too
[22:17] Tim_Smart: you might need to \\1 though
[22:17] isaacs: oh, no, it's a unicode
[22:17] elliottcable: isaacs: huh? No, it doesn’t.
[22:17] elliottcable: isaacs: yeah, U+0001
[22:17] isaacs: yeah, misread the response from the nodejs_v8
[22:17] elliottcable: isaacs: ASCII SOH
[22:17] JimBastard: $l worked over /l
[22:18] Tim_Smart: nodejs_v8: "testbam".replace(/bam/, '\\1hehe');
[22:18] nodejs_v8: Tim_Smart: "test\1hehe"
[22:18] Tim_Smart: nodejs_v8: "testbam".replace(/bam/, '$1hehe');
[22:18] nodejs_v8: Tim_Smart: "test$1hehe"
[22:18] elliottcable: woah fail nodejs_v8
[22:18] elliottcable: it should prettyprint proper escapes
[22:18] inimino: js> "\\1"
[22:18] gbot2: inimino: "\1"
[22:18] elliottcable: who wrote that? they should use Percival for printing
[22:18] Tim_Smart: percival, link?
[22:19] elliottcable: Tim_Smart: http://github.com/elliottcable/Percival
[22:19] Tim_Smart: I need to re-write it though, it is a little messy atm. Will use the framework I built
[22:19] elliottcable: Tim_Smart: it uses http://github.com/elliottcable/Yarn for output, though Yarn doesn’t support IRC colour codes yet.
[22:19] JimBastard: you build a framework already Tim_Smart ?
[22:19] Tim_Smart: JimBastard: IRC bot framework
[22:20] JimBastard: lolz
[22:21] JimBastard: when i hear irc bot the first thing that pops into my mind is a python egg-drop program
[22:21] JimBastard: aight back to work i'll be back on when i get home or get stuck again
[22:21] JimBastard has left the channel
[22:22] Tim_Smart: Hmm my blog article is coming along...
[22:22] Tim_Smart: micheil: ping
[22:23] felixge: ryah: http://github.com/felixge/node/commit/da86fdd050e51967ea2af971428332f1b01e70b0
[22:24] felixge: ryah: this will cause promise.wait() errors if too many async reloads happen at the same time. But that will get fixed with making require() itself truly async
[22:24] felixge: * promise.wait() warnings
[22:24] felixge: ryah: if you want those changes first, let me know. But the implementation itself is good
[22:24] felixge: (good as in: passes unit tests and works in a complex app with 70 sub-modules during heavy I/O)
[22:26] ryah: felixge: shouldn't this be done with an env var instead of require.hot() ?
[22:26] felixge: ryah: *confused*
[22:26] brainproxy has joined the channel
[22:26] felixge: ryah: explain
[22:26] ryah: felixge: NODE_HOT_RELOAD=1 ./node myapp.js
[22:27] felixge: ryah: no, that's not how it works. You cannot reload an entire app
[22:27] ryah: would make all requires call require.hot()
[22:27] felixge: you can only reload sub-modules of an app
[22:27] felixge: and determining when to do this is up to the user at this point
[22:27] ryah: hm okay
[22:27] elliottcable: felixge’s seems smarter. env variable? Why?
[22:28] felixge: blaine and I discussed an idea of adding require.watch() which would fire when a module or any of its child modules change. But that's a bit more complex
[22:28] bentomas has left the channel
[22:28] felixge: right now my preferred approach is to wait for an outside event (like sending SIGUSR1 to the process), and then reload the request handling module
[22:28] felixge: so the main module which defines the http server stays as it is
[22:28] brandon_beacher has joined the channel
[22:29] felixge: but all the logic for handling requests gets reloaded
[22:29] Tim_Smart: Do you think I should add this to the modules wiki? http://gist.github.com/294488
[22:30] evilhackerdude has joined the channel
[22:31] felixge: Tim_Smart: what's that, recursive readdir?
[22:31] rektide: xattr isnt a part of POSIX is it?
[22:32] rektide: is there any cross-os xattr spec ?
[22:32] rektide: (file extended attributes)
[22:32] ryah: felixge: what happens if i do require.hot(require.main)
[22:32] felixge: ryah: you get a fresh reference to the main module
[22:32] felixge: ryah: but that is pretty much useless, if the main module declares a http server, you cannot replace it without downtime
[22:32] Tim_Smart: felixge: Ya. It returns the entire tree in a object orientated format
[22:33] felixge: Tim_Smart: sure, add it. Maybe under a "Snippets" section if the author doesn't bother to make a formal module out of it
[22:34] Tim_Smart: felixge: Right, I might make make a repo for it. I still need to modify it some more
[22:34] jasondavies has joined the channel
[22:34] felixge: ryah: I think the pattern for hot module reloading is always going to be this. You have 1 main module that declares your http/tcp server. This module delegates all requests to require('request_handler').handle
[22:35] felixge: ryah: this is some actual code I'm using: https://gist.github.com/f0c7aa6ba82832b25bbb
[22:35] felixge: it probably explains the way I see hot module reloading the best
[22:36] felixge: (I should also reload the references to 'config' and stuff on the SIGUSR1, but that stuff doesn't actually change that much so I didn't do it so far)
[22:36] ryah: felixge: hm
[22:36] ryah: felixge: yeah, sorry i hadn't been following the reloading stuff much
[22:37] felixge: ryah: what did you have in mind? A universal reloading that "just works"?
[22:37] ryah: i guess the problem is the refences - irght?
[22:37] ryah: maybe we should be thinking about reloading whole processes
[22:37] felixge: ryah: the problem is the object instances. You cannot replace them on the fly
[22:37] felixge: ryah: I don't think that's easily doable
[22:38] ryah: e.g. having a pre-fork server with N processes, reloading them one at a time
[22:38] RayMorgan: that is how unicorn (ruby server) works..
[22:38] isaacs: ryah: that'd be the Right Thing, i think.
[22:38] felixge: ryah: isn't that web worker territory?
[22:38] felixge: maybe I'm not understanding that properly
[22:39] ryah: felixge: yeah - right now we can't prefork
[22:39] RayMorgan: I think these are 2 different issues though
[22:39] isaacs: so, you could set up a controller program in node that creates a bunch of child processes, and gets notified when ther'es a change to any file in its working dir. then, every time a file changes, it stops and restarts each of its children one at a time.
[22:40] felixge: ryah: well, I wouldn't mind alternatives for hot reloading. But imho that patch I linked to is useful as it allows to re-load a module during runtime
[22:40] felixge: within a single process
[22:40] felixge: if you have multiple processes, you just have an alternative way to reload
[22:40] isaacs: the issue is that you want require("foo") to be the same foo anywhere it's loaded within a given process.
[22:40] isaacs: felixge: right.
[22:40] isaacs: i don't think there's a way to reload all the refs and also reload within a single process.
[22:40] isaacs: so maybe the story is, "if you care about that, don't use it."
[22:40] felixge: me netiher
[22:41] felixge: unless we seriously go under the v8 hood
[22:41] isaacs: ACTION doesn't want to see that happen.
[22:41] Tim_Smart: felixge: I made a module that could change a reference on the fly
[22:41] Tim_Smart: using process.mixin
[22:41] felixge: Tim_Smart: Could it replace a running http server?
[22:42] felixge: (without taking it down)
[22:42] Tim_Smart: felixge: In what way? I'll see if I can find the code
[22:43] felixge: Tim_Smart: my use case: I have file uploads. Those may run for an hour at a time. But I still want to be able to update my code without canceling anybodies upload
[22:44] Tim_Smart: Well you obviously can't replace a reference that has already been executed, you can't change the past
[22:44] Tim_Smart: but if code was in a callback, it would change, yes
[22:44] felixge: Tim_Smart: exactly, that's the limitiation we are talking about
[22:45] felixge: since we can't replace past references, we gotta life with the next best thing: Replace future ones
[22:45] felixge: ;)
[22:45] felixge: that's what my patch does
[22:45] jed has joined the channel
[22:45] felixge: jed: heya :)
[22:45] RayMorgan: and you only want to replace future calls... in flight calls should remain on the same exec path
[22:46] jed: g'morning, felixge.
[22:47] felixge: jed: ハローキティ
[22:47] jed: felixge: heh. not too bad!
[22:47] felixge: ACTION giggles
[22:48] ryah: ACTION suspects felix is drunk :)
[22:48] markwubben: hey guys. running 0.1.27 on osx 10.6, trying to make an https request. it fails inside http.js when trying to call client.tcpSetSecure() ?
[22:48] felixge: ryah: I used copy & paste on those beer bottles, big mistake ;)
[22:48] jed: felixge: don't forget to cover your mouth when you giggle.
[22:50] felixge: actually, I blame google for giving me the japenese characters for "hello kitty" instead of the characters for just "hello"
[22:51] isaacs: markwubben: did it compile with tls support?
[22:51] markwubben: didn't do anything specific
[22:51] markwubben: gnutls >= 2.5 ok when i run configure though
[22:51] jed: felixge: your story doesn't hold up: http://translate.google.com/#en|ja|hello
[22:52] felixge: jed: http://www.google.com/search?hl=en&esrch=FT1&q=hello+japanese+characters&aq=0&aqi=g1&oq=hello+japanese+char
[22:52] geelen has joined the channel
[22:52] felixge: jed: click the links, the only useful one was the hello kitty one :)
[22:53] jed: i should try using that as a salutation this morning and see what people do.
[22:53] markwubben: isaacs: anything specific i need to do to compile with tls?
[22:54] isaacs: markwubben: gist?
[22:54] isaacs: and you're giving it the format and cert and everything?
[22:55] markwubben: isaacs: connection.setSecure("X509_PEM"), connects to port 443
[22:55] markwubben: (copied from restler)
[22:56] mahemoff_ has joined the channel
[22:57] markwubben: isaacs: configure log: http://gist.github.com/295235
[22:57] isaacs: can you gist your code, i mean?
[22:58] markwubben: it's a bit abstract and spread out. let me write a simple reduction instead
[22:58] felixge: ryah: anyway, I can see why you might not want to merge any more patches from me tonight ;)
[22:58] ryah: :)
[22:59] isaacs: felixge: the commit history is a fright, but if you feel like checking it out, this seems to be working pretty well: http://github.com/isaacs/node/blob/multipart-update-wip/lib/multipart2.js
[22:59] isaacs: it parses your unicycle message, and if i had a base64 decoder, i could even save the attachment.
[23:00] felixge: isaacs: now I don't think I'm as drunk as ryan thinks I am, but this seems like something I want to do with none of my cells busy processing toxins
[23:00] felixge: ;)
[23:00] Tim_Smart: isaacs: have you tried btoa()
[23:00] Tim_Smart: not sure if v8 has it
[23:00] isaacs: hahaha
[23:00] isaacs: Tim_Smart: haven't even looked around.
[23:00] isaacs: felixge: i'll pretty it up a bit, and email it so you can see it when you're 100% sober.
[23:01] felixge: isaacs: cool, thanks. I think I'll learn more when I actually play with it
[23:01] isaacs: yeah
[23:01] bryanl has joined the channel
[23:01] isaacs: the api is a bit different.
[23:01] isaacs: you get partBegin and partEnd events for each part, and you can always sniff stream.part to see what it's currently emitting body chunks for.
[23:01] isaacs: stream.part.parent has the containing message, whihc may itself be a part of some other containing message, etc.
[23:01] Tim_Smart: isaacs: Shame, btoa is a MDC thing https://developer.mozilla.org/en/DOM/window.btoa
[23:02] isaacs: Tim_Smart: ah, yeah, that'd be handy
[23:02] felixge: isaacs: this is because you try to keep the API simple for nested parts?
[23:02] isaacs: felixge: yeah, and also to work even if it's not a multipart message.
[23:02] Tim_Smart: isaacs: I can make a C++ addon for base64 if you wnt
[23:02] Tim_Smart: *want
[23:02] isaacs: if it's not multipart, it'll just act like a multipart message with a single part.
[23:03] isaacs: Tim_Smart: if you feel like it, but don't feel obligated. i think there are some js implementations floating about, too
[23:03] felixge: isaacs: sounds good. I'll give it a spin tomorrow, email me
[23:03] Tim_Smart: meh JS implementations of hashing seems silly to me
[23:03] Tim_Smart: hashing needs to be fast :p
[23:03] isaacs: Tim_Smart: now, if you wanted to do the full-fledged CommonJS ByteString and ByteArray classes as an add-on for node, that'd be sweet.
[23:03] isaacs: Tim_Smart: yeah, i agree.
[23:04] isaacs: felixge: sure, will do :)
[23:04] Tim_Smart: well I'm sure a decent C++ library is around
[23:04] isaacs: Tim_Smart: you could probably grab the ByteString/ByteArray implementation from narwhal-v8
[23:05] isaacs: unroll the narwhal macros, and it'd probably just work pretty easily.
[23:05] markwubben: isaacs: http://gist.github.com/295246
[23:05] markwubben: (works with port 80 and no setSecure)
[23:05] felixge: Tim_Smart: I think net2 will have decent bytearray support via buffers
[23:08] jspiros has joined the channel
[23:09] isaacs: markwubben: what do you get when you do $ node test/mjsunit/test-tcp-tls.js
[23:10] markwubben: isaacs: heh, "Not compiled with TLS support"
[23:11] isaacs: ryah: hey, this looks interesting, i'm seeing it as well.
[23:11] isaacs: ryah: it says that gnutls is "ok" in the ./configure, but you can't actually use it.
[23:12] isaacs: setSecure isn't set up
[23:15] ryah: yeah https client is fucked up
[23:15] isaacs: ahh... ok, looks like you also need gpg-error
[23:16] isaacs: if i'm reading wscript right.
[23:16] isaacs: ACTION can't read python. no curly braces.
[23:16] Tim_Smart: Haha python is awesome
[23:18] sudoer has joined the channel
[23:18] isaacs: markwubben: you need libgpg-error to be available at either /usr/lib or /usr/local/lib
[23:19] isaacs: markwubben: http://github.com/isaacs/node/blob/master/wscript#L130-139
[23:22] markwubben: isaacs: ah, i probably have it in /opt (macports)
[23:22] jcrosby has joined the channel
[23:22] isaacs: yeah
[23:22] isaacs: it's lame
[23:22] isaacs: i had it in my homebrew folder.
[23:22] isaacs: ACTION really has got to get around to installing homebrew into /usr/local...
[23:24] markwubben: isaacs: bingo! my test script works, let's see how the twitter api proxy is doing
[23:24] jspiros has joined the channel
[23:25] isaacs: sweet!
[23:26] brandon_beacher has joined the channel
[23:27] RayMorgan_ has joined the channel
[23:27] markwubben: isaacs: cheers, it's working. until my dojo.Deferred gets called twice, but that's something for me to fix
[23:41] jed has joined the channel
[23:53] isaacs: ryah: ping
[23:53] isaacs: ryah: you get a chance to look at the header wrapping thing?
[23:57] teemow has joined the channel
[23:58] kriszyp has joined the channel
[23:59] RayMorgan has joined the channel